diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index dbc1bd418c3b..f1ee9d09833d 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 3.11.1 +ENV RC_VERSION 3.12.0 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history-manual.json b/.github/history-manual.json index 87583c83bfa9..da4c6418600d 100644 --- a/.github/history-manual.json +++ b/.github/history-manual.json @@ -56,5 +56,12 @@ "contributors": [ "sampaiodiego" ] + }], + "3.12.0-rc.3": [{ + "title": "[FIX] Security Hotfix (https://docs.rocket.chat/guides/security/security-updates)", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] }] } diff --git a/.github/history.json b/.github/history.json index aa889cac9931..f977956d1a66 100644 --- a/.github/history.json +++ b/.github/history.json @@ -55308,6 +55308,1280 @@ ] } ] + }, + "3.12.0-rc.0": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0-alpha.4655", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "20838", + "title": "[NEW] Cloud Workspace bridge", + "userLogin": "d-gubert", + "description": "Adds the new CloudWorkspace functionality.\r\n\r\nIt allows apps to request the access token for the workspace it's installed on, so it can perform actions with other Rocket.Chat services, such as the Omni Gateway.\r\n\r\nhttps://github.com/RocketChat/Rocket.Chat.Apps-engine/pull/382", + "milestone": "3.12.0", + "contributors": [ + "d-gubert", + "geekgonecrazy" + ] + }, + { + "pr": "20832", + "title": "[NEW] Statistics about language usage", + "userLogin": "g-thome", + "description": "track what languages get picked the most as preferred ui language.", + "contributors": [ + "g-thome", + "pierre-lehnen-rc", + "sampaiodiego" + ] + }, + { + "pr": "20014", + "title": "[FIX] Custom OAuth provider creation from env vars", + "userLogin": "pierreozoux", + "contributors": [ + "pierreozoux", + "web-flow" + ] + }, + { + "pr": "20843", + "title": "Bump Livechat Widget", + "userLogin": "renatobecker", + "description": "Update Livechat version to `1.8.0` .", + "milestone": "3.12.0", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "20738", + "title": "Improve: Add more API tests", + "userLogin": "r0zbot", + "description": "Add end-to-end tests for untested endpoints.", + "contributors": [ + "r0zbot", + "web-flow", + "pierre-lehnen-rc" + ] + }, + { + "pr": "20834", + "title": "[FIX] Atlassian Crowd login with 2FA enabled", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "20840", + "title": "[FIX] CAS login failing due to TOTP requirement", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "20696", + "title": "[FIX] CORS config not accepting multiple origins", + "userLogin": "g-thome", + "description": "always include only one value in access-control-allow-origin", + "contributors": [ + "g-thome", + "sampaiodiego" + ] + }, + { + "pr": "20833", + "title": "[FIX] height prop on departments agents table", + "userLogin": "dougfabris", + "description": "![image](https://user-images.githubusercontent.com/27704687/108572412-fbf83f80-72f0-11eb-801a-5f659000325d.png)", + "milestone": "3.12.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "20815", + "title": "[FIX] Quoted messages from message links when user has no permission ", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "20830", + "title": "[FIX] Omnichannel agents are unable to access the chat queue on the sidebar", + "userLogin": "rafaelblink", + "milestone": "3.12.0", + "contributors": [ + "rafaelblink", + "renatobecker", + "web-flow" + ] + }, + { + "pr": "20216", + "title": "[FIX] Several Slack Importer issues", + "userLogin": "pierre-lehnen-rc", + "description": "- Fix: Slack Importer crashes when importing a large users.json file\r\n- Fix: Slack importer crashes when messages have invalid mentions\r\n- Skip listing all users on the preparation screen when the user count is too large.\r\n- Split avatar download into a separate process.\r\n- Update room's last message when the import is complete.\r\n- Prevent invalid or duplicated channel names\r\n- Improve message error handling.\r\n- Reduce max allowed BSON size to avoid possible issues in some servers.\r\n- Improve handling of very large channel files.", + "milestone": "3.12.0", + "contributors": [ + "pierre-lehnen-rc", + "web-flow" + ] + }, + { + "pr": "20826", + "title": "Regression: Fix loadHistory method being called multiple times", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20772", + "title": "[FIX] Adding the accidentally deleted tag template, used by other templates", + "userLogin": "yash-rajpal", + "description": "Adding back accidentally deleted tag Template.", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20829", + "title": "Regression: Fix notification worker not firing", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20800", + "title": "[FIX] Remove warning problems from console", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "20739", + "title": "[FIX] Missing height on departments agents table", + "userLogin": "dougfabris", + "description": "![image](https://user-images.githubusercontent.com/27704687/107807002-510ee100-6d46-11eb-86e9-d65da7ab4129.png)", + "milestone": "3.12.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "20744", + "title": "[FIX] Missing setting to control when to send the ReplyTo field in email notifications", + "userLogin": "matheusbsilva137", + "description": "- Add a new setting (\"Add Reply-To header\") in the Email settings' page to control when the Reply-To header is used in e-mail notifications;\r\n- The new setting is turned off (`false` value) by default.", + "contributors": [ + "matheusbsilva137", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "20827", + "title": "[IMPROVE] Make message field required in Omnichannel Triggers form", + "userLogin": "rafaelblink", + "contributors": [ + "rafaelblink", + "renatobecker", + "web-flow" + ] + }, + { + "pr": "20814", + "title": "[IMPROVE] New chat started system message for Omnichannel conversations", + "userLogin": "rafaelblink", + "contributors": [ + "rafaelblink", + "renatobecker", + "web-flow" + ] + }, + { + "pr": "20549", + "title": "[NEW] Button to unset Slackbridge's importIds", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "web-flow" + ] + }, + { + "pr": "20740", + "title": "[FIX] External systems not being able to change Omnichannel Inquiry priorities ", + "userLogin": "renatobecker", + "description": "Due to a wrong property name, external applications were not able to change the priority of Omnichannel Inquires.", + "milestone": "3.11.2", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "20727", + "title": "[FIX] Room owner not being able to override global retention policy", + "userLogin": "g-thome", + "description": "use correct permissions to check if room owner can override global retention policy", + "milestone": "3.11.2", + "contributors": [ + "g-thome" + ] + }, + { + "pr": "20725", + "title": "[FIX] Threads Issues", + "userLogin": "ggazzo", + "milestone": "3.11.2", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20447", + "title": "[IMPROVE] Add symbol to indicate apps' required settings in the UI", + "userLogin": "matheusbsilva137", + "description": "- Apps are able to define **required** settings. These settings should not be left blank by the user and an error will be thrown and shown in the interface if an user attempts to save changes in the app details page leaving any required fields blank;\r\n![prt_screen_required_app_settings_warning](https://user-images.githubusercontent.com/36537004/106032964-e73cd900-60af-11eb-8eab-c11fd651b593.png)\r\n\r\n - A sign (*) is added to the label of app settings' fields that are required so as to highlight the fields which must not be left blank.\r\n![prt_screen_required_app_settings](https://user-images.githubusercontent.com/36537004/106014879-ae473900-609c-11eb-9b9e-95de7bbf20a5.png)", + "contributors": [ + "matheusbsilva137", + "web-flow" + ] + }, + { + "pr": "20704", + "title": "[FIX] E2E issues", + "userLogin": "ggazzo", + "milestone": "3.12.0", + "contributors": [ + "ggazzo", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "20793", + "title": "[IMPROVE] Customize announcement", + "userLogin": "im-adithya", + "description": "Included new variables in customizable ones", + "contributors": [ + "im-adithya", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "20757", + "title": "Language update from LingoHub 🤖 on 2021-02-15Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "sampaiodiego" + ] + }, + { + "pr": "20573", + "title": "[IMPROVE] Selector for default custom oauth key field", + "userLogin": "paulobernardoaf", + "milestone": "3.12.0", + "contributors": [ + "paulobernardoaf", + "web-flow" + ] + }, + { + "pr": "20663", + "title": "[FIX] Event emitter warning", + "userLogin": "sampaiodiego", + "milestone": "3.12.0", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "20666", + "title": "[FIX] Increasing unread counter twice for new threads in DMs or with mentions", + "userLogin": "KevLehman", + "description": "- Unread messages count won't be incremented when the message sent is on a thread (thread count is treated different)", + "contributors": [ + null + ] + }, + { + "pr": "20801", + "title": "[FIX] Message payload from `__my_messages__` stream", + "userLogin": "ggazzo", + "milestone": "3.12.0", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20799", + "title": "Mixed client and server code on Storybook", + "userLogin": "tassoevan", + "description": "For Storybook to work, we've mocked all modules under `**/server/`, thus making them suitable to hold all code that refers Node.js modules. This implies some duplication, between `client/` and `server/` modules, mediated by modules under `libs/`.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "20606", + "title": "[FIX] Default Attachments - Show Full Attachment.Text with Markdown", + "userLogin": "aditya-mitra", + "description": "Removed truncating of text in `Attachment.Text`. \r\nAdded `Attachment.Text` to be parsed to markdown by default.\r\n\r\n### Earlier\r\n![earlier](https://user-images.githubusercontent.com/55396651/106910781-92d8cf80-6727-11eb-82ec-818df7544ff0.png)\r\n\r\n### Now\r\n\r\n![now](https://user-images.githubusercontent.com/55396651/106910840-a126eb80-6727-11eb-8bd6-d86383dd9181.png)", + "contributors": [ + "aditya-mitra", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "19954", + "title": "[IMPROVE] Added auto-focus for better user-experience.", + "userLogin": "Darshilp326", + "contributors": [ + "Darshilp326", + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "20185", + "title": "[FIX] Remove duplicate getCommonRoomEvents() event binding for starredMessages", + "userLogin": "aKn1ghtOut", + "description": "The getCommonRoomEvents() returned functions were bound to the starredMessages template twice. This was causing some bugs, as detailed in the Issue mentioned below.\r\nI removed the top events call that only bound the getCommonRoomEvents(). Therefore, only one call for the same is left, which is at the end of the file. Having the events bound just once removes the bugs mentioned.", + "contributors": [ + "aKn1ghtOut" + ] + }, + { + "pr": "19645", + "title": "[FIX] star icon was visible after unstarring a message", + "userLogin": "bhavayAnand9", + "contributors": [ + "bhavayAnand9", + "sampaiodiego", + "web-flow", + "MartinSchoeler" + ] + }, + { + "pr": "20785", + "title": "[FIX] Admin cannot clear user details like bio or nickname", + "userLogin": "yash-rajpal", + "description": "When the API users.update is called to update user data, it passes data to saveUser function. Here before saving data like bio or nickname we are checking if they are available or not. If data is available then we are saving it, but we are not doing anything when data isn't available.\r\n\r\nSo unsetting data if data isn't available to save. Will also fix bio and other fields. :)", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20618", + "title": "[FIX] Default Attachments - Remove Extra Margin in Field Attachments", + "userLogin": "aditya-mitra", + "description": "A large amount of unnecessary margin which existed in the **Field Attachments inside the `DefaultAttachments`** has been fixed.\r\n\r\n### Earlier\r\n\r\n![earlier](https://user-images.githubusercontent.com/55396651/107056792-ba4b9d00-67f8-11eb-9153-05281416cddb.png)\r\n\r\n### Now\r\n\r\n![now](https://user-images.githubusercontent.com/55396651/107057196-3219c780-67f9-11eb-84db-e4a0addfc168.png)", + "contributors": [ + "aditya-mitra" + ] + }, + { + "pr": "20408", + "title": "[FIX] Selected messages don't get unselected", + "userLogin": "im-adithya", + "description": "https://user-images.githubusercontent.com/64399555/105844776-c157fb80-5fff-11eb-90cc-94e9f69649b6.mp4", + "contributors": [ + "im-adithya", + "web-flow", + "gabriellsh" + ] + }, + { + "pr": "20750", + "title": "[IMPROVE] Better Presentation of Blockquotes", + "userLogin": "aditya-mitra", + "description": "Changed the values of `margin-top` and `margin-bottom` for *first* and *last* childs in blockquotes to increase readability.\r\n\r\n### Before\r\n\r\n![before](https://user-images.githubusercontent.com/55396651/107858662-3e3a0080-6e5b-11eb-8274-9bd956807235.png)\r\n\r\n### Now\r\n\r\n![now](https://user-images.githubusercontent.com/55396651/107858471-480f3400-6e5a-11eb-9ccb-3f1be2fed0a4.png)", + "contributors": [ + "aditya-mitra" + ] + }, + { + "pr": "17968", + "title": "[FIX] Incorrect display of \"Reply in Direct Message\" in MessageAction", + "userLogin": "abrom", + "description": "[FIX] Incorrect display of \"Reply in Direct Message\" in MessageAction", + "milestone": "3.10.0", + "contributors": [ + "abrom", + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "20737", + "title": "[FIX] Save user password and email from My Account", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20745", + "title": "[FIX] Don't ask again not rendering", + "userLogin": "gabriellsh", + "milestone": "3.12.0", + "contributors": [ + "gabriellsh", + "web-flow" + ] + }, + { + "pr": "20390", + "title": "[FIX] Retry icon comes out of the div", + "userLogin": "im-adithya", + "description": "Changed the height of the div container.", + "contributors": [ + "im-adithya", + "web-flow", + "tiagoevanp" + ] + }, + { + "pr": "20798", + "title": "[FIX] Regenerate token modal on top of 2FA modal", + "userLogin": "gabriellsh", + "milestone": "3.12.0", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "20366", + "title": "[IMPROVE] Check Livechat message length through REST API endpoint", + "userLogin": "yash-rajpal", + "description": "Added checks for message length for livechat message api, it shouldn't exceed specified character limit.", + "milestone": "3.12.0", + "contributors": [ + "yash-rajpal", + "renatobecker", + "web-flow" + ] + }, + { + "pr": "20607", + "title": "Chore: Disable Sessions Aggregates tests locally", + "userLogin": "KevLehman", + "description": "Disable Session aggregates tests in local environments\r\nFor context, refer to: #20161", + "contributors": [ + null, + "KevLehman" + ] + }, + { + "pr": "20735", + "title": "Exclude user's own password from /me endpoint", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "20403", + "title": "[FIX] Added check for view admin permission page", + "userLogin": "yash-rajpal", + "description": "Admin Permission page was visible to all, if you add admin/permissions after the base url. This should not be visible to all user, only people with certain permissions should be able to see this page.\r\nI am also able to see permissions page for open workspace of Rocket chat.\r\n![image](https://user-images.githubusercontent.com/58601732/105829728-bfd00880-5fea-11eb-9121-6c53a752f140.png)", + "contributors": [ + "yash-rajpal", + "gabriellsh", + "web-flow" + ] + }, + { + "pr": "20726", + "title": "[FIX] Mark messages inside a thread as unread", + "userLogin": "im-adithya", + "description": "Added threads to mark unread action button.", + "contributors": [ + "im-adithya", + "web-flow" + ] + }, + { + "pr": "20733", + "title": "[IMPROVE] Update rc-scrollbars", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "20722", + "title": "[FIX] OAuth Login not working on Firefox", + "userLogin": "gabriellsh", + "milestone": "3.12.0", + "contributors": [ + "gabriellsh", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "20706", + "title": "Chore: Push correct Docker tag of service images", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20720", + "title": "[FIX] Sending user to home after logging in from resume token query param", + "userLogin": "sampaiodiego", + "description": "Do not redirect to `/home` anymore after logging in with `resumeToken`.", + "milestone": "3.12.0", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20670", + "title": "[FIX] New Integration page was not being displayed", + "userLogin": "yash-rajpal", + "milestone": "3.12.0", + "contributors": [ + "yash-rajpal", + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "20713", + "title": "[FIX] Icon for OTR messages", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "20709", + "title": "Chore: update RC with the latest fuselage-polyfills", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "20605", + "title": "[FIX] Notification worker stopping on error", + "userLogin": "sampaiodiego", + "milestone": "3.12.0", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "20456", + "title": "[FIX] Add tooltips to Thread header buttons", + "userLogin": "aKn1ghtOut", + "description": "Added tooltips to \"Expand\" and \"Follow Message\"/\"Unfollow Message\" in ThreadView for coherency.", + "milestone": "3.12.0", + "contributors": [ + "aKn1ghtOut" + ] + }, + { + "pr": "20680", + "title": "[FIX] Room's last message's update date format on IE", + "userLogin": "dougfabris", + "description": "The proposed change fixes a bug when updates the cached records on Internet Explorer and it breaks the sidebar as shown on the screenshot below:\r\n\r\n![image](https://user-images.githubusercontent.com/27704687/107578007-f2285b00-6bd1-11eb-9250-1e76ae67f9c9.png)", + "contributors": [ + "dougfabris", + "web-flow" + ] + }, + { + "pr": "20661", + "title": "Added toast message after deleting file.", + "userLogin": "Darshilp326", + "description": "https://user-images.githubusercontent.com/55157259/107410849-d1a9c380-6b33-11eb-8d10-3d225dc7a9db.mp4", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20545", + "title": "Chore: Remove node-sprite-generator dependency", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20679", + "title": "[FIX] Hide system messages not working on second save", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "20662", + "title": "[FIX] Omnichannel Routing System not assigning chats to Bot agents", + "userLogin": "renatobecker", + "description": "The `Omnichannel Routing System` is no longer assigning chats to `bot` agents when the `bot` agent is the default agent of the inquiry.", + "milestone": "3.11.1", + "contributors": [ + "renatobecker", + "web-flow" + ] + }, + { + "pr": "19778", + "title": "[IMPROVE] Rewrite Call as React component ", + "userLogin": "tiagoevanp", + "milestone": "3.11.0", + "contributors": [ + "tiagoevanp", + "ggazzo", + "tassoevan" + ] + }, + { + "pr": "20665", + "title": "[FIX] Server-side marked parsing", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "20653", + "title": "[FIX] Livechat bridge permission checkers", + "userLogin": "d-gubert", + "description": "Update to latest patch version of the Apps-Engine with a fix for the Livechat bridge, as seen in https://github.com/RocketChat/Rocket.Chat.Apps-engine/pull/379", + "milestone": "3.11.1", + "contributors": [ + "d-gubert", + "lolimay", + "web-flow" + ] + }, + { + "pr": "20481", + "title": "[FIX] Users autocomplete showing duplicated results", + "userLogin": "Darshilp326", + "description": "Added new query for outside room users so that room members are not shown twice.\r\n\r\nhttps://user-images.githubusercontent.com/55157259/106174582-33c10b00-61bb-11eb-9716-377ef7bba34e.mp4", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20585", + "title": "[FIX] Attachment download from title fixed", + "userLogin": "yash-rajpal", + "description": "Added target = '_self' to attachment link, this seems to fix the problem, without this attribute, error page is displayed.", + "milestone": "3.11.1", + "contributors": [ + "yash-rajpal", + "tiagoevanp", + "web-flow" + ] + }, + { + "pr": "19934", + "title": "[IMPROVE] Adds tooltip for sidebar header icons", + "userLogin": "RonLek", + "description": "Previously the header icons in the sidebar didn't show a tooltip when hovered over. This PR fixes that.\r\n\r\n![Screenshot from 2020-12-22 15-17-41](https://user-images.githubusercontent.com/28918901/102874804-f2756700-4468-11eb-8324-b7f3194e62fe.png)", + "milestone": "3.11.0", + "contributors": [ + "RonLek" + ] + }, + { + "pr": "20617", + "title": "Rewrite: CreateChannel modal component", + "userLogin": "tiagoevanp", + "description": "![image](https://user-images.githubusercontent.com/17487063/107058434-5f438700-67b3-11eb-8cf2-1ad3d5008aa8.png)", + "contributors": [ + "tiagoevanp", + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "20654", + "title": "[FIX] Gif images aspect ratio on preview", + "userLogin": "tiagoevanp", + "milestone": "3.11.1", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "20237", + "title": "[FIX] - Cancel button on Room Notification don't close contextualBar", + "userLogin": "dougfabris", + "milestone": "3.12.0", + "contributors": [ + "dougfabris", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "20651", + "title": "[FIX] Links not opening in new tabs", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "20649", + "title": "[FIX] Room Scroll to Bottom", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20652", + "title": "Regression: Discussions inside direct messages not rendering", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "20381", + "title": "[FIX] Announcement with multiple lines fixed.", + "userLogin": "yash-rajpal", + "description": "Announcements with multiple lines used to break UI for announcements bar. Fixed it by replacing all break lines in announcement with empty space (\" \") . The announcement modal would work as usual and show all break lines.", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20329", + "title": "[FIX] Fix Empty highlighted words field", + "userLogin": "yash-rajpal", + "description": "Able to Empty the highlighted text field in preferences", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20592", + "title": "[FIX] OTR issue", + "userLogin": "ggazzo", + "description": "Since the users are not being stored at the user collection anymore (thats a good thing actually), there is no such record to to fetch and show the username.", + "milestone": "3.10.6", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "20611", + "title": "[FIX] Update NPS banner when changing score", + "userLogin": "sampaiodiego", + "milestone": "3.11.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "20625", + "title": "Remove `uiKitText` reference", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "20624", + "title": "[FIX] List of Omnichannel triggers is not listing data", + "userLogin": "rafaelblink", + "description": "### Before\r\n![image](https://user-images.githubusercontent.com/2493803/107095379-7308e080-67e7-11eb-8251-7e7ff891087a.png)\r\n\r\n\r\n### After\r\n![image](https://user-images.githubusercontent.com/2493803/107095261-3b019d80-67e7-11eb-8425-8612b03ac50a.png)", + "milestone": "3.12.0", + "contributors": [ + "rafaelblink" + ] + }, + { + "pr": "20616", + "title": "Regression: Header Styles", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh", + "web-flow" + ] + }, + { + "pr": "20613", + "title": "[FIX] Regular status mutating custom status", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "20484", + "title": "[FIX] Channel mentions showing user subscribed channels twice", + "userLogin": "Darshilp326", + "description": "Channel mention shows user subscribed channels twice.\r\n\r\nhttps://user-images.githubusercontent.com/55157259/106183033-b353d780-61c5-11eb-8aab-1dbb62b02ff8.mp4", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20612", + "title": "[IMPROVE] Change header based on room type", + "userLogin": "dougfabris", + "description": "It brings more flexibility, allowing us to use different hooks and different components for each header", + "milestone": "3.12.0", + "contributors": [ + "dougfabris", + "gabriellsh", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "20609", + "title": "[NEW] Header with Breadcrumbs", + "userLogin": "dougfabris", + "description": "![image](https://user-images.githubusercontent.com/27704687/106945019-1386d400-6706-11eb-90db-c12b50f260d5.png)", + "milestone": "3.12.0", + "contributors": [ + "dougfabris", + "gabriellsh", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "20250", + "title": "Chore: Change error message when marking empty chat as unread", + "userLogin": "lucassartor", + "contributors": [ + "lucassartor" + ] + }, + { + "pr": "20519", + "title": "Chore: Improve performance of messages’ watcher", + "userLogin": "rodrigok", + "milestone": "3.12.0", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "20550", + "title": "RoomFiles hook", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "20586", + "title": "[FIX] ESLint Warning - react-hooks/exhaustive-deps", + "userLogin": "aditya-mitra", + "description": "Added the required dep (`label`) in `useMemo` to fix eslint warning `react-hooks/exhaustive-deps`.", + "contributors": [ + "aditya-mitra" + ] + }, + { + "pr": "20584", + "title": "[NEW] useUserData Hook", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20320", + "title": "[FIX] Filters are not being applied correctly in Omnichannel Current Chats list", + "userLogin": "rafaelblink", + "description": "### Before\r\n![image](https://user-images.githubusercontent.com/2493803/105537672-082cb500-5cd1-11eb-8f1b-1726ba60420a.png)\r\n\r\n### After\r\n![image](https://user-images.githubusercontent.com/2493803/105537773-2d212800-5cd1-11eb-8746-048deb9502d9.png)\r\n\r\n![image](https://user-images.githubusercontent.com/2493803/106494728-88090b00-6499-11eb-922e-5386107e2389.png)\r\n\r\n![image](https://user-images.githubusercontent.com/2493803/106494751-90f9dc80-6499-11eb-901b-5e4dbdc678ba.png)", + "milestone": "3.12.0", + "contributors": [ + "rafaelblink", + "web-flow", + "renatobecker" + ] + }, + { + "pr": "20297", + "title": "[FIX] Add debouncing to add users search field.", + "userLogin": "Darshilp326", + "description": "BEFORE\r\n\r\nhttps://user-images.githubusercontent.com/55157259/105350722-98a3c080-5c11-11eb-82f3-d9a62a4fa50b.mp4\r\n\r\n\r\nAFTER\r\n\r\nhttps://user-images.githubusercontent.com/55157259/105350757-a2c5bf00-5c11-11eb-91db-25c0b9e01a28.mp4", + "contributors": [ + "Darshilp326", + "dougfabris", + "web-flow" + ] + }, + { + "pr": "20356", + "title": "[FIX] Changed password input field for password access in edit room info.", + "userLogin": "Darshilp326", + "description": "Password field would be secured with asterisks in edit room info\r\n\r\nhttps://user-images.githubusercontent.com/55157259/105641758-cad04f00-5eab-11eb-90de-0c91263edd55.mp4\r\n\r\n.", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20179", + "title": "[FIX] Remove duplicate getCommonRoomEvents() event binding for pinnedMessages", + "userLogin": "aKn1ghtOut", + "description": "The getCommonRoomEvents() returned functions were bound to the pinnedMessages template twice. This was causing some bugs, as detailed in the Issue mentioned below.", + "contributors": [ + "aKn1ghtOut", + "web-flow" + ] + }, + { + "pr": "20341", + "title": "[FIX] User statuses in admin user info panel", + "userLogin": "RonLek", + "description": "Modifies user statuses in admin info panel based on their actual status instead of their `statusConnection`. This enables correct and consistent change in user statuses. \r\nAlso, bot users having status as online were classified as offline, with this change they are now correctly classified based on their corresponding statuses.\r\n\r\nhttps://user-images.githubusercontent.com/28918901/105624438-b8bcc500-5e47-11eb-8d1e-3a4180da1304.mp4", + "contributors": [ + "RonLek" + ] + }, + { + "pr": "20193", + "title": "[FIX] Blank Personal Access Token Bug", + "userLogin": "RonLek", + "description": "Adds error when personal access token is blank thereby disallowing the creation of one.\r\n\r\nhttps://user-images.githubusercontent.com/28918901/104483631-5adde100-55ee-11eb-9938-64146bce127e.mp4", + "contributors": [ + "RonLek", + "web-flow" + ] + }, + { + "pr": "20339", + "title": "[FIX] Feedback on bulk invite", + "userLogin": "aKn1ghtOut", + "description": "Resolved structure where no response was being received. Changed from callback to async/await.\r\nAdded error in case of empty submission, or if no valid emails were found.\r\n\r\nhttps://user-images.githubusercontent.com/38764067/105613964-dfe5a900-5deb-11eb-80f2-21fc8dee57c0.mp4", + "contributors": [ + "aKn1ghtOut" + ] + }, + { + "pr": "20337", + "title": "[IMPROVE] Added disable button check for send invite button", + "userLogin": "yash-rajpal", + "description": "Added Disable check for send invite button. If the text field is empty button would be disabled, and after any valid email is filled, button would get enabled", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20358", + "title": "[FIX]Selected hide system messages would now be viewed in vertical bar.", + "userLogin": "Darshilp326", + "description": "All selected hide system messages are now in vertical Bar.\r\n\r\nhttps://user-images.githubusercontent.com/55157259/105642624-d5411780-5eb0-11eb-8848-93e4b02629cb.mp4", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20426", + "title": "[FIX] Typo in Message Character Limit", + "userLogin": "aditya-mitra", + "description": "Changed the spelling of *Characther* to *Character*", + "contributors": [ + "aditya-mitra" + ] + }, + { + "pr": "20444", + "title": "[FIX] Unset tshow on deleted messages", + "userLogin": "aKn1ghtOut", + "description": "When setting 'Message_ShowDeletedStatus' is set to true, deleting a message with `tshow: true` causes a bug on the frontend. This issue should, however, never be logically possible as a 'removed' message should not have tshow anyway. Hence, this PR unsets that when the message is set to \"Message Removed\".", + "contributors": [ + "aKn1ghtOut" + ] + }, + { + "pr": "20305", + "title": "[FIX] Added Bio Structure for UserCard, rendering Skeleton View on loading Instead of [Object][Object] ", + "userLogin": "yash-rajpal", + "description": "Added Bio Structure for rendering Skeleton View on loading UserCard.", + "milestone": "3.11.0", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20392", + "title": "[IMPROVE] Replace react-window for react-virtuoso package", + "userLogin": "tiagoevanp", + "description": "Remove:\r\n- react-window\r\n- react-window-infinite-loader\r\n- simplebar-react\r\n\r\nInclude:\r\n- react-virtuoso\r\n- rc-scrollbars", + "milestone": "3.12.0", + "contributors": [ + "tiagoevanp", + "ggazzo", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "20470", + "title": "[IMPROVE] Added Markdown links to custom status.", + "userLogin": "yash-rajpal", + "description": "Added markdown links to user's custom status.", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20473", + "title": "[IMPROVE] Added key prop, removing unwanted warnings", + "userLogin": "yash-rajpal", + "description": "Removes warnings listed on the issue", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "20498", + "title": "[FIX] Removed tooltip in kebab menu options.", + "userLogin": "Darshilp326", + "description": "Removed tooltip as it was not needed.\r\n\r\nhttps://user-images.githubusercontent.com/55157259/106246146-a53ca000-6233-11eb-9874-cbd1b4331bc0.mp4", + "contributors": [ + "Darshilp326" + ] + }, + { + "pr": "20308", + "title": "[IMPROVE] Add visual validation on users admin forms", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris", + "gabriellsh" + ] + }, + { + "pr": "20508", + "title": "Wrong method used while starring", + "userLogin": "im-adithya", + "description": "Changed the method from pinMessage to starMessage", + "contributors": [ + "im-adithya", + "web-flow" + ] + }, + { + "pr": "20046", + "title": "Chore: Try building micro services early on CI", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "renatobecker", + "web-flow", + "rodrigok" + ] + }, + { + "pr": "20533", + "title": "Merge master into develop & Set version to 3.12.0-develop", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + } + ] + }, + "3.12.0-rc.1": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0-alpha.4655", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "20871", + "title": "Regression: Fix scopes not being provided to getWorkspaceAccessToken", + "userLogin": "geekgonecrazy", + "milestone": "3.12.0", + "contributors": [ + "geekgonecrazy" + ] + }, + { + "pr": "20869", + "title": "Regression: Keep user custom status after change presence", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20767", + "title": "[FIX] Markdown prop variants", + "userLogin": "dougfabris", + "description": "A new prop variants on Markdown component: **inline** and **inlineWithoutBreaks**", + "contributors": [ + "dougfabris", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "20868", + "title": "[FIX] Open Visitor Info when omnichannel chat was open", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "20860", + "title": "Regression: Prevent Message Attachment rendering", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20820", + "title": "[FIX] Download buttons on desktop app and CDN being ignored", + "userLogin": "ggazzo", + "milestone": "3.12.0", + "contributors": [ + "ggazzo" + ] + } + ] + }, + "3.12.0-rc.2": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "20912", + "title": "[FIX] Admin Panel pages not visible in Safari", + "userLogin": "tiagoevanp", + "milestone": "3.12.0", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "20921", + "title": "Update Apps-Engine version", + "userLogin": "d-gubert", + "description": "Update the Apps-Engine to latest version for the release.", + "milestone": "3.12.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "20922", + "title": "Regression: Messages not being encrypted E2E", + "userLogin": "ggazzo", + "milestone": "3.11.2", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "20852", + "title": "Fix: Add network observe plug to snap", + "userLogin": "geekgonecrazy", + "contributors": [ + "geekgonecrazy", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "20853", + "title": "Language update from LingoHub 🤖 on 2021-02-22Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "20819", + "title": "Added types to Emitters", + "userLogin": "ggazzo", + "milestone": "3.12.0", + "contributors": [ + "ggazzo" + ] + } + ] + }, + "3.12.0-rc.3": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [] + }, + "3.12.0-rc.4": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [] + }, + "3.12.0": { + "node_version": "12.18.4", + "npm_version": "6.14.8", + "apps_engine_version": "1.23.0", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [] } } } \ No newline at end of file diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 27c376f35f62..e946ee7ee7fd 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -122,6 +122,12 @@ jobs: - run: meteor npm run typecheck + - name: Build Storybook to sanity check components + run: npm run build-storybook ; rm -rf ./storybook-static + env: + NODE_OPTIONS: --max_old_space_size=8192 + + # To reduce memory need during actual build, build the packages solely first # - name: Build a Meteor cache # run: | @@ -137,6 +143,13 @@ jobs: run: | meteor reset + - name: Try building micro services + run: | + cd ./ee/server/services + npm i + npm run build + rm -rf dist/ + - name: Build Rocket.Chat From Pull Request if: startsWith(github.ref, 'refs/pull/') == true env: @@ -560,4 +573,4 @@ jobs: docker build --build-arg SERVICE=${{ matrix.service }} -t rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} . - docker push rocketchat/${{ matrix.service }}-service + docker push rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} diff --git a/.gitignore b/.gitignore index f68d665bf8e8..8d5cc726ac80 100644 --- a/.gitignore +++ b/.gitignore @@ -79,4 +79,6 @@ tests/end-to-end/temporary_staged_test .screenshots /private/livechat /storybook-static -/tests/cypress/screenshots \ No newline at end of file +/tests/cypress/screenshots +coverage +.nyc_output diff --git a/.meteorignore b/.meteorignore index 35dd55fee165..6453c2f01e3d 100644 --- a/.meteorignore +++ b/.meteorignore @@ -1 +1,2 @@ ee/server/services +coverage diff --git a/.snapcraft/resources/prepareRocketChat b/.snapcraft/resources/prepareRocketChat index 8388f031d5c5..3f301ad8afae 100755 --- a/.snapcraft/resources/prepareRocketChat +++ b/.snapcraft/resources/prepareRocketChat @@ -1,6 +1,6 @@ #!/bin/bash -curl -SLf "https://releases.rocket.chat/3.11.1/download/" -o rocket.chat.tgz +curl -SLf "https://releases.rocket.chat/3.12.0/download/" -o rocket.chat.tgz tar xf rocket.chat.tgz --strip 1 diff --git a/.snapcraft/snap/snapcraft.yaml b/.snapcraft/snap/snapcraft.yaml index 19e9d98c5f81..9e964854b543 100644 --- a/.snapcraft/snap/snapcraft.yaml +++ b/.snapcraft/snap/snapcraft.yaml @@ -7,7 +7,7 @@ # 5. `snapcraft snap` name: rocketchat-server -version: 3.11.1 +version: 3.12.0 summary: Rocket.Chat server description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/ confinement: strict @@ -20,7 +20,7 @@ apps: rocketchat-mongo: command: startmongo daemon: simple - plugs: [network, network-bind] + plugs: [network, network-bind, network-observe] rocketchat-caddy: command: env LC_ALL=C caddy -conf=$SNAP_DATA/Caddyfile daemon: simple diff --git a/HISTORY.md b/HISTORY.md index ae6f7fccf532..6e481b3268ea 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,4 +1,543 @@ +# 3.12.0 +`2021-02-28 · 5 🎉 · 17 🚀 · 74 🐛 · 30 🔍 · 29 👩💻👨💻` + +### Engine versions +- Node: `12.18.4` +- NPM: `6.14.8` +- MongoDB: `3.4, 3.6, 4.0` +- Apps-Engine: `1.23.0` + +### 🎉 New features + + +- Button to unset Slackbridge's importIds ([#20549](https://github.com/RocketChat/Rocket.Chat/pull/20549)) + +- Cloud Workspace bridge ([#20838](https://github.com/RocketChat/Rocket.Chat/pull/20838)) + + Adds the new CloudWorkspace functionality. + + It allows apps to request the access token for the workspace it's installed on, so it can perform actions with other Rocket.Chat services, such as the Omni Gateway. + + https://github.com/RocketChat/Rocket.Chat.Apps-engine/pull/382 + +- Header with Breadcrumbs ([#20609](https://github.com/RocketChat/Rocket.Chat/pull/20609)) + + ![image](https://user-images.githubusercontent.com/27704687/106945019-1386d400-6706-11eb-90db-c12b50f260d5.png) + +- Statistics about language usage ([#20832](https://github.com/RocketChat/Rocket.Chat/pull/20832)) + + track what languages get picked the most as preferred ui language. + +- useUserData Hook ([#20584](https://github.com/RocketChat/Rocket.Chat/pull/20584)) + +### 🚀 Improvements + + +- Add symbol to indicate apps' required settings in the UI ([#20447](https://github.com/RocketChat/Rocket.Chat/pull/20447)) + + - Apps are able to define **required** settings. These settings should not be left blank by the user and an error will be thrown and shown in the interface if an user attempts to save changes in the app details page leaving any required fields blank; + ![prt_screen_required_app_settings_warning](https://user-images.githubusercontent.com/36537004/106032964-e73cd900-60af-11eb-8eab-c11fd651b593.png) + + - A sign (*) is added to the label of app settings' fields that are required so as to highlight the fields which must not be left blank. + ![prt_screen_required_app_settings](https://user-images.githubusercontent.com/36537004/106014879-ae473900-609c-11eb-9b9e-95de7bbf20a5.png) + +- Add visual validation on users admin forms ([#20308](https://github.com/RocketChat/Rocket.Chat/pull/20308)) + +- Added auto-focus for better user-experience. ([#19954](https://github.com/RocketChat/Rocket.Chat/pull/19954) by [@Darshilp326](https://github.com/Darshilp326)) + +- Added disable button check for send invite button ([#20337](https://github.com/RocketChat/Rocket.Chat/pull/20337) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Added Disable check for send invite button. If the text field is empty button would be disabled, and after any valid email is filled, button would get enabled + +- Added key prop, removing unwanted warnings ([#20473](https://github.com/RocketChat/Rocket.Chat/pull/20473) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Removes warnings listed on the issue + +- Added Markdown links to custom status. ([#20470](https://github.com/RocketChat/Rocket.Chat/pull/20470) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Added markdown links to user's custom status. + +- Adds tooltip for sidebar header icons ([#19934](https://github.com/RocketChat/Rocket.Chat/pull/19934) by [@RonLek](https://github.com/RonLek)) + + Previously the header icons in the sidebar didn't show a tooltip when hovered over. This PR fixes that. + + ![Screenshot from 2020-12-22 15-17-41](https://user-images.githubusercontent.com/28918901/102874804-f2756700-4468-11eb-8324-b7f3194e62fe.png) + +- Better Presentation of Blockquotes ([#20750](https://github.com/RocketChat/Rocket.Chat/pull/20750) by [@aditya-mitra](https://github.com/aditya-mitra)) + + Changed the values of `margin-top` and `margin-bottom` for *first* and *last* childs in blockquotes to increase readability. + + ### Before + + ![before](https://user-images.githubusercontent.com/55396651/107858662-3e3a0080-6e5b-11eb-8274-9bd956807235.png) + + ### Now + + ![now](https://user-images.githubusercontent.com/55396651/107858471-480f3400-6e5a-11eb-9ccb-3f1be2fed0a4.png) + +- Change header based on room type ([#20612](https://github.com/RocketChat/Rocket.Chat/pull/20612)) + + It brings more flexibility, allowing us to use different hooks and different components for each header + +- Check Livechat message length through REST API endpoint ([#20366](https://github.com/RocketChat/Rocket.Chat/pull/20366) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Added checks for message length for livechat message api, it shouldn't exceed specified character limit. + +- Customize announcement ([#20793](https://github.com/RocketChat/Rocket.Chat/pull/20793) by [@im-adithya](https://github.com/im-adithya)) + + Included new variables in customizable ones + +- Make message field required in Omnichannel Triggers form ([#20827](https://github.com/RocketChat/Rocket.Chat/pull/20827)) + +- New chat started system message for Omnichannel conversations ([#20814](https://github.com/RocketChat/Rocket.Chat/pull/20814)) + +- Replace react-window for react-virtuoso package ([#20392](https://github.com/RocketChat/Rocket.Chat/pull/20392)) + + Remove: + - react-window + - react-window-infinite-loader + - simplebar-react + + Include: + - react-virtuoso + - rc-scrollbars + +- Rewrite Call as React component ([#19778](https://github.com/RocketChat/Rocket.Chat/pull/19778)) + +- Selector for default custom oauth key field ([#20573](https://github.com/RocketChat/Rocket.Chat/pull/20573) by [@paulobernardoaf](https://github.com/paulobernardoaf)) + +- Update rc-scrollbars ([#20733](https://github.com/RocketChat/Rocket.Chat/pull/20733)) + +### 🐛 Bug fixes + + +- - Cancel button on Room Notification don't close contextualBar ([#20237](https://github.com/RocketChat/Rocket.Chat/pull/20237)) + +- Add debouncing to add users search field. ([#20297](https://github.com/RocketChat/Rocket.Chat/pull/20297) by [@Darshilp326](https://github.com/Darshilp326)) + + BEFORE + + https://user-images.githubusercontent.com/55157259/105350722-98a3c080-5c11-11eb-82f3-d9a62a4fa50b.mp4 + + + AFTER + + https://user-images.githubusercontent.com/55157259/105350757-a2c5bf00-5c11-11eb-91db-25c0b9e01a28.mp4 + +- Add tooltips to Thread header buttons ([#20456](https://github.com/RocketChat/Rocket.Chat/pull/20456) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) + + Added tooltips to "Expand" and "Follow Message"/"Unfollow Message" in ThreadView for coherency. + +- Added Bio Structure for UserCard, rendering Skeleton View on loading Instead of [Object][Object] ([#20305](https://github.com/RocketChat/Rocket.Chat/pull/20305) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Added Bio Structure for rendering Skeleton View on loading UserCard. + +- Added check for view admin permission page ([#20403](https://github.com/RocketChat/Rocket.Chat/pull/20403) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Admin Permission page was visible to all, if you add admin/permissions after the base url. This should not be visible to all user, only people with certain permissions should be able to see this page. + I am also able to see permissions page for open workspace of Rocket chat. + ![image](https://user-images.githubusercontent.com/58601732/105829728-bfd00880-5fea-11eb-9121-6c53a752f140.png) + +- Adding the accidentally deleted tag template, used by other templates ([#20772](https://github.com/RocketChat/Rocket.Chat/pull/20772) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Adding back accidentally deleted tag Template. + +- Admin cannot clear user details like bio or nickname ([#20785](https://github.com/RocketChat/Rocket.Chat/pull/20785) by [@yash-rajpal](https://github.com/yash-rajpal)) + + When the API users.update is called to update user data, it passes data to saveUser function. Here before saving data like bio or nickname we are checking if they are available or not. If data is available then we are saving it, but we are not doing anything when data isn't available. + + So unsetting data if data isn't available to save. Will also fix bio and other fields. :) + +- Admin Panel pages not visible in Safari ([#20912](https://github.com/RocketChat/Rocket.Chat/pull/20912)) + +- Announcement with multiple lines fixed. ([#20381](https://github.com/RocketChat/Rocket.Chat/pull/20381) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Announcements with multiple lines used to break UI for announcements bar. Fixed it by replacing all break lines in announcement with empty space (" ") . The announcement modal would work as usual and show all break lines. + +- Atlassian Crowd login with 2FA enabled ([#20834](https://github.com/RocketChat/Rocket.Chat/pull/20834)) + +- Attachment download from title fixed ([#20585](https://github.com/RocketChat/Rocket.Chat/pull/20585) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Added target = '_self' to attachment link, this seems to fix the problem, without this attribute, error page is displayed. + +- Blank Personal Access Token Bug ([#20193](https://github.com/RocketChat/Rocket.Chat/pull/20193) by [@RonLek](https://github.com/RonLek)) + + Adds error when personal access token is blank thereby disallowing the creation of one. + + https://user-images.githubusercontent.com/28918901/104483631-5adde100-55ee-11eb-9938-64146bce127e.mp4 + +- CAS login failing due to TOTP requirement ([#20840](https://github.com/RocketChat/Rocket.Chat/pull/20840)) + +- Changed password input field for password access in edit room info. ([#20356](https://github.com/RocketChat/Rocket.Chat/pull/20356) by [@Darshilp326](https://github.com/Darshilp326)) + + Password field would be secured with asterisks in edit room info + + https://user-images.githubusercontent.com/55157259/105641758-cad04f00-5eab-11eb-90de-0c91263edd55.mp4 + + . + +- Channel mentions showing user subscribed channels twice ([#20484](https://github.com/RocketChat/Rocket.Chat/pull/20484) by [@Darshilp326](https://github.com/Darshilp326)) + + Channel mention shows user subscribed channels twice. + + https://user-images.githubusercontent.com/55157259/106183033-b353d780-61c5-11eb-8aab-1dbb62b02ff8.mp4 + +- CORS config not accepting multiple origins ([#20696](https://github.com/RocketChat/Rocket.Chat/pull/20696)) + + always include only one value in access-control-allow-origin + +- Custom OAuth provider creation from env vars ([#20014](https://github.com/RocketChat/Rocket.Chat/pull/20014) by [@pierreozoux](https://github.com/pierreozoux)) + +- Default Attachments - Remove Extra Margin in Field Attachments ([#20618](https://github.com/RocketChat/Rocket.Chat/pull/20618) by [@aditya-mitra](https://github.com/aditya-mitra)) + + A large amount of unnecessary margin which existed in the **Field Attachments inside the `DefaultAttachments`** has been fixed. + + ### Earlier + + ![earlier](https://user-images.githubusercontent.com/55396651/107056792-ba4b9d00-67f8-11eb-9153-05281416cddb.png) + + ### Now + + ![now](https://user-images.githubusercontent.com/55396651/107057196-3219c780-67f9-11eb-84db-e4a0addfc168.png) + +- Default Attachments - Show Full Attachment.Text with Markdown ([#20606](https://github.com/RocketChat/Rocket.Chat/pull/20606) by [@aditya-mitra](https://github.com/aditya-mitra)) + + Removed truncating of text in `Attachment.Text`. + Added `Attachment.Text` to be parsed to markdown by default. + + ### Earlier + ![earlier](https://user-images.githubusercontent.com/55396651/106910781-92d8cf80-6727-11eb-82ec-818df7544ff0.png) + + ### Now + + ![now](https://user-images.githubusercontent.com/55396651/106910840-a126eb80-6727-11eb-8bd6-d86383dd9181.png) + +- Don't ask again not rendering ([#20745](https://github.com/RocketChat/Rocket.Chat/pull/20745)) + +- Download buttons on desktop app and CDN being ignored ([#20820](https://github.com/RocketChat/Rocket.Chat/pull/20820)) + +- E2E issues ([#20704](https://github.com/RocketChat/Rocket.Chat/pull/20704)) + +- ESLint Warning - react-hooks/exhaustive-deps ([#20586](https://github.com/RocketChat/Rocket.Chat/pull/20586) by [@aditya-mitra](https://github.com/aditya-mitra)) + + Added the required dep (`label`) in `useMemo` to fix eslint warning `react-hooks/exhaustive-deps`. + +- Event emitter warning ([#20663](https://github.com/RocketChat/Rocket.Chat/pull/20663)) + +- External systems not being able to change Omnichannel Inquiry priorities ([#20740](https://github.com/RocketChat/Rocket.Chat/pull/20740)) + + Due to a wrong property name, external applications were not able to change the priority of Omnichannel Inquires. + +- Feedback on bulk invite ([#20339](https://github.com/RocketChat/Rocket.Chat/pull/20339) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) + + Resolved structure where no response was being received. Changed from callback to async/await. + Added error in case of empty submission, or if no valid emails were found. + + https://user-images.githubusercontent.com/38764067/105613964-dfe5a900-5deb-11eb-80f2-21fc8dee57c0.mp4 + +- Filters are not being applied correctly in Omnichannel Current Chats list ([#20320](https://github.com/RocketChat/Rocket.Chat/pull/20320)) + + ### Before + ![image](https://user-images.githubusercontent.com/2493803/105537672-082cb500-5cd1-11eb-8f1b-1726ba60420a.png) + + ### After + ![image](https://user-images.githubusercontent.com/2493803/105537773-2d212800-5cd1-11eb-8746-048deb9502d9.png) + + ![image](https://user-images.githubusercontent.com/2493803/106494728-88090b00-6499-11eb-922e-5386107e2389.png) + + ![image](https://user-images.githubusercontent.com/2493803/106494751-90f9dc80-6499-11eb-901b-5e4dbdc678ba.png) + +- Fix Empty highlighted words field ([#20329](https://github.com/RocketChat/Rocket.Chat/pull/20329) by [@yash-rajpal](https://github.com/yash-rajpal)) + + Able to Empty the highlighted text field in preferences + +- Gif images aspect ratio on preview ([#20654](https://github.com/RocketChat/Rocket.Chat/pull/20654)) + +- height prop on departments agents table ([#20833](https://github.com/RocketChat/Rocket.Chat/pull/20833)) + + ![image](https://user-images.githubusercontent.com/27704687/108572412-fbf83f80-72f0-11eb-801a-5f659000325d.png) + +- Hide system messages not working on second save ([#20679](https://github.com/RocketChat/Rocket.Chat/pull/20679)) + +- Icon for OTR messages ([#20713](https://github.com/RocketChat/Rocket.Chat/pull/20713)) + +- Incorrect display of "Reply in Direct Message" in MessageAction ([#17968](https://github.com/RocketChat/Rocket.Chat/pull/17968) by [@abrom](https://github.com/abrom)) + + [FIX] Incorrect display of "Reply in Direct Message" in MessageAction + +- Increasing unread counter twice for new threads in DMs or with mentions ([#20666](https://github.com/RocketChat/Rocket.Chat/pull/20666)) + + - Unread messages count won't be incremented when the message sent is on a thread (thread count is treated different) + +- Links not opening in new tabs ([#20651](https://github.com/RocketChat/Rocket.Chat/pull/20651)) + +- List of Omnichannel triggers is not listing data ([#20624](https://github.com/RocketChat/Rocket.Chat/pull/20624)) + + ### Before + ![image](https://user-images.githubusercontent.com/2493803/107095379-7308e080-67e7-11eb-8251-7e7ff891087a.png) + + + ### After + ![image](https://user-images.githubusercontent.com/2493803/107095261-3b019d80-67e7-11eb-8425-8612b03ac50a.png) + +- Livechat bridge permission checkers ([#20653](https://github.com/RocketChat/Rocket.Chat/pull/20653)) + + Update to latest patch version of the Apps-Engine with a fix for the Livechat bridge, as seen in https://github.com/RocketChat/Rocket.Chat.Apps-engine/pull/379 + +- Mark messages inside a thread as unread ([#20726](https://github.com/RocketChat/Rocket.Chat/pull/20726) by [@im-adithya](https://github.com/im-adithya)) + + Added threads to mark unread action button. + +- Markdown prop variants ([#20767](https://github.com/RocketChat/Rocket.Chat/pull/20767)) + + A new prop variants on Markdown component: **inline** and **inlineWithoutBreaks** + +- Message payload from `__my_messages__` stream ([#20801](https://github.com/RocketChat/Rocket.Chat/pull/20801)) + +- Missing height on departments agents table ([#20739](https://github.com/RocketChat/Rocket.Chat/pull/20739)) + + ![image](https://user-images.githubusercontent.com/27704687/107807002-510ee100-6d46-11eb-86e9-d65da7ab4129.png) + +- Missing setting to control when to send the ReplyTo field in email notifications ([#20744](https://github.com/RocketChat/Rocket.Chat/pull/20744)) + + - Add a new setting ("Add Reply-To header") in the Email settings' page to control when the Reply-To header is used in e-mail notifications; + - The new setting is turned off (`false` value) by default. + +- New Integration page was not being displayed ([#20670](https://github.com/RocketChat/Rocket.Chat/pull/20670) by [@yash-rajpal](https://github.com/yash-rajpal)) + +- Notification worker stopping on error ([#20605](https://github.com/RocketChat/Rocket.Chat/pull/20605)) + +- OAuth Login not working on Firefox ([#20722](https://github.com/RocketChat/Rocket.Chat/pull/20722)) + +- Omnichannel agents are unable to access the chat queue on the sidebar ([#20830](https://github.com/RocketChat/Rocket.Chat/pull/20830)) + +- Omnichannel Routing System not assigning chats to Bot agents ([#20662](https://github.com/RocketChat/Rocket.Chat/pull/20662)) + + The `Omnichannel Routing System` is no longer assigning chats to `bot` agents when the `bot` agent is the default agent of the inquiry. + +- Open Visitor Info when omnichannel chat was open ([#20868](https://github.com/RocketChat/Rocket.Chat/pull/20868)) + +- OTR issue ([#20592](https://github.com/RocketChat/Rocket.Chat/pull/20592)) + + Since the users are not being stored at the user collection anymore (thats a good thing actually), there is no such record to to fetch and show the username. + +- Quoted messages from message links when user has no permission ([#20815](https://github.com/RocketChat/Rocket.Chat/pull/20815)) + +- Regenerate token modal on top of 2FA modal ([#20798](https://github.com/RocketChat/Rocket.Chat/pull/20798)) + +- Regular status mutating custom status ([#20613](https://github.com/RocketChat/Rocket.Chat/pull/20613)) + +- Remove duplicate getCommonRoomEvents() event binding for pinnedMessages ([#20179](https://github.com/RocketChat/Rocket.Chat/pull/20179) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) + + The getCommonRoomEvents() returned functions were bound to the pinnedMessages template twice. This was causing some bugs, as detailed in the Issue mentioned below. + +- Remove duplicate getCommonRoomEvents() event binding for starredMessages ([#20185](https://github.com/RocketChat/Rocket.Chat/pull/20185) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) + + The getCommonRoomEvents() returned functions were bound to the starredMessages template twice. This was causing some bugs, as detailed in the Issue mentioned below. + I removed the top events call that only bound the getCommonRoomEvents(). Therefore, only one call for the same is left, which is at the end of the file. Having the events bound just once removes the bugs mentioned. + +- Remove warning problems from console ([#20800](https://github.com/RocketChat/Rocket.Chat/pull/20800)) + +- Removed tooltip in kebab menu options. ([#20498](https://github.com/RocketChat/Rocket.Chat/pull/20498) by [@Darshilp326](https://github.com/Darshilp326)) + + Removed tooltip as it was not needed. + + https://user-images.githubusercontent.com/55157259/106246146-a53ca000-6233-11eb-9874-cbd1b4331bc0.mp4 + +- Retry icon comes out of the div ([#20390](https://github.com/RocketChat/Rocket.Chat/pull/20390) by [@im-adithya](https://github.com/im-adithya)) + + Changed the height of the div container. + +- Room owner not being able to override global retention policy ([#20727](https://github.com/RocketChat/Rocket.Chat/pull/20727)) + + use correct permissions to check if room owner can override global retention policy + +- Room Scroll to Bottom ([#20649](https://github.com/RocketChat/Rocket.Chat/pull/20649)) + +- Room's last message's update date format on IE ([#20680](https://github.com/RocketChat/Rocket.Chat/pull/20680)) + + The proposed change fixes a bug when updates the cached records on Internet Explorer and it breaks the sidebar as shown on the screenshot below: + + ![image](https://user-images.githubusercontent.com/27704687/107578007-f2285b00-6bd1-11eb-9250-1e76ae67f9c9.png) + +- Save user password and email from My Account ([#20737](https://github.com/RocketChat/Rocket.Chat/pull/20737)) + +- Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) + +- Selected hide system messages would now be viewed in vertical bar. ([#20358](https://github.com/RocketChat/Rocket.Chat/pull/20358) by [@Darshilp326](https://github.com/Darshilp326)) + + All selected hide system messages are now in vertical Bar. + + https://user-images.githubusercontent.com/55157259/105642624-d5411780-5eb0-11eb-8848-93e4b02629cb.mp4 + +- Selected messages don't get unselected ([#20408](https://github.com/RocketChat/Rocket.Chat/pull/20408) by [@im-adithya](https://github.com/im-adithya)) + + https://user-images.githubusercontent.com/64399555/105844776-c157fb80-5fff-11eb-90cc-94e9f69649b6.mp4 + +- Sending user to home after logging in from resume token query param ([#20720](https://github.com/RocketChat/Rocket.Chat/pull/20720)) + + Do not redirect to `/home` anymore after logging in with `resumeToken`. + +- Server-side marked parsing ([#20665](https://github.com/RocketChat/Rocket.Chat/pull/20665)) + +- Several Slack Importer issues ([#20216](https://github.com/RocketChat/Rocket.Chat/pull/20216)) + + - Fix: Slack Importer crashes when importing a large users.json file + - Fix: Slack importer crashes when messages have invalid mentions + - Skip listing all users on the preparation screen when the user count is too large. + - Split avatar download into a separate process. + - Update room's last message when the import is complete. + - Prevent invalid or duplicated channel names + - Improve message error handling. + - Reduce max allowed BSON size to avoid possible issues in some servers. + - Improve handling of very large channel files. + +- star icon was visible after unstarring a message ([#19645](https://github.com/RocketChat/Rocket.Chat/pull/19645) by [@bhavayAnand9](https://github.com/bhavayAnand9)) + +- Threads Issues ([#20725](https://github.com/RocketChat/Rocket.Chat/pull/20725)) + +- Typo in Message Character Limit ([#20426](https://github.com/RocketChat/Rocket.Chat/pull/20426) by [@aditya-mitra](https://github.com/aditya-mitra)) + + Changed the spelling of *Characther* to *Character* + +- Unset tshow on deleted messages ([#20444](https://github.com/RocketChat/Rocket.Chat/pull/20444) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) + + When setting 'Message_ShowDeletedStatus' is set to true, deleting a message with `tshow: true` causes a bug on the frontend. This issue should, however, never be logically possible as a 'removed' message should not have tshow anyway. Hence, this PR unsets that when the message is set to "Message Removed". + +- Update NPS banner when changing score ([#20611](https://github.com/RocketChat/Rocket.Chat/pull/20611)) + +- User statuses in admin user info panel ([#20341](https://github.com/RocketChat/Rocket.Chat/pull/20341) by [@RonLek](https://github.com/RonLek)) + + Modifies user statuses in admin info panel based on their actual status instead of their `statusConnection`. This enables correct and consistent change in user statuses. + Also, bot users having status as online were classified as offline, with this change they are now correctly classified based on their corresponding statuses. + + https://user-images.githubusercontent.com/28918901/105624438-b8bcc500-5e47-11eb-8d1e-3a4180da1304.mp4 + +- Users autocomplete showing duplicated results ([#20481](https://github.com/RocketChat/Rocket.Chat/pull/20481) by [@Darshilp326](https://github.com/Darshilp326)) + + Added new query for outside room users so that room members are not shown twice. + + https://user-images.githubusercontent.com/55157259/106174582-33c10b00-61bb-11eb-9716-377ef7bba34e.mp4 + + +🔍 Minor changes + + +- Added toast message after deleting file. ([#20661](https://github.com/RocketChat/Rocket.Chat/pull/20661) by [@Darshilp326](https://github.com/Darshilp326)) + + https://user-images.githubusercontent.com/55157259/107410849-d1a9c380-6b33-11eb-8d10-3d225dc7a9db.mp4 + +- Added types to Emitters ([#20819](https://github.com/RocketChat/Rocket.Chat/pull/20819)) + +- Bump Livechat Widget ([#20843](https://github.com/RocketChat/Rocket.Chat/pull/20843)) + + Update Livechat version to `1.8.0` . + +- Chore: Change error message when marking empty chat as unread ([#20250](https://github.com/RocketChat/Rocket.Chat/pull/20250)) + +- Chore: Disable Sessions Aggregates tests locally ([#20607](https://github.com/RocketChat/Rocket.Chat/pull/20607)) + + Disable Session aggregates tests in local environments + For context, refer to: #20161 + +- Chore: Improve performance of messages’ watcher ([#20519](https://github.com/RocketChat/Rocket.Chat/pull/20519)) + +- Chore: Push correct Docker tag of service images ([#20706](https://github.com/RocketChat/Rocket.Chat/pull/20706)) + +- Chore: Remove node-sprite-generator dependency ([#20545](https://github.com/RocketChat/Rocket.Chat/pull/20545)) + +- Chore: Try building micro services early on CI ([#20046](https://github.com/RocketChat/Rocket.Chat/pull/20046)) + +- Chore: update RC with the latest fuselage-polyfills ([#20709](https://github.com/RocketChat/Rocket.Chat/pull/20709)) + +- Exclude user's own password from /me endpoint ([#20735](https://github.com/RocketChat/Rocket.Chat/pull/20735)) + +- Fix: Add network observe plug to snap ([#20852](https://github.com/RocketChat/Rocket.Chat/pull/20852)) + +- Improve: Add more API tests ([#20738](https://github.com/RocketChat/Rocket.Chat/pull/20738)) + + Add end-to-end tests for untested endpoints. + +- Language update from LingoHub 🤖 on 2021-02-15Z ([#20757](https://github.com/RocketChat/Rocket.Chat/pull/20757)) + +- Language update from LingoHub 🤖 on 2021-02-22Z ([#20853](https://github.com/RocketChat/Rocket.Chat/pull/20853)) + +- Merge master into develop & Set version to 3.12.0-develop ([#20533](https://github.com/RocketChat/Rocket.Chat/pull/20533)) + +- Mixed client and server code on Storybook ([#20799](https://github.com/RocketChat/Rocket.Chat/pull/20799)) + + For Storybook to work, we've mocked all modules under `**/server/`, thus making them suitable to hold all code that refers Node.js modules. This implies some duplication, between `client/` and `server/` modules, mediated by modules under `libs/`. + +- Regression: Discussions inside direct messages not rendering ([#20652](https://github.com/RocketChat/Rocket.Chat/pull/20652)) + +- Regression: Fix loadHistory method being called multiple times ([#20826](https://github.com/RocketChat/Rocket.Chat/pull/20826)) + +- Regression: Fix notification worker not firing ([#20829](https://github.com/RocketChat/Rocket.Chat/pull/20829)) + +- Regression: Fix scopes not being provided to getWorkspaceAccessToken ([#20871](https://github.com/RocketChat/Rocket.Chat/pull/20871)) + +- Regression: Header Styles ([#20616](https://github.com/RocketChat/Rocket.Chat/pull/20616)) + +- Regression: Keep user custom status after change presence ([#20869](https://github.com/RocketChat/Rocket.Chat/pull/20869)) + +- Regression: Messages not being encrypted E2E ([#20922](https://github.com/RocketChat/Rocket.Chat/pull/20922)) + +- Regression: Prevent Message Attachment rendering ([#20860](https://github.com/RocketChat/Rocket.Chat/pull/20860)) + +- Remove `uiKitText` reference ([#20625](https://github.com/RocketChat/Rocket.Chat/pull/20625)) + +- Rewrite: CreateChannel modal component ([#20617](https://github.com/RocketChat/Rocket.Chat/pull/20617)) + + ![image](https://user-images.githubusercontent.com/17487063/107058434-5f438700-67b3-11eb-8cf2-1ad3d5008aa8.png) + +- RoomFiles hook ([#20550](https://github.com/RocketChat/Rocket.Chat/pull/20550)) + +- Update Apps-Engine version ([#20921](https://github.com/RocketChat/Rocket.Chat/pull/20921)) + + Update the Apps-Engine to latest version for the release. + +- Wrong method used while starring ([#20508](https://github.com/RocketChat/Rocket.Chat/pull/20508) by [@im-adithya](https://github.com/im-adithya)) + + Changed the method from pinMessage to starMessage + + + +### 👩💻👨💻 Contributors 😍 + +- [@Darshilp326](https://github.com/Darshilp326) +- [@RonLek](https://github.com/RonLek) +- [@aKn1ghtOut](https://github.com/aKn1ghtOut) +- [@abrom](https://github.com/abrom) +- [@aditya-mitra](https://github.com/aditya-mitra) +- [@bhavayAnand9](https://github.com/bhavayAnand9) +- [@im-adithya](https://github.com/im-adithya) +- [@paulobernardoaf](https://github.com/paulobernardoaf) +- [@pierreozoux](https://github.com/pierreozoux) +- [@yash-rajpal](https://github.com/yash-rajpal) + +### 👩💻👨💻 Core Team 🤓 + +- [@KevLehman](https://github.com/KevLehman) +- [@MartinSchoeler](https://github.com/MartinSchoeler) +- [@d-gubert](https://github.com/d-gubert) +- [@dougfabris](https://github.com/dougfabris) +- [@g-thome](https://github.com/g-thome) +- [@gabriellsh](https://github.com/gabriellsh) +- [@geekgonecrazy](https://github.com/geekgonecrazy) +- [@ggazzo](https://github.com/ggazzo) +- [@lolimay](https://github.com/lolimay) +- [@lucassartor](https://github.com/lucassartor) +- [@matheusbsilva137](https://github.com/matheusbsilva137) +- [@pierre-lehnen-rc](https://github.com/pierre-lehnen-rc) +- [@r0zbot](https://github.com/r0zbot) +- [@rafaelblink](https://github.com/rafaelblink) +- [@renatobecker](https://github.com/renatobecker) +- [@rodrigok](https://github.com/rodrigok) +- [@sampaiodiego](https://github.com/sampaiodiego) +- [@tassoevan](https://github.com/tassoevan) +- [@tiagoevanp](https://github.com/tiagoevanp) + # 3.11.1 `2021-02-10 · 5 🐛 · 6 👩💻👨💻` diff --git a/app/2fa/client/TOTPCrowd.js b/app/2fa/client/TOTPCrowd.js new file mode 100644 index 000000000000..44a08fe8b69f --- /dev/null +++ b/app/2fa/client/TOTPCrowd.js @@ -0,0 +1,35 @@ +import { Meteor } from 'meteor/meteor'; +import { Accounts } from 'meteor/accounts-base'; + +import { Utils2fa } from './lib/2fa'; +import '../../crowd/client/index'; + +Meteor.loginWithCrowdAndTOTP = function(username, password, code, callback) { + const loginRequest = { + crowd: true, + username, + crowdPassword: password, + }; + + Accounts.callLoginMethod({ + methodArguments: [{ + totp: { + login: loginRequest, + code, + }, + }], + userCallback(error) { + if (error) { + Utils2fa.reportError(error, callback); + } else { + callback && callback(); + } + }, + }); +}; + +const { loginWithCrowd } = Meteor; + +Meteor.loginWithCrowd = function(username, password, callback) { + Utils2fa.overrideLoginMethod(loginWithCrowd, [username, password], callback, Meteor.loginWithCrowdAndTOTP); +}; diff --git a/app/2fa/client/index.js b/app/2fa/client/index.js index 933bd287703e..24fd7cc72946 100644 --- a/app/2fa/client/index.js +++ b/app/2fa/client/index.js @@ -4,3 +4,4 @@ import './TOTPOAuth'; import './TOTPGoogle'; import './TOTPSaml'; import './TOTPLDAP'; +import './TOTPCrowd'; diff --git a/app/2fa/server/code/ICodeCheck.ts b/app/2fa/server/code/ICodeCheck.ts index 3c8f6a896fc3..3cdd9fb6f4e7 100644 --- a/app/2fa/server/code/ICodeCheck.ts +++ b/app/2fa/server/code/ICodeCheck.ts @@ -9,9 +9,9 @@ export interface IProcessInvalidCodeResult { export interface ICodeCheck { readonly name: string; - isEnabled(user: IUser): boolean; + isEnabled(user: IUser, force?: boolean): boolean; - verify(user: IUser, code: string): boolean; + verify(user: IUser, code: string, force?: boolean): boolean; processInvalidCode(user: IUser): IProcessInvalidCodeResult; } diff --git a/app/2fa/server/code/PasswordCheckFallback.ts b/app/2fa/server/code/PasswordCheckFallback.ts index ad11f0271167..ed6a3898d9a8 100644 --- a/app/2fa/server/code/PasswordCheckFallback.ts +++ b/app/2fa/server/code/PasswordCheckFallback.ts @@ -7,7 +7,10 @@ import { IUser } from '../../../../definition/IUser'; export class PasswordCheckFallback implements ICodeCheck { public readonly name = 'password'; - public isEnabled(user: IUser): boolean { + public isEnabled(user: IUser, force: boolean): boolean { + if (force) { + return true; + } // TODO: Remove this setting for version 4.0 forcing the // password fallback for who has password set. if (settings.get('Accounts_TwoFactorAuthentication_Enforce_Password_Fallback')) { @@ -16,8 +19,8 @@ export class PasswordCheckFallback implements ICodeCheck { return false; } - public verify(user: IUser, code: string): boolean { - if (!this.isEnabled(user)) { + public verify(user: IUser, code: string, force: boolean): boolean { + if (!this.isEnabled(user, force)) { return false; } diff --git a/app/2fa/server/code/index.ts b/app/2fa/server/code/index.ts index 6bf56df20d66..c708400c80d6 100644 --- a/app/2fa/server/code/index.ts +++ b/app/2fa/server/code/index.ts @@ -15,6 +15,7 @@ import { IMethodConnection } from '../../../../definition/IMethodThisType'; export interface ITwoFactorOptions { disablePasswordFallback?: boolean; disableRememberMe?: boolean; + requireSecondFactor?: boolean; // whether any two factor should be required } export const totpCheck = new TOTPCheck(); @@ -83,6 +84,11 @@ export function isAuthorizedForToken(connection: IMethodConnection, user: IUser, return false; } + // if any two factor is required, early abort + if (options.requireSecondFactor) { + return false; + } + if (tokenObject.bypassTwoFactor === true) { return true; } @@ -131,7 +137,29 @@ interface ICheckCodeForUser { connection?: IMethodConnection; } -function _checkCodeForUser({ user, code, method, options = {}, connection }: ICheckCodeForUser): boolean { +const getSecondFactorMethod = (user: IUser, method: string | undefined, options: ITwoFactorOptions): ICodeCheck | undefined => { + // try first getting one of the available methods or the one that was already provided + const selectedMethod = getMethodByNameOrFirstActiveForUser(user, method); + if (selectedMethod) { + return selectedMethod; + } + + // if none found but a second factor is required, chose the password check + if (options.requireSecondFactor) { + return passwordCheckFallback; + } + + // check if password fallback is enabled + if (!options.disablePasswordFallback && passwordCheckFallback.isEnabled(user, !!options.requireSecondFactor)) { + return passwordCheckFallback; + } +}; + +export function checkCodeForUser({ user, code, method, options = {}, connection }: ICheckCodeForUser): boolean { + if (process.env.TEST_MODE && !options.requireSecondFactor) { + return true; + } + if (typeof user === 'string') { user = getUserForCheck(user); } @@ -145,13 +173,10 @@ function _checkCodeForUser({ user, code, method, options = {}, connection }: ICh return true; } - let selectedMethod = getMethodByNameOrFirstActiveForUser(user, method); - + // select a second factor method or return if none is found/available + const selectedMethod = getSecondFactorMethod(user, method, options); if (!selectedMethod) { - if (options.disablePasswordFallback || !passwordCheckFallback.isEnabled(user)) { - return true; - } - selectedMethod = passwordCheckFallback; + return true; } if (!code) { @@ -161,7 +186,7 @@ function _checkCodeForUser({ user, code, method, options = {}, connection }: ICh throw new Meteor.Error('totp-required', 'TOTP Required', { method: selectedMethod.name, ...data, availableMethods }); } - const valid = selectedMethod.verify(user, code); + const valid = selectedMethod.verify(user, code, options.requireSecondFactor); if (!valid) { throw new Meteor.Error('totp-invalid', 'TOTP Invalid', { method: selectedMethod.name }); @@ -173,5 +198,3 @@ function _checkCodeForUser({ user, code, method, options = {}, connection }: ICh return true; } - -export const checkCodeForUser = process.env.TEST_MODE ? (): boolean => true : _checkCodeForUser; diff --git a/app/2fa/server/loginHandler.js b/app/2fa/server/loginHandler.js index 531c87b1a090..ae85326bb196 100644 --- a/app/2fa/server/loginHandler.js +++ b/app/2fa/server/loginHandler.js @@ -19,7 +19,13 @@ callbacks.add('onValidateLogin', (login) => { return login; } - const { totp } = login.methodArguments[0]; + const [loginArgs] = login.methodArguments; + // CAS login doesn't yet support 2FA. + if (loginArgs.cas) { + return login; + } + + const { totp } = loginArgs; checkCodeForUser({ user: login.user, code: totp && totp.code, options: { disablePasswordFallback: true } }); diff --git a/app/api/server/api.js b/app/api/server/api.js index 4fee7cd8f5e9..905049f62367 100644 --- a/app/api/server/api.js +++ b/app/api/server/api.js @@ -653,20 +653,51 @@ API = { }; const defaultOptionsEndpoint = function _defaultOptionsEndpoint() { - if (this.request.method === 'OPTIONS' && this.request.headers['access-control-request-method']) { - if (settings.get('API_Enable_CORS') === true) { - this.response.writeHead(200, { - 'Access-Control-Allow-Origin': settings.get('API_CORS_Origin'), - 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, HEAD, PATCH', - 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, X-User-Id, X-Auth-Token, x-visitor-token, Authorization', - }); - } else { - this.response.writeHead(405); - this.response.write('CORS not enabled. Go to "Admin > General > REST Api" to enable it.'); - } - } else { - this.response.writeHead(404); + // check if a pre-flight request + if (!this.request.headers['access-control-request-method'] && !this.request.headers.origin) { + this.done(); + return; + } + + if (!settings.get('API_Enable_CORS')) { + this.response.writeHead(405); + this.response.write('CORS not enabled. Go to "Admin > General > REST Api" to enable it.'); + this.done(); + return; + } + + const CORSOriginSetting = String(settings.get('API_CORS_Origin')); + + const defaultHeaders = { + 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, HEAD, PATCH', + 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, X-User-Id, X-Auth-Token, x-visitor-token, Authorization', + }; + + if (CORSOriginSetting === '*') { + this.response.writeHead(200, { + 'Access-Control-Allow-Origin': '*', + ...defaultHeaders, + }); + this.done(); + return; + } + + const origins = CORSOriginSetting + .trim() + .split(',') + .map((origin) => String(origin).trim().toLocaleLowerCase()); + + // if invalid origin reply without required CORS headers + if (!origins.includes(this.request.headers.origin)) { + this.done(); + return; } + + this.response.writeHead(200, { + 'Access-Control-Allow-Origin': this.request.headers.origin, + Vary: 'Origin', + ...defaultHeaders, + }); this.done(); }; @@ -679,24 +710,6 @@ const createApi = function _createApi(_api, options = {}) { auth: getUserAuth(), }, options)); - delete _api._config.defaultHeaders['Access-Control-Allow-Origin']; - delete _api._config.defaultHeaders['Access-Control-Allow-Headers']; - delete _api._config.defaultHeaders.Vary; - - if (settings.get('API_Enable_CORS')) { - const origin = settings.get('API_CORS_Origin'); - - if (origin) { - _api._config.defaultHeaders['Access-Control-Allow-Origin'] = origin; - - if (origin !== '*') { - _api._config.defaultHeaders.Vary = 'Origin'; - } - } - - _api._config.defaultHeaders['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, X-User-Id, X-Auth-Token'; - } - return _api; }; diff --git a/app/api/server/v1/channels.js b/app/api/server/v1/channels.js index 76af348d9a6c..baf85dac4781 100644 --- a/app/api/server/v1/channels.js +++ b/app/api/server/v1/channels.js @@ -188,7 +188,7 @@ function createChannelValidator(params) { function createChannel(userId, params) { const readOnly = typeof params.readOnly !== 'undefined' ? params.readOnly : false; - const id = Meteor.runAsUser(userId, () => Meteor.call('createChannel', params.name, params.members ? params.members : [], readOnly, params.customFields)); + const id = Meteor.runAsUser(userId, () => Meteor.call('createChannel', params.name, params.members ? params.members : [], readOnly, params.customFields, params.extraData)); return { channel: findChannelByIdOrName({ params: { roomId: id.rid }, userId: this.userId }), diff --git a/app/api/server/v1/groups.js b/app/api/server/v1/groups.js index ba5002f8bbb4..c3f41db768f7 100644 --- a/app/api/server/v1/groups.js +++ b/app/api/server/v1/groups.js @@ -223,12 +223,16 @@ API.v1.addRoute('groups.create', { authRequired: true }, { if (this.bodyParams.customFields && !(typeof this.bodyParams.customFields === 'object')) { return API.v1.failure('Body param "customFields" must be an object if provided'); } + if (this.bodyParams.extraData && !(typeof this.bodyParams.extraData === 'object')) { + return API.v1.failure('Body param "extraData" must be an object if provided'); + } const readOnly = typeof this.bodyParams.readOnly !== 'undefined' ? this.bodyParams.readOnly : false; let id; + Meteor.runAsUser(this.userId, () => { - id = Meteor.call('createPrivateGroup', this.bodyParams.name, this.bodyParams.members ? this.bodyParams.members : [], readOnly, this.bodyParams.customFields); + id = Meteor.call('createPrivateGroup', this.bodyParams.name, this.bodyParams.members ? this.bodyParams.members : [], readOnly, this.bodyParams.customFields, this.bodyParams.extraData); }); return API.v1.success({ diff --git a/app/api/server/v1/import.js b/app/api/server/v1/import.js index 81f18e38eab7..614c174201d2 100644 --- a/app/api/server/v1/import.js +++ b/app/api/server/v1/import.js @@ -95,6 +95,31 @@ API.v1.addRoute('downloadPendingFiles', { authRequired: true }, { }, }); +API.v1.addRoute('downloadPendingAvatars', { authRequired: true }, { + post() { + if (!this.userId) { + throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'downloadPendingAvatars' }); + } + + if (!hasPermission(this.userId, 'run-import')) { + throw new Meteor.Error('not_authorized'); + } + + const importer = Importers.get('pending-avatars'); + if (!importer) { + throw new Meteor.Error('error-importer-not-defined', 'The Pending File Importer was not found.', { method: 'downloadPendingAvatars' }); + } + + importer.instance = new importer.importer(importer); // eslint-disable-line new-cap + const count = importer.instance.prepareFileCount(); + + return API.v1.success({ + success: true, + count, + }); + }, +}); + API.v1.addRoute('getCurrentImportOperation', { authRequired: true }, { get() { if (!this.userId) { diff --git a/app/api/server/v1/misc.js b/app/api/server/v1/misc.js index b35fc1115363..5d06b01e495e 100644 --- a/app/api/server/v1/misc.js +++ b/app/api/server/v1/misc.js @@ -49,7 +49,8 @@ API.v1.addRoute('info', { authRequired: false }, { API.v1.addRoute('me', { authRequired: true }, { get() { - return API.v1.success(this.getUserInfo(Users.findOneById(this.userId, { fields: getDefaultUserFields() }))); + const { 'services.password.bcrypt': password, ...fields } = getDefaultUserFields(); + return API.v1.success(this.getUserInfo(Users.findOneById(this.userId, { fields }))); }, }); diff --git a/app/api/server/v1/users.js b/app/api/server/v1/users.js index 2e17b8ff9df5..a7d99d933c72 100644 --- a/app/api/server/v1/users.js +++ b/app/api/server/v1/users.js @@ -507,7 +507,15 @@ API.v1.addRoute('users.updateOwnBasicInfo', { authRequired: true }, { typedPassword: this.bodyParams.data.currentPassword, }; - Meteor.runAsUser(this.userId, () => Meteor.call('saveUserProfile', userData, this.bodyParams.customFields)); + // saveUserProfile now uses the default two factor authentication procedures, so we need to provide that + const twoFactorOptions = !userData.typedPassword + ? null + : { + twoFactorCode: userData.typedPassword, + twoFactorMethod: 'password', + }; + + Meteor.runAsUser(this.userId, () => Meteor.call('saveUserProfile', userData, this.bodyParams.customFields, twoFactorOptions)); return API.v1.success({ user: Users.findOneById(this.userId, { fields: API.v1.defaultFieldsToExclude }) }); }, diff --git a/app/apps/server/bridges/bridges.js b/app/apps/server/bridges/bridges.js index ed62b2c6479e..d03160e02d0f 100644 --- a/app/apps/server/bridges/bridges.js +++ b/app/apps/server/bridges/bridges.js @@ -2,6 +2,7 @@ import { AppBridges } from '@rocket.chat/apps-engine/server/bridges'; import { AppActivationBridge } from './activation'; import { AppDetailChangesBridge } from './details'; +import { AppCloudBridge } from './cloud'; import { AppCommandsBridge } from './commands'; import { AppApisBridge } from './api'; import { AppEnvironmentalVariableBridge } from './environmental'; @@ -39,6 +40,7 @@ export class RealAppBridges extends AppBridges { this._uploadBridge = new AppUploadBridge(orch); this._uiInteractionBridge = new UiInteractionBridge(orch); this._schedulerBridge = new AppSchedulerBridge(orch); + this._cloudWorkspaceBridge = new AppCloudBridge(orch); } getCommandBridge() { @@ -108,4 +110,8 @@ export class RealAppBridges extends AppBridges { getSchedulerBridge() { return this._schedulerBridge; } + + getCloudWorkspaceBridge() { + return this._cloudWorkspaceBridge; + } } diff --git a/app/apps/server/bridges/cloud.ts b/app/apps/server/bridges/cloud.ts new file mode 100644 index 000000000000..f8894a0fbb0c --- /dev/null +++ b/app/apps/server/bridges/cloud.ts @@ -0,0 +1,21 @@ +import { Meteor } from 'meteor/meteor'; +import { ICloudWorkspaceBridge } from '@rocket.chat/apps-engine/server/bridges'; +import { IWorkspaceToken } from '@rocket.chat/apps-engine/definition/cloud/IWorkspaceToken'; + +import { getWorkspaceAccessTokenWithScope } from '../../../cloud/server'; +import { AppServerOrchestrator } from '../orchestrator'; + +const boundGetWorkspaceAccessToken = Meteor.bindEnvironment(getWorkspaceAccessTokenWithScope); + +export class AppCloudBridge implements ICloudWorkspaceBridge { + // eslint-disable-next-line no-empty-function + constructor(private readonly orch: AppServerOrchestrator) {} + + public async getWorkspaceToken(scope: string, appId: string): Promise { + this.orch.debugLog(`App ${ appId } is getting the workspace's token`); + + const token = boundGetWorkspaceAccessToken(scope); + + return token; + } +} diff --git a/app/apps/server/orchestrator.js b/app/apps/server/orchestrator.js index 2034b02ad13e..612fe2bdf8a6 100644 --- a/app/apps/server/orchestrator.js +++ b/app/apps/server/orchestrator.js @@ -18,7 +18,7 @@ function isTesting() { return process.env.TEST_MODE === 'true'; } -class AppServerOrchestrator { +export class AppServerOrchestrator { constructor() { this._isInitialized = false; } diff --git a/app/authorization/server/functions/hasRole.js b/app/authorization/server/functions/hasRole.js index e5d8927cbb74..545adc3f737b 100644 --- a/app/authorization/server/functions/hasRole.js +++ b/app/authorization/server/functions/hasRole.js @@ -1,7 +1,10 @@ import { Roles } from '../../../models/server/raw'; export const hasRoleAsync = async (userId, roleNames, scope) => { - roleNames = [].concat(roleNames); + if (!userId || userId === '') { + return false; + } + return Roles.isUserInRoles(userId, roleNames, scope); }; diff --git a/app/cloud/server/functions/buildRegistrationData.js b/app/cloud/server/functions/buildRegistrationData.js index 348702ae93f3..786b3981a9db 100644 --- a/app/cloud/server/functions/buildRegistrationData.js +++ b/app/cloud/server/functions/buildRegistrationData.js @@ -1,10 +1,10 @@ -import { settings } from '../../../settings'; -import { Users } from '../../../models'; +import { settings } from '../../../settings/server'; +import { Users, Statistics } from '../../../models/server'; import { statistics } from '../../../statistics'; import { LICENSE_VERSION } from '../license'; export function buildWorkspaceRegistrationData() { - const stats = statistics.get(); + const stats = Statistics.findLast() || statistics.get(); const address = settings.get('Site_Url'); const siteName = settings.get('Site_Name'); diff --git a/app/cloud/server/functions/getWorkspaceAccessToken.js b/app/cloud/server/functions/getWorkspaceAccessToken.js index 5ae3552e0001..b9e4a35694f3 100644 --- a/app/cloud/server/functions/getWorkspaceAccessToken.js +++ b/app/cloud/server/functions/getWorkspaceAccessToken.js @@ -1,12 +1,7 @@ -import { HTTP } from 'meteor/http'; - - -import { getRedirectUri } from './getRedirectUri'; import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; -import { unregisterWorkspace } from './unregisterWorkspace'; +import { getWorkspaceAccessTokenWithScope } from './getWorkspaceAccessTokenWithScope'; import { Settings } from '../../../models'; import { settings } from '../../../settings'; -import { workspaceScopes } from '../oauthScopes'; export function getWorkspaceAccessToken(forceNew = false, scope = '', save = true) { const { connectToCloud, workspaceRegistered } = retrieveRegistrationStatus(); @@ -15,11 +10,6 @@ export function getWorkspaceAccessToken(forceNew = false, scope = '', save = tru return ''; } - const client_id = settings.get('Cloud_Workspace_Client_Id'); - if (!client_id) { - return ''; - } - const expires = Settings.findOneById('Cloud_Workspace_Access_Token_Expires_At'); const now = new Date(); @@ -27,48 +17,12 @@ export function getWorkspaceAccessToken(forceNew = false, scope = '', save = tru return settings.get('Cloud_Workspace_Access_Token'); } - const cloudUrl = settings.get('Cloud_Url'); - const client_secret = settings.get('Cloud_Workspace_Client_Secret'); - const redirectUri = getRedirectUri(); - - if (scope === '') { - scope = workspaceScopes.join(' '); - } - - let authTokenResult; - try { - authTokenResult = HTTP.post(`${ cloudUrl }/api/oauth/token`, { - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - params: { - client_id, - client_secret, - scope, - grant_type: 'client_credentials', - redirect_uri: redirectUri, - }, - }); - } catch (e) { - if (e.response && e.response.data && e.response.data.error) { - console.error(`Failed to get AccessToken from Rocket.Chat Cloud. Error: ${ e.response.data.error }`); - - if (e.response.data.error === 'oauth_invalid_client_credentials') { - console.error('Server has been unregistered from cloud'); - unregisterWorkspace(); - } - } else { - console.error(e); - } - - return ''; - } + const accessToken = getWorkspaceAccessTokenWithScope(scope); if (save) { - const expiresAt = new Date(); - expiresAt.setSeconds(expiresAt.getSeconds() + authTokenResult.data.expires_in); - - Settings.updateValueById('Cloud_Workspace_Access_Token', authTokenResult.data.access_token); - Settings.updateValueById('Cloud_Workspace_Access_Token_Expires_At', expiresAt); + Settings.updateValueById('Cloud_Workspace_Access_Token', accessToken.token); + Settings.updateValueById('Cloud_Workspace_Access_Token_Expires_At', accessToken.expiresAt); } - return authTokenResult.data.access_token; + return accessToken.token; } diff --git a/app/cloud/server/functions/getWorkspaceAccessTokenWithScope.js b/app/cloud/server/functions/getWorkspaceAccessTokenWithScope.js new file mode 100644 index 000000000000..f7ad77aa38d1 --- /dev/null +++ b/app/cloud/server/functions/getWorkspaceAccessTokenWithScope.js @@ -0,0 +1,66 @@ +import { HTTP } from 'meteor/http'; + + +import { getRedirectUri } from './getRedirectUri'; +import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; +import { unregisterWorkspace } from './unregisterWorkspace'; +import { settings } from '../../../settings'; +import { workspaceScopes } from '../oauthScopes'; + +export function getWorkspaceAccessTokenWithScope(scope = '') { + const { connectToCloud, workspaceRegistered } = retrieveRegistrationStatus(); + + const tokenResponse = { token: '', expiresAt: new Date() }; + + if (!connectToCloud || !workspaceRegistered) { + return tokenResponse; + } + + const client_id = settings.get('Cloud_Workspace_Client_Id'); + if (!client_id) { + return tokenResponse; + } + + if (scope === '') { + scope = workspaceScopes.join(' '); + } + + const cloudUrl = settings.get('Cloud_Url'); + const client_secret = settings.get('Cloud_Workspace_Client_Secret'); + const redirectUri = getRedirectUri(); + + let authTokenResult; + try { + authTokenResult = HTTP.post(`${ cloudUrl }/api/oauth/token`, { + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + params: { + client_id, + client_secret, + scope, + grant_type: 'client_credentials', + redirect_uri: redirectUri, + }, + }); + } catch (e) { + if (e.response && e.response.data && e.response.data.error) { + console.error(`Failed to get AccessToken from Rocket.Chat Cloud. Error: ${ e.response.data.error }`); + + if (e.response.data.error === 'oauth_invalid_client_credentials') { + console.error('Server has been unregistered from cloud'); + unregisterWorkspace(); + } + } else { + console.error(e); + } + + return tokenResponse; + } + + const expiresAt = new Date(); + expiresAt.setSeconds(expiresAt.getSeconds() + authTokenResult.data.expires_in); + + tokenResponse.expiresAt = expiresAt; + tokenResponse.token = authTokenResult.data.access_token; + + return tokenResponse; +} diff --git a/app/cloud/server/index.js b/app/cloud/server/index.js index 43d3816782d7..b574f4fe4776 100644 --- a/app/cloud/server/index.js +++ b/app/cloud/server/index.js @@ -3,6 +3,7 @@ import { SyncedCron } from 'meteor/littledata:synced-cron'; import './methods'; import { getWorkspaceAccessToken } from './functions/getWorkspaceAccessToken'; +import { getWorkspaceAccessTokenWithScope } from './functions/getWorkspaceAccessTokenWithScope'; import { getWorkspaceLicense } from './functions/getWorkspaceLicense'; import { getUserCloudAccessToken } from './functions/getUserCloudAccessToken'; import { getWorkspaceKey } from './functions/getWorkspaceKey'; @@ -40,4 +41,4 @@ Meteor.startup(function() { }); }); -export { getWorkspaceAccessToken, getWorkspaceLicense, getWorkspaceKey, getUserCloudAccessToken }; +export { getWorkspaceAccessToken, getWorkspaceAccessTokenWithScope, getWorkspaceLicense, getWorkspaceKey, getUserCloudAccessToken }; diff --git a/app/custom-oauth/client/custom_oauth_client.js b/app/custom-oauth/client/custom_oauth_client.js index 40e802be8f6e..72b8d9b4c62f 100644 --- a/app/custom-oauth/client/custom_oauth_client.js +++ b/app/custom-oauth/client/custom_oauth_client.js @@ -5,6 +5,7 @@ import { Random } from 'meteor/random'; import { ServiceConfiguration } from 'meteor/service-configuration'; import { OAuth } from 'meteor/oauth'; import s from 'underscore.string'; +import './swapSessionStorage'; import { isURL } from '../../utils/lib/isURL'; diff --git a/app/custom-oauth/client/swapSessionStorage.js b/app/custom-oauth/client/swapSessionStorage.js new file mode 100644 index 000000000000..58e763985ba7 --- /dev/null +++ b/app/custom-oauth/client/swapSessionStorage.js @@ -0,0 +1,42 @@ +import { Meteor } from 'meteor/meteor'; +import { OAuth } from 'meteor/oauth'; +import { Reload } from 'meteor/reload'; + +// TODO: This is a nasty workaround and should be removed as soon as possible +// Firefox is losing the sessionStorage data (v >= 79.0) after the redirect + +if (navigator.userAgent.indexOf('Firefox') !== -1) { + const KEY_NAME = 'Swapped_Storage_Workaround'; + + OAuth.saveDataForRedirect = (loginService, credentialToken) => { + Meteor._localStorage.setItem(KEY_NAME, JSON.stringify({ loginService, credentialToken })); + Reload._migrate(null, { immediateMigration: true }); + }; + + OAuth.getDataAfterRedirect = () => { + let migrationData = Meteor._localStorage.getItem(KEY_NAME); + Meteor._localStorage.removeItem(KEY_NAME); + try { + migrationData = JSON.parse(migrationData); + } catch (error) { + migrationData = null; + } + + if (! (migrationData && migrationData.credentialToken)) { return null; } + + const { credentialToken } = migrationData; + const key = OAuth._storageTokenPrefix + credentialToken; + let credentialSecret; + try { + credentialSecret = sessionStorage.getItem(key); + sessionStorage.removeItem(key); + } catch (e) { + Meteor._debug('error retrieving credentialSecret', e); + } + return { + loginService: migrationData.loginService, + credentialToken, + credentialSecret, + }; + }; +} diff --git a/app/custom-oauth/server/custom_oauth_server.js b/app/custom-oauth/server/custom_oauth_server.js index ad0f6b92c1be..bd698fd90c2b 100644 --- a/app/custom-oauth/server/custom_oauth_server.js +++ b/app/custom-oauth/server/custom_oauth_server.js @@ -73,6 +73,7 @@ export class CustomOAuth { this.identityPath = options.identityPath; this.tokenSentVia = options.tokenSentVia; this.identityTokenSentVia = options.identityTokenSentVia; + this.keyField = options.keyField; this.usernameField = (options.usernameField || '').trim(); this.emailField = (options.emailField || '').trim(); this.nameField = (options.nameField || '').trim(); @@ -334,7 +335,14 @@ export class CustomOAuth { } if (serviceData.username) { - const user = Users.findOneByUsernameAndServiceNameIgnoringCase(serviceData.username, serviceData._id, serviceName); + let user = undefined; + + if (this.keyField === 'username') { + user = Users.findOneByUsernameAndServiceNameIgnoringCase(serviceData.username, serviceData._id, serviceName); + } else if (this.keyField === 'email') { + user = Users.findOneByEmailAddressAndServiceNameIgnoringCase(serviceData.email, serviceData._id, serviceName); + } + if (!user) { return; } diff --git a/app/discussion/client/views/creationDialog/CreateDiscussion.html b/app/discussion/client/views/creationDialog/CreateDiscussion.html index 9eff9c8e57ad..94805e968325 100644 --- a/app/discussion/client/views/creationDialog/CreateDiscussion.html +++ b/app/discussion/client/views/creationDialog/CreateDiscussion.html @@ -118,3 +118,17 @@ {{ description }} + + + + {{#if username}} + + {{> avatar username=username}} + + {{username}} + {{else}} + {{text}} + {{/if}} + {{> icon block="rc-tags__tag-icon" icon="cross"}} + + \ No newline at end of file diff --git a/app/e2e/client/rocketchat.e2e.js b/app/e2e/client/rocketchat.e2e.js index e2867bfba7ba..3be8728ade01 100644 --- a/app/e2e/client/rocketchat.e2e.js +++ b/app/e2e/client/rocketchat.e2e.js @@ -5,10 +5,10 @@ import { Tracker } from 'meteor/tracker'; import { EJSON } from 'meteor/ejson'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; +import { Emitter } from '@rocket.chat/emitter'; import { E2ERoom } from './rocketchat.e2e.room'; import { - Deferred, toString, toArrayBuffer, joinVectorAndEcryptedData, @@ -21,18 +21,19 @@ import { importRawKey, deriveKey, } from './helper'; +import * as banners from '../../../client/lib/banners'; import { Rooms, Subscriptions, Messages } from '../../models'; import { promises } from '../../promises/client'; import { settings } from '../../settings'; import { Notifications } from '../../notifications/client'; import { Layout, call, modal } from '../../ui-utils'; -import * as banners from '../../../client/lib/banners'; - import './events.js'; import './tabbar'; +import { getConfig } from '../../ui-utils/client/config'; + +const debug = [getConfig('debug'), getConfig('debug-e2e')].includes('true'); let failedToDecodeKey = false; -let showingE2EAlert = false; const waitUntilFind = (fn) => new Promise((resolve) => { Tracker.autorun((c) => { @@ -40,25 +41,30 @@ const waitUntilFind = (fn) => new Promise((resolve) => { return result && resolve(result) && c.stop(); }); }); - -class E2E { +class E2E extends Emitter { constructor() { + super(); this.started = false; this.enabled = new ReactiveVar(false); this._ready = new ReactiveVar(false); this.instancesByRoomId = {}; - this.readyPromise = new Deferred(); - this.readyPromise.then(() => { + + this.on('ready', () => { this._ready.set(true); + this.log('startClient -> Done'); + this.log('decryptSubscriptions'); + + this.decryptSubscriptions(); + this.log('decryptSubscriptions -> Done'); }); } log(...msg) { - console.log('[E2E]', ...msg); + debug && console.log('[E2E]', ...msg); } error(...msg) { - console.error('[E2E]', ...msg); + debug && console.error('[E2E]', ...msg); } @@ -70,10 +76,6 @@ class E2E { return this.enabled.get() && this._ready.get(); } - async ready() { - return this.readyPromise; - } - getE2ERoom(rid) { return this.instancesByRoomId[rid]; } @@ -83,8 +85,6 @@ class E2E { } async getInstanceByRoomId(roomId) { - await this.ready(); - const room = await waitUntilFind(() => Rooms.findOne({ _id: roomId, })); @@ -186,21 +186,12 @@ class E2E { }, }); } - - this.readyPromise.resolve(); - this.log('startClient -> Done'); - this.log('decryptPendingSubscriptions'); - - this.decryptPendingSubscriptions(); - this.log('decryptPendingSubscriptions -> Done'); + this.emit('ready'); } async stopClient() { this.log('-> Stop Client'); - // This flag is used to avoid closing unrelated alerts. - if (showingE2EAlert) { - banners.close(); - } + this.closeAlert(); Meteor._localStorage.removeItem('public_key'); Meteor._localStorage.removeItem('private_key'); @@ -209,11 +200,6 @@ class E2E { this.enabled.set(false); this._ready.set(false); this.started = false; - - this.readyPromise = new Deferred(); - this.readyPromise.then(() => { - this._ready.set(true); - }); } async changePassword(newPassword) { @@ -417,26 +403,22 @@ class E2E { async decryptSubscription(rid) { const e2eRoom = await this.getInstanceByRoomId(rid); - this.log('decryptPendingSubscriptions ->', rid); - e2eRoom?.decryptPendingSubscription(); + this.log('decryptSubscription ->', rid); + e2eRoom?.decryptSubscription(); } - async decryptPendingSubscriptions() { + async decryptSubscriptions() { Subscriptions.find({ encrypted: true, }).forEach((room) => this.decryptSubscription(room._id)); } openAlert(config) { - showingE2EAlert = true; - banners.open(config); + banners.open({ id: 'e2e', ...config }); } closeAlert() { - if (showingE2EAlert) { - banners.close(); - } - showingE2EAlert = false; + banners.closeById('e2e'); } } @@ -491,7 +473,7 @@ Meteor.startup(function() { } - doc.encrypted ? e2eRoom.enable() : e2eRoom.pause(); + doc.encrypted ? e2eRoom.unPause() : e2eRoom.pause(); // Cover private groups and direct messages if (!e2eRoom.isSupportedRoomType(doc.t)) { @@ -505,7 +487,7 @@ Meteor.startup(function() { if (!e2eRoom.isReady()) { return; } - e2eRoom.decryptPendingSubscription(); + e2eRoom.decryptSubscription(); }, added: async (doc) => { if (!doc.encrypted && !doc.E2EKey) { diff --git a/app/e2e/client/rocketchat.e2e.room.js b/app/e2e/client/rocketchat.e2e.room.js index 83ac0bf3aa2f..6178b6ce5055 100644 --- a/app/e2e/client/rocketchat.e2e.room.js +++ b/app/e2e/client/rocketchat.e2e.room.js @@ -26,12 +26,12 @@ import { Notifications } from '../../notifications/client'; import { Rooms, Subscriptions, Messages } from '../../models'; import { call } from '../../ui-utils'; import { roomTypes, RoomSettingsEnum } from '../../utils'; +import { getConfig } from '../../ui-utils/client/config'; export const E2E_ROOM_STATES = { NO_PASSWORD_SET: 'NO_PASSWORD_SET', NOT_STARTED: 'NOT_STARTED', DISABLED: 'DISABLED', - PAUSED: 'PAUSED', HANDSHAKE: 'HANDSHAKE', ESTABLISHING: 'ESTABLISHING', CREATING_KEYS: 'CREATING_KEYS', @@ -42,55 +42,39 @@ export const E2E_ROOM_STATES = { }; const KEY_ID = Symbol('keyID'); +const PAUSED = Symbol('PAUSED'); const reduce = (prev, next) => { if (prev === next) { return next === E2E_ROOM_STATES.ERROR; } - - switch (next) { - case E2E_ROOM_STATES.READY: - if (prev === E2E_ROOM_STATES.PAUSED) { - return E2E_ROOM_STATES.READY; - } - return E2E_ROOM_STATES.DISABLED; - case E2E_ROOM_STATES.PAUSED: - if (prev === E2E_ROOM_STATES.READY) { - return E2E_ROOM_STATES.PAUSED; - } - return E2E_ROOM_STATES.DISABLED; - } switch (prev) { - case E2E_ROOM_STATES.PAUSED: - if (next === E2E_ROOM_STATES.READY) { - return E2E_ROOM_STATES.READY; - } - return false; case E2E_ROOM_STATES.NOT_STARTED: - return [E2E_ROOM_STATES.ESTABLISHING, E2E_ROOM_STATES.PAUSED, E2E_ROOM_STATES.DISABLED, E2E_ROOM_STATES.KEYS_RECEIVED].includes(next) && next; + return [E2E_ROOM_STATES.ESTABLISHING, E2E_ROOM_STATES.DISABLED, E2E_ROOM_STATES.KEYS_RECEIVED].includes(next) && next; case E2E_ROOM_STATES.READY: return [E2E_ROOM_STATES.PAUSED, E2E_ROOM_STATES.DISABLED].includes(next) && next; case E2E_ROOM_STATES.ERROR: return [E2E_ROOM_STATES.KEYS_RECEIVED, E2E_ROOM_STATES.NOT_STARTED].includes(next) && next; case E2E_ROOM_STATES.WAITING_KEYS: - return [E2E_ROOM_STATES.KEYS_RECEIVED, E2E_ROOM_STATES.ERROR, E2E_ROOM_STATES.PAUSED, E2E_ROOM_STATES.DISABLED].includes(next) && next; + return [E2E_ROOM_STATES.KEYS_RECEIVED, E2E_ROOM_STATES.ERROR, E2E_ROOM_STATES.DISABLED].includes(next) && next; case E2E_ROOM_STATES.ESTABLISHING: - return [E2E_ROOM_STATES.READY, E2E_ROOM_STATES.KEYS_RECEIVED, E2E_ROOM_STATES.ERROR, E2E_ROOM_STATES.PAUSED, E2E_ROOM_STATES.DISABLED, E2E_ROOM_STATES.WAITING_KEYS].includes(next) && next; + return [E2E_ROOM_STATES.READY, E2E_ROOM_STATES.KEYS_RECEIVED, E2E_ROOM_STATES.ERROR, E2E_ROOM_STATES.DISABLED, E2E_ROOM_STATES.WAITING_KEYS].includes(next) && next; default: return next; } }; +const debug = [getConfig('debug'), getConfig('debug-e2e')].includes('true'); export class E2ERoom extends Emitter { log(...msg) { - if (this.roomId === Session.get('openedRoom')) { + if (debug) { console.log('[E2E ROOM]', `[STATE: ${ this.state }]`, `[RID: ${ this.roomId }]`, ...msg); } } error(...msg) { - if (this.roomId === Session.get('openedRoom')) { + if (debug) { console.error('[E2E ROOM]', `[STATE: ${ this.state }]`, `[RID: ${ this.roomId }]`, ...msg); } } @@ -119,7 +103,7 @@ export class E2ERoom extends Emitter { this.typeOfRoom = t; this.once(E2E_ROOM_STATES.READY, () => this.decryptPendingMessages()); - this.once(E2E_ROOM_STATES.READY, () => this.decryptPendingSubscription()); + this.once(E2E_ROOM_STATES.READY, () => this.decryptSubscription()); this.on('STATE_CHANGED', (prev) => { if (this.roomId === Session.get('openedRoom')) { this.log(`[PREV: ${ prev }]`, 'State CHANGED'); @@ -139,7 +123,15 @@ export class E2ERoom extends Emitter { } pause() { - ![E2E_ROOM_STATES.PAUSED, E2E_ROOM_STATES.DISABLED].includes(this.state) && this.setState(this.state === E2E_ROOM_STATES.READY ? E2E_ROOM_STATES.PAUSED : E2E_ROOM_STATES.DISABLED); + this[PAUSED] = true; + } + + unPause() { + this[PAUSED] = false; + } + + isPaused() { + return this[PAUSED]; } enable() { @@ -158,10 +150,6 @@ export class E2ERoom extends Emitter { return [E2E_ROOM_STATES.DISABLED].includes(this.state); } - isPaused() { - return [E2E_ROOM_STATES.PAUSED].includes(this.state); - } - wait(state) { return new Promise((resolve) => (state === this.state ? resolve(this) : this.once(state, () => resolve(this)))).then((el) => { this.log(this.state, el); @@ -185,14 +173,14 @@ export class E2ERoom extends Emitter { this[KEY_ID] = keyID; } - async decryptPendingSubscription() { + async decryptSubscription() { const subscription = Subscriptions.findOne({ rid: this.roomId, }); const data = await (subscription.lastMessage?.msg && this.decrypt(subscription.lastMessage.msg)); if (!data?.text) { - this.log('decryptPendingSubscriptions nothing to do'); + this.log('decryptSubscriptions nothing to do'); return; } @@ -204,7 +192,7 @@ export class E2ERoom extends Emitter { 'lastMessage.e2e': 'done', }, }); - this.log('decryptPendingSubscriptions Done'); + this.log('decryptSubscriptions Done'); } async decryptPendingMessages() { diff --git a/app/emoji-emojione/lib/generateEmojiIndex.mjs b/app/emoji-emojione/lib/generateEmojiIndex.mjs index f7f82101af9d..d300fd64c6c7 100644 --- a/app/emoji-emojione/lib/generateEmojiIndex.mjs +++ b/app/emoji-emojione/lib/generateEmojiIndex.mjs @@ -1,5 +1,7 @@ /* eslint-disable */ +// before using this script make sure to run: npm i --no-save node-sprite-generator + // node --experimental-modules generateEmojiIndex.mjs import fs from 'fs'; import nsg from 'node-sprite-generator'; diff --git a/app/importer-pending-avatars/server/importer.js b/app/importer-pending-avatars/server/importer.js new file mode 100644 index 000000000000..5d034a8c7d37 --- /dev/null +++ b/app/importer-pending-avatars/server/importer.js @@ -0,0 +1,85 @@ +import { Meteor } from 'meteor/meteor'; + +import { + Base, + ProgressStep, + Selection, +} from '../../importer/server'; +import { Users } from '../../models'; + +export class PendingAvatarImporter extends Base { + constructor(info, importRecord) { + super(info, importRecord); + this.userTags = []; + this.bots = {}; + } + + prepareFileCount() { + this.logger.debug('start preparing import operation'); + super.updateProgress(ProgressStep.PREPARING_STARTED); + + const users = Users.findAllUsersWithPendingAvatar(); + const fileCount = users.count(); + + if (fileCount === 0) { + super.updateProgress(ProgressStep.DONE); + return 0; + } + + this.updateRecord({ 'count.messages': fileCount, messagesstatus: null }); + this.addCountToTotal(fileCount); + + const fileData = new Selection(this.name, [], [], fileCount); + this.updateRecord({ fileData }); + + super.updateProgress(ProgressStep.IMPORTING_FILES); + Meteor.defer(() => { + this.startImport(fileData); + }); + + return fileCount; + } + + startImport() { + const pendingFileUserList = Users.findAllUsersWithPendingAvatar(); + try { + pendingFileUserList.forEach((user) => { + try { + const { _pendingAvatarUrl: url, name, _id } = user; + + try { + if (!url || !url.startsWith('http')) { + return; + } + + Meteor.runAsUser(_id, () => { + try { + Meteor.call('setAvatarFromService', url, undefined, 'url'); + Users.update({ _id }, { $unset: { _pendingAvatarUrl: '' } }); + } catch (error) { + this.logger.warn(`Failed to set ${ name }'s avatar from url ${ url }`); + console.log(`Failed to set ${ name }'s avatar from url ${ url }`); + } + }); + } finally { + this.addCountCompleted(1); + } + } catch (error) { + this.logger.error(error); + } + }); + } catch (error) { + // If the cursor expired, restart the method + if (error && error.codeName === 'CursorNotFound') { + console.log('CursorNotFound'); + return this.startImport(); + } + + super.updateProgress(ProgressStep.ERROR); + throw error; + } + + super.updateProgress(ProgressStep.DONE); + return this.getProgress(); + } +} diff --git a/app/importer-pending-avatars/server/index.js b/app/importer-pending-avatars/server/index.js new file mode 100644 index 000000000000..904fa05e6bce --- /dev/null +++ b/app/importer-pending-avatars/server/index.js @@ -0,0 +1,5 @@ +import { PendingAvatarImporter } from './importer'; +import { Importers } from '../../importer/server'; +import { PendingAvatarImporterInfo } from './info'; + +Importers.add(new PendingAvatarImporterInfo(), PendingAvatarImporter); diff --git a/app/importer-pending-avatars/server/info.js b/app/importer-pending-avatars/server/info.js new file mode 100644 index 000000000000..32e8886cb538 --- /dev/null +++ b/app/importer-pending-avatars/server/info.js @@ -0,0 +1,7 @@ +import { ImporterInfo } from '../../importer/lib/ImporterInfo'; + +export class PendingAvatarImporterInfo extends ImporterInfo { + constructor() { + super('pending-avatars', 'Pending Avatars', ''); + } +} diff --git a/app/importer-slack/server/importer.js b/app/importer-slack/server/importer.js index a82d2e79dd24..a996985ff06f 100644 --- a/app/importer-slack/server/importer.js +++ b/app/importer-slack/server/importer.js @@ -65,7 +65,15 @@ export class SlackImporter extends Base { this.logger.debug(`loaded ${ data.length } ${ typeName }.`); // Insert the channels records. - this.collection.insert({ import: this.importRecord._id, importer: this.name, type: typeName, channels: data }); + if (Base.getBSONSize(data) > Base.getMaxBSONSize()) { + const tmp = Base.getBSONSafeArraysFromAnArray(data); + Object.keys(tmp).forEach((i) => { + const splitChannels = tmp[i]; + this.collection.insert({ import: this.importRecord._id, importer: this.name, type: typeName, name: `${ typeName }/${ i }`, channels: splitChannels, i }); + }); + } else { + this.collection.insert({ import: this.importRecord._id, importer: this.name, type: typeName, channels: data }); + } this.updateRecord({ 'count.channels': tempGroups.length + tempChannels.length + tempDMs.length + tempMpims.length + data.length }); this.addCountToTotal(data.length); return data; @@ -111,7 +119,16 @@ export class SlackImporter extends Base { this.logger.debug(`loaded ${ tempUsers.length } users.`); // Insert the users record - this.collection.insert({ import: this.importRecord._id, importer: this.name, type: 'users', users: tempUsers }); + if (Base.getBSONSize(tempUsers) > Base.getMaxBSONSize()) { + const tmp = Base.getBSONSafeArraysFromAnArray(tempUsers); + Object.keys(tmp).forEach((i) => { + const splitUsers = tmp[i]; + this.collection.insert({ import: this.importRecord._id, importer: this.name, type: 'users', name: `users/${ i }`, users: splitUsers, i }); + }); + } else { + this.collection.insert({ import: this.importRecord._id, importer: this.name, type: 'users', name: 'users', users: tempUsers }); + } + this.updateRecord({ 'count.users': tempUsers.length }); this.addCountToTotal(tempUsers.length); @@ -171,22 +188,57 @@ export class SlackImporter extends Base { ImporterWebsocket.progressUpdated({ rate: 100 }); this.updateRecord({ 'count.messages': messagesCount, messagesstatus: null }); + const roomCount = tempChannels.length + tempGroups.length + tempDMs.length + tempMpims.length; - if ([tempUsers.length, tempChannels.length + tempGroups.length + tempDMs.length + tempMpims.length, messagesCount].some((e) => e === 0)) { + if ([tempUsers.length, roomCount, messagesCount].some((e) => e === 0)) { this.logger.warn(`Loaded ${ tempUsers.length } users, ${ tempChannels.length } channels, ${ tempGroups.length } groups, ${ tempDMs.length } DMs, ${ tempMpims.length } multi party IMs and ${ messagesCount } messages`); super.updateProgress(ProgressStep.ERROR); return this.getProgress(); } - const selectionUsers = tempUsers.map((user) => new SelectionUser(user.id, user.name, user.profile.email, user.deleted, user.is_bot, !user.is_bot)); - const selectionChannels = tempChannels.map((channel) => new SelectionChannel(channel.id, channel.name, channel.is_archived, true, false)); - const selectionGroups = tempGroups.map((channel) => new SelectionChannel(channel.id, channel.name, channel.is_archived, true, true)); - const selectionMpims = tempMpims.map((channel) => new SelectionChannel(channel.id, channel.name, channel.is_archived, true, true)); + const selectionUsers = (() => { + if (tempUsers.length <= 500) { + return tempUsers.map((user) => new SelectionUser(user.id, user.name, user.profile.email, user.deleted, user.is_bot, !user.is_bot)); + } + + return [ + new SelectionUser('users', 'Regular Users', '', false, false, true), + new SelectionUser('bot_users', 'Bot Users', '', false, true, false), + new SelectionUser('deleted_users', 'Deleted Users', '', true, false, true), + ]; + })(); + + const selectionChannels = (() => { + if (roomCount <= 500) { + return tempChannels.map((channel) => new SelectionChannel(channel.id, channel.name, channel.is_archived, true, false)); + } + + return [ + new SelectionChannel('channels', 'Regular Channels', false, true, false), + new SelectionChannel('archived_channels', 'Archived Channels', true, true, false), + ]; + })(); + + const selectionGroups = (() => { + if (roomCount <= 500) { + return tempGroups.map((channel) => new SelectionChannel(channel.id, channel.name, channel.is_archived, true, true)); + } + + return [ + new SelectionChannel('groups', 'Regular Groups', false, true, true), + new SelectionChannel('archived_groups', 'Archived Groups', true, true, true), + ]; + })(); + + const selectionMpims = [ + new SelectionChannel('mpims', 'Multi Party DMs', false, true, true), + new SelectionChannel('archived_mimps', 'Archived Multi Party DMs', true, true, true), + ]; const selectionMessages = this.importRecord.count.messages; super.updateProgress(ProgressStep.USER_SELECTION); - return new Selection(this.name, selectionUsers, selectionChannels.concat(selectionGroups).concat(selectionMpims), selectionMessages); + return new Selection(this.name, selectionUsers, selectionMpims.concat(selectionChannels).concat(selectionGroups), selectionMessages); } performUserImport(user, startedByUserId) { @@ -211,11 +263,13 @@ export class SlackImporter extends Base { Meteor.call('setUsername', user.name, { joinDefaultChannelsSilenced: true }); const url = user.profile.image_original || user.profile.image_512; - try { - Meteor.call('setAvatarFromService', url, undefined, 'url'); - } catch (error) { - this.logger.warn(`Failed to set ${ user.name }'s avatar from url ${ url }`); - console.log(`Failed to set ${ user.name }'s avatar from url ${ url }`); + if (url) { + try { + Users.update({ _id: userId }, { $set: { _pendingAvatarUrl: url } }); + } catch (error) { + this.logger.warn(`Failed to set ${ user.name }'s avatar from url ${ url }`); + console.log(`Failed to set ${ user.name }'s avatar from url ${ url }`); + } } // Slack's is -18000 which translates to Rocket.Chat's after dividing by 3600 @@ -266,7 +320,9 @@ export class SlackImporter extends Base { this.logger.warn(`Failed to import user mention with name: ${ user }`); } }); - message.mentions.push(...users); + + const filteredUsers = users.filter((u) => u); + message.mentions.push(...filteredUsers); if (!message.channels) { message.channels = []; @@ -282,7 +338,9 @@ export class SlackImporter extends Base { this.logger.warn(`Failed to import channel mention with name: ${ chan }`); } }); - message.channels.push(...channels); + + const filteredChannels = channels.filter((c) => c); + message.channels.push(...filteredChannels); } processMessageSubType(message, room, msgDataDefaults, missedTypes) { @@ -448,7 +506,12 @@ export class SlackImporter extends Base { if (message.thread_ts && (message.thread_ts !== message.ts)) { msgObj.tmid = `slack-${ slackChannel.id }-${ message.thread_ts.replace(/\./g, '-') }`; } - insertMessage(fileUser, msgObj, room, this._anyExistingSlackMessage); + try { + insertMessage(fileUser, msgObj, room, this._anyExistingSlackMessage); + } catch (e) { + this.logger.warn(`Failed to import the message file: ${ msgDataDefaults._id }-${ fileIndex }`); + this.logger.error(e); + } }); } @@ -507,6 +570,7 @@ export class SlackImporter extends Base { insertMessage(this.getRocketUserFromUserId(message.user), msgObj, room, this._anyExistingSlackMessage); } catch (e) { this.logger.warn(`Failed to import the message: ${ msgDataDefaults._id }`); + this.logger.error(e); } } } @@ -537,51 +601,56 @@ export class SlackImporter extends Base { this._userIdReference = {}; super.updateProgress(ProgressStep.IMPORTING_USERS); - this.users.users.forEach((user) => this.performUserImport(user, startedByUserId)); - this.collection.update({ _id: this.users._id }, { $set: { users: this.users.users } }); + for (const list of this.userLists) { + list.users.forEach((user) => this.performUserImport(user, startedByUserId)); + this.collection.update({ _id: list._id }, { $set: { users: list.users } }); + } } _importChannels(startedByUserId, channelNames) { - if (!this.channels || !this.channels.channels) { - return; - } - super.updateProgress(ProgressStep.IMPORTING_CHANNELS); - this.channels.channels.forEach((channel) => { - if (!channel.do_import) { - this.addCountCompleted(1); - return; - } - channelNames.push(channel.name); + for (const list of this.channelsLists) { + list.channels.forEach((channel) => { + if (!channel.do_import) { + this.addCountCompleted(1); + return; + } + + if (channelNames.includes(channel.name)) { + this.logger.warn(`Duplicated channel name will be skipped: ${ channel.name }`); + return; + } + channelNames.push(channel.name); - Meteor.runAsUser(startedByUserId, () => { - const existingRoom = this._findExistingRoom(channel.name); + Meteor.runAsUser(startedByUserId, () => { + const existingRoom = this._findExistingRoom(channel.name); - if (existingRoom || channel.is_general) { - if (channel.is_general && existingRoom && channel.name !== existingRoom.name) { - Meteor.call('saveRoomSettings', 'GENERAL', 'roomName', channel.name); - } + if (existingRoom || channel.is_general) { + if (channel.is_general && existingRoom && channel.name !== existingRoom.name) { + Meteor.call('saveRoomSettings', 'GENERAL', 'roomName', channel.name); + } - channel.rocketId = channel.is_general ? 'GENERAL' : existingRoom._id; - Rooms.update({ _id: channel.rocketId }, { $addToSet: { importIds: channel.id } }); - } else { - const users = this._getChannelUserList(channel); - const userId = this.getImportedRocketUserIdFromSlackUserId(channel.creator) || startedByUserId; + channel.rocketId = channel.is_general ? 'GENERAL' : existingRoom._id; + Rooms.update({ _id: channel.rocketId }, { $addToSet: { importIds: channel.id } }); + } else { + const users = this._getChannelUserList(channel); + const userId = this.getImportedRocketUserIdFromSlackUserId(channel.creator) || startedByUserId; - Meteor.runAsUser(userId, () => { - const returned = Meteor.call('createChannel', channel.name, users); - channel.rocketId = returned.rid; - }); + Meteor.runAsUser(userId, () => { + const returned = Meteor.call('createChannel', channel.name, users); + channel.rocketId = returned.rid; + }); - this._updateImportedChannelTopicAndDescription(channel); - } + this._updateImportedChannelTopicAndDescription(channel); + } - this.addCountCompleted(1); + this.addCountCompleted(1); + }); }); - }); - this.collection.update({ _id: this.channels._id }, { $set: { channels: this.channels.channels } }); + this.collection.update({ _id: list._id }, { $set: { channels: list.channels } }); + } } _findExistingRoom(name) { @@ -616,46 +685,49 @@ export class SlackImporter extends Base { }, []); } - _importPrivateGroupList(startedByUserId, list, channelNames) { - if (!list || !list.channels) { - return; - } + _importPrivateGroupList(startedByUserId, listList, channelNames) { + for (const list of listList) { + list.channels.forEach((channel) => { + if (!channel.do_import) { + this.addCountCompleted(1); + return; + } - list.channels.forEach((channel) => { - if (!channel.do_import) { - this.addCountCompleted(1); - return; - } + if (channelNames.includes(channel.name)) { + this.logger.warn(`Duplicated group name will be skipped: ${ channel.name }`); + return; + } - channelNames.push(channel.name); + channelNames.push(channel.name); - Meteor.runAsUser(startedByUserId, () => { - const existingRoom = this._findExistingRoom(channel.name); + Meteor.runAsUser(startedByUserId, () => { + const existingRoom = this._findExistingRoom(channel.name); - if (existingRoom) { - channel.rocketId = existingRoom._id; - Rooms.update({ _id: channel.rocketId }, { $addToSet: { importIds: channel.id } }); - } else { - const users = this._getChannelUserList(channel); + if (existingRoom) { + channel.rocketId = existingRoom._id; + Rooms.update({ _id: channel.rocketId }, { $addToSet: { importIds: channel.id } }); + } else { + const users = this._getChannelUserList(channel); - const userId = this.getImportedRocketUserIdFromSlackUserId(channel.creator) || startedByUserId; - Meteor.runAsUser(userId, () => { - const returned = Meteor.call('createPrivateGroup', channel.name, users); - channel.rocketId = returned.rid; - }); + const userId = this.getImportedRocketUserIdFromSlackUserId(channel.creator) || startedByUserId; + Meteor.runAsUser(userId, () => { + const returned = Meteor.call('createPrivateGroup', channel.name, users); + channel.rocketId = returned.rid; + }); - this._updateImportedChannelTopicAndDescription(channel); - } + this._updateImportedChannelTopicAndDescription(channel); + } - this.addCountCompleted(1); + this.addCountCompleted(1); + }); }); - }); - this.collection.update({ _id: list._id }, { $set: { channels: list.channels } }); + this.collection.update({ _id: list._id }, { $set: { channels: list.channels } }); + } } _importGroups(startedByUserId, channelNames) { - this._importPrivateGroupList(startedByUserId, this.groups, channelNames); + this._importPrivateGroupList(startedByUserId, this.groupsLists, channelNames); } _updateImportedChannelTopicAndDescription(slackChannel) { @@ -676,101 +748,111 @@ export class SlackImporter extends Base { } _importMpims(startedByUserId, channelNames) { - if (!this.mpims || !this.mpims.channels) { - return; - } - const maxUsers = settings.get('DirectMesssage_maxUsers') || 1; - this.mpims.channels.forEach((channel) => { - if (!channel.do_import) { - this.addCountCompleted(1); - return; - } - channelNames.push(channel.name); + for (const list of this.mpimsLists) { + list.channels.forEach((channel) => { + if (!channel.do_import) { + this.addCountCompleted(1); + return; + } - Meteor.runAsUser(startedByUserId, () => { - const users = this._getChannelUserList(channel, true, true); - const existingRoom = Rooms.findOneDirectRoomContainingAllUserIDs(users, { fields: { _id: 1 } }); + if (channelNames.includes(channel.name)) { + this.logger.warn(`Duplicated multi party IM name will be skipped: ${ channel.name }`); + return; + } - if (existingRoom) { - channel.rocketId = existingRoom._id; - Rooms.update({ _id: channel.rocketId }, { $addToSet: { importIds: channel.id } }); - } else { - const userId = this.getImportedRocketUserIdFromSlackUserId(channel.creator) || startedByUserId; - Meteor.runAsUser(userId, () => { - // If there are too many users for a direct room, then create a private group instead - if (users.length > maxUsers) { - const usernames = users.map((user) => user.username); - const group = Meteor.call('createPrivateGroup', channel.name, usernames); - channel.rocketId = group.rid; - return; - } + channelNames.push(channel.name); - const newRoom = createDirectRoom(users); - channel.rocketId = newRoom._id; - }); + Meteor.runAsUser(startedByUserId, () => { + const users = this._getChannelUserList(channel, true, true); + const existingRoom = Rooms.findOneDirectRoomContainingAllUserIDs(users, { fields: { _id: 1 } }); - this._updateImportedChannelTopicAndDescription(channel); - } + if (existingRoom) { + channel.rocketId = existingRoom._id; + Rooms.update({ _id: channel.rocketId }, { $addToSet: { importIds: channel.id } }); + } else { + const userId = this.getImportedRocketUserIdFromSlackUserId(channel.creator) || startedByUserId; + Meteor.runAsUser(userId, () => { + // If there are too many users for a direct room, then create a private group instead + if (users.length > maxUsers) { + const usernames = users.map((user) => user.username); + const group = Meteor.call('createPrivateGroup', channel.name, usernames); + channel.rocketId = group.rid; + return; + } + + const newRoom = createDirectRoom(users); + channel.rocketId = newRoom._id; + }); - this.addCountCompleted(1); + this._updateImportedChannelTopicAndDescription(channel); + } + + this.addCountCompleted(1); + }); }); - }); - this.collection.update({ _id: this.mpims._id }, { $set: { channels: this.mpims.channels } }); + this.collection.update({ _id: list._id }, { $set: { channels: list.channels } }); + } } _importDMs(startedByUserId, channelNames) { - if (!this.dms || !this.dms.channels) { - return; - } + for (const list of this.dmsLists) { + list.channels.forEach((channel) => { + if (channelNames.includes(channel.id)) { + this.logger.warn(`Duplicated DM id will be skipped (DMs): ${ channel.id }`); + return; + } + channelNames.push(channel.id); - this.dms.channels.forEach((channel) => { - channelNames.push(channel.id); + if (!channel.members || channel.members.length !== 2) { + this.addCountCompleted(1); + return; + } - if (!channel.members || channel.members.length !== 2) { - this.addCountCompleted(1); - return; - } + Meteor.runAsUser(startedByUserId, () => { + const user1 = this.getRocketUserFromUserId(channel.members[0]); + const user2 = this.getRocketUserFromUserId(channel.members[1]); - Meteor.runAsUser(startedByUserId, () => { - const user1 = this.getRocketUserFromUserId(channel.members[0]); - const user2 = this.getRocketUserFromUserId(channel.members[1]); + const existingRoom = Rooms.findOneDirectRoomContainingAllUserIDs([user1, user2], { fields: { _id: 1 } }); - const existingRoom = Rooms.findOneDirectRoomContainingAllUserIDs([user1, user2], { fields: { _id: 1 } }); + if (existingRoom) { + channel.rocketId = existingRoom._id; + Rooms.update({ _id: channel.rocketId }, { $addToSet: { importIds: channel.id } }); + } else { + if (!user1) { + this.logger.error(`DM creation: User not found for id ${ channel.members[0] } and channel id ${ channel.id }`); + return; + } - if (existingRoom) { - channel.rocketId = existingRoom._id; - Rooms.update({ _id: channel.rocketId }, { $addToSet: { importIds: channel.id } }); - } else { - if (!user1) { - this.logger.error(`DM creation: User not found for id ${ channel.members[0] } and channel id ${ channel.id }`); - return; - } + if (!user2) { + this.logger.error(`DM creation: User not found for id ${ channel.members[1] } and channel id ${ channel.id }`); + return; + } - if (!user2) { - this.logger.error(`DM creation: User not found for id ${ channel.members[1] } and channel id ${ channel.id }`); - return; + const roomInfo = Meteor.runAsUser(user1._id, () => Meteor.call('createDirectMessage', user2.username)); + channel.rocketId = roomInfo.rid; + Rooms.update({ _id: channel.rocketId }, { $addToSet: { importIds: channel.id } }); } - const roomInfo = Meteor.runAsUser(user1._id, () => Meteor.call('createDirectMessage', user2.username)); - channel.rocketId = roomInfo.rid; - Rooms.update({ _id: channel.rocketId }, { $addToSet: { importIds: channel.id } }); - } - - this.addCountCompleted(1); + this.addCountCompleted(1); + }); }); - }); - this.collection.update({ _id: this.dms._id }, { $set: { channels: this.dms.channels } }); + this.collection.update({ _id: list._id }, { $set: { channels: list.channels } }); + } } _importMessages(startedByUserId, channelNames) { const missedTypes = {}; super.updateProgress(ProgressStep.IMPORTING_MESSAGES); for (const channel of channelNames) { + if (!channel) { + continue; + } + const slackChannel = this.getSlackChannelFromName(channel); const room = Rooms.findOneById(slackChannel.rocketId, { fields: { usernames: 1, t: 1, name: 1 } }); @@ -785,7 +867,14 @@ export class SlackImporter extends Base { const packId = pack.i ? `${ pack.date }.${ pack.i }` : pack.date; this.updateRecord({ messagesstatus: `${ channel }/${ packId } (${ pack.messages.length })` }); - pack.messages.forEach((message) => this.performMessageImport(message, room, missedTypes, slackChannel)); + pack.messages.forEach((message) => { + try { + return this.performMessageImport(message, room, missedTypes, slackChannel); + } catch (e) { + this.logger.warn(`Failed to import message with timestamp ${ String(message.ts) } to room ${ room._id }`); + this.logger.debug(e); + } + }); }); }); } @@ -796,55 +885,98 @@ export class SlackImporter extends Base { } _applyUserSelection(importSelection) { + if (importSelection.users.length === 3 && importSelection.users[0].user_id === 'users') { + const regularUsers = importSelection.users[0].do_import; + const botUsers = importSelection.users[1].do_import; + const deletedUsers = importSelection.users[2].do_import; + + for (const list of this.userLists) { + Object.keys(list.users).forEach((k) => { + const u = list.users[k]; + + if (u.is_bot) { + u.do_import = botUsers; + } else if (u.deleted) { + u.do_import = deletedUsers; + } else { + u.do_import = regularUsers; + } + }); + + this.collection.update({ _id: list._id }, { $set: { users: list.users } }); + } + } + Object.keys(importSelection.users).forEach((key) => { const user = importSelection.users[key]; - Object.keys(this.users.users).forEach((k) => { - const u = this.users.users[k]; - if (u.id === user.user_id) { - u.do_import = user.do_import; - } - }); + + for (const list of this.userLists) { + Object.keys(list.users).forEach((k) => { + const u = list.users[k]; + if (u.id === user.user_id) { + u.do_import = user.do_import; + } + }); + + this.collection.update({ _id: list._id }, { $set: { users: list.users } }); + } }); - this.collection.update({ _id: this.users._id }, { $set: { users: this.users.users } }); } _applyChannelSelection(importSelection) { - const iterateChannelList = (list, channel_id, do_import) => { - Object.keys(list).forEach((k) => { - const c = list[k]; - if (c.id === channel_id) { - c.do_import = do_import; + const iterateChannelList = (listList, channel_id, do_import) => { + for (const list of listList) { + for (const c of list.channels) { + if (!c) { + continue; + } + + if (channel_id === '*') { + if (!c.archived) { + c.do_import = do_import; + } + } else if (channel_id === '*/archived') { + if (c.archived) { + c.do_import = do_import; + } + } else if (c.id === channel_id) { + c.do_import = do_import; + } } - }); + + this.collection.update({ _id: list._id }, { $set: { channels: list.channels } }); + } }; Object.keys(importSelection.channels).forEach((key) => { const channel = importSelection.channels[key]; - if (this.channels && this.channels.channels) { - iterateChannelList(this.channels.channels, channel.channel_id, channel.do_import); - } - - if (this.groups && this.groups.channels) { - iterateChannelList(this.groups.channels, channel.channel_id, channel.do_import); - } - - if (this.mpims && this.mpims.channels) { - iterateChannelList(this.mpims.channels, channel.channel_id, channel.do_import); + switch (channel.channel_id) { + case 'channels': + iterateChannelList(this.channelsLists, '*', channel.do_import); + break; + case 'archived_channels': + iterateChannelList(this.channelsLists, '*/archived', channel.do_import); + break; + case 'groups': + iterateChannelList(this.groupsLists, '*', channel.do_import); + break; + case 'archived_groups': + iterateChannelList(this.groupsLists, '*/archived', channel.do_import); + break; + case 'mpims': + iterateChannelList(this.mpimsLists, '*', channel.do_import); + break; + case 'archived_mpims': + iterateChannelList(this.mpimsLists, '*/archived', channel.do_import); + break; + default: + iterateChannelList(this.channelsLists, channel.channel_id, channel.do_import); + iterateChannelList(this.groupsLists, channel.channel_id, channel.do_import); + iterateChannelList(this.mpimsLists, channel.channel_id, channel.do_import); + break; } }); - - if (this.channels && this.channels.channels) { - this.collection.update({ _id: this.channels._id }, { $set: { channels: this.channels.channels } }); - } - - if (this.groups && this.groups.channels) { - this.collection.update({ _id: this.groups._id }, { $set: { channels: this.groups.channels } }); - } - - if (this.mpims && this.mpims.channels) { - this.collection.update({ _id: this.mpims._id }, { $set: { channels: this.mpims.channels } }); - } } startImport(importSelection) { @@ -855,11 +987,11 @@ export class SlackImporter extends Base { this.bots = {}; } - this.users = RawImports.findOne({ import: this.importRecord._id, type: 'users' }); - this.channels = RawImports.findOne({ import: this.importRecord._id, type: 'channels' }); - this.groups = RawImports.findOne({ import: this.importRecord._id, type: 'groups' }); - this.dms = RawImports.findOne({ import: this.importRecord._id, type: 'DMs' }); - this.mpims = RawImports.findOne({ import: this.importRecord._id, type: 'mpims' }); + this.userLists = RawImports.find({ import: this.importRecord._id, type: 'users' }).fetch(); + this.channelsLists = RawImports.find({ import: this.importRecord._id, type: 'channels' }).fetch(); + this.groupsLists = RawImports.find({ import: this.importRecord._id, type: 'groups' }).fetch(); + this.dmsLists = RawImports.find({ import: this.importRecord._id, type: 'DMs' }).fetch(); + this.mpimsLists = RawImports.find({ import: this.importRecord._id, type: 'mpims' }).fetch(); this._userDataCache = {}; this._anyExistingSlackMessage = Boolean(Messages.findOne({ _id: /slack\-.*/ })); @@ -890,15 +1022,14 @@ export class SlackImporter extends Base { super.updateProgress(ProgressStep.FINISHING); try { - if (this.channels) { - this._archiveChannelsAsNeeded(startedByUserId, this.channels); - } - if (this.groups) { - this._archiveChannelsAsNeeded(startedByUserId, this.groups); - } - if (this.mpims) { - this._archiveChannelsAsNeeded(startedByUserId, this.mpims); - } + this._archiveChannelsAsNeeded(startedByUserId, this.channelsLists); + this._archiveChannelsAsNeeded(startedByUserId, this.groupsLists); + this._archiveChannelsAsNeeded(startedByUserId, this.mpimsLists); + + this._updateRoomsLastMessage(this.channelsLists); + this._updateRoomsLastMessage(this.groupsLists); + this._updateRoomsLastMessage(this.mpimsLists); + this._updateRoomsLastMessage(this.dmsLists); } catch (e) { // If it failed to archive some channel, it's no reason to flag the import as incomplete // Just report the error but keep the import as successful. @@ -918,40 +1049,52 @@ export class SlackImporter extends Base { return this.getProgress(); } - _archiveChannelsAsNeeded(startedByUserId, list) { - list.channels.forEach((channel) => { - if (channel.do_import && channel.is_archived && channel.rocketId) { - Meteor.runAsUser(startedByUserId, function() { - Meteor.call('archiveRoom', channel.rocketId); - }); - } - }); + _archiveChannelsAsNeeded(startedByUserId, listList) { + for (const list of listList) { + list.channels.forEach((channel) => { + if (channel.do_import && channel.is_archived && channel.rocketId) { + Meteor.runAsUser(startedByUserId, function() { + Meteor.call('archiveRoom', channel.rocketId); + }); + } + }); + } + } + + _updateRoomsLastMessage(listList) { + for (const list of listList) { + list.channels.forEach((channel) => { + if (channel.do_import && channel.rocketId) { + Rooms.resetLastMessageById(channel.rocketId); + } + }); + } } getSlackChannelFromName(channelName) { - if (this.channels && this.channels.channels) { - const channel = this.channels.channels.find((channel) => channel.name === channelName); + for (const list of this.channelsLists) { + const channel = list.channels.find((channel) => channel.name === channelName); if (channel) { return channel; } } - if (this.groups && this.groups.channels) { - const group = this.groups.channels.find((channel) => channel.name === channelName); + for (const list of this.groupsLists) { + const group = list.channels.find((channel) => channel.name === channelName); if (group) { return group; } } - if (this.mpims && this.mpims.channels) { - const group = this.mpims.channels.find((channel) => channel.name === channelName); + for (const list of this.mpimsLists) { + const group = list.channels.find((channel) => channel.name === channelName); if (group) { return group; } } - if (this.dms && this.dms.channels) { - const dm = this.dms.channels.find((channel) => channel.id === channelName); + for (const list of this.dmsLists) { + const dm = list.channels.find((channel) => channel.id === channelName); if (dm) { return dm; } @@ -987,17 +1130,19 @@ export class SlackImporter extends Base { return 'rocket.cat'; } - for (const user of this.users.users) { - if (user.id !== slackUserId) { - continue; - } + for (const list of this.userLists) { + for (const user of list.users) { + if (user.id !== slackUserId) { + continue; + } - if (user.do_import) { - return user.rocketId; - } + if (user.do_import) { + return user.rocketId; + } - if (user.is_bot) { - return 'rocket.cat'; + if (user.is_bot) { + return 'rocket.cat'; + } } } } diff --git a/app/importer/server/classes/ImporterBase.js b/app/importer/server/classes/ImporterBase.js index 17e36687786a..a8c5c3cea55d 100644 --- a/app/importer/server/classes/ImporterBase.js +++ b/app/importer/server/classes/ImporterBase.js @@ -41,12 +41,12 @@ export class Base { * The max BSON object size we can store in MongoDB is 16777216 bytes * but for some reason the mongo instanace which comes with Meteor * errors out for anything close to that size. So, we are rounding it - * down to 8000000 bytes. + * down to 6000000 bytes. * * @returns {number} 8000000 bytes. */ static getMaxBSONSize() { - return 8000000; + return 6000000; } /** diff --git a/app/lib/server/functions/addOAuthService.js b/app/lib/server/functions/addOAuthService.js index 065152841499..f1117cc11d63 100644 --- a/app/lib/server/functions/addOAuthService.js +++ b/app/lib/server/functions/addOAuthService.js @@ -8,9 +8,9 @@ export function addOAuthService(name, values = {}) { name = name.toLowerCase().replace(/[^a-z0-9_]/g, ''); name = s.capitalize(name); settings.add(`Accounts_OAuth_Custom-${ name }` , values.enabled || false , { type: 'boolean', group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Enable', persistent: true }); - settings.add(`Accounts_OAuth_Custom-${ name }-url` , values.serverURL || '' , { type: 'string' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'URL', persistent: true }); + settings.add(`Accounts_OAuth_Custom-${ name }-url` , values.serverURL || '' , { type: 'string' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'URL', persistent: true }); settings.add(`Accounts_OAuth_Custom-${ name }-token_path` , values.tokenPath || '/oauth/token' , { type: 'string' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Token_Path', persistent: true }); - settings.add(`Accounts_OAuth_Custom-${ name }-token_sent_via` , values.tokenSentVia || 'payload' , { type: 'select' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Token_Sent_Via', persistent: true, values: [{ key: 'header', i18nLabel: 'Header' }, { key: 'payload', i18nLabel: 'Payload' }] }); + settings.add(`Accounts_OAuth_Custom-${ name }-token_sent_via` , values.tokenSentVia || 'payload' , { type: 'select' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Token_Sent_Via', persistent: true, values: [{ key: 'header', i18nLabel: 'Header' }, { key: 'payload', i18nLabel: 'Payload' }] }); settings.add(`Accounts_OAuth_Custom-${ name }-identity_token_sent_via`, values.identityTokenSentVia || 'default' , { type: 'select' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Identity_Token_Sent_Via', persistent: true, values: [{ key: 'default', i18nLabel: 'Same_As_Token_Sent_Via' }, { key: 'header', i18nLabel: 'Header' }, { key: 'payload', i18nLabel: 'Payload' }] }); settings.add(`Accounts_OAuth_Custom-${ name }-identity_path` , values.identityPath || '/me' , { type: 'string' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Identity_Path', persistent: true }); settings.add(`Accounts_OAuth_Custom-${ name }-authorize_path` , values.authorizePath || '/oauth/authorize' , { type: 'string' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Authorize_Path', persistent: true }); @@ -22,6 +22,7 @@ export function addOAuthService(name, values = {}) { settings.add(`Accounts_OAuth_Custom-${ name }-button_label_text` , values.buttonLabelText || '' , { type: 'string' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Button_Label_Text', persistent: true }); settings.add(`Accounts_OAuth_Custom-${ name }-button_label_color` , values.buttonLabelColor || '#FFFFFF' , { type: 'string' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Button_Label_Color', persistent: true }); settings.add(`Accounts_OAuth_Custom-${ name }-button_color` , values.buttonColor || '#1d74f5' , { type: 'string' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Button_Color', persistent: true }); + settings.add(`Accounts_OAuth_Custom-${ name }-key_field` , values.keyField || 'username' , { type: 'select' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Key_Field', persistent: true, values: [{ key: 'username', i18nLabel: 'Username' }, { key: 'email', i18nLabel: 'Email' }] }); settings.add(`Accounts_OAuth_Custom-${ name }-username_field` , values.usernameField || '' , { type: 'string' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Username_Field', persistent: true }); settings.add(`Accounts_OAuth_Custom-${ name }-email_field` , values.emailField || '' , { type: 'string' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Email_Field', persistent: true }); settings.add(`Accounts_OAuth_Custom-${ name }-name_field` , values.nameField || '' , { type: 'string' , group: 'OAuth', section: `Custom OAuth: ${ name }`, i18nLabel: 'Accounts_OAuth_Custom_Name_Field', persistent: true }); diff --git a/app/lib/server/functions/createRoom.js b/app/lib/server/functions/createRoom.js index 3d5d4ca886ee..8bc4c170b67f 100644 --- a/app/lib/server/functions/createRoom.js +++ b/app/lib/server/functions/createRoom.js @@ -91,7 +91,6 @@ export const createRoom = function(type, name, owner, members = [], readOnly, ex if (type === 'c') { callbacks.run('beforeCreateChannel', owner, room); } - room = Rooms.createWithFullRoomData(room); for (const username of members) { diff --git a/app/lib/server/functions/notifications/email.js b/app/lib/server/functions/notifications/email.js index 2cf06ed1277c..d49bf1c44a1f 100644 --- a/app/lib/server/functions/notifications/email.js +++ b/app/lib/server/functions/notifications/email.js @@ -160,7 +160,7 @@ export function getEmailData({ headers: {}, }; - if (sender.emails?.length > 0) { + if (sender.emails?.length > 0 && settings.get('Add_Sender_To_ReplyTo')) { const [senderEmail] = sender.emails; email.headers['Reply-To'] = generateNameEmail(username, senderEmail.address); } diff --git a/app/lib/server/functions/saveUser.js b/app/lib/server/functions/saveUser.js index 198a730f50cf..bc986a54bd32 100644 --- a/app/lib/server/functions/saveUser.js +++ b/app/lib/server/functions/saveUser.js @@ -199,36 +199,32 @@ 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; + if (bio && 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; } }; const handleNickname = (updateUser, nickname) => { - if (nickname) { - if (nickname.trim()) { - if (typeof nickname !== 'string' || nickname.length > 120) { - throw new Meteor.Error('error-invalid-field', 'nickname', { - method: 'saveUserProfile', - }); - } - updateUser.$set = updateUser.$set || {}; - updateUser.$set.nickname = nickname; - } else { - updateUser.$unset = updateUser.$unset || {}; - updateUser.$unset.nickname = 1; + if (nickname && nickname.trim()) { + if (typeof nickname !== 'string' || nickname.length > 120) { + throw new Meteor.Error('error-invalid-field', 'nickname', { + method: 'saveUserProfile', + }); } + updateUser.$set = updateUser.$set || {}; + updateUser.$set.nickname = nickname; + } else { + updateUser.$unset = updateUser.$unset || {}; + updateUser.$unset.nickname = 1; } }; diff --git a/app/lib/server/functions/setUserAvatar.js b/app/lib/server/functions/setUserAvatar.js index 7229d5a294e4..bae4c45809af 100644 --- a/app/lib/server/functions/setUserAvatar.js +++ b/app/lib/server/functions/setUserAvatar.js @@ -18,13 +18,13 @@ export const setUserAvatar = function(user, dataURI, contentType, service) { try { result = HTTP.get(dataURI, { npmRequestOptions: { encoding: 'binary', rejectUnauthorized: false } }); if (!result) { - console.log(`Not a valid response, from the avatar url: ${ dataURI }`); - throw new Meteor.Error('error-avatar-invalid-url', `Invalid avatar URL: ${ dataURI }`, { function: 'setUserAvatar', url: dataURI }); + console.log(`Not a valid response, from the avatar url: ${ encodeURI(dataURI) }`); + throw new Meteor.Error('error-avatar-invalid-url', `Invalid avatar URL: ${ encodeURI(dataURI) }`, { function: 'setUserAvatar', url: dataURI }); } } catch (error) { if (!error.response || error.response.statusCode !== 404) { - console.log(`Error while handling the setting of the avatar from a url (${ dataURI }) for ${ user.username }:`, error); - throw new Meteor.Error('error-avatar-url-handling', `Error while handling avatar setting from a URL (${ dataURI }) for ${ user.username }`, { function: 'RocketChat.setUserAvatar', url: dataURI, username: user.username }); + console.log(`Error while handling the setting of the avatar from a url (${ encodeURI(dataURI) }) for ${ user.username }:`, error); + throw new Meteor.Error('error-avatar-url-handling', `Error while handling avatar setting from a URL (${ encodeURI(dataURI) }) for ${ user.username }`, { function: 'RocketChat.setUserAvatar', url: dataURI, username: user.username }); } } diff --git a/app/lib/server/lib/notifyUsersOnMessage.js b/app/lib/server/lib/notifyUsersOnMessage.js index 1218e486f8fe..8216e18dbfcd 100644 --- a/app/lib/server/lib/notifyUsersOnMessage.js +++ b/app/lib/server/lib/notifyUsersOnMessage.js @@ -69,7 +69,8 @@ const getUserIdsFromHighlights = (rid, message) => { }; export function updateUsersSubscriptions(message, room) { - if (room != null) { + // Don't increase unread counter on thread messages + if (room != null && !message.tmid) { const { toAll, toHere, diff --git a/app/lib/server/methods/removeOAuthService.js b/app/lib/server/methods/removeOAuthService.js index 4f83a1008bdb..a60e791f1c1f 100644 --- a/app/lib/server/methods/removeOAuthService.js +++ b/app/lib/server/methods/removeOAuthService.js @@ -34,6 +34,7 @@ Meteor.methods({ settings.removeById(`Accounts_OAuth_Custom-${ name }-button_label_color`); settings.removeById(`Accounts_OAuth_Custom-${ name }-button_color`); settings.removeById(`Accounts_OAuth_Custom-${ name }-login_style`); + settings.removeById(`Accounts_OAuth_Custom-${ name }-key_field`); settings.removeById(`Accounts_OAuth_Custom-${ name }-username_field`); settings.removeById(`Accounts_OAuth_Custom-${ name }-email_field`); settings.removeById(`Accounts_OAuth_Custom-${ name }-name_field`); diff --git a/app/lib/server/methods/sendInvitationEmail.js b/app/lib/server/methods/sendInvitationEmail.js index a8f8e21c827c..84a3a40db8ed 100644 --- a/app/lib/server/methods/sendInvitationEmail.js +++ b/app/lib/server/methods/sendInvitationEmail.js @@ -27,6 +27,12 @@ Meteor.methods({ } const validEmails = emails.filter(Mailer.checkAddressFormat); + if (!validEmails || validEmails.length === 0) { + throw new Meteor.Error('error-email-send-failed', 'No valid email addresses', { + method: 'sendInvitationEmail', + }); + } + const subject = settings.get('Invitation_Subject'); return validEmails.filter((email) => { diff --git a/app/lib/server/startup/email.js b/app/lib/server/startup/email.js index 86139254417f..40cac50e9c8b 100644 --- a/app/lib/server/startup/email.js +++ b/app/lib/server/startup/email.js @@ -476,5 +476,8 @@ settings.addGroup('Email', function() { type: 'boolean', public: true, }); + this.add('Add_Sender_To_ReplyTo', false, { + type: 'boolean', + }); }); }); diff --git a/app/lib/server/startup/oAuthServicesUpdate.js b/app/lib/server/startup/oAuthServicesUpdate.js index e09af1551e56..2e35236f05c5 100644 --- a/app/lib/server/startup/oAuthServicesUpdate.js +++ b/app/lib/server/startup/oAuthServicesUpdate.js @@ -49,6 +49,7 @@ function _OAuthServicesUpdate() { data.buttonColor = settings.get(`${ service.key }-button_color`); data.tokenSentVia = settings.get(`${ service.key }-token_sent_via`); data.identityTokenSentVia = settings.get(`${ service.key }-identity_token_sent_via`); + data.keyField = settings.get(`${ service.key }-key_field`); data.usernameField = settings.get(`${ service.key }-username_field`); data.emailField = settings.get(`${ service.key }-email_field`); data.nameField = settings.get(`${ service.key }-name_field`); @@ -71,6 +72,7 @@ function _OAuthServicesUpdate() { loginStyle: data.loginStyle, tokenSentVia: data.tokenSentVia, identityTokenSentVia: data.identityTokenSentVia, + keyField: data.keyField, usernameField: data.usernameField, emailField: data.emailField, nameField: data.nameField, @@ -177,6 +179,7 @@ function customOAuthServicesInit() { buttonColor: process.env[`${ serviceKey }_button_color`], tokenSentVia: process.env[`${ serviceKey }_token_sent_via`], identityTokenSentVia: process.env[`${ serviceKey }_identity_token_sent_via`], + keyField: process.env[`${ serviceKey }_key_field`], usernameField: process.env[`${ serviceKey }_username_field`], nameField: process.env[`${ serviceKey }_name_field`], emailField: process.env[`${ serviceKey }_email_field`], @@ -184,10 +187,10 @@ function customOAuthServicesInit() { groupsClaim: process.env[`${ serviceKey }_groups_claim`], channelsMap: process.env[`${ serviceKey }_groups_channel_map`], channelsAdmin: process.env[`${ serviceKey }_channels_admin`], - mergeUsers: process.env[`${ serviceKey }_merge_users`], + mergeUsers: process.env[`${ serviceKey }_merge_users`] === 'true', mapChannels: process.env[`${ serviceKey }_map_channels`], - mergeRoles: process.env[`${ serviceKey }_merge_roles`], - showButton: process.env[`${ serviceKey }_show_button`], + mergeRoles: process.env[`${ serviceKey }_merge_roles`] === 'true', + showButton: process.env[`${ serviceKey }_show_button`] === 'true', avatarField: process.env[`${ serviceKey }_avatar_field`], }; diff --git a/app/livechat/client/ui.js b/app/livechat/client/ui.js index 069254af7023..6b7eade52a14 100644 --- a/app/livechat/client/ui.js +++ b/app/livechat/client/ui.js @@ -31,3 +31,9 @@ MessageTypes.registerType({ }; }, }); + +MessageTypes.registerType({ + id: 'livechat-started', + system: true, + message: 'Chat_started', +}); diff --git a/app/livechat/lib/LivechatRoomType.js b/app/livechat/lib/LivechatRoomType.js index 4c05ce721452..ff8e44ba983d 100644 --- a/app/livechat/lib/LivechatRoomType.js +++ b/app/livechat/lib/LivechatRoomType.js @@ -122,17 +122,6 @@ export default class LivechatRoomType extends RoomTypeConfig { if (!room || !room.v || room.v.username !== username) { return false; } - // const button = instance.tabBar.getButtons({ room }).find((button) => button.id === 'visitor-info'); - // if (!button) { - // return false; - // } - - // const { template, i18nTitle: label, icon } = button; - // instance.tabBar.setTemplate(template); - // instance.tabBar.setData({ - // label, - // icon, - // }); instance.tabBar.openUserInfo(); return true; diff --git a/app/livechat/server/api/v1/message.js b/app/livechat/server/api/v1/message.js index 68a83706fc18..df8ac26a07f7 100644 --- a/app/livechat/server/api/v1/message.js +++ b/app/livechat/server/api/v1/message.js @@ -9,6 +9,7 @@ import { loadMessageHistory } from '../../../../lib'; import { findGuest, findRoom, normalizeHttpHeaderData } from '../lib/livechat'; import { Livechat } from '../../lib/Livechat'; import { normalizeMessageFileUpload } from '../../../../utils/server/functions/normalizeMessageFileUpload'; +import { settings } from '../../../../settings/server'; API.v1.addRoute('livechat/message', { post() { @@ -40,6 +41,10 @@ API.v1.addRoute('livechat/message', { throw new Meteor.Error('room-closed'); } + if (settings.get('Livechat_enable_message_character_limit') && msg.length > parseInt(settings.get('Livechat_message_character_limit'))) { + throw new Meteor.Error('message-length-exceeds-character-limit'); + } + const _id = this.bodyParams._id || Random.id(); const sendMessage = { diff --git a/app/livechat/server/lib/Helper.js b/app/livechat/server/lib/Helper.js index e762f51f0db5..f7a321a25e95 100644 --- a/app/livechat/server/lib/Helper.js +++ b/app/livechat/server/lib/Helper.js @@ -12,6 +12,7 @@ import { settings } from '../../../settings'; import { Apps, AppEvents } from '../../../apps/server'; import notifications from '../../../notifications/server/lib/Notifications'; import { sendNotification } from '../../../lib/server'; +import { sendMessage } from '../../../lib/server/functions/sendMessage'; export const allowAgentSkipQueue = (agent) => { check(agent, Match.ObjectIncluding({ @@ -61,6 +62,8 @@ export const createLivechatRoom = (rid, name, guest, roomInfo = {}, extraData = callbacks.run('livechat.newRoom', room); }); + sendMessage(guest, { t: 'livechat-started', msg: '', groupable: false }, room); + return roomId; }; diff --git a/app/livechat/server/lib/Livechat.js b/app/livechat/server/lib/Livechat.js index 9e407614bd18..31a7edcb361d 100644 --- a/app/livechat/server/lib/Livechat.js +++ b/app/livechat/server/lib/Livechat.js @@ -961,7 +961,7 @@ export const Livechat = { } const showAgentInfo = settings.get('Livechat_show_agent_info'); - const ignoredMessageTypes = ['livechat_navigation_history', 'livechat_transcript_history', 'command', 'livechat-close', 'livechat_video_call']; + const ignoredMessageTypes = ['livechat_navigation_history', 'livechat_transcript_history', 'command', 'livechat-close', 'livechat-started', 'livechat_video_call']; const messages = Messages.findVisibleByRoomIdNotContainingTypes(rid, ignoredMessageTypes, { sort: { ts: 1 } }); let html = ' '; diff --git a/app/markdown/client/getGlobalWindow.ts b/app/markdown/client/getGlobalWindow.ts new file mode 100644 index 000000000000..062959a9fe23 --- /dev/null +++ b/app/markdown/client/getGlobalWindow.ts @@ -0,0 +1 @@ +export const getGlobalWindow = (): Omit => window; diff --git a/app/markdown/lib/getGlobalWindow.ts b/app/markdown/lib/getGlobalWindow.ts new file mode 100644 index 000000000000..e1e12b72a10f --- /dev/null +++ b/app/markdown/lib/getGlobalWindow.ts @@ -0,0 +1,5 @@ +import { Meteor } from 'meteor/meteor'; + +export const { getGlobalWindow } = Meteor.isServer + ? require('../server/getGlobalWindow') + : require('../client/getGlobalWindow'); diff --git a/app/markdown/lib/parser/marked/marked.js b/app/markdown/lib/parser/marked/marked.js index f930a3369bb9..91a0db96c34d 100644 --- a/app/markdown/lib/parser/marked/marked.js +++ b/app/markdown/lib/parser/marked/marked.js @@ -1,11 +1,12 @@ import { Random } from 'meteor/random'; import _ from 'underscore'; import _marked from 'marked'; -import dompurify from 'dompurify'; +import createDOMPurify from 'dompurify'; import hljs from '../../hljs'; import { escapeHTML } from '../../../../../lib/escapeHTML'; import { unescapeHTML } from '../../../../../lib/unescapeHTML'; +import { getGlobalWindow } from '../../getGlobalWindow'; const renderer = new _marked.Renderer(); @@ -106,7 +107,9 @@ export const marked = (message, { highlight, }); - message.html = dompurify.sanitize(message.html); + const window = getGlobalWindow(); + const DomPurify = createDOMPurify(window); + message.html = DomPurify.sanitize(message.html, { ADD_ATTR: ['target'] }); return message; }; diff --git a/app/markdown/server/getGlobalWindow.ts b/app/markdown/server/getGlobalWindow.ts new file mode 100644 index 000000000000..0570f6f63f01 --- /dev/null +++ b/app/markdown/server/getGlobalWindow.ts @@ -0,0 +1,6 @@ +import { JSDOM } from 'jsdom'; + +export const getGlobalWindow = (): Omit => { + const { window } = new JSDOM(''); + return window; +}; diff --git a/app/message-mark-as-unread/client/actionButton.js b/app/message-mark-as-unread/client/actionButton.js index 6725215753bd..e2d054acc58e 100644 --- a/app/message-mark-as-unread/client/actionButton.js +++ b/app/message-mark-as-unread/client/actionButton.js @@ -11,7 +11,7 @@ Meteor.startup(() => { id: 'mark-message-as-unread', icon: 'flag', label: 'Mark_unread', - context: ['message', 'message-mobile'], + context: ['message', 'message-mobile', 'threads'], action() { const { msg: message } = messageArgs(this); return Meteor.call('unreadMessages', message, function(error) { diff --git a/app/message-mark-as-unread/server/unreadMessages.js b/app/message-mark-as-unread/server/unreadMessages.js index aec92fcf94b6..da31e72a35af 100644 --- a/app/message-mark-as-unread/server/unreadMessages.js +++ b/app/message-mark-as-unread/server/unreadMessages.js @@ -16,7 +16,7 @@ Meteor.methods({ const lastMessage = Messages.findVisibleByRoomId(room, { limit: 1, sort: { ts: -1 } }).fetch()[0]; if (lastMessage == null) { - throw new Meteor.Error('error-action-not-allowed', 'Not allowed', { + throw new Meteor.Error('error-no-message-for-unread', 'There are no messages to mark unread', { method: 'unreadMessages', action: 'Unread_messages', }); diff --git a/app/message-pin/client/views/pinnedMessages.js b/app/message-pin/client/views/pinnedMessages.js index 5c6305fe4309..1058a23fafda 100644 --- a/app/message-pin/client/views/pinnedMessages.js +++ b/app/message-pin/client/views/pinnedMessages.js @@ -11,8 +11,6 @@ import { getCommonRoomEvents } from '../../../ui/client/views/app/lib/getCommonR const LIMIT_DEFAULT = 50; -Template.pinnedMessages.events(getCommonRoomEvents()); - Template.pinnedMessages.helpers({ hasMessages() { return Template.instance().messages.find().count(); diff --git a/app/message-star/client/views/starredMessages.js b/app/message-star/client/views/starredMessages.js index e4c862e22aea..f43166661b5d 100644 --- a/app/message-star/client/views/starredMessages.js +++ b/app/message-star/client/views/starredMessages.js @@ -12,7 +12,6 @@ import { getCommonRoomEvents } from '../../../ui/client/views/app/lib/getCommonR const LIMIT_DEFAULT = 50; -Template.starredMessages.events(getCommonRoomEvents()); Template.starredMessages.helpers({ hasMessages() { return Template.instance().messages.find().count(); diff --git a/app/message-star/server/starMessage.js b/app/message-star/server/starMessage.js index 9ec8893d3280..4f9d58400f5e 100644 --- a/app/message-star/server/starMessage.js +++ b/app/message-star/server/starMessage.js @@ -14,7 +14,7 @@ Meteor.methods({ if (!settings.get('Message_AllowStarring')) { throw new Meteor.Error('error-action-not-allowed', 'Message starring not allowed', { - method: 'pinMessage', + method: 'starMessage', action: 'Message_starring', }); } diff --git a/app/meteor-accounts-saml/server/lib/SAML.ts b/app/meteor-accounts-saml/server/lib/SAML.ts index 277084414a55..2514cce35ccb 100644 --- a/app/meteor-accounts-saml/server/lib/SAML.ts +++ b/app/meteor-accounts-saml/server/lib/SAML.ts @@ -376,7 +376,7 @@ export class SAML { }); } - private static processValidateAction(req: IIncomingMessage, res: ServerResponse, service: IServiceProviderOptions, samlObject: ISAMLAction): void { + private static processValidateAction(req: IIncomingMessage, res: ServerResponse, service: IServiceProviderOptions, _samlObject: ISAMLAction): void { const serviceProvider = new SAMLServiceProvider(service); SAMLUtils.relayState = req.body.RelayState; serviceProvider.validateResponse(req.body.SAMLResponse, (err, profile/* , loggedOut*/) => { @@ -390,21 +390,15 @@ export class SAML { throw new Error('No user data collected from IdP response.'); } - let credentialToken = (profile.inResponseToId && profile.inResponseToId.value) || profile.inResponseToId || profile.InResponseTo || samlObject.credentialToken; + // create a random token to store the login result + // to test an IdP initiated login on localhost, use the following URL (assuming SimpleSAMLPHP on localhost:8080): + // http://localhost:8080/simplesaml/saml2/idp/SSOService.php?spentityid=http://localhost:3000/_saml/metadata/test-sp + const credentialToken = Random.id(); + const loginResult = { profile, }; - if (!credentialToken) { - // If the login was initiated by the IDP, then we don't have a credentialToken as there was no AuthorizeRequest on our side - // so we create a random token now to use the same url to end the login - // - // to test an IdP initiated login on localhost, use the following URL (assuming SimpleSAMLPHP on localhost:8080): - // http://localhost:8080/simplesaml/saml2/idp/SSOService.php?spentityid=http://localhost:3000/_saml/metadata/test-sp - credentialToken = Random.id(); - SAMLUtils.log('[SAML] Using random credentialToken: ', credentialToken); - } - this.storeCredential(credentialToken, loginResult); const url = `${ Meteor.absoluteUrl('home') }?saml_idp_credentialToken=${ credentialToken }`; res.writeHead(302, { diff --git a/app/meteor-accounts-saml/server/loginHandler.ts b/app/meteor-accounts-saml/server/loginHandler.ts index 0dcec76d04c3..84beec3091aa 100644 --- a/app/meteor-accounts-saml/server/loginHandler.ts +++ b/app/meteor-accounts-saml/server/loginHandler.ts @@ -11,7 +11,7 @@ const makeError = (message: string): Record => ({ }); Accounts.registerLoginHandler('saml', function(loginRequest) { - if (!loginRequest.saml || !loginRequest.credentialToken) { + if (!loginRequest.saml || !loginRequest.credentialToken || typeof loginRequest.credentialToken !== 'string') { return undefined; } diff --git a/app/metrics/server/lib/collectMetrics.js b/app/metrics/server/lib/collectMetrics.js index 9114e7b27ed7..66a24da4df91 100644 --- a/app/metrics/server/lib/collectMetrics.js +++ b/app/metrics/server/lib/collectMetrics.js @@ -31,6 +31,16 @@ const setPrometheusData = async () => { metrics.ddpAuthenticatedSessions.set(authenticatedSessions.length); metrics.ddpConnectedUsers.set(_.unique(authenticatedSessions.map((s) => s.userId)).length); + // Apps metrics + const { totalInstalled, totalActive, totalFailed } = getAppsStatistics(); + + metrics.totalAppsInstalled.set(totalInstalled || 0); + metrics.totalAppsEnabled.set(totalActive || 0); + metrics.totalAppsFailed.set(totalFailed || 0); + + const oplogQueue = getOplogInfo().mongo._oplogHandle?._entryQueue?.length || 0; + metrics.oplogQueue.set(oplogQueue); + const statistics = Statistics.findLast(); if (!statistics) { return; @@ -63,16 +73,6 @@ const setPrometheusData = async () => { metrics.totalDirectMessages.set(statistics.totalDirectMessages); metrics.totalLivechatMessages.set(statistics.totalLivechatMessages); - // Apps metrics - const { totalInstalled, totalActive, totalFailed } = getAppsStatistics(); - - metrics.totalAppsInstalled.set(totalInstalled || 0); - metrics.totalAppsEnabled.set(totalActive || 0); - metrics.totalAppsFailed.set(totalFailed || 0); - - const oplogQueue = getOplogInfo().mongo._oplogHandle?._entryQueue?.length || 0; - metrics.oplogQueue.set(oplogQueue); - metrics.pushQueue.set(statistics.pushQueue || 0); }; diff --git a/app/models/server/models/Messages.js b/app/models/server/models/Messages.js index 7e6768509c1c..0f29abb0de42 100644 --- a/app/models/server/models/Messages.js +++ b/app/models/server/models/Messages.js @@ -569,6 +569,7 @@ export class Messages extends Base { }, $unset: { blocks: 1, + tshow: 1, }, }; diff --git a/app/models/server/models/Rooms.js b/app/models/server/models/Rooms.js index 11317c6f47ee..d1eb3cf486bd 100644 --- a/app/models/server/models/Rooms.js +++ b/app/models/server/models/Rooms.js @@ -95,6 +95,22 @@ export class Rooms extends Base { return this.update({ _id: roomId }, { $unset: { lastMessage: { reactions: 1 } } }); } + unsetAllImportIds() { + const query = { + importIds: { + $exists: true, + }, + }; + + const update = { + $unset: { + importIds: 1, + }, + }; + + return this.update(query, update, { multi: true }); + } + updateLastMessageStar(roomId, userId, starred) { let update; const query = { _id: roomId }; @@ -489,7 +505,7 @@ export class Rooms extends Base { findByNameAndTypesNotInIds(name, types, ids, options) { const query = { _id: { - $ne: ids, + $nin: ids, }, t: { $in: types, diff --git a/app/models/server/models/Sessions.tests.js b/app/models/server/models/Sessions.tests.js index 117a2af4ae5f..2b8c7703531f 100644 --- a/app/models/server/models/Sessions.tests.js +++ b/app/models/server/models/Sessions.tests.js @@ -250,11 +250,13 @@ describe('Sessions Aggregates', () => { .then((testMongoUrl) => { process.env.MONGO_URL = testMongoUrl; }); }); - after(() => { mongoUnit.stop(); }); + after(() => { + mongoUnit.stop(); + }); } before(async () => { - const client = await MongoClient.connect(process.env.MONGO_URL); + const client = await MongoClient.connect(process.env.MONGO_URL, { useUnifiedTopology: true }); db = client.db('test'); after(() => { diff --git a/app/models/server/models/Statistics.js b/app/models/server/models/Statistics.js index ca95cd5642e6..014f8c8180d2 100644 --- a/app/models/server/models/Statistics.js +++ b/app/models/server/models/Statistics.js @@ -4,7 +4,7 @@ export class Statistics extends Base { constructor() { super('statistics'); - this.tryEnsureIndex({ createdAt: 1 }); + this.tryEnsureIndex({ createdAt: -1 }); } // FIND ONE diff --git a/app/models/server/models/Users.js b/app/models/server/models/Users.js index 36826d1465a1..6d9cf9d972b1 100644 --- a/app/models/server/models/Users.js +++ b/app/models/server/models/Users.js @@ -53,6 +53,7 @@ export class Users extends Base { this.tryEnsureIndex({ 'services.saml.inResponseTo': 1 }); this.tryEnsureIndex({ openBusinessHours: 1 }, { sparse: true }); this.tryEnsureIndex({ statusLivechat: 1 }, { sparse: true }); + this.tryEnsureIndex({ language: 1 }, { sparse: true }); } getLoginTokensByUserId(userId) { @@ -586,6 +587,15 @@ export class Users extends Base { return this.findOne(query, options); } + findOneByEmailAddressAndServiceNameIgnoringCase(emailAddress, userId, serviceName, options) { + const query = { + 'emails.address': String(emailAddress).trim().toLowerCase(), + [`services.${ serviceName }.id`]: userId, + }; + + return this.findOne(query, options); + } + findOneByUsername(username, options) { const query = { username }; @@ -1524,6 +1534,24 @@ Find users to send a message by email if: }, }); } + + findAllUsersWithPendingAvatar() { + const query = { + _pendingAvatarUrl: { + $exists: true, + }, + }; + + const options = { + fields: { + _id: 1, + name: 1, + _pendingAvatarUrl: 1, + }, + }; + + return this.find(query, options); + } } export default new Users(Meteor.users, true); diff --git a/app/models/server/raw/Roles.js b/app/models/server/raw/Roles.js index 523aa968057d..de771bcad9b0 100644 --- a/app/models/server/raw/Roles.js +++ b/app/models/server/raw/Roles.js @@ -8,13 +8,15 @@ export class RolesRaw extends BaseRaw { } async isUserInRoles(userId, roles, scope) { - roles = [].concat(roles); + if (!Array.isArray(roles)) { + roles = [roles]; + } for (let i = 0, total = roles.length; i < total; i++) { const roleName = roles[i]; // eslint-disable-next-line no-await-in-loop - const role = await this.findOne({ _id: roleName }); + const role = await this.findOne({ _id: roleName }, { scope: 1 }); const roleScope = (role && role.scope) || 'Users'; const model = this.models[roleScope]; diff --git a/app/models/server/raw/Users.js b/app/models/server/raw/Users.js index aa04c127fe22..c89ecd906823 100644 --- a/app/models/server/raw/Users.js +++ b/app/models/server/raw/Users.js @@ -68,7 +68,7 @@ export class UsersRaw extends BaseRaw { findByActiveUsersExcept(searchTerm, exceptions, options, searchFields, extraQuery = [], { startsWith = false, endsWith = false } = {}) { if (exceptions == null) { exceptions = []; } if (options == null) { options = {}; } - if (Array.isArray(exceptions)) { + if (!Array.isArray(exceptions)) { exceptions = [exceptions]; } @@ -388,6 +388,27 @@ export class UsersRaw extends BaseRaw { return this.col.aggregate(params).toArray(); } + getUserLanguages() { + const pipeline = [ + { + $match: { + language: { + $exists: true, + $ne: '', + }, + }, + }, + { + $group: { + _id: '$language', + total: { $sum: 1 }, + }, + }, + ]; + + return this.col.aggregate(pipeline).toArray(); + } + updateStatusText(_id, statusText) { const update = { $set: { diff --git a/app/notification-queue/server/NotificationQueue.ts b/app/notification-queue/server/NotificationQueue.ts index 7665a588c8ee..a1533e958a16 100644 --- a/app/notification-queue/server/NotificationQueue.ts +++ b/app/notification-queue/server/NotificationQueue.ts @@ -41,7 +41,14 @@ class NotificationClass { return; } - setTimeout(this.worker.bind(this), this.cyclePause); + setTimeout(() => { + try { + this.worker(); + } catch (e) { + console.error('Error sending notification', e); + this.executeWorkerLater(); + } + }, this.cyclePause); } async worker(counter = 0): Promise { diff --git a/app/oembed/server/jumpToMessage.js b/app/oembed/server/jumpToMessage.js index 4c14414f339b..961fbb656aaf 100644 --- a/app/oembed/server/jumpToMessage.js +++ b/app/oembed/server/jumpToMessage.js @@ -4,10 +4,11 @@ import QueryString from 'querystring'; import { Meteor } from 'meteor/meteor'; import _ from 'underscore'; -import { Messages } from '../../models'; -import { settings } from '../../settings'; -import { callbacks } from '../../callbacks'; +import { Messages, Rooms, Users } from '../../models/server'; +import { settings } from '../../settings/server'; +import { callbacks } from '../../callbacks/server'; import { getUserAvatarURL } from '../../utils/lib/getUserAvatarURL'; +import { canAccessRoom } from '../../authorization/server/functions/canAccessRoom'; const recursiveRemove = (message, deep = 1) => { if (message) { @@ -21,37 +22,62 @@ const recursiveRemove = (message, deep = 1) => { }; callbacks.add('beforeSaveMessage', (msg) => { - if (msg && msg.urls) { - msg.urls.forEach((item) => { - if (item.url.indexOf(Meteor.absoluteUrl()) === 0) { - const urlObj = URL.parse(item.url); - if (urlObj.query) { - const queryString = QueryString.parse(urlObj.query); - if (_.isString(queryString.msg)) { // Jump-to query param - const jumpToMessage = recursiveRemove(Messages.findOneById(queryString.msg)); - if (jumpToMessage) { - msg.attachments = msg.attachments || []; - - const index = msg.attachments.findIndex((a) => a.message_link === item.url); - if (index > -1) { - msg.attachments.splice(index, 1); - } - - msg.attachments.push({ - text: jumpToMessage.msg, - translations: jumpToMessage.translations, - author_name: jumpToMessage.alias || jumpToMessage.u.username, - author_icon: getUserAvatarURL(jumpToMessage.u.username), - message_link: item.url, - attachments: jumpToMessage.attachments || [], - ts: jumpToMessage.ts, - }); - item.ignoreParse = true; - } - } - } - } - }); + // if no message is present, or the message doesn't have any URL, skip + if (!msg || (!msg.urls || !msg.urls.length)) { + return msg; } + + const currentUser = Users.findOneById(msg.u._id); + + msg.urls.forEach((item) => { + // if the URL is not internal, skip + if (!item.url.includes(Meteor.absoluteUrl())) { + return; + } + + const urlObj = URL.parse(item.url); + + // if the URL doesn't have query params (doesn't reference message) skip + if (!urlObj.query) { + return; + } + + const { msg: msgId } = QueryString.parse(urlObj.query); + + if (!_.isString(msgId)) { + return; + } + + const jumpToMessage = recursiveRemove(Messages.findOneById(msgId)); + if (!jumpToMessage) { + return; + } + + // validates if user can see the message + // user has to belong to the room the message was first wrote in + const room = Rooms.findOneById(jumpToMessage.rid); + const canAccessRoomForUser = canAccessRoom(room, currentUser); + if (!canAccessRoomForUser) { + return; + } + + msg.attachments = msg.attachments || []; + const index = msg.attachments.findIndex((a) => a.message_link === item.url); + if (index > -1) { + msg.attachments.splice(index, 1); + } + + msg.attachments.push({ + text: jumpToMessage.msg, + translations: jumpToMessage.translations, + author_name: jumpToMessage.alias || jumpToMessage.u.username, + author_icon: getUserAvatarURL(jumpToMessage.u.username), + message_link: item.url, + attachments: jumpToMessage.attachments || [], + ts: jumpToMessage.ts, + }); + item.ignoreParse = true; + }); + return msg; }, callbacks.priority.LOW, 'jumpToMessage'); diff --git a/app/otr/client/index.js b/app/otr/client/index.js index 576a61e0f0ee..a24ea4f03ff6 100644 --- a/app/otr/client/index.js +++ b/app/otr/client/index.js @@ -1,3 +1,4 @@ +import './stylesheets/otr.css'; import './rocketchat.otr.room'; import './rocketchat.otr'; import './tabBar'; diff --git a/app/otr/client/rocketchat.otr.room.js b/app/otr/client/rocketchat.otr.room.js index 08da47733d76..221d6a9d0de5 100644 --- a/app/otr/client/rocketchat.otr.room.js +++ b/app/otr/client/rocketchat.otr.room.js @@ -13,6 +13,7 @@ import { OTR } from './rocketchat.otr'; import { Notifications } from '../../notifications'; import { modal } from '../../ui-utils'; import { getUidDirectMessage } from '../../ui-utils/client/lib/getUidDirectMessage'; +import { Presence } from '../../../client/lib/presence'; OTR.Room = class { constructor(userId, roomId) { @@ -178,7 +179,6 @@ OTR.Room = class { } onUserStream(type, data) { - const user = Meteor.users.findOne(data.userId); switch (type) { case 'handshake': let timeout = null; @@ -198,36 +198,40 @@ OTR.Room = class { }); }; - if (data.refresh && this.established.get()) { - this.reset(); - establishConnection(); - } else { - if (this.established.get()) { + (async () => { + const { username } = await Presence.get(data.userId); + if (data.refresh && this.established.get()) { this.reset(); + establishConnection(); + } else { + if (this.established.get()) { + this.reset(); + } + + modal.open({ + title: TAPi18n.__('OTR'), + text: TAPi18n.__('Username_wants_to_start_otr_Do_you_want_to_accept', { username }), + html: true, + showCancelButton: true, + allowOutsideClick: false, + confirmButtonText: TAPi18n.__('Yes'), + cancelButtonText: TAPi18n.__('No'), + }, (isConfirm) => { + if (isConfirm) { + establishConnection(); + } else { + Meteor.clearTimeout(timeout); + this.deny(); + } + }); } - modal.open({ - title: TAPi18n.__('OTR'), - text: TAPi18n.__('Username_wants_to_start_otr_Do_you_want_to_accept', { username: user.username }), - html: true, - showCancelButton: true, - allowOutsideClick: false, - confirmButtonText: TAPi18n.__('Yes'), - cancelButtonText: TAPi18n.__('No'), - }, (isConfirm) => { - if (isConfirm) { - establishConnection(); - } else { - Meteor.clearTimeout(timeout); - this.deny(); - } - }); - } + timeout = Meteor.setTimeout(() => { + this.establishing.set(false); + modal.close(); + }, 10000); + })(); - timeout = Meteor.setTimeout(() => { - this.establishing.set(false); - modal.close(); - }, 10000); break; diff --git a/app/otr/client/stylesheets/otr.css b/app/otr/client/stylesheets/otr.css new file mode 100644 index 000000000000..066075e5ec16 --- /dev/null +++ b/app/otr/client/stylesheets/otr.css @@ -0,0 +1,16 @@ +.message { + &.otr-ack { + .info { + color: lightgreen; + + &::before { + display: inline-block; + visibility: visible; + + content: "\e952"; + + font-family: 'fontello'; + } + } + } +} diff --git a/app/slackbridge/server/index.js b/app/slackbridge/server/index.js index 0b7f817c6ea7..713f1a300178 100644 --- a/app/slackbridge/server/index.js +++ b/app/slackbridge/server/index.js @@ -1,3 +1,4 @@ import './settings'; import './slackbridge'; import './slackbridge_import.server'; +import './removeChannelLinks'; diff --git a/app/slackbridge/server/removeChannelLinks.js b/app/slackbridge/server/removeChannelLinks.js new file mode 100644 index 000000000000..213636d07565 --- /dev/null +++ b/app/slackbridge/server/removeChannelLinks.js @@ -0,0 +1,29 @@ +import { Meteor } from 'meteor/meteor'; + +import { Rooms } from '../../models/server'; +import { hasRole } from '../../authorization'; +import { settings } from '../../settings'; + +Meteor.methods({ + removeSlackBridgeChannelLinks() { + const user = Meteor.user(); + if (!user) { + throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'removeSlackBridgeChannelLinks' }); + } + + if (!hasRole(user._id, 'admin')) { + throw new Meteor.Error('error-not-authorized', 'Not authorized', { method: 'removeSlackBridgeChannelLinks' }); + } + + if (settings.get('SlackBridge_Enabled') !== true) { + throw new Meteor.Error('SlackBridge_disabled'); + } + + Rooms.unsetAllImportIds(); + + return { + message: 'Slackbridge_channel_links_removed_successfully', + params: [], + }; + }, +}); diff --git a/app/slackbridge/server/settings.js b/app/slackbridge/server/settings.js index 2b2839eea11d..c22042f72f63 100644 --- a/app/slackbridge/server/settings.js +++ b/app/slackbridge/server/settings.js @@ -92,5 +92,15 @@ Meteor.startup(function() { }, i18nLabel: 'Reactions', }); + + this.add('SlackBridge_Remove_Channel_Links', 'removeSlackBridgeChannelLinks', { + type: 'action', + actionText: 'Remove_Channel_Links', + i18nDescription: 'SlackBridge_Remove_Channel_Links_Description', + enableQuery: { + _id: 'SlackBridge_Enabled', + value: true, + }, + }); }); }); diff --git a/app/statistics/server/lib/statistics.js b/app/statistics/server/lib/statistics.js index 3189328ce56e..3711557513f1 100644 --- a/app/statistics/server/lib/statistics.js +++ b/app/statistics/server/lib/statistics.js @@ -20,7 +20,7 @@ import { settings } from '../../../settings/server'; import { Info, getMongoInfo } from '../../../utils/server'; import { Migrations } from '../../../migrations/server'; import { getStatistics as federationGetStatistics } from '../../../federation/server/functions/dashboard'; -import { NotificationQueue } from '../../../models/server/raw'; +import { NotificationQueue, Users as UsersRaw } from '../../../models/server/raw'; import { readSecondaryPreferred } from '../../../../server/database/readSecondaryPreferred'; import { getAppsStatistics } from './getAppsStatistics'; import { getStatistics as getEnterpriseStatistics } from '../../../../ee/app/license/server'; @@ -35,6 +35,24 @@ const wizardFields = [ 'Register_Server', ]; +const getUserLanguages = (totalUsers) => { + const result = Promise.await(UsersRaw.getUserLanguages()); + + const languages = { + none: totalUsers, + }; + + result.forEach(({ _id, total }) => { + if (!_id) { + return; + } + languages[_id] = total; + languages.none -= total; + }); + + return languages; +}; + export const statistics = { get: function _getStatistics() { const readPreference = readSecondaryPreferred(Uploads.model.rawDatabase()); @@ -69,12 +87,12 @@ export const statistics = { statistics.activeGuests = Users.getActiveLocalGuestCount(); statistics.nonActiveUsers = Users.find({ active: false }).count(); statistics.appUsers = Users.find({ type: 'app' }).count(); - statistics.onlineUsers = Meteor.users.find({ statusConnection: 'online' }).count(); - statistics.awayUsers = Meteor.users.find({ statusConnection: 'away' }).count(); - // TODO: Get statuses from the `status` property. - statistics.busyUsers = Meteor.users.find({ statusConnection: 'busy' }).count(); + statistics.onlineUsers = Meteor.users.find({ status: 'online' }).count(); + statistics.awayUsers = Meteor.users.find({ status: 'away' }).count(); + statistics.busyUsers = Meteor.users.find({ status: 'busy' }).count(); statistics.totalConnectedUsers = statistics.onlineUsers + statistics.awayUsers; statistics.offlineUsers = statistics.totalUsers - statistics.onlineUsers - statistics.awayUsers - statistics.busyUsers; + statistics.userLanguages = getUserLanguages(statistics.totalUsers); // Room statistics statistics.totalRooms = Rooms.find().count(); diff --git a/app/theme/client/imports/general/base_old.css b/app/theme/client/imports/general/base_old.css index b34decf221cb..f33414a8e644 100644 --- a/app/theme/client/imports/general/base_old.css +++ b/app/theme/client/imports/general/base_old.css @@ -63,11 +63,11 @@ } &:first-child { - margin-top: 0; + margin-top: 15px; } &:last-child { - margin-bottom: 0; + margin-bottom: 15px; } &:first-child::before { diff --git a/app/theme/client/imports/general/variables.css b/app/theme/client/imports/general/variables.css index 79ff802069af..635786e6a0cc 100644 --- a/app/theme/client/imports/general/variables.css +++ b/app/theme/client/imports/general/variables.css @@ -61,6 +61,10 @@ --rc-color-primary-lightest: var(--color-gray-lightest); --rc-color-content: var(--color-white); --rc-color-link-active: var(--rc-color-button-primary); + --rc-color-announcement-text: #095ad2; + --rc-color-announcement-background: #d1ebfe; + --rc-color-announcement-text-hover: #01336b; + --rc-color-announcement-background-hover: #76b7fc; /* #endregion */ diff --git a/app/threads/client/components/ThreadView.tsx b/app/threads/client/components/ThreadView.tsx index 67db4f3d8631..58ba734892d6 100644 --- a/app/threads/client/components/ThreadView.tsx +++ b/app/threads/client/components/ThreadView.tsx @@ -36,7 +36,7 @@ const ThreadView = forwardRef(({ const t = useTranslation(); - const expandLabel = expanded ? t('collapse') : t('expand'); + const expandLabel = expanded ? t('Collapse') : t('Expand'); const expandIcon = expanded ? 'arrow-collapse' : 'arrow-expand'; const handleExpandActionClick = useCallback(() => { @@ -69,9 +69,9 @@ const ThreadView = forwardRef(({ - {hasExpand && } + {hasExpand && } - + diff --git a/app/threads/client/flextab/thread.js b/app/threads/client/flextab/thread.js index 7a0184fa621d..134af66c45b6 100644 --- a/app/threads/client/flextab/thread.js +++ b/app/threads/client/flextab/thread.js @@ -2,6 +2,7 @@ import _ from 'underscore'; import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; import { Template } from 'meteor/templating'; +import { Session } from 'meteor/session'; import { HTML } from 'meteor/htmljs'; import { ReactiveDict } from 'meteor/reactive-dict'; import { Tracker } from 'meteor/tracker'; @@ -174,7 +175,7 @@ Template.thread.onRendered(function() { this.callbackRemove = () => callbacks.remove('streamNewMessage', `thread-${ rid }`); callbacks.add('streamNewMessage', _.debounce((msg) => { - if (rid !== msg.rid || msg.editedAt || msg.tmid !== tmid) { + if (Session.get('openedRoom') !== msg.rid || rid !== msg.rid || msg.editedAt || msg.tmid !== tmid) { return; } Meteor.call('readThreads', tmid); diff --git a/app/ui-cached-collection/client/models/CachedCollection.js b/app/ui-cached-collection/client/models/CachedCollection.js index a107eb98f0ff..5ca803847ae6 100644 --- a/app/ui-cached-collection/client/models/CachedCollection.js +++ b/app/ui-cached-collection/client/models/CachedCollection.js @@ -201,6 +201,10 @@ export class CachedCollection extends Emitter { const _updatedAt = new Date(record._updatedAt); record._updatedAt = _updatedAt; + if (record.lastMessage && typeof record.lastMessage._updatedAt === 'string') { + record.lastMessage._updatedAt = new Date(record.lastMessage._updatedAt); + } + if (_updatedAt > this.updatedAt) { this.updatedAt = _updatedAt; } diff --git a/app/ui-message/client/message.js b/app/ui-message/client/message.js index d7e20e547f24..bb4f59f70ed1 100644 --- a/app/ui-message/client/message.js +++ b/app/ui-message/client/message.js @@ -1,4 +1,5 @@ import _ from 'underscore'; +import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; import { Session } from 'meteor/session'; @@ -451,7 +452,7 @@ Template.message.helpers({ }, showStar() { const { msg } = this; - return msg.starred && !(msg.actionContext === 'starred' || this.context === 'starred'); + return msg.starred && msg.starred.length > 0 && msg.starred.find((star) => star._id === Meteor.userId()) && !(msg.actionContext === 'starred' || this.context === 'starred'); }, }); diff --git a/app/ui-utils/client/lib/Layout.js b/app/ui-utils/client/lib/Layout.js index 758f58a99fa7..2158d80f2a9b 100644 --- a/app/ui-utils/client/lib/Layout.js +++ b/app/ui-utils/client/lib/Layout.js @@ -1,14 +1,17 @@ import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; +import { ReactiveVar } from 'meteor/reactive-var'; export const Layout = new class RocketChatLayout { constructor() { + this.embedded = new ReactiveVar(); Tracker.autorun(() => { this.layout = FlowRouter.getQueryParam('layout'); + this.embedded.set(this.layout === 'embedded'); }); } isEmbedded() { - return FlowRouter.getQueryParam('layout') === 'embedded'; + return this.embedded.get(); } }(); diff --git a/app/ui-utils/client/lib/MessageAction.js b/app/ui-utils/client/lib/MessageAction.js index 6e87cc6a5831..c97b52956f91 100644 --- a/app/ui-utils/client/lib/MessageAction.js +++ b/app/ui-utils/client/lib/MessageAction.js @@ -14,7 +14,7 @@ import { createTemplateForComponent } from '../../../../client/reactAdapters'; import { messageArgs } from './messageArgs'; import { roomTypes, canDeleteMessage } from '../../../utils/client'; import { Messages, Rooms, Subscriptions } from '../../../models/client'; -import { hasAtLeastOnePermission } from '../../../authorization/client'; +import { hasAtLeastOnePermission, hasPermission } from '../../../authorization/client'; import { modal } from './modal'; const call = (method, ...args) => new Promise((resolve, reject) => { @@ -168,13 +168,22 @@ Meteor.startup(async function() { reply: msg._id, }); }, - condition({ subscription, room }) { + condition({ subscription, room, msg, u }) { if (subscription == null) { return false; } if (room.t === 'd' || room.t === 'l') { return false; } + + // Check if we already have a DM started with the message user (not ourselves) or we can start one + if (u._id !== msg.u._id && !hasPermission('create-d')) { + const dmRoom = Rooms.findOne({ _id: [u._id, msg.u._id].sort().join('') }); + if (!dmRoom || !Subscriptions.findOne({ rid: dmRoom._id, 'u._id': u._id })) { + return false; + } + } + return true; }, order: 0, diff --git a/app/ui-utils/client/lib/RoomHistoryManager.js b/app/ui-utils/client/lib/RoomHistoryManager.js index dbf04e1cd84f..9b134e079a24 100644 --- a/app/ui-utils/client/lib/RoomHistoryManager.js +++ b/app/ui-utils/client/lib/RoomHistoryManager.js @@ -12,6 +12,7 @@ import { ChatMessage, ChatSubscription, ChatRoom } from '../../../models'; import { call } from './callMethod'; import { filterMarkdown } from '../../../markdown/lib/markdown'; import { escapeHTML } from '../../../../lib/escapeHTML'; +import { getUserPreference } from '../../../utils/client'; export const normalizeThreadMessage = ({ ...message }) => { if (message.msg) { @@ -159,7 +160,8 @@ export const RoomHistoryManager = new class { room.unreadNotLoaded.set(result.unreadNotLoaded); room.firstUnread.set(result.firstUnread); - const wrapper = $('.messages-box .wrapper').get(0); + const wrapper = await waitUntilWrapperExists(); + if (wrapper) { previousHeight = wrapper.scrollHeight; scroll = wrapper.scrollTop; @@ -174,22 +176,25 @@ export const RoomHistoryManager = new class { room.loaded = 0; } - room.loaded += messages.length; + const showMessageInMainThread = getUserPreference(Meteor.userId(), 'showMessageInMainThread', false); + + const visibleMessages = messages.filter((msg) => !msg.tmid || showMessageInMainThread || msg.tshow); + + room.loaded += visibleMessages.length; if (messages.length < limit) { room.hasMore.set(false); } - if (wrapper) { - waitAfterFlush(() => { - if (wrapper.children[0].scrollHeight <= wrapper.offsetHeight) { - return this.getMore(rid); - } - const heightDiff = wrapper.scrollHeight - previousHeight; - wrapper.scrollTop = scroll + heightDiff; - }); + if (room.hasMore.get() && (visibleMessages.length === 0 || room.loaded < limit)) { + return this.getMore(rid); } + waitAfterFlush(() => { + const heightDiff = wrapper.scrollHeight - previousHeight; + wrapper.scrollTop = scroll + heightDiff; + }); + room.isLoading.set(false); waitAfterFlush(() => { readMessage.refreshUnreadMark(rid); diff --git a/app/ui-utils/client/lib/messageContext.js b/app/ui-utils/client/lib/messageContext.js index d10e7cd8ccbf..283cddf5bb9e 100644 --- a/app/ui-utils/client/lib/messageContext.js +++ b/app/ui-utils/client/lib/messageContext.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { FlowRouter } from 'meteor/kadira:flow-router'; +import { Tracker } from 'meteor/tracker'; import { Subscriptions, Rooms, Users } from '../../../models/client'; import { hasPermission } from '../../../authorization/client'; @@ -17,7 +18,7 @@ const fields = { name: 1, username: 1, 'settings.preferences.showMessageInMainTh export function messageContext({ rid } = Template.instance()) { const uid = Meteor.userId(); const user = Users.findOne({ _id: uid }, { fields }) || {}; - const instace = Template.instance(); + const instance = Template.instance(); const openThread = (e) => { const { rid, mid, tmid } = e.currentTarget.dataset; const room = Rooms.findOne({ _id: rid }); @@ -40,7 +41,7 @@ export function messageContext({ rid } = Template.instance()) { }); } : (msg, e) => { const { actionlink } = e.currentTarget.dataset; - actionLinks.run(actionlink, msg._id, instace, (err) => { + actionLinks.run(actionlink, msg._id, instance, (err) => { if (err) { handleError(err); } @@ -60,13 +61,12 @@ export function messageContext({ rid } = Template.instance()) { return { u: user, - room: Rooms.findOne({ _id: rid }, { - reactive: false, + room: Tracker.nonreactive(() => Rooms.findOne({ _id: rid }, { fields: { _updatedAt: 0, lastMessage: 0, }, - }), + })), subscription: Subscriptions.findOne({ rid }, { fields: { name: 1, diff --git a/app/ui-utils/client/lib/modal.js b/app/ui-utils/client/lib/modal.js index d46b8f8c4e7f..1971ba908b0e 100644 --- a/app/ui-utils/client/lib/modal.js +++ b/app/ui-utils/client/lib/modal.js @@ -209,16 +209,14 @@ Template.rc_modal.helpers({ Template.rc_modal.onRendered(function() { this.oldFocus = document.activeElement; - if (this.data.onRendered) { - this.data.onRendered(); - } - if (this.data.input) { $('.js-modal-input', this.firstNode).focus(); } else if (this.data.showConfirmButton && this.data.confirmOnEnter) { $('.js-confirm', this.firstNode).focus(); } - + if (this.data.onRendered) { + this.data.onRendered(); + } this.data.closeOnEscape && document.addEventListener('keydown', modal.onKeyDown); }); diff --git a/app/ui/client/index.js b/app/ui/client/index.js index 2e23faa91ac2..8a08c5cdcbf8 100644 --- a/app/ui/client/index.js +++ b/app/ui/client/index.js @@ -12,7 +12,6 @@ import './views/404/roomNotFound.html'; import './views/404/invalidSecretURL.html'; import './views/404/invalidInvite.html'; import './views/app/burger.html'; -import './views/app/createChannel.html'; import './views/app/editStatus.html'; import './views/app/editStatus.css'; import './views/app/home.html'; @@ -28,7 +27,6 @@ import './views/app/photoswipe.html'; import './views/cmsPage'; import './views/404/roomNotFound'; import './views/app/burger'; -import './views/app/createChannel'; import './views/app/CreateDirectMessage'; import './views/app/editStatus'; import './views/app/home'; diff --git a/app/ui/client/lib/fileUpload.js b/app/ui/client/lib/fileUpload.js index 3a559c3c2217..b8ad23505353 100644 --- a/app/ui/client/lib/fileUpload.js +++ b/app/ui/client/lib/fileUpload.js @@ -116,7 +116,7 @@ const getAudioUploadPreview = (file, preview) => `\ - + `; @@ -132,7 +132,7 @@ const getVideoUploadPreview = (file, preview) => `\ - + `; @@ -145,7 +145,7 @@ const getImageUploadPreview = (file, preview) => `\ - + `; @@ -180,7 +180,7 @@ const getGenericUploadPreview = (file) => `\ - + `; @@ -260,7 +260,7 @@ export const fileUpload = async (files, input, { rid, tmid }) => { confirmButtonText: t('Send'), cancelButtonText: t('Cancel'), html: true, - onRendered: () => $('#file-name').focus(), + onRendered: () => $('#file-description').focus(), }, async (isConfirm) => { if (!isConfirm) { return; diff --git a/app/ui/client/views/app/createChannel.html b/app/ui/client/views/app/createChannel.html deleted file mode 100644 index 752d3a98e3b5..000000000000 --- a/app/ui/client/views/app/createChannel.html +++ /dev/null @@ -1,217 +0,0 @@ - - - {{#each roomType in roomTypesBeforeStandard}} - - {{> Template.dynamic template=roomType.creationTemplate }} - - {{/each}} - - {{_ "Channels_are_where_your_team_communicate"}} - - - - - - - - - - {{typeLabel}} - - - {{typeDescription}} - - - - - - - - - {{_ "Read_only_channel"}} - - - {{readOnlyDescription}} - - {{#if e2eEnabled}} - - - - - - - - {{_"Encrypted"}} - - - - {{_"Encrypted_channel_Description"}} - - - {{/if}} - - - - - - - - {{_"Broadcast_channel"}} - - - - {{_"Broadcast_channel_Description"}} - - - - - - - {{_ "Channel_name"}} - - - {{> icon block="rc-input__icon-svg" icon=iconType }} - - - - - {{#if inUse}} - - - {{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}} - - {{_ "Channel_already_exist_static"}} - - {{/if}} - - - - {{_ "Invite_Users"}} - - - {{> icon block="rc-input__icon-svg" icon="at"}} - - - {{#each user in selectedUsers}} - {{> tag user}} - {{/each}} - - - - {{#with config}} - {{#if autocomplete 'isShowing'}} - {{> popupList data=config items=items ready=(autocomplete 'isLoaded')}} - {{/if}} - {{/with}} - - - - {{#if tokenAccessEnabled}} - - - - - - - - - {{_ "Token_Controlled_Access"}} - - - - - {{#if tokensRequired}} - {{> tokenpass extensionsConfig}} - {{/if}} - {{/if}} - - - - - - {{#each roomType in roomTypesAfterStandard}} - - {{> Template.dynamic template=roomType.creationTemplate }} - - {{/each}} - - - - - - Tokenpass - - - - - - - - - - {{tokenRequiment}} - - - {{tokenRequimentDescription}} - - - - - - {{_ "Tokens_Required"}} - - - - - {{_ "Tokens_Required_Input_Description"}} - - - - {{_ "Tokens_Minimum_Needed_Balance"}} - - - - - {{_ "Tokens_Minimum_Needed_Balance_Description"}} - - {{#if selectedTokens}} - - - Tokens - - - {{#each token in selectedTokens}} - {{> tagToken token}} - {{/each}} - - - - - {{/if}} - - - - - - - - - {{#if username}} - - {{> avatar username=username}} - - {{username}} - {{else}} - {{text}} - {{/if}} - {{> icon block="rc-tags__tag-icon" icon="cross"}} - - - - - - {{token}} - {{> icon block="rc-tags__tag-icon" icon="cross"}} - - diff --git a/app/ui/client/views/app/createChannel.js b/app/ui/client/views/app/createChannel.js deleted file mode 100644 index fa3def7e50f7..000000000000 --- a/app/ui/client/views/app/createChannel.js +++ /dev/null @@ -1,437 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { ReactiveVar } from 'meteor/reactive-var'; -import { Tracker } from 'meteor/tracker'; -import { Blaze } from 'meteor/blaze'; -import { FlowRouter } from 'meteor/kadira:flow-router'; -import { Template } from 'meteor/templating'; -import toastr from 'toastr'; -import _ from 'underscore'; - -import { settings } from '../../../../settings'; -import { callbacks } from '../../../../callbacks'; -import { t, roomTypes } from '../../../../utils'; -import { hasAllPermission } from '../../../../authorization'; -import { AutoComplete } from '../../../../meteor-autocomplete/client'; - -const acEvents = { - 'click .rc-popup-list__item'(e, t) { - t.ac.onItemClick(this, e); - }, - 'keydown [name="users"]'(e, t) { - if ([8, 46].includes(e.keyCode) && e.target.value === '') { - const users = t.selectedUsers; - const usersArr = users.get(); - usersArr.pop(); - return users.set(usersArr); - } - - t.ac.onKeyDown(e); - }, - 'keyup [name="users"]'(e, t) { - t.ac.onKeyUp(e); - }, - 'focus [name="users"]'(e, t) { - t.ac.onFocus(e); - }, - 'blur [name="users"]'(e, t) { - t.ac.onBlur(e); - }, -}; - -const validateChannelName = (name) => { - if (settings.get('UI_Allow_room_names_with_special_chars')) { - return true; - } - - const reg = new RegExp(`^${ settings.get('UTF8_Names_Validation') }$`); - return name.length === 0 || reg.test(name); -}; - -const filterNames = (old) => { - if (settings.get('UI_Allow_room_names_with_special_chars')) { - return old; - } - - const reg = new RegExp(`^${ settings.get('UTF8_Names_Validation') }$`); - return [...old.replace(' ', '').toLocaleLowerCase()].filter((f) => reg.test(f)).join(''); -}; - -Template.createChannel.helpers({ - autocomplete(key) { - const instance = Template.instance(); - const param = instance.ac[key]; - return typeof param === 'function' ? param.apply(instance.ac) : param; - }, - items() { - return Template.instance().ac.filteredList(); - }, - config() { - const filter = Template.instance().userFilter; - return { - filter: filter.get(), - noMatchTemplate: 'userSearchEmpty', - modifier(text) { - const f = filter.get(); - return `@${ f.length === 0 ? text : text.replace(new RegExp(filter.get()), function(part) { - return `${ part }`; - }) }`; - }, - }; - }, - selectedUsers() { - return Template.instance().selectedUsers.get(); - }, - inUse() { - return Template.instance().inUse.get(); - }, - invalidChannel() { - const instance = Template.instance(); - const invalid = instance.invalid.get(); - const inUse = instance.inUse.get(); - return invalid || inUse; - }, - typeLabel() { - return t(Template.instance().type.get() === 'p' ? t('Private_Channel') : t('Public_Channel')); - }, - typeDescription() { - return t(Template.instance().type.get() === 'p' ? t('Just_invited_people_can_access_this_channel') : t('Everyone_can_access_this_channel')); - }, - broadcast() { - return Template.instance().broadcast.get(); - }, - encrypted() { - return Template.instance().encrypted.get(); - }, - encryptedDisabled() { - return Template.instance().type.get() !== 'p' || Template.instance().broadcast.get(); - }, - e2eEnabled() { - return settings.get('E2E_Enable'); - }, - readOnly() { - return Template.instance().readOnly.get(); - }, - readOnlyDescription() { - return t(Template.instance().readOnly.get() ? t('Only_authorized_users_can_write_new_messages') : t('All_users_in_the_channel_can_write_new_messages')); - }, - cantCreateBothTypes() { - return !hasAllPermission(['create-c', 'create-p']); - }, - roomTypeIsP() { - return Template.instance().type.get() === 'p'; - }, - createIsDisabled() { - const instance = Template.instance(); - const invalid = instance.invalid.get(); - const extensions_invalid = instance.extensions_invalid.get(); - const inUse = instance.inUse.get(); - const name = instance.name.get(); - - if (name.length === 0 || invalid || inUse === true || inUse === undefined || extensions_invalid) { - return 'disabled'; - } - return ''; - }, - iconType() { - return Template.instance().type.get() === 'p' ? 'lock' : 'hashtag'; - }, - tokenAccessEnabled() { - return settings.get('API_Tokenpass_URL') !== ''; - }, - tokenIsDisabled() { - return Template.instance().type.get() !== 'p' ? 'disabled' : null; - }, - tokensRequired() { - return Template.instance().tokensRequired.get() && Template.instance().type.get() === 'p'; - }, - extensionsConfig() { - const instance = Template.instance(); - return { - validations: instance.extensions_validations, - submits: instance.extensions_submits, - change: instance.change, - }; - }, - roomTypesBeforeStandard() { - const orderLow = roomTypes.roomTypesOrder.filter((roomTypeOrder) => roomTypeOrder.identifier === 'c')[0].order; - return roomTypes.roomTypesOrder.filter( - (roomTypeOrder) => roomTypeOrder.order < orderLow, - ).map( - (roomTypeOrder) => roomTypes.getConfig(roomTypeOrder.identifier), - ).filter((roomType) => roomType.creationTemplate); - }, - roomTypesAfterStandard() { - const orderHigh = roomTypes.roomTypesOrder.filter((roomTypeOrder) => roomTypeOrder.identifier === 'd')[0].order; - return roomTypes.roomTypesOrder.filter( - (roomTypeOrder) => roomTypeOrder.order > orderHigh, - ).map( - (roomTypeOrder) => roomTypes.getConfig(roomTypeOrder.identifier), - ).filter((roomType) => roomType.creationTemplate); - }, -}); - -Template.createChannel.events({ - ...acEvents, - 'click .rc-tags__tag'({ target }, t) { - const { username } = Blaze.getData(target); - t.selectedUsers.set(t.selectedUsers.get().filter((user) => user.username !== username)); - }, - 'change [name=setTokensRequired]'(e, t) { - t.tokensRequired.set(e.currentTarget.checked); - t.change(); - }, - 'change [name="type"]'(e, t) { - t.type.set(e.target.checked ? e.target.value : 'c'); - t.change(); - }, - 'change [name="broadcast"]'(e, t) { - t.broadcast.set(e.target.checked); - t.change(); - }, - 'change [name="encrypted"]'(e, t) { - t.encrypted.set(e.target.checked); - t.change(); - }, - 'change [name="readOnly"]'(e, t) { - t.readOnly.set(e.target.checked); - }, - 'input [name="users"]'(e, t) { - const input = e.target; - const position = input.selectionEnd || input.selectionStart; - const { length } = input.value; - const modified = filterNames(input.value); - input.value = modified; - document.activeElement === input && e && /input/i.test(e.type) && (input.selectionEnd = position + input.value.length - length); - - t.userFilter.set(modified); - }, - 'input [name="name"]'(e, t) { - const input = e.target; - const position = input.selectionEnd || input.selectionStart; - const { length } = input.value; - const modified = filterNames(input.value); - - input.value = modified; - document.activeElement === input && e && /input/i.test(e.type) && (input.selectionEnd = position + input.value.length - length); - t.invalid.set(!validateChannelName(input.value)); - if (input.value !== t.name.get()) { - t.inUse.set(undefined); - t.checkChannel(input.value); - t.name.set(modified); - } - }, - 'submit .create-channel__content'(e, instance) { - e.preventDefault(); - e.stopPropagation(); - const name = e.target.name.value; - const type = instance.type.get(); - const readOnly = instance.readOnly.get(); - const broadcast = instance.broadcast.get(); - const encrypted = instance.encrypted.get(); - const isPrivate = type === 'p'; - - if (instance.invalid.get() || instance.inUse.get()) { - return e.target.name.focus(); - } - if (!Object.keys(instance.extensions_validations).map((key) => instance.extensions_validations[key]).reduce((valid, fn) => fn(instance) && valid, true)) { - return instance.extensions_invalid.set(true); - } - - const extraData = Object.keys(instance.extensions_submits) - .reduce((result, key) => ({ ...result, ...instance.extensions_submits[key](instance) }), { broadcast, encrypted }); - - Meteor.call(isPrivate ? 'createPrivateGroup' : 'createChannel', name, instance.selectedUsers.get().map((user) => user.username), readOnly, {}, extraData, function(err, result) { - if (err) { - if (err.error === 'error-invalid-name') { - instance.invalid.set(true); - return; - } - if (err.error === 'error-duplicate-channel-name') { - instance.inUse.set(true); - return; - } - if (err.error === 'error-invalid-room-name') { - toastr.error(t('error-invalid-room-name', { room_name: name })); - return; - } - toastr.error(err.message); - return; - } - - if (!isPrivate) { - callbacks.run('aftercreateCombined', { _id: result.rid, name: result.name }); - } - if (instance.data.onCreate) { - instance.data.onCreate(result); - } - - return FlowRouter.go(isPrivate ? 'group' : 'channel', { ...result }, FlowRouter.current().queryParams); - }); - return false; - }, -}); - -Template.createChannel.onRendered(function() { - const users = this.selectedUsers; - - this.firstNode.querySelector('[name="name"]').focus(); - this.ac.element = this.firstNode.querySelector('[name="users"]'); - this.ac.$element = $(this.ac.element); - this.ac.$element.on('autocompleteselect', function(e, { item }) { - const usersArr = users.get(); - usersArr.push(item); - users.set(usersArr); - }); -}); - -Template.createChannel.onCreated(function() { - this.selectedUsers = new ReactiveVar([]); - - const filter = { exceptions: [Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)) }; - // this.onViewRead:??y(function() { - Tracker.autorun(() => { - filter.exceptions = [Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)); - }); - this.extensions_validations = {}; - this.extensions_submits = {}; - this.name = new ReactiveVar(''); - this.type = new ReactiveVar(hasAllPermission(['create-p']) ? 'p' : 'c'); - this.readOnly = new ReactiveVar(false); - this.broadcast = new ReactiveVar(false); - this.encrypted = new ReactiveVar(settings.get('E2E_Enabled_Default_PrivateRooms')); - this.inUse = new ReactiveVar(undefined); - this.invalid = new ReactiveVar(false); - this.extensions_invalid = new ReactiveVar(false); - this.change = _.debounce(() => { - let valid = true; - Object.keys(this.extensions_validations).map((key) => this.extensions_validations[key]).forEach((f) => { valid = f(this) && valid; }); - this.extensions_invalid.set(!valid); - }, 300); - - Tracker.autorun(() => { - const broadcast = this.broadcast.get(); - if (broadcast) { - this.readOnly.set(true); - this.encrypted.set(false); - } - - const type = this.type.get(); - if (type !== 'p') { - this.encrypted.set(false); - } - }); - - this.userFilter = new ReactiveVar(''); - this.tokensRequired = new ReactiveVar(false); - this.checkChannel = _.debounce((name) => { - if (validateChannelName(name)) { - return Meteor.call('roomNameExists', name, (error, result) => { - if (error) { - return; - } - this.inUse.set(result); - }); - } - this.inUse.set(undefined); - }, 1000); - - this.ac = new AutoComplete( - { - selector: { - anchor: '.rc-input__label', - item: '.rc-popup-list__item', - container: '.rc-popup-list__list', - }, - position: 'fixed', - limit: 10, - inputDelay: 300, - rules: [ - { - // @TODO maybe change this 'collection' and/or template - - collection: 'UserAndRoom', - endpoint: 'users.autocomplete', - field: 'username', - matchAll: true, - filter, - doNotChangeWidth: false, - selector(match) { - return { term: match }; - }, - sort: 'username', - }, - ], - - }); - - // this.firstNode.querySelector('[name=name]').focus(); - // this.ac.element = this.firstNode.querySelector('[name=users]'); - // this.ac.$element = $(this.ac.element); - this.ac.tmplInst = this; -}); - -Template.tokenpass.onCreated(function() { - this.data.validations.tokenpass = (instance) => { - const result = (settings.get('API_Tokenpass_URL') !== '' && instance.tokensRequired.get() && instance.type.get() === 'p') && this.selectedTokens.get().length === 0; - this.invalid.set(result); - return !result; - }; - this.data.submits.tokenpass = () => ({ - tokenpass: { - require: this.requireAll.get() ? 'all' : 'any', - tokens: this.selectedTokens.get(), - }, - }); - this.balance = new ReactiveVar(''); - this.token = new ReactiveVar(''); - this.selectedTokens = new ReactiveVar([]); - this.invalid = new ReactiveVar(false); - this.requireAll = new ReactiveVar(true); -}); - -Template.tokenpass.helpers({ - selectedTokens() { - return Template.instance().selectedTokens.get(); - }, - invalid() { - return Template.instance().invalid.get(); - }, - addIsDisabled() { - const { balance, token } = Template.instance(); - return balance.get().length && token.get().length ? '' : 'disabled'; - }, - tokenRequiment() { - return Template.instance().requireAll.get() ? t('Require_all_tokens') : t('Require_any_token'); - }, - tokenRequimentDescription() { - return Template.instance().requireAll.get() ? t('All_added_tokens_will_be_required_by_the_user') : t('At_least_one_added_token_is_required_by_the_user'); - }, -}); - -Template.tokenpass.events({ - 'click [data-button=add]'(e, instance) { - const { balance, token, selectedTokens } = instance; - const text = token.get(); - const arr = selectedTokens.get(); - selectedTokens.set([...arr.filter((token) => token.token !== text), { token: text, balance: balance.get() }]); - balance.set(''); - token.set(''); - [...instance.findAll('input[type=text],input[type=number]')].forEach((el) => { el.value = ''; }); - instance.data.change(); - return false; - }, - 'click .rc-tags__tag'({ target }, t) { - const { token } = Blaze.getData(target); - t.selectedTokens.set(t.selectedTokens.get().filter((t) => t.token !== token)); - t.data.change(); - }, - 'input [name=tokenMinimumNeededBalance]'(e, i) { - i.balance.set(e.target.value); - }, - 'input [name=tokensRequired]'(e, i) { - i.token.set(e.target.value); - }, - 'change [name=tokenRequireAll]'(e, i) { - i.requireAll.set(e.currentTarget.checked); - }, -}); diff --git a/app/ui/client/views/app/room.js b/app/ui/client/views/app/room.js index ece88045b661..25df13abe97d 100644 --- a/app/ui/client/views/app/room.js +++ b/app/ui/client/views/app/room.js @@ -269,7 +269,7 @@ Template.roomOld.helpers({ }, messageboxData() { - const { sendToBottomIfNecessaryDebounced, subscription } = Template.instance(); + const { sendToBottomIfNecessary, subscription } = Template.instance(); const { _id: rid } = this; const isEmbedded = Layout.isEmbedded(); const showFormattingTips = settings.get('Message_ShowFormattingTips'); @@ -286,7 +286,7 @@ Template.roomOld.helpers({ chatMessages[rid].initializeInput(input, { rid }); }, - onResize: () => sendToBottomIfNecessaryDebounced && sendToBottomIfNecessaryDebounced(), + onResize: () => sendToBottomIfNecessary && sendToBottomIfNecessary(), onKeyUp: (...args) => chatMessages[rid] && chatMessages[rid].keyup.apply(chatMessages[rid], args), onKeyDown: (...args) => chatMessages[rid] && chatMessages[rid].keydown.apply(chatMessages[rid], args), onSend: (...args) => chatMessages[rid] && chatMessages[rid].send.apply(chatMessages[rid], args), @@ -432,9 +432,6 @@ Template.roomOld.helpers({ }, }); -let lastScrollTop; - - export const dropzoneEvents = { 'dragenter .dropzone'(e) { const types = e.originalEvent && e.originalEvent.dataTransfer && e.originalEvent.dataTransfer.types; @@ -552,15 +549,15 @@ Meteor.startup(() => { RoomHistoryManager.clear(template && template.data && template.data._id); }, 'load .gallery-item'(e, template) { - template.sendToBottomIfNecessaryDebounced(); + template.sendToBottomIfNecessary(); }, 'rendered .js-block-wrapper'(e, template) { - template.sendToBottomIfNecessaryDebounced(); + template.sendToBottomIfNecessary(); }, 'click .new-message'(event, instance) { instance.atBottom = true; - instance.sendToBottomIfNecessaryDebounced(); + instance.sendToBottomIfNecessary(); chatMessages[RoomManager.openedRoom].input.focus(); }, 'click .upload-progress-close'(e) { @@ -584,26 +581,26 @@ Meteor.startup(() => { 'scroll .wrapper': _.throttle(function(e, t) { const $roomLeader = $('.room-leader'); if ($roomLeader.length) { - if (e.target.scrollTop < lastScrollTop) { + if (e.target.scrollTop < t.lastScrollTop) { t.hideLeaderHeader.set(false); } else if (t.isAtBottom(100) === false && e.target.scrollTop > $roomLeader.height()) { t.hideLeaderHeader.set(true); } } - lastScrollTop = e.target.scrollTop; + t.lastScrollTop = e.target.scrollTop; const height = e.target.clientHeight; const isLoading = RoomHistoryManager.isLoading(this._id); const hasMore = RoomHistoryManager.hasMore(this._id); const hasMoreNext = RoomHistoryManager.hasMoreNext(this._id); if ((isLoading === false && hasMore === true) || hasMoreNext === true) { - if (hasMore === true && lastScrollTop <= height / 3) { + if (hasMore === true && t.lastScrollTop <= height / 3) { RoomHistoryManager.getMore(this._id); - } else if (hasMoreNext === true && Math.ceil(lastScrollTop) >= e.target.scrollHeight - height) { + } else if (hasMoreNext === true && Math.ceil(t.lastScrollTop) >= e.target.scrollHeight - height) { RoomHistoryManager.getMoreNext(this._id); } } - }, 300), + }, 100), 'click .time a'(e) { e.preventDefault(); @@ -765,8 +762,6 @@ Meteor.startup(() => { this.sendToBottom(); } }; - - this.sendToBottomIfNecessaryDebounced = _.debounce(this.sendToBottomIfNecessary, 10); }); // Update message to re-render DOM Template.roomOld.onDestroyed(function() { @@ -812,7 +807,7 @@ Meteor.startup(() => { }; template.sendToBottom = function() { - wrapper.scrollTop = wrapper.scrollHeight - wrapper.clientHeight; + wrapper.scrollTo(30, wrapper.scrollHeight); newMessage.className = 'new-message background-primary-action-color color-content-background-color not'; }; @@ -820,22 +815,14 @@ Meteor.startup(() => { template.atBottom = template.isAtBottom(100); }; + template.observer = new ResizeObserver(() => template.sendToBottomIfNecessary()); - if (window.MutationObserver) { - template.observer = new MutationObserver(() => template.sendToBottomIfNecessaryDebounced()); - - template.observer.observe(wrapperUl, { childList: true }); - } else { - wrapperUl.addEventListener('DOMSubtreeModified', () => template.sendToBottomIfNecessaryDebounced()); - } - - template.onWindowResize = () => template.sendToBottomIfNecessaryDebounced(); - - window.addEventListener('resize', template.onWindowResize); + template.observer.observe(wrapperUl); const wheelHandler = _.throttle(function() { template.checkIfScrollIsAtBottom(); }, 100); + wrapper.addEventListener('mousewheel', wheelHandler); wrapper.addEventListener('wheel', wheelHandler); @@ -853,7 +840,7 @@ Meteor.startup(() => { wrapper.addEventListener('scroll', wheelHandler); }); - lastScrollTop = $('.messages-box .wrapper').scrollTop(); + this.lastScrollTop = $('.messages-box .wrapper').scrollTop(); const rtl = $('html').hasClass('rtl'); @@ -896,6 +883,18 @@ Meteor.startup(() => { readMessage.read(rid); }, 500); + this.autorun(() => { + if (rid !== Session.get('openedRoom')) { + return; + } + + const room = Rooms.findOne({ _id: rid }); + + if (room?.t === 'l') { + roomTypes.getConfig(room.t).openCustomProfileTab(this, room, room.v.username); + } + }); + this.autorun(() => { if (!Object.values(roomTypes.roomTypes).map(({ route }) => route && route.name).filter(Boolean).includes(FlowRouter.getRouteName())) { return; @@ -983,9 +982,6 @@ Meteor.startup(() => { return FlowRouter.go('home'); } }); - - const observer = new ResizeObserver(template.sendToBottomIfNecessary); - observer.observe(this.firstNode.querySelector('.wrapper ul')); }); }); diff --git a/app/user-data-download/server/cronProcessDownloads.js b/app/user-data-download/server/cronProcessDownloads.js index e13c7c6ac528..2c35e4e06ed4 100644 --- a/app/user-data-download/server/cronProcessDownloads.js +++ b/app/user-data-download/server/cronProcessDownloads.js @@ -171,6 +171,9 @@ const getMessageData = function(msg, hideUsers, userData, usersMap) { case 'livechat-close': messageObject.msg = TAPi18n.__('Conversation_finished'); break; + case 'livechat-started': + messageObject.msg = TAPi18n.__('Chat_started'); + break; } } diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 510b977ecfb6..936af68f3ebd 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.11.1" + "version": "3.12.0" } diff --git a/app/version-check/client/index.js b/app/version-check/client/index.js index ba77a6f67150..77c7f0ee476c 100644 --- a/app/version-check/client/index.js +++ b/app/version-check/client/index.js @@ -18,6 +18,7 @@ Meteor.startup(function() { firstBanner.textArguments = firstBanner.textArguments || []; banners.open({ + id: firstBanner.id, title: TAPi18n.__(firstBanner.title), text: TAPi18n.__(firstBanner.text, ...firstBanner.textArguments), modifiers: firstBanner.modifiers, diff --git a/app/videobridge/.eslintrc b/app/videobridge/.eslintrc deleted file mode 100644 index 826a8e171654..000000000000 --- a/app/videobridge/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "globals": { - "JitsiMeetExternalAPI": false - } -} \ No newline at end of file diff --git a/app/videobridge/client/index.js b/app/videobridge/client/index.js index 1e30d9f29985..e1d57007880e 100644 --- a/app/videobridge/client/index.js +++ b/app/videobridge/client/index.js @@ -1,9 +1,4 @@ -import './stylesheets/video.css'; -import './views/videoFlexTab.html'; import './views/bbbLiveView.html'; -import './views/videoFlexTabBbb.html'; -import './views/videoFlexTab'; -import './views/videoFlexTabBbb'; import './tabBar'; import './actionLink'; import '../lib/messageType'; diff --git a/app/videobridge/client/stylesheets/video.css b/app/videobridge/client/stylesheets/video.css deleted file mode 100644 index f9f00d45035e..000000000000 --- a/app/videobridge/client/stylesheets/video.css +++ /dev/null @@ -1,18 +0,0 @@ -.flex-tab { - .video-chat { - ul { - li { - margin-bottom: 20px; - } - } - } -} - -.video-chat { - .main-video { - iframe { - width: 100%; - min-height: 299px; - } - } -} diff --git a/app/videobridge/client/tabBar.tsx b/app/videobridge/client/tabBar.tsx index 3e71c3277505..55a591c2d6d8 100644 --- a/app/videobridge/client/tabBar.tsx +++ b/app/videobridge/client/tabBar.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import React, { useMemo, lazy } from 'react'; import { useStableArray } from '@rocket.chat/fuselage-hooks'; import { Option, Badge } from '@rocket.chat/fuselage'; @@ -7,6 +7,8 @@ import { addAction, ToolboxActionConfig } from '../../../client/views/room/lib/T import { useTranslation } from '../../../client/contexts/TranslationContext'; import Header from '../../../client/components/Header'; +const templateBBB = lazy(() => import('../../../client/views/room/contextualBar/Call/BBB')); + addAction('bbb_video', ({ room }) => { const enabled = useSetting('bigbluebutton_Enabled'); const t = useTranslation(); @@ -28,7 +30,7 @@ addAction('bbb_video', ({ room }) => { id: 'bbb_video', title: 'BBB Video Call', icon: 'phone', - template: 'videoFlexTabBbb', + template: templateBBB, order: live ? -1 : 0, renderAction: (props): React.ReactNode => {live ? ! : null} @@ -37,6 +39,8 @@ addAction('bbb_video', ({ room }) => { } : null), [enabled, groups, live, t]); }); +const templateJitsi = lazy(() => import('../../../client/views/room/contextualBar/Call/Jitsi')); + addAction('video', ({ room }) => { const enabled = useSetting('Jitsi_Enabled'); const t = useTranslation(); @@ -59,7 +63,8 @@ addAction('video', ({ room }) => { id: 'video', title: 'Call', icon: 'phone', - template: 'videoFlexTab', + template: templateJitsi, + full: true, order: live ? -1 : 0, renderAction: (props): React.ReactNode => {live && !} diff --git a/app/videobridge/client/views/videoFlexTab.html b/app/videobridge/client/views/videoFlexTab.html deleted file mode 100644 index c81e0f8b31e4..000000000000 --- a/app/videobridge/client/views/videoFlexTab.html +++ /dev/null @@ -1,16 +0,0 @@ - - {{#if openInNewWindow}} - - - {{_ "Video_Conference"}} - - {{_ "Opened_in_a_new_window"}} - - {{else}} - - - - - - {{/if}} - diff --git a/app/videobridge/client/views/videoFlexTab.js b/app/videobridge/client/views/videoFlexTab.js deleted file mode 100644 index 4d5cf1699906..000000000000 --- a/app/videobridge/client/views/videoFlexTab.js +++ /dev/null @@ -1,190 +0,0 @@ -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'; - -import { settings } from '../../../settings'; -import { modal, call } from '../../../ui-utils/client'; -import { t } from '../../../utils/client'; -import { Users, Rooms } from '../../../models'; -import * as CONSTANTS from '../../constants'; - -Template.videoFlexTab.helpers({ - openInNewWindow() { - return settings.get('Jitsi_Open_New_Window'); - }, -}); - -Template.videoFlexTab.onCreated(function() { - this.tabBar = Template.currentData().tabBar; -}); -Template.videoFlexTab.onDestroyed(function() { - return this.stop && this.stop(); -}); - -Template.videoFlexTab.onRendered(function() { - this.api = null; - - const rid = Session.get('openedRoom'); - - const width = 'auto'; - const height = 500; - - const configOverwrite = { - desktopSharingChromeExtId: settings.get('Jitsi_Chrome_Extension'), - }; - const interfaceConfigOverwrite = {}; - - let jitsiRoomActive = null; - - const closePanel = () => { - // Reset things. Should probably be handled better in closeFlex() - $('.flex-tab').css('max-width', ''); - $('.main-content').css('right', ''); - - this.tabBar.close(); - - // TabBar.updateButton('video', { class: '' }); - }; - - const stop = () => { - if (this.intervalHandler) { - Meteor.defer(() => this.api && this.api.dispose()); - clearInterval(this.intervalHandler); - } - }; - - this.stop = stop; - - const update = async () => { - const { jitsiTimeout } = Rooms.findOne({ _id: rid }, { fields: { jitsiTimeout: 1 } }); - - if (jitsiTimeout && (TimeSync.serverTime() - new Date(jitsiTimeout) + CONSTANTS.TIMEOUT < CONSTANTS.DEBOUNCE)) { - return; - } - if (Meteor.status().connected) { - return call('jitsi:updateTimeout', rid); - } - closePanel(); - return this.stop(); - }; - - const start = async () => { - try { - const jitsiTimeout = await update(); - if (!jitsiTimeout) { - return; - } - clearInterval(this.intervalHandler); - this.intervalHandler = setInterval(update, CONSTANTS.HEARTBEAT); - // TabBar.updateButton('video', { class: 'red' }); - return jitsiTimeout; - } catch (error) { - console.error(error); - closePanel(); - throw error; - } - }; - - modal.open({ - title: t('Video_Conference'), - text: t('Start_video_call'), - type: 'warning', - showCancelButton: true, - confirmButtonText: t('Yes'), - cancelButtonText: t('Cancel'), - html: false, - }, (dismiss) => { - if (!dismiss) { - return closePanel(); - } - this.intervalHandler = null; - this.autorun(async () => { - if (!settings.get('Jitsi_Enabled')) { - return closePanel(); - } - - if (!this.tabBar.isOpen()) { - // TabBar.updateButton('video', { class: '' }); - return stop(); - } - - const domain = settings.get('Jitsi_Domain'); - let rname; - if (settings.get('Jitsi_URL_Room_Hash')) { - rname = settings.get('uniqueID') + rid; - } else { - const room = Rooms.findOne({ _id: rid }); - rname = encodeURIComponent(room.t === 'd' ? room.usernames.join(' x ') : room.name); - } - const jitsiRoom = settings.get('Jitsi_URL_Room_Prefix') + rname + settings.get('Jitsi_URL_Room_Suffix'); - const noSsl = !settings.get('Jitsi_SSL'); - const isEnabledTokenAuth = settings.get('Jitsi_Enabled_TokenAuth'); - - if (jitsiRoomActive !== null && jitsiRoomActive !== jitsiRoom) { - jitsiRoomActive = null; - - closePanel(); - - return stop(); - } - - const accessToken = isEnabledTokenAuth && await call('jitsi:generateAccessToken', rid); - - jitsiRoomActive = jitsiRoom; - - if (settings.get('Jitsi_Open_New_Window')) { - return Tracker.nonreactive(async () => { - await start(); - - const queryString = accessToken ? `?jwt=${ accessToken }` : ''; - - const newWindow = window.open(`${ (noSsl ? 'http://' : 'https://') + domain }/${ jitsiRoom }${ queryString }`, jitsiRoom); - if (newWindow) { - const closeInterval = setInterval(() => { - if (newWindow.closed === false) { - return; - } - closePanel(); - stop(); - clearInterval(closeInterval); - }, 300); - return newWindow.focus(); - } - }); - } - - await new Promise((resolve) => { - if (typeof JitsiMeetExternalAPI === 'undefined') { - const prefix = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || ''; - return $.getScript(`${ prefix }/packages/rocketchat_videobridge/client/public/external_api.js`, resolve); - } - resolve(); - }); - - if (typeof JitsiMeetExternalAPI !== 'undefined') { - // Keep it from showing duplicates when re-evaluated on variable change. - const name = Users.findOne(Meteor.userId(), { fields: { name: 1 } }); - if (!$('[id^=jitsiConference]').length) { - Tracker.nonreactive(async () => { - await start(); - - - this.api = new JitsiMeetExternalAPI(domain, jitsiRoom, width, height, this.$('.video-container').get(0), configOverwrite, interfaceConfigOverwrite, noSsl, accessToken); - - /* - * Hack to send after frame is loaded. - * postMessage converts to events in the jitsi meet iframe. - * For some reason those aren't working right. - */ - setTimeout(() => this.api.executeCommand('displayName', [name]), 5000); - }); - } - - // Execute any commands that might be reactive. Like name changing. - this.api && this.api.executeCommand('displayName', [name]); - } - }); - }); -}); diff --git a/app/videobridge/client/views/videoFlexTabBbb.html b/app/videobridge/client/views/videoFlexTabBbb.html deleted file mode 100644 index 5a6939e5dc42..000000000000 --- a/app/videobridge/client/views/videoFlexTabBbb.html +++ /dev/null @@ -1,16 +0,0 @@ - - - {{#if live}} - {{_ "Join Meeting"}} - {{#if callManagement}} - {{_ "End Meeting"}} - {{/if}} - {{else}} - {{#if callManagement}} - {{_ "Start Meeting"}} - {{else}} - {{_ "You have no permission to start a call"}} - {{/if}} - {{/if}} - - diff --git a/app/videobridge/client/views/videoFlexTabBbb.js b/app/videobridge/client/views/videoFlexTabBbb.js deleted file mode 100644 index a12581da3604..000000000000 --- a/app/videobridge/client/views/videoFlexTabBbb.js +++ /dev/null @@ -1,64 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; - -import { settings } from '../../../settings'; -import { Rooms } from '../../../models'; -import { hasAllPermission } from '../../../authorization'; -import { popout } from '../../../ui-utils'; - -Template.videoFlexTabBbb.helpers({ - openInNewWindow() { - return settings.get('Jitsi_Open_New_Window'); - }, - - live() { - const isLive = Rooms.findOne({ _id: this.rid, 'streamingOptions.type': 'call' }, { fields: { streamingOptions: 1 } }) != null; - - if (isLive === false && popout.context) { - popout.close(); - } - - return isLive; - }, - - callManagement() { - const type = Rooms.findOne({ _id: this.rid }).t; - return type === 'd' || hasAllPermission('call-management') || hasAllPermission('call-management', this.rid); - }, -}); - -Template.videoFlexTabBbb.onCreated(function() { - this.tabBar = Template.currentData().tabBar; -}); - -Template.videoFlexTabBbb.events({ - 'click .js-join-meeting'(e) { - $(e.currentTarget).prop('disabled', true); - Meteor.call('bbbJoin', { rid: this.rid }, (err, result) => { - $(e.currentTarget).prop('disabled', false); - console.log(err, result); - if (result) { - popout.open({ - content: 'bbbLiveView', - data: { - source: result.url, - streamingOptions: result, - canOpenExternal: true, - showVideoControls: false, - }, - onCloseCallback: () => console.log('bye popout'), - }); - } - }); - // Get the link and open the iframe - }, - - 'click .js-end-meeting'(e) { - $(e.currentTarget).prop('disabled', true); - Meteor.call('bbbEnd', { rid: this.rid }, (err, result) => { - // $(e.currentTarget).prop('disabled', false); - console.log(err, result); - }); - // Get the link and open the iframe - }, -}); diff --git a/app/videobridge/server/methods/bbb.js b/app/videobridge/server/methods/bbb.js index b06045271d54..3695cc389cd3 100644 --- a/app/videobridge/server/methods/bbb.js +++ b/app/videobridge/server/methods/bbb.js @@ -111,14 +111,12 @@ Meteor.methods({ const endApiResult = HTTP.get(endApi); if (endApiResult.statusCode !== 200) { - // TODO improve error logging - console.log({ endApiResult }); - return; + saveStreamingOptions(rid, {}); + throw new Meteor.Error(endApiResult); } - const doc = parseString(endApiResult.content); - if (doc.response.returncode[0] === 'FAILED') { + if (['SUCCESS', 'FAILED'].includes(doc.response.returncode[0])) { saveStreamingOptions(rid, {}); } }, diff --git a/app/videobridge/server/settings.js b/app/videobridge/server/settings.js index 17b9daafaef9..ba5bb41cf06d 100644 --- a/app/videobridge/server/settings.js +++ b/app/videobridge/server/settings.js @@ -30,6 +30,18 @@ Meteor.startup(function() { }, }); + + this.add('bigbluebutton_Open_New_Window', false, { + type: 'boolean', + enableQuery: { + _id: 'bigbluebutton_Enabled', + value: true, + }, + i18nLabel: 'Always_open_in_new_window', + public: true, + }); + + this.add('bigbluebutton_enable_d', true, { type: 'boolean', i18nLabel: 'WebRTC_Enable_Direct', diff --git a/client/components/AutoCompleteDepartment.js b/client/components/AutoCompleteDepartment.js index acc8781d41a3..a7e8041cd69e 100644 --- a/client/components/AutoCompleteDepartment.js +++ b/client/components/AutoCompleteDepartment.js @@ -11,7 +11,7 @@ export const AutoCompleteDepartment = React.memo((props) => { const { label } = props; - const options = useMemo(() => (data && [{ value: 'All', label: label && t('All') }, ...data.departments.map((department) => ({ value: department._id, label: department.name }))]) || [{ value: 'All', label: label || t('All') }], [data, label, t]); + const options = useMemo(() => (data && [{ value: 'all', label: label && t('All') }, ...data.departments.map((department) => ({ value: department._id, label: department.name }))]) || [{ value: 'all', label: label || t('All') }], [data, label, t]); return + + + + design + + + + + rc-design + + ; + +export const AsTeamMember = () => + + + + design + + + + + rc-design + + ; + +export const WithDiscussion = () => + + + + design + + + + + rc-design + + + + + storybook + + ; diff --git a/client/components/Breadcrumbs/index.js b/client/components/Breadcrumbs/index.js new file mode 100644 index 000000000000..3c46d5773d43 --- /dev/null +++ b/client/components/Breadcrumbs/index.js @@ -0,0 +1,39 @@ +import React from 'react'; +import { Box, Icon } from '@rocket.chat/fuselage'; +import colors from '@rocket.chat/fuselage-tokens/colors'; +import { css } from '@rocket.chat/css-in-js'; + +const BreadcrumbsSeparator = () => /; +const BreadcrumbsIcon = ({ name, color, children }) => {name ? : children}; + +const BreadcrumbsLink = (props) => ; + +const BreadcrumbsText = (props) => ; + +const BreadcrumbsItem = (props) => ; + +const Breadcrumbs = ({ children }) => {children}; + +Object.assign(Breadcrumbs, { + Text: BreadcrumbsText, + Link: BreadcrumbsLink, + Icon: BreadcrumbsIcon, + Separator: BreadcrumbsSeparator, + Item: BreadcrumbsItem, +}); + +export default Breadcrumbs; diff --git a/client/components/CustomFieldsForm.js b/client/components/CustomFieldsForm.js index 486f8e8c1f31..fbe3d808461c 100644 --- a/client/components/CustomFieldsForm.js +++ b/client/components/CustomFieldsForm.js @@ -47,7 +47,7 @@ const CustomSelect = ({ label, name, required, options = {}, setState, state, cl const [selectError, setSelectError] = useState(''); const mappedOptions = useMemo(() => Object.values(options).map((value) => [value, value]), [options]); - const verify = useMemo(() => (!state.length && required ? t('The_field_is_required', label || name) : ''), [name, required, state.length, t]); + const verify = useMemo(() => (!state.length && required ? t('The_field_is_required', label || name) : ''), [name, label, required, state.length, t]); useEffect(() => { setCustomFieldsError((oldErrors) => (verify ? [...oldErrors, { name }] : oldErrors.filter((item) => item.name !== name))); diff --git a/client/components/DeleteWarningModal.tsx b/client/components/DeleteWarningModal.tsx index 94e1c0c7fad0..7feb96e97b30 100644 --- a/client/components/DeleteWarningModal.tsx +++ b/client/components/DeleteWarningModal.tsx @@ -1,9 +1,10 @@ -import { Button, ButtonGroup, Icon, Modal } from '@rocket.chat/fuselage'; +import { Box, Button, ButtonGroup, Icon, Modal } from '@rocket.chat/fuselage'; import React, { FC } from 'react'; import { useTranslation } from '../contexts/TranslationContext'; +import { withDoNotAskAgain, RequiredModalProps } from './withDoNotAskAgain'; -type DeleteWarningModalProps = { +type DeleteWarningModalProps = RequiredModalProps & { cancelText?: string; deleteText?: string; onDelete: () => void; @@ -16,6 +17,8 @@ const DeleteWarningModal: FC = ({ deleteText, onCancel, onDelete, + confirm = onDelete, + dontAskAgain, ...props }) => { const t = useTranslation(); @@ -30,12 +33,17 @@ const DeleteWarningModal: FC = ({ {children} - - {cancelText ?? t('Cancel')} - {deleteText ?? t('Delete')} - + + {dontAskAgain} + + {cancelText ?? t('Cancel')} + {deleteText ?? t('Delete')} + + ; }; +export const DeleteWarningModalDoNotAskAgain = withDoNotAskAgain(DeleteWarningModal); + export default DeleteWarningModal; diff --git a/client/components/MarkdownText.js b/client/components/MarkdownText.js deleted file mode 100644 index 76e724a659cb..000000000000 --- a/client/components/MarkdownText.js +++ /dev/null @@ -1,32 +0,0 @@ -import { Box } from '@rocket.chat/fuselage'; -import React, { useMemo } from 'react'; -import marked from 'marked'; -import dompurify from 'dompurify'; - -const renderer = new marked.Renderer(); - -marked.InlineLexer.rules.gfm.strong = /^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/; -marked.InlineLexer.rules.gfm.em = /^__(?=\S)([\s\S]*?\S)__(?!_)|^_(?=\S)([\s\S]*?\S)_(?!_)/; - -const linkRenderer = renderer.link; -renderer.link = function(href, title, text) { - const html = linkRenderer.call(renderer, href, title, text); - return html.replace(/^ { - const html = content && typeof content === 'string' && marked(content, options); - return preserveHtml ? html : html && sanitizer(html, { ADD_ATTR: ['target'] }); - }, [content, preserveHtml, sanitizer]); - return __html ? : null; -} - -export default MarkdownText; diff --git a/client/components/MarkdownText.tsx b/client/components/MarkdownText.tsx new file mode 100644 index 000000000000..0308b2d37261 --- /dev/null +++ b/client/components/MarkdownText.tsx @@ -0,0 +1,96 @@ +import { Box } from '@rocket.chat/fuselage'; +import React, { FC, useMemo } from 'react'; +import marked from 'marked'; +import dompurify from 'dompurify'; + +type MarkdownTextParams = { + content: string; + variant: 'inline' | 'inlineWithoutBreaks' | 'document'; + preserveHtml: boolean; + withTruncatedText: boolean; +}; + +const documentRenderer = new marked.Renderer(); +const inlineRenderer = new marked.Renderer(); +const inlineWithoutBreaks = new marked.Renderer(); + +marked.InlineLexer.rules.gfm = { + ...marked.InlineLexer.rules.gfm, + strong: /^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/, + em: /^__(?=\S)([\s\S]*?\S)__(?!_)|^_(?=\S)([\s\S]*?\S)_(?!_)/, +}; + +const linkMarked = (href: string | null, _title: string | null, text: string): string => + `${ text } `; +const paragraphMarked = (text: string): string => text; +const brMarked = (): string => ' '; +const listItemMarked = (text: string): string => { + const cleanText = text.replace(/|<\/p>/ig, ''); + return `${ cleanText }`; +}; + +documentRenderer.link = linkMarked; +documentRenderer.listitem = listItemMarked; + +inlineRenderer.link = linkMarked; +inlineRenderer.paragraph = paragraphMarked; +inlineRenderer.listitem = listItemMarked; + +inlineWithoutBreaks.link = linkMarked; +inlineWithoutBreaks.paragraph = paragraphMarked; +inlineWithoutBreaks.br = brMarked; +inlineWithoutBreaks.listitem = listItemMarked; + +const defaultOptions = { + gfm: true, + headerIds: false, +}; + +const options = { + ...defaultOptions, + renderer: documentRenderer, +}; + +const inlineOptions = { + ...defaultOptions, + renderer: inlineRenderer, +}; + +const inlineWithoutBreaksOptions = { + ...defaultOptions, + renderer: inlineWithoutBreaks, +}; + +const MarkdownText: FC> = ({ + content, + variant = 'document', + withTruncatedText = false, + preserveHtml = false, + ...props +}) => { + const sanitizer = dompurify.sanitize; + + let markedOptions: {}; + + const withRichContent = variant; + switch (variant) { + case 'inline': + markedOptions = inlineOptions; + break; + case 'inlineWithoutBreaks': + markedOptions = inlineWithoutBreaksOptions; + break; + case 'document': + default: + markedOptions = options; + } + + const __html = useMemo(() => { + const html = content && typeof content === 'string' && marked(content, markedOptions); + return preserveHtml ? html : html && sanitizer(html, { ADD_ATTR: ['target'] }); + }, [content, preserveHtml, sanitizer, markedOptions]); + + return __html ? : null; +}; + +export default MarkdownText; diff --git a/client/components/Message/Actions/index.tsx b/client/components/Message/Actions/index.tsx index 332fcbd2ed35..2a7611c43a3b 100644 --- a/client/components/Message/Actions/index.tsx +++ b/client/components/Message/Actions/index.tsx @@ -15,10 +15,20 @@ type ActionOptions = { runAction?: RunAction; }; +const resolveLegacyIcon = (legacyIcon: string | undefined): string | undefined => { + if (legacyIcon === 'icon-videocam') { + return 'video'; + } + + return legacyIcon && legacyIcon.replace(/^icon-/, ''); +}; + export const Action: FC = ({ id, icon, i18nLabel, label, mid, runAction }) => { const t = useTranslation(); - return {icon && }{i18nLabel ? t(i18nLabel) : label }; + const resolvedIcon = resolveLegacyIcon(icon); + + return {icon && }{i18nLabel ? t(i18nLabel) : label }; }; const Actions: FC<{ actions: Array; runAction: RunAction; mid: string }> = ({ actions, runAction }) => {actions.map((action) => )}; diff --git a/client/components/Message/Attachments/Attachment.tsx b/client/components/Message/Attachments/Attachment.tsx index 4884b1912736..d4b7b7048df4 100644 --- a/client/components/Message/Attachments/Attachment.tsx +++ b/client/components/Message/Attachments/Attachment.tsx @@ -19,8 +19,10 @@ export type AttachmentPropsBase = { }; const Row: FC = (props) => ; + const Title: FC = (props) => ; -const Text: FC = (props) => ; +const TitleLink: FC<{ link: string; title?: string }> = ({ link, title }) => {title}; +const Text: FC = (props) => ; const Size: FC = ({ size, ...props }) => { const format = useFormatMemorySize(); @@ -33,9 +35,9 @@ const Collapse: FC = ({ collapsed = false return ; }; -const Download: FC = ({ title, ...props }) => { +const Download: FC = ({ title, href, ...props }) => { const t = useTranslation(); - return ; + return ; }; const Content: FC = ({ ...props }) => ; @@ -53,6 +55,7 @@ const Thumb: FC<{ url: string }> = memo(({ url }) => & { Row: FC; Title: FC; + TitleLink: FC<{ link: string; title?: string }>; Text: FC; Size: FC; Collapse: FC; @@ -78,6 +81,7 @@ Attachment.Image = Image; Attachment.Row = Row; Attachment.Title = Title; Attachment.Text = Text; +Attachment.TitleLink = TitleLink; Attachment.Size = Size; Attachment.Thumb = Thumb; diff --git a/client/components/Message/Attachments/DefaultAttachment.tsx b/client/components/Message/Attachments/DefaultAttachment.tsx index 6e36ff534345..fa3fb03a3d97 100644 --- a/client/components/Message/Attachments/DefaultAttachment.tsx +++ b/client/components/Message/Attachments/DefaultAttachment.tsx @@ -42,7 +42,7 @@ export type DefaultAttachmentProps = { const isActionAttachment = (attachment: AttachmentProps): attachment is ActionAttachmentProps => 'actions' in attachment; -const applyMarkdownIfRequires = (list: DefaultAttachmentProps['mrkdwn_in']) => (key: MarkdownFields, text: string): JSX.Element | string => (list?.includes(key) ? : text); +const applyMarkdownIfRequires = (list: DefaultAttachmentProps['mrkdwn_in'] = ['text', 'pretext']) => (key: MarkdownFields, text: string): JSX.Element | string => (list?.includes(key) ? : text); export const DefaultAttachment: FC = (attachment) => { const applyMardownFor = applyMarkdownIfRequires(attachment.mrkdwn_in); @@ -57,7 +57,7 @@ export const DefaultAttachment: FC = (attachment) => { {!collapsed && <> {attachment.text && {applyMardownFor('text', attachment.text)}} {/* {attachment.fields && ({ ...rest, value: })) : attachment.fields} />} */} - {attachment.fields && ({ ...rest, value: }))} />} + {attachment.fields && ({ ...rest, value: }))} />} {attachment.image_url && } {/* DEPRECATED */} {isActionAttachment(attachment) && } diff --git a/client/components/Message/Attachments/Files/AudioAttachment.tsx b/client/components/Message/Attachments/Files/AudioAttachment.tsx index e3c906cdf878..fb64ced102dd 100644 --- a/client/components/Message/Attachments/Files/AudioAttachment.tsx +++ b/client/components/Message/Attachments/Files/AudioAttachment.tsx @@ -30,7 +30,7 @@ export const AudioAttachment: FC = ({ {title} {size && } {collapse} - {hasDownload && link && } + {hasDownload && link && } { !collapsed && diff --git a/client/components/Message/Attachments/Files/GenericFileAttachment.tsx b/client/components/Message/Attachments/Files/GenericFileAttachment.tsx index 2dc7889f3d3d..7c6a336ac77f 100644 --- a/client/components/Message/Attachments/Files/GenericFileAttachment.tsx +++ b/client/components/Message/Attachments/Files/GenericFileAttachment.tsx @@ -3,6 +3,7 @@ import React, { FC } from 'react'; import { Attachment, AttachmentPropsBase } from '../Attachment'; import MarkdownText from '../../../MarkdownText'; import { FileProp } from '..'; +import { useMediaUrl } from '../context/AttachmentContext'; export type GenericFileAttachmentProps = { file: FileProp; @@ -19,15 +20,16 @@ export const GenericFileAttachment: FC = ({ // format, // name, }, -}) => +}) => { // const [collapsed, collapse] = useCollapse(collapsedDefault); - - { description && } + const getURL = useMediaUrl(); + return + { description && } - {title} + { hasDownload && link ? : {title} } {size && } {/* {collapse} */} - {hasDownload && link && } + {hasDownload && link && } {/* { !collapsed && @@ -37,3 +39,4 @@ export const GenericFileAttachment: FC = ({ } */} ; +}; diff --git a/client/components/Message/Attachments/Files/ImageAttachment.tsx b/client/components/Message/Attachments/Files/ImageAttachment.tsx index 911e9800d34f..b71366e36bc7 100644 --- a/client/components/Message/Attachments/Files/ImageAttachment.tsx +++ b/client/components/Message/Attachments/Files/ImageAttachment.tsx @@ -35,7 +35,7 @@ export const ImageAttachment: FC = ({ const [collapsed, collapse] = useCollapse(collapsedDefault); const getURL = useMediaUrl(); return - + {title} {size && } diff --git a/client/components/Message/Attachments/Files/PDFAttachment.tsx b/client/components/Message/Attachments/Files/PDFAttachment.tsx index 6dd877b1ac36..d10480c75ea9 100644 --- a/client/components/Message/Attachments/Files/PDFAttachment.tsx +++ b/client/components/Message/Attachments/Files/PDFAttachment.tsx @@ -20,7 +20,7 @@ export const PDFAttachment: FC = ({ const t = useTranslation(); const [collapsed, collapse] = useCollapse(collapsedDefault); return - + {t('PDF')} {collapse} diff --git a/client/components/Message/Attachments/Files/VideoAttachment.tsx b/client/components/Message/Attachments/Files/VideoAttachment.tsx index f95a97f182bb..857640ef0167 100644 --- a/client/components/Message/Attachments/Files/VideoAttachment.tsx +++ b/client/components/Message/Attachments/Files/VideoAttachment.tsx @@ -30,7 +30,7 @@ export const VideoAttachment: FC = ({ title, {title} {size && } {collapse} - {hasDownload && link && } + {hasDownload && link && } { !collapsed && diff --git a/client/components/Message/Attachments/QuoteAttachment.tsx b/client/components/Message/Attachments/QuoteAttachment.tsx index 09c7585aec8f..26a7c139870e 100644 --- a/client/components/Message/Attachments/QuoteAttachment.tsx +++ b/client/components/Message/Attachments/QuoteAttachment.tsx @@ -39,7 +39,7 @@ export const QuoteAttachment: FC = ({ author_icon: url, au {name} {format(ts)} - + {attachments && } diff --git a/client/components/Message/Attachments/components/Image.tsx b/client/components/Message/Attachments/components/Image.tsx index c5898bbb389d..a664735326c9 100644 --- a/client/components/Message/Attachments/components/Image.tsx +++ b/client/components/Message/Attachments/components/Image.tsx @@ -21,7 +21,7 @@ export type ImageProps = { const ImageBox: FC = (props) => ; -export const Retry: FC void }> = ({ retry, ...props }) => { +export const Retry: FC void }> = ({ retry }) => { const t = useTranslation(); const clickable = css` cursor: pointer; @@ -32,7 +32,7 @@ export const Retry: FC void }> = ({ retry, ...props }) background: var(--rxc-color-neutral-300, ${ colors.n300 }) !important; } `; - return + return {t('Retry')} ; @@ -85,7 +85,7 @@ const Image: FC = ({ previewUrl, loadImage = true, setLoadImage, src } if (error) { - return ; + return ; } return ; diff --git a/client/components/Message/Attachments/providers/AttachmentProvider.tsx b/client/components/Message/Attachments/providers/AttachmentProvider.tsx index 7132ad2960eb..eb28baff6c34 100644 --- a/client/components/Message/Attachments/providers/AttachmentProvider.tsx +++ b/client/components/Message/Attachments/providers/AttachmentProvider.tsx @@ -14,7 +14,7 @@ const AttachmentProvider: FC<{}> = ({ children }) => { const saveMobileBandwidth = !!useUserPreference('saveMobileBandwidth'); const contextValue: AttachmentContextValue = useMemo(() => ({ - getURL: getURL as (url: string) => string, + getURL: (url: string): string => getURL(url, { full: true }), collapsedByDefault, autoLoadEmbedMedias: !reducedData && autoLoadEmbedMedias && (!saveMobileBandwidth || !isMobile), dimensions: { diff --git a/client/components/Page.tsx b/client/components/Page.tsx index 660e9216459a..d79ddb6cd202 100644 --- a/client/components/Page.tsx +++ b/client/components/Page.tsx @@ -3,7 +3,7 @@ import { useMediaQuery } from '@rocket.chat/fuselage-hooks'; import React, { createContext, useContext, useState, FC, Dispatch, SetStateAction } from 'react'; import { useSidebar } from '../contexts/SidebarContext'; -import ScrollableContentWrapper from './ScrollableContentWrapper'; +import ScrollableContentWrapper, { CustomScrollbarsProps } from './ScrollableContentWrapper'; import BurgerMenuButton from './burger/BurgerMenuButton'; import { useSession } from '../contexts/SessionContext'; @@ -85,15 +85,15 @@ type PageScrollableContentProps = { onScrollContent?: ScrollableProps['onScrollContent']; }; -const PageScrollableContent: FC = React.forwardRef(({ onScrollContent, ...props }, ref) => - +const PageScrollableContent: FC = React.forwardRef(({ onScrollContent, ...props }, ref) => + ); const PageScrollableContentWithShadow: FC = ({ onScrollContent, ...props }) => { const [, setBorder] = useContext(PageContext); return { - setBorder(!top); + setBorder(!!top); onScrollContent && onScrollContent({ top, ...args }); }} { ...props } diff --git a/client/components/ScrollableContentWrapper.tsx b/client/components/ScrollableContentWrapper.tsx index 1720ce9862ae..da33c1ae9046 100644 --- a/client/components/ScrollableContentWrapper.tsx +++ b/client/components/ScrollableContentWrapper.tsx @@ -1,24 +1,55 @@ -import React, { CSSProperties, useMemo, memo, forwardRef } from 'react'; -import SimpleBar from 'simplebar-react'; -import 'simplebar/src/simplebar.css'; - -import { useDir } from '../hooks/useDir'; - +import React, { MutableRefObject, CSSProperties, useMemo, memo, forwardRef } from 'react'; +import { Scrollbars, ScrollValues } from 'rc-scrollbars'; const styleDefault = { - height: '100%', flexGrow: 1, overflowY: 'auto', willChange: 'transform', width: '100%', + width: '100%', + height: '100%', + flexGrow: 1, + willChange: 'transform', + overflowY: 'hidden', }; -type CustomScrollbarsProps = { - onScroll?: Function; +export type CustomScrollbarsProps = { style?: CSSProperties; children?: React.ReactNode; + onScroll?: (values: ScrollValues) => void; + renderView?: typeof Scrollbars.defaultProps.renderView; + renderTrackHorizontal?: typeof Scrollbars.defaultProps.renderTrackHorizontal; } -const ScrollableContentWrapper = forwardRef(({ onScroll, children, style }, ref) => { - const dir = useDir(); - const simpleBarStyle = useMemo(() => ({ ...style, ...styleDefault }), [style]) as CSSProperties; - return ; +const ScrollableContentWrapper = forwardRef(({ children, style, onScroll, renderView, renderTrackHorizontal }, ref) => { + const scrollbarsStyle = useMemo(() => ({ ...style, ...styleDefault }), [style]) as CSSProperties; + + return ( + + ) + } + children={children} + ref={ + (sRef): void => { + if (ref && sRef) { + if (typeof ref === 'function') { + ref(sRef.view ?? null); + return; + } + + (ref as MutableRefObject).current = sRef.view; + } + } + } + />; }); export default memo(ScrollableContentWrapper); diff --git a/client/components/UserCard.js b/client/components/UserCard.js index ca609bb6e0d3..81d7fa5abefe 100644 --- a/client/components/UserCard.js +++ b/client/components/UserCard.js @@ -78,10 +78,10 @@ const UserCard = forwardRef(({ {nickname && ({ nickname })} - { customStatus && {customStatus} } + { customStatus && {typeof customStatus === 'string' ? : customStatus} } {roles} {localTime} - { bio && } + { bio && {typeof bio === 'string' ? : bio} } {open && {t('See_full_profile')}} {onClose && } diff --git a/client/components/UserStatus.js b/client/components/UserStatus.js index 0cbe687a78af..8fcc400c8a45 100644 --- a/client/components/UserStatus.js +++ b/client/components/UserStatus.js @@ -1,9 +1,8 @@ -import React, { useEffect, useState } from 'react'; +import React from 'react'; import { StatusBullet } from '@rocket.chat/fuselage'; -import { useSafely } from '@rocket.chat/fuselage-hooks'; import { useTranslation } from '../contexts/TranslationContext'; -import { Presence } from '../lib/presence'; +import { usePresence } from '../hooks/usePresence'; export const UserStatus = React.memo(({ small, status, ...props }) => { const size = small ? 'small' : 'large'; @@ -34,20 +33,6 @@ export const colors = { offline: 'neutral-600', }; -export const usePresence = (uid, presence) => { - const [status, setStatus] = useSafely(useState(presence)); - useEffect(() => { - const handle = ({ status = 'loading' }) => { - setStatus(status); - }; - Presence.listen(uid, handle); - return () => { - Presence.stop(uid, handle); - }; - }, [setStatus, uid]); - - return status; -}; export const ReactiveUserStatus = React.memo(({ uid, presence, ...props }) => { const status = usePresence(uid, presence); diff --git a/client/components/withDoNotAskAgain.tsx b/client/components/withDoNotAskAgain.tsx new file mode 100644 index 000000000000..9ce4e1b23eec --- /dev/null +++ b/client/components/withDoNotAskAgain.tsx @@ -0,0 +1,66 @@ +import { Box, CheckBox } from '@rocket.chat/fuselage'; +import React, { useEffect, useState, FC, ReactElement, ComponentType } from 'react'; +// import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; + +import { useTranslation } from '../contexts/TranslationContext'; +import { useUserPreference } from '../contexts/UserContext'; +import { useMethod } from '../contexts/ServerContext'; + +type DontAskAgainList = Array<{ action: string; label: string }> +type DoNotAskAgainProps = { + confirm: (...args: any) => any; + dontAskAgain: { + action: string; + label: string; + }; +} + +export type RequiredModalProps = { + dontAskAgain?: ReactElement; + confirm?: DoNotAskAgainProps['confirm']; +} + +function withDoNotAskAgain(WrappedComponent: ComponentType): FC> { + return function({ confirm, dontAskAgain, ...props }): ReactElement { + const t = useTranslation(); + const dontAskAgainList = useUserPreference('dontAskAgainList'); + const { action, label } = dontAskAgain; + const shouldNotAskAgain = dontAskAgainList?.filter(({ action: currentAction }) => action === currentAction).length; + const saveFn = useMethod('saveUserPreferences'); + const [state, setState] = useState(false); + + useEffect(() => { + if (shouldNotAskAgain) { + confirm(); + } + }, [shouldNotAskAgain, confirm]); + + const handleConfirm = async (): Promise => { + try { + if (state) { + await saveFn({ dontAskAgainList: [...dontAskAgainList || [], { action, label }] }); + } + confirm(); + } catch (e) { + console.error(e); + } + }; + + const onChange = (): void => { + setState(!state); + }; + + return + + {t('Dont_ask_me_again')} + + } + confirm={handleConfirm} + />; + }; +} + +export { withDoNotAskAgain }; diff --git a/client/contexts/AuthorizationContext.ts b/client/contexts/AuthorizationContext.ts index 8429a08d7ef4..7abb4e44e44c 100644 --- a/client/contexts/AuthorizationContext.ts +++ b/client/contexts/AuthorizationContext.ts @@ -1,13 +1,15 @@ import { createContext, useContext, useMemo, useCallback } from 'react'; import { useSubscription, Subscription, Unsubscribe } from 'use-subscription'; -import { Emitter, Handler } from '@rocket.chat/emitter'; +import { Emitter } from '@rocket.chat/emitter'; import { IRole } from '../../definition/IUser'; type IRoles = { [_id: string]: IRole } -export class RoleStore extends Emitter { +export class RoleStore extends Emitter<{ + change: IRoles; +}> { roles: IRoles = {}; } @@ -91,7 +93,7 @@ export const useRolesDescription = (): (ids: Array) => [string] => { const subscription = useMemo( () => ({ getCurrentValue: (): IRoles => roleStore.roles, - subscribe: (callback: Handler): () => void => { + subscribe: (callback: () => void): () => void => { roleStore.on('change', callback); return (): void => { roleStore.off('change', callback); diff --git a/client/contexts/UserContext.ts b/client/contexts/UserContext.ts index c59596f9b530..5c7ef3548781 100644 --- a/client/contexts/UserContext.ts +++ b/client/contexts/UserContext.ts @@ -32,7 +32,7 @@ type UserContextValue = { loginWithPassword: (user: string | object, password: string) => Promise; queryPreference: (key: string | Mongo.ObjectID, defaultValue?: T) => Subscription; querySubscription: (query: FilterQuery, fields: Fields, sort?: Sort) => Subscription ; - queryRoom: (query: FilterQuery, fields: Fields, sort?: Sort) => Subscription ; + queryRoom: (query: FilterQuery, fields?: Fields, sort?: Sort) => Subscription ; querySubscriptions: (query: SubscriptionQuery, options?: FindOptions) => Subscription | []>; }; @@ -79,7 +79,7 @@ export const useUserSubscription = (rid: string, fields: Fields): ISubscription return useSubscription(subscription); }; -export const useUserRoom = (rid: string, fields: Fields): IRoom | undefined => { +export const useUserRoom = (rid: string, fields?: Fields): IRoom | undefined => { const { queryRoom } = useContext(UserContext); const subscription = useMemo(() => queryRoom({ _id: rid }, fields), [queryRoom, rid, fields]); return useSubscription(subscription); diff --git a/client/hooks/usePresence.ts b/client/hooks/usePresence.ts new file mode 100644 index 000000000000..1946684c9d54 --- /dev/null +++ b/client/hooks/usePresence.ts @@ -0,0 +1,14 @@ +import { useUserData } from './useUserData'; + +type Presence = 'online' | 'offline' | 'busy' | 'away' | 'loading'; + + +/** + * Hook to fetch and subscribe users presence + * + * @param uid - User Id + * @returns User Presence - 'online' | 'offline' | 'busy' | 'away' | 'loading' + * @public + */ + +export const usePresence = (uid: string, presence: Presence): Presence => useUserData(uid)?.status || presence; diff --git a/client/hooks/useRoomIcon.tsx b/client/hooks/useRoomIcon.tsx index f3ba9fa166c0..dd3df78be422 100644 --- a/client/hooks/useRoomIcon.tsx +++ b/client/hooks/useRoomIcon.tsx @@ -11,10 +11,14 @@ export const colors = { offline: 'neutral-600', }; -export const useRoomIcon = (room: IRoom): JSX.Element | { name: string; color?: string } | null => { +export const useRoomIcon = (room: IRoom, small = true): JSX.Element | { name: string; color?: string } | null => { + if (room.prid) { + return { name: 'baloons' }; + } + switch (room.t) { case 'p': - return { name: 'lock' }; + return { name: 'hashtag-lock' }; case 'c': return { name: 'hash' }; case 'l': @@ -22,10 +26,10 @@ export const useRoomIcon = (room: IRoom): JSX.Element | { name: string; color?: case 'd': const direct = room as unknown as IDirectMessageRoom; if (direct.uids && direct.uids.length > 2) { - return { name: 'team' }; + return { name: 'baloon-arrow-left' }; } if (direct.uids && direct.uids.length > 0) { - return uid !== room.u._id)[0] || room.u._id } as any } />; + return uid !== room.u._id)[0] || room.u._id } as any } />; } return { name: 'at' }; default: diff --git a/client/hooks/useUserData.ts b/client/hooks/useUserData.ts new file mode 100644 index 000000000000..47fbb8152f38 --- /dev/null +++ b/client/hooks/useUserData.ts @@ -0,0 +1,27 @@ +import { useMemo } from 'react'; +import { useSubscription } from 'use-subscription'; + +import { Presence, UserPresence } from '../lib/presence'; + + +/** + * Hook to fetch and subscribe users data + * + * @param uid - User Id + * @returns Users data: status, statusText, username, name + * @public + */ +export const useUserData = (uid: string): UserPresence | undefined => { + const subscription = useMemo(() => ({ + getCurrentValue: (): UserPresence | undefined => Presence.store.get(uid), + subscribe: (callback: any): any => { + Presence.listen(uid, callback); + return (): void => { + Presence.stop(uid, callback); + }; + }, + }), + [uid]); + + return useSubscription(subscription); +}; diff --git a/client/lib/banners.ts b/client/lib/banners.ts index 7595658025f4..906747682447 100644 --- a/client/lib/banners.ts +++ b/client/lib/banners.ts @@ -5,6 +5,7 @@ import { mountRoot } from '../reactAdapters'; import { UiKitBannerPayload } from '../../definition/UIKit'; export type LegacyBannerPayload = { + id: string; closable?: boolean; title?: string; text?: string; @@ -21,7 +22,10 @@ type BannerPayload = LegacyBannerPayload | UiKitBannerPayload; export const isLegacyPayload = (payload: BannerPayload): payload is LegacyBannerPayload => !('blocks' in payload); const queue: BannerPayload[] = []; -const emitter = new Emitter(); +const emitter = new Emitter<{ + update: undefined; + 'update-first': undefined; +}>(); export const firstSubscription: Subscription = { getCurrentValue: () => queue[0] ?? null, @@ -31,13 +35,14 @@ export const firstSubscription: Subscription = { export const open = (payload: BannerPayload): void => { mountRoot(); - let index = -1; + let index = queue.findIndex((_payload) => { + if (isLegacyPayload(_payload)) { + return _payload.id === (payload as LegacyBannerPayload).id; + } + return (_payload as UiKitBannerPayload).viewId === (payload as UiKitBannerPayload).viewId; + }); - if (!isLegacyPayload(payload)) { - index = queue.findIndex((_payload) => !isLegacyPayload(_payload) && _payload.viewId === payload.viewId); - } - - if (index < 0) { + if (index === -1) { index = queue.length; } @@ -51,15 +56,21 @@ export const open = (payload: BannerPayload): void => { }; -export const closeById = (viewId: string): void => { - const index = queue.findIndex((banner) => !isLegacyPayload(banner) && banner.viewId === viewId); +export const closeById = (id: string): void => { + const index = queue.findIndex((banner) => { + if (!isLegacyPayload(banner)) { + return banner.viewId === id; + } + return banner.id === id; + }); + if (index < 0) { return; } queue.splice(index, 1); emitter.emit('update'); - emitter.emit('update-first'); + index === 0 && emitter.emit('update-first'); }; export const close = (): void => { diff --git a/client/lib/createValueSubscription.ts b/client/lib/createValueSubscription.ts index b415b7f7c787..9702f748e93a 100644 --- a/client/lib/createValueSubscription.ts +++ b/client/lib/createValueSubscription.ts @@ -7,7 +7,9 @@ type ValueSubscription = Subscription & { export const createValueSubscription = (initialValue: T): ValueSubscription => { let value: T = initialValue; - const emitter = new Emitter(); + const emitter = new Emitter<{ + update: undefined; + }>(); return { getCurrentValue: (): T => value, diff --git a/client/lib/lists/FilesList.ts b/client/lib/lists/FilesList.ts new file mode 100644 index 000000000000..1e0cb830f328 --- /dev/null +++ b/client/lib/lists/FilesList.ts @@ -0,0 +1,42 @@ +import { MessageList } from './MessageList'; +import type { IMessage } from '../../../definition/IMessage'; + +type FilesMessage = Omit & Required>; + +export type FilesListOptions = { + rid: IMessage['rid']; + type: string; + text: string; +}; + +const isFileMessageInRoom = (message: IMessage, rid: IMessage['rid']): message is FilesMessage => + message.rid === rid && 'rid' in message; + +export class FilesList extends MessageList { + public constructor(private _options: FilesListOptions) { + super(); + } + + public get options(): FilesListOptions { + return this._options; + } + + public updateFilters(options: FilesListOptions): void { + this._options = options; + this.clear(); + } + + protected filter(message: IMessage): boolean { + const { rid } = this._options; + + if (!isFileMessageInRoom(message, rid)) { + return false; + } + + return true; + } + + protected compare(a: IMessage, b: IMessage): number { + return (b.tlm ?? b.ts).getTime() - (a.tlm ?? a.ts).getTime(); + } +} diff --git a/client/lib/presence.ts b/client/lib/presence.ts index 014b7a2a38fb..ec48f3f79b2a 100644 --- a/client/lib/presence.ts +++ b/client/lib/presence.ts @@ -1,23 +1,37 @@ -import { Emitter, EventType, Handler } from '@rocket.chat/emitter'; +import { Emitter, EventHandlerOf } from '@rocket.chat/emitter'; import { APIClient } from '../../app/utils/client'; import { IUser } from '../../definition/IUser'; +import { USER_STATUS } from '../../definition/UserStatus'; -const emitter = new Emitter(); -const statuses = new Map(); +type InternalEvents = { + remove: IUser['_id']; + reset: undefined; + restart: undefined; +}; + +type ExternalEvents = { + [key: string]: UserPresence | undefined; +}; + +type Events = InternalEvents & ExternalEvents; + +const emitter = new Emitter(); + +const store = new Map(); -type User = Pick; +export type UserPresence = Pick; type UsersPresencePayload = { - users: User[]; + users: UserPresence[]; full: boolean; }; -const isUid = (eventType: EventType): eventType is User['_id'] => +const isUid = (eventType: keyof Events): eventType is UserPresence['_id'] => Boolean(eventType) && typeof eventType === 'string' && !['reset', 'restart', 'remove'].includes(eventType); -const uids = new Set(); -const getPresence = ((): ((uid: User['_id']) => void) => { +const uids = new Set(); +const getPresence = ((): ((uid: UserPresence['_id']) => void) => { let timer: ReturnType; const fetch = (delay = 250): void => { @@ -33,14 +47,14 @@ const getPresence = ((): ((uid: User['_id']) => void) => { const { users } = await APIClient.v1.get('users.presence', params) as UsersPresencePayload; users.forEach((user) => { - if (!statuses.has(user._id)) { + if (!store.has(user._id)) { emitter.emit(user._id, user); } currentUids.delete(user._id); }); currentUids.forEach((uid) => { - emitter.emit(uid, { _id: uid, status: 'offline' }); + emitter.emit(uid, { _id: uid, status: USER_STATUS.OFFLINE }); }); currentUids.clear(); @@ -52,7 +66,7 @@ const getPresence = ((): ((uid: User['_id']) => void) => { }, delay); }; - const get = (uid: User['_id']): void => { + const get = (uid: UserPresence['_id']): void => { uids.add(uid); fetch(); }; @@ -62,11 +76,15 @@ const getPresence = ((): ((uid: User['_id']) => void) => { return; } - statuses.delete(uid); + store.delete(uid); }); emitter.on('reset', () => { - statuses.clear(); + store.clear(); + emitter.events() + .filter(isUid).forEach((uid) => { + emitter.emit(uid, undefined); + }); emitter.once('restart', () => { emitter.events() .filter(isUid) @@ -77,46 +95,43 @@ const getPresence = ((): ((uid: User['_id']) => void) => { return get; })(); -type PresenceUpdate = Partial>; - -const update: Handler = (update) => { +const update: EventHandlerOf = (update) => { if (update?._id) { - statuses.set(update._id, update.status); + store.set(update._id, update); uids.delete(update._id); } }; -const listen = (uid: User['_id'], handler: Handler): void => { - emitter.on(uid, handler); +const listen = (uid: UserPresence['_id'], handler: EventHandlerOf | (() => void)): void => { emitter.on(uid, update); - emitter.on('reset', handler); + emitter.on(uid, handler); - if (statuses.has(uid)) { - return handler({ status: statuses.get(uid) }); + const user = store.has(uid) && store.get(uid); + if (user) { + return handler(user); } getPresence(uid); }; -const stop = (uid: User['_id'], handler: Handler): void => { +const stop = (uid: UserPresence['_id'], handler: EventHandlerOf | (() => void)): void => { setTimeout(() => { emitter.off(uid, handler); emitter.off(uid, update); - emitter.off('reset', handler); emitter.emit('remove', uid); }, 5000); }; const reset = (): void => { - emitter.emit('reset', {}); - statuses.clear(); + emitter.emit('reset'); + store.clear(); }; const restart = (): void => { emitter.emit('restart'); }; -const notify = (update: PresenceUpdate): void => { +const notify = (update: UserPresence): void => { if (update._id) { emitter.emit(update._id, update); } @@ -126,10 +141,20 @@ const notify = (update: PresenceUpdate): void => { } }; +const get = async (uid: UserPresence['_id']): Promise => new Promise((resolve) => { + const callback: EventHandlerOf = (args): void => { + resolve(args); + stop(uid, callback); + }; + listen(uid, callback); +}); + export const Presence = { listen, stop, reset, restart, notify, + store, + get, }; diff --git a/client/sidebar/RoomList.js b/client/sidebar/RoomList.js index 9b4b3b945ef7..b8d5e28d25f7 100644 --- a/client/sidebar/RoomList.js +++ b/client/sidebar/RoomList.js @@ -1,12 +1,11 @@ import { Sidebar, Box, Badge } from '@rocket.chat/fuselage'; import { useResizeObserver } from '@rocket.chat/fuselage-hooks'; -import React, { useRef, useEffect } from 'react'; -import { VariableSizeList as List, areEqual } from 'react-window'; +import React, { forwardRef, useRef, useEffect } from 'react'; +import { Virtuoso } from 'react-virtuoso'; import memoize from 'memoize-one'; import { usePreventDefault } from './hooks/usePreventDefault'; import { filterMarkdown } from '../../app/markdown/lib/markdown'; -import { ReactiveUserStatus, colors } from '../components/UserStatus'; import { useTranslation } from '../contexts/TranslationContext'; import { roomTypes } from '../../app/utils'; import { useUserPreference, useUserId } from '../contexts/UserContext'; @@ -17,6 +16,7 @@ import { useTemplateByViewMode } from './hooks/useTemplateByViewMode'; import { useShortcutOpenMenu } from './hooks/useShortcutOpenMenu'; import { useAvatarTemplate } from './hooks/useAvatarTemplate'; import { useRoomList } from './hooks/useRoomList'; +import { useRoomIcon } from '../hooks/useRoomIcon'; import { useSidebarPaletteColor } from './hooks/useSidebarPaletteColor'; import { escapeHTML } from '../../lib/escapeHTML'; import ScrollableContentWrapper from '../components/ScrollableContentWrapper'; @@ -25,10 +25,6 @@ const sections = { Omnichannel, }; -const style = { - overflowY: 'scroll', -}; - export const itemSizeMap = (sidebarViewMode) => { switch (sidebarViewMode) { case 'extended': @@ -42,28 +38,14 @@ export const itemSizeMap = (sidebarViewMode) => { }; const SidebarIcon = ({ room, small }) => { - switch (room.t) { - case 'p': - case 'c': - return ; - case 'l': - return ; - case 'd': - if (room.uids && room.uids.length > 2) { - return ; - } - if (room.uids && room.uids.length > 0) { - // If the filter fn removes all ids, it's own direct message - return room.uids && room.uids.length && uid !== room.u._id)[0] || room.u._id} />; - } - return ; - default: - return null; - } + const icon = useRoomIcon(room, small); + + return + {!icon.name && icon} + ; }; -export const createItemData = memoize((items, extended, t, SideBarItemTemplate, AvatarTemplate, openedRoom, sidebarViewMode, isAnonymous) => ({ - items, +export const createItemData = memoize((extended, t, SideBarItemTemplate, AvatarTemplate, openedRoom, sidebarViewMode, isAnonymous) => ({ extended, t, SideBarItemTemplate, @@ -73,15 +55,15 @@ export const createItemData = memoize((items, extended, t, SideBarItemTemplate, isAnonymous, })); -export const Row = React.memo(({ data, index, style }) => { - const { extended, items, t, SideBarItemTemplate, AvatarTemplate, openedRoom, sidebarViewMode } = data; - const item = items[index]; +export const Row = React.memo(({ data, item }) => { + const { extended, t, SideBarItemTemplate, AvatarTemplate, openedRoom, sidebarViewMode } = data; + if (typeof item === 'string') { const Section = sections[item]; - return Section ? : {t(item)}; + return Section ? : {t(item)}; } - return ; -}, areEqual); + return ; +}); export const normalizeSidebarMessage = (message, t) => { if (message.msg) { @@ -103,10 +85,21 @@ export const normalizeSidebarMessage = (message, t) => { } }; +const ScrollerWithCustomProps = forwardRef((props, ref) => ( + + ) + } + renderTrackHorizontal={(props) => } +/>); + export default () => { useSidebarPaletteColor(); const listRef = useRef(); - const { ref, contentBoxSize: { blockSize = 750 } = {} } = useResizeObserver({ debounceDelay: 100 }); + const { ref } = useResizeObserver({ debounceDelay: 100 }); const openedRoom = useSession('openedRoom'); @@ -118,9 +111,8 @@ export default () => { const t = useTranslation(); - const itemSize = itemSizeMap(sidebarViewMode); const roomsList = useRoomList(); - const itemData = createItemData(roomsList, extended, t, sideBarItemTemplate, avatarTemplate, openedRoom, sidebarViewMode, isAnonymous); + const itemData = createItemData(extended, t, sideBarItemTemplate, avatarTemplate, openedRoom, sidebarViewMode, isAnonymous); usePreventDefault(ref); useShortcutOpenMenu(ref); @@ -130,19 +122,15 @@ export default () => { }, [sidebarViewMode]); return - (typeof roomsList[index] === 'string' ? (sections[roomsList[index]] && sections[roomsList[index]].size) || 40 : itemSize)} - itemData={itemData} - overscanCount={10} - width='100%' - ref={listRef} - style={style} - > - {Row} - + } + /> ; }; diff --git a/client/sidebar/RoomMenu.js b/client/sidebar/RoomMenu.js index 589f5ba62eba..602f814d5f21 100644 --- a/client/sidebar/RoomMenu.js +++ b/client/sidebar/RoomMenu.js @@ -13,6 +13,7 @@ import { useUserSubscription } from '../contexts/UserContext'; import { usePermission } from '../contexts/AuthorizationContext'; import { useSetModal } from '../contexts/ModalContext'; import WarningModal from '../views/admin/apps/WarningModal'; +import { DeleteWarningModalDoNotAskAgain } from '../components/DeleteWarningModal'; const fields = { f: 1, @@ -89,14 +90,18 @@ const RoomMenu = React.memo(({ rid, unread, threadUnread, alert, roomOpen, type, const warnText = roomTypes.getConfig(type).getUiText(UiTextContext.HIDE_WARNING); - setModal(); + dontAskAgain={{ + action: 'hideRoom', + label: t('Hide_room'), + }} + > + {t(warnText, name)} + ); }); const handleToggleRead = useMutableCallback(async () => { diff --git a/client/sidebar/header/CreateChannel.js b/client/sidebar/header/CreateChannel.js new file mode 100644 index 000000000000..c5515e10c478 --- /dev/null +++ b/client/sidebar/header/CreateChannel.js @@ -0,0 +1,257 @@ +import { FlowRouter } from 'meteor/kadira:flow-router'; +import React, { memo, useCallback, useEffect, useMemo, useState } from 'react'; +import { useMutableCallback, useDebouncedCallback } from '@rocket.chat/fuselage-hooks'; +import { Box, Modal, ButtonGroup, Button, TextInput, Icon, Field, ToggleSwitch } from '@rocket.chat/fuselage'; + +import { useTranslation } from '../../contexts/TranslationContext'; +import { useForm } from '../../hooks/useForm'; +import { useEndpointActionExperimental } from '../../hooks/useEndpointAction'; +import UserAutoCompleteMultiple from '../../../ee/client/audit/UserAutoCompleteMultiple'; +import { useSetting } from '../../contexts/SettingsContext'; +import { usePermission } from '../../contexts/AuthorizationContext'; +import { useMethod } from '../../contexts/ServerContext'; + +export const CreateChannel = ({ + values, + handlers, + hasUnsavedChanges, + onChangeUsers, + onChangeType, + onChangeBroadcast, + canOnlyCreateOneType, + e2eEnabledForPrivateByDefault, + onCreate, + onClose, +}) => { + const t = useTranslation(); + const e2eEnabled = useSetting('E2E_Enable'); + const namesValidation = useSetting('UTF8_Names_Validation'); + const allowSpecialNames = useSetting('UI_Allow_room_names_with_special_chars'); + const channelNameExists = useMethod('roomNameExists'); + const channelNameRegex = useMemo(() => { + if (allowSpecialNames) { + return ''; + } + const regex = new RegExp(`^${ namesValidation }$`); + + return regex; + }, [allowSpecialNames, namesValidation]); + + const [nameError, setNameError] = useState(); + + const checkName = useDebouncedCallback(async (name) => { + setNameError(false); + if (hasUnsavedChanges) { return; } + if (!name || name.length === 0) { return setNameError(t('Field_required')); } + if (!channelNameRegex.test(name)) { return setNameError(t('error-invalid-name')); } + const isNotAvailable = await channelNameExists(name); + if (isNotAvailable) { return setNameError(t('Channel_already_exist', name)); } + }, 100, [name]); + + useEffect(() => { + checkName(values.name); + }, [checkName, values.name]); + + const e2edisabled = useMemo(() => !values.type || values.broadcast || !e2eEnabled || e2eEnabledForPrivateByDefault, [e2eEnabled, e2eEnabledForPrivateByDefault, values.broadcast, values.type]); + + const canSave = useMemo(() => hasUnsavedChanges && !nameError, [hasUnsavedChanges, nameError]); + + return + + {t('Create_channel')} + + + + + {t('Name')} + + } placeholder={t('Channel_name')} onChange={handlers.handleName}/> + + {hasUnsavedChanges && nameError && + {nameError} + } + + + {t('Topic')} ({t('optional')}) + + + + + + + + {t('Private')} + {values.type ? t('Only_invited_users_can_acess_this_channel') : t('Everyone_can_access_this_channel')} + + + + + + + + {t('Read_only')} + {t('All_users_in_the_channel_can_write_new_messages')} + + + + + + + + {t('Encrypted')} + {values.type ? t('Encrypted_channel_Description') : t('Encrypted_not_available')} + + + + + + + + {t('Broadcast')} + {t('Broadcast_channel_Description')} + + + + + + {`${ t('Add_members') } (${ t('optional') })`} + + + + + + {t('Cancel')} + {t('Create')} + + + ; +}; + +export default memo(({ + onClose, +}) => { + const createChannel = useEndpointActionExperimental('POST', 'channels.create'); + const createPrivateChannel = useEndpointActionExperimental('POST', 'groups.create'); + const setChannelDescription = useEndpointActionExperimental('POST', 'channels.setDescription'); + const setPrivateChannelDescription = useEndpointActionExperimental('POST', 'groups.setDescription'); + const canCreateChannel = usePermission('create-c'); + const canCreatePrivateChannel = usePermission('create-p'); + const e2eEnabledForPrivateByDefault = useSetting('E2E_Enabled_Default_PrivateRooms'); + const canOnlyCreateOneType = useMemo(() => { + if (!canCreateChannel && canCreatePrivateChannel) { + return 'p'; + } + if (canCreateChannel && !canCreatePrivateChannel) { + return 'c'; + } + return false; + }, [canCreateChannel, canCreatePrivateChannel]); + + + const initialValues = { + users: [], + name: '', + description: '', + type: canOnlyCreateOneType ? canOnlyCreateOneType === 'p' : true, + readOnly: false, + encrypted: e2eEnabledForPrivateByDefault ?? false, + broadcast: false, + }; + const { values, handlers, hasUnsavedChanges } = useForm(initialValues); + + const { + users, + name, + description, + type, + readOnly, + broadcast, + encrypted, + } = values; + const { + handleUsers, + handleEncrypted, + handleType, + handleBroadcast, + handleReadOnly, + } = handlers; + + const onChangeUsers = useMutableCallback((value, action) => { + if (!action) { + if (users.includes(value)) { + return; + } + return handleUsers([...users, value]); + } + handleUsers(users.filter((current) => current !== value)); + }); + + const onChangeType = useMutableCallback((value) => { + handleEncrypted(!value); + return handleType(value); + }); + + const onChangeBroadcast = useMutableCallback((value) => { + handleEncrypted(!value); + handleReadOnly(value); + return handleBroadcast(value); + }); + + const onCreate = useCallback(async () => { + const goToRoom = (rid) => { + FlowRouter.goToRoomById(rid); + }; + + const params = { + name, + members: users, + readOnly, + extraData: { + broadcast, + encrypted, + }, + }; + let roomData; + + if (type) { + roomData = await createPrivateChannel(params); + goToRoom(roomData.group._id); + } else { + roomData = await createChannel(params); + goToRoom(roomData.channel._id); + } + + if (roomData.success && roomData.group && description) { + setPrivateChannelDescription({ description, roomName: roomData.group.name }); + } else if (roomData.success && roomData.channel && description) { + setChannelDescription({ description, roomName: roomData.channel.name }); + } + + onClose(); + }, [broadcast, + createChannel, + createPrivateChannel, + description, + encrypted, + name, + onClose, + readOnly, + setChannelDescription, + setPrivateChannelDescription, + type, + users, + ]); + + return ; +}); diff --git a/client/sidebar/header/UserDropdown.js b/client/sidebar/header/UserDropdown.js index 94a99cb0f9bf..617f97357383 100644 --- a/client/sidebar/header/UserDropdown.js +++ b/client/sidebar/header/UserDropdown.js @@ -14,6 +14,7 @@ import { useAtLeastOnePermission } from '../../contexts/AuthorizationContext'; import { userStatus } from '../../../app/user-status'; import { callbacks } from '../../../app/callbacks'; import { popover, AccountBox, modal, SideNav } from '../../../app/ui-utils'; +import MarkdownText from '../../components/MarkdownText'; const ADMIN_PERMISSIONS = [ 'view-logs', @@ -37,8 +38,8 @@ const style = { marginRight: '-16px', }; -const setStatus = (status, statusText) => { - AccountBox.setStatus(status, statusText); +const setStatus = (status) => { + AccountBox.setStatus(status); callbacks.run('userStatusManuallySet', status); }; @@ -113,7 +114,7 @@ const UserDropdown = ({ user, onClose }) => { - {statusText || t(status)} + @@ -121,14 +122,14 @@ const UserDropdown = ({ user, onClose }) => { {t('Status')} - {Object.keys(userStatus.list).map((key) => { + {Object.keys(userStatus.list).map((key, i) => { const status = userStatus.list[key]; const name = status.localizeName ? t(status.name) : status.name; const modifier = status.statusType || user.status; - return { setStatus(status.statusType, name); onClose(); }}> + return { setStatus(status.statusType); onClose(); }} key={i}> - {name} + {name} ; })} diff --git a/client/sidebar/header/actions/CreateRoom.js b/client/sidebar/header/actions/CreateRoom.js index 4e47e0d4058a..b07afa6b7b1c 100644 --- a/client/sidebar/header/actions/CreateRoom.js +++ b/client/sidebar/header/actions/CreateRoom.js @@ -6,6 +6,8 @@ import { popover, modal } from '../../../../app/ui-utils'; import { useAtLeastOnePermission, usePermission } from '../../../contexts/AuthorizationContext'; import { useSetting } from '../../../contexts/SettingsContext'; import { useTranslation } from '../../../contexts/TranslationContext'; +import { useSetModal } from '../../../contexts/ModalContext'; +import CreateChannel from '../CreateChannel'; const CREATE_ROOM_PERMISSIONS = ['create-c', 'create-p', 'create-d', 'start-discussion', 'start-discussion-other-user']; @@ -27,6 +29,18 @@ const openPopover = (e, items) => popover.open({ offsetVertical: e.currentTarget.clientHeight + 10, }); +const useReactModal = (setModal, Component) => useMutableCallback((e) => { + e.preventDefault(); + + const handleClose = () => { + setModal(null); + }; + + setModal(() => ); +}); + const useAction = (title, content) => useMutableCallback((e) => { e.preventDefault(); modal.open({ @@ -46,13 +60,15 @@ const useAction = (title, content) => useMutableCallback((e) => { const CreateRoom = (props) => { const t = useTranslation(); + const setModal = useSetModal(); + const showCreate = useAtLeastOnePermission(CREATE_ROOM_PERMISSIONS); const canCreateChannel = useAtLeastOnePermission(CREATE_CHANNEL_PERMISSIONS); const canCreateDirectMessages = usePermission('create-d'); const canCreateDiscussion = useAtLeastOnePermission(CREATE_DISCUSSION_PERMISSIONS); - const createChannel = useAction(t('Create_A_New_Channel'), 'createChannel'); + const createChannel = useReactModal(setModal, CreateChannel); const createDirectMessage = useAction(t('Direct_Messages'), 'CreateDirectMessage'); const createDiscussion = useAction(t('Discussion_title'), 'CreateDiscussion'); diff --git a/client/sidebar/header/index.js b/client/sidebar/header/index.js index 2d0d595680b7..d349e5e3e410 100644 --- a/client/sidebar/header/index.js +++ b/client/sidebar/header/index.js @@ -9,23 +9,25 @@ import CreateRoom from './actions/CreateRoom'; import Login from './actions/Login'; import UserAvatarButton from './UserAvatarButton'; import { useUser } from '../../contexts/UserContext'; +import { useTranslation } from '../../contexts/TranslationContext'; import { useSidebarPaletteColor } from '../hooks/useSidebarPaletteColor'; const HeaderWithData = () => { const user = useUser(); + const t = useTranslation(); useSidebarPaletteColor(); return <> - - + + {user && <> - - - + + + >} - {!user && } + {!user && } >; diff --git a/client/sidebar/search/SearchList.js b/client/sidebar/search/SearchList.js index 208e8bc56389..2d3d30b012f5 100644 --- a/client/sidebar/search/SearchList.js +++ b/client/sidebar/search/SearchList.js @@ -1,19 +1,18 @@ -import React, { useState, useMemo, useEffect, useRef } from 'react'; +import React, { forwardRef, useState, useMemo, useEffect, useRef } from 'react'; import { Meteor } from 'meteor/meteor'; import { Sidebar, TextInput, Box, Icon } from '@rocket.chat/fuselage'; -import { useMutableCallback, useDebouncedValue, useStableArray, useResizeObserver, useAutoFocus, useUniqueId } from '@rocket.chat/fuselage-hooks'; +import { useMutableCallback, useDebouncedValue, useStableArray, useAutoFocus, useUniqueId } from '@rocket.chat/fuselage-hooks'; import memoize from 'memoize-one'; import { css } from '@rocket.chat/css-in-js'; -import { FixedSizeList as List } from 'react-window'; +import { Virtuoso } from 'react-virtuoso'; import tinykeys from 'tinykeys'; import { ReactiveUserStatus } from '../../components/UserStatus'; import { useTranslation } from '../../contexts/TranslationContext'; -import { usePreventDefault } from '../hooks/usePreventDefault'; import { useSetting } from '../../contexts/SettingsContext'; import { roomTypes } from '../../../app/utils'; import { useUserPreference, useUserSubscriptions } from '../../contexts/UserContext'; -import { itemSizeMap, SideBarItemTemplateWithData } from '../RoomList'; +import { SideBarItemTemplateWithData } from '../RoomList'; import { useTemplateByViewMode } from '../hooks/useTemplateByViewMode'; import { useAvatarTemplate } from '../hooks/useAvatarTemplate'; import { escapeRegExp } from '../../../lib/escapeRegExp'; @@ -31,13 +30,13 @@ const createItemData = memoize((items, t, SideBarItemTemplate, AvatarTemplate, u sidebarViewMode, })); -const Row = React.memo(({ data, index, style }) => { - const { items, t, SideBarItemTemplate, AvatarTemplate, useRealName, extended } = data; - const item = items[index]; +const Row = React.memo(({ item, data }) => { + const { t, SideBarItemTemplate, AvatarTemplate, useRealName, extended } = data; + if (item.t === 'd' && !item.u) { - return ; + return ; } - return ; + return ; }); const UserItem = React.memo(({ item, id, style, t, SideBarItemTemplate, AvatarTemplate, useRealName, sidebarViewMode }) => { @@ -48,6 +47,7 @@ const UserItem = React.memo(({ item, id, style, t, SideBarItemTemplate, AvatarTe return { } }; +const ScrollerWithCustomProps = forwardRef((props, ref) => ( + + ) + } + renderTrackHorizontal={(props) => } +/>); + const SearchList = React.forwardRef(function SearchList({ onClose }, ref) { const listId = useUniqueId(); const t = useTranslation(); @@ -180,6 +191,7 @@ const SearchList = React.forwardRef(function SearchList({ onClose }, ref) { const autofocus = useAutoFocus(); const listRef = useRef(); + const boxRef = useRef(); const selectedElement = useRef(); const itemIndexRef = useRef(0); @@ -190,8 +202,6 @@ const SearchList = React.forwardRef(function SearchList({ onClose }, ref) { const sideBarItemTemplate = useTemplateByViewMode(); const avatarTemplate = useAvatarTemplate(); - const itemSize = itemSizeMap(sidebarViewMode); - const extended = sidebarViewMode === 'extended'; const filterText = useDebouncedValue(filter.value, 100); @@ -202,17 +212,13 @@ const SearchList = React.forwardRef(function SearchList({ onClose }, ref) { const itemData = createItemData(items, t, sideBarItemTemplate, avatarTemplate, showRealName, extended, sidebarViewMode); - const { ref: boxRef, contentBoxSize: { blockSize = 750 } = {} } = useResizeObserver({ debounceDelay: 100 }); - - usePreventDefault(boxRef); - const changeSelection = useMutableCallback((dir) => { let nextSelectedElement = null; if (dir === 'up') { - nextSelectedElement = selectedElement.current.previousSibling; + nextSelectedElement = selectedElement.current.parentElement.previousSibling.querySelector('a'); } else { - nextSelectedElement = selectedElement.current.nextSibling; + nextSelectedElement = selectedElement.current.parentElement.nextSibling.querySelector('a'); } if (nextSelectedElement) { @@ -224,13 +230,19 @@ const SearchList = React.forwardRef(function SearchList({ onClose }, ref) { const resetCursor = useMutableCallback(() => { itemIndexRef.current = 0; - listRef.current.scrollToItem(itemIndexRef.current); - selectedElement.current = boxRef.current.querySelector('a.rcx-sidebar-item'); + listRef.current.scrollToIndex({ index: itemIndexRef.current }); + + selectedElement.current = boxRef.current?.querySelector('a.rcx-sidebar-item'); + if (selectedElement.current) { toggleSelectionState(selectedElement.current, undefined, autofocus.current); } }); + useEffect(() => { + resetCursor(); + }); + useEffect(() => { resetCursor(); }, [filterText, resetCursor]); @@ -252,16 +264,16 @@ const SearchList = React.forwardRef(function SearchList({ onClose }, ref) { }, Tab: onClose, ArrowUp: () => { - itemIndexRef.current = Math.max(itemIndexRef.current - 1, 0); - listRef.current.scrollToItem(itemIndexRef.current); const currentElement = changeSelection('up'); + itemIndexRef.current = Math.max(itemIndexRef.current - 1, 0); + listRef.current.scrollToIndex({ index: itemIndexRef.current }); selectedElement.current = currentElement; }, ArrowDown: () => { const currentElement = changeSelection('down'); - selectedElement.current = currentElement; itemIndexRef.current = Math.min(itemIndexRef.current + 1, items?.length + 1); - listRef.current.scrollToItem(itemIndexRef.current); + listRef.current.scrollToIndex({ index: itemIndexRef.current }); + selectedElement.current = currentElement; }, Enter: () => { if (selectedElement.current) { @@ -272,26 +284,24 @@ const SearchList = React.forwardRef(function SearchList({ onClose }, ref) { return () => { unsubscribe(); }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [autofocus, changeSelection, items?.length, onClose, resetCursor, setFilterValue]); + }, [autofocus, changeSelection, items.length, onClose, resetCursor, setFilterValue]); return }/> - - + } ref={listRef} - > - {Row} - + /> ; }); diff --git a/client/startup/loginViaQuery.js b/client/startup/loginViaQuery.js index b6fe6dc84774..f4546bf9b5f7 100644 --- a/client/startup/loginViaQuery.js +++ b/client/startup/loginViaQuery.js @@ -2,9 +2,16 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; Meteor.startup(() => { - if (FlowRouter.getQueryParam('resumeToken')) { - Meteor.loginWithToken(FlowRouter.getQueryParam('resumeToken'), () => { - FlowRouter.go('/home'); - }); + const resumeToken = FlowRouter.getQueryParam('resumeToken'); + if (!resumeToken) { + return; } + + Meteor.loginWithToken(resumeToken, () => { + if (FlowRouter.getRouteName()) { + FlowRouter.setQueryParams({ resumeToken: null, userId: null }); + return; + } + FlowRouter.go('/home'); + }); }); diff --git a/client/startup/startup.js b/client/startup/startup.js index b2fd8bfcc6fb..802b9af9bd63 100644 --- a/client/startup/startup.js +++ b/client/startup/startup.js @@ -85,6 +85,7 @@ Meteor.startup(function() { const { connectToCloud = false, workspaceRegistered = false } = data; if (connectToCloud === true && workspaceRegistered !== true) { banners.open({ + id: 'cloud-registration', title: t('Cloud_registration_pending_title'), html: t('Cloud_registration_pending_html'), modifiers: ['large', 'danger'], diff --git a/client/startup/unread.js b/client/startup/unread.js index e8c473871f20..6072b23561ae 100644 --- a/client/startup/unread.js +++ b/client/startup/unread.js @@ -31,21 +31,22 @@ Meteor.startup(() => { let unreadAlert = false; - const unreadCount = fetchSubscriptions().reduce((ret, subscription) => { - const room = ChatRoom.findOne({ _id: subscription.rid }, { fields: { usersCount: 1 } }); - fireGlobalEvent('unread-changed-by-subscription', { ...subscription, usersCount: room && room.usersCount }); + const unreadCount = fetchSubscriptions().reduce((ret, subscription) => + Tracker.nonreactive(() => { + const room = ChatRoom.findOne({ _id: subscription.rid }, { fields: { usersCount: 1 } }); + fireGlobalEvent('unread-changed-by-subscription', { ...subscription, usersCount: room && room.usersCount }); - if (subscription.alert || subscription.unread > 0) { - // Increment the total unread count. - if (subscription.alert === true && subscription.unreadAlert !== 'nothing') { - if (subscription.unreadAlert === 'all' || userUnreadAlert !== false) { - unreadAlert = '•'; + if (subscription.alert || subscription.unread > 0) { + // Increment the total unread count. + if (subscription.alert === true && subscription.unreadAlert !== 'nothing') { + if (subscription.unreadAlert === 'all' || userUnreadAlert !== false) { + unreadAlert = '•'; + } } + return ret + subscription.unread; } - return ret + subscription.unread; - } - return ret; - }, 0); + return ret; + }), 0); menu.updateUnreadBars(); diff --git a/client/types/fuselage.d.ts b/client/types/fuselage.d.ts index 9265b0385189..ca7c6f6a28b7 100644 --- a/client/types/fuselage.d.ts +++ b/client/types/fuselage.d.ts @@ -151,7 +151,7 @@ declare module '@rocket.chat/fuselage' { elevation?: '0' | '1' | '2'; invisible?: boolean; - withRichContent?: boolean; + withRichContent?: boolean | string; withTruncatedText?: boolean; size?: CSSProperties['blockSize']; minSize?: CSSProperties['blockSize']; diff --git a/client/views/account/preferences/AccountPreferencesPage.js b/client/views/account/preferences/AccountPreferencesPage.js index 5c21a6d15de2..82161eceb1d5 100644 --- a/client/views/account/preferences/AccountPreferencesPage.js +++ b/client/views/account/preferences/AccountPreferencesPage.js @@ -45,7 +45,7 @@ const AccountPreferencesPage = () => { const handleSave = useCallback(async () => { try { const { current: data } = saveData; - if (data.highlights || data.hightlights === '') { + if (data.highlights || data.highlights === '') { Object.assign(data, { highlights: data.highlights.split(/,|\n/).map((val) => val.trim()).filter(Boolean) }); } diff --git a/client/views/account/tokens/AccountTokensTable.js b/client/views/account/tokens/AccountTokensTable.js index d7d6adb94443..c114ab495802 100644 --- a/client/views/account/tokens/AccountTokensTable.js +++ b/client/views/account/tokens/AccountTokensTable.js @@ -49,6 +49,8 @@ const AccountTokensTable = ({ data, reload }) => { const onRegenerate = useCallback((name) => { const onConfirm = async () => { try { + setModal(null); + const token = await regenerateToken({ tokenName: name }); setModal( { reload(); } catch (e) { + setModal(null); dispatchToastMessage({ type: 'error', message: e }); } }; diff --git a/client/views/account/tokens/AddToken.js b/client/views/account/tokens/AddToken.js index d9731e777ebe..6cfc06365508 100644 --- a/client/views/account/tokens/AddToken.js +++ b/client/views/account/tokens/AddToken.js @@ -55,7 +55,7 @@ const AddToken = ({ onDidAddToken, ...props }) => { - {t('Add')} + {t('Add')} diff --git a/client/views/admin/apps/AppSettings.js b/client/views/admin/apps/AppSettings.js index 7345abbfadd9..4c2614b6ad05 100644 --- a/client/views/admin/apps/AppSettings.js +++ b/client/views/admin/apps/AppSettings.js @@ -47,9 +47,10 @@ function AppSetting({ appSetting, onChange, value, ...props }) { i18nLabel, i18nDescription, values, + required, } = appSetting; - const label = (i18nLabel && tApp(i18nLabel)) || (id || tApp(id)); + const label = ((i18nLabel && tApp(i18nLabel)) + (required ? ' *' : '')) || (id || tApp(id)); const hint = useMemo(() => i18nDescription && , [i18nDescription, tApp]); return = ({ onNextButtonClick }) => { {t('Copy')} - + diff --git a/client/views/admin/import/ImportHistoryPage.js b/client/views/admin/import/ImportHistoryPage.js index f621489e73a1..841868f79fbe 100644 --- a/client/views/admin/import/ImportHistoryPage.js +++ b/client/views/admin/import/ImportHistoryPage.js @@ -21,6 +21,7 @@ function ImportHistoryPage() { const getCurrentImportOperation = useEndpoint('GET', 'getCurrentImportOperation'); const getLatestImportOperations = useEndpoint('GET', 'getLatestImportOperations'); const downloadPendingFiles = useEndpoint('POST', 'downloadPendingFiles'); + const downloadPendingAvatars = useEndpoint('POST', 'downloadPendingAvatars'); const newImportRoute = useRoute('admin-import-new'); const importProgressRoute = useRoute('admin-import-progress'); @@ -61,7 +62,27 @@ function ImportHistoryPage() { setLoading(true); const { count } = await downloadPendingFiles(); - if (count) { + if (!count) { + dispatchToastMessage({ type: 'info', message: t('No_files_left_to_download') }); + setLoading(false); + return; + } + + dispatchToastMessage({ type: 'info', message: t('File_Downloads_Started') }); + importProgressRoute.push(); + } catch (error) { + console.error(error); + dispatchToastMessage({ type: 'error', message: t('Failed_To_Download_Files') }); + setLoading(false); + } + }; + + const handleDownloadPendingAvatarsClick = async () => { + try { + setLoading(true); + const { count } = await downloadPendingAvatars(); + + if (!count) { dispatchToastMessage({ type: 'info', message: t('No_files_left_to_download') }); setLoading(false); return; @@ -84,6 +105,8 @@ function ImportHistoryPage() { {t('Import_New_File')} {hasAnySuccessfulSlackImport && {t('Download_Pending_Files')}} + {hasAnySuccessfulSlackImport + && {t('Download_Pending_Avatars')}} diff --git a/client/views/admin/integrations/IncomingWebhookForm.js b/client/views/admin/integrations/IncomingWebhookForm.js index 872b1b6e0055..d3f6763897a2 100644 --- a/client/views/admin/integrations/IncomingWebhookForm.js +++ b/client/views/admin/integrations/IncomingWebhookForm.js @@ -51,7 +51,7 @@ export default function IncomingWebhookForm({ formValues, formHandlers, extraDat const hilightedExampleJson = useHighlightedCode('json', JSON.stringify(exampleData, null, 2)); - return e.preventDefault(), [])} qa-admin-user-edit='form' { ...props }> + return e.preventDefault(), [])} qa-admin-user-edit='form' { ...props }> {useMemo(() => @@ -161,5 +161,5 @@ export default function IncomingWebhookForm({ formValues, formHandlers, extraDat { append } - ; + ; } diff --git a/client/views/admin/integrations/OutgoiongWebhookForm.js b/client/views/admin/integrations/OutgoiongWebhookForm.js index 94df5d9fe9f0..c0a48d8f8b9b 100644 --- a/client/views/admin/integrations/OutgoiongWebhookForm.js +++ b/client/views/admin/integrations/OutgoiongWebhookForm.js @@ -94,7 +94,7 @@ export default function OutgoingWebhookForm({ formValues, formHandlers, append, const hilightedExampleJson = useHighlightedCode('json', JSON.stringify(exampleData, null, 2)); - return e.preventDefault(), [])} qa-admin-user-edit='form' { ...props }> + return e.preventDefault(), [])} qa-admin-user-edit='form' { ...props }> @@ -259,5 +259,5 @@ export default function OutgoingWebhookForm({ formValues, formHandlers, append, { append } - ; + ; } diff --git a/client/views/admin/integrations/edit/EditIntegrationsPage.js b/client/views/admin/integrations/edit/EditIntegrationsPage.js index 3d1ee55629c4..1ac885f2c79d 100644 --- a/client/views/admin/integrations/edit/EditIntegrationsPage.js +++ b/client/views/admin/integrations/edit/EditIntegrationsPage.js @@ -32,11 +32,9 @@ export default function EditIntegrationsPage({ ...props }) { {type === 'outgoing' && {t('History')}} - - { - (type === 'outgoing' && ) - || (type === 'incoming' && ) - } - + { + (type === 'outgoing' && ) + || (type === 'incoming' && ) + } ; } diff --git a/client/views/admin/integrations/new/NewIntegrationsPage.js b/client/views/admin/integrations/new/NewIntegrationsPage.js index d530118925d0..13739acb7066 100644 --- a/client/views/admin/integrations/new/NewIntegrationsPage.js +++ b/client/views/admin/integrations/new/NewIntegrationsPage.js @@ -45,11 +45,9 @@ export default function NewIntegrationsPage({ ...props }) { {t('Outgoing')} - - { - (tab === 'incoming' && ) - || (tab === 'outgoing' && ) - } - + { + (tab === 'incoming' && ) + || (tab === 'outgoing' && ) + } ; } diff --git a/client/views/admin/permissions/PermissionsRouter.js b/client/views/admin/permissions/PermissionsRouter.js index cdc8990747ad..a0ed232da32d 100644 --- a/client/views/admin/permissions/PermissionsRouter.js +++ b/client/views/admin/permissions/PermissionsRouter.js @@ -3,9 +3,18 @@ import React from 'react'; import { useRouteParameter } from '../../../contexts/RouterContext'; import UsersInRole from './UsersInRole'; import PermissionsTable from './PermissionsTable'; +import { usePermission } from '../../../contexts/AuthorizationContext'; +import NotAuthorizedPage from '../../../components/NotAuthorizedPage'; const PermissionsRouter = () => { + const canViewPermission = usePermission('access-permissions'); + const canViewSettingPermission = usePermission('access-setting-permissions'); const context = useRouteParameter('context'); + + if (!canViewPermission && !canViewSettingPermission) { + return ; + } + if (context === 'users-in-role') { return ; } diff --git a/client/views/admin/permissions/PermissionsTable.js b/client/views/admin/permissions/PermissionsTable.js index 4d089cba6d15..27e1349ec0b4 100644 --- a/client/views/admin/permissions/PermissionsTable.js +++ b/client/views/admin/permissions/PermissionsTable.js @@ -14,6 +14,7 @@ import { useRoute } from '../../../contexts/RouterContext'; import { ChatPermissions } from '../../../../app/authorization/client/lib/ChatPermissions'; import { CONSTANTS, AuthorizationUtils } from '../../../../app/authorization/lib'; import { Roles } from '../../../../app/models/client'; +import { usePermission } from '../../../contexts/AuthorizationContext'; const useChangeRole = ({ onGrant, onRemove, permissionId }) => { const dispatchToastMessage = useToastMessageDispatch(); @@ -183,7 +184,10 @@ const FilterComponent = ({ onChange }) => { const PermissionsTable = () => { const t = useTranslation(); const [filter, setFilter] = useState(''); - const [type, setType] = useState('permissions'); + const canViewPermission = usePermission('access-permissions'); + const canViewSettingPermission = usePermission('access-setting-permissions'); + const defaultType = canViewPermission ? 'permissions' : 'settings'; + const [type, setType] = useState(defaultType); const [params, setParams] = useState({ limit: 25, skip: 0 }); const router = useRoute('admin-permissions'); @@ -228,10 +232,10 @@ const PermissionsTable = () => { - + {t('Permissions')} - + {t('Settings')} diff --git a/client/views/admin/settings/inputs/AssetSettingInput.js b/client/views/admin/settings/inputs/AssetSettingInput.js index 24ca1d146d19..4e72cab16db4 100644 --- a/client/views/admin/settings/inputs/AssetSettingInput.js +++ b/client/views/admin/settings/inputs/AssetSettingInput.js @@ -61,7 +61,7 @@ export function AssetSettingInput({ {value.url ? - : } + : } {value.url ? diff --git a/client/views/admin/users/AddUser.js b/client/views/admin/users/AddUser.js index d0299b11f41e..4ac0662b3dde 100644 --- a/client/views/admin/users/AddUser.js +++ b/client/views/admin/users/AddUser.js @@ -1,5 +1,6 @@ -import React, { useMemo, useCallback } from 'react'; +import React, { useMemo, useCallback, useState } from 'react'; import { Field, Box, Button } from '@rocket.chat/fuselage'; +import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import { useTranslation } from '../../../contexts/TranslationContext'; import { useEndpointData } from '../../../hooks/useEndpointData'; @@ -15,6 +16,18 @@ export function AddUser({ roles, ...props }) { const router = useRoute('admin-users'); const { value: roleData } = useEndpointData('roles.list', ''); + const [errors, setErrors] = useState({}); + + const validationKeys = { + name: (name) => setErrors((errors) => ({ ...errors, name: !name.trim().length ? t('The_field_is_required', t('name')) : undefined })), + username: (username) => setErrors((errors) => ({ ...errors, username: !username.trim().length ? t('The_field_is_required', t('username')) : undefined })), + email: (email) => setErrors((errors) => ({ ...errors, email: !email.trim().length ? t('The_field_is_required', t('email')) : undefined })), + password: (password) => setErrors((errors) => ({ ...errors, password: !password.trim().length ? t('The_field_is_required', t('password')) : undefined })), + }; + + const validateForm = ({ key, value }) => { + validationKeys[key] && validationKeys[key](value); + }; const { values, @@ -36,21 +49,30 @@ export function AddUser({ roles, ...props }) { sendWelcomeEmail: true, joinDefaultChannels: true, customFields: {}, - }); + }, validateForm); const goToUser = useCallback((id) => router.push({ context: 'info', id, }), [router]); - const saveAction = useEndpointAction('POST', 'users.create', values, t('User_created_successfully')); + const saveAction = useEndpointAction('POST', 'users.create', values, t('User_created_successfully!')); + + const handleSave = useMutableCallback(async () => { + Object.entries(values).forEach(([key, value]) => { + validateForm({ key, value }); + }); + + const { name, username, password, email } = values; + if (name === '' || username === '' || password === '' || email === '') { + return false; + } - const handleSave = useCallback(async () => { const result = await saveAction(); if (result.success) { goToUser(result.user._id); } - }, [goToUser, saveAction]); + }); const availableRoles = useMemo(() => roleData?.roles?.map(({ _id, description }) => [_id, description || _id]) ?? [], [roleData]); @@ -63,5 +85,5 @@ export function AddUser({ roles, ...props }) { , [hasUnsavedChanges, reset, t, handleSave]); - return ; + return ; } diff --git a/client/views/admin/users/EditUser.js b/client/views/admin/users/EditUser.js index 5d97ec5ad51c..c4da7d9001c2 100644 --- a/client/views/admin/users/EditUser.js +++ b/client/views/admin/users/EditUser.js @@ -1,5 +1,6 @@ import React, { useMemo, useState, useCallback } from 'react'; import { Box, Field, Margins, Button, Callout } from '@rocket.chat/fuselage'; +import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import { useTranslation } from '../../../contexts/TranslationContext'; import { useEndpointAction } from '../../../hooks/useEndpointAction'; @@ -18,7 +19,7 @@ export function EditUserWithData({ uid, ...props }) { const { value: data, phase: state, error } = useEndpointData('users.info', useMemo(() => ({ userId: uid }), [uid])); if ([state, roleState].includes(AsyncStatePhase.LOADING)) { - return ; + return ; } if (error || roleError) { @@ -48,8 +49,19 @@ export function EditUser({ data, roles, ...props }) { const t = useTranslation(); const [avatarObj, setAvatarObj] = useState(); + const [errors, setErrors] = useState({}); - const { values, handlers, reset, hasUnsavedChanges } = useForm(getInitialValue(data)); + const validationKeys = { + name: (name) => setErrors((errors) => ({ ...errors, name: !name.trim().length ? t('The_field_is_required', t('name')) : undefined })), + username: (username) => setErrors((errors) => ({ ...errors, username: !username.trim().length ? t('The_field_is_required', t('username')) : undefined })), + email: (email) => setErrors((errors) => ({ ...errors, email: !email.trim().length ? t('The_field_is_required', t('email')) : undefined })), + }; + + const validateForm = ({ key, value }) => { + validationKeys[key] && validationKeys[key](value); + }; + + const { values, handlers, reset, hasUnsavedChanges } = useForm(getInitialValue(data), validateForm); const router = useRoute('admin-users'); @@ -88,7 +100,16 @@ export function EditUser({ data, roles, ...props }) { return saveAvatarAction(avatarObj); }, [avatarObj, resetAvatarAction, saveAvatarAction, saveAvatarUrlAction, data._id]); - const handleSave = useCallback(async () => { + const handleSave = useMutableCallback(async () => { + Object.entries(values).forEach(([key, value]) => { + validationKeys[key] && validationKeys[key](value); + }); + + const { name, username, email } = values; + if (name === '' || username === '' || email === '') { + return false; + } + const result = await saveAction(); if (result.success) { if (avatarObj) { @@ -96,7 +117,7 @@ export function EditUser({ data, roles, ...props }) { } goToUser(data._id); } - }, [avatarObj, data._id, goToUser, saveAction, updateAvatar]); + }, [avatarObj, data._id, goToUser, saveAction, updateAvatar, values, errors, validationKeys]); const availableRoles = roles.map(({ _id, description }) => [_id, description || _id]); @@ -109,11 +130,11 @@ export function EditUser({ data, roles, ...props }) { {t('Reset')} - {t('Save')} + {t('Save')} - , [handleSave, canSaveOrReset, reset, t, values]); + , [handleSave, canSaveOrReset, reset, t]); - return ; + return ; } diff --git a/client/views/admin/users/InviteUsers.js b/client/views/admin/users/InviteUsers.js index 351a11cfa001..335db31cf9da 100644 --- a/client/views/admin/users/InviteUsers.js +++ b/client/views/admin/users/InviteUsers.js @@ -13,21 +13,19 @@ export function InviteUsers({ data, ...props }) { const [text, setText] = useState(''); const sendInvites = useMethod('sendInvitationEmail'); const getEmails = useCallback((text) => text.split(/[\ ,;]+/i).filter((val) => isEmail(val)), []); - const handleClick = () => { - sendInvites(getEmails(text), (error, result) => { - if (result) { - return dispatchToastMessage({ type: 'success', message: t('Emails_sent_successfully!') }); - } - if (error) { - return dispatchToastMessage({ type: 'error', message: error }); - } - }); + const handleClick = async () => { + try { + await sendInvites(getEmails(text)); + dispatchToastMessage({ type: 'success', message: t('Emails_sent_successfully!') }); + } catch (error) { + dispatchToastMessage({ type: 'error', message: error.message }); + } }; return {t('Send_invitation_email')} {t('Send_invitation_email_info')} setText(e.currentTarget.value)}/> - + {t('Send')} diff --git a/client/views/admin/users/UserForm.js b/client/views/admin/users/UserForm.js index 2bbb32a3e7e8..a065c6fc5083 100644 --- a/client/views/admin/users/UserForm.js +++ b/client/views/admin/users/UserForm.js @@ -6,7 +6,7 @@ import { isEmail } from '../../../../app/utils/lib/isEmail.js'; import VerticalBar from '../../../components/VerticalBar'; import CustomFieldsForm from '../../../components/CustomFieldsForm'; -export default function UserForm({ formValues, formHandlers, availableRoles, append, prepend, ...props }) { +export default function UserForm({ formValues, formHandlers, availableRoles, append, prepend, errors, ...props }) { const t = useTranslation(); const [hasCustomFields, setHasCustomFields] = useState(false); @@ -52,26 +52,35 @@ export default function UserForm({ formValues, formHandlers, availableRoles, app {useMemo(() => {t('Name')} - + - , [t, name, handleName])} + {errors && errors.name && + {errors.name} + } + , [t, name, handleName, errors])} {useMemo(() => {t('Username')} - }/> + }/> - , [t, username, handleUsername])} + {errors && errors.username && + {errors.username} + } + , [t, username, handleUsername, errors])} {useMemo(() => {t('Email')} - 0 ? 'error' : undefined} onChange={handleEmail} addon={}/> + 0 ? 'error' : undefined} onChange={handleEmail} addon={}/> + {errors && errors.email && + {errors.email} + } {t('Verified')} - , [t, email, handleEmail, verified, handleVerified])} + , [t, email, handleEmail, verified, handleVerified, errors])} {useMemo(() => {t('StatusMessage')} @@ -93,9 +102,12 @@ export default function UserForm({ formValues, formHandlers, availableRoles, app {useMemo(() => {t('Password')} - }/> + }/> - , [t, password, handlePassword])} + {errors && errors.password && + {errors.password} + } + , [t, password, handlePassword, errors])} {useMemo(() => diff --git a/client/views/admin/users/UserInfo.js b/client/views/admin/users/UserInfo.js index 137c45e30065..5cda5b92be36 100644 --- a/client/views/admin/users/UserInfo.js +++ b/client/views/admin/users/UserInfo.js @@ -1,4 +1,3 @@ - import React, { useMemo } from 'react'; import { Box } from '@rocket.chat/fuselage'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; @@ -59,7 +58,7 @@ export function UserInfoWithData({ uid, username, ...props }) { }, [approveManuallyUsers, data, showRealNames]); if (state === AsyncStatePhase.LOADING) { - return ; + return ; } if (error) { diff --git a/client/views/blocks/ModalBlock.js b/client/views/blocks/ModalBlock.js index 7b8df3902d6d..638bfff35f2f 100644 --- a/client/views/blocks/ModalBlock.js +++ b/client/views/blocks/ModalBlock.js @@ -2,7 +2,6 @@ import { UIKitIncomingInteractionContainerType } from '@rocket.chat/apps-engine/ import { Modal, AnimatedVisibility, ButtonGroup, Button, Box } from '@rocket.chat/fuselage'; import { useMutableCallback, useUniqueId } from '@rocket.chat/fuselage-hooks'; import { kitContext, UiKitComponent, UiKitModal, modalParser } from '@rocket.chat/fuselage-ui-kit'; -import { uiKitText } from '@rocket.chat/ui-kit'; import React, { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react'; import { renderMessageBody } from '../../lib/renderMessageBody'; @@ -10,18 +9,10 @@ import { getURL } from '../../../app/utils/lib/getURL'; import * as ActionManager from '../../../app/ui-message/client/ActionManager'; // TODO: move this to fuselage-ui-kit itself -modalParser.text = ({ text, type } = {}) => { - if (type !== 'mrkdwn') { - return text; - } +modalParser.plainText = ({ text } = {}) => text; - return ; -}; - -const textParser = uiKitText({ - plain_text: ({ text }) => text, - text: ({ text }) => text, -}); +// TODO: move this to fuselage-ui-kit itself +modalParser.mrkdwn = ({ text }) => ; const focusableElementsString = ` a[href]:not([tabindex="-1"]), @@ -150,7 +141,7 @@ export function ModalBlock({ {view.showIcon ? : null} - {textParser([view.title])} + {modalParser.text(view.title)} @@ -165,8 +156,8 @@ export function ModalBlock({ - {view.close && {textParser([view.close.text])}} - {view.submit && {textParser([view.submit.text])}} + {view.close && {modalParser.text(view.close.text)}} + {view.submit && {modalParser.text(view.submit.text)}} diff --git a/client/views/directory/ChannelsTab.js b/client/views/directory/ChannelsTab.js index 07ed3e447865..053c5d109e02 100644 --- a/client/views/directory/ChannelsTab.js +++ b/client/views/directory/ChannelsTab.js @@ -78,7 +78,7 @@ function ChannelsTable() { {fname || name} - {topic && } + {topic && } diff --git a/client/views/omnichannel/currentChats/CurrentChatsRoute.js b/client/views/omnichannel/currentChats/CurrentChatsRoute.js index 72c112641372..d8612fe1f496 100644 --- a/client/views/omnichannel/currentChats/CurrentChatsRoute.js +++ b/client/views/omnichannel/currentChats/CurrentChatsRoute.js @@ -68,8 +68,11 @@ const useQuery = ({ guest, servedBy, department, status, from, to, tags, customF ...current && { offset: current }, }; - if (from && to) { - query.createdAt = JSON.stringify({ start: from, end: to }); + if (from || to) { + query.createdAt = JSON.stringify({ + ...from && { start: moment(new Date(from)).set({ hour: '00', minutes: '00', seconds: '00' }).format('YYYY-MM-DDTHH:mm:ss') }, + ...to && { end: moment(new Date(to)).set({ hour: '23', minutes: '59', seconds: '59' }).format('YYYY-MM-DDTHH:mm:ss') }, + }); } if (status !== 'all') { query.open = status === 'opened'; diff --git a/client/views/omnichannel/departments/DepartmentEdit.js b/client/views/omnichannel/departments/DepartmentEdit.js index deea928d8805..33a1220ac4c5 100644 --- a/client/views/omnichannel/departments/DepartmentEdit.js +++ b/client/views/omnichannel/departments/DepartmentEdit.js @@ -347,7 +347,7 @@ export function EditDepartment({ data, id, title, reload }) { {t('Agents')}: - + diff --git a/client/views/omnichannel/triggers/NewTriggerPage.js b/client/views/omnichannel/triggers/NewTriggerPage.js index ffda2811b402..0f361a08b1bf 100644 --- a/client/views/omnichannel/triggers/NewTriggerPage.js +++ b/client/views/omnichannel/triggers/NewTriggerPage.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useMemo } from 'react'; import { Button, FieldGroup, Box, Margins } from '@rocket.chat/fuselage'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; @@ -59,7 +59,9 @@ const NewTriggerPage = ({ onSave }) => { } }); - const { name } = values; + const { name, actions: { params: { msg } } } = values; + + const canSave = useMemo(() => name && msg, [name, msg]); return <> @@ -67,7 +69,7 @@ const NewTriggerPage = ({ onSave }) => { - + {t('Save')} diff --git a/client/views/omnichannel/triggers/TriggersForm.tsx b/client/views/omnichannel/triggers/TriggersForm.tsx index 0623b2d1cffd..59f3f6477073 100644 --- a/client/views/omnichannel/triggers/TriggersForm.tsx +++ b/client/views/omnichannel/triggers/TriggersForm.tsx @@ -43,6 +43,7 @@ type TriggersFormProps = { const TriggersForm: FC = ({ values, handlers, className }) => { const [nameError, setNameError] = useState(''); + const [msgError, setMsgError] = useState(''); const t = useTranslation(); const { name, @@ -129,8 +130,11 @@ const TriggersForm: FC = ({ values, handlers, className }) => }); }); useComponentDidUpdate(() => { - setNameError(!name ? t('The_field_is_required', 'name') : ''); + setNameError(!name ? t('The_field_is_required', t('Name')) : ''); }, [t, name]); + useComponentDidUpdate(() => { + setMsgError(!actionMsg ? t('The_field_is_required', t('Message')) : ''); + }, [t, actionMsg]); return <> @@ -153,6 +157,9 @@ const TriggersForm: FC = ({ values, handlers, className }) => + + {nameError} + {t('Description')} @@ -181,8 +188,11 @@ const TriggersForm: FC = ({ values, handlers, className }) => } - + + + {msgError} + >; }; diff --git a/client/views/omnichannel/triggers/TriggersPage.js b/client/views/omnichannel/triggers/TriggersPage.js index 4227d8ba7409..5613b1c0ba7c 100644 --- a/client/views/omnichannel/triggers/TriggersPage.js +++ b/client/views/omnichannel/triggers/TriggersPage.js @@ -43,9 +43,9 @@ const MonitorsPage = () => { {t('New')} - + - + {context && diff --git a/client/views/room/Announcement/Announcement.js b/client/views/room/Announcement/Announcement.js deleted file mode 100644 index d97966e0703f..000000000000 --- a/client/views/room/Announcement/Announcement.js +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import { Box } from '@rocket.chat/fuselage'; -import { css } from '@rocket.chat/css-in-js'; -import colors from '@rocket.chat/fuselage-tokens/colors'; -import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; - -import AnnouncementModal from './AnnouncementModal'; -import { useSetModal } from '../../../contexts/ModalContext'; -import MarkdownText from '../../../components/MarkdownText'; - -export const Announcement = ({ children, onClickOpen }) => { - const announcementBar = css` - background-color: ${ colors.b200 }; - color: ${ colors.b600 }; - cursor: pointer; - transition: transform 0.2s ease-out; - a{ - color: ${ colors.b600 } !important; - text-decoration: underline !important; - } - > * { - flex: auto; - } - &:hover, - &:focus { - background-color: ${ colors.b300 }; - color: ${ colors.b800 }; - }`; - - return {children}; -}; - -export default ({ announcement, announcementDetails }) => { - const setModal = useSetModal(); - const closeModal = useMutableCallback(() => setModal()); - const handleClick = (e) => { - if (e.target.href) { - return; - } - - if (window.getSelection().toString() !== '') { - return; - } - - announcementDetails ? announcementDetails() : setModal({announcement}); - }; - - return announcement ? : false; -}; diff --git a/client/views/room/Announcement/Announcement.tsx b/client/views/room/Announcement/Announcement.tsx new file mode 100644 index 000000000000..7d9ad98cac76 --- /dev/null +++ b/client/views/room/Announcement/Announcement.tsx @@ -0,0 +1,66 @@ +import React, { FC } from 'react'; +import { Box } from '@rocket.chat/fuselage'; +import { css } from '@rocket.chat/css-in-js'; +import colors from '@rocket.chat/fuselage-tokens/colors'; +import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; + +import AnnouncementModal from './AnnouncementModal'; +import { useSetModal } from '../../../contexts/ModalContext'; +import MarkdownText from '../../../components/MarkdownText'; + +type AnnouncementComponentParams = { + children: JSX.Element; + onClickOpen: (e: React.MouseEvent) => void; +}; + +type AnnouncementParams = { + announcement: string; + announcementDetails: () => void; +} + +export const AnnouncementComponent: FC = ({ children, onClickOpen }) => { + const announcementBar = css` + background-color: ${ colors.b200 }; + background-color: var(--rc-color-announcement-background, ${ colors.b200 }); + color: ${ colors.b600 }; + color: var(--rc-color-announcement-text, ${ colors.b600 }); + cursor: pointer; + transition: transform 0.2s ease-out; + a{ + color: ${ colors.b600 } !important; + color: var(--rc-color-announcement-text, ${ colors.b600 }) !important; + text-decoration: underline !important; + } + > * { + flex: auto; + } + &:hover, + &:focus { + background-color: ${ colors.b300 }; + background-color: var(--rc-color-announcement-background-hover, ${ colors.b300 }); + color: ${ colors.b800 }; + color: var(--rc-color-announcement-text-hover, ${ colors.b800 }); + }`; + + return {children}; +}; + +const Announcement: FC = ({ announcement, announcementDetails }) => { + const setModal = useSetModal(); + const closeModal = useMutableCallback(() => setModal(null)); + const handleClick = (e: React.MouseEvent): void => { + if ((e.target as HTMLAnchorElement).href) { + return; + } + + if (window?.getSelection()?.toString() !== '') { + return; + } + + announcementDetails ? announcementDetails() : setModal({announcement}); + }; + + return announcement ? ): void => handleClick(e)}> : null; +}; + +export default Announcement; diff --git a/client/views/room/Announcement/AnnouncementModal.js b/client/views/room/Announcement/AnnouncementModal.tsx similarity index 69% rename from client/views/room/Announcement/AnnouncementModal.js rename to client/views/room/Announcement/AnnouncementModal.tsx index 596d28804a3e..98b3a8896d6d 100644 --- a/client/views/room/Announcement/AnnouncementModal.js +++ b/client/views/room/Announcement/AnnouncementModal.tsx @@ -1,10 +1,16 @@ -import React from 'react'; +import React, { FC } from 'react'; import { Button, ButtonGroup, Box, Modal } from '@rocket.chat/fuselage'; import { useTranslation } from '../../../contexts/TranslationContext'; import MarkdownText from '../../../components/MarkdownText'; -export default ({ +type AnnouncementModalParams = { + onClose: () => void; + confirmLabel?: string; + children?: string; +} + +const AnnouncementModal: FC = ({ onClose, confirmLabel = 'Close', children, @@ -19,7 +25,7 @@ export default ({ - + @@ -29,3 +35,5 @@ export default ({ ); }; + +export default AnnouncementModal; diff --git a/client/views/room/Announcement/index.js b/client/views/room/Announcement/index.tsx similarity index 100% rename from client/views/room/Announcement/index.js rename to client/views/room/Announcement/index.tsx diff --git a/client/views/room/Header/Header.js b/client/views/room/Header/Header.js index b15549628901..f10b67b9fdea 100644 --- a/client/views/room/Header/Header.js +++ b/client/views/room/Header/Header.js @@ -1,9 +1,7 @@ import React from 'react'; -import { FlowRouter } from 'meteor/kadira:flow-router'; -import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; -import { ActionButton } from '@rocket.chat/fuselage'; import Header from '../../../components/Header'; +import Breadcrumbs from '../../../components/Breadcrumbs'; import { useRoomIcon } from '../../../hooks/useRoomIcon'; import Encrypted from './icons/Encrypted'; import Favorite from './icons/Favorite'; @@ -12,46 +10,75 @@ import ToolBox from './ToolBox'; import RoomAvatar from '../../../components/avatar/RoomAvatar'; import { useLayout } from '../../../contexts/LayoutContext'; import Burger from './Burger'; -import { useTranslation } from '../../../contexts/TranslationContext'; import MarkdownText from '../../../components/MarkdownText'; +import { roomTypes } from '../../../../app/utils'; +import { useUserSubscription, useUserId } from '../../../contexts/UserContext'; +import { useUserData } from '../../../hooks/useUserData'; export default React.memo(({ room }) => { const { isEmbedded, showTopNavbarEmbeddedLayout } = useLayout(); if (isEmbedded && !showTopNavbarEmbeddedLayout) { return null; } - return ; -}); -const BackToRoom = React.memo(({ small, prid }) => { - const t = useTranslation(); - const onClick = useMutableCallback(() => { - FlowRouter.goToRoomById(prid); - }); - return ; -}); + if (room.t === 'd' && room.uids.length < 3) { + return ; + } + return ; +}); -const RoomHeader = ({ room }) => { +const HeaderIcon = ({ room }) => { const icon = useRoomIcon(room); + + return {!icon.name && icon}; +}; + +const RoomTitle = ({ room }) => { + const prevSubscription = useUserSubscription(room.prid); + const prevRoomHref = prevSubscription ? roomTypes.getRouteLink(prevSubscription.t, prevSubscription) : null; + + return + {room.prid && prevSubscription && <> + + + {prevSubscription.name} + + + >} + + + {room.name} + + ; +}; + +const DirectRoomHeader = ({ room }) => { + const userId = useUserId(); + const directUserId = room.uids.filter((uid) => uid !== userId).shift(); + const directUserData = useUserData(directUserId); + + return ; +}; + +const RoomHeader = ({ room, topic }) => { const { isMobile } = useLayout(); const avatar = ; + return - { (isMobile || room.prid) && - { isMobile && } - { room.prid && } + { isMobile && + } { avatar && {avatar} } - { icon && } - {room.name} + - {room.topic && } + {topic && } diff --git a/client/views/room/Header/ToolBox/ToolBox.tsx b/client/views/room/Header/ToolBox/ToolBox.tsx index d6d070aa87e9..450638fb35cb 100644 --- a/client/views/room/Header/ToolBox/ToolBox.tsx +++ b/client/views/room/Header/ToolBox/ToolBox.tsx @@ -14,7 +14,7 @@ import { ToolboxContext } from '../../lib/Toolbox/ToolboxContext'; const renderMenuOption: OptionRenderer = ( { label: { title, icon }, ...props }: any, ): ReactNode => - ; + ; const ToolBox = ({ className }: { className: BoxProps['className'] }): JSX.Element => { const tab = useTab(); diff --git a/client/views/room/contexts/RoomContext.ts b/client/views/room/contexts/RoomContext.ts index a11e5faad5b6..cde7a321b762 100644 --- a/client/views/room/contexts/RoomContext.ts +++ b/client/views/room/contexts/RoomContext.ts @@ -1,5 +1,4 @@ import { createContext } from 'react'; -// import { Handler } from '@rocket.chat/emitter'; import { IRoom } from '../../../../definition/IRoom'; diff --git a/client/views/room/contextualBar/AutoTranslate/AutoTranslate.js b/client/views/room/contextualBar/AutoTranslate/AutoTranslate.js index cb85623135a3..c44dc4cd858a 100644 --- a/client/views/room/contextualBar/AutoTranslate/AutoTranslate.js +++ b/client/views/room/contextualBar/AutoTranslate/AutoTranslate.js @@ -46,7 +46,6 @@ export default React.memo(({ rid }) => { const userLanguage = useLanguage(); const subscription = useUserSubscription(rid); - console.log(subscription); const { value: data } = useEndpointData( 'autotranslate.getSupportedLanguages', useMemo( diff --git a/client/views/room/contextualBar/Call/BBB/CallBBB.tsx b/client/views/room/contextualBar/Call/BBB/CallBBB.tsx new file mode 100644 index 000000000000..6c11a7e1573c --- /dev/null +++ b/client/views/room/contextualBar/Call/BBB/CallBBB.tsx @@ -0,0 +1,102 @@ +import React, { FC, useEffect } from 'react'; +import { Box, Button, ButtonGroup } from '@rocket.chat/fuselage'; +import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; + +import { useTranslation } from '../../../../../contexts/TranslationContext'; +import VerticalBar from '../../../../../components/VerticalBar'; +import { useTabBarClose } from '../../../providers/ToolboxProvider'; +import { useSetting } from '../../../../../contexts/SettingsContext'; +import { useRoom } from '../../../providers/RoomProvider'; +import { usePermission } from '../../../../../contexts/AuthorizationContext'; +import { IRoom } from '../../../../../../definition/IRoom'; +import { useMethod } from '../../../../../contexts/ServerContext'; +import { popout } from '../../../../../../app/ui-utils/client'; + + +export const CallBBB: FC <{ + startCall: () => void; + endCall: () => void; + handleClose: () => void; + canManageCall: boolean; + live: boolean; + openNewWindow: boolean; +}> = ({ + handleClose, + canManageCall, + live, + startCall, + endCall, + openNewWindow, + ...props +}) => { + const t = useTranslation(); + return <> + + + {t('Call')} + {handleClose && } + + + { openNewWindow ? <> + {t('Video_Conference')} + {t('Opened_in_a_new_window')} + > : null } + + { live && {t('BBB_Join_Meeting')} } + { live && canManageCall && {t('BBB_End_Meeting')} } + { !live && canManageCall && {t('BBB_Start_Meeting')} } + { !live && !canManageCall && {t('BBB_You_have_no_permission_to_start_a_call')} } + + + >; +}; + + +const D: FC<{ rid: IRoom['_id'] }> = ({ rid }) => { + const handleClose = useTabBarClose(); + const openNewWindow = !!useSetting('bigbluebutton_Open_New_Window'); + const hasCallManagement = usePermission('call-management', rid); + const room = useRoom(); + const join = useMethod('bbbJoin'); + const end = useMethod('bbbEnd'); + + const endCall = useMutableCallback(() => { + end({ rid }); + }); + + const startCall = useMutableCallback(async () => { + const result = await join({ rid }); + if (!result) { + return; + } + if (openNewWindow) { + return window.open(result.url); + } + popout.open({ + content: 'bbbLiveView', + data: { + source: result.url, + streamingOptions: result, + canOpenExternal: true, + showVideoControls: false, + }, + onCloseCallback: () => false, + }); + }); + + useEffect(() => { + if (room?.streamingOptions?.type !== 'call' || popout.context) { + return; + } + startCall(); + return (): void => { + popout.close(); + }; + }, [room?.streamingOptions?.type, startCall]); + + const canManageCall = room?.t === 'd' || hasCallManagement; + + return void} openNewWindow={openNewWindow} live={room?.streamingOptions?.type === 'call'} endCall={endCall} startCall={startCall} canManageCall={canManageCall} />; +}; + +export default D; diff --git a/client/views/room/contextualBar/Call/BBB/index.js b/client/views/room/contextualBar/Call/BBB/index.js new file mode 100644 index 000000000000..7645698cb045 --- /dev/null +++ b/client/views/room/contextualBar/Call/BBB/index.js @@ -0,0 +1,3 @@ +import CallBBB from './CallBBB'; + +export default CallBBB; diff --git a/client/views/room/contextualBar/Call/Jitsi/CallJitsi.js b/client/views/room/contextualBar/Call/Jitsi/CallJitsi.js new file mode 100644 index 000000000000..697a48ebd264 --- /dev/null +++ b/client/views/room/contextualBar/Call/Jitsi/CallJitsi.js @@ -0,0 +1,181 @@ +import React, { useRef, useEffect, useState, useMemo, useLayoutEffect } from 'react'; +import { Box, Skeleton } from '@rocket.chat/fuselage'; +import { useMutableCallback, useSafely } from '@rocket.chat/fuselage-hooks'; + +import { CallModal } from './components/CallModal'; +import { useSetModal } from '../../../../../contexts/ModalContext'; +import { useUserRoom, useUser } from '../../../../../contexts/UserContext'; +import { useTranslation } from '../../../../../contexts/TranslationContext'; +import { useSettings } from '../../../../../contexts/SettingsContext'; +import VerticalBar from '../../../../../components/VerticalBar'; +import { HEARTBEAT, TIMEOUT, DEBOUNCE } from '../../../../../../app/videobridge/constants'; +import { useMethod } from '../../../../../contexts/ServerContext'; +import { useConnectionStatus } from '../../../../../contexts/ConnectionStatusContext'; +import { JitsiBridge } from './lib/JitsiBridge'; +import { useTabBarClose } from '../../../providers/ToolboxProvider'; + +export const CallJitsi = ({ + handleClose, + openNewWindow, + refContent, + children, +}) => { + const t = useTranslation(); + + const content = openNewWindow ? <> + {t('Video_Conference')} + {t('Opened_in_a_new_window')} + > : ; + + return <> + + + {t('Call')} + {handleClose && } + + + {content} + {children} + + >; +}; + +const querySettings = { + _id: [ + 'Jitsi_Open_New_Window', + 'Jitsi_Domain', + 'Jitsi_URL_Room_Hash', + 'uniqueID', + 'Jitsi_URL_Room_Prefix', + 'Jitsi_URL_Room_Suffix', + 'Jitsi_Chrome_Extension', + 'Jitsi_SSL', + 'Jitsi_Enabled_TokenAuth', + ], +}; + +const CallJitsWithData = ({ rid }) => { + const user = useUser(); + const { connected } = useConnectionStatus(); + const [accessToken, setAccessToken] = useSafely(useState()); + const [accepted, setAccepted] = useState(false); + const room = useUserRoom(rid); + const setModal = useSetModal(); + const handleClose = useTabBarClose(); + const closeModal = useMutableCallback(() => setModal(null)); + const generateAccessToken = useMethod('jitsi:generateAccessToken'); + const updateTimeout = useMethod('jitsi:updateTimeout'); + + const handleCancel = useMutableCallback(() => { + closeModal(); + handleClose(); + }); + + const ref = useRef(); + + const { + Jitsi_Open_New_Window: openNewWindow, + Jitsi_Domain: domain, + Jitsi_SSL: ssl, + Jitsi_Chrome_Extension: desktopSharingChromeExtId, + Jitsi_URL_Room_Hash: useHashName, + uniqueID, + Jitsi_URL_Room_Prefix: prefix, + Jitsi_URL_Room_Suffix: sufix, + Jitsi_Enabled_TokenAuth: isEnabledTokenAuth, + } = Object.fromEntries(useSettings(querySettings).map(({ _id, value }) => [_id, value])); + + + useEffect(() => { + let ignore = false; + if (!isEnabledTokenAuth) { + setAccessToken(); + return; + } + (async () => { + const accessToken = await generateAccessToken(rid); + !ignore && setAccessToken(accessToken); + })(); + return () => { ignore = true; }; + }, [generateAccessToken, isEnabledTokenAuth, rid, setAccessToken]); + + useLayoutEffect(() => { + if (!connected) { + handleClose(); + } + }, [connected, handleClose]); + + const jitsi = useMemo(() => { + if (isEnabledTokenAuth && ! accessToken) { + return; + } + + const rname = useHashName ? uniqueID + rid : encodeURIComponent(room.t === 'd' ? room.usernames.join(' x ') : room.name); + const jitsiRoomName = prefix + rname + sufix; + + return new JitsiBridge({ + openNewWindow, + ssl, + domain, + jitsiRoomName, + accessToken, + desktopSharingChromeExtId, + name: user.name || user.username, + }, HEARTBEAT); + }, [accessToken, desktopSharingChromeExtId, domain, isEnabledTokenAuth, openNewWindow, prefix, rid, room.name, room.t, room.usernames, ssl, sufix, uniqueID, useHashName, user.name, user.username]); + + const testAndHandleTimeout = useMutableCallback(() => { + if (new Date() - new Date(room.jitsiTimeout) > TIMEOUT) { + return jitsi.dispose(); + } + + if (new Date() - new Date(room.jitsiTimeout) + TIMEOUT > DEBOUNCE) { + return updateTimeout(rid); + } + }); + + useEffect(() => { + if (!accepted || !jitsi) { + return; + } + jitsi.start(ref.current); + + updateTimeout(rid); + + jitsi.on('HEARTBEAT', testAndHandleTimeout); + + return () => { + jitsi.off('HEARTBEAT', testAndHandleTimeout); + jitsi.dispose(); + }; + }, [accepted, jitsi, rid, testAndHandleTimeout, updateTimeout]); + + const handleYes = useMutableCallback(() => { + setAccepted(true); + }); + + useLayoutEffect(() => { + if (!accepted) { + setModal(() => + , + ); + return; + } + closeModal(); + }, [accepted, closeModal, handleCancel, handleYes, setModal]); + + return ( + + {!accepted && } + + ); +}; + +export default React.memo(CallJitsWithData); diff --git a/client/views/room/contextualBar/Call/Jitsi/CallJitsi.stories.js b/client/views/room/contextualBar/Call/Jitsi/CallJitsi.stories.js new file mode 100644 index 000000000000..9a25d1edcec1 --- /dev/null +++ b/client/views/room/contextualBar/Call/Jitsi/CallJitsi.stories.js @@ -0,0 +1,21 @@ +import React from 'react'; +import { Box } from '@rocket.chat/fuselage'; + +import VerticalBar from '../../../../../components/VerticalBar'; +import { CallJitsi } from './CallJitsi'; +import { CallModal } from './components/CallModal'; + +export default { + title: 'components/basic/CallJitsi', + component: CallJitsi, +}; + +export const Default = () => + + + +; + +export const Modal = () => + +; diff --git a/client/views/room/contextualBar/Call/Jitsi/components/CallModal.js b/client/views/room/contextualBar/Call/Jitsi/components/CallModal.js new file mode 100644 index 000000000000..e3d1f5038bd7 --- /dev/null +++ b/client/views/room/contextualBar/Call/Jitsi/components/CallModal.js @@ -0,0 +1,28 @@ +import React from 'react'; +import { Box, Button, ButtonGroup, Icon, Modal } from '@rocket.chat/fuselage'; + +import { useTranslation } from '../../../../../../contexts/TranslationContext'; + +export const CallModal = ({ + handleYes, + handleCancel, +}) => { + const t = useTranslation(); + + return + + {t('Video_Conference')} + + + + + {t('Start_video_call')} + + + + {t('Cancel')} + {t('Yes')} + + + ; +}; diff --git a/client/views/room/contextualBar/Call/Jitsi/index.js b/client/views/room/contextualBar/Call/Jitsi/index.js new file mode 100644 index 000000000000..c9e4bb897407 --- /dev/null +++ b/client/views/room/contextualBar/Call/Jitsi/index.js @@ -0,0 +1,3 @@ +import CallJitsi from './CallJitsi'; + +export default CallJitsi; diff --git a/client/views/room/contextualBar/Call/Jitsi/lib/Jitsi.js b/client/views/room/contextualBar/Call/Jitsi/lib/Jitsi.js new file mode 100644 index 000000000000..8313af0fef0c --- /dev/null +++ b/client/views/room/contextualBar/Call/Jitsi/lib/Jitsi.js @@ -0,0 +1,345 @@ +/** + * Implements API class that embeds Jitsi Meet in external applications. + */ + +import postis from 'postis'; + +/** + * The minimum width for the Jitsi Meet frame + * @type {number} + */ +const MIN_WIDTH = 200; +// var MIN_WIDTH = 790; + +/** + * The minimum height for the Jitsi Meet frame + * @type {number} + */ +const MIN_HEIGHT = 300; + +/** + * Last id of api object + * @type {number} + */ +let id = 0; + +/** + * Maps the names of the commands expected by the API with the name of the + * commands expected by jitsi-meet + */ +const commands = { + displayName: 'display-name', + toggleAudio: 'toggle-audio', + toggleVideo: 'toggle-video', + toggleFilmStrip: 'toggle-film-strip', + toggleChat: 'toggle-chat', + toggleContactList: 'toggle-contact-list', + toggleShareScreen: 'toggle-share-screen', +}; + +/** + * Maps the names of the events expected by the API with the name of the + * events expected by jitsi-meet + */ +const events = { + incomingMessage: 'incoming-message', + outgoingMessage: 'outgoing-message', + displayNameChange: 'display-name-change', + participantJoined: 'participant-joined', + participantLeft: 'participant-left', + videoConferenceJoined: 'video-conference-joined', + videoConferenceLeft: 'video-conference-left', +}; + +/** + * Sends the passed object to Jitsi Meet + * @param postis {Postis object} the postis instance that is going to be used + * to send the message + * @param object the object to be sent + * - method {sting} + * - params {object} + */ +function sendMessage(postis, object) { + postis.send(object); +} + +/** + * Sends message for event enable/disable status change. + * @param postis {Postis object} the postis instance that is going to be used. + * @param event {string} the name of the event + * @param status {boolean} true - enabled; false - disabled; + */ +function changeEventStatus(postis, event, status) { + if (!(event in events)) { + console.error('Not supported event name.'); + return; + } + sendMessage(postis, { + method: 'jitsiSystemMessage', + params: { type: 'eventStatus', name: events[event], value: status }, + }); +} + +/** + * Constructs new API instance. Creates iframe element that loads + * Jitsi Meet. + * @param domain the domain name of the server that hosts the conference + * @param room_name the name of the room to join + * @param width width of the iframe + * @param height height of the iframe + * @param parent_node the node that will contain the iframe + * @param filmStripOnly if the value is true only the small videos will be + * visible. + * @param noSsl if the value is true https won't be used + * @param token if you need token authentication, then pass the token + * @constructor + */ +export function JitsiMeetExternalAPI(domain, room_name, width, height, parentNode, configOverwrite, interfaceConfigOverwrite, noSsl, token) { + if (!width || width < MIN_WIDTH) { width = MIN_WIDTH; } + if (!height || height < MIN_HEIGHT) { height = MIN_HEIGHT; } + + this.parentNode = null; + if (parentNode) { + this.parentNode = parentNode; + } else { + const scriptTag = document.scripts[document.scripts.length - 1]; + this.parentNode = scriptTag.parentNode; + } + + this.iframeHolder = this.parentNode.appendChild(document.createElement('div')); + this.iframeHolder.id = `jitsiConference${ id }`; + if (width) { this.iframeHolder.style.width = `${ width }px`; } + if (height) { this.iframeHolder.style.height = `${ height }px`; } + this.frameName = `jitsiConferenceFrame${ id }`; + this.url = `${ noSsl ? 'http' : 'https' }://${ domain }/`; + if (room_name) { this.url += room_name; } + if (token) { + this.url += `?jwt=${ token }`; + } + this.url += `#jitsi_meet_external_api_id=${ id }`; + + let key; + if (configOverwrite) { + for (key in configOverwrite) { + if (!configOverwrite.hasOwnProperty(key) || typeof key !== 'string') { continue; } + this.url += `&config.${ key }=${ configOverwrite[key] }`; + } + } + + if (interfaceConfigOverwrite) { + for (key in interfaceConfigOverwrite) { + if (!interfaceConfigOverwrite.hasOwnProperty(key) || typeof key !== 'string') { continue; } + this.url += `&interfaceConfig.${ key }=${ interfaceConfigOverwrite[key] }`; + } + } + + this.frame = document.createElement('iframe'); + this.frame.src = this.url; + this.frame.name = this.frameName; + this.frame.id = this.frameName; + this.frame.width = '100%'; + this.frame.height = '100%'; + this.frame.setAttribute('allowFullScreen', 'true'); + this.frame.setAttribute('allow', 'microphone; camera'); + this.frame = this.iframeHolder.appendChild(this.frame); + this.postis = postis({ + window: this.frame.contentWindow, + scope: `jitsi_meet_external_api_${ id }`, + }); + + this.eventHandlers = {}; + + id++; +} + +/** + * Executes command. The available commands are: + * displayName - sets the display name of the local participant to the value + * passed in the arguments array. + * toggleAudio - mutes / unmutes audio with no arguments + * toggleVideo - mutes / unmutes video with no arguments + * filmStrip - hides / shows the film strip with no arguments + * If the command doesn't require any arguments the parameter should be set + * to empty array or it may be omitted. + * @param name the name of the command + * @param arguments array of arguments + */ +JitsiMeetExternalAPI.prototype.executeCommand = function(name, argumentsList) { + if (!(name in commands)) { + console.error('Not supported command name.'); + return; + } + let argumentsArray = argumentsList; + if (!argumentsArray) { argumentsArray = []; } + sendMessage(this.postis, { method: commands[name], params: argumentsArray }); +}; + +/** + * Executes commands. The available commands are: + * displayName - sets the display name of the local participant to the value + * passed in the arguments array. + * toggleAudio - mutes / unmutes audio. no arguments + * toggleVideo - mutes / unmutes video. no arguments + * filmStrip - hides / shows the film strip. no arguments + * toggleChat - hides / shows chat. no arguments. + * toggleContactList - hides / shows contact list. no arguments. + * toggleShareScreen - starts / stops screen sharing. no arguments. + * @param object the object with commands to be executed. The keys of the + * object are the commands that will be executed and the values are the + * arguments for the command. + */ +JitsiMeetExternalAPI.prototype.executeCommands = function(object) { + Object.entries(object).forEach(([key, value]) => this.executeCommand(key, value)); +}; + +/** + * Adds event listeners to Meet Jitsi. The object key should be the name of + * the event and value - the listener. + * Currently we support the following + * events: + * incomingMessage - receives event notifications about incoming + * messages. The listener will receive object with the following structure: + * {{ + * "from": from,//JID of the user that sent the message + * "nick": nick,//the nickname of the user that sent the message + * "message": txt//the text of the message + * }} + * outgoingMessage - receives event notifications about outgoing + * messages. The listener will receive object with the following structure: + * {{ + * "message": txt//the text of the message + * }} + * displayNameChanged - receives event notifications about display name + * change. The listener will receive object with the following structure: + * {{ + * jid: jid,//the JID of the participant that changed his display name + * displayname: displayName //the new display name + * }} + * participantJoined - receives event notifications about new participant. + * The listener will receive object with the following structure: + * {{ + * jid: jid //the jid of the participant + * }} + * participantLeft - receives event notifications about the participant that + * left the room. + * The listener will receive object with the following structure: + * {{ + * jid: jid //the jid of the participant + * }} + * video-conference-joined - receives event notifications about the local user + * has successfully joined the video conference. + * The listener will receive object with the following structure: + * {{ + * roomName: room //the room name of the conference + * }} + * video-conference-left - receives event notifications about the local user + * has left the video conference. + * The listener will receive object with the following structure: + * {{ + * roomName: room //the room name of the conference + * }} + * @param object + */ +JitsiMeetExternalAPI.prototype.addEventListeners = function(object) { + Object.entries(object).forEach(([key, value]) => this.addEventListener(key, value)); +}; + +/** + * Adds event listeners to Meet Jitsi. Currently we support the following + * events: + * incomingMessage - receives event notifications about incoming + * messages. The listener will receive object with the following structure: + * {{ + * "from": from,//JID of the user that sent the message + * "nick": nick,//the nickname of the user that sent the message + * "message": txt//the text of the message + * }} + * outgoingMessage - receives event notifications about outgoing + * messages. The listener will receive object with the following structure: + * {{ + * "message": txt//the text of the message + * }} + * displayNameChanged - receives event notifications about display name + * change. The listener will receive object with the following structure: + * {{ + * jid: jid,//the JID of the participant that changed his display name + * displayname: displayName //the new display name + * }} + * participantJoined - receives event notifications about new participant. + * The listener will receive object with the following structure: + * {{ + * jid: jid //the jid of the participant + * }} + * participantLeft - receives event notifications about participant the that + * left the room. + * The listener will receive object with the following structure: + * {{ + * jid: jid //the jid of the participant + * }} + * video-conference-joined - receives event notifications fired when the local + * user has joined the video conference. + * The listener will receive object with the following structure: + * {{ + * roomName: room //the room name of the conference + * }} + * video-conference-left - receives event notifications fired when the local + * user has joined the video conference. + * The listener will receive object with the following structure: + * {{ + * roomName: room //the room name of the conference + * }} + * @param event the name of the event + * @param listener the listener + */ +JitsiMeetExternalAPI.prototype.addEventListener = function(event, listener) { + if (!(event in events)) { + console.error('Not supported event name.'); + return; + } + // We cannot remove listeners from postis that's why we are handling the + // callback that way. + if (!(event in this.eventHandlers)) { + this.postis.listen(events[event], function(data) { + if (event in this.eventHandlers && typeof this.eventHandlers[event] === 'function') { this.eventHandlers[event].call(null, data); } + }.bind(this)); + } + this.eventHandlers[event] = listener; + changeEventStatus(this.postis, event, true); +}; + +/** + * Removes event listener. + * @param event the name of the event. + */ +JitsiMeetExternalAPI.prototype.removeEventListener = function(event) { + if (!(event in this.eventHandlers)) { + console.error(`The event ${ event } is not registered.`); + return; + } + delete this.eventHandlers[event]; + changeEventStatus(this.postis, event, false); +}; + +/** + * Removes event listeners. + * @param events array with the names of the events. + */ +JitsiMeetExternalAPI.prototype.removeEventListeners = function(events) { + for (let i = 0; i < events.length; i++) { + this.removeEventListener(events[i]); + } +}; + +/** + * Removes the listeners and removes the Jitsi Meet frame. + */ +JitsiMeetExternalAPI.prototype.dispose = function() { + this.postis.destroy(); + const frame = document.getElementById(this.frameName); + if (frame) { frame.src = 'about:blank'; } + const self = this; + window.setTimeout(function() { + self.iframeHolder.removeChild(self.frame); + self.iframeHolder.parentNode.removeChild(self.iframeHolder); + }, 10); +}; diff --git a/client/views/room/contextualBar/Call/Jitsi/lib/JitsiBridge.js b/client/views/room/contextualBar/Call/Jitsi/lib/JitsiBridge.js new file mode 100644 index 000000000000..8f586a35b9b7 --- /dev/null +++ b/client/views/room/contextualBar/Call/Jitsi/lib/JitsiBridge.js @@ -0,0 +1,79 @@ +import { Emitter } from '@rocket.chat/emitter'; + +import { JitsiMeetExternalAPI } from './Jitsi'; + +export class JitsiBridge extends Emitter { + constructor({ + openNewWindow, + ssl, + domain, + jitsiRoomName, + accessToken, + desktopSharingChromeExtId, + name, + }, heartbeat) { + super(); + + this.openNewWindow = openNewWindow; + this.ssl = ssl; + this.domain = domain; + this.jitsiRoomName = jitsiRoomName; + this.accessToken = accessToken; + this.desktopSharingChromeExtId = desktopSharingChromeExtId; + this.name = name; + this.heartbeat = heartbeat; + } + + start(domTarget) { + const heartbeatTimer = setInterval(() => this.emit('HEARTBEAT', true), this.heartbeat); + this.once('dispose', () => clearTimeout(heartbeatTimer)); + + const { + openNewWindow, + ssl, + domain, + jitsiRoomName, + accessToken, + desktopSharingChromeExtId, + name, + } = this; + + const protocol = ssl ? 'https://' : 'http://'; + + const configOverwrite = { + desktopSharingChromeExtId, + }; + + const interfaceConfigOverwrite = {}; + + if (openNewWindow) { + const queryString = accessToken ? `?jwt=${ accessToken }` : ''; + const newWindow = window.open(`${ protocol + domain }/${ jitsiRoomName }${ queryString }`, jitsiRoomName); + + if (!newWindow) { + return; + } + + const timer = setInterval(() => { + if (newWindow.closed) { + this.dispose(); + } + }, 1000); + + this.once('dispose', () => clearTimeout(timer)); + + return newWindow.focus(); + } + + const width = 'auto'; + const height = 500; + const api = new JitsiMeetExternalAPI(domain, jitsiRoomName, width, height, domTarget, configOverwrite, interfaceConfigOverwrite, !ssl, accessToken); // eslint-disable-line no-undef + api.executeCommand('displayName', [name]); + this.once('dispose', () => api.dispose()); + } + + dispose() { + clearInterval(this.timer); + this.emit('dispose', true); + } +} diff --git a/client/views/room/contextualBar/Discussions/index.js b/client/views/room/contextualBar/Discussions/index.js index 50526ab2df9c..3475ab15bcce 100644 --- a/client/views/room/contextualBar/Discussions/index.js +++ b/client/views/room/contextualBar/Discussions/index.js @@ -1,24 +1,22 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; -import React, { useCallback, useMemo, useState, useRef, memo } from 'react'; +import React, { useCallback, useMemo, useState, memo } from 'react'; import { Box, Icon, TextInput, Callout } from '@rocket.chat/fuselage'; -import { FixedSizeList as List } from 'react-window'; -import InfiniteLoader from 'react-window-infinite-loader'; -import { useDebouncedValue, useResizeObserver } from '@rocket.chat/fuselage-hooks'; +import { Virtuoso } from 'react-virtuoso'; +import { useDebouncedValue, useResizeObserver, useAutoFocus } from '@rocket.chat/fuselage-hooks'; import VerticalBar from '../../../../components/VerticalBar'; import { useTranslation } from '../../../../contexts/TranslationContext'; import { useUserId, useUserSubscription } from '../../../../contexts/UserContext'; import { useTimeAgo } from '../../../../hooks/useTimeAgo'; -import { MessageSkeleton } from '../../components/Message'; import { useUserRoom } from '../../hooks/useUserRoom'; import { useSetting } from '../../../../contexts/SettingsContext'; import DiscussionListMessage from './components/Message'; import { clickableItem } from '../../../../lib/clickableItem'; import { escapeHTML } from '../../../../../lib/escapeHTML'; import { AsyncStatePhase } from '../../../../hooks/useAsyncState'; -import ScrollableContentWrapper from '../../../../components/ScrollableContentWrapper'; import { useTabBarClose } from '../../providers/ToolboxProvider'; import { renderMessageBody } from '../../../../lib/renderMessageBody'; +import ScrollableContentWrapper from '../../../../components/ScrollableContentWrapper'; import { useDiscussionsList } from './useDiscussionsList'; import { useRecordList } from '../../../../hooks/lists/useRecordList'; @@ -28,7 +26,6 @@ function mapProps(WrappedComponent) { const Discussion = React.memo(mapProps(clickableItem(DiscussionListMessage))); -const Skeleton = React.memo(clickableItem(MessageSkeleton)); const subscriptionFields = { tunread: 1, tunreadUser: 1, tunreadGroup: 1 }; const roomFields = { t: 1, name: 1 }; @@ -98,9 +95,7 @@ export const normalizeThreadMessage = ({ ...message }) => { }; const Row = memo(function Row({ - data, - index, - style, + discussion, showRealNames, userId, onClick, @@ -108,19 +103,16 @@ const Row = memo(function Row({ const t = useTranslation(); const formatDate = useTimeAgo(); - if (!data[index]) { - return ; - } - const discussion = data[index]; const msg = normalizeThreadMessage(discussion); const { name = discussion.u.username } = discussion.u; return ; }); -export function DiscussionList({ total = 10, initial = 10, discussions = [], loadMoreItems, loading, onClose, error, userId, text, setText }) { +export function DiscussionList({ total = 10, discussions = [], loadMoreItems, loading, onClose, error, userId, text, setText }) { const showRealNames = useSetting('UI_Use_Real_Name'); - const discussionsRef = useRef(); const t = useTranslation(); - + const inputRef = useAutoFocus(true); const onClick = useCallback((e) => { const { drid } = e.currentTarget.dataset; FlowRouter.goToRoomById(drid); }, []); - - discussionsRef.current = discussions; - - const rowRenderer = useCallback(({ data, index, style }) => , [onClick, showRealNames, userId]); - - const isItemLoaded = useCallback((index) => index < discussionsRef.current.length, []); - const { ref, contentBoxSize: { inlineSize = 378, blockSize = 750 } = {} } = useResizeObserver({ debounceDelay: 100 }); - + const { + ref, + contentBoxSize: { inlineSize = 378, blockSize = 1 } = {}, + } = useResizeObserver({ debounceDelay: 200 }); return <> {t('Discussions')} - + - }/> + }/> - + {error && {error.toString()}} {total === 0 && {t('No_Discussions_found')}} - {!error && total > 0 && {} : loadMoreItems} - > - {({ onItemsRendered, ref }) => ({rowRenderer} - )} - } + {!error && total > 0 && discussions.length > 0 && <> + {} : (start) => loadMoreItems(start, Math.min(50, total - start))} + overscan={25} + data={discussions} + components={{ Scroller: ScrollableContentWrapper }} + itemContent={(index, data) => } + /> + > + } >; diff --git a/client/views/room/contextualBar/ExportMessages/index.js b/client/views/room/contextualBar/ExportMessages/index.js index 344dc461ca41..616dd8aab943 100644 --- a/client/views/room/contextualBar/ExportMessages/index.js +++ b/client/views/room/contextualBar/ExportMessages/index.js @@ -129,7 +129,7 @@ const MailExportForm = ({ onCancel, rid }) => { const reset = useMutableCallback(() => { setSelected([]); - $(`#chat-window-${ rid }.messages-box .message.selected`) + $('.messages-box .message', $(`#chat-window-${ rid }`)) .removeClass('selected'); }); diff --git a/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.js b/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.js index 318ec2623c84..50ee09c94a6a 100644 --- a/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.js +++ b/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.js @@ -2,6 +2,7 @@ import React, { useCallback, useMemo, useRef } from 'react'; import { Field, TextInput, + PasswordInput, ToggleSwitch, MultiSelect, Accordion, @@ -136,6 +137,9 @@ function EditChannel({ room, onClickClose, onClickBack }) { const onChange = useCallback(({ initialValue, value, key }) => { const { current } = saveData; if (JSON.stringify(initialValue) !== JSON.stringify(value)) { + if (key === 'systemMessages' && value?.length > 0) { + current.hideSysMes = true; + } current[key] = value; } else { delete current[key]; @@ -226,7 +230,7 @@ function EditChannel({ room, onClickClose, onClickBack }) { const canChangeType = getCanChangeType(room, canCreateChannel, canCreateGroup, isAdmin); const canSetRo = usePermission('set-readonly', room._id); const canSetReactWhenRo = usePermission('set-react-when-readonly', room._id); - const canEditPrivilegedSetting = usePermission('edit-privileged-setting', room._id); + const canEditRoomRetentionPolicy = usePermission('edit-room-retention-policy', room._id); const canArchiveOrUnarchive = useAtLeastOnePermission(useMemo(() => ['archive-room', 'unarchive-room'], [])); const canDelete = usePermission(`delete-${ room.t }`); const canToggleEncryption = usePermission('toggle-room-e2e-encryption', room._id) && (room.encrypted || e2e.isReady()); @@ -353,7 +357,7 @@ function EditChannel({ room, onClickClose, onClickBack }) { - + } {canViewHideSysMes && @@ -364,7 +368,7 @@ function EditChannel({ room, onClickClose, onClickBack }) { - + } {canViewEncrypted && @@ -390,7 +394,7 @@ function EditChannel({ room, onClickClose, onClickBack }) { {t('RetentionPolicyRoom_OverrideGlobal')} - + diff --git a/client/views/room/contextualBar/NotificationPreferences/NotificationPreferences.js b/client/views/room/contextualBar/NotificationPreferences/NotificationPreferences.js index fa05f15779be..356762e97514 100644 --- a/client/views/room/contextualBar/NotificationPreferences/NotificationPreferences.js +++ b/client/views/room/contextualBar/NotificationPreferences/NotificationPreferences.js @@ -11,7 +11,7 @@ import VerticalBar from '../../../../components/VerticalBar'; import { Preferences } from './components/Preferences'; import { NotificationByDevice } from './components/NotificationByDevice'; import { NotificationToogle } from './components/NotificationToogle'; - +import { useTabBarClose } from '../../providers/ToolboxProvider'; export const NotificationPreferences = ({ handleClose, @@ -21,7 +21,6 @@ export const NotificationPreferences = ({ handlePlaySound, handleOptions, handleSaveButton, - handleCancelButton, }) => { const t = useTranslation(); return <> @@ -54,24 +53,23 @@ export const NotificationPreferences = ({ - {t('Cancel')} + {handleClose && {t('Cancel')}} {t('Save')} >; }; -export default React.memo(({ tabBar, rid }) => { +export default React.memo(({ rid }) => { const t = useTranslation(); const subscription = useUserSubscription(rid); const customSound = useCustomSound(); - - const handleClose = useMutableCallback(() => tabBar && tabBar.close()); + const handleClose = useTabBarClose(); const saveSettings = useEndpointActionExperimental('POST', 'rooms.saveNotification', t('Room_updated_successfully')); - const { values, handlers, hasUnsavedChanges, commit, reset } = useForm( + const { values, handlers, hasUnsavedChanges, commit } = useForm( { turnOn: !subscription.disableNotifications, muteGroupMentions: subscription.muteGroupMentions, @@ -84,7 +82,6 @@ export default React.memo(({ tabBar, rid }) => { }, ); - const defaultOption = [ ['default', t('Default')], ['all', t('All_messages')], @@ -136,7 +133,6 @@ export default React.memo(({ tabBar, rid }) => { handlePlaySound={handlePlaySound} handleOptions={handleOptions} handleSaveButton={handleSaveButton} - handleCancelButton={reset} /> ); }); diff --git a/client/views/room/contextualBar/OTR/OTR.js b/client/views/room/contextualBar/OTR/OTR.js index d52c0d367c14..0eb04b34d21b 100644 --- a/client/views/room/contextualBar/OTR/OTR.js +++ b/client/views/room/contextualBar/OTR/OTR.js @@ -7,8 +7,8 @@ import OTRModal from './OTRModal'; import { OTR as ORTInstance } from '../../../../../app/otr/client/rocketchat.otr'; import { useTranslation } from '../../../../contexts/TranslationContext'; import VerticalBar from '../../../../components/VerticalBar'; -import { usePresence } from '../../../../components/UserStatus'; import { useReactiveValue } from '../../../../hooks/useReactiveValue'; +import { usePresence } from '../../../../hooks/usePresence'; export const OTR = ({ isEstablishing, diff --git a/client/views/room/contextualBar/RoomFiles/RoomFiles.js b/client/views/room/contextualBar/RoomFiles/RoomFiles.js index abbb4ac88864..0541ec0b35d4 100644 --- a/client/views/room/contextualBar/RoomFiles/RoomFiles.js +++ b/client/views/room/contextualBar/RoomFiles/RoomFiles.js @@ -1,5 +1,5 @@ import React, { useState, useCallback, useMemo } from 'react'; -import { useMutableCallback, useLocalStorage, useDebouncedState, useUniqueId, useResizeObserver } from '@rocket.chat/fuselage-hooks'; +import { useMutableCallback, useLocalStorage, useUniqueId, useAutoFocus } from '@rocket.chat/fuselage-hooks'; import { Box, Icon, @@ -8,11 +8,10 @@ import { Throbber, Margins, } from '@rocket.chat/fuselage'; -import { FixedSizeList as List } from 'react-window'; -import InfiniteLoader from 'react-window-infinite-loader'; +import { Virtuoso } from 'react-virtuoso'; import memoize from 'memoize-one'; -import { useUserId, useUserRoom } from '../../../../contexts/UserContext'; +import { useUserId } from '../../../../contexts/UserContext'; import DeleteFileWarning from '../../../../components/DeleteFileWarning'; import { useToastMessageDispatch } from '../../../../contexts/ToastMessagesContext'; import { useSetModal } from '../../../../contexts/ModalContext'; @@ -21,18 +20,17 @@ import { AsyncStatePhase } from '../../../../hooks/useAsyncState'; import { useTranslation } from '../../../../contexts/TranslationContext'; import VerticalBar from '../../../../components/VerticalBar'; import FileItem from './components/FileItem'; -import ScrollableContentWrapper from '../../../../components/ScrollableContentWrapper'; -import { useFileList } from './hooks/useFileList'; -import { useComponentDidUpdate } from '../../../../hooks/useComponentDidUpdate'; +import { useFilesList } from './hooks/useFilesList'; +import { useRecordList } from '../../../../hooks/lists/useRecordList'; import { useMessageDeletionIsAllowed } from './hooks/useMessageDeletionIsAllowed'; import { useTabBarClose } from '../../providers/ToolboxProvider'; +import ScrollableContentWrapper from '../../../../components/ScrollableContentWrapper'; + +const Row = React.memo(({ item, data, index }) => { + const { userId, onClickDelete, isDeletionAllowed } = data; -const Row = React.memo(({ data, index, style }) => { - const { items, userId, onClickDelete, isDeletionAllowed } = data; - const item = items[index] || null; return item && { ts={item.ts} type={item.type} typeGroup={item.typeGroup} - fileData={data[index]} + fileData={item} userId={userId} onClickDelete={onClickDelete} isDeletionAllowed={isDeletionAllowed} />; }); -export const createItemData = memoize((items, onClickDelete, isDeletionAllowed) => ({ - items, +export const createItemData = memoize((onClickDelete, isDeletionAllowed) => ({ onClickDelete, isDeletionAllowed, })); @@ -69,7 +66,6 @@ export const RoomFiles = function RoomFiles({ isDeletionAllowed, }) { const t = useTranslation(); - const isItemLoaded = (index) => !!filesItems[index]; const options = useMemo(() => [ ['all', t('All')], ['image', t('Images')], @@ -78,13 +74,11 @@ export const RoomFiles = function RoomFiles({ ['text', t('Texts')], ['application', t('Files')], ], [t]); - - const { ref, contentBoxSize: { blockSize = 780 } = {} } = useResizeObserver({ debounceDelay: 100 }); + const inputRef = useAutoFocus(true); const searchId = useUniqueId(); - const itemData = createItemData(filesItems, onClickDelete, isDeletionAllowed); - + const itemData = createItemData(onClickDelete, isDeletionAllowed); return ( <> @@ -98,7 +92,7 @@ export const RoomFiles = function RoomFiles({ - }/> + }/> } {!loading && filesItems.length <= 0 && {t('No_results_found')}} - - - {({ onItemsRendered, ref }) => ( - - {Row} - - )} - + + {} : (start) => loadMoreItems(start, Math.min(50, total - start))} + overscan={50} + data={filesItems} + components={{ Scroller: ScrollableContentWrapper }} + itemContent={(index, data) => } + /> > @@ -144,10 +131,7 @@ RoomFiles.Item = FileItem; export default ({ rid }) => { const uid = useUserId(); const onClickClose = useTabBarClose(); - const room = useUserRoom(rid); - room.type = room.t; - room.rid = rid; - + const t = useTranslation(); const setModal = useSetModal(); const closeModal = useMutableCallback(() => setModal()); const dispatchToastMessage = useToastMessageDispatch(); @@ -156,66 +140,40 @@ export default ({ rid }) => { const [type, setType] = useLocalStorage('file-list-type', 'all'); const [text, setText] = useState(''); - const [query, setQuery] = useDebouncedState({ - roomId: rid, - sort: JSON.stringify({ uploadedAt: -1 }), - count: 50, - query: JSON.stringify({ - ...type !== 'all' && { - typeGroup: type, - }, - }), - }, 500); - const handleTextChange = useCallback((event) => { setText(event.currentTarget.value); }, []); - useComponentDidUpdate(() => setQuery((params) => ({ - ...params, - roomId: rid, - query: JSON.stringify({ - name: { $regex: text || '', $options: 'i' }, - ...type !== 'all' && { - typeGroup: type, - }, - }), - })), [rid, text, type, setQuery]); - - const { value: data, phase: state, reload, more } = useFileList(room.type, query); + const { filesList, loadMoreItems } = useFilesList(useMemo(() => ({ rid, type, text }), [rid, type, text])); + const { phase, items: filesItems, itemCount: totalItemCount } = useRecordList(filesList); const handleDelete = useMutableCallback((_id) => { const onConfirm = async () => { try { await deleteFile(_id); + dispatchToastMessage({ type: 'success', message: t('Deleted') }); } catch (error) { dispatchToastMessage({ type: 'error', message: error }); } closeModal(); - reload(); }; setModal(); }, []); - const loadMoreItems = useCallback((start, end) => more((params) => ({ ...params, offset: start, count: end - start }), (prev, next) => ({ - total: next.total, - files: [...prev.files, ...next.files], - })), [more]); - const isDeletionAllowed = useMessageDeletionIsAllowed(rid, uid); return ( : } {name} - @{user.username} + @{user?.username} {format(uploadedAt)} - + ; }; diff --git a/client/views/room/contextualBar/RoomFiles/hooks/useFilesList.ts b/client/views/room/contextualBar/RoomFiles/hooks/useFilesList.ts new file mode 100644 index 000000000000..7e6b2a44fe5e --- /dev/null +++ b/client/views/room/contextualBar/RoomFiles/hooks/useFilesList.ts @@ -0,0 +1,79 @@ +import { useCallback, useEffect, useMemo, useState } from 'react'; + +import { + FilesList, + FilesListOptions, +} from '../../../../../lib/lists/FilesList'; +import { useEndpoint } from '../../../../../contexts/ServerContext'; +import { useUserRoom, useUserId } from '../../../../../contexts/UserContext'; +import { useScrollableMessageList } from '../../../../../hooks/lists/useScrollableMessageList'; +import { useStreamUpdatesForMessageList } from '../../../../../hooks/lists/useStreamUpdatesForMessageList'; +import { getConfig } from '../../../../../../app/ui-utils/client/config'; + +export const useFilesList = ( + options: FilesListOptions, +): { + filesList: FilesList; + initialItemCount: number; + loadMoreItems: (start: number, end: number) => void; + } => { + const [filesList] = useState(() => new FilesList(options)); + + const room = useUserRoom(options.rid); + const uid = useUserId(); + + useEffect(() => { + if (filesList.options !== options) { + filesList.updateFilters(options); + } + }, [filesList, options]); + + const roomTypes = { + c: 'channels.files', + l: 'channels.files', + d: 'im.files', + p: 'groups.files', + }; + + const apiEndPoint = room && roomTypes[room.t]; + + const getFiles = useEndpoint('GET', apiEndPoint as string); + + const fetchMessages = useCallback( + async (start, end) => { + const { files, total } = await getFiles({ + roomId: options.rid, + count: end - start, + sort: JSON.stringify({ uploadedAt: -1 }), + query: JSON.stringify({ + name: { $regex: options.text || '', $options: 'i' }, + ...options.type !== 'all' && { + typeGroup: options.type, + }, + }), + }); + + return { + items: files, + itemCount: total, + }; + }, + [getFiles, options.rid, options.type, options.text], + ); + + const { loadMoreItems, initialItemCount } = useScrollableMessageList( + filesList, + fetchMessages, + useMemo(() => { + const filesListSize = getConfig('discussionListSize'); + return filesListSize ? parseInt(filesListSize, 10) : undefined; + }, []), + ); + useStreamUpdatesForMessageList(filesList, uid, options.rid); + + return { + filesList, + loadMoreItems, + initialItemCount, + }; +}; diff --git a/client/views/room/contextualBar/RoomMembers/InviteUsers/InviteUsers.js b/client/views/room/contextualBar/RoomMembers/InviteUsers/InviteUsers.js index d2b3924550d1..9576badf63ca 100644 --- a/client/views/room/contextualBar/RoomMembers/InviteUsers/InviteUsers.js +++ b/client/views/room/contextualBar/RoomMembers/InviteUsers/InviteUsers.js @@ -30,7 +30,7 @@ export const InviteUsers = ({ {onClickClose && } - + {t('Invite_Link')} @@ -45,7 +45,7 @@ export const InviteUsers = ({ {onClickEdit && {t('Edit_Invite')}} - + ); }; diff --git a/client/views/room/contextualBar/RoomMembers/List/RoomMembers.js b/client/views/room/contextualBar/RoomMembers/List/RoomMembers.js index b3121d7b137c..a5d4fbb30a54 100644 --- a/client/views/room/contextualBar/RoomMembers/List/RoomMembers.js +++ b/client/views/room/contextualBar/RoomMembers/List/RoomMembers.js @@ -10,13 +10,12 @@ import { Button, Callout, } from '@rocket.chat/fuselage'; -import { FixedSizeList as List, areEqual } from 'react-window'; -import InfiniteLoader from 'react-window-infinite-loader'; +import { Virtuoso } from 'react-virtuoso'; import { - useResizeObserver, useMutableCallback, useDebouncedValue, useLocalStorage, + useAutoFocus, } from '@rocket.chat/fuselage-hooks'; import memoize from 'memoize-one'; @@ -26,31 +25,28 @@ import VerticalBar from '../../../../../components/VerticalBar'; import { useMethod } from '../../../../../contexts/ServerContext'; import { AsyncStatePhase } from '../../../../../hooks/useAsyncState'; import { useAtLeastOnePermission } from '../../../../../contexts/AuthorizationContext'; -import ScrollableContentWrapper from '../../../../../components/ScrollableContentWrapper'; import { useDataWithLoadMore } from '../../hooks/useDataWithLoadMore'; import { MemberItem } from './components/MemberItem'; import UserInfoWithData from '../../UserInfo'; import InviteUsers from '../InviteUsers/InviteUsers'; import AddUsers from '../AddUsers/AddUsers'; import { useTabBarClose } from '../../../providers/ToolboxProvider'; +import ScrollableContentWrapper from '../../../../../components/ScrollableContentWrapper'; -export const createItemData = memoize((items, onClickView, rid) => ({ - items, +export const createItemData = memoize((onClickView, rid) => ({ onClickView, rid, })); -const Row = React.memo(({ data, index, style }) => { - const { onClickView, items, rid } = data; - const user = items[index]; +const Row = React.memo(({ user, data, index }) => { + const { onClickView, rid } = data; if (!user) { - return ; + return ; } return { name={user.name} onClickView={onClickView} />; -}, areEqual); +}); export const RoomMembers = ({ loading, @@ -72,23 +68,20 @@ export const RoomMembers = ({ onClickAdd, onClickInvite, total, - limit, error, loadMoreItems, rid, }) => { const t = useTranslation(); - - const isItemLoaded = (index) => !!members[index]; + const inputRef = useAutoFocus(true); const options = useMemo(() => [ ['online', t('Online')], ['all', t('All')], ], [t]); - const { ref, contentBoxSize: { blockSize = 780 } = {} } = useResizeObserver({ debounceDelay: 100 }); - - const itemData = createItemData(members, onClickView, rid); + const itemData = createItemData(onClickView, rid); + const lm = useMutableCallback((start) => loadMoreItems(start + 1, Math.min(50, start + 1 - members.length))); return ( <> @@ -102,7 +95,7 @@ export const RoomMembers = ({ - }/> + }/> )} - - {!loading && members - && - {({ onItemsRendered, ref }) => ( - - {Row} - - )} - - } + + {!loading && members && members.length > 0 && } + />} @@ -249,7 +233,6 @@ export default ({ setText={handleTextChange} members={value?.records} total={value?.total} - limit={ value?.finished || value?.records.length < 50 ? value?.records.length : value?.records.length + 50} onClickClose={onClickClose} onClickView={viewUser} onClickAdd={canAddUsers && addUser} diff --git a/client/views/room/contextualBar/Threads/index.js b/client/views/room/contextualBar/Threads/index.js index 537558c5b718..2e4c03dacb5c 100644 --- a/client/views/room/contextualBar/Threads/index.js +++ b/client/views/room/contextualBar/Threads/index.js @@ -1,4 +1,5 @@ import React, { useCallback, useMemo, useState, useRef, memo } from 'react'; +import { Virtuoso } from 'react-virtuoso'; import { Box, Icon, @@ -7,13 +8,12 @@ import { Margins, Callout, } from '@rocket.chat/fuselage'; -import { FixedSizeList as List } from 'react-window'; -import InfiniteLoader from 'react-window-infinite-loader'; import { useDebouncedValue, useResizeObserver, useLocalStorage, useMutableCallback, + useAutoFocus, } from '@rocket.chat/fuselage-hooks'; import VerticalBar from '../../../../components/VerticalBar'; @@ -32,14 +32,13 @@ import { useUserRoom } from '../../hooks/useUserRoom'; import { useSetting } from '../../../../contexts/SettingsContext'; import { useTimeAgo } from '../../../../hooks/useTimeAgo'; import { clickableItem } from '../../../../lib/clickableItem'; -import { MessageSkeleton } from '../../components/Message'; import ThreadListMessage from './components/Message'; import { escapeHTML } from '../../../../../lib/escapeHTML'; import { AsyncStatePhase } from '../../../../hooks/useAsyncState'; -import ScrollableContentWrapper from '../../../../components/ScrollableContentWrapper'; import { useTabBarClose, useTabContext } from '../../providers/ToolboxProvider'; import ThreadComponent from '../../../../../app/threads/client/components/ThreadComponent'; import { renderMessageBody } from '../../../../lib/renderMessageBody'; +import ScrollableContentWrapper from '../../../../components/ScrollableContentWrapper'; import { useThreadsList } from './useThreadsList'; import { useRecordList } from '../../../../hooks/lists/useRecordList'; @@ -58,8 +57,6 @@ function mapProps(WrappedComponent) { const Thread = React.memo(mapProps(clickableItem(ThreadListMessage))); -const Skeleton = React.memo(clickableItem(MessageSkeleton)); - const subscriptionFields = { tunread: 1, tunreadUser: 1, tunreadGroup: 1 }; const roomFields = { t: 1, name: 1 }; @@ -153,9 +150,7 @@ export const normalizeThreadMessage = ({ ...message }) => { }; const Row = memo(function Row({ - data, - index, - style, + thread, showRealNames, unread, unreadUser, @@ -166,37 +161,32 @@ const Row = memo(function Row({ const t = useTranslation(); const formatDate = useTimeAgo(); - if (!data[index]) { - return ; - } - const thread = data[index]; const msg = normalizeThreadMessage(thread); const { name = thread.u.username } = thread.u; - return ( - - ); + return ; }); export function ThreadList({ total = 10, - initial = 10, threads = [], room, unread = [], @@ -216,7 +206,7 @@ export function ThreadList({ const threadsRef = useRef(); const t = useTranslation(); - + const inputRef = useAutoFocus(true); const [name] = useCurrentRoute(); const channelRoute = useRoute(name); const onClick = useMutableCallback((e) => { @@ -240,26 +230,6 @@ export function ThreadList({ threadsRef.current = threads; - const rowRenderer = useCallback( - ({ data, index, style }) => ( - - ), - [showRealNames, unread, unreadUser, unreadGroup, userId, onClick], - ); - - const isItemLoaded = useMutableCallback( - (index) => index < threadsRef.current.length, - ); const { ref, contentBoxSize: { inlineSize = 378, blockSize = 1 } = {}, @@ -268,86 +238,65 @@ export function ThreadList({ const mid = useTabContext(); const jump = useQueryStringParameter('jump'); - return ( - <> - - - {t('Threads')} - - - - - - - } - /> - - - - - - {error && ( - - {error.toString()} - - )} - {total === 0 && {t('No_Threads')}} - {!error && total > 0 && ( - {} : loadMoreItems} - > - {({ onItemsRendered, ref }) => ( - - {rowRenderer} - - )} - - )} + return <> + + + {t('Threads')} + + + + + + + } + ref={inputRef} + /> + + - - {mid && ( - - - - )} - > - ); + + + {error && {error.toString()}} + {total === 0 && {t('No_Threads')}} + {!error && total > 0 && threads.length > 0 && {} : (start) => loadMoreItems(start, Math.min(50, total - start))} + overscan={25} + data={threads} + components={{ Scroller: ScrollableContentWrapper }} + itemContent={(index, data) => } + />} + + + { mid && } + >; } export default withData(ThreadList); diff --git a/client/views/room/contextualBar/UserInfo/index.js b/client/views/room/contextualBar/UserInfo/index.js index 9a601f4a682c..0f9645112e23 100644 --- a/client/views/room/contextualBar/UserInfo/index.js +++ b/client/views/room/contextualBar/UserInfo/index.js @@ -96,7 +96,7 @@ export const UserInfo = React.memo(function UserInfo({ {bio && <> {t('Bio')} - + >} {phone && <> {t('Phone')} diff --git a/client/views/room/lib/Toolbox/ToolboxContext.tsx b/client/views/room/lib/Toolbox/ToolboxContext.tsx index 75821941a702..3cda75b67c3e 100644 --- a/client/views/room/lib/Toolbox/ToolboxContext.tsx +++ b/client/views/room/lib/Toolbox/ToolboxContext.tsx @@ -1,13 +1,15 @@ import { createContext } from 'react'; -import { Handler } from '@rocket.chat/emitter'; +import { EventHandlerOf } from '@rocket.chat/emitter'; -import { actions, listen, ToolboxActionConfig, ToolboxAction } from '.'; +import { actions, listen, ToolboxActionConfig, ToolboxAction, Events } from '.'; import './defaultActions'; +export type ToolboxEventHandler = (handler: EventHandlerOf) => Function; + export type ChannelContextValue = { actions: Map; - listen: (handler: Handler) => Function; + listen: ToolboxEventHandler; tabBar?: any; context?: any; open: Function; diff --git a/client/views/room/lib/Toolbox/generator.tsx b/client/views/room/lib/Toolbox/generator.tsx index c1252e02baf9..5e22bdea9481 100644 --- a/client/views/room/lib/Toolbox/generator.tsx +++ b/client/views/room/lib/Toolbox/generator.tsx @@ -1,18 +1,22 @@ -import { Emitter, Handler } from '@rocket.chat/emitter'; +import { Emitter, EventHandlerOf } from '@rocket.chat/emitter'; export type Store = Map; -export const generator = function generator(name?: string): -{ + +export type Events = { + change: Store; +}; + +export const generator = function generator(name?: string): ({ store: Store; add: (id: string, action: T) => Store; remove: (id: string) => boolean; - listen: (handler: Handler) => Function; + listen: (handler: EventHandlerOf, 'change'>) => Function; name: string | undefined; -} { +}) { const store: Store = new Map(); - const emitter = new Emitter(); + const emitter = new Emitter>(); const add = (id: string, action: T): Store => { store.set(id, action); @@ -26,7 +30,7 @@ export const generator = function generator(name?: string): return result; }; - const listen = (handler: Handler): Function => emitter.on('change', handler); + const listen = (handler: EventHandlerOf, 'change'>): Function => emitter.on('change', handler); return Object.freeze({ store, diff --git a/client/views/room/lib/Toolbox/index.tsx b/client/views/room/lib/Toolbox/index.tsx index 96e5cfef36f6..62ce552917ad 100644 --- a/client/views/room/lib/Toolbox/index.tsx +++ b/client/views/room/lib/Toolbox/index.tsx @@ -2,7 +2,7 @@ import { FC, LazyExoticComponent, ReactNode, MouseEvent } from 'react'; import { BoxProps, OptionProps } from '@rocket.chat/fuselage'; import { IRoom } from '../../../../../definition/IRoom'; -import { generator } from './generator'; +import { generator, Events as GeneratorEvents } from './generator'; type ToolboxHook = ({ room }: { room: IRoom }) => ToolboxActionConfig | null @@ -38,4 +38,6 @@ export type ToolboxAction = ToolboxHook | ToolboxActionConfig; const { listen, add: addAction, remove: deleteAction, store: actions } = generator(); +export type Events = GeneratorEvents; + export { listen, addAction, deleteAction, actions }; diff --git a/client/views/room/providers/ToolboxProvider.tsx b/client/views/room/providers/ToolboxProvider.tsx index c07788e14e23..a9f246f24c26 100644 --- a/client/views/room/providers/ToolboxProvider.tsx +++ b/client/views/room/providers/ToolboxProvider.tsx @@ -1,8 +1,7 @@ import React, { ReactNode, useContext, useMemo, useState, useCallback, useLayoutEffect } from 'react'; import { useDebouncedState, useMutableCallback, useSafely } from '@rocket.chat/fuselage-hooks'; -import { Handler } from '@rocket.chat/emitter'; -import { ToolboxContext } from '../lib/Toolbox/ToolboxContext'; +import { ToolboxContext, ToolboxEventHandler } from '../lib/Toolbox/ToolboxContext'; import { ToolboxAction, ToolboxActionConfig } from '../lib/Toolbox/index'; import { IRoom } from '../../../../definition/IRoom'; import { useCurrentRoute, useRoute } from '../../../contexts/RouterContext'; @@ -37,7 +36,7 @@ const VirtualAction = React.memo(({ handleChange, room, action, id }: { id: stri return null; }); -const useToolboxActions = (room: IRoom): { listen: (handler: Handler) => Function; actions: Array<[string, ToolboxAction]> } => { +const useToolboxActions = (room: IRoom): { listen: ToolboxEventHandler; actions: Array<[string, ToolboxAction]> } => { const { listen, actions } = useContext(ToolboxContext); const [state, setState] = useState>(Array.from(actions.entries())); diff --git a/ee/app/livechat-enterprise/server/api/lib/inquiries.js b/ee/app/livechat-enterprise/server/api/lib/inquiries.js index 8a7423c98b47..ac1527155e8e 100644 --- a/ee/app/livechat-enterprise/server/api/lib/inquiries.js +++ b/ee/app/livechat-enterprise/server/api/lib/inquiries.js @@ -7,7 +7,7 @@ export async function setPriorityToInquiry({ userId, roomId, priority }) { if (!await hasPermissionAsync(userId, 'manage-livechat-priorities') && !await hasPermissionAsync(userId, 'view-l-room')) { throw new Error('error-not-authorized'); } - const inquiry = await LivechatInquiry.findOneByRoomId(roomId, { fields: { queued: 1 } }); + const inquiry = await LivechatInquiry.findOneByRoomId(roomId, { fields: { status: 1 } }); if (!inquiry || inquiry.status !== 'queued') { throw new Error('error-invalid-inquiry'); } diff --git a/ee/client/audit/UserAutoCompleteMultiple.js b/ee/client/audit/UserAutoCompleteMultiple.js index 8fa1055ceaa8..e668cc805f5c 100644 --- a/ee/client/audit/UserAutoCompleteMultiple.js +++ b/ee/client/audit/UserAutoCompleteMultiple.js @@ -1,6 +1,6 @@ import React, { useMemo, useState } from 'react'; import { AutoComplete, Box, Option, Options, Chip } from '@rocket.chat/fuselage'; -import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; +import { useMutableCallback, useDebouncedValue } from '@rocket.chat/fuselage-hooks'; import UserAvatar from '../../../client/components/avatar/UserAvatar'; import { useEndpointData } from '../../../client/hooks/useEndpointData'; @@ -11,7 +11,8 @@ const Avatar = ({ value, ...props }) => { const [filter, setFilter] = useState(''); - const { value: data } = useEndpointData('users.autocomplete', useMemo(() => query(filter), [filter])); + const debouncedFilter = useDebouncedValue(filter, 1000); + const { value: data } = useEndpointData('users.autocomplete', useMemo(() => query(debouncedFilter), [debouncedFilter])); const options = useMemo(() => (data && data.items.map((user) => ({ value: user.username, label: user.name }))) || [], [data]); const onClickRemove = useMutableCallback((e) => { e.stopPropagation(); diff --git a/package-lock.json b/package-lock.json index 6d8b13fb1e45..f38ca178f53c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rocket.Chat", - "version": "3.11.1", + "version": "3.12.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -5907,9 +5907,9 @@ } }, "@rocket.chat/apps-engine": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.22.2.tgz", - "integrity": "sha512-wmFy/YOF5nZRxgMvTPE4zAAGidIrePndEPFuslZc+ocsZeO3zDl6i8MT0WN0vVLM6htEOe4/O4XS2H28XCAwnw==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.23.0.tgz", + "integrity": "sha512-SDHVt+vDJaUHLk5nyiufhn9GjZbEJtP7ORjqilipB2RK5rtVnlJJJCtO1MgTI/A9LvLJBCESkC7u6PmUDrQ+/A==", "requires": { "adm-zip": "^0.4.9", "cryptiles": "^4.1.3", @@ -5920,11 +5920,12 @@ } }, "@rocket.chat/css-in-js": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/css-in-js/-/css-in-js-0.21.0.tgz", - "integrity": "sha512-jV1VY5nmUEy1gFtu9ygW1H0qMlyZYBRBTlFn/qT20Ynhqj5FUTlRO0iva7bZf689j8ljdhNTVMEE/OiCF3xK2w==", + "version": "0.6.3-dev.180", + "resolved": "https://registry.npmjs.org/@rocket.chat/css-in-js/-/css-in-js-0.6.3-dev.180.tgz", + "integrity": "sha512-j34Yv+O7J0h7vG0wNe3zjteaCz3ZNJ4fyNldte5+ByiqS/LanQpQYA08+Srvtb2LCI177E9pJHQ4o0UBxIhPUg==", "requires": { "@emotion/hash": "^0.8.0", + "@rocket.chat/memo": "^0.6.3-dev.180+2425c045", "stylis": "^4.0.6" }, "dependencies": { @@ -5936,9 +5937,9 @@ } }, "@rocket.chat/emitter": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/emitter/-/emitter-0.21.0.tgz", - "integrity": "sha512-yEvQYAQhYzbjlqUu3uckXZP3bxL046s2pW41mdptKhDIn6d5Zb6DEN1F7Gmm8myXxibUAIqclEoPK/T8mZGZhw==" + "version": "0.6.3-dev.185", + "resolved": "https://registry.npmjs.org/@rocket.chat/emitter/-/emitter-0.6.3-dev.185.tgz", + "integrity": "sha512-23TNzv+sS8cDT1MQl402QVsI4OEcnChtOhru6TyQqCndfpvBBObmiATgxFnClA6HQA5pXt8qMGxUl/UXDXKs0A==" }, "@rocket.chat/eslint-config": { "version": "0.3.0", @@ -5950,49 +5951,60 @@ } }, "@rocket.chat/fuselage": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.21.0.tgz", - "integrity": "sha512-CT0FyBsjsu0wNuI41CiUd9dldWk8qUdjn9iwxv7oL+TjrtbSpO0AFDpA6g9v1AE3GUNWEneko0OPqUXITDK1FA==", + "version": "0.6.3-dev.188", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.6.3-dev.188.tgz", + "integrity": "sha512-a0XGJ4uayUUsdk7r5aAEdaXa5CmT+Wsx5B3rv4GJqOYGq5NEFzGHxssWaRd9PPVWDd/USYALMlOKqJSxKViSlw==", "requires": { "@rocket.chat/css-in-js": "^0.21.0", "@rocket.chat/fuselage-tokens": "^0.21.0", + "@rocket.chat/memo": "^0.6.3-dev.180", "invariant": "^2.2.4", "react-keyed-flatten-children": "^1.2.0" }, "dependencies": { - "@rocket.chat/fuselage-tokens": { + "@rocket.chat/css-in-js": { "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.21.0.tgz", - "integrity": "sha512-gVzQHhUsZSLbIkwGi8f1KpsTepkmtwHs7hl1gGr0HrnI4eYhBWpMOEjdiH3czhPuoF/O4C8QjdpDrktIuwkVNQ==" + "resolved": "https://registry.npmjs.org/@rocket.chat/css-in-js/-/css-in-js-0.21.0.tgz", + "integrity": "sha512-jV1VY5nmUEy1gFtu9ygW1H0qMlyZYBRBTlFn/qT20Ynhqj5FUTlRO0iva7bZf689j8ljdhNTVMEE/OiCF3xK2w==", + "requires": { + "@emotion/hash": "^0.8.0", + "stylis": "^4.0.6" + } + }, + "stylis": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.7.tgz", + "integrity": "sha512-OFFeUXFgwnGOKvEXaSv0D0KQ5ADP0n6g3SVONx6I/85JzNZ3u50FRwB3lVIk1QO2HNdI75tbVzc4Z66Gdp9voA==" } } }, "@rocket.chat/fuselage-hooks": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.21.0.tgz", - "integrity": "sha512-oExYakP1FlqK97mFXMAQwquTRYrFiU5k273zQhav28FHMYq7bdHCqSJ79SncHkWhUwj0TZVRcXH8wMRBzf0igQ==", + "version": "0.6.3-dev.178", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.6.3-dev.178.tgz", + "integrity": "sha512-IBIs1zuMal2QT7AoWvAuhcYmq4J4KWazwjBx9Q0WudUQjLa/ipqwQmLEYVYEysfYI1OG4S1gPg9XDBY7TGvOsw==", "requires": { - "@rocket.chat/fuselage-tokens": "^0.21.0", + "@rocket.chat/fuselage-tokens": "^0.6.3-dev.178+dbd5b908", "use-subscription": "^1.4.1" }, "dependencies": { "@rocket.chat/fuselage-tokens": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.21.0.tgz", - "integrity": "sha512-gVzQHhUsZSLbIkwGi8f1KpsTepkmtwHs7hl1gGr0HrnI4eYhBWpMOEjdiH3czhPuoF/O4C8QjdpDrktIuwkVNQ==" + "version": "0.6.3-dev.178", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.6.3-dev.178.tgz", + "integrity": "sha512-P5NOTCDd4BVNX+CnaQXLJLTJDLbGZKFttjzNOVc7mlWqDxPZsDRPv/pnSP6RP38mWe2HwHVkQi2CDLcaJnGCcA==" } } }, "@rocket.chat/fuselage-polyfills": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-polyfills/-/fuselage-polyfills-0.21.0.tgz", - "integrity": "sha512-B27f5PSlIaRJbieyh0i+BpWN5mrouE9Jhetg7FD+F8/S/azqAmXZNzgDLh8QFF0qy6ne72Y6w3Hw9PfXCsVjag==", + "version": "0.6.3-dev.181", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-polyfills/-/fuselage-polyfills-0.6.3-dev.181.tgz", + "integrity": "sha512-fz49lo58YHmBVAHRKyOYSIwi5cPIkt+vkYQCs+lSJb2ou3ur92zQxjze3+86AwDpZz82iA9h156s/oj4+63RZQ==", "requires": { "@juggle/resize-observer": "^3.2.0", "clipboard-polyfill": "^3.0.1", "element-closest-polyfill": "^1.0.2", "focus-visible": "^5.2.0", - "focus-within-polyfill": "^5.1.0" + "focus-within-polyfill": "^5.1.0", + "new-event-polyfill": "^1.0.1" } }, "@rocket.chat/fuselage-tokens": { @@ -6001,22 +6013,36 @@ "integrity": "sha512-gVzQHhUsZSLbIkwGi8f1KpsTepkmtwHs7hl1gGr0HrnI4eYhBWpMOEjdiH3czhPuoF/O4C8QjdpDrktIuwkVNQ==" }, "@rocket.chat/fuselage-ui-kit": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-ui-kit/-/fuselage-ui-kit-0.21.0.tgz", - "integrity": "sha512-DYUit8hK8M0q2zP5WnQ6JkHD4yryaI705QgG4nXqPJE7mBftmhvGI3BBFAJo0BXwsnKApMuZCy+jhxPIGZCP2A==", + "version": "0.6.3-dev.184", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-ui-kit/-/fuselage-ui-kit-0.6.3-dev.184.tgz", + "integrity": "sha512-xO1FuY9bCKTOKOANbRi189Uq0j6+pVSKaV3E5C3TYvWuMhwE2Lfq4gbiH/uEn5cnrVdR1HOJaaskCxkraGqTVg==", "requires": { "@rocket.chat/fuselage-polyfills": "^0.21.0" + }, + "dependencies": { + "@rocket.chat/fuselage-polyfills": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-polyfills/-/fuselage-polyfills-0.21.0.tgz", + "integrity": "sha512-B27f5PSlIaRJbieyh0i+BpWN5mrouE9Jhetg7FD+F8/S/azqAmXZNzgDLh8QFF0qy6ne72Y6w3Hw9PfXCsVjag==", + "requires": { + "@juggle/resize-observer": "^3.2.0", + "clipboard-polyfill": "^3.0.1", + "element-closest-polyfill": "^1.0.2", + "focus-visible": "^5.2.0", + "focus-within-polyfill": "^5.1.0" + } + } } }, "@rocket.chat/icons": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.21.0.tgz", - "integrity": "sha512-Q6llwucmJX5f9+GfjrUW+bR/XVtxxpF0RrUaxaL1n+IRjUPl19GdQ5ycyzSuzI96UMzLqeV4fZxIUmxnN/GY+Q==" + "version": "0.6.3-dev.179", + "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.6.3-dev.179.tgz", + "integrity": "sha512-5NsrdR3C90Z0lR7OkgzHGqjDVPxho+LUjrv15F1L/uONp/WdQBo+Z3cGFXUgnLZf5ohX1BgTRRtzHtJPPr7QyQ==" }, "@rocket.chat/livechat": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@rocket.chat/livechat/-/livechat-1.7.6.tgz", - "integrity": "sha512-EcnACq6jXRc3+B0WEY1/jKHboEv03Zh9iRi4a52HD4y3TRkrNxrGivfQ5h2TravTm/HM8srjqjocC4w9f2u1Kg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/livechat/-/livechat-1.8.0.tgz", + "integrity": "sha512-ZSONa2ty9LYel9p8dx/Ba4mTxJn6YJaG5E61w6UcJ73cAkVvmLJCTp9pg6cf/FAHXGa/1g863qxlCA6pOYGFFw==", "dev": true, "requires": { "@kossnocorp/desvg": "^0.2.0", @@ -6045,28 +6071,34 @@ "dev": true }, "query-string": { - "version": "6.13.7", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.13.7.tgz", - "integrity": "sha512-CsGs8ZYb39zu0WLkeOhe0NMePqgYdAuCqxOYKDR5LVCytDZYMGx3Bb+xypvQvPHVPijRXB0HZNFllCzHRe4gEA==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.0.tgz", + "integrity": "sha512-In3o+lUxlgejoVJgwEdYtdxrmlL0cQWJXj0+kkI7RWVo7hg5AhFtybeKlC9Dpgbr8eOC4ydpEh8017WwyfzqVQ==", "dev": true, "requires": { "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", "split-on-first": "^1.0.0", "strict-uri-encode": "^2.0.0" } }, "whatwg-fetch": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz", - "integrity": "sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.1.tgz", + "integrity": "sha512-IEmN/ZfmMw6G1hgZpVd0LuZXOQDisrMOZrzYd5x3RAK4bMPlJohKUZWZ9t/QsTvH0dV9TbPDcc2OSuIDcihnHA==", "dev": true } } }, + "@rocket.chat/memo": { + "version": "0.6.3-dev.180", + "resolved": "https://registry.npmjs.org/@rocket.chat/memo/-/memo-0.6.3-dev.180.tgz", + "integrity": "sha512-3+zoOZW/f2/cwmjDAh8yXvGQvskopSR/QCAUmatqSAiMztFvkBljlVbSx1YUiq4y5t41dzM5m+MKYRZAEgAtLQ==" + }, "@rocket.chat/mp3-encoder": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/mp3-encoder/-/mp3-encoder-0.21.0.tgz", - "integrity": "sha512-+VnGBjI4LaWh0481oQrssnQUUnhNh1mGpvMWzxDQLBJmPx5M79y/b9Mo+9LEws6vJ/lDSSeRfsIlvtCaA6Y3cA==", + "version": "0.6.3-dev.178", + "resolved": "https://registry.npmjs.org/@rocket.chat/mp3-encoder/-/mp3-encoder-0.6.3-dev.178.tgz", + "integrity": "sha512-UKKHgaWUsmNKqGrYhkDbCoMJVEIVBYhkCKdajwGt+kpfO/G6SrJc4IlKH2fnYuMkUMzuBEMWvoq9kwSbWzTUrA==", "requires": { "lamejs": "git+https://github.com/zhuker/lamejs.git" } @@ -6114,9 +6146,9 @@ } }, "@rocket.chat/ui-kit": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.21.0.tgz", - "integrity": "sha512-vh3eRPXw8/yBSNCuDDzvNDb7fmylNCR1yxAjJQTGG/k0hR1Ji+gfn134WXyNxzGneHycr+/yrFxtt4lqsca1IQ==" + "version": "0.6.3-dev.178", + "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.6.3-dev.178.tgz", + "integrity": "sha512-T1grAJi+aCicKQMzDQ3r2zG1CB7FE9idY2QkXQoIjI0Vj4sTqPtzq57yE3AFkgzWxrzsMU/xHPhiEhPDqbsgOw==" }, "@samverschueren/stream-to-observable": { "version": "0.3.1", @@ -6188,6 +6220,13 @@ "p-retry": "^3.0.1", "retry": "^0.12.0", "ws": "^5.2.0" + }, + "dependencies": { + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + } } }, "@storybook/addon-actions": { @@ -10548,6 +10587,14 @@ "integrity": "sha512-EGlKlgMhnLt/cM4DbUSafFdrkeJoC9Mvnj0PUCU7tFmTjMjNRT957kXCx0wYm3JuEq4o4ZsS5vG+NlkM2DMd2A==", "dev": true }, + "@types/dompurify": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-2.2.1.tgz", + "integrity": "sha512-3JwbEeRVQ3n6+JgBW/hCdkydRk9/vWT+UEglcXEJqLJEcUganDH37zlfLznxPKTZZfDqA9K229l1qN458ubcOQ==", + "requires": { + "@types/trusted-types": "*" + } + }, "@types/ejson": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@types/ejson/-/ejson-2.1.2.tgz", @@ -10731,6 +10778,17 @@ "@types/sizzle": "*" } }, + "@types/jsdom": { + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.6.tgz", + "integrity": "sha512-yQA+HxknGtW9AkRTNyiSH3OKW5V+WzO8OPTdne99XwJkYC+KYxfNIcoJjeiSqP3V00PUUpFP6Myoo9wdIu78DQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/parse5": "*", + "@types/tough-cookie": "*" + } + }, "@types/json-schema": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", @@ -10770,6 +10828,11 @@ "@types/react": "*" } }, + "@types/marked": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-1.2.2.tgz", + "integrity": "sha512-wLfw1hnuuDYrFz97IzJja0pdVsC0oedtS4QsKH1/inyW9qkLQbXgMUqEQT0MVtUBx3twjWeInUfjQbhBVLECXw==" + }, "@types/md5-file": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/md5-file/-/md5-file-4.0.2.tgz", @@ -11126,6 +11189,11 @@ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==" }, + "@types/trusted-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.0.tgz", + "integrity": "sha512-I8MnZqNXsOLHsU111oHbn3khtvKMi5Bn4qVFsIWSJcCP1KKDiXX5AEw8UPk0nSopeC+Hvxt6yAy1/a5PailFqg==" + }, "@types/uglify-js": { "version": "3.11.1", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.1.tgz", @@ -11382,6 +11450,19 @@ } } }, + "@virtuoso.dev/react-urx": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@virtuoso.dev/react-urx/-/react-urx-0.2.3.tgz", + "integrity": "sha512-8U8Vjebv/Itkc2tXvLVystMXimsTAHaDSauqzy1xrSDvWybdWxkRmTOjykK8gYUfLVIDNuC2NHXOBSocNcAx8w==", + "requires": { + "@virtuoso.dev/urx": "^0.2.3" + } + }, + "@virtuoso.dev/urx": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@virtuoso.dev/urx/-/urx-0.2.3.tgz", + "integrity": "sha512-GrsPotsF4I9ZSmdGsy1Uv5qdsiOdbYYWbE0WGeTfWnB1BGS2ANSeprAROZFv9FEW+ZKTYbqGWCzrY8CdfJxn4Q==" + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -11606,7 +11687,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, "requires": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" @@ -11615,8 +11695,7 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" } } }, @@ -11629,8 +11708,12 @@ "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "add-px-to-style": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-px-to-style/-/add-px-to-style-1.0.0.tgz", + "integrity": "sha1-0ME1RB+oAUqBN5BFMQlvZ/KPJjo=" }, "address": { "version": "1.1.2", @@ -12233,20 +12316,6 @@ } } }, - "array-parallel": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz", - "integrity": "sha1-j3hTCJJu1apHjEfmTRszS2wMlH0=", - "dev": true, - "optional": true - }, - "array-series": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz", - "integrity": "sha1-3103v8XC7wdV4qpPkv6ufUtaly8=", - "dev": true, - "optional": true - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -14554,18 +14623,6 @@ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", "dev": true }, - "bignumber.js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", - "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=", - "dev": true - }, - "bin-pack": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bin-pack/-/bin-pack-1.0.1.tgz", - "integrity": "sha1-VW2jj4ZvKuvlbstF9ChJsISwxm8=", - "dev": true - }, "binary-extensions": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", @@ -14715,12 +14772,6 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" }, - "bmp-js": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.1.tgz", - "integrity": "sha1-WtAUcJnROp84qnuZrx1ueGZu038=", - "dev": true - }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", @@ -15370,27 +15421,12 @@ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, - "can-use-dom": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", - "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=" - }, "caniuse-lite": { "version": "1.0.30001170", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001170.tgz", "integrity": "sha512-Dd4d/+0tsK0UNLrZs3CvNukqalnVTRrxb5mcQm8rHL49t7V5ZaTygwXkrq+FB+dVDf++4ri8eJnFEJAB8332PA==", "dev": true }, - "canvas": { - "version": "1.3.12", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-1.3.12.tgz", - "integrity": "sha1-Dm17eNbJcwzxEp0ROLKNbVJmfpM=", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.1.0" - } - }, "capital-case": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.3.tgz", @@ -16883,9 +16919,9 @@ } }, "css-vars-ponyfill": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/css-vars-ponyfill/-/css-vars-ponyfill-2.4.1.tgz", - "integrity": "sha512-duoN5j10VJPdPUgo/H4PwvxhSxhJWgfymjeIGpTA7+KzQ2AmeFHnlKwrCYC9Ii+HUpC8BrIS5fhwcuaNOs/Hrg==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/css-vars-ponyfill/-/css-vars-ponyfill-2.4.3.tgz", + "integrity": "sha512-PBfIwjSu27s8kebu8taEYFM8ehVr8o2Qw4H4nSlJzHAJgcduAqxz4oPmYTJuzgauOKaWII9SHWStQ965fxsdZA==", "dev": true }, "css-what": { @@ -16902,14 +16938,12 @@ "cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" }, "cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, "requires": { "cssom": "~0.3.6" }, @@ -16917,8 +16951,7 @@ "cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" } } }, @@ -17228,7 +17261,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, "requires": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", @@ -17257,9 +17289,9 @@ "integrity": "sha512-lcWy3AXDRJOD7MplwZMmNSRM//kZtJaLz4n6D1P5z9wEmZGBKhJRBIr1Xs9KNQJmdXPblvgffynYji4iylUTcA==" }, "date-fns": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.16.1.tgz", - "integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.17.0.tgz", + "integrity": "sha512-ZEhqxUtEZeGgg9eHNSOAJ8O9xqSgiJdrL0lzSSfMF54x6KXWJiOH/xntSJ9YomJPrYH/p08t6gWjGWq1SDJlSA==", "dev": true }, "date-now": { @@ -17334,8 +17366,7 @@ "decimal.js": { "version": "10.2.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==" }, "decode-uri-component": { "version": "0.2.0", @@ -17607,6 +17638,16 @@ "utila": "~0.4" } }, + "dom-css": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dom-css/-/dom-css-2.1.0.tgz", + "integrity": "sha1-/bwtWgFdCj4YcuEUcrvQ57nmogI=", + "requires": { + "add-px-to-style": "1.0.0", + "prefix-style": "2.0.1", + "to-camel-case": "1.0.0" + } + }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", @@ -17644,7 +17685,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, "requires": { "webidl-conversions": "^5.0.0" }, @@ -17652,8 +17692,7 @@ "webidl-conversions": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" } } }, @@ -18732,9 +18771,9 @@ "integrity": "sha512-t0A2msp6BzOf+QAcI6z9XMktLj52OjGQg+8SJH6v5+3uxNpWYRR3wQmfA+6xtMU9kOC59qk9licus5dYcrYkMQ==" }, "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "events": { "version": "1.1.1", @@ -18798,12 +18837,6 @@ } } }, - "exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=", - "dev": true - }, "exit-hook": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", @@ -19445,6 +19478,12 @@ } } }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", + "dev": true + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -21621,37 +21660,6 @@ "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", "dev": true }, - "gm": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/gm/-/gm-1.22.0.tgz", - "integrity": "sha1-ZwvzaRrprkbK30cBLqEqxAqAJ8I=", - "dev": true, - "optional": true, - "requires": { - "array-parallel": "~0.1.3", - "array-series": "~0.1.5", - "debug": "~2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "optional": true, - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true, - "optional": true - } - } - }, "gonzales-pe": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", @@ -22219,7 +22227,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, "requires": { "whatwg-encoding": "^1.0.5" } @@ -23423,8 +23430,7 @@ "is-potential-custom-element-name": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", - "dev": true + "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=" }, "is-promise": { "version": "2.1.0", @@ -23929,59 +23935,11 @@ } } }, - "jimp": { - "version": "0.2.21", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.21.tgz", - "integrity": "sha1-USKWDNXVvEGWqFNF9mozt9ruTrM=", - "dev": true, - "requires": { - "bignumber.js": "^2.1.0", - "bmp-js": "0.0.1", - "es6-promise": "^3.0.2", - "exif-parser": "^0.1.9", - "file-type": "^3.1.0", - "jpeg-js": "^0.1.1", - "mime": "^1.3.4", - "pixelmatch": "^4.0.0", - "pngjs": "^2.1.0", - "read-chunk": "^1.0.1", - "request": "^2.65.0", - "stream-to-buffer": "^0.1.0", - "tinycolor2": "^1.1.2", - "url-regex": "^3.0.0" - }, - "dependencies": { - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true - }, - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - } - } - }, "jmespath": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" }, - "jpeg-js": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.1.2.tgz", - "integrity": "sha1-E1uZLAV1yYXPoPSUoyJ+0jhYPs4=", - "dev": true - }, "jquery": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", @@ -24036,7 +23994,6 @@ "version": "16.4.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", - "dev": true, "requires": { "abab": "^2.0.3", "acorn": "^7.1.1", @@ -24069,20 +24026,17 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "ip-regex": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -24110,7 +24064,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -24122,7 +24075,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, "requires": { "ip-regex": "^2.1.0", "psl": "^1.1.28", @@ -24130,10 +24082,9 @@ } }, "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", - "dev": true + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", + "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==" } } }, @@ -25074,11 +25025,6 @@ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -25154,11 +25100,6 @@ "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -25205,11 +25146,6 @@ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, "lodash.trim": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/lodash.trim/-/lodash.trim-4.5.1.tgz", @@ -27679,6 +27615,11 @@ "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, + "new-event-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/new-event-polyfill/-/new-event-polyfill-1.0.1.tgz", + "integrity": "sha512-cgNgv9yb3C8xIz9mn9dp98bHVcBv1uxyCq/7R2ZiRC+joyLpgBWvLNJMDzoECnGUC7EAxLEnXh1SxHE0nAQ6gA==" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -27902,67 +27843,6 @@ "asn1": "^0.2.4" } }, - "node-sprite-generator": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/node-sprite-generator/-/node-sprite-generator-0.10.2.tgz", - "integrity": "sha1-gE6QILk72N7MoQhVxgn0PeXbf8I=", - "dev": true, - "requires": { - "async": "1.2.0", - "bin-pack": "1.0.1", - "canvas": "1.3.12", - "glob": "5.0.10", - "gm": "1.22.0", - "jimp": "0.2.21", - "mkdirp": "0.5.1", - "underscore": "1.8.3" - }, - "dependencies": { - "async": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.2.0.tgz", - "integrity": "sha1-kClYD5PQWnyrJPUCyEcHrD71exA=", - "dev": true - }, - "glob": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.10.tgz", - "integrity": "sha1-PuNQMZ8x81LO9omaSPa2t4NMaJk=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - } - } - }, "nodejieba": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/nodejieba/-/nodejieba-2.4.1.tgz", @@ -28748,8 +28628,7 @@ "parse5": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" }, "parseurl": { "version": "1.3.3", @@ -28964,23 +28843,6 @@ "node-modules-regexp": "^1.0.0" } }, - "pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", - "dev": true, - "requires": { - "pngjs": "^3.0.0" - }, - "dependencies": { - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true - } - } - }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -29052,12 +28914,6 @@ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" }, - "pngjs": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-2.3.1.tgz", - "integrity": "sha1-EdHhK5y2TWPjDBQ6Mw9MH1Z9qF8=", - "dev": true - }, "pnp-webpack-plugin": { "version": "1.6.4", "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", @@ -29695,10 +29551,15 @@ } } }, + "postis": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postis/-/postis-2.2.0.tgz", + "integrity": "sha1-3F4yN2WYXd/cv9r8MUGpVprvdak=" + }, "preact": { - "version": "10.5.5", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.5.tgz", - "integrity": "sha512-5ONLNH1SXMzzbQoExZX4TELemNt+TEDb622xXFNfZngjjM9qtrzseJt+EfiUu4TZ6EJ95X5sE1ES4yqHFSIdhg==", + "version": "10.5.12", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.12.tgz", + "integrity": "sha512-r6siDkuD36oszwlCkcqDJCAKBQxGoeEGytw2DGMD5A/GGdu5Tymw+N2OBXwvOLxg6d1FeY8MgMV3cc5aVQo4Cg==", "dev": true }, "preact-i18nline": { @@ -29806,6 +29667,11 @@ "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=" }, + "prefix-style": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/prefix-style/-/prefix-style-2.0.1.tgz", + "integrity": "sha1-ZrupqHDP2jCKXcIOhekSCTLJWgY=" + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -30477,6 +30343,15 @@ } } }, + "rc-scrollbars": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rc-scrollbars/-/rc-scrollbars-1.1.2.tgz", + "integrity": "sha512-ClMeTPUPz+s+pqBW2LErRiUfgJ8vzLw0EQOMtMmg6SYVS0QfbIJGABsA7JJJhCOPmRYql99M6WqJzGQ6EuRfvQ==", + "requires": { + "dom-css": "^2.1.0", + "raf": "^3.4.1" + } + }, "react": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", @@ -30487,6 +30362,39 @@ "prop-types": "^15.6.2" } }, + "react-app-polyfill": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz", + "integrity": "sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==", + "requires": { + "core-js": "^3.5.0", + "object-assign": "^4.1.1", + "promise": "^8.0.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.3", + "whatwg-fetch": "^3.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.2.tgz", + "integrity": "sha512-FfApuSRgrR6G5s58casCBd9M2k+4ikuu4wbW6pJyYU7bd9zvFc9qf7vr5xmrZOhT9nn+8uwlH1oRR9jTnFoA3A==" + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "requires": { + "asap": "~2.0.6" + } + }, + "whatwg-fetch": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz", + "integrity": "sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A==" + } + } + }, "react-color": { "version": "2.19.3", "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", @@ -31234,20 +31142,17 @@ "use-latest": "^1.0.0" } }, - "react-window": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.5.tgz", - "integrity": "sha512-HeTwlNa37AFa8MDZFZOKcNEkuF2YflA0hpGPiTT9vR7OawEt+GZbfM6wqkBahD3D3pUjIabQYzsnY/BSJbgq6Q==", + "react-virtuoso": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-1.2.4.tgz", + "integrity": "sha512-EwLKCsMvL47XGYlByMYX0O/Rs1FANUOrIIXbiT6t6v33Rq4+xA79x4vjykNURQoyIUvriph/bMrIsyr038ZXIQ==", "requires": { - "@babel/runtime": "^7.0.0", - "memoize-one": ">=3.1.1 <6" + "@virtuoso.dev/react-urx": "^0.2.3", + "@virtuoso.dev/urx": "^0.2.3", + "react-app-polyfill": "^1.0.6", + "resize-observer-polyfill": "^1.5.1" } }, - "react-window-infinite-loader": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/react-window-infinite-loader/-/react-window-infinite-loader-1.0.5.tgz", - "integrity": "sha512-IcPIq8lADK3zsAcqoLqQGyduicqR6jWkiK2VUX5sKSI9X/rou6OWlOEexnGyujdNTG7hSG8OVBFEhLSDs4qrxg==" - }, "reactcss": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", @@ -31274,12 +31179,6 @@ } } }, - "read-chunk": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz", - "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=", - "dev": true - }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -31392,12 +31291,6 @@ "source-map": "~0.6.1" }, "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -32515,7 +32408,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, "requires": { "xmlchars": "^2.2.0" } @@ -33003,35 +32895,6 @@ "is-arrayish": "^0.3.1" } }, - "simplebar": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.3.0.tgz", - "integrity": "sha512-LgrGdIWpwHLLlI9HqfnGql62H/iZlF0KDZ7w3ZNbd2ZLwh9NKsODLHPzQgUlqQ8aZe7Y6/1xJMXK1PU5e810+w==", - "requires": { - "can-use-dom": "^0.1.0", - "core-js": "^3.0.1", - "lodash.debounce": "^4.0.8", - "lodash.memoize": "^4.1.2", - "lodash.throttle": "^4.1.1", - "resize-observer-polyfill": "^1.5.1" - }, - "dependencies": { - "core-js": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.0.tgz", - "integrity": "sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA==" - } - } - }, - "simplebar-react": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/simplebar-react/-/simplebar-react-2.3.0.tgz", - "integrity": "sha512-ZhWEe4UkshSJ9xPG1F/W58UMJdA3fzgtXGrYsya3hxdMbIYoKUKEhdBsqdMoeaLGyn/5dbMPqDLinkLeg0W0cQ==", - "requires": { - "prop-types": "^15.6.1", - "simplebar": "^5.3.0" - } - }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -33441,21 +33304,6 @@ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" }, - "stream-to": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-to/-/stream-to-0.2.2.tgz", - "integrity": "sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=", - "dev": true - }, - "stream-to-buffer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz", - "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=", - "dev": true, - "requires": { - "stream-to": "~0.2.0" - } - }, "streamsearch": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", @@ -35082,11 +34930,24 @@ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" }, + "to-camel-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-camel-case/-/to-camel-case-1.0.0.tgz", + "integrity": "sha1-GlYFSy+daWKYzmamCJcyK29CPkY=", + "requires": { + "to-space-case": "^1.0.0" + } + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, + "to-no-case": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", + "integrity": "sha1-xyKQcWTvaxeBMsjmmTAhLRtKoWo=" + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -35129,6 +34990,14 @@ "repeat-string": "^1.6.1" } }, + "to-space-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", + "integrity": "sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc=", + "requires": { + "to-no-case": "^1.0.0" + } + }, "toastr": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/toastr/-/toastr-2.1.4.tgz", @@ -35168,7 +35037,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, "requires": { "punycode": "^2.1.1" } @@ -36266,23 +36134,6 @@ "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.10.tgz", "integrity": "sha512-vSaPpaRgBrf41+Uky1myiSh6gpcbw8FpwHYnEy0abxndojOBnIs+yh/49gKYFLtUMP9qoNWjn6j9aUVy23Ie2A==" }, - "url-regex": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", - "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", - "dev": true, - "requires": { - "ip-regex": "^1.0.1" - }, - "dependencies": { - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", - "dev": true - } - } - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -36519,7 +36370,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, "requires": { "xml-name-validator": "^3.0.0" } @@ -36787,8 +36637,7 @@ "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" }, "webpack": { "version": "4.44.1", @@ -37056,7 +36905,6 @@ "version": "8.4.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "dev": true, "requires": { "lodash.sortby": "^4.7.0", "tr46": "^2.0.2", @@ -37327,8 +37175,7 @@ "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, "xmldom": { "version": "0.1.31", diff --git a/package.json b/package.json index 19cbf5138b61..6b46129c98a6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.11.1", + "version": "3.12.0", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" @@ -56,7 +56,7 @@ "@babel/register": "^7.12.1", "@octokit/rest": "^16.43.2", "@rocket.chat/eslint-config": "^0.3.0", - "@rocket.chat/livechat": "^1.7.6", + "@rocket.chat/livechat": "^1.8.0", "@settlin/spacebars-loader": "^1.0.8", "@storybook/addon-essentials": "^6.1.11", "@storybook/addons": "^6.1.11", @@ -67,6 +67,7 @@ "@types/chai-spies": "^1.0.1", "@types/clipboard": "^2.0.1", "@types/ejson": "^2.1.2", + "@types/jsdom": "^16.2.6", "@types/meteor": "^1.4.49", "@types/mocha": "^8.0.3", "@types/mock-require": "^2.0.0", @@ -98,14 +99,12 @@ "husky": "^1.2.0", "i18next": "^17.3.1", "inquirer": "^7.3.3", - "jsdom": "16.4.0", "jsdom-global": "3.0.2", "less-loader": "^5.0.0", "md5": "^2.3.0", "mocha": "^8.1.1", "mock-require": "^3.0.3", "mongo-unit": "^2.0.1", - "node-sprite-generator": "^0.10.2", "postcss": "^7.0.32", "postcss-custom-properties": "^9.1.1", "postcss-easy-import": "^3.0.0", @@ -135,21 +134,23 @@ "@nivo/heatmap": "^0.61.0", "@nivo/line": "^0.61.1", "@nivo/pie": "^0.61.1", - "@rocket.chat/apps-engine": "1.22.2", - "@rocket.chat/css-in-js": "^0.21.0", - "@rocket.chat/emitter": "^0.21.0", - "@rocket.chat/fuselage": "^0.21.0", - "@rocket.chat/fuselage-hooks": "^0.21.0", - "@rocket.chat/fuselage-polyfills": "^0.21.0", + "@rocket.chat/apps-engine": "1.23.0", + "@rocket.chat/css-in-js": "^0.6.3-dev.180", + "@rocket.chat/emitter": "^0.6.3-dev.185", + "@rocket.chat/fuselage": "^0.6.3-dev.188", + "@rocket.chat/fuselage-hooks": "^0.6.3-dev.178", + "@rocket.chat/fuselage-polyfills": "^0.6.3-dev.181", "@rocket.chat/fuselage-tokens": "^0.21.0", - "@rocket.chat/fuselage-ui-kit": "^0.21.0", - "@rocket.chat/icons": "^0.21.0", - "@rocket.chat/mp3-encoder": "^0.21.0", - "@rocket.chat/ui-kit": "^0.21.0", + "@rocket.chat/fuselage-ui-kit": "^0.6.3-dev.184", + "@rocket.chat/icons": "^0.6.3-dev.179", + "@rocket.chat/mp3-encoder": "^0.6.3-dev.178", + "@rocket.chat/ui-kit": "^0.6.3-dev.178", "@slack/client": "^4.12.0", + "@types/dompurify": "^2.2.1", "@types/fibers": "^3.1.0", "@types/imap": "^0.8.33", "@types/mailparser": "^3.0.0", + "@types/marked": "^1.2.2", "@types/mkdirp": "^1.0.1", "@types/nodemailer": "^6.4.0", "@types/string-strip-html": "^5.0.0", @@ -189,6 +190,7 @@ "emailreplyparser": "^0.0.5", "emojione": "^4.5.0", "eslint-plugin-import": "^2.22.0", + "eventemitter3": "^4.0.7", "express": "^4.17.1", "express-rate-limit": "^5.1.3", "fflate": "^0.5.3", @@ -207,6 +209,7 @@ "ip-range-check": "^0.0.2", "jquery": "^3.5.1", "jschardet": "^1.6.0", + "jsdom": "^16.4.0", "jsrsasign": "^8.0.24", "juice": "^5.2.0", "katex": "^0.11.1", @@ -240,19 +243,19 @@ "pdfjs-dist": "^2.4.456", "photoswipe": "^4.1.3", "poplib": "^0.1.7", + "postis": "^2.2.0", "prom-client": "^12.0.0", "prometheus-gc-stats": "^0.6.2", "querystring": "^0.2.0", "queue-fifo": "^0.2.6", + "rc-scrollbars": "^1.1.2", "react": "^16.13.1", "react-dom": "^16.13.1", "react-keyed-flatten-children": "^1.3.0", - "react-window": "^1.8.5", - "react-window-infinite-loader": "^1.0.5", + "react-virtuoso": "^1.2.4", "redis": "^2.8.0", "semver": "^5.7.1", "sharp": "^0.22.1", - "simplebar-react": "^2.3.0", "speakeasy": "^2.0.0", "stream-buffers": "^3.0.2", "string-strip-html": "^7.0.3", @@ -284,7 +287,7 @@ }, "husky": { "hooks": { - "pre-push": "meteor npm run lint && meteor npm run testunit" + "pre-push": "meteor npm run lint && meteor npm run testunit -- --exclude app/models/server/models/Sessions.tests.js" } }, "houston": { diff --git a/packages/rocketchat-i18n/i18n/af.i18n.json b/packages/rocketchat-i18n/i18n/af.i18n.json index 89925a68c1de..6cf993f0261f 100644 --- a/packages/rocketchat-i18n/i18n/af.i18n.json +++ b/packages/rocketchat-i18n/i18n/af.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "U mag die volgende plekhouers gebruik: [naam], [fname], [lname] vir die volle naam, voornaam of van die gebruiker se naam.[e-pos] vir die gebruiker se e-pos.[wagwoord] vir die gebruiker se wagwoord.[Site_Name] en [Site_URL] vir die Aansoek Naam en URL onderskeidelik.", "Accounts_UserAddedEmailSubject_Default": "Jy is by [Site_Name] bygevoeg", "Activate": "aktiveer", + "Active": "aktiewe", "Activity": "aktiwiteit", "Add": "Voeg", "Add_agent": "Voeg agent by", @@ -219,7 +220,6 @@ "Admin_Info": "Admin Info", "Administration": "administrasie", "Adult_images_are_not_allowed": "Volwasse beelde word nie toegelaat nie", - "Advocacy": "voorspraak", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Na OAuth2-verifikasie sal gebruikers na hierdie URL herlei word", "Agent": "Agent", "Agent_added": "Agent bygevoeg", @@ -549,7 +549,6 @@ "Connection_Closed": "Verbinding gesluit", "Connection_Reset": "Verbinding herstel", "Consulting": "Consulting", - "Consumer_Goods": "Verbruikersgoedere", "Contains_Security_Fixes": "Bevat Security Fixes", "Content": "inhoud", "Continue": "Aanhou", @@ -1198,6 +1197,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV-gidspad waarop die lêers opgelaai moet word", "FileUpload_Webdav_Username": "WebDAV gebruikersnaam", "Filter": "filter", + "Filters": "Filters", "Financial_Services": "Finansiële dienste", "First_Channel_After_Login": "Eerste kanaal na aanmelding", "Flags": "vlae", @@ -1265,8 +1265,6 @@ "Hash": "hash", "Header": "kop", "Header_and_Footer": "Opskrif en voetstuk", - "Healthcare_and_Pharmaceutical": "Healthcare / farmaseutiese", - "Help_Center": "Hulp Sentrum", "Helpers": "helpers", "Hex_Color_Preview": "Hex Kleurvoorskou", "Hidden": "verborge", @@ -1286,6 +1284,7 @@ "Highlights_How_To": "Om in kennis gestel te word wanneer iemand 'n woord of frase noem, voeg dit hier by. U kan woorde of frases met kommas skei. Merkwoorde is nie hoofletter sensitief nie.", "Highlights_List": "Merk woorde", "History": "geskiedenis", + "Home": "Tuis", "Host": "host", "hours": "ure", "Hours": "Ure", @@ -2045,7 +2044,6 @@ "Public": "openbare", "Public_Channel": "Publieke kanaal", "Public_Community": "Openbare Gemeenskap", - "Public_Relations": "Publieke verhoudings", "Push": "druk", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2544,7 +2542,6 @@ "Tokens_Required_Input_Placeholder": "Tokens bate name", "Topic": "onderwerp", "Total_messages": "Totale boodskappe", - "Tourism": "toerisme", "Transcript_Enabled": "Vra die besoeker as hulle 'n transkripsie wil hê nadat die klets gesluit is", "Transcript_message": "Boodskap om te wys wanneer jy oor Transcript vra", "Transcript_of_your_livechat_conversation": "Transkripsie van jou livechat-gesprek.", diff --git a/packages/rocketchat-i18n/i18n/ar.i18n.json b/packages/rocketchat-i18n/i18n/ar.i18n.json index eb123f7613b7..a4f84a9b592b 100644 --- a/packages/rocketchat-i18n/i18n/ar.i18n.json +++ b/packages/rocketchat-i18n/i18n/ar.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "يمكنك استخدام العناصر النائبة التالية: [name]، [fname]، [lname] لاسم المستخدم الكامل أو الاسم الأول أو اسم العائلة، على التوالي. [email] للبريد الإلكتروني الخاص بالمستخدم. [password] لكلمة المرور الخاصة بالمستخدم. [Site_Name] و [Site_URL] لاسم التطبيق وعنوان URL على التوالي. ", "Accounts_UserAddedEmailSubject_Default": "لقد تم إضافتك إلى [Site_Name]", "Activate": "تفعيل", + "Active": "نشطة", "Activity": "أنشطة", "Add": "إضافة", "Add_agent": "أضف وكيل", @@ -219,7 +220,6 @@ "Admin_Info": "معلومات المسؤول", "Administration": "الإدارة", "Adult_images_are_not_allowed": "لا يسمح بالصور للبالغين", - "Advocacy": "مرافعة", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "بعد المصادقة في OAuth2، سيتم إعادة توجيه المستخدمين إلى هذا الرابط", "Agent": "الموظف", "Agent_added": "تمت إضافة الوكيل", @@ -549,7 +549,6 @@ "Connection_Closed": "اتصال مغلقة", "Connection_Reset": "اعادة ضبط الاتصال", "Consulting": "الاستشارات", - "Consumer_Goods": "بضائع المستهلكين", "Contains_Security_Fixes": "يحتوي على إصلاحات الأمان", "Content": "المحتوى", "Continue": "استمر", @@ -1196,6 +1195,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "مسار مجلد WebDAV الذي يجب أن يتم تحميل الملفات إليه", "FileUpload_Webdav_Username": "اسم مستخدم WebDAV", "Filter": "فلتر", + "Filters": "المرشحات", "Financial_Services": "الخدمات المالية", "First_Channel_After_Login": "القناة الأولى بعد تسجيل الدخول", "Flags": "أعلام", @@ -1263,8 +1263,6 @@ "Hash": "مزيج", "Header": "رأس", "Header_and_Footer": "الترويسة والتذييل", - "Healthcare_and_Pharmaceutical": "الرعاية الصحية / الدوائية", - "Help_Center": "مركز المساعدة", "Helpers": "المساعدون", "Hex_Color_Preview": "معاينة اللون السداسي", "Hidden": "مخفي", @@ -1284,6 +1282,7 @@ "Highlights_How_To": "إذا أردت أن يتم تنبيهك عندما يذكر احدهم كلمة ما أضفها هنا. قم بفصل الكلمات بفاصلة , الكلمات الأعجمية المظللة لا تتأثر بحالة الحرف (صغير أو كبير).", "Highlights_List": "تظليل الكلمات", "History": "تاريخ", + "Home": "الصفحة الرئيسية", "Host": "مضيف", "hours": "ساعة", "Hours": "ساعات", @@ -2043,7 +2042,6 @@ "Public": "عامة", "Public_Channel": "قناة عامة", "Public_Community": "المجتمع العام", - "Public_Relations": "العلاقات العامة", "Push": "إدفع", "Push_apn_cert": "شهادة APN", "Push_apn_dev_cert": "شهادة المطور APN", @@ -2538,7 +2536,6 @@ "Tokens_Required_Input_Placeholder": "أسماء أصول الرموز المميزة", "Topic": "الموضوع", "Total_messages": "مجموع الرسائل", - "Tourism": "السياحة", "Transcript_Enabled": "سؤال المستخدم إذا أراد تحويل الدردشة لنص كتابي قبل الإغلاق", "Transcript_message": "رسالة إلى إظهار عندما يسأل عن النص", "Transcript_of_your_livechat_conversation": "نص المحادثة المباشرة.", diff --git a/packages/rocketchat-i18n/i18n/az.i18n.json b/packages/rocketchat-i18n/i18n/az.i18n.json index fa13e89f7637..a55e912b00a0 100644 --- a/packages/rocketchat-i18n/i18n/az.i18n.json +++ b/packages/rocketchat-i18n/i18n/az.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Aşağıdakı yer tutuculardan istifadə edə bilərsiniz: [ad], [fname], [lname] istifadəçinin tam adı, soyadı və soyadı üçün müvafiq olaraq. Istifadəçinin e-poçtu üçün[email]. Istifadəçi şifrəsi üçün[parol].[Site_Name] və [Site_URL] üçün ərizə adı və URL sırasıyla.", "Accounts_UserAddedEmailSubject_Default": "Siz [Site_Name]", "Activate": "Aktivləşdir", + "Active": "Aktivdir", "Activity": "Fəaliyyət", "Add": "Əlavə et", "Add_agent": "Agenti əlavə edin", @@ -219,7 +220,6 @@ "Admin_Info": "Admin məlumatı", "Administration": "İdarə", "Adult_images_are_not_allowed": "Yetkin görünüşlərə icazə verilmir", - "Advocacy": "Vəkillik", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "OAuth2 doğrulamasından sonra, istifadəçilər bu URL-ə yönəldiləcəklər", "Agent": "Agent", "Agent_added": "Agent əlavə etdi", @@ -549,7 +549,6 @@ "Connection_Closed": "Bağlantı bağlanıb", "Connection_Reset": "Bağlantı sıfırlandı", "Consulting": "Məsləhətçilik", - "Consumer_Goods": "İstehlak malları", "Contains_Security_Fixes": "Təhlükəsizlik Düzeltmelerini ehtiva edir", "Content": "Məzmun", "Continue": "Davam edin", @@ -1198,6 +1197,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Faylların yüklənməsini tələb edən WebDAV qovluq yoludur", "FileUpload_Webdav_Username": "WebDAV İstifadəçi adı", "Filter": "Filtrə", + "Filters": "Filtrlər", "Financial_Services": "Maliyyə xidmətləri", "First_Channel_After_Login": "Girişdən Sonra Birinci Kanal", "Flags": "Bayraqlar", @@ -1265,8 +1265,6 @@ "Hash": "Haş", "Header": "Başlıq", "Header_and_Footer": "Üstbilgi və Footer", - "Healthcare_and_Pharmaceutical": "Səhiyyə / Əczaçılıq", - "Help_Center": "Kömək Mərkəzi", "Helpers": "Köməkçilər", "Hex_Color_Preview": "Hex Color Preview", "Hidden": "Gizli", @@ -1286,6 +1284,7 @@ "Highlights_How_To": "Kimsə bir söz və ya söz söylədiyində xəbərdar olmaq üçün buraya əlavə edin. Sözləri və ya ifadələri virgüllə ayıra bilərsiniz. Vurgulu sözlər, həssasdır.", "Highlights_List": "Sözləri vurgulayın", "History": "Tarix", + "Home": "Ev", "Host": "Ev sahibi", "hours": "saat", "Hours": "Saat", @@ -2045,7 +2044,6 @@ "Public": "İctimai", "Public_Channel": "İctimai kanal", "Public_Community": "İctimai Birlik", - "Public_Relations": "İctimaiyyətlə Əlaqələr", "Push": "Push", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2544,7 +2542,6 @@ "Tokens_Required_Input_Placeholder": "Tokens aktivin adları", "Topic": "Mövzu", "Total_messages": "Ümumi mesajlar", - "Tourism": "Turizm", "Transcript_Enabled": "Görüşəndən sonra söhbət etmək istərdiklərini soruş", "Transcript_message": "Transkript haqqında soruşanda göstərmək üçün mesaj", "Transcript_of_your_livechat_conversation": "Sizin livechat söhbətinizin transkripti.", diff --git a/packages/rocketchat-i18n/i18n/be-BY.i18n.json b/packages/rocketchat-i18n/i18n/be-BY.i18n.json index a951132b7383..b44145415455 100644 --- a/packages/rocketchat-i18n/i18n/be-BY.i18n.json +++ b/packages/rocketchat-i18n/i18n/be-BY.i18n.json @@ -190,6 +190,7 @@ "Accounts_UserAddedEmail_Description": "Вы можаце выкарыстоўваць наступныя запаўняльнікі: [імя], [імя_файла], [LNAME] поўнае імя карыстальніка, імя або прозвішча, адпаведна.[пошта] для электроннай пошты карыстальніка.[пароль] для пароля карыстальніка.[site_name] і [site_url] для імя прыкладання і URL адпаведна.", "Accounts_UserAddedEmailSubject_Default": "Вы былі дададзеныя ў [site_name]", "Activate": "Актываваць", + "Active": "актыўны", "Activity": "Дзейнасць", "Add": "Дадаць", "Add_agent": "дадаць агент", @@ -221,7 +222,6 @@ "Admin_Info": "адмін інфармацыя", "Administration": "адміністрацыя", "Adult_images_are_not_allowed": "Выявы для дарослых не дапускаюцца", - "Advocacy": "адвакатура", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Пасля аўтэнтыфікацыі oauth2, карыстальнікі будуць перанакіроўвацца на гэты URL", "Agent": "агент", "Agent_added": "агент дадаў", @@ -564,7 +564,6 @@ "Connection_Closed": "Сувязь спынена", "Connection_Reset": "скід падлучэння", "Consulting": "кансалтынг", - "Consumer_Goods": "спажывецкія тавары", "Contact": "Кантакт", "Contains_Security_Fixes": "Змяшчае выпраўленні бяспекі", "Content": "змест", @@ -1211,6 +1210,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Шлях да тэчцы WebDAV, які файлы павінны быць загружаныя", "FileUpload_Webdav_Username": "WebDAV Імя карыстальніка", "Filter": "фільтр", + "Filters": "Фільтры", "Financial_Services": "Фінансавыя паслугі", "First_Channel_After_Login": "Першы канал пасля ўваходу ў сістэму", "Flags": "сцягі", @@ -1278,8 +1278,6 @@ "Hash": "гашыш", "Header": "загаловак", "Header_and_Footer": "Верхнія і ніжнія калантытула", - "Healthcare_and_Pharmaceutical": "Здароўе / Фармацэўтычныя", - "Help_Center": "даведачны цэнтр", "Helpers": "памочнікі", "Hex_Color_Preview": "Hex Color Preview", "Hidden": "схаваны", @@ -1299,6 +1297,7 @@ "Highlights_How_To": "Каб атрымліваць апавяшчэнні, калі нехта згадвае слова або фразу, дадайце яго тут. Вы можаце падзяліць слова ці фразы косак. Вылучыце слова не адчувальныя да рэгістра.", "Highlights_List": "вылучэнне слоў", "History": "гісторыя", + "Home": "Дадому", "Host": "гаспадар", "hours": "гадзін", "Hours": "гадзін", @@ -2058,7 +2057,6 @@ "Public": "грамадскага", "Public_Channel": "грамадскі канал", "Public_Community": "адкрытае супольнасць", - "Public_Relations": "сувязі з грамадскасцю", "Push": "націск", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2559,7 +2557,6 @@ "Tokens_Required_Input_Placeholder": "Лексемы імёны актываў", "Topic": "тэма", "Total_messages": "Усяго паведамленняў", - "Tourism": "турызм", "Transcript_Enabled": "Спытаеце наведвальнік, калі яны хацелі стэнаграму Пасля чата Закрыта", "Transcript_message": "Паведамленне Паказаць Пытаючыся Аб Стэнаграма", "Transcript_of_your_livechat_conversation": "Стэнаграма Вашага Livechat размовы.", diff --git a/packages/rocketchat-i18n/i18n/bg.i18n.json b/packages/rocketchat-i18n/i18n/bg.i18n.json index 9327faa4228f..1e551e856bcd 100644 --- a/packages/rocketchat-i18n/i18n/bg.i18n.json +++ b/packages/rocketchat-i18n/i18n/bg.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Можете да използвате следните заместващи символи: [име], [fname], [име] за пълно име, потребителско име или фамилия на потребителя.[имейл] за имейла на потребителя.[парола] за паролата на потребителя.[Site_Name] и [Site_URL] съответно за името на приложението и URL адреса.", "Accounts_UserAddedEmailSubject_Default": "Бяхте добавени към [Site_Name]", "Activate": "Активирайте", + "Active": "Активен", "Activity": "Дейност", "Add": "Добави", "Add_agent": "Добави агент", @@ -219,7 +220,6 @@ "Admin_Info": "Администраторска информация", "Administration": "администрация", "Adult_images_are_not_allowed": "Възрастните изображения не са разрешени", - "Advocacy": "застъпничество", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "След удостоверяване с OAuth2 потребителите ще бъдат пренасочени към този URL адрес", "Agent": "агент", "Agent_added": "Добави агент", @@ -549,7 +549,6 @@ "Connection_Closed": "Връзката е затворена", "Connection_Reset": "Рестартиране на връзката", "Consulting": "консултативен", - "Consumer_Goods": "Потребителски стоки", "Contains_Security_Fixes": "Съдържа корекции за сигурност", "Content": "Съдържание", "Continue": "Продължавам", @@ -1198,6 +1197,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Папката на WebDAV папките, към която трябва да бъдат качени файловете", "FileUpload_Webdav_Username": "WebDAV потребителско име", "Filter": "филтър", + "Filters": "Филтри", "Financial_Services": "Финансови услуги", "First_Channel_After_Login": "Първи канал след вход", "Flags": "Знамена", @@ -1265,8 +1265,6 @@ "Hash": "хашиш", "Header": "удар с глава", "Header_and_Footer": "Заглавие и долен колонтитул", - "Healthcare_and_Pharmaceutical": "Healthcare / Фармацевтичен", - "Help_Center": "Помощен център", "Helpers": "Помощници", "Hex_Color_Preview": "Hex Color Preview", "Hidden": "скрит", @@ -2044,7 +2042,6 @@ "Public": "Публичен", "Public_Channel": "Обществен канал", "Public_Community": "Обществена общност", - "Public_Relations": "Връзки с обществеността", "Push": "Натисни", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2543,7 +2540,6 @@ "Tokens_Required_Input_Placeholder": "Име на активите на тонове", "Topic": "тема", "Total_messages": "Общо съобщения", - "Tourism": "туризъм", "Transcript_Enabled": "Попитайте посетителя, ако желаят препис след приключване на чата", "Transcript_message": "Съобщение за показване при поискване за препис", "Transcript_of_your_livechat_conversation": "Препис на вашите разговори.", diff --git a/packages/rocketchat-i18n/i18n/bn-BD.i18n.json b/packages/rocketchat-i18n/i18n/bn-BD.i18n.json index 17f031607e49..d6405471608b 100644 --- a/packages/rocketchat-i18n/i18n/bn-BD.i18n.json +++ b/packages/rocketchat-i18n/i18n/bn-BD.i18n.json @@ -31,6 +31,8 @@ "Accounts_AvatarBlockUnauthenticatedAccess": "অবতারগুলিতে অযৌক্তিক অ্যাক্সেসটিকে অবরুদ্ধ করুন", "Accounts_ForgetUserSessionOnWindowClose": "উইন্ডো বন্ধে ব্যবহারকারী সেশনটি ভুলে যান", "Edit_Status": "স্থিতি সম্পাদনা করুন", + "Filters": "ছাঁকনি", + "Home": "বাড়ি", "Login_Logs_UserAgent": "ব্যর্থ লগইন প্রচেষ্টা লগগুলিতে ব্যবহারকারীর এজেন্ট প্রদর্শন করুন", "Looked_for": "অনুসন্ধান করা" } \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/bn-IN.i18n.json b/packages/rocketchat-i18n/i18n/bn-IN.i18n.json new file mode 100644 index 000000000000..6f31cf5a2e62 --- /dev/null +++ b/packages/rocketchat-i18n/i18n/bn-IN.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/bs.i18n.json b/packages/rocketchat-i18n/i18n/bs.i18n.json index 2f20d1cd6eb0..f422e6869f07 100644 --- a/packages/rocketchat-i18n/i18n/bs.i18n.json +++ b/packages/rocketchat-i18n/i18n/bs.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Možete koristiti sljedeće oznake: [name], [fname], [lname] za korisničko ime, ime, te prezime. [email] za email korisnika. [password] korisnikovu lozinku. [Site_Name] i [Site_URL] za ime i URL stranice. ", "Accounts_UserAddedEmailSubject_Default": "Dodani ste na [Site_Name]", "Activate": "Aktiviraj", + "Active": "Aktivno", "Activity": "Aktivnost", "Add": "Dodaj", "Add_agent": "Dodaj agenta", @@ -219,7 +220,6 @@ "Admin_Info": "Informacije o administratoru", "Administration": "Administracija", "Adult_images_are_not_allowed": "Slike za odrasle nisu dopuštene", - "Advocacy": "advokatura", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Nakon OAuth2 autentifikacije korisnici će biti preusmjereni na ovaj URL", "Agent": "Agent", "Agent_added": "Agent je dodan", @@ -549,7 +549,6 @@ "Connection_Closed": "Veza je zatvorena", "Connection_Reset": "Ponovno postavljanje veze", "Consulting": "savjetodavni", - "Consumer_Goods": "Potrošačka dobra", "Contains_Security_Fixes": "Sadrži sigurnosne popravke", "Content": "Sadržaj", "Continue": "Nastaviti", @@ -1196,6 +1195,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Putem mape WebDAV u koju bi se datoteke trebale prenijeti", "FileUpload_Webdav_Username": "WebDAV korisničko ime", "Filter": "Filter", + "Filters": "Filteri", "Financial_Services": "Financijske usluge", "First_Channel_After_Login": "Prvi kanal nakon prijave", "Flags": "Flags", @@ -1263,8 +1263,6 @@ "Hash": "Hash", "Header": "Zaglavlje", "Header_and_Footer": "Zaglavlje i podnožje", - "Healthcare_and_Pharmaceutical": "Zdravstvene / Farmaceutska", - "Help_Center": "Centar za pomoć", "Helpers": "pomagači", "Hex_Color_Preview": "Pregled Hex Boja", "Hidden": "Skriveno", @@ -1284,6 +1282,7 @@ "Highlights_How_To": "Kako bi bili obaviješteni kada netko spomene neku riječ i li frazu, dodajte ju ovdje. Riječi i fraze odvojite zarezima. Ne ovisi kapitalizaciji.", "Highlights_List": "Označite riječi", "History": "Povijest", + "Home": "Dom", "Host": "Domaćin", "hours": "sati", "Hours": "Sati", @@ -2042,7 +2041,6 @@ "Public": "Javni", "Public_Channel": "Javni kanal", "Public_Community": "Javna zajednica", - "Public_Relations": "Odnosi s javnošću", "Push": "Push obavijesti", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2541,7 +2539,6 @@ "Tokens_Required_Input_Placeholder": "Imena naziva žetona", "Topic": "Tema", "Total_messages": "Ukupno poruka", - "Tourism": "Turizam", "Transcript_Enabled": "Pitaj posjetitelja bi li htio transkript nakon što je chat zatvoren", "Transcript_message": "Poruka koja će biti prikazana kad korisnik zatraži transkript", "Transcript_of_your_livechat_conversation": "Transkript tvog razgovora", diff --git a/packages/rocketchat-i18n/i18n/ca.i18n.json b/packages/rocketchat-i18n/i18n/ca.i18n.json index e44aa2ebe55a..2fe0efc9abd5 100644 --- a/packages/rocketchat-i18n/i18n/ca.i18n.json +++ b/packages/rocketchat-i18n/i18n/ca.i18n.json @@ -1,10 +1,12 @@ { "403": "Prohibit", "500": "Error intern del servidor", - "__count__empty_rooms_will_be_removed_automatically": "Les __count__ habitacions buides seran eliminades automàticament.", - "__count__empty_rooms_will_be_removed_automatically__rooms__": "Les __count__ habitacions buides seran eliminades automàticament: __rooms__.", + "__count__empty_rooms_will_be_removed_automatically": "__count__ sales buides seran eliminades automàticament.", + "__count__empty_rooms_will_be_removed_automatically__rooms__": "__count__ sales buides seran eliminades automàticament: __rooms__.", "__username__is_no_longer__role__defined_by__user_by_": "__username__ ja no és __role__ (per __user_by__)", "__username__was_set__role__by__user_by_": "Ara __username__ és __role__ (per __user_by__)", + "This_room_encryption_has_been_enabled_by__username_": "El xifrat d'aquesta sala ha estat habilitat per __username__", + "This_room_encryption_has_been_disabled_by__username_": "El xifrat d'aquesta sala ha estat desactivat per __username__", "@username": "@usuari", "@username_message": "@usuari ", "#channel": "#canal", @@ -14,12 +16,12 @@ "2_Erros_Information_and_Debug": "2 - Errors, informació i depuració", "12_Hour": "Rellotge de 12 hores", "24_Hour": "Rellotge de 24 hores", - "A_new_owner_will_be_assigned_automatically_to__count__rooms": "Un nou propietari serà assignat automàticament a les habitacions __count__.", + "A_new_owner_will_be_assigned_automatically_to__count__rooms": "Un nou propietari serà assignat automàticament a les __count__ sales.", "A_new_owner_will_be_assigned_automatically_to_the__roomName__room": "Un nou propietari s'assignarà automàticament a la sala __roomName__.", - "A_new_owner_will_be_assigned_automatically_to_those__count__rooms__rooms__": "S'assignarà automàticament un nou propietari a les habitacions __count__: __rooms__.", + "A_new_owner_will_be_assigned_automatically_to_those__count__rooms__rooms__": "S'assignarà automàticament un nou propietari a les __count__ sales: __rooms__.", "Accept": "Accepta", - "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Accepteu les sol·licituds omnicanals entrants, fins i tot si no hi ha agents en línia", - "Accept_new_livechats_when_agent_is_idle": "Accepteu les noves sol·licituds omnichannel quan l'agent està inactiu", + "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Acceptar sol·licituds entrants de LiveChat encara que no hagi agents en línia", + "Accept_new_livechats_when_agent_is_idle": "Accepteu les noves sol·licituds LiveChat quan l'agent està inactiu", "Accept_with_no_online_agents": "Acceptar sense agents en línia", "Access_not_authorized": "Accés no autoritzat", "Access_Token_URL": "URL Access Token", @@ -42,14 +44,15 @@ "Accounts_AllowEmailChange": "Permetre el canvi d'adreça de correu electrònic", "Accounts_AllowEmailNotifications": "Permet les notificacions per correu electrònic", "Accounts_AllowPasswordChange": "Permetre el canvi de contrasenya", + "Accounts_AllowPasswordChangeForOAuthUsers": "Permet canviar de contrasenya per als usuaris de OAuth", "Accounts_AllowRealNameChange": "Permet canvi de nom", "Accounts_AllowUserAvatarChange": "Permetre modificar l'avatar d'usuari", "Accounts_AllowUsernameChange": "Permetre modificar el nom d'usuari", "Accounts_AllowUserProfileChange": "Permetre modificar el perfil d'usuari", "Accounts_AllowUserStatusMessageChange": "Permet el missatge d'estat personalitzat", - "Accounts_AvatarBlockUnauthenticatedAccess": "Bloqueja l'accés sense autenticar als avatars", - "Accounts_AvatarCacheTime": "Avatar cache time", - "Accounts_AvatarCacheTime_description": "Nombre de segons que el protocol http es diu que emmagatzema en memòria cau les imatges de l'avatar.", + "Accounts_AvatarBlockUnauthenticatedAccess": "Bloquejar l'accés no autenticat als avatars", + "Accounts_AvatarCacheTime": "Temps de caché d'Avatar", + "Accounts_AvatarCacheTime_description": "Nombre de segons que se li diu a el protocol http que emmagatzemi en memòria cau les imatges d'avatar.", "Accounts_AvatarExternalProviderUrl": "URL del proveïdor extern d'avatar", "Accounts_AvatarExternalProviderUrl_Description": "Exemple: `https://acme.com/api/v1/ {username}`", "Accounts_AvatarResize": "Canviar la mida dels avatars", @@ -58,13 +61,13 @@ "Accounts_BlockedDomainsList_Description": "Llista de dominis bloquejats separada per comes", "Accounts_BlockedUsernameList": "Llista de noms d'usuari bloquejats", "Accounts_BlockedUsernameList_Description": "Llista separada per comes de noms d'usuari bloquejats (no distingeix majúscules/minúscules)", - "Accounts_CustomFields_Description": "Ha de ser un objecte JSON vàlid on les claus són els noms dels camps i contenen un diccionari amb les opcions del camp. Exemple:{\n \"role\": {\n \"type\": \"select\",\n \"defaultValue\": \"student\",\n \"options\": [\"teacher\", \"student\"],\n \"required\": true,\n \"modifyRecordField\": {\n \"array\": true,\n \"field\": \"roles\"\n }\n },\n \"twitter\": {\n \"type\": \"text\",\n \"required\": true,\n \"minLength\": 2,\n \"maxLength\": 10\n }\n} ", + "Accounts_CustomFields_Description": "Ha de ser un JSON vàlid, on les claus són els noms dels camps que contenen un diccionari de configuració de camps. Exemple:{\n \"role\": {\n \"type\": \"select\",\n \"defaultValue\": \"student\",\n \"options\": [\"teacher\", \"student\"],\n \"required\": true,\n \"modifyRecordField\": {\n \"array\": true,\n \"field\": \"roles\"\n }\n },\n \"twitter\": {\n \"type\": \"text\",\n \"required\": true,\n \"minLength\": 2,\n \"maxLength\": 10\n }\n} ", "Accounts_CustomFieldsToShowInUserInfo": "Camps personalitzats a mostrar a l'informació d'usuari", "Accounts_Default_User_Preferences": "Preferències d'usuari per defecte", - "Accounts_Default_User_Preferences_audioNotifications": "Notificacions d'àudio Alerta per defecte", + "Accounts_Default_User_Preferences_audioNotifications": "Alerta de notificacions d'àudio per defecte", "Accounts_Default_User_Preferences_desktopNotifications": "Alerta per defecte per a les notificacions d'escriptori", "Accounts_Default_User_Preferences_mobileNotifications": "Alerta per defecte notificacions mòbil", - "Accounts_Default_User_Preferences_not_available": "No s'han pogut recuperar les preferències dels usuaris, encara que encara no s'han configurat per l'usuari", + "Accounts_Default_User_Preferences_not_available": "No es van poder recuperar les preferències de l'usuari perquè l'usuari encara no les ha configurat", "Accounts_DefaultUsernamePrefixSuggestion": "Prefix suggerit per al nom d'usuari per defecte", "Accounts_denyUnverifiedEmail": "Denegar correu electrònic sense verificar", "Accounts_Directory_DefaultView": "Llistat de directoris per defecte", @@ -74,10 +77,10 @@ "Accounts_Email_Approved_Subject": "S'ha aprovat el compte", "Accounts_Email_Deactivated": "[nom]El vostre compte s'ha desactivat.", "Accounts_Email_Deactivated_Subject": "Compte desactivat", - "Accounts_EmailVerification": "Verificació de correu electrònic", + "Accounts_EmailVerification": "Permetre només que els usuaris verificats iniciïn sessió", "Accounts_EmailVerification_Description": "Assegura't que la configuració SMTP és correcta per fer servir aquesta funcionalitat", "Accounts_Enrollment_Email": "Missatge de correu electrònic d'inscripció", - "Accounts_Enrollment_Email_Default": "Benvingut a [Site_Name]Vés a [Site_URL] i prova la millor eina de programari lliure per a treball a distància disponible actualment!", + "Accounts_Enrollment_Email_Default": "Benvingut a [Site_Name]Vés a [Site_URL] i provi la millor solució de xat de codi obert disponible actualment!", "Accounts_Enrollment_Email_Description": "És possible utilitzar els marcadors: [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.", "Accounts_Enrollment_Email_Subject_Default": "Benvingut a [Site_Name]", "Accounts_ForgetUserSessionOnWindowClose": "Oblida la sessió d'usuari en tancar la finestra", @@ -87,24 +90,30 @@ "Accounts_iframe_url": "URL iframe", "Accounts_LoginExpiration": "Durada de sessió identificada (en dies)", "Accounts_ManuallyApproveNewUsers": "Aprovar manualment nous usuaris", - "Accounts_OAuth_Custom_Access_Token_Param": "Nom de paràmetre per la fitxa d'accés", + "Accounts_OAuth_Apple": "Iniciar sessió amb Apple", + "Accounts_OAuth_Custom_Access_Token_Param": "Nom de paràmetre per al token d'accés", "Accounts_OAuth_Custom_Authorize_Path": "Ruta d'autorització", "Accounts_OAuth_Custom_Avatar_Field": "Camp Avatar", "Accounts_OAuth_Custom_Button_Color": "Color del botó", "Accounts_OAuth_Custom_Button_Label_Color": "Color del text del botó", "Accounts_OAuth_Custom_Button_Label_Text": "Text del botó", + "Accounts_OAuth_Custom_Channel_Admin": "Mapa de grup de dades d'usuari", + "Accounts_OAuth_Custom_Channel_Map": "Mapa Channel de grup OAuth", + "Accounts_OAuth_Custom_Email_Field": "Camp de correu electrònic", "Accounts_OAuth_Custom_Enable": "Activa", + "Accounts_OAuth_Custom_Groups_Claim": "Camp de Rols / Grups per a l'assignació de canals", "Accounts_OAuth_Custom_id": "ID", "Accounts_OAuth_Custom_Identity_Path": "Ruta de la identitat", - "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Identificador de tovallers enviats via", + "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Token d'identitat enviat mitjançant", "Accounts_OAuth_Custom_Login_Style": "Estil d'entrada", - "Accounts_OAuth_Custom_Merge_Roles": "Combina els rols de SSO", + "Accounts_OAuth_Custom_Map_Channels": "Assignar rols / grups a canals", + "Accounts_OAuth_Custom_Merge_Roles": "Fusionar rols de SSO", "Accounts_OAuth_Custom_Merge_Users": "Uneix usuaris", "Accounts_OAuth_Custom_Name_Field": "Camp de nom", "Accounts_OAuth_Custom_Roles_Claim": "Nom del camp Rols / Grups", "Accounts_OAuth_Custom_Scope": "Àmbit (scope)", "Accounts_OAuth_Custom_Secret": "Secret", - "Accounts_OAuth_Custom_Show_Button_On_Login_Page": "Mostra el botó a la pàgina d'inici de sessió", + "Accounts_OAuth_Custom_Show_Button_On_Login_Page": "Mostra botó a la pàgina d'inici de sessió", "Accounts_OAuth_Custom_Token_Path": "Ruta del token", "Accounts_OAuth_Custom_Token_Sent_Via": "Token enviat via", "Accounts_OAuth_Custom_Username_Field": "Camp de nom d'usuari", @@ -128,7 +137,7 @@ "Accounts_OAuth_Gitlab_callback_url": "URL de retorn (callback) de GitLab", "Accounts_OAuth_Gitlab_id": "GitLab ID", "Accounts_OAuth_Gitlab_identity_path": "Ruta de la identitat", - "Accounts_OAuth_Gitlab_merge_users": "Uneix usuaris", + "Accounts_OAuth_Gitlab_merge_users": "Fusionar usuaris", "Accounts_OAuth_Gitlab_secret": "GitLab Client Secret", "Accounts_OAuth_Google": "Inici de sessió amb Google", "Accounts_OAuth_Google_callback_url": "URL de retorn (callback) de Google", @@ -143,8 +152,10 @@ "Accounts_OAuth_Meteor_id": "Meteor ID", "Accounts_OAuth_Meteor_secret": "Meteor Secret", "Accounts_OAuth_Nextcloud": "OAuth habilitat", - "Accounts_OAuth_Nextcloud_callback_url": "URL de trucada Nextcloud", + "Accounts_OAuth_Nextcloud_callback_url": "URL de devolució de trucada de Nextcloud", + "Accounts_OAuth_Nextcloud_id": "ID de Nextcloud", "Accounts_OAuth_Nextcloud_secret": "Client Secret", + "Accounts_OAuth_Nextcloud_URL": "URL del servidor de Nextcloud", "Accounts_OAuth_Proxy_host": "Host del servidor intermediari (proxy)", "Accounts_OAuth_Proxy_services": "Serveis del servidor intermediari (proxy)", "Accounts_OAuth_Tokenpass": "Tokenpass Login", @@ -160,35 +171,38 @@ "Accounts_OAuth_Wordpress_callback_url": "URL de retorn (callback) de WordPress", "Accounts_OAuth_Wordpress_id": "WordPress ID", "Accounts_OAuth_Wordpress_identity_path": "Ruta de la identitat", - "Accounts_OAuth_Wordpress_identity_token_sent_via": "Identificador de tovallers enviats via", + "Accounts_OAuth_Wordpress_identity_token_sent_via": "Token d'identitat enviat mitjançant", "Accounts_OAuth_Wordpress_scope": "Scope", "Accounts_OAuth_Wordpress_secret": "WordPress Secret", "Accounts_OAuth_Wordpress_server_type_custom": "Personalitzat", "Accounts_OAuth_Wordpress_server_type_wordpress_com": "Wordpress.com", - "Accounts_OAuth_Wordpress_server_type_wp_oauth_server": "WP OAuth Server Plugin", + "Accounts_OAuth_Wordpress_server_type_wp_oauth_server": "Plugin WP OAuth Server", "Accounts_OAuth_Wordpress_token_path": "Ruta del token", "Accounts_Password_Policy_AtLeastOneLowercase": "Almenys un minúscules", - "Accounts_Password_Policy_AtLeastOneLowercase_Description": "Impedeix que una contrasenya contingui com a mínim un caràcter en minúscules.", + "Accounts_Password_Policy_AtLeastOneLowercase_Description": "Aplica que una contrasenya contingui al menys un caràcter en minúscula.", "Accounts_Password_Policy_AtLeastOneNumber": "Almenys un nombre", - "Accounts_Password_Policy_AtLeastOneNumber_Description": "Exigeix que una contrasenya contingui com a mínim un caràcter numèric.", + "Accounts_Password_Policy_AtLeastOneNumber_Description": "Aplica a que la contrasenya contingui al menys un caràcter numèric", "Accounts_Password_Policy_AtLeastOneSpecialCharacter": "Al menys un símbol", "Accounts_Password_Policy_AtLeastOneSpecialCharacter_Description": "Exigeix que una contrasenya contingui com a mínim un caràcter especial.", - "Accounts_Password_Policy_AtLeastOneUppercase": "A menys gran en majúscules", - "Accounts_Password_Policy_AtLeastOneUppercase_Description": "Impedeix que una contrasenya contingui com a mínim un caràcter en minúscules.", + "Accounts_Password_Policy_AtLeastOneUppercase": "Almenys una majúscula", + "Accounts_Password_Policy_AtLeastOneUppercase_Description": "IApica que una contrasenya contingui com a mínim un caràcter en minúscules.", "Accounts_Password_Policy_Enabled": "Habilita la política de contrasenyes", - "Accounts_Password_Policy_Enabled_Description": "Quan està habilitat, les contrasenyes de l'usuari han de complir les polítiques establertes. Nota: això només s'aplica a les contrasenyes noves, que no existeixen contrasenyes.", - "Accounts_Password_Policy_ForbidRepeatingCharacters": "Prohibeix els caràcters repetidors", + "Accounts_Password_Policy_Enabled_Description": "Quan estan habilitades, les contrasenyes dels usuaris han de complir amb les polítiques establertes. Nota: això només s'aplica a contrasenyes noves, no a contrasenyes existents", + "Accounts_Password_Policy_ForbidRepeatingCharacters": "Prohibir repetició de caràcters", "Accounts_Password_Policy_ForbidRepeatingCharacters_Description": "Assegura que les contrasenyes no contenen el mateix caràcter que es repeteix l'un al costat de l'altre.", - "Accounts_Password_Policy_ForbidRepeatingCharactersCount": "Max caràcters repetidors", - "Accounts_Password_Policy_ForbidRepeatingCharactersCount_Description": "La quantitat de vegades que un personatge es pot repetir abans no està permès.", + "Accounts_Password_Policy_ForbidRepeatingCharactersCount": "Caràcters repetits màxims", + "Accounts_Password_Policy_ForbidRepeatingCharactersCount_Description": "La quantitat de vegades que un caràcter es pot repetir abans no està permès.", "Accounts_Password_Policy_MaxLength": "Longitud màxima", "Accounts_Password_Policy_MaxLength_Description": "Assegura que les contrasenyes no tenen més d'aquesta quantitat de caràcters. Utilitzeu `-1` per desactivar-lo.", - "Accounts_Password_Policy_MinLength": "Durada mínima", - "Accounts_Password_Policy_MinLength_Description": "Assegura que les contrasenyes han de tenir almenys aquesta quantitat de caràcters. Utilitzeu `-1` per desactivar-lo.", + "Accounts_Password_Policy_MinLength": "Longitud mínima", + "Accounts_Password_Policy_MinLength_Description": "Assegura que les contrasenyes han de tenir almenys aquesta quantitat de caràcters. Utilitza `-1` per desactivar.", "Accounts_PasswordReset": "Restablir contrasenya", "Accounts_Registration_AuthenticationServices_Default_Roles": "Rols per defecte per als serveis d'autenticació", "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Rols per defecte (separats per comes) que s'assignaran als usuaris quan es registrin a través dels serveis d'autenticació", "Accounts_Registration_AuthenticationServices_Enabled": "Registre mitjançant serveis d'autenticació", + "Accounts_Registration_InviteUrlType": "Tipus d'URL d'invitació", + "Accounts_Registration_InviteUrlType_Direct": "Directe", + "Accounts_Registration_InviteUrlType_Proxy": "Proxy", "Accounts_RegistrationForm": "Formulari de registre", "Accounts_RegistrationForm_Disabled": "Deshabilitat", "Accounts_RegistrationForm_LinkReplacementText": "Text de substitució de l'enllaç del formulari de registre", @@ -198,33 +212,54 @@ "Accounts_RegistrationForm_SecretURL_Description": "Cal proporcionar una cadena de text aleatori que s'afegirà a l'URL de registre. Exemple: https://open.rocket.chat/register/[secret_hash]", "Accounts_RequireNameForSignUp": "Requerir el nom per registrar-se", "Accounts_RequirePasswordConfirmation": "Requereix confirmació de la contrasenya", + "Accounts_RoomAvatarExternalProviderUrl": "Room URL de l'proveïdor extern d'Avatar", + "Accounts_RoomAvatarExternalProviderUrl_Description": "Exemple: `https://acme.com/api/v1/{roomId}`", "Accounts_SearchFields": "Camps a considerar a la cerca", - "Accounts_Send_Email_When_Activating": "Envieu un correu electrònic a l'usuari quan l'usuari sigui activat", - "Accounts_Send_Email_When_Deactivating": "Envieu un correu electrònic a l'usuari quan l'usuari sigui desactivat", + "Accounts_Send_Email_When_Activating": "Enviar un correu electrònic a l'usuari quan estigui activat", + "Accounts_Send_Email_When_Deactivating": "Enviar un correu electrònic a l'usuari quan estigui desactivat", + "Accounts_Set_Email_Of_External_Accounts_as_Verified": "Establir el correu electrònic dels comptes externes com verificat", + "Accounts_Set_Email_Of_External_Accounts_as_Verified_Description": "Els correus electrònics de comptes creats des de serveis externs, com LDAP, OAuth, etc., es marcaran com verificats automàticament.", "Accounts_SetDefaultAvatar": "Avatar per defecte", "Accounts_SetDefaultAvatar_Description": "Prova de determinar l'avatar per defecte basant-se en el compte d'OAuth o bé Gravatar", - "Accounts_ShowFormLogin": "Mostra inici de sessió basat en formulari", - "Accounts_TwoFactorAuthentication_Enabled": "Activa l'autenticació de dos factors", + "Accounts_ShowFormLogin": "Mostrar el formulari d'inici de sessió per defecte", + "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In": "Establir segon factor d'autenticació via correu electrònic per defecte per a nous usuaris", + "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In_Description": "els nous usuaris tindran activat per defecte el segon factor d'autenticació per correu electrònic. Podran desactivar-lo en la seva pàgina de perfil.", + "Accounts_TwoFactorAuthentication_By_Email_Code_Expiration": "Temps de caducitat del codi enviat per correu electrònic en segons", + "Accounts_TwoFactorAuthentication_By_Email_Enabled": "Habilitar segon factor d'autenticació via correu electrònic", + "Accounts_TwoFactorAuthentication_By_Email_Enabled_Description": "Els usuaris amb correu electrònic verificat i la opció habilitada a la seva pàgina de perfil rebran un correu electrònic amb un codi temporal per autoritzar certes accions com iniciar sessió, desar el perfil, etc.", + "Accounts_TwoFactorAuthentication_Enabled": "Habilitar l'autenticació de dos factors a través d'TOTP", + "Accounts_TwoFactorAuthentication_Enabled_Description": "Els usuaris poden configurar el seu segon factor d'autenticació fent servir qualsevol aplicació TOTP, com Google Authenticator o Authy", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback": "Aplicar suport de contrasenya", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback_Description": "Els usuaris es veuran obligats a ingressar la contrasenya, per a accions importants, si no s'habilita cap altre mètode d'autenticació de segon factor per a aquest usuari i s'estableix una contrasenya per a ell.", "Accounts_TwoFactorAuthentication_MaxDelta": "Delta màxima", "Accounts_TwoFactorAuthentication_MaxDelta_Description": "El Maximum Delta determina quants tokens són vàlids en un moment donat. Els tokens es generen cada 30 segons i són vàlids per a (30 * Maximum Delta) segons. Exemple: amb un Delta màxim establert a 10, cada token es pot utilitzar fins a 300 segons abans o després de la marca de temps. Això és útil quan el rellotge del client no està correctament sincronitzat amb el servidor.", + "Accounts_TwoFactorAuthentication_RememberFor": "Recordar segon factor d'autenticació durant (segons)", + "Accounts_TwoFactorAuthentication_RememberFor_Description": "No sol·licitar codi de segon factor d'autenticació si ja s'ha proporcionat abans en el temps establert.", "Accounts_UseDefaultBlockedDomainsList": "Utilitza la llista predeterminada de dominis bloquejats", "Accounts_UseDNSDomainCheck": "Utilitza la comprovació DNS de dominis", "Accounts_UserAddedEmail_Default": "Benvingut a [Site_Name]Vés a [Site_URL] i prova la millor eina de programari lliure per a treball a distància disponible actualment!Pots entrar utilitzant el teu correu-e: [email] i contrasenya: [password]. És possible que et demanem canviar-la quan entris per primera vegada.", "Accounts_UserAddedEmail_Description": "És possible utilitzar els marcadors: [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.[password] per la contrasenya.[Site_Name] i [Site_URL] pel nom del lloc web i de l'adreça URL, respectivament.", "Accounts_UserAddedEmailSubject_Default": "Se t'ha afegit a [Site_Name]", + "Accounts_Verify_Email_For_External_Accounts": "Verificar el correu electrònic per als comptes externes", + "Action_required": "Acció requerida", "Activate": "Activa", + "Active": "Actiu", + "Active_users": "Usuaris actius", "Activity": "Activitat", "Add": "Afegeix", "Add_agent": "Afegeix agent", + "Add_custom_emoji": "Afageix emoji personalitzat", "Add_custom_oauth": "Afegeix OAuth personalitzat", "Add_Domain": "Afegir domini", "Add_files_from": "Afegeix arxius de", "Add_manager": "Afegeix supervisor", "Add_monitor": "Afegir monitor", + "Add_Reaction": "Afegeix reacció", "Add_Role": "Afegeix rol", "Add_user": "Afegeix usuari", "Add_User": "Afegeix usuari", "Add_users": "Afegeix usuaris", + "Add_members": "Afegir membres", "add-livechat-department-agents": "Afegir agents de Livechat als departaments", "add-oauth-service": "Afegir servei Oauth", "add-oauth-service_description": "Permís per afegir nous serveis Oauth", @@ -241,17 +276,21 @@ "Adding_user": "Afegint usuari", "Additional_emails": "Correus electrònics addicionals", "Additional_Feedback": "Retroalimentació addicional", - "additional_integrations_Bots": "Si esteu buscant com integrar el vostre bot, no busqueu més que el nostre adaptador Hubot. https://github.com/RocketChat/hubot-rocketchat", - "additional_integrations_Zapier": "Esteu buscant integrar altres programes i aplicacions amb Rocket.Chat, però no teniu temps de fer-ho manualment? A continuació, us suggerim que utilitzeu Zapier, que recolzem plenament. Llegiu més sobre la nostra documentació. https://rocket.chat/docs/administrator-guides/integrations/zapier/using-zaps/", - "Admin_disabled_encryption": "El vostre administrador no ha habilitat el xifratge E2E.", + "additional_integrations_Bots": "Si esteu buscant com integrar el vostre bot, no busqueu més, el nostre adaptador Hubot. https://github.com/RocketChat/hubot-rocketchat", + "additional_integrations_Zapier": "Està buscant integrar un altre programari i aplicacions amb Rocket.Chat però no té temps per fer-ho manualment? Llavors, suggerim utilitzar Zapier, que és totalment compatible. Llegiu més sobre això a la nostra documentació https://rocket.chat/docs/administrator-guides/integrations/zapier/using-zaps/", + "Admin_disabled_encryption": "El seu administrador no va habilitar encriptació E2E", "Admin_Info": "Informació d'administrador", "Administration": "Administració", "Adult_images_are_not_allowed": "Les imatges per a adults no són permeses", - "Advocacy": "Advocacy", - "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Després de l'autenticació OAuth2, els usuaris seran redirigits a aquesta URL", + "Aerospace_and_Defense": "Aeroespacial i Defensa", + "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Després de l'autenticació OAuth2, els usuaris seran redirigits a aquest URL. Pots afegir un URL per línia.", "Agent": "Agent", "Agent_added": "Agent afegit", + "Agent_Info": "Informació de l'agent", + "Agent_messages": "Missatges de l'agent", + "Agent_Name_Placeholder": "Si us plau, introduïu el nom d'un agent ...", "Agent_removed": "Agent eliminat", + "Agents": "Agents", "Alerts": "Alertes", "Alias": "Àlies", "Alias_Format": "Format d'àlies", @@ -261,19 +300,23 @@ "All": "Tot", "All_added_tokens_will_be_required_by_the_user": "Tots els tokens afegits seran requerits per l'usuari", "All_channels": "Tots els canals", + "All_closed_chats_have_been_removed": "S'han eliminat tots els xats tancats", "All_logs": "Tots els registres", "All_messages": "Tots els missatges", "All_users": "Tots els usuaris", "All_users_in_the_channel_can_write_new_messages": "Tots els usuaris del canal poden escriure missatges nous", - "Allow_collect_and_store_HTTP_header_informations": "Permet recopilar i emmagatzemar informacions de capçalera HTTP", - "Allow_collect_and_store_HTTP_header_informations_description": "Aquest paràmetre determina si Livechat té permís per emmagatzemar dades d'informació recopilada a la capçalera HTTP, com ara adreça IP, agent d'usuari, etc.", + "Allow_collect_and_store_HTTP_header_informations": "Permetre recopilar i emmagatzemar informació de capçalera HTTP", + "Allow_collect_and_store_HTTP_header_informations_description": "Aquesta configuració determina si livechat pot emmagatzemar informació recopilada de les dades de la capçalera HTTP, com l'adreça IP, l'Agent d'usuari, etc.", "Allow_Invalid_SelfSigned_Certs": "Permetre certificats auto-signats invàlids", "Allow_Invalid_SelfSigned_Certs_Description": "Permetre certificats SSL auto-signats i invàlids per a enllaços de validació i vistes prèvies.", "Allow_Marketing_Emails": "Permet els correus electrònics de màrqueting", - "Allow_Online_Agents_Outside_Office_Hours": "Permet que els agents en línia no estiguin en horari d’oficina", + "Allow_Online_Agents_Outside_Business_Hours": "Permetre agents en línia fora de l'horari de negoci", + "Allow_Online_Agents_Outside_Office_Hours": "Permetre agents en línia fora de l'horari d'oficina", + "Allow_Save_Media_to_Gallery": "Permetre guardar mitjans a la galeria", "Allow_switching_departments": "Permet al visitant canviar de departament", - "Almost_done": "Quasi fet", + "Almost_done": "Gairebé fet", "Alphabetical": "Alfabètic", + "Also_send_to_channel": "Enviar també al canal", "Always_open_in_new_window": "Obre sempre en finestra nova", "Analytics": "Analítiques", "Analytics_features_enabled": "Funcionalitats habilitades", @@ -287,7 +330,7 @@ "Animals_and_Nature": "Animals i natura", "Announcement": "Anunci", "API": "API", - "API_Add_Personal_Access_Token": "Afegiu una nova fitxa d'accés personal", + "API_Add_Personal_Access_Token": "Afegiu un nou token d'accés personal", "API_Allow_Infinite_Count": "Permet obtenir tot", "API_Allow_Infinite_Count_Description": "Les peticions a la API REST haurien de permetre retornar-ho tot en una sola petició?", "API_Analytics": "Analítiques", @@ -309,41 +352,44 @@ "API_Enable_CORS": "Activa CORS", "API_Enable_Direct_Message_History_EndPoint": "Activa la consulta de l'historial de missatges directes", "API_Enable_Direct_Message_History_EndPoint_Description": "Això activa el `/api/v1/im.history.others` que permet veure missatges directes enviats per altres usuaris tot i no formar-ne part.", - "API_Enable_Personal_Access_Tokens": "Habiliteu les fitxes d'accés personal a l'API REST", - "API_Enable_Personal_Access_Tokens_Description": "Habiliteu les fitxes d'accés personal per usar-les amb l'API REST", - "API_Enable_Rate_Limiter": "Habilita el limitador de velocitat", - "API_Enable_Rate_Limiter_Dev": "Habilita el limitador de velocitat en desenvolupament", - "API_Enable_Rate_Limiter_Dev_Description": "Hauria de limitar la quantitat de trucades als punts finals en l’entorn de desenvolupament?", + "API_Enable_Personal_Access_Tokens": "Habilitar els tokens d'accés personal a l'API REST", + "API_Enable_Personal_Access_Tokens_Description": "Habiliteu els tokens d'accés personal per usar-les amb l'API REST", + "API_Enable_Rate_Limiter": "Habilitar limitador de freqüència", + "API_Enable_Rate_Limiter_Dev": "Habilitar el limitador de freqüència en desenvolupament", + "API_Enable_Rate_Limiter_Dev_Description": "Hauria limitar la quantitat de trucades als punts finals en l'entorn de desenvolupament?", "API_Enable_Rate_Limiter_Limit_Calls_Default": "Nombre de trucades per defecte al limitador de velocitat", - "API_Enable_Rate_Limiter_Limit_Calls_Default_Description": "Nombre de trucades per defecte per a cada punt final de l’API REST, permès dins l’interval de temps definit a continuació", - "API_Enable_Rate_Limiter_Limit_Time_Default": "Límit de temps per defecte per al limitador de velocitat (en ms)", - "API_Enable_Rate_Limiter_Limit_Time_Default_Description": "Temps d'espera per defecte per limitar el nombre de trucades a cada punt final de l'API REST (en ms)", + "API_Enable_Rate_Limiter_Limit_Calls_Default_Description": "Nombre de trucades predeterminades per a cada punt final de l'API REST, permeses dins de la franja de temps definit a continuació", + "API_Enable_Rate_Limiter_Limit_Time_Default": "Límit de temps predeterminat per al límit de freqüència (en ms)", + "API_Enable_Rate_Limiter_Limit_Time_Default_Description": "Temps d'espera per defecte per limitar el nombre de trucades en cada punt final de l'API REST (en ms)", "API_Enable_Shields": "Activa escuts", "API_Enable_Shields_Description": "Activa els escuts disponibles a `/api/v1/shield.svg`", "API_GitHub_Enterprise_URL": "URL del servidor", "API_GitHub_Enterprise_URL_Description": "Exemple: http://domain.com (sense la barra final)", "API_Gitlab_URL": "URL de GitLab", - "API_Personal_Access_Token_Generated": "Fitxa d’accés personal generada amb èxit", + "API_Personal_Access_Token_Generated": "Token d'accés personal generat amb èxit", "API_Personal_Access_Token_Generated_Text_Token_s_UserId_s": "Si us plau, deseu la vostra fitxa atentament perquè ja no podreu veure-ho després. Fitxa: __token__El seu ID d'usuari: __userId__", - "API_Personal_Access_Token_Name": "Nom de fitxa d'accés personal", - "API_Personal_Access_Tokens_Regenerate_It": "Regenerar fitxa", - "API_Personal_Access_Tokens_Regenerate_Modal": "Si heu perdut o oblidat la vostra fitxa, podeu regenerar-la, però recordeu que totes les aplicacions que utilitzen aquesta fitxa s’hauran d’actualitzar", - "API_Personal_Access_Tokens_Remove_Modal": "Esteu segur que voleu eliminar aquesta fitxa d’accés personal?", - "API_Personal_Access_Tokens_To_REST_API": "Fitxes d'accés personal a l'API REST", + "API_Personal_Access_Token_Name": "Nom de Token d'accés personal", + "API_Personal_Access_Tokens_Regenerate_It": "Regenerar Token", + "API_Personal_Access_Tokens_Regenerate_Modal": "Si heu perdut o oblidat la vostra Token, podeu regenerar-la, però recordeu que totes les aplicacions que utilitzen aquesta fitxa s’hauran d’actualitzar", + "API_Personal_Access_Tokens_Remove_Modal": "Esteu segur que voleu eliminar aquest Token d'accés personal?", + "API_Personal_Access_Tokens_To_REST_API": "Tokens d'accés personal a l'API REST", "API_Shield_Types": "Tipus d'escut", "API_Shield_Types_Description": "Tipus d'escut que s'activaran, com a llista separada per comes. Triar entre `online`, `channel` o `*` per a tots", + "API_Shield_user_require_auth": "Requereix autenticació per als escuts dels usuaris", "API_Token": "API Token", "API_Tokenpass_URL": "URL del servidor Tokenpass", "API_Tokenpass_URL_Description": "Exemple: https://domain.com (excloent la barra inclinada final)", "API_Upper_Count_Limit": "Nombre màxim de registres", "API_Upper_Count_Limit_Description": "Quin és el nombre màxim de registres que la API REST pot retornar (si no és il·limitat)?", + "API_Use_REST_For_DDP_Calls": "Utilitza REST en lloc de websocket per a les trucades de Meteor", "API_User_Limit": "Límit d'usuaris per afegir tots els usuaris a canal", "API_Wordpress_URL": "URL de WordPress", - "api-bypass-rate-limit": "Ometre el límit de velocitat per l’API REST", + "api-bypass-rate-limit": "Límit de velocitat d'omissió per a la API REST", "Apiai_Key": "Clau Api.ai ", "Apiai_Language": "Idioma Api.ai", + "APIs": "APIs", "App_author_homepage": "pàgina d'inici de l'autor", - "App_Details": "Detalls de l’aplicació", + "App_Details": "Detalls de l’Aplicació", "App_Information": "Informació de l'aplicació", "App_Installation": "Instal·lació de l'aplicació", "App_status_auto_enabled": "Actiu", @@ -357,25 +403,52 @@ "App_status_manually_enabled": "Actiu", "App_status_unknown": "Desconegut", "App_support_url": "URL de suport", - "App_Url_to_Install_From": "Instal·leu des de l’URL", - "App_Url_to_Install_From_File": "Instal·leu des del fitxer", + "App_Url_to_Install_From": "Instal·lar des de l’URL", + "App_Url_to_Install_From_File": "Instal·lar des del fitxer", + "App_user_not_allowed_to_login": "Els usuaris de l'aplicació no poden accedir directament.", "Appearance": "Aparença", "Application_added": "Aplicació afegida", + "Application_delete_warning": "No podrà recuperar aquesta aplicació!", "Application_Name": "Nom de l'aplicació", "Application_updated": "Aplicació actualitzada", "Apply": "Aplicar", "Apply_and_refresh_all_clients": "Aplicar i refrescar tots els clients", "Apps": "Aplicacions", - "Apps_Engine_Version": "Versió del motor d'aplicacions", - "Apps_Framework_Development_Mode": "Habiliteu el mode de desenvolupament", - "Apps_Framework_Development_Mode_Description": "El mode de desenvolupament permet instal·lar aplicacions que no pertanyin al mercat de Rocket.Chat.", + "Apps_Engine_Version": "Versió del Motor d'Aplicacions", + "Apps_Essential_Alert": "Aquesta aplicació és essencial per als següents esdeveniments:", + "Apps_Essential_Disclaimer": "Els esdeveniments enumerats dalt seran interromputs si aquesta aplicació està desactivada. Si vols que Rocket.Chat funcioni sense la funcionalitat d'aquesta aplicació, l'has de desinstal·lar", + "Apps_Framework_Development_Mode": "Activa el mode de desenvolupament", + "Apps_Framework_Development_Mode_Description": "El mode de desenvolupament permet instal·lar aplicacions que no pertanyin al Marketplace de Rocket.Chat.", "Apps_Framework_enabled": "Habiliteu el marc d'aplicació", + "Apps_Game_Center": "Centre de Jocs", + "Apps_Game_Center_Back": "Tornar al Centre de Jocs", + "Apps_Game_Center_enabled": "Activar el Centre de Jocs", "Apps_Game_Center_Invite_Friends": "Convida els teus amics a unir-se", - "Apps_Game_Center_Play_Game_Together": "@aquí Juguem __name__ junts!", - "Apps_Marketplace_Deactivate_App_Prompt": "Vols realment desactivar aquesta aplicació?", - "Apps_Marketplace_Login_Required_Description": "La compra d’aplicacions del mercat Rocket.Chat requereix registrar l’espai de treball i iniciar la sessió.", - "Apps_Marketplace_Login_Required_Title": "Cal iniciar sessió al mercat", - "Apps_Marketplace_Modify_App_Subscription": "Modifica la subscripció", + "Apps_Game_Center_Play_Game_Together": "@aquí __name__ Juguem junts!", + "Apps_Interface_IPostExternalComponentClosed": "Esdeveniment que es produeix després que es tanca un component extern", + "Apps_Interface_IPostExternalComponentOpened": "Esdeveniment que es produeix després que s'obre un component extern", + "Apps_Interface_IPostMessageDeleted": "Esdeveniment que es produeix després que s'elimina un missatge", + "Apps_Interface_IPostMessageSent": "Esdeveniment que es produeix després que s'envia un missatge", + "Apps_Interface_IPostMessageUpdated": "Esdeveniment que passa després que un missatge és actualitzat", + "Apps_Interface_IPostRoomCreate": "Esdeveniment que passa després que una sala és creada", + "Apps_Interface_IPostRoomDeleted": "Esdeveniment que passa després que una sala és eliminada", + "Apps_Interface_IPostRoomUserJoined": "Esdeveniment que passa després que un usuari s'uneixi a una sala (pública, privada)", + "Apps_Interface_IPreMessageDeletePrevent": "Esdeveniment que passa després que un missatge és eliminat", + "Apps_Interface_IPreMessageSentExtend": "Esdeveniment que passa abans que un missatge és enviat", + "Apps_Interface_IPreMessageSentModify": "Esdeveniment que passa abans que un missatge és enviat", + "Apps_Interface_IPreMessageSentPrevent": "Esdeveniment que passa abans que un missatge és enviat", + "Apps_Interface_IPreMessageUpdatedExtend": "Esdeveniment que passa abans que un missatge és actualitzat", + "Apps_Interface_IPreMessageUpdatedModify": "Esdeveniment que passa abans que un missatge és actualitzat", + "Apps_Interface_IPreMessageUpdatedPrevent": "Esdeveniment que passa abans que un missatge és actualitzat", + "Apps_Interface_IPreRoomCreateExtend": "Esdeveniment que passa abans que una sala és creada", + "Apps_Interface_IPreRoomCreateModify": "Esdeveniment que passa abans que una sala és creada", + "Apps_Interface_IPreRoomCreatePrevent": "Esdeveniment que passa abans que una sala és creada", + "Apps_Interface_IPreRoomDeletePrevent": "Esdeveniment que passa abans que una sala és eliminada", + "Apps_Interface_IPreRoomUserJoined": "Esdeveniment que passa abans que un usuari s'uneixi a una sala (pública, privada)", + "Apps_Marketplace_Deactivate_App_Prompt": "Vol realment desactivar aquesta aplicació?", + "Apps_Marketplace_Login_Required_Description": "Comprar aplicacions de l'Marketplace Rocket.Chat requereix registrar el teu entorn de treball i iniciar sessió.", + "Apps_Marketplace_Login_Required_Title": "Identificació requerida al Marketplace", + "Apps_Marketplace_Modify_App_Subscription": "Modificar la Subscripció", "Apps_Marketplace_pricingPlan_monthly": "__price__ / mes", "Apps_Marketplace_pricingPlan_monthly_perUser": "__price__ / mes per usuari", "Apps_Marketplace_pricingPlan_startingAt_monthly": "a partir de __price__ / mes", @@ -386,14 +459,43 @@ "Apps_Marketplace_pricingPlan_yearly_perUser": "__price__ / any per usuari", "Apps_Marketplace_Uninstall_App_Prompt": "Vols realment desinstal·lar aquesta aplicació?", "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "Desinstal·leu-la de totes maneres", - "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "Aquesta aplicació té una subscripció activa i la desinstal·lació no la cancel·larà. Si voleu fer-ho, modifiqueu la subscripció abans de desinstal·lar-la.", + "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "Aquesta aplicació té una subscripció activa i la desinstal·lació no la cancel·la. Si voleu fer això, modifiqui la seva subscripció abans de desinstal·lar.", + "Apps_Permissions_Review_Modal_Title": "Revisar permisos", + "Apps_Permissions_No_Permissions_Required": "L'aplicació no requereix permisos addicionals", + "Apps_Permissions_user_read": "Llegir la informació bàsica de l'usuari", + "Apps_Permissions_user_write": "Modificar la informació de l'usuari", + "Apps_Permissions_upload_read": "Carregar lectura", + "Apps_Permissions_upload_write": "Carregar arxius", + "Apps_Permissions_server-setting_read": "Llegir la informació de servidor", + "Apps_Permissions_server-setting_write": "Modificar la informació del servidor", + "Apps_Permissions_room_read": "Llegir informació de sales", + "Apps_Permissions_room_write": "Modificar la informació de les sales", + "Apps_Permissions_message_read": "Llegir missatges", + "Apps_Permissions_message_write": "Enviar i modificar missatges", + "Apps_Permissions_livechat-status_read": "Accedir a la informació d'estat de Livechat", + "Apps_Permissions_livechat-custom-fields_write": "Modificar la configuració dels camps personalitzats de livechat", + "Apps_Permissions_livechat-visitor_read": "Accedir a la informació dels visitants de Livechat", + "Apps_Permissions_livechat-visitor_write": "Modificar la informació dels visitants de Livechat", + "Apps_Permissions_livechat-message_read": "Accedir a la informació dels missatges de Livechat", + "Apps_Permissions_livechat-message_write": "Modificar la informació dels missatges de Livechat", + "Apps_Permissions_livechat-room_read": "Accedir a la informació de la sala Livechat", + "Apps_Permissions_livechat-room_write": "Modificar la informació de la sala Livechat", + "Apps_Permissions_livechat-department_read": "Accedir a la informació de el departament de Livechat", + "Apps_Permissions_livechat-department_write": "Modificar la informació de el departament de Livechat", + "Apps_Permissions_slashcommand": "Registrar nous comandaments de barra", + "Apps_Permissions_apis": "Registrar nous punts finals HTTP", + "Apps_Permissions_env_read": "Accediu a la informació mínima sobre aquest entorn de servidor", + "Apps_Permissions_networking": "Accés a aquesta xarxa de servidors", + "Apps_Permissions_persistence": "Emmagatzemar dades internes a la base de dades", + "Apps_Permissions_scheduler": "Registrar i mantenir els treballs programats", + "Apps_Permissions_ui_interact": "Interactuar amb la interfície d'usuari", "Apps_Settings": "Configuració de l'aplicació", "Apps_User_Already_Exists": "El nom d'usuari \"__username__\" ja s'està utilitzant. Canviar el nom o eliminar l’usuari que l’utilitzi per instal·lar aquesta aplicació", "Apps_WhatIsIt": "Aplicacions: què són?", "Apps_WhatIsIt_paragraph1": "Una nova icona a l'àrea d'administració! Què vol dir això i què són les aplicacions?", - "Apps_WhatIsIt_paragraph2": "En primer lloc, les aplicacions en aquest context no fan referència a les aplicacions mòbils. De fet, seria millor pensar-los en termes de connectors o integracions avançades.", - "Apps_WhatIsIt_paragraph3": "En segon lloc, són scripts o paquets dinàmics que us permetran personalitzar la vostra instància de Rocket.Chat sense haver de forçar la base de codis. Però tingueu en compte que es tracta d'un nou conjunt de funcions i que potser no sigui 100% estable. A més, encara estem desenvolupant el conjunt de funcions, de manera que no tot es pot personalitzar en aquest moment. Per obtenir més informació sobre com començar a desenvolupar una aplicació, aneu aquí per llegir:", - "Apps_WhatIsIt_paragraph4": "Però amb això, si esteu interessat a habilitar aquesta característica i provar-lo, feu clic aquí per activar el sistema Apps.", + "Apps_WhatIsIt_paragraph2": "En primer lloc, les aplicacions en aquest context no es refereixen a les aplicacions mòbils. De fet, seria millor pensar-hi en termes de complements o integracions avançades.", + "Apps_WhatIsIt_paragraph3": "En segon lloc, són scripts o paquets dinàmics que li permetran personalitzar la instància de Rocket.Chat sense haver de bifurcar el codi base. Fixeu-vos, que aquest és un nou conjunt de característiques i, a causa d'això, és possible que no sigui 100% estable. A més, encara estem desenvolupant el conjunt de funcions, de manera que no tot es pot personalitzar en aquest moment. Per obtenir més informació sobre com començar a desenvolupar una aplicació, aneu aquí per llegir:", + "Apps_WhatIsIt_paragraph4": "Però dit això, si està interessat en habilitar aquesta funció i provar-la, feu clic aquí per habilitar el sistema d'aplicacions.", "Archive": "Arxiu", "archive-room": "Arxivar sala", "archive-room_description": "Permís per arxivar un canal", @@ -403,22 +505,22 @@ "Are_you_sure_you_want_to_delete_this_record": "Esteu segur que voleu suprimir aquest registre?", "Are_you_sure_you_want_to_delete_your_account": "Estàs segur d'eliminar el teu compte?", "Are_you_sure_you_want_to_disable_Facebook_integration": "Estàs segur que vols desactivar la integració de Facebook?", - "Assets": "Actius", + "Assets": "Recursos", "Assign_admin": "Assignant admin", "Assign_new_conversations_to_bot_agent": "Assigna les noves converses a l'agent bot", - "Assign_new_conversations_to_bot_agent_description": "El sistema d'encaminament intentarà trobar un agent bot abans d'abordar noves converses a un agent humà.", + "Assign_new_conversations_to_bot_agent_description": "El sistema d'enrutament intentarà trobar un agent bot abans de dirigir les noves converses a un agent humà.", "assign-admin-role": "Assignar rol d'administrador", "assign-admin-role_description": "Permís per assignar el rol d'administrador a altres usuaris", - "assign-roles": "Assigna rols", + "assign-roles": "Assignar rols", "at": "a", - "At_least_one_added_token_is_required_by_the_user": "Almenys un usuari afegeix un token afegit", + "At_least_one_added_token_is_required_by_the_user": "A l'almenys un dels tokens afegits és requerit per l'usuari", "AtlassianCrowd": "Atlassian Crowd", "Attachment_File_Uploaded": "Fitxer pujat", "Attribute_handling": "Tractament d'atributs", "Audio": "Àudio", "Audio_message": "Missatge d'àudio", - "Audio_Notification_Value_Description": "Pot ser un so personalitzat o els predeterminats: sonor, chelle, ding, droplet, highbell, estacions", - "Audio_Notifications_Default_Alert": "Notificacions d'àudio Alerta per defecte", + "Audio_Notification_Value_Description": "Pot ser qualsevol so personalitzat o els predeterminats: bip, chelle, ding, droplet, highbell, seasons", + "Audio_Notifications_Default_Alert": "Alerta per defecte de notificacions d'àudio", "Audio_Notifications_Value": "Notificació predeterminada d'àudio", "Audios": "Àudios", "Auth_Token": "Auth Token", @@ -452,7 +554,7 @@ "AutoTranslate_Enabled_Description": "L'activació de la traducció automàtica permetrà a les persones amb el permís traduir automàticament el permís de traduir tots els missatges automàticament al seu idioma seleccionat. Es poden aplicar tarifes.", "AutoTranslate_Google": "Google", "AutoTranslate_Microsoft": "Microsoft", - "AutoTranslate_Microsoft_API_Key": " Clau de subscripció Ocp-Apim", + "AutoTranslate_Microsoft_API_Key": " COcp-Apim-Subscription-Key", "AutoTranslate_ServiceProvider": "Proveïdor del servei", "Available": "En línia", "Available_agents": "Agents disponibles", @@ -479,6 +581,7 @@ "Back": "Torna", "Back_to_applications": "Torna a les aplicacions", "Back_to_chat": "Torna al xat", + "Back_to_imports": "Tornar a importacions", "Back_to_integration_detail": "Tornar al detall de la integració", "Back_to_integrations": "Torna a les integracions", "Back_to_login": "Torna a identificar-me", @@ -488,12 +591,29 @@ "Backup_codes": "Codis de recuperació", "ban-user": "Banejar usuari", "ban-user_description": "Permís per banejar un usuari d'un canal", + "BBB_End_Meeting": "Finalitzar reunió", + "BBB_Join_Meeting": "Unir-se a la reunió", + "BBB_Start_Meeting": "Iniciar la reunió", + "BBB_You_have_no_permission_to_start_a_call": "No tens permís per iniciar una trucada.", "Best_first_response_time": "Millor temps de primera resposta", "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "Característica Beta. Requereix que la videoconferència estigui activa.", + "Better": "Millor", + "Bio": "Bio", + "Bio_Placeholder": "Text del marcador Bio", + "Block_Multiple_Failed_Logins_Attempts_Until_Block_By_Ip": "Quants intents fallits fins al bloqueig per IP?", + "Block_Multiple_Failed_Logins_Attempts_Until_Block_by_User": "Quants intents fallits fins al bloqueig per usuari?", + "Block_Multiple_Failed_Logins_By_Ip": "Bloquejar els intents fallits d'accés per IP", + "Block_Multiple_Failed_Logins_By_User": "Bloquejar els intents fallits d'accés per nom d'usuari", + "Block_Multiple_Failed_Logins_Enable_Collect_Login_data_Description": "Emmagatzemar la IP i el nom d'usuari dels intents d'accés en una col·lecció a la base de dades", + "Block_Multiple_Failed_Logins_Enabled": "Habilitar la recopilació de dades d'inici de sessió", + "Block_Multiple_Failed_Logins_Ip_Whitelist": "Llista blanca d'IP", + "Block_Multiple_Failed_Logins_Ip_Whitelist_Description": "Llista separada per comes d'IP permeses", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_Ip_In_Minutes": "Temps per desbloquejar la IP (En minuts)", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_User_In_Minutes": "Temps per desbloquejar a l'usuari (en minuts)", "Block_User": "Bloqueja usuari", "Blockchain": "Blockchain", "Blockstack_Auth_Description": "Descripció autenticació", - "Blockstack_ButtonLabelText": "Text de l'etiqueta del botó", + "Blockstack_ButtonLabelText": "Text de l'etiqueta de botó", "Blockstack_Generate_Username": "Generar nom d'usuari", "Body": "Cos", "bold": "negreta", @@ -502,23 +622,29 @@ "BotHelpers_userFields_Description": "CSV de camps d'usuari que poden ser accedits pels mètodes helper dels bots.", "Bots": "Bots", "Branch": "Branca", - "Broadcast_channel": "Canal de difusió", + "Broadcast": "Difusió", + "Broadcast_channel": "Channel de transmissió", "Broadcast_channel_Description": "Només els usuaris autoritzats poden escriure missatges nous, però els altres usuaris podran respondre", "Broadcast_Connected_Instances": "Difusió de les instàncies connectades", - "Broadcasting_api_key": "Clau de l'API de difusió", - "Broadcasting_client_id": "Identificador de client de difusió", - "Broadcasting_client_secret": "Client de difusió secret", - "Broadcasting_enabled": "Difusió activada", - "Broadcasting_media_server_url": "URL del servidor de mitjans de difusió", - "Browse_Files": "Navega pels fitxers", + "Broadcasting_api_key": "Clau API de transmisisó", + "Broadcasting_client_id": "ID de client de transmissió", + "Broadcasting_client_secret": "Secret de client de transmissió", + "Broadcasting_enabled": "Transmissió activada", + "Broadcasting_media_server_url": "URL del servidor de mitjans de transmissió", + "Browse_Files": "Cerca de fitxers", + "Browser_does_not_support_audio_element": "El seu navegador no suporta l'element d'àudio.", + "Browser_does_not_support_video_element": "El seu navegador no suporta l'element de vídeo.", "Bugsnag_api_key": "Clau API Bugsnag", "Build_Environment": "Entorn de compilació", - "bulk-register-user": "Crear canals en massa", - "bulk-register-user_description": "Permís per a crear canals en massa", - "Busiest_day": "Dia més actiu", - "Busiest_time": "Temps més actiu", + "bulk-register-user": "Crear usuaris de forma massiva", + "bulk-register-user_description": "Permís per crear usuaris de forma massiva", + "Busiest_day": "Dia més ocupat", + "Busiest_time": "Temps més ocupat", "Business_Hour": "Horari comercial", "Business_Hour_Removed": "Horari comercial suprimit", + "Business_Hours": "Horari comercial", + "Business_hours_enabled": "Horari Comercial habilitat", + "Business_hours_updated": "Horari comercial actualitzat", "busy": "ocupat", "Busy": "Ocupat", "busy_female": "ocupada", @@ -526,22 +652,28 @@ "busy_male": "ocupat", "Busy_male": "Ocupat", "by": "per", + "By_author": "Per __author__", "cache_cleared": "Memòria cau esborrada", + "Call": "Trucada", "call-management": "Gestió de trucades", + "Caller": "Emissor", "Cancel": "Cancel·la", "Cancel_message_input": "Cancel·la", "Canceled": "Cancel·lat", - "Canned Responses": "Respostes enllaunades", - "Canned_Response_Removed": "S'ha eliminat la resposta enllaçada", - "Canned_Responses_Enable": "Activa les respostes enllaçades", + "Canned Responses": "Resposta predefinida", + "Canned_Response_Removed": "Resposta predefinida eliminada", + "Canned_Responses_Enable": "Activa resposta predefinida", "Cannot_invite_users_to_direct_rooms": "No es pot convidar els usuaris a les sales directes", "Cannot_open_conversation_with_yourself": "No es pot obrir una conversa amb un mateix", - "CAS_autoclose": "Tancar automàticament la finestra emergent d'inici de sessió", + "Cannot_share_your_location": "No es posible compartir la ubicació ...", + "CAS_autoclose": "Finestra emergent de tancament automàtic de sessió", "CAS_base_url": "Adreça URL SSO base", "CAS_base_url_Description": "Adreça URL base del servei extern SSO. Ex: https://sso.example.undef/sso/", "CAS_button_color": "Color de fons del botó d'inici de sessió", "CAS_button_label_color": "Color de text del botó d'inici de sessió", "CAS_button_label_text": "Etiqueta del botó d'inici de sessió", + "CAS_Creation_User_Enabled": "Permetre crear usuaris", + "CAS_Creation_User_Enabled_Description": "Permetre crear usuaris CAS a partir de les dades proporcionades pel tiquet CAS.", "CAS_enabled": "Actiu", "CAS_Login_Layout": "Plantilla de la identificació CAS", "CAS_login_url": "Adreça URL d'inici de sessió SSO", @@ -552,6 +684,8 @@ "CAS_Sync_User_Data_Enabled_Description": "Sincronitza sempre les dades d'usuari CAS extern amb els atributs disponibles en identificar-se. Nota: de totes maneres, durant la creació d'un compte, els atributs sempre es sincronitzen.", "CAS_Sync_User_Data_FieldMap": "Mapa d'atributs", "CAS_Sync_User_Data_FieldMap_Description": "Utilitza aquesta entrada JSON per construir atributs interns (claus) des d'atributs externs (valors). Els valors d'atributs externs que continguin '%' seran interpolats com a cadenes de caràcters del valor.Per exemple, `{\"email\":\"%email%\", \"nom\":\"%nom%, %cognoms%\"}`El mapa d'atributs sempre s'interpolarà. La versió CAS 1.0 només permet l'atribut `username`. Els atributs interns disponibles són: username, name, email, rooms; rooms és una llista separada per comes de sales a unir-se durant la creació d'un usuari. Ex: {\"rooms\": \"%team%,%department%\"} uniria els nous usuaris CAS creats a les sales del seu equip (team) i departament (department).", + "CAS_trust_username": "Confiar en el nom d'usuari de CAS", + "CAS_trust_username_description": "Quan estigui habilitat, Rocket.Chat confiarà en que qualsevol nom d'usuari de CAS pertanyerà a el mateix usuari en Rocket.Chat.Això pot ser necessari si un usuari és renombrat a CAS, però també pot permetre a les persones prendre el control dels comptes de Rocket.Chat canviant el nom seus propis usuaris de CAS.", "CAS_version": "Versió CAS", "CAS_version_Description": "Només utilitzis una versió CAS suportada pel teu servei CAS SSO.", "Categories": "Categories", @@ -569,6 +703,7 @@ "Channel_Archived": "El canal `#%s` s'ha arxivat correctament.", "Channel_created": "Canal `#%s` creat.", "Channel_doesnt_exist": "El canal `#%s` no existeix", + "Channel_Export": "Exportar canal", "Channel_name": "Nom del canal", "Channel_Name_Placeholder": "Sisplau, introdueix el nom de canal...", "Channel_to_listen_on": "Canal on escoltar", @@ -576,11 +711,19 @@ "Channels": "Canals", "Channels_are_where_your_team_communicate": "Els canals són on es comunica el teu equip", "Channels_list": "Llista de canals públics", + "Channel_what_is_this_channel_about": "De què tracta aquest canal?", + "Chart": "Gràfic", "Chat_button": "botó de xat", + "Chat_close": "Tancar Xat", "Chat_closed": "Xat tancat", "Chat_closed_by_agent": "Xat tancat per l'agent", "Chat_closed_successfully": "Xat tancat correctament", + "Chat_History": "Historial del Xat", "Chat_Now": "Xateja ara", + "Chat_queued": "Xat en cua", + "Chat_removed": "Xat eliminat", + "Chat_start": "Inici de xat", + "Chat_taken": "Xat pres", "Chat_window": "finestra de xat", "Chatops_Enabled": "Activa Chatops", "Chatops_Title": "Tauler de Chatops", @@ -588,18 +731,21 @@ "Chatpal_AdminPage": "Pàgina d'administrador de Chatpal", "Chatpal_All_Results": "Tot", "Chatpal_API_Key": "Clau API", - "Chatpal_API_Key_Description": "Encara no tens una clau de l'API? Obteniu-ne un!", + "Chatpal_API_Key_Description": "Encara no tens una clau de l'API? Obteniu-ne un!", "Chatpal_Backend": "Tipus de suport", "Chatpal_Backend_Description": "Seleccioneu si voleu utilitzar Chatpal com a servei o com a instal·lació al lloc", "Chatpal_Base_URL": "Base Url", "Chatpal_Base_URL_Description": "Més informació sobre com executar una instància local a github. L'URL ha de ser absolut i apuntar al nucli de chatpal. Exemple: http://localhost:8983/solr/chatpal", "Chatpal_Batch_Size": "Mida del lot de l'índex", - "Chatpal_Batch_Size_Description": "La mida del lot dels documents d'índex (en arrencada d'arrencada)", + "Chatpal_Batch_Size_Description": "La mida del lot dels documents d'índex (en l'arrencada)", + "Chatpal_channel_not_joined_yet": "Channel encara no s'ha unit", "Chatpal_create_key": "Crea una clau", "Chatpal_created_key_successfully": "La clau de l'API s'ha creat correctament", + "Chatpal_Current_Room_Only": "Mateixa sala", "Chatpal_Default_Result_Type": "Tipus de resultat per defecte", - "Chatpal_Default_Result_Type_Description": "Defineix quin tipus de resultat es mostra per resultat. Tot això vol dir que es proporciona una visió general per a tots els tipus.", - "Chatpal_Email_Address": "Correu electrònic", + "Chatpal_Default_Result_Type_Description": "Defineix quin tipus de resultat es mostra per resultat. Tot vol dir que es proporciona una descripció general de tots els tipus.", + "Chat_Duration": "Durada del xat", + "Chatpal_Email_Address": "Adreça de Correu electrònic", "Chatpal_ERROR_Email_must_be_set": "Cal establir un correu electrònic", "Chatpal_ERROR_Email_must_be_valid": "El correu electrònic ha de ser vàlid", "Chatpal_ERROR_TAC_must_be_checked": "Cal verificar els Termes i condicions", @@ -610,6 +756,8 @@ "Chatpal_go_to_user": "Enviar missatge directe", "Chatpal_HTTP_Headers": "Capçaleres Http", "Chatpal_HTTP_Headers_Description": "Llista de encapçalats HTTP, un encapçalament per línia. Format: nom: valor", + "Chatpal_Include_All_Public_Channels": "Inclou tots els Channel públics", + "Chatpal_Include_All_Public_Channels_Description": "Cerca en tots els canals públics, encara que no s'ha unit a ells.", "Chatpal_Main_Language": "Idioma principal", "Chatpal_Main_Language_Description": "L'idioma que més s'utilitza a les converses", "Chatpal_Messages": "Missatges", @@ -631,63 +779,93 @@ "Chatpal_Users": "Usuaris", "Chatpal_Welcome": "Gaudeix de la teva cerca!", "Chatpal_Window_Size": "Mida de la finestra d'índex", - "Chatpal_Window_Size_Description": "La mida de les finestres d'índex en hores (en arrencada d'arrencada)", + "Chatpal_Window_Size_Description": "La mida de les finestres d'índex en hores (en arrencada)", + "Chats_removed": "Xats eliminats", + "Check_All": "Selecciona-ho tot", + "Check_Progress": "Comprovar progrés", "Choose_a_room": "Tria una sala", "Choose_messages": "Tria missatges", "Choose_the_alias_that_will_appear_before_the_username_in_messages": "Tria l'àlies que apareixerà abans del nom d'usuari als missatges.", "Choose_the_username_that_this_integration_will_post_as": "Tria el nom d'usuari amb el qual aquesta integració publicarà.", + "Choose_users": "Trieu usuaris", "Clean_Usernames": "Esborreu noms d'usuari", "clean-channel-history": "Esborrar l'historial de canal", "clean-channel-history_description": "Permís per esborrar l'historial dels canals", "clear": "Esborra", "Clear_all_unreads_question": "Esborrar tots els missatges no llegits?", "clear_cache_now": "Esborra la memòria cau ara", + "Clear_filters": "Esborra els filtres", "clear_history": "Esborra l'historial", "Click_here": "Fes clic aquí", + "Click_here_for_more_details_or_contact_sales_for_a_new_license": "Cliqueu aquí per a més detalls o contacta amb __email__ per a una nova llicència.", "Click_here_for_more_info": "Fes clic aquí per a més informació", - "Click_here_to_enter_your_encryption_password": "Feu clic aquí per introduir la vostra contrasenya de xifratge", + "Click_here_to_enter_your_encryption_password": "Feu clic aquí per a ingressar la contrasenya de xifrat", "Click_here_to_view_and_copy_your_password": "Feu clic aquí per veure i copiar la vostra contrasenya.", "Click_the_messages_you_would_like_to_send_by_email": "Feu clic als missatges que voleu enviar per correu electrònic", "Click_to_join": "Fes clic per unir-te!", + "Click_to_load": "Feu clic per carregar", "Client_ID": "Client ID", "Client_Secret": "Client Secret", "Clients_will_refresh_in_a_few_seconds": "Els clients es refrescaran en breus instants", "close": "tanca", "Close": "Tanca", - "close-livechat-room": "Tancar sala de xat en viu", - "close-livechat-room_description": "Permís per tancar el canal de xat en viu actiu", - "close-others-livechat-room": "Tancar sala de xat en viu", - "close-others-livechat-room_description": "Permís per tancar altres canals de xat en viu", + "Close_room_description": "Esteu a punt de tancar aquest xat. Esteu segur que voleu continuar?", + "close-livechat-room": "Tancar sala de Livechat", + "close-livechat-room_description": "Permís per tancar la sala d'LiveChat actual", + "close-others-livechat-room": "Tancar un altre sala de Livechat", + "close-others-livechat-room_description": "Permís per tancar altres canals de LiveChat", "Closed": "Tancat", + "Closed_At": "Tancat a les", "Closed_automatically": "Tancat automàticament pel sistema", "Closed_by_visitor": "Tancat pel visitant", "Closing_chat": "Tancant xat", - "Cloud": "Cloud", - "Cloud_address_to_send_registration_to": "L’adreça a la qual enviar el vostre correu electrònic de registre a Cloud.", - "Cloud_console": "Cloud Console", + "Closing_chat_message": "Missatge de tancament de xat", + "Cloud": "Núvol", + "Cloud_Apply_Offline_License": "Aplica una llicència fora de línia", + "Cloud_Change_Offline_License": "Canvia la llicència fora de línia", + "Cloud_License_applied_successfully": "Llicència aplicada amb èxit!", + "Cloud_Invalid_license": "Llicència no vàlida!", + "Cloud_Apply_license": "Aplicar llicència", + "Cloud_connectivity": "Connectivitat al núvol", + "Cloud_address_to_send_registration_to": "La direcció a la qual enviar el correu electrònic de registre en el núvol.", + "Cloud_click_here": "Després de copiar el text, veu a la consola Cloud. [Cliqueu aquí](__cloudConsoleUrl__)", + "Cloud_console": "Consola en el núvol", "Cloud_error_code": "Codi: __errorCode__", - "Cloud_error_in_authenticating": "S'ha rebut un error en autenticar-se", - "Cloud_login_to_cloud": "Inicieu sessió a Rocket.Chat Cloud", + "Cloud_error_in_authenticating": "Error durant l'autenticació", + "Cloud_Info": "Informació del núvol", + "Cloud_login_to_cloud": "Inicieu sessió en Rocket.Chat Cloud", "Cloud_logout": "Sortir de Rocket.Chat Cloud", - "Cloud_manually_input_token": "Introduïu manualment la fitxa rebuda al correu electrònic de registre de Cloud.", + "Cloud_manually_input_token": "Introduïu manualment el Token rebut al correu electrònic de registre al núvol.", + "Cloud_register_error": "Hi ha hagut un error a l'intentar processar la seva sol·licitud. Torneu-ho de nou més tard.", + "Cloud_Register_manually": "Registra't sense connexió", + "Cloud_register_offline_finish_helper": "Després de completar el procés de registre en Cloud Console, hauria d'aparèixer un text. Enganxeu-lo aquí per finalitzar el registre.", + "Cloud_register_offline_helper": "Els espais de treball es poden registrar manualment si es restringeix l'accés a la xarxa o l'espai d'aire. Copieu el text a continuació i aneu a la nostra consola en el núvol per completar el procés.", + "Cloud_register_success": "El seu espai de treball s'ha registrat correctament!", + "Cloud_registration_pending_html": " Les notificacions en dispositius mòbils no funcionessin fins que el registre hagi finalitzat. Llegir més ", + "Cloud_registration_pending_title": "El registre en el núvol encara està pendent", "Cloud_registration_required": "Cal registrar-se", - "Cloud_registration_required_description": "Sembla que durant la configuració no heu triat registrar l’espai de treball.", + "Cloud_registration_required_description": "Sembla que durant la configuració no va triar registrar el seu espai de treball.", "Cloud_registration_required_link_text": "Feu clic aquí per registrar el vostre espai de treball.", - "Cloud_resend_email": "Reenvia l'email", - "Cloud_status_page_description": "Si un determinat servei Cloud té problemes, podeu comprovar els problemes coneguts a la nostra pàgina d’estat.", + "Cloud_resend_email": "Reenvia correu electrònic", + "Cloud_Service_Agree_PrivacyTerms": "Acords i termes de privacitat de el servei en el núvol", + "Cloud_Service_Agree_PrivacyTerms_Description": "Estic d'acord amb els Termes i la Política de privacitat", + "Cloud_Service_Agree_PrivacyTerms_Login_Disabled_Warning": "Ha d'acceptar els termes de privacitat del núvol (Assistent de configuració> Informació del núvol> Acord de termes de privacitat de el servei de núvol) per connectar al seu espai de treball en el núvol.", + "Cloud_status_page_description": "Si un Servei de Cloud en particular té problemes, pot verificar els problemes coneguts a la nostra pàgina d'estat a", + "Cloud_token_instructions": "Per registrar el seu espai de treball, aneu a Cloud Console. Inicieu sessió o creeu un compte i feu clic a registrar-autogestionat. Enganxeu el testimoni proporcionat a continuació", "Cloud_troubleshooting": "Resolució de problemes", "Cloud_update_email": "Actualitza el correu electrònic", "Cloud_what_is_it": "Què és això?", - "Cloud_what_is_it_additional": "A més, podreu gestionar llicències, facturació i suport des de Rocket.Chat Cloud Console", - "Cloud_what_is_it_description": "Rocket.Chat Cloud Connect us permet connectar el vostre espai de treball Rocket.Chat amb els vostres serveis en el nostre Cloud.", + "Cloud_what_is_it_additional": "A més, podrà administrar llicències, facturació i suport des de la consola del núvol Rocket.Chat.", + "Cloud_what_is_it_description": "Rocket.Chat Cloud Connect li permet connectar el seu espai de treball Rocket.Chat autohospedado als serveis que oferim al nostre núvol.", "Cloud_what_is_it_services_like": "Serveis com:", - "Cloud_workspace_connected": "El vostre espai de treball està connectat a Rocket.Chat Cloud. Iniciar la sessió al vostre compte Rocket.Chat Cloud aquí us permetrà interactuar amb alguns serveis com el mercat.", + "Cloud_workspace_connected": "El seu espai de treball està connectat a Rocket.Chat Cloud. Inicia la sessió al compte de Rocket.Chat Cloud aquí li permetrà interactuar amb alguns serveis com al marketplace.", "Cloud_workspace_connected_plus_account": "El vostre espai de treball està connectat al Rocket.Chat Cloud i hi ha un compte associat.", - "Cloud_workspace_connected_without_account": "El vostre espai de treball està connectat al Rocket.Chat Cloud. Si voleu, podeu iniciar sessió al Rocket.Chat Cloud i associar l’espai de treball al vostre compte de Cloud.", - "Cloud_workspace_disconnect": "Si ja no voleu utilitzar els serveis del núvol, podeu desconnectar l’espai de treball de Rocket.Chat Cloud.", - "Cloud_workspace_support": "Si teniu problemes amb un servei Cloud, proveu de sincronitzar primer. Si el problema persisteix, obriu un bitllet de suport a Cloud Console.", + "Cloud_workspace_connected_without_account": "El seu espai de treball ara està connectat a Rocket.Chat Cloud. Si ho desitja, podeu entrar en Rocket.Chat Cloud i associar el seu espai de treball amb el seu compte en el núvol.", + "Cloud_workspace_disconnect": "Si ja no desitja utilitzar els serveis en el núvol, pot desconnectar el seu espai de treball de Rocket.Chat Cloud.", + "Cloud_workspace_support": "Si té problemes amb un servei en el núvol, intenti sincronitzar primer. Si el problema persisteix, obriu un tiquet de suport en Cloud Console.", "Collaborative": "Col·laboratiu", - "Collapse_Embedded_Media_By_Default": "Continguts incrustats compactats per defecte", + "Collapse": "Caiguda", + "Collapse_Embedded_Media_By_Default": "Contraure mitjans integrats per defecte", "color": "Color", "Color": "Color", "Colors": "Colors", @@ -697,33 +875,49 @@ "Community": "Comunitat", "Compact": "Compacte", "Condensed": "Condensat", + "Commit_details": "Detalls de la transacció", "Completed": "Completat", "Computer": "Ordinador", - "Confirm_new_encryption_password": "Confirmeu la contrasenya de xifratge nova", + "Configure_Incoming_Mail_IMAP": "Configurar el correu entrant (IMAP)", + "Configure_Outgoing_Mail_SMTP": "Configura el correu sortint (SMTP)", + "Confirm_new_encryption_password": "Confirmar la nova clau de xifrat", "Confirm_new_password": "Confirmar nova contrasenya", - "Confirm_New_Password_Placeholder": "Torneu a introduir la contrasenya nova ...", + "Confirm_New_Password_Placeholder": "Si us plau, torni a ingressar una nova contrasenya ...", "Confirm_password": "Confirma la contrasenya", "Connect": "Connectar", - "Connection_Closed": "S'ha tancat la connexió", - "Connection_Reset": "S'ha restablit la connexió", + "Connect_SSL_TLS": "Connectar amb SSL / TLS", + "Connection_Closed": "Connexió tancada", + "Connection_Reset": "Connexió restablerta", + "Connection_success": "Connexió LDAP correcta", "Connectivity_Services": "Serveis de connectivitat", - "Consulting": "Consultoria", - "Consumer_Goods": "Bens de consum", + "Consulting": "Consultant", + "Consumer_Packaged_Goods": "Bienes de consumo envasados", "Contact": "Contacte", - "Contains_Security_Fixes": "Conté resolucions de seguretat", + "Contacts": "Contactes", + "Contact_Name": "Nom de contacte", + "Contact_Center": "Centre de contacte", + "Contact_Chat_History": "Historial de xats de contacte", + "Contains_Security_Fixes": "Conté correccions de seguretat", + "Contact_Manager": "Adminsitrador de contactes", + "Contact_not_found": "Contacte no trobat", + "Contact_Profile": "Perfil de contacte", "Content": "Contingut", "Continue": "Continuar", - "Continuous_sound_notifications_for_new_livechat_room": "Notificacions de so continus per a la nova sala de càmeres en viu", + "Continuous_sound_notifications_for_new_livechat_room": "Notificacions de so continus per a la nova sala de LiveChat", "Conversation": "Conversa", "Conversation_closed": "Conversa tancada: __comment__.", - "Conversation_finished_message": "Missatge acabat de conversa", + "Conversation_closing_tags": "Etiquetes de tancament de la conversa", + "Conversation_closing_tags_description": "Les etiquetes de tancament s'assignaran automàticament a les converses a el tancament.", + "Conversation_finished": "Conversa finalitzada", + "Conversation_finished_message": "Missatge de conversa finalitzada", + "Conversation_finished_text": "Text de conversa finalitzat", "conversation_with_s": "la conversa amb %s", "Conversations": "Converses", - "Conversations_per_day": "Converses al dia", + "Conversations_per_day": "Converses per dia", "Convert_Ascii_Emojis": "Converteix ASCII a Emoji", "Copied": "Copiat", "Copy": "Còpia", - "Copy_text": "Copia el text", + "Copy_text": "Copiar el text", "Copy_to_clipboard": "Còpia al portapapers", "COPY_TO_CLIPBOARD": "CÒPIA AL PORTAPAPERS", "could-not-access-webdav": "No s'ha pogut accedir al WebDAV", @@ -822,7 +1016,7 @@ "Country_Guinea_bissau": "Guinea-bissau", "Country_Guyana": "Guaiana", "Country_Haiti": "Haití", - "Country_Heard_Island_and_Mcdonald_Islands": "Illes Heard i Mcdonald Islands", + "Country_Heard_Island_and_Mcdonald_Islands": "Illa Heard i Illes Mcdonald", "Country_Holy_See_Vatican_City_State": "Santa Seu (Estat de la Ciutat del Vaticà)", "Country_Honduras": "Hondures", "Country_Hong_Kong": "Hong Kong", @@ -830,7 +1024,7 @@ "Country_Iceland": "Islàndia", "Country_India": "Índia", "Country_Indonesia": "Indonèsia", - "Country_Iran_Islamic_Republic_of": "Iran, República Islàmica de", + "Country_Iran_Islamic_Republic_of": "República Islàmica de l'Iran", "Country_Iraq": "Iraq", "Country_Ireland": "Irlanda", "Country_Israel": "Israel", @@ -841,7 +1035,7 @@ "Country_Kazakhstan": "Kazakhstan", "Country_Kenya": "Kenya", "Country_Kiribati": "Kiribati", - "Country_Korea_Democratic_Peoples_Republic_of": "Corea, República Popular Democràtica de", + "Country_Korea_Democratic_Peoples_Republic_of": "República Popular Democràtica de Corea", "Country_Korea_Republic_of": "Corea, República de", "Country_Kuwait": "Kuwait", "Country_Kyrgyzstan": "Kirguizistan", @@ -920,7 +1114,7 @@ "Country_Senegal": "Senegal", "Country_Serbia_and_Montenegro": "Sèrbia i Montenegro", "Country_Seychelles": "Seychelles", - "Country_Sierra_Leone": "Sierra Leone", + "Country_Sierra_Leone": "Serra Lleona", "Country_Singapore": "Singapur", "Country_Slovakia": "Eslovàquia", "Country_Slovenia": "Eslovènia", @@ -942,7 +1136,7 @@ "Country_Tanzania_United_Republic_of": "Tanzània, República Unida de", "Country_Thailand": "Tailàndia", "Country_Timor_leste": "Timor-Leste", - "Country_Togo": "Anar", + "Country_Togo": "Togo", "Country_Tokelau": "Tokelau", "Country_Tonga": "Tonga", "Country_Trinidad_and_Tobago": "Trinitat i Tobago", @@ -971,27 +1165,35 @@ "Country_Zimbabwe": "Zimbabwe", "Cozy": "Acollidor", "Create": "Crea", + "Create_channel": "Crear Channel", "Create_A_New_Channel": "Crea un nou canal", "Create_new": "Crea nou", - "Create_unique_rules_for_this_channel": "Creeu regles úniques per a aquest canal", + "Create_unique_rules_for_this_channel": "Crea regles úniques per aquest canal", "create-c": "Crear canals públics", "create-c_description": "Permís per crear canals públics", "create-d": "Crear missatges directes", "create-d_description": "Permís per a iniciar missatges directes", + "create-invite-links": "Crear enllaços d'invitació", + "create-invite-links_description": "Permís per crear enllaços d'invitació als canals", "create-p": "Crear canals privats", "create-p_description": "Permís per crear canals privats", - "create-personal-access-tokens": "Creeu fitxes d'accés personal", + "create-personal-access-tokens": "Crear Tokens d'accés personal", "create-user": "Crear usuari", "create-user_description": "Permís per crear usuaris", + "Created": "Creat", + "Created_as": "Creat com", "Created_at": "Creat a", "Created_at_s_by_s": "Creat a %s per %s", "Created_at_s_by_s_triggered_by_s": "Creat el %s per %s i disparat per %s", + "Created_by": "Creat per", "CRM_Integration": "Integració CRM", "CROWD_Allow_Custom_Username": "Permet un nom d'usuari personalitzat a Rocket.Chat", "CROWD_Reject_Unauthorized": "Rebutja no autoritzat", + "Crowd_Remove_Orphaned_Users": "Elimina els usuaris orfes", "Crowd_sync_interval_Description": "L'interval entre les sincronitzacions. Exemple \"cada 24 hores\" o \"el primer dia de la setmana\", més exemples a [Cron Text Parser] (http://bunkat.github.io/later/parsers.html#text)", "Current_Chats": "Xats actuals", "Current_File": "Fitxer actual", + "Current_Import_Operation": "Operació d'importació actual", "Current_Status": "Estat actual", "Custom": "Personalitzat", "Custom CSS": "CSS personalitzat", @@ -1008,53 +1210,83 @@ "Custom_Emoji_Info": "Informació d'emoticona personalitzada", "Custom_Emoji_Updated_Successfully": "Emoticona personalitzada actualitzada correctament", "Custom_Fields": "Camps personalitzats", + "Custom_Field_Removed": "Camp personalitzat eliminat", + "Custom_Field_Not_Found": "Camp personalitzat no trobat", "Custom_oauth_helper": "Per configurar el proveïdor OAuth, heu d'establir un URL de retorn (callback). Useu %s.", "Custom_oauth_unique_name": "Nom únic de OAuth personalitzat", - "Custom_Script_Logged_In": "Script personalitzat per als usuaris en identificar-se", - "Custom_Script_Logged_In_Description": "Script personalitzat que s’executarà SEMPRE i a qualsevol usuari que tingui sessió iniciada. (sempre que entreu al xat i esteu registrats)", - "Custom_Script_Logged_Out": "Script personalitzat per als usuaris en sortir", - "Custom_Script_Logged_Out_Description": "Script personalitzat que s’executarà SEMPRE i a qualsevol usuari que NO hi hagi sessió iniciada. (sempre que entreu a la pàgina d’inici de sessió)", - "Custom_Script_On_Logout": "Script personalitzat per al flux de sortida de la sessió", - "Custom_Script_On_Logout_Description": "Script personalitzat que s’executarà en executar NOMÉS el flux de sortida de la sessió", + "Custom_Script_Logged_In": "Script personalitzat per a usuaris que han iniciat sessió", + "Custom_Script_Logged_In_Description": "Script personalitzat que s'executarà SEMPRE i per QUALSEVOL usuari que estigui connectat. (Cada vegada que ingressa a xat i està connectat)", + "Custom_Script_Logged_Out": "Script personalitzat per als usuaris que han tancat sessió", + "Custom_Script_Logged_Out_Description": "Script personalitzat que s'executarà SEMPRE i per QUALSEVOL usuari que NO hagi iniciat sessió. (Sempre que ingressi a la pàgina d'inici de sessió)", + "Custom_Script_On_Logout": "Script personalitzat per al flux de tancament de sessió", + "Custom_Script_On_Logout_Description": "Script personalitzat que s'executarà NOMÉS en el flux de tancament de sessió", "Custom_Scripts": "Scripts personalitzats", "Custom_Sound_Add": "Afegir so personalitzat", "Custom_Sound_Delete_Warning": "L'eliminació d'un so no es pot revertir.", + "Custom_Sound_Edit": "Editar el so personalitzat", "Custom_Sound_Error_Invalid_Sound": "So invàlid", "Custom_Sound_Error_Name_Already_In_Use": "El nom del so personalitzat ja està en ús.", "Custom_Sound_Has_Been_Deleted": "El so personalitzat s'ha esborrat.", "Custom_Sound_Info": "Informació del so personalitzat", "Custom_Sound_Saved_Successfully": "So personalitzat guardat correctament", "Custom_Sounds": "Sons personalitzats", + "Custom_Status": "Estat personalitzat", "Custom_Translations": "Traduccions personalitzades", "Custom_Translations_Description": "Ha de ser un objecte JSON vàlid on les claus són el codi de l'idioma i contenen un diccionari de clau i traducció. Exemple:{\n \"en\": {\n \"Channels\": \"Rooms\"\n },\n \"pt\":{\n \"Channels\": \"Salas\"\n }\n} ", "Custom_User_Status": "Estat d’usuari personalitzat", "Custom_User_Status_Add": "Afegir estat d'usuari personalitzat", - "Custom_User_Status_Added_Successfully": "Afegir estat d'usuari personalitzat", - "Custom_User_Status_Delete_Warning": "La supressió d'un estat d'usuari personalitzat no es pot desfer.", + "Custom_User_Status_Added_Successfully": "Es va afegir correctament l'estat d'usuari personalitzat", + "Custom_User_Status_Delete_Warning": "L'eliminació d'un estat d'usuari personalitzat no es pot desfer.", + "Custom_User_Status_Edit": "Edita l'estat de l'usuari personalitzat", "Custom_User_Status_Error_Invalid_User_Status": "Estat d’usuari no vàlid", "Custom_User_Status_Error_Name_Already_In_Use": "El nom d’estat d’usuari personalitzat ja està en ús.", - "Custom_User_Status_Has_Been_Deleted": "S'ha suprimit l'estat de l'usuari personalitzat", + "Custom_User_Status_Has_Been_Deleted": "L'estat d'usuari personalitzat s'ha eliminat", + "Custom_User_Status_Info": "Informació sobre l'estat d'usuari personalitzat", + "Custom_User_Status_Updated_Successfully": "Estat d'usuari personalitzat actualitzat amb èxit", "Customize": "Customitza", "CustomSoundsFilesystem": "Sistema d'arxius dels sons personalitzats", + "Daily_Active_Users": "Usuaris actius diaris", "Dashboard": "Tauler", + "Data_processing_consent_text": "Text de consentiment de processament de dades", + "Data_processing_consent_text_description": "Utilitzeu aquest paràmetre per explicar que pot recopilar, emmagatzemar i processar la informació personal d'el client al llarg de la conversa.", "Date": "Data", "Date_From": "De", "Date_to": "a", + "DAU_value": "DAU __value__", "days": "dies", + "Days": "Díes", "DB_Migration": "Migració de base de dades", "DB_Migration_Date": "Data de migració de la BD", + "DDP_Rate_Limit_Connection_By_Method_Enabled": "Límit de Connexió per Mètode: habilitat", + "DDP_Rate_Limit_Connection_By_Method_Interval_Time": "Límit de Connexió per Mètode: interval de temps", + "DDP_Rate_Limit_Connection_By_Method_Requests_Allowed": "Límit de Connexió per Mètode: peticions permeses", + "DDP_Rate_Limit_Connection_Enabled": "Límit per Connexió: habilitat", + "DDP_Rate_Limit_Connection_Interval_Time": "Límit per Connexió: interval de temps", + "DDP_Rate_Limit_Connection_Requests_Allowed": "Límit per connexió: sol·licituds permeses", + "DDP_Rate_Limit_IP_Enabled": "Límit per IP: habilitat", + "DDP_Rate_Limit_IP_Interval_Time": "Límit per IP: interval de temps", + "DDP_Rate_Limit_IP_Requests_Allowed": "Límit per IP: peticions permeses", + "DDP_Rate_Limit_User_By_Method_Enabled": "Límit per Usuari i Mètode: habilitat", + "DDP_Rate_Limit_User_By_Method_Interval_Time": "Límit per Usuari i Mètode: interval de temps", + "DDP_Rate_Limit_User_By_Method_Requests_Allowed": "Límit per Usuari i Mètode: peticions permeses", + "DDP_Rate_Limit_User_Enabled": "Límit per usuari: habilitat", + "DDP_Rate_Limit_User_Interval_Time": "Límit per usuari: interval de temps", + "DDP_Rate_Limit_User_Requests_Allowed": "Límit per usuari: peticions permeses", "Deactivate": "Desactiva", "Decline": "Rebutja", + "Decode_Key": "Clau de descodificació", "Default": "Per defecte", "Default_value": "Valor per defecte", "Delete": "Elimina", + "Delete_all_closed_chats": "Eliminar tots els xats tancats", + "Delete_File_Warning": "Suprimir un arxiu el eliminarà per sempre. Això no es pot desfer.", "Delete_message": "Esborra missatge", "Delete_my_account": "Esborra el meu compte", "Delete_Room_Warning": "Eliminar una sala de xat esborra tots els missatges que conté. Aquesta acció no es pot desfer.", "Delete_User_Warning": "Eliminar un usuari també esborra tots els missatges que ha enviat. Aquesta acció no es pot desfer.", "Delete_User_Warning_Delete": "Eliminar un usuari també esborra tots els missatges que ha enviat. Aquesta acció no es pot desfer.", "Delete_User_Warning_Keep": "S'eliminarà l'usuari, però els seus missatges romandran visibles. Això no es pot desfer.", - "Delete_User_Warning_Unlink": "La supressió d'un usuari eliminarà el nom d'usuari de tots els missatges. Això no es pot desfer.", + "Delete_User_Warning_Unlink": "Eliminar un usuari eliminarà el nom d'usuari de tots els seus missatges. Això no es pot desfer.", "delete-c": "Esborrar canals públics", "delete-c_description": "Permís per esborrar canals públics", "delete-d": "Esborrar missatges directes", @@ -1079,14 +1311,22 @@ "Desktop_Notifications_Duration": "Durada de les notificacions d'escriptori", "Desktop_Notifications_Duration_Description": "Segons de mostra de les notificacions d'escriptori. Això pot afectar al centre de notificacions del macOS. Introduïu 0 per utilitzar la configuració del navegador per defecte i no afectar al centre de notificacions.", "Desktop_Notifications_Enabled": "Les notificacions d'escriptori estan activades", + "Desktop_Notifications_Not_Enabled": "Les notificacions d'escriptori no estan habilitades", + "Details": "Detalls", "Different_Style_For_User_Mentions": "Estil diferent per les mencions d'usuari", + "Direct_Message": "Missatge directe", + "Direct_message_creation_description": "Estàs a punt de crear un xat amb múltiples usuaris. Afegeix als usuaris amb els que t'agradaria parlar, tots en el mateix lloc, fent servir missatges directes.", "Direct_message_someone": "Envia un missatge directe a algú", + "Direct_message_you_have_joined": "S'ha unit a un nou missatge directe amb", "Direct_Messages": "Missatges directes", "Direct_Reply": "Resposta directa", + "Direct_Reply_Advice": "Pots respondre directament a aquest correu electrònic. No modifiqueu els correus electrònics anteriors en el fil.", "Direct_Reply_Debug": "Debug resposta directa", - "Direct_Reply_Debug_Description": "[Guarda] Si habiliteu el mode de depuració, es mostrarà la vostra 'Contrasenya de text sense format' a la consola d'administració.", - "Direct_Reply_Delete": "Esborra correus-e interceptats", + "Direct_Reply_Debug_Description": "[Compte] Activa el mode de depuració mostraria el seu 'Contrasenya de text sense format' a la consola d'administració.", + "Direct_Reply_Delete": "Eliminar correus electrònics", + "Direct_Reply_Delete_Description": "[Atenció!] Si s'activa aquesta opció, tots els missatges no llegits seran eliminats irrevocablement, fins i tot els que no són respostes directes. La bústia de correu electrònic configurat està llavors sempre buit i no pot ser processat en \"paral·lel\" per humans.", "Direct_Reply_Enable": "Activa resposta directa", + "Direct_Reply_Enable_Description": "[Atenció!] Si \"Resposta Directa\" està habilitat, Rocket.Chat controlarà la bústia de correu electrònic configurat. Tots els correus electrònics no llegits són recuperats, marcats com a llegits i processats. \"Resposta directa\" només ha de ser activada si la bústia utilitzat està destinat exclusivament per a l'accés de Rocket.Chat i no és llegit / processat \"en paral·lel\" per humans.", "Direct_Reply_Frequency": "Freqüència de comprovació de correu-e", "Direct_Reply_Frequency_Description": "(en minuts, per defecte/mínim 2)", "Direct_Reply_Host": "Host de resposta directa", @@ -1097,18 +1337,36 @@ "Direct_Reply_Separator": "Separador", "Direct_Reply_Separator_Description": "[Modifiqueu només si sabeu exactament què feu, consulteu documents]Separador entre base i etiqueta del correu electrònic", "Direct_Reply_Username": "Nom d'usuari", - "Direct_Reply_Username_Description": "Si us plau, utilitzeu un correu electrònic absolut, l'etiquetatge no està permès, seria sobrescriure", + "Direct_Reply_Username_Description": "Utilitzeu el correu electrònic absolut, l'etiquetatge no està permès, se sobreescriurà", "Directory": "directori", "Disable_Facebook_integration": "Desactiva la integració de Facebook", "Disable_Notifications": "Desactiva notificacions", "Disable_two-factor_authentication": "Desactiva l'autenticació de dos factors", + "Disable_two-factor_authentication_email": "Desactivar l'autenticació de doble factor per correu electrònic", "Disabled": "Inactiu", "Disallow_reacting": "No permetre la reacció", "Disallow_reacting_Description": "No permet reaccionar", + "Discard": "Descartar", + "Disconnect": "Desconnectar", + "Discussion": "Discussió", + "Discussion_description": "Ajudeu a mantenir una visió general del que està succeint! A l'crear una discussió, es crea un subcanal de què va seleccionar i tots dos es vinculen.", + "Discussion_first_message_disabled_due_to_e2e": "Pot començar a enviar missatges xifrats d'extrem a extrem en aquesta discussió després de la seva creació.", + "Discussion_first_message_title": "el teu missatge", + "Discussion_name": "Nom de la discussió", + "Discussion_start": "Començar una discussió", + "Discussion_target_channel": "Canal o grup pare", + "Discussion_target_channel_description": "Seleccioneu un canal relacionat amb el que vulgueu demanar", + "Discussion_target_channel_prefix": "Esteu creant una discussió", + "Discussion_title": "Crear una nova discussió", + "discussion-created": "__message__", + "Discussions": "Discussions", + "Display_chat_permissions": "Mostra permisos de xat", "Display_offline_form": "Mostra el formulari de fora de línia", + "Display_setting_permissions": "Mostra permisos per canviar la configuració", "Display_unread_counter": "Mostra el nombre de missatges no llegits", "Displays_action_text": "Mostra text de l'acció", "Do_not_display_unread_counter": "No mostreu cap comptador d'aquest canal", + "Do_not_provide_this_code_to_anyone": "No comparteixi aquest codi amb ningú.", "Do_you_want_to_accept": "Ho accepteu?", "Do_you_want_to_change_to_s_question": "Canvia a %s?", "Document_Domain": "Domini del document", @@ -1119,39 +1377,72 @@ "Domains_allowed_to_embed_the_livechat_widget": "Llista separada per comes dels dominis on es permet incloure el xat en viu. Deixeu en blanc per permetre'ls tots.", "Dont_ask_me_again": "No em tornis a preguntar!", "Dont_ask_me_again_list": "No tornis a demanar-me una altra vegada", - "Download_My_Data": "Baixar les meves dades", + "Download_Info": "Descarregar informació", + "Download_My_Data": "Descarregar les meves dades (HTML)", + "Download_Pending_Files": "Descarregar arxius pendents", "Download_Snippet": "Descarrega", + "Downloading_file_from_external_URL": "Descarregant arxiu des URL externa", "Drop_to_upload_file": "Arrossega un arxiu aquí per pujar-lo", "Dry_run": "Prova de funcionament", "Dry_run_description": "Només s'enviarà un correu-e, a l'adreça del camp \"De\". El correu electrònic ha de pertànyer a un usuari vàlid.", "Duplicate_archived_channel_name": "Ja hi ha un canal arxivat amb el nom `#%s`.", "Duplicate_archived_private_group_name": "Ja hi ha un grup privat arxivat amb el nom de '%s'", "Duplicate_channel_name": "Ja existeix un canal anomenat «%s»", + "Duplicate_file_name_found": "Es va trobar un nom de fitxer duplicat.", "Duplicate_private_group_name": "Ja hi ha un grup privat amb el nom '%s'", + "Duplicated_Email_address_will_be_ignored": "S'ignorarà l'adreça electrònica duplicada.", + "duplicated-account": "Compte duplicat", + "E2E Encryption": "Xifrat E2E", + "E2E_enable": "Habilitar E2E", + "E2E_disable": "Deshabilitat E2E", + "E2E_Enable_alert": "Aquesta funció està actualment en versió beta. Informeu d’errors a github.com/RocketChat/Rocket.Chat/issues i tingueu en compte: - Les operacions de cerca no trobaran els missatges xifrats de les sales xifrades.- És possible que les aplicacions mòbils no admetin els missatges encriptats. (ho estan implementant).- És possible que els robots no puguin veure els missatges xifrats fins que no implementin el suport.- Les càrregues no es xifraran en aquesta versió.", + "E2E_Enable_description": "Habiliteu l'opció per crear grups encriptades i poder canviar grups i missatges directes per ser encriptats", + "E2E_Enabled": "E2E activat", + "E2E_Enabled_Default_DirectRooms": "Habilitar l'encriptació per a les Rooms directes per defecte", + "E2E_Enabled_Default_PrivateRooms": "Habilitar l'encriptació per a les Rooms privades per defecte", + "E2E_Encryption_Password_Change": "Canviar la contrasenya de xifrat", + "E2E_Encryption_Password_Explanation": "Ara pot crear grups privats codificats i missatges directes. També pot canviar els grups privats o missatges directes existents a xifrats. 1 /> Això és xifrat d'extrem a extrem, així que la clau per xifrar / desxifrar els teus missatges no es guardarà al servidor. Per aquesta raó necessites guardar la contrasenya en un lloc segur. Se't demanarà que la introdueixis en altres dispositius en els que vulguis utilitzar l'encriptació de E2E.", + "E2E_key_reset_email": "Notificació de reinici de clau E2E", + "E2E_password_request_text": "Per accedir als seus grups privats xifrats i als missatges directes, introdueixi la contrasenya de xifrat. Necessites introduir aquesta contrasenya per xifrar / desxifrar els teus missatges en cada client que utilitzis, ja que la clau no s'emmagatzema en el servidor.", + "E2E_password_reveal_text": "Ara podeu crear grups privats xifrats i missatges directes. També podeu canviar els grups privats o DM existents a xifrats. [Html0] Això fa que el xifratge finalitzi, de manera que la clau per codificar / descodificar els vostres missatges no es desarà al servidor. Per aquest motiu, heu de desar aquesta contrasenya en un lloc segur. Haureu d’introduir-lo en altres dispositius en què vulgueu utilitzar el xifratge e2e. Més informació aquí! La seva contrassenya es:Aquesta és una contrasenya generada automàticament; podeu configurar una nova contrasenya per a la vostra clau de xifrat en qualsevol moment des de qualsevol navegador que hàgiu introduït la contrasenya existent. Aquesta contrasenya només s’emmagatzema en aquest del navegador fins que deseu la contrasenya i desactiveu aquest missatge.", + "E2E_Reset_Email_Content": "S'ha desconnectat automàticament. Quan torni a iniciar sessió, Rocket.Chat generarà una nova clau i restaurarà el seu accés a qualsevol sala xifrada que tingui un o més membres en línia. A causa de la naturalesa de l'xifrat E2E, Rocket.Chat no podrà restaurar l'accés a cap sala xifrada que no tingui membres en línia.", + "E2E_Reset_Key_Explanation": "Aquesta opció eliminarà la seva clau I2I actual i tancarà la sessió. Quan torni a iniciar sessió, Rocket.Chat li generarà una nova clau i restablirà el seu accés a qualsevol sala xifrada que tingui un o més membres en línia. A causa de la naturalesa de l'xifrat E2E, Rocket.Chat no podrà restaurar l'accés a cap sala xifrada que no tingui membres en línia.", + "E2E_Reset_Other_Key_Warning": "Restablir la clau E2E actual tancarà la sessió de l'usuari. Quan l'usuari torna a iniciar sessió, Rocket.Chat generarà una nova clau i restaurarà l'accés de l'usuari a qualsevol sala xifrada que tingui un o més membres en línia. A causa de la naturalesa de l'xifrat E2E, Rocket.Chat no podrà restaurar l'accés a cap sala xifrada que no tingui membres en línia.", "Edit": "Edita", "Edit_Business_Hour": "Edita l'horari comercial", + "Edit_Canned_Responses": "Edita respostes emmagatzemades", "Edit_Custom_Field": "Edita camp personalitzat", "Edit_Department": "Edita departament", + "Edit_Invite": "Edita la invitació", "Edit_previous_message": "`%s` - Edita el missatge anterior", "Edit_Priority": "Edita la prioritat", "Edit_Status": "Edita l'estat", "Edit_Tag": "Edita l’etiqueta", "Edit_Trigger": "Edita disparador", "Edit_Unit": "Edita la unitat", + "Edit_User": "Edita l'usuari", "edit-message": "Editar missatge", "edit-message_description": "Permís per editar un missatge d'una sala", "edit-other-user-active-status": "Editar l'estat actiu d'un altre usuari", "edit-other-user-active-status_description": "Permís per activar o desactivar altres comptes", + "edit-other-user-avatar": "Edita l'avatar d'un altre usuari", + "edit-other-user-avatar_description": "Permís per canviar l'avatar d'un altre usuari.", + "edit-other-user-e2ee": "Edita el xifrat E2E d'un altre usuari", + "edit-other-user-e2ee_description": "Permís per modificar el xifrat I2I d'un altre usuari.", "edit-other-user-info": "Editar la informació d'un altre usuari", "edit-other-user-info_description": "Permís per canviar el nom, el nom d'usuari o l'adreça de correu-e d'altres usuaris", "edit-other-user-password": "Editar la contrasenya d'un altre usuari", "edit-other-user-password_description": "Permís per modificar la contrasenya d'altres usuaris. Requereix el permís edit-other-user-info.", + "edit-other-user-totp": "Edita el doble factor TOTP d'un altre usuari", "edit-privileged-setting": "Editar opcions privilegiades", "edit-privileged-setting_description": "Permís per editar la configuració", "edit-room": "Editar sala", "edit-room_description": "Permís per editar el nom d'una sala, el tema, el tipus (privada o pública) o l'estat (actiu o arxivat)", + "edit-room-avatar": "Edita Room Avatar", + "edit-room-avatar_description": "Permís per editar l'avatar d'una sala.", "edit-room-retention-policy": "Editeu la política de retenció de la sala", - "edit-room-retention-policy_description": "Permís per editar la política de retenció d'una habitació, per esborrar automàticament missatges", + "edit-room-retention-policy_description": "Permís per editar la política de retenció d'una sala, per esborrar automàticament missatges", + "Edit_Contact_Profile": "Edita el perfil de contacte", "edited": "editat", "Editing_room": "Edició de sala", "Editing_user": "Edició d'usuari", @@ -1161,75 +1452,120 @@ "Email_already_exists": "L'adreça de correu electrònic ja existeix", "Email_body": "Cos del missatge", "Email_Change_Disabled": "El canvi de correu electrònic està desactivat", + "Email_Changed_Description": "Podeu utilitzar els següents marcadors de posició: [e] per al correu electrònic de l'usuari. [Site_Name] i [ Site_URL] per al nom de l'aplicació i la URL respectivament. ", + "Email_Changed_Email_Subject": "[Site_name] - La direcció de correu electrònic ha estat modificada", + "Email_changed_section": "Adreça de correu electrònic modificada", "Email_Footer_Description": "És possible utilitzar els marcadors: [Site_Name] i [Site_URL] pel nom del lloc web i de l'adreça URL, respectivament.", "Email_from": "De", "Email_Header_Description": "És possible utilitzar els marcadors: [Site_Name] i [Site_URL] pel nom del lloc web i de l'adreça URL, respectivament.", + "Email_Inbox": "Safata d'entrada de correu electrònic", + "Email_Inboxes": "Safates d'entrada de correu electrònic", "Email_Notification_Mode": "Notificacions via correu electrònic fora de línia", "Email_Notification_Mode_All": "Cada menció / DM", "Email_Notification_Mode_Disabled": "Deshabilitat", + "Email_notification_show_message": "Mostra el missatge a la notificació per correu electrònic", + "Email_Notifications_Change_Disabled": "L'administrador de Rocket.Chat ha desactivat les notificacions de correu electrònic", "Email_or_username": "Adreça de correu-e o nom d'usuari", "Email_Placeholder": "Sisplau, introdueix la teva adreça de correu-e...", - "Email_Placeholder_any": "Introduïu les adreces de correu electrònic ...", + "Email_Placeholder_any": "Introduïu les adreces de correu electrònic...", + "email_plain_text_only": "Envia correus electrònics a text pla", + "email_style_description": "Eviteu els selectors imbricats", + "email_style_label": "Estil de correu electrònic", "Email_subject": "Assumpte", "Email_verified": "Adreça de correu-e verificada", + "Email_sent": "Correu electrònic enviat", + "Emails_sent_successfully!": "Correu electrònic enviat correctament!", "Emoji": "Emoji", "Emoji_provided_by_JoyPixels": "Emoji subministrat per JoyPixels", "EmojiCustomFilesystem": "Emoticones personalitzades", "Empty_title": "Títol buit", + "See_on_Engagement_Dashboard": "Consulteu el tauler de participació", "Enable": "Activa", "Enable_Auto_Away": "Activa Auto Away", "Enable_Desktop_Notifications": "Activa notificacions d'escriptori", - "Enable_omnichannel_auto_close_abandoned_rooms": "Habilita el tancament automàtic d’habitacions abandonades pel visitant", + "Enable_inquiry_fetch_by_stream": "Habilitar l'obtenció de dades de consulta des del servidor mitjançant una seqüència", + "Enable_omnichannel_auto_close_abandoned_rooms": "Habilita el tancament automàtic de sales abandonades pel visitant", "Enable_Svg_Favicon": "Activa el favicon SVG", - "Enable_two-factor_authentication": "Activa l'autenticació de dos factors", + "Enable_two-factor_authentication": "Activa l'autenticació de dos factors mitjançant TOTP", + "Enable_two-factor_authentication_email": "Habilitar l'autenticació en 2 passos via correu electrònic", "Enabled": "Activa", + "Encrypted": "Xifrat", + "Encrypted_channel_Description": "Canal xifrat d'extrem a extrem. La cerca no funcionarà amb canals xifrats i és possible que les notificacions no mostrin el contingut dels missatges.", "Encrypted_message": "Missatge xifrat", + "Encrypted_setting_changed_successfully": "La configuració encriptada es va modificar correctament", + "Encrypted_not_available": "No disponible per a Channels públics", + "Encryption_key_saved_successfully": "La seva clau d'encriptació es va guardar correctament", + "EncryptionKey_Change_Disabled": "No pot establir una contrasenya per a la clau de xifrat perquè la seva clau privada no està present en aquest client. Per establir una nova contrasenya, necessita carregar la seva clau privada amb el vostre contrasenya existent o utilitzar un client on la clau ja estigui carregada.", + "End": "Fi", "End_OTR": "Finalitza OTR", + "Engagement_Dashboard": "Tauler de participació", "Enter_a_custom_message": "Introduïu un missatge personalitzat", + "Enter_a_department_name": "Introduïu un nom de departament", + "Enter_a_name": "Introduïu un nom", "Enter_a_regex": "Introdueix una RegExp", "Enter_a_room_name": "Introdueix un nom de sala", + "Enter_a_tag": "Introduïu una etiqueta", "Enter_a_username": "Introdueix un nom d'usuari", "Enter_Alternative": "Mode alternatiu (envia amb Enter + Ctrl/Alt/Shift/CMD)", "Enter_authentication_code": "Entra el codi d'autenticació", "Enter_Behaviour": "Comportament de la tecla Enter", "Enter_Behaviour_Description": "Canvia si la tecla Enter envia el missatge o fa un salt de línia", + "Enter_E2E_password_to_decode_your_key": "Introduïu la contrasenya E2E per descodificar la vostra clau", "Enter_name_here": "Introdueix el nom aquí", "Enter_Normal": "Mode normal (envia amb Enter)", "Enter_to": "Entra a", + "Enter_your_E2E_password": "Introduïu la vostra contrasenya E2E", "Enterprise": "Empresa", "Enterprise_License": "Llicència d’empresa", - "Enterprise_License_Description": "Si el vostre espai de treball està registrat i la llicència la proporciona Rocket.Chat Cloud, no heu d’actualitzar manualment la llicència aquí.", + "Enterprise_License_Description": "Si el teu espai de treball està registrat i disposa d'una llicència proporcionada per Rocket.Chat Cloud no cal actualitzar aquesta llicència..", "Entertainment": "Entreteniment", "Error": "Error", "Error_404": "Error: 404", "Error_changing_password": "Error en canviar la contrasenya", "Error_loading_pages": "Error en carregar pàgines", + "Error_login_blocked_for_ip": "L'inici de sessió ha estat bloquejat temporalment per a aquesta IP", + "Error_login_blocked_for_user": "L'inici de sessió ha estat bloquejat temporalment per a aquest usuari", "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Error: El Rocket.Chat requereix oplog tailing quan s'executa en múltiples instàncies", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Si us plau, assegureu-vos que MongoDB és en mode ReplicaSet i la variable d'entorn MONGO_OPLOG_URL està definida correctament al servidor d'aplicacions", + "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Comproveu que el MongoDB estigui en mode ReplicaSet i que la variable d'entorn MONGO_OPLOG_URL estigui definida correctament al servidor d'aplicacions", + "Error_sending_livechat_offline_message": "Error a l'enviar el missatge LiveChat de fora de línia", + "Error_sending_livechat_transcript": "Error a l'enviar la transcripció de LiveChat", + "Error_Site_URL": "Site_Url no vàlid", + "Error_Site_URL_description": "Si us plau, actualitzi el valor de configuració \"Site_Url\", trobi més informació aquí", "error-action-not-allowed": "__action__ no permès", + "error-agent-offline": "L'agent està fora de línia", "error-application-not-found": "Aplicació no trobada", "error-archived-duplicate-name": "Ja hi ha un canal arxivat amb el nom '__room_name__'", "error-avatar-invalid-url": "URL de l'avatar no vàlid: __url__", "error-avatar-url-handling": "Error durant la configuració d'avatar d'usuari des de l'adreça URL (__url__) per a l'usuari __username__", - "error-canned-response-not-found": "No s'ha trobat la resposta de conserva", + "error-business-hours-are-closed": "L'horari comercial està tancat", + "error-canned-response-not-found": "Resposta predefinida no trobada", + "error-cannot-delete-app-user": "No es permet esborrar l'usuari de l'aplicació, desinstal l'aplicació corresponent per eliminar-la.", "error-cant-invite-for-direct-room": "No es pot convidar a l'usuari a sales directes", - "error-channels-setdefault-is-same": "La configuració predeterminada del canal és la mateixa que la que es va canviar a.", + "error-channels-setdefault-is-same": "La configuració predeterminada de canal és la mateixa a la qual es canviaria..", "error-channels-setdefault-missing-default-param": "El bodyParam 'default' és obligatori", "error-could-not-change-email": "No s'ha pogut canviar el correu electrònic", "error-could-not-change-name": "No s'ha pogut canviar el nom", "error-could-not-change-username": "No s'ha pogut canviar el nom d'usuari", + "error-custom-field-name-already-exists": "El nom de camp personalitzat ja existeix", "error-delete-protected-role": "No es pot eliminar un rol protegit", "error-department-not-found": "Departament no trobat", "error-direct-message-file-upload-not-allowed": "Compartició d'arxius no permesa als missatges directes", + "error-duplicate-channel-name": "Un canal amb el nom '__channel_name__' ja existeix", "error-edit-permissions-not-allowed": "No es permet editar permisos", "error-email-domain-blacklisted": "El domini de l'adreça electrònica és a la llista negra", "error-email-send-failed": "Error en l'intent d'enviament de correu-e: __message__", + "error-essential-app-disabled": "Error: una aplicació Rocket.Chat que és essencial està desactivada. Si us plau contacti al seu administrador", "error-field-unavailable": "__field__ ja s'utilitza :(", "error-file-too-large": "L'arxiu és massa gran", - "error-forwarding-department-target-not-allowed": "El reenviament al departament objectiu no està permès.", - "error-guests-cant-have-other-roles": "Els usuaris convidats no poden tenir cap altre paper.", + "error-forwarding-chat-same-department": "El departament seleccionat i l'actual departament de la sala són els mateixos", + "error-forwarding-department-target-not-allowed": "No es permet el reenviament a el departament de destinació.", + "error-guests-cant-have-other-roles": "Els usuaris visitants no poden tenir cap altre rol.", + "error-import-file-extract-error": "No s'ha pogut extreure el fitxer d'importació.", + "error-import-file-is-empty": "L'arxiu importat sembla estar buit.", + "error-import-file-missing": "No s'ha trobat el fitxer a importar a la ruta especificada.", "error-importer-not-defined": "L'importador no s'ha definit correctament, no es troba la classe d'importació.", "error-input-is-not-a-valid-field": "__input__ no és un __field__ vàlid", + "error-invalid-account": "Compte no vàlid", "error-invalid-actionlink": "Enllaç d'acció (action link) invàlid", "error-invalid-arguments": "Arguments invàlids", "error-invalid-asset": "Recurs invàlid", @@ -1237,21 +1573,27 @@ "error-invalid-channel-start-with-chars": "Canal no vàlid. Comenceu amb @ o #", "error-invalid-custom-field": "Camp personalitzat invàlid", "error-invalid-custom-field-name": "Nom del camp personalitzat invàlid. Utilitzeu només lletres, números, guions i guions baixos.", + "error-invalid-custom-field-value": "Valor no vàlid per al camp __field__", "error-invalid-date": "La data introduïda no és vàlida.", "error-invalid-description": "Descripció invàlida", "error-invalid-domain": "Domini invàlid", "error-invalid-email": "L'adreça __email__ no és vàlida", "error-invalid-email-address": "Adreça de correu-e invàlida", + "error-invalid-email-inbox": "Safata d'entrada de correu electrònic no vàlida", "error-invalid-file-height": "Alçada de la imatge invàlida", "error-invalid-file-type": "Tipus d'arxiu no vàlid", "error-invalid-file-width": "Amplada de la imatge invàlida", "error-invalid-from-address": "Adreça invàlida al camp 'De'.", + "error-invalid-inquiry": "Consulta no vàlid", "error-invalid-integration": "Integració no vàlida", "error-invalid-message": "Missatge no vàlid", "error-invalid-method": "Mètode no vàlid", "error-invalid-name": "Nom invàlid", "error-invalid-password": "Contrasenya invàlida", + "error-invalid-param": "Paràmetre no vàlid", + "error-invalid-params": "Paràmetres no vàlids", "error-invalid-permission": "Permís no vàlid", + "error-invalid-port-number": "Nombre de port no vàlid", "error-invalid-priority": "Prioritat no vàlida", "error-invalid-redirectUri": "Redirecció URI invàlida", "error-invalid-role": "Rol no vàlid", @@ -1265,17 +1607,20 @@ "error-invalid-urls": "URL no vàlides", "error-invalid-user": "Usuari invàlid", "error-invalid-username": "Nom d'usuari invàlid", + "error-invalid-value": "Valor no vàlid", "error-invalid-webhook-response": "L'URL Webhook ha respost amb un estat diferent de 200.", "error-logged-user-not-in-room": "No esteu a la sala `%s`", - "error-max-guests-number-reached": "Heu arribat al nombre màxim d’usuaris convidats que permet la vostra llicència. Poseu-vos en contacte amb venda@rocket.chat per obtenir una nova llicència.", + "error-max-guests-number-reached": "Ha arribat a la quantitat màxima d'usuaris convidats permesos per la seva llicència. Poseu-vos en contacte amb sale@rocket.chat per obtenir una nova llicència.", "error-max-number-simultaneous-chats-reached": "S'ha arribat al nombre màxim de xats simultanis per agent.", "error-message-deleting-blocked": "L'eliminació de missatges està bloquejada", "error-message-editing-blocked": "L'edició de missatges està bloquejada", "error-message-size-exceeded": "El missatge s'excedeix de Message_MaxAllowedSize", "error-missing-unsubscribe-link": "Ha de proporcionar l'enllaç [unsubscribe].", "error-no-tokens-for-this-user": "No hi ha cap token per a aquest usuari", + "error-no-message-for-unread": "No hi ha missatges per marcar com a no llegits", "error-not-allowed": "No permès", "error-not-authorized": "No autoritzat", + "error-office-hours-are-closed": "L'horari d'oficina està tancat.", "error-password-policy-not-met": "La contrasenya no compleix la política del servidor", "error-password-policy-not-met-maxLength": "La contrasenya no compleix amb la política de màxima longitud del servidor (la contrasenya és massa llarga).", "error-password-policy-not-met-minLength": "La contrasenya no compleix amb la política del servidor de durada mínima (la contrasenya és massa curta).", @@ -1284,23 +1629,40 @@ "error-password-policy-not-met-oneSpecial": "La contrasenya no compleix amb la política del servidor d'almenys un caràcter especial", "error-password-policy-not-met-oneUppercase": "La contrasenya no compleix amb la política del servidor d'almenys un caràcter en majúscula", "error-password-policy-not-met-repeatingCharacters": "La contrasenya no compleix la política del servidor de caràcters repetits prohibits (teniu massa dels mateixos caràcters al costat de l'altre)", + "error-password-same-as-current": "Va ingressar la mateixa contrasenya que la contrasenya actual", + "error-personal-access-tokens-are-current-disabled": "Les claus d'accés personals estan actualment desactivades", + "error-pinning-message": "No s'ha pogut fixar el missatge", "error-push-disabled": "Push està desactivat", "error-remove-last-owner": "Aquest és l'últim propietari. Si us plau, establiu un nou propietari abans d'eliminar aquest.", + "error-returning-inquiry": "Error en tornar la consulta a la cua", "error-role-in-use": "No es pot eliminar el rol perquè està en ús", "error-role-name-required": "Es requereix el nom de rol.", - "error-room-is-not-closed": "L'habitació no està tancada", + "error-room-is-not-closed": "Room no està tancada", + "error-selected-agent-room-agent-are-same": "L’agent seleccionat i l’agent de sala són els mateixos", + "error-starring-message": "No s'ha pogut mirar el missatge", + "error-tags-must-be-assigned-before-closing-chat": "Cal assignar etiquetes abans de tancar el xat", "error-the-field-is-required": "Es requereix el camp __field__.", "error-this-is-not-a-livechat-room": "Aquesta no és una sala de Livechat", + "error-token-already-exists": "Ja existeix un Token amb aquest nom", + "error-token-does-not-exists": "El token no existeix", "error-too-many-requests": "Error, massa peticions. Si us plau, més a poc a poc. Heu d'esperar __seconds__ segons abans de reintentar-ho.", + "error-transcript-already-requested": "Transcripció ja sol·licitada", + "error-unpinning-message": "No s'ha pogut desancorar el missatge", "error-user-has-no-roles": "L'usuari no té rols", "error-user-is-not-activated": "L'usuari no ha estat activat", + "error-user-is-not-agent": "L'usuari no és un agent de LiveChat", + "error-user-is-offline": "Usuari fora de línia", "error-user-limit-exceeded": "El nombre d'usuaris per invitar al canal #channel_name supera el límit establert per l'administrador", + "error-user-not-belong-to-department": "L'usuari no pertany a aquest departament", "error-user-not-in-room": "L'usuari no es troba en aquesta sala", "error-user-registration-disabled": "El registre d'usuaris està desactivat", "error-user-registration-secret": "El registre d'usuaris només es permet a través d'URL secret", + "error-validating-department-chat-closing-tags": "Es requereix al menys una etiqueta de tancament quan el departament requereix etiqueta (s) en les converses de tancament.", "error-you-are-last-owner": "Ets l'últim propietari. Si us plau, estableix un nou propietari abans de sortir de la sala.", + "Errors_and_Warnings": "Errors i advertències", "Esc_to": "Esc a", "Estimated_due_time": "Temps previst previst (temps en minuts)", + "Estimated_due_time_in_minutes": "Temps de venciment previst (temps en minuts)", "Event_Trigger": "Disparador d'esdeveniments", "Event_Trigger_Description": "Selecciona quin tipus d'esdeveniment desencadenarà aquesta integració WebHook de sortida", "every_5_minutes": "Una vegada cada 5 minuts", @@ -1312,62 +1674,123 @@ "every_second": "Una vegada per segon", "every_six_hours": "Cada 6 hores", "Everyone_can_access_this_channel": "Qualsevol pot accedir a aquest canal", + "Exact": "Exacte", + "Example_payload": "Exemple de càrrega útil", "Example_s": "Exemple: %s", "except_pinned": "(excepte els que estan fixats)", "Exclude_Botnames": "Excloure bots", "Exclude_Botnames_Description": "No processar missatges de bots el nom dels quals encaixa amb l'expressió regular superior. Si es deixa en blanc, tots els missatges dels bots es propagaran.", "Exclude_pinned": "Exclou els missatges fixats", "Execute_Synchronization_Now": "Executeu la sincronització ara", - "Export_My_Data": "Exporta les meves dades", + "Exit_Full_Screen": "Sortir de la pantalla completa", + "Expand": "Expandir", + "Experimental_Feature_Alert": "Aquesta és una funció experimental! Recordeu que pot canviar, trencar-se o fins i tot eliminar-se en el futur sense previ avís.", + "Expiration": "Caducitat", + "Expiration_(Days)": "Caducitat (dies)", + "Export_as_file": "Exporta com a fitxer", + "Export_Messages": "Exporta missatges", + "Export_My_Data": "Exportar les meves dades (jSOM)", + "expression": "Expressió", + "Extended": "Ampliat", + "External_Domains": "Dominis externs", "External_Queue_Service_URL": "URL del servei de cua externa", "External_Service": "Servei extern", + "External_Users": "Usuaris externs", + "Extremely_likely": "Molt probable", "Facebook_Page": "Pàgina de Facebook", + "Failed": "Error", + "Failed_to_activate_invite_token": "Error al activar el token d'invitació", "Failed_to_add_monitor": "No s'ha pogut afegir el monitor", + "Failed_To_Download_Files": "Error a l'descarregar fitxers", + "Failed_to_generate_invite_link": "Error a l'generar enllaç d'invitació", + "Failed_To_Load_Import_Data": "Error al carregar importació de dades", + "Failed_To_Load_Import_History": "Error a l'carregar importació de històric", + "Failed_To_Load_Import_Operation": "Error al cargar operación de importación", + "Failed_To_Start_Import": "Error al iniciar operación de importación", + "Failed_to_validate_invite_token": "Error al validar token de invitació", "False": "No", "Favorite": "Preferit", "Favorite_Rooms": "Habilita sales favorites", "Favorites": "Favorits", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Aquesta funció depèn de \"Enviar l'historial de navegació del visitant com a missatge\" per estar habilitat.", + "Features": "Característiques", "Features_Enabled": "Funcionalitats habilitades", + "Federation_Dashboard": "Panell de Federació", + "FEDERATION_Discovery_Method": "Mètode de descobriment", + "FEDERATION_Discovery_Method_Description": "Pot utilitzar el hub o un SRV i una entrada TXT en els seus registres DNS.", "FEDERATION_Domain": "Domini", + "FEDERATION_Domain_Alert": "No canvieu això després d’habilitar la funció, encara no podem manejar els canvis de domini.", + "FEDERATION_Domain_Description": "Afegeix el domini al que aquest servidor hauria d’estar vinculat, per exemple: @ rocket.chat.", + "FEDERATION_Enabled": "Intentar integrar la federació de suport.", + "FEDERATION_Enabled_Alert": "La federació de suport està en progrés. El seu ús en un entorn de producció no es recomana de moment.", + "FEDERATION_Error_user_is_federated_on_rooms": "No es pot eliminar als usuaris federats que pertenecen a les sales", + "FEDERATION_Hub_URL": "URL del Hub", + "FEDERATION_Hub_URL_Description": "Configureu la URL del concentrador, per exemple: https://hub.rocket.chat. També es poden acceptar ports.", + "FEDERATION_Public_Key": "Clau pública", + "FEDERATION_Public_Key_Description": "Aquesta és la clau que necessita per compartir amb els seus companys.", + "FEDERATION_Room_Status": "Estat de la federació", "FEDERATION_Status": "Estat", + "FEDERATION_Test_Setup": "Configuració de prova", + "FEDERATION_Test_Setup_Error": "No es pot trobar el servidor utilitzant la seva configuració, revisar la seva configuració.", + "FEDERATION_Test_Setup_Success": "La configuració de la seva federació està funcionant i altres servidors poden trobar-se!", + "FEDERATION_Unique_Id": "Identificador únic", + "FEDERATION_Unique_Id_Description": "Aquest és l'ID únic de la seva federació, que s'utilitza per identificar el seu parell a la xarxa.", "Field": "Camp", "Field_removed": "Camp eliminat", "Field_required": "Camp obligatori", + "File": "Arxiu", + "File_Downloads_Started": "Descàrregues d'arxius iniciades", "File_exceeds_allowed_size_of_bytes": "L'arxiu supera la mida màxima de __size__.", - "File_name_Placeholder": "Cerca fitxers ...", + "File_name_Placeholder": "Cercar fitxers ...", "File_not_allowed_direct_messages": "Compartició d'arxius no permesa als missatges directes.", - "File_removed_by_automatic_prune": "S'ha eliminat l'arxiu per prunes automàtiques", - "File_removed_by_prune": "Fitxer eliminat per podar", + "File_Path": "Ruta d'arxiu", + "file_pruned": "Arxiu esborrat", + "File_removed_by_automatic_prune": "Arxiu eliminat per esborrat automàtic", + "File_removed_by_prune": "Arxiu eliminat per esborrat", + "File_Type": "Tipus d'arxiu", "File_type_is_not_accepted": "El tipus de fitxer no s'accepta.", "File_uploaded": "Fitxer pujat", + "File_uploaded_successfully": "L'arxiu ha pujat correctament", + "File_URL": "URL del arxiu", "files": "fitxers", - "Files_only": "Només elimineu els fitxers adjunts, conserveu missatges", - "files_pruned": "arxius podats", + "Files": "Arxius", + "Files_only": "Només elimini els arxius adjunts, mantingui missatges", + "files_pruned": "arxius esborrats", + "FileSize_Bytes": "__fileSize__ Bytes", + "FileSize_KB": "__fileSize__ KB", + "FileSize_MB": "__fileSize__ MB", "FileUpload": "Pujar arxius", "FileUpload_Disabled": "Les pujades de fitxers estan desactivades.", + "FileUpload_Enable_json_web_token_for_files": "Activar la protecció de JSON web Tokens per fitxers enviats", + "FileUpload_Enable_json_web_token_for_files_description": "Afegeix un JWT a la URL dels arxius carregats", "FileUpload_Enabled": "Habilita pujar arxius", "FileUpload_Enabled_Direct": "Compartició d'arxius activa als missatges directes", - "FileUpload_Error": "Càrrega de fitxers d'error", + "FileUpload_Error": "Error de càrrega de fitxer", "FileUpload_File_Empty": "Arxiu buit", "FileUpload_FileSystemPath": "Ruta dels arxius", "FileUpload_GoogleStorage_AccessId": "Acces Id del Google Storage", "FileUpload_GoogleStorage_AccessId_Description": "L'Acces Id generalment és en format de correu-e, per exemple: \"exemple-prova@exemple.iam.gserviceaccount.com\"", "FileUpload_GoogleStorage_Bucket": "Nom del Bucket Google Storage", "FileUpload_GoogleStorage_Bucket_Description": "El nom del bucket on els arxius s'haurien de pujar.", - "FileUpload_GoogleStorage_Proxy_Avatars": "Avatars de servidor intermediari", - "FileUpload_GoogleStorage_Proxy_Avatars_Description": "Transmissions d'arxius d'avatar proxy a través del vostre servidor en comptes d'accedir directament a l'URL de l'actiu", + "FileUpload_GoogleStorage_Proxy_Avatars": "Avatars Proxy", + "FileUpload_GoogleStorage_Proxy_Avatars_Description": "Transmissions d'arxius proxy avatar a través del seu servidor en lloc d'accés directe a l'URL de l'actiu", "FileUpload_GoogleStorage_Proxy_Uploads": "Càrregues proxy", "FileUpload_GoogleStorage_Proxy_Uploads_Description": "Proxy carrega les transmissions d'arxius a través del vostre servidor en lloc d'accedir directament a l'URL de l'actiu", "FileUpload_GoogleStorage_Secret": "Secret Google Storage", "FileUpload_GoogleStorage_Secret_Description": "Si us plau, segueix aquestes instruccions i enganxa el resultat aquí.", + "FileUpload_json_web_token_secret_for_files": "Carrega Secret de token web JSON", + "FileUpload_json_web_token_secret_for_files_description": "File Upload json web Token Secret (s'utilitza per poder accedir als arxius carregats sense autenticació)", "FileUpload_MaxFileSize": "Mida màxima de pujada (en bytes)", "FileUpload_MaxFileSizeDescription": "Establiu-lo a -1 per eliminar la limitació de la mida del fitxer.", "FileUpload_MediaType_NotAccepted": "Tipus d'arxius no acceptats", + "FileUpload_MediaTypeBlackList": "Tipus de mitjans bloquejats", + "FileUpload_MediaTypeBlackListDescription": "Llista de tipus de mitjans separats per comes. Aquesta configuració té prioritat sobre els tipus de paper acceptats.", "FileUpload_MediaTypeWhiteList": "Tipus d'arxius acceptats", "FileUpload_MediaTypeWhiteListDescription": "Llista de tipus d'arxiu separada per comes. Deixa-la en blanc per acceptar tots els tipus.", "FileUpload_ProtectFiles": "Protegir els arxius pujats", "FileUpload_ProtectFilesDescription": "Només els usuaris identificats hi tindran accés", + "FileUpload_RotateImages": "Rotar imatges a l'carregar", + "FileUpload_RotateImages_Description": "Habilitar aquesta configuració pot causar pèrdua de qualitat d'imatge", "FileUpload_S3_Acl": "Acl", "FileUpload_S3_AWSAccessKeyId": "Access Key", "FileUpload_S3_AWSSecretAccessKey": "Secret Key", @@ -1375,42 +1798,54 @@ "FileUpload_S3_BucketURL": "Bucket URL", "FileUpload_S3_CDN": "Domini CDN per descàrregues", "FileUpload_S3_ForcePathStyle": "Force Path Style", - "FileUpload_S3_Proxy_Avatars": "Avatars de servidor intermediari", - "FileUpload_S3_Proxy_Avatars_Description": "Transmissions d'arxius d'avatar proxy a través del vostre servidor en comptes d'accedir directament a l'URL de l'actiu", + "FileUpload_S3_Proxy_Avatars": "Avatars Proxy", + "FileUpload_S3_Proxy_Avatars_Description": "Proxy transmissions d'arxius d'avatar a través del seu servidor en lloc d'accés directe a l'URL de l'actiu", "FileUpload_S3_Proxy_Uploads": "Càrregues proxy", - "FileUpload_S3_Proxy_Uploads_Description": "Proxy carrega les transmissions d'arxius a través del vostre servidor en lloc d'accedir directament a l'URL de l'actiu", + "FileUpload_S3_Proxy_Uploads_Description": "Transmissions d'arxius de càrrega proxy a través del seu servidor en lloc d'accés directe a l'URL de l'actiu", "FileUpload_S3_Region": "Regió S3", "FileUpload_S3_SignatureVersion": "Signature Version", "FileUpload_S3_URLExpiryTimeSpan": "Caducitat de les URL", "FileUpload_S3_URLExpiryTimeSpan_Description": "Temps després el qual les adreces d'Amazon S3 generades deixaran de ser vàlides (en segons). Si s'estableix a menys de 5 segons, aquest camp serà ignorat.", "FileUpload_Storage_Type": "Tipus d'emmagatzematge", "FileUpload_Webdav_Password": "Contrasenya de WebDAV", - "FileUpload_Webdav_Proxy_Avatars": "Avatars de servidor intermediari", - "FileUpload_Webdav_Proxy_Avatars_Description": "Transmissions d'arxius d'avatar proxy a través del vostre servidor en comptes d'accedir directament a l'URL de l'actiu", + "FileUpload_Webdav_Proxy_Avatars": "Avatars Proxy", + "FileUpload_Webdav_Proxy_Avatars_Description": "Transmissions d'arxius d'avatar a través del seu servidor en lloc d'accés directe a l'URL de l'actiu", "FileUpload_Webdav_Proxy_Uploads": "Càrregues proxy", - "FileUpload_Webdav_Proxy_Uploads_Description": "Proxy carrega les transmissions d'arxius a través del vostre servidor en lloc d'accedir directament a l'URL de l'actiu", + "FileUpload_Webdav_Proxy_Uploads_Description": "Transmissions d'arxius de càrrega proxy a través del seu servidor en lloc d'accés directe a l'URL de l'actiu", "FileUpload_Webdav_Server_URL": "URL d'accés al servidor WebDAV", "FileUpload_Webdav_Upload_Folder_Path": "Carrega la ruta de la carpeta", - "FileUpload_Webdav_Upload_Folder_Path_Description": "Carpeta de carpetes WebDAV a la qual s'han de carregar els fitxers", + "FileUpload_Webdav_Upload_Folder_Path_Description": "Ruta de la carpeta WebDAV en la qual s'han de carregar els arxius", "FileUpload_Webdav_Username": "Nom d'usuari de WebDAV", "Filter": "Filter", + "Filters": "Filtres", + "Filters_applied": "Filtres aplicats", "Financial_Services": "Serveis financers", "First_Channel_After_Login": "Primer canal després del login", + "First_response_time": "Temps de resposta inicial", "Flags": "Indicadors", + "Follow_message": "Seguir missatge", "Follow_social_profiles": "Segueix els nostres perfils, fes-nos un fork a GitHub i comparteix la teva opinió sobre Rocket.Chat al nostre tauler de Trello.", + "Following": "Seguint", "Fonts": "Fonts", "Food_and_Drink": "Menjar i beure", "Footer": "Peu de pàgina", - "Footer_Direct_Reply": "Peu quan resposta directa està activa", + "Footer_Direct_Reply": "Peu de pàgina quan la resposta directa està habilitada", "For_more_details_please_check_our_docs": "Per obtenir més informació, consulteu els nostres documents.", "For_your_security_you_must_enter_your_current_password_to_continue": "Per a la seva seguretat, ha de tornar a introduir la contrasenya per continuar", - "Force_Disable_OpLog_For_Cache": "Força la inhabilitació de OpLog per la cache", + "Force_Disable_OpLog_For_Cache": "Forçar la desactivació de OpLog per la caché", "Force_Disable_OpLog_For_Cache_Description": "No s'utilitzarà OpLog per sincronitzar la cache tot i estar disponible", + "Force_Screen_Lock": "Forçar el bloqueig de pantalla", + "Force_Screen_Lock_After": "Forçar el bloqueig de pantalla després de", + "Force_Screen_Lock_After_description": "El temps per a sol·licitar la contrasenya de nou després de finalitzar l'última sessió, en segons.", + "Force_Screen_Lock_description": "Quan estigui habilitat, obligarà els seus usuaris a utilitzar un PIN / BIOMETRIA / FaceID per desbloquejar l'aplicació.", "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.", + "Force_visitor_to_accept_data_processing_consent": "Obligar el visitant a acceptar el consentiment de l'processament de dades", + "Force_visitor_to_accept_data_processing_consent_description": "Els visitants no poden començar a xatejar sense el seu consentiment.", + "Force_visitor_to_accept_data_processing_consent_enabled_alert": "L'acord amb el processament de dades s'ha de basar en una comprensió transparent de l'motiu de l'processament. A causa d'això, ha de completar la configuració a continuació que es mostrarà als usuaris per proporcionar les raons per recopilar i processar la seva informació personal.", "force-delete-message": "Forçar esborrar missatge", "force-delete-message_description": "Permís per esborrar un missatge ignorant totes les restriccions", - "Forgot_password": "No recordes la contrasenya?", + "Forgot_password": "Heu oblidat 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.", "Forgot_Password_Email_Subject": "[Site_Name] - Recuperació de contrasenya", @@ -1419,18 +1854,35 @@ "Forward_chat": "Remetre xat", "Forward_to_department": "Remetre al departament", "Forward_to_user": "Remetre a l'usuari", + "Forwarding": "Reenviament", + "Free": "Lliure", "Frequently_Used": "Usat freqüentment", "Friday": "divendres", "From": "De", "From_Email": "De correu-e", "From_email_warning": "Avís: el camp De està subjecte a la configuració del teu servidor de correu-e.", - "Gaming": "Jocs", + "Full_Name": "Nom Complet", + "Full_Screen": "Pantalla completa", + "Gaming": "Joc d'atzar", "General": "General", + "Generate_new_key": "Generar una nova clau", + "Generate_New_Link": "Generar un nou enllaç", + "Generating_key": "Generant clau", + "Get_link": "Obtenir l'enllaç", + "get-password-policy-forbidRepeatingCharacters": "La contrasenya no ha de contenir caràcters repetits", + "get-password-policy-forbidRepeatingCharactersCount": "La contrasenya no ha de contenir més que __forbidRepeatingCharactersCount__ caràcters repetits", + "get-password-policy-maxLength": "La contrasenya ha de tenir un màxim de __maxLength__ caràcters", + "get-password-policy-minLength": "La contrasenya ha de tenir un mínim de __minLength__ caràcters", + "get-password-policy-mustContainAtLeastOneLowercase": "La contrasenya ha de tenir al menys una lletra minúscula", + "get-password-policy-mustContainAtLeastOneNumber": "La contrasenya ha de tenir al menys un número", + "get-password-policy-mustContainAtLeastOneSpecialCharacter": "La contrasenya ha de tenir al menys un caràcter especial", + "get-password-policy-mustContainAtLeastOneUppercase": "La contrasenya ha de tenir al menys una lletra majúscula", "github_no_public_email": "No tens cap adreça electrònica com a correu-e públic al teu compte de GitHub", "Give_a_unique_name_for_the_custom_oauth": "Estableix un nom únic per al OAuth personalitzat", "Give_the_application_a_name_This_will_be_seen_by_your_users": "Bateja l'aplicació. El nom escollit serà visible als usuaris.", "Global": "Global", - "Global_purge_override_warning": "S'ha establert una política de retenció global. Si deixeu \"Sobreescriure la política de retenció global\", només podeu aplicar una política que sigui més estricta que la política global.", + "Global Policy": "Política global", + "Global_purge_override_warning": "Hi ha una política de retenció global. Si deixa desactivada l'opció \"Anul·lar la política de retenció global\", només pot aplicar una política que sigui més estricta que la política global.", "Global_Search": "Cerca global", "Go_to_your_workspace": "Aneu a l'espai de treball", "Google_Vision_usage_limit_exceeded": "S'ha excedit el límit d'ús de Google Vision", @@ -1454,49 +1906,68 @@ "GoogleVision_Type_SafeSearch": "Detecció SafeSearch", "GoogleVision_Type_Similar": "Cerca imatges similars", "Government": "Govern", + "Graphql_CORS": "GraphQL CORS", + "Graphql_Enabled": "GraphQL habilitat", + "Graphql_Subscription_Port": "Port de subscripció GraphQL", + "Group_by": "Agrupar per", "Group_by_Type": "Grup per tipus", + "Group_discussions": "Grups de discussió", "Group_favorites": "Favorits del grup", - "Group_mentions_disabled_x_members": "Les mencions grupals \"@ all\" i \"@ aquí\" s'han desactivat per a sales amb més de __total__ membres.", + "Group_mentions_disabled_x_members": "Les mencions de grup `@ all` i` @ here` han estat deshabilitades per a sales amb més de __total__ membres.", "Group_mentions_only": "Només mencions de grup", + "Grouping": "Agrupació", "Hash": "Hash", "Header": "Encapçalament", "Header_and_Footer": "Encapçalament i peu ", - "Healthcare_and_Pharmaceutical": "Salut / Farmàcia", - "Help_Center": "Centre d'ajuda", + "Pharmaceutical": "Farmacèutica", + "Healthcare": "Sanitat", "Helpers": "Ajuda", + "Here_is_your_authentication_code": "Aquest és el seu codi d'autenticació:", "Hex_Color_Preview": "Previsualització del color", + "Hi": "Hola", + "Hi_username": "Hola __name__", "Hidden": "Ocult", - "Hide": "Oculta sala", + "Hide": "Amagar", "Hide_Avatars": "Oculta avatars", + "Hide_Avatars_Sidebar": "Ocultar avatars a la barra lateral", "Hide_counter": "Amaga comptador", "Hide_flextab": "Amaga la barra lateral dreta amb un clic", "Hide_Group_Warning": "Segur que voleu ocultar el grup \"%s\"?", - "Hide_Livechat_Warning": "Esteu segurs de voler amagar el xat en viu amb \"%s\"?", + "Hide_Livechat_Warning": "Estàs segur que vols amagar al xat amb \"% s\"?", "Hide_Private_Warning": "Segur que voleu ocultar la discussió amb \"%s\"?", "Hide_roles": "Amaga rols", - "Hide_room": "Oculta sala", - "Hide_Room_Warning": "Segur que voleu ocultar la sala \"%s\"?", + "Hide_room": "Amagar", + "Hide_Room_Warning": "Segur que vols amagar la sala amb \"% s\"?", + "Hide_System_Messages": "Ocultar els missatges del sistema", "Hide_Unread_Room_Status": "Amaga l'estat de sales no llegides", "Hide_usernames": "Oculta els noms d'usuari", "Highlights": "Ressalta", "Highlights_How_To": "Per ser notificat quan algú esmenta una paraula o frase, afegeix-la aquí. Es poden separar les paraules o frases amb comes. No es distingeix entre majúscules i minúscules.", "Highlights_List": "Ressalta paraules", "History": "Historial", + "Home": "Inici", "Host": "Amfitrió (host)", + "Hospitality_Businness": "Negoci d'Hosteleria", "hours": "hores", "Hours": "Hores", "How_friendly_was_the_chat_agent": "Ha sigut amable l'interlocutor?", "How_knowledgeable_was_the_chat_agent": "Era un bon expert?", "How_long_to_wait_after_agent_goes_offline": "Quant temps esperar un cop l'agent es posa fora de línia", + "How_long_to_wait_to_consider_visitor_abandonment": "Quant de temps esperar per considerar l'abandonament dels visitans?", + "How_long_to_wait_to_consider_visitor_abandonment_in_seconds": "Quant de temps esperar per considerar l'abandonament dels visitans?", "How_responsive_was_the_chat_agent": "Heu rebut respostes ràpides?", "How_satisfied_were_you_with_this_chat": "Ha quedat satisfet amb aquesta conversa?", - "How_to_handle_open_sessions_when_agent_goes_offline": "Què fer amb les sessions obertes quan l'agent es posa fora de línia", + "How_to_handle_open_sessions_when_agent_goes_offline": "Com gestionar sessions obertes quan l'agent es desconnecta", + "I_ll_do_it_later": "Ho faré més endavant", + "I_saved_my_password_close_this_message": "He desat la contrasenya, tanca aquest missatge", "Idle_Time_Limit": "Límit de temps inactiu", - "Idle_Time_Limit_Description": "Període de temps fins que l'estat canvia de distància. El valor ha de ser en segons.", + "Idle_Time_Limit_Description": "Període de temps fins que l'estat canvia a absent. El valor ha d'estar en segons.", "if_they_are_from": "(si són de %s)", "If_this_email_is_registered": "Si l'adreça de correu-e ja està registrada, t'enviarem instruccions sobre com restablir la contrasenya. Si no reps el missatge en breu, si us plau torna i reintenta-ho.", "If_you_are_sure_type_in_your_password": "Si n'està segur escrigui la contrasenya:", "If_you_are_sure_type_in_your_username": "Si n'està segur escrigui el seu nom d'usuari:", + "If_you_didnt_ask_for_reset_ignore_this_email": "Si no va sol·licitar el restabliment de la contrasenya, pot ignorar aquest correu electrònic.", + "If_you_didnt_try_to_login_in_your_account_please_ignore_this_email": "Si no va intentar iniciar la sessió al compte, ignori aquest correu electrònic.", "If_you_dont_have_one_send_an_email_to_omni_rocketchat_to_get_yours": "Si no n'hi ha, envieu un correu electrònic a [omni@rocket.chat] (mailto: omni@rocket.chat) per obtenir el vostre.", "Iframe_Integration": "Integració Iframe", "Iframe_Integration_receive_enable": "Activa recepció", @@ -1507,17 +1978,26 @@ "Iframe_Integration_send_enable_Description": "Envia esdeveniments a la finestra pare", "Iframe_Integration_send_target_origin": "Envia l'origen a l'objectiu", "Iframe_Integration_send_target_origin_Description": "Origens amb prefix del protocol on les comandes són enviades. Exemple 'https://localhost', o * per permetre enviar a qualsevol lloc.", + "Iframe_Restrict_Access": "Restringir l'accés dins de qualsevol iframe", + "Iframe_Restrict_Access_Description": "Aquesta configuració habilita / inhabilita les restriccions per carregar el RC dins de qualsevol iframe", + "Iframe_X_Frame_Options": "Opcions de X-Frame-Options", + "Iframe_X_Frame_Options_Description": "Opcions de X-Frame-Options. [Podeu consultar més detalls aquí.] (Https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options#Syntax)", "Ignore": "Ignora", "Ignored": "Ignorat", + "Images": "Imatges", "IMAP_intercepter_already_running": "L'interceptador IMAP ja està executant-se", "IMAP_intercepter_Not_running": "L'interceptador IMAP no està executant-se", - "Impersonate_next_agent_from_queue": "Suprimeix el següent agent de la cua", + "Impersonate_next_agent_from_queue": "Suplantar un el següent agent de la cua", "Impersonate_user": "Suplantar usuari", "Impersonate_user_description": "Quan s'activa, la integració publica com a l'usuari que ha desencadenat la integració", "Import": "Importa", + "Import_New_File": "Importa arxiu nou", + "Import_requested_successfully": "Importació sol·licitada amb èxit", + "Import_Type": "Tipus d'importació", "Importer_Archived": "Arxivat", "Importer_CSV_Information": "L'importador CSV requereix un format específic, si us plau llegiu la documentació sobre com estructurar l'arxiu .zip:", "Importer_done": "Importació completa!", + "Importer_ExternalUrl_Description": "També pot utilitzar un URL per a un arxiu d'accés públic:", "Importer_finishing": "Finalitza la importació.", "Importer_From_Description": "Importa les dades de __from__ a Rocket.Chat.", "Importer_HipChatEnterprise_BetaWarning": "Tingueu en compte que aquest sistema d'importació encara està en desenvolupament. Si us plau, notifiqueu-nos a GitHub els errors que es produeixin:", @@ -1525,6 +2005,7 @@ "Importer_import_cancelled": "Importació cancel·lada.", "Importer_import_failed": "S'ha produït un error durant la importació.", "Importer_importing_channels": "Important els canals.", + "Importer_importing_files": "Importació d'arxius.", "Importer_importing_messages": "Important els missatges.", "Importer_importing_started": "Començant la importació.", "Importer_importing_users": "Important els usuaris.", @@ -1538,14 +2019,41 @@ "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_done": "Completat amb èxit", + "importer_status_downloading_file": "Descarregant arxiu", + "importer_status_file_loaded": "Arxiu carregat", "importer_status_finishing": "Quasi fet", + "importer_status_import_cancelled": "Cancel·lat", "importer_status_import_failed": "Error", + "importer_status_importing_channels": "Importació canals", + "importer_status_importing_files": "Importació d'arxius", + "importer_status_importing_messages": "Importació de missatges", + "importer_status_importing_started": "Importació de dades", + "importer_status_importing_users": "Importació d’usuaris", + "importer_status_new": "No iniciat", + "importer_status_preparing_channels": "Llegint arxiu de canals", + "importer_status_preparing_messages": "Llegint arxiu de missatges", + "importer_status_preparing_started": "Llegint arxius", + "importer_status_preparing_users": "Llegint arxiu d'usuaris", + "importer_status_uploading": "Pujant arxiu", + "importer_status_user_selection": "Preparat per seleccionar què voleu importar", + "Importer_Upload_FileSize_Message": "La configuració del servidor permet pujar arxius de mida fins __maxFileSize__.", + "Importer_Upload_Unlimited_FileSize": "La configuració del seu servidor permet la pujada d'arxius de qualsevol mida.", + "Importing_channels": "Important els canals", + "Importing_Data": "Importació de dades", + "Importing_messages": "Important els missatges.", + "Importing_users": "Important els usuaris", + "In_progress": "En progrés", + "Inbox_Info": "Informació de la safata d'entrada", + "Include_Offline_Agents": "Incloure agents fora de línia", "Inclusive": "Inclusiu", "Incoming_Livechats": "LiveChats entrants", "Incoming_WebHook": "WebHook entrant", "Industry": "Indústria", + "Info": "Informació", "initials_avatar": "Avatar d'inicials", "inline_code": "codi inline", + "Install": "Instal·lar", "Install_Extension": "Instal·lar complement", "Install_FxOs": "Instal·lar el Rocket.Chat al Firefox", "Install_FxOs_done": "Perfecte! Ja pots utilitzar el Rocket.Chat mitjançant la icona de l'escriptori.", @@ -1553,12 +2061,19 @@ "Install_FxOs_follow_instructions": "Si us plau, confirma la instal·lació de l'aplicació al teu dispositiu (polsi \"Instal·lar\" quan se us demani).", "Install_package": "Instal·leu el paquet", "Installation": "Instal·lació", + "Installed": "Instal·lat", "Installed_at": "Instal·lat a", + "Instance": "Instància", + "Instances": "Instàncies", + "Instances_health": "Estat de les Instàncies", "Instance_Record": "Registre d'instància", + "Instructions": "Instruccions", "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Instruccions als visitants, ompliu el formulari per enviar un missatge", + "Insert_Contact_Name": "Inseriu el nom de l'contacte", "Insurance": "segur", "Integration_added": "La integració s'ha afegit", "Integration_Advanced_Settings": "Configuració avançada", + "Integration_Delete_Warning": "La supressió d'una integració no es pot desfer.", "Integration_disabled": "S'ha desactivat la integració", "Integration_History_Cleared": "L'historial d'integracions s'ha esborrat correctament", "Integration_Incoming_WebHook": "Integració WebHook d'entrada", @@ -1604,7 +2119,7 @@ "InternalHubot_ScriptsToLoad": "Seqüències d'ordres (scripts) per carregar", "InternalHubot_ScriptsToLoad_Description": "Si us plau, introduiu una llista separada per comes de scripts per carregar des de la carpeta personalitzada", "InternalHubot_Username_Description": "Ha de ser un nom d'usuari vàlid d'un bot registrat al servidor.", - "Invalid Canned Response": "Resposta enllaunada no vàlida", + "Invalid Canned Response": "Resposta predefinida no vàlida", "Invalid_confirm_pass": "La confirmació de la contrasenya no coincideix amb la contrasenya", "Invalid_Department": "Departament no vàlid", "Invalid_email": "L'adreça de correu-e és invàlida", @@ -1612,6 +2127,7 @@ "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", + "Invalid_or_expired_invite_token": "Token d'invitació no vàlid o caducat", "Invalid_pass": "La contrasenya no ha d'estar buida", "Invalid_reason": "El motiu per unir-se no ha de quedar buit", "Invalid_room_name": "%s no és un nom de sala vàlid", @@ -1627,6 +2143,7 @@ "Invitation_HTML_Default": "Se us ha convidat a [Site_Name]Aneu a [Site_URL] i proveu la millor solució de col·laboració a distància de codi lliure!", "Invitation_Subject": "Assumpte de la invitació", "Invitation_Subject_Default": "Se us ha convidat a [Site_Name]", + "Invite_Link": "Enllaç d'invitació", "Invite_user_to_join_channel": "Convidar un usuari a unir-se a aquest canal", "Invite_user_to_join_channel_all_from": "Invita a tots els usuaris del canal [#channel] a unir-se a aquest canal", "Invite_user_to_join_channel_all_to": "Invita a tots els usuaris d'aquest canal a unir-se a [#channel]", @@ -1635,9 +2152,9 @@ "IRC_Channel_Leave": "Resposta de la comanda PART.", "IRC_Channel_Users": "Resposta de la comanda NAMES.", "IRC_Channel_Users_End": "Final de la resposta de la comanda NAMES.", - "IRC_Description": "L'IRC (Internet Relay Chat) és una eina de comunicació per a grups basada en text. Els usuaris s'uneixen a sales/canals de xat per a comunicar-se. L'IRC també suporta missatges privats entre usuaris i compartició de fitxers. Aquest paquet integra aquestes funcionalitats amb Rocket.Chat.", + "IRC_Description": "Internet Relay Chat (IRC) és una eina de comunicació grupal basada en text. Els usuaris s'uneixen a canals o sales amb noms exclusius per a una discussió oberta. IRC també admet missatges privats entre usuaris individuals i capacitats per a compartir arxius. Aquest paquet integra aquestes capes de funcionalitat amb Rocket.Chat.", "IRC_Enabled": "Integrar suport IRC. Canviar aquest valor requereix reiniciar el Rocket.Chat.", - "IRC_Enabled_Alert": "El suport IRC és un treball en progrés. L'ús en un sistema de producció no es recomana en aquest moment.", + "IRC_Enabled_Alert": "El suport d'IRC és un treball en progrés. No es recomana el seu ús en un sistema de producció en aquest moment.", "IRC_Federation": "Federació IRC", "IRC_Federation_Disabled": "La Federació IRC està desactivada.", "IRC_Hostname": "Servidor d'IRC on connectar.", @@ -1653,15 +2170,22 @@ "is_typing": "està escrivint", "is_typing_female": "està escrivint", "is_typing_male": "està escrivint", - "Issue_Links": "Comença els enllaços del seguiment", + "Issue_Links": "Enllaços de seguiment de problemes", "IssueLinks_Incompatible": "Advertència: no activeu aquesta opció i la \"Vista preliminar de color Hex\" al mateix temps.", - "IssueLinks_LinkTemplate": "Plantilla per a enllaços d'emissió", - "IssueLinks_LinkTemplate_Description": "Plantilla per enllaços d'emissió; %s se substituirà pel número d'emissió.", + "IssueLinks_LinkTemplate": "Plantilla per enllaços de problemes", + "IssueLinks_LinkTemplate_Description": "Plantilla per enllaços d'emissió; %s se substituirà pel número de problema.", "It_works": "Funciona", + "It_Security": "Seguretat Informàtica", + "italic": "Cursiva", "italics": "cursiva", + "Items_per_page:": "Elements per pàgina:", + "Jitsi_Application_ID": "ID d'aplicació (iss)", + "Jitsi_Application_Secret": "Secret d'aplicació", "Jitsi_Chrome_Extension": "ID d'extensió del Chrome", "Jitsi_Enable_Channels": "Activa als canals", - "Job_Title": "Lloc de treball", + "Jitsi_Enabled_TokenAuth": "Activa l'autenticació JWT", + "Jitsi_Limit_Token_To_Room": "Limita el token a Jitsi Room", + "Job_Title": "Títol professional", "join": "Unir-se", "Join_audio_call": "Unir-se a la trucada", "Join_Chat": "Uneix-te al xat", @@ -1672,11 +2196,12 @@ "join-without-join-code": "Unir-se sense el codi", "join-without-join-code_description": "Permís per unir-se a canals amb codi d'unió actiu sense tenir-lo", "Joined": "Unit", + "Joined_at": "Inscrit a", "Jump": "Vés", "Jump_to_first_unread": "Vés al primer no llegit", "Jump_to_message": "Vés al missatge", "Jump_to_recent_messages": "Vés als missatges recents", - "Just_invited_people_can_access_this_channel": "Només els convidats poden accedir a aquest canal.", + "Just_invited_people_can_access_this_channel": "Només les persones convidades poden accedir a aquest canal.", "Katex_Dollar_Syntax": "Permetre Dòlar Sintaxi", "Katex_Dollar_Syntax_Description": "Permetre l'ús de $$ bloc katex $$ $ i $ Katex línia sintaxi", "Katex_Enabled": "Katex actiu", @@ -1692,6 +2217,8 @@ "Keyboard_Shortcuts_Keys_5": "Cmd (o Alt) + Fletxa dreta", "Keyboard_Shortcuts_Keys_6": "Cmd (o Alt) + Fletxa avall", "Keyboard_Shortcuts_Keys_7": "Shift + Enter", + "Keyboard_Shortcuts_Keys_8": "Shift (or Ctrl) + ESC", + "Keyboard_Shortcuts_Mark_all_as_read": "Marca tots els missatges (en tots els canals) com a llegits", "Keyboard_Shortcuts_Move_To_Beginning_Of_Message": "Moure's al principi del missatge", "Keyboard_Shortcuts_Move_To_End_Of_Message": "Moure's al final del missatge", "Keyboard_Shortcuts_New_Line_In_Message": "Nova línia al camp d'entrada de missatge", @@ -1700,18 +2227,37 @@ "Knowledge_Base": "Centre de suport", "Label": "Etiqueta", "Language": "Idioma", - "Language_Not_set": "No és específic", + "Language_Dutch": "Holandès", + "Language_English": "Anglès", + "Language_French": "Francès", + "Language_German": "Alemany", + "Language_Italian": "Italià", + "Language_Not_set": "No específic", + "Language_Polish": "Polonès", + "Language_Portuguese": "Portuguès", + "Language_Russian": "Rus", + "Language_Spanish": "Espanyol", "Language_Version": "Versió en català", + "Last_7_days": "Els darrers 7 dies", + "Last_30_days": "Darrers 30 dies", + "Last_90_days": "Darrers 90 dies", + "Last_active": "Darrer actiu", + "Last_Chat": "Darrer xat", "Last_login": "Darrer inici de sessió", "Last_Message": "Últim missatge", "Last_Message_At": "Últim missatge a", "Last_seen": "Vist per darrer cop", + "Last_Status": "Darrer estat", + "Last_token_part": "Darrera part del token", + "Last_Updated": "Última actualització", "Launched_successfully": "S'ha iniciat amb èxit", "Layout": "Disseny", "Layout_Home_Body": "Cos de pàgina d'inici", "Layout_Home_Title": "Títol de pàgina d'inici", + "Layout_Legal_Notice": "Avís legal", "Layout_Login_Terms": "Termes d'inici de sessió", "Layout_Privacy_Policy": "Política de privacitat", + "Layout_Show_Home_Button": "Mostra el botó inici\"", "Layout_Sidenav_Footer": "Peu de la barra de navegació lateral", "Layout_Sidenav_Footer_description": "La mida del peu és de 260 x 70 px", "Layout_Terms_of_Service": "Avís legal", @@ -1721,31 +2267,33 @@ "LDAP_Authentication_Password": "Contrasenya", "LDAP_Authentication_UserDN": "User DN", "LDAP_Authentication_UserDN_Description": "Usuari LDAP que fa cerques d'usuari per identificar altres usuaris quan inicien sessió.Aquest és un compte que s'acostuma a crear específicament per a fer les integracions de tercers. Utilitza un nom complet i qualificat, com `cn=Administrator,cn=Users,dc=Example,dc=com`.", + "LDAP_Avatar_Field": "Camp d’avatar d’usuari", + "LDAP_Avatar_Field_Description": "Què camp s'utilitzarà com * avatar * per als usuaris. Deixi-ho en blanc per a utilitzar `thumbnailPhoto` primer i` jpegPhoto` com a alternativa.", "LDAP_Background_Sync": "Sincronització de fons", "LDAP_Background_Sync_Import_New_Users": "Sincronització de fons Importar nous usuaris", - "LDAP_Background_Sync_Import_New_Users_Description": "Importarà tots els usuaris (segons els criteris de filtratge) que existeix a LDAP i no existeix a Rocket.Chat", + "LDAP_Background_Sync_Import_New_Users_Description": "Importarà tots els usuaris (segons els seus criteris de filtre) que hi ha a LDAP i no en Rocket.Chat", "LDAP_Background_Sync_Interval": "Interval de sincronització de fons", - "LDAP_Background_Sync_Interval_Description": "L'interval entre les sincronitzacions. Exemple \"cada 24 hores\" o \"el primer dia de la setmana\", més exemples a [Cron Text Parser] (http://bunkat.github.io/later/parsers.html#text)", + "LDAP_Background_Sync_Interval_Description": "L'interval entre sincronitzacions. Exemple `cada 24 horas` o` el primer dia de la semana`, més exemples en [Cron Text Parser] (http://bunkat.github.io/later/parsers.html#text)", "LDAP_Background_Sync_Keep_Existant_Users_Updated": "Actualització de fons de sincronització dels usuaris existents", - "LDAP_Background_Sync_Keep_Existant_Users_Updated_Description": "Es sincronitzarà l'avatar, els camps, el nom d'usuari, etc. (segons la vostra configuració) de tots els usuaris ja importats des de LDAP en cada ** Interval de sincronització **", + "LDAP_Background_Sync_Keep_Existant_Users_Updated_Description": "Sincronitzarà l'avatar, els camps, el nom d'usuari, etc. (Segons la seva configuració) de tots els usuaris ja importats d'LDAP en cada ** Interval de sincronització **", "LDAP_BaseDN": "Base DN", - "LDAP_BaseDN_Description": "Nom distingit (Distinguished Name, DN), complet i qualificat d'una branca LDAP on voleu cercar usuaris i grups. Se'n poden afegir tants com es vulgui, però cada grup s'ha de definir al mateix domini base que els usuaris que hi pertanyen. Si especifica grups d'usuaris restringits, només els usuaris que pertanyen a aquests grups seran considerats. Recomanem que s'especifici el nivell superior de l'arbre de directoris LDAP com a domini base i que s'utilitzi el filtre de cerca per controlar l'accés.", + "LDAP_BaseDN_Description": "El nom distingit (DN) completament qualificat d'un subarbre LDAP que voleu cercar usuaris i grups. Podeu afegir tants com vulgui; però, cada grup ha d'estar definit en la mateixa base de domini que els usuaris que li pertanyen. Exemple: `ou = Usuaris + ou = Projectes, dc = exemple, dc = com`. Si s'especifica grups d'usuaris restringits, només els usuaris que pertanyen a aquests grups estaran dins de l'abast. Li recomanem que especifiqui el nivell superior de la seva vista de directori LDAP com a base del seu domini i utilitzi el filtre de cerca per controlar l'accés.", "LDAP_CA_Cert": "CA Cert", "LDAP_Connect_Timeout": "Temps d'espera connexió (ms)", "LDAP_Default_Domain": "Domini predeterminat", "LDAP_Default_Domain_Description": "Si es proporciona el domini per defecte s'utilitzarà per crear un correu electrònic únic per als usuaris en què el correu electrònic no s'ha importat des de LDAP. El correu electrònic es muntarà com a `nomusuari@dominiperdefecte` o `nom_usuari_unic@dominiperdefecte`.Exemple: `rocket.chat`", "LDAP_Default_Role_To_User": "Funció predeterminada de l'usuari", - "LDAP_Default_Role_To_User_Description": "El rol RC predeterminat que s’aplicarà a l’usuari si l’usuari té algun rol LDAP que no es troba mapejat.", + "LDAP_Default_Role_To_User_Description": "El paper RC predeterminat que s'aplicarà a l'usuari si l'usuari té algun paper LDAP que no està assignat.", "LDAP_Description": "LDAP és una base de dades jeràrquica que moltes empreses utilitzen per proporcionar un inici de sessió únic –una eina per tenir una sola contrasenya a múltiples llocs web i serveis. Per a exemples i informació sobre configuracions més avançades, consulteu la nostra wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.", "LDAP_Enable": "Activa", "LDAP_Enable_Description": "Intentar utilitzar LDAP com a mètode d'autenticació", - "LDAP_Enable_LDAP_Roles_To_RC_Roles": "Activa el mapatge de rols des de LDAP a Rocket.Chat", + "LDAP_Enable_LDAP_Roles_To_RC_Roles": "Activa el mapeig de rols de LDAP a Rocket.Chat", "LDAP_Encryption": "Xifrat", "LDAP_Encryption_Description": "Mètode de xifrat utilitzat per a la comunicació segura cap al servidor LDAP. Alguns exemples 'sense xifrat', 'SSL / LDAPS (xifrat des de l'inici), i' StartTLS '(actualitzar a comunicacions xifrades una vegada connectat).", "LDAP_Find_User_After_Login": "Cerca l'usuari després d'iniciar sessió", - "LDAP_Find_User_After_Login_Description": "Realitzarà una cerca del DN de l'usuari després de vincular-se per assegurar-se que la vinculació ha estat reeixida evitant l'inici de sessió amb contrasenyes buides quan la configuració de l'AD permet.", + "LDAP_Find_User_After_Login_Description": "Realitzarà una recerca de l'DN de l'usuari després de la vinculació per garantir que la vinculació es va realitzar correctament i evitarà l'inici de sessió amb contrasenyes buides quan ho permeti la configuració d'AD.", "LDAP_Group_Filter_Enable": "Activa el filtre de grups d'usuaris LDAP", - "LDAP_Group_Filter_Enable_Description": "Restringeix l'accés a usuaris d'un grup LDAP Útil per a servidors OpenLDAP sense capes que permetin filtres *memberOf*", + "LDAP_Group_Filter_Enable_Description": "Restringir l'accés als usuaris en un grup LDAP Útil per permetre que els servidors OpenLDAP sense un filtre * memberOf * restringeixin l'accés per grups", "LDAP_Group_Filter_Group_Id_Attribute": "Atribut ID de grup (Group ID)", "LDAP_Group_Filter_Group_Id_Attribute_Description": "Exemple: *OpenLDAP:*cn", "LDAP_Group_Filter_Group_Member_Attribute": "Atribut Membre de grup (Group Member)", @@ -1759,32 +2307,32 @@ "LDAP_Host": "Amfitrió (host) ", "LDAP_Host_Description": "Amfitrió (host) LDAP, exemple: `ldap.exemple.com` o `10.0.0.30`.", "LDAP_Idle_Timeout": "Temps d'espera inactiu (ms)", - "LDAP_Idle_Timeout_Description": "Quants mil·lisegons esperen després de l'última operació LDAP fins a tancar la connexió. (Cada operació obrirà una nova connexió)", + "LDAP_Idle_Timeout_Description": "Quants mil·lisegons esperen després de l'última operació LDAP fins que es tanca la connexió. (Cada operació obrirà una nova connexió)", "LDAP_Import_Users_Description": "Si s'activa, el procés de sincronització importarà tots els usuaris LDAP *Compte!* Cal especificar un filtre de cerca per no importar més usuaris del compte.", "LDAP_Internal_Log_Level": "Nivell de log intern", "LDAP_Login_Fallback": "Inici de sessió alternativa (fallback)", "LDAP_Login_Fallback_Description": "Si l'inici de sessió LDAP no funciona, intenta iniciar-la amb el sistema de comptes per defecte/local. Útil si el servei LDAP no està disponible per algun motiu.", "LDAP_Merge_Existing_Users": "Uneix usuaris existents", - "LDAP_Merge_Existing_Users_Description": "*Atenció!* Quan s'importa un usuari LDAP i ja existeix un usuari amb el mateix nom d'usuari, es canviarà la informació LDAP i el password de l'usuari ja existent.", + "LDAP_Merge_Existing_Users_Description": "* Precaució! * A l'importar un usuari de LDAP i ja existeix un usuari amb el mateix nom d'usuari, la informació i la contrasenya d'LDAP s'establiran en l'usuari existent.", "LDAP_Port": "Port", "LDAP_Port_Description": "Port per accedir a LDAP. Ex. `389` o `636` per LDAPS", - "LDAP_Query_To_Get_User_Groups": "Consulta LDAP per obtenir grups d’usuaris", + "LDAP_Query_To_Get_User_Groups": "Consulta LDAP per obtenir grups d'usuaris", "LDAP_Query_To_Get_User_Groups_Description": "Consulta LDAP per obtenir els grups LDAP dels quals l'usuari forma part.", "LDAP_Reconnect": "Reconnecta", - "LDAP_Reconnect_Description": "Intenta tornar a connectar automàticament quan la connexió s'interromp per alguna raó mentre s'executen les operacions", + "LDAP_Reconnect_Description": "Proveu tornar a connectar-se automàticament quan la connexió s'interrompi per algun motiu mentre executa operacions", "LDAP_Reject_Unauthorized": "Rebutja no autoritzat", - "LDAP_Reject_Unauthorized_Description": "Desactiveu aquesta opció per permetre els certificats que no es poden verificar. Normalment, els certificats autònoms requereixen que aquesta opció estigui deshabilitada per funcionar", + "LDAP_Reject_Unauthorized_Description": "Desactiveu aquesta opció per permetre certificats que no es poden verificar. En general, els certificats autofirmados requeriran que aquesta opció estigui desactivada per funcionar", "LDAP_Roles_To_Rocket_Chat_Roles": "Assignació de rols de LDAP a Rocket.Chat.", "LDAP_Roles_To_Rocket_Chat_Roles_Description": "Mapeig de rols en format d'objectes on la clau d'objecte ha de ser el rol LDAP i el valor d'objecte ha de ser una matriu de rols RC. Exemple: { 'ldapRole': ['rcRole', 'anotherRCRole'] }", "LDAP_Search_Page_Size": "Mida de la pàgina de cerca", - "LDAP_Search_Page_Size_Description": "El nombre màxim d'entrades de cada pàgina de resultats tornarà a ser processat", + "LDAP_Search_Page_Size_Description": "El nombre màxim d'entrades que cada pàgina de resultats tornarà a processar", "LDAP_Search_Size_Limit": "Límit de la mida de la cerca", "LDAP_Search_Size_Limit_Description": "El nombre màxim d'entrades a tornar.**Atenció** Aquest número hauria de ser superior a **Mida de la pàgina de cerca**", - "LDAP_Sync_Now": "Sincronització de fons ara", + "LDAP_Sync_Now": "Sincronització en segon pla ara", "LDAP_Sync_Now_Description": "Executarà el **Background Sync** ara enlloc d'esperar l'**interval de sincronització**, fins i tot si **Background Sync** està inactiu.Aquesta acció és asíncrona, consulteu els logs per obtenir més informació sobre procés", "LDAP_Sync_User_Active_State": "Sincronitzar l'estat d'activitat de l'usuari", "LDAP_Sync_User_Active_State_Both": "Habilitar i deshabilitar usuaris", - "LDAP_Sync_User_Active_State_Description": "Determina si els usuaris s'han d'habilitar o deshabilitar a Rocket.Chat en funció a l'estat al LDAP. L'atribut 'pwdAccountLockedTime' es farà servir per determinar si l'usuari està deshabilitat.", + "LDAP_Sync_User_Active_State_Description": "Determineu si els usuaris han d'estar habilitats o inhabilitat les Rocket.Chat segons l'estat de LDAP. L'atribut 'pwdAccountLockedTime' s'utilitzarà per determinar si l'usuari està deshabilitat.", "LDAP_Sync_User_Active_State_Disable": "Habilitar usuaris", "LDAP_Sync_User_Active_State_Nothing": "No fer res", "LDAP_Sync_User_Avatar": "Sincronitzar avatar de l'usuari", @@ -1792,93 +2340,171 @@ "LDAP_Sync_User_Data_Description": "Mantenir les dades de l'usuari sincronitzades amb el servidor **quan s'identifiqui** o en **sincronització en background** (ex: nom, adreça de correu, etcètera).", "LDAP_Sync_User_Data_FieldMap": "Mapatge de camps de dades d'usuari", "LDAP_Sync_User_Data_FieldMap_Description": "Configura com els camps del compte d'usuari (com el de correu-e) s'omplen des del registre LDAP (un cop trobat).A tall d'exemple, `{\"cn\":\"name\", \"mail\":\"email\"}` triarà el nom des de l'atribut `cn`, i l'adreça-e des de l'atribut `mail`. Addicionalment, és possible utilitzar variables, per exemple: `{ \"#{givenName} #{sn}\": \"name\", \"mail\": \"email\" }` utilitza una combinació del nom de pila i del cognom per al camp `name` de l'usuari de rocket chat. Camps disponibles a Rocket.Chat: `name`, `email` i `customFields`.", + "LDAP_Sync_User_Data_Groups": "Sincronitza grups LDAP", + "LDAP_Sync_User_Data_Groups_AutoChannels": "Sincronització automàtica de grups LDAP a Channels", + "LDAP_Sync_User_Data_Groups_AutoChannels_Admin": "Channel Administrador", + "LDAP_Sync_User_Data_Groups_AutoChannels_Admin_Description": "Quan es creen canals automàticament que no existeixen durant una sincronització, aquest usuari es convertirà automàticament en l'administrador del canal.", + "LDAP_Sync_User_Data_Groups_AutoChannels_Description": "Activeu aquesta funció per afegir usuaris automàticament a un canal en funció del seu grup LDAP. Si voleu eliminar també els usuaris d'un canal, consulteu l'opció següent per eliminar usuaris automàticament.", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap": "Mapa del Channel Grup LDAP", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Default": "// Habiliteu la sincronització automàtica de grups LDAP amb els Channel anteriors", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Description": "Assigneu grups LDAP a canals Rocket.Chat. Com a exemple, `{\"employee\":\"general\"}` afegirà qualsevol usuari del treballador del grup LDAP al canal general.", + "LDAP_Sync_User_Data_Groups_AutoRemove": "Elimina automàticament els rols d'usuari", + "LDAP_Sync_User_Data_Groups_AutoRemove_Description": "** Atenció **: si activeu això, s'eliminaran automàticament els usuaris d'una funció si no estan assignats a LDAP. Això només eliminarà automàticament els rols que es defineixen al mapa de grups de dades d'usuaris que apareix a continuació.", + "LDAP_Sync_User_Data_Groups_BaseDN": "Grup LDAP BaseDN", + "LDAP_Sync_User_Data_Groups_BaseDN_Description": "LDAP basedn utilitzat per buscar usuaris.", + "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels": "Elimina automàticament els usuaris de Channel s", + "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels_Description": "** Atenció **: Habilitar això eliminarà a qualsevol usuari en un canal que no tingui el grup LDAP corresponent! Habiliteu això només si sap el que està fent.", + "LDAP_Sync_User_Data_Groups_Filter": "Filtre de grups d'usuaris", + "LDAP_Sync_User_Data_Groups_Filter_Description": "El filtre de cerca LDAP que s'usa per verificar si un usuari està en un grup.", + "LDAP_Sync_User_Data_GroupsMap": "Mapa de grup de dades d'usuari", + "LDAP_Sync_User_Data_GroupsMap_Description": "Mapeja els grups LDAP als rols d'usuari de Rocket.Chat Com a exemple, `{\"rocket-admin\":\"admin\", \"tech-support\":\"support\"}` mapejarà el grup LDAP de rocket- admin a el paper de \"admin\" de Rocket.", "LDAP_Test_Connection": "Prova la connexió", "LDAP_Timeout": "Temps d'espera (ms)", - "LDAP_Timeout_Description": "Quants mil·lennis esperen un resultat de la cerca abans de tornar un error", + "LDAP_Timeout_Description": "Quants mil·lisegons esperen un resultat de cerca abans de tornar un error", "LDAP_Unique_Identifier_Field": "Camp d'identificador únic", "LDAP_Unique_Identifier_Field_Description": "Aquest camp s'utilitzarà per vincular l'usuari LDAP amb l'usuari Rocket.Chat. Pot proporcionar diversos valors separats per coma per intentar obtenir el valor del registre LDAP.El valor per defecte és `objectGUID,ibm-entryUUID,GUID,dominoUNID,nsuniqueId,uidNumber`", "LDAP_User_Search_Field": "Camp de cerca", - "LDAP_User_Search_Field_Description": "L'atribut LDAP que identifica a l'usuari quan intenta l'inici de sessió. Aquest camp ha de ser `sAMAccountName` per a la majoria de les instal·lacions d'Active Directory, però pot ser `uid` per altres solucions LDAP, com OpenLDAP. Podeu fer servir `mail` per identificar els usuaris per correu electrònic o qualsevol altre atribut que vulgueu.Es poden utilitzar diversos valors separats per comes per permetre als usuaris accedir utilitzant diversos identificadors com nom d'usuari o adreça de correu-e.", + "LDAP_User_Search_Field_Description": "L'atribut LDAP que identifica l'usuari LDAP que intenta l'autenticació. Aquest camp ha de ser \"sAMAccountName\" per a la majoria de les instal·lacions d'Active Directory, però pot ser \"uid\" per a altres solucions LDAP, com OpenLDAP. Feu servir `mail` per identificar els usuaris per correu electrònic o qualsevol atribut que vulgueu. Podeu usar diversos valors separats per comes per permetre que els usuaris iniciïn sessió fent servir múltiples identificadors com a nom d'usuari o correu electrònic.", "LDAP_User_Search_Filter": "Filter", "LDAP_User_Search_Filter_Description": "Si s'especifica, només els usuaris que compleixin aquest filtre podran iniciar sessió. Si no s'especifica cap filtre, tots els usuaris del domini base podran fer-ho.Exemple per Active Directory `memberOf=cn=ROCKET_CHAT,ou=General Groups`.Exemple per OpenLDAP (cerca de patró extensible) `ou:dn:=ROCKET_CHAT`.", "LDAP_User_Search_Scope": "Scope", "LDAP_Username_Field": "Camp del nom d'usuari", "LDAP_Username_Field_Description": "El camp que s'utilitzarà com a nom d'usuari (*username*) per als nous usuaris. Deixar en blanc per a utilitzar el nom d'usuari proporcionat durant l'inici de sessió.També es poden utilitzar plantilles d'etiqueta, com `#{givenName}.#{sn}`.El valor per defecte és `sAMAccountName`.", - "LDAP_Validate_Roles_For_Each_Login": "Valida el mapatge per a cada inici de sessió", - "LDAP_Validate_Roles_For_Each_Login_Description": "Si s’ha de produir la validació de cada inici de sessió (tingueu cura amb aquesta configuració perquè sobreescriurà els rols d’usuari de cada inici de sessió, en cas contrari, aquesta es validarà només en el moment de la creació d’usuaris).", - "Lead_capture_email_regex": "Regex correu electrònic de captura de plom", - "Lead_capture_phone_regex": "Telèfon de captura de plom regex", - "Leave": "Sortir de la sala", + "LDAP_Validate_Roles_For_Each_Login": "Validar l'assignació per a cada inici de sessió", + "LDAP_Validate_Roles_For_Each_Login_Description": "Si la validació ha d'ocórrer per a cada inici de sessió (vagi amb compte amb aquesta configuració perquè sobreescriurà els rols d'usuari en cada inici de sessió, en cas contrari, això es validarà només en el moment de la creació de l'usuari).", + "Lead_capture_email_regex": "Regex de correu electrònic de captura de clients potencials", + "Lead_capture_phone_regex": "Regex de telèfon de captura clients potencials", + "Leave": "Sortir ", + "Leave_a_comment": "Deixar un comentari", "Leave_Group_Warning": "Segur que vols abandonar el grup \"%s\"?", - "Leave_Livechat_Warning": "Esteu segur que voleu deixar el xat en viu amb \"%s\"?", + "Leave_Livechat_Warning": "Segur que vols sortir de l'LiveChat amb \"% s\"?", "Leave_Private_Warning": "Segur que vols sortir de la conversa amb \"%s\"?", - "Leave_room": "Sortir de la sala", + "Leave_room": "Sortir ", "Leave_Room_Warning": "Segur que vols sortir de la sala \"%s\"?", "Leave_the_current_channel": "Surt del canal actual", - "leave-c": "Deixeu els canals", - "leave-p": "Deixa grups privats", + "Leave_the_description_field_blank_if_you_dont_want_to_show_the_role": "Deixeu el camp de descripció en blanc si no desitja mostrar el rol", + "leave-c": "Sortir de Channels", + "leave-p": "Sortir de grups privats", + "Lets_get_you_new_one": "Et portem un de nou!", "line": "línia", "List_of_Channels": "Llista de canals", - "List_of_departments_for_forward": "Llista de departaments permesos per al reenviament (opcional)", - "List_of_departments_for_forward_description": "Permet establir una llista restringida de departaments que poden rebre xats d’aquest departament", + "List_of_departments_for_forward": "Llista de departaments permesos per reenviament (opcional)", + "List_of_departments_for_forward_description": "Permetre establir una llista restringida de departaments que poden rebre xats d'aquest departament", + "List_of_departments_to_apply_this_business_hour": "Llista de departaments per aplicar aquesta horari comercial", "List_of_Direct_Messages": "Llista de missatges directes", + "Omnichannel": "LiveChat", + "Livechat": "LiveChat", "Livechat_abandoned_rooms_closed_custom_message": "Missatge personalitzat quan la sala es tanca automàticament per inactivitat del visitant", - "Livechat_agents": "Agents de xat en viu", + "Livechat_agents": "Agents LIveChat", + "Livechat_Agents": "Agents", "Livechat_AllowedDomainsList": "Dominis permesos al xat en viu", - "Livechat_Dashboard": "Tauler de xat en viu", - "Livechat_enabled": "Xat en viu actiu", - "Livechat_Facebook_API_Key": "Clau API OmniChannel", - "Livechat_Facebook_API_Secret": "OmniChannel API Secret", + "Livechat_Appearance": "Aparença de LiveChat", + "Livechat_auto_transfer_chat_timeout": "Temps d'espera (en segons) per a la transferència automàtica de xats no respostos a un altre agent", + "Livechat_auto_transfer_chat_timeout_description": "Aquest esdeveniment té lloc només quan el xat acaba de començar. Després de la primera transferència per inactivitat, la sala ja no es supervisa.", + "Livechat_business_hour_type": "Tipus d'horari comercial (simple o múltiple)", + "Livechat_chat_transcript_sent": "Transcripció del xat enviada: __transcript__", + "Livechat_custom_fields_options_placeholder": "Llista separada per comes que s'utilitza per a seleccionar un valor preconfigurat. No s'accepten espais entre elements.", + "Livechat_custom_fields_public_description": "Els camps personalitzats públics es mostraran en aplicacions externes, com livechat, etc.", + "Livechat_Dashboard": "Tauler LiveChat", + "Livechat_DepartmentOfflineMessageToChannel": "Enviar els missatges fora de línia del Livechat d’aquest departament a un canal", + "Livechat_enable_message_character_limit": "Activa el límit de caràcters del missatge", + "Livechat_enabled": "LiveChat activat", + "Livechat_Facebook_API_Key": "Clave API de LiveChat ", + "Livechat_Facebook_API_Secret": "API Secret LiveChat ", "Livechat_Facebook_Enabled": "S'ha activat la integració de Facebook", "Livechat_forward_open_chats": "Reenviament de xats oberts", "Livechat_forward_open_chats_timeout": "Temps d'espera (en segons) per reenviar els xats", "Livechat_guest_count": "Comptador de visitants", - "Livechat_Inquiry_Already_Taken": "Sol·licitud de xat en viu ja atesa", - "Livechat_managers": "Supervisors de xat en viu", + "Livechat_Inquiry_Already_Taken": "Sol·licitud de LiveChat ja atesa", + "Livechat_Installation": "Instal·lació de Livechat", + "Livechat_last_chatted_agent_routing": "Agent preferit en l'últim xat", + "Livechat_last_chatted_agent_routing_Description": "La configuració de l'últim agent amb el qual va conversar assigna xats a l'agent que va interactuar anteriorment amb el mateix visitant si l'agent està disponible quan s'inicia el xat.", + "Livechat_managers": "Supervisors de LiveChat", + "Livechat_Managers": "Administradors", + "Livechat_message_character_limit": "Límit de caràcters de missatge de LiveChat", "Livechat_monitors": "Monitors de Livechat", "Livechat_Monitors": "Monitors", - "Livechat_offline": "Xat en viu fora de línia", - "Livechat_online": "Xat en viu connectat", - "Livechat_Queue": "Cua del xat en xiu", + "Livechat_offline": "LiveChat fora de línia", + "Livechat_offline_message_sent": "Missatge de LiveChat enviat sense connexió", + "Livechat_OfflineMessageToChannel_enabled": "Enviar missatges sense connexió d'LiveChat a un canal", + "Livechat_online": "LiveChat connectat", + "Livechat_Queue": "Cua del LiveChat ", "Livechat_registration_form": "Formulari de registre", - "Livechat_room_count": "Sala de recompte del xat en viu", - "Livechat_Routing_Method": "Mètode d'enrutament del xat en viu", + "Livechat_registration_form_message": "Missatge del formulari de registre", + "Livechat_room_count": "Recompte de Room del LiveChat ", + "Livechat_Routing_Method": "Mètode d'enrutament del LiveChat ", + "Livechat_status": "Estat de LiveChat", "Livechat_Take_Confirm": "Vols atendre a aquest client?", "Livechat_title": "Títol del xat en viu", "Livechat_title_color": "Color de fons del títol del xat en viu", - "Livechat_Users": "Usuaris del xat en viu", + "Livechat_transcript_already_requested_warning": "La transcripció d'aquest xat ja ha estat sol·licitada i serà enviada tan aviat com la conversa finalitzi.", + "Livechat_transcript_has_been_requested": "S'ha sol·licitat la transcripció de xat.", + "Livechat_transcript_request_has_been_canceled": "Es va cancel·lar la sol·licitud de transcripció de xat.", + "Livechat_transcript_sent": "Transcripció de LiveChat enviada", + "Livechat_transfer_return_to_the_queue": "__from__ ha tornat el xat a la cua", + "Livechat_transfer_to_agent": "__from__ va transferit el xat a __to__", + "Livechat_transfer_to_agent_with_a_comment": "__from__ va transferit el xat a __to__ amb un comentari: __comment__", + "Livechat_transfer_to_department": "__from__ va transferit el xat al departament __to__", + "Livechat_transfer_to_department_with_a_comment": "__from__ va transferir al xat a l'departament __to__ amb un comentari: __comment__", + "Livechat_Triggers": "Activadors LiveChat", + "Livechat_user_sent_chat_transcript_to_visitor": "__agent__ va enviar la transcripció de xat a __guest__", + "Livechat_Users": "Usuaris de LiveChat ", + "Livechat_visitor_email_and_transcript_email_do_not_match": "El correu electrònic del visitant i el de la transcripció no coincideixen", + "Livechat_visitor_transcript_request": "__guest__ ha sol·licitat la transcripció del xat", + "LiveStream & Broadcasting": "Transmissió en directe i transmissió", "Livestream_close": "Tanca Livestream", - "Livestream_enable_audio_only": "Activa només el mode d'àudio", + "Livestream_enable_audio_only": "Habilitar només la manera d'àudio", + "Livestream_enabled": "Transmissió en directe habilitat", "Livestream_not_found": "Livestream no està disponible", "Livestream_popout": "Obre Livestream", "Livestream_source_changed_succesfully": "La font de Livestream s'ha canviat correctament", - "Livestream_switch_to_room": "Canvia a la sala d'àudio actual", + "Livestream_switch_to_room": "Canviar a la transmissió en directe de la sala actual", "Livestream_url": "Url font de Livestream", "Livestream_url_incorrect": "L'URL de Livestream no és correcta", + "Livestream_live_now": "Transmet ara!", + "Load_Balancing": "Balanceig de càrrega", "Load_more": "Carrega'n més", "Loading_more_from_history": "Carregant-ne més des de l'historial", "Loading_suggestion": "Carregant suggeriments", "Loading...": "Carregant...", + "Local_Domains": "Dominis locals", + "Local_Password": "Contrasenya local", + "Local_Time": "Hora local", + "Local_Time_time": "Hora local: __time__", "Localization": "Localització", + "Location": "Ubicació", "Log_Exceptions_to_Channel": "Registra excepcions al canal", "Log_Exceptions_to_Channel_Description": "Canal que rebrà les excepcions capturades. Deixar en blanc per ignorar-les.", "Log_File": "Inclou l'arxiu i la línia", "Log_Level": "Nivell de registre", "Log_Package": "Inclou el paquet", - "Log_Trace_Methods": "Trucades del mètode de rastreig", - "Log_Trace_Methods_Filter": "Filtre el mètode de rastreig", - "Log_Trace_Methods_Filter_Description": "El text aquí serà avaluat com RegExp (`new RegExp ('text')`). Manteniu-lo buit per mostrar el seguiment de cada trucada.", - "Log_Trace_Subscriptions": "Trace les trucades de subscripció", - "Log_Trace_Subscriptions_Filter": "Trace el filtre de subscripció", - "Log_Trace_Subscriptions_Filter_Description": "El text aquí serà avaluat com RegExp (`new RegExp ('text')`). Manteniu-lo buit per mostrar el seguiment de cada trucada.", + "Log_Trace_Methods": "Trucades a el mètode de seguiment", + "Log_Trace_Methods_Filter": "Filtre de mètode de seguiment", + "Log_Trace_Methods_Filter_Description": "El text aquí s'avaluarà com RegExp ( `new RegExp ( 'text')`). Manteniu-buit per mostrar el rastre de cada trucada.", + "Log_Trace_Subscriptions": "Seguiment de trucades de subscripció", + "Log_Trace_Subscriptions_Filter": "Filtre de subscripció de seguiment", + "Log_Trace_Subscriptions_Filter_Description": "El text aquí s'avaluarà com RegExp ( `new RegExp ( 'text')`). Manteniu-buit per mostrar el rastre de cada trucada.", "Log_View_Limit": "Límit de vista del registre", "Logged_out_of_other_clients_successfully": "S'han tancat les sessions des d'altres clients correctament", "Login": "Inicia sessió", + "Login_Attempts": "Intents d’inici de sessió fallits", + "Login_Logs": "Registres d’inici de sessió", + "Login_Logs_ClientIp": "Mostra la IP del client als registres d'intents d'inici de sessió fallits", + "Login_Logs_Enabled": "S'ha produït un error en iniciar sessió (a la consola)", + "Login_Logs_ForwardedForIp": "Mostra la IP reenviada als registres d’intents d’inici de sessió fallits", + "Login_Logs_UserAgent": "Mostra UserAgent als registres d'intents d'inici de sessió fallits", + "Login_Logs_Username": "Mostra UserAgent als registres d'intents d'inici de sessió fallits", "Login_with": "Inicia sessió amb %s", "Logistics": "Logística", "Logout": "Tanca sessió", "Logout_Others": "Tanca les sessions obertes en altres llocs", + "Logs": "Registres", + "Longest_chat_duration": "Durada de xat més llarga", + "Longest_reaction_time": "Temps de reacció més llarg", + "Longest_response_time": "Temps de resposta més llarg", + "Looked_for": "Buscat", "Mail_Message_Invalid_emails": "S'ha proporcionat almenys una adreça de correu-e invàlida: %s", + "Mail_Message_Missing_subject": "Heu de proporcionar un assumpte de correu electrònic.", "Mail_Message_Missing_to": "Ha de seleccionar almenys un usuari o proporcionar almenys una adreça de correu electrònic, separades per comes.", "Mail_Message_No_messages_selected_select_all": "No s'ha seleccionat cap missatge", "Mail_Messages": "Envia missatges per correu-e", @@ -1890,61 +2516,94 @@ "Mailer_body_tags": "És necessari utilitzar [unsubscribe] per a l'enllaç d'anul·lació de la subscripció.És possible utilitzar [name], [fname], [lname] per al nom complet de l'usuari, nom o cognom, respectivament.També [email] per a l'adreça de correu electrònic de l'usuari.", "Mailing": "Enviament", "Make_Admin": "Fes admin", - "Make_sure_you_have_a_copy_of_your_codes_1": "Assegura't de tenir una còpia dels teus codis:", - "Make_sure_you_have_a_copy_of_your_codes_2": "Si perds accés a la teva app d'autenticació, pots utilitzar un d'aquests codis per entrar.", + "Make_sure_you_have_a_copy_of_your_codes_1": "Assegureu-vos de tenir una còpia dels codis:", + "Make_sure_you_have_a_copy_of_your_codes_2": "Si perd l'accés a la seva aplicació d'autenticació, pot utilitzar un d'aquests codis per iniciar sessió.", "Manage_Apps": "Gestioneu les aplicacions", "Manage_the_App": "Gestioneu l'aplicació", "manage-apps": "Gestioneu les aplicacions", "manage-assets": "Gestionar recursos", "manage-assets_description": "Permís per gestionar els recursos del servidor", + "manage-cloud_description": "Administra el núvol", + "manage-email-inbox": "Administrar safata d'entrada de correu electrònic", + "manage-email-inbox_description": "Permís per administrar safates d'entrada de correu electrònic", "manage-emoji": "Gestionar emoticones", "manage-emoji_description": "Permís per gestionar les emoticones del servidor", + "manage-incoming-integrations": "Gestioneu les integracions entrants", + "manage-incoming-integrations_description": "Permís per gestionar les integracions entrants del servidor", "manage-integrations": "Gestionar les integracions", "manage-integrations_description": "Permís per gestionar les integracions del servidor", + "manage-livechat-agents": "Administrar agents de LiveChat", + "manage-livechat-departments": "Gestioneu els departaments de LiveChat", + "manage-livechat-managers": "Administrar administradors de LiveChat", "manage-oauth-apps": "Gestionar apps Oauth", "manage-oauth-apps_description": "Permís per gestionar les apps Oauth del servidor", + "manage-outgoing-integrations": "Administrar les integracions sortints", + "manage-outgoing-integrations_description": "Permís per gestionar les integracions sortints del servidor", + "manage-own-incoming-integrations": "Gestionar les pròpies integracions entrants", + "manage-own-incoming-integrations_description": "Permís per permetre als usuaris crear i editar les seves pròpies integracions entrants o webhooks", "manage-own-integrations": "Gestionar les pròpies integracions", "manage-own-integrations_description": "Permís per permetre als usuaris crear i editar les seves pròpies integracions o webhooks", + "manage-own-outgoing-integrations": "Gestioneu les pròpies integracions sortints", + "manage-own-outgoing-integrations_description": "Permís per permetre als usuaris crear i editar les seves pròpies integracions de sortida o webhooks", + "manage-selected-settings": "Canvieu alguns paràmetres", + "manage-selected-settings_description": "Permís per canviar la configuració que es concedeix explícitament per canviar-la", "manage-sounds": "Gestionar sons", "manage-sounds_description": "Permís per gestionar els sons del servidor", + "manage-user-status": "Administrar l'estat de l'usuari", + "manage-user-status_description": "Permís per administrar els estats d'usuari personalitzats de servidor", "Manager_added": "Supervisor afegit", "Manager_removed": "Supervisor eliminat", + "Managers": "Administradors", "Managing_assets": "Gestió de recursos", "Managing_integrations": "Gestió d'integracions", + "Manual_Selection": "Selecció manual", "Manufacturing": "Fabricació", "MapView_Enabled": "Activa vista de mapa", "MapView_Enabled_Description": "Activar la vista de mapa mostrarà un botó per compartir la localització a l'esquerra del camp d'entrada de missatges de xat.", "MapView_GMapsAPIKey": "API Key de Google Static Maps", "MapView_GMapsAPIKey_Description": "Es pot obtenir de la Google Developers Console gratuïtament.", + "Mark_all_as_read": "Marca tots els missatges (en tots els canals) com a llegits", "Mark_as_read": "Marca llegit/s", "Mark_as_unread": "Marca com a no llegit", + "Mark_read": "Marca com a llegit", + "Mark_unread": "Marca com a no llegit", "Markdown_Headers": "Permetre encapçalaments Markdown als missatges", - "Markdown_Marked_Breaks": "Activa les pauses marcades", - "Markdown_Marked_GFM": "Activa GFM marcada", - "Markdown_Marked_Pedantic": "Habilita marcats pedantic", - "Markdown_Marked_SmartLists": "Activa les llistes intel·ligents marcades", + "Markdown_Marked_Breaks": "Habilitar pauses marcades", + "Markdown_Marked_GFM": "Habilitar GFM marcat", + "Markdown_Marked_Pedantic": "Habilitar marcat Pedantic", + "Markdown_Marked_SmartLists": "Habilitar llistes intel·ligents marcades", "Markdown_Marked_Smartypants": "Habilita Smartypants marcats", "Markdown_Marked_Tables": "Activa les Taules Marcades", "Markdown_Parser": "Parsejador Markdown", "Markdown_SupportSchemesForLink": "Markdown detecta scheme:// com a enllaç", "Markdown_SupportSchemesForLink_Description": "Llista dels scheme:// permesos separats per comes", + "Marketplace_view_marketplace": "Veure Marketplace", + "MAU_value": "MAU __value__", "Max_length_is": "La llargada màxima és %s", - "Max_number_of_chats_per_agent": "Màx. nombre de xats simultanis", - "Max_number_of_chats_per_agent_description": "Màx. nombre de xats simultanis als quals poden assistir els agents", + "Max_number_incoming_livechats_displayed": "Nombre màxim d'elements mostrats a la cua", + "Max_number_incoming_livechats_displayed_description": "(Opcional) Nombre màxim d'elements que es mostren a la cua entrant de LiveChat.", + "Max_number_of_chats_per_agent": "Màxim nombre de xats simultanis", + "Max_number_of_chats_per_agent_description": "El màxim nombre de xats simultanis als quals poden assistir els agents", + "Max_number_of_uses": "Nombre màxim d'usos", + "Maximum": "Màxim", + "Maximum_number_of_guests_reached": "Nombre màxim de convidats assolit", "Me": "Jo", "Media": "Mitjans de comunicació", "Medium": "Mitjà", + "Members": "Membres", "Members_List": "Llista de membres", "mention-all": "Mencionar tots", "mention-all_description": "Permís per utilitzar la menció @all", - "mention-here": "Menció aquí", - "mention-here_description": "Permís per fer servir el missatge @here", + "mention-here": "Esmentar aquí", + "mention-here_description": "Permís per utilitzar la menció @here", "Mentions": "Mencions", "Mentions_default": "Mencions (per defecte)", "Mentions_only": "Només mencions", - "Merge_Channels": "Combina canals", + "Merge_Channels": "Combina Channels", + "message": "Missatge", "Message": "Missatge", "Message_AllowBadWordsFilter": "Permet el filtratge de paraulotes", + "Message_AllowConvertLongMessagesToAttachment": "Permetre la conversió dels missatges llargs en arxius adjunts", "Message_AllowDeleting": "Permet l'eliminació de missatges", "Message_AllowDeleting_BlockDeleteInMinutes": "Bloqueja l'eliminació de missatges després de (n) minuts", "Message_AllowDeleting_BlockDeleteInMinutes_Description": "Introdueix 0 per desactivar el bloqueig.", @@ -1957,19 +2616,25 @@ "Message_AllowSnippeting": "Permet retalls de missatges (snippeting)", "Message_AllowStarring": "Permet destacar missatges", "Message_AllowUnrecognizedSlashCommand": "Permet /comandes no reconegudes", + "Message_Already_Sent": "Aquest missatge ja s'ha vist i està protegit pel servidor", "Message_AlwaysSearchRegExp": "Sempre cercar utilitzant RegExp", "Message_AlwaysSearchRegExp_Description": "Recomanem activar-ho si el teu idioma no està suportat per la cerca de text MongoDB.", "Message_Attachments": "Adjunts al missatge", "Message_Attachments_GroupAttach": "Agrupa els botons d'adjuntar", "Message_Attachments_GroupAttachDescription": "Això uneix les icones en un menú desplegable. Ocupen menys espai a la pantalla.", "Message_Audio": "Missatge d'àudio", - "Message_Audio_bitRate": "Bit Rate del missatge d'àudio", + "Message_Audio_bitRate": "Taxa de bits de missatges d'àudio", "Message_AudioRecorderEnabled": "Gravadora d'àudio activa", - "Message_AudioRecorderEnabled_Description": "Requereix que els fitxers d'àudio / mp3 siguin un tipus de mitjà acceptat dins de la configuració de \"Carrega d'arxius\".", + "Message_AudioRecorderEnabled_Description": "Requereix que els arxius 'àudio / mp3' siguin un tipus de mitjà acceptat dins de la configuració de 'Càrrega de fitxers'.", "Message_auditing": "Auditoria de missatges", "Message_auditing_log": "Registre d’auditoria de missatges", "Message_BadWordsFilterList": "Afegir paraulotes a la llista negra", "Message_BadWordsFilterListDescription": "Llista separada per comes de paraulotes a filtrar", + "Message_BadWordsWhitelist": "Elimina paraules de la llista negra", + "Message_BadWordsWhitelistDescription": "Afegiu una llista de paraules separades per comes per eliminar del filtre", + "Message_Characther_Limit": "Límit de caràcters del missatge", + "message_counter": "missatge __counter__", + "message_counter_plural": "__counter__ missatges", "Message_DateFormat": "Format de data", "Message_DateFormat_Description": "Veure: Moment.js", "Message_deleting_blocked": "Aquest missatge ja no es pot eliminar", @@ -1977,22 +2642,40 @@ "Message_ErasureType": "Tipus d'esborrat del missatge", "Message_ErasureType_Delete": "Suprimeix tots els missatges", "Message_ErasureType_Description": "Determineu què fer amb els missatges dels usuaris que eliminen el compte.", - "Message_ErasureType_Keep": "Mantenir missatges i nom d'usuari", + "Message_ErasureType_Keep": "Mantenir missatges i noms d'usuari", "Message_ErasureType_Unlink": "Elimina l'enllaç entre l'usuari i els missatges", "Message_GlobalSearch": "Cerca global", "Message_GroupingPeriod": "Període d'agrupament de missatges (en segons)", "Message_GroupingPeriodDescription": "Els missatges s'agruparan si són consecutius, provenen del mateix usuari i el temps transcorregut entre els mateixos és inferior al temps proporcionat en segons.", + "Message_has_been_pinned": "El missatge s'ha fixat", + "Message_has_been_starred": "El missatge ha estat marcat com a destacat", + "Message_has_been_unpinned": "El missatge ha estat desancorat", + "Message_has_been_unstarred": "El missatge s'ha tret de favorits", "Message_HideType_au": "Amaga missatges \"Usuari afegit\"", "Message_HideType_mute_unmute": "Amaga missatges de \"Usuari silenciat / té veu\"", + "Message_HideType_r": "Oculta els missatges \"Es va canviar el nom de la Room\"", + "Message_HideType_rm": "Oculta els missatges \"Missatge eliminat\"", + "Message_HideType_room_archived": "Oculta els missatges \"Room arxivats\"", + "Message_HideType_room_changed_avatar": "Oculta els missatges \"avatar Room ha canviat\"", + "Message_HideType_room_changed_privacy": "Oculta els missatges \" Tipus de Room ha canviat\"", + "Message_HideType_room_enabled_encryption": "Amaga els missatges de \"[Room] xifrat activat\"", + "Message_HideType_room_disabled_encryption": "Amaga els missatges de \"[Room] xifrat desactivat\"", + "Message_HideType_room_unarchived": "Oculta els missatges \" Room no arxivada\"", "Message_HideType_ru": "Amaga missatges \"Usuari eliminat\"", + "Message_HideType_subscription_role_added": "Ocultar els missatges de \"Rol establert\"", + "Message_HideType_subscription_role_removed": "Ocultar els missatges \"Rol no definit\"", "Message_HideType_uj": "Amaga missatges \"Usuari unit\"", "Message_HideType_ul": "Amaga missatges \"Usuari surt\"", - "Message_Ignored": "S'ha ignorat aquest missatge", + "Message_HideType_ut": "Ocultar els missatges de \"L'usuari es va unir a la conversa\"", + "Message_HideType_wm": "Ocultar els missatges de \"Benvinguda\"", + "Message_Id": "Identificador del missatge", + "Message_Ignored": "Aquest missatge va ser ignorat", "Message_info": "Informació del missatge", - "Message_KeepHistory": "Mantenir l'historial de missatges", - "Message_MaxAll": "Mida màxima de canal per al missatge ALL", - "Message_MaxAllowedSize": "Mida màxima de missatge", + "Message_KeepHistory": "Mantenir l'historial d'per missatge", + "Message_MaxAll": "Mida màxima Channel per a TOTS els missatges", + "Message_MaxAllowedSize": "Caràcters màxims permesos per missatge", "Message_pinning": "Fixació de missatges", + "message_pruned": "missatge esborrat", "Message_QuoteChainLimit": "Màxim nombre de cites encadenades", "Message_Read_Receipt_Enabled": "Mostra els rebuts de lectura", "Message_Read_Receipt_Store_Users": "Rebuts de lectura detallats", @@ -2003,17 +2686,22 @@ "Message_ShowEditedStatus": "Mostra l'estat 'editat'", "Message_ShowFormattingTips": "Mostra suggeriments de formatació", "Message_starring": "Destacar missatges", + "Message_Time": "Hora del missatge", "Message_TimeAndDateFormat": "Format de data i hora", "Message_TimeAndDateFormat_Description": "Veure també: Moment.js", "Message_TimeFormat": "Format d'hora", "Message_TimeFormat_Description": "Veure: Moment.js", "Message_too_long": "Missatge massa llarg", + "Message_too_long_as_an_attachment_question": "Missatge massa llarg. ¿Enviar-com un arxiu adjunt?", + "Message_UserId": "ID d'usuari", "Message_VideoRecorderEnabled": "Gravadora de vídeo activa", "Message_VideoRecorderEnabledDescription": "Requereix que els fitxers de tipus 'video/webm' siguin admesos a la configuració de 'Puja fitxers'.", "Message_view_mode_info": "Això canvia l'espai que ocupen els missatges en pantalla.", + "MessageBox_view_mode": "Mode de vista de quadre de missatges", "messages": "Missatges", "Messages": "Missatges", - "messages_pruned": "missatges podats", + "messages_pruned": "missatge esborrat", + "Messages_sent": "Missatges enviats", "Messages_that_are_sent_to_the_Incoming_WebHook_will_be_posted_here": "Els missatges enviats al WebHook d'entrada seran publicats aquí.", "Meta": "Meta", "Meta_custom": "Etiquetes Meta personalitzades", @@ -2022,36 +2710,63 @@ "Meta_language": "Idioma", "Meta_msvalidate01": "MSValidate.01", "Meta_robots": "Robots", + "meteor_status_connected": "Connectat", + "meteor_status_connecting": "Connectant...", + "meteor_status_failed": "La connexió del servidor ha fallat", + "meteor_status_offline": "Mode fora de línia", + "meteor_status_reconnect_in": "provant de nou en un segon ...", + "meteor_status_reconnect_in_plural": "provant de nou d'aquí a __count__ segons ...", + "meteor_status_try_now_offline": "Connectar de nou", + "meteor_status_try_now_waiting": "Prova-ho ara", + "meteor_status_waiting": "Esperant la connexió de servidor,", + "Method": "Mètode", "Min_length_is": "La llargada mínima és %s", + "Minimum": "Mínim", "Minimum_balance": "Balanç mínim", + "minute": "minut", "minutes": "minuts", + "Mobex_sms_gateway_address": "Adreça Mobex SMS Gateway", + "Mobex_sms_gateway_address_desc": "IP o amfitrió del servei Mobex amb el port especificat. Per exemple, \"http: //192.168.1.1: 1401\" o \"https: //www.example.com: 1401\"", "Mobex_sms_gateway_from_number": "De", + "Mobex_sms_gateway_from_number_desc": "Adreça / número de telèfon d'origen en enviar un nou SMS al client de LiveChat", + "Mobex_sms_gateway_from_numbers_list": "Llista de números des d’on enviar SMS", + "Mobex_sms_gateway_from_numbers_list_desc": "Llista de números separats per comes per utilitzar per enviar missatges nous, per exemple. 123456789, 123456788, 123456888", "Mobex_sms_gateway_password": "Contrasenya", + "Mobex_sms_gateway_restful_address": "Adreça Mobex SMS REST API", + "Mobex_sms_gateway_restful_address_desc": "IP o Host del seu Mobex REST API. Per exemple, `http://192.168.1.1:8080` o `https://www.example.com:8080`", "Mobex_sms_gateway_username": "Nom d'usuari", "Mobile": "Mòbil", "Mobile_Notifications_Default_Alert": "Alerta per defecte notificacions mòbil", "Monday": "dilluns", + "Mongo_storageEngine": "Motor d'emmagatzematge Mongo", + "Mongo_version": "Versió Mongo", + "MongoDB_Deprecated": "MongoDB obsolet", + "MongoDB_version_s_is_deprecated_please_upgrade_your_installation": "La versió% s de MongoDB està obsoleta, actualitzeu la vostra instal·lació.", + "Monitor_added": "Monitor afegit", "Monitor_history_for_changes_on": "Monitoritza l'historial per canvis a ", - "Monitor_removed": "S'ha eliminat el monitor", + "Monitor_removed": "Monitor eliminat", "Monitors": "Monitors", + "Monthly_Active_Users": "Usuaris actius mensuals", "More": "Més", "More_channels": "Més canals", "More_direct_messages": "Més missatges directes", "More_groups": "Més grups privats", "More_unreads": "Més per llegir", + "Most_popular_channels_top_5": "Canals més populars (Top 5)", "Move_beginning_message": "`%s` - Anar al principi del missatge", "Move_end_message": "`%s` - Anar al final del missatge", "Msgs": "Missatges", "multi": "multi", "multi_line": "línia múltiple", "Mute_all_notifications": "Silencia totes les notificacions", - "Mute_Focused_Conversations": "Converses silenciades enfocades", - "Mute_Group_Mentions": "Mute @all i @here esmenta", + "Mute_Focused_Conversations": "Silenci converses enfocades", + "Mute_Group_Mentions": "Silenci @all i @here mencions", "Mute_someone_in_room": "Silenciar algú a la sala", "Mute_user": "Silencia l'usuari", "mute-user": "Silenciar usuari", "mute-user_description": "Permís per silenciar altres usuaris del mateix canal", "Muted": "Silenciat", + "My Data": "Les meves dades", "My_Account": "El meu compte", "My_location": "La meva localització", "n_messages": "%s missatges", @@ -2062,13 +2777,25 @@ "Name_optional": "Nom (opcional)", "Name_Placeholder": "Sisplau, introdueix el teu nom...", "Navigation_History": "Historial de navegació", + "Never": "Mai", + "New": "Nou", "New_Application": "Nova aplicació", - "New_Canned_Response": "Nova resposta enllaunada", + "New_Business_Hour": "Nou horario comercial", + "New_Canned_Response": "Nova resposta preparada", + "New_chat_in_queue": "Nou xat a la cua", "New_chat_priority": "Canvi de prioritat: __user__ ha canviat la prioritat a __priority__", + "New_chat_transfer": "Nova transferència de xat: __transfer__", + "New_Contact": "Nou contacte", "New_Custom_Field": "Nou camp personalitzat", "New_Department": "Nou departament", + "New_discussion": "Nova discussió", + "New_discussion_first_message": "En general, una discussió comença amb una pregunta, com \"Com pujo una imatge?\"", + "New_discussion_name": "Un nom significatiu per a la sala de discussió.", + "New_Email_Inbox": "Nova safata d'entrada de correu electrònic", + "New_encryption_password": "Nova clau de xifrat", "New_integration": "Nova integració", "New_line_message_compose_input": "`%s` - Nova línia a l'entrada de missatge", + "New_Livechat_offline_message_has_been_sent": "S'ha enviat un nou missatge de livechat fora de línia", "New_logs": "Nous registres log", "New_Message_Notification": "Nova notificació de missatges", "New_messages": "Nous missatges", @@ -2080,31 +2807,43 @@ "New_Tag": "Nova etiqueta", "New_Trigger": "Nou disparador", "New_Unit": "Nova unitat", + "New_users": "Nous usuaris", "New_version_available_(s)": "Nova versió disponible (%s)", "New_videocall_request": "Nova petició de vídeo trucada", "New_visitor_navigation": "Nova navegació: __history__", "Newer_than": "Més recent que", "Newer_than_may_not_exceed_Older_than": "\"Més recent que\" no pot excedir \"Més antic que\"", + "Nickname": "Sobrenom", + "Nickname_Placeholder": "Introduïu el vostre sobrenom ...", "No": "No", "No_available_agents_to_transfer": "No hi ha agents disponibles per a transferir", - "No_Canned_Responses": "No hi ha respostes enllaunades", + "No_Canned_Responses": "Sense respostes preparades", "No_channel_with_name_%s_was_found": "No s'ha trobat cap canal amb el nom \"%s\"!", - "No_channels_yet": "Encara no ets a cap canal.", + "No_channels_yet": "Encara no formes part de cap canal", + "No_data_found": "Dades no trobades", "No_direct_messages_yet": "Encara no has començat cap conversa.", + "No_Discussions_found": "No s'ha trobat cap discussió", + "No_discussions_yet": "Encara no hi ha dicussions", + "No_emojis_found": "No s'ha trobat cap emojis", "No_Encryption": "Sense xifrat", + "No_files_left_to_download": "No queden arxius per descarregar", "No_group_with_name_%s_was_found": "No s'ha trobat cap grup privat amb el nom \"%s\"!", "No_groups_yet": "Encara no tens cap grup privat.", "No_integration_found": "No s'ha trobat cap integració amb l'id proporcionat.", + "No_Limit": "Il.limitat", "No_livechats": "No tens cap xat en viu.", "No_mentions_found": "Cap menció trobada", + "No_messages_found_to_prune": "No es van trobar missatges per esborrar", "No_messages_yet": "Encara no hi ha missatges", - "No_pages_yet_Try_hitting_Reload_Pages_button": "Encara no hi ha pàgines. Intenta colpejar el botó \"Recarregar pàgines\".", + "No_pages_yet_Try_hitting_Reload_Pages_button": "Encara no hi ha pàgines. Intenta pressionar el botó \"Recarregar pàgines\".", "No_pinned_messages": "Cap missatge fixat.", + "No_previous_chat_found": "No s'ha trobat cap xat anterior", "No_results_found": "No s'han trobat resultats", "No_results_found_for": "No s'han trobat resultats per a:", "No_snippet_messages": "Cap retall", "No_starred_messages": "Cap missatge destacat.", "No_such_command": "Comanda `/__command__` no trobada.", + "No_Threads": "No s'ha trobat cap fil", "No_user_with_username_%s_was_found": "No s'ha trobat cap usuari amb el nom \"%s\"!", "Nobody_available": "Ningú disponible", "Node_version": "Versió de Node", @@ -2113,58 +2852,98 @@ "Normal": "Normal", "Not_authorized": "No autoritzat", "Not_Available": "No disponible", + "Not_enough_data": "No hi ha prou dades", + "Not_following": "No seguir", + "Not_Following": "No seguir", "Not_found_or_not_allowed": "No trobat o no permès", + "Not_Imported_Messages_Title": "Els missatges següents no s’han importat correctament", + "Not_in_channel": "No al canal", + "Not_likely": "No es probable", + "Not_started": "No iniciat", + "Not_verified": "No verificat", "Nothing": "Res", "Nothing_found": "No s'ha trobat res", "Notification_Desktop_Default_For": "Mostra notificacions d'escriptori per", + "Notification_Desktop_Audio_Default_For": "Reproduir àudio de notificacions d'escriptori per", "Notification_Mobile_Default_For": "Notificacions push mòbil per", + "Notification_RequireInteraction": "Requerir interacció per descartar la notificació d'escriptori", + "Notification_RequireInteraction_Description": "Funciona només amb versions de el navegador Chrome> 50. Utilitza el paràmetre requireInteraction per mostrar la notificació d'escriptori de forma indefinida fins que l'usuari interactuï amb ella.", "Notifications": "Notificacions", - "Notifications_Max_Room_Members": "Membres de la sala Max Abans de desactivar totes les notificacions de missatges", - "Notifications_Max_Room_Members_Description": "Nombre màxim de membres a l'habitació quan es desactiven les notificacions de tots els missatges. Els usuaris encara poden canviar la configuració de l'habitació per rebre totes les notificacions de manera individual. (0 per deshabilitar)", + "Notifications_Max_Room_Members": "Nombre màxim de membres de la sala abans de desactivar totes les notificacions de missatges", + "Notifications_Max_Room_Members_Description": "Nombre màxim de membres a la sala quan es desactiven les notificacions de tots els missatges. Els usuaris encara poden canviar la configuració de cada sala per rebre totes les notificacions de forma individual. (0 per desactivar)", "Notifications_Muted_Description": "Si esculls silenciar-ho tot, no veuràs la sala destacada a la llista quan hi hagi nous missatges, excepte si són mencions. Silenciar les notificacions sobreescriurà les opcions de notificació.", "Notifications_Preferences": "Preferències de notificacions", "Notifications_Sound_Volume": "Volum del so de notificacions", "Notify_active_in_this_room": "Notifica als usuaris actius d'aquesta sala", "Notify_all_in_this_room": "Notifica a tothom d'aquest canal", + "NPS_survey_enabled": "Habilitar l'enquesta NPS", + "NPS_survey_enabled_Description": "Permeti que l'enquesta NPS s'executi per a tots els usuaris. Els administradors rebran un avís 2 mesos abans que s'iniciï l'enquesta", + "NPS_survey_is_scheduled_to-run-at__date__for_all_users": "L'enquesta de NPS està programada per executar-se en __date__ per a tots els usuaris. És possible desactivar l'enquesta a 'Admin> General> NPS'?", "Num_Agents": "# d'agents", "Number_in_seconds": "Nombre en segons", + "Number_of_events": "Nombre d'esdeveniments", + "Number_of_federated_servers": "Nombre de servidors federats", + "Number_of_federated_users": "Nombre d'usuaris federats", "Number_of_messages": "Nombre de missatges", - "Number_of_most_recent_chats_estimate_wait_time": "Nombre de xats recents per calcular el temps d’espera estimat", - "Number_of_most_recent_chats_estimate_wait_time_description": "Aquest número defineix el nombre d’últimes habitacions servides que s’utilitzaran per calcular els temps d’espera de la cua.", + "Number_of_most_recent_chats_estimate_wait_time": "Nombre d'xats recents per calcular el temps d'espera estimat", + "Number_of_most_recent_chats_estimate_wait_time_description": "Aquest número defineix el nombre d'últimes sales reservades que s'utilitzaran per calcular els temps d'espera de la cua.", + "Number_of_users_autocomplete_suggestions": "Nombre de suggeriments d'emplenament dels usuaris", + "OAuth Apps": "Aplicacions OAuth", "OAuth_Application": "Aplicació OAuth", "OAuth_Applications": "Aplicacions OAuth", "Objects": "Objectes", "Off": "Desactiva", - "Off_the_record_conversation": "Conversa sense registre (off-the-record)", - "Off_the_record_conversation_is_not_available_for_your_browser_or_device": "La conversa sense registre no està disponible per al teu navegador o dispositiu.", + "Off_the_record_conversation": "Conversa fora de registre", + "Off_the_record_conversation_is_not_available_for_your_browser_or_device": "La conversa sense registre no està disponible per al seu navegador o dispositiu", "Office_Hours": "Horari d'obertura", - "Office_hours_enabled": "Horari d'obertura actiu", + "Office_hours_enabled": "Hores d'oficina habilitades", "Office_hours_updated": "Horari actualitzat", "Offline": "Fora de línia", "Offline_DM_Email": "__user__ us ha enviat un missatge directe", "Offline_Email_Subject_Description": "Podeu utilitzar els marcadors següents:[Site_Name], [Lloc_URL], [User] i [Room] per al nom de l'aplicació, l'URL, el nom d'usuari i el nom de la sala respectivament.", "Offline_form": "formulari en línia", - "Offline_form_unavailable_message": "Missatge de formulari fora de línia no disponible", + "Offline_form_unavailable_message": "Missatge de formulari sense connexió no disponible", "Offline_Link_Message": "VÉS AL MISSATGE", - "Offline_Mention_All_Email": "Esmentar tot el tema de correu electrònic", + "Offline_Mention_All_Email": "Esmenteu tot l'assumpte de l'correu electrònic", "Offline_Mention_Email": "__user__ us ha mencionat a la sala #__room__", "Offline_message": "missatge fora de línia", - "Offline_success_message": "Fora de línia correcte", + "Offline_Message": "Missatge fora de línia", + "Offline_Message_Use_DeepLink": "Utilitzeu el format d’URL d’enllaç profund", + "Offline_messages": "Missatges fora de línia", + "Offline_success_message": "Missatge fora de línia correcte", "Offline_unavailable": "Fora de línia no disponible", - "Older_than": "Més gran que", + "Old Colors": "Colors antics", + "Old Colors (minor)": "Colors antics (menors)", + "Older_than": "Més antic que", + "Omnichannel_Directory": "Directori de LiveChat", + "Omnichannel_appearance": "Aparença de LiveChat", + "Omnichannel_Contact_Center": "Centre de contacte LiveChat", + "Omnichannel_contact_manager_routing": "Assignar nous converses a l'administrador de contactes", + "Omnichannel_contact_manager_routing_Description": "Aquesta configuració assigna un xat a l'Administrador de contactes assignat, sempre que l'Administrador de contactes estigui en línia quan s'inicia el xat", + "Omnichannel_External_Frame": "Marc extern", + "Omnichannel_External_Frame_Enabled": "Marc extern activat", + "Omnichannel_External_Frame_Encryption_JWK": "Clau de xifrat (JWK)", + "Omnichannel_External_Frame_Encryption_JWK_Description": "Si es proporciona, xifrarà el token de l'usuari amb la clau proporcionada i el sistema extern haurà de desxifrar les dades per accedir a el token.", + "Omnichannel_External_Frame_URL": "URL de marc extern", "On": "Activa", "online": "en línia", "Online": "Connectat", "Only_authorized_users_can_write_new_messages": "Només els usuaris autoritzats poden escriure missatges nous", - "Only_from_users": "Només prunes el contingut d'aquests usuaris (deixeu-lo en blanc per a poder aprofitar el contingut de tots)", + "Only_from_users": "Només elimini el contingut d'aquests usuaris (deixeu en blanc per eliminar el contingut de tots)", + "Only_Members_Selected_Department_Can_View_Channel": "Només els membres de l'departament seleccionat poden veure els xats en aquest canal", "Only_On_Desktop": "Mode ordinador d'escriptori (només envia amb Enter en ordinadors)", + "Only_works_with_chrome_version_greater_50": "Funciona només amb versions de Google Chrome> 50", "Only_you_can_see_this_message": "Només tu pots veure aquest missatge", - "Oops_page_not_found": "No s'ha trobat la pàgina", + "Only_invited_users_can_acess_this_channel": "Només els usuaris convidats poden accedir a aquest Channel", + "Oops_page_not_found": "Vaja, pàgina no trobada", "Oops!": "Ui!", "Open": "Obre", "Open_channel_user_search": "`%s` - Obre canal / Cerca usuari", + "Open_conversations": "Converses obertes", + "Open_Days": "Díes oberts", "Open_days_of_the_week": "Dies d'obertura", "Open_Livechats": "LiveChats oberts", + "Open_thread": "Fil obert", "Open_your_authentication_app_and_enter_the_code": "Obre l'app d'autenticació i entra el codi. També pots utilitzar un dels codis de recuperació.", "Opened": "Obert", "Opened_in_a_new_window": "Obert en una nova finestra.", @@ -2174,10 +2953,10 @@ "or": "o", "Or_talk_as_anonymous": "O parla com a anònim", "Order": "Ordre", - "Organization_Email": "Email de l'organització", + "Organization_Email": "Correu electrònic de l'organització", "Organization_Info": "Informació de l'organització", - "Organization_Name": "Nom de l'organització", - "Organization_Type": "Tipus d'organització", + "Organization_Name": "Nom de l'Organització", + "Organization_Type": "Tipus d'Organització", "Original": "Original", "OS_Arch": "Arquitectura del sistema", "OS_Cpus": "Recompte de CPU", @@ -2190,40 +2969,58 @@ "OS_Uptime": "Temps en funcionament", "Other": "Un altre", "others": "altres", - "Others": "altres", + "Others": "Altres", "OTR": "Off-the-record", "OTR_is_only_available_when_both_users_are_online": "La missatgeria OTR només està disponible quan els usuaris estan connectats simultàniament.", "Outgoing_WebHook": "WebHook sortint", "Outgoing_WebHook_Description": "Extreu dades de Rocket.Chat en temps real.", + "Output_format": "Format de sortida", "Override_URL_to_which_files_are_uploaded_This_url_also_used_for_downloads_unless_a_CDN_is_given": "Sobreescriu l'adreça URL a la qual es pugen els arxius. Aquesta adreça també s'utilitza per a les descàrregues a menys que s'especifiqui un CDN", "Page_title": "Titol de la pàgina", "Page_URL": "Adreça URL de la pàgina", + "Parent_channel_doesnt_exist": "Channel no existeix.", "Password": "Contrasenya", "Password_Change_Disabled": "L'administrador del Rocket.Chat ha desactivat el canvi de contrasenyes", + "Password_Changed_Description": "Podeu utilitzar els següents marcadors de posició: [contrasenya] per a la provisionalment. [nom], [fname], [lname] per al nom complet, nom o cognom de l'usuari, respectivament. [e] per al correu electrònic de l'usuari. [site_name] i [Site_URL] per al nom de l'aplicació i la URL respectivament. ", + "Password_Changed_Email_Subject": "Site_Name] - Contrasenya canviada", + "Password_changed_section": "Contrasenya canviada", "Password_changed_successfully": "La contrasenya s'ha canviat correctament", "Password_Policy": "Política de contrasenyes", + "Password_to_access": "Contrasenya per accedir", + "Passwords_do_not_match": "Les contrasenyes no coincideixen", "Past_Chats": "Els darrers xats", + "Paste_here": "Enganxa aquí ...", + "Paste": "Enganxar", + "Paste_error": "Error de lectura del portapapers", "Payload": "Càrrega útil (payload)", + "Peer_Password": "Peer Password", "People": "Gent", "Permalink": "Enllaç permanent (Permalink)", "Permissions": "Permisos", + "Personal_Access_Tokens": "Token d'accés personal", + "Phone": "Telèfon", + "Phone_already_exists": "El telèfon ja existeix", + "Phone_number": "Número de telèfon", + "Pin": "Pin", "Pin_Message": "Fixa missatge", "pin-message": "Fixar missatge", "pin-message_description": "Permís per fixar un missatge en un canal", "Pinned_a_message": "S'ha fixat un missatge:", "Pinned_Messages": "Missatges fixats", + "pinning-not-allowed": "No es permet fixar", "PiwikAdditionalTrackers": "Llocs piwik addicionals", - "PiwikAdditionalTrackers_Description": "Introduïu les URLs dels llocs web de Piwik adicionals i els SiteID en el següent format, si voleu seguir les mateixes dades en diferents llocs web: [ { \"trackerURL\" : \"https://my.piwik.domain2/\", \"siteId\" : 42 }, { \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 } ]", + "PiwikAdditionalTrackers_Description": "Introduïu les URL addicionals de la pàgina web de Piwik i els SiteID en el següent format, si desitja rastrejar les mateixes dades en diferents llocs web: [ { \"trackerURL\" : \"https://my.piwik.domain2/\", \"siteId\" : 42 }, { \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 } ]", "PiwikAnalytics_cookieDomain": "Tots els subdominis", "PiwikAnalytics_cookieDomain_Description": "Segueix visitants per tots els subdominis", "PiwikAnalytics_domains": "Amaga enllaços de sortida", - "PiwikAnalytics_domains_Description": "A l'informe \"Enllaços externs\", oculteu els clics als URL d'àlies coneguts. Inseriu un domini per línia i no utilitzeu cap separador.", + "PiwikAnalytics_domains_Description": "A l'informe \"Enllaços externs\", oculti els clics a URL d'àlies conegudes. Inseriu un domini per línia i no utilitzeu separadors.", "PiwikAnalytics_prependDomain": "Prefixa domini", "PiwikAnalytics_prependDomain_Description": "Prefixa el domini del lloc al títol de la pàgina", "PiwikAnalytics_siteId_Description": "L'ID de lloc a utilitzar per a la identificació d'aquest lloc. Exemple: 17", "PiwikAnalytics_url_Description": "L'adreça URL on es troba el Piwik, assegureu-vos d'incloure la barra del final. Exemple: //piwik.rocket.chat/", - "Placeholder_for_email_or_username_login_field": "Indicatiu per al camp d'inici de sessió (correu electrònic o nom d'usuari)", - "Placeholder_for_password_login_field": "Indicatiu per al camp de contrasenya (inici de sessió)", + "Placeholder_for_email_or_username_login_field": "Marcador de posició per al camp d'inici de sessió de correu electrònic o nom d'usuari", + "Placeholder_for_password_login_confirm_field": "Confirma marcador de posició per al camp d'inici de sessió amb contrasenya", + "Placeholder_for_password_login_field": "Marcador de posició per al camp d'inici de sessió amb contrasenya", "Please_add_a_comment": "Si us plau, afegeix un comentari", "Please_add_a_comment_to_close_the_room": "Si us plau, afegeix un comentari per tancar la sala", "Please_answer_survey": "Si us plau, permeti'ns un moment per una breu enquesta sobre aquest xat", @@ -2234,58 +3031,83 @@ "Please_enter_your_password": "Si us plau, introdueix la teva contrasenya", "Please_fill_a_label": "Si us plau, omple una etiqueta", "Please_fill_a_name": "Si us plau, introdueix un nom", + "Please_fill_a_token_name": "Introdueixi un nom de token vàlid", "Please_fill_a_username": "Si us plau, escull un nom d'usuari", "Please_fill_all_the_information": "Si us plau, omple tota la informació", + "Please_fill_an_email": "Si us plau introdueixi un correu electrònic", "Please_fill_name_and_email": "Si us plau, omple el nom i l'adreça electrònica", - "Please_go_to_the_Administration_page_then_Livechat_Facebook": "Aneu a la pàgina d'administració, a continuació, en Xarxa en viu> Facebook", + "Please_go_to_the_Administration_page_then_Livechat_Facebook": "Aneu a la pàgina Administració i A continuació LiveChat> Facebook", "Please_select_an_user": "Si us plau seleccioneu un usuari", "Please_select_enabled_yes_or_no": "Si us plau, selecciona SÍ o NO", - "Please_select_visibility": "Seleccioneu una visibilitat", + "Please_select_visibility": "Si us plau, seleccioneu una vista", "Please_wait": "Si us plau, espera", "Please_wait_activation": "Si us plau, espera, això pot portar el seu temps.", "Please_wait_while_OTR_is_being_established": "Si us plau, espera mentre la conversa OTR s'estableix.", "Please_wait_while_your_account_is_being_deleted": "Si us plau, espera mentre s'elimina el compte...", "Please_wait_while_your_profile_is_being_saved": "Si us plau, espera mentre el perfil es guarda...", + "Pool": "Pool", "Port": "Port", "Post_as": "Publica com", + "Post_to": "Publicar a", "Post_to_Channel": "Publica al canal", "Post_to_s_as_s": "Publica a %s com %s", "post-readonly": "Publicar on només lectura", "post-readonly_description": "Permís per publicar un missatge en canal de només lectura", "Preferences": "Preferències", "Preferences_saved": "Preferències guardades", + "Preparing_data_for_import_process": "Preparant de dades per al procés d’importació", + "Preparing_list_of_channels": "Preparant llista de canals", + "Preparing_list_of_messages": "Preparant llista de missatges", + "Preparing_list_of_users": "Preparant llista d'usuaris", + "Presence": "Presència", "preview-c-room": "Previsualitzar canal públic", "preview-c-room_description": "Permís per veure els continguts d'un canal públic abans d'unir-s'hi", + "Previous_month": "Mes anterior", + "Previous_week": "Setmana anterior", "Priorities": "Prioritats", "Priority": "Prioritat", - "Priority_removed": "Es va eliminar la prioritat", + "Priority_removed": "Prioritat eliminada", "Privacy": "Privacitat", "Privacy_Policy": "Política de privacitat", "Private": "Privat", "Private_Channel": "Canal privat", + "Private_Channels": "Channels Privats", + "Private_Chats": "Xats privats", "Private_Group": "Grup privat", "Private_Groups": "Grups privats", "Private_Groups_list": "Llista de grups privats", "Private_Team": "Equip privat", + "Productivity": "Productivitat", "Profile": "Perfil", "Profile_details": "Detalls del perfil", "Profile_picture": "Foto del perfil", "Profile_saved_successfully": "Perfil guardat correctament", - "Prune": "Podar", - "Prune_finished": "Prune acabat", - "Prune_Messages": "Pruna missatges", - "Prune_Modal": "Esteu segur que voleu prender aquests missatges? Els missatges podats no es poden recuperar.", - "Prune_Warning_after": "Això eliminarà tots %s a %s després de %s.", + "Prometheus": "Prometheus", + "Prometheus_API_User_Agent": "API: Agent d'usuari de seguiment", + "Prometheus_Garbage_Collector": "Recopilar NodeJS GC", + "Prometheus_Garbage_Collector_Alert": "Reinici requerit per desactivar", + "Prometheus_Reset_Interval": "Interval de reinici (ms)", + "Protocol": "Protocol", + "Prune": "Esborrar", + "Prune_finished": "Esborrat finalitzat", + "Prune_Messages": "Esborrar Missatges", + "Prune_Modal": "Estàs segur que vols eliminar aquests missatges? Els missatges eliminats no es poden recuperar.", + "Prune_Warning_after": "Això eliminarà tots els %s a %s després de %s.", "Prune_Warning_all": "Això eliminarà tots %s a %s.", "Prune_Warning_before": "Això eliminarà tots %s a %s abans de %s.", "Prune_Warning_between": "Això eliminarà tots %s a %s entre %s i %s.", - "Pruning_files": "Fitxers de poda ...", - "Pruning_messages": "Missatges de poda ...", + "Pruning_files": "Esborrant els arxius ...", + "Pruning_messages": "Esborrant els missatges ...", "Public": "Públic", "Public_Channel": "Canal públic", + "Public_Channels": "Canals públics", "Public_Community": "Comunitat pública", - "Public_Relations": "Relacions públiques", + "Public_URL": "URL pública", + "Purchase_for_free": "Compra GRATIS", + "Purchase_for_price": "Compra por $%s", + "Purchased": "Comprat", "Push": "Push (notificacions)", + "Push_Notifications": "Notificaciones push", "Push_apn_cert": "Certificat APN", "Push_apn_dev_cert": "Certificat APN de desenvolupador (Dev)", "Push_apn_dev_key": "Clau APN Dev (Key)", @@ -2294,20 +3116,26 @@ "Push_apn_passphrase": "Contrasenya APN (Passphrase)", "Push_enable": "Activa", "Push_enable_gateway": "Activa porta d'enllaç", + "Push_enable_gateway_Description": "Ha d'acceptar registrar el seu servidor (Assistent de configuració> Informació de l'organització> Registrar servidor) i els nostres termes de privacitat (Assistent de configuració> Informació del núvol> Acord de termes de privacitat de el servei en el núvol) per habilitar aquesta configuració i usar la nostra porta d'enllaç", "Push_gateway": "Porta d'enllaç", + "Push_gateway_description": "Es poden utilitzar diverses línies per especificar diverses portes d'enllaç", "Push_gcm_api_key": "Clau API GCM (Key)", "Push_gcm_project_number": "GCM Project Number", "Push_production": "Producció", + "Push_request_content_from_server": "Obtenir el contingut complet d'el missatge de servidor a l'rebre'l", + "Push_Setting_Requires_Restart_Alert": "Canviar aquest valor requereix reiniciar Rocket.Chat.", "Push_show_message": "Mostra el missatge a la notificació", - "Push_show_username_room": "Mostra el canal / grup / usuari a la notificació", + "Push_show_username_room": "Mostra el Channel /Grup / Usuari a la Notificació", "Push_test_push": "Prova", "Query": "Consulta", "Query_description": "Condicions addicionals per a determinar a quins usuaris s'enviarà el missatge de correu-e. Els usuaris des-subscrits s'eliminen automàticament de la consulta. Ha de ser un objecte JSON vàlid. Exemple: \"{\"createdAt\":{\"$gt\":{\"$date\": \"2015-01-01T00:00:00.000Z\"}}}\"", + "Query_is_not_valid_JSON": "La consulta no és JSON vàlid", "Queue": "Cua", "quote": "cita", "Quote": "Cita", "Random": "Aleatori", - "RDStation_Token": "Estació d'estació RD", + "RD Station": "Estació RD", + "RDStation_Token": "Token de la RD Station", "React_when_read_only": "Permetre reaccions", "React_when_read_only_changed_successfully": "Permetre reaccions en 'només lectura'", "Reacted_with": "es fa reaccionar amb", @@ -2317,36 +3145,42 @@ "Read_only_changed_successfully": "Només lectura canviat correctament", "Read_only_channel": "Canal de només lectura", "Read_only_group": "Grup de només lectura", - "Real_Estate": "Estat real", - "RealName_Change_Disabled": "L'administrador de Rocket.Chat ha desactivat el canvi de noms", + "Real_Estate": "Bens", + "Real_Time_Monitoring": "Monitorització en temps real", + "RealName_Change_Disabled": "El seu administrador de Rocket.Chat ha desactivat el canvi de noms", "Reason_To_Join": "Raó per unir-se", "Receive_alerts": "Rebre alertes", - "Receive_Group_Mentions": "Rebeu totes les referències @all i @here", + "Receive_Group_Mentions": "Rebi mencions @all i @here", + "Recent_Import_History": "Històric recent d'importació", "Record": "Gravar", "Redirect_URI": "URI de redireccionament (Redirect URI)", + "Refresh": "Actualització", "Refresh_keys": "Refresca les claus", "Refresh_oauth_services": "Refresca serveis OAuth", "Refresh_your_page_after_install_to_enable_screen_sharing": "Per poder compartir la pantalla refresqui la pàgina després de la instal·lació ", "Regenerate_codes": "Regenera codis", + "Regexp_validation": "Validació per expressió regular", "Register": "Crea un compte nou", "Register_Server": "Registre de Servidors", - "Register_Server_Info": "Utilitzeu les portes i portals preconfigurats proporcionats per Rocket.Chat Technologies Corp.", - "Register_Server_Opt_In": "Newsletter, ofertes i actualitzacions de productes", + "Register_Server_Info": "Utilitzeu les portes d'enllaç i els servidors intermediaris preconfigurats proporcionats per Rocket.Chat Technologies Corp.", + "Register_Server_Opt_In": "Butlletí, ofertes i actualitzacions de productes", "Register_Server_Registered": "Registreu-vos per accedir-hi", - "Register_Server_Registered_Livechat": "Livechat proxy omnichannel", - "Register_Server_Registered_Marketplace": "Apps Marketplace", + "Register_Server_Registered_I_Agree": "Estic d'acord amb el", + "Register_Server_Registered_Livechat": "LiveChat proxy", + "Register_Server_Registered_Marketplace": "Aplicacions Marketplace", "Register_Server_Registered_OAuth": "Proxy d'OAuth per a la xarxa social", - "Register_Server_Registered_Push_Notifications": "Passarel de notificacions push push mòbils", - "Register_Server_Standalone": "Manteniu-vos com a independent, cal que ho feu", - "Register_Server_Standalone_Own_Certificates": "Recompileu les aplicacions per a mòbils amb els vostres propis certificats", + "Register_Server_Registered_Push_Notifications": "Porta d'enllaç de notificacions mòbils push", + "Register_Server_Standalone": "Estigues independent, necessitaràs", + "Register_Server_Standalone_Own_Certificates": "Torneu a compilar les aplicacions mòbils amb els seus propis certificats", "Register_Server_Standalone_Service_Providers": "Crea comptes amb proveïdors de serveis", "Register_Server_Standalone_Update_Settings": "Actualitzeu la configuració preconfigurada", + "Register_Server_Terms_Alert": "Si us plau, accepti els termes per completar el registre", "Registration": "Registre", "Registration_Succeeded": "Registre reeixit", "Registration_via_Admin": "Registre via Admin", "Regular_Expressions": "Expressions regulars", "Release": "Llançament", - "Religious": "Religiosa", + "Religious": "Religiós", "Reload": "Recarrega", "Reload_Pages": "Recarrega pàgines", "Remove": "Esborrar", @@ -2358,59 +3192,93 @@ "Remove_from_room": "Treu-lo de la sala", "Remove_last_admin": "Eliminant el darrer admin", "Remove_someone_from_room": "Treu algú de la sala", + "remove-closed-livechat-rooms": "Eliminar Rooms tancades de LiveChat", "remove-user": "Expulsar usuari", "remove-user_description": "Permís per expulsar un usuari d'una sala", "Removed": "Eliminat", "Removed_User": "Usuari eliminat", + "Replay": "Repetició", + "Replied_on": "Va respondre a", + "Replies": "Respostes", "Reply": "Resposta", + "reply_counter": "__counter__ resposta", + "reply_counter_plural": "__counter__ respostes", + "Reply_in_direct_message": "Respondre en missatge directe", + "Reply_in_thread": "Respon en fil", + "Reply_via_Email": "Respondre per correu electrònic", "ReplyTo": "Respondre a", + "Report": "Reportar", "Report_Abuse": "Informar d'un abús", "Report_exclamation_mark": "Informa!", "Report_sent": "Informe enviat", "Report_this_message_question_mark": "Informar d'aquest missatge?", "Reporting": "Informes", + "Request_comment_when_closing_conversation": "Sol·licitar un comentari a l'tancar la conversa", + "Request_comment_when_closing_conversation_description": "Si està activat, l'agent haurà de fer un comentari abans que es tanqui la conversa.", + "Request_tag_before_closing_chat": "Sol·licitar etiqueta(es) abans de tancar la conversa", + "Requested_At": "Sol·licitat en", + "Requested_By": "Sol.licitada per", + "Require": "Requerir", + "Required": "requerit", + "required": "Requerit", "Require_all_tokens": "Requerir tots els tokens", - "Require_any_token": "Demana qualsevol token", + "Require_any_token": "Requerir qualsevol token", "Require_password_change": "Requerir el canvi de la contrasenya", "Resend_verification_email": "Reenviar el correu-e de verificació", "Reset": "Reinicialitza (reset)", "Reset_Connection": "Restablir la connexió", + "Reset_E2E_Key": "Restableix la clau E2E", "Reset_password": "Reinicialitza la contrasenya", "Reset_section_settings": "Reinicialitza els ajustos de la secció", + "Reset_TOTP": "Restableix TOTP", + "reset-other-user-e2e-key": "Restableix la clau E2E d'un altre usuari", + "Responding": "Responent", + "Response_description_post": "Els cossos buits o els cossos amb una propietat de text buida simplement seran ignorats. Les respostes que no siguin 200 es tornaran a intentar una quantitat raonable de vegades. Es publicarà una resposta amb l'àlies i l'avatar especificats anteriorment. Pot anul·lar aquesta informació com en l'exemple anterior.", + "Response_description_pre": "Si el controlador desitja tornar a publicar una resposta al canal, el següent JSON s'ha de retornar com el cos de la resposta:", "Restart": "Reinicia (restart)", "Restart_the_server": "Reinicia el servidor", "Retail": "Venda al detall", "Retention_setting_changed_successfully": "La configuració de la política de retenció s'ha canviat correctament", "RetentionPolicy": "Política de retenció", + "RetentionPolicy_Advanced_Precision": "Utilitza la configuració avançada de la política de retenció", + "RetentionPolicy_Advanced_Precision_Cron": "Utilitzeu Cron de política de retenció avançada", + "RetentionPolicy_Advanced_Precision_Cron_Description": "Amb quina freqüència ha de executar-se el temporitzador de poda definit per l'expressió de la feina cron. Establir això en un valor més precís fa que els canals amb temporitzadors de retenció ràpids funcionin millor, però podria costar potència de processament addicional en comunitats grans.", "RetentionPolicy_AppliesToChannels": "S'aplica als canals", "RetentionPolicy_AppliesToDMs": "S'aplica als missatges directes", "RetentionPolicy_AppliesToGroups": "S'aplica a grups privats", - "RetentionPolicy_Description": "Activa automàticament missatges antics a la vostra instància de Rocket.Chat.", + "RetentionPolicy_Description": "Elimina automàticament els missatges antics en la instància de Rocket.Chat.", + "RetentionPolicy_DoNotPruneDiscussion": "No esborrar els missatges de discussió", + "RetentionPolicy_DoNotPrunePinned": "No esborrar els missatges fixats", + "RetentionPolicy_DoNotPruneThreads": "No esborrar els fils", "RetentionPolicy_Enabled": "Actiu", "RetentionPolicy_ExcludePinned": "Exclou els missatges fixats", - "RetentionPolicy_FilesOnly": "Només elimineu fitxers", - "RetentionPolicy_FilesOnly_Description": "Només es suprimiran els fitxers, els mateixos missatges es mantindran en el lloc.", - "RetentionPolicy_MaxAge": "Edat màxima del missatge", - "RetentionPolicy_MaxAge_Channels": "Edat màxima del missatge als canals", - "RetentionPolicy_MaxAge_Description": "Agrupeu tots els missatges anteriors a aquest valor, en dies", - "RetentionPolicy_MaxAge_DMs": "Edat del missatge màxima en missatges directes", - "RetentionPolicy_MaxAge_Groups": "Edat màxima del missatge en grups privats", + "RetentionPolicy_FilesOnly": "Només elimineu arxius", + "RetentionPolicy_FilesOnly_Description": "Només s'eliminaran els arxius, els propis missatges romandran al seu lloc.", + "RetentionPolicy_MaxAge": "Antiguitat màxima de l'missatge", + "RetentionPolicy_MaxAge_Channels": "Antiguitat màxima dels missatges en els canals", + "RetentionPolicy_MaxAge_Description": "Elimineu tots els missatges anteriors a aquest valor, en dies", + "RetentionPolicy_MaxAge_DMs": "Antiguitat màxima del missatge en missatges directes", + "RetentionPolicy_MaxAge_Groups": "Antiguitat màxima del missatge en grups privats", "RetentionPolicy_Precision": "Precisió del temporitzador", - "RetentionPolicy_Precision_Description": "Amb quina freqüència hauria de funcionar el temporitzador prune. En establir-lo amb un valor més precís, els canals amb temporitzadors de retenció ràpids funcionen millor, però poden costar més poder de processament a comunitats grans.", - "RetentionPolicy_RoomWarning": "Els missatges anteriors a __time__ es poda aquí automàticament", - "RetentionPolicy_RoomWarning_FilesOnly": "Els fitxers anteriors a __time__ es poda automàticament aquí (els missatges romanen intactes)", - "RetentionPolicy_RoomWarning_Unpinned": "Els missatges anteriors que anteriors a __time__ es podran anar aquí automàticament", - "RetentionPolicy_RoomWarning_UnpinnedFilesOnly": "Els fitxers fixos anteriors a __time__ es poda automàticament aquí (els missatges romanen intactes)", - "RetentionPolicyRoom_Enabled": "Podau automàticament missatges antics", + "RetentionPolicy_Precision_Description": "Amb quina freqüència ha de funcionar el comptador de poda. Establir això en un valor més precís fa que els canals amb temporitzadors de retenció ràpids funcionin millor, però podria costar potència de processament addicional en comunitats grans.", + "RetentionPolicy_RoomWarning": "Els missatges anteriors a __time__ s'eliminen automàticament aquí", + "RetentionPolicy_RoomWarning_FilesOnly": "Els arxius anteriors a __time__ s'eliminaran automàticament aquí (els missatges romanen intactes)", + "RetentionPolicy_RoomWarning_Unpinned": "Els missatges no fixats anteriors a __time__ s'eliminaran automàticament aquí", + "RetentionPolicy_RoomWarning_UnpinnedFilesOnly": "Els arxius no fixats anteriors a __time__ s'eliminaran automàticament aquí (els missatges romanen intactes)", + "RetentionPolicyRoom_Enabled": "Esborrar missatges antics automàticament", "RetentionPolicyRoom_ExcludePinned": "Exclou els missatges fixats", - "RetentionPolicyRoom_FilesOnly": "Només podreu fitxers, manteniu missatges", - "RetentionPolicyRoom_MaxAge": "Edat màxima d'edat en dies (per defecte: __max__)", + "RetentionPolicyRoom_FilesOnly": "Esborri només arxius, mantingui missatges", + "RetentionPolicyRoom_MaxAge": "Antiguitat màxima de l'missatge en dies (per defecte: __max__)", "RetentionPolicyRoom_OverrideGlobal": "Anul·lar la política de retenció global", - "RetentionPolicyRoom_ReadTheDocs": "Ves amb compte! Modificar aquestes configuracions sense tenir cura, pot destruir tot l'historial de missatges. Llegeix la documentació abans d'activar la funció aquí.", + "RetentionPolicyRoom_ReadTheDocs": "Compte! Ajustar aquestes configuracions sense la major cura pot destruir tot l'historial de missatges. Llegiu la documentació abans d'activar la funció aquí .", "Retry_Count": "Comptador de reintents", + "Return_to_home": "Tornar a inici", + "Return_to_previous_page": "Torna a la pàgina anterior", + "Robot_Instructions_File_Content": "Contingut del fitxer Robots.txt", + "Rocket_Chat_Alert": "Alerta Rocket.Chat", "Role": "Rol", "Role_Editing": "Edició de rols", - "Role_Mapping": "Assignació de rols", + "Role_Mapping": "Mapeig de rols", "Role_removed": "Rol eliminat", "Room": "Sala", "Room_announcement_changed_successfully": "L'anunci de la sala s'ha canviat correctament", @@ -2419,6 +3287,7 @@ "Room_archivation_state_true": "Arxivada", "Room_archived": "Sala arxivada", "room_changed_announcement": "L'anunci de la sala s'ha canviat a: __room_announcement__ per __user_by__", + "room_changed_avatar": "Avatar de la sala canviat per __user_by__ ", "room_changed_description": "Descripció de la sala canviada a: __room_description__ per __user_by__.", "room_changed_privacy": "Tipus de sala canviat a: __room_type__ per __user_by__.", "room_changed_topic": "Tema de la sala canviat a: __room_topic__ per __user_by__.", @@ -2435,79 +3304,150 @@ "Room_name_changed_successfully": "El nom de la sala s'ha canviat correctament", "Room_not_found": "Sala no trobada", "Room_password_changed_successfully": "Contrasenya de la sala canviada correctament", - "Room_tokenpass_config_changed_successfully": "La configuració de tokenpass de la sala ha canviat correctament", + "Room_tokenpass_config_changed_successfully": "La configuració tokenpass de la sala canviada amb èxit", "Room_topic_changed_successfully": "El tema de la sala s'ha canviat correctament", "Room_type_changed_successfully": "El tipus de sala s'ha canviat correctament", "Room_type_of_default_rooms_cant_be_changed": "Aquesta és una sala per defecte i no es pot canviar el tipus, si us plau consulta-ho amb l'administrador.", "Room_unarchived": "La sala s'ha desarxivat", + "Room_updated_successfully": "Rooms'ha actualitzat correctament.", "Room_uploaded_file_list": "Llista d'arxius pujats", "Room_uploaded_file_list_empty": "No hi ha cap arxiu.", "Rooms": "Sales", + "Routing": "Enrutat", + "Run_only_once_for_each_visitor": "Executar només una vegada per cada visitant", "run-import": "Executar importació", "run-import_description": "Permís per executar els importadors", "run-migration": "Executar migració", "run-migration_description": "Permís per executar les migracions", "Running_Instances": "Instàncies executant-se", - "Runtime_Environment": "Runtime Environment", + "Runtime_Environment": "Entorn d'execució", "S_new_messages_since_s": "%s nous des de: %s", - "Same_As_Token_Sent_Via": "Igual que \"Token Sent Via\"", + "Same_As_Token_Sent_Via": "El mateix que \"Token enviat a través de\"", "Same_Style_For_Mentions": "Mateix estil per a mencions", "SAML": "SAML", + "SAML_Allowed_Clock_Drift": "Desviació de rellotge permesa de el proveïdor d'identitat", + "SAML_Allowed_Clock_Drift_Description": "El reloj del proveedor de identidad puede adelantarse un poco a los relojes del sistema. Puede permitir una pequeña desviación del reloj. Su valor debe expresarse en milisegundos (ms). El valor dado se suma a la hora actual en la que se valida la respuesta.", + "SAML_AuthnContext_Template": "Plantilla AuthnContext", + "SAML_AuthnContext_Template_Description": "Podeu utilitzar qualsevol variable de la plantilla AuthnRequest aquí.\n\nPara afegir contextos d'autenticació addicionals, dupliqui l'etiqueta __AuthnContextClassRef__ i reemplaci la variable __ \\ _ \\ _ authnContext \\ _ \\ ___ amb el nou context.", + "SAML_AuthnRequest_Template": "Plantilla AuthnRequest", + "SAML_AuthnRequest_Template_Description": "Les següents variables estan disponibles:\n - ** \\ _ \\ _ newId \\ _ \\ _ **: Cadena d'identificació generada aleatoriamente\n- ** \\ _ \\ _ instant \\ _ \\ _ **: Data i hora actual\n- ** \\ _ \\ _ callbackUrl \\ _ \\ _ **: la URL de devolució de trucada d'Rocket.Chat.\n- ** \\ _ \\ _ entryPoint \\ _ \\ _ **: El valor de l'opció __Custom Entry Point __\n- ** \\ _ \\ _ issuer \\ _ \\ _ **: El valor de l'opció __Custom Issuer __\n- ** \\ _ \\ _ identifierFormatTag \\ _ \\ _ **: El contingut d'__NameID Policy Template__ si un vàlid __Identifier Format__ és configurado.\n- ** \\ _ \\ _ identifierFormat \\ _ \\ _ **: El valor de l'opció __Identifier Format __\n- ** \\ _ \\ _ authnContextTag \\ _ \\ _ **: El contingut de __AuthnContext Template__ si un vàlid __Custom AuthN Context__ és configurado.\n- ** \\ _ \\ _ authnContextComparison \\ _ \\ _ * *: El valor de l'opció __Authn Context Comparison __\n- ** \\ _ \\ _ authnContext \\ _ \\ _ **: El valor de l'opció __Custom AuthN Context__", + "SAML_Custom_Authn_Context": "Context Authn personalitzat", + "SAML_Custom_Authn_Context_Comparison": "Comparació del context d’Authn", + "SAML_Custom_Authn_Context_description": "Deixi això buit per ometre el context d'autenticació de la sol·licitud. \nPer afegir múltiples contextos d'autenticació, afegiu els addicionals directament a la configuració \n__AuthnContext Template__", "SAML_Custom_Cert": "Certificat personalitzat", + "SAML_Custom_Debug": "Activa la depuració", + "SAML_Custom_EMail_Field": "Nom del camp de correu electrònic", "SAML_Custom_Entry_point": "Punt d'entrada (Entry Point) personalitzat", "SAML_Custom_Generate_Username": "Generar nom d'usuari", "SAML_Custom_IDP_SLO_Redirect_URL": "Redirecció URL IDP SLO", + "SAML_Custom_Immutable_Property": "Nom de camp immutable", + "SAML_Custom_Immutable_Property_EMail": "Correu electrònic", "SAML_Custom_Immutable_Property_Username": "Nom d'usuari", "SAML_Custom_Issuer": "Emissor (issuer) personalitzat", - "SAML_Custom_Logout_Behaviour": "Sortida del comportament", - "SAML_Custom_Logout_Behaviour_End_Only_RocketChat": "Només sortiu de Rocket.Chat", + "SAML_Custom_Logout_Behaviour": "Comportament de tancament de sessió", + "SAML_Custom_Logout_Behaviour_End_Only_RocketChat": "Només tanca la sessió en Rocket.Chat", "SAML_Custom_Logout_Behaviour_Terminate_SAML_Session": "Finalitza la sessió SAML", + "SAML_Custom_mail_overwrite": "Sobreescriu el correu de l'usuari (utilitza l'atribut idp)", + "SAML_Custom_name_overwrite": "Sobreescriu el nom complet de l'usuari (utilitza l'atribut idp)", "SAML_Custom_Private_Key": "Contingut de la clau privada", "SAML_Custom_Provider": "Proveïdor (provider) personalitzat", "SAML_Custom_Public_Cert": "Contingut del certificat públic", + "SAML_Custom_signature_validation_all": "Valida totes les signatures", + "SAML_Custom_signature_validation_assertion": "Validar la signatura d'asserció", + "SAML_Custom_signature_validation_either": "Validar qualsevol signatura", + "SAML_Custom_signature_validation_response": "Validar la signatura de resposta", + "SAML_Custom_signature_validation_type": "Tipus de validació de signatura", + "SAML_Custom_signature_validation_type_description": "Aquesta configuració s'ignorarà si no es proporciona un certificat personalitzat.", "SAML_Custom_user_data_fieldmap": "Mapatge de camps de dades d'usuari", + "SAML_Custom_user_data_fieldmap_description": "Configura com s'emplenen els camps del compte d'usuari (com el correu electrònic) a partir d'un registre en SAML (un cop trobat).\nPer exemple, `{\"name\":\"cn\", \"email\":\"mail\"}` triarà el nom llegible d'una persona de l'atribut cn, i el seu correu electrònic de l'atribut mail.\nCamps disponibles a Rocket.Chat: `name`,` email` and `username`, tot la resta es guardarà com` customFields`.\nAssigneu el nom d'un atribut immutable a la clau '__identifier__' per usar-lo com a identificador d'usuari.\nTambé pots fer servir regex i plantilles. Les plantilles es processaran primer, excepte quan facin referència a el resultat de la regex.\n```{\n \"email\": \"mail\",\n \"username\": {\n \"fieldName\": \"mail\",\n \"regex\": \"(.*)@.+$\",\n \"template\": \"user-__regex__\"\n },\n \"name\": {\n \"fieldNames\": [\n \"firstName\",\n \"lastName\"\n ],\n \"template\": \"__firstName__ __lastName__\"\n },\n \"__identifier__\": \"uid\"\n}```\n", + "SAML_Custom_Username_Field": "Nom del camp del nom d'usuari", + "SAML_Custom_Username_Normalize": "Normalitzar el nom d'usuari", + "SAML_Custom_Username_Normalize_Lowercase": "En minúscules", + "SAML_Custom_Username_Normalize_None": "No normalitzar", + "SAML_Default_User_Role": "Rol d'usuari per defecte", + "SAML_Default_User_Role_Description": "Podeu especificar diversos rols, separant-los amb comes.", + "SAML_Identifier_Format": "Format identificador", + "SAML_Identifier_Format_Description": "Deixi això buit per ometre la Política de NameID de la sol·licitud.", + "SAML_LogoutRequest_Template": "Plantilla de sol·licitud de tancament de sessió", + "SAML_LogoutRequest_Template_Description": "Les següents variables estan disponibles: \n- ** \\ _ \\ _ newId \\ _ \\ _ **: Cadena d'identificació generada aleatoriamente\n- ** \\ _ \\ _ instant \\ _ \\ _ **: Data i hora actual\n- ** \\ _ \\ _ idpSLORedirectURL \\ _ \\ _ **: la URL d'inici de sessió únic d'IDP a la qual redireccionar.\n- ** \\ _ \\ _ issuer \\ _ \\ _ **: El valor de l'opció __Custom issuer __\n- ** \\ _ \\ _ identifierFormat \\ _ \\ _ **: el valor de l'opció __Identifier Format __\n- ** \\ _ \\ _ nameID \\ _ \\ _ **: el NameID rebut des del IdP quan l'usuari ha iniciat sesión.\n- ** \\ _ \\ _ sessionIndex \\ _ \\ _ **: el sessionIndex rebut des del IdP quan l'usuari ha tancat sessió.", + "SAML_LogoutResponse_Template": "Plantilla de resposta de tancament de sessió", + "SAML_LogoutResponse_Template_Description": "Les següents variables estan disponibles: \n- ** \\ _ \\ _ newId \\ _ \\ _ **: Cadena d'identificació generada aleatoriamente\n- ** \\ _ \\ _ inResponseToId \\ _ \\ _ **: La identificació de la resposta de tancament de sesón rebuda de el IdP\n- ** \\ _ \\ _ instant \\ _ \\ _ **: Data i hora actual\n- ** \\ _ \\ _ idpSLORedirectURL \\ _ \\ _ **: la URL d'inici de sessió únic d'IDP a la qual redireccionar.\n- * * \\ _ \\ _ issuer \\ _ \\ _ **: El valor de l'opció __Custom issuer __\n- ** \\ _ \\ _ identifierFormat \\ _ \\ _ **: El valor de l'opció __Identifier Format __\n- ** \\ _ \\ _ nameID \\ _ \\ _ **: El NameID rebut des de la resposta de tancament de sessió de IdP\n- ** \\ _ \\ _ sessionIndex \\ _ \\ _ **: El sessionIndex rebut des de la resposta de tancament de sessió de IdP", + "SAML_Metadata_Certificate_Template_Description": "Les següents variables estan disponibles:\n- ** \\ _ \\ _ newId \\ _ \\ _ **: Cadena d'identificació generada aleatòriament", + "SAML_Metadata_Template": "Plantilla de metadades", + "SAML_Metadata_Template_Description": "Les següents variables estan disponibles:\n - ** \\ _ \\ _ sloLocation \\ _ \\ _ **: L'URL de tancament de sessió simple de Rocket.Chat\n- ** \\ _ \\ _ issuer \\ _ \\ _ **: The value of the __Custom Issuer__ setting.\n- ** \\ _ \\ _ identifierFormat \\ _ \\ _ **: el valor de l'opció __Identifier Format __\n- ** \\ _ \\ _ certificateTag \\ _ \\ _ **: Si un certificat privat és configurat, això inclourà el __Metadata Certificate Template__, en cas contrari serà ignorado.\n- ** \\ _ \\ _ callbackUrl \\ _ \\ _ **: L'URL de crida de Rocket.Chat", + "SAML_MetadataCertificate_Template": "Plantilla de certificat de metadades", + "SAML_NameIdPolicy_Template": "Plantilla de política NameID", + "SAML_NameIdPolicy_Template_Description": "Podeu utilitzar qualsevol variable de la plantilla de sol·licitud d'autorització aquí.", + "SAML_Role_Attribute_Name": "Nom de l'atribut de rol", + "SAML_Role_Attribute_Name_Description": "Si aquest atribut es troba a la resposta SAML, els seus valors s'utilitzaran com a noms de rol per als usuaris nous.", + "SAML_Role_Attribute_Sync": "Sincronitza els rols de l'usuari", + "SAML_Role_Attribute_Sync_Description": "Sincronitzeu els rols d'usuari de SAML a l'iniciar sessió (sobreescriu els rols d'usuari local).", "SAML_Section_1_User_Interface": "Interfície d'usuari", + "SAML_Section_2_Certificate": "Certificat", + "SAML_Section_3_Behavior": "Comportament", + "SAML_Section_4_Roles": "Rols", + "SAML_Section_5_Mapping": "Mapeig", + "SAML_Section_6_Advanced": "Avançat", + "SAML_Custom_channels_update": "Actualitzeu les subscripcions Room a cada inici de sessió", + "SAML_Custom_channels_update_description": "Garanteix que l'usuari sigui membre de tots els canals en l'asserció SAML en cada inici de sessió.", + "SAML_Custom_include_private_channels_update": "Incloure Rooms privades en la subscripció del Room", + "SAML_Custom_include_private_channels_update_description": "Afegeix usuari a qualsevol sala privada que existeixi en l'asserció SAML.", "Saturday": "dissabte", "Save": "Desa", "Save_changes": "Desa els canvis", "Save_Mobile_Bandwidth": "Estalvia ample de banda mòbil", "Save_to_enable_this_action": "Desa per activar els canvis", - "save-others-livechat-room-info": "Guardar info altres xats en viu", - "save-others-livechat-room-info_description": "Permís per guardar informació d'altres canals de xat en viu", + "Save_To_Webdav": "Desar a WebDAV", + "Save_your_encryption_password": "Deseu la contrasenya de xifrat", + "save-others-livechat-room-info": "Desar informació d'altres sales de LiveChat", + "save-others-livechat-room-info_description": "Permís per guardar informació d'altres sales de LiveChat", "Saved": "Desat", "Saving": "Desant", "Scan_QR_code": "Fent servir una app d'autenticació com Google Authenticator, Authy o Duo, escanneja el codi QR. Et mostrarà un codi de 6 dígits que has d'entrar aquí a sota.", - "Scan_QR_code_alternative_s": "Si no podeu escanejar el codi QR, podeu introduir el codi manualment:", + "Scan_QR_code_alternative_s": "Si no pot escanejar el codi QR, pot ingressar el codi manualment en el seu lloc:", "Scope": "Abast (scope)", + "Score": "Puntuació", + "Screen_Lock": "Bloqueig de pantalla", "Screen_Share": "Compartir pantalla", "Script_Enabled": "Script actiu", "Search": "Cerca", - "Search_by_file_name": "Cerca per nom del fitxer", + "Search_Apps": "Cerqueu aplicacions", + "Search_by_file_name": "Cercar per nom d'arxiu", "Search_by_username": "Cerca per nom d'usuari", "Search_Channels": "Cerca canals", - "Search_current_provider_not_active": "El proveïdor de cerca actual no està actiu", - "Search_message_search_failed": "Ha fallat la sol·licitud de cerca", + "Search_Chat_History": "Cerca l'historial de xats", + "Search_current_provider_not_active": "El proveïdor de recerca actual no està actiu", + "Search_Integrations": "Integracions de cerca", + "Search_message_search_failed": "Error en la sol·licitud de recerca", "Search_Messages": "Cerca missatges", + "Search_Files": "Cerca arxius", "Search_Page_Size": "Mida de la pàgina", "Search_Private_Groups": "Cerca grups privats", "Search_Provider": "Proveïdor de cerques", + "Search_Rooms": "Cerca Room s", "Search_Users": "Cercar usuaris", "seconds": "segons", "Secret_token": "Token secret", "Security": "Seguretat", + "See_full_profile": "Veure perfil complet", "Select_a_department": "Selecciona un departament", + "Select_a_room": "Seleccioneu una sala", "Select_a_user": "Selecciona un usuari", "Select_an_avatar": "Selecciona un avatar", "Select_an_option": "Selecciona una opció", + "Select_at_least_one_user": "Seleccioneu com a mínim un usuari", + "Select_at_least_two_users": "Seleccioneu almenys dos usuaris", "Select_department": "Selecciona un departament", "Select_file": "Selecciona un arxiu", "Select_role": "Selecciona un rol", "Select_service_to_login": "Selecciona un servei per iniciar sessió i carregar la teva imatge o puja una foto del teu ordinador", + "Select_tag": "Seleccioneu una etiqueta", "Select_user": "Selecciona usuari", "Select_users": "Selecciona els usuaris", "Selected_agents": "Agents seleccionats", "Selected_departments": "Departaments seleccionats", "Selected_monitors": "Monitors seleccionats", + "Selecting_users": "Selecció d’usuaris", "Send": "Envia", "Send_a_message": "Envia un missatge", "Send_a_test_mail_to_my_user": "Envia un missatge de prova al meu usuari", @@ -2519,26 +3459,46 @@ "Send_invitation_email_error": "No s'ha proporcionat cap adreça de correu electrònic vàlida.", "Send_invitation_email_info": "Es poden enviar múltiples invitacions per correu electrònic a la vegada.", "Send_invitation_email_success": "S'han enviat amb èxit invitacions per correu-e a les següents adreces:", - "Send_request_on_agent_message": "Enviar sol·licitud de missatges d'agent", - "Send_request_on_chat_close": "Envia petició (request) en tancar xat", - "Send_request_on_lead_capture": "Enviar sol·licitud de captura de plom", - "Send_request_on_offline_messages": "Envia petició (request) quan hi hagi missatges fora de línia", + "Send_me_the_code_again": "Enviem el codi de nou", + "Send_request_on": "Envia la sol·licitud en", + "Send_request_on_agent_message": "Enviar sol·licitud en missatges d'agent", + "Send_request_on_chat_close": "Enviar sol·licitud al tancament de xat", + "Send_request_on_chat_queued": "Enviar sol·licitud al xat en cua", + "Send_request_on_chat_start": "Envia la sol·licitud a l'inici del xat", + "Send_request_on_chat_taken": "Enviar sol·licitud al xat realitzat", + "Send_request_on_forwarding": "Envia la sol·licitud de reenviament", + "Send_request_on_lead_capture": "Enviar sol·licitud de captura de clients potencials", + "Send_request_on_offline_messages": "Enviar sol·licitud en missatges sense connexió", "Send_request_on_visitor_message": "Enviar sol·licitud en missatges de visitants", "Send_Test": "Envia prova", - "Send_Visitor_navigation_history_as_a_message": "Envieu l'historial de navegació del visitant com a missatge", + "Send_Test_Email": "Enviar correu electrònic de prova", + "Send_via_email": "Enviar per correu electrònic", + "Send_via_Email_as_attachment": "Enviar per correu electrònic com arxiu adjunt", + "Send_Visitor_navigation_history_as_a_message": "Envia l'historial de navegació de l'visitant com a missatge", "Send_visitor_navigation_history_on_request": "Envieu l'historial de navegació dels visitants a petició", "Send_welcome_email": "Envia correu electrònic de benvinguda", "Send_your_JSON_payloads_to_this_URL": "Envia les càrregues JSON a aquesta adreça URL.", + "send-many-messages": "Envieu molts missatges", + "send-omnichannel-chat-transcript": "Envia la transcripció de la conversa LiveChat", + "Sender_Info": "Informació del remitent", "Sending": "Enviant...", "Sent_an_attachment": "Heu enviat un fitxer adjunt", + "Sent_from": "Enviat des de", + "Separate_multiple_words_with_commas": "Separeu diverses paraules amb comes", "Served_By": "Servit per", + "Server": "Servidor", + "Server_File_Path": "Ruta d'arxiu del servidor", + "Server_Folder_Path": "Ruta de la carpeta del servidor", "Server_Info": "Informació del servidor", "Server_Type": "Tipus de servidor", "Service": "Servei", "Service_account_key": "Service account key", + "Set_as_favorite": "Establir com a favorit", "Set_as_leader": "Posar com a líder", "Set_as_moderator": "Fes-lo moderador", "Set_as_owner": "Fes-lo propietari", + "Set_random_password_and_send_by_email": "Establir una contrasenya aleatòria i envieu-la per correu electrònic", + "set-leader": "Líder d'establiment", "set-moderator": "Assignar moderador", "set-moderator_description": "Permís per assignar altres usuaris com a moderadors d'un canal", "set-owner": "Assignar propietari", @@ -2550,20 +3510,25 @@ "Settings": "Configuració", "Settings_updated": "S'ha actualitzat la configuració", "Setup_Wizard": "Ajudant de configuració", - "Setup_Wizard_Info": "Us ho guiarem mitjançant la configuració del primer usuari administrador, la configuració de la vostra organització i el registre del vostre servidor per rebre notificacions de butxaca gratuïtes i molt més.", + "Setup_Wizard_Info": "El guiarem per configurar el seu primer usuari administrador, configurar la seva organització i registrar el seu servidor per rebre notificacions push gratuïtes i més.", "Share_Location_Title": "Compartir localització?", + "Canned_responses": "Resposta predefinida", "Shared_Location": "Localització compartida", + "Shared_Secret": "Secret compartit", "Shortcut": "Drecera", "Should_be_a_URL_of_an_image": "Ha de ser l'adreça URL d'una imatge.", "Should_exists_a_user_with_this_username": "Aquest usuari ja deu existir.", "Show_agent_email": "Mostra el correu electrònic de l'agent", + "Show_agent_info": "Mostra la informació de l'agent", "Show_all": "Veure tots", "Show_Avatars": "Mostra Avatars", "Show_counter": "Mostra comptador", "Show_email_field": "Mostra el camp de correu electrònic", + "Show_Message_In_Main_Thread": "Mostra els missatges del fil al fil principal", "Show_more": "Veure més", "Show_name_field": "Mostra el camp del nom", "show_offline_users": "Mostra els usuaris desconnectats", + "Show_on_offline_page": "Mostra a la pàgina fora de línia", "Show_on_registration_page": "Mostra a la pàgina de registre", "Show_only_online": "Veure només connectats", "Show_preregistration_form": "Veure formulari de pre-registre", @@ -2574,8 +3539,9 @@ "Showing_archived_results": "Mostrant %s resultats arxivats", "Showing_online_users": "Mostrant-ne __total_showing__, En línia: __online__, Total: __total__ usuaris", "Showing_results": "Mostrant %s resultats", + "Showing_results_of": "Mostrant resultats% s -% s de% s", "Sidebar": "Barra lateral", - "Sidebar_list_mode": "Mode de la barra lateral de la llista de canals", + "Sidebar_list_mode": "Mode de llista de canals de la barra lateral", "Sign_in_to_start_talking": "Identifica't per començar a parlar", "since_creation": "des de %s", "Site_Name": "Nom del lloc", @@ -2583,7 +3549,9 @@ "Site_Url_Description": "Exemple: https://xat.domini.com", "Size": "Mida", "Skip": "Salta", - "Slack_Users": "Usuaris de Slack CSV", + "Slack_Users": "CSV d'usuaris de Slack", + "SlackBridge_APIToken": "API Tokens", + "SlackBridge_APIToken_Description": "Podeu configurar diversos servidors slack afegint un símbol API per línia.", "SlackBridge_error": "Hi ha hagut un error a SlackBridge mentre importava els missatges a %s: %s", "SlackBridge_finish": "SlackBridge ha finalitat la importació a %s. Si us plau, refresqueu per veure tots els missatges.", "SlackBridge_Out_All": "SlackBridge Out de tot", @@ -2596,6 +3564,8 @@ "Slash_Gimme_Description": "Mostra ༼ つ ◕_◕ ༽つ abans del teu missatge", "Slash_LennyFace_Description": "Mostra ( ͡° ͜ʖ ͡°) després del teu missatge", "Slash_Shrug_Description": "Mostra ¯\\_(ツ)_/¯ després del missatge", + "Slash_Status_Description": "Configura el teu missatge d'estat", + "Slash_Status_Params": "Missatge d'estat", "Slash_Tableflip_Description": "Mostra (╯°□°)╯︵ ┻━┻", "Slash_TableUnflip_Description": "Mostra ┬─┬ ノ( ゜-゜ノ)", "Slash_Topic_Description": "Canvia el tema", @@ -2608,7 +3578,10 @@ "Smarsh_Interval_Description": "Temps a esperar abans d'enviar els xats (requereix el camp 'De' ple a Correu-e -> SMTP).", "Smarsh_MissingEmail_Email": "Adreça de correu-e desconeguda", "Smarsh_MissingEmail_Email_Description": "Adreça de correu-e a mostrar per a un usuari quan no té cap adreça establerta. Normalment passa en els comptes de bots.", + "Smarsh_Timezone": "Zona horària Smarsh", "Smileys_and_People": "Emoticones i persones", + "SMS_Default_Omnichannel_Department": "Departament de LiveChat (per defecte)", + "SMS_Default_Omnichannel_Department_Description": "Si s'estableix, tots els nous xats entrants iniciats per aquesta integració es redirigiran a aquest departament.", "SMS_Enabled": "Activa SMS", "SMTP": "SMTP", "SMTP_Host": "Host SMTP", @@ -2623,12 +3596,14 @@ "snippet-message_description": "Permís per crear retalls de missatge", "Snippeted_a_message": "S'ha creat un retall de missatge __snippetLink__", "Social_Network": "Xarxa social", - "Sorry_page_you_requested_does_not_exist_or_was_deleted": "La pàgina que heu sol·licitat no existeix o s'ha suprimit.", - "Sort": "Ordena", + "Sorry_page_you_requested_does_not_exist_or_was_deleted": "Ho sentim, la pàgina sol · licitada no existeix o va ser eliminada.", + "Sort": "Ordenar", + "Sort_By": "Ordenar per", "Sort_by_activity": "Ordena per activitat", "Sound": "So", "Sound_File_mp3": "Fitxer de so (mp3)", "SSL": "SSL", + "Star": "Iniciar", "Star_Message": "Destacar un missatge", "Starred_Messages": "Missatges destacats", "Start": "Inicia", @@ -2639,12 +3614,17 @@ "Start_video_call": "Inicia videotrucada", "Start_video_conference": "Inicia videoconferència?", "Start_with_s_for_user_or_s_for_channel_Eg_s_or_s": "Comença amb %s per a usuari o %s per a canal. Ex: %s o %s", + "start-discussion_description": "Inicieu la discussió", + "start-discussion-other-user_description": "Inicieu la discussió", + "Started": "Començat", "Started_a_video_call": "Inicia una videoconferència", "Started_At": "Va començar a les", "Statistics": "Estadístiques", "Statistics_reporting": "Enviar estadístiques a Rocket.Chat", "Statistics_reporting_Description": "Mitjançant l'enviament de les estadístiques, ens ajudes a saber com s'implementa el Rocket.Chat, així com de bé es comporta el sistema, per poder-lo millorar encara més. No s'envia informació dels usuaris i tota la informació que rebem es manté confidencial.", + "Stats_Active_Guests": "Convidats activats", "Stats_Active_Users": "Usuaris actius", + "Stats_App_Users": "Usuaris de l'aplicació Rocket.Chat", "Stats_Avg_Channel_Users": "Mitjana d'usuaris per canal", "Stats_Avg_Private_Group_Users": "Mitjana d'usuaris per grup privat", "Stats_Away_Users": "Usuaris absents", @@ -2652,64 +3632,100 @@ "Stats_Non_Active_Users": "Usuaris inactius", "Stats_Offline_Users": "Usuaris desconnectats", "Stats_Online_Users": "Usuaris connectats", + "Stats_Total_Active_Apps": "Total d'aplicacions actives", + "Stats_Total_Active_Incoming_Integrations": "Integracions entrants actives totals", + "Stats_Total_Active_Outgoing_Integrations": "Integracions de sortida actives totals", "Stats_Total_Channels": "Total de canals", + "Stats_Total_Connected_Users": "Usuaris connectats totals", "Stats_Total_Direct_Messages": "Total de sales de missatges directes", - "Stats_Total_Livechat_Rooms": "Total de sales de xat en viu", + "Stats_Total_Incoming_Integrations": "Integracions entrants totals", + "Stats_Total_Installed_Apps": "Total d'aplicacions instal·lades", + "Stats_Total_Integrations": "Integracions totals", + "Stats_Total_Integrations_With_Script_Enabled": "Integracions totals amb script habilitat", + "Stats_Total_Livechat_Rooms": "Total de Rooms LiveChat", "Stats_Total_Messages": "Total de missatges", "Stats_Total_Messages_Channel": "Total de missatges a canals", "Stats_Total_Messages_Direct": "Total de missatges a missatges directes", - "Stats_Total_Messages_Livechat": "Total de missatges a xats en viu", + "Stats_Total_Messages_Livechat": "Total de missatges a LiveChat", "Stats_Total_Messages_PrivateGroup": "Total de missatges a grups privats", + "Stats_Total_Outgoing_Integrations": "Integracions sortints totals", "Stats_Total_Private_Groups": "Total de grups privats", "Stats_Total_Rooms": "Total de sales", + "Stats_Total_Uploads": "Total de càrregues", + "Stats_Total_Uploads_Size": "Mida total de càrregues", "Stats_Total_Users": "Total d'usuaris", "Status": "Estat", - "Step": "pas", + "StatusMessage": "Missatge d'estat", + "StatusMessage_Change_Disabled": "El seu administrador de Rocket.Chat ha desactivat el canvi de missatges d'estat", + "StatusMessage_Changed_Successfully": "El missatge d'estat va canviar correctament.", + "StatusMessage_Placeholder": "Què estàs fent en aquest moment?", + "StatusMessage_Too_Long": "El missatge d'estat ha de tenir menys de 120 caràcters.", + "Step": "Pas", "Stop_Recording": "Atura gravació", - "Store_Last_Message": "Darrer missatge de la botiga", - "Store_Last_Message_Sent_per_Room": "Guardeu l'últim missatge enviat a cada habitació.", + "Store_Last_Message": "Desar l'últim missatge", + "Store_Last_Message_Sent_per_Room": "Desar l'últim missatge enviat a cada sala.", "Stream_Cast": "Stream Cast", "Stream_Cast_Address": "Adreça Stream Cast", "Stream_Cast_Address_Description": "IP o host del Stream Cast del teu Rocket.Chat central. Exemple: `192.168.1.1:3000` o `localhost:4000`.", "strike": "strike", + "Style": "Estil", "Subject": "Assumpte", "Submit": "Envia", "Success": "Èxit", "Success_message": "Missatge correcte", + "Successfully_downloaded_file_from_external_URL_should_start_preparing_soon": "L'arxiu descarregat correctament des d'una URL externa hauria de començar a preparar-aviat", + "Suggestion_from_recent_messages": "Suggeriment de missatges recents", "Sunday": "diumenge", "Support": "Suport", + "Support_Cordova_App": "Suport a l'aplicació Cordova", + "Support_Cordova_App_Alert": "Aquesta funció està obsoleta i s'eliminarà en la propera versió principal.", + "Support_Cordova_App_Description": "Permetre que l'aplicació mòbil anterior, basada en la tecnologia Cordova, accedeixi a el servidor que habilita CORS per a algunes API", "Survey": "Enquesta", "Survey_instructions": "Valoreu cada pregunta d'acord al nivell de satisfacció, sent 1 completament insatisfet i 5 completament satisfet.", "Symbols": "Símbols", + "Sync": "Sincronitzar", + "Sync / Import": "Sincronització / importació", "Sync_in_progress": "Sincronització en progrés", + "Sync_Interval": "Interval de sincronització", "Sync_success": "Sincronització correcta", "Sync_Users": "Sincronitza usuaris", "System_messages": "Missatges del sistema", "Tag": "Etiqueta", "Tag_removed": "Etiqueta suprimida", "Take_it": "Agafa'l!", + "Target user not allowed to receive messages": "L'usuari objectiu no té permís per rebre missatges", "TargetRoom": "Sala de destí", "TargetRoom_Description": "Sala que rebrà els missatges resultants de les execucions d'aquest esdeveniment. Només es permet una sala de destí i aquesta ha d'existir.", "Team": "Equip", "Technology_Provider": "Proveïdor de tecnologia", "Technology_Services": "Serveis tecnològics", "Telecom": "Telecom", + "Terms": "Termes", "Test_Connection": "Prova de connexió", "Test_Desktop_Notifications": "Prova de notificacions d'escriptori", + "Texts": "Textos", "Thank_you_exclamation_mark": "Gràcies!", "Thank_you_for_your_feedback": "Gràcies per la seva col·laboració", "The_application_name_is_required": "Es requereix el nom de l'aplicació", "The_channel_name_is_required": "Es requereix el nom del canal", "The_emails_are_being_sent": "Els missatges de correu-e s'estan enviant.", + "The_empty_room__roomName__will_be_removed_automatically": "The empty room __roomName__ will be removed automatically.", "The_field_is_required": "El camp %s és obligatori.", "The_image_resize_will_not_work_because_we_can_not_detect_ImageMagick_or_GraphicsMagick_installed_in_your_server": "L'ajust de mida de les imatges no funcionarà perquè no podem detectar ni ImageMagick ni GraphicsMagick al servidor.", + "The_message_is_a_discussion_you_will_not_be_able_to_recover": "El missatge és una discussió, no podrà recuperar els missatges!", + "The_mobile_notifications_were_disabled_to_all_users_go_to_Admin_Push_to_enable_the_Push_Gateway_again": "Les notificacions mòbils es deshabilitaron per a tots els usuaris, aneu a \"Admin> Push\" per habilitar Push inici novament", + "The_necessary_browser_permissions_for_location_sharing_are_not_granted": "No es concedeixen els permisos necessaris del navegador per compartir la ubicació", + "The_peer__peer__does_not_exist": "El parell __peer__ no existeix.", "The_redirectUri_is_required": "Es requereix l'adreça URI de redireccionament", "The_selected_user_is_not_a_monitor": "L'usuari seleccionat no és un monitor", + "The_selected_user_is_not_an_agent": "L'usuari seleccionat no és un agent", "The_server_will_restart_in_s_seconds": "El servidor es reiniciarà d'aquí %s segons", "The_setting_s_is_configured_to_s_and_you_are_accessing_from_s": "L'opció %s està configurada com %s i s'està accedint des de %s!", + "The_user_s_will_be_removed_from_role_s": "L'usuari% s serà eliminat de el rol% s", "The_user_will_be_removed_from_s": "L'usuari s'eliminarà de %s", "The_user_wont_be_able_to_type_in_s": "L'usuari no podrà escriure a %s", "Theme": "Aparença", + "theme-color-attention-color": "Color d'atenció", "theme-color-component-color": "Color de component", "theme-color-content-background-color": "Color del fons del contingut", "theme-color-custom-scrollbar-color": "Color personalitzat de barra de desplaçament", @@ -2722,12 +3738,20 @@ "theme-color-primary-font-color": "Color primari del text", "theme-color-rc-color-alert": "Alerta", "theme-color-rc-color-alert-light": "Alerta clar", + "theme-color-rc-color-alert-message-primary": "Missatge d'alerta principal", + "theme-color-rc-color-alert-message-primary-background": "Fons principal del missatge d'alerta", + "theme-color-rc-color-alert-message-secondary": "Missatge d'alerta secundari", + "theme-color-rc-color-alert-message-secondary-background": "Fons secundari del missatge d'alerta", + "theme-color-rc-color-alert-message-warning": "Advertiment de missatge d'alerta", + "theme-color-rc-color-alert-message-warning-background": "Fons d'advertència del missatge d'alerta", "theme-color-rc-color-button-primary": "Botó primari", "theme-color-rc-color-button-primary-light": "Botó primari clar", "theme-color-rc-color-content": "Contingut", "theme-color-rc-color-error": "Error", "theme-color-rc-color-error-light": "Error clar", + "theme-color-rc-color-link-active": "Enllaç actiu", "theme-color-rc-color-primary": "Primari", + "theme-color-rc-color-primary-background": "Fons principal", "theme-color-rc-color-primary-dark": "Primari fosc", "theme-color-rc-color-primary-darkest": "Primari el més fosc", "theme-color-rc-color-primary-light": "Primari clar", @@ -2757,60 +3781,117 @@ "There_are_no_applications": "Encara no s'han afegit aplicacions d'oAuth.", "There_are_no_applications_installed": "Actualment no hi ha cap aplicació Rocket.Chat instal·lada.", "There_are_no_available_monitors": "No hi ha monitors disponibles", + "There_are_no_departments_added_to_this_tag_yet": "Encara no hi ha cap departament afegit a aquesta etiqueta", + "There_are_no_departments_added_to_this_unit_yet": "Encara no hi ha cap departament afegit a aquesta unitat", + "There_are_no_departments_available": "No hi ha departaments disponibles", "There_are_no_integrations": "No hi ha integracions", + "There_are_no_monitors_added_to_this_unit_yet": "Encara no hi ha monitors afegits a aquesta unitat", + "There_are_no_personal_access_tokens_created_yet": "Encara no s’han creat tokens personal.", "There_are_no_users_in_this_role": "No hi ha cap usuari en aquest rol.", + "There_is_one_or_more_apps_in_an_invalid_state_Click_here_to_review": "Hi ha una o més aplicacions en un estat no vàlid. Feu clic aquí per revisar.", + "This_agent_was_already_selected": "Aquest agent ja estava seleccionat", "This_conversation_is_already_closed": "La conversa ja està tancada.", "This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password": "Aquesta adreça de correu-e ja s'ha utilitzat però no s'ha verificat. Si us plau, canviï la contrasenya.", "This_is_a_desktop_notification": "Això és una notificació d'escriptori", "This_is_a_push_test_messsage": "Això és un missatge push de prova", + "This_message_was_rejected_by__peer__peer": "Aquest missatge ha estat rebutjat per __peer__ peer.", + "This_monitor_was_already_selected": "Aquest monitor ja estava seleccionat", + "This_month": "Aquest mes", "This_room_has_been_archived_by__username_": "__username__ ha arxivat aquesta sala.", "This_room_has_been_unarchived_by__username_": "__username__ ha desarxivat aquesta sala.", + "This_week": "Aquesta setmana", + "thread": "fil", + "Thread_message": "Comentari al missatge de *__username__*: _ __msg__ _", + "Threads": "Fils", "Thursday": "dijous", "Time_in_seconds": "Temps en segons", + "Timeout": "Temps d'espera", + "Timeouts": "Temps d'espera", + "Timezone": "Zona horària", "Title": "Títol", "Title_bar_color": "Color de la barra de títol", "Title_bar_color_offline": "Títol de barres de color en línia", "Title_offline": "Títol desconnectat", + "To": "a", "To_additional_emails": "A correus electrònics addicionals", "To_install_RocketChat_Livechat_in_your_website_copy_paste_this_code_above_the_last_body_tag_on_your_site": "Per instal·lar el xat en viu (livechat) de Rocket.Chat al teu lloc web, còpia i enganxa aquest codi damunt la darrera etiqueta </body> del mateix.", "to_see_more_details_on_how_to_integrate": "per a veure més detalls sobre com fer la integració.", "To_users": "Per als usuaris", + "Today": "Avui", "Toggle_original_translated": "Canvia original/traducció", + "toggle-room-e2e-encryption": "Alternar xifrat Room E2E", + "Token": "Token", "Token_Access": "Accés de token", "Token_Controlled_Access": "Accés controlat per tokens", "Token_required": "El token és obligatori", "Tokenpass_Channel_Label": "Canal Tokenpass", "Tokenpass_Channels": "Canals Tokenpass", - "Tokens_Minimum_Needed_Balance": "Saldo mínim requerit de token", - "Tokens_Minimum_Needed_Balance_Description": "Estableix el saldo mínim necessari en cada token. Blank o \"0\" per no limitar-se.", + "Tokens_Minimum_Needed_Balance": "Mínim saldo de tokens necessari", + "Tokens_Minimum_Needed_Balance_Description": "Estableixi el saldo mínim necessari a cada Token. En blanc o \"0\" per sense límit.", "Tokens_Minimum_Needed_Balance_Placeholder": "Valor de saldo", "Tokens_Required": "S'han requerit tokens", - "Tokens_Required_Input_Description": "Escriviu un o més noms d'actius de tokens separats per coma.", - "Tokens_Required_Input_Error": "Valors de teclat no vàlids.", - "Tokens_Required_Input_Placeholder": "Noms d'actius de tokens", + "Tokens_Required_Input_Description": "Escrigui un o més noms d'actius de tokens separats per comes.", + "Tokens_Required_Input_Error": "Tokens escrits de manera incorrecta", + "Tokens_Required_Input_Placeholder": "Noms de recursos de tokens", "Topic": "Tema", + "Total": "Total", + "Total_abandoned_chats": "Total de xats abandonats", + "Total_conversations": "Total devconverses", + "Total_Discussions": "Total dicussions", "Total_messages": "Total de missatges", - "Tourism": "Turisme", - "Transcript_Enabled": "Pregunta als visitants si volen rebre la transcripció del xat després de tancar-lo", - "Transcript_message": "Missatge a mostrar per a la pregunta sobre la transcripció", - "Transcript_of_your_livechat_conversation": "Transcripció de la conversa de xat en viu.", + "Total_Threads": "Totals de Fils", + "Total_visitors": "Total de visitants", + "TOTP Invalid [totp-invalid]": "El codi o la contrasenya no són vàlids", + "TOTP_reset_email": "Notificació de reinici de TOTP de dos factors", + "TOTP_Reset_Other_Key_Warning": "Reiniciar l'actual doble factor d'autenticació TOTP desconnectarà a l'usuari. L'usuari podrà tornar a configurar el doble factor més tard.", + "totp-disabled": "No tens habilitat el login 2FA per al teu usuari", + "totp-invalid": "El codi o la contrasenya no són vàlids", + "totp-required": "Es requereix TOTP", + "Transcript": "Transcripció", + "Transcript_Enabled": "Pregunti a l'visitant si els agradaria una transcripció després de xat tancat", + "Transcript_message": "Missatge per mostrar a l'preguntar sobre la transcripció", + "Transcript_of_your_livechat_conversation": "Transcripció de la seva conversa de LiveChat.", + "Transcript_Request": "Sol·licitud de transcripció", + "transfer-livechat-guest": "Transferir convidats de Livechat", + "Translate": "Traduir", "Translated": "Traduït", "Translations": "Traduccions", "Travel_and_Places": "Viatges i llocs", "Trigger_removed": "Disparador eliminat", "Trigger_Words": "Paraules d'activació", "Triggers": "Activadors (triggers)", + "Troubleshoot": "Resolució de problemes", + "Troubleshoot_Description": "Aquestes configuracions estan dissenyades per habilitar només amb la guia dels equips de suport o desenvolupament de Rocket.Chat. No els tocs si no saps el que estàs fent!", + "Troubleshoot_Disable_Data_Exporter_Processor": "Desactiva el processador de l'exportador de dades", + "Troubleshoot_Disable_Data_Exporter_Processor_Alert": "Aquesta configuració deté el processament de totes les sol·licituds d'exportació dels usuaris, de manera que no rebran l'enllaç per descarregar les seves dades!", + "Troubleshoot_Disable_Instance_Broadcast": "Desactiva la retransmissió d'instàncies", + "Troubleshoot_Disable_Instance_Broadcast_Alert": "Aquesta configuració evita que les instàncies de Rocket.Chat enviïn esdeveniments a les altres instàncies, 'pot causar problemes de sincronització i mal comportament!", + "Troubleshoot_Disable_Livechat_Activity_Monitor": "Desactiva el monitor d'activitats de Livechat", + "Troubleshoot_Disable_Livechat_Activity_Monitor_Alert": "Aquesta configuració deté el processament de les sessions de visita de l'LiveChat causant que les estadístiques deixin de funcionar!", "Troubleshoot_Disable_Notifications": "Desactiva notificacions", + "Troubleshoot_Disable_Notifications_Alert": "Aquesta configuració desactiva per complet el sistema de notificacions; 'Els sons, les notificacions d'escriptori, les notificacions mòbils i els correus electrònics s'aturaran!", + "Troubleshoot_Disable_Presence_Broadcast": "Desactiva la transmissió de presència", + "Troubleshoot_Disable_Presence_Broadcast_Alert": "Aquesta configuració evita que totes les instàncies enviïn els canvis d'estat dels usuaris als seus clients, mantenint a tots els usuaris amb el seu estat de presència des de la primera càrrega!", + "Troubleshoot_Disable_Sessions_Monitor": "Desactiva el monitor de sessions", + "Troubleshoot_Disable_Sessions_Monitor_Alert": "Aquesta configuració deté el processament de les sessions de visita de l'LiveChat causant que les estadístiques deixin de funcionar!", + "Troubleshoot_Disable_Statistics_Generator": "Desactiva el generador d'estadístiques", + "Troubleshoot_Disable_Statistics_Generator_Alert": "Aquest ajust deté el processament de totes les estadístiques fent que la pàgina d'informació quedi desactualitzada fins que algú faci clic al botó d'actualització i pot causar que falti altra informació en el sistema!", + "Troubleshoot_Disable_Workspace_Sync": "Desactiva la sincronització de l'espai de treball", + "Troubleshoot_Disable_Workspace_Sync_Alert": "¡Este ajuste detiene la sincronización de este servidor con la nube de Rocket.Chat y puede causar problemas con el mercado y las licencias de las empresas!", "True": "Sí", "Tuesday": "dimarts", - "Turn_OFF": "DESACTIVA", + "Turn_OFF": "Apagar", "Turn_ON": "ACTIVA", - "Two-factor_authentication": "Autenticació de dos factors", + "Two Factor Authentication": "Autenticació de dos factors", + "Two-factor_authentication": "Autenticació de dos factors mitjançant TOTP", "Two-factor_authentication_disabled": "Autenticació de dos factors desactivada", + "Two-factor_authentication_email": "Autenticació de dos factors via correu electrònic", + "Two-factor_authentication_email_is_currently_disabled": "L'autenticació en 2 passos via correu electrònic està inhabilitada", "Two-factor_authentication_enabled": "Autenticació de dos factors activada", - "Two-factor_authentication_is_currently_disabled": "L'autenticació de dos factors actualment està desactivada", + "Two-factor_authentication_is_currently_disabled": "L'autenticació de dos factors a través d'TOTP està actualment inhabilitada", "Two-factor_authentication_native_mobile_app_warning": "ATENCIÓ: Un cop activat això, no es podrà fer login des de les aplicacions mòbils natives (Rocket.Chat+) utilitzant la contrasenya fins que aquestes implementin el 2FA.", "Type": "Tipus", + "Types_and_Distribution": "Tipus i distribució", "Type_your_email": "Escrigui el seu correu electrònic", "Type_your_job_title": "Escriu el títol del lloc de treball", "Type_your_message": "Introduïu el missatge", @@ -2818,25 +3899,38 @@ "Type_your_new_password": "Escriu la nova contrasenya", "Type_your_password": "Escriviu la vostra contrasenya", "Type_your_username": "Escriviu el vostre nom d'usuari", - "UI_Allow_room_names_with_special_chars": "Permet caràcters especials als noms de sala", + "UI_Allow_room_names_with_special_chars": "Permetre caràcters especials en noms de sales", "UI_Click_Direct_Message": "Clica per crear un missatge directe", "UI_Click_Direct_Message_Description": "Evita obrir la pestanya del perfil, vés directe a la conversa", "UI_DisplayRoles": "Mostra rols", - "UI_Group_Channels_By_Type": "Canals grupals per tipus", + "UI_Group_Channels_By_Type": "Agrupar canals per tipus", "UI_Merge_Channels_Groups": "Uneix grups privats amb canals", + "UI_Show_top_navbar_embedded_layout": "Mostra la barra de navegació superior al disseny incrustat", "UI_Unread_Counter_Style": "Estil de comptador de no-llegits", - "UI_Use_Name_Avatar": "Utilitza les inicials del nom complet per generar l'avatar per defecte", + "UI_Use_Name_Avatar": "Utilitzeu les inicials del nom complet per generar un avatar predeterminat", "UI_Use_Real_Name": "Utilitza el nom real", + "unable-to-get-file": "No es pot obtenir l'arxiu", "Unarchive": "Desarxiva", "unarchive-room": "Desarxivar sala", "unarchive-room_description": "Permís per desarxivar canals", + "Unavailable": "No disponible", "Unblock_User": "Desbloqueja usuari", - "Unignore": "Ignorar", + "Uncheck_All": "Desmarcar tot", + "Uncollapse": "Desplegar", + "Undefined": "No definit", + "Unfavorite": "No favorit", + "Unfollow_message": "Deixa de seguir el missatge", + "Unignore": "No ignorar", "Uninstall": "Desinstal·lació", + "Unit_removed": "Unitat eliminada", + "Unknown_Import_State": "Estat d'importació desconegut", + "Unlimited": "Il·limitat", "Unmute_someone_in_room": "Torna a donar veu a algú de la sala", "Unmute_user": "Dóna veu a l'usuari", "Unnamed": "Sense nom", + "Unpin": "Treure els fixats", "Unpin_Message": "Desfixa el missatge", + "unpinning-not-allowed": "No permet treure els fixats", "Unread": "No llegits", "Unread_Count": "Comptador de no llegits", "Unread_Count_DM": "Comptador de no-llegits per als missatges directes", @@ -2846,47 +3940,69 @@ "Unread_Rooms_Mode": "Mode de sales no llegides", "Unread_Tray_Icon_Alert": "Icona d'alerta de no llegits a la safata", "Unstar_Message": "Esborra el destacat", + "Update": "Actualització", + "Update_EnableChecker": "Habilitar el Update Checker", + "Update_EnableChecker_Description": "Comprova automàticament si hi ha noves actualitzacions / missatges importants dels desenvolupadors de Rocket.Chat i rep notificacions quan estan disponibles. La notificació apareix una vegada per nova versió com un banner en què es pot fer clic i com un missatge de el bot Rocket.Cat, tots dos visibles només per a administradors.", + "Update_every": "Actualitzar cada", + "Update_LatestAvailableVersion": "Actualitza la darrera versió disponible", + "Update_to_version": "Actualitzar a __version__", "Update_your_RocketChat": "Actualitza el teu Rocket.Chat", "Updated_at": "Actualitzat el", + "Upload": "Pujar", + "Upload_app": "Pujar l'Aplicació", "Upload_file_description": "Descripció de l'arxiu", "Upload_file_name": "Nom de l'arxiu", "Upload_file_question": "Pujar l'arxiu?", - "Upload_Folder_Path": "Carrega la ruta de la carpeta", - "Upload_user_avatar": "Penja l'avatar", + "Upload_Folder_Path": "Carregar ruta de la carpeta", + "Upload_From": "Pujar des de __name__", + "Upload_user_avatar": "Carregar l'avatar", "Uploading_file": "Pujant l'arxiu...", "Uptime": "Temps en funcionament", "URL": "URL", - "URL_room_prefix": "Prefix de l'adreça URL de les sales", + "URL_room_hash": "Habilitar hash de nom de sala", + "URL_room_hash_description": "Recomanat per habilitar si la instància de Jitsi no fa servir cap mecanisme d'autenticació.", + "URL_room_prefix": "Prefix de sala URL", + "URL_room_suffix": "Sufix de sala URL", "Use_account_preference": "Utilitza la preferència del compte", "Use_Emojis": "Utilitza emojis", "Use_Global_Settings": "Usa la configuració global", "Use_initials_avatar": "Utilitza les inicials del nom d'usuari", "Use_minor_colors": "Utilitza la paleta de colors secundària (per defecte s'hereta de la primària)", + "Use_Room_configuration": "Sobreescriu la configuració del servidor i utilitza la configuració de sala", + "Use_Server_configuration": "Utilitzeu la configuració del servidor", "Use_service_avatar": "Utilitza l'avatar de %s", + "Use_this_response": "Utilitzeu aquesta resposta", + "Use_response": "Utilitzeu la resposta", "Use_this_username": "Utilitza aquest nom d'usuari", "Use_uploaded_avatar": "Utilitza l'avatar pujat", - "Use_url_for_avatar": "Utilitza una URL per l'avatar", + "Use_url_for_avatar": "Utilitzeu l'URL per a l'avatar", "Use_User_Preferences_or_Global_Settings": "Usa les preferències d'usuari o la configuració global", "User": "Usuari", + "User Search": "Cerca d'usuaris", + "User Search (Group Validation)": "Cerca d'usuaris (validació de grup)", "User__username__is_now_a_leader_of__room_name_": "L'usuari __username__ ara és líder de __room_name__", "User__username__is_now_a_moderator_of__room_name_": "L'usuari __username__ ara és moderador de la sala __room_name__", "User__username__is_now_a_owner_of__room_name_": "L'usuari __username__ ara és un propietari de __room_name__", + "User__username__muted_in_room__roomName__": "Usuari __username__ silenciat a la sala __roomName__", "User__username__removed_from__room_name__leaders": "L'usuari __username__ ja no és líder de __room_name__", "User__username__removed_from__room_name__moderators": "L'usuari __username__ ja no és moderador de la sala __room_name__", "User__username__removed_from__room_name__owners": "L'usuari __username__ ja no és propietari de __room_name__", + "User__username__unmuted_in_room__roomName__": "Usuari __username__ sense silenciar a la sala __roomName__", "User_added": "Usuari afegit", "User_added_by": "Usuari __user_added__ afegit per __user_by__.", "User_added_successfully": "Usuari afegit correctament", "User_and_group_mentions_only": "Només mencions d'usuari i de grup", - "User_default": "Per defecte de l'usuari", + "User_created_successfully!": "L'usuari ha creat correctament.", + "User_default": "Usuari predeterminat", "User_doesnt_exist": "No existeix cap usuari amb el nom `@%s`.", + "User_e2e_key_was_reset": "La clau d’usuari E2E s’ha restablert correctament.", "User_has_been_activated": "L'usuari s'ha activat", "User_has_been_deactivated": "L'usuari s'ha desactivat", "User_has_been_deleted": "L'usuari s'ha eliminat", - "User_has_been_ignored": "S'ha ignorat l'usuari", + "User_has_been_ignored": "L'usuari ha estat ignorat", "User_has_been_muted_in_s": "L'usuari ha sigut silenciat a %s", "User_has_been_removed_from_s": "L'usuari s'ha eliminat de %s", - "User_has_been_unignored": "L'usuari ja no està ignorat", + "User_has_been_unignored": "L'usuari ja no és ignorat", "User_Info": "Informació de l'usuari", "User_Interface": "Interfície d'usuari", "User_is_blocked": "L'usuari està bloquejat", @@ -2896,6 +4012,7 @@ "User_joined_channel": "S'ha unit al canal.", "User_joined_channel_female": "S'ha unit al canal.", "User_joined_channel_male": "S'ha unit al canal.", + "User_joined_conversation": "S'ha unit a la conversa", "User_left": "Ha sortit del canal.", "User_left_female": "Ha sortit del canal.", "User_left_male": "Ha sortit del canal.", @@ -2914,6 +4031,7 @@ "User_sent_a_message_to_you": "__username__ us ha enviat un missatge", "user_sent_an_attachment": "__user__ ha enviat un fitxer adjunt", "User_Settings": "Opcions d'usuari", + "User_started_a_new_conversation": "__username__ va iniciar una nova conversa", "User_unmuted_by": "L'usuari __user_by__ ha tornat la veu a __user_unmuted__.", "User_unmuted_in_room": "L'usuari torna a tenir veu a la sala", "User_updated_successfully": "L'usuari s'ha actualitzat correctament", @@ -2923,18 +4041,21 @@ "User_uploaded_image": "Ha pujat una imatge", "user-generate-access-token": "Usuaris generen Access Tokens", "user-generate-access-token_description": "Permís perquè els usuaris puguin generar access tokens", - "UserData_EnableDownload": "Activa la descàrrega de dades d'usuari", - "UserData_FileSystemPath": "Ruta del sistema (fitxers exportats)", + "UserData_EnableDownload": "Habilitar la descàrrega de dades d'usuari", + "UserData_FileSystemPath": "Ruta del sistema (archivos exportados)", "UserData_FileSystemZipPath": "Ruta del sistema (fitxer comprimit)", "UserData_MessageLimitPerRequest": "Límit de missatge per sol·licitud", "UserData_ProcessingFrequency": "Freqüència de processament (minuts)", "UserDataDownload": "Descàrrega de dades d'usuari", - "UserDataDownload_CompletedRequestExisted_Text": "El vostre fitxer de dades ja s'ha generat. Consulteu el vostre compte de correu electrònic per veure l'enllaç de baixada.", + "UserDataDownload_CompletedRequestExisted_Text": "El seu arxiu de dades ja va ser generat. Comprovi el seu compte de correu electrònic per a l'enllaç de descàrrega.", + "UserDataDownload_CompletedRequestExistedWithLink_Text": "El seu arxiu de dades va ser generat. Feu clic a aquí per descarregar-lo.", "UserDataDownload_EmailBody": "El fitxer de dades ja està preparat per baixar. Feu clic a aquíper baixar-lo.", - "UserDataDownload_EmailSubject": "El vostre fitxer de dades està preparat per baixar", + "UserDataDownload_EmailSubject": "El seu arxiu de dades està a punt per descarregar", "UserDataDownload_Requested": "Descarregar el fitxer sol·licitat", + "UserDataDownload_Requested_Text": "El seu arxiu de dades serà generat. S'enviarà un enllaç per descarregar-lo a la seva adreça de correu electrònic quan estigui llest. Hi ha __pending_operations__ operacions en cua abans que s'executi la seva.", + "UserDataDownload_RequestExisted_Text": "El seu arxiu de dades ja està enviada generat. S'enviarà un enllaç per descarregar-lo a la seva adreça de correu electrònic quan estigui llest. Hola ha __pending_operations__ operacions en cua abans que s'executi la seva.", "Username": "Nom d'usuari", - "Username_already_exist": "El nom d'usuari ja existeix. Proveu un altre nom d'usuari.", + "Username_already_exist": "Nom d'usuari ja existeix. Proveu amb un altre nom d'usuari.", "Username_and_message_must_not_be_empty": "El nom d'usuari i el missatge no han d'estar buits.", "Username_cant_be_empty": "El nom d'usuari no pot estar buit", "Username_Change_Disabled": "L'administrador de Rocket.Chat ha desactivat el canvi de noms d'usuari", @@ -2949,32 +4070,52 @@ "Username_title": "Tria un nom d'usuari", "Username_wants_to_start_otr_Do_you_want_to_accept": "L'usuari __username__ vol iniciar una conversa OTR. L'acceptes?", "Users": "Usuaris", + "Users must use Two Factor Authentication": "Els usuaris han d’utilitzar l’autenticació de dos factors", "Users_added": "Els usuaris s'han afegit", + "Users_and_rooms": "Usuaris i Room s", + "Users_by_time_of_day": "Usuaris per hora del dia", "Users_in_role": "Usuaris al rol", + "Users_key_has_been_reset": "Es va restablir la clau de l'usuari", + "Users_reacted": "Usuaris que van reaccionar", + "Users_TOTP_has_been_reset": "El TOTP de l'usuari s'ha restablert", + "Uses": "Usos", + "Uses_left": "Usos restants", + "Utilities": "Utilitats", "UTF8_Names_Slugify": "Slugify de noms UTF8", "UTF8_Names_Validation": "Validació de noms UTF8", "UTF8_Names_Validation_Description": "RegExp que s'utilitzarà per validar noms d'usuari i de sala", - "Validate_email_address": "Valida l'adreça de correu-e", + "Validate_email_address": "Validar l'adreça de correu electrònic", + "Validation": "Validació", + "Value_messages": "__value__ messages", + "Value_users": "__value__ users", "Verification": "Verificació", "Verification_Description": "És possible utilitzar els marcadors: [Verification_Url] per a l'adreça URL de verificació.[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.", "Verification_Email": "Fes clic aquí per verificar el teu compte.", + "Verification_email_body": "Si us plau, feu clic al botó de sota per confirmar la seva adreça de correu electrònic.", "Verification_email_sent": "Missatge de correu-e de verificació enviat", "Verification_Email_Subject": "[Site_Name] - Verifica el teu compte", "Verified": "Verificat", "Verify": "Verifica", + "Verify_your_email": "Verifica el teu correu electrònic", + "Verify_your_email_for_the_code_we_sent": "Verifiqui el seu correu electrònic per al codi que enviem", "Version": "Versió", + "Version_version": "Version __version__", "Video Conference": "Videoconferència", "Video_Chat_Window": "Vídeo-xat", "Video_Conference": "Videoconferència", "Video_message": "Missatge de vídeo", "Videocall_declined": "Vídeo trucada rebutjada.", "Videocall_enabled": "Vídeo trucada activa", + "Videos": "Vídeos", "View_All": "Veure tots els membres", "View_Logs": "Veure registre log", - "View_mode": "Densitat de visualització", - "view-broadcast-member-list": "Veure la llista de membres a la sala de difusió", + "View_mode": "Mode de visualització", + "View_original": "Veure original", + "View_the_Logs_for": "Veure els registres de: \"__name__\"", + "view-broadcast-member-list": "Veure llista de membres a la sala de transmissió", "view-c-room": "Veure canal públic", "view-c-room_description": "Permís per veure canals públics", + "view-canned-responses": "Veure respostes predeterminades", "view-d-room": "Veure missatges directes", "view-d-room_description": "Permís per veure missatges directes", "view-full-other-user-info": "Veure tota la info d'usuaris", @@ -2985,17 +4126,25 @@ "view-join-code_description": "Permís per veure el codi per unir-se al canal", "view-joined-room": "Veure sales on unit", "view-joined-room_description": "Permís per veure els canals on actualment s'està unit", - "view-l-room": "Veure sales de xat en viu", - "view-l-room_description": "Permís per veure els canals de xat en viu", - "view-livechat-manager": "Veure el gestor de xats en viu", - "view-livechat-manager_description": "Permís per veure gestors d'altres xats en viu", - "view-livechat-rooms": "Veure xats en viu", - "view-livechat-rooms_description": "Permís per veure altres canals de xat en viu", + "view-l-room": "Veure sales de LiveChat", + "view-l-room_description": "Permís per veure els canals de LiveChat", + "view-livechat-analytics": "Veure analítiques de LiveChat", + "view-livechat-departments": "Veure departaments de LiveChat", + "view-livechat-manager": "Veure l'Administrador de LiveChat", + "view-livechat-manager_description": "Permís per veure d'altres Administradors LiveChat", + "view-livechat-monitor": "Veure monitors de Livechat", + "view-livechat-queue": "Veure les cues de LiveChat", + "view-livechat-room-closed-by-another-agent": "Veure les Rooms de LiveChat tancades per un altre agent", + "view-livechat-room-closed-same-department": "Veure les Room s de LiveChat tancades per un altre agent de el mateix departament", + "view-livechat-rooms": "Veure les sales de LiveChat", + "view-livechat-rooms_description": "Permís per veure altres canals de LiveChat", + "view-livechat-unit": "Veure les unitats de livechat", "view-logs": "Veure registres", "view-logs_description": "Permís per veure els registres del servidor", "view-other-user-channels": "Veure canals d'altres usuaris", "view-other-user-channels_description": "Permís per veure canals que pertanyen a altres usuaris", - "view-outside-room": "Veure habitació externa", + "view-outside-room": "Vista exterior de Room", + "view-outside-room_description": "Permís per veure usuaris fora de la sala actual", "view-p-room": "Veure sala privada", "view-p-room_description": "Permís per veure canals privats", "view-privileged-setting": "Veure opcions privilegiades", @@ -3003,25 +4152,43 @@ "view-room-administration": "Veure administració de sala", "view-room-administration_description": "Permís per veure estadístiques de missatges públics, privats i directes. No inclou veure converses o arxius", "view-statistics": "Veure estadístiques", - "view-statistics_description": "Permís per veure estadístiques del sistema com el nombre d'usuaris autenticats, el nombre de sales o informació del sistema operatiu", + "view-statistics_description": "Permís per veure estadístiques de el sistema, com el nombre d'usuaris connectats, el nombre d'habitacions, la informació de sistema operatiu", "view-user-administration": "Veure administració d'usuaris", "view-user-administration_description": "Permís per veure una llista de només lectura parcial dels comptes d'usuari actualment autenticats al sistema. Amb aquest permís no és possible veure informació dels comptes d'usuari.", "Viewing_room_administration": "Administració de la sala de visualització", "Visibility": "Visibilitat", "Visible": "Visible", + "Visit_Site_Url_and_try_the_best_open_source_chat_solution_available_today": "Visiteu __Site_URL__ i proveu la millor solució de xat de codi obert disponible avui.", "Visitor": "Visitant", + "Visitor_Email": "Correu electrònic del visitant", "Visitor_Info": "Informació del visitant", + "Visitor_message": "Missatges dels visitants", + "Visitor_Name": "Nom del visitant", + "Visitor_Name_Placeholder": "Si us plau, introduïu el nom de l'visitant ...", "Visitor_Navigation": "Navegació del visitant", "Visitor_page_URL": "URL de la pàgina del visitant", "Visitor_time_on_site": "Temps de visita", "Wait_activation_warning": "Abans de poder iniciar sessió, els comptes han de ser activats manualment per un administrador.", + "Waiting_queue": "Cua d’espera", + "Waiting_queue_message": "Missatge de cua en espera", + "Waiting_queue_message_description": "Missatge que es mostrarà als visitants quan entrin a la cua", + "Warning": "Avís", "Warnings": "Avisos", + "WAU_value": "WAU __value__", + "We_appreciate_your_feedback": "Agraïm els seus comentaris", "We_are_offline_Sorry_for_the_inconvenience": "Estem fora de línia. Disculpi les molèsties.", "We_have_sent_password_email": "T'hem enviat un missatge de correu electrònic amb les instruccions per reinicialitzar la contrasenya. Si no reps el missatge en breu, si us plau mira al correu brossa i/o torna i reintenta-ho.", "We_have_sent_registration_email": "T'hem enviat un missatge de correu electrònic per confirmar el registre. Si no reps el missatge en breu, si us plau mira al correu brossa i/o torna i reintenta-ho.", + "Webdav Integration": "Integració de Webdav", + "WebDAV_Accounts": "Comptes de WebDAV", + "Webdav_add_new_account": "Afegiu un compte nou de WebDAV", + "Webdav_Integration_Enabled": "Integració de Webdav habilitada", "Webdav_Password": "Contrasenya de WebDAV", "Webdav_Server_URL": "URL d'accés al servidor WebDAV", "Webdav_Username": "Nom d'usuari de WebDAV", + "webdav-account-saved": "Compte WebDAV guardada", + "webdav-account-updated": "Compte WebDAV actualitzada", + "Webhook_Details": "Detalls de WebHook", "Webhook_URL": "Adreça URL WebHook", "Webhooks": "Webhooks", "WebRTC_direct_audio_call_from_%s": "Trucada d'àudio directa de %s", @@ -3036,37 +4203,52 @@ "WebRTC_Servers_Description": "Llista de servidors STUN i TURN separats per comes. Noms d'usuari, contrasenya i port són permesos en el format `username:password@stun:host:port` o bé `username:password@turn:host:port`.", "Website": "lloc web", "Wednesday": "dimecres", + "Weekly_Active_Users": "Usuaris actius setmanals", "Welcome": "Benvingut %s.", + "Welcome_to": "Benvingut a __Site_Name__", "Welcome_to_the": "Benvingut a", + "When": "Quan", + "When_a_line_starts_with_one_of_there_words_post_to_the_URLs_below": "Quan una línia comenci amb una d'aquestes paraules, publiqui a la (s) URL (s) a continuació", + "When_is_the_chat_busier?": "Quan està més ocupat el xat?", + "Where_are_the_messages_being_sent?": "A on s'envien els missatges?", + "Why_did_you_chose__score__": "Per què va triar __score__?", "Why_do_you_want_to_report_question_mark": "Per què vols informar?", + "Will_Appear_In_From": "Apareixerà a la capçalera De: dels correus electrònics que envieu.", "will_be_able_to": "podrà", + "Will_be_available_here_after_saving": "Estarà disponible aquí després de desar-lo.", + "Without_priority": "Sense prioritat", "Worldwide": "A tot el món", "Would_you_like_to_return_the_inquiry": "Vols retornar la sol·licitud?", "Yes": "Sí", "Yes_archive_it": "Sí, arxiva'l!", "Yes_clear_all": "Sí, esborra!", + "Yes_deactivate_it": "Sí, desactiveu-lo.", "Yes_delete_it": "Sí, elimina!", "Yes_hide_it": "Sí, oculta!", "Yes_leave_it": "Sí, deixa-ho!", "Yes_mute_user": "Sí, silencia l'usuari!", - "Yes_prune_them": "Sí, poda!", + "Yes_prune_them": "Sí, esborra'ls", "Yes_remove_user": "Sí, elimina l'usuari!", "Yes_unarchive_it": "Sí, desarxiva'l!", "yesterday": "ahir", + "Yesterday": "ahir", "You": "Vostè", "you_are_in_preview_mode_of": "Estàs en mode vista prèvia del canal #__room_name__", + "you_are_in_preview_mode_of_incoming_livechat": "Esteu en mode de previsualització d'aquest xat", "You_are_logged_in_as": "Sessió iniciada com", "You_are_not_authorized_to_view_this_page": "No està autoritzat a veure aquesta pàgina.", "You_can_change_a_different_avatar_too": "Es pot ignorar l'avatar d'aquesta integració.", + "You_can_close_this_window_now": "Ja pots tancar aquesta finestra", "You_can_search_using_RegExp_eg": "Podeu fer cerques mitjançant Expressió regular . per exemple. / ^ text $ / i ", "You_can_use_an_emoji_as_avatar": "També es pot utilitzar un emoji com a avatar.", - "You_can_use_webhooks_to_easily_integrate_livechat_with_your_CRM": "Es poden utilitzar webhooks per a integrar fàcilment el xat en viu amb el teu CRM.", - "You_cant_leave_a_livechat_room_Please_use_the_close_button": "No es pot abandonar una sala de xat en viu. Si us plau, utilitzi el botó de tancar.", + "You_can_use_webhooks_to_easily_integrate_livechat_with_your_CRM": "Es poden utilitzar Webhooks per a integrar fàcilment LiveChat amb el teu CRM.", + "You_cant_leave_a_livechat_room_Please_use_the_close_button": "No pots sortir d'una sala LiveChat. Si us plau, utilitzeu el botó tancar.", + "You_have_a_new_message": "Teniu un missatge nou", "You_have_been_muted": "Has estat silenciat i no podràs dir res en aquesta sala", "You_have_n_codes_remaining": "Encara et queden __number__ codis.", "You_have_not_verified_your_email": "Encara no has verificat la teva adreça de correu electrònic.", "You_have_successfully_unsubscribed": "T'has donat de baixa correctament de la nostra llista de distribució de correu.", - "You_have_to_set_an_API_token_first_in_order_to_use_the_integration": "Heu d'establir primer un token de l'API per poder utilitzar la integració.", + "You_have_to_set_an_API_token_first_in_order_to_use_the_integration": "Primer ha de configurar un símbol d'API per utilitzar la integració.", "You_must_join_to_view_messages_in_this_channel": "Has d'unir-te per veure els missatges d'aquest canal", "You_need_confirm_email": "Cal que confirmis la teva adreça de correu-e per poder identificar-te.", "You_need_install_an_extension_to_allow_screen_sharing": "Necessita instal·lar una extensió per poder compartir la pantalla", @@ -3075,19 +4257,33 @@ "You_need_to_type_in_your_username_in_order_to_do_this": "Cal que escriguis el nom d'usuari per fer això.", "You_need_to_verifiy_your_email_address_to_get_notications": "Cal tenir verificada l'adreça de correu electrònic per poder rebre notificacions", "You_need_to_write_something": "Cal escriure alguna cosa!", + "You_reached_the_maximum_number_of_guest_users_allowed_by_your_license": "Heu assolit el nombre màxim d’usuaris convidats que permet la vostra llicència.", "You_should_inform_one_url_at_least": "Heu de definir almenys una URL.", "You_should_name_it_to_easily_manage_your_integrations": "Caldria posar-li un nom per poder administrar fàcilment les integracions.", + "You_will_be_asked_for_permissions": "Se li demanaran permisos", "You_will_not_be_able_to_recover": "No podràs recuperar aquest missatge!", + "You_will_not_be_able_to_recover_email_inbox": "No podrà recuperar aquesta safata d'entrada de correu electrònic", "You_will_not_be_able_to_recover_file": "No podràs recuperar aquest arxiu!", "You_wont_receive_email_notifications_because_you_have_not_verified_your_email": "No rebràs notificacions per correu electrònic, ja que no s'ha verificat l'adreça.", + "Your_e2e_key_has_been_reset": "La vostra clau e2e ha estat restablerta.", + "Your_email_address_has_changed": "La seva adreça de correu electrònic ha estat modificada.", "Your_email_has_been_queued_for_sending": "El teu correu electrònic s'ha posat a la cua d'enviament", "Your_entry_has_been_deleted": "L'entrada s'ha eliminat.", "Your_file_has_been_deleted": "L'arxiu s'ha eliminat.", + "Your_invite_link_will_expire_after__usesLeft__uses": "El seu enllaç d'invitació expirarà després d'__usesLeft__ usos.", + "Your_invite_link_will_expire_on__date__": "El seu enllaç d'invitació expirarà el dia __date__.", + "Your_invite_link_will_expire_on__date__or_after__usesLeft__uses": "El seu enllaç d'invitació expirarà en __date__ o després de __usesLeft__ usos.", + "Your_invite_link_will_never_expire": "L'enllaç d'invitació no caducarà mai.", "Your_mail_was_sent_to_s": "S'ha enviat el missatge a %s", "your_message": "el teu missatge", "your_message_optional": "el teu missatge (opcional)", + "Your_new_email_is_email": "La vostra nova adreça electrònica és [email] .", "Your_password_is_wrong": "La contrasenya és incorrecta!", + "Your_password_was_changed_by_an_admin": "Un administrador ha canviat la vostra contrasenya.", "Your_push_was_sent_to_s_devices": "La notificació push s'ha enviat a %s dispositius", + "Your_question": "La teva pregunta", "Your_server_link": "El vostre enllaç del servidor", + "Your_temporary_password_is_password": "La vostra contrasenya temporal és [contrasenya] .", + "Your_TOTP_has_been_reset": "El vostre TOTP de dos factors s'ha restablert.", "Your_workspace_is_ready": "El vostre espai de treball està a punt per utilitzar 🎉" } \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/cs.i18n.json b/packages/rocketchat-i18n/i18n/cs.i18n.json index f11761f805d4..d9856c8fae4e 100644 --- a/packages/rocketchat-i18n/i18n/cs.i18n.json +++ b/packages/rocketchat-i18n/i18n/cs.i18n.json @@ -235,6 +235,7 @@ "Accounts_Verify_Email_For_External_Accounts": "U externích účtů ověřovat email", "Action_required": "Je vyžadována akce", "Activate": "Aktivovat", + "Active": "Aktivní", "Active_users": "Aktivní uživatelé", "Activity": "Aktivita", "Add": "Přidat", @@ -272,7 +273,6 @@ "Admin_Info": "Admin informace", "Administration": "Administrace", "Adult_images_are_not_allowed": "Obrázky nevhodné pro mladistvé nejsou povoleny", - "Advocacy": "Advokacie", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Po ověření OAuth2 budou uživatelé přesměrováni na URL v tomto seznamu. Na každý řádek můžete přidat jednu URL adresu.", "Agent": "Operátor", "Agent_added": "Operátor přidán", @@ -825,7 +825,6 @@ "Connection_success": "LDAP připojení úspěšné", "Connectivity_Services": "Služby připojení", "Consulting": "Konzultace", - "Consumer_Goods": "Spotřební zboží", "Contact": "Kontakt", "Contact_Chat_History": "Historie kontaktu", "Contains_Security_Fixes": "Obsahuje opravy zabezpečení", @@ -1710,7 +1709,8 @@ "FileUpload_Webdav_Upload_Folder_Path": "Cesta složky pro nahrávání souborů", "FileUpload_Webdav_Upload_Folder_Path_Description": "Cesta adresáře WebDAV, kam mají být soubory nahrány", "FileUpload_Webdav_Username": "WebDAV uživatelské jméno", - "Filter": "Filter", + "Filter": "Filtr", + "Filters": "Filtry", "Financial_Services": "Finanční služby", "First_Channel_After_Login": "Výchozí místnost po přihlášení", "First_response_time": "První doba odezvy", @@ -1810,8 +1810,6 @@ "Hash": "Hash", "Header": "Hlavička", "Header_and_Footer": "Hlavička a Patička", - "Healthcare_and_Pharmaceutical": "Péče o zdraví/farmaceutika", - "Help_Center": "Centrum nápovědy", "Helpers": "Nápovědy", "Here_is_your_authentication_code": "Zde je váš autentizační kód:", "Hex_Color_Preview": "Náhled barvy podle Hex kódu", @@ -1836,6 +1834,7 @@ "Highlights_How_To": "Chcete-li být upozorněni, když někdo zmíní slovo nebo frázi, přidejte jej sem. Můžete oddělit slova nebo fráze čárkami. Velikost písmen nehraje roli", "Highlights_List": "Klíčová slova", "History": "Historie", + "Home": "Domov", "Host": "Server", "hours": "hodiny", "Hours": "Hodiny", @@ -2952,7 +2951,6 @@ "Public_Channel": "Veřejná místnost", "Public_Channels": "Veřejné místnosti", "Public_Community": "Veřejná komunita", - "Public_Relations": "Vztahy s veřejností", "Public_URL": "Veřejná adresa URL", "Purchase_for_free": "Zakoupit ZDARMA", "Purchase_for_price": "Zakoupit za $%s", @@ -3666,7 +3664,6 @@ "Total_visitors": "Celkový počet návštěvníků", "TOTP Invalid [totp-invalid]": "Kód nebo heslo nesouhlasí", "totp-invalid": "Kód nebo heslo nesouhlasí", - "Tourism": "Turistika", "Transcript": "Přepis konverzace", "Transcript_Enabled": "Zeptat se po skončení chatu, zda uživateli odeslat kopii konverzace", "Transcript_message": "Zpráva kterou zobrazit jako dotaz zda odeslat kopii konverzace", diff --git a/packages/rocketchat-i18n/i18n/cy.i18n.json b/packages/rocketchat-i18n/i18n/cy.i18n.json index 24b88483439a..8a282b077c41 100644 --- a/packages/rocketchat-i18n/i18n/cy.i18n.json +++ b/packages/rocketchat-i18n/i18n/cy.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Efallai y byddwch yn defnyddio'r canlynol: [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.[password] ar gyfer cyfrinair y defnyddiwr.[Site_Name] a [Site_URL] ar gyfer yr Enw Cais a'r URL yn y drefn honno.", "Accounts_UserAddedEmailSubject_Default": "Rydych chi wedi cael eich ychwanegu at [Site_Name]", "Activate": "Gweithredwch", + "Active": "Gweithredol", "Activity": "Gweithgaredd", "Add": "Ychwanegwch", "Add_agent": "Ychwanegu asiant", @@ -219,7 +220,6 @@ "Admin_Info": "Gwybodaeth Gweinyddol", "Administration": "Gweinyddiaeth", "Adult_images_are_not_allowed": "Ni chaniateir delweddau oedolion", - "Advocacy": "Eiriolaeth", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Ar ôl dilysu OAuth2, caiff defnyddwyr eu hailgyfeirio i'r URL hwn", "Agent": "Asiant", "Agent_added": "Ychwanegodd Asiant", @@ -549,7 +549,6 @@ "Connection_Closed": "Cysylltiad ar gau", "Connection_Reset": "Ailosodiad Cysylltiad", "Consulting": "Ymgynghori", - "Consumer_Goods": "Nwyddau Defnyddwyr", "Contains_Security_Fixes": "Yn cynnwys Atodiadau Diogelwch", "Content": "Cynnwys", "Continue": "Parhau", @@ -1195,6 +1194,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Llwybr ffolder WebDAV y dylai'r ffeiliau gael eu llwytho i fyny i", "FileUpload_Webdav_Username": "Enw Defnyddiwr WebDAV", "Filter": "Hidlo", + "Filters": "Hidlau", "Financial_Services": "Gwasanaethau Ariannol", "First_Channel_After_Login": "Y Sianel Gyntaf Wedi Mewngofnodi", "Flags": "Baneri", @@ -1262,8 +1262,6 @@ "Hash": "Hash", "Header": "Pennawd", "Header_and_Footer": "Pennawd a Footer", - "Healthcare_and_Pharmaceutical": "Gofal Iechyd / Fferyllol", - "Help_Center": "Canolfan Gymorth", "Helpers": "Helpwyr", "Hex_Color_Preview": "Rhagolwg Lliw Hex", "Hidden": "Cudd", @@ -1283,6 +1281,7 @@ "Highlights_How_To": "I'w hysbysu pan fydd rhywun yn sôn am air neu ymadrodd, ychwanegwch ef yma. Gallwch wahanu geiriau neu ymadroddion gyda chomas. Uchafbwyntiau Nid yw geiriau yn achos sensitif.", "Highlights_List": "Amlygu geiriau", "History": "Hanes", + "Home": "Hafan", "Host": "Host", "hours": "oriau", "Hours": "Oriau", @@ -2042,7 +2041,6 @@ "Public": "Cyhoeddus", "Public_Channel": "Sianel Gyhoeddus", "Public_Community": "Cymuned Gyhoeddus", - "Public_Relations": "Cysylltiadau Cyhoeddus", "Push": "Push", "Push_apn_cert": "Cwestiwn APN", "Push_apn_dev_cert": "Cert Cert APN", @@ -2541,7 +2539,6 @@ "Tokens_Required_Input_Placeholder": "Enwau asedau tocynnau", "Topic": "Pwnc", "Total_messages": "Cyfanswm Negeseuon", - "Tourism": "Twristiaeth", "Transcript_Enabled": "Gofynnwch i Ymwelydd pe byddent yn hoffi trawsgrifiad ar ôl i'r sgwrs gael ei gau", "Transcript_message": "Neges i'w Dangos Wrth Holi Amdanom Trawsgrifiad", "Transcript_of_your_livechat_conversation": "Trawsgrifiad o'ch sgwrs byw-fyw.", diff --git a/packages/rocketchat-i18n/i18n/da.i18n.json b/packages/rocketchat-i18n/i18n/da.i18n.json index ae6d0fb3eef6..9a2321853a72 100644 --- a/packages/rocketchat-i18n/i18n/da.i18n.json +++ b/packages/rocketchat-i18n/i18n/da.i18n.json @@ -235,6 +235,7 @@ "Accounts_Verify_Email_For_External_Accounts": "Bekræft e-mail for eksterne konti", "Action_required": "Handling påkrævet", "Activate": "Aktivér", + "Active": "Aktiv", "Active_users": "Aktive brugere", "Activity": "Aktivitet", "Add": "Tilføj", @@ -272,7 +273,6 @@ "Admin_Info": "Administratorinfo", "Administration": "Administration", "Adult_images_are_not_allowed": "Voksenbilleder er ikke tilladt", - "Advocacy": "Støtte", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Efter OAuth2-godkendelse bliver brugerne sendt til en URL på denne liste. Du kan tilføje en URL pr. linje.", "Agent": "Agent", "Agent_added": "Agent tilføjet", @@ -831,7 +831,6 @@ "Connection_success": "LDAP-forbindelse lykkedes", "Connectivity_Services": "Connectivity Services", "Consulting": "Rådgivning", - "Consumer_Goods": "Forbrugsvarer", "Contact": "Kontakt", "Contact_Chat_History": "Kontakt-chathistorik", "Contains_Security_Fixes": "Indeholder sikkerhedsrettelser", @@ -1142,8 +1141,8 @@ "Custom_Emoji_Has_Been_Deleted": "Den brugerdefinerede emoji er slettet.", "Custom_Emoji_Info": "Brugerdefineret emoji-info", "Custom_Emoji_Updated_Successfully": "Den brugerdefinerede emoji er opdateret", - "Custom_Field_Removed": "Brugerdefineret felt fjernet", "Custom_Fields": "Brugerdefinerede felter", + "Custom_Field_Removed": "Brugerdefineret felt fjernet", "Custom_oauth_helper": "Når du konfigurerer din OAuth-leverandør, skal du oplyse en tilbagekalds-url. Brug %s.", "Custom_oauth_unique_name": "Brugerdefineret unikt oauth-navn", "Custom_Script_Logged_In": "Brugerdefineret script til brugere der er logget ind ", @@ -1723,6 +1722,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV-mappesti som filerne skal uploades til", "FileUpload_Webdav_Username": "WebDAV-brugernavn", "Filter": "Filter", + "Filters": "Filtre", "Filters_applied": "Filtre anvendt", "Financial_Services": "Finansielle tjenester", "First_Channel_After_Login": "Første kanal efter login", @@ -1822,8 +1822,6 @@ "Hash": "HASH", "Header": "Sidehoved", "Header_and_Footer": "Sidehoved og siddefod", - "Healthcare_and_Pharmaceutical": "Sundhedspleje/medicinalindustri", - "Help_Center": "Hjælpecenter", "Helpers": "Hjælpere", "Here_is_your_authentication_code": "Her er din godkendelseskode:", "Hex_Color_Preview": "Hex-farveeksempel", @@ -1848,6 +1846,7 @@ "Highlights_How_To": "Hvis du vil blive underrettet, når nogen nævner et ord eller en sætning, skal du tilføje det her. Du kan adskille ord eller sætninger med kommaer. De fremhævede ord er ikke case-følsomme.", "Highlights_List": "Fremhævede ord", "History": "Historie", + "Home": "Hjem", "Host": "Host", "hours": "timer", "Hours": "Timer", @@ -2968,7 +2967,6 @@ "Public_Channel": "Public Channel", "Public_Channels": "Offentlige kanaler", "Public_Community": "Offentlige Fællesskab", - "Public_Relations": "PR", "Public_URL": "Offentlig URL", "Purchase_for_free": "Kan købes gratis", "Purchase_for_price": "Køb for $%", @@ -3689,7 +3687,6 @@ "Total_visitors": "Besøgende i alt", "TOTP Invalid [totp-invalid]": "Kode eller adgangskode er ugyldig", "totp-invalid": "Kode eller adgangskode er ugyldig", - "Tourism": "Turisme", "Transcript": "Kopi", "Transcript_Enabled": "Spørg besøgende, hvis de gerne vil have en transskription efter chat lukket", "Transcript_message": "Meddelelse at vise, når du spørger om transskription", diff --git a/packages/rocketchat-i18n/i18n/de-AT.i18n.json b/packages/rocketchat-i18n/i18n/de-AT.i18n.json index cb6d2b73e4c0..666570374562 100644 --- a/packages/rocketchat-i18n/i18n/de-AT.i18n.json +++ b/packages/rocketchat-i18n/i18n/de-AT.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Sie können die folgenden Platzhalter verwenden: [name], [fname], [lname] für den vollständigen Namen des Benutzers, Vornamen oder Nachnamen. [email] für die E-Mail-Adresse des Benutzers. [password] für das Kennwort des Benutzers. [Site_Name] und [Site_URL] für den Anwendungsname und die URL. ", "Accounts_UserAddedEmailSubject_Default": "Sie wurden auf [Site_Name] hinzugefügt", "Activate": "Aktivieren", + "Active": "aktiv", "Activity": "Aktivität", "Add": "Hinzufügen", "Add_agent": "Berater/in hinzufügen", @@ -219,7 +220,6 @@ "Admin_Info": "Admin-Info", "Administration": "Administration", "Adult_images_are_not_allowed": "Erwachsene Bilder sind nicht erlaubt", - "Advocacy": "Anwaltschaft", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Nach der OAuth2-Authentifizierung werden die Benutzer auf diese URL weitergeleitet.", "Agent": "Agent", "Agent_added": "Berater/in wurde hinzugefügt.", @@ -550,7 +550,6 @@ "Connection_Closed": "Verbindung geschlossen", "Connection_Reset": "Verbindung zurücksetzen", "Consulting": "Beratung", - "Consumer_Goods": "Konsumgüter", "Contains_Security_Fixes": "Enthält Sicherheitsprobleme", "Content": "Inhalt", "Continue": "Fortsetzen", @@ -1267,8 +1266,6 @@ "Hash": "Hash", "Header": "Kopfzeile", "Header_and_Footer": "Kopf-und Fußzeile", - "Healthcare_and_Pharmaceutical": "Gesundheitswesen / Pharma", - "Help_Center": "Hilfezentrum", "Helpers": "Helfer", "Hex_Color_Preview": "Hex-Farbvorschau", "Hi_username": "Servus __name__", @@ -2050,7 +2047,6 @@ "Public": "Von allen einsehbar", "Public_Channel": "Öffentlicher Kanal", "Public_Community": "Öffentliche Gemeinschaft", - "Public_Relations": "Öffentlichkeitsarbeit", "Push": "Push-Nachrichten", "Push_apn_cert": "APN-Cert", "Push_apn_dev_cert": "APN-Dev-Cert", @@ -2549,7 +2545,6 @@ "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", "Transcript_message": "Nachricht, die angezeigt werden soll, wenn nach Transcript gefragt wird", "Transcript_of_your_livechat_conversation": "Transkript deiner Livechat-Konversation", diff --git a/packages/rocketchat-i18n/i18n/de.i18n.json b/packages/rocketchat-i18n/i18n/de.i18n.json index d3295682d2fd..04e2a0431340 100644 --- a/packages/rocketchat-i18n/i18n/de.i18n.json +++ b/packages/rocketchat-i18n/i18n/de.i18n.json @@ -240,6 +240,7 @@ "Accounts_Verify_Email_For_External_Accounts": "E-Mail für externe Konten verifizieren", "Action_required": "Aktion notwendig", "Activate": "Aktivieren", + "Active": "Aktiv", "Active_users": "Aktive Benutzer", "Activity": "Aktivität", "Add": "Hinzufügen", @@ -277,7 +278,6 @@ "Admin_Info": "Admin-Info", "Administration": "Administration", "Adult_images_are_not_allowed": "Nicht-jugendfreie Bilder sind nicht erlaubt", - "Advocacy": "Interessenvertretung", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Nach der OAuth2-Authentifizierung werden die Benutzer auf diese URL weitergeleitet. Sie können eine URL pro Zeile hinzufügen.", "Agent": "Berater/in", "Agent_added": "Berater/in wurde hinzugefügt.", @@ -787,7 +787,6 @@ "Connection_success": "LDAP-Verbindung erfolgreich", "Connectivity_Services": "Verbindungsdienste", "Consulting": "Beratung", - "Consumer_Goods": "Konsumgüter", "Contact": "Kontakt", "Contact_Chat_History": "Chat-Verlauf des Kontakts", "Contains_Security_Fixes": "Beinhaltet sicherheitsrelevante Korrekturen", @@ -1098,8 +1097,8 @@ "Custom_Emoji_Has_Been_Deleted": "Der benutzerdefinierte Emoji wurde gelöscht.", "Custom_Emoji_Info": "Benutzerdefinierter-Emoji-Info", "Custom_Emoji_Updated_Successfully": "Benutzerdefinierter Emoji erfolgreich aktualisiert", - "Custom_Field_Removed": "Benutzerdefiniertes Feld entfernt", "Custom_Fields": "Benutzerdefinierte Felder", + "Custom_Field_Removed": "Benutzerdefiniertes Feld entfernt", "Custom_oauth_helper": "Bei der Einrichtung Ihres OAuth-Providers muss eine Rückruf-URL angegeben werden. Benutzen Sie dafür folgende URL: %s", "Custom_oauth_unique_name": "Name des OAuth-Kontos", "Custom_Script_Logged_In": "Benutzerdefiniertes Skript für angemeldete Benutzer", @@ -1698,8 +1697,6 @@ "Hash": "Hash", "Header": "Kopfzeile", "Header_and_Footer": "Kopf- und Fusszeile", - "Healthcare_and_Pharmaceutical": "Gesundheitswesen/Pharma", - "Help_Center": "Hilfecenter", "Helpers": "Helfer", "Hex_Color_Preview": "Farbvorschau (Hex)", "Hi": "Hallo", @@ -2708,7 +2705,6 @@ "Public": "Öffentlich", "Public_Channel": "Öffentlicher Kanal", "Public_Community": "Öffentliche Gemeinschaft", - "Public_Relations": "Öffentlichkeitsarbeit", "Purchase_for_free": "KOSTENLOS kaufen", "Purchase_for_price": "Kaufen für $%s", "Purchased": "Gekauft", @@ -3334,7 +3330,6 @@ "Total_messages": "Anzahl aller Nachrichten", "Total_Threads": "Anzahl aller Threads", "Total_visitors": "Besucher insgesamt", - "Tourism": "Tourismus", "Transcript_Enabled": "Frage Besucher, ob Sie nach dem Schließen des Livechats eine Mitschrift zugesandt bekommen möchten", "Transcript_message": "Nachricht, die bei der Nachfrage bzgl. einer Mitschrift gesendet wird", "Transcript_of_your_livechat_conversation": "Mitschrift Ihres Livechats", diff --git a/packages/rocketchat-i18n/i18n/el.i18n.json b/packages/rocketchat-i18n/i18n/el.i18n.json index 7ae65325d15e..cc0beb37485e 100644 --- a/packages/rocketchat-i18n/i18n/el.i18n.json +++ b/packages/rocketchat-i18n/i18n/el.i18n.json @@ -194,6 +194,7 @@ "Accounts_UserAddedEmail_Description": "Μπορείτε να χρησιμοποιήσετε τους παρακάτω αντικαταστάτες: [name], [fname], [lname] για το πλήρες όνομα του χρήστη, το όνομα ή το επώνυμο, αντίστοιχα. [email] για τη διεύθυνση ηλεκτρονικού ταχυδρομείου του χρήστη. [password] για τον κωδικό πρόσβασης του χρήστη. [Site_Name] και [Site_URL] για το Όνομα της Εφαρμογής και το URL της αντίστοιχα. ", "Accounts_UserAddedEmailSubject_Default": "Έχετε προστεθεί στο [Site_Name]", "Activate": "Ενεργοποίησε", + "Active": "Ενεργός", "Activity": "Δραστηριότητα", "Add": "Προσθήκη", "Add_agent": "Προσθήκη αντιπροσώπου", @@ -225,7 +226,6 @@ "Admin_Info": "Πληροφορίες διαχειριστή", "Administration": "Διαχείριση", "Adult_images_are_not_allowed": "Ακατάλληλες φωτογραφίες δεν επιτρέπονται", - "Advocacy": "Υπεράσπιση", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Μετά τον έλεγχο ταυτότητας OAuth2, οι χρήστες θα ανακατευθυνθούν προς αυτό το URL", "Agent": "Εκπρόσωπος", "Agent_added": "Ο εκπρόσωπος προστέθηκε", @@ -555,7 +555,6 @@ "Connection_Closed": "Η σύνδεση έκλεισε", "Connection_Reset": "Επαναφορά σύνδεσης", "Consulting": "Συμβουλευτικές υπηρεσίες", - "Consumer_Goods": "Καταναλωτικά αγαθά", "Contains_Security_Fixes": "Περιέχει Διορθώσεις Ασφαλείας", "Content": "Περιεχόμενο", "Continue": "Συνεχίζω", @@ -1204,6 +1203,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Διαδρομή φακέλου WebDAV στα οποία πρέπει να μεταφορτωθούν τα αρχεία", "FileUpload_Webdav_Username": "Όνομα χρήστη WebDAV", "Filter": "Φίλτρο", + "Filters": "Φίλτρα", "Financial_Services": "Χρηματοπιστωτικές υπηρεσίες", "First_Channel_After_Login": "Πρώτο κανάλι μετά την είσοδο", "Flags": "σημαίες", @@ -1271,8 +1271,6 @@ "Hash": "Χασίσι", "Header": "Επί κεφαλής", "Header_and_Footer": "Κεφαλίδα και υποσέλιδο", - "Healthcare_and_Pharmaceutical": "Υγεία / Φαρμακευτική", - "Help_Center": "Κέντρο βοηθείας", "Helpers": "Βοηθοί", "Hex_Color_Preview": "Έγχρωμη προεπισκόπηση Hex", "Hidden": "Κεκρυμμένος", @@ -1292,6 +1290,7 @@ "Highlights_How_To": "Να ειδοποιείται όταν κάποιος αναφέρει μια λέξη ή φράση, προσθέστε το εδώ. Μπορείτε να διαχωρίσετε λέξεις ή φράσεις με κόμματα. Λέξεις κυριώτερο δεν είναι ευαίσθητη υπόθεση.", "Highlights_List": "λέξεις highlight", "History": "Ιστορικό", + "Home": "Σπίτι", "Host": "Πλήθος", "hours": "ώρες", "Hours": "Ωρες", @@ -2051,7 +2050,6 @@ "Public": "Δημόσιο", "Public_Channel": "Δημόσιο κανάλι", "Public_Community": "Δημόσια κοινότητα", - "Public_Relations": "Δημόσιες σχέσεις", "Push": "Σπρώξτε", "Push_apn_cert": "APN Πιστοποιητικό", "Push_apn_dev_cert": "APN Dev Πιστοποιητικό", @@ -2549,7 +2547,6 @@ "Tokens_Required_Input_Placeholder": "Ονόματα στοιχείων ενεργητικού Tokens", "Topic": "Θέμα", "Total_messages": "Σύνολο μηνυμάτων", - "Tourism": "Ο ΤΟΥΡΙΣΜΟΣ", "Transcript_Enabled": "Ζητήστε από τον επισκέπτη αν θα ήθελε μια μεταγραφή μετά την ολοκλήρωση της συνομιλίας", "Transcript_message": "Μήνυμα προς εμφάνιση κατά την ερώτηση σχετικά με την μεταγραφή", "Transcript_of_your_livechat_conversation": "Μεταγραφή της συνομιλίας σας livechat.", diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index e4fa5e6907c0..a588448c1d0d 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -105,6 +105,7 @@ "Accounts_OAuth_Custom_id": "Id", "Accounts_OAuth_Custom_Identity_Path": "Identity Path", "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Identity Token Sent Via", + "Accounts_OAuth_Custom_Key_Field": "Key Field", "Accounts_OAuth_Custom_Login_Style": "Login Style", "Accounts_OAuth_Custom_Map_Channels": "Map Roles/Groups to channels", "Accounts_OAuth_Custom_Merge_Roles": "Merge Roles from SSO", @@ -256,9 +257,11 @@ "Add_monitor": "Add monitor", "Add_Reaction": "Add Reaction", "Add_Role": "Add Role", + "Add_Sender_To_ReplyTo": "Add Sender to Reply-To", "Add_user": "Add user", "Add_User": "Add User", "Add_users": "Add users", + "Add_members": "Add Members", "add-livechat-department-agents": "Add Omnichannel Agents to Departments", "add-oauth-service": "Add Oauth Service", "add-oauth-service_description": "Permission to add a new Oauth service", @@ -459,7 +462,6 @@ "Apps_Marketplace_Uninstall_App_Prompt": "Do you really want to uninstall this app?", "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "Uninstall it anyway", "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "This app has an active subscription and uninstalling will not cancel it. If you'd like to do that, please modify your subscription before uninstalling.", - "Apps_Permissions_Review_Modal_Title": "This app requires the following permissions", "Apps_Permissions_No_Permissions_Required": "The App does not require additional permissions", "Apps_Permissions_user_read": "Access user information", @@ -591,6 +593,10 @@ "Backup_codes": "Backup codes", "ban-user": "Ban User", "ban-user_description": "Permission to ban a user from a channel", + "BBB_End_Meeting": "End Meeting", + "BBB_Join_Meeting": "Join Meeting", + "BBB_Start_Meeting": "Start Meeting", + "BBB_You_have_no_permission_to_start_a_call": "You have no permission to start a call", "Best_first_response_time": "Best first response time", "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "Beta feature. Depends on Video Conference to be enabled.", "Better": "Better", @@ -618,6 +624,7 @@ "BotHelpers_userFields_Description": "CSV of user fields that can be accessed by bots helper methods.", "Bots": "Bots", "Branch": "Branch", + "Broadcast": "Broadcast", "Broadcast_channel": "Broadcast Channel", "Broadcast_channel_Description": "Only authorized users can write new messages, but the other users will be able to reply", "Broadcast_Connected_Instances": "Broadcast Connected Instances", @@ -706,6 +713,7 @@ "Channels": "Channels", "Channels_are_where_your_team_communicate": "Channels are where your team communicate", "Channels_list": "List of public channels", + "Channel_what_is_this_channel_about": "What is this channel about?", "Chart": "Chart", "Chat_button": "Chat button", "Chat_close": "Chat Close", @@ -717,6 +725,7 @@ "Chat_queued": "Chat Queued", "Chat_removed": "Chat Removed", "Chat_start": "Chat Start", + "Chat_started": "Chat started", "Chat_taken": "Chat Taken", "Chat_window": "Chat window", "Chatops_Enabled": "Enable Chatops", @@ -1159,6 +1168,7 @@ "Country_Zimbabwe": "Zimbabwe", "Cozy": "Cozy", "Create": "Create", + "Create_channel": "Create Channel", "Create_A_New_Channel": "Create a New Channel", "Create_new": "Create new", "Create_unique_rules_for_this_channel": "Create unique rules for this channel", @@ -1372,6 +1382,7 @@ "Dont_ask_me_again_list": "Don't ask me again list", "Download_Info": "Download Info", "Download_My_Data": "Download My Data (HTML)", + "Download_Pending_Avatars": "Download Pending Avatars", "Download_Pending_Files": "Download Pending Files", "Download_Snippet": "Download", "Downloading_file_from_external_URL": "Downloading file from external URL", @@ -1486,6 +1497,7 @@ "Encrypted_channel_Description": "End to end encrypted channel. Search will not work with encrypted channels and notifications may not show the messages content.", "Encrypted_message": "Encrypted message", "Encrypted_setting_changed_successfully": "Encrypted setting changed successfully", + "Encrypted_not_available": "Not available for Public Channels", "Encryption_key_saved_successfully": "Your encryption key was saved successfully.", "EncryptionKey_Change_Disabled": "You can't set a password for your encryption key because your private key is not present on this client. In order to set a new password you need load your private key using your existing password or use a client where the key is already loaded.", "End": "End", @@ -1609,6 +1621,7 @@ "error-message-size-exceeded": "Message size exceeds Message_MaxAllowedSize", "error-missing-unsubscribe-link": "You must provide the [unsubscribe] link.", "error-no-tokens-for-this-user": "There are no tokens for this user", + "error-no-message-for-unread": "There are no messages to mark unread", "error-not-allowed": "Not allowed", "error-not-authorized": "Not authorized", "error-office-hours-are-closed": "The office hours are closed.", @@ -1674,6 +1687,7 @@ "Exclude_pinned": "Exclude pinned messages", "Execute_Synchronization_Now": "Execute Synchronization Now", "Exit_Full_Screen": "Exit Full Screen", + "Expand": "Expand", "Experimental_Feature_Alert": "This is an experimental feature! Please be aware that it may change, break, or even be removed in the future without any notice.", "Expiration": "Expiration", "Expiration_(Days)": "Expiration (Days)", @@ -1807,6 +1821,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV folder path which the files should be uploaded to", "FileUpload_Webdav_Username": "WebDAV Username", "Filter": "Filter", + "Filters": "Filters", "Filters_applied": "Filters applied", "Financial_Services": "Financial Services", "First_Channel_After_Login": "First Channel After Login", @@ -1934,6 +1949,7 @@ "Highlights_How_To": "To be notified when someone mentions a word or phrase, add it here. You can separate words or phrases with commas. Highlight Words are not case sensitive.", "Highlights_List": "Highlight words", "History": "History", + "Home": "Home", "Host": "Host", "Hospitality_Businness": "Hospitality Businness", "hours": "hours", @@ -2389,7 +2405,7 @@ "Livechat_AllowedDomainsList": "Livechat Allowed Domains", "Livechat_Appearance": "Livechat Appearance", "Livechat_auto_transfer_chat_timeout": "Timeout (in seconds) for automatic transfer of unanswered chats to another agent", - "Livechat_auto_transfer_chat_timeout_description" : "This event takes place only when the chat has just started. After the first transfering for inactivity, the room is no longer monitored.", + "Livechat_auto_transfer_chat_timeout_description": "This event takes place only when the chat has just started. After the first transfering for inactivity, the room is no longer monitored.", "Livechat_business_hour_type": "Business Hour Type (Single or Multiple)", "Livechat_chat_transcript_sent": "Chat transcript sent: __transcript__", "Livechat_custom_fields_options_placeholder": "Comma-separated list used to select a pre-configured value. Spaces between elements are not accepted.", @@ -2621,7 +2637,7 @@ "Message_BadWordsFilterListDescription": "Add List of Comma-separated list of bad words to filter", "Message_BadWordsWhitelist": "Remove words from the Blacklist", "Message_BadWordsWhitelistDescription": "Add a comma-separated list of words to be removed from filter", - "Message_Characther_Limit": "Message Characther Limit", + "Message_Characther_Limit": "Message Character Limit", "message_counter": "__counter__ message", "message_counter_plural": "__counter__ messages", "Message_DateFormat": "Date Format", @@ -2923,6 +2939,7 @@ "Only_On_Desktop": "Desktop mode (only sends with enter on desktop)", "Only_works_with_chrome_version_greater_50": "Only works with Chrome browser versions > 50", "Only_you_can_see_this_message": "Only you can see this message", + "Only_invited_users_can_acess_this_channel": "Only invited users can access this Channel", "Oops_page_not_found": "Oops, page not found", "Oops!": "Oops", "Open": "Open", @@ -3176,6 +3193,7 @@ "Remove_as_leader": "Remove as leader", "Remove_as_moderator": "Remove as moderator", "Remove_as_owner": "Remove as owner", + "Remove_Channel_Links": "Remove channel links", "Remove_custom_oauth": "Remove custom oauth", "Remove_from_room": "Remove from room", "Remove_last_admin": "Removing last admin", @@ -3540,6 +3558,7 @@ "Slack_Users": "Slack's Users CSV", "SlackBridge_APIToken": "API Tokens", "SlackBridge_APIToken_Description": "You can configure multiple slack servers by adding one API Token per line.", + "Slackbridge_channel_links_removed_successfully": "The slackbridge channel links have been removed successfully.", "SlackBridge_error": "SlackBridge got an error while importing your messages at %s: %s", "SlackBridge_finish": "SlackBridge has finished importing the messages at %s. Please reload to view all messages.", "SlackBridge_Out_All": "SlackBridge Out All", @@ -3548,6 +3567,7 @@ "SlackBridge_Out_Channels_Description": "Choose which channels will send messages back to Slack", "SlackBridge_Out_Enabled": "SlackBridge Out Enabled", "SlackBridge_Out_Enabled_Description": "Choose whether SlackBridge should also send your messages back to Slack", + "SlackBridge_Remove_Channel_Links_Description": "Remove the internal link between Rocket.Chat channels and Slack channels. The links will afterwards be recreated based on the channel names.", "SlackBridge_start": "@%s has started a SlackBridge import at `#%s`. We'll let you know when it's finished.", "Slash_Gimme_Description": "Displays ༼ つ ◕_◕ ༽つ before your message", "Slash_LennyFace_Description": "Displays ( ͡° ͜ʖ ͡°) after your message", @@ -3732,6 +3752,10 @@ "theme-color-rc-color-alert-message-secondary-background": "Alert Message Secondary Background", "theme-color-rc-color-alert-message-warning": "Alert Message Warning", "theme-color-rc-color-alert-message-warning-background": "Alert Message Warning Background", + "theme-color-rc-color-announcement-text": "Announcement Text Color", + "theme-color-rc-color-announcement-background": "Announcement Background Color", + "theme-color-rc-color-announcement-text-hover": "Announcement Text Color Hover", + "theme-color-rc-color-announcement-background-hover": "Announcement Background Color Hover", "theme-color-rc-color-button-primary": "Button Primary", "theme-color-rc-color-button-primary-light": "Button Primary Light", "theme-color-rc-color-content": "Content", @@ -4274,4 +4298,4 @@ "Your_temporary_password_is_password": "Your temporary password is [password].", "Your_TOTP_has_been_reset": "Your Two Factor TOTP has been reset.", "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 43a5c629ca2b..291a51a65641 100644 --- a/packages/rocketchat-i18n/i18n/eo.i18n.json +++ b/packages/rocketchat-i18n/i18n/eo.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Vi povas uzi la jenajn anstataŭilojn: [nomo], [fname], [lname] por la plena nomo, unua nomo aŭ familinomo de la uzanto, respektive.[retpoŝto] por la retpoŝto de la uzanto.[pasvorto] por la pasvorto de la uzanto.[Site_Name] kaj [Site_URL] por la Aplika nomo kaj URL respektive.", "Accounts_UserAddedEmailSubject_Default": "Vi estis aldonitaj al [Site_Name]", "Activate": "Aktivigi", + "Active": "Aktiva", "Activity": "Aktiveco", "Add": "Aldoni", "Add_agent": "Aldonu agento", @@ -219,7 +220,6 @@ "Admin_Info": "Admin Informoj", "Administration": "Administrado", "Adult_images_are_not_allowed": "Plenkreskulaj bildoj ne estas permesataj", - "Advocacy": "Advokato", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Post aŭtentikaĵo de OAuth2, uzantoj estos alidirektitaj al ĉi tiu URL", "Agent": "Agento", "Agent_added": "Agento aldonis", @@ -549,7 +549,6 @@ "Connection_Closed": "Ligo fermita", "Connection_Reset": "Rilato de konekto", "Consulting": "Konsultado", - "Consumer_Goods": "Konsumantoj", "Contains_Security_Fixes": "Enhavas Sekurecajn Fiksojn", "Content": "Enhavo", "Continue": "Daŭrigu", @@ -1198,6 +1197,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Reta dosierujo de WebDAV, kiun la dosieroj devas alŝuti", "FileUpload_Webdav_Username": "Uzanto-nomo de WebDAV", "Filter": "Filtrilo", + "Filters": "Filtriloj", "Financial_Services": "Financaj Servoj", "First_Channel_After_Login": "Unua Kanalo Post Salutnomo", "Flags": "Flagoj", @@ -1265,8 +1265,6 @@ "Hash": "Hash", "Header": "Kapo", "Header_and_Footer": "Kapo kaj Piedo", - "Healthcare_and_Pharmaceutical": "Sano / Farmacia", - "Help_Center": "Helpo-Centro", "Helpers": "Helpantoj", "Hex_Color_Preview": "Hexa Koloro Antaŭrigardo", "Hidden": "Kaŝita", @@ -1286,6 +1284,7 @@ "Highlights_How_To": "Por esti sciigita, kiam iu parolas vorton aŭ frazon, aldonu ĝin ĉi tie. Vi povas apartigi vortojn aŭ frazojn kun komoj. Elstaraj vortoj ne estas kazema.", "Highlights_List": "Montri vortojn", "History": "Historio", + "Home": "Hejmo", "Host": "Gastiganto", "hours": "horoj", "Hours": "Horoj", @@ -2045,7 +2044,6 @@ "Public": "Publika", "Public_Channel": "Publika Kanalo", "Public_Community": "Publika Komunumo", - "Public_Relations": "Publikaj rilatoj", "Push": "Push", "Push_apn_cert": "Certa APN", "Push_apn_dev_cert": "APN Dev-certo", @@ -2544,7 +2542,6 @@ "Tokens_Required_Input_Placeholder": "Tokensaj nomoj", "Topic": "Temo", "Total_messages": "Tutaj Mesaĝoj", - "Tourism": "Turismo", "Transcript_Enabled": "Demandu vizitanton se ili ŝatus transskribo post babilejo fermita", "Transcript_message": "Mesaĝo por Montri Kiam Petante Pri Transskribo", "Transcript_of_your_livechat_conversation": "Transskribo de via viva konversacio.", diff --git a/packages/rocketchat-i18n/i18n/es.i18n.json b/packages/rocketchat-i18n/i18n/es.i18n.json index 5e2f57b20d7e..f0986f32109a 100644 --- a/packages/rocketchat-i18n/i18n/es.i18n.json +++ b/packages/rocketchat-i18n/i18n/es.i18n.json @@ -5,6 +5,8 @@ "__count__empty_rooms_will_be_removed_automatically__rooms__": "__count__ salas vacías serán eliminadas automáticamente. __rooms__.", "__username__is_no_longer__role__defined_by__user_by_": "__username__ ya no es __role__ (por __user_by__)", "__username__was_set__role__by__user_by_": "__username__ fue establecido __role__ (por __user_by__)", + "This_room_encryption_has_been_enabled_by__username_": "El cifrado de esta sala ha sido habilitado por __username__", + "This_room_encryption_has_been_disabled_by__username_": "El cifrado de esta sala ha sido deshabilitado por __username__", "@username": "@usuario", "@username_message": "@usuario ", "#channel": "#canal", @@ -65,7 +67,7 @@ "Accounts_Default_User_Preferences_audioNotifications": "Alerta de notificaciones de audio por defecto", "Accounts_Default_User_Preferences_desktopNotifications": "Alerta de notificaciones de escritorio por defecto", "Accounts_Default_User_Preferences_mobileNotifications": "Alerta de notificaciones en moviles por defecto", - "Accounts_Default_User_Preferences_not_available": "Error al recuperar las preferencias de usuario porque aún no han sido configuradas por el usuario", + "Accounts_Default_User_Preferences_not_available": "No se pudieron recuperar las preferencias del usuario porque el usuario aún no las ha configurado", "Accounts_DefaultUsernamePrefixSuggestion": "Sugerencia de Prefijo de Nombre de Usuario Predeterminado", "Accounts_denyUnverifiedEmail": "Denegar correo electrónico sin verificar", "Accounts_Directory_DefaultView": "Listado de directorio predeterminado", @@ -78,7 +80,7 @@ "Accounts_EmailVerification": "Permitir solo que los usuarios verificados inicien sesión", "Accounts_EmailVerification_Description": "Asegúrese de que tiene la configuración SMTP correcta para usar esta característica", "Accounts_Enrollment_Email": "Correo Electrónico de Inscripción ", - "Accounts_Enrollment_Email_Default": "Bienvenido a [Site_Name] Ve a [Site_URL] y prueba la mejor solución de chat de código abierto disponible en la actualidad! ", + "Accounts_Enrollment_Email_Default": "Bienvenido a [Site_Name] Ve a [Site_URL] y pruebe la mejor solución de chat de código abierto disponible en la actualidad! ", "Accounts_Enrollment_Email_Description": "Puedes utilizar los siguientes marcadores: [name], [fname], [lname] para el nombre completo, nombre o apellidos, respectivamente.[email] para el correo electrónico del usuario.[Site_Name] y [Site_URL] para el nombre del sitio web y la URL, respectivamente.", "Accounts_Enrollment_Email_Subject_Default": "Bienvenido a [Site_Name]", "Accounts_ForgetUserSessionOnWindowClose": "Olvidar la sesión de usuario al cerrar la ventana", @@ -102,7 +104,7 @@ "Accounts_OAuth_Custom_Groups_Claim": "Campo de roles/grupos para la asignación de canales", "Accounts_OAuth_Custom_id": "Id", "Accounts_OAuth_Custom_Identity_Path": "Ruta de Identidad", - "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Vía de envío del token de identificación", + "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Token de identidad enviado a través de", "Accounts_OAuth_Custom_Login_Style": "Estilos del login", "Accounts_OAuth_Custom_Map_Channels": "Asignar roles/grupos a canales", "Accounts_OAuth_Custom_Merge_Roles": "Fusionar roles de SSO", @@ -169,12 +171,12 @@ "Accounts_OAuth_Wordpress_callback_url": "URL de retorno (callback) de Wordpress", "Accounts_OAuth_Wordpress_id": "Id de Wordpress", "Accounts_OAuth_Wordpress_identity_path": "Ruta de Identidad", - "Accounts_OAuth_Wordpress_identity_token_sent_via": "Vía de envío del token de identificación", + "Accounts_OAuth_Wordpress_identity_token_sent_via": "Token de identidad enviado a través de", "Accounts_OAuth_Wordpress_scope": "Alcance", "Accounts_OAuth_Wordpress_secret": "Secreto de Wordpress", "Accounts_OAuth_Wordpress_server_type_custom": "Personalizado", "Accounts_OAuth_Wordpress_server_type_wordpress_com": "Wordpress.com", - "Accounts_OAuth_Wordpress_server_type_wp_oauth_server": "Complemento WP OAuth Server", + "Accounts_OAuth_Wordpress_server_type_wp_oauth_server": "Plugin WP OAuth Server", "Accounts_OAuth_Wordpress_token_path": "Ruta del Token", "Accounts_Password_Policy_AtLeastOneLowercase": "Al menos una minúscula", "Accounts_Password_Policy_AtLeastOneLowercase_Description": "Aplica a que la contraseña contenga al menos una minúscula.", @@ -185,7 +187,7 @@ "Accounts_Password_Policy_AtLeastOneUppercase": "Al menos una mayúscula", "Accounts_Password_Policy_AtLeastOneUppercase_Description": "Aplica a que la contraseña contenga al menos una minúscula.", "Accounts_Password_Policy_Enabled": "Habilitar política de contraseña", - "Accounts_Password_Policy_Enabled_Description": "Cuando está habilitado, las contraseñas de los usuarios deben cumplir con las políticas establecidas. Nota: esto solo se aplica a contraseñas nuevas, no contraseñas existentes.", + "Accounts_Password_Policy_Enabled_Description": "Cuando están habilitadas, las contraseñas de los usuarios deben cumplir con las políticas establecidas. Nota: esto solo se aplica a contraseñas nuevas, no a contraseñas existentes.", "Accounts_Password_Policy_ForbidRepeatingCharacters": "Prohibir repetición de caracteres", "Accounts_Password_Policy_ForbidRepeatingCharacters_Description": "Asegura que las contraseñas no contengan el mismo carácter repitido una al lado de la otra.", "Accounts_Password_Policy_ForbidRepeatingCharactersCount": "Máximos caracteres repetidos", @@ -210,7 +212,7 @@ "Accounts_RegistrationForm_SecretURL_Description": "Debe proporcionar una cadena de texto aleatorio que se añadirá a la URL de registro. Ejemplo: https://open.rocket.chat/register/[secret_hash]", "Accounts_RequireNameForSignUp": "Requerir un Nombre para el Registro", "Accounts_RequirePasswordConfirmation": "Solicitar Confirmación de Contraseña", - "Accounts_RoomAvatarExternalProviderUrl": "URL del proveedor externo de Avatar", + "Accounts_RoomAvatarExternalProviderUrl": "Room URL del proveedor externo de Avatar", "Accounts_RoomAvatarExternalProviderUrl_Description": "Ejemplo: `https://acme.com/api/v1/{roomId}`", "Accounts_SearchFields": "Campos a Considerar en la Búsqueda", "Accounts_Send_Email_When_Activating": "Enviar un correo electrónico al usuario cuando esté activado", @@ -225,7 +227,7 @@ "Accounts_TwoFactorAuthentication_By_Email_Code_Expiration": "Tiempo de caducidad del código enviado por correo electrónico en segundos", "Accounts_TwoFactorAuthentication_By_Email_Enabled": "Habilitar segundo factor de autenticación vía correo electrónico", "Accounts_TwoFactorAuthentication_By_Email_Enabled_Description": "Los usuarios con correo electrónico verificado y la opción habilitada en su página de perfil recibirán un correo electrónico con un código temporal para autorizar ciertas acciones como iniciar sesión, guardar el perfil, etc.", - "Accounts_TwoFactorAuthentication_Enabled": "Habilitar segundo factor de autenticación vía TOTP", + "Accounts_TwoFactorAuthentication_Enabled": "Habilite la autenticación de dos factores a través de TOTP", "Accounts_TwoFactorAuthentication_Enabled_Description": "Los usuarios pueden configurar su segundo factor de autenticación usando cualquier aplicación TOTP, como Google Authenticator o Authy", "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback": "Aplicar respaldo de contraseña", "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback_Description": "Los usuarios se verán obligados a ingresar su contraseña, para acciones importantes, si no se habilita ningún otro método de autenticación de dos factores para ese usuario y se establece una contraseña para él.", @@ -241,6 +243,7 @@ "Accounts_Verify_Email_For_External_Accounts": "Verificar el correo electrónico para las cuentas externas", "Action_required": "Acción requerida", "Activate": "Activar", + "Active": "Activo", "Active_users": "Usuarios activos", "Activity": "Actividad", "Add": "Agregar", @@ -256,6 +259,7 @@ "Add_user": "Agregar Usuario", "Add_User": "Añadir usuario", "Add_users": "Añadir usuarios", + "Add_members": "Añadir miembros", "add-livechat-department-agents": "Añadir agentes de LiveChat a departamentos", "add-oauth-service": "Agregar Servicio Oauth", "add-oauth-service_description": "Permiso para agregar un nuevo servicio OAuth", @@ -273,12 +277,12 @@ "Additional_emails": "Correos electrónicos adicionales", "Additional_Feedback": "Retroalimentación adicional", "additional_integrations_Bots": "Si está buscando cómo integrar su propio bot, entonces no busque más, nuestro adaptador Hubot. https://github.com/RocketChat/hubot-rocketchat", - "additional_integrations_Zapier": "¿Está buscando integrar otro software y aplicaciones con Rocket.Chat pero no tiene tiempo para hacerlo manualmente? Luego, sugerimos usar Zapier, que es totalmente compatible. Lea más sobre esto en nuestra documentación. https://rocket.chat/docs/administrator-guides/integrations/zapier/using-zaps/", + "additional_integrations_Zapier": "¿Está buscando integrar otro software y aplicaciones con Rocket.Chat pero no tiene tiempo para hacerlo manualmente? Entonces, sugerimos usar Zapier, que es totalmente compatible. Lea más sobre esto en nuestra documentación. https://rocket.chat/docs/administrator-guides/integrations/zapier/using-zaps/", "Admin_disabled_encryption": "Su administrador no habilitó encriptación E2E", "Admin_Info": "Información de administración", "Administration": "Administración", "Adult_images_are_not_allowed": "No se permiten imágenes para adultos", - "Advocacy": "Abogacía", + "Aerospace_and_Defense": "Aeroespacial y Defensa", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Después de la autenticación OAuth2, los usuarios serán redirigidos a esta URL. Puedes añadir una URL por línea.", "Agent": "Agente", "Agent_added": "Agente agregado", @@ -312,7 +316,7 @@ "Allow_switching_departments": "Permitir al visitante cambiar de departamentos", "Almost_done": "Casi listo", "Alphabetical": "Alfabético", - "Also_send_to_channel": "También enviar al canal", + "Also_send_to_channel": "Enviar también al canal", "Always_open_in_new_window": "Abrir siempre en una nueva ventana", "Analytics": "Analíticas", "Analytics_features_enabled": "Características habilitadas", @@ -348,15 +352,15 @@ "API_Enable_CORS": "Habilitar CORS", "API_Enable_Direct_Message_History_EndPoint": "Habilitar mensaje directo al punto final", "API_Enable_Direct_Message_History_EndPoint_Description": "Esto habilita `/api/v1/im.history.others` que permite la visualización mensajes directos enviados por otros usuarios en el que el que llama no es parte.", - "API_Enable_Personal_Access_Tokens": "Habilitar los tokens de acceso personal a la API REST", + "API_Enable_Personal_Access_Tokens": "Habilitar los tokens de acceso personal en la API REST", "API_Enable_Personal_Access_Tokens_Description": "Habilitar los tokens de acceso personal para su uso con la API REST", - "API_Enable_Rate_Limiter": "Habilitar límite de frecuencia", + "API_Enable_Rate_Limiter": "Habilitar limitador de frecuencia", "API_Enable_Rate_Limiter_Dev": "Habilitar límite de frecuencia en desarrollo", "API_Enable_Rate_Limiter_Dev_Description": "¿Debería limitar la cantidad de llamadas a los puntos finales en el entorno de desarrollo?", "API_Enable_Rate_Limiter_Limit_Calls_Default": "Número predeterminado de llamadas al límite de frecuencia", - "API_Enable_Rate_Limiter_Limit_Calls_Default_Description": "Número de llamadas predeterminadas para cada punto de la API REST, permitidas dentro del rango de tiempo definido a continuación", + "API_Enable_Rate_Limiter_Limit_Calls_Default_Description": "Número de llamadas predeterminadas para cada punto final de la API REST, permitidas dentro del rango de tiempo definido a continuación", "API_Enable_Rate_Limiter_Limit_Time_Default": "Límite de tiempo predeterminado para el límite de frecuencia (en ms)", - "API_Enable_Rate_Limiter_Limit_Time_Default_Description": "Número de llamadas predeterminadas para cada punto de la API REST, permitidas dentro del rango de tiempo definido a continuación", + "API_Enable_Rate_Limiter_Limit_Time_Default_Description": "Tiempo de espera predeterminado para limitar el número de llamadas en cada punto final de la API REST (en ms)", "API_Enable_Shields": "Activar escudos", "API_Enable_Shields_Description": "Activar los escudos disponibles en `/api/v1/shields. svg`", "API_GitHub_Enterprise_URL": "URL del servidor", @@ -380,12 +384,12 @@ "API_Use_REST_For_DDP_Calls": "Usar REST en lugar de WebSocket para las llamadas de Meteor", "API_User_Limit": "Límite de usuarios para añadir todos los usuarios a un canal", "API_Wordpress_URL": "URL de Wordpress", - "api-bypass-rate-limit": "Límite de tasa de derivación para API REST", + "api-bypass-rate-limit": "Límite de velocidad de omisión para la API REST", "Apiai_Key": "Clave Api.ai", "Apiai_Language": "Idioma Api.ai", "APIs": "APIs", "App_author_homepage": "página de inicio del autor", - "App_Details": "Detalles de la aplicación", + "App_Details": "Detalles de la Aplicación", "App_Information": "Información de la aplicación", "App_Installation": "Instalación de la aplicación", "App_status_auto_enabled": "Habilitado", @@ -393,7 +397,7 @@ "App_status_disabled": "Deshabilitado", "App_status_error_disabled": "Deshabilitado: error desconocido", "App_status_initialized": "Inicializado", - "App_status_invalid_license_disabled": "Desabilitado: Licencia no válida", + "App_status_invalid_license_disabled": "Deshabilitado: Licencia no válida", "App_status_invalid_settings_disabled": "Deshabilitado: Configuración necesaria", "App_status_manually_disabled": "Deshabilitado: Manualmente", "App_status_manually_enabled": "Habilitado", @@ -417,10 +421,10 @@ "Apps_Framework_Development_Mode_Description": "El modo de desarrollo permite la instalación de aplicaciones que no son del Marketplace de Rocket.Chat.", "Apps_Framework_enabled": "Habilitar el marco de aplicaciones", "Apps_Game_Center": "Centro de juegos", - "Apps_Game_Center_Back": "Volver al centro de juegos", + "Apps_Game_Center_Back": "Volver al Centro de juegos", "Apps_Game_Center_enabled": "Habilitar el Centro de Juegos", "Apps_Game_Center_Invite_Friends": "Invita a tus amigos a unirse", - "Apps_Game_Center_Play_Game_Together": "@here ¡__name__ juguemos juntos!", + "Apps_Game_Center_Play_Game_Together": "@aqui __name__ juguemos juntos!", "Apps_Interface_IPostExternalComponentClosed": "Evento que ocurre después de que un componente externo es cerrado", "Apps_Interface_IPostExternalComponentOpened": "Evento que ocurre después de que un componente externo es abierto", "Apps_Interface_IPostMessageDeleted": "Evento que ocurre después de que un componente externo es eliminado", @@ -455,14 +459,43 @@ "Apps_Marketplace_pricingPlan_yearly_perUser": "__price__ / año por usuario", "Apps_Marketplace_Uninstall_App_Prompt": "¿Quieres realmente desinstalar esta aplicación?", "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "Desinstalar de todos modos", - "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "Esta aplicación tiene una suscripción activa y al desinstalarla no se cancelará. Si quisieras hacerlo, por favor, modifica tu suscripción antes de desinstalarla.", + "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "Esta aplicación tiene una suscripción activa y la desinstalación no la cancelará. Si desea hacer eso, modifique su suscripción antes de desinstalar.", + "Apps_Permissions_Review_Modal_Title": "Revisar permisos", + "Apps_Permissions_No_Permissions_Required": "La aplicación no requiere permisos adicionales", + "Apps_Permissions_user_read": "Leer la información básica del usuario", + "Apps_Permissions_user_write": "Modificar la información del usuario", + "Apps_Permissions_upload_read": "Cargar lectura", + "Apps_Permissions_upload_write": "Cargar Archivos", + "Apps_Permissions_server-setting_read": "Leer la información del servidor", + "Apps_Permissions_server-setting_write": "Modificar la información del servidor", + "Apps_Permissions_room_read": "Leer información de salas", + "Apps_Permissions_room_write": "Modificar la información de las salas", + "Apps_Permissions_message_read": "Leer mensajes", + "Apps_Permissions_message_write": "Enviar y modificar mensajes", + "Apps_Permissions_livechat-status_read": "Acceder a la información de estado de Livechat", + "Apps_Permissions_livechat-custom-fields_write": "Modificar la configuración de los campos personalizados de Livechat", + "Apps_Permissions_livechat-visitor_read": "Acceder a la información de los visitantes de Livechat", + "Apps_Permissions_livechat-visitor_write": "Modificar la información de los visitantes de Livechat", + "Apps_Permissions_livechat-message_read": "Acceder a la información de los mensajes de Livechat", + "Apps_Permissions_livechat-message_write": "Modificar la información de los mensajes de Livechat", + "Apps_Permissions_livechat-room_read": "Acceder a la información de la sala Livechat", + "Apps_Permissions_livechat-room_write": "Modificar la información de la sala Livechat", + "Apps_Permissions_livechat-department_read": "Acceder a la información del departamento de Livechat", + "Apps_Permissions_livechat-department_write": "Modificar la información del departamento de Livechat", + "Apps_Permissions_slashcommand": "Registrar nuevos comandos de barra", + "Apps_Permissions_apis": "Registrar nuevos puntos finales HTTP", + "Apps_Permissions_env_read": "Acceda a información mínima sobre este entorno de servidor", + "Apps_Permissions_networking": "Acceso a esta red de servidores", + "Apps_Permissions_persistence": "Almacenar datos internos en la base de datos", + "Apps_Permissions_scheduler": "Registrar y mantener los trabajos programados", + "Apps_Permissions_ui_interact": "Interactuar con la interfaz de usuario", "Apps_Settings": "Configuración de la aplicación", "Apps_User_Already_Exists": "El nombre de usuario \"__username__\" ya está en uso. Renombre o elimine el usuario que lo utiliza para instalar esta aplicación", "Apps_WhatIsIt": "Aplicaciones: ¿Qué son?", "Apps_WhatIsIt_paragraph1": "¡Un nuevo ícono en el área de administración! ¿Qué significa esto y qué son las aplicaciones?", "Apps_WhatIsIt_paragraph2": "En primer lugar, las aplicaciones en este contexto no se refieren a las aplicaciones móviles. De hecho, sería mejor pensar en ellos en términos de complementos o integraciones avanzadas.", - "Apps_WhatIsIt_paragraph3": "En segundo lugar, son scripts dinámicos o paquetes que le permitirán personalizar su instancia de Rocket.Chat sin tener que bifurcar la base de código. Pero tenga en cuenta que este es un nuevo conjunto de características y debido a eso puede no ser 100% estable. Además, aún estamos desarrollando el conjunto de características para que no todo se pueda personalizar en este momento. Para obtener más información sobre cómo empezar a desarrollar una aplicación, vaya aquí para leer:", - "Apps_WhatIsIt_paragraph4": "Pero dicho esto, si está interesado en habilitar esta función y probarla, haga clic en este botón para habilitar el sistema de aplicaciones.", + "Apps_WhatIsIt_paragraph3": "En segundo lugar, son scripts o paquetes dinámicos que le permitirán personalizar su instancia de Rocket.Chat sin tener que bifurcar el código base. Pero tenga en cuenta que este es un nuevo conjunto de características y, debido a eso, es posible que no sea 100% estable. Además, todavía estamos desarrollando el conjunto de funciones, por lo que no todo se puede personalizar en este momento. Para obtener más información sobre cómo comenzar a desarrollar una aplicación, vaya aquí para leer:", + "Apps_WhatIsIt_paragraph4": "Pero dicho esto, si está interesado en habilitar esta función y probarla, haga clic aquí para habilitar el sistema de aplicaciones.", "Archive": "Archivo", "archive-room": "Archivar sala", "archive-room_description": "Permiso para archivar un canal", @@ -475,7 +508,7 @@ "Assets": "Recursos", "Assign_admin": "Asignando administrador", "Assign_new_conversations_to_bot_agent": "Asignar nuevas conversaciones al agente bot", - "Assign_new_conversations_to_bot_agent_description": "El sistema de enrutamiento intentará encontrar un agente bot antes de dirigir nuevas conversaciones a un agente humano.", + "Assign_new_conversations_to_bot_agent_description": "El sistema de enrutamiento intentará encontrar un agente bot antes de dirigir las nuevas conversaciones a un agente humano.", "assign-admin-role": "Asignar Rol de Administrador", "assign-admin-role_description": "Permiso para asignar el rol admin a otros usuarios", "assign-roles": "Asignar roles", @@ -486,7 +519,7 @@ "Attribute_handling": "Manejo de atributos", "Audio": "Audio", "Audio_message": "Mensaje de audio", - "Audio_Notification_Value_Description": "Puede ser cualquier sonido personalizado o por defecto: beep, chelle, ding, droplet, highbell, seasons", + "Audio_Notification_Value_Description": "Puede ser cualquier sonido personalizado o los predeterminados: bip, chelle, ding, droplet, highbell, seasons", "Audio_Notifications_Default_Alert": "Alerta Predeterminada para Notificaciones de Audio", "Audio_Notifications_Value": "Audio de notificación de mensaje predeterminado", "Audios": "Audios", @@ -502,7 +535,7 @@ "Auto_Translate": " Traducción Automática", "auto-translate": "Traducción Automática", "auto-translate_description": "Permiso para utilizar la herramienta de traducción automática", - "AutoLinker": "AutoLinker", + "AutoLinker": "Enlace Automático", "AutoLinker_Email": "AutoLinker Correo Electrónico", "AutoLinker_Phone": "AutoLinker Teléfono", "AutoLinker_Phone_Description": "Enlaza automáticamente los números de teléfono. Ej:`(123) 456-7890`", @@ -521,7 +554,7 @@ "AutoTranslate_Enabled_Description": "Habilitar la traducción automática, permite a las personas con la licencia de auto-traducción que todos los mensajes se traduzcan automáticamente a su idioma seleccionado. Se pueden aplicar cargos.", "AutoTranslate_Google": "Google", "AutoTranslate_Microsoft": "Microsoft", - "AutoTranslate_Microsoft_API_Key": "AutoTranslate Microsoft API Key (Ocp-Apim-Subscription-Key)", + "AutoTranslate_Microsoft_API_Key": "Ocp-Apim-Subscription-Key", "AutoTranslate_ServiceProvider": "Proveedor del servicio", "Available": "Disponible", "Available_agents": "Agentes disponibles", @@ -554,10 +587,14 @@ "Back_to_login": "Volver a iniciar sesión", "Back_to_Manage_Apps": "Volver a Administrar Aplicaciones", "Back_to_permissions": "Volver a permisos", - "Back_to_room": "Volver a", + "Back_to_room": "Volver a Room", "Backup_codes": "Respaldar códigos", "ban-user": "Prohibir Usuario", "ban-user_description": "Permiso para prohibir a un usuario de un canal", + "BBB_End_Meeting": "Finalizar reunión", + "BBB_Join_Meeting": "Unirse a la reunión", + "BBB_Start_Meeting": "Iniciar reunión", + "BBB_You_have_no_permission_to_start_a_call": "No tienes permiso para iniciar una llamada.", "Best_first_response_time": "Mejor tiempo de primera respuesta", "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "Característica beta. Depende de la videoconferencia para habilitarlo.", "Better": "Mejor", @@ -575,8 +612,8 @@ "Block_Multiple_Failed_Logins_Time_To_Unblock_By_User_In_Minutes": "Tiempo para desbloquear al usuario (en minutos)", "Block_User": "Bloquear Usuario", "Blockchain": "Blockchain", - "Blockstack_Auth_Description": "Descripción auth", - "Blockstack_ButtonLabelText": "Texto de etiqueta de botón", + "Blockstack_Auth_Description": "Descripción Autenticación", + "Blockstack_ButtonLabelText": "Texto de la etiqueta del botón", "Blockstack_Generate_Username": "Generar nombre de usuario", "Body": "Cuerpo", "bold": "negrita", @@ -585,6 +622,7 @@ "BotHelpers_userFields_Description": "CSV de los campos de usuario a los que se puede acceder mediante los métodos de bots helper.", "Bots": "Bots", "Branch": "Rama", + "Broadcast": "Difusión", "Broadcast_channel": "Canal de transmisión", "Broadcast_channel_Description": "Solo los usuarios autorizados pueden escribir mensajes nuevos, pero los otros usuarios podrán responder", "Broadcast_Connected_Instances": "Instancias conectadas de transmisión", @@ -593,7 +631,7 @@ "Broadcasting_client_secret": "Secreto de cliente de transmisión", "Broadcasting_enabled": "Habilitar transmisión", "Broadcasting_media_server_url": "URL del servidor de medios de transmisión", - "Browse_Files": "Examinar archivos", + "Browse_Files": "Búsqueda de archivos", "Browser_does_not_support_audio_element": "Su navegador no soporta el elemento de audio.", "Browser_does_not_support_video_element": "Su navegador no soporta el elemento de vídeo.", "Bugsnag_api_key": "Clave API de Bugsnag", @@ -602,11 +640,11 @@ "bulk-register-user_description": "Permiso para creación masiva de usuarios", "Busiest_day": "Día más ocupado", "Busiest_time": "Tiempo más ocupado", - "Business_Hour": "Horario de oficina", - "Business_Hour_Removed": "Horario de oficina eliminado", - "Business_Hours": "Horas de oficina", - "Business_hours_enabled": "Horas de oficina habilitado", - "Business_hours_updated": "Horas de oficina actualizado", + "Business_Hour": "Horario comercial", + "Business_Hour_Removed": "Horario comercial eliminado", + "Business_Hours": "Horas comercial", + "Business_hours_enabled": "Horas Comercial habilitado", + "Business_hours_updated": "Horas comercial actualizado", "busy": "ocupado", "Busy": "Ocupado", "busy_female": "ocupada", @@ -616,22 +654,22 @@ "by": "por", "By_author": "Por __author__", "cache_cleared": "Caché borrada", - "Call": "Llamar", + "Call": "Llamada", "call-management": "Gestión de llamadas", "Caller": "Emisor", "Cancel": "Cancelar", "Cancel_message_input": "Cancelar", "Canceled": "Cancelado", - "Canned Responses": "Modelos de respuesta", - "Canned_Response_Removed": "Modelo de respuesta eliminado", - "Canned_Responses_Enable": "Habilitar modelos de respuesta", + "Canned Responses": "Respuesta predefinida", + "Canned_Response_Removed": "Respuesta predefinida eliminada", + "Canned_Responses_Enable": "Habilitar respuesta predefinida", "Cannot_invite_users_to_direct_rooms": "No es posible invitar a los usuarios a las salas directas", "Cannot_open_conversation_with_yourself": "No es posible dirigir el mensaje contigo mismo", "Cannot_share_your_location": "No es posible compartir tu ubicación", - "CAS_autoclose": "Cierre automático de la ventana emergente de inicio de sesión", + "CAS_autoclose": "Ventana emergente de cierre automático de sesión", "CAS_base_url": "URL base de SSO", "CAS_base_url_Description": "La URL base de su servicio de SSO externo, por ejemplo: https: //sso.example.undef/sso/", - "CAS_button_color": "Color de fondo para el botón de inicio de sesión", + "CAS_button_color": "Color de fondo del botón de inicio de sesión", "CAS_button_label_color": "Color del texto del botón de inicio de sesión", "CAS_button_label_text": "Etiqueta del botón de inicio de sesión", "CAS_Creation_User_Enabled": "Permitir crear usuarios", @@ -640,7 +678,7 @@ "CAS_Login_Layout": "Diseño de inicio de sesión de CAS", "CAS_login_url": "URL de login del SSO", "CAS_login_url_Description": "La URL de inicio de sesión de su servicio de SSO externo, por ejemplo: https: //sso.example.undef/sso/login", - "CAS_popup_height": "Alto de la ventana emergente de inicio de sesión", + "CAS_popup_height": "Altura de la ventana emergente de inicio de sesión", "CAS_popup_width": "Ancho de la ventana emergente de inicio de sesión", "CAS_Sync_User_Data_Enabled": "Sincronizar siempre los datos de usuario", "CAS_Sync_User_Data_Enabled_Description": "Sincronizar siempre los datos de usuario de CAS externos en los atributos disponibles al iniciar sesión. Nota: los atributos siempre se sincronizan al crear la cuenta de todos modos.", @@ -653,7 +691,7 @@ "Categories": "Categorías", "CDN_JSCSS_PREFIX": "Prefijo CDN para JS/CSS", "CDN_PREFIX": "Prefijo de CDN", - "CDN_PREFIX_ALL": "Utilizar prefijo CDN para todos los recursos", + "CDN_PREFIX_ALL": "Utilizar prefijo CDN para todos los activos", "Certificates_and_Keys": "Certificados y Claves", "Change_Room_Type": "Cambiar el Tipo de Sala", "Changing_email": "Cambiando correo electrónico", @@ -673,6 +711,7 @@ "Channels": "Canales", "Channels_are_where_your_team_communicate": "Los canales son donde tu equipo se comunica", "Channels_list": "Lista de canales públicos", + "Channel_what_is_this_channel_about": "¿De qué trata este canal?", "Chart": "Gráfico", "Chat_button": "Botón de chat", "Chat_close": "Cerrar chat", @@ -699,17 +738,17 @@ "Chatpal_Base_URL_Description": "Encuentre alguna descripción sobre cómo ejecutar una instancia local en github. La URL debe ser absoluta y apuntar al núcleo de chatpal, p. http://localhost: 8983/solr/chatpal.", "Chatpal_Batch_Size": "Tamaño de lote de índice", "Chatpal_Batch_Size_Description": "El tamaño del lote de los documentos de índice (en el arranque)", - "Chatpal_channel_not_joined_yet": "Chatpal canal aún no unido", + "Chatpal_channel_not_joined_yet": "Channel canal aún no unido", "Chatpal_create_key": "Crear clave", "Chatpal_created_key_successfully": "API-Key creada con éxito", - "Chatpal_Current_Room_Only": "Solo la misma sala", + "Chatpal_Current_Room_Only": "Misma sala", "Chatpal_Default_Result_Type": "Tipo de resultado predeterminado", - "Chatpal_Default_Result_Type_Description": "Define qué tipo de resultado se muestra por resultado. Todo significa que se proporciona una descripción general para todos los tipos.", + "Chatpal_Default_Result_Type_Description": "Define qué tipo de resultado se muestra por resultado. Todo significa que se proporciona una descripción general de todos los tipos.", "Chat_Duration": "Duración del chat", "Chatpal_Email_Address": "Dirección De Correo Electrónico", "Chatpal_ERROR_Email_must_be_set": "El correo electrónico debe establecerse", - "Chatpal_ERROR_Email_must_be_valid": "El email debe ser válido", - "Chatpal_ERROR_TAC_must_be_checked": "Los términos y condiciones se deben verificar", + "Chatpal_ERROR_Email_must_be_valid": "El correo electrónico debe ser válido", + "Chatpal_ERROR_TAC_must_be_checked": "Deben verificarse los términos y condiciones", "Chatpal_ERROR_username_already_exists": "El nombre de usuario ya existe", "Chatpal_Get_more_information_about_chatpal_on_our_website": "Obtenga más información sobre Chatpal en http://chatpal.io!", "Chatpal_go_to_message": "Saltar", @@ -740,10 +779,10 @@ "Chatpal_Users": "Usuarios", "Chatpal_Welcome": "¡Disfruta tu búsqueda!", "Chatpal_Window_Size": "Tamaño de la ventana de índice", - "Chatpal_Window_Size_Description": "El tamaño de las ventanas de índice en horas (en el arranque)", + "Chatpal_Window_Size_Description": "El tamaño de las ventanas de índice en horas (en arranque)", "Chats_removed": "Chats eliminados", "Check_All": "Seleccionar todo", - "Check_Progress": "Comprobar progreso", + "Check_Progress": "Comprobar progres", "Choose_a_room": "Elija una sala", "Choose_messages": "Elija mensajes", "Choose_the_alias_that_will_appear_before_the_username_in_messages": "Elige el alias que aparecerá antes del nombre de usuario en los mensajes.", @@ -760,7 +799,7 @@ "Click_here": "Haga clic aquí", "Click_here_for_more_details_or_contact_sales_for_a_new_license": "Click aquí para más detalles o contacta con __email__ para una nueva licencia.", "Click_here_for_more_info": "Haga click aquí para más información", - "Click_here_to_enter_your_encryption_password": "Haga click aquí para introducir su contraseña de encriptación ", + "Click_here_to_enter_your_encryption_password": "Haga clic aquí para ingresar su contraseña de cifrado", "Click_here_to_view_and_copy_your_password": "Haga click aquí para ver y copiar su contraseña.", "Click_the_messages_you_would_like_to_send_by_email": "Haga click en los mensajes que desee enviar por correo electrónico", "Click_to_join": "¡Click para unirse!", @@ -773,7 +812,7 @@ "Close_room_description": "Estás a punto de cerrar este chat. ¿Estás seguro de que quieres continuar?", "close-livechat-room": "Cerrar la sala de LiveChat", "close-livechat-room_description": "Permiso para cerrar el canal LiveChat actual", - "close-others-livechat-room": "Cerrar la sala de LiveChat", + "close-others-livechat-room": "Cerrar otra sala de LiveChat", "close-others-livechat-room_description": "Permiso para cerrar otros canales de LiveChat", "Closed": "Cerrado", "Closed_At": "Cerrado en", @@ -781,7 +820,7 @@ "Closed_by_visitor": "Cerrado por el visitante", "Closing_chat": "Cerrando chat", "Closing_chat_message": "Mensaje de chat de cierre", - "Cloud": "Cloud", + "Cloud": "Nube", "Cloud_Apply_Offline_License": "Aplicar licencia fuera de línea", "Cloud_Change_Offline_License": "Cambiar licencia fuera de línea", "Cloud_License_applied_successfully": "¡Licencia aplicada con éxito!", @@ -790,42 +829,43 @@ "Cloud_connectivity": "Conectividad de la nube", "Cloud_address_to_send_registration_to": "La dirección a la que enviar el correo electrónico de registro en la nube.", "Cloud_click_here": "Después de copiar el texto, ve a la consola Cloud. [Haga clic aquí](__cloudConsoleUrl__)", - "Cloud_console": "Consola Cloud", + "Cloud_console": "Consola en la nube", "Cloud_error_code": "Código: __errorCode__", "Cloud_error_in_authenticating": "Error durante la autenticación", "Cloud_Info": "Infomación Cloud", - "Cloud_login_to_cloud": "Inicia sesión en Rocket.Chat Cloud", + "Cloud_login_to_cloud": "Inicie sesión en Rocket.Chat Cloud", "Cloud_logout": "Cierre sesión de Rocket.Chat Cloud", "Cloud_manually_input_token": "Introduzca el token recibido en el correo electrónico de registro en la nube.", - "Cloud_register_error": "Ha habido un error al tratar de procesar su solicitud. Por favor, inténtelo de nuevo más tarde.", - "Cloud_Register_manually": "Registrar manualmente", - "Cloud_register_offline_finish_helper": "Después de completar el proceso de registro en la consola Cloud se le presentará un texto. Por favor, pégalo aquí para terminar el registro.", - "Cloud_register_offline_helper": "Los espacios de trabajo pueden registrarse manualmente si el acceso a la red está restringido. Copia el texto de abajo y ve a nuestra consola Cloud para completar el proceso.", - "Cloud_register_success": "¡Su espacio de trabajo ha sido registrado correctamente!", + "Cloud_register_error": "Ha habido un error al intentar procesar su solicitud. Por favor, inténtelo de nuevo más tarde.", + "Cloud_Register_manually": "Registrarse sin conexión", + "Cloud_register_offline_finish_helper": "Después de completar el proceso de registro en Cloud Console, debería aparecer un texto. Péguelo aquí para finalizar el registro.", + "Cloud_register_offline_helper": "Los espacios de trabajo se pueden registrar manualmente si se restringe el acceso a la red o el espacio de aire. Copie el texto a continuación y vaya a nuestra consola en la nube para completar el proceso.", + "Cloud_register_success": "¡Su espacio de trabajo se ha registrado correctamente!", "Cloud_registration_pending_html": "Las notificaciones en dispositivos móviles no funcionaran hasta que el registro haya finalizado. Leer más", - "Cloud_registration_pending_title": "El registro Cloud todavía está pendiente", + "Cloud_registration_pending_title": "El registro en la nube aún está pendiente", "Cloud_registration_required": "Se requiere registro", "Cloud_registration_required_description": "Parece que durante la configuración no eligió registrar su espacio de trabajo.", "Cloud_registration_required_link_text": "Haga clic aquí para registrar su espacio de trabajo.", "Cloud_resend_email": "Reenviar correo electrónico", "Cloud_Service_Agree_PrivacyTerms": "Acuerdos y términos de privacidad del servicio en la nube", "Cloud_Service_Agree_PrivacyTerms_Description": "Estoy de acuerdo con los Términos & Política de privacidad", - "Cloud_Service_Agree_PrivacyTerms_Login_Disabled_Warning": "Debe aceptar los términos de privacidad de la nube (Asistente de configuración > Información de la nube > Acuerdo de términos de privacidad del servicio de nube) para conectarse a su espacio de trabajo en la nube.", - "Cloud_status_page_description": "Si está teniendo problemas con un servicio en particular de la nube, puede comprobar los problemas conocidos en nuestra página de estado en", + "Cloud_Service_Agree_PrivacyTerms_Login_Disabled_Warning": "Debe aceptar los términos de privacidad de la nube (Asistente de configuración> Información de la nube> Acuerdo de términos de privacidad del servicio de nube) para conectarse a su espacio de trabajo en la nube.", + "Cloud_status_page_description": "Si un Servicio de Cloud en particular tiene problemas, puede verificar los problemas conocidos en nuestra página de estado en", "Cloud_token_instructions": "Para registrar su espacio de trabajo, vaya a Cloud Console. Inicie sesión o cree una cuenta y haga clic en registrarse autogestionado. Pegue el token proporcionado a continuación", "Cloud_troubleshooting": "Solución de problemas", "Cloud_update_email": "Actualizar correo electrónico", "Cloud_what_is_it": "¿Que es esto?", - "Cloud_what_is_it_additional": "Además, podrá gestionar las licencias, la facturación y el soporte desde la consola de Rocket.Chat Cloud.", + "Cloud_what_is_it_additional": "Además, podrá administrar licencias, facturación y soporte desde la consola de la nube Rocket.Chat.", "Cloud_what_is_it_description": "Rocket.Chat Cloud Connect le permite conectar su espacio de trabajo Rocket.Chat con los servicios que ofrecemos en nuestra nube.", "Cloud_what_is_it_services_like": "Servicios como:", - "Cloud_workspace_connected": "Su espacio de trabajo está conectado a Rocket.Chat Cloud. Autenticarse aquí en su cuenta de Rocket.Chat Cloud le permitirá interactuar con algunos servicios como el Marketplace.", + "Cloud_workspace_connected": "Su espacio de trabajo está conectado a Rocket.Chat Cloud. Iniciar sesión en su cuenta de Rocket.Chat Cloud aquí le permitirá interactuar con algunos servicios como el marketplace.", "Cloud_workspace_connected_plus_account": "Su área de trabajo ahora está conectada a Rocket.Chat Cloud y una cuenta está asociada.", - "Cloud_workspace_connected_without_account": "Su espacio de trabajo está ahora conectado a Rocket.Chat Cloud. Si lo desea, puede autenticarse en Rocket.Chat Cloud y asociar su espacio de trabajo con su cuenta de Cloud.", - "Cloud_workspace_disconnect": "Si ya no desea utilizar los servicios de la nube puede desconectar su espacio de trabajo de Rocket.Chat Cloud.", - "Cloud_workspace_support": "Si tienes problemas con un servicio en la nube, por favor intenta sincronizarlo primero. Si el problema persiste, por favor abra un ticket de soporte en Cloud Console.", + "Cloud_workspace_connected_without_account": "Su espacio de trabajo ahora está conectado a Rocket.Chat Cloud. Si lo desea, puede iniciar sesión en Rocket.Chat Cloud y asociar su espacio de trabajo con su cuenta en la nube.", + "Cloud_workspace_disconnect": "Si ya no desea utilizar los servicios en la nube, puede desconectar su espacio de trabajo de Rocket.Chat Cloud.", + "Cloud_workspace_support": "Si tiene problemas con un servicio en la nube, intente sincronizar primero. Si el problema persiste, abra un ticket de soporte en Cloud Console.", "Collaborative": "Colaboración", - "Collapse_Embedded_Media_By_Default": "Contraer medios incrustados de forma predeterminada", + "Collapse": "Caída", + "Collapse_Embedded_Media_By_Default": "Contraer medios integrados de forma predeterminada", "color": "Color", "Color": "Color", "Colors": "Colores", @@ -838,17 +878,20 @@ "Commit_details": "Detalles de la transacción", "Completed": "Completado", "Computer": "Ordenador", + "Configure_Incoming_Mail_IMAP": "Configurar el correo entrante (IMAP)", + "Configure_Outgoing_Mail_SMTP": "Configurar el correo saliente (SMTP)", "Confirm_new_encryption_password": "Confirmar la nueva contraseña de cifrado", "Confirm_new_password": "Confirmar nueva contraseña", "Confirm_New_Password_Placeholder": "Por favor, vuelva a ingresar una nueva contraseña ...", "Confirm_password": "Confirma tu contraseña", "Connect": "Conectar", + "Connect_SSL_TLS": "Conectar con SSL / TLS", "Connection_Closed": "Conexión cerrada", "Connection_Reset": "Conexión restablecida", "Connection_success": "LDAP Conexión exitosa", "Connectivity_Services": "Servicios de conectividad", "Consulting": "Consultante", - "Consumer_Goods": "Bienes de consumo", + "Consumer_Packaged_Goods": "Bienes de consumo envasados", "Contact": "Contacto", "Contacts": "Contactos", "Contact_Name": "Nombre del contacto", @@ -866,7 +909,7 @@ "Conversation_closing_tags": "Etiquetas de cierre de la conversación", "Conversation_closing_tags_description": "Las etiquetas de cierre se asignarán automáticamente a las conversaciones al cierre.", "Conversation_finished": "Conversación terminada", - "Conversation_finished_message": "Mensaje de conversación terminada", + "Conversation_finished_message": "Mensaje de conversación finalizada", "Conversation_finished_text": "Texto de conversación finalizada", "conversation_with_s": "la conversación con %s", "Conversations": "Conversaciones", @@ -973,7 +1016,7 @@ "Country_Guinea_bissau": "Guinea-Bissau", "Country_Guyana": "Guayana", "Country_Haiti": "Haití", - "Country_Heard_Island_and_Mcdonald_Islands": "Islas Heard y Mcdonald", + "Country_Heard_Island_and_Mcdonald_Islands": "Isla Heard e Islas Mcdonald", "Country_Holy_See_Vatican_City_State": "Santa Sede (estado de la Ciudad del Vaticano)", "Country_Honduras": "Honduras", "Country_Hong_Kong": "Hong Kong", @@ -981,7 +1024,7 @@ "Country_Iceland": "Islandia", "Country_India": "India", "Country_Indonesia": "Indonesia", - "Country_Iran_Islamic_Republic_of": "Irán (República Islámica de", + "Country_Iran_Islamic_Republic_of": "República Islámica de Irán ", "Country_Iraq": "Irak", "Country_Ireland": "Irlanda", "Country_Israel": "Israel", @@ -992,8 +1035,8 @@ "Country_Kazakhstan": "Kazajstán", "Country_Kenya": "Kenia", "Country_Kiribati": "Kiribati", - "Country_Korea_Democratic_Peoples_Republic_of": "República de Corea, Popular Democrática de", - "Country_Korea_Republic_of": "Corea, república de", + "Country_Korea_Democratic_Peoples_Republic_of": "República Popular Democrática de Corea", + "Country_Korea_Republic_of": "Corea, República de", "Country_Kuwait": "Kuwait", "Country_Kyrgyzstan": "Kirguistán", "Country_Lao_Peoples_Democratic_Republic": "República Democrática Popular Lao", @@ -1093,7 +1136,7 @@ "Country_Tanzania_United_Republic_of": "Tanzania, República Unida de", "Country_Thailand": "Tailandia", "Country_Timor_leste": "Timor-leste", - "Country_Togo": "Ir", + "Country_Togo": "Togo", "Country_Tokelau": "Tokelau", "Country_Tonga": "Tonga", "Country_Trinidad_and_Tobago": "Trinidad y Tobago", @@ -1122,6 +1165,7 @@ "Country_Zimbabwe": "Zimbabue", "Cozy": "Acogedor", "Create": "Crear", + "Create_channel": "Crear Channel", "Create_A_New_Channel": "Crear un nuevo canal", "Create_new": "Crear nuevo", "Create_unique_rules_for_this_channel": "Crea reglas únicas para este canal", @@ -1165,14 +1209,15 @@ "Custom_Emoji_Has_Been_Deleted": "El emoji personalizado ha sido eliminado.", "Custom_Emoji_Info": "Información personalizada de Emoji", "Custom_Emoji_Updated_Successfully": "Emoji personalizado actualizado con éxito", - "Custom_Field_Removed": "Campo personalizado eliminado", "Custom_Fields": "Campos Personalizados", + "Custom_Field_Removed": "Campo personalizado eliminado", + "Custom_Field_Not_Found": "Campo personalizado no encontrado", "Custom_oauth_helper": "Mientras configura el Proveedor de OAuth, tendra que establecer un URL de Devolucion. Use %s.", "Custom_oauth_unique_name": "Nombre único de oauth personalizado", "Custom_Script_Logged_In": "Script personalizado para los usuarios que han iniciado sesión", - "Custom_Script_Logged_In_Description": "Script personalizado que se ejecutará SIEMPRE y a CUALQUIER usuario que esté conectado, por ejemplo (siempre que entres en el chat y estés conectado)", + "Custom_Script_Logged_In_Description": "Script personalizado que se ejecutará SIEMPRE y para CUALQUIER usuario que esté conectado. (cada vez que ingresa al chat y está conectado)", "Custom_Script_Logged_Out": "Script personalizado para los usuarios que han cerrado sesión", - "Custom_Script_Logged_Out_Description": "Script personalizado que se ejecutará SIEMPRE y a CUALQUIER usuario que NO esté conectado. Por ejemplo (cada vez que entre en la página de acceso)", + "Custom_Script_Logged_Out_Description": "Script personalizado que se ejecutará SIEMPRE y para CUALQUIER usuario que NO haya iniciado sesión. (siempre que ingrese a la página de inicio de sesión)", "Custom_Script_On_Logout": "Script personalizado para el flujo de cierre de sesión", "Custom_Script_On_Logout_Description": "Script personalizado que se ejecutará UNICAMENTE en el flujo de cierre de sesión", "Custom_Scripts": "Scripts Personalizados", @@ -1189,9 +1234,9 @@ "Custom_Translations": "Traducciones Personalizadas", "Custom_Translations_Description": "Debe ser un JSON válido donde las claves sean idiomas que contengan un diccionario de clave y traducciones. Ejemplo: {\n \"en\": {\n \"Channels\": \"Rooms\"\n },\n\"pt\": {\n \"Channels\": \"Salas\"\n }\n}", "Custom_User_Status": "Estado de usuario personalizado", - "Custom_User_Status_Add": "Añadir estado de usuario personalizado", - "Custom_User_Status_Added_Successfully": "Estado de usuario personalizado añadido con éxito", - "Custom_User_Status_Delete_Warning": "La eliminación de un estado de usuario personalizado no puede deshacerse.", + "Custom_User_Status_Add": "Agregar estado de usuario personalizado", + "Custom_User_Status_Added_Successfully": "Se agregó correctamente el estado de usuario personalizado", + "Custom_User_Status_Delete_Warning": "La eliminación de un estado de usuario personalizado no se puede deshacer.", "Custom_User_Status_Edit": "Editar estado de usuario personalizado", "Custom_User_Status_Error_Invalid_User_Status": "Estado de usuario no válido", "Custom_User_Status_Error_Name_Already_In_Use": "El nombre de estado de usuario personalizado ya está en uso.", @@ -1217,7 +1262,7 @@ "DDP_Rate_Limit_Connection_By_Method_Requests_Allowed": "Límite de Conexión por Método: peticiones permitidas", "DDP_Rate_Limit_Connection_Enabled": "Límite por Conexión: habilitado", "DDP_Rate_Limit_Connection_Interval_Time": "Límite por Conexión: intervalo de tiempo", - "DDP_Rate_Limit_Connection_Requests_Allowed": "Límite por Conexión: peticiones permitidas", + "DDP_Rate_Limit_Connection_Requests_Allowed": "Límite por conexión: solicitudes permitidas", "DDP_Rate_Limit_IP_Enabled": "Límite por IP: habilitado", "DDP_Rate_Limit_IP_Interval_Time": "Límite por IP: intervalo de tiempo", "DDP_Rate_Limit_IP_Requests_Allowed": "Límite por IP: peticiones permitidas", @@ -1241,7 +1286,7 @@ "Delete_User_Warning": "Eliminar a un usuario causará la eliminación de todos los mensajes creados por dicho usuario. Esta acción no se puede deshacer.", "Delete_User_Warning_Delete": "Eliminar a un usuario causará la eliminación de todos los mensajes creados por dicho usuario. Esta acción no se puede deshacer.", "Delete_User_Warning_Keep": "El usuario será eliminado, pero sus mensajes permanecerán visibles. Esto no se puede deshacer.", - "Delete_User_Warning_Unlink": "Al eliminar un usuario, se eliminará el nombre de usuario de todos sus mensajes. Esto no se puede deshacer.", + "Delete_User_Warning_Unlink": "Eliminar un usuario eliminará el nombre de usuario de todos sus mensajes. Esto no se puede deshacer.", "delete-c": "Eliminar Canales Públicos", "delete-c_description": "Permiso para eliminar canales públicos", "delete-d": "Eliminar mensajes directos", @@ -1277,8 +1322,8 @@ "Direct_Reply": "Respuesta directa", "Direct_Reply_Advice": "Puedes responder directamente a este correo electrónico. No modifique los correos electrónicos anteriores en el hilo.", "Direct_Reply_Debug": "Respuesta directa a la depuración", - "Direct_Reply_Debug_Description": "[Cuidado] Habilitar el modo de depuración mostraría su contraseña en texto plano en la Consola del administrador.", - "Direct_Reply_Delete": "Eliminar correos electrónicos interceptados", + "Direct_Reply_Debug_Description": "[Cuidado] Habilitar el modo de depuración mostraría su 'Contraseña de texto sin formato' en la consola de administración.", + "Direct_Reply_Delete": "Eliminar correos electrónicos", "Direct_Reply_Delete_Description": "[¡Atención!] Si se activa esta opción, todos los mensajes no leídos serán eliminados irrevocablemente, incluso los que no son respuestas directas. El buzón de correo electrónico configurado está entonces siempre vacío y no puede ser procesado en \"paralelo\" por humanos.", "Direct_Reply_Enable": "Habilitar respuesta directa", "Direct_Reply_Enable_Description": "[¡Atención!] Si \"Respuesta Directa\" está habilitado, Rocket.Chat controlará el buzón de correo electrónico configurado. Todos los correos electrónicos no leídos son recuperados, marcados como leídos y procesados. \"Respuesta directa\" sólo debe ser activada si el buzón utilizado está destinado exclusivamente para el acceso de Rocket.Chat y no es leído/procesado \"en paralelo\" por humanos.", @@ -1292,7 +1337,7 @@ "Direct_Reply_Separator": "Separador", "Direct_Reply_Separator_Description": "[Alterar solo si sabe exactamente lo que está haciendo, consulte los documentos]Separator between base & tag part of email", "Direct_Reply_Username": "Nombre de usuario", - "Direct_Reply_Username_Description": "Utilice un correo electrónico absoluto, no se permite el etiquetado, se sobrescribirá", + "Direct_Reply_Username_Description": "Utilice el correo electrónico absoluto, el etiquetado no está permitido, se sobrescribirá", "Directory": "Directorio", "Disable_Facebook_integration": "Deshabilitar la integración de Facebook", "Disable_Notifications": "Deshabilitar notificaciones", @@ -1304,7 +1349,8 @@ "Discard": "Descartar", "Disconnect": "Desconectar", "Discussion": "Discusión", - "Discussion_description": "¡Ayuda a mantener una visión general de lo que está pasando! Al crear una discusión, se crea un subcanal del que seleccionó y ambos se vinculan.", + "Discussion_description": "¡Ayude a mantener una visión general de lo que está sucediendo! Al crear una discusión, se crea un subcanal del que seleccionó y ambos se vinculan.", + "Discussion_first_message_disabled_due_to_e2e": "Puede comenzar a enviar mensajes cifrados de extremo a extremo en esta discusión después de su creación.", "Discussion_first_message_title": "Su mensaje", "Discussion_name": "Nombre de la discusión", "Discussion_start": "Empezar una discusión", @@ -1314,16 +1360,16 @@ "Discussion_title": "Crear una nueva discusión", "discussion-created": "__message__", "Discussions": "Discusiones", - "Display_chat_permissions": "Mostrar los permisos de chat", + "Display_chat_permissions": "Mostrar permisos de chat", "Display_offline_form": "Mostrar formulario fuera línea", - "Display_setting_permissions": "Permisos de visualización para cambiar la configuración", + "Display_setting_permissions": "Mostrar permisos para cambiar la configuración", "Display_unread_counter": "Mostrar el número de mensajes no leídos", "Displays_action_text": "Mostrar texto de la acción", "Do_not_display_unread_counter": "No mostrar ningún contador de este canal", "Do_not_provide_this_code_to_anyone": "No comparta este código con nadie.", "Do_you_want_to_accept": "¿Quieres aceptar?", "Do_you_want_to_change_to_s_question": "Desea cambiar a %s", - "Document_Domain": "Document Domain", + "Document_Domain": "Dominio del documento", "Domain": "Dominio", "Domain_added": "dominio Agregado", "Domain_removed": "Dominio Borrado", @@ -1331,7 +1377,7 @@ "Domains_allowed_to_embed_the_livechat_widget": "Lista de dominios separados por comas que permite incrustar el widget de LiveChat. Déjelo en blanco para permitir todos los dominios.", "Dont_ask_me_again": "¡No me preguntes otra vez!", "Dont_ask_me_again_list": "No me preguntes de nuevo", - "Download_Info": "Información de descarga", + "Download_Info": "Descargar información", "Download_My_Data": "Descargar mis datos (HTML)", "Download_Pending_Files": "Descargar archivos pendientes", "Download_Snippet": "Descargar", @@ -1344,13 +1390,13 @@ "Duplicate_channel_name": "Ya existe un canal con el nombre '%s' ", "Duplicate_file_name_found": "Se encontró un nombre de archivo duplicado.", "Duplicate_private_group_name": "Ya existe un Grupo Privado con el nombre '%s' ", - "Duplicated_Email_address_will_be_ignored": "La dirección de correo electrónico duplicada será ignorada.", + "Duplicated_Email_address_will_be_ignored": "Se ignorará la dirección de correo electrónico duplicada.", "duplicated-account": "Cuenta duplicada", "E2E Encryption": "Cifrado E2E", "E2E_enable": "Habilitar E2E", "E2E_disable": "Deshabilitar E2E", "E2E_Enable_alert": "¡Esta característica está actualmente en beta! Por favor, informa de los errores a github.com/RocketChat/Rocket.Chat/issues y ten en cuenta:- Los mensajes cifrados de las salas cifradas no serán encontrados por las operaciones de búsqueda.- Las aplicaciones móviles pueden no soportar los mensajes cifrados (lo están implementando).- Los bots pueden no ser capaces de ver los mensajes cifrados hasta que implementen el soporte para ello.- Las subidas no serán cifradas en esta versión.", - "E2E_Enable_description": "Habilitar la opción de crear grupos cifrados y poder cambiar los grupos y dirigir los mensajes a cifrar", + "E2E_Enable_description": "Habilite la opción para crear grupos encriptados y poder cambiar grupos y mensajes directos para ser encriptados", "E2E_Enabled": "E2E activado", "E2E_Enabled_Default_DirectRooms": "Habilitar la encriptación para las Rooms directas por defecto", "E2E_Enabled_Default_PrivateRooms": "Habilitar la encriptación para las Rooms privadas por defecto", @@ -1360,7 +1406,7 @@ "E2E_password_request_text": "Para acceder a sus grupos privados cifrados y a los mensajes directos, introduzca su contraseña de cifrado. Necesitas introducir esta contraseña para cifrar/descifrar tus mensajes en cada cliente que utilices, ya que la clave no se almacena en el servidor.", "E2E_password_reveal_text": "Ahora puede crear grupos privados codificados y mensajes directos. También puedes cambiar los grupos privados o mensajes directos existentes a cifrados.Esto es cifrado de extremo a extremo, así que la clave para cifrar/descifrar tus mensajes no se guardará en el servidor. Por esa razón necesitas almacenar esta contraseña en un lugar seguro. Se te pedirá que la introduzcas en otros dispositivos en los que desees utilizar cifrado E2E. ¡Aprende más aquí!Tu contraseña es: %sEsta es una contraseña autogenerada, puedes configurar una nueva contraseña para tu clave de cifrado en cualquier momento desde cualquier navegador en el que hayas introducido la contraseña existente.Esta contraseña sólo se almacena en este navegador hasta que guardes la contraseña y desestimes este mensaje.", "E2E_Reset_Email_Content": "Se ha desconectado automáticamente. Cuando vuelva a iniciar sesión, Rocket.Chat generará una nueva clave y restaurará su acceso a cualquier sala cifrada que tenga uno o más miembros en línea. Debido a la naturaleza del cifrado E2E, Rocket.Chat no podrá restaurar el acceso a ninguna sala cifrada que no tenga miembros en línea.", - "E2E_Reset_Key_Explanation": "Esta opción eliminará su clave E2E actual y le desconectará. Cuando vuelva a iniciar sesión, Rocket.Chat le generará una nueva clave y restaurará su acceso a cualquier sala cifrada que tenga uno o más miembros en línea.Debido a la naturaleza del cifrado E2E, Rocket.Chat no podrá restaurar el acceso a ninguna sala cifrada que no tenga ningún miembro en línea.", + "E2E_Reset_Key_Explanation": "Esta opción eliminará su clave E2E actual y cerrará la sesión.Cuando vuelva a iniciar sesión, Rocket.Chat le generará una nueva clave y restablecerá su acceso a cualquier sala cifrada que tenga uno o más miembros en línea. Debido a la naturaleza del cifrado E2E, Rocket.Chat no podrá restaurar el acceso a ninguna sala cifrada que no tenga miembros en línea", "E2E_Reset_Other_Key_Warning": "Restablecer la clave E2E actual cerrará la sesión del usuario. Cuando el usuario vuelve a iniciar sesión, Rocket.Chat generará una nueva clave y restaurará el acceso del usuario a cualquier sala cifrada que tenga uno o más miembros en línea. Debido a la naturaleza del cifrado E2E, Rocket.Chat no podrá restaurar el acceso a ninguna sala cifrada que no tenga miembros en línea.", "Edit": "Editar", "Edit_Business_Hour": "Editar horario de oficina ", @@ -1406,12 +1452,14 @@ "Email_already_exists": "El correo electrónico ya existe", "Email_body": "Cuerpo del Correo electrónico", "Email_Change_Disabled": "Su administrador ha deshabilitado el cambio de correo electrónico", - "Email_Changed_Description": "Puede utilizar los siguientes marcadores de posición: [email] para el correo electrónico del usuario.[Nombre_del_sitio] y [Site_URL] para el nombre de la aplicación y la URL respectivamente.", + "Email_Changed_Description": "Puede utilizar los siguientes marcadores de posición: [email] para el correo electrónico del usuario.[Site_Name] y [Site_URL] para el nombre de la aplicación y la URL respectivamente.", "Email_Changed_Email_Subject": "[Site_Name] - La dirección de correo electrónico ha sido modificada", "Email_changed_section": "Dirección de correo electrónico modificada", "Email_Footer_Description": "Es posible utilizar los siguientes marcadores: [Site_Name] y [Site_URL] para el nombre de la aplicación y la URL, respectivamente. ", "Email_from": "De", "Email_Header_Description": "Es posible utilizar los siguientes marcadores: [Site_Name] y [Site_URL] para el nombre de la aplicación y la URL, respectivamente. ", + "Email_Inbox": "Bandeja de entrada de correo electrónico", + "Email_Inboxes": "Bandejas de entrada de correo electrónico", "Email_Notification_Mode": "Notificaciones por correo electrónico fuera de línea", "Email_Notification_Mode_All": "Cada Mención/DM", "Email_Notification_Mode_Disabled": "Deshabilitado", @@ -1419,12 +1467,13 @@ "Email_Notifications_Change_Disabled": "El administrador de Rocket.Chat ha desactivado las notificaciones de correo electrónico", "Email_or_username": "Correo electrónico o nombre de usuario", "Email_Placeholder": "Por favor, introduzca su dirección de correo electrónico...", - "Email_Placeholder_any": "Por favor ingrese las direcciones de correo electrónico ...", + "Email_Placeholder_any": "Introduzca las direcciones de correo electrónico...", "email_plain_text_only": "Envía correos electrónicos en texto plano", "email_style_description": "Evitar selectores anidados", "email_style_label": "Estilo de correo electrónico", "Email_subject": "Asunto", "Email_verified": "Correo electrónico verificado", + "Email_sent": "Correo electrónico enviado", "Emails_sent_successfully!": "¡Correo electrónico enviado correctamente!", "Emoji": "Emoji", "Emoji_provided_by_JoyPixels": "Emoji proporcionado por JoyPixels", @@ -1444,6 +1493,7 @@ "Encrypted_channel_Description": "Canal cifrado de extremo a extremo. La búsqueda no funcionará con canales cifrados y es posible que las notificaciones no muestren el contenido de los mensajes.", "Encrypted_message": "Mensaje cifrado", "Encrypted_setting_changed_successfully": "La configuración encriptada se modificó correctamente", + "Encrypted_not_available": "No disponible para Channels Públicos", "Encryption_key_saved_successfully": "Su clave de encriptación se guardó correctamente", "EncryptionKey_Change_Disabled": "No puede establecer una contraseña para su clave de cifrado porque su clave privada no está presente en este cliente. Para establecer una nueva contraseña, necesita cargar su clave privada usando su contraseña existente o usar un cliente donde la clave ya esté cargada.", "End": "Fin", @@ -1487,8 +1537,8 @@ "error-archived-duplicate-name": "Hay un canal archivado con el nombre '__room_name__'", "error-avatar-invalid-url": "URL de avatar inválida: __url__", "error-avatar-url-handling": "Error durante la manipulación de ajuste de imagen de usuario desde una dirección URL (__url__) para __username__", - "error-business-hours-are-closed": "El horario de oficina está cerrado", - "error-canned-response-not-found": "Modelo de respuesta no encontrado", + "error-business-hours-are-closed": "El horario comercial está cerrado", + "error-canned-response-not-found": "Respuesta predefinida no encontrada", "error-cannot-delete-app-user": "No se permite borrar el usuario de la aplicación, desinstale la aplicación correspondiente para eliminarla.", "error-cant-invite-for-direct-room": "No se puede invitar al usuario salas directos", "error-channels-setdefault-is-same": "La configuración predeterminada del canal es la misma a la que se cambiaría.", @@ -1508,7 +1558,7 @@ "error-field-unavailable": "__field__ ya está en uso :(", "error-file-too-large": "El archivo es demasiado grande", "error-forwarding-chat-same-department": "El departamento seleccionado y el actual departamento de la sala son los mismos", - "error-forwarding-department-target-not-allowed": "El envío al departamento de destino no está permitido.", + "error-forwarding-department-target-not-allowed": "No se permite el reenvío al departamento de destino.", "error-guests-cant-have-other-roles": "Los usuarios invitados no pueden tener ningún otro rol.", "error-import-file-extract-error": "No se pudo extraer el archivo de importación.", "error-import-file-is-empty": "El archivo importado parece estar vacío.", @@ -1529,6 +1579,7 @@ "error-invalid-domain": "Dominio no válido", "error-invalid-email": "__email__ email no es válido", "error-invalid-email-address": "Dirección de correo no válida", + "error-invalid-email-inbox": "Bandeja de entrada de correo electrónico no válida", "error-invalid-file-height": "Altura Invalida de Archivo", "error-invalid-file-type": "Tipo Invalido de Archivo", "error-invalid-file-width": "Ancho de archivo no válida", @@ -1539,8 +1590,10 @@ "error-invalid-method": "Método inválido", "error-invalid-name": "Nombre inválido", "error-invalid-password": "Contraseña inválida", + "error-invalid-param": "Parámetro no válido", "error-invalid-params": "Parámetros inválidos", "error-invalid-permission": "Permiso no válido", + "error-invalid-port-number": "Número de puerto no válido", "error-invalid-priority": "Prioridad inválida", "error-invalid-redirectUri": "redirectUri no válida", "error-invalid-role": "Rol no válido", @@ -1557,13 +1610,14 @@ "error-invalid-value": "Valor no válido", "error-invalid-webhook-response": "URL Webhook respondió con un estado distinto de 200", "error-logged-user-not-in-room": "No estás en la sala `%s`", - "error-max-guests-number-reached": "Has alcanzado el número máximo de usuarios invitados permitido por tu licencia. Contacta con sale@rocket.chat para una nueva licencia.", + "error-max-guests-number-reached": "Alcanzó la cantidad máxima de usuarios invitados permitidos por su licencia. Póngase en contacto con sale@rocket.chat para obtener una nueva licencia.", "error-max-number-simultaneous-chats-reached": "Se ha alcanzado el máximo de chats simultáneos por agente.", "error-message-deleting-blocked": "La eliminación de mensajes se encuentra bloqueada", "error-message-editing-blocked": "La edición de mensajes está bloqueada", "error-message-size-exceeded": "El tamaño del mensaje excede de Message_MaxAllowedSize", "error-missing-unsubscribe-link": "Debe proporcionar el enlace [unsubscribe].", "error-no-tokens-for-this-user": "No hay ningún token para este usuario", + "error-no-message-for-unread": "No hay mensajes para marcar como no leídos", "error-not-allowed": "No permitido", "error-not-authorized": "No autorizado", "error-office-hours-are-closed": "El horario de oficina está cerrado.", @@ -1585,15 +1639,15 @@ "error-role-name-required": "El nombre de rol es requerido", "error-room-is-not-closed": "La sala no está cerrada", "error-selected-agent-room-agent-are-same": "El agente seleccionado y el agente de la sala son los mismos", - "error-starring-message": "No se pudo marcar el mensaje como favorito", - "error-tags-must-be-assigned-before-closing-chat": "La(s) etiqueta(s) debe(n) ser asignada(s) antes de cerrar el chat", + "error-starring-message": "No se pudo mirar el mensaje", + "error-tags-must-be-assigned-before-closing-chat": "Se deben asignar etiquetas antes de cerrar el chat", "error-the-field-is-required": " E campo __field__. es requerido", "error-this-is-not-a-livechat-room": "Esta no es una sala de LiveChat", "error-token-already-exists": "Ya existe un token con este nombre", "error-token-does-not-exists": "El token no existe", "error-too-many-requests": "Error, demasiadas peticiones. Por favor más despacio. Debe esperar __seconds__ segundos antes de volver a intentarlo.", "error-transcript-already-requested": "Transcripción ya solicitada", - "error-unpinning-message": "No se pudo quitar el mensaje de fijados", + "error-unpinning-message": "No se pudo desanclar el mensaje", "error-user-has-no-roles": "El usuario no tiene roles", "error-user-is-not-activated": "El usuario no ha sido activado", "error-user-is-not-agent": "El usuario no es un agente de LiveChat", @@ -1621,7 +1675,7 @@ "every_six_hours": "Una vez cada seis horas", "Everyone_can_access_this_channel": "Todos pueden acceder a este canal", "Exact": "Exactamente", - "Example_payload": "Carga útil de ejemplo", + "Example_payload": "Ejemplo de carga útil", "Example_s": "Ejemplo: %s", "except_pinned": "(excepto aquellos que están fijados)", "Exclude_Botnames": "Excluir Bots", @@ -1629,18 +1683,20 @@ "Exclude_pinned": "Excluir mensajes fijados", "Execute_Synchronization_Now": "Ejecutar sincronización ahora", "Exit_Full_Screen": "Salir de pantalla completa", - "Experimental_Feature_Alert": "¡Esta es una característica experimental! Por favor, tenga en cuenta que puede cambiar, fallar o incluso ser eliminada en el futuro sin previo aviso.", + "Expand": "Expandir", + "Experimental_Feature_Alert": "¡Esta es una función experimental! Tenga en cuenta que puede cambiar, romperse o incluso eliminarse en el futuro sin previo aviso.", "Expiration": "Expiración", "Expiration_(Days)": "Expiración (días)", "Export_as_file": "Exportar como archivo", "Export_Messages": "Exportar mensajes", - "Export_My_Data": "Exportar mis datos", + "Export_My_Data": "Exportar mis datos (jSON)", "expression": "Expresión", - "Extended": "Ampliado", + "Extended": "Extendido", "External_Domains": "Dominios externos", "External_Queue_Service_URL": "URL del servicio de cola externa", "External_Service": "Servicio externo", "External_Users": "Usuarios externos", + "Extremely_likely": "Muy probable", "Facebook_Page": "Pagina de Facebook", "Failed": "Error", "Failed_to_activate_invite_token": "Error al activar el token de invitación", @@ -1663,27 +1719,27 @@ "FEDERATION_Discovery_Method": "Método de descubrimiento", "FEDERATION_Discovery_Method_Description": "Puede usar el hub o un SRV y una entrada TXT en sus registros DNS.", "FEDERATION_Domain": "Dominio", - "FEDERATION_Domain_Alert": "No cambie esto después de activar la función, todavía no podemos gestionar los cambios de dominio.", + "FEDERATION_Domain_Alert": "No cambie esto después de habilitar la función, todavía no podemos manejar los cambios de dominio.", "FEDERATION_Domain_Description": "Añada el dominio al que este servidor debería estar vinculado, por ejemplo: @rocket.chat.", "FEDERATION_Enabled": "Intentar integrar la federación de soporte.", "FEDERATION_Enabled_Alert": "La federación de soporte está en progreso. Su uso en un entorno de producción no se recomienda de momento.", "FEDERATION_Error_user_is_federated_on_rooms": "No se puede eliminar a los usuarios federados que pertenecen a las salas", "FEDERATION_Hub_URL": "URL del Hub", - "FEDERATION_Hub_URL_Description": "Establecer la URL del Hub", + "FEDERATION_Hub_URL_Description": "Configure la URL del concentrador, por ejemplo: https://hub.rocket.chat. También se aceptan puertos.", "FEDERATION_Public_Key": "Clave pública", "FEDERATION_Public_Key_Description": "Esta es la clave que necesita para compartir con sus compañeros.", "FEDERATION_Room_Status": "Estado de la federación", "FEDERATION_Status": "Estado", - "FEDERATION_Test_Setup": "Probar configuración", - "FEDERATION_Test_Setup_Error": "No se pudo encontrar el servidor usando esta configuración, por favor, revise la configuración.", - "FEDERATION_Test_Setup_Success": "¡La configuración de federación está funcionando y otros servidores pueden encontrarte!", + "FEDERATION_Test_Setup": "Configuración de prueba", + "FEDERATION_Test_Setup_Error": "No se pudo encontrar su servidor usando su configuración, revise su configuración.", + "FEDERATION_Test_Setup_Success": "¡La configuración de su federación está funcionando y otros servidores pueden encontrarlo!", "FEDERATION_Unique_Id": "ID único", - "FEDERATION_Unique_Id_Description": "Este es el ID de federación único, usado para identificar a tu compañero en la red.", + "FEDERATION_Unique_Id_Description": "Este es el ID único de su federación, que se utiliza para identificar a su par en la red.", "Field": "Campo", "Field_removed": "Campo eliminado", "Field_required": "Campo requerido", "File": "Archivo", - "File_Downloads_Started": "Se iniciaron las descargas de archivos", + "File_Downloads_Started": "Descargas de archivos iniciadas", "File_exceeds_allowed_size_of_bytes": "El archivo supera el tamaño permitido de __size__ ", "File_name_Placeholder": "Buscar archivos...", "File_not_allowed_direct_messages": "El uso compartido de archivos no está permitido en los mensajes directos.", @@ -1694,7 +1750,7 @@ "File_Type": "Tipo de archivo", "File_type_is_not_accepted": "El tipo de archivo no es admitido.", "File_uploaded": "Archivo subido", - "File_uploaded_successfully": "Archivo subido con éxito", + "File_uploaded_successfully": "El archivo ha subido correctamente", "File_URL": "URL del archivo", "files": "archivos", "Files": "Archivos", @@ -1706,10 +1762,10 @@ "FileUpload": "Subir archivos", "FileUpload_Disabled": "No está habilitado subir archivos", "FileUpload_Enable_json_web_token_for_files": "Habilitar la protección de Json Web Tokens para archivos subidos", - "FileUpload_Enable_json_web_token_for_files_description": "Añade un JWT a las url de los archivos subidos", + "FileUpload_Enable_json_web_token_for_files_description": "Agrega un JWT a la URL de los archivos cargados", "FileUpload_Enabled": "Habilitar subir archivos", "FileUpload_Enabled_Direct": "Cargas de archivos habilitadas en mensajes directos", - "FileUpload_Error": "Error al subir el archivo", + "FileUpload_Error": "Error de carga de archivo", "FileUpload_File_Empty": "Archivo Vacio", "FileUpload_FileSystemPath": "Ruta del sistema", "FileUpload_GoogleStorage_AccessId": "ID de acceso de almacenamiento de Google", @@ -1722,13 +1778,13 @@ "FileUpload_GoogleStorage_Proxy_Uploads_Description": "Proxy carga transmisiones de archivos a través de su servidor en lugar de acceso directo a la URL del activo", "FileUpload_GoogleStorage_Secret": "Secreto de almacenamiento de Google", "FileUpload_GoogleStorage_Secret_Description": "Siga estas instrucciones y pegue el resultado aquí.", - "FileUpload_json_web_token_secret_for_files": "Secreto del token web JSON para subir archivos", - "FileUpload_json_web_token_secret_for_files_description": "File Upload Json Web Token Secret (Se utiliza para poder acceder a los archivos subidos sin autenticación)", + "FileUpload_json_web_token_secret_for_files": "Subir archivo con la clave del Json Web Token ", + "FileUpload_json_web_token_secret_for_files_description": "File Upload Json Web Token Secret (se utiliza para poder acceder a los archivos cargados sin autenticación)", "FileUpload_MaxFileSize": "Tamaño Maximo de Subida (en bytes)", "FileUpload_MaxFileSizeDescription": "Establézcalo en -1 para eliminar la limitación del tamaño del archivo.", "FileUpload_MediaType_NotAccepted": "Tipos de medios no aceptados", "FileUpload_MediaTypeBlackList": "Tipos de medios bloqueados", - "FileUpload_MediaTypeBlackListDescription": "Lista separada por comas de los tipos de archivos multimedia. Esta configuración tiene prioridad sobre los tipos de archivos multimedia aceptados.", + "FileUpload_MediaTypeBlackListDescription": "Lista de tipos de medios separados por comas. Esta configuración tiene prioridad sobre los tipos de papel aceptados.", "FileUpload_MediaTypeWhiteList": "Tipos de Archivos Aceptados", "FileUpload_MediaTypeWhiteListDescription": "Lista separada por comas de los tipos de archivos multimedia. Deje en blanco para aceptar todos los tipos.", "FileUpload_ProtectFiles": "Proteger archivos cargados", @@ -1743,9 +1799,9 @@ "FileUpload_S3_CDN": "Dominio CDN para Descargas", "FileUpload_S3_ForcePathStyle": "Estilo de ruta de fuerza", "FileUpload_S3_Proxy_Avatars": "Avatares Proxy", - "FileUpload_S3_Proxy_Avatars_Description": "Transmisiones de archivos proxy avatar a través de su servidor en lugar de acceso directo a la URL del activo", + "FileUpload_S3_Proxy_Avatars_Description": "Proxy transmisiones de archivos de avatar a través de su servidor en lugar de acceso directo a la URL del activo", "FileUpload_S3_Proxy_Uploads": "Subidas de Proxy", - "FileUpload_S3_Proxy_Uploads_Description": "Proxy carga transmisiones de archivos a través de su servidor en lugar de acceso directo a la URL del activo", + "FileUpload_S3_Proxy_Uploads_Description": "Transmisiones de archivos de carga proxy a través de su servidor en lugar de acceso directo a la URL del activo", "FileUpload_S3_Region": "Región", "FileUpload_S3_SignatureVersion": "Versión de firma", "FileUpload_S3_URLExpiryTimeSpan": "Tiempo de caducidad de las URLs", @@ -1753,14 +1809,15 @@ "FileUpload_Storage_Type": "Tipo de Almacenamiento", "FileUpload_Webdav_Password": "Contraseña de WebDAV", "FileUpload_Webdav_Proxy_Avatars": "Avatares Proxy", - "FileUpload_Webdav_Proxy_Avatars_Description": "Transmisiones de archivos proxy avatar a través de su servidor en lugar de acceso directo a la URL del activo", + "FileUpload_Webdav_Proxy_Avatars_Description": "Transmisiones de archivos de avatar a través de su servidor en lugar de acceso directo a la URL del activo", "FileUpload_Webdav_Proxy_Uploads": "Subidas de Proxy", - "FileUpload_Webdav_Proxy_Uploads_Description": "Proxy carga transmisiones de archivos a través de su servidor en lugar de acceso directo a la URL del activo", + "FileUpload_Webdav_Proxy_Uploads_Description": "Transmisiones de archivos de carga proxy a través de su servidor en lugar de acceso directo a la URL del activo", "FileUpload_Webdav_Server_URL": "URL de acceso al servidor WebDAV", "FileUpload_Webdav_Upload_Folder_Path": "Cargar ruta de carpeta", - "FileUpload_Webdav_Upload_Folder_Path_Description": "Ruta de la carpeta WebDAV en la cual los archivos deberían cargarse", + "FileUpload_Webdav_Upload_Folder_Path_Description": "Ruta de la carpeta WebDAV en la que se deben cargar los archivos", "FileUpload_Webdav_Username": "Nombre de usuario WebDAV", "Filter": "Filtro", + "Filters": "Filtros", "Filters_applied": "Filtros aplicados", "Financial_Services": "Servicios financieros", "First_Channel_After_Login": "Primer canal después de iniciar sesión", @@ -1775,17 +1832,17 @@ "Footer_Direct_Reply": "Pie de página cuando la respuesta directa está habilitada", "For_more_details_please_check_our_docs": "Para obtener más detalles, consulte nuestros documentos.", "For_your_security_you_must_enter_your_current_password_to_continue": "Por su seguridad, debe introducir su contraseña actual para continuar", - "Force_Disable_OpLog_For_Cache": "Forzar deshabilitar OpLog para caché", + "Force_Disable_OpLog_For_Cache": "Forzar la desactivación de OpLog para caché", "Force_Disable_OpLog_For_Cache_Description": "No usará OpLog para sincronizar el caché, incluso cuando esté disponible", "Force_Screen_Lock": "Forzar bloqueo de pantalla", "Force_Screen_Lock_After": "Forzar bloqueo de pantalla después de", "Force_Screen_Lock_After_description": "El tiempo para solicitar la contraseña nuevamente después de finalizar la última sesión, en segundos.", - "Force_Screen_Lock_description": "Cuando esté habilitado, obligará a sus usuarios a usar un PIN/BIOMETRÍA/FACEID para desbloquear la aplicación.", + "Force_Screen_Lock_description": "Cuando esté habilitado, obligará a sus usuarios a usar un PIN / BIOMETRÍA / FACEID para desbloquear la aplicación.", "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.", - "Force_visitor_to_accept_data_processing_consent": "Obligar al visitante a aceptar el consentimiento para el procesamiento de datos", + "Force_visitor_to_accept_data_processing_consent": "Obligar al visitante a aceptar el consentimiento del procesamiento de datos", "Force_visitor_to_accept_data_processing_consent_description": "Los visitantes no pueden empezar a chatear sin consentimiento.", - "Force_visitor_to_accept_data_processing_consent_enabled_alert": "El acuerdo con el procesamiento de los datos debe basarse en una comprensión transparente de la razón del procesamiento. Por ello, debe rellenar la siguiente configuración que se mostrará a los usuarios con el fin de proporcionar las razones de la recogida y el procesamiento de su información personal.", + "Force_visitor_to_accept_data_processing_consent_enabled_alert": "El acuerdo con el procesamiento de datos debe basarse en una comprensión transparente del motivo del procesamiento. Debido a esto, debe completar la configuración a continuación que se mostrará a los usuarios para proporcionar las razones para recopilar y procesar su información personal.", "force-delete-message": "Forzar borrar mensaje", "force-delete-message_description": "Permiso para eliminar un mensaje que pasa por alto todas las restricciones", "Forgot_password": "¿Olvidó su contraseña?", @@ -1804,6 +1861,7 @@ "From": "De", "From_Email": "De Correo electrónico", "From_email_warning": "Advertencia: El campo De esta sujeto a la configuración en tu servidor de correo.", + "Full_Name": "Nombre Completo", "Full_Screen": "Pantalla completa", "Gaming": "Juego de azar", "General": "General", @@ -1814,17 +1872,17 @@ "get-password-policy-forbidRepeatingCharacters": "La contraseña no debe contener caracteres repetidos", "get-password-policy-forbidRepeatingCharactersCount": "La contraseña no debe contener más que __forbidRepeatingCharactersCount__ caracteres repetidos", "get-password-policy-maxLength": "La contraseña debe tener un máximo de __maxLength__ caracteres", - "get-password-policy-minLength": "La contraseña debe tener un mímino de __minLength__ caracteres", - "get-password-policy-mustContainAtLeastOneLowercase": "La contraseña debe tener al menos una minúscula", + "get-password-policy-minLength": "La contraseña debe tener un mínimo de __minLength__ caracteres", + "get-password-policy-mustContainAtLeastOneLowercase": "La contraseña debe contener al menos una letra minúscula", "get-password-policy-mustContainAtLeastOneNumber": "La contraseña debe contener al menos un número", "get-password-policy-mustContainAtLeastOneSpecialCharacter": "La contraseña debe tener al menos un carácter especial", - "get-password-policy-mustContainAtLeastOneUppercase": "La contraseña debe tener al menos una mayúscula", + "get-password-policy-mustContainAtLeastOneUppercase": "La contraseña debe contener al menos una letra mayúscula", "github_no_public_email": "No tienes ningún correo electrónico como un correo público en tú cuenta de GitHub", "Give_a_unique_name_for_the_custom_oauth": "Establezca un nombre único para el oauth personalizado", "Give_the_application_a_name_This_will_be_seen_by_your_users": "Dar a la aplicación un nombre. Esto será visto por los usuarios.", "Global": "Global", "Global Policy": "Política global", - "Global_purge_override_warning": "Una política de retención global está en su lugar. Si desactivas \"Anular política de retención global\", solo puedes aplicar una política más estricta que la política global.", + "Global_purge_override_warning": "Existe una política de retención global. Si deja desactivada la opción \"Anular la política de retención global\", solo puede aplicar una política que sea más estricta que la política global.", "Global_Search": "Búsqueda global", "Go_to_your_workspace": "Ve a tu espacio de trabajo", "Google_Vision_usage_limit_exceeded": "Límite de uso de Google Vision excedido", @@ -1848,21 +1906,21 @@ "GoogleVision_Type_SafeSearch": "Detección SafeSearch", "GoogleVision_Type_Similar": "Buscar imágenes similares", "Government": "Gobierno", - "Graphql_CORS": "CORS de GraphQL", + "Graphql_CORS": "GraphQL CORS", "Graphql_Enabled": "GraphQL habilitado", "Graphql_Subscription_Port": "Puerto de suscripción de GraphQL", "Group_by": "Agrupar por", "Group_by_Type": "Agrupar por tipo", - "Group_discussions": "Discusiones de grupo", + "Group_discussions": "Grupos de discusión", "Group_favorites": "Favoritos del grupo", - "Group_mentions_disabled_x_members": "El grupo menciona `@ all` y` @ here` se han inhabilitado para salas con más de __total__ miembros.", + "Group_mentions_disabled_x_members": "Las menciones de grupo `@ all` y` @ here` han sido deshabilitadas para salas con más de __total__ miembros.", "Group_mentions_only": "El grupo solo menciona", "Grouping": "Agrupación", "Hash": "Hash", "Header": "Encabezado", "Header_and_Footer": "Encabezado y Pie de página", - "Healthcare_and_Pharmaceutical": "Salud / Farmacéutica", - "Help_Center": "Centro de ayuda", + "Pharmaceutical": "Farmacéutica", + "Healthcare": "Sanidad", "Helpers": "Ayudantes", "Here_is_your_authentication_code": "Este es su código de autenticación:", "Hex_Color_Preview": "Vista previa de color hexadecimal", @@ -1875,10 +1933,10 @@ "Hide_counter": "Ocultar contador", "Hide_flextab": "Ocultar barra lateral derecha con un click", "Hide_Group_Warning": "¿Seguro que desea ocultar el grupo \"%s\"?", - "Hide_Livechat_Warning": "¿Seguro que quieres ocultar el LiveChat con \"%s\"?", + "Hide_Livechat_Warning": "¿Seguro que quieres ocultar el chat con \"%s\"?", "Hide_Private_Warning": "¿Está seguro de que desea ocultar la discusión con \"%s\"?", "Hide_roles": "Ocultar roles", - "Hide_room": "Ocultar sala", + "Hide_room": "Ocultar", "Hide_Room_Warning": "¿Seguro que desea ocultar la Sala \"%s\"?", "Hide_System_Messages": "Ocultar mensajes de sistema", "Hide_Unread_Room_Status": "Ocultar el estado de una sala no leída", @@ -1887,27 +1945,29 @@ "Highlights_How_To": "Para ser notificado cuando alguien menciona una palabra o frase, añadir aquí. Puede separar las palabras o frases con comas. Resaltar palabras no distingue entre mayúsculas y minúsculas.", "Highlights_List": "Resaltar palabras", "History": "Historial", + "Home": "Inico", "Host": "Anfitrión", + "Hospitality_Businness": "Negocio de Hostelería", "hours": "horas", "Hours": "Horas", "How_friendly_was_the_chat_agent": "¿Ha sido amable el agente de chat?", "How_knowledgeable_was_the_chat_agent": "¿Cuánto sabía el agente de chat?", "How_long_to_wait_after_agent_goes_offline": "Cuánto tiempo esperar después de que el agente se desconecte", - "How_long_to_wait_to_consider_visitor_abandonment": "¿Cuánto tiempo hay que esperar para considerar el abandono de visitantes?", + "How_long_to_wait_to_consider_visitor_abandonment": "¿Cuánto tiempo esperar para considerar el abandono de visitantes?", "How_long_to_wait_to_consider_visitor_abandonment_in_seconds": "¿Cuánto tiempo hay que esperar para considerar el abandono de visitantes?", "How_responsive_was_the_chat_agent": "¿Cómo de rápido ha respondido nuestro agente de chat?", "How_satisfied_were_you_with_this_chat": "¿Cómo de satisfecho está con esta conversación?", - "How_to_handle_open_sessions_when_agent_goes_offline": "Cómo manejar las sesiones abiertas cuando el agente se desconecta", + "How_to_handle_open_sessions_when_agent_goes_offline": "Cómo manejar sesiones abiertas cuando el agente se desconecta", "I_ll_do_it_later": "Lo haré más tarde", "I_saved_my_password_close_this_message": "He guardado mi contraseña, cierra este mensaje", "Idle_Time_Limit": "Tiempo límite de inactividad", - "Idle_Time_Limit_Description": "Periodo de tiempo hasta que el estado cambie para alejarse. El valor debe estar en segundos.", + "Idle_Time_Limit_Description": "Período de tiempo hasta que el estado cambia a ausente. El valor debe estar en segundos.", "if_they_are_from": "(si son de %s)", "If_this_email_is_registered": "Si este correo electrónico está registrado, le enviaremos instrucciones sobre cómo restablecer su contraseña. Si no recibe un correo electrónico en breve, vuelva e intentelo de nuevo.", "If_you_are_sure_type_in_your_password": "Si está seguro escriba su contraseña:", "If_you_are_sure_type_in_your_username": "Si está seguro ingrese su nombre de usuario:", - "If_you_didnt_ask_for_reset_ignore_this_email": "Si no pediste resetear tu contraseña, puedes ignorar este correo electrónico.", - "If_you_didnt_try_to_login_in_your_account_please_ignore_this_email": "Si no has intentado acceder a tu cuenta, por favor, ignora este correo electrónico.", + "If_you_didnt_ask_for_reset_ignore_this_email": "Si no solicitó el restablecimiento de su contraseña, puede ignorar este correo electrónico.", + "If_you_didnt_try_to_login_in_your_account_please_ignore_this_email": "Si no intentó iniciar sesión en su cuenta, ignore este correo electrónico.", "If_you_dont_have_one_send_an_email_to_omni_rocketchat_to_get_yours": "Si no tiene uno, envíe un correo electrónico a [omni@rocket.chat] (mailto: omni@rocket.chat) para obtener el suyo.", "Iframe_Integration": "Integración iframe", "Iframe_Integration_receive_enable": "Habilitar Recibir", @@ -1918,8 +1978,8 @@ "Iframe_Integration_send_enable_Description": "Enviar eventos a la ventana principal", "Iframe_Integration_send_target_origin": "Enviar origen de destino", "Iframe_Integration_send_target_origin_Description": "Origen con prefijo de protocolo, cuyos comandos se envían a, p. 'https://localhost', o * para permitir el envío a cualquier parte.", - "Iframe_Restrict_Access": "Restringir el acceso dentro de cualquier Iframe", - "Iframe_Restrict_Access_Description": "Esta configuración habilita/deshabilita las restricciones para cargar el RC dentro de cualquier iframe", + "Iframe_Restrict_Access": "Restringir el acceso dentro de cualquier iframe", + "Iframe_Restrict_Access_Description": "Esta configuración habilita / deshabilita las restricciones para cargar el RC dentro de cualquier iframe", "Iframe_X_Frame_Options": "Opciones de X-Frame-Options", "Iframe_X_Frame_Options_Description": "Opciones de X-Frame-Options. [Puede consultar más detalles aquí.] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options#Syntax)", "Ignore": "Ignorar", @@ -1976,7 +2036,7 @@ "importer_status_preparing_started": "Leyendo archivos", "importer_status_preparing_users": "Leyendo archivo de usuarios", "importer_status_uploading": "Subiendo archivo", - "importer_status_user_selection": "Preparado para seleccionar lo que se va a importar", + "importer_status_user_selection": "Preparado para seleccionar qué importar", "Importer_Upload_FileSize_Message": "La configuración de su servidor permite subir archivos de tamaño hasta __maxFileSize__.", "Importer_Upload_Unlimited_FileSize": "La configuración de su servidor permite la subida de archivos de cualquier tamaño.", "Importing_channels": "Importando canales", @@ -1984,6 +2044,7 @@ "Importing_messages": "Importando mensajes", "Importing_users": "Importando usuarios", "In_progress": "En progreso", + "Inbox_Info": "Información de la bandeja de entrada", "Include_Offline_Agents": "Incluir agentes fuera de línea", "Inclusive": "Inclusivo", "Incoming_Livechats": "LiveChats entrantes", @@ -2059,7 +2120,7 @@ "InternalHubot_ScriptsToLoad": "Scripts a Cargar", "InternalHubot_ScriptsToLoad_Description": "Por favor introduzca una lista separada por comas de scripts a cargar desde su carpeta personalizada ", "InternalHubot_Username_Description": "Este debe ser un nombre de usuario válido de un bot registrado en su servidor.", - "Invalid Canned Response": "Modelo de respuesta incorrecto", + "Invalid Canned Response": "Respuesta predefinida no válida", "Invalid_confirm_pass": "La confirmación de la contraseña no coincide con la contraseña", "Invalid_Department": "Departamento incorrecto", "Invalid_email": "El e-mail ingresado es invalido", @@ -2092,9 +2153,9 @@ "IRC_Channel_Leave": "Salida del comando PART", "IRC_Channel_Users": "Salida del comando NAMES.", "IRC_Channel_Users_End": "Fin de salida del comando NAMES.", - "IRC_Description": "Internet Relay Chat (IRC) es una herramienta de comunicación grupal basada en texto. Los usuarios se unen a canales o salas con nombres únicos para una discusión abierta. IRC también admite mensajes privados entre usuarios individuales y capacidades de intercambio de archivos. Este paquete integra estas capas de funcionalidad con Rocket.Chat.", + "IRC_Description": "Internet Relay Chat (IRC) es una herramienta de comunicación grupal basada en texto. Los usuarios se unen a canales o salas con nombres exclusivos para una discusión abierta. IRC también admite mensajes privados entre usuarios individuales y capacidades para compartir archivos. Este paquete integra estas capas de funcionalidad con Rocket.Chat.", "IRC_Enabled": "Intentar integrar el soporte de IRC. Cambiar este valor requiere reiniciar Rocket.Chat.", - "IRC_Enabled_Alert": "El soporte de IRC es un trabajo en progreso. No se recomienda el uso en un sistema de producción en este momento.", + "IRC_Enabled_Alert": "El soporte de IRC es un trabajo en progreso. No se recomienda su uso en un sistema de producción en este momento.", "IRC_Federation": "Federación IRC", "IRC_Federation_Disabled": "La Federación IRC está desactivada.", "IRC_Hostname": "El servidor de host IRC para conectarse.", @@ -2110,11 +2171,12 @@ "is_typing": "está escribiendo", "is_typing_female": "esta escribiendo", "is_typing_male": "esta escribiendo", - "Issue_Links": "Emitir enlaces de seguimiento", + "Issue_Links": "Enlaces de seguimiento de problemas", "IssueLinks_Incompatible": "Advertencia: no habilite esto y la 'Vista previa de color hexadecimal' al mismo tiempo.", "IssueLinks_LinkTemplate": "Plantilla para enlaces de problemas", "IssueLinks_LinkTemplate_Description": "Plantilla para enlaces de problemas; %s será reemplazado por el número de problema.", "It_works": "Funciona", + "It_Security": "Seguridad informática", "italic": "Cursiva", "italics": "cursiva", "Items_per_page:": "Elementos por página:", @@ -2123,7 +2185,7 @@ "Jitsi_Chrome_Extension": "Id extensión de Chrome", "Jitsi_Enable_Channels": "Habilitar en Canales", "Jitsi_Enabled_TokenAuth": "Habilitar autenticación JWT", - "Jitsi_Limit_Token_To_Room": "Limitar token a una sala Jitsi", + "Jitsi_Limit_Token_To_Room": "Limitar token a la Room Jitsi", "Job_Title": "Título Profesional", "join": "Unirse", "Join_audio_call": "Unirse a la llamada", @@ -2171,7 +2233,7 @@ "Language_French": "Francés", "Language_German": "Alemán", "Language_Italian": "Italiano", - "Language_Not_set": "No indicado", + "Language_Not_set": "No específico", "Language_Polish": "Polaco", "Language_Portuguese": "Portugués", "Language_Russian": "Ruso", @@ -2210,19 +2272,19 @@ "LDAP_Avatar_Field_Description": "Qué campo se utilizará como *avatar* para los usuarios. Déjelo en blanco para usar `thumbnailPhoto` primero y` jpegPhoto` como respaldo.", "LDAP_Background_Sync": "Sincronización de fondo", "LDAP_Background_Sync_Import_New_Users": "Sincronización de fondo - Importar nuevos usuarios", - "LDAP_Background_Sync_Import_New_Users_Description": "Importará todos los usuarios (según sus criterios de filtro) que existe en LDAP y no existe en Rocket.Chat", + "LDAP_Background_Sync_Import_New_Users_Description": "Importará todos los usuarios (según sus criterios de filtro) que existen en LDAP y no en Rocket.Chat", "LDAP_Background_Sync_Interval": "Intervalo de sincronización de fondo", "LDAP_Background_Sync_Interval_Description": "El intervalo entre sincronizaciones. Ejemplo `cada 24 horas` o` el primer día de la semana`, más ejemplos en [Cron Text Parser] (http://bunkat.github.io/later/parsers.html#text)", "LDAP_Background_Sync_Keep_Existant_Users_Updated": "Actualización de sincronización de fondo de usuarios existentes", - "LDAP_Background_Sync_Keep_Existant_Users_Updated_Description": "Sincronizará el avatar, los campos, el nombre de usuario, etc. (según su configuración) de todos los usuarios ya importados de LDAP cada **Intervalo de sincronización**", + "LDAP_Background_Sync_Keep_Existant_Users_Updated_Description": "Sincronizará el avatar, los campos, el nombre de usuario, etc. (según su configuración) de todos los usuarios ya importados de LDAP en cada ** Intervalo de sincronización **", "LDAP_BaseDN": "Base DN", - "LDAP_BaseDN_Description": "El nombre completo (DN) de un sub-árbol LDAP que desea buscar usuarios y grupos. Se pueden añadir tantos como quiera; sin embargo, cada grupo se debe definir en la misma base de dominio que los usuarios que pertenecen a la misma. Si especifica los grupos de usuarios restringidos, sólo los usuarios que pertenecen a esos grupos serán de alcance. Recomendamos que se especifica el nivel superior del árbol de directorios LDAP como su base de dominio y utiliza filtro de búsqueda para controlar el acceso.", + "LDAP_BaseDN_Description": "El nombre distinguido (DN) completamente calificado de un subárbol LDAP que desea buscar usuarios y grupos. Puede agregar tantos como desee; sin embargo, cada grupo debe estar definido en la misma base de dominio que los usuarios que le pertenecen. Ejemplo: `ou = Usuarios + ou = Proyectos, dc = Ejemplo, dc = com`. Si especifica grupos de usuarios restringidos, solo los usuarios que pertenecen a esos grupos estarán dentro del alcance. Le recomendamos que especifique el nivel superior de su árbol de directorios LDAP como base de su dominio y utilice el filtro de búsqueda para controlar el acceso.", "LDAP_CA_Cert": "CA Cert", "LDAP_Connect_Timeout": "Tiempo de espera de conexión(ms)", "LDAP_Default_Domain": "Dominio Predeterminado", "LDAP_Default_Domain_Description": "Si se proporciona, el Dominio predeterminado se usará para crear un correo electrónico exclusivo para los usuarios donde el correo electrónico no se haya importado de LDAP. El correo electrónico se montará como `username @ default_domain` o` unique_id @ default_domain`.Ejemplo: `rocket.chat`", "LDAP_Default_Role_To_User": "Rol de usuario por defecto", - "LDAP_Default_Role_To_User_Description": "Rol RC por defecto a aplicar al usuario si el usuario tiene algún rol de LDAP que no está mapeado.", + "LDAP_Default_Role_To_User_Description": "El rol RC predeterminado que se aplicará al usuario si el usuario tiene algún rol LDAP que no está asignado.", "LDAP_Description": "LDAP es una base de datos jerárquica que muchas empresas utilizan para proporcionar inicio de sesión único - una instalación para compartir una contraseña entre múltiples sitios y servicios. Para obtener información avanzada de configuración y ejemplos, consulte nuestra wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.", "LDAP_Enable": "Habilitar", "LDAP_Enable_Description": "Intentar utilizar LDAP como método de autenticación ", @@ -2230,9 +2292,9 @@ "LDAP_Encryption": "Cifrado", "LDAP_Encryption_Description": "Metodo de cifrado usado para la comunicación segura hacia el servidor LDAP. Algunos ejemplos 'sin cifrado', 'SSL/LDAPS (cifrado desde el inicio), y 'StartTLS' ( actualizar a comunicaciónes cifradas una vez conectado).", "LDAP_Find_User_After_Login": "Encontrar usuario después de iniciar sesión", - "LDAP_Find_User_After_Login_Description": "Realizará una búsqueda del DN del usuario después de la vinculación para garantizar que el enlace se realizó con éxito, lo que impide el inicio de sesión con contraseñas vacías cuando lo permite la configuración de AD.", + "LDAP_Find_User_After_Login_Description": "Realizará una búsqueda del DN del usuario después de la vinculación para garantizar que la vinculación se realizó correctamente y evitará el inicio de sesión con contraseñas vacías cuando lo permita la configuración de AD.", "LDAP_Group_Filter_Enable": "Habilitar filtro de grupo de usuarios LDAP", - "LDAP_Group_Filter_Enable_Description": "Restringir el acceso a los usuarios en un grupo LDAPÚtil para servidores OpenLDAP sin superposiciones que no permitan el filtro *memberOf*", + "LDAP_Group_Filter_Enable_Description": "Restringir el acceso a los usuarios en un grupo LDAP Útil para permitir que los servidores OpenLDAP sin un filtro * memberOf * restrinjan el acceso por grupos", "LDAP_Group_Filter_Group_Id_Attribute": "Atributo de ID de grupo", "LDAP_Group_Filter_Group_Id_Attribute_Description": "Por ejemplo. *OpenLDAP:* cn", "LDAP_Group_Filter_Group_Member_Attribute": "Atributo de miembro de grupo", @@ -2246,73 +2308,73 @@ "LDAP_Host": "Servidor", "LDAP_Host_Description": "Servidor LDAP, ej. `ldap.example.com` o`10.0.0.30`.", "LDAP_Idle_Timeout": "Tiempo de inactividad (ms)", - "LDAP_Idle_Timeout_Description": "Cuantos milisegundos esperan después de la última operación de LDAP hasta que se cierra la conexión. (Cada operación abrirá una nueva conexión)", + "LDAP_Idle_Timeout_Description": "Cuántos milisegundos esperan después de la última operación LDAP hasta que se cierra la conexión. (Cada operación abrirá una nueva conexión)", "LDAP_Import_Users_Description": "Su verdadero proceso de sincronización importará a todos los usuarios de LDAP*¡Atención!* Especifique el filtro de búsqueda para no importar el exceso de usuarios.", "LDAP_Internal_Log_Level": "Nivel de registro interno", "LDAP_Login_Fallback": "Login Fallback", "LDAP_Login_Fallback_Description": "Si el inicio de sesión en LDAP no es exitoso, intente iniciar sesión en el sistema predeterminado/cuenta local. Ayuda cuando el LDAP está inactivo por alguna razón.", "LDAP_Merge_Existing_Users": "Fusionar usuarios existentes", - "LDAP_Merge_Existing_Users_Description": "* ¡Atención! * Al importar un usuario de LDAP y ya existe un usuario con el mismo nombre de usuario, la información LDAP y la contraseña se establecerán en el usuario existente.", + "LDAP_Merge_Existing_Users_Description": "* ¡Precaución! * Al importar un usuario de LDAP y ya existe un usuario con el mismo nombre de usuario, la información y la contraseña de LDAP se establecerán en el usuario existente.", "LDAP_Port": "Puerto", "LDAP_Port_Description": "Puerto para acceder a LDAP. Por ejemplo. `389` o `636` para LDAPS", - "LDAP_Query_To_Get_User_Groups": "Consulta LDAP para recuperar grupos de usuarios", - "LDAP_Query_To_Get_User_Groups_Description": "Consulta LDAP para recuperar los grupos a los que pertenece el usuario.", + "LDAP_Query_To_Get_User_Groups": "Consulta LDAP para obtener grupos de usuarios", + "LDAP_Query_To_Get_User_Groups_Description": "Consulta LDAP para obtener los grupos a los que pertenece el usuario.", "LDAP_Reconnect": "Vuelva a conectar", - "LDAP_Reconnect_Description": "Intente reconectarse automáticamente cuando la conexión se interrumpa por algún motivo al ejecutar operaciones", + "LDAP_Reconnect_Description": "Intente volver a conectarse automáticamente cuando la conexión se interrumpa por algún motivo mientras ejecuta operaciones", "LDAP_Reject_Unauthorized": "Rechazar no autorizada", - "LDAP_Reject_Unauthorized_Description": "Desactive esta opción para permitir certificados que no se puedan verificar. Por lo general, los certificados autofirmados requerirán que esta opción esté desactivada para funcionar", + "LDAP_Reject_Unauthorized_Description": "Desactive esta opción para permitir certificados que no se pueden verificar. Por lo general, los certificados autofirmados requerirán que esta opción esté desactivada para funcionar", "LDAP_Roles_To_Rocket_Chat_Roles": "Mapeo de roles de LDAP a Rocket.Chat.", "LDAP_Roles_To_Rocket_Chat_Roles_Description": "Mapeo de rol en formato de objeto donde la clave del objeto debe ser el rol LDAP y el valor debe ser un array de roles RC. Por ejemplo: { 'ldapRole': ['rcRole', 'anotherRCRole'] }", "LDAP_Search_Page_Size": "Tamaño de página de búsqueda", - "LDAP_Search_Page_Size_Description": "El número máximo de entradas de cada página de resultados volverá a procesarse", + "LDAP_Search_Page_Size_Description": "El número máximo de entradas que cada página de resultados volverá a procesarse", "LDAP_Search_Size_Limit": "Límite de tamaño de búsqueda", "LDAP_Search_Size_Limit_Description": "El número máximo de entradas para devolver.**Atención** Este número debe ser mayor que **Tamaño de página de búsqueda**", - "LDAP_Sync_Now": "Sincronización de fondo ahora", + "LDAP_Sync_Now": "Sincronización en segundo plano ahora", "LDAP_Sync_Now_Description": "Ejecutará **Background Sync** ahora en lugar de esperar el **Sync Interval** incluso si **Background Sync** es False.Esta acción es asíncrona, consulte los registros para obtener más información sobre el proceso", "LDAP_Sync_User_Active_State": "Sincronizar el estado de actividad del usuario", "LDAP_Sync_User_Active_State_Both": "Habilitar y deshabilitar usuarios", - "LDAP_Sync_User_Active_State_Description": "Determinar si los usuarios deben ser habilitados o deshabilitados en Rocket.Chat en base al estado LDAP. El atributo 'pwdAccountLockedTime' se usará para determinar si el usuario está deshabilitado.", + "LDAP_Sync_User_Active_State_Description": "Determine si los usuarios deben estar habilitados o deshabilitados en Rocket.Chat según el estado de LDAP. El atributo 'pwdAccountLockedTime' se utilizará para determinar si el usuario está deshabilitado.", "LDAP_Sync_User_Active_State_Disable": "Habilitar usuarios", - "LDAP_Sync_User_Active_State_Nothing": "No hagas nada", + "LDAP_Sync_User_Active_State_Nothing": "No hacer nada", "LDAP_Sync_User_Avatar": "Sincronizar Avatar del Usuario", "LDAP_Sync_User_Data": "Sincronizar Datos de Usuario", "LDAP_Sync_User_Data_Description": "Mantener los datos del usuario en sincronía con el servidor al iniciar sesión (ej: nombre, correo electrónico). ", "LDAP_Sync_User_Data_FieldMap": "Mapa de Campos de Datos de Usuario", "LDAP_Sync_User_Data_FieldMap_Description": "Configura como los campos de usuario (como el correo electrónico) son poblados desde un registro LDAP (una vez encontrado). Como ejemplo, `{\"cn\":\"name\", \"mail\":\"email\"}` elegirá el nombre legible por humanos de una persona del atributo cn, y su correo electrónico del atributo mail. Además es posible usar variables, por ejemplo `{ \"#{givenName} #{sn}\": \"name\", \"mail\": \"email\" }`utiliza una combinación del nombre y apellido del usuario para campo de rocket chat `name`. Campos disponibles en Rocket.Chat:`name`, `email` y `customFields`.", "LDAP_Sync_User_Data_Groups": "Sincronizar grupos de LDAP", - "LDAP_Sync_User_Data_Groups_AutoChannels": "Sincronizar automáticamente grupos de LDAP a Canales", - "LDAP_Sync_User_Data_Groups_AutoChannels_Admin": "Sincronizar automáticamente grupos de LDAP a Salas Admin", + "LDAP_Sync_User_Data_Groups_AutoChannels": "Sincronizar automáticamente los grupos de LDAP a Channels", + "LDAP_Sync_User_Data_Groups_AutoChannels_Admin": "Channel Administrador", "LDAP_Sync_User_Data_Groups_AutoChannels_Admin_Description": "Cuando se crean automáticamente canales que no existen durante una sincronización, este usuario se convertirá automáticamente en el administrador del canal.", "LDAP_Sync_User_Data_Groups_AutoChannels_Description": "Habilita esta función para añadir automáticamente usuarios a un canal basado en su grupo LDAP. Si desea eliminar también los usuarios de un canal, consulte la opción que aparece a continuación sobre la eliminación automática de usuarios.", - "LDAP_Sync_User_Data_Groups_AutoChannelsMap": "Mapeo de sincronización automática de grupos de LDAP a Salas", - "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Default": "// Habilitar la auto-sincronización de los grupos de LDAP a Salas", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap": "Mapa del Channel Grupo LDAP", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Default": "// Habilite la sincronización automática de grupos LDAP con los Channel anteriores", "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Description": "Mapea los grupos LDAP a los canales de Rocket.Chat. Como ejemplo, `{\"employee\":\"general\"}` agregará cualquier usuario del grupo LDAP employee, a la sala general.", "LDAP_Sync_User_Data_Groups_AutoRemove": "Eliminar automáticamente roles de usuario", "LDAP_Sync_User_Data_Groups_AutoRemove_Description": "**Atención*: ¡Al activar esto se eliminarán automáticamente los usuarios de un rol si no están asignados en LDAP! Esto sólo eliminará automáticamente los roles que estén establecidos en el mapa de grupo de datos de usuario de abajo.", "LDAP_Sync_User_Data_Groups_BaseDN": "Base DN de grupos LDAP", - "LDAP_Sync_User_Data_Groups_BaseDN_Description": "Base DN utilizado para buscar usuarios.", + "LDAP_Sync_User_Data_Groups_BaseDN_Description": "LDAP BaseDN utilizado para buscar usuarios.", "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels": "Eliminar automáticamente usuarios de Salas", - "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels_Description": "**Atención*: ¡Al activar esto se eliminarán todos los usuarios de un canal que no tengan el grupo LDAP correspondiente! Habilita esto sólo si sabes lo que estás haciendo.", + "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels_Description": "** Atención **: ¡Habilitar esto eliminará a cualquier usuario en un canal que no tenga el grupo LDAP correspondiente! Habilite esto solo si sabe lo que está haciendo.", "LDAP_Sync_User_Data_Groups_Filter": "Filtro de grupo de usuarios", - "LDAP_Sync_User_Data_Groups_Filter_Description": "Filtro de búsqueda LDAP que se utiliza para comprobar si un usuario está en un grupo.", + "LDAP_Sync_User_Data_Groups_Filter_Description": "El filtro de búsqueda LDAP que se usa para verificar si un usuario está en un grupo.", "LDAP_Sync_User_Data_GroupsMap": "Mapa de grupo de datos de usuario", "LDAP_Sync_User_Data_GroupsMap_Description": "Mapea los grupos LDAP a los roles de usuario de Rocket.Chat Como ejemplo, `{\"rocket-admin\":\"admin\", \"tech-support\":\"support\"}` mapeará el grupo LDAP de rocket-admin al rol de \"admin\" de Rocket.", "LDAP_Test_Connection": "Probar Conexión ", "LDAP_Timeout": "Tiempo de espera (ms)", - "LDAP_Timeout_Description": "Cuantas ms espera un resultado de búsqueda antes de devolver un error", + "LDAP_Timeout_Description": "Cuántos milisegundos esperan un resultado de búsqueda antes de devolver un error", "LDAP_Unique_Identifier_Field": "Campo Identificador Único ", "LDAP_Unique_Identifier_Field_Description": "Qué campo se utilizará para vincular al usuario LDAP y el usuario Rocket.Chat. Puede informar a varios valores separados por una coma para tratar de obtener el valor del registro de LDAP. El valor por defecto es `objectGUID, IBM-entryUUID, GUID, dominoUNID, nsuniqueid, uidNumber`", "LDAP_User_Search_Field": "Campo de búsqueda", - "LDAP_User_Search_Field_Description": "El atributo LDAP que identifica al usuario que intente LDAP autenticación. Este campo debe ser `sAMAccountName` para la mayoría de las instalaciones de Active Directory, pero puede ser` uid` para otras soluciones LDAP, como OpenLDAP. Puede utilizar `mail` para identificar a los usuarios por correo electrónico o cualquier atributo que desee. Se pueden utilizar varios valores separados por comas para permitir a los usuarios acceder usando múltiples identificadores como nombre de usuario o correo electrónico.", + "LDAP_User_Search_Field_Description": "El atributo LDAP que identifica al usuario LDAP que intenta la autenticación. Este campo debe ser \"sAMAccountName\" para la mayoría de las instalaciones de Active Directory, pero puede ser \"uid\" para otras soluciones LDAP, como OpenLDAP. Puede usar `mail` para identificar a los usuarios por correo electrónico o cualquier atributo que desee. Puede usar varios valores separados por comas para permitir que los usuarios inicien sesión usando múltiples identificadores como nombre de usuario o correo electrónico.", "LDAP_User_Search_Filter": "Filtro", "LDAP_User_Search_Filter_Description": "Si se les permitirá especificados, sólo los usuarios que coincidan con este filtro para iniciar sesión. Si no se especifica ningún filtro, todos los usuarios dentro del alcance de la base de dominio especificado serán capaces de iniciar sesión. Por ejemplo, para Active Directory `memberOf = cn = ROCKET_CHAT, ou = Groups` general. Por ejemplo, para OpenLDAP (búsqueda de coincidencia de extensible) `ou: dn: = ROCKET_CHAT`.", "LDAP_User_Search_Scope": "Alcance", "LDAP_Username_Field": "Campo de Nombre de Usuario", "LDAP_Username_Field_Description": "Qué campo se utilizará como *nombre de usuario* para los nuevos usuarios. Dejar en blanco para usar el nombre de usuario informado en la página de inicio de sesión. Puede utilizar etiquetas de plantilla también, como `#{givenName}.#{sn}`. El valor por defecto es `sAMAccountName`.", - "LDAP_Validate_Roles_For_Each_Login": "Validar el mapeo en cada login", - "LDAP_Validate_Roles_For_Each_Login_Description": "Si la validación debe realizarse en cada login (Ten cuidado con esta configuración porque se sobrescribirán los roles del usuario en cada login, de otro modo estos serán validados en el momento de la creación del usuario).", - "Lead_capture_email_regex": "Regex de correo electrónico de captura de datos", - "Lead_capture_phone_regex": "Regex de teléfono de captura de datos", + "LDAP_Validate_Roles_For_Each_Login": "Validar la asignación para cada inicio de sesión", + "LDAP_Validate_Roles_For_Each_Login_Description": "Si la validación debe ocurrir para cada inicio de sesión (tenga cuidado con esta configuración porque sobrescribirá los roles de usuario en cada inicio de sesión, de lo contrario, esto se validará solo en el momento de la creación del usuario).", + "Lead_capture_email_regex": "Regex de correo electrónico de captura de clientes potenciales", + "Lead_capture_phone_regex": "Regex de teléfono de captura clientes potenciales", "Leave": "Salir", "Leave_a_comment": "Dejar un comentario", "Leave_Group_Warning": "¿Seguro que quieres dejar el grupo \"%s\"?", @@ -2322,80 +2384,82 @@ "Leave_Room_Warning": "¿Seguro que quieres salir de la sala \"%s\"?", "Leave_the_current_channel": "Salir del canal actual", "Leave_the_description_field_blank_if_you_dont_want_to_show_the_role": "Deje el campo de descripción en blanco si no desea mostrar el rol", - "leave-c": "Dejar canales", - "leave-p": "Deje grupos privados", - "Lets_get_you_new_one": "¡Consigamos una nueva!", + "leave-c": "Salir de Channels", + "leave-p": "Salir de grupos privados", + "Lets_get_you_new_one": "¡Te traemos uno nuevo!", "line": "línea", "List_of_Channels": "Lista de Canales", - "List_of_departments_for_forward": "Lista de departamentos permitidos para el envío (Opcional)", + "List_of_departments_for_forward": "Lista de departamentos permitidos para reenvío (opcional))", "List_of_departments_for_forward_description": "Permitir establecer una lista restringida de departamentos que pueden recibir chats de este departamento", - "List_of_departments_to_apply_this_business_hour": "Lista de departamentos para aplicar este horario ", + "List_of_departments_to_apply_this_business_hour": "Lista de departamentos para aplicar este horario Comercial", "List_of_Direct_Messages": "Lista de mensajes directos", "Omnichannel": "LiveChat", "Livechat": "LiveChat", - "Livechat_abandoned_rooms_closed_custom_message": "Mensaje personalizado cuando se cierra la sala por inactividad del visitante", + "Livechat_abandoned_rooms_closed_custom_message": "Mensaje personalizado cuando la sala se cierra automáticamente por inactividad del visitante", "Livechat_agents": "Agentes de LiveChat", "Livechat_Agents": "# de Agentes", "Livechat_AllowedDomainsList": "Dominios permitidos de LiveChat", "Livechat_Appearance": "Apariencia de LiveChat", + "Livechat_auto_transfer_chat_timeout": "Tiempo de espera (en segundos) para la transferencia automática de chats no respondidos a otro agente", + "Livechat_auto_transfer_chat_timeout_description": "Este evento tiene lugar solo cuando el chat acaba de comenzar. Después de la primera transferencia por inactividad, la sala ya no se supervisa.", "Livechat_business_hour_type": "Tipo de horario comercial (simple o múltiple)", "Livechat_chat_transcript_sent": "Transcripción del chat enviada: __transcript__", - "Livechat_custom_fields_options_placeholder": "Lista separada por comas utilizada para seleccionar un valor preconfigurado. No se aceptan espacios entre elementos.", - "Livechat_custom_fields_public_description": "Los campos personalizados públicos se mostrarán en aplicaciones externas, como LiveChat, etc.", + "Livechat_custom_fields_options_placeholder": "Lista separada por comas que se utiliza para seleccionar un valor preconfigurado. No se aceptan espacios entre elementos.", + "Livechat_custom_fields_public_description": "Los campos personalizados públicos se mostrarán en aplicaciones externas, como Livechat, etc.", "Livechat_Dashboard": "Panel LiveChat", "Livechat_DepartmentOfflineMessageToChannel": "Enviar mensajes de LiveChat sin conexión de este departamento a un canal", "Livechat_enable_message_character_limit": "Habilitar el límite de caracteres del mensaje", "Livechat_enabled": "LiveChat habilitado", - "Livechat_Facebook_API_Key": "LiveChat Clave API", - "Livechat_Facebook_API_Secret": "LiveChat Secreto API", + "Livechat_Facebook_API_Key": "Clave API de LiveChat ", + "Livechat_Facebook_API_Secret": "API Secreto LiveChat ", "Livechat_Facebook_Enabled": "Integración de Facebook habilitada", "Livechat_forward_open_chats": "Reenviar charlas abiertas", "Livechat_forward_open_chats_timeout": "Tiempo de espera (en segundos) para reenviar los chats", "Livechat_guest_count": "Contador de invitados", "Livechat_Inquiry_Already_Taken": "Solicitud de LiveChat ya atendida", "Livechat_Installation": "Instalación de LiveChat", - "Livechat_last_chatted_agent_routing": "Agente de último chat preferido", - "Livechat_last_chatted_agent_routing_Description": "La configuración de agente de último chat preferido asigna chats al agente que previamente interactuó con el mismo visitante si el agente está disponible cuando el chat comienza.", + "Livechat_last_chatted_agent_routing": "Agente preferido en el último chat", + "Livechat_last_chatted_agent_routing_Description": "La configuración del último agente con el que conversó asigna chats al agente que interactuó anteriormente con el mismo visitante si el agente está disponible cuando se inicia el chat.", "Livechat_managers": "Supervisores de LiveChat", - "Livechat_Managers": "Gestores", + "Livechat_Managers": "Administradores", "Livechat_message_character_limit": "Límite de caracteres del mensaje de LiveChat", "Livechat_monitors": "Monitores de LiveChat", "Livechat_Monitors": "Monitores", - "Livechat_offline": "Sin conexión LiveChat", - "Livechat_offline_message_sent": "Mensaje sin conexión enviado por LiveChat ", + "Livechat_offline": "LiveChat desconectado", + "Livechat_offline_message_sent": "Mensaje de Livechat enviado sin conexión ", "Livechat_OfflineMessageToChannel_enabled": "Enviar mensajes sin conexión de LiveChat a un canal", "Livechat_online": "LiveChat en línea", "Livechat_Queue": "Cola de LiveChat", "Livechat_registration_form": "Formulario de Registro", "Livechat_registration_form_message": "Mensaje del formulario de registro", - "Livechat_room_count": "Conteo de salas LiveChat", + "Livechat_room_count": "Recuento de Room LiveChat", "Livechat_Routing_Method": "Método de enrutamiento del LiveChat", "Livechat_status": "Estado de LiveChat", "Livechat_Take_Confirm": "¿Quiere aceptar este cliente?", "Livechat_title": "Titulo de LiveChat", "Livechat_title_color": "Color de fondo del titulo de LiveChat", "Livechat_transcript_already_requested_warning": "La transcripción de este chat ya ha sido solicitada y será enviada tan pronto como la conversación termine.", - "Livechat_transcript_has_been_requested": "La transcripción del chat ha sido solicitada.", - "Livechat_transcript_request_has_been_canceled": "La solicitud de transcripción del chat ha sido cancelada.", + "Livechat_transcript_has_been_requested": "Se ha solicitado la transcripción del chat.", + "Livechat_transcript_request_has_been_canceled": "Se canceló la solicitud de transcripción del chat.", "Livechat_transcript_sent": "Se ha enviado una transcripción de LiveChat", "Livechat_transfer_return_to_the_queue": "__from__ devolvió el chat a la cola", "Livechat_transfer_to_agent": "__from__ transfirió el chat a __to__", "Livechat_transfer_to_agent_with_a_comment": "__from__ transfirió el chat a __to__ con un comentario: __comment__", "Livechat_transfer_to_department": "__from__ transfirió el chat a el departamento __to__", "Livechat_transfer_to_department_with_a_comment": "__from__ transfirió el chat a el departamento __to__ con un comentario: __comment__", - "Livechat_Triggers": "Disparadores LiveChat", + "Livechat_Triggers": "Activadores LiveChat", "Livechat_user_sent_chat_transcript_to_visitor": "__agent__ envió la transcripción del chat a __guest__", "Livechat_Users": "Usuarios de LiveChat", "Livechat_visitor_email_and_transcript_email_do_not_match": "El correo electrónico del visitante y el de la transcripción no coinciden", "Livechat_visitor_transcript_request": "__guest__ pidió la transcripción del chat", - "LiveStream & Broadcasting": "LiveStream y Transmisión", + "LiveStream & Broadcasting": "Transmisión en directo y transmisión", "Livestream_close": "Cerrar Livestream", "Livestream_enable_audio_only": "Habilitar solo el modo de audio", - "Livestream_enabled": "Livestream habilitado", + "Livestream_enabled": "Transmisión en directo habilitado", "Livestream_not_found": "Livestream no disponible", "Livestream_popout": "Abrir Livestream", "Livestream_source_changed_succesfully": "La fuente de Livestream se modificó con éxito", - "Livestream_switch_to_room": "Cambiar al Livestream de la sala actual", + "Livestream_switch_to_room": "Cambiar a la transmisión en directo de la sala actual", "Livestream_url": "URL de origen de Livestream", "Livestream_url_incorrect": "La URL de Livestream es incorrecta", "Livestream_live_now": "¡Chatea ahora!", @@ -2415,10 +2479,10 @@ "Log_File": "Mostrar archivo y línea", "Log_Level": "Nivel de Registro", "Log_Package": "Mostrar Paquete", - "Log_Trace_Methods": "Llamadas al método Trace", + "Log_Trace_Methods": "Llamadas al método de seguimiento", "Log_Trace_Methods_Filter": "Filtro de método de seguimiento", "Log_Trace_Methods_Filter_Description": "El texto aquí se evaluará como RegExp (`new RegExp ('text')`). Manténgalo vacío para mostrar el rastro de cada llamada.", - "Log_Trace_Subscriptions": "Rastrear llamadas de suscripción", + "Log_Trace_Subscriptions": "Seguimiento de llamadas de suscripción", "Log_Trace_Subscriptions_Filter": "Filtro de suscripción de seguimiento", "Log_Trace_Subscriptions_Filter_Description": "El texto aquí se evaluará como RegExp (`new RegExp ('text')`). Manténgalo vacío para mostrar el rastro de cada llamada.", "Log_View_Limit": "Ver límite del registro", @@ -2454,13 +2518,15 @@ "Mailing": "Envío", "Make_Admin": "Hacer Administrador", "Make_sure_you_have_a_copy_of_your_codes_1": "Asegúrese de tener una copia de sus códigos:", - "Make_sure_you_have_a_copy_of_your_codes_2": "Si pierde el acceso a su aplicación de autenticación, puede usar uno de estos códigos para iniciar sesión.", + "Make_sure_you_have_a_copy_of_your_codes_2": "Si pierde el acceso a su aplicación de autenticación, puede utilizar uno de estos códigos para iniciar sesión.", "Manage_Apps": "Administrar aplicaciones", "Manage_the_App": "Administrar la aplicación", "manage-apps": "Administrar aplicaciones", "manage-assets": "Administrar recursos", "manage-assets_description": "Permiso para administrar los recursos del servidor", "manage-cloud_description": "Administrar la nube", + "manage-email-inbox": "Administrar bandeja de entrada de correo electrónico", + "manage-email-inbox_description": "Permiso para administrar bandejas de entrada de correo electrónico", "manage-emoji": "Administrar Emoji", "manage-emoji_description": "Permiso para administrar los emojis del servidor", "manage-incoming-integrations": "Administrar las integraciones entrantes", @@ -2503,9 +2569,9 @@ "Mark_read": "Marcar como leído", "Mark_unread": "Marcar como no leído", "Markdown_Headers": "Permitir Encabezados Markdown en mensajes", - "Markdown_Marked_Breaks": "Habilitar escapadas marcadas", + "Markdown_Marked_Breaks": "Habilitar pausas marcadas", "Markdown_Marked_GFM": "Habilitar GFM marcado", - "Markdown_Marked_Pedantic": "Habilitar marcado Pedantic", + "Markdown_Marked_Pedantic": "Habilitar marcado Pedantic ", "Markdown_Marked_SmartLists": "Habilitar listas inteligentes marcadas", "Markdown_Marked_Smartypants": "Habilitar Smartypants marcados", "Markdown_Marked_Tables": "Habilitar tablas marcadas", @@ -2517,8 +2583,8 @@ "Max_length_is": "La longitud máxima es %s", "Max_number_incoming_livechats_displayed": "Número máximo de elementos mostrados en la cola", "Max_number_incoming_livechats_displayed_description": "(Opcional) Número máximo de elementos que se muestran en la cola entrante de LiveChat.", - "Max_number_of_chats_per_agent": "Número máximo de chats simultáneos", - "Max_number_of_chats_per_agent_description": "El número máximo de chats simultáneos que los agentes pueden atender", + "Max_number_of_chats_per_agent": "Máximo número de chats simultáneos", + "Max_number_of_chats_per_agent_description": "El máximo. número de chats simultáneos a los que pueden asistir los agentes", "Max_number_of_uses": "Número máximo de usos", "Maximum": "Máximo", "Maximum_number_of_guests_reached": "Número máximo de invitados alcanzado", @@ -2529,7 +2595,7 @@ "Members_List": "Lista de Miembros", "mention-all": "Mencione @all", "mention-all_description": "Permiso para usar la mención @all", - "mention-here": "Mencione @here", + "mention-here": "Mencionar aquí", "mention-here_description": "Permiso para usar la mención @here", "Mentions": "Menciones", "Mentions_default": "Menciones (por defecto)", @@ -2558,16 +2624,16 @@ "Message_Attachments_GroupAttach": "Botones de archivos adjuntos", "Message_Attachments_GroupAttachDescription": "Esto agrupa los iconos debajo de un menú expandible. Toma menos espacio de pantalla.", "Message_Audio": "Mensaje de audio", - "Message_Audio_bitRate": "Tasa de bits del mensaje de audio", + "Message_Audio_bitRate": "Tasa de bits de mensajes de audio", "Message_AudioRecorderEnabled": "Grabadora de audio habilitada", - "Message_AudioRecorderEnabled_Description": "Requiere que los archivos 'audio/mp3' sean un tipo de medio aceptado en la configuración de 'Subir archivos'.", + "Message_AudioRecorderEnabled_Description": "Requiere que los archivos 'audio / mp3' sean un tipo de medio aceptado dentro de la configuración de 'Carga de archivos'.", "Message_auditing": "Auditoría de mensajes", "Message_auditing_log": "Registro de auditoría de mensajes", "Message_BadWordsFilterList": "Añadir Malas Palabras a la Lista Negra", "Message_BadWordsFilterListDescription": "Añadir lista separada por comas de malas palabras para filtrar", "Message_BadWordsWhitelist": "Eliminar palabras de la lista negra", "Message_BadWordsWhitelistDescription": "Añadir lista separada por comas de palabras para ser borradas del filtro", - "Message_Characther_Limit": "Límite de caracteres de los mensajes", + "Message_Characther_Limit": "Límite de caracteres del mensaje", "message_counter": "__counter__ mensaje", "message_counter_plural": "__counter__ mensajes", "Message_DateFormat": "Formato de fecha", @@ -2577,22 +2643,24 @@ "Message_ErasureType": "Tipo de borrado del mensaje", "Message_ErasureType_Delete": "Eliminar todos los mensajes", "Message_ErasureType_Description": "Determine qué hacer con los mensajes de los usuarios que eliminan su cuenta.", - "Message_ErasureType_Keep": "Mantenga mensajes y nombres de usuario", + "Message_ErasureType_Keep": "Mantener mensajes y nombres de usuario", "Message_ErasureType_Unlink": "Eliminar enlace entre usuario y mensajes", "Message_GlobalSearch": "Búsqueda global", "Message_GroupingPeriod": "Periodo de agrupamiento (en segundos)", "Message_GroupingPeriodDescription": "Los mensajes se agruparan con mensajes previos si ambos provienen del mismo usuario y el tiempo transcurrido fue menor al tiempo informado en segundos.", "Message_has_been_pinned": "El mensaje ha sido fijado", "Message_has_been_starred": "El mensaje ha sido marcado como favorito", - "Message_has_been_unpinned": "El mensaje se ha quitado de fijados", + "Message_has_been_unpinned": "El mensaje ha sido desanclado", "Message_has_been_unstarred": "El mensaje se ha quitado de favoritos", "Message_HideType_au": "Ocultar mensajes de \"Usuario añadido\"", "Message_HideType_mute_unmute": "Ocultar mensajes \"Usuario silenciado/no silenciado\"", - "Message_HideType_r": "Ocultar mensajes de \"Nombre de sala cambiado\"", + "Message_HideType_r": "Ocultar los mensajes \"Se cambió el nombre de la Room\"", "Message_HideType_rm": "Ocultar mensajes de \"Mensaje borrado\"", "Message_HideType_room_archived": "Ocultar mensajes de \"Sala archivada\"", "Message_HideType_room_changed_avatar": "Ocultar mensajes de \"Avatar de sala cambiado\"", "Message_HideType_room_changed_privacy": "Ocultar mensajes de \"Tipo de sala cambiado\"", + "Message_HideType_room_enabled_encryption": "Ocultar los mensajes de \"[Room] cifrado activado\"", + "Message_HideType_room_disabled_encryption": "Ocultar los mensajes de \"[Room] cifrado desactivado\"", "Message_HideType_room_unarchived": "Ocultar mensajes de \"Sala no archivada\"", "Message_HideType_ru": "Ocultar mensajes de \"Usuario borrado\"", "Message_HideType_subscription_role_added": "Ocultar mensajes de \"Rol establecido\"", @@ -2604,9 +2672,9 @@ "Message_Id": "ID del mensaje", "Message_Ignored": "Este mensaje fue ignorado", "Message_info": "Información del mensaje", - "Message_KeepHistory": "Mantener el historial de de edición por mensaje", - "Message_MaxAll": "Tamaño máximo de canal para el mensaje @all", - "Message_MaxAllowedSize": "Tamaño máximo de caracteres permitidos de un mensaje", + "Message_KeepHistory": "Mantener el historial de edición por mensaje", + "Message_MaxAll": "Tamaño máximo de Channel para TODOS los mensajes", + "Message_MaxAllowedSize": "Caracteres máximos permitidos por mensaje", "Message_pinning": "Anclado de Mensajes", "message_pruned": "mensaje borrado", "Message_QuoteChainLimit": "Número máximo de citas encadenadas", @@ -2625,7 +2693,7 @@ "Message_TimeFormat": "Formato de tiempo", "Message_TimeFormat_Description": "Ver también: Moment.js", "Message_too_long": "Mensaje demasiado largo", - "Message_too_long_as_an_attachment_question": "El mensaje es demasiado largo. ¿Enviarlo como un archivo adjunto en su lugar?", + "Message_too_long_as_an_attachment_question": "Mensaje demasiado largo. ¿Enviarlo como un archivo adjunto?", "Message_UserId": "ID del usuario", "Message_VideoRecorderEnabled": "Activar grabador de video", "Message_VideoRecorderEnabledDescription": "Requer que los archivos de tipo 'video/webm' sean un tipo de medio aceptado en la configuracion 'Subida ficheros'.", @@ -2673,11 +2741,11 @@ "Monday": "Lunes", "Mongo_storageEngine": "Motor de almacenamiento Mongo", "Mongo_version": "Versión Mongo", - "MongoDB_Deprecated": "Mongo obsoleta", + "MongoDB_Deprecated": "MongoDB obsoleta", "MongoDB_version_s_is_deprecated_please_upgrade_your_installation": "La versión de MongoDB %s está obsoleta, por favor actualice su instalación.", "Monitor_added": "Monitoreo añadido", "Monitor_history_for_changes_on": "Monitoriza el historial de cambios en", - "Monitor_removed": "Monitoreo eliminado", + "Monitor_removed": "Monitor eliminado", "Monitors": "Monitoreos", "Monthly_Active_Users": "Usuarios activos mensuales", "More": "Más", @@ -2693,7 +2761,7 @@ "multi_line": "línea múltiple", "Mute_all_notifications": "Silenciar todas las notificaciones", "Mute_Focused_Conversations": "Silenciar conversaciones enfocadas", - "Mute_Group_Mentions": "Silenciar menciones @all y @here", + "Mute_Group_Mentions": "Silenciar @all i @here menciones", "Mute_someone_in_room": "Silenciar a alguien en la sala", "Mute_user": "Silenciar usuario", "mute-user": "Usuario silenciado", @@ -2713,8 +2781,8 @@ "Never": "Nunca", "New": "Nuevo", "New_Application": "Nueva aplicación", - "New_Business_Hour": "Nuevo horario de oficina", - "New_Canned_Response": "Nuevo modelo de respuesta", + "New_Business_Hour": "Nuevo horario comercial", + "New_Canned_Response": "Nueva respuesta preparada", "New_chat_in_queue": "Nuevo chat en la cola", "New_chat_priority": "Prioridad cambiada: __user__ cambió la prioridad a __priority__", "New_chat_transfer": "Nueva transferencia de chat: __transfer__", @@ -2724,10 +2792,11 @@ "New_discussion": "Nueva discusión", "New_discussion_first_message": "Por lo general, una discusión comienza con una pregunta, como \"¿Cómo subo una imagen?\"", "New_discussion_name": "Un nombre significativo para la sala de discusión.", + "New_Email_Inbox": "Nueva bandeja de entrada de correo electrónico", "New_encryption_password": "Nueva contraseña de cifrado", "New_integration": "Nueva integración ", "New_line_message_compose_input": "`%s` - Nueva línea en el cuadrode redacción de mensaje", - "New_Livechat_offline_message_has_been_sent": "Se ha enviado un nuevo mensaje fuera de línea de LiveChat", + "New_Livechat_offline_message_has_been_sent": "Se ha enviado un nuevo mensaje sin conexión de Livechat", "New_logs": "Nuevos registros", "New_Message_Notification": "Notificación de nuevo mensaje", "New_messages": "Nuevos mensajes", @@ -2749,9 +2818,9 @@ "Nickname_Placeholder": "Introduzca su apodo...", "No": "No", "No_available_agents_to_transfer": "No hay agentes disponibles para transferir", - "No_Canned_Responses": "No existen modelos de respuesta", + "No_Canned_Responses": "Sin respuestas preparada", "No_channel_with_name_%s_was_found": "¡Ningún canal con el nombre \"%s\" ha sido encontrado!", - "No_channels_yet": "Todavía no eres parte de un canal.", + "No_channels_yet": "Aún no formas parte de ningún canal", "No_data_found": "Datos no encontrados", "No_direct_messages_yet": "No has comenzado ninguna conversación", "No_Discussions_found": "No se encontraron discusiones", @@ -2767,7 +2836,7 @@ "No_mentions_found": "Ninguna mención encontrada ", "No_messages_found_to_prune": "No se han encontrado mensajes para borrar", "No_messages_yet": "Aún no hay mensajes", - "No_pages_yet_Try_hitting_Reload_Pages_button": "Aún no hay páginas. Intenta presionar el botón \"Recargar páginas\".", + "No_pages_yet_Try_hitting_Reload_Pages_button": "Aún no hay páginas. Intenta presionar el botón \"Recargar páginas\"..", "No_pinned_messages": "Sin mensajes fijados", "No_previous_chat_found": "No se encontró ningún chat anterior", "No_results_found": "No se han encontrado resultados", @@ -2790,6 +2859,7 @@ "Not_found_or_not_allowed": "No Encontrado o No Permitido", "Not_Imported_Messages_Title": "Los siguientes mensajes no se importaron correctamente", "Not_in_channel": "No en el canal", + "Not_likely": "No es probable", "Not_started": "No iniciado", "Not_verified": "No verificado", "Nothing": "Nada", @@ -2800,15 +2870,18 @@ "Notification_RequireInteraction": "Requerir interacción para descartar la notificación de escritorio", "Notification_RequireInteraction_Description": "Funciona solo con versiones de Google Chrome > 50. Utilice el parámetro Utilizes the requireInteraction para mostrar la notificación de escritorio de forma indefinida hasta que el usuario interactúe con ella.", "Notifications": "Notificaciones", - "Notifications_Max_Room_Members": "Máximo de miembros de sala antes de deshabilitar todas las notificaciones de mensajes", - "Notifications_Max_Room_Members_Description": "Número máximo de miembros en la sala cuando las notificaciones para todos los mensajes se desactivan. Los usuarios aún pueden cambiar por configuración de sala para recibir todas las notificaciones de forma individual. (0 para deshabilitar)", + "Notifications_Max_Room_Members": "Número máximo de miembros de la sala antes de deshabilitar todas las notificaciones de mensajes", + "Notifications_Max_Room_Members_Description": "Número máximo de miembros en la sala cuando se deshabilitan las notificaciones de todos los mensajes. Los usuarios aún pueden cambiar la configuración de cada habitación para recibir todas las notificaciones de forma individual. (0 para deshabilitar)", "Notifications_Muted_Description": "Si elige silenciar todo, no verá el resaltado de la sala en la lista cuando haya mensajes nuevos, a excepción de las menciones. Las notificaciones de silenciamiento anularán las configuraciones de notificaciones.", "Notifications_Preferences": "Preferencias de notificaciones", "Notifications_Sound_Volume": "Volumen del sonido de las notificaciones", "Notify_active_in_this_room": "Notificar usuarios activos en esta sala", "Notify_all_in_this_room": "Notificar a todos en este canal", + "NPS_survey_enabled": "Habilitar la encuesta NPS", + "NPS_survey_enabled_Description": "Permita que la encuesta NPS se ejecute para todos los usuarios. Los administradores recibirán una alerta 2 meses antes de que se inicie la encuesta", + "NPS_survey_is_scheduled_to-run-at__date__for_all_users": "La encuesta de NPS está programada para ejecutarse en __date__ para todos los usuarios. ¿Es posible desactivar la encuesta en 'Admin> General> NPS'?", "Num_Agents": "# de Agentes", - "Number_in_seconds": "Valor en segundos", + "Number_in_seconds": "Número en segundos", "Number_of_events": "Número de eventos", "Number_of_federated_servers": "Número de servidores federados", "Number_of_federated_users": "Número de usuarios federados", @@ -2821,16 +2894,16 @@ "OAuth_Applications": "Aplicaciones OAuth", "Objects": "Objetos", "Off": "Desactivar", - "Off_the_record_conversation": "Off-the-record Conversación", - "Off_the_record_conversation_is_not_available_for_your_browser_or_device": "Off-the-record conversación no está disponible para el navegador o dispositivo.", + "Off_the_record_conversation": "Conversación extraoficial", + "Off_the_record_conversation_is_not_available_for_your_browser_or_device": "La conversación sin registro no está disponible para su navegador o dispositivo", "Office_Hours": "Horas de oficina", - "Office_hours_enabled": "Horario de oficina habilitado", + "Office_hours_enabled": "Horas de oficina habilitadas", "Office_hours_updated": "Horario de oficina actualizado", "Offline": "Desconectado", "Offline_DM_Email": "Se le ha contactado directamente por __user__", "Offline_Email_Subject_Description": "Puede usar los siguientes marcadores de posición: [Site_Name], [Site_URL], [User] y [Room] para el nombre de la aplicación, la URL, el nombre de usuario y el nombre de la habitación, respectivamente.", "Offline_form": "Formulario fuera de línea", - "Offline_form_unavailable_message": "Formulario de mensaje fuera de línea", + "Offline_form_unavailable_message": "Mensaje de formulario sin conexión no disponible", "Offline_Link_Message": "IR AL MENSAJE", "Offline_Mention_All_Email": "Mencione todo el asunto del correo electrónico", "Offline_Mention_Email": "Usted ha sido mencionado por __user__ en #__room__", @@ -2840,12 +2913,14 @@ "Offline_messages": "Mensajes fuera de línea", "Offline_success_message": "Mensaje fuera de línea correcto", "Offline_unavailable": "No disponible sin conexión", - "Old Colors": "Colores", + "Old Colors": "Colores Antiguos", "Old Colors (minor)": "Colores Antiguos (menores)", "Older_than": "Más antiguo que", "Omnichannel_Directory": "Directorio de LiveChat", "Omnichannel_appearance": "Apariencia de LiveChat", "Omnichannel_Contact_Center": "Centro de contactos de LiveChat", + "Omnichannel_contact_manager_routing": "Asignar nuevas conversaciones al administrador de contactos", + "Omnichannel_contact_manager_routing_Description": "Esta configuración asigna un chat al Administrador de contactos asignado, siempre que el Administrador de contactos esté en línea cuando se inicia el chat", "Omnichannel_External_Frame": "Marco externo", "Omnichannel_External_Frame_Enabled": "Marco externo habilitado", "Omnichannel_External_Frame_Encryption_JWK": "Clave de cifrado (JWK)", @@ -2855,10 +2930,12 @@ "online": "en línea", "Online": "Conectado", "Only_authorized_users_can_write_new_messages": "Sólo los usuarios autorizados pueden escribir nuevos mensajes", - "Only_from_users": "Solo borre el contenido de estos usuarios (déjelo en blanco para eliminar el contenido de todos)", + "Only_from_users": "Solo elimine el contenido de estos usuarios (déjelo en blanco para eliminar el contenido de todos)", + "Only_Members_Selected_Department_Can_View_Channel": "Solo los miembros del departamento seleccionado pueden ver los chats en este canal", "Only_On_Desktop": "Modo de escritorio (sólo envía con Enter en el escritorio)", "Only_works_with_chrome_version_greater_50": "Funciona solo con versiones de Google Chrome > 50", "Only_you_can_see_this_message": "Solo tú puedes ver este mensaje", + "Only_invited_users_can_acess_this_channel": "Sólo los usuarios invitados pueden acceder a este Channel", "Oops_page_not_found": "Vaya, página no encontrada", "Oops!": "Uy!", "Open": "Abierto", @@ -2867,6 +2944,7 @@ "Open_Days": "Días abiertos", "Open_days_of_the_week": "Días abiertos de la semana", "Open_Livechats": "LiveChats abiertos", + "Open_thread": "Hilo abierto", "Open_your_authentication_app_and_enter_the_code": "Abra su aplicación de autenticación e ingrese el código. También puede usar uno de sus códigos de respaldo.", "Opened": "Abierto", "Opened_in_a_new_window": "Abierto en una nueva ventana.", @@ -2879,7 +2957,7 @@ "Organization_Email": "Correo electrónico de organización", "Organization_Info": "Información de la organización", "Organization_Name": "Nombre de la Organización", - "Organization_Type": "Tipo de organización", + "Organization_Type": "Tipo de Organización", "Original": "Original", "OS_Arch": "Arquitectura de SO", "OS_Cpus": "Recuento de CPUs", @@ -2901,7 +2979,7 @@ "Override_URL_to_which_files_are_uploaded_This_url_also_used_for_downloads_unless_a_CDN_is_given": "URL de alteración a la que se cargan los archivos. Este sitio de Internet también se utiliza para las descargas a menos de un CDN es dado", "Page_title": "Título de la página", "Page_URL": "URL de la página", - "Parent_channel_doesnt_exist": "El canal `#%s` no existe", + "Parent_channel_doesnt_exist": "El Channel no existe.", "Password": "Contraseña", "Password_Change_Disabled": "Tu administrador de Rocket.Chat ha deshabilitado la opción para cambiar contraseñas.", "Password_Changed_Description": "Puede usar los siguientes marcadores: [password] para la contraseña temporal.[name], [fname], [lname] para el nombre de usuario, nombre o apellidos, respectivamente.[email] para el correo electrónico del usuario.[Site_Name] y [Site_URL] para el nombre de aplicación y URL, respectivamente.", @@ -2920,7 +2998,7 @@ "People": "Gente", "Permalink": "Permalink", "Permissions": "Permisos", - "Personal_Access_Tokens": "Clave de acceso personal", + "Personal_Access_Tokens": "Token de acceso personal", "Phone": "Teléfono", "Phone_already_exists": "El teléfono ya existe", "Phone_number": "Número de teléfono", @@ -2930,20 +3008,20 @@ "pin-message_description": "Permiso para fijar un mensaje en un canal", "Pinned_a_message": "Fijado un mensaje:", "Pinned_Messages": "Mensajes Fijados", - "pinning-not-allowed": "No se permite fijar mensajes", + "pinning-not-allowed": "No se permite fijar", "PiwikAdditionalTrackers": "Sitios adicionales de Piwik", - "PiwikAdditionalTrackers_Description": "Ingrese las URL de sitios web de Piwik adicionales y los SiteID en el siguiente formato, si desea rastrear los mismos datos en diferentes sitios web: [ { \"trackerURL\" : \"https://my.piwik.domain2/\", \"siteId\" : 42 }, { \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 } ]", + "PiwikAdditionalTrackers_Description": "Ingrese las URL adicionales del sitio web de Piwik y los SiteID en el siguiente formato, si desea rastrear los mismos datos en diferentes sitios web: [ { \"trackerURL\" : \"https://my.piwik.domain2/\", \"siteId\" : 42 }, { \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 } ]", "PiwikAnalytics_cookieDomain": "Todos los subdominios", "PiwikAnalytics_cookieDomain_Description": "Seguimiento de visitantes en todos los subdominios", "PiwikAnalytics_domains": "Ocultar enlaces salientes", - "PiwikAnalytics_domains_Description": "En el informe 'Enlaces externos', oculte los clics a las URL de alias conocidas. Por favor inserte un dominio por línea y no use separadores.", + "PiwikAnalytics_domains_Description": "En el informe \"Enlaces externos\", oculte los clics a URL de alias conocidas. Inserte un dominio por línea y no use separadores.", "PiwikAnalytics_prependDomain": "Anteponer el dominio", "PiwikAnalytics_prependDomain_Description": "Anteponga el dominio del sitio al título de la página cuando realiza el seguimiento", "PiwikAnalytics_siteId_Description": "La Identificación del sitio a utilizar para la identificación de este sitio. Ejemplo: 17", "PiwikAnalytics_url_Description": "La url donde reside el Piwik, asegúrese de incluir la barra probando. Ejemplo: //piwik.rocket.chat/", - "Placeholder_for_email_or_username_login_field": "Cuadro de texto del campo Email o Nombre de Usuario de Inicio de Sesión", - "Placeholder_for_password_login_confirm_field": "Confirme el Cuadro de texto del Campo Contraseña de Inicio de Sesión", - "Placeholder_for_password_login_field": "Cuadro de texto del Campo Contraseña de Inicio de Sesión", + "Placeholder_for_email_or_username_login_field": "Marcador de posición para el campo de inicio de sesión de correo electrónico o nombre de usuario", + "Placeholder_for_password_login_confirm_field": "Confirmar marcador de posición para el campo de inicio de sesión con contraseña", + "Placeholder_for_password_login_field": "Marcador de posición para el campo de inicio de sesión con contraseña", "Please_add_a_comment": "Por favor, agregue un comentario", "Please_add_a_comment_to_close_the_room": "Por favor, agregue un comentario para cerrar la sala", "Please_answer_survey": "Por favor tómese un momento para responder una breve encuesta sobre este chat", @@ -2954,15 +3032,15 @@ "Please_enter_your_password": "Por favor ingrese su contraseña", "Please_fill_a_label": "Por favor introduzca una etiqueta", "Please_fill_a_name": "Por favor introduzca un nombre", - "Please_fill_a_token_name": "Por favor introduzca un nombre de token válido", + "Please_fill_a_token_name": "Complete un nombre de token válido", "Please_fill_a_username": "Por favor introduzca un nombre de usuario", "Please_fill_all_the_information": "Por favor complete toda la información", "Please_fill_an_email": "Por favor introduzca un correo electrónico", "Please_fill_name_and_email": "Por favor introduzca nombre y correo electrónico", - "Please_go_to_the_Administration_page_then_Livechat_Facebook": "Vaya a la página de Administración y luego a LiveChat > Facebook", + "Please_go_to_the_Administration_page_then_Livechat_Facebook": "Vaya a la página Administración y a continuació LiveChat> Facebook", "Please_select_an_user": "Por favor seleccione un usuario", "Please_select_enabled_yes_or_no": "Por favor elija una opción para Habilitar", - "Please_select_visibility": "Por favor, seleccione una visibilidad", + "Please_select_visibility": "Por favor, seleccione una vista", "Please_wait": "Por favor espere", "Please_wait_activation": "Por favor espere, ésto puede tomar algún tiempo.", "Please_wait_while_OTR_is_being_established": "Por favor espere mientras se está estableciendo OTR", @@ -3006,15 +3084,15 @@ "Profile_picture": "Foto de perfil", "Profile_saved_successfully": "Perfil guardado correctamente", "Prometheus": "Prometheus", - "Prometheus_API_User_Agent": "Prometheus API: Rastrear el agente de usuario", - "Prometheus_Garbage_Collector": "Prometheus GC", - "Prometheus_Garbage_Collector_Alert": "Se requiere reiniciar para desactivar", + "Prometheus_API_User_Agent": "API: Agente de usuario de seguimiento", + "Prometheus_Garbage_Collector": "Recopilar NodeJS GC", + "Prometheus_Garbage_Collector_Alert": "Reinicio requerido para desactivar", "Prometheus_Reset_Interval": "Intervalo del reinicio (ms)", "Protocol": "Protocolo", "Prune": "Borrar", "Prune_finished": "Borrado finalizado", "Prune_Messages": "Borrar mensajes", - "Prune_Modal": "¿Estás seguro de que deseas borrar estos mensajes? Los mensajes borrados no se pueden recuperar.", + "Prune_Modal": "¿Estás seguro de que deseas eliminar estos mensajes? Los mensajes eliminados no se pueden recuperar.", "Prune_Warning_after": "Esto eliminará todos los %s en %s después de %s.", "Prune_Warning_all": "¡Esto eliminará todos los %s en %s!", "Prune_Warning_before": "Esto eliminará todos los %s en %s antes de %s.", @@ -3025,7 +3103,6 @@ "Public_Channel": "Canal público", "Public_Channels": "Canal públicos", "Public_Community": "Comunidad pública", - "Public_Relations": "Relaciones públicas", "Public_URL": "URL pública", "Purchase_for_free": "Compra GRATIS", "Purchase_for_price": "Compra por $%s", @@ -3040,7 +3117,7 @@ "Push_apn_passphrase": "Frase de contraseña APN", "Push_enable": "Habilitar", "Push_enable_gateway": "Habilitar Puerta de Enlace", - "Push_enable_gateway_Description": "Necesita aceptar el registro de su servidor (Asistente de configuración > Información de la organización > Registrar el servidor) y nuestros términos de privacidad (Asistente de configuración > Información de la nube > Acuerdo de términos de privacidad de servicios en la nube) para habilitar esta configuración y utilizar nuestra puerta de enlace", + "Push_enable_gateway_Description": "Debe aceptar registrar su servidor (Asistente de configuración> Información de la organización> Registrar servidor) y nuestros términos de privacidad (Asistente de configuración> Información de la nube> Acuerdo de términos de privacidad del servicio de nube) para habilitar esta configuración y usar nuestra puerta de enlace", "Push_gateway": "Puerta de Enlace", "Push_gateway_description": "Se pueden utilizar varias líneas para especificar varias puertas de enlace", "Push_gcm_api_key": "Llave del API GCM", @@ -3049,17 +3126,17 @@ "Push_request_content_from_server": "Obtener el contenido completo del mensaje del servidor al recibirlo", "Push_Setting_Requires_Restart_Alert": "Cambiar este valor requiere reiniciar Rocket.Chat.", "Push_show_message": "Muestra el mensaje en la notificación", - "Push_show_username_room": "Mostrar canal/grupo/ nombre de usuario en la notificación", + "Push_show_username_room": "Mostrar Channel / grupo / nombre de usuario en la notificación", "Push_test_push": "Prueba", "Query": "Consulta", "Query_description": "Condiciones adicionales para determinar a que usuarios enviar el correo electrónico. Los usuarios que optaron por cancelar su suscripción serán eliminados de la consulta. Debe ser JSON valido. Ejemplo: \"{\"createdAt\":{\"$gt\":{\"$date\": \"2015-01-01T00:00:00.000Z\"}}}\"", - "Query_is_not_valid_JSON": "La consulta no es un JSON válido", + "Query_is_not_valid_JSON": "La consulta no es JSON válido", "Queue": "Cola", "quote": "cita", "Quote": "Cita", "Random": "Aleatorio", "RD Station": "Estación RD", - "RDStation_Token": "Token de estación RD", + "RDStation_Token": "Token de RD Station", "React_when_read_only": "Permitir reaccionar", "React_when_read_only_changed_successfully": "Permitir reaccionar cuando sólo lectura ha cambiado con éxito", "Reacted_with": "Reacciono con", @@ -3071,7 +3148,7 @@ "Read_only_group": "Grupo de sólo lectura", "Real_Estate": "Bienes raíces", "Real_Time_Monitoring": "Monitoreo en tiempo real", - "RealName_Change_Disabled": "Su administrador Rocket.Chat ha desactivado el cambio de nombres", + "RealName_Change_Disabled": "Su administrador de Rocket.Chat ha desactivado el cambio de nombres", "Reason_To_Join": "Motivo para unirse", "Receive_alerts": "Recibe alertas", "Receive_Group_Mentions": "Reciba menciones @all y @here", @@ -3086,16 +3163,16 @@ "Regexp_validation": "Validación por expresión regular", "Register": "Registrar una nueva cuenta", "Register_Server": "Servidor de registro", - "Register_Server_Info": "Utilice las pasarelas y los proxies preconfigurados proporcionados por Rocket.Chat Technologies Corp.", + "Register_Server_Info": "Utilice las puertas de enlace y los proxies preconfigurados proporcionados por Rocket.Chat Technologies Corp.", "Register_Server_Opt_In": "Boletín, ofertas y actualizaciones de productos", "Register_Server_Registered": "Registrarse para acceder", "Register_Server_Registered_I_Agree": "Estoy de acuerdo con el", "Register_Server_Registered_Livechat": "LiveChat proxy", - "Register_Server_Registered_Marketplace": "Mercado de aplicaciones", + "Register_Server_Registered_Marketplace": "Aplicaciones Marketplace ", "Register_Server_Registered_OAuth": "Proxy OAuth para redes sociales", "Register_Server_Registered_Push_Notifications": "Puerta de enlace de notificaciones móviles push", "Register_Server_Standalone": "Mantente independiente, necesitarás", - "Register_Server_Standalone_Own_Certificates": "Recompile las aplicaciones móviles con sus propios certificados", + "Register_Server_Standalone_Own_Certificates": "Vuelva a compilar las aplicaciones móviles con sus propios certificados", "Register_Server_Standalone_Service_Providers": "Crear cuentas con proveedores de servicios", "Register_Server_Standalone_Update_Settings": "Actualiza la configuración preconfigurada", "Register_Server_Terms_Alert": "Por favor, acepte los términos para completar el registro", @@ -3129,6 +3206,7 @@ "reply_counter_plural": "__counter__ respuestas", "Reply_in_direct_message": "Responder en mensaje directo", "Reply_in_thread": "Responder en hilo", + "Reply_via_Email": "Responder por correo electrónico", "ReplyTo": "Responder a", "Report": "Reportar", "Report_Abuse": "Reportar abuso", @@ -3142,6 +3220,8 @@ "Requested_At": "Solicitado en", "Requested_By": "Solicitado por", "Require": "Requerir", + "Required": "requerido", + "required": "Requerido", "Require_all_tokens": "Requerir todos los tokens", "Require_any_token": "Requerir cualquier token", "Require_password_change": "Requerir el cambio de contraseña", @@ -3155,7 +3235,7 @@ "reset-other-user-e2e-key": "Restablecer la clave E2E de otro usuario", "Responding": "Respondiendo", "Response_description_post": "Los cuerpos vacíos o los cuerpos con una propiedad de texto vacía simplemente serán ignorados. Las respuestas que no sean 200 se volverán a intentar una cantidad razonable de veces. Se publicará una respuesta con el alias y el avatar especificados anteriormente. Puede anular esta información como en el ejemplo anterior.", - "Response_description_pre": "Si el controlador desea volver a publicar una respuesta en el canal, se debe devolver el siguiente JSON como cuerpo de la respuesta:", + "Response_description_pre": "Si el controlador desea volver a publicar una respuesta en el canal, el siguiente JSON debe devolverse como el cuerpo de la respuesta:", "Restart": "Reiniciar", "Restart_the_server": "Reiniciar el servidor", "Retail": "Al por menor", @@ -3163,35 +3243,35 @@ "RetentionPolicy": "Política de retención", "RetentionPolicy_Advanced_Precision": "Usar la configuración avanzada de la política de retención", "RetentionPolicy_Advanced_Precision_Cron": "Utilice Cron de política de retención avanzada", - "RetentionPolicy_Advanced_Precision_Cron_Description": "Con qué frecuencia debe ejecutarse el temporizador de borrado definido por la expresión del trabajo cron. Establecer esto en un valor más preciso hace que los canales con temporizadores de retención rápidos funcionen mejor, pero podría costar potencia de procesamiento adicional en comunidades grandes.", + "RetentionPolicy_Advanced_Precision_Cron_Description": "Con qué frecuencia debe ejecutarse el temporizador de poda definido por la expresión del trabajo cron. Establecer esto en un valor más preciso hace que los canales con temporizadores de retención rápidos funcionen mejor, pero podría costar potencia de procesamiento adicional en comunidades grandes.", "RetentionPolicy_AppliesToChannels": "Se aplica a canales", "RetentionPolicy_AppliesToDMs": "Se aplica a mensajes directos", "RetentionPolicy_AppliesToGroups": "Se aplica a grupos privados", - "RetentionPolicy_Description": "Borra automáticamente los mensajes antiguos en su instancia de Rocket.Chat.", + "RetentionPolicy_Description": "Elimina automáticamente los mensajes antiguos en su instancia de Rocket.Chat.", "RetentionPolicy_DoNotPruneDiscussion": "No borrar los mensajes de discusión", "RetentionPolicy_DoNotPrunePinned": "No borrar los mensajes fijados", "RetentionPolicy_DoNotPruneThreads": "No borrar los hilos", "RetentionPolicy_Enabled": "Habilitado", "RetentionPolicy_ExcludePinned": "Excluir mensajes fijados", "RetentionPolicy_FilesOnly": "Solo eliminar archivos", - "RetentionPolicy_FilesOnly_Description": "Solo se eliminarán los archivos, los mensajes se mantendrán en su lugar.", + "RetentionPolicy_FilesOnly_Description": "Solo se eliminarán los archivos, los propios mensajes permanecerán en su lugar.", "RetentionPolicy_MaxAge": "Antigüedad máxima del mensaje", - "RetentionPolicy_MaxAge_Channels": "Antigüedad máxima del mensaje en canales", - "RetentionPolicy_MaxAge_Description": "Borrar todos los mensajes anteriores a este valor, en días", + "RetentionPolicy_MaxAge_Channels": "Antigüedad máxima de los mensajes en los canales", + "RetentionPolicy_MaxAge_Description": "Elimine todos los mensajes anteriores a este valor, en días", "RetentionPolicy_MaxAge_DMs": "Antigüedad máxima del mensaje en mensajes directos", "RetentionPolicy_MaxAge_Groups": "Antigüedad máxima del mensaje en grupos privados", "RetentionPolicy_Precision": "Precisión del temporizador", - "RetentionPolicy_Precision_Description": "Con qué frecuencia debe ejecutarse el temporizador de borrado. Establecer esto en un valor más preciso hace que los canales con temporizadores de retención rápidos funcionen mejor, pero puede costar más potencia de procesamiento en comunidades grandes.", - "RetentionPolicy_RoomWarning": "Los mensajes anteriores a __time__ se eliminarán automáticamente aquí", + "RetentionPolicy_Precision_Description": "Con qué frecuencia debe funcionar el temporizador de poda. Establecer esto en un valor más preciso hace que los canales con temporizadores de retención rápidos funcionen mejor, pero podría costar potencia de procesamiento adicional en comunidades grandes.", + "RetentionPolicy_RoomWarning": "Los mensajes anteriores a __time__ se eliminan automáticamente aquí", "RetentionPolicy_RoomWarning_FilesOnly": "Los archivos anteriores a __time__ se eliminarán automáticamente aquí (los mensajes permanecen intactos)", "RetentionPolicy_RoomWarning_Unpinned": "Los mensajes no fijados anteriores a __time__ se eliminarán automáticamente aquí", "RetentionPolicy_RoomWarning_UnpinnedFilesOnly": "Los archivos no fijados anteriores a __time__ se eliminarán automáticamente aquí (los mensajes permanecen intactos)", "RetentionPolicyRoom_Enabled": "Borrar mensajes antiguos automáticamente", "RetentionPolicyRoom_ExcludePinned": "Excluir mensajes fijados", "RetentionPolicyRoom_FilesOnly": "Borre solo archivos, mantenga mensajes", - "RetentionPolicyRoom_MaxAge": "Antigúedad máxima del mensaje en días (predeterminado: __max__)", + "RetentionPolicyRoom_MaxAge": "Antigüedad máxima del mensaje en días (predeterminado: __max__)", "RetentionPolicyRoom_OverrideGlobal": "Anular la política de retención global", - "RetentionPolicyRoom_ReadTheDocs": "¡Cuidado! Ajustar estas configuraciones sin sumo cuidado puede destruir todo el historial de mensajes. Lea la documentación antes de activar la función en aquí.", + "RetentionPolicyRoom_ReadTheDocs": "¡Cuidado! Ajustar estas configuraciones sin el mayor cuidado puede destruir todo el historial de mensajes. Lea la documentación antes de activar la función aquí .", "Retry_Count": "Contador de reintentos", "Return_to_home": "Volver a inicio", "Return_to_previous_page": "Volver a la página anterior", @@ -3254,9 +3334,9 @@ "SAML_AuthnRequest_Template_Description": "Las siguientes variables están disponibles:\n- **\\_\\_newId\\_\\_**: Cadena de identificación generada aleatoriamente\n- **\\_\\_instant\\_\\_**: Fecha y hora actual\n- **\\_\\_callbackUrl\\_\\_**: La URL de devolución de llamada de Rocket.Chat.\n- **\\_\\_entryPoint\\_\\_**: El valor de la opción __Custom Entry Point__\n- **\\_\\_issuer\\_\\_**: El valor de la opción __Custom Issuer__\n- **\\_\\_identifierFormatTag\\_\\_**: El contenido de __NameID Policy Template__ si un válido __Identifier Format__ es configurado.\n- **\\_\\_identifierFormat\\_\\_**: El valor de la opción __Identifier Format__\n- **\\_\\_authnContextTag\\_\\_**: El contenido de __AuthnContext Template__ si un válido __Custom Authn Context__ es configurado.\n- **\\_\\_authnContextComparison\\_\\_**: El valor de la opción __Authn Context Comparison__\n- **\\_\\_authnContext\\_\\_**: El valor de la opción __Custom Authn Context__", "SAML_Custom_Authn_Context": "Contexto de Authn personalizado", "SAML_Custom_Authn_Context_Comparison": "Comparación de contexto Authn", - "SAML_Custom_Authn_Context_description": "Dejar vacío para omitir el contexto de autenticación de la solicitud.\n\nPara agregar múltiples contextos de autenticación adicionales, añadalos directamente a la opción __AuthnContext Template__", + "SAML_Custom_Authn_Context_description": "Deje esto vacío para omitir el contexto de autenticación de la solicitud.\n \nPara agregar múltiples contextos de autenticación, agregue los adicionales directamente a la configuración __AuthnContext Template__.", "SAML_Custom_Cert": "Certificado Personalizado ", - "SAML_Custom_Debug": "Habilitar debug", + "SAML_Custom_Debug": "Habilitar depuración", "SAML_Custom_EMail_Field": "Nombre del campo de correo electrónico", "SAML_Custom_Entry_point": "Punto de Entrada Personalizado", "SAML_Custom_Generate_Username": "Generar Nombre de Usuario", @@ -3265,7 +3345,7 @@ "SAML_Custom_Immutable_Property_EMail": "Correo electrónico", "SAML_Custom_Immutable_Property_Username": "Nombre de usuario", "SAML_Custom_Issuer": "Emisor Personalizado", - "SAML_Custom_Logout_Behaviour": "Comportamiento de desconexión", + "SAML_Custom_Logout_Behaviour": "Comportamiento de cierre de sesión", "SAML_Custom_Logout_Behaviour_End_Only_RocketChat": "Solo cierra sesión en Rocket.Chat", "SAML_Custom_Logout_Behaviour_Terminate_SAML_Session": "Terminar sesión SAML", "SAML_Custom_mail_overwrite": "Sobrescribir el correo del usuario (usar el atributo idp)", @@ -3302,7 +3382,7 @@ "SAML_Role_Attribute_Name": "Nombre del atributo de rol", "SAML_Role_Attribute_Name_Description": "Si este atributo se encuentra en la respuesta SAML, sus valores se usarán como nombres de rol para los nuevos usuarios.", "SAML_Role_Attribute_Sync": "Sincronizar los roles de usuario", - "SAML_Role_Attribute_Sync_Description": "Sincronizar los roles de usuario SAML al iniciar sesión (sobrescribe los roles de usuario locales).", + "SAML_Role_Attribute_Sync_Description": "Sincronice los roles de usuario de SAML al iniciar sesión (sobrescribe los roles de usuario local).", "SAML_Section_1_User_Interface": "Interfaz de usuario", "SAML_Section_2_Certificate": "Certificado", "SAML_Section_3_Behavior": "Comportamiento", @@ -3310,9 +3390,9 @@ "SAML_Section_5_Mapping": "Mapeo", "SAML_Section_6_Advanced": "Avanzado", "SAML_Custom_channels_update": "Actualizar suscripciones de salas en cada login", - "SAML_Custom_channels_update_description": "Asegura que el usuario es miembro de todos los canales en la afirmación SAML en cada login.", - "SAML_Custom_include_private_channels_update": "Incluye grupos privados en la suscripción", - "SAML_Custom_include_private_channels_update_description": "Añade el usuario a cualquier grupo privado que exista en la afirmación SAML.", + "SAML_Custom_channels_update_description": "Garantiza que el usuario sea miembro de todos los canales en la aserción SAML en cada inicio de sesión.", + "SAML_Custom_include_private_channels_update": "Incluir Room privadas en la suscripción de la Room", + "SAML_Custom_include_private_channels_update_description": "Agrega usuario a cualquier sala privada que exista en la aserción SAML.", "Saturday": "Sábado", "Save": "Guardar", "Save_changes": "Guardar cambios", @@ -3327,6 +3407,7 @@ "Scan_QR_code": "Con una aplicación autenticadora como Google Authenticator, Authy o Duo, escanee el código QR. Mostrará un código de 6 dígitos que debe ingresar a continuación.", "Scan_QR_code_alternative_s": "Si no puede escanear el código QR, puede ingresar el código manualmente en su lugar:", "Scope": "Alcance", + "Score": "Puntuación", "Screen_Lock": "Bloqueo de pantalla", "Screen_Share": "Compartir Pantalla", "Script_Enabled": "Script Habilitado", @@ -3337,8 +3418,8 @@ "Search_Channels": "Canales de búsqueda", "Search_Chat_History": "Buscar en el historial de chat", "Search_current_provider_not_active": "El proveedor de búsqueda actual no está activo", - "Search_Integrations": "Buscar integraciones", - "Search_message_search_failed": "Solicitud de búsqueda fallida", + "Search_Integrations": "Integraciones de búsqueda", + "Search_message_search_failed": "Error en la solicitud de búsqueda", "Search_Messages": "Buscar Mensajes", "Search_Files": "Buscar archivos", "Search_Page_Size": "Tamaño de página", @@ -3385,24 +3466,28 @@ "Send_request_on_chat_close": "Enviar solicitud en el cierre de chat", "Send_request_on_chat_queued": "Enviar solicitud en la cola del chat", "Send_request_on_chat_start": "Enviar solicitud en el inicio del chat", - "Send_request_on_chat_taken": "Enviar solicitud en el chat tomado", + "Send_request_on_chat_taken": "Enviar solicitud en chat realizado", "Send_request_on_forwarding": "Enviar solicitud de reenvío", - "Send_request_on_lead_capture": "Enviar solicitud de captura de plomo", - "Send_request_on_offline_messages": "Enviar solicitud de mensajes fuera de línea", - "Send_request_on_visitor_message": "Enviar solicitud de mensajes de visitante", + "Send_request_on_lead_capture": "Enviar solicitud de captura de clientes potenciales", + "Send_request_on_offline_messages": "Enviar solicitud en mensajes sin conexión", + "Send_request_on_visitor_message": "Enviar solicitud en mensajes de visitantes", "Send_Test": "Enviar prueba", + "Send_Test_Email": "Enviar correo electrónico de prueba", "Send_via_email": "Enviar por correo electrónico", - "Send_Visitor_navigation_history_as_a_message": "Enviar el historial de navegación de visitantes como un mensaje", + "Send_via_Email_as_attachment": "Enviar por correo electrónico como archivo adjunto", + "Send_Visitor_navigation_history_as_a_message": "Enviar el historial de navegación del visitante como mensaje", "Send_visitor_navigation_history_on_request": "Enviar el historial de navegación de visitantes a petición", "Send_welcome_email": "Enviar correo electrónico de bienvenida", "Send_your_JSON_payloads_to_this_URL": "Envíe sus payloads JSON a esta dirección URL.", "send-many-messages": "Envíar muchos mensajes", "send-omnichannel-chat-transcript": "Enviar transcripción de conversación LiveChat", + "Sender_Info": "Información del remitente", "Sending": "Enviando...", "Sent_an_attachment": "Enviado un archivo adjunto", "Sent_from": "Enviado desde", "Separate_multiple_words_with_commas": "Separe varias palabras con comas", "Served_By": "Servido por", + "Server": "Servidor", "Server_File_Path": "Ruta del archivo del servidor", "Server_Folder_Path": "Ruta de la carpeta del servidor", "Server_Info": "Información del servidor", @@ -3426,9 +3511,9 @@ "Settings": "Configuración", "Settings_updated": "Se han actualización las opciones ", "Setup_Wizard": "Asistente de configuración", - "Setup_Wizard_Info": "Lo guiaremos a través de la configuración de su primer usuario administrador, la configuración de su organización y el registro de su servidor para recibir notificaciones automáticas gratuitas y más.", + "Setup_Wizard_Info": "Lo guiaremos para configurar su primer usuario administrador, configurar su organización y registrar su servidor para recibir notificaciones push gratuitas y más.", "Share_Location_Title": "¿Compartir ubicacion?", - "Canned_responses": "Modelos de respuesta", + "Canned_responses": "Respuesta predefinida", "Shared_Location": "Ubicación Compartida", "Shared_Secret": "Secreto compartido", "Shortcut": "Atajo", @@ -3467,7 +3552,7 @@ "Skip": "Saltar", "Slack_Users": "CSV de los usuarios de Slack", "SlackBridge_APIToken": "API Tokens", - "SlackBridge_APIToken_Description": "Puede configurar múltiples servidores de Slack añadiendo un token de API por línea.", + "SlackBridge_APIToken_Description": "Puede configurar varios servidores slack agregando un token API por línea.", "SlackBridge_error": "SlackBridge obtuvo un error al importar sus mensajes en %s: %s", "SlackBridge_finish": "SlackBridge ha terminado de importar los mensajes en%s. Por favor, vuelva a cargar para ver todos los mensajes.", "SlackBridge_Out_All": "SlackBridge Out All", @@ -3497,7 +3582,7 @@ "Smarsh_Timezone": "Zona horaria Smarsh", "Smileys_and_People": "Sonrisas y Personas", "SMS_Default_Omnichannel_Department": "Departamento de LiveChat (por defecto)", - "SMS_Default_Omnichannel_Department_Description": "Si está configurado, todos los nuevos chats entrantes iniciados por esta integración serán enviados a este departamento.", + "SMS_Default_Omnichannel_Department_Description": "Si se establece, todos los nuevos chats entrantes iniciados por esta integración se enrutarán a este departamento.", "SMS_Enabled": "SMS Habilitado", "SMTP": "SMTP", "SMTP_Host": "Servidor SMTP", @@ -3557,7 +3642,7 @@ "Stats_Total_Incoming_Integrations": "Total de integraciones entrantes", "Stats_Total_Installed_Apps": "Total de aplicaciones instaladas", "Stats_Total_Integrations": "Total de integraciones", - "Stats_Total_Integrations_With_Script_Enabled": "Total de integraciones con el script habilitado", + "Stats_Total_Integrations_With_Script_Enabled": "Integraciones totales con script habilitado", "Stats_Total_Livechat_Rooms": "Total de salas de LiveChat", "Stats_Total_Messages": "Total de Mensajes", "Stats_Total_Messages_Channel": "Total de mensajes en canales", @@ -3572,9 +3657,9 @@ "Stats_Total_Users": "Total de usuarios", "Status": "Estado", "StatusMessage": "Mensaje de estado", - "StatusMessage_Change_Disabled": "Tu administrador de Rocket.Chat ha desactivado el cambio de mensajes de estado", - "StatusMessage_Changed_Successfully": "Mensaje de estado cambiado correctamente.", - "StatusMessage_Placeholder": "¿Qué estás haciendo ahora?", + "StatusMessage_Change_Disabled": "Su administrador de Rocket.Chat ha desactivado el cambio de mensajes de estado", + "StatusMessage_Changed_Successfully": "El mensaje de estado cambió correctamente.e.", + "StatusMessage_Placeholder": "¿Qué estás haciendo en este momento?", "StatusMessage_Too_Long": "El mensaje de estado debe tener menos de 120 caracteres.", "Step": "Paso", "Stop_Recording": "Detener grabación", @@ -3594,8 +3679,8 @@ "Sunday": "Domingo", "Support": "Soporte", "Support_Cordova_App": "Soporte de la aplicación Cordova", - "Support_Cordova_App_Alert": "Esta característica está obsoleta y será eliminada en la próxima versión principal", - "Support_Cordova_App_Description": "Permitir que la antigua aplicación móvil, basada en la tecnología de Cordova, acceda al servidor que habilita el CORS para algunas APIs", + "Support_Cordova_App_Alert": "Esta función está obsoleta y se eliminará en la próxima versión principal.", + "Support_Cordova_App_Description": "Permitir que la aplicación móvil anterior, basada en la tecnología Cordova, acceda al servidor que habilita CORS para algunas API", "Survey": "Encuesta", "Survey_instructions": "Califique cada pregunta de acuerdo a su nivel de satisfacción, 1 para completamente insatisfecho y 5 para completamente satisfecho.", "Symbols": "símbolos", @@ -3628,8 +3713,8 @@ "The_empty_room__roomName__will_be_removed_automatically": "La sala vacía __roomName__ se eliminará automáticamente.", "The_field_is_required": "El campo %s es requerido.", "The_image_resize_will_not_work_because_we_can_not_detect_ImageMagick_or_GraphicsMagick_installed_in_your_server": "El ajuste de tamaño de las imágenes no funcionará porque no detectamos ImageMagick o GraphicsMagick instalados en su servidor.", - "The_message_is_a_discussion_you_will_not_be_able_to_recover": "¡El mensaje es una discusión! No será capaz de recuperar los mensajes", - "The_mobile_notifications_were_disabled_to_all_users_go_to_Admin_Push_to_enable_the_Push_Gateway_again": "Las notificaciones móviles fueron desactivadas para todos los usuarios, ir a \"Admin > Push\" para habilitar el Push Gateway de nuevo", + "The_message_is_a_discussion_you_will_not_be_able_to_recover": "¡El mensaje es una discusión, ¡no podrá recuperar los mensajes!", + "The_mobile_notifications_were_disabled_to_all_users_go_to_Admin_Push_to_enable_the_Push_Gateway_again": "Las notificaciones móviles se deshabilitaron para todos los usuarios, vaya a \"Admin> Push\" para habilitar Push Gateway nuevamente", "The_necessary_browser_permissions_for_location_sharing_are_not_granted": "No se conceden los permisos de navegación necesarios para compartir la ubicación", "The_peer__peer__does_not_exist": "El peer __peer__ no existe.", "The_redirectUri_is_required": "El Uri de redireccionamiento es requerido", @@ -3654,7 +3739,7 @@ "theme-color-primary-font-color": "Color de Texto Primario", "theme-color-rc-color-alert": "Alerta", "theme-color-rc-color-alert-light": "Luz de alerta", - "theme-color-rc-color-alert-message-primary": "Mensaje de alerta primario", + "theme-color-rc-color-alert-message-primary": "Mensaje de alerta principal", "theme-color-rc-color-alert-message-primary-background": "Fondo principal del mensaje de alerta", "theme-color-rc-color-alert-message-secondary": "Mensaje de alerta secundario", "theme-color-rc-color-alert-message-secondary-background": "Fondo secundario del mensaje de alerta", @@ -3735,6 +3820,7 @@ "To_users": "Para los Usuarios", "Today": "Hoy", "Toggle_original_translated": "Alternar original / traducido", + "toggle-room-e2e-encryption": "Alternar cifrado Room E2E", "Token": "Token", "Token_Access": "Acceso Token", "Token_Controlled_Access": "Acceso controlado Token", @@ -3742,10 +3828,10 @@ "Tokenpass_Channel_Label": "Canal Tokenpass", "Tokenpass_Channels": "Canales Tokenpass", "Tokens_Minimum_Needed_Balance": "Mínimo saldo de tokens necesario", - "Tokens_Minimum_Needed_Balance_Description": "Establezca el saldo mínimo necesario en cada token. En blanco o \"0\" para no límite.", + "Tokens_Minimum_Needed_Balance_Description": "Establezca el saldo mínimo necesario en cada Token. En blanco o \"0\" para sin límite.", "Tokens_Minimum_Needed_Balance_Placeholder": "Valor del saldo", "Tokens_Required": "Tokens requeridos", - "Tokens_Required_Input_Description": "Escriba uno o más nombres de recursos de tokens separados por comas.", + "Tokens_Required_Input_Description": "Escriba uno o más nombres de activos de tokens separados por comas.", "Tokens_Required_Input_Error": "Tokens escritos de manera incorrecta", "Tokens_Required_Input_Placeholder": "Nombres de recursos de tokens", "Topic": "Tema", @@ -3762,13 +3848,12 @@ "totp-disabled": "No tienes habilitado el login 2FA para tu usuario", "totp-invalid": "El código o la contraseña no son válidos", "totp-required": "Se requiere TOTP", - "Tourism": "Turismo", "Transcript": "Transcripción", "Transcript_Enabled": "Pregunte al visitante si le gustaría una transcripción después de que se cerró el chat", "Transcript_message": "Mensaje para mostrar al preguntar sobre la transcripción", "Transcript_of_your_livechat_conversation": "Transcripción de su conversación de LiveChat.", "Transcript_Request": "Solicitud de transcripción", - "transfer-livechat-guest": "Trasladar a los huéspedes de LiveChat", + "transfer-livechat-guest": "Transferir invitados de Livechat", "Translate": "Traducir", "Translated": "Traducido", "Translations": "Traducciones", @@ -3777,17 +3862,17 @@ "Trigger_Words": "Palabras de activación", "Triggers": "Disparadores", "Troubleshoot": "Solución de problemas", - "Troubleshoot_Description": "Estos ajustes están pensados para ser activados sólo con la orientación de los equipos de desarrollo o de apoyo de Rocket.Chat. ¡No los toques si no sabes lo que estás haciendo!", + "Troubleshoot_Description": "Estas configuraciones están diseñadas para habilitarse solo con la guía de los equipos de soporte o desarrollo de Rocket.Chat. ¡No los toque si no sabe lo que está haciendo!", "Troubleshoot_Disable_Data_Exporter_Processor": "Desactivar el procesador de exportación de datos", - "Troubleshoot_Disable_Data_Exporter_Processor_Alert": "Este ajuste detiene el procesamiento de todas las solicitudes de exportación de los usuarios, ¡por lo que no recibirán el enlace para descargar sus datos!", + "Troubleshoot_Disable_Data_Exporter_Processor_Alert": "Esta configuración detiene el procesamiento de todas las solicitudes de exportación de los usuarios, por lo que no recibirán el enlace para descargar sus datos.", "Troubleshoot_Disable_Instance_Broadcast": "Desactivar la transmisión de la instancia", - "Troubleshoot_Disable_Instance_Broadcast_Alert": "Esta configuración evita que las instancias del Rocket.Chat envíen eventos a las otras instancias, ¡puede causar problemas de sincronización y mal comportamiento!", + "Troubleshoot_Disable_Instance_Broadcast_Alert": "Esta configuración evita que las instancias de Rocket.Chat envíen eventos a las otras instancias, ¡puede causar problemas de sincronización y mal comportamiento!", "Troubleshoot_Disable_Livechat_Activity_Monitor": "Desactivar el Monitor de Actividad de LiveChat", "Troubleshoot_Disable_Livechat_Activity_Monitor_Alert": "¡Esta configuración detiene el procesamiento de las sesiones de visita del LiveChat causando que las estadísticas dejen de funcionar correctamente!", "Troubleshoot_Disable_Notifications": "Deshabilitar notificaciones", "Troubleshoot_Disable_Notifications_Alert": "Esta configuración desactiva completamente el sistema de notificaciones; ¡los sonidos, las notificaciones de escritorio, las notificaciones de móvil y los correos electrónicos se detendrán!", "Troubleshoot_Disable_Presence_Broadcast": "Desactivar la transmisión de la presencia", - "Troubleshoot_Disable_Presence_Broadcast_Alert": "Esta configuración evita que todas las instancias envíen los cambios de estado de los usuarios a sus clientes, manteniendo a todos los usuarios con su estado de presencia desde la primera carga", + "Troubleshoot_Disable_Presence_Broadcast_Alert": "Esta configuración evita que todas las instancias envíen los cambios de estado de los usuarios a sus clientes, manteniendo a todos los usuarios con su estado de presencia desde la primera carga!", "Troubleshoot_Disable_Sessions_Monitor": "Desactivar el Monitor de Sesiones", "Troubleshoot_Disable_Sessions_Monitor_Alert": "¡Esta configuración detiene el procesamiento de las sesiones de visita del LiveChat causando que las estadísticas dejen de funcionar correctamente!", "Troubleshoot_Disable_Statistics_Generator": "Desactivar el generador de estadísticas", @@ -3804,7 +3889,7 @@ "Two-factor_authentication_email": "Autenticación en 2 pasos vía correo electrónico", "Two-factor_authentication_email_is_currently_disabled": "La autenticación en 2 pasos vía correo electrónico está actualmente desactivada", "Two-factor_authentication_enabled": "Autenticación en 2 pasos habilitada", - "Two-factor_authentication_is_currently_disabled": "La autenticación en 2 pasos está actualmente desactivada", + "Two-factor_authentication_is_currently_disabled": "La autenticación de dos factores a través de TOTP está actualmente deshabilitada", "Two-factor_authentication_native_mobile_app_warning": "ADVERTENCIA: una vez que habilite esto, no podrá iniciar sesión en las aplicaciones móviles nativas (Rocket.Chat +) usando su contraseña hasta que implementen el 2FA.", "Type": "Tipo", "Types_and_Distribution": "Tipos y distribución", @@ -3823,7 +3908,7 @@ "UI_Merge_Channels_Groups": "Unir grupos privados con Canales", "UI_Show_top_navbar_embedded_layout": "Mostrar la barra de navegación superior en el diseño incrustado", "UI_Unread_Counter_Style": "Estilo de contador no leído", - "UI_Use_Name_Avatar": "Use las iniciales de nombre completo para generar Avatar predeterminado", + "UI_Use_Name_Avatar": "Utilice las iniciales del nombre completo para generar un avatar predeterminado", "UI_Use_Real_Name": "Usar nombre real", "unable-to-get-file": "No se puede obtener el archivo", "Unarchive": "Desarchivar", @@ -3832,10 +3917,11 @@ "Unavailable": "No disponible", "Unblock_User": "Desbloquear usuario", "Uncheck_All": "Desmarcar todo", + "Uncollapse": "Desplegar", "Undefined": "No definido", "Unfavorite": "No favorito", "Unfollow_message": "Dejar de seguir el mensaje", - "Unignore": "Desactivar", + "Unignore": "No ignorar", "Uninstall": "Desinstalar", "Unit_removed": "Unidad eliminada", "Unknown_Import_State": "Estado de importación desconocido", @@ -3857,7 +3943,7 @@ "Unstar_Message": "Eliminar Destacado", "Update": "Actualización", "Update_EnableChecker": "Habilitar el Update Checker", - "Update_EnableChecker_Description": "Comprueba automáticamente las nuevas actualizaciones/mensajes importantes de los desarrolladores de Rocket.Chat y recibe notificaciones cuando están disponibles. La notificación aparece una vez por cada nueva versión como un banner en el que se puede hacer clic y como un mensaje del bot de Rocket.Cat, ambos visibles sólo para los administradores.", + "Update_EnableChecker_Description": "Comprueba automáticamente si hay nuevas actualizaciones / mensajes importantes de los desarrolladores de Rocket.Chat y recibe notificaciones cuando están disponibles. La notificación aparece una vez por nueva versión como un banner en el que se puede hacer clic y como un mensaje del bot Rocket.Cat, ambos visibles solo para los administradores.", "Update_every": "Actualiza cada", "Update_LatestAvailableVersion": "Actualizar a la última versión disponible", "Update_to_version": "Actualizar a la __version__", @@ -3875,8 +3961,8 @@ "Uptime": "Tiempo de actividad", "URL": "URL", "URL_room_hash": "Habilitar el nombre hash de la sala", - "URL_room_hash_description": "Se recomienda habilitarlo si la instancia Jitsi no utiliza ningún mecanismo de autenticación.", - "URL_room_prefix": "Prefijo de la habitación URL", + "URL_room_hash_description": "Recomendado para habilitar si la instancia de Jitsi no usa ningún mecanismo de autenticación", + "URL_room_prefix": "Prefijo de sala de URL", "URL_room_suffix": "Sufijo de la URL de la sala", "Use_account_preference": "Usar la preferencia de cuenta", "Use_Emojis": "Usar Emojis", @@ -3956,7 +4042,7 @@ "User_uploaded_image": "Subió una imagen", "user-generate-access-token": "User Generate Access Token", "user-generate-access-token_description": "Permiso para que los usuarios generen tokens de acceso", - "UserData_EnableDownload": "Habilitar descarga de datos de usuario", + "UserData_EnableDownload": "Habilitar la descarga de datos de usuario", "UserData_FileSystemPath": "Ruta del sistema (archivos exportados)", "UserData_FileSystemZipPath": "Ruta del sistema (archivo comprimido)", "UserData_MessageLimitPerRequest": "Límite de mensaje por solicitud", @@ -3970,7 +4056,7 @@ "UserDataDownload_Requested_Text": "Su archivo de datos será generado. Se enviará un enlace para descargarlo a su dirección de correo electrónico cuando esté listo. Hay __pending_operations__ operaciones en cola antes de que se ejecute la suya.", "UserDataDownload_RequestExisted_Text": "Su archivo de datos ya está siendo generado. Se enviará un enlace para descargarlo a su dirección de correo electrónico cuando esté listo. Hay __pending_operations__ operaciones en cola antes de que se ejecute la suya.", "Username": "Nombre de Usuario", - "Username_already_exist": "Nombre de usuario ya existe. Por favor prueba con otro nombre de usuario.", + "Username_already_exist": "Nombre de usuario ya existe. Intente con otro nombre de usuario.", "Username_and_message_must_not_be_empty": "Nombre de usuario y el mensaje no debe estar vacío.", "Username_cant_be_empty": "El nombre de usuario no puede estar vacío", "Username_Change_Disabled": "Su administrador de Rocket.Chat ha deshabilitado el cambio de nombres de usuario", @@ -3990,18 +4076,19 @@ "Users_and_rooms": "Usuarios y Salas", "Users_by_time_of_day": "Usuarios por hora del día", "Users_in_role": "Usuarios en el rol", - "Users_key_has_been_reset": "La llave del usuario ha sido restablecida", + "Users_key_has_been_reset": "Se restableció la clave del usuario", "Users_reacted": "Usuarios que reaccionaron", "Users_TOTP_has_been_reset": "El TOTP del usuario ha sido restablecido", "Uses": "Usos", "Uses_left": "Usos que quedan", + "Utilities": "Utilidades", "UTF8_Names_Slugify": "Slugify de nombres UTF8", "UTF8_Names_Validation": "Validación de Nombres UTF8", "UTF8_Names_Validation_Description": "No se permiten caracteres especiales ni espacios. Puede user - _ y . pero no al final de un nombre.", "Validate_email_address": "Validar correo electrónico", "Validation": "Validación", - "Value_messages": "__value__ mensajes", - "Value_users": "__value__ usuarios", + "Value_messages": "__value__ messages", + "Value_users": "__value__ users", "Verification": "Verificación", "Verification_Description": "Puede usar los siguientes marcadores de posición: [Verification_Url] para la URL de verificación.[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.", "Verification_Email": "Haga clic en aquípara verificar su cuenta.", @@ -4048,7 +4135,7 @@ "view-livechat-manager_description": "Permiso para ver otros administradores de LiveChat", "view-livechat-monitor": "Ver los monitores de Livechat", "view-livechat-queue": "Ver las colas de LiveChat", - "view-livechat-room-closed-by-another-agent": "Ver las salas de LiveChat cerradas por otro agente", + "view-livechat-room-closed-by-another-agent": "Ver las Rooms de LiveChat cerradas por otro agente", "view-livechat-room-closed-same-department": "Ver las salas de LiveChat cerradas por otro agente del mismo departamento", "view-livechat-rooms": "Ver las salas de LiveChat", "view-livechat-rooms_description": "Permiso para ver otros canales de LiveChat", @@ -4057,7 +4144,7 @@ "view-logs_description": "Permiso para ver los registros del servidor", "view-other-user-channels": "Ver otros canales de usuario", "view-other-user-channels_description": "Permiso para ver los canales propiedad de otros usuarios", - "view-outside-room": "Vista exterior de la habitación", + "view-outside-room": "Vista exterior de Room", "view-outside-room_description": "Permiso para ver usuarios fuera de la sala actual", "view-p-room": "Ver Sala Privada", "view-p-room_description": "Permiso para ver canales privados", @@ -4066,7 +4153,7 @@ "view-room-administration": "Ver la administración de la sala", "view-room-administration_description": "Permiso para ver estadísticas de mensajes públicos, privados y directos. No incluye la capacidad de ver conversaciones o archivos", "view-statistics": "Ver estadísticas", - "view-statistics_description": "Permiso para ver las estadísticas del sistema, como la cantidad de usuarios conectados, el número de habitaciones, la información del sistema operativo", + "view-statistics_description": "Permiso para ver estadísticas del sistema, como el número de usuarios conectados, el número de habitaciones, la información del sistema operativo", "view-user-administration": "Ver administración de usuarios", "view-user-administration_description": "Permiso para vista de lista de solo lectura parcial de otras cuentas de usuario actualmente conectadas al sistema. No se puede acceder a ninguna información de cuenta de usuario con este permiso", "Viewing_room_administration": "Ver administración de sala", @@ -4089,6 +4176,7 @@ "Warning": "Advertencia", "Warnings": "Advertencias", "WAU_value": "WAU __value__", + "We_appreciate_your_feedback": "Agradecemos sus comentarios", "We_are_offline_Sorry_for_the_inconvenience": "Fuera de línea. Disculpe las molestias.", "We_have_sent_password_email": "Te hemos enviado un e-mail con las instrucciones para resetear la contraseña. Si no recibes un correo en breve, por favor regresa y vuelve a intentarlo.", "We_have_sent_registration_email": "Te hemos enviado un e-mail para confirmar tu registro. Si no recibes un correo en breve, por favor regresa y vuelve a intentarlo.", @@ -4121,10 +4209,12 @@ "Welcome_to": "Bienvenido a __Site_Name__", "Welcome_to_the": "Bienvenido a la", "When": "Cuando", - "When_a_line_starts_with_one_of_there_words_post_to_the_URLs_below": "Cuando una línea comienza con una de estas palabras, publica en la(s) siguiente(s) URL(s)", + "When_a_line_starts_with_one_of_there_words_post_to_the_URLs_below": "Cuando una línea comience con una de estas palabras, publique en la (s) URL (s) a continuación", "When_is_the_chat_busier?": "¿Cuándo está más ocupado el chat?", "Where_are_the_messages_being_sent?": "¿Dónde se envían los mensajes?", + "Why_did_you_chose__score__": "¿Por qué eligió __score__?", "Why_do_you_want_to_report_question_mark": "¿Por qué quiere reportar?", + "Will_Appear_In_From": "Aparecerá en el encabezado De: de los correos electrónicos que envíe.", "will_be_able_to": "será capaz de", "Will_be_available_here_after_saving": "Estará disponible aquí después de guardar", "Without_priority": "Sin prioridad", @@ -4153,7 +4243,7 @@ "You_can_search_using_RegExp_eg": "Puede buscar utilizando una Expresión Regular. Por ejemplo: /^text$/i", "You_can_use_an_emoji_as_avatar": "También puede utilizar un emoji como avatar.", "You_can_use_webhooks_to_easily_integrate_livechat_with_your_CRM": "Se puede utilizar WebHooks para integrar fácilmente LiveChat con su CRM.", - "You_cant_leave_a_livechat_room_Please_use_the_close_button": "No puedes salir de una sala de LiveChat. Por favor, utilice el botón de cerrar.", + "You_cant_leave_a_livechat_room_Please_use_the_close_button": "No puedes salir de una sala LiveChat. Por favor, use el botón cerrar.", "You_have_a_new_message": "Tiene un nuevo mensaje", "You_have_been_muted": "Has sido silenciado y no puedes hablar en esta sala", "You_have_n_codes_remaining": "Usted tiene códigos __number__ restantes.", @@ -4173,6 +4263,7 @@ "You_should_name_it_to_easily_manage_your_integrations": "Nombralo para poder administrar fácilmente sus integraciones", "You_will_be_asked_for_permissions": "Se le pedirá permiso", "You_will_not_be_able_to_recover": "No podrás recuperar este mensaje", + "You_will_not_be_able_to_recover_email_inbox": "No podrá recuperar esta bandeja de entrada de correo electrónico", "You_will_not_be_able_to_recover_file": "No será capaz de recuperar este archivo", "You_wont_receive_email_notifications_because_you_have_not_verified_your_email": "No recibirá notificaciones por correo electrónico, ya que no ha comprobado su correo electrónico.", "Your_e2e_key_has_been_reset": "Su clave E2E ha sido restablecida.", diff --git a/packages/rocketchat-i18n/i18n/fa.i18n.json b/packages/rocketchat-i18n/i18n/fa.i18n.json index 0396d266f5ef..af32cfcab55e 100644 --- a/packages/rocketchat-i18n/i18n/fa.i18n.json +++ b/packages/rocketchat-i18n/i18n/fa.i18n.json @@ -214,6 +214,7 @@ "Accounts_UserAddedEmailSubject_Default": "شما به [Site_Name] اضافه شده اید", "Accounts_Verify_Email_For_External_Accounts": "اعتبار سنجی ایمیل برای حساب های خارجی", "Activate": "فعال کردن", + "Active": "فعال", "Activity": "فعالیت", "Add": "اضافه کردن", "Add_agent": "اضافه کردن عامل", @@ -247,7 +248,6 @@ "Admin_Info": "اطلاعات مدیریت", "Administration": "مدیریت", "Adult_images_are_not_allowed": "تصاویر بزرگسال ممنوع ", - "Advocacy": "دفاع", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "پس از تأیید هویت OAuth2 کاربران به یکی از آدرس های لیست شده هدایت خواهند شد. شما میتوانید هر آدرس را در خط جدید اضافه کنید", "Agent": "نماینده", "Agent_added": "عامل اضافه شده است", @@ -722,7 +722,6 @@ "Connection_Reset": "تنظیم مجدد اتصال", "Connectivity_Services": "خدمات اتصال", "Consulting": "مشاوره", - "Consumer_Goods": "کالاهای مصرفی", "Contact": "مخاطب", "Contains_Security_Fixes": "دارای رفع امنیتی است", "Content": "محتوا", @@ -1438,6 +1437,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "مسیر پوشه WebDAV که فایل ها باید به آن آپلود شوند", "FileUpload_Webdav_Username": "نام کاربری WebDAV", "Filter": "صافی", + "Filters": "فیلترها", "Financial_Services": "خدمات مالی", "First_Channel_After_Login": "کانال اول پس از ورود", "Flags": "پرچم ها", @@ -1505,8 +1505,6 @@ "Hash": "هش", "Header": "سربرگ", "Header_and_Footer": "هدر و پاورقی", - "Healthcare_and_Pharmaceutical": "بهداشت / داروسازی", - "Help_Center": "مرکز کمک", "Helpers": "حامیان", "Hex_Color_Preview": "پیش نمایش رنگ Hex", "Hidden": "پنهان", @@ -1526,6 +1524,7 @@ "Highlights_How_To": "برای مطلع شدن از زمانی که کسی به کلمه یا عبارتی اشاره می کند آن را اینجا وارد کنید. می توانید کلمات یا عبارات را با کاما جدا کنید. کلمات نشان شده به بزرگی و کوچکی حروف حساس نیستند.", "Highlights_List": "کلمات نشان شده", "History": "تاریخ", + "Home": "خانه", "Host": "میزبان", "hours": "ساعت ها", "Hours": "ساعت ها", @@ -2317,7 +2316,6 @@ "Public": "عمومی", "Public_Channel": "کانال عمومی", "Public_Community": "جامعه عمومی", - "Public_Relations": "روابط عمومی", "Push": "فشار دادن", "Push_apn_cert": "APN بزنید", "Push_apn_dev_cert": "APN نویس بزنید", @@ -2818,7 +2816,6 @@ "Tokens_Required_Input_Placeholder": "نام دارایی های توکن", "Topic": "موضوع", "Total_messages": "مجموع پیغام ها", - "Tourism": "گردشگری", "Transcript_Enabled": "از بازدید کننده بپرسید اگر آنها یک رونوشت پس از گپ بسته شوند", "Transcript_message": "پیام نمایش در هنگام درخواست در مورد متن", "Transcript_of_your_livechat_conversation": "متن مصاحبه لویچات شما", diff --git a/packages/rocketchat-i18n/i18n/fi.i18n.json b/packages/rocketchat-i18n/i18n/fi.i18n.json index ffe29c62a83e..e276fe4e1979 100644 --- a/packages/rocketchat-i18n/i18n/fi.i18n.json +++ b/packages/rocketchat-i18n/i18n/fi.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Voit käyttää seuraavia placeholdereita: [name], [fname], [lname] käyttäjän koko nimen, etunimen tai sukunimen paikalla. [email] käyttäjän sähköpostiosoitteena. [password] käyttäjän salasanana. [Site_Name] ja [Site_URL] sivuston nimen ja osoitteen paikalla. ", "Accounts_UserAddedEmailSubject_Default": "Sinut on lisätty sivustolle [Site_Name]", "Activate": "Aktivoi", + "Active": "Aktiivinen", "Activity": "Tapahtumat", "Add": "Lisää", "Add_agent": "Lisää agentti", @@ -219,7 +220,6 @@ "Admin_Info": "Järjestelmänvalvojan tiedot", "Administration": "Ylläpito", "Adult_images_are_not_allowed": "Aikuisten kuvat eivät ole sallittuja", - "Advocacy": "asianajo", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "OAuth2-todennuksen jälkeen käyttäjät ohjataan tähän URL-osoitteeseen", "Agent": "Agentti", "Agent_added": "Agentti lisätty", @@ -549,7 +549,6 @@ "Connection_Closed": "Yhteys suljettu", "Connection_Reset": "Yhteyden uudelleen käynnistys", "Consulting": "konsultointi", - "Consumer_Goods": "Kulutustavarat", "Contains_Security_Fixes": "Sisältää suojauskorjauksia", "Content": "Pitoisuus", "Continue": "Jatkaa", @@ -1198,6 +1197,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV-kansion polku, johon tiedostot on lähetettävä", "FileUpload_Webdav_Username": "WebDAV-käyttäjätunnus", "Filter": "Suodattaa", + "Filters": "Suodattimet", "Financial_Services": "Rahoituspalvelut", "First_Channel_After_Login": "Ensimmäinen kanava kirjautumisen jälkeen", "Flags": "Liput", @@ -1265,8 +1265,6 @@ "Hash": "Hash", "Header": "Ylätunniste", "Header_and_Footer": "Ylä-ja alatunniste", - "Healthcare_and_Pharmaceutical": "Terveydenhuolto / Pharmaceutical", - "Help_Center": "Ohjekeskus", "Helpers": "auttajia", "Hex_Color_Preview": "Hex Värin esikatselu", "Hidden": "Piilotettu", @@ -1286,6 +1284,7 @@ "Highlights_How_To": "Lisää tähän pilkuilla eroteltu lista sanoista, joiden maininnasta saat ilmoituksen. Korostetut sanat eivät ole merkkikokoriippuvaisia.", "Highlights_List": "Korostetut sanat", "History": "Historia", + "Home": "Koti", "Host": "Host", "hours": "tuntia", "Hours": "tuntia", @@ -2045,7 +2044,6 @@ "Public": "Julkinen", "Public_Channel": "Julkinen kanava", "Public_Community": "Julkinen yhteisö", - "Public_Relations": "Julkiset suhteet", "Push": "Push", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Cert (kehitys)", @@ -2543,7 +2541,6 @@ "Tokens_Required_Input_Placeholder": "Tokensin omaisuuden nimet", "Topic": "Otsikko", "Total_messages": "Viestejä yhteensä", - "Tourism": "matkailu", "Transcript_Enabled": "Kysy kävijältä, jos he haluaisivat transkriptin chat-keskustelun jälkeen", "Transcript_message": "Viesti, kun kysytään transkriptistä", "Transcript_of_your_livechat_conversation": "Transcript of your livechat-keskustelu.", diff --git a/packages/rocketchat-i18n/i18n/fr.i18n.json b/packages/rocketchat-i18n/i18n/fr.i18n.json index b2a112f6b805..5a56082f6953 100644 --- a/packages/rocketchat-i18n/i18n/fr.i18n.json +++ b/packages/rocketchat-i18n/i18n/fr.i18n.json @@ -5,6 +5,8 @@ "__count__empty_rooms_will_be_removed_automatically__rooms__": "__count__ salons vides seront supprimés automatiquement : __rooms__.", "__username__is_no_longer__role__defined_by__user_by_": "__user_by__ a retiré le rôle __role__ à __username__", "__username__was_set__role__by__user_by_": "__user_by__ a donné le rôle __role__ à __username__", + "This_room_encryption_has_been_enabled_by__username_": "Le cryptage de cette salle a été activé par __username__", + "This_room_encryption_has_been_disabled_by__username_": "Le cryptage de cette salle a été désactivé par __username__", "@username": "@nomdutilisateur", "@username_message": "@nomdutilisateur ", "#channel": "#canal", @@ -62,7 +64,7 @@ "Accounts_CustomFields_Description": "Devrait être un JSON valide où les clés sont les noms des champs contenant un dictionnaire de champs de paramétrage. Exemple :{\n \"role\": {\n \"type\": \"select\",\n \"defaultValue\": \"student\",\n \"options\": [\"teacher\", \"student\"],\n \"required\": true,\n \"modifyRecordField\": {\n \"array\": true,\n \"field\": \"roles\"\n }\n },\n \"twitter\": {\n \"type\": \"text\",\n \"required\": true,\n \"minLength\": 2,\n \"maxLength\": 10\n }\n} ", "Accounts_CustomFieldsToShowInUserInfo": "Champs personnalisés à afficher dans les informations utilisateur", "Accounts_Default_User_Preferences": "Préférences utilisateur par défaut", - "Accounts_Default_User_Preferences_audioNotifications": "Notifications audio Alerte par défaut", + "Accounts_Default_User_Preferences_audioNotifications": "Alerte par défaut des notifications audio", "Accounts_Default_User_Preferences_desktopNotifications": "Alterte notification de bureau par défaut", "Accounts_Default_User_Preferences_mobileNotifications": "Alerte par défaut des notifications mobiles", "Accounts_Default_User_Preferences_not_available": "Impossible de récupérer les préférences utilisateur car elles n'ont pas encore été configurées par l'utilisateur", @@ -103,6 +105,7 @@ "Accounts_OAuth_Custom_id": "ID", "Accounts_OAuth_Custom_Identity_Path": "URL d'identification", "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Jeton d'identité envoyé via", + "Accounts_OAuth_Custom_Key_Field": "Champ clé", "Accounts_OAuth_Custom_Login_Style": "Style de la page de connexion", "Accounts_OAuth_Custom_Map_Channels": "Mappage des rôles/groupes vers les canaux", "Accounts_OAuth_Custom_Merge_Roles": "Fusionner les rôles depuis SSO", @@ -224,32 +227,41 @@ "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In_Description": "L'authentification à deux facteurs par e-mail sera activée par défaut pour les nouveaux utilisateurs. Ils pourront le désactiver dans leur page de profil.", "Accounts_TwoFactorAuthentication_By_Email_Code_Expiration": "Temps d'expiration du code envoyé par e-mail (en secondes)", "Accounts_TwoFactorAuthentication_By_Email_Enabled": "Activer l'authentification à deux facteurs par e-mail", - "Accounts_TwoFactorAuthentication_Enabled": "Activer l'authentification à deux facteurs", + "Accounts_TwoFactorAuthentication_By_Email_Enabled_Description": "Les utilisateurs avec une adresse mail vérifiée et l'option activée dans leur page de profil, recevront un e-mail avec un code temporaire pour autoriser certaines actions comme la connexion, enregistrer le profil, etc.", + "Accounts_TwoFactorAuthentication_Enabled": "Activer l'authentification à deux facteurs via TOTP", + "Accounts_TwoFactorAuthentication_Enabled_Description": "Les utilisateurs peuvent configurer leur authentification à deux facteurs à l'aide de n'importe quelle application TOTP, comme Google Authenticator ou Authy", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback": "Appliquer le fallback du mot de passe", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback_Description": "Les utilisateurs seront obligés de saisir leur mot de passe pour les actions importantes, si aucune autre méthode d'authentification à deux facteurs n'est activée pour cet utilisateur et qu'un mot de passe est défini pour lui.", "Accounts_TwoFactorAuthentication_MaxDelta": "Delta maximum", "Accounts_TwoFactorAuthentication_MaxDelta_Description": "Le delta maximum détermine combien de jetons sont valides à un moment donné. Les jetons sont générés toutes les 30 secondes et sont valides pour les secondes (30 * Delta maximum). Exemple: Avec un Delta maximum défini sur 10, chaque jeton peut être utilisé jusqu'à 300 secondes avant ou après l'horodatage. Ceci est utile lorsque l'horloge du client n'est pas correctement synchronisée avec le serveur.", - "Accounts_TwoFactorAuthentication_RememberFor": "Retenir Deux Facteur pendant (secondes)", + "Accounts_TwoFactorAuthentication_RememberFor": "Souvenez-vous de deux facteurs pendant (secondes)", + "Accounts_TwoFactorAuthentication_RememberFor_Description": "Ne demandez pas de code d'autorisation à deux facteurs s'il a déjà été fourni dans le temps imparti.", "Accounts_UseDefaultBlockedDomainsList": "Utiliser la liste de domaines bloqués par défaut ", "Accounts_UseDNSDomainCheck": "Utiliser la vérification de Domaine du DNS", "Accounts_UserAddedEmail_Default": "Bienvenue sur [Site_Name] Allez sur [Site_URL] et essayer la meilleure solution de chat open source disponible aujourd'hui ! Vous pouvez vous connecter en utilisant votre email: [email] et mot de passe : [password]. Vous pouvez être amené à le changer après votre première connexion.", - "Accounts_UserAddedEmail_Description": "Vous pouvez utiliser les variables suivantes : [name], [fname], [lname] respectivement pour le nom complet de l'utilisateur, son prénom ou son nom,[email] pour son adresse e-mail de l'utilisateur, [password] pour son mot de passe, [Site_Name] et [Site_URL] pour le nom de l'application et son URL respectivement.", + "Accounts_UserAddedEmail_Description": "Vous pouvez utiliser les espaces réservés suivants : [name], [fname], [lname] pour le nom complet de l'utilisateur, le prénom ou le nom de l'utilisateur, respectivement.[email] pour l'adresse e-mail de l'utilisateur. [password] pour le mot de passe de l'utilisateur. [Site_Name] et [Site_URL] pour le nom de l'application et l'URL respectivement.", "Accounts_UserAddedEmailSubject_Default": "Vous avez été ajouté sur [Site_Name]", - "Accounts_Verify_Email_For_External_Accounts": "Vérifier l'email pour les comptes externes", + "Accounts_Verify_Email_For_External_Accounts": "Vérifier l'adresse mail pour les comptes externes", "Action_required": "Action requise", "Activate": "Activer", + "Active": "Actif", "Active_users": "Utilisateurs actifs", "Activity": "Activité", "Add": "Ajouter", "Add_agent": "Ajouter un agent", - "Add_custom_emoji": "Ajouter un émoticône personnalisé", + "Add_custom_emoji": "Ajouter un emoji personnalisé", "Add_custom_oauth": "Ajouter un OAuth personnalisé", "Add_Domain": "Ajouter un domaine", "Add_files_from": "Ajouter des fichiers depuis", "Add_manager": "Ajouter un manager", + "Add_monitor": "Ajouter un moniteur", "Add_Reaction": "Ajouter une réaction", "Add_Role": "Ajouter un rôle", + "Add_Sender_To_ReplyTo": "Ajouter l'expéditeur à répondre à", "Add_user": "Ajouter un utilisateur", "Add_User": "Ajouter un utilisateur", "Add_users": "Ajouter des utilisateurs", + "Add_members": "Ajouter des membres", "add-livechat-department-agents": "Ajouter des agents omnicanaux aux départements", "add-oauth-service": "Ajouter un service Oauth", "add-oauth-service_description": "Permission d'ajouter un nouveau service Oauth", @@ -268,18 +280,19 @@ "Additional_Feedback": "Commentaires supplémentaires", "additional_integrations_Bots": "Si vous cherchez comment intégrer votre propre bot, alors ne cherchez pas plus loin que notre adaptateur Hubot. https://github.com/RocketChat/hubot-rocketchat", "additional_integrations_Zapier": "Cherchez-vous à intégrer d'autres logiciels et applications avec Rocket.Chat mais vous n'avez pas le temps de le faire manuellement? Ensuite, nous suggérons d'utiliser Zapier que nous soutenons pleinement. En savoir plus à ce sujet sur notre documentation. https://rocket.chat/docs/administrator-guides/integrations/zapier/using-zaps/", - "Admin_disabled_encryption": "Votre administrateur n'a pas activé le chiffrement de bout en bout", + "Admin_disabled_encryption": "Votre administrateur n'a pas activé le cryptage de bout en bout (E2E).", "Admin_Info": "Infos sur l'administrateur", "Administration": "Administration", "Adult_images_are_not_allowed": "Les images pour adultes ne sont pas autorisées", - "Advocacy": "Plaidoyer", + "Aerospace_and_Defense": "Aérospatial et défense", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Après l'authentification par OAuth2, les utilisateurs seront redirigés vers une URL de cette liste. Vous pouvez ajouter une URL par ligne.", "Agent": "Agent", "Agent_added": "Agent ajouté", "Agent_Info": "Informations sur l'agent", - "Agent_Name_Placeholder": "Veuillez insérer un nom pour l'agent...", + "Agent_messages": "Messages de l'agent", + "Agent_Name_Placeholder": "Veuillez saisir un nom d'agent...", "Agent_removed": "Assistant supprimé", - "Agents": "Assistants", + "Agents": "Agents", "Alerts": "Alertes", "Alias": "Alias", "Alias_Format": "Format d'alias", @@ -289,7 +302,7 @@ "All": "Tous", "All_added_tokens_will_be_required_by_the_user": "Tous les jetons ajoutés seront requis par l'utilisateur", "All_channels": "Tous les canaux", - "All_closed_chats_have_been_removed": "Toutes les discussions fermées ont été supprimées", + "All_closed_chats_have_been_removed": "Tous les chats fermés ont été supprimés", "All_logs": "Tous les journaux", "All_messages": "Tous les messages", "All_users": "Tous les utilisateurs", @@ -299,11 +312,13 @@ "Allow_Invalid_SelfSigned_Certs": "Autoriser les certificats auto-signés invalides", "Allow_Invalid_SelfSigned_Certs_Description": "Autoriser les certificats SSL invalides et auto-signés pour la validation des liens et leurs prévisualisations.", "Allow_Marketing_Emails": "Autoriser les e-mails marketing", + "Allow_Online_Agents_Outside_Business_Hours": "Autoriser les agents en ligne en dehors des heures d'ouverture", + "Allow_Online_Agents_Outside_Office_Hours": "Autoriser les agents en ligne en dehors des heures de bureau", "Allow_Save_Media_to_Gallery": "Autoriser l'enregistrement des médias dans la galerie", "Allow_switching_departments": "Autoriser les visiteurs à changer de département", "Almost_done": "Presque terminé", "Alphabetical": "Alphabétique", - "Also_send_to_channel": "Envoyer également au canal ", + "Also_send_to_channel": "Envoyer également au canal", "Always_open_in_new_window": "Toujours ouvrir dans une nouvelle fenêtre", "Analytics": "Métriques", "Analytics_features_enabled": "Fonctionnalités activées", @@ -339,18 +354,27 @@ "API_Enable_CORS": "Activer CORS", "API_Enable_Direct_Message_History_EndPoint": "Activer le point de terminaison de l'historique des messages directs", "API_Enable_Direct_Message_History_EndPoint_Description": "Ceci active `/api/v1/im.history.others`qui permet la visualisation des messages privés envoyés par tous les utilisateurs.", + "API_Enable_Personal_Access_Tokens": "Activer les jetons d'accès personnels à l'API REST", "API_Enable_Personal_Access_Tokens_Description": "Activer les jetons d'accès personnels pour une utilisation avec l'API REST", "API_Enable_Rate_Limiter": "Activer le Rate Limiting", + "API_Enable_Rate_Limiter_Dev": "Activer le limiteur de débit en développement", + "API_Enable_Rate_Limiter_Dev_Description": "Faut-il limiter le nombre d'appels aux points de terminaison dans l'environnement de développement ?", + "API_Enable_Rate_Limiter_Limit_Calls_Default": "Le numéro par défaut appelle le limiteur de débit", + "API_Enable_Rate_Limiter_Limit_Calls_Default_Description": "Nombre d'appels par défaut pour chaque point de terminaison de l'API REST, autorisés dans la plage de temps définie ci-dessous", + "API_Enable_Rate_Limiter_Limit_Time_Default": "Limite de temps par défaut pour le limiteur de débit (en ms)", + "API_Enable_Rate_Limiter_Limit_Time_Default_Description": "Délai d'expiration par défaut pour limiter le nombre d'appels à chaque point de terminaison de l'API REST (en ms)", "API_Enable_Shields": "Activer les boucliers", "API_Enable_Shields_Description": "Activer les boucliers disponibles dans `/api/v1/shield.svg`", "API_GitHub_Enterprise_URL": "URL du serveur", "API_GitHub_Enterprise_URL_Description": "Exemple : http://domain.com (sans slash final)", "API_Gitlab_URL": "URL GitLab", "API_Personal_Access_Token_Generated": "Jeton d'accès personnel généré avec succès", + "API_Personal_Access_Token_Generated_Text_Token_s_UserId_s": "Veuillez enregistrer soigneusement votre token car vous ne pourrez plus le voir par la suite. Token : __token__Votre ID utilisateur : __userId__", "API_Personal_Access_Token_Name": "Nom du jeton d'accès personnel", - "API_Personal_Access_Tokens_Regenerate_It": "Générer à nouveau le jeton", + "API_Personal_Access_Tokens_Regenerate_It": "Régénérer le jeton", "API_Personal_Access_Tokens_Regenerate_Modal": "Si vous avez perdu ou oublié votre jeton, vous pouvez le régénérer, mais n'oubliez pas que toutes les applications utilisant ce jeton doivent être mises à jour", - "API_Personal_Access_Tokens_Remove_Modal": "Êtes-vous sûr de vouloir supprimer ce jeton d'accès personnel ?", + "API_Personal_Access_Tokens_Remove_Modal": "Voulez-vous vraiment supprimer ce jeton d'accès personnel ?", + "API_Personal_Access_Tokens_To_REST_API": "Jetons d'accès personnels à l'API REST", "API_Shield_Types": "Types de bouclier", "API_Shield_Types_Description": "Types de boucliers à activer en tant que liste séparée par des virgules, choisissez parmi `online`,` channel` ou `*` pour tout", "API_Shield_user_require_auth": "Exiger une authentification pour les boucliers des utilisateurs", @@ -362,6 +386,7 @@ "API_Use_REST_For_DDP_Calls": "Utilisez REST au lieu de websocket pour les appels Meteor", "API_User_Limit": "Limite de l'utilisateur pour ajouter tous les utilisateurs au canal", "API_Wordpress_URL": "URL WordPress", + "api-bypass-rate-limit": "Contourner la limite de débit pour l'API REST", "Apiai_Key": "Clef Api.ai", "Apiai_Language": "Langue Api.ai", "APIs": "APIs", @@ -374,46 +399,100 @@ "App_status_disabled": "Désactivé", "App_status_error_disabled": "Désactivé : erreur non interceptée", "App_status_initialized": "Initialisé", - "App_status_invalid_license_disabled": "Désactivé : Licence invalide", + "App_status_invalid_license_disabled": "Désactivé : Licence non valide", "App_status_invalid_settings_disabled": "Désactivé : Configuration requise", "App_status_manually_disabled": "Désactivé : manuellement", "App_status_manually_enabled": "Activé", "App_status_unknown": "Inconnu", "App_support_url": "support url", - "App_Url_to_Install_From": "Installer à partir d'une URL", + "App_Url_to_Install_From": "Installer depuis l'URL", "App_Url_to_Install_From_File": "Installer à partir d'un fichier", + "App_user_not_allowed_to_login": "Les utilisateurs de l'application ne sont pas autorisés à se connecter directement.", "Appearance": "Apparence", "Application_added": "Application ajoutée", + "Application_delete_warning": "Vous ne pourrez pas récupérer cette application !", "Application_Name": "Nom de l'application", "Application_updated": "Application mise à jour", "Apply": "Appliquer", "Apply_and_refresh_all_clients": "Appliquer et rafraîchir tous les clients", "Apps": "Applications", - "Apps_Engine_Version": "Version du moteur d'applications", + "Apps_Engine_Version": "Version d'Apps Engine", + "Apps_Essential_Alert": "Cette application est indispensable pour les événements suivants :", + "Apps_Essential_Disclaimer": "Les événements répertoriés ci-dessus seront perturbés si cette application est désactivée. Si vous voulez que Rocket.Chat fonctionne sans la fonctionnalité de cette application, vous devez la désinstaller", "Apps_Framework_Development_Mode": "Activer le mode de développement", - "Apps_Framework_Development_Mode_Description": "Le mode développement permet l'installation d'applications qui ne proviennent pas du Marketplace Rocket.Chat.", + "Apps_Framework_Development_Mode_Description": "Le mode de développement permet l'installation d'applications qui ne proviennent pas du Marketplace Rocket.Chat.", "Apps_Framework_enabled": "Activer le cadre de l'application", "Apps_Game_Center": "Centre de jeux", "Apps_Game_Center_Back": "Retour au centre de jeux", "Apps_Game_Center_enabled": "Activer le centre de jeux", "Apps_Game_Center_Invite_Friends": "Invitez vos amis à rejoindre", "Apps_Game_Center_Play_Game_Together": "@here Jouons à __name__ ensemble !", + "Apps_Interface_IPostExternalComponentClosed": "Evénement survenant après la fermeture d'un composant externe", + "Apps_Interface_IPostExternalComponentOpened": "Evénement survenant après l'ouverture d'un composant externe", + "Apps_Interface_IPostMessageDeleted": "Evénement qui se produit après la suppression d'un message", + "Apps_Interface_IPostMessageSent": "Evénement survenant après l'envoi d'un message", + "Apps_Interface_IPostMessageUpdated": "Evénement survenant après la mise à jour d'un message", + "Apps_Interface_IPostRoomCreate": "Evénement qui se produit après la création d'un salon", + "Apps_Interface_IPostRoomDeleted": "Evénement qui se produit après la suppression du salon", + "Apps_Interface_IPostRoomUserJoined": "Evénement qui se produit après qu'un utilisateur a rejoint un salon (groupe privé, canal public)", + "Apps_Interface_IPreMessageDeletePrevent": "Evénement qui se produit avant la suppression d'un message", + "Apps_Interface_IPreMessageSentExtend": "Evénement survenant avant l'envoi d'un message", + "Apps_Interface_IPreMessageSentModify": "Evénement survenant avant l'envoi d'un message", + "Apps_Interface_IPreMessageSentPrevent": "Evénement survenant avant l'envoi d'un message", + "Apps_Interface_IPreMessageUpdatedExtend": "Evénement qui se produit avant la mise à jour d'un message", + "Apps_Interface_IPreMessageUpdatedModify": "Evénement qui se produit avant la mise à jour d'un message", + "Apps_Interface_IPreMessageUpdatedPrevent": "Evénement qui se produit avant la mise à jour d'un message", + "Apps_Interface_IPreRoomCreateExtend": "Evénement survenant avant la création d'un salon", + "Apps_Interface_IPreRoomCreateModify": "Evénement survenant avant la création d'un salon", + "Apps_Interface_IPreRoomCreatePrevent": "Evénement survenant avant la création d'un salon", + "Apps_Interface_IPreRoomDeletePrevent": "Evénement qui se produit avant la suppression d'un salon", + "Apps_Interface_IPreRoomUserJoined": "Evénement qui se produit avant qu'un utilisateur rejoigne un salon (groupe privé, canal public)", "Apps_Marketplace_Deactivate_App_Prompt": "Souhaitez-vous vraiment désactiver cette application ?", "Apps_Marketplace_Login_Required_Description": "Pour acheter des applications sur Rocket.Chat Marketplace, vous devez enregistrer votre espace de travail et vous connecter.", "Apps_Marketplace_Login_Required_Title": "Connexion au Marketplace requise", "Apps_Marketplace_Modify_App_Subscription": "Modifier l'abonnement", "Apps_Marketplace_pricingPlan_monthly": "__price__ / mois", "Apps_Marketplace_pricingPlan_monthly_perUser": "__price__ / mois par utilisateur", - "Apps_Marketplace_pricingPlan_startingAt_monthly": "A partir de __price__ / mois", - "Apps_Marketplace_pricingPlan_startingAt_monthly_perUser": "A partir de __price__ / mois par utilisateur", - "Apps_Marketplace_pricingPlan_startingAt_yearly": "A partir de __price__ / an", - "Apps_Marketplace_pricingPlan_startingAt_yearly_perUser": "A partir de __price__ / an par utilisateur", + "Apps_Marketplace_pricingPlan_startingAt_monthly": "à partir de __price__ / mois", + "Apps_Marketplace_pricingPlan_startingAt_monthly_perUser": "à partir de __price__ / mois par utilisateur", + "Apps_Marketplace_pricingPlan_startingAt_yearly": "à partir de __price__ / an", + "Apps_Marketplace_pricingPlan_startingAt_yearly_perUser": "à partir de __price__ / an par utilisateur", "Apps_Marketplace_pricingPlan_yearly": "__price__ / an", "Apps_Marketplace_pricingPlan_yearly_perUser": "__price__ / an par utilisateur", - "Apps_Marketplace_Uninstall_App_Prompt": "Souhaitez-vous vraiment désinstaller cette application ?", + "Apps_Marketplace_Uninstall_App_Prompt": "Voulez-vous vraiment désinstaller cette application ?", "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "Désinstaller quand même", - "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "Cette application a un abonnement actif et sa désinstallation ne l’annulera pas. Si vous souhaitez le faire, veuillez modifier votre abonnement avant la désinstallation.", + "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "Cette application a un abonnement actif et la désinstallation ne l’annulera pas. Si vous souhaitez le faire, veuillez modifier votre abonnement avant la désinstallation.", + "Apps_Permissions_Review_Modal_Title": "Cette application nécessite les autorisations suivantes", + "Apps_Permissions_No_Permissions_Required": "L'application ne nécessite pas d'autorisations supplémentaires", + "Apps_Permissions_user_read": "Accéder aux informations utilisateur", + "Apps_Permissions_user_write": "Modifier les informations utilisateur", + "Apps_Permissions_upload_read": "Accéder aux fichiers téléversés sur ce serveur", + "Apps_Permissions_upload_write": "Téléverser des fichiers sur ce serveur", + "Apps_Permissions_server-setting_read": "Accéder aux paramètres de ce serveur", + "Apps_Permissions_server-setting_write": "Modifier les paramètres de ce serveur", + "Apps_Permissions_room_read": "Accéder aux informations de la salle", + "Apps_Permissions_room_write": "Créer et modifier des salles", + "Apps_Permissions_message_read": "Accéder aux messages", + "Apps_Permissions_message_write": "Envoyer et modifier des messages", + "Apps_Permissions_livechat-status_read": "Accéder aux informations sur l'état du chat en direct", + "Apps_Permissions_livechat-custom-fields_write": "Modifier la configuration du champ personnalisé du chat en direct", + "Apps_Permissions_livechat-visitor_read": "Accéder aux informations des visiteurs du chat en direct", + "Apps_Permissions_livechat-visitor_write": "Modifier les informations sur les visiteurs du chat en direct", + "Apps_Permissions_livechat-message_read": "Accéder aux informations du message de chat en direct", + "Apps_Permissions_livechat-message_write": "Modifier les informations du message de chat en direct", + "Apps_Permissions_livechat-room_read": "Accéder aux informations du salon de chat en direct", + "Apps_Permissions_livechat-room_write": "Modifier les informations du salon de chat en direct", + "Apps_Permissions_livechat-department_read": "Accédez aux informations du service de chat en direct", + "Apps_Permissions_livechat-department_write": "Modifier les informations du service de chat en direct", + "Apps_Permissions_slashcommand": "Enregistrer de nouvelles commandes de la barre oblique (slash)", + "Apps_Permissions_apis": "Enregistrer de nouveaux points de terminaison HTTP", + "Apps_Permissions_env_read": "Accéder à des informations minimales sur cet environnement de serveur", + "Apps_Permissions_networking": "Accès à ce réseau de serveurs", + "Apps_Permissions_persistence": "Stocker les données internes dans la base de données", + "Apps_Permissions_scheduler": "Enregistrer et gérer les tâches planifiées", + "Apps_Permissions_ui_interact": "Interagir avec l'interface utilisateur", "Apps_Settings": "Paramètres de l'application", + "Apps_User_Already_Exists": "Le nom d'utilisateur \"__username__\" est déjà utilisé. Renommez ou supprimez l'utilisateur qui l'utilise pour installer cette application", "Apps_WhatIsIt": "Apps: que sont-elles?", "Apps_WhatIsIt_paragraph1": "Une nouvelle icône dans la zone d'administration ! Qu'est-ce que cela signifie et quelles sont les applications?", "Apps_WhatIsIt_paragraph2": "Tout d'abord, les applications dans ce contexte ne se réfèrent pas aux applications mobiles. En fait, il serait préférable de penser à eux en termes de plugins ou d'intégrations avancées.", @@ -429,10 +508,12 @@ "Are_you_sure_you_want_to_delete_your_account": "Êtes-vous sûr(e) de vouloir supprimer votre compte ?", "Are_you_sure_you_want_to_disable_Facebook_integration": "Êtes-vous sûr de vouloir désactiver l'intégration de Facebook?", "Assets": "Ressources", - "Assign_admin": "Attribution d'un administrateur", + "Assign_admin": "Attribution de l'administrateur", + "Assign_new_conversations_to_bot_agent": "Attribuer de nouvelles conversations à l'agent de bot", + "Assign_new_conversations_to_bot_agent_description": "Le système de routage tentera de trouver un agent bot avant d'adresser de nouvelles conversations à un agent humain.", "assign-admin-role": "Donner le rôle d'administrateur", - "assign-admin-role_description": "Permission de donner le rôle d'administrateur aux autres utilisateurs", - "assign-roles": "Donner des rôles", + "assign-admin-role_description": "Autorisation d'attribuer le rôle d'administrateur à d'autres utilisateurs", + "assign-roles": "Attribuer des rôles", "at": "à", "At_least_one_added_token_is_required_by_the_user": "Au moins un jeton ajouté est requis par l'utilisateur", "AtlassianCrowd": "Atlassian Crowd", @@ -440,8 +521,8 @@ "Attribute_handling": "Gestion des attributs", "Audio": "Audio", "Audio_message": "Message audio", - "Audio_Notification_Value_Description": "Peut être n'importe quel son personnalisé ou celui par défaut : bip, chelle, ding, gouttelette, highbell, saisons", - "Audio_Notifications_Default_Alert": "Notifications audio Alerte par défaut", + "Audio_Notification_Value_Description": "Peut être n'importe quel son personnalisé ou celui par défaut : bip, chelle, ding, goutte, highbell, saisons", + "Audio_Notifications_Default_Alert": "Alerte par défaut des notifications audio", "Audio_Notifications_Value": "Notification par défaut des messages audio", "Audios": "Audios", "Auth_Token": "Jeton d'Auth", @@ -455,17 +536,17 @@ "Auto_Selection": "Sélection automatique", "Auto_Translate": "Traduction automatique", "auto-translate": "Traduction automatique", - "auto-translate_description": "Permission d'utiliser l'outil de traduction automatique", + "auto-translate_description": "Autorisation d'utiliser l'outil de traduction automatique", "AutoLinker": "AutoLinker", "AutoLinker_Email": "Lien automatique sur les adresses e-mail", "AutoLinker_Phone": "Lien automatique sur les numéros de téléphone", - "AutoLinker_Phone_Description": "Lier automatiquement les numéros de téléphone. par exemple `(123) 456-7890`", - "AutoLinker_StripPrefix": "AutoLinker Strip Prefix", + "AutoLinker_Phone_Description": "Liaison automatique pour les numéros de téléphone, par exemple `(123) 456-7890`", + "AutoLinker_StripPrefix": "AutoLinker Strip Préfixe", "AutoLinker_StripPrefix_Description": "Affichage court. e.g. https://rocket.chat => rocket.chat", - "AutoLinker_Urls_Scheme": "Lien automatique sur le schéma : // URLs", - "AutoLinker_Urls_TLD": "URL TLD de l'AutoLinker", - "AutoLinker_Urls_www": "Lien automatique si URL contenant 'www'", - "AutoLinker_UrlsRegExp": "Lien automatique si URL dans expression régulière", + "AutoLinker_Urls_Scheme": "Lien automatique sur le schéma:// URLs", + "AutoLinker_Urls_TLD": "URL du TLD AutoLinker", + "AutoLinker_Urls_www": "URL \"www\" d'AutoLinker", + "AutoLinker_UrlsRegExp": "Expression régulière d'URL AutoLinker", "Automatic_Translation": "Traduction automatique", "AutoTranslate": "Traduction automatique", "AutoTranslate_APIKey": "Clé API", @@ -475,16 +556,17 @@ "AutoTranslate_Enabled_Description": "Activer la traduction automatique permettra aux utilisateurs disposant de la permission auto-translate d'avoir l'ensemble des messages traduits automatiquement dans leur langue. Des frais peuvent s'appliquer, voir la documentation Google", "AutoTranslate_Google": "Google", "AutoTranslate_Microsoft": "Microsoft", + "AutoTranslate_Microsoft_API_Key": "Clé d'abonnement Ocp-Apim", "AutoTranslate_ServiceProvider": "Fournisseur de services", "Available": "Disponible", "Available_agents": "Assistants disponibles", - "Available_departments": "Services disponibles", + "Available_departments": "Départements disponibles", "Avatar": "Avatar", "Avatar_changed_successfully": "Avatar modifié avec succès", "Avatar_URL": "URL de l'avatar", "Avatar_url_invalid_or_error": "L'URL est invalide ou non accessible. Essayez de nouveau, mais avec une URL différente.", "Avg_chat_duration": "Durée moyenne du chat", - "Avg_first_response_time": "Premier temps de réponse moyen", + "Avg_first_response_time": "Moyenne du temps de première réponse", "Avg_of_abandoned_chats": "Moyenne des discussions abandonnées", "Avg_of_available_service_time": "Durée moyenne du service disponible", "Avg_of_chat_duration_time": "Durée moyenne du chat", @@ -500,26 +582,39 @@ "Away_male": "Absent", "Back": "Retour", "Back_to_applications": "Retour aux applications", - "Back_to_chat": "Retour au tchat", + "Back_to_chat": "Retour au chat", "Back_to_imports": "Retour aux importations", "Back_to_integration_detail": "Retour au détail de l'intégration", "Back_to_integrations": "Retour aux intégrations", "Back_to_login": "Retourner à l'écran de connexion", "Back_to_Manage_Apps": "Retour à Gérer les applications", "Back_to_permissions": "Retour aux permissions", + "Back_to_room": "Retour au salon", "Backup_codes": "Codes de sauvegarde", "ban-user": "Bannir l'utilisateur", - "ban-user_description": "Permission d'interdire un utilisateur à une chaîne", + "ban-user_description": "Autorisation d'exclure un utilisateur d'un canal", + "BBB_End_Meeting": "Terminer la réunion", + "BBB_Join_Meeting": "Rejoindre la réunion", + "BBB_Start_Meeting": "Démarrer la réunion", + "BBB_You_have_no_permission_to_start_a_call": "Vous n'êtes pas autorisé à lancer un appel", "Best_first_response_time": "Meilleur temps de réponse", "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "Fonctionnalité en test. Dépend de l'activation de la fonction Vidéo Conférence.", - "Block_Multiple_Failed_Logins_Enable_Collect_Login_data_Description": "Stocke l'IP et le nom d'utilisateur de la tentative de connexion dans une collection en base de données", + "Better": "Mieux", + "Bio": "Bio", + "Bio_Placeholder": "Espace réservé bio", + "Block_Multiple_Failed_Logins_Attempts_Until_Block_By_Ip": "Combien de tentatives échouées jusqu'au blocage par IP", + "Block_Multiple_Failed_Logins_Attempts_Until_Block_by_User": "Combien de tentatives échouées jusqu'au blocage par utilisateur", + "Block_Multiple_Failed_Logins_By_Ip": "Bloquer les tentatives de connexion échouées par IP", + "Block_Multiple_Failed_Logins_By_User": "Bloquer les tentatives de connexion ratées par nom d'utilisateur", + "Block_Multiple_Failed_Logins_Enable_Collect_Login_data_Description": "Stocke l'adresse IP et le nom d'utilisateur de la tentative de connexion dans une collection dans la base de données", "Block_Multiple_Failed_Logins_Enabled": "Activer la collecte des données de connexion", "Block_Multiple_Failed_Logins_Ip_Whitelist": "Liste d'IPs autorisées", "Block_Multiple_Failed_Logins_Ip_Whitelist_Description": "Liste séparées par des virgules d'adresses IPs autorisées", - "Block_Multiple_Failed_Logins_Time_To_Unblock_By_Ip_In_Minutes": "Temps avant déblocage d'IP (en Minutes)", - "Block_Multiple_Failed_Logins_Time_To_Unblock_By_User_In_Minutes": "Temps avant déblocage d'utilisateur (en Minutes)", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_Ip_In_Minutes": "Temps avant déblocage de l'IP (en minutes)", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_User_In_Minutes": "Temps avant déblocage de l'utilisateur (en minutes)", "Block_User": "Bloquer l'utilisateur", "Blockchain": "Blockchain", + "Blockstack_Auth_Description": "Description de l'authentification", "Blockstack_ButtonLabelText": "Texte de l'étiquette du bouton", "Blockstack_Generate_Username": "Générer le nom d'utilisateur", "Body": "Corps", @@ -529,19 +624,29 @@ "BotHelpers_userFields_Description": "CSV des champs utilisateurs accessibles par les méthodes d'aide des bots.", "Bots": "Bots", "Branch": "Branche", - "Broadcast_channel": "Chaîne de diffusion", - "Broadcast_channel_Description": "Seuls les utilisateurs autorisés peuvent écrire de nouveaux messages, mais les autres utilisateurs pourront répondre", + "Broadcast": "Diffuser", + "Broadcast_channel": "Canal de diffusion", + "Broadcast_channel_Description": "Seuls les utilisateurs autorisés peuvent écrire de nouveaux messages, mais les autres utilisateurs pourront y répondre", "Broadcast_Connected_Instances": "Diffuser des instances connectées", + "Broadcasting_api_key": "Clé API de diffusion", + "Broadcasting_client_id": "ID du client de diffusion", + "Broadcasting_client_secret": "Secret du client de diffusion", "Broadcasting_enabled": "Diffusion activée", + "Broadcasting_media_server_url": "URL du serveur multimédia de diffusion", "Browse_Files": "Parcourir les fichiers", "Browser_does_not_support_audio_element": "Votre navigateur ne supporte pas l'élément audio.", - "Bugsnag_api_key": "Clef d'API Bugsnag", + "Browser_does_not_support_video_element": "Votre application ne supporte pas le format de l'élément vidéo.", + "Bugsnag_api_key": "Clé d'API Bugsnag", "Build_Environment": "Construire l'environnement", "bulk-register-user": "Créer des utilisateurs en masse", "bulk-register-user_description": "Permission de créer des utilisateurs en masse", - "Business_Hour": "Heures d'ouverture", - "Business_Hour_Removed": "Heures d'ouverture supprimées", + "Busiest_day": "Jour le plus chargé", + "Busiest_time": "Temps le plus chargé", + "Business_Hour": "Heure de travail", + "Business_Hour_Removed": "Heure de travail supprimée", + "Business_Hours": "Heures de travail", "Business_hours_enabled": "Heures d'ouverture activées", + "Business_hours_updated": "Heures d'ouverte mise à jour", "busy": "occupé", "Busy": "Occupé", "busy_female": "occupée", @@ -549,35 +654,44 @@ "busy_male": "occupé", "Busy_male": "Occupé", "by": "par", + "By_author": "Par __author__", "cache_cleared": "Cache effacé", + "Call": "Appel", + "call-management": "Gestion des appels", + "Caller": "Appelant", "Cancel": "Annuler", "Cancel_message_input": "Annuler", + "Canceled": "Annulé", "Canned Responses": "Modèles de réponse", "Canned_Response_Removed": "Modèle de réponse supprimé", "Canned_Responses_Enable": "Activer les modèles de réponse", "Cannot_invite_users_to_direct_rooms": "Impossible d'inviter des utilisateurs dans les discussions privées", "Cannot_open_conversation_with_yourself": "Impossible de diriger le message avec vous-même", + "Cannot_share_your_location": "Impossible de partager votre position...", "CAS_autoclose": "Fermer automatiquement la fenêtre popup de connexion", "CAS_base_url": "URL de base pour SSO", - "CAS_base_url_Description": "URL de base pour votre service externe de connexion SSO, par exemple: http://sso.example.com/sso/", + "CAS_base_url_Description": "URL de base pour votre service externe de connexion SSO, par exemple: https://sso.example.undef/sso/", "CAS_button_color": "Bouton de connexion, couleur de fond", "CAS_button_label_color": "Bouton de connexion, couleur du texte", "CAS_button_label_text": "Bouton de connexion, texte / label", - "CAS_Creation_User_Enabled": "Autoriser la création de l'utilisateur", - "CAS_Creation_User_Enabled_Description": "Autoriser la création de l'utilisateur CAS à partir des informations transmises dans le ticket CAS.", + "CAS_Creation_User_Enabled": "Autoriser la création d'utilisateurs", + "CAS_Creation_User_Enabled_Description": "Autoriser la création d'utilisateurs CAS à partir des données fournies dans le ticket CAS.", "CAS_enabled": "Activé", "CAS_Login_Layout": "Disposition de connexion CAS", "CAS_login_url": "URL de login SSO", - "CAS_login_url_Description": "URL de connexion pour votre service externe de connexion SSO, par exemple : http://sso.example.com/sso/", + "CAS_login_url_Description": "URL de connexion pour votre service externe de connexion SSO, par exemple : https://sso.example.undef/sso/login", "CAS_popup_height": "Hauteur de la fenêtre popup de connexion", "CAS_popup_width": "Largeur de la fenêtre popup de connexion", "CAS_Sync_User_Data_Enabled": "Toujours synchroniser les données utilisateur", "CAS_Sync_User_Data_Enabled_Description": "Toujours synchroniser les données externes de l'utilisateur CAS avec les attributs disponibles après connexion. Note : dans tous les cas, les attributs sont toujours synchronisés après la création du compte.", "CAS_Sync_User_Data_FieldMap": "Attributs de carte", "CAS_Sync_User_Data_FieldMap_Description": "Utilisez cette entrée JSON pour créer des attributs internes (clé) à partir d'attributs externes (valeur).Exemple: `{\"email\":\"%email%\", \"name\":\"%firstname%, %lastname%\"}` La carte d'attributs est toujours interpolée. Dans CAS 1.0, seul l'attribut `username` est disponible. Les attributs internes disponibles sont: nom d'utilisateur, nom, adresse e-mail, chambres; rooms est une liste de pièces séparées par des virgules à joindre lors de la création de l'utilisateur, par exemple: {\"rooms\": \"%team%,%department%\"} rejoindrait les utilisateurs CAS lors de la création de leur équipe et canal départemental.", + "CAS_trust_username": "Faire confiance au nom d'utilisateur CAS", + "CAS_trust_username_description": "Lorsqu'il est activé, Rocket.Chat sera sûr que tout nom d'utilisateur de CAS appartient au même utilisateur de Rocket.Chat.Cela peut être nécessaire si un utilisateur est renommé dans CAS, mais peut également permettre aux gens de prendre le contrôle de comptes Rocket.Chat en renommant leurs propres utilisateurs CAS.", "CAS_version": "Version CAS", "CAS_version_Description": "Utiliser uniquement une version CAS supportée par votre service CAS SSO.", "Categories": "Catégories", + "CDN_JSCSS_PREFIX": "Préfixe CDN pour JS / CSS", "CDN_PREFIX": "Préfixe CDN", "CDN_PREFIX_ALL": "Utiliser le préfixe CDN pour tous les actifs", "Certificates_and_Keys": "Certificats et clés", @@ -585,12 +699,13 @@ "Changing_email": "Modification des adresses e-mail", "channel": "canal", "Channel": "Canal", - "Channel_already_exist": "Le canal '#%s' existe déjà.", - "Channel_already_exist_static": "Le canal existe déjà", + "Channel_already_exist": "Le canal `#%s` existe déjà.", + "Channel_already_exist_static": "Le canal existe déjà.", "Channel_already_Unarchived": "Canal avec le nom `#%s` est déjà dans l'état désarchivé", "Channel_Archived": "Canal avec le nom `#%s` a été archivé avec succès", "Channel_created": "Canal `#%s` créé", "Channel_doesnt_exist": "Le canal `#%s` n'existe pas.", + "Channel_Export": "Exportation de canal", "Channel_name": "Nom du canal", "Channel_Name_Placeholder": "Veuillez entrer le nom du canal...", "Channel_to_listen_on": "Canal à écouter", @@ -598,11 +713,20 @@ "Channels": "Canaux", "Channels_are_where_your_team_communicate": "Les canaux sont les lieux où votre équipe communique.", "Channels_list": "Liste des canaux publics", + "Channel_what_is_this_channel_about": "De quoi parle ce canal ?", + "Chart": "Graphique", "Chat_button": "Bouton chat", + "Chat_close": "Fermer chat", "Chat_closed": "Chat fermé", "Chat_closed_by_agent": "Chat fermé par l'agent", "Chat_closed_successfully": "Chat fermé avec succès", + "Chat_History": "Historique du chat", "Chat_Now": "Discuter maintenant", + "Chat_queued": "Chat en file d'attent", + "Chat_removed": "Chat supprimé", + "Chat_start": "Début de chat", + "Chat_started": "Le chat a commencé", + "Chat_taken": "Chat pris", "Chat_window": "Fenêtre de chat", "Chatops_Enabled": "Activer Chatops", "Chatops_Title": "Panneau de contrôle des Chatops", @@ -614,14 +738,16 @@ "Chatpal_Backend": "Type de backend", "Chatpal_Backend_Description": "Sélectionnez si vous souhaitez utiliser Chatpal en tant que service ou en tant qu'installation sur site", "Chatpal_Base_URL": "Url de base", - "Chatpal_Base_URL_Description": "Trouver une description de la façon d'exécuter une instance locale sur github. L'URL doit être absolue et pointer vers le noyau chatpal, par ex. http: // localhost: 8983 / solr / chatpal.", + "Chatpal_Base_URL_Description": "Trouver une description de la façon d'exécuter une instance locale sur github. L'URL doit être absolue et pointer vers le noyau chatpal, par ex. http://localhost:8983/solr/chatpal.", "Chatpal_Batch_Size": "Taille du lot d'index", "Chatpal_Batch_Size_Description": "La taille du lot des documents d'index (lors de l'amorçage)", - "Chatpal_channel_not_joined_yet": "Channel pas encore rejoint", + "Chatpal_channel_not_joined_yet": "Canal pas encore rejoint", "Chatpal_create_key": "Créer une clé", "Chatpal_created_key_successfully": "Clé d'API créée avec succès", + "Chatpal_Current_Room_Only": "Même salon", "Chatpal_Default_Result_Type": "Type de résultat par défaut", "Chatpal_Default_Result_Type_Description": "Définit quel type de résultat est affiché par résultat. Tout signifie qu'une vue d'ensemble pour tous les types est fournie.", + "Chat_Duration": "Durée du chat", "Chatpal_Email_Address": "Adresse e-mail", "Chatpal_ERROR_Email_must_be_set": "L'e-mail doit être réglé", "Chatpal_ERROR_Email_must_be_valid": "L'e-mail doit être valide", @@ -630,9 +756,11 @@ "Chatpal_Get_more_information_about_chatpal_on_our_website": "Obtenez plus d'informations sur Chatpal sur http://chatpal.io!", "Chatpal_go_to_message": "Sauter", "Chatpal_go_to_room": "Sauter", - "Chatpal_go_to_user": "Envoyer un message direct", + "Chatpal_go_to_user": "Envoyer un message privé", "Chatpal_HTTP_Headers": "En-têtes HTTP", "Chatpal_HTTP_Headers_Description": "Liste des en-têtes HTTP, un en-tête par ligne. Format: nom: valeur", + "Chatpal_Include_All_Public_Channels": "Inclure tous les canaux publics", + "Chatpal_Include_All_Public_Channels_Description": "Rechercher dans tous les canaux publics, même si vous ne les avez pas encore rejoints.", "Chatpal_Main_Language": "Langue principale", "Chatpal_Main_Language_Description": "La langue la plus utilisée dans les conversations", "Chatpal_Messages": "Messages", @@ -650,11 +778,12 @@ "Chatpal_TAC_read": "J'ai lu les termes et conditions", "Chatpal_Terms_and_Conditions": "Termes et conditions", "Chatpal_Timeout_Size": "Délai d'expiration de l'index", - "Chatpal_Timeout_Size_Description": "L'intervalle entre deux fenêtres d'index en ms (lors de l'amorçage)", + "Chatpal_Timeout_Size_Description": "Le temps entre 2 fenêtres d'index en ms (au démarrage)", "Chatpal_Users": "Utilisateurs", "Chatpal_Welcome": "Bonne recherche !", "Chatpal_Window_Size": "Taille de la fenêtre d'index", - "Chatpal_Window_Size_Description": "La taille des fenêtres d'index en heures (lors de l'amorçage)", + "Chatpal_Window_Size_Description": "La taille des fenêtres d'index en heures (au démarrage)", + "Chats_removed": "Chats supprimés", "Check_All": "Tout cocher", "Check_Progress": "Vérifier la progression", "Choose_a_room": "Choisissez un salon", @@ -663,70 +792,88 @@ "Choose_the_username_that_this_integration_will_post_as": "Choisir le nom d'utilisateur que cette intégration va utiliser pour publier.", "Choose_users": "Choisissez des utilisateurs", "Clean_Usernames": "Effacer les noms d'utilisateur", - "clean-channel-history": "Histoire propre du canal", - "clean-channel-history_description": "Autorisation d'effacer l'historique des chaînes", - "clear": "Effacer/Nettoyer", - "Clear_all_unreads_question": "Marquer tout comme lu ?", - "clear_cache_now": "Effacer le cache maintenant", + "clean-channel-history": "Nettoyer l'historique des canaux", + "clean-channel-history_description": "Autorisation d'effacer l'historique des canaux", + "clear": "Effacer", + "Clear_all_unreads_question": "Effacer tous les non lus ?", + "clear_cache_now": "Vider le cache maintenant", "Clear_filters": "Effacer les filtres", "clear_history": "Effacer l'historique", "Click_here": "Cliquez ici", "Click_here_for_more_details_or_contact_sales_for_a_new_license": "Cliquez ici pour plus de détails ou contactez __email__ pour une nouvelle licence.", - "Click_here_for_more_info": "Cliquer ici pour plus d'information", - "Click_here_to_enter_your_encryption_password": "Cliquer ici pour saisir votre clé de chiffrement", - "Click_here_to_view_and_copy_your_password": "Cliquez ici pour voir et copier votre mot de passe.", + "Click_here_for_more_info": "Cliquez ici pour plus d'informations", + "Click_here_to_enter_your_encryption_password": "Cliquez ici pour saisir votre mot de passe de cryptage", + "Click_here_to_view_and_copy_your_password": "Cliquez ici pour afficher et copier votre mot de passe.", "Click_the_messages_you_would_like_to_send_by_email": "Cliquez sur les messages que vous souhaitez envoyer par e-mail", - "Click_to_join": "Cliquez pour vous inscrire!", + "Click_to_join": "Cliquez pour rejoindre !", "Click_to_load": "Cliquez pour charger", - "Client_ID": "ID du client", + "Client_ID": "ID client", "Client_Secret": "Secret Client", - "Clients_will_refresh_in_a_few_seconds": "Les clients vont être rechargés dans quelques secondes", + "Clients_will_refresh_in_a_few_seconds": "Les clients s'actualiseront dans quelques secondes", "close": "fermer", - "Close": "Fermeture", + "Close": "Fermer", + "Close_room_description": "Vous êtes sur le point de fermer ce chat. Etes-vous sûr de vouloir continuer ?", "close-livechat-room": "Fermer la salle omnicanal", "close-livechat-room_description": "Autorisation de fermer la salle omnicanale actuel", "close-others-livechat-room": "Fermer une autre salle omnicanal", "close-others-livechat-room_description": "Autorisation de fermer d'autres salles omnicanal", "Closed": "Fermé", + "Closed_At": "Fermé à", "Closed_automatically": "Fermé automatiquement par le système", "Closed_by_visitor": "Fermé par le visiteur", "Closing_chat": "Fermeture du chat", + "Closing_chat_message": "Message de clôture du chat", "Cloud": "Cloud", "Cloud_Apply_Offline_License": "Appliquer une licence hors ligne", "Cloud_Change_Offline_License": "Changer la licence hors ligne", + "Cloud_License_applied_successfully": "Licence appliquée avec succès !", "Cloud_Invalid_license": "Licence non valable !", "Cloud_Apply_license": "Appliquer la licence", "Cloud_connectivity": "Connectivité cloud", + "Cloud_address_to_send_registration_to": "L'adresse à laquelle envoyer votre e-mail d'enregistrement Cloud.", + "Cloud_click_here": "Après avoir copié le texte, accédez à [cloud console (cliquez ici)](__cloudConsoleUrl__).", + "Cloud_console": "Cloud Console", "Cloud_error_code": "Code : __errorCode__", + "Cloud_error_in_authenticating": "Erreur reçue lors de l'authentification", "Cloud_Info": "Informations sur le cloud", - "Cloud_login_to_cloud": "Se connecter au Cloud Rocket.Chat", - "Cloud_logout": "Se déconnecter du Cloud Rocket.Chat", + "Cloud_login_to_cloud": "Connectez-vous au Rocket.Chat Cloud", + "Cloud_logout": "Déconnexion de Rocket.Chat Cloud", + "Cloud_manually_input_token": "Saisissez le jeton reçu du Cloud Console.", + "Cloud_register_error": "Une erreur s'est produite lors du traitement de votre demande. Veuillez réessayer plus tard.", "Cloud_Register_manually": "S'inscrire hors ligne", + "Cloud_register_offline_finish_helper": "Une fois le processus d'enregistrement terminé dans la Cloud Console, vous devriez recevoir du texte. Veuillez le coller ici pour terminer l'enregistrement.", + "Cloud_register_offline_helper": "Les espaces de travail peuvent être enregistrés manuellement si l'accès au réseau est restreint ou si airgapped. Copiez le texte ci-dessous et accédez à notre Cloud Console pour terminer le processus.", + "Cloud_register_success": "Votre espace de travail a été enregistré avec succès !", + "Cloud_registration_pending_html": "Les notifications mobiles ne fonctionneront pas tant que l'enregistrement n'est pas terminé. En savoir plus", + "Cloud_registration_pending_title": "L'enregistrement dans le cloud est toujours en cours", "Cloud_registration_required": "Inscription requise", "Cloud_registration_required_description": "On dirait que, lors de l'installation, vous n'avez pas choisi d'enregistrer votre espace de travail.", "Cloud_registration_required_link_text": "Cliquez ici pour enregistrer votre espace de travail.", - "Cloud_resend_email": "Envoyer à nouveau l'e-mail", + "Cloud_resend_email": "Renvoyer l'e-mail", "Cloud_Service_Agree_PrivacyTerms": "Accord sur les conditions de confidentialité du service cloud", "Cloud_Service_Agree_PrivacyTerms_Description": "Je suis d'accord avec les conditions et la politique de confidentialité", "Cloud_Service_Agree_PrivacyTerms_Login_Disabled_Warning": "Vous devez accepter les conditions de confidentialité du cloud (Assistant de configuration > Infos sur le cloud > Accord sur les conditions de confidentialité du service cloud) pour vous connecter à votre espace de travail cloud", "Cloud_status_page_description": "Si un service cloud particulier rencontre des problèmes, vous pouvez vérifier les problèmes connus sur notre page d'état à l'adresse", + "Cloud_token_instructions": "Pour enregistrer votre espace de travail, accédez à Cloud Console. Connectez-vous ou créez un compte et cliquer sur s'inscrire autogéré. Collez le jeton fourni ci-dessous", "Cloud_troubleshooting": "Dépannage", "Cloud_update_email": "Mettre à jour l'e-mail", - "Cloud_what_is_it": "Qu'est-ce que c'est?", + "Cloud_what_is_it": "Qu'est-ce que c'est ?", "Cloud_what_is_it_additional": "De plus, vous serez en mesure de gérer les licences, la facturation et l'assistance depuis la console Rocket.Chat Cloud.", "Cloud_what_is_it_description": "Rocket.Chat Cloud Connect vous permet de connecter votre espace de travail Rocket.Chat auto-hébergé aux services que nous fournissons dans notre Cloud.", - "Cloud_what_is_it_services_like": "Des services comme:", + "Cloud_what_is_it_services_like": "Des services comme :", "Cloud_workspace_connected": "Votre espace de travail est connecté à Rocket.Chat Cloud. La connexion à votre compte Rocket.Chat Cloud ici, vous permettra d'interagir avec certains services comme le marketplace.", - "Cloud_workspace_connected_plus_account": "Votre espace de travail est maintenant connecté à Rocket.Chat Cloud et un compte est associé.", + "Cloud_workspace_connected_plus_account": "Votre espace de travail est désormais connecté à Rocket.Chat Cloud et un compte est associé.", + "Cloud_workspace_connected_without_account": "Votre espace de travail est désormais connecté au Rocket.Chat Cloud. Si vous le souhaitez, vous pouvez vous connecter au Rocket.Chat Cloud et associer votre espace de travail à votre compte Cloud.", "Cloud_workspace_disconnect": "Si vous ne souhaitez plus utiliser les services cloud, vous pouvez déconnecter votre espace de travail de Rocket.Chat Cloud.", "Cloud_workspace_support": "Si vous rencontrez des problèmes avec un service cloud, essayez d'abord de synchroniser. Si le problème persiste, veuillez ouvrir un ticket d'assistance dans la console Cloud.", + "Collaborative": "Collaboratif", "Collapse": "Réduire", "Collapse_Embedded_Media_By_Default": "Réduire tous les médias intégrés par défaut", "color": "Couleur", "Color": "Couleur", "Colors": "Couleurs", "Commands": "Commandes", - "Comment_to_leave_on_closing_session": "Commentaire à laisser lors de la fermeture de session", + "Comment_to_leave_on_closing_session": "Commentaire à laisser lors de la clôture de session", "Common_Access": "Accès commun", "Community": "Communauté", "Compact": "Compact", @@ -734,25 +881,39 @@ "Commit_details": "Détails du commit", "Completed": "Terminé", "Computer": "Ordinateur", - "Confirm_new_encryption_password": "Confirmer la clé de chiffrement", + "Configure_Incoming_Mail_IMAP": "Configurer le courrier entrant (IMAP)", + "Configure_Outgoing_Mail_SMTP": "Configurer le courrier sortant (SMTP)", + "Confirm_new_encryption_password": "Confirmer le nouveau mot de passe de cryptage", "Confirm_new_password": "Confirmer le nouveau mot de passe", - "Confirm_New_Password_Placeholder": "Merci de re-entrer le nouveau mot de passe ...", + "Confirm_New_Password_Placeholder": "Veuillez saisir à nouveau le nouveau mot de passe...", "Confirm_password": "Confirmez votre mot de passe", "Connect": "Connecter", + "Connect_SSL_TLS": "Se connecter avec SSL/TLS", "Connection_Closed": "Connexion fermée", "Connection_Reset": "Connexion réinitialisée", + "Connection_success": "Connexion LDAP réussie", "Connectivity_Services": "Services de connectivité", "Consulting": "Consultant", - "Consumer_Goods": "Biens de consommation", + "Consumer_Packaged_Goods": "Biens de consommation emballés", "Contact": "Contact", "Contacts": "Contacts", + "Contact_Name": "Nom du contact", + "Contact_Center": "Centre de contact", + "Contact_Chat_History": "Historique du chat de contact", "Contains_Security_Fixes": "Contient des correctifs de sécurité", + "Contact_Manager": "Gestionnaire de contacts", + "Contact_not_found": "Contact introuvable", + "Contact_Profile": "Profil de contact", "Content": "Contenu", "Continue": "Continuer", "Continuous_sound_notifications_for_new_livechat_room": "Notifications sonores continues pour la nouvelle salle omnicanale", "Conversation": "Conversation", "Conversation_closed": "Conversation fermée : __comment__.", + "Conversation_closing_tags": "Balises de clôture de conversation", + "Conversation_closing_tags_description": "Les balises de clôture seront automatiquement attribuées aux conversations lors de la fermeture.", + "Conversation_finished": "Conversation terminée", "Conversation_finished_message": "Message de fin de conversation", + "Conversation_finished_text": "Texte de la conversation terminée", "conversation_with_s": "la conversation avec %s", "Conversations": "Conversations", "Conversations_per_day": "Conversations par jour", @@ -763,7 +924,7 @@ "Copy_to_clipboard": "Copier dans le presse-papier", "COPY_TO_CLIPBOARD": "COPIER DANS LE PRESSE-PAPIER", "could-not-access-webdav": "Impossible d'accéder à WebDAV", - "Count": "Nombre", + "Count": "Compter", "Counters": "Compteurs", "Country": "Pays", "Country_Afghanistan": "Afghanistan", @@ -858,7 +1019,7 @@ "Country_Guinea_bissau": "Guinée-Bissau", "Country_Guyana": "Guyane", "Country_Haiti": "Haïti", - "Country_Heard_Island_and_Mcdonald_Islands": "Îles Heard-et-MacDonald", + "Country_Heard_Island_and_Mcdonald_Islands": "Île Heard et Îles Mcdonald", "Country_Holy_See_Vatican_City_State": "Saint-Siège (Cité du Vatican)", "Country_Honduras": "Honduras", "Country_Hong_Kong": "Hong Kong", @@ -866,7 +1027,7 @@ "Country_Iceland": "Islande", "Country_India": "Inde", "Country_Indonesia": "Indonésie", - "Country_Iran_Islamic_Republic_of": "Iran", + "Country_Iran_Islamic_Republic_of": "Iran, République islamique", "Country_Iraq": "Irak", "Country_Ireland": "Irlande", "Country_Israel": "Israël", @@ -881,11 +1042,11 @@ "Country_Korea_Republic_of": "République de Corée", "Country_Kuwait": "Koweït", "Country_Kyrgyzstan": "Kirghizistan", - "Country_Lao_Peoples_Democratic_Republic": "Laos", + "Country_Lao_Peoples_Democratic_Republic": "République démocratique populaire lao", "Country_Latvia": "Lettonie", "Country_Lebanon": "Liban", "Country_Lesotho": "Lesotho", - "Country_Liberia": "Liberia", + "Country_Liberia": "Libéria", "Country_Libyan_Arab_Jamahiriya": "Libye", "Country_Liechtenstein": "Liechtenstein", "Country_Lithuania": "Lituanie", @@ -921,9 +1082,9 @@ "Country_New_Zealand": "Nouvelle-Zélande", "Country_Nicaragua": "Nicaragua", "Country_Niger": "Niger", - "Country_Nigeria": "Nigéria", + "Country_Nigeria": "Nigeria", "Country_Niue": "Niue", - "Country_Norfolk_Island": "Île Norfolk", + "Country_Norfolk_Island": "l'Île de Norfolk", "Country_Northern_Mariana_Islands": "Îles Mariannes du Nord", "Country_Norway": "Norvège", "Country_Oman": "Oman", @@ -935,17 +1096,17 @@ "Country_Paraguay": "Paraguay", "Country_Peru": "Pérou", "Country_Philippines": "Philippines", - "Country_Pitcairn": "Îles Pitcairn", + "Country_Pitcairn": "Pitcairn", "Country_Poland": "Pologne", "Country_Portugal": "Portugal", "Country_Puerto_Rico": "Porto Rico", "Country_Qatar": "Qatar", "Country_Reunion": "Réunion", "Country_Romania": "Roumanie", - "Country_Russian_Federation": "Russie", + "Country_Russian_Federation": "Fédération Russe", "Country_Rwanda": "Rwanda", - "Country_Saint_Helena": "Saint Hélène", - "Country_Saint_Kitts_and_Nevis": "Saint Christophe et Niévès", + "Country_Saint_Helena": "Sainte-Hélène", + "Country_Saint_Kitts_and_Nevis": "Saint-Christophe-et-Niévès", "Country_Saint_Lucia": "Sainte Lucie", "Country_Saint_Pierre_and_Miquelon": "Saint Pierre et Miquelon", "Country_Saint_Vincent_and_The_Grenadines": "Saint Vincent et les Grenadines", @@ -1007,6 +1168,7 @@ "Country_Zimbabwe": "Zimbabwe", "Cozy": "Confortable", "Create": "Créer", + "Create_channel": "Créer un canal", "Create_A_New_Channel": "Créer un nouveau canal", "Create_new": "Créer nouveau", "Create_unique_rules_for_this_channel": "Créer des règles uniques pour ce canal", @@ -1028,31 +1190,43 @@ "Created_at_s_by_s_triggered_by_s": "Créé à %s en %s déclenché par %s", "Created_by": "Créé par", "CRM_Integration": "Intégration CRM (GRC)", + "CROWD_Allow_Custom_Username": "Autoriser le nom d'utilisateur personnalisé dans Rocket.Chat", "CROWD_Reject_Unauthorized": "Rejeter si non-autorisé", + "Crowd_Remove_Orphaned_Users": "Supprimer les utilisateurs orphelins", "Crowd_sync_interval_Description": "L'intervalle entre les synchronisations. Exemple `toutes les 24 heures` ou` le premier jour de la semaine`, plus d'exemples dans [Cron Text Parser] (http://bunkat.github.io/later/parsers.html#text)", "Current_Chats": "Discussions actuelles", + "Current_File": "Fichier actuel", + "Current_Import_Operation": "Opération d'importation en cours", "Current_Status": "Statut actuel", "Custom": "Personnalisé", "Custom CSS": "CSS personnalisé", "Custom_agent": "Agent personnalisé", - "Custom_emoji": "Emoticône personnalisée", - "Custom_Emoji": "Emoticône personnalisée", - "Custom_Emoji_Add": "Ajouter une nouvelle émoticône", - "Custom_Emoji_Added_Successfully": "Emoticône personnalisée ajouté avec succès", - "Custom_Emoji_Delete_Warning": "Effacer une émoticône est irréversible.", - "Custom_Emoji_Error_Invalid_Emoji": "Emoticône non valide", - "Custom_Emoji_Error_Name_Or_Alias_Already_In_Use": "L'émoticône personnalisée ou un de ses alias est déjà en cours d'utilisation.", - "Custom_Emoji_Has_Been_Deleted": "L'émoticône personnalisée a été effacé.", - "Custom_Emoji_Info": "Information sur l'émoticône personnalisée", - "Custom_Emoji_Updated_Successfully": "Emoticône personnalisée mise à jour avec succès", + "Custom_dates": "Dates personnalisées", + "Custom_emoji": "Emoji personnalisé", + "Custom_Emoji": "Emoji personnalisé", + "Custom_Emoji_Add": "Ajouter une nouvel emoji", + "Custom_Emoji_Added_Successfully": "Emoji personnalisé ajouté avec succès", + "Custom_Emoji_Delete_Warning": "La suppression d'un emoji ne peut pas être annulée.", + "Custom_Emoji_Error_Invalid_Emoji": "Emoji non valide", + "Custom_Emoji_Error_Name_Or_Alias_Already_In_Use": "L'emoji personnalisé ou un de ses alias est déjà en cours d'utilisation.", + "Custom_Emoji_Has_Been_Deleted": "L'emoji personnalisé a été effacé.", + "Custom_Emoji_Info": "Information sur l'emoji personnalisé", + "Custom_Emoji_Updated_Successfully": "Emoji personnalisé mis à jour avec succès", "Custom_Fields": "Champs personnalisés", + "Custom_Field_Removed": "Champ personnalisé supprimé", + "Custom_Field_Not_Found": "Champ personnalisé introuvable", "Custom_oauth_helper": "Lorsque vous configurez votre service OAuth, vous devez indiquer une URL pour le Callback. Utilisez %s", "Custom_oauth_unique_name": "Nom unique de l'OAuth personnalisé", "Custom_Script_Logged_In": "Script personnalisé pour les utilisateurs connectés", + "Custom_Script_Logged_In_Description": "Script personnalisé qui s'exécutera TOUJOURS et à TOUT utilisateur connecté. (Par exemple : chaque fois que vous entrez dans le chat et que vous êtes connecté)", "Custom_Script_Logged_Out": "Script personnalisé pour les utilisateurs déconnectés", + "Custom_Script_Logged_Out_Description": "Script personnalisé qui s'exécutera TOUJOURS et à TOUT utilisateur qui n'est PAS connecté. (Par exemple : chaque fois que vous entrez dans la page de connexion)", + "Custom_Script_On_Logout": "Script personnalisé pour le flux de déconnexion", + "Custom_Script_On_Logout_Description": "Script personnalisé qui s'exécutera UNIQUEMENT lors de l'exécution du flux de déconnexion", "Custom_Scripts": "Scripts personnalisés", "Custom_Sound_Add": "Ajouter un son personnalisé", "Custom_Sound_Delete_Warning": "La suppression d'un son est irréversible.", + "Custom_Sound_Edit": "Modifier le son personnalisé", "Custom_Sound_Error_Invalid_Sound": "Son invalide", "Custom_Sound_Error_Name_Already_In_Use": "Le nom de son personnalisé est déjà utilisé", "Custom_Sound_Has_Been_Deleted": "Le son personnalisé a été supprimé.", @@ -1061,12 +1235,13 @@ "Custom_Sounds": "Son personnalisés", "Custom_Status": "Statut personnalisé", "Custom_Translations": "Traductions personnalisées", - "Custom_Translations_Description": "Devrait être un JSON valide où les clefs sont des langues contenant un dictionnaire de clefs et de traductions. Exemple:{\n \"en\": {\n \"Channels\": \"Rooms\"\n },\n \"pt\": {\n \"Channels\": \"Salas\"\n }\n} ", + "Custom_Translations_Description": "Doit être un JSON valide où les clés sont des langues contenant un dictionnaire de clés et de traductions. Exemple : {\n \"en\": {\n \"Channels\": \"Rooms\"\n },\n \"pt\": {\n \"Channels\": \"Salas\"\n }\n} ", "Custom_User_Status": "Statut d'utilisateur personnalisé", "Custom_User_Status_Add": "Ajouter un statut d'utilisateur personnalisé", "Custom_User_Status_Added_Successfully": "Statut d'utilisateur personnalisé ajouté avec succès", "Custom_User_Status_Delete_Warning": "La suppression d'un statut d'utilisateur personnalisé ne peut pas être annulée.", "Custom_User_Status_Edit": "Modifier le statut d'utilisateur personnalisé", + "Custom_User_Status_Error_Invalid_User_Status": "Statut utilisateur non valide", "Custom_User_Status_Error_Name_Already_In_Use": "Le nom de statut d'utilisateur personnalisé est déjà utilisé.", "Custom_User_Status_Has_Been_Deleted": "Le statut d'utilisateur personnalisé a été supprimé", "Custom_User_Status_Info": "Information sur le statut d'utilisateur personnalisé", @@ -1075,26 +1250,39 @@ "CustomSoundsFilesystem": "Système de fichier des sons personnalisés", "Daily_Active_Users": "Utilisateurs actifs quotidiennement", "Dashboard": "Tableau de bord", + "Data_processing_consent_text": "Texte de consentement au traitement des données", + "Data_processing_consent_text_description": "Utilisez ce paramètre pour expliquer que vous pouvez collecter, stocker et traiter les informations personnelles du client tout au long de la conversation.", "Date": "Date", "Date_From": "De", "Date_to": "à", + "DAU_value": "DAU __value__", "days": "jours", + "Days": "Jours", "DB_Migration": "Mise à jour de la base de données", "DB_Migration_Date": "Date de mise à jour de la base de données", "DDP_Rate_Limit_Connection_By_Method_Enabled": "Limite par connexion par méthode : activée", + "DDP_Rate_Limit_Connection_By_Method_Interval_Time": "Limite par connexion par méthode : temps d'intervalle", + "DDP_Rate_Limit_Connection_By_Method_Requests_Allowed": "Limite par connexion par méthode : demandes autorisées", "DDP_Rate_Limit_Connection_Enabled": "Limite par connexion : activée", - "DDP_Rate_Limit_Connection_Interval_Time": "Limite par connexion: temps d'intervalle", - "DDP_Rate_Limit_Connection_Requests_Allowed": "Limite par connexion: demandes autorisées", + "DDP_Rate_Limit_Connection_Interval_Time": "Limite par connexion : temps d'intervalle", + "DDP_Rate_Limit_Connection_Requests_Allowed": "Limite par connexion : demandes autorisées", "DDP_Rate_Limit_IP_Enabled": "Limite par IP : activée", + "DDP_Rate_Limit_IP_Interval_Time": "Limite par IP : temps d'intervalle", + "DDP_Rate_Limit_IP_Requests_Allowed": "Limite par IP : demandes autorisées", "DDP_Rate_Limit_User_By_Method_Enabled": "Limite par utilisateur par méthode : activée", - "DDP_Rate_Limit_User_By_Method_Interval_Time": "Limite par utilisateur par méthode: temps d'intervalle", - "DDP_Rate_Limit_User_By_Method_Requests_Allowed": "Limite par utilisateur par méthode: demandes autorisées", + "DDP_Rate_Limit_User_By_Method_Interval_Time": "Limite par utilisateur par méthode : temps d'intervalle", + "DDP_Rate_Limit_User_By_Method_Requests_Allowed": "Limite par utilisateur par méthode : demandes autorisées", "DDP_Rate_Limit_User_Enabled": "Limite par utilisateur : activée", + "DDP_Rate_Limit_User_Interval_Time": "Limite par utilisateur : temps d'intervalle", + "DDP_Rate_Limit_User_Requests_Allowed": "Limite par utilisateur : demandes autorisées", "Deactivate": "Désactiver", "Decline": "Refuser", + "Decode_Key": "Décoder la clé", "Default": "Défaut", "Default_value": "Valeur par défaut", "Delete": "Supprimer", + "Delete_all_closed_chats": "Supprimer tous les chats fermés", + "Delete_File_Warning": "Si vous supprimez un fichier, il sera définitivement supprimé. Cela ne peut pas être annulé.", "Delete_message": "Supprimer le message", "Delete_my_account": "Supprimer mon compte", "Delete_Room_Warning": "Supprimer un salon supprimera également tous les messages postés dans le salon. Cette action est irréversible.", @@ -1107,14 +1295,14 @@ "delete-d": "Supprimer les messages directs", "delete-d_description": "Permission de supprimer des messages directs", "delete-message": "Supprimer le message", - "delete-message_description": "Permission de supprimer un message dans un salon", - "delete-p": "Supprimer les chaînes privées", - "delete-p_description": "Autorisation de supprimer des chaînes privées", + "delete-message_description": "Autorisation de supprimer un message dans un salon", + "delete-p": "Supprimer les canaux privés", + "delete-p_description": "Autorisation de supprimer des canaux privés", "delete-user": "Supprimer l'utilisateur", - "delete-user_description": "Permission de supprimer des utilisateurs", + "delete-user_description": "Autorisation de supprimer des utilisateurs", "Deleted": "Supprimé !", - "Department": "Service", - "Department_removed": "Service supprimé", + "Department": "Département", + "Department_removed": "Département supprimé", "Departments": "Départements", "Deployment_ID": "ID de déploiement", "Description": "Description", @@ -1126,22 +1314,23 @@ "Desktop_Notifications_Duration": "Durée des notifications de bureau", "Desktop_Notifications_Duration_Description": "Secondes pour afficher une notification de bureau. Cela peut affecter le Centre de Notification de OS X. Entrez 0 pour utiliser les paramètres du navigateur par défaut et ne pas affecter le Centre de Notification de OS X.", "Desktop_Notifications_Enabled": "Les notifications de bureau sont activées", - "Desktop_Notifications_Not_Enabled": "Les notifications du bureau ne sont pas activées", + "Desktop_Notifications_Not_Enabled": "Les notifications de bureau ne sont pas activées", "Details": "Détails", "Different_Style_For_User_Mentions": "Style différent pour les mentions utilisateurs", "Direct_Message": "Message privé", "Direct_message_creation_description": "Vous êtes sur le point de créer une discussion avec plusieurs utilisateurs. Ajoutez ceux avec qui vous souhaitez discuter, tous au même endroit, en utilisant des messages directs.", "Direct_message_someone": "Envoyer un message privé à quelqu'un", "Direct_message_you_have_joined": "Vous avez rejoint un nouveau message privé avec", - "Direct_Messages": "Messages Privés", + "Direct_Messages": "Messages privés", "Direct_Reply": "Réponse directe", - "Direct_Reply_Advice": "Vous pouvez directement répondre à cet email. Ne modifiez pas les emails précédents dans le fil.", + "Direct_Reply_Advice": "Vous pouvez directement répondre à cet e-mail. Ne modifiez pas les e-mails précédents dans le fil.", "Direct_Reply_Debug": "Deboguer la réponse directe", "Direct_Reply_Debug_Description": "[Méfiez-vous] Activer le mode Débogage affichera votre «mot de passe en texte brut» dans la console d'administration.", - "Direct_Reply_Delete": "Supprimer les e-mails interceptés", - "Direct_Reply_Delete_Description": "[Attention!] Si cette option est activée, tous les messages non lus sont supprimés de manière irréversible, même ceux qui ne sont pas des réponses directes. La boîte mail configurée est alors toujours vide et ne peut pas être traitée \"en parallèle\" par des humains.", + "Direct_Reply_Delete": "Supprimer les e-mails", + "Direct_Reply_Delete_Description": "[Attention !] Si cette option est activée, tous les messages non lus sont irrévocablement supprimés, même ceux qui ne sont pas des réponses directes. La boîte mail configurée est alors toujours vide et ne peut pas être traitée \"en parallèle\" par des humains.", "Direct_Reply_Enable": "Activer la réponse directe", - "Direct_Reply_Frequency": "Fréquence de vérification des courriels", + "Direct_Reply_Enable_Description": "[Attention !] Si \"Réponse directe\" est activé, Rocket.Chat contrôlera la boîte aux lettres électronique configurée. Tous les e-mails non lus sont récupérés, marqués comme lu et traités. La \"Réponse directe\" ne doit être activée que si la boîte aux lettres utilisée est exclusivement destinée à l'accès par Rocket.Chat et n'est pas lue / traitée \"en parallèle\" par des humains.", + "Direct_Reply_Frequency": "Fréquence de vérification des e-mails", "Direct_Reply_Frequency_Description": "(en minutes, par défaut / minimum 2)", "Direct_Reply_Host": "Hôte de réponse directe", "Direct_Reply_IgnoreTLS": "IgnoreTLS", @@ -1149,45 +1338,51 @@ "Direct_Reply_Port": "Direct_Reply_Port", "Direct_Reply_Protocol": "Protocole de réponse directe", "Direct_Reply_Separator": "Séparateur", - "Direct_Reply_Separator_Description": "[Ne modifiez que si vous savez exactement ce que vous faites, référez-vous aux documents]Séparateur entre la partie base et la partie tag de l'email", + "Direct_Reply_Separator_Description": "[Modifiez uniquement si vous savez exactement ce que vous faites, reportez-vous à la documentation]Séparateur entre la base et la partie tag de l'e-mail", "Direct_Reply_Username": "Nom d'utilisateur", - "Direct_Reply_Username_Description": "S'il vous plaît utiliser un courriel absolu, le marquage n'est pas autorisé, il serait écrasé", - "Directory": "Répertoire", - "Disable_Facebook_integration": "Désactiver l'intégration de Facebook", + "Direct_Reply_Username_Description": "Veuillez utiliser un e-mail absolu, le marquage n'est pas autorisé, il serait écrasé", + "Directory": "Annuaire", + "Disable_Facebook_integration": "Désactiver l'intégration Facebook", "Disable_Notifications": "Désactiver les notifications", "Disable_two-factor_authentication": "Désactiver l'authentification à deux facteurs par TOTP", "Disable_two-factor_authentication_email": "Désactiver l'authentification à deux facteurs par e-mail", "Disabled": "Désactivé", - "Disallow_reacting": "Interdire Réagir", + "Disallow_reacting": "Interdire la réaction", "Disallow_reacting_Description": "Interdit de réagir", + "Discard": "Jeter", "Disconnect": "Déconnecter", "Discussion": "Discussion", "Discussion_description": "Aide à garder un aperçu de ce qui se passe ! En créant une discussion, un sous-canal issu de celui que vous avez sélectionné est créé et les deux sont liés.", + "Discussion_first_message_disabled_due_to_e2e": "Vous pouvez commencer à envoyer des messages chiffrés de bout en bout dans cette discussion après sa création.", "Discussion_first_message_title": "Votre message", "Discussion_name": "Nom de la discussion", - "Discussion_start": "Démarrer une conversation", + "Discussion_start": "Lancer une discussion", "Discussion_target_channel": "Canal ou groupe parent", - "Discussion_target_channel_description": "Sélectionnez un canal qui est lié à ce que vous voulez demander", + "Discussion_target_channel_description": "Sélectionnez un canal lié à ce que vous souhaitez demander", "Discussion_target_channel_prefix": "Vous créez une discussion dans", "Discussion_title": "Créer une nouvelle discussion", "discussion-created": "__message__", "Discussions": "Discussions", - "Display_offline_form": "Affichage formulaire hors ligne", + "Display_chat_permissions": "Afficher les autorisations de chat", + "Display_offline_form": "Affichage le formulaire hors ligne", + "Display_setting_permissions": "Afficher les autorisations pour modifier les paramètres", "Display_unread_counter": "Afficher le nombre de messages non lus", - "Displays_action_text": "Texte d'affichage", - "Do_not_display_unread_counter": "N'affiche aucun compteur de cette chaîne", - "Do_you_want_to_accept": "Voulez-vous accepter?", + "Displays_action_text": "Affiche le texte d'action", + "Do_not_display_unread_counter": "N'afficher aucun compteur de ce canal", + "Do_not_provide_this_code_to_anyone": "Ne communiquez ce code à personne.", + "Do_you_want_to_accept": "Voulez-vous accepter ?", "Do_you_want_to_change_to_s_question": "Voulez-vous changer pour %s ?", "Document_Domain": "Domaine de document", "Domain": "Domaine", - "Domain_added": "Domaine ajouté", + "Domain_added": "domaine ajouté", "Domain_removed": "Domaine supprimé", "Domains": "Domaines", "Domains_allowed_to_embed_the_livechat_widget": "Liste des domaines autorisés à intégrer le widget de chat en direct, séparés par des virgules. Laissez vide pour autoriser tous les domaines. ", "Dont_ask_me_again": "Ne me demandez plus !", "Dont_ask_me_again_list": "Liste des avertissements mis en sourdine", "Download_Info": "Télécharger l'information", - "Download_My_Data": "Télécharger mes données", + "Download_My_Data": "Télécharger mes données (HTML)", + "Download_Pending_Avatars": "Télécharger les avatars en attente", "Download_Pending_Files": "Télécharger les fichiers en attente", "Download_Snippet": "Télécharger", "Downloading_file_from_external_URL": "Téléchargement du fichier depuis une URL externe", @@ -1199,14 +1394,29 @@ "Duplicate_channel_name": "Un canal avec le nom '%s' existe", "Duplicate_file_name_found": "Nom de fichier trouvé en double.", "Duplicate_private_group_name": "Un groupe privé avec le nom '%s' existe", + "Duplicated_Email_address_will_be_ignored": "L'adresse e-mail dupliquée sera ignorée.", "duplicated-account": "Compte dupliqué", - "E2E Encryption": "Chiffrement de bout en bout", - "E2E_Enable_alert": "Cette fonctionnalité est actuellement en version bêta ! Signalez les bogues sur github.com/RocketChat/Rocket.Chat/issues et notez les éléments suivants: - Les messages chiffrés des salles chiffrées ne seront pas détectés par le moteur de recherche. Les applications mobiles peuvent ne pas supporter les messages chiffrés (l'implémentation est en cours). - Les robots ne pourront peut-être pas voir les messages chiffrés tant que le support n'aura pas été mis en œuvre. - Les téléchargements ne seront pas cryptés dans cette version.", - "E2E_Enabled": "Chiffrement de bout en bout activé", + "E2E Encryption": "Chiffrement de bout en bout (E2E)", + "E2E_enable": "Activer E2E", + "E2E_disable": "Désactiver E2E", + "E2E_Enable_alert": "Cette fonctionnalité est actuellement en version bêta ! Signalez les bugs sur github.com/RocketChat/Rocket.Chat/issues et tenez compte des éléments suivants : - Les messages chiffrés des salles chiffrées ne seront pas détectés par les opérations de recherche. Les applications mobiles peuvent ne pas supporter les messages chiffrés (l'implémentation est en cours). - Les robots ne pourront peut-être pas voir les messages chiffrés tant que le support n'aura pas été mis en œuvre. - Les téléchargements ne seront pas cryptés dans cette version.", + "E2E_Enable_description": "Activer l'option pour créer des groupes chiffrés et pouvoir changer les groupes et les messages privés à chiffrer", + "E2E_Enabled": "Chiffrement de bout en bout (E2E) activé", + "E2E_Enabled_Default_DirectRooms": "Activer le cryptage pour les salons directs par défaut", + "E2E_Enabled_Default_PrivateRooms": "Activer le cryptage pour les salons privés par défaut", + "E2E_Encryption_Password_Change": "Changer le mot de passe de chiffrage", + "E2E_Encryption_Password_Explanation": "Vous pouvez désormais créer des groupes privés chiffrés et des messages privés. Vous pouvez également changer les groupes privés ou MP existants en cryptés.Il s'agit d'un cryptage de bout en bout de sorte que la clé pour encoder / décoder vos messages ne sera pas enregistrée sur le serveur. Pour cette raison, vous devez stocker votre mot de passe dans un endroit sûr. Vous devrez le saisir sur les autres appareils sur lesquels vous souhaitez utiliser le cryptage e2e.", + "E2E_key_reset_email": "Notification de réinitialisation de clé E2E", + "E2E_password_request_text": "Pour accéder à vos groupes privés chiffrés et à vos messages privés, entrez votre mot de passe de chiffrement. Vous devez entrer ce mot de passe pour encoder / décoder vos messages sur chaque client que vous utilisez, car la clé n'est pas stockée sur le serveur.", + "E2E_password_reveal_text": "Vous pouvez désormais créer des groupes privés chiffrés et des messages privés. Vous pouvez également changer les groupes privés ou MP existants en cryptés.Il s'agit d'un cryptage de bout en bout de sorte que la clé pour encoder / décoder vos messages ne sera pas enregistrée sur le serveur. Pour cette raison, vous devez stocker votre mot de passe dans un endroit sûr. Vous devrez le saisir sur les autres appareils sur lesquels vous souhaitez utiliser le cryptage e2e. En savoir plus ici !Votre mot de passe est : %sCeci est un mot de passe généré automatiquement, vous pouvez configurer un nouveau de mot de passe pour votre clé de cryptage à tout moment depuis n'importe quel navigateur où vous avez entré le mot de passe existant.Ce mot de passe n'est stocké que dans ce navigateur jusqu'à ce que vous stockiez le mot de passe et que vous fermiez ce message.", + "E2E_Reset_Email_Content": "Vous avez été automatiquement déconnecté. Lorsque vous vous reconnecterez, Rocket.Chat générera une nouvelle clé et restaurera votre accès à tout salon crypté qui a un ou plusieurs membres en ligne. En raison de la nature du cryptage E2E, Rocket.Chat ne pourra pas restaurer l'accès à un salon crypté qui n'a aucun membre en ligne.", + "E2E_Reset_Key_Explanation": "Cette option supprimera votre clé E2E actuelle et vous déconnectera. Lorsque vous vous reconnecterez, Rocket.Chat générera une nouvelle clé et restaurera votre accès à tout salon crypté qui a un ou plusieurs membres en ligne.En raison de la nature du cryptage E2E, Rocket.Chat ne pourra pas restaurer l'accès à un salon crypté qui n'a aucun membre en ligne.", + "E2E_Reset_Other_Key_Warning": "La réinitialisation de la clé E2E actuelle déconnectera l'utilisateur. Lorsque l'utilisateur se reconnectera, Rocket.Chat générera une nouvelle clé et restaurera l'accès de l'utilisateur à tout salon crypté qui a un ou plusieurs membres en ligne. En raison de la nature du cryptage E2E, Rocket.Chat ne pourra pas restaurer l'accès à un salon crypté qui n'a aucun membre en ligne.", "Edit": "Modifier", - "Edit_Business_Hour": "Modifier les heures d'ouverture", + "Edit_Business_Hour": "Modifier l'heure de travail", + "Edit_Canned_Responses": "Modifier les réponses standardisées", "Edit_Custom_Field": "Modifier le champ personnalisé", - "Edit_Department": "Éditer le service", + "Edit_Department": "Éditer le département", "Edit_Invite": "Modifier l'invitation", "Edit_previous_message": "`%s` - Modifier le message précédent", "Edit_Priority": "Modifier la priorité", @@ -1216,92 +1426,124 @@ "Edit_Unit": "Modifier l'unité", "Edit_User": "Modifier l'utilisateur", "edit-message": "Modifier le message", - "edit-message_description": "Permission de modifier un message dans un salon", + "edit-message_description": "Autorisation de modifier un message dans un salon", "edit-other-user-active-status": "Modifier l'état actif d'un autre utilisateur", - "edit-other-user-active-status_description": "Permission d'activer ou de désactiver d'autres comptes", + "edit-other-user-active-status_description": "Autorisation d'activer ou de désactiver d'autres comptes", "edit-other-user-avatar": "Modifier l'avatar d'un autre utilisateur", - "edit-other-user-info": "Modifier d'autres informations utilisateur", + "edit-other-user-avatar_description": "Autorisation de changer l'avatar d'un autre utilisateur", + "edit-other-user-e2ee": "Modifier le cryptage E2E d'un autre utilisateur", + "edit-other-user-e2ee_description": "Autorisation de modifier le cryptage E2E d'un autre utilisateur.", + "edit-other-user-info": "Modifier les autres informations utilisateur", "edit-other-user-info_description": "Permission de changer le nom, le nom d'utilisateur ou l'adresse e-mail d'un autre utilisateur.", - "edit-other-user-password": "Modifier un autre mot de passe utilisateur", + "edit-other-user-password": "Modifier le mot de passe d'un autre utilisateur", "edit-other-user-password_description": "Permission de modifier les mots de passe d'autres utilisateurs. Nécessite l'autorisation edit-other-user-info.", + "edit-other-user-totp": "Modifier le TOTP à deux facteurs d'un autre utilisateur", "edit-privileged-setting": "Modifier le paramètre privilégié", - "edit-privileged-setting_description": "Permission de modifier les paramètres", + "edit-privileged-setting_description": "Autorisation de modifier les paramètres", "edit-room": "Modifier le salon", - "edit-room_description": "Permission de modifier le nom, le sujet, le type (privé ou public) d'un salon et son statut (actif ou archivé)", - "edit-room-retention-policy": "Modifier la politique de rétention de la salle", - "edit-room-retention-policy_description": "Autorisation de modification de la stratégie de rétention d'une pièce pour y supprimer automatiquement les messages", + "edit-room_description": "Autorisation de modifier le nom, le sujet, le type (statut privé ou public) et l'état (actif ou archivé) d'un salon", + "edit-room-avatar": "Modifier l'avatar du salon", + "edit-room-avatar_description": "Autorisation de modifier l'avatar d'un salon.", + "edit-room-retention-policy": "Modifier la politique de rétention du salon", + "edit-room-retention-policy_description": "Autorisation de modifier la stratégie de rétention d'un salon pour y supprimer automatiquement les messages", + "Edit_Contact_Profile": "Modifier le profil du contact", "edited": "modifié", "Editing_room": "Modification du salon", "Editing_user": "Modification des utilisateurs", "Education": "Éducation", "Email": "E-mail", - "Email_address_to_send_offline_messages": "Adresse e-mail pour envoyer les messages hors ligne", + "Email_address_to_send_offline_messages": "Adresse e-mail pour envoyer des messages hors ligne", "Email_already_exists": "L'adresse e-mail existe déjà", "Email_body": "Corps du message", "Email_Change_Disabled": "Votre administrateur de Rocket.Chat a désactivé le changement d'adresse e-mail", "Email_Changed_Description": "Vous pouvez utiliser les variables suivantes : [email] pour l'adresse mail de l'utilisateur.[Site_Name] et [Site_URL] pour respectivement le nom de l'application et l'URL.", "Email_Changed_Email_Subject": "[Site_Name] - L'adresse e-mail a été modifiée", - "Email_Footer_Description": "Vous pouvez utiliser les variables suivantes: [Site_Name] et [Site_URL] pour le nom de l'application et URL respectivement. ", + "Email_changed_section": "Adresse e-mail modifiée", + "Email_Footer_Description": "Vous pouvez utiliser les espaces réservés suivants : [Site_Name] et [Site_URL] pour le nom de l'application et URL respectivement. ", "Email_from": "De", - "Email_Header_Description": "Vous pouvez utiliser les variables suivantes: [Site_Name] et [Site_URL] pour le nom de l'application et URL respectivement. ", + "Email_Header_Description": "Vous pouvez utiliser les variables suivantes : [Site_Name] et [Site_URL] pour le nom de l'application et URL respectivement. ", + "Email_Inbox": "Boîte de réception e-mail", + "Email_Inboxes": "Boîtes mails", "Email_Notification_Mode": "Notifications hors-ligne par e-mail", "Email_Notification_Mode_All": "Toutes les Mentions/MP", "Email_Notification_Mode_Disabled": "Désactivé", - "Email_Notifications_Change_Disabled": "Votre administrateur de Rocket.Chat a désactivé les notifications hors-ligne par e-mail", + "Email_notification_show_message": "Afficher le message dans la notification par e-mail", + "Email_Notifications_Change_Disabled": "Votre administrateur de Rocket.Chat a désactivé les notifications par e-mail", "Email_or_username": "Adresse e-mail ou nom d'utilisateur", - "Email_Placeholder": "Veuillez entrer votre adresse email ...", - "Email_Placeholder_any": "S'il vous plaît entrer les adresses e-mail ...", - "email_style_description": "Éviter les sélecteurs imbriqués", - "Email_subject": "Sujet", + "Email_Placeholder": "Veuillez saisir votre adresse e-mail...", + "Email_Placeholder_any": "Veuillez saisir les adresses e-mail...", + "email_plain_text_only": "Envoyer uniquement des e-mails en texte brut", + "email_style_description": "Évitez les sélecteurs imbriqués", + "email_style_label": "Style d'e-mail", + "Email_subject": "Sujet du mail", "Email_verified": "Adresse e-mail vérifiée", - "Emoji": "Emoticône", + "Email_sent": "E-mail envoyé", + "Emails_sent_successfully!": "E-mails envoyés avec succès !", + "Emoji": "Emoji", "Emoji_provided_by_JoyPixels": "Emoji fourni par JoyPixels", - "EmojiCustomFilesystem": "Système de fichier d'émoticônes personnalisés", + "EmojiCustomFilesystem": "Système de fichier d'emojis personnalisés", "Empty_title": "Titre vide", + "See_on_Engagement_Dashboard": "Voir sur le tableau de bord d'engagement", "Enable": "Activer", "Enable_Auto_Away": "Activer l'absence automatique", "Enable_Desktop_Notifications": "Activer les notifications sur le bureau", - "Enable_omnichannel_auto_close_abandoned_rooms": "Autoriser la fermeture des salles abandonnées par le visiteur", - "Enable_Svg_Favicon": "Activer les favicon en format SVG", + "Enable_inquiry_fetch_by_stream": "Activer la récupération des données de demande à partir du serveur à l'aide d'un flux", + "Enable_omnichannel_auto_close_abandoned_rooms": "Activer la fermeture automatique des salles abandonnées par le visiteur", + "Enable_Svg_Favicon": "Activer le favicon en format SVG", "Enable_two-factor_authentication": "Activer l'authentification à deux facteurs via TOTP", "Enable_two-factor_authentication_email": "Activer l'authentification à deux facteurs par e-mail", "Enabled": "Activé", - "Encrypted": "Chiffré", + "Encrypted": "Crypté", + "Encrypted_channel_Description": "Canal crypté de bout en bout. La recherche ne fonctionnera pas avec les canaux cryptés et les notifications peuvent ne pas afficher le contenu des messages.", "Encrypted_message": "Message chiffré", - "Encryption_key_saved_successfully": "Votre clé de chiffrement a été enregistrée avec succès", + "Encrypted_setting_changed_successfully": "Le paramètre chiffré a bien été modifié", + "Encrypted_not_available": "Non disponible pour les canaux publics", + "Encryption_key_saved_successfully": "Votre clé de chiffrement a été enregistrée avec succès.", + "EncryptionKey_Change_Disabled": "Vous ne pouvez pas définir de mot de passe pour votre clé de chiffrement car votre clé privée n'est pas présente sur ce client. Afin de définir un nouveau mot de passe, vous devez charger votre clé privée en utilisant votre mot de passe existant ou utiliser un client où la clé est déjà chargée.", + "End": "Fin", "End_OTR": "Arrêter OTR", - "Enter_a_custom_message": "Entrer un message personnalisé", + "Engagement_Dashboard": "Tableau de bord d'engagement", + "Enter_a_custom_message": "Entrez un message personnalisé", "Enter_a_department_name": "Entrez un nom de service", "Enter_a_name": "Entrez un nom", - "Enter_a_regex": "Saisissez une expression rationnelle", + "Enter_a_regex": "Entrez une expression régulière", "Enter_a_room_name": "Saisissez un nom de salon", + "Enter_a_tag": "Entrez une balise", "Enter_a_username": "Saisissez un nom d'utilisateur", "Enter_Alternative": "Mode alternatif (envoyé avec Entrée + Ctrl/Alt/Shift/CMD)", - "Enter_authentication_code": "Entrer le code d'authentification", + "Enter_authentication_code": "Entrez le code d'authentification", "Enter_Behaviour": "Comportement de la touche Entrée", - "Enter_Behaviour_Description": "Cela change si la touche Entrée enverra un message ou ajoutera un retour à la ligne", + "Enter_Behaviour_Description": "Cela change si la touche Entrée envoie un message ou fait un saut de ligne", + "Enter_E2E_password_to_decode_your_key": "Entrez le mot de passe E2E pour décoder votre clé", "Enter_name_here": "Saisissez le nom ici", "Enter_Normal": "Mode normal (envoyé avec Entrée)", "Enter_to": "Entrée pour", + "Enter_your_E2E_password": "Entrez votre mot de passe E2E", "Enterprise": "Entreprise", "Enterprise_License": "Licence d'entreprise", - "Enterprise_License_Description": "Si votre espace de travail est enregistré et la licence fournie par Rocket.Chat Cloud, alors vous n'avez pas besoin de mettre à jour manuellement la licence ici.", + "Enterprise_License_Description": "Si votre espace de travail est enregistré et que la licence est fournie par Rocket.Chat Cloud, vous n'avez pas besoin de mettre à jour manuellement la licence ici.", "Entertainment": "Divertissement", "Error": "Erreur", "Error_404": "Erreur 404", "Error_changing_password": "Erreur lors du changement de mot de passe", "Error_loading_pages": "Erreur lors du chargement des pages", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Erreur: Rocket.chat requiert l'activation de la fonction \"oplog tailing\" lorsqu'il fonctionne sur plusieurs instances", + "Error_login_blocked_for_ip": "La connexion a été temporairement bloquée pour cette adresse IP", + "Error_login_blocked_for_user": "La connexion a été temporairement bloquée pour cet utilisateur", + "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Erreur : Rocket.chat requiert l'activation de la fonction \"oplog tailing\" lors de l'exécution sur plusieurs instances", "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Veuillez vous assurer que MongoDB est en mode ReplicaSet et que la variable d'environnement MONGO_OPLOG_URL est définie correctement sur le serveur de l'application", "Error_sending_livechat_offline_message": "Erreur lors de l'envoi du message hors ligne omnicanal", "Error_sending_livechat_transcript": "Erreur lors de l'envoi de la transcription omnicanale", + "Error_Site_URL": "Site_Url non valide", + "Error_Site_URL_description": "Veuillez mettre à jour votre paramètre \"Site_Url\". Pour plus d'informations, cliquez ici>", "error-action-not-allowed": "__action__ n'est pas autorisée", "error-agent-offline": "L'agent est hors ligne", "error-application-not-found": "Application introuvable", "error-archived-duplicate-name": "Il existe un canal archivé avec le nom '__room_name__'", - "error-avatar-invalid-url": "URL de l'avatar invalide : __url__", + "error-avatar-invalid-url": "URL de l'avatar non valide : __url__", "error-avatar-url-handling": "Erreur lors de la récupération de l'avatar à partir de l'URL (__url__) pour __username__", + "error-business-hours-are-closed": "Les heures d'ouverture sont fermées", "error-canned-response-not-found": "Modèle de réponse non trouvé", + "error-cannot-delete-app-user": "La suppression de l'utilisateur de l'application n'est pas autorisée, désinstallez l'application correspondante pour la supprimer.", "error-cant-invite-for-direct-room": "Impossible d'inviter l'utilisateur dans les discussions privées", "error-channels-setdefault-is-same": "Le paramètre par défaut du canal est le même que celui auquel il serait modifié.", "error-channels-setdefault-missing-default-param": "Le bodyParam 'default' est requis", @@ -1310,45 +1552,53 @@ "error-could-not-change-username": "Impossible de modifier le nom d'utilisateur", "error-custom-field-name-already-exists": "Le nom du champ personnalisé existe déjà", "error-delete-protected-role": "Impossible de supprimer un rôle protégé", - "error-department-not-found": "Service introuvable", + "error-department-not-found": "Département introuvable", "error-direct-message-file-upload-not-allowed": "L'envoi de fichier n'est pas autorisé dans les messages privés", "error-duplicate-channel-name": "Un canal avec le nom '__channel_name__' existe déjà", "error-edit-permissions-not-allowed": "La modification des autorisations n'est pas autorisée", "error-email-domain-blacklisted": "Le domaine de l'adresse e-mail est sur liste noire", - "error-email-send-failed": "Erreur lors de la tentative d'envoi d'e-mail : __message__", + "error-email-send-failed": "Erreur lors de la tentative d'envoi de l'e-mail : __message__", + "error-essential-app-disabled": "Erreur : une application Rocket.Chat qui est essentielle pour cela est désactivée. Veuillez contacter votre administrateur", "error-field-unavailable": "__field__ est déjà utilisé :(", "error-file-too-large": "Le fichier est trop lourd", - "error-forwarding-department-target-not-allowed": "La redirection vers le service cible n'est pas autorisée.", - "error-guests-cant-have-other-roles": "Les invités ne peuvent pas avoir d'autre rôle.", - "error-import-file-extract-error": "Impossible d'extraire le fichier d'importation.", + "error-forwarding-chat-same-department": "Le département sélectionné et le département actuel du salon sont identiques", + "error-forwarding-department-target-not-allowed": "Le transfert vers le département cible n'est pas autorisé.", + "error-guests-cant-have-other-roles": "Les utilisateurs invités ne peuvent avoir aucun autre rôle.", + "error-import-file-extract-error": "Echec de l'extraction du fichier d'importation.", "error-import-file-is-empty": "Le fichier importé semble être vide.", - "error-import-file-missing": "Le fichier à importer n'a pas été trouvé au chemin spécifié.", - "error-importer-not-defined": "L'importateur n'a pas été défini correctement, il manque la classe Import.", + "error-import-file-missing": "Le fichier à importer est introuvable sur le chemin spécifié.", + "error-importer-not-defined": "L'importateur n'a pas été défini correctement, il manque la classe d'importation.", "error-input-is-not-a-valid-field": "__input__ n'est pas un __field__ valide", "error-invalid-account": "Compte invalide", "error-invalid-actionlink": "Lien d'action non valide", "error-invalid-arguments": "Arguments non valides", - "error-invalid-asset": "Ressource invalide", + "error-invalid-asset": "Elément non valide", "error-invalid-channel": "Canal non valide.", "error-invalid-channel-start-with-chars": "Canal non valide. Commencez par @ ou #", "error-invalid-custom-field": "Champ personnalisé invalide", "error-invalid-custom-field-name": "Nom de champ personnalisé invalide. Utilisez uniquement des lettres, des chiffres et des tirets (milieu et bas).", + "error-invalid-custom-field-value": "Valeur non valide pour le champ __field__", "error-invalid-date": "Date fournie invalide.", "error-invalid-description": "Description non valide", "error-invalid-domain": "Domaine non valide", "error-invalid-email": "Adresse e-mail __email__ non valide", "error-invalid-email-address": "Adresse e-mail invalide", + "error-invalid-email-inbox": "Boîte mail non valide", "error-invalid-file-height": "Hauteur du fichier non valide", "error-invalid-file-type": "Type de fichier non valide", "error-invalid-file-width": "Largeur du fichier non valide", "error-invalid-from-address": "Vous avez entré un expéditeur invalide (champ De).", + "error-invalid-inquiry": "Demande non valide", "error-invalid-integration": "Intégration non valide", "error-invalid-message": "Message non valide", "error-invalid-method": "Méthode non valide", "error-invalid-name": "Nom invalide", "error-invalid-password": "Mot de passe invalide", - "error-invalid-permission": "Permission invalide", - "error-invalid-priority": "Priorité non valable", + "error-invalid-param": "Paramètre non valide", + "error-invalid-params": "Paramètres non valides", + "error-invalid-permission": "Autorisation invalide", + "error-invalid-port-number": "Numéro de port non valide", + "error-invalid-priority": "Priorité invalide", "error-invalid-redirectUri": "URI de redirection invalide", "error-invalid-role": "Rôle non valide", "error-invalid-room": "Salon invalide", @@ -1361,8 +1611,9 @@ "error-invalid-urls": "URL non valides", "error-invalid-user": "Utilisateur invalide", "error-invalid-username": "Nom d'utilisateur invalide", + "error-invalid-value": "Valeur invalide", "error-invalid-webhook-response": "Le webhook URL répondu avec un statut autre que 200", - "error-logged-user-not-in-room": "Vous n'êtes pas dans la pièce `%s`", + "error-logged-user-not-in-room": "Vous n'êtes pas dans le salon `%s`", "error-max-guests-number-reached": "Vous avez atteint le nombre maximal d'invités autorisés par votre licence. Contactez sale@rocket.chat pour obtenir une nouvelle licence.", "error-max-number-simultaneous-chats-reached": "Le nombre maximum de chats simultanés par agent a été atteint.", "error-message-deleting-blocked": "La suppression de message est bloquée", @@ -1370,8 +1621,10 @@ "error-message-size-exceeded": "La taille du message dépasse Message_MaxAllowedSize", "error-missing-unsubscribe-link": "Vous devez fournir le lien de désinscription [unsubscribe].", "error-no-tokens-for-this-user": "Il n'y a aucun jeton pour cet utilisateur", + "error-no-message-for-unread": "Il n'y a aucun message à marquer comme non lu", "error-not-allowed": "Interdit", "error-not-authorized": "Non autorisé", + "error-office-hours-are-closed": "Les heures de bureau sont fermées.", "error-password-policy-not-met": "Le mot de passe ne répond pas à la politique du serveur", "error-password-policy-not-met-maxLength": "Le mot de passe ne respecte pas la politique de longueur maximale du mot de passe (mot de passe trop long)", "error-password-policy-not-met-minLength": "Le mot de passe ne respecte pas la politique de longueur minimale du serveur (mot de passe trop court)", @@ -1379,25 +1632,41 @@ "error-password-policy-not-met-oneNumber": "Le mot de passe ne respecte pas la politique du serveur d'au moins un caractère numérique", "error-password-policy-not-met-oneSpecial": "Le mot de passe ne respecte pas la politique du serveur d'au moins un caractère spécial", "error-password-policy-not-met-oneUppercase": "Le mot de passe ne respecte pas la politique du serveur d'au moins un caractère majuscule", - "error-password-policy-not-met-repeatingCharacters": "Le mot de passe ne respecte pas la politique du serveur concernant les caractères répétés interdits (vous avez trop de caractères identiques les uns à côté des autres)", + "error-password-policy-not-met-repeatingCharacters": "Le mot de passe ne respecte pas la politique du serveur concernant les caractères répétitifs interdits (vous avez trop de caractères identiques les uns à côté des autres)", + "error-password-same-as-current": "Mot de passe saisi identique au mot de passe actuel", + "error-personal-access-tokens-are-current-disabled": "Les jetons d'accès personnels sont actuellement désactivés", + "error-pinning-message": "Le message n'a pas pu être épinglé", "error-push-disabled": "Push est désactivé", "error-remove-last-owner": "Cet utilisateur est le dernier propriétaire. Veuillez sélectionner un nouveau propriétaire avant de retirer celui-ci.", + "error-returning-inquiry": "Erreur lors du renvoi de la demande dans la file d'attente", "error-role-in-use": "Impossible de supprimer le rôle car il est utilisé", "error-role-name-required": "Le nom du rôle est requis.", - "error-room-is-not-closed": "La pièce n'est pas fermée", + "error-room-is-not-closed": "Le salon n'est pas fermé", + "error-selected-agent-room-agent-are-same": "L'agent sélectionné et l'agent du salon sont les mêmes", + "error-starring-message": "Le message n'a pas pu être suivi", + "error-tags-must-be-assigned-before-closing-chat": "La ou les balises doivent être attribuées avant de fermer le chat", "error-the-field-is-required": "Le champ __field__ est obligatoire.", "error-this-is-not-a-livechat-room": "Ce n'est pas une salle omnicanale", + "error-token-already-exists": "Un jeton avec ce nom existe déjà", + "error-token-does-not-exists": "Le jeton n'existe pas", "error-too-many-requests": "Erreur, trop de demandes. Ralentissez, s'il vous plaît. Vous devez attendre __seconds__ secondes avant de réessayer.", - "error-user-has-no-roles": "L'utilisateur n'a pas de rôles", + "error-transcript-already-requested": "Transcription déjà demandée", + "error-unpinning-message": "Le message n'a pas pu être détaché", + "error-user-has-no-roles": "L'utilisateur n'a aucun rôle", "error-user-is-not-activated": "L'utilisateur n'est pas activé", "error-user-is-not-agent": "L'utilisateur n'est pas un agent omnicanal", - "error-user-limit-exceeded": "Le nombre d'utilisateurs que vous essayez d'inviter pour #channel_name dépasse le nombre autorisé par l'administrateur", + "error-user-is-offline": "Utilisateur si hors ligne", + "error-user-limit-exceeded": "Le nombre d'utilisateurs que vous essayez d'inviter à #channel_name dépasse la limite définie par l'administrateur", + "error-user-not-belong-to-department": "L'utilisateur n'appartient pas à ce département", "error-user-not-in-room": "L'utilisateur n'est pas dans ce salon.", "error-user-registration-disabled": "L'inscription des nouveaux utilisateurs est désactivée", - "error-user-registration-secret": "L'inscription des utilisateurs n'est autorisée que depuis une URL Secrète", + "error-user-registration-secret": "L'inscription des utilisateurs n'est autorisée que via l'URL secrète", + "error-validating-department-chat-closing-tags": "Au moins une balise de fermeture est requise lorsque le département exige des balises à la clôture des conversations.", "error-you-are-last-owner": "Vous êtes le dernier propriétaire. Veuillez choisir un nouveau propriétaire avant de quitter le salon.", + "Errors_and_Warnings": "Erreurs et avertissements", "Esc_to": "Échap pour", "Estimated_due_time": "Délai estimé", + "Estimated_due_time_in_minutes": "Délai estimé (temps en minutes)", "Event_Trigger": "Déclencheur d'événement", "Event_Trigger_Description": "Sélectionnez le type d'événement qui déclenchera cette intégration WebHook sortant", "every_5_minutes": "Une fois toutes les 5 minutes", @@ -1407,50 +1676,79 @@ "every_hour": "Une fois par heure", "every_minute": "Une fois par minute", "every_second": "Une fois par seconde", - "every_six_hours": "Une fois toutes les 6 heures", - "Everyone_can_access_this_channel": "Tout le monde peut accéder à cette chaîne", + "every_six_hours": "Une fois toutes les six heures", + "Everyone_can_access_this_channel": "Tout le monde peut accéder à ce canal", + "Exact": "Exact", + "Example_payload": "Exemple de charge utile (payload)", "Example_s": "Exemple : %s", "except_pinned": "(sauf ceux qui sont épinglés)", "Exclude_Botnames": "Exclure les bots", "Exclude_Botnames_Description": "Ne pas transmettre de messages de bots dont les noms correspondent à l'expression régulière ci-dessus. Si laissé vide, tous les messages des bots seront transmis.", "Exclude_pinned": "Exclure les messages épinglés", - "Execute_Synchronization_Now": "Exécuter la synchronisation maintenant", + "Execute_Synchronization_Now": "Exécutez la synchronisation maintenant", + "Exit_Full_Screen": "Quitter le mode plein écran", + "Expand": "Développer", "Experimental_Feature_Alert": "Ceci est une fonctionnalité expérimentale ! Veuillez noter qu'il peut changer, casser ou même être supprimé à l'avenir sans préavis.", "Expiration": "Expiration", "Expiration_(Days)": "Expiration (jours)", "Export_as_file": "Exporter en tant que fichier", "Export_Messages": "Exporter les messages", - "Export_My_Data": "Exporter mes données", + "Export_My_Data": "Exporter mes données (JSON)", + "expression": "Expression", "Extended": "Étendu", + "External_Domains": "Domaines externes", "External_Queue_Service_URL": "URL du service de file d'attente externe", "External_Service": "Service externe", + "External_Users": "Utilisateurs externes", + "Extremely_likely": "Extrêmement probable", "Facebook_Page": "La page Facebook", + "Failed": "Echoué", "Failed_to_activate_invite_token": "Echec de l'activation du jeton d'invitation", + "Failed_to_add_monitor": "Echec de l'ajout du moniteur", "Failed_To_Download_Files": "Echec du téléchargement des fichiers", "Failed_to_generate_invite_link": "Echec de la génération du lien d'invitation", + "Failed_To_Load_Import_Data": "Echec du chargement des données d'importation", + "Failed_To_Load_Import_History": "Echec du chargement de l'historique d'importation", + "Failed_To_Load_Import_Operation": "Echec du chargement de l'opération d'importation", + "Failed_To_Start_Import": "Echec du démarrage de l'opération d'importation", "Failed_to_validate_invite_token": "Echec de la validation du jeton d'invitation", "False": "Faux", "Favorite": "Favori", "Favorite_Rooms": "Activer les salons favoris", "Favorites": "Favoris", - "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Cette fonctionnalité dépend de \"Envoyer l'historique de navigation du visiteur en tant que message\" à activer.", + "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Cette fonctionnalité dépend de l'activation de \"Envoyer l'historique de navigation des visiteurs sous forme de message\".", "Features": "Fonctionnalités", "Features_Enabled": "Fonctionnalités activées", "Federation_Dashboard": "Tableau de bord de la Fédération", "FEDERATION_Discovery_Method": "Méthode de découverte", + "FEDERATION_Discovery_Method_Description": "Vous pouvez utiliser le hub ou un SRV et une entrée TXT sur vos enregistrements DNS.", "FEDERATION_Domain": "Domaine", + "FEDERATION_Domain_Alert": "Ne changez pas cela après avoir activé la fonctionnalité, nous ne pouvons pas encore gérer les changements de domaine.", + "FEDERATION_Domain_Description": "Ajoutez le domaine auquel ce serveur doit être lié - par exemple : @rocket.chat.", + "FEDERATION_Enabled": "Tentative de l'intégration de la prise en charge de la fédération.", + "FEDERATION_Enabled_Alert": "Le support de la Fédération est un travail en cours. L'utilisation sur un système de production n'est pas recommandée pour le moment.", + "FEDERATION_Error_user_is_federated_on_rooms": "Vous ne pouvez pas supprimer les utilisateurs fédérés appartenant à des salons", + "FEDERATION_Hub_URL": "Hub URL", + "FEDERATION_Hub_URL_Description": "Définissez l'URL du hub, par exemple : https://hub.rocket.chat. Les ports sont également acceptés.", + "FEDERATION_Public_Key": "Clé publique", + "FEDERATION_Public_Key_Description": "C'est la clé que vous devez partager avec vos pairs.", "FEDERATION_Room_Status": "Statut de la fédération", "FEDERATION_Status": "Statut", "FEDERATION_Test_Setup": "Tester la configuration", + "FEDERATION_Test_Setup_Error": "Impossible de trouver votre serveur en utilisant votre configuration, veuillez vérifier vos paramètres.", + "FEDERATION_Test_Setup_Success": "Votre configuration de fédération fonctionne et d'autres serveurs peuvent vous trouver !", + "FEDERATION_Unique_Id": "ID unique", + "FEDERATION_Unique_Id_Description": "Il s'agit de votre ID unique de fédération, utilisé pour identifier votre homologue sur le mesh.", "Field": "Champ", "Field_removed": "Champ supprimé", - "Field_required": "Champs requis", + "Field_required": "Champ requis", "File": "Fichier", "File_Downloads_Started": "Début des téléchargements de fichiers", "File_exceeds_allowed_size_of_bytes": "Le fichier dépasse la taille maximale autorisée de __size__. ", "File_name_Placeholder": "Rechercher des fichiers...", "File_not_allowed_direct_messages": "L'envoi de fichier n'est pas autorisé dans les messages privés.", "File_Path": "Chemin du fichier", + "file_pruned": "fichier élagué", "File_removed_by_automatic_prune": "Fichier supprimé par élagage automatique", "File_removed_by_prune": "Fichier supprimé par élagage", "File_Type": "Type de fichier", @@ -1460,62 +1758,74 @@ "File_URL": "URL du fichier", "files": "fichiers", "Files": "Fichiers", - "Files_only": "Ne retirez que les fichiers joints, gardez les messages", + "Files_only": "Ne supprimez que les fichiers joints, conservez les messages", "files_pruned": "fichiers élagués", "FileSize_Bytes": "__fileSize__ octets", + "FileSize_KB": "__fileSize__ Ko", + "FileSize_MB": "__fileSize__ Mo", "FileUpload": "Envoi de fichiers", "FileUpload_Disabled": "L'envoi de fichiers n'est pas activé.", + "FileUpload_Enable_json_web_token_for_files": "Activer la protection des jetons Web Json pour le téléversement de fichiers", + "FileUpload_Enable_json_web_token_for_files_description": "Ajoute un JWT aux URL des fichiers téléversés", "FileUpload_Enabled": "Envois de fichiers activés", "FileUpload_Enabled_Direct": "L'envoi de fichiers est activé dans les messages privés", "FileUpload_Error": "Erreur de téléchargement de fichier", "FileUpload_File_Empty": "Fichier vide", - "FileUpload_FileSystemPath": "Chemin d'accès", + "FileUpload_FileSystemPath": "Chemin système", "FileUpload_GoogleStorage_AccessId": "Identifiant Google Storage Access", - "FileUpload_GoogleStorage_AccessId_Description": "L'identifiant d'accès est généralement dans un format de courrier électronique, par exemple: \"example-test@example.iam.gserviceaccount.com\"", - "FileUpload_GoogleStorage_Bucket": "Nom du compartiment de stockage Google", - "FileUpload_GoogleStorage_Bucket_Description": "Le nom du compartiment dans lequel les fichiers doivent être téléchargés.", + "FileUpload_GoogleStorage_AccessId_Description": "L'ID d'accès est généralement au format e-mail, par exemple : \"example-test@example.iam.gserviceaccount.com\"", + "FileUpload_GoogleStorage_Bucket": "Nom du bucket de stockage Google", + "FileUpload_GoogleStorage_Bucket_Description": "Le nom du compartiment dans lequel les fichiers doivent être téléversés.", "FileUpload_GoogleStorage_Proxy_Avatars": "Avatars proxy", - "FileUpload_GoogleStorage_Proxy_Avatars_Description": "Transmissions de fichiers avatar proxy via votre serveur au lieu d'un accès direct à l'URL de l'actif", - "FileUpload_GoogleStorage_Proxy_Uploads": "Téléchargement proxy", - "FileUpload_GoogleStorage_Proxy_Uploads_Description": "Envoi par proxy des transmissions de fichiers via votre serveur au lieu d'un accès direct à l'URL de l'actif", - "FileUpload_GoogleStorage_Secret": "Secret Google Storage", + "FileUpload_GoogleStorage_Proxy_Avatars_Description": "Transmissions de fichiers d'avatar proxy via votre serveur au lieu d'un accès direct à l'URL de l'actif", + "FileUpload_GoogleStorage_Proxy_Uploads": "Envois proxy", + "FileUpload_GoogleStorage_Proxy_Uploads_Description": "Transmissions de fichiers de téléversement par proxy via votre serveur au lieu d'un accès direct à l'URL de l'actif", + "FileUpload_GoogleStorage_Secret": "Secret de stockage Google", "FileUpload_GoogleStorage_Secret_Description": "Merci de suivre ces instructions et copiez le résultat ici.", + "FileUpload_json_web_token_secret_for_files": "Téléversement de fichier Json Web Token Secret", + "FileUpload_json_web_token_secret_for_files_description": "Téléversement de fichier Json Web Token Secret (utilisé pour pouvoir accéder aux fichiers téléversés sans authentification)", "FileUpload_MaxFileSize": "Taille maximale pour l'envoi de fichier (en octets)", - "FileUpload_MaxFileSizeDescription": "Réglez-le sur -1 pour supprimer la limitation de taille de fichier.", + "FileUpload_MaxFileSizeDescription": "Définissez-le sur -1 pour supprimer la limitation de taille de fichier.", "FileUpload_MediaType_NotAccepted": "Types de fichiers non acceptés", + "FileUpload_MediaTypeBlackList": "Type de médias bloqués", + "FileUpload_MediaTypeBlackListDescription": "Liste des types de média séparé par des virgules. Ce paramètre a la priorité sur les types de supports acceptés.", "FileUpload_MediaTypeWhiteList": "Types de média acceptés", "FileUpload_MediaTypeWhiteListDescription": "Liste des types de média (séparés par des virgules). Laisser vide pour accepter tous les types de media.", "FileUpload_ProtectFiles": "Protéger les fichiers envoyés", "FileUpload_ProtectFilesDescription": "Seuls les utilisateurs authentifiés auront accès", "FileUpload_RotateImages": "Faire pivoter les images lors de l'upload", - "FileUpload_S3_Acl": "Amazon S3 acl", - "FileUpload_S3_AWSAccessKeyId": "Amazon S3 AWSAccessKeyId", - "FileUpload_S3_AWSSecretAccessKey": "Amazon S3 AWSSecretAccessKey", - "FileUpload_S3_Bucket": "Amazon S3 bucket name", + "FileUpload_RotateImages_Description": "L'activation de ce paramètre peut entraîner une perte de qualité d'image", + "FileUpload_S3_Acl": "Acl", + "FileUpload_S3_AWSAccessKeyId": "Clé d'accès", + "FileUpload_S3_AWSSecretAccessKey": "Clé secrète", + "FileUpload_S3_Bucket": "Nom du godet (bucket)", "FileUpload_S3_BucketURL": "Bucket URL", "FileUpload_S3_CDN": "Domaine CDN pour les téléchargements", "FileUpload_S3_ForcePathStyle": "Style de chemin de force", "FileUpload_S3_Proxy_Avatars": "Avatars proxy", - "FileUpload_S3_Proxy_Avatars_Description": "Transmissions de fichiers avatar proxy via votre serveur au lieu d'un accès direct à l'URL de l'actif", - "FileUpload_S3_Proxy_Uploads": "Téléchargement proxy", - "FileUpload_S3_Proxy_Uploads_Description": "Envoi par proxy des transmissions de fichiers via votre serveur au lieu d'un accès direct à l'URL de l'actif", + "FileUpload_S3_Proxy_Avatars_Description": "Transmissions de fichiers d'avatar proxy via votre serveur au lieu d'un accès direct à l'URL de l'actif", + "FileUpload_S3_Proxy_Uploads": "Envois proxy", + "FileUpload_S3_Proxy_Uploads_Description": "Transmissions de fichiers de téléversement par proxy via votre serveur au lieu d'un accès direct à l'URL de l'actif", "FileUpload_S3_Region": "Région", - "FileUpload_S3_SignatureVersion": "Version de la signature", - "FileUpload_S3_URLExpiryTimeSpan": "Période avant expiration des URLs", - "FileUpload_S3_URLExpiryTimeSpan_Description": "Période avant que les URLs générées par Amazon S3 ne soient plus valides (en secondes). Ignorée si inférieure à 5 secondes.", + "FileUpload_S3_SignatureVersion": "Version de signature", + "FileUpload_S3_URLExpiryTimeSpan": "Période d'expiration des URL", + "FileUpload_S3_URLExpiryTimeSpan_Description": "Temps après lequel les URLs générées par Amazon S3 ne seront plus valides (en secondes). Si inférieur à 5 secondes, ce champ sera ignoré.", "FileUpload_Storage_Type": "Type de stockage", "FileUpload_Webdav_Password": "Mot de passe WebDAV", "FileUpload_Webdav_Proxy_Avatars": "Avatars proxy", - "FileUpload_Webdav_Proxy_Avatars_Description": "Transmissions de fichiers avatar proxy via votre serveur au lieu d'un accès direct à l'URL de l'actif", - "FileUpload_Webdav_Proxy_Uploads": "Téléchargement proxy", - "FileUpload_Webdav_Proxy_Uploads_Description": "Envoi par proxy des transmissions de fichiers via votre serveur au lieu d'un accès direct à l'URL de l'actif", + "FileUpload_Webdav_Proxy_Avatars_Description": "Transmissions de fichiers d'avatar proxy via votre serveur au lieu d'un accès direct à l'URL de l'actif", + "FileUpload_Webdav_Proxy_Uploads": "Envois proxy", + "FileUpload_Webdav_Proxy_Uploads_Description": "Transmissions de fichiers de téléversement par proxy via votre serveur au lieu d'un accès direct à l'URL de l'actif", "FileUpload_Webdav_Server_URL": "URL d'accès au serveur WebDAV", "FileUpload_Webdav_Upload_Folder_Path": "Télécharger le chemin du dossier", - "FileUpload_Webdav_Upload_Folder_Path_Description": "Chemin du dossier WebDAV sur lequel les fichiers doivent être téléchargés", + "FileUpload_Webdav_Upload_Folder_Path_Description": "Chemin du dossier WebDAV sur lequel les fichiers doivent être téléversés", "FileUpload_Webdav_Username": "Nom d'utilisateur WebDAV", "Filter": "Filtre", + "Filters": "Filtres", + "Filters_applied": "Filtres appliqués", "Financial_Services": "Services financiers", - "First_Channel_After_Login": "Première chaîne après la connexion", + "First_Channel_After_Login": "Premier canal après la connexion", + "First_response_time": "Temps de première réponse", "Flags": "Drapeaux", "Follow_message": "Suivre le message", "Follow_social_profiles": "Suivez-nous sur les réseaux sociaux, clonez le projet sur GitHub et partagez vos idées à propos de Rocket.Chat sur notre tableau Trello.", @@ -1525,47 +1835,66 @@ "Footer": "Pied de page", "Footer_Direct_Reply": "Pied de page lorsque la réponse directe est activée", "For_more_details_please_check_our_docs": "Pour plus de détails, veuillez consulter notre documentation.", - "For_your_security_you_must_enter_your_current_password_to_continue": "Pour votre sécurité, vous devez ré-entrer votre mot de passe pour continuer", - "Force_Disable_OpLog_For_Cache": "Forcer la désactivation de la fonction OpLog pour le cache", - "Force_Disable_OpLog_For_Cache_Description": "N'utlisera pas la fonction OpLog pour syncroniser le cache même si elle est disponible.", + "For_your_security_you_must_enter_your_current_password_to_continue": "Pour votre sécurité, vous devez entrer votre mot de passe actuel pour continuer", + "Force_Disable_OpLog_For_Cache": "Forcer la désactivation d'OpLog pour le cache", + "Force_Disable_OpLog_For_Cache_Description": "N'utlisera pasOpLog pour synchroniser le cache même s'il est disponible", + "Force_Screen_Lock": "Forcer le verrouillage de l'écran", + "Force_Screen_Lock_After": "Forcer le verrouillage de l'écran après", + "Force_Screen_Lock_After_description": "Le temps de demander à nouveau le mot de passe après la fin de la dernière session, en secondes.", + "Force_Screen_Lock_description": "Lorsqu'elle est activée, vous obligerez vos utilisateurs à utiliser un code PIN / BIOMETRIE / FACEID pour déverrouiller l'application.", "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.", + "Force_visitor_to_accept_data_processing_consent": "Forcer le visiteur à accepter le consentement du traitement des données", + "Force_visitor_to_accept_data_processing_consent_description": "Les visiteurs ne sont pas autorisés à commencer à discuter sans leur consentement.", + "Force_visitor_to_accept_data_processing_consent_enabled_alert": "L'accord avec le traitement des données doit être basé sur une compréhension transparente de la raison du traitement. Pour cette raison, vous devez remplir le paramètre ci-dessous qui sera affiché aux utilisateurs afin de fournir les raisons de la collecte et du traitement de vos informations personnelles.", "force-delete-message": "Forcer la suppression du message", - "force-delete-message_description": "Permission de supprimer un message en contournant toutes les restrictions", - "Forgot_password": "Mot de passe oublié", + "force-delete-message_description": "Autorisation de supprimer un message en contournant toutes les restrictions", + "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.", "Forgot_Password_Email_Subject": "[Site_Name] - Récupération du mot de passe", "Forgot_password_section": "Mot de passe oublié", "Forward": "Transmettre", "Forward_chat": "Transmettre la conversation", - "Forward_to_department": "Transmettre au service", + "Forward_to_department": "Transmettre au département", "Forward_to_user": "Transmettre à l'utilisateur", + "Forwarding": "Transférer", "Free": "Gratuit", "Frequently_Used": "Fréquemment utilisé", "Friday": "Vendredi", "From": "De", "From_Email": "De l'e-mail", "From_email_warning": "Attention : le champ Expéditeur est déterminé par les paramètres de votre serveur mail.", - "Full_Screen": "Plein Écran", - "Gaming": "Jeu", + "Full_Name": "Nom complet", + "Full_Screen": "Plein écran", + "Gaming": "Jeux", "General": "Général", + "Generate_new_key": "Générer une nouvelle clé", "Generate_New_Link": "Générer un nouveau lien", - "Get_link": "Copier le lien", + "Generating_key": "Générer la clé", + "Get_link": "Obtenir le lien", + "get-password-policy-forbidRepeatingCharacters": "Le mot de passe ne doit pas contenir de caractères répétitifs", + "get-password-policy-forbidRepeatingCharactersCount": "Le mot de passe ne doit pas contenir plus de __forbidRepeatingCharactersCount__ caractères répétitifs", + "get-password-policy-maxLength": "Le mot de passe doit comporter au maximum __maxLength__ caractères", + "get-password-policy-minLength": "Le mot de passe doit comporter au minimum __minLength__ caractères", + "get-password-policy-mustContainAtLeastOneLowercase": "Le mot de passe doit contenir au moins une lettre minuscule", "get-password-policy-mustContainAtLeastOneNumber": "Le mot de passe doit contenir au moins un chiffre", + "get-password-policy-mustContainAtLeastOneSpecialCharacter": "Le mot de passe doit contenir au moins un caractère spécial", + "get-password-policy-mustContainAtLeastOneUppercase": "Le mot de passe doit contenir au moins une lettre majuscule", "github_no_public_email": "Vous n'avez pas d'adresse e-mail publique associée à votre compte GitHub", "Give_a_unique_name_for_the_custom_oauth": "Indiquez un nom unique pour l'OAuth personnalisé", "Give_the_application_a_name_This_will_be_seen_by_your_users": "Donnez un nom à l'application. Il sera visible par les utilisateurs.", "Global": "Global", - "Global_purge_override_warning": "Une politique de rétention globale est en place. Si vous laissez la règle \"Remplacer la stratégie globale de rétention\", vous ne pouvez appliquer qu'une stratégie plus stricte que la stratégie globale.", + "Global Policy": "Politique globale", + "Global_purge_override_warning": "Une politique de rétention globale est en place. Si vous laissez \"Remplacer la stratégie globale de rétention\" désactivée, vous ne pouvez appliquer qu'une stratégie plus stricte que la stratégie globale.", "Global_Search": "Recherche globale", - "Go_to_your_workspace": "Aller à votre espace de travail", + "Go_to_your_workspace": "Accédez à votre espace de travail", "Google_Vision_usage_limit_exceeded": "Limite d'utilisation de Google Vision dépassée", "GoogleCloudStorage": "Google Cloud Storage", "GoogleNaturalLanguage_ServiceAccount_Description": "Fichier JSON de clé de compte de service. Plus d'informations peuvent être trouvées [ici](https://cloud.google.com/natural-language/docs/common/auth#set_up_a_service_account)", "GoogleTagManager_id": "Google Tag Manager ID", - "GoogleVision_Block_Adult_Images": "Bloquer les images adultes", - "GoogleVision_Block_Adult_Images_Description": "Le blocage des images adultes ne fonctionnera pas une fois la limite mensuelle atteinte", + "GoogleVision_Block_Adult_Images": "Bloquer les images pour adultes", + "GoogleVision_Block_Adult_Images_Description": "Le blocage des images pour adultes ne fonctionnera pas une fois que la limite mensuelle aura été atteinte", "GoogleVision_Current_Month_Calls": "Appels du mois en cours", "GoogleVision_Enable": "Activer Google Vision", "GoogleVision_Max_Monthly_Calls": "Appels mensuels maximum", @@ -1574,26 +1903,32 @@ "GoogleVision_ServiceAccount_Description": "Créez une clé de serveur (format JSON) et collez le contenu JSON ici", "GoogleVision_Type_Document": "Détection de texte de document", "GoogleVision_Type_Faces": "Détection facial", - "GoogleVision_Type_Labels": "Détection d'étiquettes", - "GoogleVision_Type_Landmarks": "Détection de repères", - "GoogleVision_Type_Logos": "Logos de détection", - "GoogleVision_Type_Properties": "Propriétés (Couleur) Détection", - "GoogleVision_Type_SafeSearch": "Détection de SafeSearch", + "GoogleVision_Type_Labels": "Détection des étiquettes", + "GoogleVision_Type_Landmarks": "Détection des point de repère", + "GoogleVision_Type_Logos": "Détection de logos", + "GoogleVision_Type_Properties": "Détection des propriétés (couleur)", + "GoogleVision_Type_SafeSearch": "Détection SafeSearch", "GoogleVision_Type_Similar": "Recherche d'images similaires", "Government": "Gouvernement", + "Graphql_CORS": "GraphQL CORS", "Graphql_Enabled": "GraphQL activé", + "Graphql_Subscription_Port": "Port d'abonnement GraphQL", "Group_by": "Grouper par", "Group_by_Type": "Grouper par type", + "Group_discussions": "Discussions de groupe", "Group_favorites": "Favoris du groupe", "Group_mentions_disabled_x_members": "Les mentions de groupe `@all` et`@here` ont été désactivées pour les chambres de plus de __total__ membres.", "Group_mentions_only": "Mentions de groupe seulement", + "Grouping": "Regroupement", "Hash": "Hachage", "Header": "Entête", "Header_and_Footer": "Entêtes et Pied de page", - "Healthcare_and_Pharmaceutical": "Santé / Pharmaceutique", - "Help_Center": "Centre d'aide", - "Helpers": "Assistants", - "Hex_Color_Preview": "Aperçu de la couleur Hex", + "Pharmaceutical": "Pharmaceutique", + "Healthcare": "Soins de santé", + "Helpers": "Aides", + "Here_is_your_authentication_code": "Voici votre code d'authentification :", + "Hex_Color_Preview": "Aperçu des couleurs hexadécimales", + "Hi": "Salut", "Hi_username": "Bonjour __name__", "Hidden": "Caché", "Hide": "Masquer", @@ -1606,7 +1941,7 @@ "Hide_Private_Warning": "Êtes-vous sûr(e) de vouloir masquer la discussion avec \"%s\" ?", "Hide_roles": "Masquer les rôles", "Hide_room": "Masquer le salon", - "Hide_Room_Warning": "Êtes-vous sûr(e) de vouloir masquer le salon \"%s\" ?", + "Hide_Room_Warning": "Voulez-vous vraiment masquer le canal \"%s\" ?", "Hide_System_Messages": "Masquer les messages système", "Hide_Unread_Room_Status": "Masquer le statut des salons non lus", "Hide_usernames": "Masquer les noms d'utilisateur", @@ -1614,56 +1949,63 @@ "Highlights_How_To": "Pour être notifié(e) lorsque quelqu'un écrit un mot ou une phrase spécifique, ajoutez le/la ici. Vous pouvez les séparer par des virgules. Les termes surveillés ne sont pas sensibles à la casse.", "Highlights_List": "Mots surveillés", "History": "Historique", + "Home": "Accueil", "Host": "Hôte", + "Hospitality_Businness": "Hôtellerie", "hours": "heures", "Hours": "Heures", "How_friendly_was_the_chat_agent": "Votre interlocuteur était-il amical ?", "How_knowledgeable_was_the_chat_agent": "Votre interlocuteur était-il clair ?", - "How_long_to_wait_after_agent_goes_offline": "Délai d'attente après que l'agent soit hors ligne", - "How_responsive_was_the_chat_agent": "Votre interlocuteur avait-il des réponses adaptées ?", + "How_long_to_wait_after_agent_goes_offline": "Combien de temps attendre après que l'agent soit hors ligne", + "How_long_to_wait_to_consider_visitor_abandonment": "Combien de temps faut-il attendre avant d'envisager l'abandon d'un visiteur?", + "How_long_to_wait_to_consider_visitor_abandonment_in_seconds": "Combien de temps faut-il attendre avant d'envisager l'abandon d'un visiteur?", + "How_responsive_was_the_chat_agent": "Quel a été la réactivité de l'agent de chat ?", "How_satisfied_were_you_with_this_chat": "Étiez-vous satisfait de ce chat?", "How_to_handle_open_sessions_when_agent_goes_offline": "Comment gérer les sessions ouvertes lorsque l'agent est déconnecté", "I_ll_do_it_later": "Je le ferai plus tard", - "I_saved_my_password_close_this_message": "J'ai sauvegardé mon mot de passe, fermer ce message", - "Idle_Time_Limit": "Temps limite d'inactivité", - "Idle_Time_Limit_Description": "Période de temps jusqu'à ce que le statut change. La valeur doit être en secondes.", - "if_they_are_from": "(si elles proviennent de %s)", + "I_saved_my_password_close_this_message": "J'ai enregistré mon mot de passe, fermer ce message", + "Idle_Time_Limit": "Limite de temps d'inactivité", + "Idle_Time_Limit_Description": "Période de temps jusqu'à ce que le statut passe à absent. La valeur doit être en secondes.", + "if_they_are_from": "(s'ils proviennent de %s)", "If_this_email_is_registered": "Si cet e-mail est enregistré, les instructions pour réinitialiser votre mot de passe vous serons envoyées. Si vous ne recevez pas d'email rapidement, merci de revenir et d'essayer à nouveau.", "If_you_are_sure_type_in_your_password": "Si vous êtes sûr(e), entrez votre mot de passe :", "If_you_are_sure_type_in_your_username": "Si vous êtes certain(e), saisissez votre nom d'utilisateur :", "If_you_didnt_ask_for_reset_ignore_this_email": "Si vous n'avez pas demandé la réinitialisation de votre mot de passe, vous pouvez ignorer cet e-mail.", + "If_you_didnt_try_to_login_in_your_account_please_ignore_this_email": "Si vous n'avez pas essayé de vous connecter à votre compte, veuillez ignorer cet e-mail.", "If_you_dont_have_one_send_an_email_to_omni_rocketchat_to_get_yours": "Si vous n'en avez pas, envoyez un courriel à [omni@rocket.chat](mailto: omni@rocket.chat) pour obtenir le vôtre.", "Iframe_Integration": "Intégration Iframe", "Iframe_Integration_receive_enable": "Activer la réception", "Iframe_Integration_receive_enable_Description": "Autoriser la fenêtre parente à envoyer des commandes à Rocket.Chat.", "Iframe_Integration_receive_origin": "Recevoir les origines", - "Iframe_Integration_receive_origin_Description": "Seules les pages ayant une origine donnée seront autorisée à envoyer des commandes ou `*` pour toutes les origines. Vous pouvez utiliser de multiples valeurs séparées par des` ,`. Exemple : `http://localhost,https://localhost`", + "Iframe_Integration_receive_origin_Description": "Origines avec préfixe de protocole, séparées par des virgules, qui sont autorisées à recevoir des commandes, par ex. 'https://localhost, http://localhost', ou * pour permettre la réception de n'importe où.", "Iframe_Integration_send_enable": "Activer l'envoi", "Iframe_Integration_send_enable_Description": "Envoyer les événements à la fenêtre parente", - "Iframe_Integration_send_target_origin": "Envoyer la cible origine", - "Iframe_Integration_send_target_origin_Description": "Seules les pages ayant une origine donnée seront autorisée à recevoir des commandes ou `*` pour toutes les origines. Exemple : `http://localhost`", + "Iframe_Integration_send_target_origin": "Envoyer l'origine de la cible", + "Iframe_Integration_send_target_origin_Description": "Origines avec préfixe de protocole, à quelles commandes sont envoyées par ex. 'https://localhost, http://localhost', ou * pour autoriser l'envoi vers n'importe où.", "Iframe_Restrict_Access": "Restreindre l'accès à l'intérieur de n'importe quel Iframe", + "Iframe_Restrict_Access_Description": "Ce paramètre active / désactive les restrictions pour charger le RC dans n'importe quelle iframe", "Iframe_X_Frame_Options": "Options pour X-Frame-Options", "Iframe_X_Frame_Options_Description": "Options pour X-Frame-Options. [Vous pouvez voir toutes les options ici.](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options#Syntax)", "Ignore": "Ignorer", "Ignored": "Ignoré", "Images": "Images", "IMAP_intercepter_already_running": "L'intercepter IMAP est déjà en cours d'exécution", - "IMAP_intercepter_Not_running": "Intercepter IMAP Ne fonctionne pas", + "IMAP_intercepter_Not_running": "L'intercepteur IMAP ne fonctionne pas", "Impersonate_next_agent_from_queue": "Emprunter l'identité de l'agent suivant de la file d'attente", - "Impersonate_user": "Incarner l'utilisateur", - "Impersonate_user_description": "Lorsque cette option est activée, l'intégration est comptabilisée comme l'utilisateur ayant déclenché l'intégration", - "Import": "Importation", + "Impersonate_user": "Usurper l'identité de l'utilisateur", + "Impersonate_user_description": "Lorsqu'elle est activée, l'intégration est publiée en tant qu'utilisateur qui a déclenché l'intégration", + "Import": "Importer", "Import_New_File": "Importer un nouveau fichier", "Import_requested_successfully": "Importation demandée avec succès", "Import_Type": "Type d'importation", "Importer_Archived": "Archivé", - "Importer_CSV_Information": "L'importateur CSV nécessite un format spécifique, veuillez lire la documentation pour structurer votre fichier zip:", + "Importer_CSV_Information": "L'importateur CSV nécessite un format spécifique, veuillez lire la documentation pour structurer votre fichier zip :", "Importer_done": "Importation réussie !", + "Importer_ExternalUrl_Description": "Vous pouvez également utilsier une URL pour un fichier accessible au public : ", "Importer_finishing": "Finalisation de l'importation.", "Importer_From_Description": "Importer les données de __from__ dans Rocket.Chat.", - "Importer_HipChatEnterprise_BetaWarning": "Sachez que cet outil d'import est encore en cours de développement, merci de signaler toute erreur qui se produirait dans GitHub :", - "Importer_HipChatEnterprise_Information": "Le fichier téléchargé doit être un tar.gz déchiffré, veuillez lire la documentation pour plus d'informations:", + "Importer_HipChatEnterprise_BetaWarning": "Veuillez noter que cette importation est toujours en cours de développement, veuillez signaler toute erreur qui se produit dans GitHub :", + "Importer_HipChatEnterprise_Information": "Le fichier téléchargé doit être un tar.gz déchiffré, veuillez lire la documentation pour plus d'informations :", "Importer_import_cancelled": "Importation annulée.", "Importer_import_failed": "Une erreur est survenue lors de l'importation.", "Importer_importing_channels": "Importation des canaux.", @@ -1673,76 +2015,99 @@ "Importer_importing_users": "Importation des utilisateurs.", "Importer_not_in_progress": "L'import n'est pas en cours d'exécution.", "Importer_not_setup": "L'importateur n'est pas configuré correctement, car il n'a renvoyé aucune donnée.", - "Importer_Prepare_Restart_Import": "Recommencer l'Importation", + "Importer_Prepare_Restart_Import": "Recommencer l'importation", "Importer_Prepare_Start_Import": "Commencer l'Importation", "Importer_Prepare_Uncheck_Archived_Channels": "Désélectionner les canaux archivés", "Importer_Prepare_Uncheck_Deleted_Users": "Désélectionner les utilisateurs supprimés", "Importer_progress_error": "Impossible d'obtenir l'état de l'importation.", - "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_setup_error": "Une erreur s'est produite lors de la configuration de l'importateur.", + "Importer_Slack_Users_CSV_Information": "Le fichier téléversé 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_done": "Complété avec succès", + "importer_status_downloading_file": "Téléchargement du fichier", + "importer_status_file_loaded": "Fichier chargé", "importer_status_finishing": "Presque terminé", + "importer_status_import_cancelled": "Annulé", "importer_status_import_failed": "Erreur", + "importer_status_importing_channels": "Importer des canaux", "importer_status_importing_files": "Importer des fichiers", + "importer_status_importing_messages": "Importation des messages", + "importer_status_importing_started": "Importation des données", + "importer_status_importing_users": "Importer des utilisateurs", + "importer_status_new": "Pas commencé", + "importer_status_preparing_channels": "Lecture du fichier des canaux", "importer_status_preparing_messages": "Lire les fichiers des messages", "importer_status_preparing_started": "Lecture de fichiers", + "importer_status_preparing_users": "Lecture du fichier des utilisateurs", + "importer_status_uploading": "Envoi du fichier en cours", + "importer_status_user_selection": "Prêt à sélectionner les éléments à importer", "Importer_Upload_FileSize_Message": "Les paramètres de votre serveur permettent le téléchargement de fichiers de toute taille jusqu'à __maxFileSize__.", "Importer_Upload_Unlimited_FileSize": "Les paramètres de votre permettent le téléchargement de fichiers de toute taille.", + "Importing_channels": "Importer des canaux", + "Importing_Data": "Importation des données", + "Importing_messages": "Importation des messages", + "Importing_users": "Importer des utilisateurs", + "In_progress": "En cours", + "Inbox_Info": "Informations sur la boîte de réception", "Include_Offline_Agents": "Inclure les agents hors ligne", "Inclusive": "Compris", - "Incoming_Livechats": "Arrivée de nouveaux chats en direct", + "Incoming_Livechats": "Chats en file d'attente", "Incoming_WebHook": "WebHook entrant", "Industry": "Industrie", - "initials_avatar": "Initiales Avatar", + "Info": "Info", + "initials_avatar": "Avatar des initiales", "inline_code": "ligne de code", "Install": "Installer", "Install_Extension": "Installer l'extension", - "Install_FxOs": "Installez Rocket.Chat dans votre Firefox", - "Install_FxOs_done": "Formidable ! Vous pouvez maintenant utiliser Rocket.Chat via l'icône sur votre écran d'accueil. Amusez-vous avec Rocket.Chat !", + "Install_FxOs": "Installez Rocket.Chat sur votre Firefox", + "Install_FxOs_done": "Génial ! Vous pouvez désormais utiliser Rocket.Chat via l'icône sur votre écran d'accueil. Amusez-vous avec Rocket.Chat !", "Install_FxOs_error": "Désolé, cela n'a pas fonctionné comme prévu ! L'erreur suivante est apparue :", "Install_FxOs_follow_instructions": "Veuillez confirmer l'installation de l'application sur votre appareil (appuyez sur \"Installer\" lorsque c'est demandé).", "Install_package": "Installer le paquet", "Installation": "Installation", "Installed": "Installé", "Installed_at": "Installé à", + "Instance": "Instance", "Instances": "Instances", "Instances_health": "Santé des instances", - "Instance_Record": "Enregistrement d'instance", + "Instance_Record": "Instance Record", "Instructions": "Instructions", - "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Instructions à votre visiteur de remplir le formulaire pour envoyer un message", + "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Instructions à votre visiteur remplissez le formulaire pour envoyer un message", + "Insert_Contact_Name": "Insérez le nom du contact", "Insurance": "Assurance", "Integration_added": "L'intégration a été ajoutée", "Integration_Advanced_Settings": "Paramètres avancés", + "Integration_Delete_Warning": "La suppression d'une intégration ne peut pas être annulée.", "Integration_disabled": "Intégration désactivée", - "Integration_History_Cleared": "L'historique d'intégration a été autorisé", + "Integration_History_Cleared": "Historique d'intégration effacé avec succès", "Integration_Incoming_WebHook": "Intégration WebHook Entrant", "Integration_New": "Nouvelle intégration", "Integration_Outgoing_WebHook": "Intégration WebHook Sortant", - "Integration_Outgoing_WebHook_History": "Historique de l'intégration WebHook Sortant", - "Integration_Outgoing_WebHook_History_Data_Passed_To_Trigger": "Données passées pour intégration", - "Integration_Outgoing_WebHook_History_Data_Passed_To_URL": "Données passées pour URL", + "Integration_Outgoing_WebHook_History": "Historique d'intégration WebHook Sortant", + "Integration_Outgoing_WebHook_History_Data_Passed_To_Trigger": "Données transmises à l'intégration", + "Integration_Outgoing_WebHook_History_Data_Passed_To_URL": "Données transmises à l'URL", "Integration_Outgoing_WebHook_History_Error_Stacktrace": "Erreur Stacktrace", "Integration_Outgoing_WebHook_History_Http_Response": "Réponse HTTP", - "Integration_Outgoing_WebHook_History_Http_Response_Error": "Erreur Réponse HTTP", - "Integration_Outgoing_WebHook_History_Messages_Sent_From_Prepare_Script": "Messages envoyés à partir de l'étape Préparer", - "Integration_Outgoing_WebHook_History_Messages_Sent_From_Process_Script": "Messages envoyés à partir de l'étape de réponse au processus", - "Integration_Outgoing_WebHook_History_Time_Ended_Or_Error": "Temps écoulé ou Erreur", + "Integration_Outgoing_WebHook_History_Http_Response_Error": "Erreur de réponse HTTP", + "Integration_Outgoing_WebHook_History_Messages_Sent_From_Prepare_Script": "Messages envoyés depuis l'étape de préparation", + "Integration_Outgoing_WebHook_History_Messages_Sent_From_Process_Script": "Messages envoyés depuis l'étape de réponse du processus", + "Integration_Outgoing_WebHook_History_Time_Ended_Or_Error": "Heure de fin ou d'erreur", "Integration_Outgoing_WebHook_History_Time_Triggered": "Intégration temporelle déclenchée", "Integration_Outgoing_WebHook_History_Trigger_Step": "Dernière étape de déclenchement", - "Integration_Outgoing_WebHook_No_History": "L'intégration WebHook sortant n'a pas encore d'historique enregistré.", - "Integration_Retry_Count": "Réessayer compte", - "Integration_Retry_Count_Description": "Combien de fois l'intégration doit-elle être testée si l'appel à l'url échoue?", - "Integration_Retry_Delay": "Retry Retard", - "Integration_Retry_Delay_Description": "Quel algorithme de délai la nouvelle tentative devrait-elle utiliser? 10 ^ xou 2 ^ xou x * 2", + "Integration_Outgoing_WebHook_No_History": "Cette intégration de webhook sortant n'a pas encore enregistré d'historique.", + "Integration_Retry_Count": "Nombre de tentatives", + "Integration_Retry_Count_Description": "Combien de fois l'intégration doit-elle être tentée si l'appel à l'URL échoue ?", + "Integration_Retry_Delay": "Délai avant de réessayer", + "Integration_Retry_Delay_Description": "Quel algorithme de délai la nouvelle tentative doit-elle utiliser ? 10^x ou 2^x ou x*2", "Integration_Retry_Failed_Url_Calls": "Réessayer les appels d'URL ayant échoué", - "Integration_Retry_Failed_Url_Calls_Description": "L'intégration doit-elle essayer une durée raisonnable si l'appel à l'URL échoue?", + "Integration_Retry_Failed_Url_Calls_Description": "L'intégration doit-elle essayer pendant un laps de temps raisonnable si l'appel à l'URL échoue ?", "Integration_Run_When_Message_Is_Edited": "Exécuter sur les modifications", - "Integration_Run_When_Message_Is_Edited_Description": "L'intégration doit-elle être exécutée lorsque le message est modifié? Si cette option est définie sur false, l'intégration s'exécutera uniquement sur les nouveaux messages .", + "Integration_Run_When_Message_Is_Edited_Description": "L'intégration doit-elle être exécutée lorsque le message est modifié ? Si cette option est définie sur false, l'intégration s'exécutera uniquement sur les nouveaux messages.", "Integration_updated": "L'intégration a été mise à jour", - "Integration_Word_Trigger_Placement": "Word Placement Partout", - "Integration_Word_Trigger_Placement_Description": "La Parole devrait-elle être déclenchée lorsqu'elle est placée n'importe où dans la phrase autre que le début?", + "Integration_Word_Trigger_Placement": "Placement de mots partout", + "Integration_Word_Trigger_Placement_Description": "Le mot doit-il être déclenché lorsqu'il est placé n'importe où dans la phrase autre que le début ?", "Integrations": "Intégrations", - "Integrations_for_all_channels": "Entrez all_public_channels pour écouter sur tous les canaux publics, all_private_groups pour écouter sur tous les groupes privés, et all_direct_messages pour écouter sur tous les messages privés.", + "Integrations_for_all_channels": "Saisissez all_public_channels pour écouter tous les canaux publics, all_private_groups pour écouter tous les groupes privés, et all_direct_messages pour écouter tous les messages privés.", "Integrations_Outgoing_Type_FileUploaded": "Fichier envoyé", "Integrations_Outgoing_Type_RoomArchived": "Salon archivé", "Integrations_Outgoing_Type_RoomCreated": "Salon créé (public et privé)", @@ -1751,17 +2116,17 @@ "Integrations_Outgoing_Type_SendMessage": "Message envoyé", "Integrations_Outgoing_Type_UserCreated": "Utilisateur créé", "InternalHubot": "Hubot interne", - "InternalHubot_EnableForChannels": "Activer pour les chaînes publiques", - "InternalHubot_EnableForDirectMessages": "Activer pour les messages directs", - "InternalHubot_EnableForPrivateGroups": "Activer des chaînes privées", + "InternalHubot_EnableForChannels": "Activer pour les canaux publics", + "InternalHubot_EnableForDirectMessages": "Activer pour les messages privés", + "InternalHubot_EnableForPrivateGroups": "Activer pour les groupes privés", "InternalHubot_PathToLoadCustomScripts": "Dossier pour charger les scripts", "InternalHubot_reload": "Recharger les scripts", "InternalHubot_ScriptsToLoad": "Scripts à charger", - "InternalHubot_ScriptsToLoad_Description": "Veuillez entrer une liste de scripts séparés par des virgules à charger depuis https://github.com/github/hubot-scripts/tree/master/src/scripts", + "InternalHubot_ScriptsToLoad_Description": "Veuillez saisir une liste de scripts séparés par des virgules à charger à partir de votre dossier personnalisé", "InternalHubot_Username_Description": "Cela doit être un nom d'utilisateur valide d'un bot enregistré sur votre serveur.", "Invalid Canned Response": "Modèle de réponse invalide", - "Invalid_confirm_pass": "Les mots de passe renseignés ne sont pas les mêmes", - "Invalid_Department": "Servcie invalide", + "Invalid_confirm_pass": "La confirmation de mot du passe ne correspond pas au mot de passe", + "Invalid_Department": "Département non valide", "Invalid_email": "L'adresse e-mail saisie 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.", @@ -1769,17 +2134,17 @@ "Invalid_notification_setting_s": "Paramètre de notification invalide : %s", "Invalid_or_expired_invite_token": "Jeton d'invitation invalide ou expiré", "Invalid_pass": "Le mot de passe doit être renseigné", - "Invalid_reason": "La raison de rejoindre ne doit pas être vide", + "Invalid_reason": "La raison de l'adhésion ne doit pas être vide", "Invalid_room_name": "%s n'est pas un nom de salon valide.", "Invalid_secret_URL_message": "L'URL fournie est invalide.", "Invalid_setting_s": "Paramètre invalide : %s", "Invalid_two_factor_code": "Code à deux facteurs non valide", - "Invalid_username": "Le nom d'utilisateur entré est invalide", + "Invalid_username": "Le nom d'utilisateur saisi n'est pas valide", "invisible": "invisible", "Invisible": "Invisible", "Invitation": "Invitation", - "Invitation_Email_Description": "Vous pouvez utiliser les variables suivantes :[email] pour l'adresse e-mail du destinataire,[Site_Name] et [Site_URL] pour le nom de l'application et son URL respectivement.", - "Invitation_HTML": "Contenu HTML de l'invitation", + "Invitation_Email_Description": "Vous pouvez utiliser les espaces réservés suivants :[email] pour l'adresse e-mail du destinataire,[Site_Name] et [Site_URL] pour le nom de l'application et l'URL respectivement.", + "Invitation_HTML": "HTML d'invitation", "Invitation_HTML_Default": "Vous avez été invité à rejoindre [Site_Name]Accédez à [Site_URL] et essayez la meilleure solution de chat open source disponible aujourd'hui !", "Invitation_Subject": "Sujet de l'invitation", "Invitation_Subject_Default": "Vous avez été invité à [Site_Name]", @@ -1792,16 +2157,16 @@ "IRC_Channel_Leave": "Sortie de la commande PART.", "IRC_Channel_Users": "Sortie de la commande NAMES.", "IRC_Channel_Users_End": "Fin de sortie de la commande NAMES.", - "IRC_Description": "Internet Relay Chat (IRC) est un outil de communication de groupe basé sur du texte. Les utilisateurs rejoignent des canaux ou des salles nommés de manière unique pour une discussion ouverte. IRC prend également en charge les messages privés entre les utilisateurs individuels et les capacités de partage de fichiers. Ce paquet intègre ces couches de fonctionnalités avec Rocket.Chat.", - "IRC_Enabled": "Essayez d'intégrer le support IRC. Changer cette valeur nécessite de redémarrer Rocket.Chat.", - "IRC_Enabled_Alert": "Le support IRC est un travail en cours. L'utilisation sur un système de production n'est pas recommandée pour le moment.", + "IRC_Description": "Internet Relay Chat (IRC) est un outil de communication de groupe basé sur du texte. Les utilisateurs rejoignent des canaux ou des salons, dont le nom est unique, pour une discussion ouverte. IRC prend également en charge les messages privés entre les utilisateurs individuels et les capacités de partage de fichiers. Ce paquet intègre ces couches de fonctionnalités avec Rocket.Chat.", + "IRC_Enabled": "Tentative d'intégration du support IRC. La modification de cette valeur nécessite le redémarrage de Rocket.Chat.", + "IRC_Enabled_Alert": "Le support IRC est encore en développement. L'utilisation sur un système de production n'est pas recommandée pour le moment.", "IRC_Federation": "Fédération IRC", "IRC_Federation_Disabled": "La fédération IRC est désactivée.", - "IRC_Hostname": "Le serveur d'hôte IRC auquel se connecter.", + "IRC_Hostname": "Le serveur hôte IRC auquel se connecter.", "IRC_Login_Fail": "Sortie après une connexion échouée au serveur IRC.", "IRC_Login_Success": "Sortie après une connexion réussie au serveur IRC.", - "IRC_Message_Cache_Size": "La limite de cache pour le traitement des messages sortants.", - "IRC_Port": "Le port à lier sur le serveur hôte IRC.", + "IRC_Message_Cache_Size": "La limite de cache pour la gestion des messages sortants.", + "IRC_Port": "Le port auquel se connecter sur le serveur hôte IRC.", "IRC_Private_Message": "Sortie de la commande PRIVMSG.", "IRC_Quit": "Sortie après avoir quitté une session IRC.", "is_also_typing": "est également en train d'écrire", @@ -1810,27 +2175,31 @@ "is_typing": "est en train d'écrire", "is_typing_female": "est en train d'écrire", "is_typing_male": "est en train d'écrire", - "Issue_Links": "Émettre des liens de suivi", - "IssueLinks_Incompatible": "Attention: ne l'activez pas en même temps que l'aperçu des couleurs hexadécimales.", + "Issue_Links": "Liens de suivi des problèmes", + "IssueLinks_Incompatible": "Attention : n'activez pas ceci et le 'Hex Color Preview' en même temps.", "IssueLinks_LinkTemplate": "Modèle pour les liens de problème", - "IssueLinks_LinkTemplate_Description": "Modèle pour les liens de problèmes; %s sera remplacé par le numéro d'émission.", + "IssueLinks_LinkTemplate_Description": "Modèle pour les liens de problèmes; %s sera remplacé par le numéro de problème.", "It_works": "Ça marche", - "italic": "italique", + "It_Security": "Sécurité informatique", + "italic": "Italique", "italics": "italique", "Items_per_page:": "Objets par page :", + "Jitsi_Application_ID": "ID de l'application (iss)", + "Jitsi_Application_Secret": "Secret d'application", "Jitsi_Chrome_Extension": "Chrome Extension Id", "Jitsi_Enable_Channels": "Activer dans les canaux", "Jitsi_Enabled_TokenAuth": "Activer l'authentification JWT", - "Job_Title": "Titre du poste", + "Jitsi_Limit_Token_To_Room": "Limiter le jeton à la salle Jitsi", + "Job_Title": "Titre d'emploi", "join": "Rejoindre", "Join_audio_call": "Rejoindre l'appel audio", - "Join_Chat": "Rejoignez le chat", + "Join_Chat": "Rejoindre le chat", "Join_default_channels": "Rejoindre les canaux par défaut", "Join_the_Community": "Rejoignez la communauté", "Join_the_given_channel": "Rejoindre le canal choisi", "Join_video_call": "Rejoindre l'appel vidéo", - "join-without-join-code": "Rejoindre sans code de participation", - "join-without-join-code_description": "Autorisation d'ignorer le code de jointure dans les canaux avec le code de joint activé", + "join-without-join-code": "Rejoindre sans code d'adhésion", + "join-without-join-code_description": "Autorisation de contourner le code de participation dans les canaux avec le code de participation activé", "Joined": "A rejoint", "Joined_at": "Rejoint le", "Jump": "Sauter", @@ -1838,11 +2207,11 @@ "Jump_to_message": "Aller au message", "Jump_to_recent_messages": "Aller aux messages récents", "Just_invited_people_can_access_this_channel": "Seules les personnes invitées peuvent accéder à cette chaîne.", - "Katex_Dollar_Syntax": "Autoriser Dollar Syntaxe", + "Katex_Dollar_Syntax": "Autoriser la syntaxe dollar", "Katex_Dollar_Syntax_Description": "Autoriser les syntaxes : $$bloc katex$$ et $katex inline$", "Katex_Enabled": "Katex activé", - "Katex_Enabled_Description": "Autoriser l' utilisation Katex pour les mathématiques photocomposition dans les messages", - "Katex_Parenthesis_Syntax": "Autoriser Parenthesis Syntaxe", + "Katex_Enabled_Description": "Autoriser l'utilisation de Katex pour la composition mathématiques dans les messages", + "Katex_Parenthesis_Syntax": "Autoriser la syntaxe des paranthèses", "Katex_Parenthesis_Syntax_Description": "Autoriser les syntaxes : \\[bloc katex\\] et \\(inline katex\\)", "Keep_default_user_settings": "Conserver les paramètres par défaut", "Keyboard_Shortcuts_Edit_Previous_Message": "Modifier le message précédent", @@ -1851,14 +2220,14 @@ "Keyboard_Shortcuts_Keys_3": "Commande (ou Alt) + Flèche gauche", "Keyboard_Shortcuts_Keys_4": "Commande (ou Alt) + Flèche vers le haut", "Keyboard_Shortcuts_Keys_5": "Commande (ou Alt) + Flèche droite", - "Keyboard_Shortcuts_Keys_6": "Commande(ou Alt) + Flèche vers le bas", - "Keyboard_Shortcuts_Keys_7": "Modifier+ Saisir", - "Keyboard_Shortcuts_Keys_8": "Maj (ou Ctrl) + ECHAP ", + "Keyboard_Shortcuts_Keys_6": "Command (ou Alt) + Flèche vers le bas", + "Keyboard_Shortcuts_Keys_7": "Maj + Entrée", + "Keyboard_Shortcuts_Keys_8": "Maj (ou Ctrl) + ECHAP", "Keyboard_Shortcuts_Mark_all_as_read": "Marquer tous les messages (dans tous les canaux) comme lus", "Keyboard_Shortcuts_Move_To_Beginning_Of_Message": "Aller au début du message", "Keyboard_Shortcuts_Move_To_End_Of_Message": "Aller à la fin du message", - "Keyboard_Shortcuts_New_Line_In_Message": "Nouvelle ligne dans l'entrée de composition de message", - "Keyboard_Shortcuts_Open_Channel_Slash_User_Search": "Ouvrir le canal / Recherche d'utilisateur", + "Keyboard_Shortcuts_New_Line_In_Message": "Nouvelle ligne dans l'entrée de composition du message", + "Keyboard_Shortcuts_Open_Channel_Slash_User_Search": "Ouvrir la recherche de canal / utilisateur", "Keyboard_Shortcuts_Title": "Raccourcis clavier", "Knowledge_Base": "Base de connaissances", "Label": "Label", @@ -1868,12 +2237,17 @@ "Language_French": "Français", "Language_German": "Allemand", "Language_Italian": "Italien", - "Language_Not_set": "Pas spécifique", + "Language_Not_set": "Pas de spécifique", "Language_Polish": "Polonais", "Language_Portuguese": "Portugais", "Language_Russian": "Russe", "Language_Spanish": "Espagnol", "Language_Version": "Version Anglaise", + "Last_7_days": "Les 7 derniers jours", + "Last_30_days": "Les 30 derniers jours", + "Last_90_days": "Les 90 derniers jours", + "Last_active": "Dernier actif", + "Last_Chat": "Dernier chat", "Last_login": "Dernière connexion", "Last_Message": "Dernier message", "Last_Message_At": "Dernier message à", @@ -1888,278 +2262,350 @@ "Layout_Legal_Notice": "Mention légale", "Layout_Login_Terms": "Conditions de connexion", "Layout_Privacy_Policy": "Politique de confidentialité", - "Layout_Sidenav_Footer": "Pied de page de la sidebar", - "Layout_Sidenav_Footer_description": "La taille du pied de page est de 260 × 70 pixels", + "Layout_Show_Home_Button": "Afficher \"le bouton d'accueil\"", + "Layout_Sidenav_Footer": "Pied de page de navigation latérale", + "Layout_Sidenav_Footer_description": "La taille du pied de page est de 260 × 70 px", "Layout_Terms_of_Service": "Conditions de service", "LDAP": "LDAP", - "LDAP_Advanced_Sync": "Synchro. avancée", - "LDAP_Authentication": "Permettre", + "LDAP_Advanced_Sync": "Synchronisation avancée", + "LDAP_Authentication": "Activer", "LDAP_Authentication_Password": "Mot de passe", "LDAP_Authentication_UserDN": "DN utilisateur", - "LDAP_Authentication_UserDN_Description": "L'utilisateur LDAP qui réalise les recherches d'utilisateur pour authentifier les autres utilisateurs quand ils se connectent.Il s'agit typiquement d'un compte de service créé spécialement pour l'intégration de tierces parties. Utilisez un nom complet, tel que `cn=Administrator,cn=Users,dc=Example,dc=com`.", - "LDAP_Background_Sync": "Synchronisation de fond", + "LDAP_Authentication_UserDN_Description": "L'utilisateur LDAP qui effectue des recherches d'utilisateurs pour authentifier les autres utilisateurs lorsqu'ils se connectent. Il s'agit généralement d'un compte de service créé spécifiquement pour les intégrations tierces. Utilisez un nom complet, tel que `cn=Administrator,cn=Users,dc=Example,dc=com`.", + "LDAP_Avatar_Field": "Champ avatar de l'utilisateur", + "LDAP_Avatar_Field_Description": "Quel champ sera utilisé comme *avatar* pour les utilisateurs. Laissez vide pour d'abord utiliser `thumbnailPhoto` et `jpegPhoto` comme solution de secours.", + "LDAP_Background_Sync": "Synchronisation en arrière-plan", "LDAP_Background_Sync_Import_New_Users": "Synchronisation en arrière-plan Importation de nouveaux utilisateurs", - "LDAP_Background_Sync_Import_New_Users_Description": "Importe tous les utilisateurs (en fonction de vos critères de filtre) qui existe dans LDAP et qui n'existe pas dans Rocket.Chat", - "LDAP_Background_Sync_Interval": "Intervalle de synchronisation d'arrière-plan", + "LDAP_Background_Sync_Import_New_Users_Description": "Importera tous les utilisateurs (en fonction de vos critères de filtrage) qui existent dans LDAP et qui n'existent pas dans Rocket.Chat", + "LDAP_Background_Sync_Interval": "Intervalle de synchronisation en arrière-plan", "LDAP_Background_Sync_Interval_Description": "L'intervalle entre les synchronisations. Exemple `toutes les 24 heures` ou`le premier jour de la semaine`, plus d'exemples dans [Cron Text Parser](http://bunkat.github.io/later/parsers.html#text)", - "LDAP_Background_Sync_Keep_Existant_Users_Updated": "Mise à jour de la synchronisation en arrière-plan Utilisateurs existants", - "LDAP_Background_Sync_Keep_Existant_Users_Updated_Description": "Synchronise l'avatar, les champs, le nom d'utilisateur, etc. (en fonction de votre configuration) de tous les utilisateurs déjà importés depuis LDAP tous les ** Intervalle de synchronisation **", + "LDAP_Background_Sync_Keep_Existant_Users_Updated": "Mise à jour de la synchronisation en arrière-plan des utilisateurs existants", + "LDAP_Background_Sync_Keep_Existant_Users_Updated_Description": "Synchronisera l'avatar, les champs, le nom d'utilisateur, etc. (en fonction de votre configuration) de tous les utilisateurs déjà importés de LDAP à chaque **intervalle de synchronisation**", "LDAP_BaseDN": "DN de base", - "LDAP_BaseDN_Description": "Le chemin complet du Distinguished Name (DN) d'un sous arbre LDAP dans lequel vous souhaitez chercher les utilisateurs et les groupes. Vous pouvez en ajouter autant que vous voulez ; cependant, chaque groupe doit être défini dans le même domaine de base que les utilisateurs qui le composent. Si vous spécifiez des restrictions sur des groupes d'utilisateurs, seuls les utilisateurs appartenant à ces groupes seront dans le périmètre de la recherche. Nous recommandons de spécifier le top level de votre arbre LDAP en tant que domaine de base et d'utiliser le filtre de recherche pour contrôler l'accès.", + "LDAP_BaseDN_Description": "Nom distinctif (DN) complet d'un sous-arbre LDAP pour lequel vous souhaitez rechercher des utilisateurs et des groupes. Vous pouvez en ajouter autant que vous le souhaitez; cependant, chaque groupe doit être défini dans la même base du domaine que les utilisateurs qui en font partie. Exemple : `ou=Users+ou=Projects,dc=Example,dc=com`. Si vous spécifiez des groupes utilisateurs restreints, seuls les utilisateurs appartenant à ces groupes seront concernés. Nous vous recommandons de spécifier le niveau supérieur de votre arborescence de répertoires LDAP comme base de domaine et d'utiliser un filtre de recherche pour contrôler l'accès.", "LDAP_CA_Cert": "Certificat CA (Autorité de certification)", "LDAP_Connect_Timeout": "Délai de connexion (ms)", "LDAP_Default_Domain": "Domaine par défaut", - "LDAP_Default_Domain_Description": "Si cela est prévu, le domaine par défaut sera utilisé pour créer un e-mail unique pour les utilisateurs dont l'e-mail n'a pas été importé depuis LDAP. L'email sera monté en tant que \"nom d'utilisateur @ default_domain\" ou \"unique_id @ default_domain\".Exemple: `rocket.chat`", + "LDAP_Default_Domain_Description": "S'il est fourni, le domaine par défaut sera utilisé pour créer un e-mail unique pour les utilisateurs dont l'e-mail n'a pas été importé depuis LDAP. L'e-mail sera monté en tant que `username@default_domain` ou `unique_id@default_domain`.Exemple : `rocket.chat`", "LDAP_Default_Role_To_User": "Rôle par défaut de l'utilisateur", - "LDAP_Default_Role_To_User_Description": "Rôle RC à donner à l'utilisateur si l'uitlisateur à des rôles LDAP qui ne sont pas mappés.", - "LDAP_Description": "Un LDAP est une base de données hiérarchique que de nombreuses entreprises utilisent pour fournir une authentification unique à travers leurs services - l'utilisateur partage un mot de passe entre plusieurs sites et services. Pour avoir plus d'informations sur la configuration avancée et voir des exemples, consulter notre wiki : https://rocket.chat/docs/administrator-guides/authentication/ldap/ .", + "LDAP_Default_Role_To_User_Description": "Le rôle RC par défaut à appliquer à l'utilisateur, si l'utilisateur a un rôle LDAP qui n'est pas mappé.", + "LDAP_Description": "LDAP est une base de données hiérarchique que de nombreuses entreprises utilisent pour fournir une connexion unique - une fonction permettant de partager un mot de passe entre plusieurs sites et services. Pour obtenir plus d'informations et des exemples de configuration avancée, veuillez consulter notre wiki : https://rocket.chat/docs/administrator-guides/authentication/ldap/.", "LDAP_Enable": "Activer", "LDAP_Enable_Description": "Essayer d'utiliser LDAP pour l'authentification.", - "LDAP_Enable_LDAP_Roles_To_RC_Roles": "Autoriser le mapping de LDAP vers Rocket.Chat", + "LDAP_Enable_LDAP_Roles_To_RC_Roles": "Activer le mappage de rôle de LDAP vers Rocket.Chat", "LDAP_Encryption": "Chiffrement", "LDAP_Encryption_Description": "La méthode de chiffrement utilisée pour sécuriser les communications avec le serveur LDAP. Parmi les exemples on trouve `plain` (pas de chiffrement), `SSL/LDAPS` (chiffrement dès le début) et `StartTLS` (chiffrement une fois la connexion établie).", - "LDAP_Find_User_After_Login": "Rechercher un utilisateur après la connexion", - "LDAP_Find_User_After_Login_Description": "Effectuer une recherche du nom distinctif de l'utilisateur après la liaison pour s'assurer que la liaison a réussi, empêchant la connexion avec des mots de passe vides lorsqu'elle est autorisée par la configuration AD.", - "LDAP_Group_Filter_Enable": "Activer le filtre des utilisateurs sur un groupe LDAP", - "LDAP_Group_Filter_Enable_Description": "Restreint l'accès aux utilisateurs d'un groupe LDAP Utile pour les serveurs OpenLDAP sans recouvrement qui ne permettent pas le filtre *memberOf* ", + "LDAP_Find_User_After_Login": "Trouver un utilisateur après la connexion", + "LDAP_Find_User_After_Login_Description": "Effectuer une recherche dans le DN de l'utilisateur après la liaison pour s'assurer que la liaison a réussi, empêchant la connexion avec des mots de passe vides lorsque la configuration AD l'autorise.", + "LDAP_Group_Filter_Enable": "Activer le filtre de groupe d'utilisateurs LDAP", + "LDAP_Group_Filter_Enable_Description": "Restreindre l'accès aux utilisateurs d'un groupe LDAP Utile pour autoriser les serveurs OpenLDAP sans filtre *memberOf* à restreindre l'accès par groupes", "LDAP_Group_Filter_Group_Id_Attribute": "Attribut d'ID de groupe", - "LDAP_Group_Filter_Group_Id_Attribute_Description": "Par exemple. * OpenLDAP: * cn", - "LDAP_Group_Filter_Group_Member_Attribute": "Attribut de membre du groupe", - "LDAP_Group_Filter_Group_Member_Attribute_Description": "Par exemple. * OpenLDAP: * uniqueMembre", - "LDAP_Group_Filter_Group_Member_Format": "Format du membre du groupe", - "LDAP_Group_Filter_Group_Member_Format_Description": "Par exemple. * OpenLDAP: * uid = # {nom d'utilisateur}, ou = utilisateurs, o = Société, c = com", + "LDAP_Group_Filter_Group_Id_Attribute_Description": "Ex. *OpenLDAP:*cn", + "LDAP_Group_Filter_Group_Member_Attribute": "Attribut de membre de groupe", + "LDAP_Group_Filter_Group_Member_Attribute_Description": "Ex. *OpenLDAP:*uniqueMember", + "LDAP_Group_Filter_Group_Member_Format": "Format des membres du groupe", + "LDAP_Group_Filter_Group_Member_Format_Description": "Ex. *OpenLDAP:*uid=#{username},ou=users,o=Company,c=com", "LDAP_Group_Filter_Group_Name": "Nom du groupe", - "LDAP_Group_Filter_Group_Name_Description": "Groupe auquel appartient l'utilisateur", + "LDAP_Group_Filter_Group_Name_Description": "Nom du groupe auquel appartient l'utilisateur", "LDAP_Group_Filter_ObjectClass": "Groupe ObjectClass", - "LDAP_Group_Filter_ObjectClass_Description": "Le * objectclass * qui identifie les groupes. E.g. OpenLDAP: groupOfUniqueNames", + "LDAP_Group_Filter_ObjectClass_Description": "Le *objectclass* qui identifie les groupes. Ex. OpenLDAP:groupOfUniqueNames", "LDAP_Host": "Hôte", "LDAP_Host_Description": "L'hôte LDAP, par exemple `ldap.exemple.com` ou `10.0.0.30`.", "LDAP_Idle_Timeout": "Délai d'inactivité (ms)", - "LDAP_Idle_Timeout_Description": "Combien de millisecondes attendent après la dernière opération LDAP jusqu'à la fermeture de la connexion. (Chaque opération va ouvrir une nouvelle connexion)", + "LDAP_Idle_Timeout_Description": "Attendre combien de millisecondes après la dernière opération LDAP jusqu'à la fermeture de la connexion. (Chaque opération ouvrira une nouvelle connexion)", "LDAP_Import_Users_Description": "Si OUI les processus de synchronisation importeront l'ensemble des utilisateurs LDAP *Attention !* Spécifiez les filtres de recherche pour ne pas importer trop d'utilisateurs.", "LDAP_Internal_Log_Level": "Niveau de journal interne", "LDAP_Login_Fallback": "Login Fallback", "LDAP_Login_Fallback_Description": "Si l'authentification LDAP échoue, essaye de se connecter avec un compte local. Aide quand le LDAP est inaccessible.", "LDAP_Merge_Existing_Users": "Fusionner les utilisateurs existants", - "LDAP_Merge_Existing_Users_Description": "*Attention !* Si vous importez un utilisateur depuis le LDAP et qu'un utilisateur avec le même nom existe déjà, les informations et le mot de passe du LDAP lui seront attribués.", + "LDAP_Merge_Existing_Users_Description": "*Attention !* Lors de l'importation d'un utilisateur à partir de LDAP et qu'un utilisateur avec le même nom d'utilisateur existe déjà, les informations LDAP et le mot de passe seront définis dans l'utilisateur existant.", "LDAP_Port": "Port", - "LDAP_Port_Description": "Port pour accéder au LDAP (ex : 389 ou 636 pour LDAPS)", + "LDAP_Port_Description": "Port pour accéder à LDAP. Ex. : `389` ou `636` pour LDAPS", "LDAP_Query_To_Get_User_Groups": "Requête LDAP pour récupérer les groupes d'utilisateurs", - "LDAP_Query_To_Get_User_Groups_Description": "Requête LDAP pour récupérer les groupes LDAP dont l'utilisateur fait parti.", - "LDAP_Reconnect": "rebranchez", - "LDAP_Reconnect_Description": "Essayez de vous reconnecter automatiquement lorsque la connexion est interrompue pour une raison quelconque lors de l'exécution des opérations", + "LDAP_Query_To_Get_User_Groups_Description": "Requête LDAP pour obtenir les groupes LDAP dont l'utilisateur fait parti.", + "LDAP_Reconnect": "Reconnecter", + "LDAP_Reconnect_Description": "Essayez de vous reconnecter automatiquement lorsque la connexion est interrompue pour une raison quelconque lors de l'exécution d'opérations", "LDAP_Reject_Unauthorized": "Rejeter les personnes non autorisées", "LDAP_Reject_Unauthorized_Description": "Désactivez cette option pour autoriser les certificats qui ne peuvent pas être vérifiés. Habituellement, les certificats auto-signés nécessitent que cette option soit désactivée pour fonctionner", - "LDAP_Roles_To_Rocket_Chat_Roles": "Mapping des rôles LDAP dans Rocket.Chat", - "LDAP_Roles_To_Rocket_Chat_Roles_Description": "Mapping des rôles au format objet : la clef de l'objet doit être le rôle LDAP et la valeur de l'objet doit être un tableau de rôles RC. Exemple : { 'ldapRole': ['rcRole', 'anotherRCRole'] }", + "LDAP_Roles_To_Rocket_Chat_Roles": "Mappage des rôles LDAP dans Rocket.Chat.", + "LDAP_Roles_To_Rocket_Chat_Roles_Description": "Mapping de rôle au format objet où la clé de l'objet doit être le rôle LDAP et la valeur d'objet doit être un tableau de rôles RC. Exemple : { 'ldapRole': ['rcRole', 'anotherRCRole'] }", "LDAP_Search_Page_Size": "Taille de la page de recherche", - "LDAP_Search_Page_Size_Description": "Le nombre maximum d'entrées que chaque page de résultat retournera sera traité", + "LDAP_Search_Page_Size_Description": "Le nombre maximum d'entrées que chaque page de résultat retournera pour être traitée", "LDAP_Search_Size_Limit": "Limite de taille de la recherche", - "LDAP_Search_Size_Limit_Description": "Nombre maximal d'entrées à renvoyer.** Attention ** Ce nombre doit être supérieur à ** Taille de la page de recherche **", - "LDAP_Sync_Now": "Synchronisation en arrière-plan", - "LDAP_Sync_Now_Description": "Exécutera la ** Synchronisation d'arrière-plan ** maintenant plutôt que d'attendre l'intervalle de synchronisation ** même si ** Synchronisation d'arrière-plan ** est Faux.Cette action est asynchrone, consultez les journaux pour plus d'informations sur processus", + "LDAP_Search_Size_Limit_Description": "Nombre maximal d'entrées à renvoyer.**Attention** Ce nombre doit être supérieur à **Taille de la page de recherche**", + "LDAP_Sync_Now": "Synchronisation en arrière-plan maintenant", + "LDAP_Sync_Now_Description": "Exécutera la **Synchronisation en arrière-plan** maintenant plutôt que d'attendre **l'intervalle de synchronisation** même si **Synchronisation en arrière-plan** est False.Cette action est asynchrone, consultez les journaux pour plus d'informations sur le processus", "LDAP_Sync_User_Active_State": "Synchroniser l'état actif de l'utilisateur", "LDAP_Sync_User_Active_State_Both": "Activer et désactiver les utilisateurs", - "LDAP_Sync_User_Active_State_Description": "Détermine si les utilisateurs devraient être activés / désactivés dans Rocket.Chat en fonction de leur statut LDAP. L'attribut 'pwdAccountLockedTime' sera utilisé pour déterminer si l'utilisateur est désactivé.", + "LDAP_Sync_User_Active_State_Description": "Déterminez si les utilisateurs doivent être activés ou désactivés dans Rocket.Chat en fonction de leur statut LDAP. L'attribut 'pwdAccountLockedTime' sera utilisé pour déterminer si l'utilisateur est désactivé.", "LDAP_Sync_User_Active_State_Disable": "Désactiver les utilisateurs", "LDAP_Sync_User_Active_State_Nothing": "Ne rien faire", "LDAP_Sync_User_Avatar": "Synchronisation de l'avatar utilisateur", "LDAP_Sync_User_Data": "Synchroniser les données utilisateur", - "LDAP_Sync_User_Data_Description": "Garder les données de l'utilisateur synchronisées avec celles du serveur lors de la connexion (par exemple : nom, adresse e-mail).", - "LDAP_Sync_User_Data_FieldMap": "Liste des champs utilisateur", + "LDAP_Sync_User_Data_Description": "Synchronisez les données utilisateur avec le serveur lors de la **connexion** ou de la **synchronisation en arrière-plan** (par exemple : nom, e-mail).", + "LDAP_Sync_User_Data_FieldMap": "Carte des champs de données utilisateur", "LDAP_Sync_User_Data_FieldMap_Description": "Configurer la façon dont les champs de compte utilisateur (comme l'adresse e-mail) sont remplis à partir d'un enregistrement dans l'annuaire LDAP (une fois trouvé). À titre d'exemple, `{\"cn\": \"name\", \"mail\": \"email\"}` choisira le nom lisible d'une personne à partir de l'attribut cn, et son adresse e-mail à partir de l'attribut mail. Les champs disponibles dans Rocket.chat comprennent: `name`, `email` et `customFields`.", + "LDAP_Sync_User_Data_Groups": "Synchroniser les groupes LDAP", + "LDAP_Sync_User_Data_Groups_AutoChannels": "Synchronisation automatique des groupes LDAP avec les canaux", + "LDAP_Sync_User_Data_Groups_AutoChannels_Admin": "Administrateur du canal", + "LDAP_Sync_User_Data_Groups_AutoChannels_Admin_Description": "Lorsque des canaux sont créés automatiquement qui n'existent pas pendant une synchronisation, cet utilisateur deviendra automatiquement l'administrateur du canal.", + "LDAP_Sync_User_Data_Groups_AutoChannels_Description": "Activez cette fonction pour ajouter automatiquement des utilisateurs à un canal en fonction de leur groupe LDAP. Si vous souhaitez également supprimer des utilisateurs d'un canal, consultez l'option ci-dessous concernant la suppression automatique d'utilisateurs.", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap": "Carte des canaux du groupe LDAP", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Default": "// Activer la synchronisation automatique des groupes LDAP aux canaux ci-dessus", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Description": "Mappez les groupes LDAP aux canaux Rocket.Chat. Par exemple, `{\"employee\":\"general\"}` ajoutera n'importe quel utilisateur du groupe LDAP employee au canal général.", + "LDAP_Sync_User_Data_Groups_AutoRemove": "Supprimer automatiquement les rôles utilisateur", + "LDAP_Sync_User_Data_Groups_AutoRemove_Description": "**Attention**: l'activation de cette option supprimera automatiquement les utilisateurs d'un rôle s'ils ne sont pas affectés dans LDAP ! Cela supprimera uniquement les rôles définis automatiquement sous la carte des groupes de données utilisateur ci-dessous.", + "LDAP_Sync_User_Data_Groups_BaseDN": "Nom de base (BaseDN) du groupe LDAP", + "LDAP_Sync_User_Data_Groups_BaseDN_Description": "Le LDAP BaseDN utilisé pour rechercher les utilisateurs.", + "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels": "Supprimer automatiquement les utilisateurs des canaux", "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels_Description": "**Attention** : En activant cette option, vous supprimerez tous les utilisateurs d'un canal qui n'ont pas le groupe LDAP correspondant ! Activez ceci que si vous savez ce que vous faites.", + "LDAP_Sync_User_Data_Groups_Filter": "Filtre de groupe d'utilisateurs", + "LDAP_Sync_User_Data_Groups_Filter_Description": "Le filtre de recherche LDAP utilisé pour vérifier si un utilisateur fait partie d'un groupe.", "LDAP_Sync_User_Data_GroupsMap": "Carte des groupes de données utilisateur", + "LDAP_Sync_User_Data_GroupsMap_Description": "Mappez les groupes LDAP aux rôles des utilisateurs Rocket.Chat Par exemple, `{\"rocket-admin\":\"admin\", \"tech-support\":\"support\"}` mappera le groupe LDAP rocket-admin au rôle \"admin\" de Rocket.", "LDAP_Test_Connection": "Tester la connexion", "LDAP_Timeout": "Délai d'attente (ms)", - "LDAP_Timeout_Description": "Combien de miles attendez un résultat de recherche avant de renvoyer une erreur", - "LDAP_Unique_Identifier_Field": "Champ de l'identifiant unique", - "LDAP_Unique_Identifier_Field_Description": "Le champ utilisé pour lier l'utilisateur LDAP à l'utilisateur Rocket.Chat. Vous pouvez renseigner plusieurs valeurs séparées par des virgules pour obtenir la valeur depuis l'enregistrement LDAP.La valeur par défaut est `objectGUID,ibm-entryUUID,GUID,dominoUNID,nsuniqueId,uidNumber`", + "LDAP_Timeout_Description": "Combien de millisecondens faut-il attendre pour obtenir un résultat de recherche avant de renvoyer une erreur", + "LDAP_Unique_Identifier_Field": "Champ d'identifiant unique", + "LDAP_Unique_Identifier_Field_Description": "Quel champ sera utilisé pour lier l'utilisateur LDAP et l'utilisateur Rocket.Chat. Vous pouvez renseigner plusieurs valeurs séparées par des virgules pour essayer d'obtenir la valeur de l'enregistrement LDAP.La valeur par défaut est `objectGUID,ibm-entryUUID,GUID,dominoUNID,nsuniqueId,uidNumber`", "LDAP_User_Search_Field": "Champ de recherche", - "LDAP_User_Search_Field_Description": "L'attribut LDAP qui identifie l'utilisateur LDAP qui essaye de s'authentifier. Ce champ est `sAMAccountName` pour la plupart des installations Active Directory, mais cela peut être `uid` pour d'autres solutions de LDAP, comme OpenLDAP. Vous pouvez utiliser `mail` pour identifier les utilisateurs par leur adresse e-mail ou n'importe quel autre attribut que vous souhaitez.Vous pouvez utiliser plusieurs valeurs séparées par des virgules pour permettre aux utilisateur de s'identifier en utilisant plusieurs identifiants comme le nom d'utilisateur ou l'adresse e-mail.", + "LDAP_User_Search_Field_Description": "L'attribut LDAP qui identifie l'utilisateur LDAP qui essaie de s'authentifier. Ce champ doit être `sAMAccountName` pour la plupart des installations Active Directory, mais il peut être `uid` pour d'autres solutions LDAP, comme OpenLDAP. Vous pouvez utiliser `mail` pour identifier les utilisateurs par e-mail ou par n'importe quel autre attribut souhaité.Vous pouvez utiliser plusieurs valeurs séparées par des virgules pour permettre aux utilisateur de se connecter en utilisant plusieurs identifiants comme le nom d'utilisateur ou l'e-mail.", "LDAP_User_Search_Filter": "Filtre", "LDAP_User_Search_Filter_Description": "Si renseigné, seuls les utilisateurs qui correspondent à ce filtre seront autorisés à se connecter. Si aucun filtre n'est spécifié, tous les utilisateurs dans le spectre du domaine de base spécifié seront capable de se connecter.Exemple pour ActiveDirectory : `memberOf=cn=ROCKET_CHAT,ou=General Groups`.Exemple pour OpenLDAP (recherche étendue de correspondance) : `ou:dn:=ROCKET_CHAT`.", "LDAP_User_Search_Scope": "Portée", - "LDAP_Username_Field": "Champs du nom d'utilisateur", - "LDAP_Username_Field_Description": "Champ utilisé en tant que *nom d'utilisateur* pour les nouveaux utilisateurs. Laisser vide pour utiliser le nom d'utilisateur renseigné sur la page de connexion.Vous pouvez aussi utiliser un modèle à base de tags, comme `#{givenName}.#{sn}`.La valeur par défaut est `sAMAccountName`.", - "LDAP_Validate_Roles_For_Each_Login": "Valider le mapping pour chaque nom d'utilisateur", - "LDAP_Validate_Roles_For_Each_Login_Description": "Si la validation doit être faite pour chaque nom d'utilisateur (Soyez prudent avec ce paramètre car il écrasera les rôles utilisateur pour chaque nom d'utilisateur, autrement cela sera validé uniquement au moment de la création de l'utilisateur).", - "Lead_capture_email_regex": "Regex d'email de capture principale", - "Lead_capture_phone_regex": "Regex de téléphone de capture de plomb", + "LDAP_Username_Field": "Champ du nom d'utilisateur", + "LDAP_Username_Field_Description": "Quel champ sera utilisé comme *nom d'utilisateur* pour les nouveaux utilisateurs. Laisser vide pour utiliser le nom d'utilisateur renseigné sur la page de connexion.Vous pouvez également utiliser des balises de modèle, comme `#{givenName}.#{sn}`.La valeur par défaut est `sAMAccountName`.", + "LDAP_Validate_Roles_For_Each_Login": "Valider le mappage pour chaque connexion", + "LDAP_Validate_Roles_For_Each_Login_Description": "Si la validation doit avoir lieu pour chaque connexion (soyez prudent avec ce paramètre car il écrasera les rôles d'utilisateur à chaque connexion, sinon cela ne sera validé qu'au moment de la création de l'utilisateur).", + "Lead_capture_email_regex": "Regex pour capture d'e-mail principale", + "Lead_capture_phone_regex": "Regex de téléphone de capture principale", "Leave": "Quitter", - "Leave_Group_Warning": "Êtes-vous sûr(e) de vouloir quitter le groupe \"%s\" ?", + "Leave_a_comment": "Laissez un commentaire", + "Leave_Group_Warning": "Voulez-vous vraiment quitter le groupe \"%s\" ?", "Leave_Livechat_Warning": "Êtes-vous sûr de vouloir quitter l'omnicanal avec \"%s\"?", - "Leave_Private_Warning": "Êtes-vous sûr(e) de vouloir quitter la discussion avec \"%s\" ?", - "Leave_room": "Quitter le salon", - "Leave_Room_Warning": "Êtes-vous sûr(e) de vouloir quitter le salon \"%s\" ?", - "Leave_the_current_channel": "Quitter le salon", + "Leave_Private_Warning": "Voulez-vous vraiment quitter la discussion avec \"%s\" ?", + "Leave_room": "Quitter", + "Leave_Room_Warning": "Voulez-vous vraiment quitter le canal \"%s\" ?", + "Leave_the_current_channel": "Quitter le canal actuel", "Leave_the_description_field_blank_if_you_dont_want_to_show_the_role": "Laissez le champ de description vide si vous ne voulez pas montrer le rôle", - "leave-c": "Quitter les chaînes", + "leave-c": "Quitter les canaux", "leave-p": "Quitter les groupes privés", + "Lets_get_you_new_one": "On va vous en procurer un nouveau !", "line": "ligne", "List_of_Channels": "Liste des canaux", - "List_of_departments_for_forward": "Liste des services autorisés à rediriger (optionnel)", - "List_of_departments_for_forward_description": "Autoriser à définir une liste restreinte des services qui peuvent recevoir des messages de ce service", - "List_of_departments_to_apply_this_business_hour": "Liste des services concernés par ces heures d'ouverture", + "List_of_departments_for_forward": "Liste des départements autorisés pour le transfert (optionnel)", + "List_of_departments_for_forward_description": "Autoriser à définir une liste restreinte de départements qui peuvent recevoir des chats de ce département", + "List_of_departments_to_apply_this_business_hour": "Liste des départements pour appliquer cette heure d'ouverture", "List_of_Direct_Messages": "Liste des messages privés", "Omnichannel": "Omnicanal", - "Livechat_abandoned_rooms_closed_custom_message": "Message personnalisé quand une salle est automatiquement fermée pour cause de visiteur inactif", + "Livechat": "Chat en direct", + "Livechat_abandoned_rooms_closed_custom_message": "Message personnalisé lorsque le salon est automatiquement fermé par l'inactivité des visiteurs", "Livechat_agents": "Agents omnicanaux", - "Livechat_Agents": "Assistants", + "Livechat_Agents": "Agents", "Livechat_AllowedDomainsList": "Domaines autorisés pour le chat en direct", - "Livechat_business_hour_type": "Type d'heure d'ouverture (simple ou multiple)", - "Livechat_custom_fields_options_placeholder": "List séparée par des virgules utilisée pour choisir une valeur pré-confgurée. Les espaces entre chaque éléments ne sont pas acceptés.", + "Livechat_Appearance": "Apparence du chat en direct", + "Livechat_auto_transfer_chat_timeout": "Délai d'expiration (en secondes) pour le transfert automatique des chats sans réponse vers un autre agent", + "Livechat_auto_transfer_chat_timeout_description": "Cet événement n'a lieu que lorsque le chat vient de démarrer. Après le premier transfert pour inactivité, la salle n'est plus surveillée.", + "Livechat_business_hour_type": "Type d'heure d'ouverture (unique ou multiple)", + "Livechat_chat_transcript_sent": "Transcription du chat envoyée : __transcript__", + "Livechat_custom_fields_options_placeholder": "Liste séparée par des virgules utilisée pour choisir une valeur préconfigurée. Les espaces entre les éléments ne sont pas acceptés.", "Livechat_custom_fields_public_description": "Les champs personnalisés publics seront affichés dans les applications externes, telles que Livechat, etc.", "Livechat_Dashboard": "Tableau de bord omnicanal", "Livechat_DepartmentOfflineMessageToChannel": "Envoyer les messages hors ligne du chat en direct de ce service à un canal", + "Livechat_enable_message_character_limit": "Activer la limite des caractères des messages", "Livechat_enabled": "Omnicanal activé", - "Livechat_Facebook_API_Key": "Clé de l'API omnicanal", + "Livechat_Facebook_API_Key": "Clé API OmniCanal", "Livechat_Facebook_API_Secret": "Secret API omnicanal", "Livechat_Facebook_Enabled": "Intégration Facebook activée", - "Livechat_forward_open_chats": "Transférer les chats ouverts", - "Livechat_forward_open_chats_timeout": "Timeout (en secondes) de transmettre les chats", + "Livechat_forward_open_chats": "Transférer les discussions ouvertes", + "Livechat_forward_open_chats_timeout": "Délai (en secondes) pour transférer les chats", "Livechat_guest_count": "Compteur d'invités", "Livechat_Inquiry_Already_Taken": "Demande omnicanale déjà prise en compte", + "Livechat_Installation": "Installation de Livechat", "Livechat_last_chatted_agent_routing": "Agent de dernier chat préféré", - "Livechat_last_chatted_agent_routing_Description": "Le paramètre d'agent de dernier chat préféré assigne les chats à l'agent qui a précédemment interagit avec le même visiteur si l'agent est disponible quand le chat commence.", + "Livechat_last_chatted_agent_routing_Description": "Le paramètre \"Last-Chatted Agent\" attribue des chats à l'agent qui a précédemment interagi avec le même utilisateur, si l'agent est disponible lorsque le chat commence.", "Livechat_managers": "Gestionnaires omnicanaux", + "Livechat_Managers": "Gestionnaires", + "Livechat_message_character_limit": "Limite de caractères des messages en direct", + "Livechat_monitors": "Moniteurs de chat en direct", + "Livechat_Monitors": "Moniteurs", "Livechat_offline": "Omnicanal hors ligne", "Livechat_offline_message_sent": "Message hors ligne en direct envoyé", "Livechat_OfflineMessageToChannel_enabled": "Envoyer des messages hors ligne du chat en direct à un canal", "Livechat_online": "Omnicanal en ligne", "Livechat_Queue": "File d'attente omnicanal", "Livechat_registration_form": "Formulaire d'inscription", + "Livechat_registration_form_message": "Message du formulaire d'inscription", "Livechat_room_count": "Nombre de salons omnicanaux", "Livechat_Routing_Method": "Méthode de routage omnicanal", + "Livechat_status": "Statut du chat en direct", "Livechat_Take_Confirm": "Voulez-vous répondre à ce client ?", "Livechat_title": "Titre du chat en direct", "Livechat_title_color": "Couleur d'arrière plan du titre du chat en direct", + "Livechat_transcript_already_requested_warning": "La transcription de ce chat a déjà été demandée et sera envoyée dès la fin de la conversation.", + "Livechat_transcript_has_been_requested": "La transcription du chat a été demandée.", + "Livechat_transcript_request_has_been_canceled": "La demande de transcription du chat a été annulée.", "Livechat_transcript_sent": "Transcription omnicanale envoyée", + "Livechat_transfer_return_to_the_queue": "__from__ a renvoyé le chat dans la file d'attente", + "Livechat_transfer_to_agent": "__from__ a transféré le chat vers __to__", + "Livechat_transfer_to_agent_with_a_comment": "__from__ a transféré le chat vers __to__ avec un commentaire : __comment__", + "Livechat_transfer_to_department": "__from__ a transféré le chat au département __to__", + "Livechat_transfer_to_department_with_a_comment": "__from__ a transféré le chat au département __to__ avec un commentaire : __comment__", + "Livechat_Triggers": "Déclencheurs de chat en direct", + "Livechat_user_sent_chat_transcript_to_visitor": "__agent__ a envoyé la transcription du chat à __guest__", "Livechat_Users": "Utilisateurs omnicanal", - "Livestream_close": "Fermer Livestream", + "Livechat_visitor_email_and_transcript_email_do_not_match": "L'e-mail du visiteur et l'e-mail de la transcription ne correspondent pas", + "Livechat_visitor_transcript_request": "__guest__ a demandé la transcription du chat", + "LiveStream & Broadcasting": "LiveStream et diffusion", + "Livestream_close": "Fermer la diffusion en direct", "Livestream_enable_audio_only": "Activer uniquement le mode audio", "Livestream_enabled": "Diffusion en direct activée", - "Livestream_not_found": "Livestream n'est pas disponible", - "Livestream_popout": "Open Livestream", - "Livestream_source_changed_succesfully": "La source Livestream a bien été changée", - "Livestream_switch_to_room": "Passer à la diffusion en direct de la pièce actuelle", - "Livestream_url": "Livestream source url", - "Livestream_url_incorrect": "L'URL de Livestream est incorrecte", + "Livestream_not_found": "Diffusion en direct non disponible", + "Livestream_popout": "Ouvrir Livestream", + "Livestream_source_changed_succesfully": "La source du Livestream a bien été modifiée", + "Livestream_switch_to_room": "Passer à la diffusion en direct du salon actuel", + "Livestream_url": "URL source de la diffusion en direct", + "Livestream_url_incorrect": "L'URL de la diffusion en direct est incorrecte", + "Livestream_live_now": "Maintenant en live !", + "Load_Balancing": "L'équilibrage de charge", "Load_more": "Charger plus", "Loading_more_from_history": "Charger plus d'historique", - "Loading_suggestion": "Chargement des suggestions ...", + "Loading_suggestion": "Chargement des suggestions", "Loading...": "Chargement...", + "Local_Domains": "Domaines locaux", + "Local_Password": "Mot de passe local", "Local_Time": "Heure locale", "Local_Time_time": "Heure locale : __time__", "Localization": "Localisation", - "Log_Exceptions_to_Channel": "Consigner les exceptions dans la chaîne", + "Location": "Emplacement", + "Log_Exceptions_to_Channel": "Enregistrer les exceptions dans le canal", "Log_Exceptions_to_Channel_Description": "Un canal qui recevra toutes les exceptions capturées. Laissez vide pour ignorer les exceptions.", "Log_File": "Afficher le fichier et la ligne", "Log_Level": "Niveau de log", "Log_Package": "Afficher le paquet", - "Log_Trace_Methods": "Traçage des appels de méthode", + "Log_Trace_Methods": "Appels de méthode de trace", "Log_Trace_Methods_Filter": "Filtre de méthode de trace", - "Log_Trace_Methods_Filter_Description": "Le texte ici sera évalué comme RegExp (`new RegExp ('text')`). Gardez-le vide pour montrer la trace de chaque appel.", - "Log_Trace_Subscriptions": "Traçage des appels d'abonnement", - "Log_Trace_Subscriptions_Filter": "Filtre d'abonnement de trace", - "Log_Trace_Subscriptions_Filter_Description": "Le texte ici sera évalué comme RegExp (`new RegExp ('text')`). Gardez-le vide pour montrer la trace de chaque appel.", - "Log_View_Limit": "Limite de visibilité des log", + "Log_Trace_Methods_Filter_Description": "Le texte ici sera évalué comme RegExp (`new RegExp ('text')`). Gardez-le vide pour afficher la trace de chaque appel.", + "Log_Trace_Subscriptions": "Suivi des appels d'abonnement", + "Log_Trace_Subscriptions_Filter": "Filtre d'abonnement Trace", + "Log_Trace_Subscriptions_Filter_Description": "Le texte ici sera évalué comme RegExp (`new RegExp ('text')`). Gardez-le vide pour afficher la trace de chaque appel.", + "Log_View_Limit": "Limite d'affichage du journal", "Logged_out_of_other_clients_successfully": "Déconnexion des autres sessions réussie", "Login": "Se connecter", + "Login_Attempts": "Tentatives de connexion échouées", "Login_Logs": "Journaux de connexion", "Login_Logs_ClientIp": "Afficher l'IP du client sur les journaux de tentatives de connexion infructueuses", + "Login_Logs_Enabled": "Enregistrer (dans la console) les connexions échouées", "Login_Logs_ForwardedForIp": "Afficher l'IP transféré dans les journaux de tentatives de connexion infructueuses", "Login_Logs_UserAgent": "Afficher le \"UserAgent\" dans les journaux de tentatives de connexion infructueuses", "Login_Logs_Username": "Afficher le nom d'utilisateur dans les journaux tentatives de connexion infructueuses", "Login_with": "Connectez-vous avec %s", "Logistics": "Logistique", "Logout": "Se déconnecter", - "Logout_Others": "Déconnecter les autres sessions ouvertes", + "Logout_Others": "Déconnexion des autres emplacements connectés", "Logs": "Journaux", + "Longest_chat_duration": "Durée de conversation la plus longue", + "Longest_reaction_time": "Temps de réaction le plus long", + "Longest_response_time": "Temps de réponse le plus long", "Looked_for": "Cherché", "Mail_Message_Invalid_emails": "Vous avez fourni une ou plusieurs adresses e-mails invalides : %s", + "Mail_Message_Missing_subject": "Vous devez fournir un objet d'e-mail.", "Mail_Message_Missing_to": "Vous devez sélectionner un ou plusieurs utilisateurs ou fournir une ou plusieurs adresses e-mail, séparées par des virgules.", "Mail_Message_No_messages_selected_select_all": "Vous n'avez sélectionné aucun message. ", "Mail_Messages": "Messages électroniques", "Mail_Messages_Instructions": "Choisissez les messages que vous souhaitez envoyer par e-mail en cliquant dessus", - "Mail_Messages_Subject": "Voici une sélection de messages de \"%s\"", + "Mail_Messages_Subject": "Voici une partie sélectionnée des %s messages", "mail-messages": "Messages électroniques", - "mail-messages_description": "Autorisation d'utilisation de l'option de messagerie", - "Mailer": "Envoi d'e-mail", - "Mailer_body_tags": "Vous devez utiliser [unsubscribe] pour le lien de désinscription.Vous pouvez utiliser respectivement [name], [fname], [lname] pour le nom complet de l'utilisateur, le prénom et le nom de famille.Vous pouvez utiliser [email] pour l'adresse e-mail de l'utilisateur.", - "Mailing": "E-mailing", + "mail-messages_description": "Autorisation d'utiliser l'option des messages électroniques", + "Mailer": "Mailer", + "Mailer_body_tags": "Vous devez utiliser [unsubscribe] pour le lien de désabonnement.Vous pouvez utiliser respectivement [name], [fname], [lname] pour le nom complet, le prénom et le nom de famille de l'utilisateur.Vous pouvez utiliser [email] pour l'adresse e-mail de l'utilisateur.", + "Mailing": "Envoi d'e-mail", "Make_Admin": "Promouvoir administrateur", - "Make_sure_you_have_a_copy_of_your_codes_1": "Assurez-vous d'avoir une copie de vos codes:", + "Make_sure_you_have_a_copy_of_your_codes_1": "Assurez-vous d'avoir une copie de vos codes :", "Make_sure_you_have_a_copy_of_your_codes_2": "Si vous perdez l'accès à votre application d'authentification, vous pouvez utiliser l'un de ces codes pour vous connecter.", "Manage_Apps": "Gérer les applications", - "Manage_the_App": "Gérer l'application", + "Manage_the_App": "Gérer l'appli", "manage-apps": "Gérer les applications", - "manage-assets": "Gérer les actifs", + "manage-assets": "Gérer les ressources", "manage-assets_description": "Autorisation de gérer les actifs du serveur", - "manage-emoji": "Gérer les emoji", - "manage-emoji_description": "Permission de gérer le serveur emojis", + "manage-cloud_description": "Gérer le cloud", + "manage-email-inbox": "Gérer la boîte de réception des e-mails", + "manage-email-inbox_description": "Autorisation de gérer les boîtes mails", + "manage-emoji": "Gérer les émojis", + "manage-emoji_description": "Autorisation de gérer les émojis du serveur", "manage-incoming-integrations": "Gérer les intégrations entrantes", - "manage-incoming-integrations_description": "Autorisation de gérer les intrégrations entrantes du serveur", + "manage-incoming-integrations_description": "Autorisation de gérer les intégrations entrantes du serveur", "manage-integrations": "Gérer les intégrations", - "manage-integrations_description": "Autorisation de gérer les intégrations de serveur", + "manage-integrations_description": "Autorisation de gérer les intégrations de serveurs", "manage-livechat-agents": "Gérer les agents omnicanaux", "manage-livechat-departments": "Gérer les départements omnicanaux", "manage-livechat-managers": "Gérer les gestionnaires omnicanaux", "manage-oauth-apps": "Gérer les applications Oauth", - "manage-oauth-apps_description": "Permission de gérer les applications serveur Oauth", + "manage-oauth-apps_description": "Autorisation de gérer les applications Oauth du serveur", "manage-outgoing-integrations": "Gérer les intégrations sortantes", "manage-outgoing-integrations_description": "Autorisation de gérer les intégrations sortantes du serveur", "manage-own-incoming-integrations": "Gérer ses propres intégrations entrantes", "manage-own-incoming-integrations_description": "Autorisation permettant aux utilisateurs de créer et de modifier leur propre intégration entrante ou webhooks", - "manage-own-integrations": "Gérer ses propres intégrations", - "manage-own-integrations_description": "Permission permettant aux utilisateurs de créer et de modifier leur propre intégration ou webhooks", + "manage-own-integrations": "Gérer vos propres intégrations", + "manage-own-integrations_description": "Autorisation permettant aux utilisateurs de créer et de modifier leur propre intégration ou leurs webhooks", "manage-own-outgoing-integrations": "Gérer ses propres intégrations sortantes", "manage-own-outgoing-integrations_description": "Autorisation permettant aux utilisateurs de créer et de modifier leur propre intégration sortante ou webhooks", + "manage-selected-settings": "Modifier certains paramètres", + "manage-selected-settings_description": "Autorisation de modifier les paramètres qui sont explicitement autorisés à être modifiés", "manage-sounds": "Gérer les sons", "manage-sounds_description": "Permission de gérer les sons du serveur", + "manage-user-status": "Gérer le statut de l'utilisateur", + "manage-user-status_description": "Autorisation de gérer les statuts utilisateur personnalisés du serveur", "Manager_added": "Manager ajouté", "Manager_removed": "Manager supprimé", - "Managing_assets": "Gestion des ressources", + "Managers": "Gestionnaires", + "Managing_assets": "Gérer les ressources", "Managing_integrations": "Gestion des intégrations", + "Manual_Selection": "Sélection manuelle", "Manufacturing": "Fabrication", "MapView_Enabled": "Activer Mapview", - "MapView_Enabled_Description": "Activer Mapview affichera un bouton de partage de position sur la gauche du champs du chat.", - "MapView_GMapsAPIKey": "Clef API de Google Static Maps", + "MapView_Enabled_Description": "L'activation de Mapview affichera un bouton de partage de position à gauche du champ de saisie du chat.", + "MapView_GMapsAPIKey": "Clé API Google Static Maps", "MapView_GMapsAPIKey_Description": "Cela peut être obtenu gratuitement à partir de la Google Developers Console.", "Mark_all_as_read": "Marquer tous les messages (dans tous les canaux) comme lus", "Mark_as_read": "Marquer comme lu", "Mark_as_unread": "Marquer comme non lu", "Mark_read": "Marquer comme lu", - "Mark_unread": "Marquer non lu", - "Markdown_Headers": "Titres Markdown", - "Markdown_Marked_Breaks": "Activer les ruptures marquées", - "Markdown_Marked_GFM": "Activer GFM marqué", + "Mark_unread": "Marquer comme non lu", + "Markdown_Headers": "Autoriser les en-têtes Markdown dans les messages", + "Markdown_Marked_Breaks": "Activer les pauses marquées", + "Markdown_Marked_GFM": "Activer le GFM marqué", "Markdown_Marked_Pedantic": "Activer Marked Pedantic", "Markdown_Marked_SmartLists": "Activer les listes intelligentes marquées", "Markdown_Marked_Smartypants": "Activer les Smartypants marqués", "Markdown_Marked_Tables": "Activer les tables marquées", "Markdown_Parser": "Markdown Parser", - "Markdown_SupportSchemesForLink": "Schémas de Markdown supportés pour les liens", - "Markdown_SupportSchemesForLink_Description": "Liste de schémas séparés par des virgules", + "Markdown_SupportSchemesForLink": "Schémas de liens pris en charge de Markdown", + "Markdown_SupportSchemesForLink_Description": "Liste des schémas autorisés séparés par des virgules", "Marketplace_view_marketplace": "Voir le Marketplace", + "MAU_value": "MAU __value__", "Max_length_is": "La longueur maximale est %s", + "Max_number_incoming_livechats_displayed": "Nombre maximum d'éléments affichés dans la file d'attente", "Max_number_incoming_livechats_displayed_description": "(Facultatif) Nombre maximal d'éléments affichés dans la file d'attente omnicanal entrante.", "Max_number_of_chats_per_agent": "Nombre max. de chats simultanés", - "Max_number_of_chats_per_agent_description": "Le nombre max. de chats simultanés qu'un agent peut avoir", + "Max_number_of_chats_per_agent_description": "Le nombre max. de discussions simultanées qu'un agent peut avoir", "Max_number_of_uses": "Nombre maximum d'utilisations", + "Maximum": "Maximum", + "Maximum_number_of_guests_reached": "Nombre maximum d'invités atteint", "Me": "Moi", "Media": "Médias", - "Medium": "Milieu", + "Medium": "Moyen", "Members": "Membres", "Members_List": "Liste des membres", "mention-all": "Mention @all", "mention-all_description": "Autorisation d'utiliser la mention @all", "mention-here": "Mention ici", - "mention-here_description": "Permission d'utiliser la mention @here", + "mention-here_description": "Autorisation d'utiliser la mention @here", "Mentions": "Mentions", "Mentions_default": "Mentions (par défaut)", "Mentions_only": "Mentions seulement", - "Merge_Channels": "Fusionner les chaînes", + "Merge_Channels": "Fusionner les canaux", + "message": "message", "Message": "Message", "Message_AllowBadWordsFilter": "Autoriser le filtrage des mots interdits dans les messages", "Message_AllowConvertLongMessagesToAttachment": "Autoriser la conversion de longs messages en pièce jointe", @@ -2172,33 +2618,44 @@ "Message_AllowEditing_BlockEditInMinutesDescription": "Entrez 0 pour désactiver le blocage.", "Message_AllowPinning": "Autoriser l'épinglement de message", "Message_AllowPinning_Description": "Autoriser les messages à être épinglés à n'importe quel canal.", - "Message_AllowSnippeting": "Autoriser le snippeting de messages", + "Message_AllowSnippeting": "Autoriser l'extrait de message", "Message_AllowStarring": "Autoriser les favoris pour les messages", - "Message_AllowUnrecognizedSlashCommand": "Autoriser les commandes de barre oblique non reconnues", + "Message_AllowUnrecognizedSlashCommand": "Autoriser les commandes Slash non reconnues", + "Message_Already_Sent": "Ce message a déjà été envoyé et est en cours de traitement par le serveur", "Message_AlwaysSearchRegExp": "Toujours rechercher en utilisant des expressions régulières", "Message_AlwaysSearchRegExp_Description": "Nous vous recommandons de mettre `True` si votre langue ne sont pas pris en charge sur MongoDB recherche de texte.", - "Message_Attachments": "Pièces jointes de message", - "Message_Attachments_GroupAttach": "Boutons de connexion de groupe", - "Message_Attachments_GroupAttachDescription": "Cela regroupe les icônes dans un menu extensible. Prend moins d'espace à l'écran.", + "Message_Attachments": "Pièces jointes aux message", + "Message_Attachments_GroupAttach": "Boutons d'attachement de groupe", + "Message_Attachments_GroupAttachDescription": "Cela regroupe les icônes sous un menu extensible. Prend moins d'espace à l'écran.", "Message_Audio": "Message audio", - "Message_Audio_bitRate": "Débit binaire de message audio", + "Message_Audio_bitRate": "Débit binaire des messages audio", "Message_AudioRecorderEnabled": "Enregistrement audio activé", - "Message_AudioRecorderEnabled_Description": "Les fichiers 'audio / mp3' doivent être un type de média accepté dans les paramètres 'Téléchargement de fichier'.", - "Message_BadWordsFilterList": "Ajouter des mots interdits à la liste noire", + "Message_AudioRecorderEnabled_Description": "Nécessite que les fichiers \"audio/mp3\" soient un type de support accepté dans les paramètres \"Envoi de fichier\".", + "Message_auditing": "Audit des messages", + "Message_auditing_log": "Journal d'audit des messages", + "Message_BadWordsFilterList": "Ajouter de mauvais mots à la liste noire", "Message_BadWordsFilterListDescription": "Ajouter une liste de mots interdits au filtre, séparés par des virgules ", + "Message_BadWordsWhitelist": "Supprimer des mots de la liste noire", + "Message_BadWordsWhitelistDescription": "Ajouter une liste de mots séparés par des virgules à supprimer du filtre", + "Message_Characther_Limit": "Limite de caractères du message", + "message_counter": "__counter__ message", "message_counter_plural": "__counter__ messages", - "Message_DateFormat": "Format de la date", + "Message_DateFormat": "Format de date", "Message_DateFormat_Description": "Voir aussi : Moment.js", "Message_deleting_blocked": "Ce message ne peut plus être supprimé", "Message_editing": "Édition des messages", "Message_ErasureType": "Type d'effacement de message", "Message_ErasureType_Delete": "Supprimer tous les messages", - "Message_ErasureType_Description": "Déterminer quoi faire avec les messages des utilisateurs qui suppriment leur compte.", + "Message_ErasureType_Description": "Déterminez quoi faire avec les messages des utilisateurs qui suppriment leur compte.", "Message_ErasureType_Keep": "Conserver les messages et le nom d'utilisateur", "Message_ErasureType_Unlink": "Supprimer le lien entre l'utilisateur et les messages", "Message_GlobalSearch": "Recherche globale", "Message_GroupingPeriod": "Période de regroupement (en secondes)", "Message_GroupingPeriodDescription": "Les messages seront regroupés avec les messages précédents si ils sont du même utilisateur et si le temps écoulé est inférieur au temps indiqué en secondes.", + "Message_has_been_pinned": "Le message a été épinglé", + "Message_has_been_starred": "Le message a été suivi", + "Message_has_been_unpinned": "Le message a été détaché", + "Message_has_been_unstarred": "Message n'est plus suivi", "Message_HideType_au": "Masquer les messages \"Utilisateur ajouté\"", "Message_HideType_mute_unmute": "Masquer les messages \"Utilisateur rendu muet / a retrouvé la parole\"", "Message_HideType_r": "Masquer les messages \"Nom de la salle modifié\"", @@ -2206,6 +2663,8 @@ "Message_HideType_room_archived": "Masquer les messages \"Salon archivé\"", "Message_HideType_room_changed_avatar": "Masquer les messages \"Avatar de la salle modifié\"", "Message_HideType_room_changed_privacy": "Masquer les messages \"Type de Room modifié\"", + "Message_HideType_room_enabled_encryption": "Masquer les messages \"Cryptage de la salle activé\"", + "Message_HideType_room_disabled_encryption": "Masquer les messages \"Cryptage de la salle désactivé\"", "Message_HideType_room_unarchived": "Masquer les messages \"Salon désarchivée\"", "Message_HideType_ru": "Masquer les messages \"Utilisateur éjecté\"", "Message_HideType_subscription_role_added": "Masquer les messages \"Rôle assigné\"", @@ -2214,38 +2673,45 @@ "Message_HideType_ul": "Masquer les messages \"L'utilisateur est parti\"", "Message_HideType_ut": "Masquer les messages \"L'utilisateur a rejoint la conversation\"", "Message_HideType_wm": "Masquer les messages \"Bienvenu\"", + "Message_Id": "ID du message", "Message_Ignored": "Ce message a été ignoré", "Message_info": "Informations sur le message", - "Message_KeepHistory": "Conserver l'historique des messages", - "Message_MaxAll": "Taille de canal maximale pour le message ALL", - "Message_MaxAllowedSize": "Taille maximale d'un message", + "Message_KeepHistory": "Conserver l'historique de modification par message", + "Message_MaxAll": "Taille maximale du canal pour TOUS les messages", + "Message_MaxAllowedSize": "Nombre maximum de caractères autorisés par message", "Message_pinning": "Épingler des messages", - "Message_QuoteChainLimit": "Nombre maximum de devis enchaînés", - "Message_Read_Receipt_Enabled": "Afficher les accusés de lecture", + "message_pruned": "message élagué", + "Message_QuoteChainLimit": "Nombre maximum de citations enchaînées", + "Message_Read_Receipt_Enabled": "Afficher les confirmations de lecture", "Message_Read_Receipt_Store_Users": "Reçus de lecture détaillés", - "Message_Read_Receipt_Store_Users_Description": "Affiche les reçus de lecture de chaque utilisateur", + "Message_Read_Receipt_Store_Users_Description": "Affiche les conformations de lecture de chaque utilisateur", "Message_removed": "Message supprimé", - "Message_sent_by_email": "Message envoyé par Email", + "Message_sent_by_email": "Message envoyé par e-mail", "Message_ShowDeletedStatus": "Afficher le statut de suppression", "Message_ShowEditedStatus": "Afficher le statut de modification", "Message_ShowFormattingTips": "Afficher les astuces de mise en forme", "Message_starring": "Mettre un message en favoris", + "Message_Time": "Heure du message", "Message_TimeAndDateFormat": "Format de l'heure et de la date", "Message_TimeAndDateFormat_Description": "Voir aussi : Moment.js", "Message_TimeFormat": "Format de l'heure", "Message_TimeFormat_Description": "Voir aussi : Moment.js", "Message_too_long": "Message trop long", + "Message_too_long_as_an_attachment_question": "Message trop long. Envoyez-le plutôt en pièce jointe ?", + "Message_UserId": "Identifiant d'utilisateur", "Message_VideoRecorderEnabled": "Enregistreur vidéo activé", "Message_VideoRecorderEnabledDescription": "Nécessite que le type de média \"video/webm\" soit accepté dans les paramètres d'envoi des fichiers.", "Message_view_mode_info": "Cela modifie l'espace pris par les messages à l'écran.", - "messages": "Messages", + "MessageBox_view_mode": "Mode d'affichage MessageBox", + "messages": "messages", "Messages": "Messages", "messages_pruned": "messages élagués", + "Messages_sent": "Messages envoyés", "Messages_that_are_sent_to_the_Incoming_WebHook_will_be_posted_here": "Les messages envoyés au WebHook Entrant seront postés ici.", "Meta": "Meta", "Meta_custom": "Balises Meta personnalisées", - "Meta_fb_app_id": "App ID Facebook", - "Meta_google-site-verification": "Google Site Verification", + "Meta_fb_app_id": "ID Facebook App", + "Meta_google-site-verification": "Vérification de site Google", "Meta_language": "Langue", "Meta_msvalidate01": "MSValidate.01", "Meta_robots": "Robots", @@ -2256,41 +2722,55 @@ "meteor_status_reconnect_in": "tentative de connexion dans une seconde...", "meteor_status_reconnect_in_plural": "tentative de connexion dans __count__ secondes...", "meteor_status_try_now_offline": "Reconnexion", - "meteor_status_try_now_waiting": "Réessayer", + "meteor_status_try_now_waiting": "Essayez maintenant", "meteor_status_waiting": "En attente de connexion au serveur,", "Method": "Méthode", "Min_length_is": "La longueur minimale est %s", - "Minimum_balance": "La balance minimum", + "Minimum": "Le minimum", + "Minimum_balance": "Le solde minimum", + "minute": "minute", "minutes": "minutes", + "Mobex_sms_gateway_address": "Adresse de la passerelle SMS Mobex", + "Mobex_sms_gateway_address_desc": "IP ou hôte de votre service Mobex avec le port spécifié, par exemple `http://192.168.1.1:1401` ou `https://www.example.com:1401`", "Mobex_sms_gateway_from_number": "De", + "Mobex_sms_gateway_from_number_desc": "Adresse / numéro de téléphone d'origine lors de l'envoi d'un nouveau SMS au client LiveChat", + "Mobex_sms_gateway_from_numbers_list": "Liste des numéros à partir desquels envoyer des SMS", + "Mobex_sms_gateway_from_numbers_list_desc": "Liste de nombres séparés par des virgules à utiliser pour envoyer de nouveaux messages, par exemple : 123456789, 123456788, 123456888", "Mobex_sms_gateway_password": "Mot de passe", + "Mobex_sms_gateway_restful_address": "Adresse API Mobex SMS REST", + "Mobex_sms_gateway_restful_address_desc": "IP ou hôte de votre REST API Mobex, par exemple `http://192.168.1.1:8080` ou `https://www.example.com:8080`", "Mobex_sms_gateway_username": "Nom d'utilisateur", "Mobile": "Mobile", "Mobile_Notifications_Default_Alert": "Alerte par défaut des notifications mobiles", "Monday": "Lundi", + "Mongo_storageEngine": "Moteur de stockage Mongo", "Mongo_version": "Version de Mongo", "MongoDB_Deprecated": "MongoDB obsolète", "MongoDB_version_s_is_deprecated_please_upgrade_your_installation": "La version de MongoDB %s est obsolète, veuillez mettre à jour votre installation.", - "Monitor_history_for_changes_on": "Surveiller l'historique des changements sur", + "Monitor_added": "Moniteur ajouté", + "Monitor_history_for_changes_on": "Surveiller l'historique des modifications sur", + "Monitor_removed": "Moniteur supprimé", + "Monitors": "Moniteurs", "Monthly_Active_Users": "Utilisateurs actifs mensuels", "More": "Plus", "More_channels": "Plus de canaux", "More_direct_messages": "Plus de messages privés", "More_groups": "Davantage de groupes", "More_unreads": "Davantage de messages non lus", + "Most_popular_channels_top_5": "Canaux les plus populaires (Top 5)", "Move_beginning_message": "`%s` - Aller au début du message", "Move_end_message": "`%s` - Aller à la fin du message", "Msgs": "Messages", "multi": "multiple", - "multi_line": "bloc de code", + "multi_line": "multi ligne", "Mute_all_notifications": "Mettre toutes les notifications en sourdine", "Mute_Focused_Conversations": "Mettre en sourdine les conversations ciblées", "Mute_Group_Mentions": "Ignorer les mentions @all et @here", "Mute_someone_in_room": "Rendre quelqu'un muet dans ce salon", - "Mute_user": "Rendre muet", - "mute-user": "Ignorer l'utilisateur", - "mute-user_description": "Autorisation de mettre en sourdine d'autres utilisateurs dans le même canal", - "Muted": "Rendu muet", + "Mute_user": "Rendre l'utilisateur muet", + "mute-user": "Rendre l'utilisateur muet", + "mute-user_description": "Autorisation de couper le son des autres utilisateurs du même canal", + "Muted": "En sourdine", "My Data": "Mes données", "My_Account": "Mon compte", "My_location": "Ma position", @@ -2300,7 +2780,7 @@ "Name_cant_be_empty": "Le nom ne peut pas être vide", "Name_of_agent": "Nom de l'agent", "Name_optional": "Nom (optionnel)", - "Name_Placeholder": "S'il vous plaît entrez votre nom...", + "Name_Placeholder": "Veuillez entrer votre nom...", "Navigation_History": "Historique de navigation", "Never": "Jamais", "New": "Nouveau", @@ -2308,13 +2788,15 @@ "New_Business_Hour": "Nouvelle heure de travail", "New_Canned_Response": "Nouveau modèle de réponse", "New_chat_in_queue": "Nouvelle discussion dans la file d'attente", + "New_chat_priority": "Priorité modifiée : __user__ a changé la priorité en __priority__", "New_chat_transfer": "Nouveau transfert de chat : __transfer__", "New_Contact": "Nouveau contact", "New_Custom_Field": "Nouveau champ personnalisé", - "New_Department": "Nouveau service", + "New_Department": "Nouveau département", "New_discussion": "Nouvelle discussion", - "New_discussion_first_message": "Habituellement, une discussion commence par une question du type \"Comment télécharger une photo ?\"", + "New_discussion_first_message": "Habituellement, une discussion commence par une question, comme \"Comment téléverser une photo ?\"", "New_discussion_name": "Un nom parlant pour cette salle de discussion", + "New_Email_Inbox": "Nouvelle boîte mail", "New_encryption_password": "Nouveau mot de passe de chiffrement", "New_integration": "Nouvelle intégration", "New_line_message_compose_input": "`%s` - Nouvelle ligne dans l'entrée de composition du message", @@ -2323,7 +2805,7 @@ "New_Message_Notification": "Notification de nouveau message", "New_messages": "Nouveaux messages", "New_password": "Nouveau mot de passe", - "New_Password_Placeholder": "Veuillez entrer un nouveau mot de passe ...", + "New_Password_Placeholder": "Veuillez saisir un nouveau mot de passe...", "New_Priority": "Nouvelle priorité", "New_role": "Nouveau rôle", "New_Room_Notification": "Notification de nouveau salon", @@ -2335,7 +2817,7 @@ "New_videocall_request": "Nouvelle demande d'appel vidéo", "New_visitor_navigation": "Nouvelle navigation : __history__", "Newer_than": "Plus récent que", - "Newer_than_may_not_exceed_Older_than": "\"Plus récent que\" ne peut pas dépasser \"Plus ancien que\"", + "Newer_than_may_not_exceed_Older_than": "\"Plus récent que\" ne doit pas dépasser \"Plus ancien que\"", "Nickname": "Surnom", "Nickname_Placeholder": "Entrez votre surnom...", "No": "Non", @@ -2347,56 +2829,69 @@ "No_direct_messages_yet": "Pas de messages directs.", "No_Discussions_found": "Aucune discussion trouvée", "No_discussions_yet": "Pas encore de discussions", - "No_emojis_found": "Aucun emoji trouvé", - "No_Encryption": "Pas de Chiffrement", + "No_emojis_found": "Aucun émoji trouvé", + "No_Encryption": "Pas de cryptage", "No_files_left_to_download": "Aucun fichier à télécharger", "No_group_with_name_%s_was_found": "Aucun groupe privé nommé \"%s\" n'a été trouvé !", "No_groups_yet": "Vous n'avez pas encore de groupes privés.", "No_integration_found": "Aucune intégration trouvée par l'ID fourni.", "No_Limit": "Aucune limite", - "No_livechats": "Vous n'avez pas de chat en direct.", + "No_livechats": "Vous n'avez pas de chat en direct", "No_mentions_found": "Aucune mention trouvée", + "No_messages_found_to_prune": "Aucun message à supprimer", "No_messages_yet": "Pas encore de messages", "No_pages_yet_Try_hitting_Reload_Pages_button": "Pas encore de pages Essayez de cliquer sur le bouton \"Recharger les pages\".", "No_pinned_messages": "Aucun message épinglé", + "No_previous_chat_found": "Aucun chat précédent trouvé", "No_results_found": "Aucun résultat trouvé", - "No_results_found_for": "Aucun résultat trouvé pour:", + "No_results_found_for": "Aucun résultat trouvé pour :", "No_snippet_messages": "Aucun extrait", "No_starred_messages": "Aucun message en favoris", "No_such_command": "La commande `/__command__` n'existe pas", "No_Threads": "Aucun fil trouvé", "No_user_with_username_%s_was_found": "Aucun utilisateur nommé \"%s\" n'a été trouvé !", - "Nobody_available": "Personne n'est disponible", + "Nobody_available": "Personne de disponible", "Node_version": "Version de Node", "None": "Aucun", "Nonprofit": "Non lucratif", "Normal": "Normal", "Not_authorized": "Non autorisé", "Not_Available": "Indisponible", + "Not_enough_data": "Pas assez de données", "Not_following": "Pas suivis", + "Not_Following": "Ne pas suivre", "Not_found_or_not_allowed": "Introuvable ou non autorisé", - "Not_Imported_Messages_Title": "Les messages suivants n'ont pas pu être importés avec succès", + "Not_Imported_Messages_Title": "Les messages suivants n'ont pas été importés avec succès", "Not_in_channel": "Pas dans le canal", + "Not_likely": "Peu probable", + "Not_started": "Pas commencé", "Not_verified": "Non vérifié", "Nothing": "Rien", "Nothing_found": "Aucun résultat", - "Notification_Desktop_Default_For": "Voir les notifications de bureau pour", + "Notification_Desktop_Default_For": "Afficher les notifications de bureau pour", "Notification_Desktop_Audio_Default_For": "Lire les notifications audio de bureau pendant", "Notification_Mobile_Default_For": "Notifications mobiles push pour", - "Notification_RequireInteraction": "Exiger une interaction pour enlever la notification du bureau", + "Notification_RequireInteraction": "Exiger une interaction pour ignorer la notification du bureau", + "Notification_RequireInteraction_Description": "Fonctionne uniquement avec les versions de navigateur Chrome > 50. Utilise le paramètre requireInteraction pour afficher la notification de bureau pour une durée indéfinie jusqu'à ce que l'utilisateur interagisse avec lui.", "Notifications": "Notifications", - "Notifications_Max_Room_Members": "Nombre maximal de membres d'un salon avant de désactiver toutes les notifications de message", + "Notifications_Max_Room_Members": "Nombre maximum de membres dans un salon avant de désactiver toutes les notifications de message", "Notifications_Max_Room_Members_Description": "Nombre maximal de membres dans le salon lorsque les notifications pour tous les messages sont désactivées. Les utilisateurs peuvent toujours modifier les paramètres du salon pour recevoir toutes les notifications individuellement. (0 pour désactiver)", - "Notifications_Muted_Description": "Si vous choisissez de tout couper, vous ne verrez pas la surbrillance de la pièce dans la liste lorsqu'il y a de nouveaux messages, sauf pour les mentions. Les notifications d'inhibition remplaceront les paramètres de notification.", + "Notifications_Muted_Description": "Si vous choisissez de tout désactiver, vous ne verrez pas la pièce en surbrillance dans la liste lorsqu'il y aura de nouveaux messages, à l'exception des mentions. La désactivation des notifications remplacera les paramètres de notification.", "Notifications_Preferences": "Préférences de notifications", - "Notifications_Sound_Volume": "Notifications volume sonore", - "Notify_active_in_this_room": "Notifier les utilisateurs actifs (connectés) de ce canal", + "Notifications_Sound_Volume": "Volume sonore des notifications", + "Notify_active_in_this_room": "Avertir les utilisateurs actifs (connectés) de ce canal", "Notify_all_in_this_room": "Notifiez tout le monde dans ce salon", - "Num_Agents": "# Assistants", + "NPS_survey_enabled": "Activer l'enquête NPS", + "NPS_survey_enabled_Description": "Autoriser l'exécution de l'enquête NPS pour tous les utilisateurs. Les administrateurs recevront une alerte 2 mois avant le lancement de l'enquête", + "NPS_survey_is_scheduled_to-run-at__date__for_all_users": "L'enquête NPS sera exécutée le __date__ pour tous les utilisateurs. Il est possible de désactiver l'enquête sur \" Admin > Général > NPS\".", + "Num_Agents": "# Agents", + "Number_in_seconds": "Nombre en secondes", "Number_of_events": "Nombre d'événements", "Number_of_federated_servers": "Nombre de serveurs fédérés", "Number_of_federated_users": "Nombre d'utilisateurs fédérés", "Number_of_messages": "Nombre de messages", + "Number_of_most_recent_chats_estimate_wait_time": "Nombre de chats récents pour calculer le temps d'attente estimé", + "Number_of_most_recent_chats_estimate_wait_time_description": "Ce nombre définit le nombre de derniers salons servis qui seront utilisés pour calculer les temps d'attente de la file d'attente.", "Number_of_users_autocomplete_suggestions": "Nombre de suggestions de saisie semi-automatique des utilisateurs", "OAuth Apps": "Applications OAuth", "OAuth_Application": "Application OAuth", @@ -2409,15 +2904,16 @@ "Office_hours_enabled": "Heures de bureau activées", "Office_hours_updated": "Heures de bureau modifiées", "Offline": "Hors ligne", - "Offline_DM_Email": "Vous avez reçu des messages privés de __user__", + "Offline_DM_Email": "Objet de l'e-mail du message privé", "Offline_Email_Subject_Description": "Vous pouvez utiliser les espaces réservés suivants:[Site_Name], [Site_URL], [User] & [Room] pour le nom de l'application, l'URL, le nom d'utilisateur et le nom du salon, respectivement.", "Offline_form": "Formulaire hors ligne", "Offline_form_unavailable_message": "Message indisponible du formulaire hors ligne", "Offline_Link_Message": "ALLER AU MESSAGE", - "Offline_Mention_All_Email": "Objet de l'email avec la mention @all", - "Offline_Mention_Email": "Objet de l'email de mention", + "Offline_Mention_All_Email": "Objet de l'e-mail avec la mention @all", + "Offline_Mention_Email": "Objet de l'e-mail de mention", "Offline_message": "Message hors ligne", "Offline_Message": "Message hors ligne", + "Offline_Message_Use_DeepLink": "Utiliser le format d'URL Deep Link", "Offline_messages": "Messages hors ligne", "Offline_success_message": "Message de succès hors ligne", "Offline_unavailable": "Hors ligne indisponible", @@ -2427,65 +2923,82 @@ "Omnichannel_Directory": "Annuaire omnicanal", "Omnichannel_appearance": "Apparence omnicanal", "Omnichannel_Contact_Center": "Centre de contact omnicanal", + "Omnichannel_contact_manager_routing": "Attribuer de nouvelles conversations au gestionnaire de contacts", + "Omnichannel_contact_manager_routing_Description": "Ce paramètre attribue un chat au gestionnaire de contacts attribué, tant que le gestionnaire de contacts est en ligne lors que le chat commence", + "Omnichannel_External_Frame": "Cadre externe", "Omnichannel_External_Frame_Enabled": "Cadre externe activé", - "On": "Allumé", + "Omnichannel_External_Frame_Encryption_JWK": "Clé de chiffrement (JWK)", + "Omnichannel_External_Frame_Encryption_JWK_Description": "S'il est fourni, il cryptera le jeton de l'utilisateur avec la clé fournie et le système externe devra déchiffrer les données pour accéder au jeton", + "Omnichannel_External_Frame_URL": "URL du cadre externe", + "On": "Sur", "online": "en ligne", "Online": "Connecté", "Only_authorized_users_can_write_new_messages": "Seuls les utilisateurs autorisés peuvent écrire de nouveaux messages", - "Only_from_users": "Éliminer seulement le contenu de ces utilisateurs", + "Only_from_users": "Elaguer uniquement le contenu de ces utilisateurs (laissez vide pour élaguer le contenu de tout le monde)", + "Only_Members_Selected_Department_Can_View_Channel": "Seuls les membres du service sélectionné peuvent voir les chats sur ce canal", "Only_On_Desktop": "Mode Bureau (envoyé seulement quand Entrée sur le bureau)", + "Only_works_with_chrome_version_greater_50": "Fonctionne uniquement avec les versions de navigateur Chrome > 50", "Only_you_can_see_this_message": "Vous seul pouvez voir ce message", + "Only_invited_users_can_acess_this_channel": "Seuls les utilisateurs invités peuvent accéder à ce canal", "Oops_page_not_found": "Oups, page introuvable", "Oops!": "Oups", - "Open": "Ouverture", - "Open_channel_user_search": "`%s` - Canal ouvert / Recherche d'utilisateur", + "Open": "Ouvert", + "Open_channel_user_search": "`%s` - Ouvrir la recherche de canal / utilisateur", "Open_conversations": "Conversations ouvertes", - "Open_Days": "Jours d'ouverture", + "Open_Days": "Jours ouverts", "Open_days_of_the_week": "Jours d'ouverture", - "Open_Livechats": "Ouvrir les chats en direct", - "Open_your_authentication_app_and_enter_the_code": "Ouvrez votre application d'authentification et entrez le code. Vous pouvez également utiliser l'un de vos codes de sauvegarde.", + "Open_Livechats": "Chats en cours", + "Open_thread": "Ouvrir le fil", + "Open_your_authentication_app_and_enter_the_code": "Ouvrez votre application d'authentification et entrez le code. Vous pouvez également utiliser l'un de vos codes de secours.", "Opened": "Ouvert", "Opened_in_a_new_window": "Ouvert dans une nouvelle fenêtre.", "Opens_a_channel_group_or_direct_message": "Ouvre un canal, un groupe ou un message privé", "optional": "facultatif", "Options": "Options", "or": "ou", - "Or_talk_as_anonymous": "Ou discutez de manière anonyme", + "Or_talk_as_anonymous": "Ou parlez en anonyme", "Order": "Ordre", - "Organization_Email": "Email de l'organisation", + "Organization_Email": "E-mail de l'organisation", "Organization_Info": "Informations sur l'organisation", "Organization_Name": "Nom de l'organisation", - "Organization_Type": "Type de l'organisation", + "Organization_Type": "Type d'organisation", "Original": "Original", - "OS_Arch": "Architecture", - "OS_Cpus": "Nombre de CPU", + "OS_Arch": "Architecture OS", + "OS_Cpus": "Nombre de processeurs du système d'exploitation", "OS_Freemem": "Mémoire disponible", - "OS_Loadavg": "Charge moyenne", - "OS_Platform": "Plate-forme", - "OS_Release": "Version", + "OS_Loadavg": "Charge moyenne du système d'exploitation", + "OS_Platform": "Plateforme OS", + "OS_Release": "Version du système d'exploitation", "OS_Totalmem": "Mémoire totale", - "OS_Type": "Type Système d'exploitation", - "OS_Uptime": "Durée de fonctionnement", + "OS_Type": "Type de système d'exploitation", + "OS_Uptime": "Durée de fonctionnement du système d'exploitation", "Other": "Autre", "others": "autres", + "Others": "Autres", "OTR": "Conversation chiffrée (OTR)", "OTR_is_only_available_when_both_users_are_online": "OTR est disponible uniquement lorsque les deux utilisateurs sont connectés", "Outgoing_WebHook": "WebHook sortant", - "Outgoing_WebHook_Description": "Obtenez des données sur Rocket.Chat en temps réel.", + "Outgoing_WebHook_Description": "Obtenez des données de Rocket.Chat en temps réel.", + "Output_format": "Format de sortie", "Override_URL_to_which_files_are_uploaded_This_url_also_used_for_downloads_unless_a_CDN_is_given": "Modifier l'URL vers laquelle les fichiers sont téléversés. Cette URL est également utilisée pour les téléchargements sauf si un CDN a été configuré", "Page_title": "Titre de la page", - "Page_URL": "URL de la page", - "Parent_channel_doesnt_exist": "Channel n'existe pas.", + "Page_URL": "L'URL de la page", + "Parent_channel_doesnt_exist": "Le canal n'existe pas.", "Password": "Mot de passe", "Password_Change_Disabled": "L'administrateur de votre Rocket.Chat a désactivé la possibilité de changer de mot de passe", "Password_Changed_Description": "Vous pouvez utiliser les variables suivantes : [password] pour le mot de passe temporaire.[name], [fname], [lname] pour respectivement le nom complet, le prénom ou le nom de famille de l'utilisateur.[email] pour l'adresse mail de l'utilisateur.[Site_Name] et [Site_URL] pour respectivement le nom de l'application et l'URL.", "Password_Changed_Email_Subject": "[Site_Name] - Mot de passe modifié", + "Password_changed_section": "Mot de passe changé", "Password_changed_successfully": "Mot de passe modifié avec succès", "Password_Policy": "Politique de mot de passe", "Password_to_access": "Mot de passe d'accéder", - "Past_Chats": "Causeries passées", + "Passwords_do_not_match": "Les mots de passe ne correspondent pas", + "Past_Chats": "Discussions passées", + "Paste_here": "Coller ici...", "Paste": "Coller", - "Payload": "Contenu", + "Paste_error": "Erreur lors de la lecture du presse-papiers", + "Payload": "Charge utile", + "Peer_Password": "Mot de passe homologue", "People": "Personnes", "Permalink": "Lien permanent", "Permissions": "Permissions", @@ -2495,61 +3008,65 @@ "Phone_number": "Numéro de téléphone", "Pin": "Épingler", "Pin_Message": "Épingler ce message", - "pin-message": "Pin message", + "pin-message": "Epingler ce message", "pin-message_description": "Autorisation d'épingler un message dans un canal", "Pinned_a_message": "A épinglé un message :", "Pinned_Messages": "Messages épinglés", + "pinning-not-allowed": "L'épinglage n'est pas autorisé", "PiwikAdditionalTrackers": "Sites Piwik supplémentaires", "PiwikAdditionalTrackers_Description": "Entrez les URL de site Web Piwik supplémentaires et SiteID dans le format suivant, si vous souhaitez suivre les mêmes données dans différents sites Web: [{ \"trackerURL\" : \"https://my.piwik.domain2/\", \"siteId\" : 42 }, { \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 }]", "PiwikAnalytics_cookieDomain": "Tous les sous-domaines", "PiwikAnalytics_cookieDomain_Description": "Suivre les visiteurs dans tous les sous-domaines", "PiwikAnalytics_domains": "Masquer les liens sortants", - "PiwikAnalytics_domains_Description": "Dans le rapport \"Outlinks\", masquer les clics sur les URL d'alias connues. Veuillez insérer un domaine par ligne et n'utilisez aucun séparateur.", - "PiwikAnalytics_prependDomain": "Ajouter un domaine", - "PiwikAnalytics_prependDomain_Description": "Ajouter le nom du domaine du site au titre de la page lors du suivi", - "PiwikAnalytics_siteId_Description": "Le site id à utiliser pour identifier ce site. Exemple 17", - "PiwikAnalytics_url_Description": "L'URL où le Piwik réside, assurez-vous d'inclure la barre trialing. Exemple: //piwik.rocket.chat/", - "Placeholder_for_email_or_username_login_field": "Texte de remplacement pour l'adresse e-mail ou le nom d'utilisateur à la connexion", - "Placeholder_for_password_login_field": "Texte de remplacement pour le mot de passe", + "PiwikAnalytics_domains_Description": "Dans le rapport \"Outlinks\", masquez les clics sur les URL d'alias connues. Veuillez insérer un domaine par ligne et n'utilisez aucun séparateur.", + "PiwikAnalytics_prependDomain": "Pré-ajouter un domaine", + "PiwikAnalytics_prependDomain_Description": "Ajoutez le nom du domaine du site au titre de la page lors du suivi", + "PiwikAnalytics_siteId_Description": "L'identifiant du site à utiliser pour identifier ce site. Exemple : 17", + "PiwikAnalytics_url_Description": "L'URL où réside le Piwik, assurez-vous d'inclure la barre oblique de fin. Exemple : //piwik.rocket.chat/", + "Placeholder_for_email_or_username_login_field": "Espace réservé pour le champ de connexion par e-mail ou nom d'utilisateur", + "Placeholder_for_password_login_confirm_field": "Espace réservé pour le champ confirmation du mot de passe de connexion", + "Placeholder_for_password_login_field": "Espace réservé pour le champ de connexion par mot de passe", "Please_add_a_comment": "Merci d'ajouter un commentaire", "Please_add_a_comment_to_close_the_room": "Merci d'ajouter un commentaire pour fermer le salon", "Please_answer_survey": "Merci de prendre un moment pour répondre à un court sondage à propos de cette conversation", - "Please_enter_usernames": "S'il vous plaît entrer les noms d'utilisateur ...", + "Please_enter_usernames": "Veuillez entrer les noms d'utilisateur...", "please_enter_valid_domain": "Merci d'entrer un domaine valide", "Please_enter_value_for_url": "Veuillez entrer l'url de votre avatar.", "Please_enter_your_new_password_below": "Veuillez écrire votre nouveau mot de passe ci-dessous :", "Please_enter_your_password": "Veuillez entrer votre mot de passe", "Please_fill_a_label": "Veuillez entrer une étiquette", "Please_fill_a_name": "Veuillez saisir un nom", - "Please_fill_a_token_name": "Veuillez renseigner un nom de jeton valide", + "Please_fill_a_token_name": "Veuillez remplir un nom de jeton valide", "Please_fill_a_username": "Veuillez enter un nom d'utilisateur", - "Please_fill_all_the_information": "S'il vous plaît remplir toutes les informations", + "Please_fill_all_the_information": "Veuillez remplir toutes les informations", "Please_fill_an_email": "Veuillez remplir un e-mail", "Please_fill_name_and_email": "Veuillez remplir le nom et l'adresse e-mail", "Please_go_to_the_Administration_page_then_Livechat_Facebook": "Allez sur la page Administration puis Omnicanal > Facebook", "Please_select_an_user": "Merci de sélectionner un utilisateur", - "Please_select_enabled_yes_or_no": "Veuillez choisir une option pour \"Activé\"", - "Please_select_visibility": "Veuillez choisir une visibilité", + "Please_select_enabled_yes_or_no": "Veuillez sélectionner une option pour \"Activé\"", + "Please_select_visibility": "Veuillez sélectionner une visibilité", "Please_wait": "Veuillez patienter", "Please_wait_activation": "Veuillez patienter, cela peut prendre un peu de temps.", "Please_wait_while_OTR_is_being_established": "Veuillez patienter pendant l'établissement de l'OTR", "Please_wait_while_your_account_is_being_deleted": "Veuillez patienter pendant la suppression de votre compte...", "Please_wait_while_your_profile_is_being_saved": "Veuillez patienter pendant l'enregistrement de votre profil...", + "Pool": "Pool", "Port": "Port", "Post_as": "Publié en tant que", "Post_to": "Publier sur", "Post_to_Channel": "Publier sur le canal", "Post_to_s_as_s": "Publié sur %s en tant que %s", - "post-readonly": "Post ReadOnly", - "post-readonly_description": "Autorisation d'envoyer un message dans un canal en lecture seule", + "post-readonly": "Publier en lecture seule", + "post-readonly_description": "Autorisation de publier un message dans un canal en lecture seule", "Preferences": "Préférences", "Preferences_saved": "Préférences enregistrées", - "Preparing_list_of_channels": "Liste des canaux en préparation", - "Preparing_list_of_messages": "Liste des messages en préparation", - "Preparing_list_of_users": "Liste des utilisateurs en préparation", + "Preparing_data_for_import_process": "Préparation des données pour le processus d'importation", + "Preparing_list_of_channels": "Préparation de la liste des canaux", + "Preparing_list_of_messages": "Préparation de la liste des messages", + "Preparing_list_of_users": "Préparation de la liste des utilisateurs", "Presence": "Présence", - "preview-c-room": "Aperçu de la chaîne publique", - "preview-c-room_description": "Permission d'afficher le contenu d'une chaîne publique avant de rejoindre", + "preview-c-room": "Aperçu d'un canal public", + "preview-c-room_description": "Autorisation d'afficher le contenu d'un canal public avant de rejoindre", "Previous_month": "Le mois précédent", "Previous_week": "La semaine précédente", "Priorities": "Priorités", @@ -2559,6 +3076,8 @@ "Privacy_Policy": "Politique de confidentialité", "Private": "Privé", "Private_Channel": "Canal privé", + "Private_Channels": "Canaux privées", + "Private_Chats": "Chats privés", "Private_Group": "Groupe privé", "Private_Groups": "Groupes privés", "Private_Groups_list": "Liste des groupes privés", @@ -2568,56 +3087,63 @@ "Profile_details": "Détails du profil", "Profile_picture": "Image de profil", "Profile_saved_successfully": "Profil enregistré avec succès", - "Prometheus": "Prométhée", + "Prometheus": "Prometheus", + "Prometheus_API_User_Agent": "API: Suivi de l'agent utilisateur", + "Prometheus_Garbage_Collector": "Collect NodeJS GC", + "Prometheus_Garbage_Collector_Alert": "Redémarrage nécessaire pour désactiver", + "Prometheus_Reset_Interval": "Intervalle de réinitialisation (ms)", "Protocol": "Protocole", "Prune": "Élaguer", "Prune_finished": "Élagage terminé", "Prune_Messages": "Élaguer les messages", - "Prune_Modal": "Êtes-vous sûr de vouloir supprimer ces messages? Les messages élagués ne peuvent pas être récupérés.", - "Prune_Warning_after": "Cela supprimera tout %s dans %s après %s.", - "Prune_Warning_all": "Cela supprimera tout %s dans %s!", - "Prune_Warning_before": "Cela supprimera tout %s dans %s avant %s.", - "Prune_Warning_between": "Cela supprimera tout %s dans %s entre %s et %s.", + "Prune_Modal": "Voulez-vous vraiment élaguer ces messages ? Les messages élagués ne peuvent pas être récupérés.", + "Prune_Warning_after": "Cela supprimera tous les %s de %s après %s.", + "Prune_Warning_all": "Cela supprimera tous les %s dans %s !", + "Prune_Warning_before": "Cela supprimera tous les %s de %s avant %s.", + "Prune_Warning_between": "Cela supprimera tous les %s de %s entre %s et %s.", "Pruning_files": "Elagage des fichiers...", - "Pruning_messages": "Elagage des messages ...", + "Pruning_messages": "Elagage des messages...", "Public": "Public", - "Public_Channel": "Chaîne publique", + "Public_Channel": "Canal public", + "Public_Channels": "Canaux publiques", "Public_Community": "Communauté publique", - "Public_Relations": "Relations publiques", "Public_URL": "URL publique", - "Purchase_for_free": "Achat GRATUIT", - "Purchase_for_price": "Acheter pour $% s", + "Purchase_for_free": "Acheter GRATUITEMENT", + "Purchase_for_price": "Acheter pour $%s", "Purchased": "Acheté", "Push": "Push", "Push_Notifications": "Notifications Push", "Push_apn_cert": "Certificat APN", - "Push_apn_dev_cert": "APN Dev Cert", - "Push_apn_dev_key": "APN Dev Key", - "Push_apn_dev_passphrase": "APN Dev Passphrase", - "Push_apn_key": "Clef APN", - "Push_apn_passphrase": "APN Passphrase", + "Push_apn_dev_cert": "Certificat de développement APN", + "Push_apn_dev_key": "Clé de développement APN", + "Push_apn_dev_passphrase": "Phase secrète du développeur APN", + "Push_apn_key": "Clé APN", + "Push_apn_passphrase": "Phase secrète APN", "Push_enable": "Activer", "Push_enable_gateway": "Activer la passerelle", "Push_enable_gateway_Description": "Vous devez accepter d'enregistrer votre serveur (Assistant de configuration > Informations sur l'organisation > Enregistrer le serveur) et nos conditions de confidentialité (Assistant de configuration > Informations sur le cloud > Accord sur les conditions de confidentialité du service cloud) pour activer ce paramètre et utiliser notre passerelle", "Push_gateway": "Passerelle", + "Push_gateway_description": "Plusieurs lignes peuvent être utilisées pour spécifier plusieurs passerelles", "Push_gcm_api_key": "Clé API GCM", "Push_gcm_project_number": "Numéro de projet GCM", "Push_production": "Production", "Push_request_content_from_server": "Récupérer le contenu complet du message du serveur à la réception", - "Push_Setting_Requires_Restart_Alert": "Changer cette valeur nécessite de redémarrer Rocket.Chat.", + "Push_Setting_Requires_Restart_Alert": "La modification de cette valeur nécessite le redémarrage de Rocket.Chat.", "Push_show_message": "Afficher le message dans la notification", "Push_show_username_room": "Afficher le canal/groupe/nom d'utilisateur dans la notification", "Push_test_push": "Test", "Query": "Requête", - "Query_description": "Conditions additionnelles pour déterminer à quels utilisateurs l'e-mail sera envoyé. Les utilisateurs désinscrits sont automatiquement retirés de la requête. La requête doit être au format JSON. Exemple : \"{\"createdAt\":{\"$gt\":{\"$date\": \"2015-01-01T00:00:00.000Z\"}}}\"", + "Query_description": "Conditions supplémentaires pour déterminer à quels utilisateurs envoyer l'e-mail. Les utilisateurs désabonnés sont automatiquement supprimés de la requête. La requête doit être au format JSON. Exemple : \"{\"createdAt\":{\"$gt\":{\"$date\": \"2015-01-01T00:00:00.000Z\"}}}\"", + "Query_is_not_valid_JSON": "La requête n'est pas valide JSON", "Queue": "File d'attente", "quote": "citation", "Quote": "Citation", "Random": "Aléatoire", - "RDStation_Token": "Jeton RD Station", + "RD Station": "RD Station", + "RDStation_Token": "Jeton de station RD", "React_when_read_only": "Autoriser les réactions", "React_when_read_only_changed_successfully": "Autoriser les réactions en lecture seule", - "Reacted_with": "a réagi avec", + "Reacted_with": "A réagi avec", "Reactions": "Réactions", "Read_by": "Lu par", "Read_only": "Lecture seule", @@ -2625,7 +3151,7 @@ "Read_only_channel": "Canal en lecture seule", "Read_only_group": "Groupe en lecture seule", "Real_Estate": "Immobilier", - "Real_Time_Monitoring": "Suivi en temps réel", + "Real_Time_Monitoring": "Surveillance en temps réel", "RealName_Change_Disabled": "Votre administrateur Rocket.Chat a désactivé le changement de nom", "Reason_To_Join": "Raison de rejoindre", "Receive_alerts": "Recevoir des alertes", @@ -2634,27 +3160,29 @@ "Record": "Enregistrer", "Redirect_URI": "URI de redirection", "Refresh": "Rafraîchir", - "Refresh_keys": "Rafraîchir les clefs", + "Refresh_keys": "Actualiser les clés", "Refresh_oauth_services": "Actualiser les services OAuth", "Refresh_your_page_after_install_to_enable_screen_sharing": "Actualisez votre page après l'installation pour permettre le partage d'écran", "Regenerate_codes": "Regénérer les codes", + "Regexp_validation": "Validation par expression régulière", "Register": "Créer un nouveau compte", "Register_Server": "Enregistrer le serveur", "Register_Server_Info": "Utilisez les passerelles préconfigurées et les proxies fournies par Rocket.Chat Technologies Corp.", - "Register_Server_Opt_In": "Newsletter, offres et mises à jour de produits", + "Register_Server_Opt_In": "Mises à jour du produit et de la sécurité", "Register_Server_Registered": "Inscrivez-vous pour accéder", "Register_Server_Registered_I_Agree": "Je suis d'accord avec les", "Register_Server_Registered_Livechat": "Proxy omnicanal de chat en direct", - "Register_Server_Registered_Marketplace": "Google Apps Marketplace", - "Register_Server_Registered_OAuth": "Proxy OAuth pour le réseau social", - "Register_Server_Registered_Push_Notifications": "Passerelle de notifications push mobiles", - "Register_Server_Standalone": "Restez autonome, vous aurez besoin de", + "Register_Server_Registered_Marketplace": "Marketplace d'applications", + "Register_Server_Registered_OAuth": "Proxy OAuth pour les réseaux sociaux", + "Register_Server_Registered_Push_Notifications": "Passerelle de notifications push mobile", + "Register_Server_Standalone": "Restez autonome, vous devrez", "Register_Server_Standalone_Own_Certificates": "Recompilez les applications mobiles avec vos propres certificats", "Register_Server_Standalone_Service_Providers": "Créer des comptes avec des fournisseurs de services", "Register_Server_Standalone_Update_Settings": "Mettre à jour les paramètres préconfigurés", + "Register_Server_Terms_Alert": "Veuillez accepter les conditions pour terminer l'inscription", "Registration": "Enregistrement", "Registration_Succeeded": "Enregistrement réussi", - "Registration_via_Admin": "Enregistrement par un administrateur", + "Registration_via_Admin": "Inscription via administrateur", "Regular_Expressions": "Expressions régulières", "Release": "Version", "Religious": "Religieux", @@ -2665,33 +3193,42 @@ "Remove_as_leader": "Supprimer en tant que leader", "Remove_as_moderator": "Supprimer de la liste des modérateurs", "Remove_as_owner": "Supprimer de la liste des propriétaires", + "Remove_Channel_Links": "Supprimer les liens de canaux", "Remove_custom_oauth": "Supprimer l'OAuth personnalisé ", - "Remove_from_room": "Éjecter du salon", - "Remove_last_admin": "Retrait du dernier administrateur", + "Remove_from_room": "Retirer du salon", + "Remove_last_admin": "Suppression du dernier administrateur", "Remove_someone_from_room": "Éjecter quelqu'un du salon", "remove-closed-livechat-rooms": "Supprimer les salles omnicanales fermées", - "remove-user": "Retirer l'utilisateur", - "remove-user_description": "Permission de retirer un utilisateur d'un salon", + "remove-user": "Supprimer l'utilisateur", + "remove-user_description": "Permission de supprimer un utilisateur d'un salon", "Removed": "Supprimé", "Removed_User": "Utilisateur supprimé", + "Replay": "Replay", + "Replied_on": "Répondu le", "Replies": "Réponses", "Reply": "Répondre", "reply_counter": "__counter__ réponse", "reply_counter_plural": "__counter__ réponses", - "Reply_in_direct_message": "Répondre avec un message privé", - "Reply_in_thread": "Répondre dans le fil", + "Reply_in_direct_message": "Répondre dans un message privé", + "Reply_in_thread": "Répondre dans le fil de discussion", + "Reply_via_Email": "Répondre par e-mail", "ReplyTo": "Répondre à", "Report": "Signaler", "Report_Abuse": "Signaler un abus", "Report_exclamation_mark": "Signaler !", "Report_sent": "Signalement envoyé", "Report_this_message_question_mark": "Signaler ce message ?", - "Reporting": "Compte-rendu", + "Reporting": "Rapports", "Request_comment_when_closing_conversation": "Demander un commentaire lors de la clôture de la conversation", "Request_comment_when_closing_conversation_description": "S'il est activé, l'agent devra définir un commentaire avant la clôture de la conversation.", + "Request_tag_before_closing_chat": "Demander des balises (tags) avant de fermer la conversation", + "Requested_At": "Demandé à", + "Requested_By": "Demandé par", "Require": "Requis", + "Required": "Requis", + "required": "requis", "Require_all_tokens": "Exiger tous les jetons", - "Require_any_token": "Exiger un jeton", + "Require_any_token": "Exiger n'importe quel jeton", "Require_password_change": "Changement de mot de passe requis", "Resend_verification_email": "Renvoyer l'e-mail de vérification", "Reset": "Réinitialiser", @@ -2699,7 +3236,11 @@ "Reset_E2E_Key": "Réinitialiser la clé de chiffrement", "Reset_password": "Réinitialiser le mot de passe", "Reset_section_settings": "Réinitialiser les paramètres de la section", + "Reset_TOTP": "Réinitialiser TOTP", + "reset-other-user-e2e-key": "Réinitialiser la clé E2E de l'autre utilisateur", "Responding": "Répondre", + "Response_description_post": "Les corps vides ou les corps avec une propriété de texte vide seront simplement ignorés. Les réponses non-200 seront retentées un nombre raisonnable de fois. Une réponse sera publiée en utilisant l'alias et l'avatar spécifiés ci-dessus. Vous pouvez remplacer ces informations comme dans l'exemple ci-dessus.", + "Response_description_pre": "Si le gestionnaire souhaite publier une réponse dans le canal, le JSON suivant doit être renvoyé comme corps de la réponse :", "Restart": "Redémarrer", "Restart_the_server": "Redémarrer le serveur", "Retail": "Vente au détail", @@ -2707,36 +3248,40 @@ "RetentionPolicy": "Politique de rétention", "RetentionPolicy_Advanced_Precision": "Utiliser la configuration de la politique de rétention avancée", "RetentionPolicy_Advanced_Precision_Cron": "Utiliser cron pour la politique de rétention avancée", + "RetentionPolicy_Advanced_Precision_Cron_Description": "La fréquence d'exécution de la minuterie d'élagage définie par l'expression de tâche cron. Définir cette valeur sur une valeur plus précise améliore le fonctionnement des canaux avec des minuteries de rétention rapides, mais peut coûter plus de puissance de traitement pour les grandes communautés.", "RetentionPolicy_AppliesToChannels": "S'applique aux canaux", - "RetentionPolicy_AppliesToDMs": "S'applique aux messages directs", + "RetentionPolicy_AppliesToDMs": "S'applique aux messages privés", "RetentionPolicy_AppliesToGroups": "S'applique aux groupes privés", "RetentionPolicy_Description": "Elimine automatiquement les anciens messages de votre instance Rocket.Chat.", "RetentionPolicy_DoNotPruneDiscussion": "Ne pas élaguer les messages de discussion", + "RetentionPolicy_DoNotPrunePinned": "Ne pas supprimer les messages épinglés", + "RetentionPolicy_DoNotPruneThreads": "Ne pas supprimer les fils", "RetentionPolicy_Enabled": "Activé", "RetentionPolicy_ExcludePinned": "Exclure les messages épinglés", "RetentionPolicy_FilesOnly": "Supprimer uniquement les fichiers", "RetentionPolicy_FilesOnly_Description": "Seuls les fichiers seront supprimés, les messages eux-mêmes resteront en place.", - "RetentionPolicy_MaxAge": "Âge maximal du message", - "RetentionPolicy_MaxAge_Channels": "Âge maximal des messages dans les canaux", - "RetentionPolicy_MaxAge_Description": "Élague tous les messages plus anciens que cette valeur, en jours", - "RetentionPolicy_MaxAge_DMs": "Âge maximal des messages dans les messages directs", - "RetentionPolicy_MaxAge_Groups": "Âge maximal des messages dans les groupes privés", + "RetentionPolicy_MaxAge": "Âge maximum des messages", + "RetentionPolicy_MaxAge_Channels": "Âge maximum des messages dans les canaux", + "RetentionPolicy_MaxAge_Description": "Élaguez tous les messages plus anciens que cette valeur, en jours", + "RetentionPolicy_MaxAge_DMs": "Âge maximal des messages dans les messages privés", + "RetentionPolicy_MaxAge_Groups": "Âge maximum des messages dans les groupes privés", "RetentionPolicy_Precision": "Précision de la minuterie", - "RetentionPolicy_Precision_Description": "A quelle fréquence le temporisateur d'élagage devrait fonctionner. Si vous définissez cette valeur sur une valeur plus précise, les canaux dotés de temporisateurs de rétention rapides fonctionnent mieux, mais peuvent entraîner une puissance de traitement supplémentaire sur les grandes communautés.", + "RetentionPolicy_Precision_Description": "La fréquence d'exécution de la minuterie d'élagage. Définir cette valeur sur une valeur plus précise améliore le fonctionnement des canaux avec des minuteries de rétention rapides, mais peut coûter plus de puissance de traitement pour les grandes communautés.", "RetentionPolicy_RoomWarning": "Les messages plus anciens que __time__ sont automatiquement supprimés ici", "RetentionPolicy_RoomWarning_FilesOnly": "Les fichiers plus anciens que __time__ sont automatiquement élagués ici (les messages restent intacts)", - "RetentionPolicy_RoomWarning_Unpinned": "Les messages détachés plus anciens que __time__ sont automatiquement supprimés ici", + "RetentionPolicy_RoomWarning_Unpinned": "Les messages non épinglés plus anciens que __time__ sont automatiquement supprimés ici", "RetentionPolicy_RoomWarning_UnpinnedFilesOnly": "Les fichiers non épinglés plus anciens que __time__ sont automatiquement élagués ici (les messages restent intacts)", - "RetentionPolicyRoom_Enabled": "Élaguer automatiquement les anciens messages", + "RetentionPolicyRoom_Enabled": "Élaguez automatiquement les anciens messages", "RetentionPolicyRoom_ExcludePinned": "Exclure les messages épinglés", "RetentionPolicyRoom_FilesOnly": "Élaguer uniquement les fichiers, conserver les messages", - "RetentionPolicyRoom_MaxAge": "Âge maximal du message en jours (par défaut: __max__)", - "RetentionPolicyRoom_OverrideGlobal": "Remplacer la stratégie de rétention globale", + "RetentionPolicyRoom_MaxAge": "Âge maximum des messages en jours (par défaut : __max__)", + "RetentionPolicyRoom_OverrideGlobal": "Ignorer la politique de rétention globale", "RetentionPolicyRoom_ReadTheDocs": "Fais attention! Le fait de peaufiner ces paramètres sans le moindre soin peut détruire tout l'historique des messages. Veuillez lire la documentation avant d'activer la fonctionnalité ici.", - "Retry_Count": "Réessayer compte", + "Retry_Count": "Nombre de tentatives", "Return_to_home": "Retourner à la page d'accueil", "Return_to_previous_page": "Retourner à la page précédente", "Robot_Instructions_File_Content": "Contenu du fichier Robots.txt", + "Rocket_Chat_Alert": "Alerte Rocket.Chat", "Role": "Rôle", "Role_Editing": "Édition des rôles", "Role_Mapping": "Mapping des rôles", @@ -2748,11 +3293,12 @@ "Room_archivation_state_true": "Archivé", "Room_archived": "Salon archivé", "room_changed_announcement": "L'annonce du salon a été modifié en : __room_announcement__ par __user_by__", + "room_changed_avatar": "Avatar du salon modifié par __user_by__", "room_changed_description": "Description du salon modifiée pour : __room_description__ par __user_by__", "room_changed_privacy": "Type du salon changé pour : __room_type__ par __user_by__", "room_changed_topic": "Sujet du salon changé pour : __room_topic__ by __user_by__", "Room_default_change_to_private_will_be_default_no_more": "Ce canal est le canal par défaut et le modifier en groupe privé fera qu'il ne sera plus un canal par défaut. Voulez-vous continuer ?", - "Room_description_changed_successfully": "Description de la salle modifiée avec succès", + "Room_description_changed_successfully": "Description du salon salle modifié avec succès", "Room_has_been_archived": "Le salon a été archivé", "Room_has_been_deleted": "Le salon a été supprimé", "Room_has_been_unarchived": "Le salon a été désarchivé", @@ -2773,64 +3319,116 @@ "Room_uploaded_file_list": "Liste des fichiers", "Room_uploaded_file_list_empty": "Aucun fichier disponible.", "Rooms": "Salons", + "Routing": "Routage", + "Run_only_once_for_each_visitor": "Exécuter une seule fois pour chaque visiteur", "run-import": "Exécuter l'importation", - "run-import_description": "Permission de faire fonctionner les importateurs", - "run-migration": "Exécuter la migration", + "run-import_description": "Autorisation d'exécuter les importateurs", + "run-migration": "Lancer la migration", "run-migration_description": "Autorisation d'exécuter les migrations", - "Running_Instances": "Exécution d'instances", + "Running_Instances": "Instances en cours d'exécution", "Runtime_Environment": "Environnement d'exécution", "S_new_messages_since_s": "%s nouveaux messages depuis %s", - "Same_As_Token_Sent_Via": "Identique à \"Token Sent Via\"", + "Same_As_Token_Sent_Via": "Identique à \"Token envoyé via\"", "Same_Style_For_Mentions": "Même style pour les mentions", "SAML": "SAML", + "SAML_Allowed_Clock_Drift": "Dérive d'horloge autorisée du fournisseur d'identité", + "SAML_Allowed_Clock_Drift_Description": "L'horloge du fournisseur d'identité peut dériver légèrement en avance sur les horloges de votre système. Vous pouvez autoriser une petite quantité de dérive d'horloge. Sa valoir doit être donnée en quelques millisecondes (ms). La valeur donnée est ajoutée à l'heure actuelle à laquelle la réponse est validée.", + "SAML_AuthnContext_Template": "Template AuthnContext", + "SAML_AuthnContext_Template_Description": "Vous pouvez utiliser ici n'importe quelle variable du AuthnRequest Template.\n\nPour ajouter des contextes authn supplémentaires, dupliquez la balise __AuthnContextClassRef__ et remplacez la variable __\\_\\_authnContext\\_\\___ par le nouveau contexte.", + "SAML_AuthnRequest_Template": "Template AuthnRequest", + "SAML_AuthnRequest_Template_Description": "Les variables suivantes sont disponibles :\n- **\\_\\_newId\\_\\_** : Chaîne d'identifiant générée aléatoirement\n- **\\_\\_instant\\_\\_** : Horodatage actuel\n- **\\_\\_callbackUrl\\_\\_** : L'URL Callback de Rocket.Chat.\n- **\\_\\_entryPoint\\_\\_** : La valeur du paramètre __Custom Entry Point__.\n- **\\_\\_issuer\\_\\_** : La valeur du paramètre __Custom Issuer__.\n- **\\_\\_identifierFormatTag\\_\\_** : Le contenu du __NameID Policy Template__ si un __Identifier Format__ valide est configuré.\n- **\\_\\_identifierFormat\\_\\_** : La valeur du paramètre __Identifier Format__.\n- **\\_\\_authnContextTag\\_\\_** : Le contenu du __AuthnContext Template__ si un __Custom Authn Context__ valide est configuré.\n- **\\_\\_authnContextComparison\\_\\_** : La valeur du paramètre __Authn Context Comparison__.\n- **\\_\\_authnContext\\_\\_** : La valeur du paramètre __Custom Authn Context__.", + "SAML_Custom_Authn_Context": "Contexte d'authentification (Authn) personnalisé", + "SAML_Custom_Authn_Context_Comparison": "Comparaison du contexte Authn", + "SAML_Custom_Authn_Context_description": "Laissez ce champ vide pour omettre le contexte authn de la demande.\n\n Pour ajouter plusieurs contextes authn, ajoutez les autres directement au paramètre __AuthnContext Template__.", "SAML_Custom_Cert": "Certificat personnalisé", + "SAML_Custom_Debug": "Activer le débogage", "SAML_Custom_EMail_Field": "Nom du champ e-mail", "SAML_Custom_Entry_point": "Point d'entrée personnalisé", - "SAML_Custom_Generate_Username": "Générer le nom d'utilisateur", - "SAML_Custom_IDP_SLO_Redirect_URL": "URL de redirection IDP SLO", + "SAML_Custom_Generate_Username": "Générer un nom d'utilisateur", + "SAML_Custom_IDP_SLO_Redirect_URL": "URL de redirection du SLO IDP", "SAML_Custom_Immutable_Property": "Nom du champ immuable", - "SAML_Custom_Immutable_Property_EMail": "Email", + "SAML_Custom_Immutable_Property_EMail": "E-mail", "SAML_Custom_Immutable_Property_Username": "Nom d'utilisateur", "SAML_Custom_Issuer": "Émetteur personnalisé", "SAML_Custom_Logout_Behaviour": "Comportement de déconnexion", - "SAML_Custom_Logout_Behaviour_End_Only_RocketChat": "Déconnectez-vous seulement de Rocket.Chat", - "SAML_Custom_Logout_Behaviour_Terminate_SAML_Session": "Mettre fin à la session SAML", + "SAML_Custom_Logout_Behaviour_End_Only_RocketChat": "Déconnectez-vous uniquement de Rocket.Chat", + "SAML_Custom_Logout_Behaviour_Terminate_SAML_Session": "Terminer la session SAML", + "SAML_Custom_mail_overwrite": "Ecraser l'adresse e-mail de l'utilisateur (utiliser l'attribut idp)", + "SAML_Custom_name_overwrite": "Remplacer le nom complet de l'utilisateur (utiliser l'attribut idp)", "SAML_Custom_Private_Key": "Contenu de la clé privée", "SAML_Custom_Provider": "Fournisseur personnalisé", "SAML_Custom_Public_Cert": "Contenu du certificat public", - "SAML_Custom_user_data_fieldmap": "Liste des champs utilisateur", + "SAML_Custom_signature_validation_all": "Valider toutes les signatures", + "SAML_Custom_signature_validation_assertion": "Valider la signature d'assertion", + "SAML_Custom_signature_validation_either": "Valider l'une ou l'autre signature", + "SAML_Custom_signature_validation_response": "Valider la signature de la réponse", + "SAML_Custom_signature_validation_type": "Type de validatin de signature", + "SAML_Custom_signature_validation_type_description": "Ce paramètre sera ignoré si aucun certificat personnalisé n'est fourni.", + "SAML_Custom_user_data_fieldmap": "Carte des champs de données utilisateur", + "SAML_Custom_user_data_fieldmap_description": "Configurez la façon dont les champs de compte d'utilisateur (comme l'e-mail) sont remplis à partir d'un enregistrement dans SAML (une fois trouvé).\nPar exemple, `{\"name\":\"cn\", \"email\":\"mail\"}` choisira le nom lisible par l'homme d'une personne à partir de l'attribut cn, et son e-mail à partir de l'attribut mail.\nChamps disponibles dans Rocket.Chat : `name`, `email` et `username`, tout le reste sera enregistré sous `customFields`.\nAttribuez le nom d'un attribut immuable à la clé '__identifier__' pour l'utiliser comme identifiant utilisateur.\nVous pouvez également utiliser des expressions régulières et des modèles. Les modèles seront traités en premier, sauf lorsqu'ils référencent le résultat de l'expression régulière. \n```\n{\n \"email\": \"mail\",\n \"username\": {\n \"fieldName\": \"mail\",\n \"regex\": \"(.*)@.+$\",\n \"template\": \"user-__regex__\"\n },\n\"name\": {\n \"fieldNames\": [\n \"firstName\",\n \"lastName\"\n ],\n \"template\": \"__firstName__ __lastName__\"\n },\n\"__identifier__\": \"uid\"\n}```", "SAML_Custom_Username_Field": "Nom du champ du nom d'utilisateur", + "SAML_Custom_Username_Normalize": "Normaliser le nom d'utilisateur", + "SAML_Custom_Username_Normalize_Lowercase": "En minuscules", + "SAML_Custom_Username_Normalize_None": "Pas de normalisation", "SAML_Default_User_Role": "Rôle d'utilisateur par défaut", + "SAML_Default_User_Role_Description": "Vous pouvez spécifier plusieurs rôles, en les séparant par des virgules.", + "SAML_Identifier_Format": "Format de l'identifiant", + "SAML_Identifier_Format_Description": "Laissez ce champ vide pour omettre la stratégie NameID de la demande.", + "SAML_LogoutRequest_Template": "Modèle de demande de déconnexion", + "SAML_LogoutRequest_Template_Description": "Les variables suivantes sont disponibles : \n- **\\_\\_newId\\_\\_** : Chaîne d'identifiant générée aléatoirement\n- **\\_\\_instant\\_\\_** : Horodatage actuel\n- **\\_\\_idpSLORedirectURL\\_\\_** : URL de déconnexion unique IDP vers laquelle rediriger.\n- **\\_\\_issuer\\_\\_** : La valeur du paramètre __Custom Issuer__.\n- **\\_\\_identifierFormat\\_\\_** : La valeur du paramètre __Identifier Format__.\n- **\\_\\_nameID\\_\\_** : Le NameID reçu de l'IdP lorsque l'utilisateur s'est connecté.\n- **\\_\\_sessionIndex\\_\\_** : Le sessionIndex reçu de l'IdP lorsque l'utilisateur s'est connecté.", + "SAML_LogoutResponse_Template": "Modèle de réponse de déconnexion", + "SAML_LogoutResponse_Template_Description": "Les variables suivantes sont disponibles : \n- **\\_\\_newId\\_\\_** : Chaîne d'identifiant générée aléatoirement\n- **\\_\\_inResponseToId\\_\\_** : L'ID de la demande de déconnexion reçue de l'IdP\n- **\\_\\_instant\\_\\_** : Horodatage actuel\n- **\\_\\_idpSLORedirectURL\\_\\_** : URL de déconnexion unique IDP vers laquelle rediriger.\n- **\\_\\_issuer\\_\\_** : La valeur du paramètre __Custom Issuer__.\n- **\\_\\_identifierFormat\\_\\_** : La valeur du paramètre __Identifier Format__.\n- **\\_\\_nameID\\_\\_** : Le NameID reçu de la demande de déconnexion IdP.\n- **\\_\\_sessionIndex\\_\\_** : Le sessionIndex reçu de la demande de déconnexion IdP.", + "SAML_Metadata_Certificate_Template_Description": "Les variables suivantes sont disponibles :\n- **\\_\\_certificate\\_\\_** : le certificat privé pour le cryptage des assertions.", + "SAML_Metadata_Template": "Modèle de métadonnées", + "SAML_Metadata_Template_Description": "Les variables suivantes sont disponibles :\n- **\\_\\_sloLocation\\_\\_** : URL de déconnexion unique Rocket.Chat.\n- **\\_\\_issuer\\_\\_** : La valeur du paramètre __Custom Issuer__.\n- **\\_\\_identifierFormat\\_\\_** : La valeur du paramètre __Identifier Format__.\n- **\\_\\_certificateTag\\_\\_** : Si un certificat privé est configuré, cela inclura le __Metadata Certificate Template__, sinon il sera ignoré.\n- **\\_\\_callbackUrl\\_\\_** : L'URL de rappel (callback) Rocket.Chat.", + "SAML_MetadataCertificate_Template": "Modèle de certificat de métadonnées", + "SAML_NameIdPolicy_Template": "Modèle de stratégie NameID", + "SAML_NameIdPolicy_Template_Description": "Vous pouvez utiliser ici n'importe quelle variable du modèle de demande d'autorisation.", "SAML_Role_Attribute_Name": "Nom d'attribut de rôle", "SAML_Role_Attribute_Name_Description": "Si cet attribut est trouvé dans la réponse SAML, ses valeurs seront utilisées comme noms de rôle pour les nouveaux utilisateurs.", + "SAML_Role_Attribute_Sync": "Synchroniser les rôles des utilisateurs", + "SAML_Role_Attribute_Sync_Description": "Synchroniser les rôles utilisateur SAML lors de la connexion (écrase les rôles utilisateurs locaux).", "SAML_Section_1_User_Interface": "Interface utilisateur", + "SAML_Section_2_Certificate": "Certificat", + "SAML_Section_3_Behavior": "Comportement", "SAML_Section_4_Roles": "Rôles", + "SAML_Section_5_Mapping": "Mapping", + "SAML_Section_6_Advanced": "Avancé", + "SAML_Custom_channels_update": "Mettre à jour les abonnements aux salles à chaque connexion", + "SAML_Custom_channels_update_description": "Garantit que l'utilisateur est membre de tous les canaux dans l'assertion SAML à chaque connexion.", + "SAML_Custom_include_private_channels_update": "Incure les salons privés dans l'abonnement aux salons", + "SAML_Custom_include_private_channels_update_description": "Ajoute l'utilisateur à toutes les salles privées qui existent dans l'assertion SAML.", "Saturday": "Samedi", "Save": "Enregistrer", "Save_changes": "Sauvegarder les modifications", "Save_Mobile_Bandwidth": "Préserver la bande passante sur mobile", "Save_to_enable_this_action": "Sauvegarder pour activer cette action", + "Save_To_Webdav": "Enregistrer sur WebDAV", + "Save_your_encryption_password": "Enregistrez votre mot de passe de cryptage", "save-others-livechat-room-info": "Enregistrer d'autres informations sur la salle omnicanale", "save-others-livechat-room-info_description": "Permission d'enregistrer des informations provenant d'autres salles omnicanales", "Saved": "Enregistré", "Saving": "Enregistrement en cours", - "Scan_QR_code": "En utilisant une application d'authentification comme Google Authenticator, Authy ou Duo, scannez le code QR. Il affichera un code à 6 chiffres que vous devrez entrer ci-dessous.", - "Scan_QR_code_alternative_s": "Si vous ne pouvez pas scanner le code QR, vous pouvez entrer le code manuellement à la place:", + "Scan_QR_code": "A l'aide d'une application d'authentification telle que Google Authenticator, Authy ou Duo, scannez le code QR. Il affichera un code à 6 chiffres que vous devez saisir ci-dessous.", + "Scan_QR_code_alternative_s": "Si vous ne pouvez pas scanner le code QR, vous pouvez saisir le code manuellement à la place :", "Scope": "Portée", - "Screen_Share": "Partage d'Écran", + "Score": "Score", + "Screen_Lock": "Verrouillage de l'écran", + "Screen_Share": "Partage d'écran", "Script_Enabled": "Script activé", "Search": "Rechercher", "Search_Apps": "Rechercher des applications", "Search_by_file_name": "Recherche par nom de fichier", "Search_by_username": "Rechercher par nom d'utilisateur", "Search_Channels": "Recherche de canaux", + "Search_Chat_History": "Rechercher dans l'historique des discussions", "Search_current_provider_not_active": "Le fournisseur de recherche actuel n'est pas actif", - "Search_Integrations": "Rechercher d'intégrations", + "Search_Integrations": "Recherche d'intégrations", "Search_message_search_failed": "Demande de recherche a échoué", "Search_Messages": "Rechercher des messages", "Search_Files": "Rechercher des fichiers", "Search_Page_Size": "Taille de la page", - "Search_Private_Groups": "Rechercher dans les groupes privés", + "Search_Private_Groups": "Rechercher des groupes privés", "Search_Provider": "Fournisseur de recherche", "Search_Rooms": "Rechercher des salons", "Search_Users": "Rechercher des utilisateurs", @@ -2838,18 +3436,24 @@ "Secret_token": "Jeton secret", "Security": "Sécurité", "See_full_profile": "Voir le profil complet", - "Select_a_department": "Sélectionner un service", + "Select_a_department": "Sélectionner un département", + "Select_a_room": "Sélectionnez une salle", "Select_a_user": "Sélectionner un utilisateur", "Select_an_avatar": "Choisissez un avatar", - "Select_an_option": "Choisir une option", - "Select_department": "Sélectionner un service", + "Select_an_option": "Sélectionnez une option", + "Select_at_least_one_user": "Sélectionnez au moins un utilisateur", + "Select_at_least_two_users": "Sélectionnez au moins deux utilisateurs", + "Select_department": "Sélectionner un département", "Select_file": "Sélectionnez le fichier", "Select_role": "Sélectionnez un rôle", "Select_service_to_login": "Sélectionnez un service pour vous connecter et importer votre image ou importez directement une image à partir de votre ordinateur.", + "Select_tag": "Sélectionnez un tag", "Select_user": "Sélectionner l'utilisateur", "Select_users": "Sélectionner des utilisateurs", - "Selected_agents": "Assistants sélectionnés", - "Selected_departments": "Services sélectionnés", + "Selected_agents": "Agents sélectionnés", + "Selected_departments": "Départements sélectionnés", + "Selected_monitors": "Moniteurs sélectionnés", + "Selecting_users": "Sélection des utilisateurs", "Send": "Envoyer", "Send_a_message": "Envoyez un message", "Send_a_test_mail_to_my_user": "Envoyer un e-mail de test à mon utilisateur", @@ -2861,39 +3465,54 @@ "Send_invitation_email_error": "Vous n'avez pas fourni d'adresse e-mail valide.", "Send_invitation_email_info": "Vous pouvez envoyer plusieurs e-mails d'invitation à la fois.", "Send_invitation_email_success": "Vous avez envoyé avec succès un e-mail d'invitation aux adresses suivantes :", + "Send_me_the_code_again": "Envoyez-moi le code à nouveau", + "Send_request_on": "Envoyer la demande sur", "Send_request_on_agent_message": "Envoyer une demande sur les messages de l'agent", - "Send_request_on_chat_close": "Envoyer une demande sur la fermeture du chat", - "Send_request_on_lead_capture": "Envoyer une demande de capture de plomb", + "Send_request_on_chat_close": "Envoyer une demande lors de la fermeture du chat", + "Send_request_on_chat_queued": "Envoyer une demande sur le chat en file d'attente", + "Send_request_on_chat_start": "Envoyer une demande au début du chat", + "Send_request_on_chat_taken": "Envoyer une demande sur le chat pris", + "Send_request_on_forwarding": "Envoyer une demande lors du transfert", + "Send_request_on_lead_capture": "Envoyer une demande sur la capture de leads", "Send_request_on_offline_messages": "Envoyer une demande sur les messages hors ligne", "Send_request_on_visitor_message": "Envoyer une demande sur les messages des visiteurs", "Send_Test": "Envoyer un test", + "Send_Test_Email": "Envoyer un e-mail de test", "Send_via_email": "Envoyer par mail", + "Send_via_Email_as_attachment": "Envoyer par e-mail en pièce jointe", "Send_Visitor_navigation_history_as_a_message": "Envoyer l'historique de navigation des visiteurs sous forme de message", "Send_visitor_navigation_history_on_request": "Envoyer l'historique de navigation des visiteurs sur demande", "Send_welcome_email": "Envoyer un e-mail de bienvenue", "Send_your_JSON_payloads_to_this_URL": "Envoyer les messages JSON à cette URL", + "send-many-messages": "Envoyer de nombreux messages", "send-omnichannel-chat-transcript": "Envoyer une transcription de conversation omnicanale", + "Sender_Info": "Informations sur l'expéditeur", "Sending": "Envoi en cours...", "Sent_an_attachment": "Envoyé une pièce jointe", + "Sent_from": "Envoyé de", + "Separate_multiple_words_with_commas": "Séparez plusieurs mots par des virgules", "Served_By": "Servi par", + "Server": "Serveur", "Server_File_Path": "Chemin du fichier du serveur", + "Server_Folder_Path": "Chemin du dossier du serveur", "Server_Info": "Informations sur le serveur", "Server_Type": "Type de serveur", "Service": "Service", "Service_account_key": "Clé de compte de service", + "Set_as_favorite": "Définir comme favori", "Set_as_leader": "Définir comme leader", "Set_as_moderator": "Définir comme modérateur", "Set_as_owner": "Définir comme propriétaire", "Set_random_password_and_send_by_email": "Définir un mot de passe aléatoire et l'envoyer par e-mail", "set-leader": "Définir comme leader", "set-moderator": "Définir le modérateur", - "set-moderator_description": "Autorisation de définir d'autres utilisateurs en tant que modérateur d'une chaîne", + "set-moderator_description": "Autorisation de définir d'autres utilisateurs comme modérateur d'un canal", "set-owner": "Définir le propriétaire", - "set-owner_description": "Autorisation de définir d'autres utilisateurs en tant que propriétaire d'une chaîne", - "set-react-when-readonly": "Définir Réagir lorsque ReadOnly", + "set-owner_description": "Autorisation de définir d'autres utilisateurs comme propriétaires d'un canal", + "set-react-when-readonly": "Définir réagir en lecture seule", "set-react-when-readonly_description": "Autorisation de définir la capacité à réagir aux messages dans un canal en lecture seule", - "set-readonly": "Définir ReadOnly", - "set-readonly_description": "Autorisation de définir un canal sur un canal en lecture seule", + "set-readonly": "Définir en lecture seule", + "set-readonly_description": "Autorisation de définir un canal comme un canal en lecture seule", "Settings": "Paramètres", "Settings_updated": "Paramètres mis à jour", "Setup_Wizard": "Assistant de configuration", @@ -2901,32 +3520,35 @@ "Share_Location_Title": "Partager votre position ?", "Canned_responses": "Modèles de réponse", "Shared_Location": "Position partagée", + "Shared_Secret": "Secret partagé", "Shortcut": "Raccourci", "Should_be_a_URL_of_an_image": "Doit être l'URL d'une image.", "Should_exists_a_user_with_this_username": "L'utilisateur doit déjà exister.", - "Show_agent_email": "Afficher le email de l'agent", + "Show_agent_email": "Afficher l'adresse e-mail de l'agent", + "Show_agent_info": "Afficher les informations sur l'agent", "Show_all": "Afficher tout", - "Show_Avatars": "Afficher les Avatars", + "Show_Avatars": "Afficher les avatars", "Show_counter": "Afficher le compteur", - "Show_email_field": "Afficher le champ de courrier électronique", + "Show_email_field": "Afficher le champ e-mail", + "Show_Message_In_Main_Thread": "Afficher les messages du fil dans le fil principal", "Show_more": "Afficher plus", - "Show_name_field": "Afficher le champ du nom", + "Show_name_field": "Afficher le champ de nom", "show_offline_users": "montrer les utilisateur hors ligne", "Show_on_offline_page": "Afficher sur la page hors ligne", "Show_on_registration_page": "Afficher sur la page d'enregistrement", - "Show_only_online": "Seulement les connectés", + "Show_only_online": "Afficher uniquement en ligne", "Show_preregistration_form": "Afficher le formulaire de pré-inscription", - "Show_queue_list_to_all_agents": "Montrer la queue à tous les assistants", + "Show_queue_list_to_all_agents": "Afficher la liste des files d'attente à tous les agents", "Show_room_counter_on_sidebar": "Afficher le compteur du salon dans la barre latérale", - "Show_Setup_Wizard": "Afficher l'assistant d'installation", + "Show_Setup_Wizard": "Afficher l'assistant de configuration", "Show_the_keyboard_shortcut_list": "Afficher la liste des raccourcis clavier", "Showing_archived_results": "Affichage de %s résultats archivés", "Showing_online_users": "Affichage de __total_showing__, en ligne : __online__, total : __total__ utilisateurs", - "Showing_results": "Afficher %s résultat(s)", + "Showing_results": "Afficher %s résultats", "Showing_results_of": "Affichage des résultats %s - %s sur %s", "Sidebar": "Barre latérale", "Sidebar_list_mode": "Mode de liste de canaux de la barre latérale", - "Sign_in_to_start_talking": "Connectez vous pour commencer à discuter", + "Sign_in_to_start_talking": "Connectez-vous pour commencer à parler", "since_creation": "depuis %s", "Site_Name": "Nom du site", "Site_Url": "URL du site", @@ -2934,34 +3556,40 @@ "Size": "Taille", "Skip": "Passer", "Slack_Users": "CSV des utilisateurs de Slack", - "SlackBridge_error": "SlackBridge a eu une erreur durant l'importation de vos messages at %s : %s", - "SlackBridge_finish": "SlackBridge a fini d'importer les messages sur%s. Veuillez recharger pour voir tous les messages.", + "SlackBridge_APIToken": "Jetons API", + "SlackBridge_APIToken_Description": "Vous pouvez configurer plusieurs serveurs slack en ajoutant un jeton API par ligne.", + "Slackbridge_channel_links_removed_successfully": "Les liens vers les canaux slackbridge ont été supprimés avec succès.", + "SlackBridge_error": "SlackBridge a rencontré une erreur lors de l'importation de vos messages à %s : %s", + "SlackBridge_finish": "SlackBridge a terminé l'importation des messages sur %s. Veuillez recharger pour afficher tous les messages.", "SlackBridge_Out_All": "SlackBridge Out Tous", - "SlackBridge_Out_All_Description": "Envoyer les messages de tous les canaux qui existent dans Slack et le bot a rejoint", - "SlackBridge_Out_Channels": "SlackBridge Out Chaînes", - "SlackBridge_Out_Channels_Description": "Choisissez les canaux qui envoient les messages à Slack", + "SlackBridge_Out_All_Description": "Envoyer des messages depuis tous les canaux qui existent dans Slack et que le bot a rejoint", + "SlackBridge_Out_Channels": "Canaux SlackBridge Out", + "SlackBridge_Out_Channels_Description": "Choisissez les canaux qui renverront les messages à Slack", "SlackBridge_Out_Enabled": "SlackBridge Out activé", - "SlackBridge_Out_Enabled_Description": "Choisissez si SlackBridge doit également envoyer vos messages à Slack", - "SlackBridge_start": "@%s a démarré une importation SlackBridge à `#%s`. Nous vous ferons savoir quand c'est fini.", - "Slash_Gimme_Description": "Affiche (つ ◕_◕) つ avant votre message", - "Slash_LennyFace_Description": "Affiche (͡ ° ͜ʖ ͡ °) après votre message", - "Slash_Shrug_Description": "Affiche ¯ \\ _ (ツ) _ / ¯ après votre message", + "SlackBridge_Out_Enabled_Description": "Choisissez si SlackBridge doit également renvoyer vos messages à Slack", + "SlackBridge_Remove_Channel_Links_Description": "Supprimez le lien interne entre les canaux Rocket.Chat et les canaux Slack. Les liens seront ensuite recréés en fonction des noms de canaux.", + "SlackBridge_start": "@%s a démarré une importation SlackBridge à `#%s`. Nous vous ferons savoir quand ce sera terminé.", + "Slash_Gimme_Description": "Affiche ༼ つ ◕_◕ ༽つ avant votre message", + "Slash_LennyFace_Description": "Affiche ( ͡° ͜ʖ ͡°) après votre message", + "Slash_Shrug_Description": "Affiche ¯\\_(ツ)_/¯ après votre message", "Slash_Status_Description": "Définir votre message de statut", "Slash_Status_Params": "Message de statut", - "Slash_Tableflip_Description": "Affiche (╯ ° □ °) ╯( ┻━┻", - "Slash_TableUnflip_Description": "Affiche ┬─┬ ノ (゜ - ゜ ノ)", + "Slash_Tableflip_Description": "Affiche (╯°□°)╯︵ ┻━┻", + "Slash_TableUnflip_Description": "Affiche ┬─┬ ノ( ゜-゜ノ)", "Slash_Topic_Description": "Définir le sujet", "Slash_Topic_Params": "Sujet de message", "Smarsh_Email": "Smarsh e-mail", - "Smarsh_Email_Description": "Smarsh e-mail à qui envoyer le fichier .eml", - "Smarsh_Enabled": "Activer Smarsh", + "Smarsh_Email_Description": "Adresse e-mail Smarsh à laquelle envoyer le fichier .eml.", + "Smarsh_Enabled": "Smarsh activé", "Smarsh_Enabled_Description": "Le connecteur Smarsh eml est-il activé ou non ? (a besoin que le champ 'De' soit renseigné dans E-mail -> SMTP).", - "Smarsh_Interval": "Interval Smarsh", + "Smarsh_Interval": "Intervalle Smarsh", "Smarsh_Interval_Description": "Le temps à attendre avant d'envoyer les messages (a besoin que le champ 'De' soit renseigné dans E-mail -> SMTP).", "Smarsh_MissingEmail_Email": "E-mail manquant", "Smarsh_MissingEmail_Email_Description": "L'e-mail à montrer pour un utilisateur quand l'adresse est manquante, généralement pour les comptes des bots.", + "Smarsh_Timezone": "Fuseau horaire Smarsh", "Smileys_and_People": "Émojis & Portraits", "SMS_Default_Omnichannel_Department": "Département omnicanal (par défaut)", + "SMS_Default_Omnichannel_Department_Description": "S'il est défini, toutes les nouvelles discussions entrantes, initiées par cette intégration, seront acheminées vers ce département.", "SMS_Enabled": "SMS activés", "SMTP": "SMTP", "SMTP_Host": "Hôte SMTP", @@ -2969,46 +3597,47 @@ "SMTP_Port": "Port SMTP", "SMTP_Test_Button": "Tester les paramètres SMTP", "SMTP_Username": "Nom d'utilisateur SMTP", - "Snippet_Added": "Créer le %s", - "Snippet_Messages": "Messages d'extraits", + "Snippet_Added": "Créé le %s", + "Snippet_Messages": "Messages d'extraits de code", "Snippet_name": "Nom de l'extrait", - "snippet-message": "Fragment de code", - "snippet-message_description": "Autorisation de créer un fragment de code", - "Snippeted_a_message": "Créer un extrait __snippetLink__", + "snippet-message": "Message d'extrait de code", + "snippet-message_description": "Autorisation de créer un message d'extrait de code", + "Snippeted_a_message": "Création d'un extrait __snippetLink__", "Social_Network": "Réseau social", "Sorry_page_you_requested_does_not_exist_or_was_deleted": "Désolé, la page que vous avez demandée n'existe pas ou a été supprimée !", "Sort": "Trier", "Sort_By": "Trier par", "Sort_by_activity": "Trier par activité", - "Sound": "Alertes sonores", + "Sound": "Son", "Sound_File_mp3": "Fichier audio (mp3)", "SSL": "SSL", "Star": "Mettre en favoris", "Star_Message": "Mettre en favoris", "Starred_Messages": "Messages favoris", - "Start": "Début", + "Start": "Démarrer", "Start_audio_call": "Démarrer un appel audio", "Start_Chat": "Démarrer un chat", "Start_of_conversation": "Début de la conversation", "Start_OTR": "Démarrer une conversation chiffrée (OTR)", "Start_video_call": "Démarrer un appel vidéo", - "Start_video_conference": "Démarrer la vidéoconférence?", + "Start_video_conference": "Démarrer la vidéoconférence ?", "Start_with_s_for_user_or_s_for_channel_Eg_s_or_s": "Débuter avec %s pour l'utilisateur ou %s pour le canal. Ex: %s ou %s", - "start-discussion_description": "Démarrer une conversation", + "start-discussion_description": "Lancer la discussion", "start-discussion-other-user_description": "Démarrer une conversation", + "Started": "Commencé", "Started_a_video_call": "A lancé un appel vidéo", - "Started_At": "Démarré(e) à", + "Started_At": "Commencé à", "Statistics": "Statistiques", "Statistics_reporting": "Envoyer des statistiques à Rocket.Chat", "Statistics_reporting_Description": "En envoyant vos statistiques, vous aider à identifier le nombre d'instances de Rocket.Chat déployées, ainsi que le comportement du système, afin que nous puissions encore l'améliorer. Ne vous inquiétez pas, aucune information utilisateur est envoyée et toutes les informations que nous recevons sont gardées confidentielles.", "Stats_Active_Guests": "Invités activés", - "Stats_Active_Users": "Utilisateurs actifs", + "Stats_Active_Users": "Utilisateurs activés", "Stats_App_Users": "Utilisateurs de l'app Rocket.Chat", "Stats_Avg_Channel_Users": "Nombre moyen d'utilisateurs dans les canaux", "Stats_Avg_Private_Group_Users": "Nombre moyen d'utilisateurs dans les groupes privés", - "Stats_Away_Users": "Utilisateurs indisponibles", + "Stats_Away_Users": "Utilisateurs absents", "Stats_Max_Room_Users": "Nombre maximum d'utilisateurs dans un salon", - "Stats_Non_Active_Users": "Utilisateurs inactifs", + "Stats_Non_Active_Users": "Utilisateurs désactivés", "Stats_Offline_Users": "Utilisateurs hors ligne", "Stats_Online_Users": "Utilisateurs en ligne", "Stats_Total_Active_Apps": "Nombre total d'applications actives", @@ -3035,57 +3664,76 @@ "Stats_Total_Users": "Nombre total d'utilisateurs", "Status": "Statut", "StatusMessage": "Message de statut", + "StatusMessage_Change_Disabled": "Votre administrateur Rocket.Chat a désactivé la modification des messages de statut", "StatusMessage_Changed_Successfully": "Le message de statut a été modifié avec succès.", "StatusMessage_Placeholder": "Que faites-vous en ce moment ?", "StatusMessage_Too_Long": "Message de statut doit être inférieure à 120 caractères.", "Step": "Étape", "Stop_Recording": "Arrêter l'enregistrement", - "Store_Last_Message": "Stocker le dernier message", + "Store_Last_Message": "Enregistrer le dernier message", "Store_Last_Message_Sent_per_Room": "Stocker le dernier message envoyé sur chaque salon.", "Stream_Cast": "Stream Cast", "Stream_Cast_Address": "Adresse Stream Cast", "Stream_Cast_Address_Description": "IP ou hôte de votre Rocket.Chat Central Stream Cast. Par exemple. `192.168.1.1:3000` ou`localhost:4000`", "strike": "barré", + "Style": "Style", "Subject": "Sujet", "Submit": "Envoyer", - "Success": "Réussi", + "Success": "Succès", "Success_message": "Message de succès", + "Successfully_downloaded_file_from_external_URL_should_start_preparing_soon": "Le fichier a bien été téléchargé à partir d'une URL externe, devrait commencer à se préparer bientôt", + "Suggestion_from_recent_messages": "Suggestion de messages récents", "Sunday": "Dimanche", - "Support": "Soutien", + "Support": "Support", + "Support_Cordova_App": "Soutenir l'application Cordova", + "Support_Cordova_App_Alert": "Cette fonctionnalité est obsolète et sera supprimée dans la prochaine version majeure", + "Support_Cordova_App_Description": "Autoriser l'ancienne application mobile, basée sur la technologie Cordova, à accéder au serveur activant CORS pour certaines APIs", "Survey": "Sondage", - "Survey_instructions": "Notez chaque question en fonction de votre satisfaction, 1 signifiant que vous êtes très insatisfait et 5 que vous êtes entièrement satisfait.", + "Survey_instructions": "Evaluez chaque question en fonction de votre satisfaction, 1 signifie que vous êtes complètement insatisfait et 5 que vous êtes complètement satisfait.", "Symbols": "Symboles", + "Sync": "Synchroniser", "Sync / Import": "Synchroniser / importer", "Sync_in_progress": "Synchronisation en cours", + "Sync_Interval": "Intervalle de synchronisation", "Sync_success": "Synchronisation réussie", "Sync_Users": "Synchronisation des utilisateurs", "System_messages": "Messages système", "Tag": "Tag", + "Tag_removed": "Balise supprimée", "Take_it": "Je prends !", + "Target user not allowed to receive messages": "L'utilisateur cible n'est pas autorisé à recevoir des messages", "TargetRoom": "Salon cible", "TargetRoom_Description": "Le salon où seront envoyés les messages résultant du déclenchement de cet événement. Un seul salon cible est autorisé et doit exister.", "Team": "Équipe", "Technology_Provider": "Fournisseur de technologie", "Technology_Services": "Services technologiques", - "Telecom": "Telecom", + "Telecom": "Télécom", + "Terms": "Conditions", "Test_Connection": "Tester la connexion", "Test_Desktop_Notifications": "Tester les notifications de bureau", "Texts": "Textes", "Thank_you_exclamation_mark": "Merci !", - "Thank_you_for_your_feedback": "Merci pour votre retour", + "Thank_you_for_your_feedback": "Merci pour votre avis", "The_application_name_is_required": "Le nom de l'application est requis", "The_channel_name_is_required": "Le nom du canal est obligatoire", "The_emails_are_being_sent": "Les e-mails sont en cours d'envoi.", + "The_empty_room__roomName__will_be_removed_automatically": "Le salon vide __roomName__ sera supprimé automatiquement.", "The_field_is_required": "Le champ %s est requis.", - "The_image_resize_will_not_work_because_we_can_not_detect_ImageMagick_or_GraphicsMagick_installed_in_your_server": "Le redimensionnement d'image ne fonctionnera pas car nous ne pouvons pas détecter d'installation d'ImageMagick ou de GraphicsMagick sur votre serveur.", + "The_image_resize_will_not_work_because_we_can_not_detect_ImageMagick_or_GraphicsMagick_installed_in_your_server": "Le redimensionnement de l'image ne fonctionnera pas car nous ne pouvons pas détecter ImageMagick ou GraphicsMagick installés sur votre serveur.", "The_message_is_a_discussion_you_will_not_be_able_to_recover": "Le message est une discussion dont vous ne pourrez pas récupérer les messages !", "The_mobile_notifications_were_disabled_to_all_users_go_to_Admin_Push_to_enable_the_Push_Gateway_again": "Les notifications mobiles ont été désactivées pour tous les utilisateurs, accédez à \"Admin > Push\" pour réactiver la passerelle Push", + "The_necessary_browser_permissions_for_location_sharing_are_not_granted": "Les autorisations de navigateur nécessaires pour le partage de position ne sont pas accordées", + "The_peer__peer__does_not_exist": "L'homologue __peer__ n'existe pas.", "The_redirectUri_is_required": "L'URI de redirection est requise", + "The_selected_user_is_not_a_monitor": "L'utilisateur sélectionné n'est pas un moniteur", + "The_selected_user_is_not_an_agent": "L'utilisateur sélectionné n'est pas un agent", "The_server_will_restart_in_s_seconds": "Le serveur redémarrera dans %s secondes", "The_setting_s_is_configured_to_s_and_you_are_accessing_from_s": "Le réglage %s est configuré pour %s et vous accédez à partir de %s !", + "The_user_s_will_be_removed_from_role_s": "L'utilisateur %s sera supprimé du rôle %s", "The_user_will_be_removed_from_s": "L'utilisateur sera retiré de %s", "The_user_wont_be_able_to_type_in_s": "L'utilisateur ne pourra pas écrire dans %s", "Theme": "Thème", + "theme-color-attention-color": "Couleur d'attention", "theme-color-component-color": "Couleur du composant", "theme-color-content-background-color": "Couleur d'arrière plan du contenu", "theme-color-custom-scrollbar-color": "Couleur personnalisée de la barre de défilement", @@ -3098,19 +3746,31 @@ "theme-color-primary-font-color": "Couleur de la police principale", "theme-color-rc-color-alert": "Alerte", "theme-color-rc-color-alert-light": "Lumière d'alerte", + "theme-color-rc-color-alert-message-primary": "Message d'alerte principal", + "theme-color-rc-color-alert-message-primary-background": "Contexte principal du message d'alerte", + "theme-color-rc-color-alert-message-secondary": "Message d'alerte secondaire", + "theme-color-rc-color-alert-message-secondary-background": "Contexte secondaire du message d'alerte", + "theme-color-rc-color-alert-message-warning": "Avertissement de message d'alerte", + "theme-color-rc-color-alert-message-warning-background": "Contexte d'avertissement du message d'alerte", + "theme-color-rc-color-announcement-text": "Couleur du texte de l'annonce", + "theme-color-rc-color-announcement-background": "Couleur de l'arrière-plan de l'annonce", + "theme-color-rc-color-announcement-text-hover": "Couleur du survol du texte de l'annonce", + "theme-color-rc-color-announcement-background-hover": "Couleur du survol d'arrière-plan de l'annonce", "theme-color-rc-color-button-primary": "Bouton principal", - "theme-color-rc-color-button-primary-light": "Bouton Lumière primaire", - "theme-color-rc-color-content": "Content", + "theme-color-rc-color-button-primary-light": "Bouton Lumière principale", + "theme-color-rc-color-content": "Contenu", "theme-color-rc-color-error": "Erreur", - "theme-color-rc-color-error-light": "Erreur Light", + "theme-color-rc-color-error-light": "Erreur claire", + "theme-color-rc-color-link-active": "Lien actif", "theme-color-rc-color-primary": "Primaire", - "theme-color-rc-color-primary-dark": "Dark primaire", - "theme-color-rc-color-primary-darkest": "Le plus sombre du primaire", - "theme-color-rc-color-primary-light": "Lumière primaire", - "theme-color-rc-color-primary-light-medium": "Lumière primaire moyenne", - "theme-color-rc-color-primary-lightest": "Primaire le plus léger", + "theme-color-rc-color-primary-background": "Arrière plan principal", + "theme-color-rc-color-primary-dark": "Sombre primaire", + "theme-color-rc-color-primary-darkest": "Le plus sombre primaire", + "theme-color-rc-color-primary-light": "Primaire claire", + "theme-color-rc-color-primary-light-medium": "Clair primaire moyenne", + "theme-color-rc-color-primary-lightest": "Le plus léger primaire", "theme-color-rc-color-success": "Succès", - "theme-color-rc-color-success-light": "Lumière de succès", + "theme-color-rc-color-success-light": "Couleur claire de succès", "theme-color-secondary-action-color": "Couleur de l'action secondaire", "theme-color-secondary-background-color": "Couleur d'arrière plan secondaire", "theme-color-secondary-font-color": "Couleur de police secondaire", @@ -3121,56 +3781,70 @@ "theme-color-status-online": "Couleur du statut \"Connecté\"", "theme-color-success-color": "Couleur de succès", "theme-color-tertiary-font-color": "Couleur de police tertiaire (contenu)", - "theme-color-transparent-dark": "Noir transparent", - "theme-color-transparent-darker": "Plus sombre", - "theme-color-transparent-light": "Lumière transparente", - "theme-color-transparent-lighter": "Briquet transparent", + "theme-color-transparent-dark": "Transparent foncé", + "theme-color-transparent-darker": "Transparent plus foncé", + "theme-color-transparent-light": "Transparent clair", + "theme-color-transparent-lighter": "Transparent plus clair", "theme-color-transparent-lightest": "Transparent le plus clair", - "theme-color-unread-notification-color": "Couleur des notifications non-lues", + "theme-color-unread-notification-color": "Couleur des notifications non lues", "theme-custom-css": "CSS personnalisé", - "theme-font-body-font-family": "Famille de police du body", - "There_are_no_agents_added_to_this_department_yet": "Il n'y a pas d'assistant ajouté à ce département pour le moment.", + "theme-font-body-font-family": "Famille de polices de corps", + "There_are_no_agents_added_to_this_department_yet": "Aucun agent n'a encore été ajouté à ce département.", "There_are_no_applications": "Aucune application oAuth n'a encore été ajoutée.", "There_are_no_applications_installed": "Il n'y a actuellement aucune application Rocket.Chat installée.", + "There_are_no_available_monitors": "Il n'y a pas de moniteurs disponibles", + "There_are_no_departments_added_to_this_tag_yet": "Il n'y a pas encore de département ajouté à ce tag", + "There_are_no_departments_added_to_this_unit_yet": "Il n'y a pas encore de département ajouté à cette unité", + "There_are_no_departments_available": "Il n'y a pas de départements disponibles", "There_are_no_integrations": "Il n'y a aucune intégration", - "There_are_no_personal_access_tokens_created_yet": "Aucun jeton d'accès personnel n'a été créé pour l'instant.", + "There_are_no_monitors_added_to_this_unit_yet": "Aucun moniteur n'a encore été ajouté à cet appareil", + "There_are_no_personal_access_tokens_created_yet": "Aucun jeton d'accès personnel n'a encore été créé.", "There_are_no_users_in_this_role": "Il n'y a aucun utilisateur avec ce rôle.", "There_is_one_or_more_apps_in_an_invalid_state_Click_here_to_review": "Il y a une ou plusieurs applications dans un état non valide. Cliquez ici pour en savoir plus.", + "This_agent_was_already_selected": "Cet agent était déjà sélectionné", "This_conversation_is_already_closed": "Cette conversation a déjà été fermée.", "This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password": "Cette adresse e-mail a déjà été utilisée et n'a pas été vérifiée. Veuillez changer votre mot de passe.", "This_is_a_desktop_notification": "Ceci est une notification sur le bureau.", "This_is_a_push_test_messsage": "Ceci est une notification de test", + "This_message_was_rejected_by__peer__peer": "Ce message a été rejeté par l'homologue __peer__.", + "This_monitor_was_already_selected": "Ce moniteur a déjà été sélectionné", "This_month": "Ce mois-ci", "This_room_has_been_archived_by__username_": "Ce salon a été archivé par __username__", "This_room_has_been_unarchived_by__username_": "Ce salon a été désarchivé par __username__", "This_week": "Cette semaine", "thread": "fil", + "Thread_message": "A commenté le message de * __username__* message : _ __msg__ _", "Threads": "Fils", "Thursday": "Jeudi", "Time_in_seconds": "Temps en secondes", + "Timeout": "Timeout", + "Timeouts": "Timeouts", + "Timezone": "Fuseau horaire", "Title": "Titre", "Title_bar_color": "Couleur de la barre de titre", "Title_bar_color_offline": "Couleur de la barre de titre hors-ligne", "Title_offline": "Titre hors ligne", - "To_additional_emails": "Pour d'autres emails", + "To": "A", + "To_additional_emails": "Vers des e-mails supplémentaires", "To_install_RocketChat_Livechat_in_your_website_copy_paste_this_code_above_the_last_body_tag_on_your_site": "Pour installer le chat en direct Rocket.Chat (Livechat) sur votre site web, copiez-collez ce code au dessus de la dernière balise </body> du site.", "to_see_more_details_on_how_to_integrate": "pour plus de détails sur la façon d'intégrer.", "To_users": "Pour les utilisateurs", "Today": "Aujourd'hui", - "Toggle_original_translated": "Basculer original/traduit", + "Toggle_original_translated": "Basculer l'original / traduit", + "toggle-room-e2e-encryption": "Basculer cryptage E2E de la salle", "Token": "Jeton", "Token_Access": "Accès aux jetons", "Token_Controlled_Access": "Accès contrôlé par jeton", "Token_required": "Jeton requis", - "Tokenpass_Channel_Label": "Chaîne Tokenpass", - "Tokenpass_Channels": "Chaînes Tokenpass", - "Tokens_Minimum_Needed_Balance": "Solde minimum requis", - "Tokens_Minimum_Needed_Balance_Description": "Définir le solde minimum requis sur chaque jeton. Vide ou \"0\" pour ne pas limiter.", - "Tokens_Minimum_Needed_Balance_Placeholder": "Valeur d'équilibre", + "Tokenpass_Channel_Label": "Canal Tokenpass", + "Tokenpass_Channels": "Canaux Tokenpass", + "Tokens_Minimum_Needed_Balance": "Solde de jeton minimum nécessaire", + "Tokens_Minimum_Needed_Balance_Description": "Définissez le solde minimum nécessaire sur chaque jeton. Vide ou \"0\" pour pas de limite.", + "Tokens_Minimum_Needed_Balance_Placeholder": "Valeur du solde", "Tokens_Required": "Jetons requis", "Tokens_Required_Input_Description": "Tapez un ou plusieurs noms d'actifs de jetons séparés par une virgule.", - "Tokens_Required_Input_Error": "Les jetons typés ne sont pas valides.", - "Tokens_Required_Input_Placeholder": "Noms d'actifs de jetons", + "Tokens_Required_Input_Error": "Jetons saisis non valides.", + "Tokens_Required_Input_Placeholder": "Noms des actifs de jetons", "Topic": "Sujet", "Total": "Total", "Total_abandoned_chats": "Nombre total de discussions abandonnées", @@ -3179,11 +3853,18 @@ "Total_messages": "Nombre total de messages", "Total_Threads": "Nombre total de fils", "Total_visitors": "Nombre total de visiteurs", + "TOTP Invalid [totp-invalid]": "Code ou mot de passe invalide", + "TOTP_reset_email": "Notification de réinitialisation TOTP à deux facteurs", + "TOTP_Reset_Other_Key_Warning": "La réinitialisation du TOTP à deux facteurs actuel déconnectera l'utilisateur. L'utilisateur pourra à nouveau définir le deux facteurs plus tard.", "totp-disabled": "Vous n'avez pas activé la connexion 2FA pour votre utilisateur", - "Tourism": "Tourisme", - "Transcript_Enabled": "Demandez aux visiteurs s'ils souhaitent une transcription après la fermeture du chat", - "Transcript_message": "Message à afficher lors de la demande de transcription", + "totp-invalid": "Code ou mot de passe invalide", + "totp-required": "TOTP requis", + "Transcript": "Transcription", + "Transcript_Enabled": "Demander au visiteur s'il souhaite une transcription après la fermeture du chat", + "Transcript_message": "Message à afficher lorsque vous demandez la transcription", "Transcript_of_your_livechat_conversation": "Transcription de votre conversation omnicanal", + "Transcript_Request": "Demande de transcription", + "transfer-livechat-guest": "Transférér les invités Livechat", "Translate": "Traduire", "Translated": "Traduit", "Translations": "Traductions", @@ -3191,25 +3872,40 @@ "Trigger_removed": "Déclencheur supprimé", "Trigger_Words": "Mots déclencheurs", "Triggers": "Déclencheurs", + "Troubleshoot": "Dépanner", "Troubleshoot_Description": "Ces paramètres sont destinés à être activés uniquement avec les conseils de l'équipe de développement ou d'assistance de Rocket.Chat. N'y touchez pas si vous ne savez pas ce que vous faites !", + "Troubleshoot_Disable_Data_Exporter_Processor": "Désactiver le processeur d'exportateur de données", + "Troubleshoot_Disable_Data_Exporter_Processor_Alert": "Ce paramètre arrête le traitement de toutes les demandes d'exportation des utilisateurs, ils ne recevront donc pas le lien pour télécharger leurs données !", + "Troubleshoot_Disable_Instance_Broadcast": "Désactiver la diffusion d'instance", + "Troubleshoot_Disable_Instance_Broadcast_Alert": "Ce paramètre empêche les instances Rocket.Chat d'envoyer des événements aux autres instances, cela peut entraîner des problèmes de synchronisation et un mauvais comportement !", + "Troubleshoot_Disable_Livechat_Activity_Monitor": "Désactiver le moniteur d'activité Livechat", + "Troubleshoot_Disable_Livechat_Activity_Monitor_Alert": "Ce paramètre arrête le traitement des sessions de visiteurs en direct, ce qui empêche les statistiques de fonctionner correctement !", "Troubleshoot_Disable_Notifications": "Désactiver les notifications", - "Troubleshoot_Disable_Workspace_Sync": "Désactiver la synchro. de l'espace de travail", + "Troubleshoot_Disable_Notifications_Alert": "Ce paramètre désactive complètement le système de notifications; les sons, les notifications sur le bureau, les notifications mobiles et les e-mails s'arrêteront !", + "Troubleshoot_Disable_Presence_Broadcast": "Désactiver la diffusion de présence", + "Troubleshoot_Disable_Presence_Broadcast_Alert": "Ce paramètre empêche toutes les instances d'envoyer les changements de statut des utilisateurs à leurs clients en gardant tous les utilisateurs avec leur statut de présence dès le premier chargement !", + "Troubleshoot_Disable_Sessions_Monitor": "Désactiver le moniteur de sessions", + "Troubleshoot_Disable_Sessions_Monitor_Alert": "Ce paramètre arrête le traitement des sessions utilisateur, ce qui empêche les statistiques de fonctionner correctement !", + "Troubleshoot_Disable_Statistics_Generator": "Désactiver le générateur de statistiques", + "Troubleshoot_Disable_Statistics_Generator_Alert": "Ce paramètre arrête le traitement de toutes les statistiques rendant la page d'informations obsolète jusqu'à ce que quelqu'un clique sur le bouton d'actualisation, et peut entraîner d'autres informations manquantes dans le système !", + "Troubleshoot_Disable_Workspace_Sync": "Désactiver la synchronisation de l'espace de travail", + "Troubleshoot_Disable_Workspace_Sync_Alert": "Ce paramètre arrête la synchronisation de ce serveur avec Rocket.Chat cloud et peut entraîner des problèmes avec les licences marketplace et entreprise !", "True": "Vrai", "Tuesday": "Mardi", "Turn_OFF": "Éteindre", "Turn_ON": "Allumer", "Two Factor Authentication": "Authentification à deux facteurs", - "Two-factor_authentication": "Authentification à deux facteurs", + "Two-factor_authentication": "Authentification à deux facteurs via TOTP", "Two-factor_authentication_disabled": "Authentification à deux facteurs désactivée", - "Two-factor_authentication_email": "Authentification à 2 facteurs par e-mail", - "Two-factor_authentication_email_is_currently_disabled": "L'authentification à 2 facteurs par e-mail est actuellement désactiver", + "Two-factor_authentication_email": "Authentification à deux facteurs par e-mail", + "Two-factor_authentication_email_is_currently_disabled": "L'authentification à 2 facteurs par e-mail est actuellement désactivée", "Two-factor_authentication_enabled": "Authentification à deux facteurs activée", - "Two-factor_authentication_is_currently_disabled": "L'authentification à deux facteurs est actuellement désactivée", - "Two-factor_authentication_native_mobile_app_warning": "ATTENTION: Une fois que vous l'aurez activé, vous ne pourrez pas vous connecter sur les applications mobiles natives (Rocket.Chat +) en utilisant votre mot de passe avant d'avoir implémenté le 2FA.", + "Two-factor_authentication_is_currently_disabled": "L'authentification à deux facteurs via TOTP est actuellement désactivée", + "Two-factor_authentication_native_mobile_app_warning": "ATTENTION : Une fois que vous l'aurez activé, vous ne pourrez pas vous connecter aux applications mobiles natives (Rocket.Chat+) en utilisant votre mot de passe tant qu'elles n'auront pas implémenté le 2FA.", "Type": "Type", "Types_and_Distribution": "Types et distribution", "Type_your_email": "Entrez votre e-mail", - "Type_your_job_title": "Tapez votre titre d'emploi", + "Type_your_job_title": "Saisissez le titre de votre poste", "Type_your_message": "Entrez votre message", "Type_your_name": "Entrez votre nom", "Type_your_new_password": "Entrez votre nouveau mot de passe", @@ -3219,64 +3915,66 @@ "UI_Click_Direct_Message": "Cliquer pour commencer une discussion privée", "UI_Click_Direct_Message_Description": "N'ouvrez pas les onglets de profils, allez directement à la discussion", "UI_DisplayRoles": "Afficher les rôles", - "UI_Group_Channels_By_Type": "Grouper les chaînes par type", - "UI_Merge_Channels_Groups": "Fusionner les groupes privés avec canaux", + "UI_Group_Channels_By_Type": "Regrouper les canaux par type", + "UI_Merge_Channels_Groups": "Fusionner des groupes privés avec des canaux", "UI_Show_top_navbar_embedded_layout": "Afficher la barre de navigation supérieure dans la mise en page intégrée", "UI_Unread_Counter_Style": "Style de compteur non lu", "UI_Use_Name_Avatar": "Utiliser les initiales du nom complet pour générer un avatar par défaut", "UI_Use_Real_Name": "Utiliser le vrai nom", - "unable-to-get-file": "Impossible de récupérer le fichier", + "unable-to-get-file": "Impossible d'obtenir le fichier", "Unarchive": "Désarchiver", "unarchive-room": "Désarchiver le salon", - "unarchive-room_description": "Autorisation de désarchiver les chaînes", + "unarchive-room_description": "Autorisation de désarchiver les canaux", "Unavailable": "Indisponible", - "Unblock_User": "Débloquer", + "Unblock_User": "Débloquer l'utilisateur", "Uncheck_All": "Tout décocher", "Uncollapse": "Tout afficher", "Undefined": "Indéfini", "Unfavorite": "Retirer des favoris", "Unfollow_message": "Cesser de suivre le message", - "Unignore": "Unignore", + "Unignore": "Ne pas ignorer", "Uninstall": "Désinstaller", "Unit_removed": "Unité supprimée", - "Unknown_Import_State": "Etat de l'import inconnu", + "Unknown_Import_State": "Etat d'importation inconnu", "Unlimited": "Illimité", "Unmute_someone_in_room": "Rendre la parole à quelqu'un dans ce salon", "Unmute_user": "Rendre la parole", "Unnamed": "Sans nom", "Unpin": "Détacher", "Unpin_Message": "Désépingler ce message", - "unpinning-not-allowed": "Retirer l'épingle n'est pas autorisé", - "Unread": "Non lus", + "unpinning-not-allowed": "Le désépinglage n'est pas autorisé", + "Unread": "Non lu", "Unread_Count": "Nombre non lu", - "Unread_Count_DM": "Nombre non lu pour les messages directs", + "Unread_Count_DM": "Nombre non lus pour les messages privés", "Unread_Messages": "Messages non lus", - "Unread_on_top": "Non lu sur le dessus", + "Unread_on_top": "Non lu en haut", "Unread_Rooms": "Salons contenant des messages non-lus", "Unread_Rooms_Mode": "Mode des salons non-lus", - "Unread_Tray_Icon_Alert": "Alerte dans la barre d'état pour les messages non lus", + "Unread_Tray_Icon_Alert": "Icône d'alerte dans la barre de tâches pour les messages non lus", "Unstar_Message": "Supprimer des favoris", - "Update": "Actualiser", + "Update": "Mettre à jour", "Update_EnableChecker": "Activer la vérification des mises à jour", "Update_EnableChecker_Description": "Vérifie automatiquement les nouvelles mises à jour / messages importants des développeurs Rocket.Chat et reçoit des notifications lorsqu'elles sont disponibles. La notification apparaît une fois par nouvelle version sous forme de bannière cliquable et de message du bot Rocket.Cat, tous deux visibles uniquement pour les administrateurs.", + "Update_every": "Mettre à jour chaque", "Update_LatestAvailableVersion": "Mettre à jour vers la dernière version disponible", "Update_to_version": "Mettre à jour vers __version__", "Update_your_RocketChat": "Mettez à jour votre Rocket.Chat", "Updated_at": "Mis à jour à", "Upload": "Téléverser", - "Upload_app": "Télécharger l'application", + "Upload_app": "Téléverser l'application", "Upload_file_description": "Description du fichier", "Upload_file_name": "Nom du fichier", "Upload_file_question": "Envoyer le fichier ?", "Upload_Folder_Path": "Télécharger le chemin du dossier", - "Upload_From": "Télécharger depuis __name__", - "Upload_user_avatar": "Importer un avatar", + "Upload_From": "Téléverser depuis __name__", + "Upload_user_avatar": "Téléverser un avatar", "Uploading_file": "Envoi du fichier en cours...", "Uptime": "Durée de fonctionnement", "URL": "URL", "URL_room_hash": "Activer le hachage du nom de la salle", + "URL_room_hash_description": "Recommandé d'activer si l'instance Jitsi n'utilise aucun mécanisme d'authentification.", "URL_room_prefix": "Préfixe d'URL de salon", - "URL_room_suffix": "Suffixe d'URL de salon", + "URL_room_suffix": "Suffixe de salon d'URL", "Use_account_preference": "Utiliser les préférences du compte", "Use_Emojis": "Utiliser les émoticônes", "Use_Global_Settings": "Utiliser les paramètres globaux", @@ -3285,26 +3983,29 @@ "Use_Room_configuration": "Ecrase la config. du serveur et utilise la config. de la salle", "Use_Server_configuration": "Utiliser la configuration du serveur", "Use_service_avatar": "Utiliser l'avatar %s", - "Use_this_response": "Utiliser cette réponse", + "Use_this_response": "Utilisez cette réponse", + "Use_response": "Utiliser la réponse", "Use_this_username": "Utilisez ce nom d'utilisateur", "Use_uploaded_avatar": "Utiliser l'avatar envoyé", "Use_url_for_avatar": "Utilisez l'URL pour l'avatar", "Use_User_Preferences_or_Global_Settings": "Utiliser les préférences utilisateur ou les paramètres globaux", "User": "Utilisateur", - "User Search": "Chercher un utilisateur", - "User Search (Group Validation)": "Recherche d'utilisateurs (validation de groupes)", + "User Search": "Recherche d'utilisateurs", + "User Search (Group Validation)": "Recherche d'utilisateurs (validation de groupe)", "User__username__is_now_a_leader_of__room_name_": "Utilisateur __username__ est maintenant un leader de __room_name__", "User__username__is_now_a_moderator_of__room_name_": "L'utilisateur __username__ est désormais un modérateur du salon __room_name__", "User__username__is_now_a_owner_of__room_name_": "L'utilisateur __username__ est désormais un propriétaire du salon __room_name__", - "User__username__removed_from__room_name__leaders": "Utilisateur __username__ retiré de __room_name__ leaders", + "User__username__muted_in_room__roomName__": "L'utilisateur __username__ mis en sourdine dans la salle __roomName__", + "User__username__removed_from__room_name__leaders": "Utilisateur __username__ n'est plus leader de __room_name__", "User__username__removed_from__room_name__moderators": "L'utilisateur __username__ n'est plus modérateur du salon __room_name__.", "User__username__removed_from__room_name__owners": "L'utilisateur __username__ n'est plus propriétaire du salon __room_name__.", + "User__username__unmuted_in_room__roomName__": "L'utilisateur __username__ a retrouvé la parole dans la salle __roomName__", "User_added": "Utilisateur ajouté", "User_added_by": "L'utilisateur __user_added__ a été ajouté par __user_by__.", "User_added_successfully": "Utilisateur ajouté avec succès", "User_and_group_mentions_only": "Mention d'utilisateur et de groupe seulement", "User_created_successfully!": "Utilisateur créé avec succès !", - "User_default": "Utilisateur par défaut", + "User_default": "Par défaut de l'utilisateur", "User_doesnt_exist": "Aucun utilisateur n'existe sous le nom `@%s`.", "User_e2e_key_was_reset": "La clé E2E de l'utilisateur a été réinitialisée avec succès.", "User_has_been_activated": "L'utilisateur a été activé", @@ -3335,36 +4036,36 @@ "User_not_found": "Utilisateur introuvable", "User_not_found_or_incorrect_password": "Utilisateur introuvable ou mot de passe incorrect", "User_or_channel_name": "Nom d'utilisateur ou de canal", - "User_Presence": "Présence de l'utilisateur", - "User_removed": "Utilisateur ejecté", + "User_Presence": "Présence 'utilisateur", + "User_removed": "Utilisateur supprimé", "User_removed_by": "L'utilisateur __user_removed__ a été retiré par __user_by__.", "User_sent_a_message_on_channel": "__username__ a envoyé un message sur __channel__", "User_sent_a_message_to_you": "__username__ vous a envoyé un message", "user_sent_an_attachment": "__user__ a envoyé une pièce jointe", "User_Settings": "Paramètres utilisateur", - "User_started_a_new_conversation": "__username__ a démarré une nouvelle conversation", + "User_started_a_new_conversation": "__username__ a commencé une nouvelle conversation", "User_unmuted_by": "L'utilisateur __user_by__ a rendu la parole à __user_unmuted__.", "User_unmuted_in_room": "L'utilisateur a retrouvé la parole dans ce salon", "User_updated_successfully": "Utilisateur mis à jour avec succès", - "User_uploaded_a_file_on_channel": "__username__ a importé un fichier sur __channel__", + "User_uploaded_a_file_on_channel": "__username__ a téléversé un fichier sur __channel__", "User_uploaded_a_file_to_you": "__username__ vous a envoyé un fichier", - "User_uploaded_file": "Téléchargé un fichier", - "User_uploaded_image": "Téléchargé une image", - "user-generate-access-token": "Utilisateur Générer un jeton d'accès", + "User_uploaded_file": "A téléversé un fichier", + "User_uploaded_image": "A téléversé une image", + "user-generate-access-token": "L'utilisateur génère un jeton d'accès", "user-generate-access-token_description": "Autorisation pour les utilisateurs de générer des jetons d'accès", "UserData_EnableDownload": "Activer le téléchargement des données utilisateur", - "UserData_FileSystemPath": "Chemin du système (fichiers exportés)", + "UserData_FileSystemPath": "Chemin système (fichiers exportés)", "UserData_FileSystemZipPath": "Chemin système (fichier compressé)", - "UserData_MessageLimitPerRequest": "Limite de message par demande", + "UserData_MessageLimitPerRequest": "Limite de messages par demande", "UserData_ProcessingFrequency": "Fréquence de traitement (minutes)", "UserDataDownload": "Téléchargement des données utilisateur", "UserDataDownload_CompletedRequestExisted_Text": "Votre fichier de données a déjà été généré. Vérifiez votre compte de messagerie pour le lien de téléchargement.", "UserDataDownload_CompletedRequestExistedWithLink_Text": "Votre fichier de données à déjà été généré. Cliquez ici pour le télécharger.", - "UserDataDownload_EmailBody": "Votre fichier de données est maintenant prêt à être téléchargé. Cliquez sur icipour le télécharger.", - "UserDataDownload_EmailSubject": "Votre fichier de données est prêt à télécharger", + "UserDataDownload_EmailBody": "Votre fichier de données est maintenant prêt à être téléchargé. Cliquez icipour le télécharger.", + "UserDataDownload_EmailSubject": "Votre fichier de données est prêt à être téléchargé", "UserDataDownload_Requested": "Télécharger le fichier demandé", - "UserDataDownload_Requested_Text": "Votre fichier de données sera généré. Un lien pour le télécharger sera envoyé à votre adresse e-mail lorsque vous êtes prêt. Il y a __pending_operations__ opérations en attente avant la votre.", - "UserDataDownload_RequestExisted_Text": "Votre fichier de données est déjà en cours de génération. Un lien pour le télécharger sera envoyé à votre adresse e-mail lorsque vous êtes prêt. Il y a __pending_operations__ en attente avant la votre.", + "UserDataDownload_Requested_Text": "Votre fichier de données sera généré. Un lien pour le télécharger sera envoyé à votre adresse e-mail lorsque ce sera prêt. Il y a __pending_operations__ opérations en file d'attente avant la vôtre.", + "UserDataDownload_RequestExisted_Text": "Votre fichier de données est déjà en cours de génération. Un lien pour le télécharger sera envoyé à votre adresse e-mail lorsque vous êtes prêt. Il y a __pending_operations__ en attente avant la vôtre.", "Username": "Nom d'utilisateur", "Username_already_exist": "Ce nom d'utilisateur existe déjà. Veuillez essayer un autre nom d'utilisateur.", "Username_and_message_must_not_be_empty": "Le nom d'utilisateur et le message ne peuvent pas être vides.", @@ -3377,119 +4078,139 @@ "Username_invalid": "%s n'est pas un nom d'utilisateur valide, utilisez uniquement des lettres, des chiffres, des points et des tirets (milieu et bas)", "Username_is_already_in_here": "`@%s` est déjà présent.", "Username_is_not_in_this_room": "L'utilisateur `#%s` n'est pas dans ce salon.", - "Username_Placeholder": "S'il vous plaît entrer les noms d'utilisateur ...", + "Username_Placeholder": "Veuillez entrer les noms d'utilisateur...", "Username_title": "Enregistrer un nom d'utilisateur", "Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ veut démarrer une conversation chiffrée (OTR). Voulez-vous accepter ?", "Users": "Utilisateurs", "Users must use Two Factor Authentication": "Les utilisateurs doivent utiliser l'authentification à deux facteurs", "Users_added": "Les utilisateurs ont été ajoutés", "Users_and_rooms": "Utilisateurs et salles", + "Users_by_time_of_day": "Utilisateurs par heure de la journée", "Users_in_role": "Utilisateurs ayant ce rôle", + "Users_key_has_been_reset": "La clé de l'utilisateur a été réinitialisée", + "Users_reacted": "Utilisateurs qui ont réagi", + "Users_TOTP_has_been_reset": "Le TOTP de l'utilisateur a été réinitialisé", "Uses": "Utilisations", "Uses_left": "Utilisations restantes", + "Utilities": "Services publics", "UTF8_Names_Slugify": "Utiliser un slug (texte court) pour les noms UTF-8", - "UTF8_Names_Validation": "Validation UTF8 des Noms", + "UTF8_Names_Validation": "Validation des nomsm UTF8", "UTF8_Names_Validation_Description": "Expression régulière utilisée pour valider les noms des utilisateurs et des canaux", "Validate_email_address": "Valider l'adresse e-mail", + "Validation": "Validation", "Value_messages": "__value__ messages", + "Value_users": "__value__ utilisateurs", "Verification": "Vérification", "Verification_Description": "Vous pouvez utiliser les espaces réservés suivants : [Verification_Url] pour l'URL de vérification.[nom], [fname], [lname] pour le nom complet, le prénom ou le nom de famille de l'utilisateur, respectivement.[email] pour l'adresse e-mail de l'utilisateur.[Site_Name] et [Site_URL] pour le nom de l'application et l'URL, respectivement.", - "Verification_Email": "Cliquez ici pour vérifier votre compte.", + "Verification_Email": "Cliquez ici pour vérifier votre adresse mail.", "Verification_email_body": "Vous avez créé un compte avec succès sur [Site_Name]. Cliquez sur le bouton ci-dessous pour confirmer votre adresse e-mail et terminer votre inscription.", "Verification_email_sent": "E-mail de vérification envoyé", "Verification_Email_Subject": "[Site_Name] - Vérification de l'adresse e-mail", - "Verified": "Vérifié(e)", + "Verified": "Vérifié", "Verify": "Vérifier", "Verify_your_email": "Vérifiez votre e-mail", + "Verify_your_email_for_the_code_we_sent": "Vérifiez votre e-mail pour le code que nous avons envoyé", "Version": "Version", - "Video Conference": "Vidéo Conférence", + "Version_version": "Version __version__", + "Video Conference": "Conférence vidéo", "Video_Chat_Window": "Video Chat", - "Video_Conference": "Vidéo Conférence", + "Video_Conference": "Conférence vidéo", "Video_message": "Message vidéo", - "Videocall_declined": "Appel vidéo refusé", + "Videocall_declined": "Appel vidéo refusé.", "Videocall_enabled": "Appel vidéo activé", "Videos": "Vidéos", - "View_All": "Voir tous", + "View_All": "Voir tous les membres", "View_Logs": "Voir les logs (journaux)", "View_mode": "Mode d'affichage", + "View_original": "Voir l'original", "View_the_Logs_for": "Afficher les journaux pour : \"__name__\"", - "view-broadcast-member-list": "Voir la liste des membres dans la salle de diffusion", - "view-c-room": "Afficher la chaîne publique", - "view-c-room_description": "Autorisation d'afficher les chaînes publiques", + "view-broadcast-member-list": "Afficher la liste des membres dans la salle de diffusion", + "view-c-room": "Voir le canal public", + "view-c-room_description": "Autorisation de voir les canaux publics", "view-canned-responses": "Voir les modèles de réponse", "view-d-room": "Afficher les messages directs", - "view-d-room_description": "Permission de voir les messages directs", - "view-full-other-user-info": "Afficher les autres informations sur l'utilisateur", - "view-full-other-user-info_description": "Permission d'afficher le profil complet des autres utilisateurs, y compris la date de création du compte, la dernière connexion, etc.", + "view-d-room_description": "Autorisation d'afficher les messages directs", + "view-full-other-user-info": "Voir toutes les autres informations utilisateur", + "view-full-other-user-info_description": "Autorisation d'afficher le profil complet des autres utilisateurs, y compris la date de création du compte, la dernière connexion, etc.", "view-history": "Voir l'historique", - "view-history_description": "Permission d'afficher l'historique des canaux", - "view-join-code": "Voir le code d'inscription", - "view-join-code_description": "Permission d'afficher le code de jointure de canal", + "view-history_description": "Autorisation de consulter l'historique du canal", + "view-join-code": "Afficher le code d'inscription", + "view-join-code_description": "Autorisation d'afficher le code de participation au canal", "view-joined-room": "Voir le salon rejoint", - "view-joined-room_description": "Permission d'afficher les chaînes actuellement jointes", + "view-joined-room_description": "Autorisation d'afficher les canaux actuellement joints", "view-l-room": "Voir les salons omnicanaux", "view-l-room_description": "Autorisation de voir les salons omnicanaux", "view-livechat-analytics": "Afficher l'analyse omnicanal", "view-livechat-departments": "Voir les départements omnicanaux", "view-livechat-manager": "Voir le gestionnaire omnicanal", "view-livechat-manager_description": "Autorisation de voir les autres gestionnaires omnicanaux", + "view-livechat-monitor": "Voir les moniteurs de chat en direct", "view-livechat-queue": "Afficher la file d'attente omnicanale", "view-livechat-room-closed-by-another-agent": "Afficher les salles omnicanales fermées par un autre agent", "view-livechat-room-closed-same-department": "Afficher les salles omnicanales fermées par un autre agent du même département", "view-livechat-rooms": "Voir les salons omnicanaux", "view-livechat-rooms_description": "Autorisation d'afficher d'autres salons omnicanaux", + "view-livechat-unit": "Voir les unités de chat en direct", "view-logs": "Voir les logs (journaux)", "view-logs_description": "Autorisation d'afficher les journaux du serveur", - "view-other-user-channels": "Afficher d'autres canaux utilisateur", - "view-other-user-channels_description": "Autorisation d'afficher les chaînes appartenant à d'autres utilisateurs", - "view-outside-room": "Voir la pièce extérieure", + "view-other-user-channels": "Afficher les autres canaux utilisateur", + "view-other-user-channels_description": "Autorisation d'afficher les canaux appartenant à d'autres utilisateurs", + "view-outside-room": "Vue extérieure du salon", + "view-outside-room_description": "Autorisation de voir les utilisateurs en dehors de la salle actuelle", "view-p-room": "Voir le salon privé", - "view-p-room_description": "Permission d'afficher les chaînes privées", + "view-p-room_description": "Autorisation de voir les canaux privés", "view-privileged-setting": "Afficher le paramètre privilégié", - "view-privileged-setting_description": "Autorisation d'affichage des paramètres", + "view-privileged-setting_description": "Autorisation d'afficher les paramètres", "view-room-administration": "Voir l'administration du salon", - "view-room-administration_description": "Autorisation d'afficher les statistiques de messages publics, privés et directs. N'inclut pas la possibilité d'afficher des conversations ou des archives", + "view-room-administration_description": "Autorisation de consulter les statistiques des messages publics, privés et directs. N'inclut pas la possibilité d'afficher des conversations ou des archives", "view-statistics": "Voir les statistiques", - "view-statistics_description": "Autorisation d'afficher les statistiques système, telles que le nombre d'utilisateurs connectés, le nombre de chambres, les informations sur le système d'exploitation", - "view-user-administration": "Afficher l'administration des utilisateurs", - "view-user-administration_description": "Autorisation d'affichage partielle, en lecture seule, d'autres comptes d'utilisateurs actuellement connectés au système. Aucune information de compte d'utilisateur n'est accessible avec cette permission", + "view-statistics_description": "Autorisation d'afficher les statistiques du système, telles que le nombre d'utilisateurs connectés, le nombre de salons, les informations du système d'exploitation", + "view-user-administration": "Voir l'administration des utilisateurs", + "view-user-administration_description": "Autorisation d'une vue partielle, en lecture seule de la liste des autres comptes utilisateurs actuellement connectés au système. Aucune information de compte utilisateur n'est accessible avec cette autorisation", "Viewing_room_administration": "Accès à la gestion des salons", "Visibility": "Visibilité", "Visible": "Visible", + "Visit_Site_Url_and_try_the_best_open_source_chat_solution_available_today": "Visitez __Site_URL__ et essayez la meilleure solution de chat open source disponible aujourd'hui !", "Visitor": "Visiteur", + "Visitor_Email": "E-mail du visiteur", "Visitor_Info": "Informations sur le visiteur", + "Visitor_message": "Messages des visiteurs", "Visitor_Name": "Nom du visiteur", "Visitor_Name_Placeholder": "Veuillez saisir un nom de visiteur...", - "Visitor_Navigation": "Navigation visiteur", + "Visitor_Navigation": "Navigation des visiteur", "Visitor_page_URL": "Page d'accueil du visiteur (URL)", "Visitor_time_on_site": "Temps des visiteurs sur le site", "Wait_activation_warning": "Avant de pouvoir vous connecter, votre compte doit être activé manuellement par un administrateur.", "Waiting_queue": "File d'attente", "Waiting_queue_message": "Message de file d'attente", + "Waiting_queue_message_description": "Message qui sera affiché aux visiteurs lorsqu'ils seront dans la file d'attente", "Warning": "Avertissement", "Warnings": "Avertissements", + "WAU_value": "WAU __value__", + "We_appreciate_your_feedback": "Nous apprécions vos commentaires", "We_are_offline_Sorry_for_the_inconvenience": "Nous sommes hors ligne. Désolé pour le désagrément.", "We_have_sent_password_email": "Nous vous avons envoyé un e-mail avec des instructions pour réinitialiser votre mot de passe. Si vous ne le recevez pas dans quelques minutes, veuillez réessayer.", "We_have_sent_registration_email": "Nous vous avons envoyé un e-mail afin que vous confirmiez votre inscription. Si vous ne le recevez pas dans quelques minutes, veuillez réessayer.", "Webdav Integration": "Intégration WebDAV", "WebDAV_Accounts": "Comptes WebDAV", "Webdav_add_new_account": "Ajouter un nouveau compte WebDAV", - "Webdav_Integration_Enabled": "Intégration Webdav activée", + "Webdav_Integration_Enabled": "Intégration WebDAV activée", "Webdav_Password": "Mot de passe WebDAV", "Webdav_Server_URL": "URL d'accès au serveur WebDAV", "Webdav_Username": "Nom d'utilisateur WebDAV", "webdav-account-saved": "Compte WebDAV enregistré", + "webdav-account-updated": "Compte WebDAV mis à jour", "Webhook_Details": "Détails du WebHook", "Webhook_URL": "Webhook URL", "Webhooks": "Webhooks", - "WebRTC_direct_audio_call_from_%s": "Appel audio direct depuis %s", - "WebRTC_direct_video_call_from_%s": "Appel vidéo direct depuis %s", + "WebRTC_direct_audio_call_from_%s": "Appel audio direct de %s", + "WebRTC_direct_video_call_from_%s": "Appel vidéo direct de %s", "WebRTC_Enable_Channel": "Activer pour les canaux publics", "WebRTC_Enable_Direct": "Activer pour les messages privés", "WebRTC_Enable_Private": "Activer pour les groupes privés", - "WebRTC_group_audio_call_from_%s": "Appel audio de groupe à partir de %s", - "WebRTC_group_video_call_from_%s": "Appel vidéo de groupe à partir de %s", - "WebRTC_monitor_call_from_%s": "Surveiller l'appel de %s", + "WebRTC_group_audio_call_from_%s": "Appel audio de groupe de %s", + "WebRTC_group_video_call_from_%s": "Appel vidéo de groupe de %s", + "WebRTC_monitor_call_from_%s": "Surveiller l'appel de %s", "WebRTC_Servers": "Serveurs STUN/TURN", "WebRTC_Servers_Description": "Une liste de serveurs STUN et TURN séparés par une virgule. Vous pouvez utiliser utilisateur, mot de passe et port selon le format `utilisateur:motdepasse@stun:hôte:port` ou `utilisateur:motdepasse@turn:hôte:port`.", "Website": "Site Internet", @@ -3498,36 +4219,42 @@ "Welcome": "Bienvenue %s.", "Welcome_to": "Bienvenue sur __Site_Name__", "Welcome_to_the": "Bienvenue sur", + "When": "Quand", + "When_a_line_starts_with_one_of_there_words_post_to_the_URLs_below": "Lorsqu'une ligne commence par l'un de ces mots, postez sur la ou les URL ci-dessous", + "When_is_the_chat_busier?": "Quand le chat est-il plus occupé ?", + "Where_are_the_messages_being_sent?": "Où les messages sont-ils envoyés ?", + "Why_did_you_chose__score__": "Pourquoi avez-vous choisi __score__ ?", "Why_do_you_want_to_report_question_mark": "Pourquoi voulez-vous le signaler ?", + "Will_Appear_In_From": "Apparaître dans l'en-tête De : des e-mails que vous envoyez.", "will_be_able_to": "sera capable de", - "Will_be_available_here_after_saving": "Sera disponible ici après la sauvegarde.", + "Will_be_available_here_after_saving": "Sera disponible ici après l'enregistrement.", "Without_priority": "Sans priorité", - "Worldwide": "Echelle mondiale", - "Would_you_like_to_return_the_inquiry": "Voulez-vous retourner le dossier ?", + "Worldwide": "A l'échelle mondiale", + "Would_you_like_to_return_the_inquiry": "Souhaitez-vous retourner la demande ?", "Yes": "Oui", - "Yes_archive_it": "Oui, archive le !", - "Yes_clear_all": "Oui, marque tout comme lu !", - "Yes_deactivate_it": "Oui, désactiver !", - "Yes_delete_it": "Oui, supprime le !", - "Yes_hide_it": "Oui, masque le !", - "Yes_leave_it": "Oui, je veux partir !", + "Yes_archive_it": "Oui, archivez-le !", + "Yes_clear_all": "Oui, effacez tout !", + "Yes_deactivate_it": "Oui, désactivez-le !", + "Yes_delete_it": "Oui, supprimez-le !", + "Yes_hide_it": "Oui, cachez-le !", + "Yes_leave_it": "Oui, laissez-le !", "Yes_mute_user": "Oui, rend muet l'utilisateur !", - "Yes_prune_them": "Oui, élaguer !", - "Yes_remove_user": "Oui, éjecte l'utilisateur !", - "Yes_unarchive_it": "Oui, désarchive le !", + "Yes_prune_them": "Oui, élaguez-les !", + "Yes_remove_user": "Oui, supprimez l'utilisateur !", + "Yes_unarchive_it": "Oui, désarchivez-le !", "yesterday": "hier", "Yesterday": "Hier", "You": "Vous", "you_are_in_preview_mode_of": "Vous êtes en mode aperçu du canal #__room_name__", - "you_are_in_preview_mode_of_incoming_livechat": "Vous êtes en mode aperçu pour ce chat", + "you_are_in_preview_mode_of_incoming_livechat": "Vous êtes en mode aperçu de ce chat", "You_are_logged_in_as": "Vous êtes connecté en tant que", "You_are_not_authorized_to_view_this_page": "Vous n'avez pas l'autorisation de voir cette page.", "You_can_change_a_different_avatar_too": "Vous pouvez écraser l'avatar utilisé pour publier depuis cette intégration.", "You_can_close_this_window_now": "Vous pouvez maintenant fermer cette fenêtre.", "You_can_search_using_RegExp_eg": "Vous pouvez rechercher en utilisant une expression régulière. par exemple /^text$/i", - "You_can_use_an_emoji_as_avatar": "Vous pouvez également utiliser une émoticone comme avatar.", + "You_can_use_an_emoji_as_avatar": "Vous pouvez également utiliser un emoji comme avatar.", "You_can_use_webhooks_to_easily_integrate_livechat_with_your_CRM": "Vous pouvez utiliser les webhooks pour intégrer l'omnicanal facilement avec votre CRM.", - "You_cant_leave_a_livechat_room_Please_use_the_close_button": "Vous ne pouvez pas un salon omnicanal. Veuillez utiliser le bouton de fermeture.", + "You_cant_leave_a_livechat_room_Please_use_the_close_button": "Vous ne pouvez pas quitter un salon omnicanal. Veuillez utiliser le bouton de fermeture.", "You_have_a_new_message": "Vous avez un nouveau message", "You_have_been_muted": "Vous avez été rendu muet et ne pouvez donc pas parler dans ce salon", "You_have_n_codes_remaining": "Vous avez __number__ codes restants.", @@ -3545,12 +4272,15 @@ "You_reached_the_maximum_number_of_guest_users_allowed_by_your_license": "Vous avez atteint le nombre maximum d'invités autorisés par votre licence.", "You_should_inform_one_url_at_least": "Vous devez définir au moins une URL.", "You_should_name_it_to_easily_manage_your_integrations": "Vous devriez le nommer pour gérer facilement vos intégrations.", + "You_will_be_asked_for_permissions": "Des autorisations vous seront demandées", "You_will_not_be_able_to_recover": "Vous ne serez pas en mesure de récupérer ce message !", + "You_will_not_be_able_to_recover_email_inbox": "Vous ne pourrez plus récupérer cette boîte mail", "You_will_not_be_able_to_recover_file": "Vous ne pourrez plus récupérer ce fichier !", "You_wont_receive_email_notifications_because_you_have_not_verified_your_email": "Vous ne recevrez pas les notifications par e-mail car vous n'avez pas vérifié votre adresse e-mail.", + "Your_e2e_key_has_been_reset": "Votre clé e2e a été réinitialisée.", "Your_email_address_has_changed": "Votre adresse e-mail a bien été changée.", "Your_email_has_been_queued_for_sending": "Votre e-mail a été placé dans la boîte d'envoi", - "Your_entry_has_been_deleted": "Ce message a été supprimé.", + "Your_entry_has_been_deleted": "Votre entrée a été supprimée.", "Your_file_has_been_deleted": "Votre fichier a été supprimé.", "Your_invite_link_will_expire_after__usesLeft__uses": "Votre lien d'invitation expirera après __usesLeft__ utilisations.", "Your_invite_link_will_expire_on__date__": "Votre lien d'invitation expirera le __date__.", @@ -3561,10 +4291,11 @@ "your_message_optional": "votre message (optionnel)", "Your_new_email_is_email": "Votre nouvelle adresse mail est [email].", "Your_password_is_wrong": "Votre mot de passe est incorrect !", - "Your_password_was_changed_by_an_admin": "Votre mot de passe a été changé par un administrator.", + "Your_password_was_changed_by_an_admin": "Votre mot de passe a été changé par un administrateur.", "Your_push_was_sent_to_s_devices": "Votre notification a été envoyée à %s appareils", "Your_question": "Votre question", "Your_server_link": "Le lien de votre serveur", "Your_temporary_password_is_password": "Votre mot de passe temporaire est [password].", + "Your_TOTP_has_been_reset": "Votre TOTP a deux facteurs a été réinitialisé.", "Your_workspace_is_ready": "Votre espace de travail est prêt à l'emploi 🎉" } \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/he.i18n.json b/packages/rocketchat-i18n/i18n/he.i18n.json index dc9122959bbd..65e1845219c3 100644 --- a/packages/rocketchat-i18n/i18n/he.i18n.json +++ b/packages/rocketchat-i18n/i18n/he.i18n.json @@ -120,6 +120,7 @@ "Accounts_UseDNSDomainCheck": "הסימון השתמש דומיין DNS", "Accounts_UserAddedEmailSubject_Default": "נוספת ל[Site_Name]", "Activate": "הפעל", + "Active": "פָּעִיל", "Activity": "פעילות", "Add": "הוספה", "Add_agent": "הוספת סוכן", @@ -604,6 +605,7 @@ "FileUpload_S3_CDN": "תחום CDN עבור הורדות", "FileUpload_S3_Region": "אזור", "FileUpload_Storage_Type": "סוג האחסון", + "Filters": "מסננים", "Flags": "דגלים", "Follow_social_profiles": "ניתן לעקוב אחר הפרופילים שלנו ברשתות החברתיות, לעשות fork למיזם שלנו ב־github ושתף את המחשבות שלך על אפליקציית rocket.chat בלוח trello שלנו.", "Food_and_Drink": "אוכל שתייה", @@ -649,6 +651,7 @@ "Highlights_How_To": "כדי לקבל הודעה כאשר מישהו מזכיר את המילה או הביטוי, להוסיף אותו כאן. ניתן להפריד מילים או ביטויים עם פסיקים. מילות דגש אינן תלויות-רישיות.", "Highlights_List": "מילות דגש", "History": "היסטוריה", + "Home": "בית", "Host": "מארח", "hours": "שעות", "Hours": "שעות", diff --git a/packages/rocketchat-i18n/i18n/hi-IN.i18n.json b/packages/rocketchat-i18n/i18n/hi-IN.i18n.json index caa5e6504d4e..29d2f0a661e1 100644 --- a/packages/rocketchat-i18n/i18n/hi-IN.i18n.json +++ b/packages/rocketchat-i18n/i18n/hi-IN.i18n.json @@ -176,6 +176,8 @@ "Email_Notification_Mode_Disabled": "उपयोग करने की अनुमति नहीं है", "Enable": "सक्षम करें", "Enabled": "सक्रिय", + "Filters": "फिल्टर", + "Home": "होम", "How_friendly_was_the_chat_agent": "चैट एजेंट कितना दोस्ताना था?", "How_knowledgeable_was_the_chat_agent": "चैट एजेंट कितना जानकार था?", "How_responsive_was_the_chat_agent": "चैट एजेंट कितना उत्तरदायी था?", diff --git a/packages/rocketchat-i18n/i18n/hr.i18n.json b/packages/rocketchat-i18n/i18n/hr.i18n.json index ea6638dd0552..4ebccd041886 100644 --- a/packages/rocketchat-i18n/i18n/hr.i18n.json +++ b/packages/rocketchat-i18n/i18n/hr.i18n.json @@ -197,6 +197,7 @@ "Accounts_UserAddedEmail_Description": "Možete koristiti sljedeće oznake: [name], [fname], [lname] za korisničko ime, ime, te prezime. [email] za email korisnika. [password] korisnikovu lozinku. [Site_Name] i [Site_URL] za ime i URL stranice. ", "Accounts_UserAddedEmailSubject_Default": "Dodani ste na [Site_Name]", "Activate": "Aktiviraj", + "Active": "Aktivno", "Activity": "Aktivnost", "Add": "Dodaj", "Add_agent": "Dodaj agenta", @@ -229,7 +230,6 @@ "Admin_Info": "Informacije o administratoru", "Administration": "Administracija", "Adult_images_are_not_allowed": "Slike za odrasle nisu dopuštene", - "Advocacy": "advokatura", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Nakon OAuth2 autentifikacije korisnici će biti preusmjereni na ovaj URL", "Agent": "Agent", "Agent_added": "Agent je dodan", @@ -631,7 +631,6 @@ "Connection_Closed": "Veza je zatvorena", "Connection_Reset": "Ponovno postavljanje veze", "Consulting": "savjetodavni", - "Consumer_Goods": "Potrošačka dobra", "Contact": "Kontakt", "Contains_Security_Fixes": "Sadrži sigurnosne popravke", "Content": "Sadržaj", @@ -1329,6 +1328,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Putem mape WebDAV u koju bi se datoteke trebale prenijeti", "FileUpload_Webdav_Username": "WebDAV korisničko ime", "Filter": "Filter", + "Filters": "Filteri", "Financial_Services": "Financijske usluge", "First_Channel_After_Login": "Prvi kanal nakon prijave", "Flags": "Flags", @@ -1396,8 +1396,6 @@ "Hash": "Hash", "Header": "Zaglavlje", "Header_and_Footer": "Zaglavlje i podnožje", - "Healthcare_and_Pharmaceutical": "Zdravstvene / Farmaceutska", - "Help_Center": "Centar za pomoć", "Helpers": "pomagači", "Hex_Color_Preview": "Pregled Hex Boja", "Hidden": "Skriveno", @@ -1417,6 +1415,7 @@ "Highlights_How_To": "Kako bi bili obaviješteni kada netko spomene neku riječ i li frazu, dodajte ju ovdje. Riječi i fraze odvojite zarezima. Ne ovisi kapitalizaciji.", "Highlights_List": "Označite riječi", "History": "Povijest", + "Home": "Dom", "Host": "Domaćin", "hours": "sati", "Hours": "Sati", @@ -2177,7 +2176,6 @@ "Public": "Javni", "Public_Channel": "Javni kanal", "Public_Community": "Javna zajednica", - "Public_Relations": "Odnosi s javnošću", "Push": "Push obavijesti", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2677,7 +2675,6 @@ "Tokens_Required_Input_Placeholder": "Imena naziva žetona", "Topic": "Tema", "Total_messages": "Ukupno poruka", - "Tourism": "Turizam", "Transcript_Enabled": "Pitaj posjetitelja bi li htio transkript nakon što je chat zatvoren", "Transcript_message": "Poruka koja će biti prikazana kad korisnik zatraži transkript", "Transcript_of_your_livechat_conversation": "Transkript tvog razgovora", diff --git a/packages/rocketchat-i18n/i18n/hu.i18n.json b/packages/rocketchat-i18n/i18n/hu.i18n.json index a3dd22940d18..651d9a290d56 100644 --- a/packages/rocketchat-i18n/i18n/hu.i18n.json +++ b/packages/rocketchat-i18n/i18n/hu.i18n.json @@ -226,6 +226,7 @@ "Accounts_UserAddedEmailSubject_Default": "Hozzá lett adva a(z) [Site_Name] alkalmazáshoz", "Action_required": "Beavatkozás szükséges", "Activate": "Aktiválás", + "Active": "Aktív", "Active_users": "Aktív felhasználók", "Activity": "Tevékenység", "Add": "Hozzáadás", @@ -262,7 +263,6 @@ "Admin_Info": "Adminisztrátor információk", "Administration": "Adminisztráció", "Adult_images_are_not_allowed": "Felnőtt tartalmú képek nem engedélyezettek", - "Advocacy": "Képviselet", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Az OAuth2 hitelesítés után a felhasználók át lesznek irányítva egy ezen a listán lévő URL-re. Soronként egy URL-t adhat hozzá.", "Agent": "Ügyintéző", "Agent_added": "Ügyintéző hozzáadva", @@ -731,7 +731,6 @@ "Connection_Reset": "Kapcsolat visszaállítása", "Connectivity_Services": "Kapcsolódási szolgáltatások", "Consulting": "Tanácsadó", - "Consumer_Goods": "Fogyasztási cikkek", "Contact": "Kapcsolat", "Contains_Security_Fixes": "Biztonsági javításokat tartalmaz", "Content": "Tartalom", @@ -1551,8 +1550,6 @@ "Hash": "hash", "Header": "Fejléc", "Header_and_Footer": "Fejléc és lábléc", - "Healthcare_and_Pharmaceutical": "Egészségügy / Gyógyszeripar", - "Help_Center": "Segítség Központ", "Helpers": "Segítők", "Hex_Color_Preview": "Hex színek elölnézet", "Hi": "Szia", @@ -2458,7 +2455,6 @@ "Public": "Nyilvános", "Public_Channel": "Nyilvános csatorna", "Public_Community": "Nyilvános közösség", - "Public_Relations": "Közkapcsolatok", "Purchase_for_free": "Vedd meg INGYEN", "Purchase_for_price": "Vedd", "Purchased": "Megvásárolt", @@ -3065,7 +3061,6 @@ "Total_messages": "Összes üzenet", "Total_Threads": "Összes téma", "Total_visitors": "Össze látogató", - "Tourism": "Idegenforgalom", "Transcript_Enabled": "Kérdezd meg a látogatót, hogy szeretne-e egy átiratát lezárt csevegés után", "Transcript_message": "Üzenet a mutatóhoz, amikor a transzkriptről kérdez", "Transcript_of_your_livechat_conversation": "Az élő chat-beszélgetés átiratai.", diff --git a/packages/rocketchat-i18n/i18n/id.i18n.json b/packages/rocketchat-i18n/i18n/id.i18n.json index a1af05bb2bdf..cdf918524ac4 100644 --- a/packages/rocketchat-i18n/i18n/id.i18n.json +++ b/packages/rocketchat-i18n/i18n/id.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Anda dapat menggunakan placeholder berikut: [Nama], [fname], [lname] untuk nama pengguna penuh, nama depan atau nama belakang, masing-masing. [email] untuk email pengguna. [password] untuk password pengguna. [Site_Name] dan [Site_URL] untuk Nama Aplikasi dan URL masing-masing. ", "Accounts_UserAddedEmailSubject_Default": "Anda telah ditambahkan ke [Site_Name]", "Activate": "Aktifkan", + "Active": "Aktif", "Activity": "Aktivitas", "Add": "Menambahkan", "Add_agent": "Tambahkan agen", @@ -219,7 +220,6 @@ "Admin_Info": "Info Admin", "Administration": "Administrasi", "Adult_images_are_not_allowed": "Gambar dewasa tidak diperbolehkan", - "Advocacy": "Pembelaan", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Setelah otentikasi OAuth2, pengguna akan diarahkan ke URL ini", "Agent": "Agen", "Agent_added": "Agen menambahkan", @@ -549,7 +549,6 @@ "Connection_Closed": "Koneksi ditutup", "Connection_Reset": "Koneksi diatur ulang", "Consulting": "Konsultasi", - "Consumer_Goods": "Barang konsumsi", "Contains_Security_Fixes": "Berisi Security Fixes", "Content": "Konten", "Continue": "Terus", @@ -1265,8 +1264,6 @@ "Hash": "hash", "Header": "Header", "Header_and_Footer": "Header dan Footer", - "Healthcare_and_Pharmaceutical": "Perawatan Kesehatan / Farmasi", - "Help_Center": "Pusat Bantuan", "Helpers": "Pembantu", "Hex_Color_Preview": "Hex Color Preview", "Hidden": "Tersembunyi", @@ -1286,6 +1283,7 @@ "Highlights_How_To": "Untuk diberitahu ketika seseorang menyebutkan kata atau frase, tambahkan di sini. Anda dapat memisahkan kata atau frasa dengan koma. Kata-kata sorot tidak sensitif huruf.", "Highlights_List": "kata Highlight", "History": "Riwayat", + "Home": "Rumah", "Host": "Tuan rumah", "hours": "jam", "Hours": "Jam", @@ -2054,7 +2052,6 @@ "Public": "Publik", "Public_Channel": "Saluran publik", "Public_Community": "Komunitas Publik", - "Public_Relations": "Hubungan Masyarakat", "Push": "Push", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2552,7 +2549,6 @@ "Tokens_Required_Input_Placeholder": "Nama aset Tokens", "Topic": "Tema", "Total_messages": "Total Pesan", - "Tourism": "Pariwisata", "Transcript_Enabled": "Tanya Pengunjung apakah Mereka Suka Transkrip Setelah Ngobrol Ditutup", "Transcript_message": "Pesan untuk Ditunjukkan Saat Meminta Tentang Transkrip", "Transcript_of_your_livechat_conversation": "Transkrip percakapan livechat Anda.", diff --git a/packages/rocketchat-i18n/i18n/it.i18n.json b/packages/rocketchat-i18n/i18n/it.i18n.json index d5b55c1a4efe..4af275ced90c 100644 --- a/packages/rocketchat-i18n/i18n/it.i18n.json +++ b/packages/rocketchat-i18n/i18n/it.i18n.json @@ -196,6 +196,7 @@ "Accounts_UserAddedEmail_Description": "È possibile utilizzare i seguenti marcatori: [name], [fname], [lname] per il nome completo dell'utente, nome o cognome, rispettivamente. [email] per l'e-mail dell'utente. [password] per la password dell'utente. [Site_Name] e [Site_URL] per il Nome applicazione e l'URL, rispettivamente. ", "Accounts_UserAddedEmailSubject_Default": "Sei stato aggiunto su [Site_Name]", "Activate": "Attiva", + "Active": "Attivo", "Activity": "Attività", "Add": "Aggiungi", "Add_agent": "Aggiungi operatore", @@ -228,7 +229,6 @@ "Admin_Info": "Informazioni di amministrazione", "Administration": "Amministrazione", "Adult_images_are_not_allowed": "Non sono ammesse immagini per adulti", - "Advocacy": "patrocinio", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Dopo l'autenticazione OAuth2, gli utenti saranno reindirizzati a questo URL", "Agent": "Operatore", "Agent_added": "Operatore aggiunto", @@ -559,7 +559,6 @@ "Connection_Closed": "Connessione chiusa", "Connection_Reset": "Reset della connessione", "Consulting": "Consulenza", - "Consumer_Goods": "Beni di consumo", "Contains_Security_Fixes": "Contiene correzioni di sicurezza", "Content": "Contenuto", "Continue": "Continuare", @@ -1218,6 +1217,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Percorso della cartella WebDAV su cui caricare i file", "FileUpload_Webdav_Username": "Nome utente WebDAV", "Filter": "Filtro", + "Filters": "Filtri", "Financial_Services": "Servizi finanziari", "First_Channel_After_Login": "Primo canale dopo l'accesso", "Flags": "Bandiere", @@ -1286,8 +1286,6 @@ "Hash": "Hash", "Header": "Testata", "Header_and_Footer": "Testata e Piè di pagina", - "Healthcare_and_Pharmaceutical": "Sanità / farmaceutico", - "Help_Center": "Centro assistenza", "Helpers": "Helpers", "Hex_Color_Preview": "Anteprima colore esadecimale", "Hi": "Ciao", @@ -1309,6 +1307,7 @@ "Highlights_How_To": "Per essere notificati quando qualcuno menziona una parola o una frase, aggiungilo qua. È possibile separare parole o frasi con le virgole. Le parole evidenziate non sono 'case sensitive'.", "Highlights_List": "Evidenzia parole", "History": "Storico", + "Home": "Casa", "Host": "Host", "hours": "ore", "Hours": "Ore", @@ -2075,7 +2074,6 @@ "Public": "Pubblico", "Public_Channel": "Canale pubblico", "Public_Community": "Comunità pubblica", - "Public_Relations": "Relazioni pubbliche", "Push": "Notifiche Push", "Push_apn_cert": "Certificato APN", "Push_apn_dev_cert": "Certificato di sviluppo APN", @@ -2582,7 +2580,6 @@ "Total_Discussions": "Discussioni totali", "Total_messages": "Messaggi totali", "Total_Threads": "Thread totali", - "Tourism": "Turismo", "Transcript_Enabled": "Chiedi al visitatore se vuole una trascrizione dopo la chiusura della chat", "Transcript_message": "Messaggio da mostrare quando si chiede la transcrizione", "Transcript_of_your_livechat_conversation": "Transcrizione della tua conversazione livechat", diff --git a/packages/rocketchat-i18n/i18n/ja.i18n.json b/packages/rocketchat-i18n/i18n/ja.i18n.json index 9d8cc2ab7d38..2762edd8220e 100644 --- a/packages/rocketchat-i18n/i18n/ja.i18n.json +++ b/packages/rocketchat-i18n/i18n/ja.i18n.json @@ -237,6 +237,7 @@ "Accounts_Verify_Email_For_External_Accounts": "外部アカウントのメールアドレスを確認する", "Action_required": "必要なアクション", "Activate": "有効化", + "Active": "アクティブ", "Active_users": "アクティブユーザー", "Activity": "アクティビティ順", "Add": "追加", @@ -274,7 +275,6 @@ "Admin_Info": "管理者情報", "Administration": "管理", "Adult_images_are_not_allowed": "アダルト画像は許可されていません", - "Advocacy": "アドボカシー", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "OAuth2 認証の後、ユーザーはこの URL へリダイレクトされます", "Agent": "エージェント", "Agent_added": "担当者を追加しました", @@ -832,7 +832,6 @@ "Connection_success": "LDAP接続に成功しました", "Connectivity_Services": "接続サービス", "Consulting": "コンサルティング", - "Consumer_Goods": "消費財", "Contact": "コンタクト", "Contact_Chat_History": "チャット履歴への問い合わせ", "Contains_Security_Fixes": "セキュリティ修正が含まれています", @@ -1143,8 +1142,8 @@ "Custom_Emoji_Has_Been_Deleted": "カスタム絵文字が削除されました。", "Custom_Emoji_Info": "カスタム絵文字情報", "Custom_Emoji_Updated_Successfully": "カスタム絵文字が正常に更新されました", - "Custom_Field_Removed": "カスタムフィールドが削除されました", "Custom_Fields": "カスタムフィールド", + "Custom_Field_Removed": "カスタムフィールドが削除されました", "Custom_oauth_helper": "OAuth プロバイダーを構築する場合、コールバック URL として %s を提供してください。", "Custom_oauth_unique_name": "カスタム OAuth の一意な名前", "Custom_Script_Logged_In": "ユーザーがログインした時", @@ -1825,8 +1824,6 @@ "Hash": "ハッシュ", "Header": "ヘッダ", "Header_and_Footer": "ヘッダーとフッター", - "Healthcare_and_Pharmaceutical": "ヘルスケア/医薬品", - "Help_Center": "ヘルプセンター", "Helpers": "ヘルパー", "Here_is_your_authentication_code": "認証コードは次のとおりです。", "Hex_Color_Preview": "16進カラープレビュー", @@ -1851,6 +1848,7 @@ "Highlights_How_To": "こちらに入力した単語や連語を誰かがコメントした時に、通知されます。単語や連語は、カンマで区切ってください。ハイライトする言葉は、大文字と小文字を区別されません。", "Highlights_List": "ハイライトする単語", "History": "履歴", + "Home": "ホーム", "Host": "ホスト", "hours": "時間", "Hours": "営業時間", @@ -2971,7 +2969,6 @@ "Public_Channel": "パブリックチャンネル", "Public_Channels": "公開チャンネル", "Public_Community": "公共のコミュニティ", - "Public_Relations": "広報", "Public_URL": "公開URL", "Purchase_for_free": "無料で購入", "Purchase_for_price": "$%sで購入", @@ -3696,7 +3693,6 @@ "TOTP_reset_email": "二要素TOTPリセット通知", "TOTP_Reset_Other_Key_Warning": "現在の二要素TOTPをリセットするとユーザーはログアウトします。ユーザーは後で再度二要素を設定することができます。", "totp-invalid": "コードまたはパスワードが無効です", - "Tourism": "観光", "Transcript": "トランスクリプト", "Transcript_Enabled": "チャットが終了した後に彼らがトランスクリプトを好きになるかどうかを訪問者に尋ねる", "Transcript_message": "トランスクリプトについて質問するときに表示するメッセージ", diff --git a/packages/rocketchat-i18n/i18n/ka-GE.i18n.json b/packages/rocketchat-i18n/i18n/ka-GE.i18n.json index 5243b0c7cb94..66cb85036368 100644 --- a/packages/rocketchat-i18n/i18n/ka-GE.i18n.json +++ b/packages/rocketchat-i18n/i18n/ka-GE.i18n.json @@ -230,6 +230,7 @@ "Accounts_UserAddedEmail_Description": "თქვენ შეგიძლიათ გამოიყენოთ შემდეგი ველები: [name], [fname], [lname] მომხმარებლის სრული სახელი, სახელი ან გვარი, შესაბამისად. [Html2e] [email] მომხმარებლის ელ.ფოსტისთვის. [Site_Name] და [Site_URL] განაცხადის სახელისა და მისამართების შესაბამისად. ", "Accounts_UserAddedEmailSubject_Default": "თქვენ დაგამატეს [Site_Name]", "Activate": "აქტივაცია", + "Active": "აქტიური", "Active_users": "აქტიური მომხმარებლები", "Activity": "აქტივობა", "Add": "დამატება", @@ -267,7 +268,6 @@ "Admin_Info": "ადმინისტრატორის ინფორმაცია", "Administration": "ადმინისტრაცია", "Adult_images_are_not_allowed": "ზრდასრულთა სურათების არ არის ნებადართული", - "Advocacy": "დაცვა", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "OAuth2 ავტორიზაციის შემდეგ, მომხმარებლები გადამისამართდებიან ამ URL- ზე მდებარე სიაზე. თქვენ შეგიძლიათ დაამატოთ ერთი URL თითო სტრიქონზე.", "Agent": "აგენტი", "Agent_added": "აგენტი დამატებულია", @@ -762,7 +762,6 @@ "Connection_Reset": "კავშირის გადატვირთვა", "Connectivity_Services": "დაკავშირების სერვისები", "Consulting": "კონსულტაცია", - "Consumer_Goods": "სამომხმარებლო საქონელი", "Contact": "კონტაქტი", "Contains_Security_Fixes": "შეიცავს უსაფრთხოების ჩასწორებებს", "Content": "შინაარსი", @@ -1625,6 +1624,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV საქაღალდის გზა, რომელშიც ფაილებიი უნდა აიტვირთოს", "FileUpload_Webdav_Username": "WebDAV მომხმარებლის სახელი", "Filter": "ფილტრი", + "Filters": "ფილტრები", "Financial_Services": "ფინანსური მომსახურება", "First_Channel_After_Login": "პირველი არხი ავტორიზაციის შემდეგ", "First_response_time": "პირველი რეაგირების დრო", @@ -1713,8 +1713,6 @@ "Hash": "ჰაში", "Header": "თავსართი", "Header_and_Footer": "თავსართი და ქვე სათაური", - "Healthcare_and_Pharmaceutical": "ჯანდაცვა/ ფარმაცევტული", - "Help_Center": "დახმარების ცენტრი", "Helpers": "დამხმარეები", "Here_is_your_authentication_code": "აქ არის თქვენი ავტორიზაციის კოდი:", "Hex_Color_Preview": "Hex ფერების გადახედვა", @@ -1739,6 +1737,7 @@ "Highlights_How_To": "აქ დაამატეთ სიტყვები ან ფრაზები. თუ ვინმე გამოიყენებს ამ ფრაზას/სიტყვას თვენ მოგივათ შეტყობინება ამის შესახებ. ჰაილაით სიტყვებში დიდ და პატარა ასოებს არ აქვს მნიშვნელობა", "Highlights_List": "ჰაილაით სიტყვები", "History": "ისტორია", + "Home": "მთავარი", "Host": "ჰოსტი", "hours": "საათები", "Hours": "საათები", @@ -2774,7 +2773,6 @@ "Public": "საჯარო", "Public_Channels": "საჯარო არხები", "Public_Community": "საჯარო საზოგადოება", - "Public_Relations": "საზოგადოებასთან ურთიერთობა", "Public_URL": "საჯარო URL", "Purchase_for_free": "შეიძინეთ უფასოდ", "Purchase_for_price": "შეიძინეთ $%s-ად", @@ -3403,7 +3401,6 @@ "Total_visitors": "მომხმარებლები სულ", "TOTP Invalid [totp-invalid]": "კოდი ან პაროლი არასწორია", "totp-invalid": "კოდი ან პაროლი არასწორია", - "Tourism": "ტურიზმი", "Transcript_Enabled": "კითხეტ ვიზიტორს სურს თუ არა ტრანსკრიფცია ჩატის დახურვის შემდეგ", "Transcript_message": "საჩვენებელი შეტყობინება ტრანსკრიფციის მოთხოვნისას", "Transcript_of_your_livechat_conversation": "თქვენი Omnichannel საუბრის ტრანსკრიფცია.", diff --git a/packages/rocketchat-i18n/i18n/km.i18n.json b/packages/rocketchat-i18n/i18n/km.i18n.json index 60baca6c984a..fcc9c2fefb4e 100644 --- a/packages/rocketchat-i18n/i18n/km.i18n.json +++ b/packages/rocketchat-i18n/i18n/km.i18n.json @@ -216,6 +216,7 @@ "Accounts_UserAddedEmail_Description": "អ្នកអាចប្រើកន្លែងដាក់ខាងក្រោម: [name], [fname] [lname] សម្រាប់ឈ្មោះអ្នកប្រើពេញលេញ, ឈ្មោះជាលើកដំបូងឬឈ្មោះចុងក្រោយ, រៀងគ្នា។ [email] សម្រាប់អ៊ីម៉ែលរបស់អ្នកប្រើ។ [password] ពាក្យសម្ងាត់របស់អ្នកប្រើ។ [Site_Name] និង [Site_URL] សម្រាប់ឈ្មោះកម្មវិធីនិង URL រៀងគ្នា។ ", "Accounts_UserAddedEmailSubject_Default": "អ្នកត្រូវបានបន្ថែមទៅ [Site_Name]", "Activate": "ធ្វើឱ្យសកម្ម", + "Active": "ដែលសកម្ម", "Activity": "សកម្មភាព", "Add": "បន្ថែម", "Add_agent": "បន្ថែមភ្នាក់ងារ", @@ -250,7 +251,6 @@ "Admin_Info": "ព័ត៌មានអ្នកគ្រប់គ្រង", "Administration": "រដ្ឋបាល", "Adult_images_are_not_allowed": "រូបភាពមនុស្សពេញវ័យមិនត្រូវបានអនុញ្ញាតទេ", - "Advocacy": "ការតស៊ូមតិ", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "បន្ទាប់ពីការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ OAuth2, អ្នកប្រើនឹងត្រូវបានបញ្ជូនបន្តទៅ URL នេះ", "Agent": "ភ្នាក់ងារ", "Agent_added": "ភ្នាក់ងារបានបន្ថែម", @@ -710,7 +710,6 @@ "Connection_Reset": "កំណត់ការភ្ជាប់ឡើងវិញ", "Connectivity_Services": "សេវាកម្មតភ្ជាប់។", "Consulting": "ប្រឹក្សា", - "Consumer_Goods": "ទំនិញប្រើប្រាស់", "Contact": "ទំនាក់ទំនង", "Contains_Security_Fixes": "មានការជួសជុលសុវត្ថិភាព", "Content": "មាតិកា", @@ -1521,8 +1520,6 @@ "Hash": "ហាស់", "Header": "បឋមកថា", "Header_and_Footer": "បឋមកថានិងបាតកថា", - "Healthcare_and_Pharmaceutical": "សុខភាព / ឱសថ", - "Help_Center": "មជ្ឈមណ្ឌលជំនួយ", "Helpers": "អ្នកជួយ", "Hex_Color_Preview": "មើលពណ៌ពណ៌បៃតង", "Hi_username": "សួស្តី __name__", @@ -1543,6 +1540,7 @@ "Highlights_How_To": "នឹងត្រូវបានជូនដំណឹងនៅពេលនរណាម្នាក់និយាយអំពីពាក្យឬឃ្លាបន្ថែមវានៅទីនេះ។ អ្នកអាចបំបែកពាក្យឬឃ្លាជាមួយសញ្ញាក្បៀស។ ការបន្លិចពាក្យមិនត្រូវបានប្រកាន់តួអក្សរតូចធំ។", "Highlights_List": "ពាក្យដែលបានបន្លិច", "History": "ប្រវត្តិ", + "Home": "ផ្ទះ", "Host": "ម៉ាស៊ីន", "hours": "ម៉ោង", "Hours": "ម៉ោង", @@ -2373,7 +2371,6 @@ "Public": "សាធារណៈ", "Public_Channel": "ឆានែលសាធារណៈ", "Public_Community": "សហគមន៍សាធារណៈ", - "Public_Relations": "ទំនាក់ទំនងសាធារណៈ", "Push": "រុញ", "Push_apn_cert": "វិញ្ញាបនប័ត្រ APN", "Push_apn_dev_cert": "វិញ្ញាបនប័ត្រអ្នកអភិវឌ្ឍន៍ APN", @@ -2897,7 +2894,6 @@ "Total_conversations": "ការសន្ទនាសរុប", "Total_messages": "សារសរុប", "Total_visitors": "អ្នកទស្សនាសរុប", - "Tourism": "ទេសចរណ៍", "Transcript_Enabled": "សួរអ្នកទស្សនាថាតើពួកគេចង់បានប្រតិចារឹកបន្ទាប់ពីការជជែកបិទ", "Transcript_message": "សារដើម្បីបង្ហាញនៅពេលសួរអំពីប្រតិចារិក", "Transcript_of_your_livechat_conversation": "ប្រតិចារឹកនៃការសន្ទនា livechat របស់អ្នក។", diff --git a/packages/rocketchat-i18n/i18n/ko.i18n.json b/packages/rocketchat-i18n/i18n/ko.i18n.json index c1128c8a33bb..38528724a5a5 100644 --- a/packages/rocketchat-i18n/i18n/ko.i18n.json +++ b/packages/rocketchat-i18n/i18n/ko.i18n.json @@ -234,6 +234,7 @@ "Accounts_Verify_Email_For_External_Accounts": "외부 계정의 이메일 확인", "Action_required": "필요한 조치", "Activate": "활성화", + "Active": "보관안됨", "Active_users": "활성 사용자", "Activity": "활동", "Add": "추가", @@ -271,7 +272,6 @@ "Admin_Info": "관리자 정보", "Administration": "관리", "Adult_images_are_not_allowed": "성인용 이미지는 허용되지 않습니다.", - "Advocacy": "법률", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Oauth2 인증후 사용자는 이 URL로 이동됩니다", "Agent": "상담사", "Agent_added": "상담사가 추가되었습니다", @@ -826,7 +826,6 @@ "Connection_success": "LDAP 연결 성공", "Connectivity_Services": "연결 서비스", "Consulting": "컨설팅", - "Consumer_Goods": "소비재", "Contact": "연락처", "Contact_Chat_History": "연락처 대화 기록", "Contains_Security_Fixes": "보안 수정 사항 포함", @@ -1137,8 +1136,8 @@ "Custom_Emoji_Has_Been_Deleted": "사용자 정의 이모지를 삭제 했습니다.", "Custom_Emoji_Info": "사용자 정의 이모지 정보", "Custom_Emoji_Updated_Successfully": "사용자 정의 이모지를 업데이트 했습니다.", - "Custom_Field_Removed": "사용자정의 필드 제거", "Custom_Fields": "사용자 정의 필드", + "Custom_Field_Removed": "사용자정의 필드 제거", "Custom_oauth_helper": "OAuth Provider를 설정할때, 콜백 URL을 알려줘야합니다. %s를 사용.", "Custom_oauth_unique_name": "사용자 정의 OAuth 고유 이름", "Custom_Script_Logged_In": "로그인한 사용자를 위한 사용자 정의 스크립트 ", @@ -1817,8 +1816,6 @@ "Hash": "해시", "Header": "머리글", "Header_and_Footer": "머리글과 바닥글", - "Healthcare_and_Pharmaceutical": "건강 관리 / 제약", - "Help_Center": "지원 센터", "Helpers": "도우미", "Here_is_your_authentication_code": "인증 코드 : ", "Hex_Color_Preview": "16 진수 색상 미리보기", @@ -2961,7 +2958,6 @@ "Public_Channel": "공개 대화방", "Public_Channels": "공개 Channel", "Public_Community": "공공 커뮤니티", - "Public_Relations": "공공 관련", "Public_URL": "공개 URL", "Purchase_for_free": "무료로 구매", "Purchase_for_price": "$%s에 구매", @@ -3677,7 +3673,6 @@ "Total_visitors": "총 방문자 수", "TOTP Invalid [totp-invalid]": "유효하지 않은 코드 또는 비밀번호", "totp-invalid": "유효하지 않은 코드 또는 비밀번호", - "Tourism": "관광/여행", "Transcript": "내용", "Transcript_Enabled": "대화 종료 후 사본을 원하는지 방문자에게 응답을 요구합니다.", "Transcript_message": "사본에 관한 질문에 보여줄 메시지", diff --git a/packages/rocketchat-i18n/i18n/ku.i18n.json b/packages/rocketchat-i18n/i18n/ku.i18n.json index 57e4f96617d7..03a2c1094c71 100644 --- a/packages/rocketchat-i18n/i18n/ku.i18n.json +++ b/packages/rocketchat-i18n/i18n/ku.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Dibe ku divê tu guhêrbaran li jêr bi kar tînin: [name], [fname], [lname] ji bo navê bikarhêner full, nav an paşnav, bi rêzê ve. [email] ji bo email bikarhêner. [password] ji bo şîfreya bikarhêner. [Site_Name] û [Site_URL] ji bo Name Application û URL rêzê. ", "Accounts_UserAddedEmailSubject_Default": "Hûn hatine zêdekirin [Site_Name]", "Activate": "de çalak bike", + "Active": "Jîr", "Activity": "Çalakî", "Add": "Lêzêdekirin", "Add_agent": "lê zêde bike agent", @@ -219,7 +220,6 @@ "Admin_Info": "Agahdariya Rêveberiyê", "Administration": "Birêvebirî", "Adult_images_are_not_allowed": "Wêneyên mezin têne destûr kirin", - "Advocacy": "Alîkariyê", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Piştî Erêkirina OAuth2, bikarhênerên wê ji bo vê URL redirected", "Agent": "Casus", "Agent_added": "Agent added", @@ -548,7 +548,6 @@ "Connection_Closed": "Girêdana girêdayî ye", "Connection_Reset": "Girêdana veguhastinê", "Consulting": "Şêwirmendî", - "Consumer_Goods": "Xweseran", "Contains_Security_Fixes": "Contains Security Fixes", "Content": "Dilşad", "Continue": "Berdewamkirin", @@ -1261,8 +1260,6 @@ "Hash": "Hash", "Header": "header", "Header_and_Footer": "Header & Footer", - "Healthcare_and_Pharmaceutical": "Tendurustî / derman", - "Help_Center": "Navenda Alîkariyê", "Helpers": "Alîkarî", "Hex_Color_Preview": "Hex Color Preview", "Hidden": "veşartî", @@ -2041,7 +2038,6 @@ "Public": "Alenî", "Public_Channel": "Public Channel", "Public_Community": "Civaka Civak", - "Public_Relations": "Têkiliyên Gel", "Push": "Lêqellibînî", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2538,7 +2534,6 @@ "Tokens_Required_Input_Placeholder": "Navên hilbijêrin", "Topic": "Mijar", "Total_messages": "Total Messages", - "Tourism": "Seferî", "Transcript_Enabled": "Xwendekarek Ask If They Like Trans Transition After Closed Chat", "Transcript_message": "Ji bo Pirsgirêka Transcriptê Pêşniyar bikin Peyama Pîroz", "Transcript_of_your_livechat_conversation": "Transcript of your conversation with livechat.", diff --git a/packages/rocketchat-i18n/i18n/lo.i18n.json b/packages/rocketchat-i18n/i18n/lo.i18n.json index 26b5d5a5a4f1..717f604c03b8 100644 --- a/packages/rocketchat-i18n/i18n/lo.i18n.json +++ b/packages/rocketchat-i18n/i18n/lo.i18n.json @@ -198,6 +198,7 @@ "Accounts_UserAddedEmail_Description": "ທ່ານອາດຈະນໍາໃຊ້ຕົວຍຶດຕໍາແຫນ່ງດັ່ງຕໍ່ໄປນີ້: [name], [fname], [lname] ສໍາລັບຊື່ຜູ້ໃຊ້ຂອງໄດ້ຢ່າງເຕັມທີ່, ຊື່ທໍາອິດຫຼືຊື່ສຸດທ້າຍ, ຕາມລໍາດັບ. [email] ສໍາລັບອີເມລຂອງຜູ້ໃຊ້ໄດ້. [password] ສໍາລັບການລະຫັດຜ່ານຂອງຜູ້ໃຊ້ໄດ້. [Site_Name] ແລະ [Site_URL] ສໍາລັບຄໍາຮ້ອງສະຫມັກຊື່ແລະ URL ຕາມລໍາດັບ. ", "Accounts_UserAddedEmailSubject_Default": "ທ່ານໄດ້ຮັບການເພີ່ມ [Site_Name]", "Activate": "ກະຕຸ້ນ", + "Active": "ການເຄື່ອນໄຫວ", "Activity": "ກິດຈະກໍາ", "Add": "ຕື່ມ", "Add_agent": "ຕື່ມການຕົວແທນ", @@ -230,7 +231,6 @@ "Admin_Info": "Admin Info", "Administration": "ການບໍລິຫານ", "Adult_images_are_not_allowed": "ຮູບພາບຜູ້ໃຫຍ່ບໍ່ໄດ້ອະນຸຍາດໃຫ້", - "Advocacy": "ການສະຫນັບສະຫນູນ", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "ຫຼັງຈາກການກວດສອບ OAuth2, ຜູ້ໃຊ້ຈະໄດ້ຮັບການ redirected ກັບ URL ນີ້", "Agent": "ຕົວແທນ", "Agent_added": "ຕົວແທນເຂົ້າມາ", @@ -566,7 +566,6 @@ "Connection_Closed": "ການເຊື່ອມຕໍ່ປິດ", "Connection_Reset": "ການຕັ້ງຄ່າການເຊື່ອມຕໍ່", "Consulting": "ການປຶກສາຫາລື", - "Consumer_Goods": "ສິນຄ້າບໍລິໂພກ", "Contains_Security_Fixes": "ມີການແກ້ໄຂຄວາມປອດໄພ", "Content": "ເນື້ອຫາ", "Continue": "ສືບຕໍ່", @@ -1230,6 +1229,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "ເສັ້ນທາງໂຟເດີ WebDAV ທີ່ໄຟລ໌ຄວນອັບໂຫລດໄປ", "FileUpload_Webdav_Username": "WebDAV ຊື່ຜູ້ໃຊ້", "Filter": "ການກັ່ນຕອງ", + "Filters": "ຕົວກອງ", "Financial_Services": "ການບໍລິການທາງດ້ານການເງິນ", "First_Channel_After_Login": "First Channel After Login", "Flags": "ທຸງ", @@ -1297,8 +1297,6 @@ "Hash": "hash", "Header": "Header", "Header_and_Footer": "Header and Footer", - "Healthcare_and_Pharmaceutical": "ສຸຂະພາບ / ການແພດ", - "Help_Center": "ສູນຊ່ວຍເຫຼືອ", "Helpers": "ຜູ້ຊ່ວຍເຫຼືອ", "Hex_Color_Preview": "Hex Color Preview", "Hidden": "ເຊື່ອງໄວ້", @@ -1318,6 +1316,7 @@ "Highlights_How_To": "ຮັບການແຈ້ງການໃນເວລາທີ່ຜູ້ໃດຜູ້ຫນຶ່ງໄດ້ກ່າວເຖິງເປັນຄໍາຫຼືປະໂຫຍກ, ເພີ່ມມັນທີ່ນີ້. ທ່ານສາມາດແຍກຄໍາຫຼືປະໂຫຍກດ້ວຍຈຸລະພາກ. Highlight ຄໍາສັບຕ່າງໆຍັງບໍ່ໄດ້ກໍລະນີທີ່ລະອຽດອ່ອນ.", "Highlights_List": "ຄໍາ Highlight", "History": "ປະຫວັດສາດ", + "Home": "ເຮືອນ", "Host": "ການເປັນເຈົ້າພາບ", "hours": "ຊົ່ວໂມງ", "Hours": "ຊົ່ວໂມງ", @@ -2083,7 +2082,6 @@ "Public": "ສາທາລະນະ", "Public_Channel": "Public Channel", "Public_Community": "ຊຸມຊົນສາທາລະນະ", - "Public_Relations": "Public Relations", "Push": "ການຊຸກຍູ້", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2581,7 +2579,6 @@ "Tokens_Required_Input_Placeholder": "ຊື່ຕາຕະລາງຕົວຕົນ", "Topic": "ກະທູ້", "Total_messages": "ຂໍ້ຄວາມທັງຫມົດ", - "Tourism": "ການທ່ອງທຽ່ວ", "Transcript_Enabled": "ຂໍໃຫ້ຜູ້ມາຢ້ຽມຢາມຖ້າພວກເຂົາຕ້ອງການລາຍລະອຽດຫຼັງຈາກທີ່ສົນທະນາປິດ", "Transcript_message": "ຂໍ້ຄວາມສະແດງໃຫ້ເຫັນເມື່ອຖາມກ່ຽວກັບການສໍາຫຼວດ", "Transcript_of_your_livechat_conversation": "ລາຍລະອຽດຂອງການສົນທະນາ livechat ຂອງທ່ານ.", diff --git a/packages/rocketchat-i18n/i18n/lt.i18n.json b/packages/rocketchat-i18n/i18n/lt.i18n.json index 22061b0b8112..5e7d9f33f36b 100644 --- a/packages/rocketchat-i18n/i18n/lt.i18n.json +++ b/packages/rocketchat-i18n/i18n/lt.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Galite atitinkamai nurodyti naudotojo vardą, pavardę ar vardą, naudodami šiuos užpildytojus: [name], [fname], [lname].[el. Paštas] naudotojo el. Laiškui.[slaptažodis] vartotojo slaptažodžiui.> [Site_Name] ir [Site_URL] atitinkamai programos pavadinimui ir URL.", "Accounts_UserAddedEmailSubject_Default": "Jūs įtraukėte į [Site_Name]", "Activate": "aktyvinti", + "Active": "Aktyvus", "Activity": "Veikla", "Add": "Pridurti", "Add_agent": "Pridėti agentą", @@ -219,7 +220,6 @@ "Admin_Info": "Administratoriaus informacija", "Administration": "Administracija", "Adult_images_are_not_allowed": "Suaugusieji vaizdai neleidžiami", - "Advocacy": "Advokatas", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Po OAuth2 autentiškumo, vartotojai bus nukreipti į šį URL", "Agent": "Agentas", "Agent_added": "Agentas pridėtas", @@ -549,7 +549,6 @@ "Connection_Closed": "Ryšys uždarytas", "Connection_Reset": "Ryšio atstatymas", "Consulting": "Konsultavimas", - "Consumer_Goods": "Vartojimo prekės", "Contains_Security_Fixes": "Yra saugos nustatymai", "Content": "Turinys", "Continue": "Tęsti", @@ -1198,6 +1197,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV aplanko kelias, į kurį failai turėtų būti įkelti", "FileUpload_Webdav_Username": "WebDAV vartotojo vardas", "Filter": "Filtras", + "Filters": "Filtrai", "Financial_Services": "Finansinės paslaugos", "First_Channel_After_Login": "Pirmasis kanalas po prisijungimo", "Flags": "Vėliavos", @@ -1265,8 +1265,6 @@ "Hash": "Hashas", "Header": "Antraštė", "Header_and_Footer": "Antraštė ir Poraštė", - "Healthcare_and_Pharmaceutical": "Sveikatos apsauga / Farmacijos pramonė", - "Help_Center": "Pagalbos centras", "Helpers": "Pagalbininkai", "Hex_Color_Preview": "Hex spalvų peržiūra", "Hidden": "Paslėpta", @@ -1286,6 +1284,7 @@ "Highlights_How_To": "Jei norite pranešti, kai kas nors paminėjo žodį ar frazę, pridėkite jį čia. Galite atskirti žodžius ar frazes kableliais. Pažymėti žodžiai nėra didžiosios raidės.", "Highlights_List": "Pažymėkite žodžius", "History": "Istorija", + "Home": "Namai", "Host": "Priimančiosios", "hours": "valandos", "Hours": "Valandos", @@ -2045,7 +2044,6 @@ "Public": "Visuomenė", "Public_Channel": "Viešasis kanalas", "Public_Community": "Viešoji bendruomenė", - "Public_Relations": "Ryšiai su visuomene", "Push": "Stumti", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2544,7 +2542,6 @@ "Tokens_Required_Input_Placeholder": "Tokenų turto pavadinimai", "Topic": "tema", "Total_messages": "Iš viso pranešimų", - "Tourism": "Turizmas", "Transcript_Enabled": "Paklauskite lankytojo, ar jie norėtų, kad pokalbis būtų uždarytas", "Transcript_message": "Žinutė rodyti, kai klausia apie transkripciją", "Transcript_of_your_livechat_conversation": "Jūsų livechat pokalbio stenograma.", diff --git a/packages/rocketchat-i18n/i18n/lv.i18n.json b/packages/rocketchat-i18n/i18n/lv.i18n.json index b1f7670acb95..300329497db1 100644 --- a/packages/rocketchat-i18n/i18n/lv.i18n.json +++ b/packages/rocketchat-i18n/i18n/lv.i18n.json @@ -191,6 +191,7 @@ "Accounts_UserAddedEmail_Description": "Jūs varat izmantot šādus vietturus :[vārds], [fname], [lname] attiecīgi lietotāja pilnam vārdam, vārdam vai uzvārdam.[e-pasts] lietotāja e-pastam.[parole] lietotāja parolei.[Vietnes nosaukums] un [Site_URL] attiecīgi lietotnes nosaukums un URL.", "Accounts_UserAddedEmailSubject_Default": "Jūs esat pievienots [Site_Name]", "Activate": "Aktivizēt", + "Active": "Aktīvs", "Activity": "Aktivitāte", "Add": "Pievienot", "Add_agent": "Pievienot aģentu", @@ -223,7 +224,6 @@ "Admin_Info": "Aministratora info", "Administration": "Administrācija", "Adult_images_are_not_allowed": "Pieauguša satura attēli nav atļauti", - "Advocacy": "Interešu pārstāvēšana", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Pēc OAuth2 autentifikācijas lietotāji tiks novirzīti uz šo URL", "Agent": "Aģents", "Agent_added": "Aģents ir pievienots", @@ -558,7 +558,6 @@ "Connection_Closed": "Savienojums ir aizvērts", "Connection_Reset": "Savienojuma atiestatīšana", "Consulting": "Konsultēšana", - "Consumer_Goods": "Patēriņa preces", "Contains_Security_Fixes": "Satur drošības labojumus", "Content": "Saturs", "Continue": "Turpināt", @@ -1207,6 +1206,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV mapes ceļš, uz kuru faili būtu jāaugšupielādē", "FileUpload_Webdav_Username": "WebDAV lietotājvārds", "Filter": "Filtrs", + "Filters": "Filtri", "Financial_Services": "Finanšu pakalpojumi", "First_Channel_After_Login": "Pirmais kanāls pēc pieraksīšanās", "Flags": "Karogi", @@ -1273,8 +1273,6 @@ "Hash": "Īssavilkums", "Header": "Galvene", "Header_and_Footer": "Galvene un kājene", - "Healthcare_and_Pharmaceutical": "Veselības aprūpe/ Farmācija", - "Help_Center": "Palīdzības centrs", "Helpers": "Palīdzības sniedzēji", "Hex_Color_Preview": "Hex krāsu priekšskatījums", "Hidden": "Slēpts", @@ -1294,6 +1292,7 @@ "Highlights_How_To": "Lai saņemtu paziņojumu, kad kāds piemin vārdu vai frāzi, pievienojiet to šeit. Jūs varat atdalīt vārdus vai frāzes ar komatu. Izcelto vārdu reģistram nav nozīmes.", "Highlights_List": "Izcelt vārdus", "History": "Vēsture", + "Home": "Mājas", "Host": "Resursdators", "hours": "stundas", "Hours": "Stundas", @@ -2056,7 +2055,6 @@ "Public": "Publisks", "Public_Channel": "Publisks kanāls", "Public_Community": "Publisks forums", - "Public_Relations": "Publiskie sakari", "Push": "Nospiediet", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2546,7 +2544,6 @@ "Tokens_Required_Input_Placeholder": "Žetonu aktīvu nosaukumi", "Topic": "Temats", "Total_messages": "Kpējais ziņojumu skaits", - "Tourism": "Tūrisms", "Transcript_Enabled": "Jautāt apmeklētājam, vai viņi pēc transakcijas beigšanas vēlas beigt tērzēšanu", "Transcript_message": "Ziņa lai parādtu, kad tiek uzdots jautājums par transkriptu", "Transcript_of_your_livechat_conversation": "Jūsu livechat sarunas stenogramma.", diff --git a/packages/rocketchat-i18n/i18n/mn.i18n.json b/packages/rocketchat-i18n/i18n/mn.i18n.json index 201270cf576e..a369c3b71e8d 100644 --- a/packages/rocketchat-i18n/i18n/mn.i18n.json +++ b/packages/rocketchat-i18n/i18n/mn.i18n.json @@ -186,6 +186,7 @@ "Accounts_UserAddedEmail_Description": "Та дараах байршлыг ашиглаж болно: [нэр], [fname], [lname] хэрэглэгчийн бүтэн нэр, эхний нэр эсвэл овог нэрийг тус тусад нь ашиглаж болно.[имэйл] хэрэглэгчийн имэйлийн хувьд.[нууц үг] хэрэглэгчийн нууц үгийг ашиглана.[Site_Name] болон [Site_URL] нь Програмын Нэр болон URL-ыг тус тусад нь зааж өгсөн.", "Accounts_UserAddedEmailSubject_Default": "Та [Site_Name] рүү нэмсэн", "Activate": "Идэвхжүүлэх", + "Active": "Идэвхтэй байна", "Activity": "Үйл ажиллагаа", "Add": "Нэмэх", "Add_agent": "Агент нэмэх", @@ -217,7 +218,6 @@ "Admin_Info": "Admin Info", "Administration": "Захиргаа", "Adult_images_are_not_allowed": "Насанд хүрэгчдийн зургийг зөвшөөрөхгүй", - "Advocacy": "Сурталчилгаа", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "OAuth2 нэвтрэлт танилтын дараа хэрэглэгчид энэ URL руу чиглэнэ", "Agent": "Агент", "Agent_added": "Agent нэмсэн", @@ -546,7 +546,6 @@ "Connection_Closed": "Холболт хаалттай байна", "Connection_Reset": "Холболтыг дахин тохируулах", "Consulting": "Зөвлөгөө өгөх", - "Consumer_Goods": "Өргөн хэрэглээний бараа", "Contains_Security_Fixes": "Аюулгүй байдлын засваруудыг агуулдаг", "Content": "Агуулга", "Continue": "Үргэлжлүүлэх", @@ -1192,6 +1191,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Файлуудыг байршуулах ёстой WebDAV фолдер зам", "FileUpload_Webdav_Username": "WebDAV Хэрэглэгчийн нэр", "Filter": "Шүүлтүүр", + "Filters": "Шүүлтүүрүүд", "Financial_Services": "Санхүүгийн үйлчилгээ", "First_Channel_After_Login": "Нэвтрүүлсний дараа анхны суваг", "Flags": "Туг", @@ -1259,8 +1259,6 @@ "Hash": "Хаш", "Header": "Толгой", "Header_and_Footer": "Толгой ба Footer", - "Healthcare_and_Pharmaceutical": "Эрүүл мэндийн / Эм зүйн", - "Help_Center": "Тусламжийн төв", "Helpers": "Тусламжууд", "Hex_Color_Preview": "Hex Color Preview", "Hidden": "Нууцлагдмал байна", @@ -1280,6 +1278,7 @@ "Highlights_How_To": "Хэн нэгэнд үг, хэлцийг дурдах үед энэ тухай нэмж мэдэгдээрэй. Та үг, хэлцийг таслалаар тусгаарлаж болно. Онцлох үгс нь хэрэгтний мэдрэмж биш юм.", "Highlights_List": "Үг онцлох", "History": "Түүх", + "Home": "Нүүр хуудас", "Host": "Хүлээн авагч", "hours": "цаг", "Hours": "Цаг", @@ -2037,7 +2036,6 @@ "Public": "Олон нийтийн", "Public_Channel": "Олон нийтийн суваг", "Public_Community": "Олон нийтийн хамтын нийгэмлэг", - "Public_Relations": "Олон нийтийн харилцаа", "Push": "түлхэх", "Push_apn_cert": "APN Certificate", "Push_apn_dev_cert": "APN Dev Cert", @@ -2534,7 +2532,6 @@ "Tokens_Required_Input_Placeholder": "Токенс хөрөнгийн нэр", "Topic": "Сэдэв", "Total_messages": "Нийт зурвас", - "Tourism": "Аялал жуулчлал", "Transcript_Enabled": "Хэрвээ тэд дараа нь чатлахыг хүсч байвал зочиноос нь асуу", "Transcript_message": "Зурвасын талаар асуухад харуулах мессеж", "Transcript_of_your_livechat_conversation": "Амьдралынхаа яриа хэлэлцүүлгийн хуулбар.", diff --git a/packages/rocketchat-i18n/i18n/ms-MY.i18n.json b/packages/rocketchat-i18n/i18n/ms-MY.i18n.json index ef7ae4fe6bfc..a0924e4aba1a 100644 --- a/packages/rocketchat-i18n/i18n/ms-MY.i18n.json +++ b/packages/rocketchat-i18n/i18n/ms-MY.i18n.json @@ -186,6 +186,7 @@ "Accounts_UserAddedEmail_Description": "Anda boleh menggunakan pemegang tempat berikut: [name], [fname], [lname] untuk nama pengguna penuh, nama pertama atau nama akhir, masing-masing. [email] untuk e-mel pengguna. [password] bagi kata laluan pengguna. [Site_Name] dan [Site_URL] untuk Nama Permohonan dan URL masing-masing. ", "Accounts_UserAddedEmailSubject_Default": "Anda telah ditambahkan pada [Site_Name]", "Activate": "Aktifkan", + "Active": "aktif", "Activity": "aktiviti", "Add": "Tambah", "Add_agent": "menambah ejen", @@ -217,7 +218,6 @@ "Admin_Info": "Maklumat Admin", "Administration": "Pentadbiran", "Adult_images_are_not_allowed": "Imej dewasa tidak dibenarkan", - "Advocacy": "Advokasi", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Selepas pengesahan OAuth2, pengguna akan diarahkan ke URL ini", "Agent": "Ejen", "Agent_added": "Agent ditambah", @@ -547,7 +547,6 @@ "Connection_Closed": "Sambungan ditutup", "Connection_Reset": "Tetap semula sambungan", "Consulting": "Perundingan", - "Consumer_Goods": "Barangan Pengguna", "Contains_Security_Fixes": "Mengandungi Pembaikan Keselamatan", "Content": "Kandungan", "Continue": "Teruskan", @@ -1260,8 +1259,6 @@ "Hash": "hash", "Header": "Kepala", "Header_and_Footer": "Header and Footer", - "Healthcare_and_Pharmaceutical": "Kesihatan / Farmaseutikal", - "Help_Center": "Pusat Bantuan", "Helpers": "Pembantu", "Hex_Color_Preview": "Pratonton Warna Hex", "Hidden": "tersembunyi", @@ -1281,6 +1278,7 @@ "Highlights_How_To": "Untuk diberitahu apabila seseorang menyebut perkataan atau frasa, tambah di sini. Anda boleh memisahkan perkataan atau frasa dengan koma. Highlight Perkataan tidak sensitif.", "Highlights_List": "kata-kata Highlight", "History": "Sejarah", + "Home": "Rumah", "Host": "Host", "hours": "jam", "Hours": "Jam", @@ -2049,7 +2047,6 @@ "Public": "awam", "Public_Channel": "Saluran Awam", "Public_Community": "Komuniti Awam", - "Public_Relations": "Perhubungan Awam", "Push": "push", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2545,7 +2542,6 @@ "Tokens_Required_Input_Placeholder": "Nama aset token", "Topic": "Topic", "Total_messages": "Jumlah Mesej", - "Tourism": "Pelancongan", "Transcript_Enabled": "Tanya Pelawat Jika Mereka Akan Seperti Transkrip Selepas Sembang Ditutup", "Transcript_message": "Mesej untuk Menunjukkan Semasa Meminta Perihal Transkrip", "Transcript_of_your_livechat_conversation": "Transkrip perbualan livechat anda.", diff --git a/packages/rocketchat-i18n/i18n/nl.i18n.json b/packages/rocketchat-i18n/i18n/nl.i18n.json index 64cbc56a1fb1..daa663e6df87 100644 --- a/packages/rocketchat-i18n/i18n/nl.i18n.json +++ b/packages/rocketchat-i18n/i18n/nl.i18n.json @@ -3,9 +3,11 @@ "500": "Interne Server Fout", "__count__empty_rooms_will_be_removed_automatically": "__count__ lege kamers worden automatisch verwijderd.", "__count__empty_rooms_will_be_removed_automatically__rooms__": "__count__ lege kamers worden automatisch verwijderd: __rooms__", - "__username__is_no_longer__role__defined_by__user_by_": "__username__ is niet langer __role__, door __user_by__", - "__username__was_set__role__by__user_by_": "__username__ werd __role__ instellen door __user_by__", - "@username": "@username", + "__username__is_no_longer__role__defined_by__user_by_": "__username__ is niet langer __role__ door __user_by__", + "__username__was_set__role__by__user_by_": "__username__ is __role__ ingesteld door __user_by__", + "This_room_encryption_has_been_enabled_by__username_": "De versleuteling van deze kamer werd ingeschakeld door __username__", + "This_room_encryption_has_been_disabled_by__username_": "De versleuteling van deze kamer werd uitgeschakeld door __username__", + "@username": "@gebruikersnaam", "@username_message": "@gebruikersnaam ", "#channel": "#kanaal", "%_of_conversations": "% van gesprekken", @@ -45,7 +47,7 @@ "Accounts_AllowPasswordChangeForOAuthUsers": "Sta wachtwoordwijzigingen toe voor OAuth-gebruikers", "Accounts_AllowRealNameChange": "Sta naamswijziging toe", "Accounts_AllowUserAvatarChange": "Sta gebruikersavatarwijzigingen toe", - "Accounts_AllowUsernameChange": "Toestaan om de gebruikersnaam aan te passen", + "Accounts_AllowUsernameChange": "Sta gebruikersnaam veranderingen toe", "Accounts_AllowUserProfileChange": "Sta gebruikersprofiel wijzigingen toe", "Accounts_AllowUserStatusMessageChange": "Sta aangepaste statusberichten toe", "Accounts_AvatarBlockUnauthenticatedAccess": "Blokkeer niet geautoriseerde toegang tot avatars", @@ -62,7 +64,7 @@ "Accounts_CustomFields_Description": "Moet een geldige JSON zijn waarbij de sleutels de veldnamen zijn die een woordenboek met veldinstellingen bevatten. Voorbeeld:{\n \"role\": {\n \"type\": \"select\",\n \"defaultValue\": \"student\",\n \"options\": [\"teacher\", \"student\"],\n \"required\": true,\n \"modifyRecordField\": {\n \"array\": true,\n \"field\": \"roles\"\n }\n},\n\"twitter\": {\n \"type\": \"text\",\n \"required\": true,\n \"minLength\": 2,\n \"maxLength\": 10\n }\n}", "Accounts_CustomFieldsToShowInUserInfo": "Aangepaste velden om weer te geven in gebruikersinfo", "Accounts_Default_User_Preferences": "Standaard gebruikersvoorkeuren", - "Accounts_Default_User_Preferences_audioNotifications": "Geluidsmeldingen Standaardwaarschuwing", + "Accounts_Default_User_Preferences_audioNotifications": "Audiomeldingen Standaardwaarschuwing", "Accounts_Default_User_Preferences_desktopNotifications": "Desktopmeldingen Standaardwaarschuwing", "Accounts_Default_User_Preferences_mobileNotifications": "Standaardwaarschuwing voor mobiele meldingen", "Accounts_Default_User_Preferences_not_available": "Het ophalen van gebruikersvoorkeuren is mislukt omdat ze nog niet door de gebruiker zijn ingesteld", @@ -79,14 +81,14 @@ "Accounts_EmailVerification_Description": "Zorg ervoor dat u de juiste SMTP-instellingen om deze functie te gebruiken", "Accounts_Enrollment_Email": "Registratie E-mail", "Accounts_Enrollment_Email_Default": "Welkom bij [Site_Name]Ga naar [Site_URL] en probeer de beste open source chat-oplossing die vandaag beschikbaar is! ", - "Accounts_Enrollment_Email_Description": "U kunt de volgende placeholders gebruiken: [name], [fname], [lname] voor respectievelijk de volledige naam, voornaam of naam van de gebruiker.[email] voor de e-mailadres van de gebruiker.[Site_Name] en [Site_URL] voor respectievelijk de applicatienaam en URL. ", + "Accounts_Enrollment_Email_Description": "U kunt de volgende placeholders gebruiken: [name], [fname], [lname] voor respectievelijk 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 applicatienaam en URL. ", "Accounts_Enrollment_Email_Subject_Default": "Welkom bij [Site_Name]", "Accounts_ForgetUserSessionOnWindowClose": "Gebruikerssessie vergeten bij sluiten van venster", "Accounts_Iframe_api_method": "API-methode", "Accounts_Iframe_api_url": "API URL", "Accounts_iframe_enabled": "Ingeschakeld", "Accounts_iframe_url": "Iframe Url", - "Accounts_LoginExpiration": "Login Verval termijn in Dagen", + "Accounts_LoginExpiration": "Inlogverloop in dagen", "Accounts_ManuallyApproveNewUsers": "Nieuwe gebruikers handmatig goedkeuren", "Accounts_OAuth_Apple": "Inloggen met Apple", "Accounts_OAuth_Custom_Access_Token_Param": "Parameternaam voor toegangstoken", @@ -103,6 +105,7 @@ "Accounts_OAuth_Custom_id": "ID", "Accounts_OAuth_Custom_Identity_Path": "Identiteit locatie", "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Identiteitstoken verstuurd via", + "Accounts_OAuth_Custom_Key_Field": "Sleutelveld", "Accounts_OAuth_Custom_Login_Style": "Login Stijl", "Accounts_OAuth_Custom_Map_Channels": "Rollen/groepen toewijzen aan kanalen", "Accounts_OAuth_Custom_Merge_Roles": "Rollen samenvoegen vanuit SSO", @@ -223,41 +226,53 @@ "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In": "Automatisch nieuwe gebruikers aanmelden voor Two Factor via e-mail", "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In_Description": "Tweefactorauthenticatie via e-mail zal standaard ingeschakeld zijn voor nieuwe gebruikers. Ze kunnen het uitschakelen op hun profielpagina.", "Accounts_TwoFactorAuthentication_By_Email_Code_Expiration": "Tijd voordat de code die via e-mail is verzonden vervalt (in seconden)", - "Accounts_TwoFactorAuthentication_By_Email_Enabled": "Schakel tweestapsverificatie in via e-mail", + "Accounts_TwoFactorAuthentication_By_Email_Enabled": "Schakel tweestapsverificatie via e-mail in", + "Accounts_TwoFactorAuthentication_By_Email_Enabled_Description": "Gebruikers met een geverifieerde e-mailadres en de optie ingeschakeld op hun profielpagina, zullen een e-mail ontvangen met een tijdelijke code om bepaalde acties te autoriseren, zoals inloggen, het profiel opslaan, enz.", "Accounts_TwoFactorAuthentication_Enabled": "Schakel twee-factorenauthenticatie in via TOTP", + "Accounts_TwoFactorAuthentication_Enabled_Description": "Gebruikers kunnen hun tweefactorauthenticatie instellen met elke TOTP-app, zoals Google Authenticator of Authy", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback": "Wachtwoord fallback afdwingen", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback_Description": "Gebruikers zullen voor belangrijke acties gedwongen worden hun wachtwoord in te voeren als er geen andere twee-factor-authenticatiemethode is ingeschakeld voor die gebruiker en er een wachtwoord voor hem is ingesteld.", "Accounts_TwoFactorAuthentication_MaxDelta": "Maximale Delta", "Accounts_TwoFactorAuthentication_MaxDelta_Description": "De maximale delta bepaalt hoeveel tokens op een bepaald moment geldig zijn. Tokens worden elke 30 seconden gegenereerd en zijn geldig voor (30 * Maximum Delta) seconden. Voorbeeld: met een Maximum Delta ingesteld op 10, kan elk token maximaal 300 seconden vóór of na de tijdstempel worden gebruikt. Dit is handig als de klok van de client niet correct is gesynchroniseerd met de server.", - "Accounts_TwoFactorAuthentication_RememberFor": "Onthoud Twee Factor voor (seconden)", + "Accounts_TwoFactorAuthentication_RememberFor": "Onthoud twee factoren voor (seconden)", + "Accounts_TwoFactorAuthentication_RememberFor_Description": "Vraag geen tweestapsautorisatiecode aan als deze al eerder in de opgegeven tijd is verstrekt.", "Accounts_UseDefaultBlockedDomainsList": "Gebruik de standaardlijst met geblokkeerde domeinen", "Accounts_UseDNSDomainCheck": "Gebruik DNS-domein check", "Accounts_UserAddedEmail_Default": "Welkom bij [Site_Name] Ga naar [Site_URL] en probeer de beste open source chat-oplossing die vandaag beschikbaar is! U kunt inloggen met uw e-mail: [email] en wachtwoord: [password]. U kan nodig zijn om het te veranderen na uw eerste login.", "Accounts_UserAddedEmail_Description": "U kunt de volgende variabels gebruiken: [name], [fname], [lname] voor respectievelijk de volledige naam, voornaam of achternaam van de gebruiker. [email] voor e-mail van de gebruiker. [password] voor het wachtwoord van de gebruiker. [Site_Name] en [Site_URL] voor respectievelijk de applicatienaam en URL. ", "Accounts_UserAddedEmailSubject_Default": "Je hebt toegevoegd aan [Site_Name]", + "Accounts_Verify_Email_For_External_Accounts": "Verifieer e-mailadres voor externe accounts", "Action_required": "Actie vereist", "Activate": "Activeren", + "Active": "Actief", + "Active_users": "Actieve gebruikers", "Activity": "Activiteit", "Add": "Toevoegen", "Add_agent": "Voeg agent toe", + "Add_custom_emoji": "Voeg aangepaste emoji toe", "Add_custom_oauth": "Voeg aangepaste OAuth toe", "Add_Domain": "Voeg domein toe", "Add_files_from": "Bestanden toevoegen van", "Add_manager": "Manager toevoegen", + "Add_monitor": "Monitor toevoegen", "Add_Reaction": "Reactie toevoegen", "Add_Role": "Rol toevoegen", + "Add_Sender_To_ReplyTo": "Voeg afzender toe aan antwoord aan", "Add_user": "Gebruikers toevoegen", "Add_User": "Voeg gebruiker toe", "Add_users": "Gebruikers toevoegen", + "Add_members": "Leden toevoegen", "add-livechat-department-agents": "Omnichannel-agenten toevoegen aan afdelingen", "add-oauth-service": "Voeg OAuth-service toe", - "add-oauth-service_description": "Toestemming om een nieuwe OAuth-dienst toe te voegen", + "add-oauth-service_description": "Toestemming om een nieuwe OAuth-dienst toe te voegen", "add-user": "Voeg gebruiker toe", "add-user_description": "Toestemming om nieuwe gebruikers toe te voegen aan de server via het gebruikersscherm", "add-user-to-any-c-room": "Gebruiker toevoegen aan elk openbaar kanaal", - "add-user-to-any-c-room_description": "Toestemming om een gebruiker aan een openbaar kanaal toe te voegen", + "add-user-to-any-c-room_description": "Toestemming om een gebruiker aan een openbaar kanaal toe te voegen", "add-user-to-any-p-room": "Gebruiker toevoegen aan een privékanaal", - "add-user-to-any-p-room_description": "Toestemming om een gebruiker toe te voegen aan een privékanaal", + "add-user-to-any-p-room_description": "Toestemming om een gebruiker toe te voegen aan een privékanaal", "add-user-to-joined-room": "Gebruiker toevoegen aan elk gekoppeld kanaal", - "add-user-to-joined-room_description": "Toestemming om een gebruiker toe te voegen aan een momenteel verbonden kanaal", + "add-user-to-joined-room_description": "Toestemming om een gebruiker toe te voegen aan een momenteel verbonden kanaal", "Adding_OAuth_Services": "OAuth-services toevoegen", "Adding_permission": "Toestemming toevoegen", "Adding_user": "Gebruiker toevoegen", @@ -265,15 +280,16 @@ "Additional_Feedback": "Extra feedback", "additional_integrations_Bots": "Als je op zoek bent naar het integreren van je eigen bot, zoek dan niet verder dan onze Hubot-adapter. https://github.com/RocketChat/hubot-rocketchat", "additional_integrations_Zapier": "Wilt u andere software en applicaties integreren met Rocket.Chat, maar heeft u geen tijd om het handmatig te doen? Dan stellen we voor om Zapier te gebruiken die we volledig ondersteunen. Lees er meer over in onze documentatie. https://rocket.chat/docs/administrator-guides/integrations/zapier/using-zaps/", - "Admin_disabled_encryption": "De administrator heeft E2E encryptie niet ingeschakeld.", - "Admin_Info": "Admin-info", + "Admin_disabled_encryption": "Uw beheerder heeft E2E-codering niet ingeschakeld.", + "Admin_Info": "Admin info", "Administration": "Administratie", "Adult_images_are_not_allowed": "Afbeeldingen voor volwassenen zijn niet toegestaan", - "Advocacy": "voorspraak", - "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Na OAuth2-authenticatie worden gebruikers doorverwezen naar deze URL", + "Aerospace_and_Defense": "Ruimtevaart en defensie", + "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Na OAuth2-authenticatie worden gebruikers omgeleid naar een URL in deze lijst. U kunt één URL per regel toevoegen.", "Agent": "Agent", "Agent_added": "Agent toegevoegd", - "Agent_Info": "Agent info", + "Agent_Info": "Informatie agent", + "Agent_messages": "Agentberichten", "Agent_Name_Placeholder": "Voer een agentnaam in...", "Agent_removed": "Agent verwijderd", "Agents": "Agenten", @@ -281,8 +297,8 @@ "Alias": "Alias", "Alias_Format": "Alias-indeling", "Alias_Format_Description": "Importeer berichten van Slack met een alias; %s wordt vervangen door de gebruikersnaam van de gebruiker. Als deze leeg is, wordt er geen alias gebruikt.", - "Alias_Set": "Alias instellen", - "Aliases": "Aliassen ", + "Alias_Set": "Alias instellen", + "Aliases": "Aliassen", "All": "Alle", "All_added_tokens_will_be_required_by_the_user": "Alle toegevoegde tokens worden door de gebruiker vereist", "All_channels": "Alle kanalen", @@ -292,18 +308,20 @@ "All_users": "Alle gebruikers", "All_users_in_the_channel_can_write_new_messages": "Alle gebruikers in het kanaal kunnen nieuwe berichten schrijven", "Allow_collect_and_store_HTTP_header_informations": "Toestaan dat HTTP-headerinformatie wordt verzameld en opgeslagen", - "Allow_collect_and_store_HTTP_header_informations_description": "Deze instelling bepaalt of Livechat informatie mag opslaan die is verzameld uit HTTP-headergegevens, zoals IP-adres, User Agent, enzovoort.", + "Allow_collect_and_store_HTTP_header_informations_description": "Deze instelling bepaalt of Livechat informatie mag opslaan die is verzameld uit HTTP-headergegevens, zoals IP-adres, User-Agent, enzovoort.", "Allow_Invalid_SelfSigned_Certs": "Sta Ongeldige zelfondertekende certificaten toe", - "Allow_Invalid_SelfSigned_Certs_Description": "Sta ongeldige en zelfondertekende SSL certificaten voor link validatie en voorbeelden toe.", + "Allow_Invalid_SelfSigned_Certs_Description": "Sta ongeldige en zelfondertekende SSL-certificaten tooe voor linkvalidatie en previews.", "Allow_Marketing_Emails": "Marketing-e-mails toestaan", + "Allow_Online_Agents_Outside_Business_Hours": "Sta online agenten toe buiten kantooruren", + "Allow_Online_Agents_Outside_Office_Hours": "Sta online agenten buiten kantooruren toe", "Allow_Save_Media_to_Gallery": "Media opslaan in galerij toestaan", - "Allow_switching_departments": "Toestaan dat bezoekers van afdeling wisselen", + "Allow_switching_departments": "Bezoekers toestaan van afdeling wisselen", "Almost_done": "Bijna klaar", "Alphabetical": "Alfabetische", "Also_send_to_channel": "Stuur ook naar kanaal", "Always_open_in_new_window": "Altijd in een nieuw venster openen", "Analytics": "Analytics", - "Analytics_features_enabled": "Onderdelen Ingeschakeld", + "Analytics_features_enabled": "Ingeschakelde functies", "Analytics_features_messages_Description": "Houdt aangepaste gebeurtenissen bij met betrekking tot acties die een gebruiker op berichten uitvoert.", "Analytics_features_rooms_Description": "houd aangepaste evenementen gerelateerd aan acties op een kanaal of groep (maken, verlaten, verwijderen) bij.", "Analytics_features_users_Description": "Houdt aangepaste gebeurtenissen bij met betrekking tot acties gerelateerd aan gebruikers (wachtwoordherstel, wijziging van profielfoto's, enz.).", @@ -314,9 +332,9 @@ "Animals_and_Nature": "Dieren & Natuur", "Announcement": "Aankondiging", "API": "API", - "API_Add_Personal_Access_Token": "Voeg Nieuwe Persoonlijke Toegangstoken Toe", - "API_Allow_Infinite_Count": "Laat alles komen", - "API_Allow_Infinite_Count_Description": "Moeten oproepen naar de REST API alles in één keer teruggeven?", + "API_Add_Personal_Access_Token": "Voeg een nieuw persoonlijke toegangstoken toe", + "API_Allow_Infinite_Count": "Toestaan om alles te krijgen", + "API_Allow_Infinite_Count_Description": "Moeten er aan de REST API worden toegestaan om alles in één keer terug te geven?", "API_Analytics": "Analytics", "API_CORS_Origin": "CORS Origin", "API_Default_Count": "Standaard aantal", @@ -334,31 +352,31 @@ "API_EmbedSafePorts": "Veilige poorten", "API_EmbedSafePorts_Description": "Door komma's gescheiden lijst met toegestane poorten voor voorbeeldweergave.", "API_Enable_CORS": "Schakel CORS in", - "API_Enable_Direct_Message_History_EndPoint": "Schakel eindpunt eindpunt directe bericht in", - "API_Enable_Direct_Message_History_EndPoint_Description": "Dit maakt de `/ api / v1 / im.history.others` mogelijk, die het bekijken van directe berichten toestaat, verzonden door andere gebruikers waar de beller geen deel van uitmaakt.", - "API_Enable_Personal_Access_Tokens": "Schakel Persoonlijke Toekenstoken voor de REST API in", + "API_Enable_Direct_Message_History_EndPoint": "Eindpunt privéberichtgeschiedenis inschakelen", + "API_Enable_Direct_Message_History_EndPoint_Description": "Dit maakt de `/api/v1/im.history.others` mogelijk, die het bekijken van directe berichten verzonden door andere gebruikers, toestaan.", + "API_Enable_Personal_Access_Tokens": "Schakel persoonlijke toegangstokens voor de REST API in", "API_Enable_Personal_Access_Tokens_Description": "Schakel persoonlijke toegangstoken in voor gebruik met de REST API", "API_Enable_Rate_Limiter": "Rate Limiter inschakelen", - "API_Enable_Rate_Limiter_Dev": "Schakel de Rate Limiter in ontwikkeling in", + "API_Enable_Rate_Limiter_Dev": "Schakel Rate Limiter in ontwikkeling in", "API_Enable_Rate_Limiter_Dev_Description": "Moet het aantal oproepen naar de eindpunten in de ontwikkelomgeving worden beperkt?", - "API_Enable_Rate_Limiter_Limit_Calls_Default": "Standaard nummeroproep naar de snelheidsbegrenzer", - "API_Enable_Rate_Limiter_Limit_Calls_Default_Description": "Aantal standaardoproepen voor elk eindpunt van de REST-API, toegestaan binnen het hieronder gedefinieerde tijdbereik", + "API_Enable_Rate_Limiter_Limit_Calls_Default": "Standaardnummeroproepen naar de snelheidsbegrenzer", + "API_Enable_Rate_Limiter_Limit_Calls_Default_Description": "Aantal standaardoproepen voor elk eindpunt van de REST API, toegestaan binnen het hieronder gedefinieerde tijdsbereik", "API_Enable_Rate_Limiter_Limit_Time_Default": "Standaard tijdslimiet voor de snelheidsbegrenzer (in ms)", - "API_Enable_Rate_Limiter_Limit_Time_Default_Description": "Standaard time-out om het aantal oproepen op elk eindpunt van de REST-API te beperken (in ms)", + "API_Enable_Rate_Limiter_Limit_Time_Default_Description": "Standaard time-out om het aantal oproepen op elk eindpunt van de REST API te beperken (in ms)", "API_Enable_Shields": "Schakel Shields in", - "API_Enable_Shields_Description": "Schakel shields beschikbaar op `/ api / v1 / shield.svg`", + "API_Enable_Shields_Description": "Schakel beschikbare schilden in op `/api/v1/shield.svg`", "API_GitHub_Enterprise_URL": "Server URL", "API_GitHub_Enterprise_URL_Description": "Voorbeeld: http://domain.com (exclusief slash)", "API_Gitlab_URL": "GitLab URL", "API_Personal_Access_Token_Generated": "Persoonlijke toegangstoken succesvol gegenereerd", - "API_Personal_Access_Token_Generated_Text_Token_s_UserId_s": "Sla alsjeblieft de token goed op. Dit is het enige moment waarop je deze kan inzien. Token: __token__Gebruikers ID: __userId__", - "API_Personal_Access_Token_Name": "Persoonlijke Toegangstoken Naam", - "API_Personal_Access_Tokens_Regenerate_It": "Token opnieuw aanmaken", + "API_Personal_Access_Token_Generated_Text_Token_s_UserId_s": "Bewaar uw token zorgvuldig, want u kunt het daarna niet meer bekijken. Token: __token__Gebruikers-ID: __userId__", + "API_Personal_Access_Token_Name": "Naam van persoonlijk toegangstoken", + "API_Personal_Access_Tokens_Regenerate_It": "Genereer token opnieuw", "API_Personal_Access_Tokens_Regenerate_Modal": "Als je de token kwijt bent of vergeet, dan kan je deze opnieuw genereren, maar vergeet niet dat alle applicaties die deze token gebruiken, moeten worden bijgewerkt", - "API_Personal_Access_Tokens_Remove_Modal": "Weet je het zeker dat je deze persoonlijke toegangstoken wilt verwijderen?", - "API_Personal_Access_Tokens_To_REST_API": "Persoonlijke Toegangstoken voor de REST API", - "API_Shield_Types": "Schild typen", - "API_Shield_Types_Description": "Typen schilden die kunnen worden ingeschakeld als een door komma's gescheiden lijst, kies 'online', `kanaal` of` * `voor iedereen", + "API_Personal_Access_Tokens_Remove_Modal": "Weet u zeker dat u dit persoonlijke toegangstoken wilt verwijderen?", + "API_Personal_Access_Tokens_To_REST_API": "Persoonlijke toegangstoken tot REST API", + "API_Shield_Types": "Schildtypen", + "API_Shield_Types_Description": "Typen schilden die kunnen worden ingeschakeld als een door komma's gescheiden lijst, kies `online`, `kanaal` of `*` voor iedereen", "API_Shield_user_require_auth": "Verificatie vereisen voor gebruikersschilden", "API_Token": "API Token", "API_Tokenpass_URL": "Tokenpass-server-URL", @@ -368,7 +386,7 @@ "API_Use_REST_For_DDP_Calls": "Gebruik REST in plaats van websocket voor Meteor-oproepen", "API_User_Limit": "Gebruikerslimiet voor het toevoegen van alle gebruikers aan een kaneel", "API_Wordpress_URL": "WordPress URL", - "api-bypass-rate-limit": "Bypass-snelheidslimiet voor REST API", + "api-bypass-rate-limit": "Bypass-snelheidsbegrenzer voor REST API", "Apiai_Key": "Api.ai Key", "Apiai_Language": "Api.ai Taal", "APIs": "API's", @@ -378,51 +396,111 @@ "App_Installation": "App-installatie", "App_status_auto_enabled": "Ingeschakeld", "App_status_constructed": "Gebouwd", - "App_status_disabled": "Gehandicapte", + "App_status_disabled": "Uitgeschakeld", "App_status_error_disabled": "Uitgeschakeld: niet-afgevangen fout", - "App_status_initialized": "Begonnen", + "App_status_initialized": "Geïnitialiseerd", + "App_status_invalid_license_disabled": "Uitgeschakeld: ongeldige licentie", "App_status_invalid_settings_disabled": "Uitgeschakeld: configuratie vereist", "App_status_manually_disabled": "Uitgeschakeld: handmatig", "App_status_manually_enabled": "Ingeschakeld", "App_status_unknown": "Onbekend", "App_support_url": "ondersteuning voor URL's", "App_Url_to_Install_From": "Installeer vanaf URL", - "App_Url_to_Install_From_File": "Installeren vanuit bestand", + "App_Url_to_Install_From_File": "Installeer vanuit bestand", + "App_user_not_allowed_to_login": "App-gebruikers mogen niet rechtstreeks inloggen.", "Appearance": "Uiterlijk", "Application_added": "Applicatie toegevoegd", + "Application_delete_warning": "U kunt deze applicatie niet herstellen!", "Application_Name": "Naam van de toepassing", "Application_updated": "Applicatie bijgewerkt", - "Apply": "Solliciteren", + "Apply": "Toepassen", "Apply_and_refresh_all_clients": "Toepassen en alle cliënten opnieuw laden", "Apps": "Apps", - "Apps_Engine_Version": "App Engine-versie", + "Apps_Engine_Version": "Apps Engine-versie", + "Apps_Essential_Alert": "Deze app is essentieel voor de volgende evenementen:", + "Apps_Essential_Disclaimer": "De hierboven genoemde gebeurtenissen worden onderbroken als deze app is uitgeschakeld. Als je wilt dat Rocket.Chat werkt zonder de functionaliteit van deze app, moet je deze verwijderen", "Apps_Framework_Development_Mode": "Ontwikkelingsmodus inschakelen", - "Apps_Framework_Development_Mode_Description": "In de ontwikkelaarsmodus kunnen apps worden geïnstalleerd die niet afkomstig zijn van de Rocket.Chat-marktplaats.", + "Apps_Framework_Development_Mode_Description": "In de ontwikkelaarsmodus kunnen apps worden geïnstalleerd die niet afkomstig zijn van de Rocket.Chat-Marketplace.", "Apps_Framework_enabled": "Schakel het app-framework in", - "Apps_Game_Center": "Game center", + "Apps_Game_Center": "Game Center", "Apps_Game_Center_Back": "Terug naar Game Center", - "Apps_Game_Center_enabled": "Game center activeren", + "Apps_Game_Center_enabled": "Schakel Game Center in", "Apps_Game_Center_Invite_Friends": "Nodig je vrienden uit om mee te doen", "Apps_Game_Center_Play_Game_Together": "@here Laten we samen __name__ spelen!", - "Apps_Marketplace_Login_Required_Description": "Als u apps van de Rocket.Chat marktplaats koopt, moet u uw werkruimte registreren en inloggen.", - "Apps_Marketplace_Login_Required_Title": "Aanmelding voor marktplaats vereist", + "Apps_Interface_IPostExternalComponentClosed": "Gebeurtenis die plaatsvindt nadat een externe component is gesloten", + "Apps_Interface_IPostExternalComponentOpened": "Gebeurtenis die plaatsvindt nadat een externe component geopend is", + "Apps_Interface_IPostMessageDeleted": "Gebeurtenis die plaatsvindt nadat een bericht verwijderd is", + "Apps_Interface_IPostMessageSent": "Gebeurtenis die plaatsvindt nadat een bericht verzonden is", + "Apps_Interface_IPostMessageUpdated": "Gebeurtenis die plaatsvindt nadat een bericht bijgewerkt is", + "Apps_Interface_IPostRoomCreate": "Gebeurtenis die plaatsvindt nadat een kamer gemaakt is", + "Apps_Interface_IPostRoomDeleted": "Gebeurtenis die plaatsvindt nadat een kamer verwijderd is", + "Apps_Interface_IPostRoomUserJoined": "Gebeurtenis die plaatsvindt nadat een gebruiker zich bij een kamer heeft aangemeld (privégroep, openbaar kanaal)", + "Apps_Interface_IPreMessageDeletePrevent": "Gebeurtenis die plaatsvindt voordat een bericht verwijderd wordt", + "Apps_Interface_IPreMessageSentExtend": "Gebeurtenis die plaatsvindt voordat een bericht verzonden wordt", + "Apps_Interface_IPreMessageSentModify": "Gebeurtenis die plaatsvindt voordat een bericht verzonden wordt", + "Apps_Interface_IPreMessageSentPrevent": "Gebeurtenis die plaatsvindt voordat een bericht verzonden wordt", + "Apps_Interface_IPreMessageUpdatedExtend": "Gebeurtenis die plaatsvindt voordat een bericht bijgewerkt is", + "Apps_Interface_IPreMessageUpdatedModify": "Gebeurtenis die plaatsvindt voordat een bericht bijgewerkt is", + "Apps_Interface_IPreMessageUpdatedPrevent": "Gebeurtenis die plaatsvindt voordat een bericht bijgewerkt is", + "Apps_Interface_IPreRoomCreateExtend": "Gebeurtenis vindt plaats voordat een kamer gemaakt is", + "Apps_Interface_IPreRoomCreateModify": "Gebeurtenis vindt plaats voordat een kamer gemaakt is", + "Apps_Interface_IPreRoomCreatePrevent": "Gebeurtenis vindt plaats voordat een kamer gemaakt is", + "Apps_Interface_IPreRoomDeletePrevent": "Gebeurtenis die plaatsvindt voordat een kamer verwijderd wordt", + "Apps_Interface_IPreRoomUserJoined": "Gebeurtenis vindt plaats voordat een gebruiker zich bij een kamer voegt (privégroep, openbaar kanaal)", + "Apps_Marketplace_Deactivate_App_Prompt": "Wil je deze app echt uitschakelen?", + "Apps_Marketplace_Login_Required_Description": "Als u apps van de Rocket.Chat Marketplace wilt aankopen, moet u uw werkruimte registreren en inloggen.", + "Apps_Marketplace_Login_Required_Title": "Marketplace-aanmelding vereist", + "Apps_Marketplace_Modify_App_Subscription": "Abonnement wijzigen", "Apps_Marketplace_pricingPlan_monthly": "__price__ / maand", "Apps_Marketplace_pricingPlan_monthly_perUser": "__price__ / maand per gebruiker", - "Apps_Marketplace_pricingPlan_startingAt_monthly": "Vanaf __price__ / maand", - "Apps_Marketplace_pricingPlan_startingAt_monthly_perUser": "Vanaf __price__ / maand per gebruiker", - "Apps_Marketplace_pricingPlan_startingAt_yearly": "Vanaf __price__ / jaar", - "Apps_Marketplace_pricingPlan_startingAt_yearly_perUser": "Vanaf __price__ / jaar per gebruiker", + "Apps_Marketplace_pricingPlan_startingAt_monthly": "vanaf __price__ / maand", + "Apps_Marketplace_pricingPlan_startingAt_monthly_perUser": "vanaf __price__ / maand per gebruiker", + "Apps_Marketplace_pricingPlan_startingAt_yearly": "vanaf __price__ / jaar", + "Apps_Marketplace_pricingPlan_startingAt_yearly_perUser": "vanaf __price__ / jaar per gebruiker", "Apps_Marketplace_pricingPlan_yearly": "__price__ / jaar", "Apps_Marketplace_pricingPlan_yearly_perUser": "__price__ / jaar per gebruiker", + "Apps_Marketplace_Uninstall_App_Prompt": "Wil je deze app echt verwijderen?", + "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "Verwijder het toch", + "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "Deze app heeft een actief abonnement en als je de app verwijdert, wordt deze niet geannuleerd. Als u dat wilt, moet u uw abonnement wijzigen voordat u de installatie ongedaan maakt.", + "Apps_Permissions_Review_Modal_Title": "Deze app vereist de volgende machtigingen", + "Apps_Permissions_No_Permissions_Required": "De app vereist geen aanvullende machtigingen", + "Apps_Permissions_user_read": "Toegang tot gebruikersinformatie", + "Apps_Permissions_user_write": "Wijzig gebruikersinformatie", + "Apps_Permissions_upload_read": "Toegang tot bestanden die naar de server zijn geüpload", + "Apps_Permissions_upload_write": "Upload bestanden naar deze server", + "Apps_Permissions_server-setting_read": "Toegang tot instellingen op deze server", + "Apps_Permissions_server-setting_write": "Wijzig de instellingen op deze server", + "Apps_Permissions_room_read": "Toegang tot kamerinformatie", + "Apps_Permissions_room_write": "Creëer en wijzig kamers", + "Apps_Permissions_message_read": "Toegang tot berichten", + "Apps_Permissions_message_write": "Berichten verzenden en wijzigen", + "Apps_Permissions_livechat-status_read": "Toegang tot Livechat-statusinformatie", + "Apps_Permissions_livechat-custom-fields_write": "Wijzig de aangepaste veldconfiguratie van Livechat", + "Apps_Permissions_livechat-visitor_read": "Toegang tot Livechat-bezoekersinformatie", + "Apps_Permissions_livechat-visitor_write": "Wijzig Livechat-bezoekersinformatie", + "Apps_Permissions_livechat-message_read": "Toegang tot Livechat-berichtinformatie", + "Apps_Permissions_livechat-message_write": "Wijzig Livechat-berichtinformatie", + "Apps_Permissions_livechat-room_read": "Toegang tot Livechat-kamerinformatie", + "Apps_Permissions_livechat-room_write": "Wijzig Livechat-kamerinformatie", + "Apps_Permissions_livechat-department_read": "Toegang tot informatie over de Livechat-afdeling", + "Apps_Permissions_livechat-department_write": "Informatie van de Livechat-afdeling wijzigen", + "Apps_Permissions_slashcommand": "Registreer nieuwe slash-opdrachten", + "Apps_Permissions_apis": "Registreer nieuwe HTTP-eindpunten", + "Apps_Permissions_env_read": "Toegang tot minimale informatie over deze serveromgeving", + "Apps_Permissions_networking": "Toegang tot dit servernetwerk", + "Apps_Permissions_persistence": "Sla interne gegevens op in de database", + "Apps_Permissions_scheduler": "Registreer en onderhoud geplande taken", + "Apps_Permissions_ui_interact": "Interactie met de gebruikersinterface", "Apps_Settings": "App-instellingen", + "Apps_User_Already_Exists": "De gebruikersnaam \"__username__\" wordt al gebruikt. Hernoem of verwijder de gebruiker die het gebruikt om deze app te installeren", "Apps_WhatIsIt": "Apps: wat zijn ze?", "Apps_WhatIsIt_paragraph1": "Een nieuw pictogram in het administratiegebied! Wat betekent dit en wat zijn apps?", "Apps_WhatIsIt_paragraph2": "Allereerst verwijzen Apps in deze context niet naar de mobiele applicaties. In feite zou het het beste zijn om ze te beschouwen in termen van plug-ins of geavanceerde integraties.", - "Apps_WhatIsIt_paragraph3": "Ten tweede zijn het dynamische scripts of pakketten waarmee u uw Rocket.Chat-instantie kunt aanpassen zonder dat u de codebase hoeft af te vuren. Maar houd er rekening mee dat dit een nieuwe functieset is en daarom mogelijk niet 100% stabiel is. We zijn ook bezig met het ontwikkelen van de functieset, op dit moment is het mogelijk dat nog niet alles instelbaar is. Ga naar: voor meer informatie over het starten van het ontwikkelen van een app:", + "Apps_WhatIsIt_paragraph3": "Ten tweede zijn het dynamische scripts of pakketten waarmee u uw Rocket.Chat-instantie kunt aanpassen zonder de codebase te hoeven afsplitsen. Maar houd er rekening mee dat dit een nieuwe functieset is en daarom mogelijk niet 100% stabiel is. We zijn ook bezig met het ontwikkelen van de functieset, dus kan op dit moment niet alles worden aangepast. Lees hier voor meer informatie over hoe de ontwikkeling van een app te beginnen:", "Apps_WhatIsIt_paragraph4": "Maar met dat gezegd, als je geïnteresseerd bent in het inschakelen van deze functie en het uitproberen, klik dan op deze knop om het Apps-systeem in te schakelen.", "Archive": "Archiveren", "archive-room": "Archiefkamer", - "archive-room_description": "Toestemming om een kanaal te archiveren", + "archive-room_description": "Toestemming om een kanaal te archiveren", "are_also_typing": "zijn ook aan het typen", "are_typing": "zijn aan het typen", "Are_you_sure": "Weet je het zeker?", @@ -431,6 +509,8 @@ "Are_you_sure_you_want_to_disable_Facebook_integration": "Weet je zeker dat je Facebook-integratie wilt uitschakelen?", "Assets": "Branding", "Assign_admin": "Beheerder toewijzen", + "Assign_new_conversations_to_bot_agent": "Wijs nieuwe gesprekken toe aan de botagent", + "Assign_new_conversations_to_bot_agent_description": "Het routingsysteem zal proberen een bot-agent te vinden voordat nieuwe gesprekken aan een menselijke agent worden gericht.", "assign-admin-role": "Wijs beheerdersrol toe", "assign-admin-role_description": "Toestemming om de beheerdersrol aan andere gebruikers toe te wijzen", "assign-roles": "Rollen toewijzen", @@ -440,9 +520,9 @@ "Attachment_File_Uploaded": "Bestand geüpload", "Attribute_handling": "Behandeling van attributen", "Audio": "Audio", - "Audio_message": "Audio bericht", - "Audio_Notification_Value_Description": "Dit kan elk aangepast geluid zijn of standaard: beep, chelle, ding, droplet, highbell, seizoenen", - "Audio_Notifications_Default_Alert": "Geluidsmeldingen Standaardwaarschuwing", + "Audio_message": "Audiobericht", + "Audio_Notification_Value_Description": "Kan elk aangepast geluid zijn of de standaardgeluiden: piep, chelle, ding, droplet, highbell, seizoenen", + "Audio_Notifications_Default_Alert": "Audiomeldingen Standaardwaarschuwing", "Audio_Notifications_Value": "Standaard berichtmelding Audio", "Audios": "Audios", "Auth_Token": "Auth Token", @@ -450,144 +530,182 @@ "Author": "Auteur", "Author_Information": "Auteurs informatie", "Author_Site": "Auteur site", - "Authorization_URL": "Authorization URL", + "Authorization_URL": "Autorisatie-URL", "Authorize": "Authoriseren", - "Auto_Load_Images": "Automatisch afbeeldingen laden", + "Auto_Load_Images": "Afbeeldingen automatisch laden", "Auto_Selection": "Automatische selectie", - "Auto_Translate": "Auto-Translate", + "Auto_Translate": "Automatisch vertalen", "auto-translate": "Automatisch vertalen", - "auto-translate_description": "Toestemming om het automatische vertaalhulpmiddel te gebruiken", - "AutoLinker": "Autolinker", - "AutoLinker_Email": "AutoLinker Email", - "AutoLinker_Phone": "AutoLinker Phone", - "AutoLinker_Phone_Description": "Automatisch gekoppeld voor telefoonnummers. bijvoorbeeld `(123) 456-7890`", - "AutoLinker_StripPrefix": "AutoLinker Strip voorvoegsel", - "AutoLinker_StripPrefix_Description": "Beknopte weergave. bv https://rocket.chat => rocket.chat", - "AutoLinker_Urls_Scheme": "AutoLinker Schema: // URLs", - "AutoLinker_Urls_TLD": "AutoLinker TLD URLs", - "AutoLinker_Urls_www": "URL's AutoLinker 'www'", + "auto-translate_description": "Toestemming om de automatische vertaaltool te gebruiken", + "AutoLinker": "AutoLinker", + "AutoLinker_Email": "AutoLinker E-mail", + "AutoLinker_Phone": "AutoLinker Telefoon", + "AutoLinker_Phone_Description": "Automatisch gekoppeld voor telefoonnummers, bijvoorbeeld `(123) 456-7890`", + "AutoLinker_StripPrefix": "AutoLinker Strip-voorvoegsel", + "AutoLinker_StripPrefix_Description": "Korte weergave, bijv. https://rocket.chat => rocket.chat", + "AutoLinker_Urls_Scheme": "AutoLinker-schema:// URLs", + "AutoLinker_Urls_TLD": "AutoLinker TLD-URL's", + "AutoLinker_Urls_www": "AutoLinker 'www'-URL's", "AutoLinker_UrlsRegExp": "AutoLinker URL reguliere expressie", "Automatic_Translation": "Automatische vertaling", - "AutoTranslate": "Auto-Translate", - "AutoTranslate_APIKey": "API Key", + "AutoTranslate": "Automatisch vertalen", + "AutoTranslate_APIKey": "API sleutel", "AutoTranslate_Change_Language_Description": "Als u de taal voor automatisch vertalen wijzigt, worden eerdere berichten niet vertaald.", - "AutoTranslate_DeepL": "Deepl", - "AutoTranslate_Enabled": "Schakel Auto-Vertalen in", + "AutoTranslate_DeepL": "DeepL", + "AutoTranslate_Enabled": "Schakel automatisch vertalen in", "AutoTranslate_Enabled_Description": "Als u automatische vertaling inschakelt, kunnen mensen met de automatische vertalingtoestemming, de mogelijkheid krijgen om alle berichten automatisch krijgen in de geselecteerde taal te laten vertalen. Er kunnen kosten van toepassing zijn.", "AutoTranslate_Google": "Google", "AutoTranslate_Microsoft": "Microsoft", + "AutoTranslate_Microsoft_API_Key": "Ocp-Apim-abonnementssleutel", "AutoTranslate_ServiceProvider": "Dienstverlener", "Available": "Beschikbaar", "Available_agents": "Beschikbare agenten", + "Available_departments": "Beschikbare afdelingen", "Avatar": "Avatar", "Avatar_changed_successfully": "Avatar is succesvol gewijzigd", "Avatar_URL": "Avatar URL", - "Avatar_url_invalid_or_error": "De gegeven URL is ongeldig of niet bereikbaar. Probeer het opnieuw met een andere URL.", + "Avatar_url_invalid_or_error": "De opgegeven URL is ongeldig of niet toegankelijk. Probeer het opnieuw, maar met een andere URL.", "Avg_chat_duration": "Gemiddelde chatduur", - "Avg_first_response_time": "Gemiddelde tijd tot eerste reactie", + "Avg_first_response_time": "Gemiddelde eerste reactietijd", "Avg_of_abandoned_chats": "Gemiddeld aantal verlaten chats", "Avg_of_available_service_time": "Gemiddeld beschikbare tijd voor service", "Avg_of_chat_duration_time": "Gemiddeld duur van chat", "Avg_of_service_time": "Gemiddelde servicetijd", "Avg_of_waiting_time": "Gemiddelde wachttijd", - "Avg_reaction_time": "Gemiddelde reactie tijd", + "Avg_reaction_time": "Gemiddelde reactietijd", "Avg_response_time": "Gemiddelde reactietijd", - "away": "Afwezig", + "away": "afwezig", "Away": "Afwezig", "away_female": "afwezig", "Away_female": "Afwezig", "away_male": "afwezig", "Away_male": "Afwezig", "Back": "Terug", - "Back_to_applications": "Terug naar toepassingen", + "Back_to_applications": "Terug naar applicaties", "Back_to_chat": "Terug naar chat", "Back_to_imports": "Terug naar imports", "Back_to_integration_detail": "Terug naar het integratiedetail", "Back_to_integrations": "Terug naar integraties", - "Back_to_login": "Terug naar Inloggen", + "Back_to_login": "Terug naar inloggen", "Back_to_Manage_Apps": "Terug naar Apps beheren", "Back_to_permissions": "Terug naar machtigingen", + "Back_to_room": "Terug naar kamer", "Backup_codes": "Back-upcodes", - "ban-user": "Verban gebruiker", - "ban-user_description": "Toestemming om een gebruiker van een kanaal te verbannen", - "Best_first_response_time": "Snelste reactie tijd", - "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "Beta-functie. Afhankelijk van Video Conference om ingeschakeld te worden.", + "ban-user": "Ban gebruiker", + "ban-user_description": "Toestemming om een gebruiker van een kanaal te verbannen", + "BBB_End_Meeting": "Vergadering beëindigen", + "BBB_Join_Meeting": "Deelnemen aan de vergadering", + "BBB_Start_Meeting": "Vergadering starten", + "BBB_You_have_no_permission_to_start_a_call": "Je hebt geen toestemming om te bellen", + "Best_first_response_time": "Beste eerste reactietijd", + "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "Beta-functie. Afhankelijk van videoconferentie om ingeschakeld te worden.", + "Better": "Beter", + "Bio": "Bio", + "Bio_Placeholder": "Bio placeholder", + "Block_Multiple_Failed_Logins_Attempts_Until_Block_By_Ip": "Hoeveel mislukte pogingen tot blokkering door IP", + "Block_Multiple_Failed_Logins_Attempts_Until_Block_by_User": "Hoeveel mislukte inlogpogingen voor blokkering door gebruiker", + "Block_Multiple_Failed_Logins_By_Ip": "Blokkeer mislukte inlogpogingen via IP", + "Block_Multiple_Failed_Logins_By_User": "Blokkeer mislukte inlogpogingen op gebruikersnaam", + "Block_Multiple_Failed_Logins_Enable_Collect_Login_data_Description": "Sla IP en gebruikersnaam van de inlogpogingen op in de database", + "Block_Multiple_Failed_Logins_Enabled": "Schakel het verzamelen van inloggegevens in", + "Block_Multiple_Failed_Logins_Ip_Whitelist": "Geautoriseerde IPs", + "Block_Multiple_Failed_Logins_Ip_Whitelist_Description": "Door komma's gescheiden lijst met geautoriseerde IP-adressen", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_Ip_In_Minutes": "Tijd voor het deblokkeren van IP (in minuten)", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_User_In_Minutes": "Tijd voor het deblokkeren van de gebruiker (in minuten)", "Block_User": "Blokkeer gebruiker", "Blockchain": "Blockchain", - "Blockstack_Auth_Description": "Verificatiebeschrijving", - "Blockstack_ButtonLabelText": "Knop label tekst", + "Blockstack_Auth_Description": "Auth beschrijving", + "Blockstack_ButtonLabelText": "Knoplabeltekst", "Blockstack_Generate_Username": "Genereer gebruikersnaam", "Body": "Body", "bold": "vetgedrukt", - "bot_request": "Botaanvraag", + "bot_request": "Bot-verzoek", "BotHelpers_userFields": "Gebruikersvelden", - "BotHelpers_userFields_Description": "CSV van gebruikersvelden die toegankelijk zijn met behulp van de robots.", + "BotHelpers_userFields_Description": "CSV van gebruikersvelden waartoe bots-helper-methoden toegang hebben.", "Bots": "Bots", "Branch": "Branch", + "Broadcast": "Broadcast", "Broadcast_channel": "Broadcast Channel", "Broadcast_channel_Description": "Alleen geautoriseerde gebruikers kunnen nieuwe berichten schrijven, maar de andere gebruikers kunnen antwoorden", "Broadcast_Connected_Instances": "Broadcast Connected Instances", - "Broadcasting_api_key": "Broadcasting API Key", - "Broadcasting_client_id": "Broadcasting Client ID", - "Broadcasting_client_secret": "Cliëntgeheim uitzenden", + "Broadcasting_api_key": "Broadcasting API-sleutel", + "Broadcasting_client_id": "Broadcasting Client-ID", + "Broadcasting_client_secret": "Broadcasting Client geheim", "Broadcasting_enabled": "Broadcasting ingeschakeld", - "Broadcasting_media_server_url": "URL van uitzendmedia-server", + "Broadcasting_media_server_url": "Broadcasting Media Server URL", "Browse_Files": "Bestanden doorbladeren", "Browser_does_not_support_audio_element": "Uw browser ondersteunt het audio-element niet.", - "Bugsnag_api_key": "Bugsnag API Key", + "Browser_does_not_support_video_element": "Uw browser ondersteunt het video-element niet.", + "Bugsnag_api_key": "Bugsnag API-sleutel", "Build_Environment": "Bouwomgeving", - "bulk-register-user": "Bulk Maak kanalen", + "bulk-register-user": "Gebruikers in bulk aanmaken", "bulk-register-user_description": "Toestemming om gebruikers in bulk aan te maken", "Busiest_day": "Drukste dag", "Busiest_time": "Drukste tijd", + "Business_Hour": "Kantooruur", + "Business_Hour_Removed": "Kantooruur verwijderd", + "Business_Hours": "Kantooruren", "Business_hours_enabled": "Kantooruren ingeschakeld", - "busy": "Bezet", - "Busy": "Bezet", - "busy_female": "bezet", - "Busy_female": "Bezet", - "busy_male": "bezet", - "Busy_male": "Bezet", + "Business_hours_updated": "Openingstijden bijgewerkt", + "busy": "bezig", + "Busy": "Bezig", + "busy_female": "bezig", + "Busy_female": "Bezig", + "busy_male": "bezig", + "Busy_male": "Bezig", "by": "door", + "By_author": "Door __author__", "cache_cleared": "Cache gewist", + "Call": "Bel", "call-management": "Oproepbeheer", + "Caller": "Beller", "Cancel": "Annuleren", "Cancel_message_input": "Annuleren", "Canceled": "Geannuleerd", + "Canned Responses": "Standaardantwoorden", + "Canned_Response_Removed": "Standaardantwoord verwijderd", + "Canned_Responses_Enable": "Schakel standaardantwoorden in", "Cannot_invite_users_to_direct_rooms": "Kan geen gebruikers in directe kamers uitnodigen", - "Cannot_open_conversation_with_yourself": "Kan bericht niet met uzelf leiden", - "CAS_autoclose": "Autoclose Login Popup", + "Cannot_open_conversation_with_yourself": "U kunt geen directe berichten naar uzelf sturen", + "Cannot_share_your_location": "Kan uw locatie niet delen...", + "CAS_autoclose": "Inlogpop-up automatisch sluiten", "CAS_base_url": "SSO-basis-URL", - "CAS_base_url_Description": "De basis-URL van uw externe SSO-service, bijvoorbeeld: https: //sso.example.undef/sso/", - "CAS_button_color": "Login-knop Achtergrondkleur", - "CAS_button_label_color": "Login-knop Tekstkleur", - "CAS_button_label_text": "Login Button Label", + "CAS_base_url_Description": "De basis-URL van uw externe SSO-service, bijvoorbeeld: https://sso.example.undef/sso/", + "CAS_button_color": "Achtergrondkleur inlogknop", + "CAS_button_label_color": "Tekstkleur inlogknop", + "CAS_button_label_text": "Label inlogknop", + "CAS_Creation_User_Enabled": "Sta het aanmaken van gebruikers toe", + "CAS_Creation_User_Enabled_Description": "Sta het maken van CAS-gebruikers toe op basis van gegevens die verstrekt zijn door het CAS-ticket.", "CAS_enabled": "Ingeschakeld", - "CAS_Login_Layout": "CAS-aanmelding", - "CAS_login_url": "SSO-inlog-URL", - "CAS_login_url_Description": "De aanmeldings-URL van uw externe SSO-service, bijvoorbeeld: https: //sso.example.undef/sso/login", - "CAS_popup_height": "Login Popup Hoogte", - "CAS_popup_width": "Login Popup Width", + "CAS_Login_Layout": "CAS-aanmeldingslay-out", + "CAS_login_url": "SSO-aanmeldings-URL", + "CAS_login_url_Description": "De inlog-URL van uw externe SSO-service, bijvoorbeeld: https://sso.example.undef/sso/login", + "CAS_popup_height": "Hoogte aanmeldingspop-up", + "CAS_popup_width": "Breedte aanmeldingspop-up", "CAS_Sync_User_Data_Enabled": "Synchroniseer altijd gebruikersgegevens", - "CAS_Sync_User_Data_Enabled_Description": "Synchroniseer altijd externe CAS-gebruikersgegevens in beschikbare attributen bij het inloggen. Opmerking: Attributen worden sowieso altijd gesynchroniseerd bij het maken van een account.", + "CAS_Sync_User_Data_Enabled_Description": "Synchroniseer altijd externe CAS-gebruikersgegevens naar beschikbare attributen bij het inloggen. Opmerking: Kenmerken worden sowieso altijd gesynchroniseerd bij het maken van een account.", "CAS_Sync_User_Data_FieldMap": "Kenmerkkaart", "CAS_Sync_User_Data_FieldMap_Description": "Gebruik deze JSON-invoer om interne attributen (sleutel) te bouwen op basis van externe attributen (waarde). Externe attribuutnamen ingesloten met '%' worden geïnterpoleerd in waardestrings.Voorbeeld, `{\" email \":\"% email% \",\" name \":\"% firstname%,% lastname% \"}`De kenmerkkaart wordt altijd geïnterpoleerd. In CAS 1.0 is alleen het kenmerk `gebruikersnaam 'beschikbaar. Beschikbare interne kenmerken zijn: gebruikersnaam, naam, e-mail, kamers; rooms is een door komma's gescheiden lijst van kamers om deel te nemen na het maken van de gebruiker, bijvoorbeeld: {\"rooms\": \"% team%,% department%\"} zou CAS-gebruikers bij de creatie vergezellen naar hun team- en afdelingskanaal.", + "CAS_trust_username": "Vertrouw op CAS-gebruikersnaam", + "CAS_trust_username_description": "Indien ingeschakeld, vertrouwt Rocket.Chat erop dat elke gebruikersnaam van CAS toebehoort aan dezelfde gebruiker op Rocket.Chat.Dit kan nodig zijn als de naam van een gebruiker wordt gewijzigd op CAS, maar het kan mensen ook toestaan de controle over Rocket.Chat-accounts te nemen door hun eigen CAS-gebruikers te hernoemen.", "CAS_version": "CAS-versie", "CAS_version_Description": "Gebruik alleen een ondersteunde CAS-versie die wordt ondersteund door uw CAS SSO-service.", "Categories": "Categorieën", "CDN_JSCSS_PREFIX": "CDN-voorvoegsel voor JS / CSS", - "CDN_PREFIX": "CDN Prefix", + "CDN_PREFIX": "CDN-voorvoegsel", "CDN_PREFIX_ALL": "CDN-voorvoegsel voor alle items gebruiken", "Certificates_and_Keys": "Certificaten en sleutels", - "Change_Room_Type": "Het ruimtetype veranderen", - "Changing_email": "Veranderen van e-mail", + "Change_Room_Type": "Het kamertype wijzigen", + "Changing_email": "E-mail wijzigen", "channel": "kanaal", "Channel": "Kanaal", - "Channel_already_exist": "Het kanaal '#%s' bestaat al.", + "Channel_already_exist": "Het kanaal `#%s` bestaat al.", "Channel_already_exist_static": "Het kanaal bestaat al.", "Channel_already_Unarchived": "Kanaal met de naam `#%s` is al in ongearchiveerde staat", "Channel_Archived": "Kanaal met de naam `#%s` is succesvol gearchiveerd", - "Channel_created": "Kanaal `#%s` gemaakt.", + "Channel_created": "Kanaal `#%s` aangemaakt.", "Channel_doesnt_exist": "Het kanaal `#%s` bestaat niet.", + "Channel_Export": "Kanaal exporteren", "Channel_name": "Kanaal naam", "Channel_Name_Placeholder": "Voer de kanaalnaam in...", "Channel_to_listen_on": "Kanaal om op te luisteren", @@ -595,41 +713,54 @@ "Channels": "Kanalen", "Channels_are_where_your_team_communicate": "Kanalen zijn waar uw team communiceert", "Channels_list": "Lijst van de openbare kanalen", - "Chat_button": "Chat button", + "Channel_what_is_this_channel_about": "Waar gaat dit kanaal over?", + "Chart": "Grafiek", + "Chat_button": "Chat-knop", + "Chat_close": "Chat sluiten", "Chat_closed": "Chat gesloten", - "Chat_closed_by_agent": "Chat gesloten door operator", + "Chat_closed_by_agent": "Chat gesloten door agent", "Chat_closed_successfully": "Chat met succes afgesloten", - "Chat_Now": "Praat nu", - "Chat_window": "chatvenster", - "Chatops_Enabled": "Chatops Inschakelen", - "Chatops_Title": "Chatops Panel", - "Chatops_Username": "Chatops Gebruikersnaam", - "Chatpal_AdminPage": "Chatpal-beheerderspagina", - "Chatpal_All_Results": "Alle", - "Chatpal_API_Key": "API Key", - "Chatpal_API_Key_Description": "U heeft nog geen API-sleutel? Ontvang er een!", - "Chatpal_Backend": "Backend Type", + "Chat_History": "Chatgeschiedenis", + "Chat_Now": "Chat nu", + "Chat_queued": "Chat in de wachtrij", + "Chat_removed": "Chat verwijderd", + "Chat_start": "Chat starten", + "Chat_started": "Chat is gestart", + "Chat_taken": "Chat genomen", + "Chat_window": "Chatvenster", + "Chatops_Enabled": "Schakel Chatops in", + "Chatops_Title": "Chatops paneel", + "Chatops_Username": "Chatops gebruikersnaam", + "Chatpal_AdminPage": "Chatpal-beheerpagina", + "Chatpal_All_Results": "Alles", + "Chatpal_API_Key": "API sleutel", + "Chatpal_API_Key_Description": "Heeft u nog geen API-sleutel? Krijg er een!", + "Chatpal_Backend": "Type backend", "Chatpal_Backend_Description": "Selecteer of u Chatpal als een service of als installatie op locatie wilt gebruiken", - "Chatpal_Base_URL": "Base URL", - "Chatpal_Base_URL_Description": "Een korte beschrijving van het uitvoeren van een lokale instantie op github. De URL moet absolue zijn en verwijzen naar de chatpal-kern, bijvoorbeeld http: // localhost: 8983 / SOLR / chatpal.", - "Chatpal_Batch_Size": "Index Batch-grootte", - "Chatpal_Batch_Size_Description": "De batchgrootte van indexdocumenten (bij bootstrappen)", - "Chatpal_channel_not_joined_yet": "Channel nog niet toegetreden", - "Chatpal_create_key": "Sleutel maken", - "Chatpal_created_key_successfully": "API-Key is succesvol gemaakt", + "Chatpal_Base_URL": "Basis-URL", + "Chatpal_Base_URL_Description": "Vind een beschrijving op github over hoe u een lokale instantie draait. De URL moet absoluut zijn en verwijzen naar de chatpal-kern, bijvoorbeeld http://localhost:8983/SOLR/chatpal.", + "Chatpal_Batch_Size": "Indexbatchgrootte", + "Chatpal_Batch_Size_Description": "De batchgrootte van indexdocumenten (bij bootstrapping)", + "Chatpal_channel_not_joined_yet": "Kanaal is nog geen lid", + "Chatpal_create_key": "Sleutel aanmaken", + "Chatpal_created_key_successfully": "API-sleutel is succesvol aangemaakt", + "Chatpal_Current_Room_Only": "Zelfde kamer", "Chatpal_Default_Result_Type": "Standaard resultaattype", - "Chatpal_Default_Result_Type_Description": "Bepaalt welk resultaattype wordt weergegeven op resultaat. Alles betekent dat een overzicht voor alle typen wordt verstrekt.", + "Chatpal_Default_Result_Type_Description": "Bepaalt welk resultaattype wordt weergegeven per resultaat. Alles betekent dat een overzicht voor alle typen wordt gegeven.", + "Chat_Duration": "Chatduur", "Chatpal_Email_Address": "E-mailadres", "Chatpal_ERROR_Email_must_be_set": "E-mail moet zijn ingesteld", - "Chatpal_ERROR_Email_must_be_valid": "Email moet geldig zijn", + "Chatpal_ERROR_Email_must_be_valid": "E-mail moet geldig zijn", "Chatpal_ERROR_TAC_must_be_checked": "Algemene voorwaarden moeten worden gecontroleerd", "Chatpal_ERROR_username_already_exists": "Gebruikersnaam bestaat al", - "Chatpal_Get_more_information_about_chatpal_on_our_website": "Meer informatie over Chatpal op http://chatpal.io!", + "Chatpal_Get_more_information_about_chatpal_on_our_website": "Meer informatie over Chatpal op http://chatpal.io!", "Chatpal_go_to_message": "Springen", "Chatpal_go_to_room": "Springen", - "Chatpal_go_to_user": "Stuur een direct bericht", - "Chatpal_HTTP_Headers": "Http Headers", - "Chatpal_HTTP_Headers_Description": "Lijst met HTTP-headers, één kopregel per regel. Formaat: naam: waarde", + "Chatpal_go_to_user": "Direct bericht sturen", + "Chatpal_HTTP_Headers": "HTTP-headers", + "Chatpal_HTTP_Headers_Description": "Lijst met HTTP-headers, één header per regel. Formaat: naam: waarde", + "Chatpal_Include_All_Public_Channels": "Inclusief alle openbare kanalen", + "Chatpal_Include_All_Public_Channels_Description": "Zoek in alle openbare kanalen, zelfs als u zich nog niet hebt aangemeld.", "Chatpal_Main_Language": "Hoofdtaal", "Chatpal_Main_Language_Description": "De taal die het meest wordt gebruikt in gesprekken", "Chatpal_Messages": "Berichten", @@ -640,77 +771,91 @@ "Chatpal_one_search_result": "1 resultaat gevonden", "Chatpal_Rooms": "Kamers", "Chatpal_run_search": "Zoeken", - "Chatpal_search_page_of": "Pagina%s van%s", + "Chatpal_search_page_of": "Pagina %s van %s", "Chatpal_search_results": "%s resultaten gevonden", "Chatpal_Search_Results": "Zoekresultaten", "Chatpal_Suggestion_Enabled": "Suggesties ingeschakeld", - "Chatpal_TAC_read": "Ik heb de algemene voorwaarden gelezen", - "Chatpal_Terms_and_Conditions": "Termen en voorwaarden", - "Chatpal_Timeout_Size": "Indextime-out", - "Chatpal_Timeout_Size_Description": "De tijd tussen 2 indexvensters in ms (bij bootstrappen)", + "Chatpal_TAC_read": "Ik heb de voorwaarden gelezen", + "Chatpal_Terms_and_Conditions": "Voorwaarden", + "Chatpal_Timeout_Size": "Index time-out", + "Chatpal_Timeout_Size_Description": "De tijd tussen 2 indexvensters in ms (bij bootstrapping)", "Chatpal_Users": "Gebruikers", - "Chatpal_Welcome": "Veel plezier met zoeken!", - "Chatpal_Window_Size": "Index venstergrootte", - "Chatpal_Window_Size_Description": "De grootte van indexvensters in uren (bij bootstrappen)", + "Chatpal_Welcome": "Veel plezier bij het zoeken!", + "Chatpal_Window_Size": "Grootte indexvenster", + "Chatpal_Window_Size_Description": "De grootte van indexvensters in uren (bij bootstrapping)", + "Chats_removed": "Chats verwijderd", "Check_All": "Alles aanvinken", "Check_Progress": "Voortgang controleren", "Choose_a_room": "Kies een kamer", "Choose_messages": "Kies berichten", - "Choose_the_alias_that_will_appear_before_the_username_in_messages": "Kies de alias die zal verschijnen voor de gebruikersnaam in berichten.", - "Choose_the_username_that_this_integration_will_post_as": "Kies de gebruikersnaam als welke deze integratie zal posten.", + "Choose_the_alias_that_will_appear_before_the_username_in_messages": "Kies de alias die in berichten voor de gebruikersnaam zal verschijnen.", + "Choose_the_username_that_this_integration_will_post_as": "Kies de gebruikersnaam die deze integratie zal posten.", "Choose_users": "Kies gebruikers", - "Clean_Usernames": "Wis gebruikersnamen", - "clean-channel-history": "Reinig kanaalgeschiedenis", + "Clean_Usernames": "Gebruikersnamen wissen", + "clean-channel-history": "Maak kanaalgeschiedenis schoon", "clean-channel-history_description": "Toestemming om de geschiedenis van kanalen te wissen", - "clear": "Duidelijk", - "Clear_all_unreads_question": "Wis alle ongelezen?", - "clear_cache_now": "Cache nu wissen", + "clear": "Wissen", + "Clear_all_unreads_question": "Alle ongelezen berichten wissen?", + "clear_cache_now": "Wis nu de cache", "Clear_filters": "Filters wissen", "clear_history": "Geschiedenis wissen", "Click_here": "Klik hier", "Click_here_for_more_details_or_contact_sales_for_a_new_license": "Klik hier voor meer details of neem contact op met __email__ voor een nieuwe licentie.", "Click_here_for_more_info": "Klik hier voor meer info", - "Click_here_to_enter_your_encryption_password": "Klik hier om uw coderingswachtwoord in te voeren", + "Click_here_to_enter_your_encryption_password": "Klik hier om uw versleutelingswachtwoord in te voeren", "Click_here_to_view_and_copy_your_password": "Klik hier om uw wachtwoord te bekijken en te kopiëren.", "Click_the_messages_you_would_like_to_send_by_email": "Klik op de berichten die u per e-mail wilt verzenden", - "Click_to_join": "Klik om lid te worden!", + "Click_to_join": "Klik om mee te doen!", "Click_to_load": "Klik om te laden", "Client_ID": "Client ID", "Client_Secret": "Client Secret", - "Clients_will_refresh_in_a_few_seconds": "Klanten zullen vernieuwen in een paar seconden", - "close": "Sluiten", - "Close": "Dicht", + "Clients_will_refresh_in_a_few_seconds": "Clients worden binnen enkele seconden vernieuwd", + "close": "sluiten", + "Close": "Sluiten", + "Close_room_description": "Je staat op het punt deze chat te sluiten. Weet je zeker dat je wilt doorgaan?", "close-livechat-room": "Omnichannel-ruimte sluiten", "close-livechat-room_description": "Toestemming om de huidige omnichannel-ruimte te sluiten", "close-others-livechat-room": "Andere omnichannelruimte sluiten", "close-others-livechat-room_description": "Toestemming om andere omnichannel-kamers te sluiten", "Closed": "Gesloten", + "Closed_At": "Gesloten om", "Closed_automatically": "Automatisch gesloten door het systeem", "Closed_by_visitor": "Gesloten door bezoeker", - "Closing_chat": "closing-chat", + "Closing_chat": "Chat sluiten", + "Closing_chat_message": "Afsluitend chatbericht", "Cloud": "Cloud", "Cloud_Apply_Offline_License": "Offline licentie toepassen", "Cloud_Change_Offline_License": "Offline licentie wijzigen", - "Cloud_License_applied_successfully": "Licentie succesvol toegepast", + "Cloud_License_applied_successfully": "Licentie succesvol toegepast!", "Cloud_Invalid_license": "Licentie ongeldig!", "Cloud_Apply_license": "Licentie toepassen", "Cloud_connectivity": "Cloud-connectiviteit", - "Cloud_address_to_send_registration_to": "Het adres om uw Cloud-registratie-e-mail naar te verzenden.", + "Cloud_address_to_send_registration_to": "Het adres waarnaar uw Cloud-registratie-e-mail moet worden verzonden.", + "Cloud_click_here": "Ga na het kopiëren van de tekst naar [cloud console (klik hier)](__cloudConsoleUrl__).", "Cloud_console": "Cloud Console", "Cloud_error_code": "Code: __errorCode__", + "Cloud_error_in_authenticating": "Fout ontvangen tijdens authenticatie", "Cloud_Info": "Cloud-informatie", "Cloud_login_to_cloud": "Log in op Rocket.Chat Cloud", - "Cloud_logout": "Uitloggen van Rocket.Chat Cloud", - "Cloud_manually_input_token": "Voer handmatig het token in dat u hebt ontvangen van de Cloud Registration Email.", + "Cloud_logout": "Afmelden van Rocket.Chat Cloud", + "Cloud_manually_input_token": "Voer het token in dat u van de Cloud Console hebt ontvangen.", + "Cloud_register_error": "Er is een fout opgetreden bij het verwerken van uw verzoek. Probeer het later opnieuw.", "Cloud_Register_manually": "Offline registreren", + "Cloud_register_offline_finish_helper": "Nadat u het registratieproces in de Cloud Console hebt voltooit, krijgt u wat tekst te zien. Plak het hier om de registratie te voltooien.", + "Cloud_register_offline_helper": "Werkruimten kunnen handmatig worden geregistreerd als het airgapped is of wanneer de netwerktoegang beperkt is. Kopieer de onderstaande tekst en ga naar onze Cloud Console om het proces te voltooien.", + "Cloud_register_success": "Uw werkruimte is succesvol geregistreerd!", + "Cloud_registration_pending_html": "Mobiele meldingen werken pas als de registratie voltooid is. Meer informatie", + "Cloud_registration_pending_title": "Cloudregistratie is nog in behandeling", "Cloud_registration_required": "Registratie vereist", - "Cloud_registration_required_description": "Het lijkt erop dat u tijdens de installatie niet hebt gekozen om uw werkruimte te registreren.", + "Cloud_registration_required_description": "Het lijkt erop dat u tijdens de installatie er niet hebt voor gekozen om uw werkruimte te registreren.", "Cloud_registration_required_link_text": "Klik hier om je werkruimte te registreren.", - "Cloud_resend_email": "Email opnieuw verzenden", + "Cloud_resend_email": "E-mail opnieuw verzenden", "Cloud_Service_Agree_PrivacyTerms": "Overeenkomst voor privacyvoorwaarden voor cloudservice", "Cloud_Service_Agree_PrivacyTerms_Description": "Ik ga akkoord met de voorwaarden & het privacybeleid", "Cloud_Service_Agree_PrivacyTerms_Login_Disabled_Warning": "U moet de privacyvoorwaarden van de cloud aanvaarden (Installatiewizard > Cloud-informatie > Overeenkomst voor privacyvoorwaarden voor cloudservice) om de verbinding te maken met uw cloudwerkruimte", "Cloud_status_page_description": "Als een bepaalde Cloud Service problemen heeft, dan kunt u gekende problemen controleren op onze statuspagina op", + "Cloud_token_instructions": "Ga naar Cloud Console om uw werkruimte te registreren. Log in of maak een account aan en klik op registreren in eigen beheer. Plak het verkregen token hieronder", + "Cloud_troubleshooting": "Probleemoplossen", "Cloud_update_email": "Update e-mail", "Cloud_what_is_it": "Wat is dit?", "Cloud_what_is_it_additional": "Daarnaast kunt u licenties, facturering en ondersteuning beheren vanuit de Rocket.Chat Cloud Console.", @@ -718,53 +863,69 @@ "Cloud_what_is_it_services_like": "Diensten zoals:", "Cloud_workspace_connected": "Je werkruimte is verbonden met Rocket.Chat Cloud. Als je hier inlogt op je Rocket.Chat Cloud-account, kun je communiceren met bepaalde diensten zoals marketplace.", "Cloud_workspace_connected_plus_account": "Uw werkruimte is nu verbonden met de Rocket.Chat Cloud en er is een account aan gekoppeld.", - "Cloud_workspace_connected_without_account": "Uw werkruimte is nu verbonden met de Rocket.Chat Cloud. Als u wilt, kunt u inloggen op de Rocket.Chat Cloud en uw werkruimte koppelen aan uw Cloud-account.", + "Cloud_workspace_connected_without_account": "Je werkruimte is nu verbonden met de Rocket.Chat Cloud. Als je wilt, kun je inloggen op de Rocket.Chat Cloud en je werkruimte koppelen aan je Cloud-account.", "Cloud_workspace_disconnect": "Als u geen gebruik meer wilt maken van cloudservices, kunt u uw werkruimte loskoppelen van Rocket.Chat Cloud.", "Cloud_workspace_support": "Als u problemen ondervindt met een cloudservice, probeer dan eerst te synchroniseren. Mocht het probleem aanhouden, open dan een supportticket in de Cloud Console.", "Collaborative": "Samenwerkend", "Collapse": "Samenvouwen", - "Collapse_Embedded_Media_By_Default": "Klap ingebedde media standaard in", + "Collapse_Embedded_Media_By_Default": "Vouw ingesloten media standaard samen", "color": "Kleur", "Color": "Kleur", "Colors": "Kleuren", "Commands": "Commando's", - "Comment_to_leave_on_closing_session": "Commentaar bij het verlaten van de sluitingsessie", + "Comment_to_leave_on_closing_session": "Reactie achter te laten bij het verlaten van de sessie", "Common_Access": "Gemeenschappelijke toegang", "Community": "Gemeenschap", "Compact": "Compact", - "Condensed": "Condensed", + "Condensed": "Gecondenseerd", "Commit_details": "Commit details", "Completed": "Voltooid", "Computer": "Computer", + "Configure_Incoming_Mail_IMAP": "Inkomende e-mail configureren (IMAP)", + "Configure_Outgoing_Mail_SMTP": "Uitgaande e-mail configureren (SMTP)", "Confirm_new_encryption_password": "Bevestig nieuw versleutelingswachtwoord", "Confirm_new_password": "Bevestig nieuw wachtwoord", - "Confirm_New_Password_Placeholder": "Voer opnieuw een nieuw wachtwoord in ...", + "Confirm_New_Password_Placeholder": "Voer het nieuwe wachtwoord opnieuw in...", "Confirm_password": "Bevestig uw wachtwoord", "Connect": "Verbinden", + "Connect_SSL_TLS": "Maak verbinding met SSL/TLS", "Connection_Closed": "Verbinding gesloten", - "Connection_Reset": "Verbindingsreset", + "Connection_Reset": "Verbinding gereset", + "Connection_success": "LDAP-verbinding geslaagd", "Connectivity_Services": "Connectiviteitsdiensten", - "Consulting": "Overleg plegen", - "Consumer_Goods": "Consumentengoederen", + "Consulting": "Consultant", + "Consumer_Packaged_Goods": "Verpakte consumptiegoederen", "Contact": "Contact", "Contacts": "Contacten", + "Contact_Name": "Contactnaam", + "Contact_Center": "Contact centrum", + "Contact_Chat_History": "Contact chatgeschiedenis", "Contains_Security_Fixes": "Bevat beveiligingsfixes", + "Contact_Manager": "Contact manager", + "Contact_not_found": "Contact niet gevonden", + "Contact_Profile": "Contactprofiel", "Content": "Inhoud", - "Continue": "Voortzetten", + "Continue": "Voortgaan", "Continuous_sound_notifications_for_new_livechat_room": "Continue geluidsmeldingen voor nieuwe omnichannelruimte", "Conversation": "Gesprek", "Conversation_closed": "Gesprek gesloten: __comment__.", + "Conversation_closing_tags": "Gesprek afsluitende tags", + "Conversation_closing_tags_description": "Afsluitingstag worden bij het afsluiten automatisch aan gesprekken toegewezen.", + "Conversation_finished": "Gesprek beëindigd", "Conversation_finished_message": "Gesprek beëindigd bericht", + "Conversation_finished_text": "Gesprek voltooid tekst", "conversation_with_s": "het gesprek met %s", - "Conversations": "conversaties", + "Conversations": "Gesprekken", "Conversations_per_day": "Gesprekken per dag", - "Convert_Ascii_Emojis": "ASCII naar Emoji Converteren ", - "Copied": "gekopieerde", + "Convert_Ascii_Emojis": "Converteer ASCII naar Emoji", + "Copied": "Gekopieerd", "Copy": "Kopiëren", + "Copy_text": "Kopieer tekst", "Copy_to_clipboard": "Kopieer naar klembord", "COPY_TO_CLIPBOARD": "KOPIEER NAAR KLEMBORD", "could-not-access-webdav": "Geen toegang tot WebDAV", - "Count": "Aantal", + "Count": "Tellen", + "Counters": "Tellers", "Country": "Land", "Country_Afghanistan": "Afghanistan", "Country_Albania": "Albanië", @@ -794,13 +955,13 @@ "Country_Bolivia": "Bolivia", "Country_Bosnia_and_Herzegovina": "Bosnië-Herzegovina", "Country_Botswana": "Botswana", - "Country_Bouvet_Island": "Bouvet Island", + "Country_Bouvet_Island": "Bouvet-eiland", "Country_Brazil": "Brazilië", "Country_British_Indian_Ocean_Territory": "Brits-Indisch oceaan gebied", "Country_Brunei_Darussalam": "Brunei Darussalam", "Country_Bulgaria": "Bulgarije", "Country_Burkina_Faso": "Burkina Faso", - "Country_Burundi": "Boeroendi", + "Country_Burundi": "Burundi", "Country_Cambodia": "Cambodja", "Country_Cameroon": "Kameroen", "Country_Canada": "Canada", @@ -815,14 +976,14 @@ "Country_Colombia": "Colombia", "Country_Comoros": "Comoren", "Country_Congo": "Congo", - "Country_Congo_The_Democratic_Republic_of_The": "Congo, Democratische Republiek", - "Country_Cook_Islands": "Cook eilanden", + "Country_Congo_The_Democratic_Republic_of_The": "Congo, de Democratische Republiek", + "Country_Cook_Islands": "Cook Eilanden", "Country_Costa_Rica": "Costa Rica", - "Country_Cote_Divoire": "Cote D'ivoire", + "Country_Cote_Divoire": "Ivoorkust", "Country_Croatia": "Kroatië", "Country_Cuba": "Cuba", "Country_Cyprus": "Cyprus", - "Country_Czech_Republic": "Tsjechische Republiek", + "Country_Czech_Republic": "Tsjechië", "Country_Denmark": "Denemarken", "Country_Djibouti": "Djibouti", "Country_Dominica": "Dominica", @@ -834,8 +995,8 @@ "Country_Eritrea": "Eritrea", "Country_Estonia": "Estland", "Country_Ethiopia": "Ethiopië", - "Country_Falkland_Islands_Malvinas": "Falkland Eilanden (Malvinas)", - "Country_Faroe_Islands": "Faroe Islands", + "Country_Falkland_Islands_Malvinas": "Falklandeilanden (Malvinas)", + "Country_Faroe_Islands": "Faeröer", "Country_Fiji": "Fiji", "Country_Finland": "Finland", "Country_France": "Frankrijk", @@ -858,13 +1019,13 @@ "Country_Guinea_bissau": "Guinee-Bissau", "Country_Guyana": "Guyana", "Country_Haiti": "Haïti", - "Country_Heard_Island_and_Mcdonald_Islands": "Heard Island en McDonald Islands", + "Country_Heard_Island_and_Mcdonald_Islands": "Heard Island en Mcdonald Islands", "Country_Holy_See_Vatican_City_State": "Heilige Stoel (Vaticaanstad)", "Country_Honduras": "Honduras", "Country_Hong_Kong": "Hong Kong", "Country_Hungary": "Hongarije", "Country_Iceland": "IJsland", - "Country_India": "Indië", + "Country_India": "India", "Country_Indonesia": "Indonesië", "Country_Iran_Islamic_Republic_of": "Iran, Islamitische Republiek", "Country_Iraq": "Irak", @@ -878,7 +1039,7 @@ "Country_Kenya": "Kenia", "Country_Kiribati": "Kiribati", "Country_Korea_Democratic_Peoples_Republic_of": "Korea, Democratische Volksrepubliek", - "Country_Korea_Republic_of": "Korea, republiek van", + "Country_Korea_Republic_of": "Korea, Republiek van", "Country_Kuwait": "Koeweit", "Country_Kyrgyzstan": "Kirgizië", "Country_Lao_Peoples_Democratic_Republic": "Lao Democratische Volksrepubliek", @@ -918,18 +1079,18 @@ "Country_Netherlands": "Nederland", "Country_Netherlands_Antilles": "Nederlandse Antillen", "Country_New_Caledonia": "Nieuw-Caledonië", - "Country_New_Zealand": "Nieuw Zeeland", + "Country_New_Zealand": "Nieuw-Zeeland", "Country_Nicaragua": "Nicaragua", "Country_Niger": "Niger", "Country_Nigeria": "Nigeria", - "Country_Niue": "niue", - "Country_Norfolk_Island": "Norfolk Island", + "Country_Niue": "Niue", + "Country_Norfolk_Island": "Norfolkeiland", "Country_Northern_Mariana_Islands": "noordelijke Mariana eilanden", "Country_Norway": "Noorwegen", "Country_Oman": "Oman", "Country_Pakistan": "Pakistan", "Country_Palau": "Palau", - "Country_Palestinian_Territory_Occupied": "Bezet Palestijns gebied", + "Country_Palestinian_Territory_Occupied": "Palestijns gebied, bezet", "Country_Panama": "Panama", "Country_Papua_New_Guinea": "Papoea-Nieuw-Guinea", "Country_Paraguay": "Paraguay", @@ -939,12 +1100,12 @@ "Country_Poland": "Polen", "Country_Portugal": "Portugal", "Country_Puerto_Rico": "Puerto Rico", - "Country_Qatar": "Katar", - "Country_Reunion": "Bijeenkomst", + "Country_Qatar": "Qatar", + "Country_Reunion": "Réunion", "Country_Romania": "Roemenië", "Country_Russian_Federation": "Russische Federatie", "Country_Rwanda": "Rwanda", - "Country_Saint_Helena": "Sint Helena", + "Country_Saint_Helena": "Sint-Helena", "Country_Saint_Kitts_and_Nevis": "Saint Kitts en Nevis", "Country_Saint_Lucia": "Saint Lucia", "Country_Saint_Pierre_and_Miquelon": "Saint Pierre en Miquelon", @@ -963,7 +1124,7 @@ "Country_Solomon_Islands": "Solomon eilanden", "Country_Somalia": "Somalië", "Country_South_Africa": "Zuid-Afrika", - "Country_South_Georgia_and_The_South_Sandwich_Islands": "South Georgia en The South Sandwich Islands", + "Country_South_Georgia_and_The_South_Sandwich_Islands": "Zuid-Georgia en de Zuidelijke Sandwicheilanden", "Country_Spain": "Spanje", "Country_Sri_Lanka": "Sri Lanka", "Country_Sudan": "Soedan", @@ -978,7 +1139,7 @@ "Country_Tanzania_United_Republic_of": "Tanzania, Verenigde Republiek van", "Country_Thailand": "Thailand", "Country_Timor_leste": "Oost-Timor", - "Country_Togo": "Gaan", + "Country_Togo": "Togo", "Country_Tokelau": "Tokelau", "Country_Tonga": "Tonga", "Country_Trinidad_and_Tobago": "Trinidad en Tobago", @@ -997,9 +1158,9 @@ "Country_Uzbekistan": "Oezbekistan", "Country_Vanuatu": "Vanuatu", "Country_Venezuela": "Venezuela", - "Country_Viet_Nam": "Viet Nam", + "Country_Viet_Nam": "Vietnam", "Country_Virgin_Islands_British": "Britse Maagdeneilanden", - "Country_Virgin_Islands_US": "Virgin Islands, US", + "Country_Virgin_Islands_US": "Maagdeneilanden, VS", "Country_Wallis_and_Futuna": "Wallis en Futuna", "Country_Western_Sahara": "Westelijke Sahara", "Country_Yemen": "Jemen", @@ -1007,34 +1168,39 @@ "Country_Zimbabwe": "Zimbabwe", "Cozy": "Knus", "Create": "Aanmaken", - "Create_A_New_Channel": "Een nieuw kanaal aanmaken", + "Create_channel": "Maak een kanaal", + "Create_A_New_Channel": "Maak een nieuw kanaal", "Create_new": "Maak nieuw", "Create_unique_rules_for_this_channel": "Maak unieke regels voor dit kanaal", "create-c": "Maak openbare kanalen", - "create-c_description": "Toestemming om openbare kanalen te maken", + "create-c_description": "Toestemming om openbare kanalen aan te maken", "create-d": "Directe berichten maken", "create-d_description": "Toestemming om directe berichten te starten", "create-invite-links": "Maak uitnodigingslinks", "create-invite-links_description": "Toestemming om uitnodigingslinks naar kanalen te maken", "create-p": "Privékanalen aanmaken", - "create-p_description": "Toestemming om privékanalen te maken", + "create-p_description": "Toestemming om privékanalen aan te maken", "create-personal-access-tokens": "Maak persoonlijke toegangstokens", - "create-user": "Gebruikers maken", - "create-user_description": "Toestemming om gebruikers te maken", + "create-user": "Gebruikers aanmaken", + "create-user_description": "Toestemming om gebruikers aan te maken", "Created": "Gemaakt", "Created_as": "Gemaakt als", "Created_at": "Aangemaakt op", "Created_at_s_by_s": "Aangemaakt op %s door %s", - "Created_at_s_by_s_triggered_by_s": "Aangemaakt op %s door %s getriggerd door %s", + "Created_at_s_by_s_triggered_by_s": "Aangemaakt op %s door %s geactiveerd door %s", "Created_by": "Gemaakt door", "CRM_Integration": "CRM-integratie", - "CROWD_Reject_Unauthorized": "Weigeren ongeautoriseerd", - "Crowd_sync_interval_Description": "Het interval tussen synchronisaties. Voorbeeld `elke 24 uur 'of' op de eerste dag van de week ', meer voorbeelden op [Cron Text Parser] (http://bunkat.github.io/later/parsers.html#text)", - "Current_Chats": "huidige Chats", + "CROWD_Allow_Custom_Username": "Sta aangepaste gebruikersnamen in Rocket.Chat toe", + "CROWD_Reject_Unauthorized": "Ongeautoriseerde weigeren", + "Crowd_Remove_Orphaned_Users": "Verwijder weesgebruikers", + "Crowd_sync_interval_Description": "Het interval tussen synchronisaties. Voorbeeld `elke 24 uur` of `op de eerste dag van de week`, meer voorbeelden op [Cron Text Parser] (http://bunkat.github.io/later/parsers.html#text)", + "Current_Chats": "Huidige chats", + "Current_File": "Huidig bestand", + "Current_Import_Operation": "Huidige importbewerking", "Current_Status": "Huidige status", - "Custom": "gewoonte", + "Custom": "Aangepast", "Custom CSS": "Aangepaste CSS", - "Custom_agent": "Douanebeambte", + "Custom_agent": "Aangepaste agent", "Custom_dates": "Aangepaste datums", "Custom_emoji": "Aangepaste Emoji", "Custom_Emoji": "Aangepaste Emoji", @@ -1042,146 +1208,187 @@ "Custom_Emoji_Added_Successfully": "Aangepaste emoji is succesvol toegevoegd", "Custom_Emoji_Delete_Warning": "Het verwijderen van een emoji kan niet ongedaan worden gemaakt.", "Custom_Emoji_Error_Invalid_Emoji": "Ongeldige emoji", - "Custom_Emoji_Error_Name_Or_Alias_Already_In_Use": "De aangepaste emoji of een van de aliassen is al in gebruik.", + "Custom_Emoji_Error_Name_Or_Alias_Already_In_Use": "De aangepaste emoji of een van zijn aliassen is al in gebruik.", "Custom_Emoji_Has_Been_Deleted": "De aangepaste emoji is verwijderd.", "Custom_Emoji_Info": "Aangepaste Emoji-info", "Custom_Emoji_Updated_Successfully": "Aangepaste emoji is succesvol bijgewerkt", "Custom_Fields": "Aangepaste velden", + "Custom_Field_Removed": "Aangepast veld verwijderd", + "Custom_Field_Not_Found": "Aangepast veld niet gevonden", "Custom_oauth_helper": "Bij het instellen van uw OAuth Provider, moet u een Callback URL geven. Gebruik %s .", "Custom_oauth_unique_name": "Aangepaste unieke OAuth naam", - "Custom_Script_Logged_In": "Aangepaste Script voor gebruikers die ingelogd", - "Custom_Script_Logged_Out": "Aangepaste Script voor uitgelogd gebruikers", + "Custom_Script_Logged_In": "Aangepast script voor aangemelde gebruikers", + "Custom_Script_Logged_In_Description": "Aangepast script dat ALTIJD en voor ELKE gebruiker die is ingelogd wordt uitgevoerd. (Bijv. telkens wanneer u de chat binnengaat en u bent ingelogd)", + "Custom_Script_Logged_Out": "Aangepast script voor afgemelde gebruikers", + "Custom_Script_Logged_Out_Description": "Aangepast script dat ALTIJD en voor ELKE gebruiker die NIET is aangemeld, wordt uitgevoerd. (Bijv. telkens wanneer u de inlogpagina opent)", + "Custom_Script_On_Logout": "Aangepaste script voor afmeldingsflow", + "Custom_Script_On_Logout_Description": "Aangepast script dat ALLEEN wordt uitgevoerd bij het uitvoeren van de afmeldingsflow", "Custom_Scripts": "Aangepaste scripts", "Custom_Sound_Add": "Voeg aangepast geluid toe", "Custom_Sound_Delete_Warning": "Het verwijderen van een geluid kan niet ongedaan worden gemaakt.", + "Custom_Sound_Edit": "Aangepast geluid bewerken", "Custom_Sound_Error_Invalid_Sound": "Ongeldig geluid", "Custom_Sound_Error_Name_Already_In_Use": "De aangepaste geluidsnaam is al in gebruik.", "Custom_Sound_Has_Been_Deleted": "Het aangepaste geluid is verwijderd.", "Custom_Sound_Info": "Aangepaste geluidsinfo", "Custom_Sound_Saved_Successfully": "Aangepast geluid is succesvol opgeslagen", - "Custom_Sounds": "Eigen geluiden", + "Custom_Sounds": "Aangepaste geluiden", "Custom_Status": "Aangepaste status", "Custom_Translations": "Aangepaste vertalingen", - "Custom_Translations_Description": "Moet een geldige JSON zijn waarbij sleutels talen zijn die een woordenboek met sleutel en vertaling bevatten. Voorbeeld: {\n \"en\": {\n \"Channels\": \"Rooms\"\n }, \n\"pt\": {\n \"Channels\": \"Salas\"\n }\n}", + "Custom_Translations_Description": "Moet een geldige JSON zijn waarin sleutels talen zijn die een woordenboek met sleutel en vertaling bevatten. Voorbeeld: {\n \"en\": {\n \"Channels\": \"Rooms\"\n }, \n\"pt\": {\n \"Channels\": \"Salas\"\n }\n}", "Custom_User_Status": "Aangepaste gebruikersstatus", "Custom_User_Status_Add": "Aangepaste gebruikersstatus toevoegen", "Custom_User_Status_Added_Successfully": "Aangepaste gebruikersstatus succesvol toegevoegd", "Custom_User_Status_Delete_Warning": "Het verwijderen van een aangepaste gebruikersstatus kan niet ongedaan worden gemaakt.", "Custom_User_Status_Edit": "Aangepaste gebruikersstatus wijzigen", + "Custom_User_Status_Error_Invalid_User_Status": "Ongeldige gebruikersstatus", "Custom_User_Status_Error_Name_Already_In_Use": "De aangepaste gebruikersstatusnaam is al in gebruik.", "Custom_User_Status_Has_Been_Deleted": "Aangepaste gebruikersstatus is verwijderd", "Custom_User_Status_Info": "Aangepaste gebruikersstatusinformatie", "Custom_User_Status_Updated_Successfully": "Aangepaste gebruikersstatus succesvol bijgewerkt", "Customize": "Aanpassen", - "CustomSoundsFilesystem": "Aangepaste geluiden bestandssysteem", + "CustomSoundsFilesystem": "Aangepast geluidssysteem", + "Daily_Active_Users": "Dagelijks actieve gebruikers", "Dashboard": "Dashboard", + "Data_processing_consent_text": "Toestemmingstekst voor gegevensverwerking", + "Data_processing_consent_text_description": "Gebruik deze instelling om uit te leggen dat u tijdens het gesprek de persoonlijke gegevens van klanten kunt verzamelen, opslaan en verwerken.", "Date": "Datum", "Date_From": "Van", "Date_to": "naar", + "DAU_value": "DAU __value__", "days": "dagen", + "Days": "Dagen", "DB_Migration": "Database Migratie", "DB_Migration_Date": "Database Migratie Datum", "DDP_Rate_Limit_Connection_By_Method_Enabled": "Beperking per verbinding per methode: ingeschakeld", + "DDP_Rate_Limit_Connection_By_Method_Interval_Time": "Beperking door verbinding per methode: intervaltijd", + "DDP_Rate_Limit_Connection_By_Method_Requests_Allowed": "Beperking door verbinding per methode: verzoeken toegestaan", "DDP_Rate_Limit_Connection_Enabled": "Beperking per verbinding: ingeschakeld", + "DDP_Rate_Limit_Connection_Interval_Time": "Beperking door verbinding: intervaltijd", + "DDP_Rate_Limit_Connection_Requests_Allowed": "Limiet door verbinding: verzoeken toegestaan", "DDP_Rate_Limit_IP_Enabled": "Beperking per IP: ingeschakeld", + "DDP_Rate_Limit_IP_Interval_Time": "Limiet door IP: intervaltijd", + "DDP_Rate_Limit_IP_Requests_Allowed": "Limiet per IP: verzoeken toegestaan", "DDP_Rate_Limit_User_By_Method_Enabled": "Beperking per gebruiker per methode: ingeschakeld", + "DDP_Rate_Limit_User_By_Method_Interval_Time": "Beperking per gebruiker per methode: intervaltijd", + "DDP_Rate_Limit_User_By_Method_Requests_Allowed": "Beperking per gebruiker per methode: verzoeken toegestaan", "DDP_Rate_Limit_User_Enabled": "Beperking per gebruiker: ingeschakeld", + "DDP_Rate_Limit_User_Interval_Time": "Beperking door gebruiker: intervaltijd", + "DDP_Rate_Limit_User_Requests_Allowed": "Beperkingen per gebruiker: verzoeken toegestaan", "Deactivate": "Deactiveren", - "Decline": "Achteruitgang", - "Decode_Key": "Decodeer Key", + "Decline": "Weigeren", + "Decode_Key": "Decodeer sleutel", "Default": "Standaard", "Default_value": "Standaardwaarde", - "Delete": "Verwijder", - "Delete_message": "bericht verwijderen", + "Delete": "Verwijderen", + "Delete_all_closed_chats": "Verwijder alle gesloten chats", + "Delete_File_Warning": "Als u een bestand verwijdert, wordt het voor altijd verwijderd. Dit kan niet ongedaan worden.", + "Delete_message": "Bericht verwijderen", "Delete_my_account": "Mijn account verwijderen", - "Delete_Room_Warning": "Het verwijderen van een kamer verwijdert ook alle in deze kamer geplaatste berichten. Dat kan niet ongedaan gemaakt worden!", - "Delete_User_Warning": "Een gebruiker verwijderen betekent dat alle berichten van die gebruiker ook verwijderd worden. Dit kan niet ongedaan gemaakt worden.", - "Delete_User_Warning_Delete": "Een gebruiker verwijderen betekent dat alle berichten van die gebruiker ook verwijderd worden. Dit kan niet ongedaan gemaakt worden.", - "Delete_User_Warning_Keep": "De gebruiker wordt verwijderd, maar hun berichten blijven zichtbaar. Dit kan niet ongedaan gemaakt worden.", + "Delete_Room_Warning": "Als u een kamer verwijdert, worden alle berichten verwijderd die in de kamer zijn geplaatst. Dit kan niet ongedaan gemaakt worden.", + "Delete_User_Warning": "Als u een gebruiker verwijdert, worden ook alle berichten van die gebruiker verwijderd. Dit kan niet ongedaan gemaakt worden.", + "Delete_User_Warning_Delete": "Als u een gebruiker verwijdert, worden ook alle berichten van die gebruiker verwijderd. Dit kan niet ongedaan gemaakt worden.", + "Delete_User_Warning_Keep": "De gebruiker wordt verwijderd, maar zijn berichten blijven zichtbaar. Dit kan niet ongedaan gemaakt worden.", "Delete_User_Warning_Unlink": "Als een gebruiker wordt verwijderd, wordt de gebruikersnaam uit alle berichten verwijderd. Dit kan niet ongedaan gemaakt worden.", "delete-c": "Verwijder openbare kanalen", "delete-c_description": "Toestemming om openbare kanalen te verwijderen", - "delete-d": "Directe berichten verwijderen", + "delete-d": "Verwijder directe berichten", "delete-d_description": "Toestemming om directe berichten te verwijderen", "delete-message": "Verwijder bericht", - "delete-message_description": "Toestemming om een bericht in een ruimte te verwijderen", - "delete-p": "Privé-kanalen verwijderen", - "delete-p_description": "Toestemming om privé-kanalen te verwijderen", + "delete-message_description": "Toestemming om een bericht in een kamer te verwijderen", + "delete-p": "Privékanalen verwijderen", + "delete-p_description": "Toestemming om privékanalen te verwijderen", "delete-user": "Verwijder gebruiker", "delete-user_description": "Toestemming om gebruikers te verwijderen", "Deleted": "Verwijderd!", - "Department": "afdeling", + "Department": "Afdeling", "Department_removed": "Afdeling verwijderd", "Departments": "Afdelingen", "Deployment_ID": "Deployment ID", - "Description": "Beschrijving", + "Description": "Omschrijving", "Desktop": "Desktop", - "Desktop_Notification_Test": "Desktop Kennisgeving Test", + "Desktop_Notification_Test": "Desktopmelding test", "Desktop_Notifications": "Desktopmeldingen", - "Desktop_Notifications_Default_Alert": "Desktopmeldingen Standaardwaarschuwing", + "Desktop_Notifications_Default_Alert": "Desktopmeldingen standaardwaarschuwing", "Desktop_Notifications_Disabled": "Desktopmeldingen zijn uitgeschakeld. Wijzig uw browservoorkeuren als u meldingen wil inschakelen.", "Desktop_Notifications_Duration": "Duur van desktopmeldingen", - "Desktop_Notifications_Duration_Description": "Seconds to desktop melding wordt weergegeven. Dit kan invloed hebben op OS X Notification Center. Voer 0 in om de instellingen standaard browser te gebruiken en niet van invloed op OS X Notification Center.", + "Desktop_Notifications_Duration_Description": "Seconden om desktopmelding weer te geven. Dit kan invloed hebben op OS X Notification Center. Voer 0 in om de standaardbrowserinstellingen te gebruiken en geen invloed te hebben op OS X Notification Center.", "Desktop_Notifications_Enabled": "Desktopmeldingen zijn ingeschakeld", + "Desktop_Notifications_Not_Enabled": "Bureaubladmeldingen zijn niet ingeschakeld", "Details": "Details", "Different_Style_For_User_Mentions": "Verschillende stijl voor gebruikersvermeldingen", "Direct_Message": "Privébericht", "Direct_message_creation_description": "U staat op het punt een chat te starten met meerdere gebruikers. Voeg degene toe met wie u wilt praten, iedereen op dezelfde plaats, via directe berichten.", - "Direct_message_someone": "Stuur iemand een direct bericht", + "Direct_message_someone": "Stuur iemand een privébericht", "Direct_message_you_have_joined": "Je hebt je aangesloten voor een nieuw privébericht met", - "Direct_Messages": "Directe berichten", + "Direct_Messages": "Privéberichten", "Direct_Reply": "Direct antwoord", - "Direct_Reply_Advice": "U kunt deze e-mail direct beantwoorden. Wijzig eerdere e-mails in deze conversatie niet.", - "Direct_Reply_Debug": "Debug Direct antwoord", + "Direct_Reply_Advice": "U kunt deze e-mail direct beantwoorden. Wijzig geen eerdere e-mails in de thread.", + "Direct_Reply_Debug": "Debug direct antwoord", "Direct_Reply_Debug_Description": "[Pas op] Als u de foutopsporingsmodus inschakelt, wordt uw 'wachtwoord voor platte tekst' weergegeven in de beheerdersconsole.", - "Direct_Reply_Delete": "Verwijder onderschepte e-mails", - "Direct_Reply_Enable": "Direct antwoord inschakelen", - "Direct_Reply_Frequency": "E-mail Controleer Frequentie", + "Direct_Reply_Delete": "E-mails verwijderen", + "Direct_Reply_Delete_Description": "[Let op!] Als deze optie geactiveerd is, worden alle ongelezen berichten onherroepelijk verwijderd, zelfs degene die geen directe antwoorden zijn. De geconfigureerde e-mailpostbus is dan altijd leeg en kan niet \"parallel\" door mensen worden verwerkt.", + "Direct_Reply_Enable": "Schakel direct antwoord in", + "Direct_Reply_Enable_Description": "[Let op!] Als \"Direct Beantwoorden\" is ingeschakeld, zal Rocket.Chat de geconfigureerde e-mailpostbus controleren. Alle ongelezen e-mails worden opgehaald, gemarkeerd als gelezen en verwerkt. \"Direct Beantwoorden\" mag alleen worden geactiveerd als de gebruikte mailbox uitsluitend bedoeld is voor toegang door Rocket.Chat en niet \"parallel\" door mensen wordt gelezen / verwerkt.", + "Direct_Reply_Frequency": "Frequentie van e-mailcontroles", "Direct_Reply_Frequency_Description": "(in minuten, standaard / minimum 2)", "Direct_Reply_Host": "Directe antwoordhost", "Direct_Reply_IgnoreTLS": "IgnoreTLS", "Direct_Reply_Password": "Wachtwoord", "Direct_Reply_Port": "Direct_Reply_Port", "Direct_Reply_Protocol": "Direct antwoordprotocol", - "Direct_Reply_Separator": "separator", + "Direct_Reply_Separator": "Scheidingsteken", "Direct_Reply_Separator_Description": "[Alleen wijzigen als u precies weet wat u aan het doen bent, raadpleeg de documentatie]Separator tussen basis- en taggedeelte van e-mail", "Direct_Reply_Username": "Gebruikersnaam", - "Direct_Reply_Username_Description": "Gebruik alsjeblieft absolute email, tagging is niet toegestaan, het zou overschreven zijn", - "Directory": "directory", + "Direct_Reply_Username_Description": "Gebruik alstublieft absolute e-mail, tagging is niet toegestaan, het zou overschreven worden", + "Directory": "Directory", "Disable_Facebook_integration": "Schakel Facebook-integratie uit", "Disable_Notifications": "Meldingen uitschakelen", "Disable_two-factor_authentication": "Schakel tweefactorauthenticatie via TOTP uit", "Disable_two-factor_authentication_email": "Schakel tweefactorauthenticatie via e-mail uit", - "Disabled": "Gehandicapte", - "Disallow_reacting": "Disallow Reaction", - "Disallow_reacting_Description": "Staat niet toe om te reageren", + "Disabled": "Uitgeschakeld", + "Disallow_reacting": "Reageren niet toestaan", + "Disallow_reacting_Description": "Staat reageren niet toe", + "Discard": "Weggooien", + "Disconnect": "Uitschakelen", "Discussion": "Discussie", "Discussion_description": "Help mee het overzicht te houden over wat er aan de hand is! Door een discussie aan te maken, wordt een subkanaal van het geselecteerde subkanal gemaakt en worden beide gekoppeld.", + "Discussion_first_message_disabled_due_to_e2e": "U kunt beginnen met het verzenden van end-to-end versleutelde berichten in deze discussie nadat deze werd aangemaakt.", + "Discussion_first_message_title": "Uw bericht", "Discussion_name": "Discussie naam", "Discussion_start": "Start een discussie", + "Discussion_target_channel": "Bovenliggend kanaal of groep", + "Discussion_target_channel_description": "Selecteer een kanaal dat gerelateerd is aan wat u wilt vragen", "Discussion_target_channel_prefix": "Je maakt een discussie in", "Discussion_title": "Maak een nieuwe discussie aan", - "Display_offline_form": "Weergave offline vorm", - "Display_unread_counter": "Toon aantal ongelezen berichten", - "Displays_action_text": "Displays actie tekst", - "Do_not_display_unread_counter": "Geen enkele teller van dit kanaal weergeven", - "Do_you_want_to_accept": "Wil je accepteren?", - "Do_you_want_to_change_to_s_question": "Wilt u %s veranderen?", - "Document_Domain": "Documentdomein", + "discussion-created": "__message__", + "Discussions": "Discussies", + "Display_chat_permissions": "Geef chatrechten weer", + "Display_offline_form": "Offline formulier weergeven", + "Display_setting_permissions": "Toestemmingen weergeven om instellingen te wijzigen", + "Display_unread_counter": "Aantal ongelezen berichten weergeven", + "Displays_action_text": "Geeft actietekst weer", + "Do_not_display_unread_counter": "Toon geen teller van dit kanaal", + "Do_not_provide_this_code_to_anyone": "Geef deze code aan niemand.", + "Do_you_want_to_accept": "Wilt u accepteren?", + "Do_you_want_to_change_to_s_question": "Wilt u naar %s veranderen?", + "Document_Domain": "Document domein", "Domain": "Domein", "Domain_added": "domein toegevoegd", "Domain_removed": "Domein verwijderd", "Domains": "domeinen", - "Domains_allowed_to_embed_the_livechat_widget": "Door komma's gescheiden lijst van domeinen die de livechat-widget mogen insluiten. Laat dit leeg om alle domeinen toe te staan.", - "Dont_ask_me_again": "Vraag het me niet nog een keer!", + "Domains_allowed_to_embed_the_livechat_widget": "Door komma's gescheiden lijst van domeinen die de livechat-widget mogen insluiten. Laat leeg om alle domeinen toe te staan.", + "Dont_ask_me_again": "Vraag me niet nog een keer!", "Dont_ask_me_again_list": "Vraag me niet opnieuw lijst", "Download_Info": "Info downloaden", - "Download_My_Data": "Download mijn gegevens", + "Download_My_Data": "Mijn gegevens downloaden (HTML)", + "Download_Pending_Avatars": "Wachtende avatars downloaden", "Download_Pending_Files": "Wachtende bestanden downloaden", "Download_Snippet": "Downloaden", - "Drop_to_upload_file": "Sleep hierheen om een bestand te uploaden", + "Downloading_file_from_external_URL": "Bestand downloaden van externe URL", + "Drop_to_upload_file": "Sleep hierheen om bestand te uploaden", "Dry_run": "Testrun", - "Dry_run_description": "Zal slechts één e-mail sturen naar hetzelfde adres als in afzenderveld. De e-mail moet horen bij een geldige gebruiker.", + "Dry_run_description": "Stuurt slechts één e-mail naar hetzelfde adres als in afzenderveld. De e-mail moet van een geldige gebruiker zijn.", "Duplicate_archived_channel_name": "Er bestaat een gearchiveerd kanaal met naam `#%s`", "Duplicate_archived_private_group_name": "Er bestaat een gearchiveerde privégroep met naam '%s'", "Duplicate_channel_name": "Er bestaat een kanaal met de naam '%s'", @@ -1190,239 +1397,359 @@ "Duplicated_Email_address_will_be_ignored": "Gedupliceerd e-mailadres wordt genegeerd.", "duplicated-account": "Gedupliceerd account", "E2E Encryption": "E2E-codering", - "E2E_Enable_alert": "Deze functie is momenteel in bèta! Rapporteer bugs aan github.com/RocketChat/Rocket.Chat/issues en let op: - Versleutelde berichten van gecodeerde kamers worden niet gevonden door zoekmachines. - De mobiele apps ondersteunen de versleutelde berichten mogelijk niet (hier wordt aan gewerkt). - Bots kunnen mogelijk geen versleutelde berichten zien totdat ze er ondersteuning voor is geimplementeerd. - Uploads worden niet versleuteld in deze versie.", - "E2E_Enable_description": "Schakel optie in om versleutelde groepen te maken en groepen en directe berichten te kunnen versleutelen", - "E2E_Encryption_Password_Explanation": "U kunt nu versleutelde privégroepen en directe berichten maken. Je kunt bestaande privégroepen of DM's ook versleutelen. Dit is end-to-end versleuteling, dus de sleutel om je berichten te coderen/decoderen wordt niet opgeslagen op de server. Om die reden moet je je wachtwoord ergens veilig opslaan. U moet dit invoeren op andere apparaten waarop u e2e-codering wilt gebruiken.", - "E2E_password_reveal_text": "U kunt nu gecodeerde privégroepen en directe berichten maken. Je kunt bestaande privégroepen of DM's ook versleutelen. Dit is end-to-end codering, dus de sleutel om je berichten te coderen/decoderen Om die reden moet je dit wachtwoord ergens veilig opslaan. U moet dit invoeren op andere apparaten waarop u e2e-codering wilt gebruiken. Meer informatie hier Je wachtwoord is: %s Dit is een automatisch gegenereerd wachtwoord, kunt u opstelling een nieuw wachtwoord voor uw encryptie te allen tijde vanuit elke browser in te voeren, hebt u het bestaande wachtwoord ingevoerd. Dit wachtwoord wordt alleen in deze browser opgeslagen totdat u het wachtwoord opslaat en dit bericht negeert.", + "E2E_enable": "Schakel E2E in", + "E2E_disable": "Schakel E2E uit", + "E2E_Enable_alert": "Deze functie is momenteel in bèta! Rapporteer bugs op github.com/RocketChat/Rocket.Chat/issues en let op: - Versleutelde berichten van versleutelde kamers worden niet gevonden door zoekmachines. - De mobiele apps ondersteunen de versleutelde berichten mogelijk niet (hier wordt aan gewerkt). - Bots kunnen mogelijk geen versleutelde berichten zien totdat ze er ondersteuning voor hebben geïmplementeerd. - Uploads worden niet versleuteld in deze versie.", + "E2E_Enable_description": "Schakel optie in om versleutelde groepen te maken en om groepen en directe berichten te kunnen wijzigen die moeten worden versleuteld", + "E2E_Enabled": "E2E ingeschakeld", + "E2E_Enabled_Default_DirectRooms": "Encryptie standaard inschakelen voor directe kamers", + "E2E_Enabled_Default_PrivateRooms": "Encryptie standaard inschakelen voor privékamers", + "E2E_Encryption_Password_Change": "Wijzig het coderingswachtwoord", + "E2E_Encryption_Password_Explanation": "Je kunt nu gecodeerde privégroepen en directe berichten maken. Je kunt ook bestaande privégroepen of DM's ook coderen. Dit is end-to-end codering, zodat de sleutel voor het coderen/decoderen van jouw berichten niet op de server wordt opgeslagen. Om die reden moet je jouw wachtwoord op een veilige plaats bewaren. Je moet het invoeren op andere apparaten waarop je e2e-codering wilt gebruiken.", + "E2E_key_reset_email": "E2E Key Reset-melding", + "E2E_password_request_text": "Om toegang te krijgen tot uw gecodeerde privégroepen en privéberichten, voert u uw coderingswachtwoord in. U moet dit wachtwoord invoeren om uw berichten te coderen / decoderen op elke client die u gebruikt, aangezien de sleutel niet op de server is opgeslagen.", + "E2E_password_reveal_text": "Je kunt nu gecodeerde privégroepen en directe berichten maken. Je kunt bestaande privégroepen of DM's ook coderen. Dit is end-to-end codering, zodat de sleutel voor het coderen/decoderen van jouw berichten niet op de server wordt opgeslagen. Om die reden moet je jouw wachtwoord op een veilige plaats bewaren. Je moet het invoeren op andere apparaten waarop je e2e-codering wilt gebruiken. Meer informatie hier !Je wachtwoord is: %s Dit is een automatisch gegenereerd wachtwoord, je kan een nieuw wachtwoord voor jouw coderingssleutel op elk gewenst moment vanuit elke browser waarin je het bestaande wachtwoord hebt ingevoerd, aanvragen. Dit wachtwoord wordt alleen in deze browser opgeslagen totdat je het wachtwoord opslaat en dit bericht negeert.", + "E2E_Reset_Email_Content": "U bent automatisch uitgelogd. Wanneer je opnieuw inlogt, zal Rocket.Chat een nieuwe sleutel genereren en je toegang herstellen tot elke versleutelde kamer met een of meer online leden. Vanwege de aard van de E2E-codering kan Rocket.Chat de toegang tot een gecodeerde kamer waar geen lid online is, niet herstellen.", + "E2E_Reset_Key_Explanation": "Met deze optie wordt uw huidige E2E-sleutel verwijderd en wordt u uitgelogd. Wanneer je opnieuw inlogt, zal Rocket.Chat je een nieuwe sleutel genereren en je toegang herstellen tot elke versleutelde kamer met een of meer online leden. Vanwege de aard van de E2E-codering kan Rocket.Chat de toegang tot een gecodeerde kamer waar geen lid online is, niet herstellen.", + "E2E_Reset_Other_Key_Warning": "Als u de huidige E2E-sleutel reset, wordt de gebruiker uitgelogd. Wanneer de gebruiker opnieuw inlogt, genereert Rocket.Chat een nieuwe sleutel en herstelt de gebruiker de toegang tot elke gecodeerde kamer met een of meer online leden. Vanwege de aard van de E2E-codering kan Rocket.Chat de toegang tot een gecodeerde kamer waar geen online lid is, niet herstellen.", "Edit": "Wijzig", - "Edit_Custom_Field": "Bewerken Aangepast veld", + "Edit_Business_Hour": "Bewerk kantooruur", + "Edit_Canned_Responses": "Bewerk standaardantwoorden", + "Edit_Custom_Field": "Aangepast veld bewerken", "Edit_Department": "Afdeling bewerken", "Edit_Invite": "Uitnodiging bewerken", - "Edit_previous_message": "`%s` - Wijzig vorig bericht", + "Edit_previous_message": "`%s` - Bewerk vorig bericht", + "Edit_Priority": "Prioriteit bijwerken", "Edit_Status": "Status bewerken", + "Edit_Tag": "Bewerk tag", "Edit_Trigger": "Bewerk trigger", + "Edit_Unit": "Eenheid bewerken", "Edit_User": "Gebruiker bewerken", "edit-message": "Bewerk bericht", - "edit-message_description": "Toestemming om een bericht binnen een ruimte te bewerken", + "edit-message_description": "Toestemming om een bericht in een kamer te bewerken", "edit-other-user-active-status": "Bewerk andere actieve gebruikersstatus", "edit-other-user-active-status_description": "Toestemming om andere accounts in of uit te schakelen", + "edit-other-user-avatar": "Bewerk andere gebruikersavatar", + "edit-other-user-avatar_description": "Toestemming om de avatar van een andere gebruiker te wijzigen.", + "edit-other-user-e2ee": "Bewer andere gebruiker E2E-codering", + "edit-other-user-e2ee_description": "Toestemming om de E2E-versleuteling van andere gebruikers te wijzigen.", "edit-other-user-info": "Bewerk andere gebruikersinformatie", "edit-other-user-info_description": "Toestemming om de naam, gebruikersnaam of e-mailadres van een andere gebruiker te wijzigen.", "edit-other-user-password": "Bewerk ander gebruikerswachtwoord", - "edit-other-user-password_description": "Toestemming om wachtwoorden van andere gebruikers te wijzigen. Vereist toestemming voor bewerken-andere-gebruiker-info.", + "edit-other-user-password_description": "Toestemming om wachtwoorden van andere gebruikers te wijzigen. Vereist toestemming voor edit-other-user-info.", + "edit-other-user-totp": "Bewerk twee factoren TOTP van andere gebruiker", "edit-privileged-setting": "Bewerk de geprivilegieerde instelling", "edit-privileged-setting_description": "Toestemming om instellingen te bewerken", - "edit-room": "Edit Room", - "edit-room_description": "Toestemming voor het bewerken van de naam, het onderwerp, het type (privé- of openbare status) en status (actief of gearchiveerd) van een kamer", - "edit-room-retention-policy": "Het bewaarbeleid van de room bewerken", + "edit-room": "Kamer bewerken", + "edit-room_description": "Toestemming om de naam, het onderwerp, het type (privé- of openbare status) en de status (actief of gearchiveerd) van een kamer te bewerken", + "edit-room-avatar": "Bewerk kameravatar", + "edit-room-avatar_description": "Toestemming om de avatar van een kamer te bewerken.", + "edit-room-retention-policy": "Bewerk het bewaarbeleid van de kamer", "edit-room-retention-policy_description": "Toestemming om het bewaarbeleid van een kamer te bewerken, om berichten daarin automatisch te verwijderen", + "Edit_Contact_Profile": "Bewerk contactprofiel", "edited": "bewerkt", - "Editing_room": "montagekamer", - "Editing_user": "user editing", + "Editing_room": "Kamer bewerken", + "Editing_user": "Gebruiker bewerken", "Education": "Onderwijs", "Email": "E-mail", "Email_address_to_send_offline_messages": "E-mailadres om offline berichten te verzenden", - "Email_already_exists": "Emailadres bestaat al", - "Email_body": "E-mail tekst", - "Email_Change_Disabled": "Je Rocket.Chat administrator heeft het wijzigen van e-mail adressen uitgezet", + "Email_already_exists": "E-mailadres bestaat al", + "Email_body": "E-mailtekst", + "Email_Change_Disabled": "Je Rocket.Chat-beheerder heeft het wijzigen van e-mailadressen uitgeschakeld", "Email_Changed_Description": "U kunt de volgende variabels gebruiken: [email] voor het e-mailadres van de gebruiker.[Site_Name] en [Site_URL] voor respectievelijk de applicatienaam en URL.", "Email_Changed_Email_Subject": "[Site_Name] - E-mailadres is gewijzigd", + "Email_changed_section": "E-mailadres gewijzigd", "Email_Footer_Description": "U kunt de volgende variabels gebruiken: [Site_Name] en [Site_URL] voor respectievelijk de applicatienaam en URL. ", - "Email_from": "Afzender", + "Email_from": "Van", "Email_Header_Description": "U kunt de volgende variabels gebruiken: [Site_Name] en [Site_URL] voor respectievelijk de applicatienaam en URL. ", + "Email_Inbox": "E-mail postvak IN", + "Email_Inboxes": "E-mailpostvakken", "Email_Notification_Mode": "Offline e-mailmeldingen", - "Email_Notification_Mode_All": "Elke Mention / DM", - "Email_Notification_Mode_Disabled": "invalide", + "Email_Notification_Mode_All": "Elke vermelding / DM", + "Email_Notification_Mode_Disabled": "Uitgeschakeld", + "Email_notification_show_message": "Toon bericht in e-mailmelding", + "Email_Notifications_Change_Disabled": "Je Rocket.Chat-beheerder heeft e-mailmeldingen uitgeschakeld", "Email_or_username": "E-mail of gebruikersnaam", - "Email_Placeholder": "Vul alstublieft uw e-mail adres in...", - "Email_Placeholder_any": "Voer e-mailadressen in ...", - "Email_subject": "Onderwerp", + "Email_Placeholder": "Vul alstublieft uw e-mailadres in...", + "Email_Placeholder_any": "Voer e-mailadressen in...", + "email_plain_text_only": "Stuur alleen e-mails met platte tekst", + "email_style_description": "Vermijd geneste selectors", + "email_style_label": "E-mailstijl", + "Email_subject": "E-mail onderwerp", "Email_verified": "E-mailadres geverifieerd", + "Email_sent": "E-mail verzonden", + "Emails_sent_successfully!": "E-mails zijn succesvol verzonden!", "Emoji": "Emoji", "Emoji_provided_by_JoyPixels": "Emoji geleverd door JoyPixels", "EmojiCustomFilesystem": "Aangepast Emoji-bestandssysteem", "Empty_title": "Lege titel", "See_on_Engagement_Dashboard": "Zie op het Engagement Dashboard", "Enable": "Inschakelen", - "Enable_Auto_Away": "Schakel Auto Away in", + "Enable_Auto_Away": "Schakel automatische afwezigheid in", "Enable_Desktop_Notifications": "Schakel desktopmeldingen in", + "Enable_inquiry_fetch_by_stream": "Schakel het ophalen van onderzoeksgegevens van de server in via een stream", + "Enable_omnichannel_auto_close_abandoned_rooms": "Schakel het automatisch sluiten van kamers die door de bezoeker zijn achtergelaten in", "Enable_Svg_Favicon": "Schakel SVG-favicon in", "Enable_two-factor_authentication": "Schakel tweefactorauthenticatie via TOTP in", "Enable_two-factor_authentication_email": "Schakel tweefactorauthenticatie via e-mail in", "Enabled": "Ingeschakeld", - "Encrypted_message": "gecodeerd bericht", - "End_OTR": "end OTR", + "Encrypted": "Versleuteld", + "Encrypted_channel_Description": "End-to-end gecodeerd kanaal. Zoeken werkt niet met gecodeerde kanalen en meldingen geven de inhoud van het bericht mogelijk niet weer.", + "Encrypted_message": "Gecodeerd bericht", + "Encrypted_setting_changed_successfully": "De versleutelde instelling is succesvol gewijzigd", + "Encrypted_not_available": "Niet beschikbaar voor openbare kanalen", + "Encryption_key_saved_successfully": "Uw coderingssleutel is succesvol opgeslagen.", + "EncryptionKey_Change_Disabled": "U kunt geen wachtwoord instellen voor uw coderingssleutel omdat uw privésleutel niet aanwezig is op de client. Om een nieuw wachtwoord in te stellen, moet u uw privésleutel laden met uw bestaande wachtwoord of een client gebruiken waarop de sleutel al is geladen.", + "End": "Einde", + "End_OTR": "Stop OTR", + "Engagement_Dashboard": "Betrokkenheidsdashboard", + "Enter_a_custom_message": "Voer een aangepast bericht in", "Enter_a_department_name": "Voer een afdelingsnaam in", "Enter_a_name": "Voer een naam in", - "Enter_a_regex": "Voer een reguliere expressie in", + "Enter_a_regex": "Voer een regex in", "Enter_a_room_name": "Voer een kamernaam in", - "Enter_a_username": "Voer een gebruikersnaam in", + "Enter_a_tag": "Voer een tag in", + "Enter_a_username": "Vul een gebruikersnaam in", "Enter_Alternative": "Alternatieve modus (verzenden met Enter + Ctrl / Alt / Shift / CMD)", - "Enter_authentication_code": "Voer verificatiecode in", + "Enter_authentication_code": "Voer de authenticatiecode in", "Enter_Behaviour": "Enter-toets gedrag", - "Enter_Behaviour_Description": "Dit verandert of de Enter-toets een bericht verstuurd of de cursor naar de volgende regel verplaatst.", + "Enter_Behaviour_Description": "Dit verandert of de Enter-toets een bericht verzendt of de cursor naar de volgende regel verplaatst", + "Enter_E2E_password_to_decode_your_key": "Voer het E2E-wachtwoord in om uw sleutel te decoderen", "Enter_name_here": "Vul hier de naam in", "Enter_Normal": "Normale modus (verzenden met Enter)", - "Enter_to": "Ga binnen bij", + "Enter_to": "Enter om", + "Enter_your_E2E_password": "Voer uw E2E-wachtwoord in", "Enterprise": "Onderneming", + "Enterprise_License": "Enterprise-licentie", + "Enterprise_License_Description": "Als uw werkruimte geregistreerd is en de licentie verstrekt wordt door Rocket.Chat Cloud, hoeft u de licentie hier niet handmatig bij te werken.", "Entertainment": "Vermaak", "Error": "Fout", "Error_404": "Foutmelding 404", - "Error_changing_password": "Fout bij het veranderen van het wachtwoord", + "Error_changing_password": "Fout bij het wijzigen van wachtwoord", "Error_loading_pages": "Fout bij het laden van pagina's", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Fout: Rocket.Chat vereist oplog-tailing bij uitvoering in meerdere instanties", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Zorg ervoor dat uw MongoDB in de ReplicaSet-modus staat en de omgevingsvariabele MONGO_OPLOG_URL correct is gedefinieerd op de toepassingsserver", + "Error_login_blocked_for_ip": "Inloggen is tijdelijk geblokkeerd voor dit IP-adres", + "Error_login_blocked_for_user": "Inloggen is tijdelijk geblokkeerd voor deze gebruiker", + "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Fout: Rocket.Chat vereist oplog-tailing wanneer het op meerdere instanties wordt uitgevoerd", + "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Zorg ervoor dat uw MongoDB in de ReplicaSet-modus staat en de omgevingsvariabele MONGO_OPLOG_URL correct is gedefinieerd op de applicatieserver", "Error_sending_livechat_offline_message": "Fout bij het verzenden van offline omnichannel-bericht", "Error_sending_livechat_transcript": "Fout bij het verzenden van omnichannel-transcript", + "Error_Site_URL": "Ongeldige Site_Url", + "Error_Site_URL_description": "Werk alstublieft uw \"Site_Url\"-instelling bij. Vind hier > meer informatie", "error-action-not-allowed": "__action__ is niet toegestaan", "error-agent-offline": "Agent is offline", "error-application-not-found": "Applicatie niet gevonden", "error-archived-duplicate-name": "Er is een gearchiveerd kanaal met de naam '__room_name__'", - "error-avatar-invalid-url": "Ongeldige avatar URL: __url__", - "error-avatar-url-handling": "Fout bij het hanteren van avatar instelling van een URL (__url__) voor __username__", + "error-avatar-invalid-url": "Ongeldige avatar-URL: __url__", + "error-avatar-url-handling": "Fout bij het afhandelen van avatar-instellingen vanaf een URL (__url__) voor __username__", + "error-business-hours-are-closed": "De openingstijden zijn gesloten", + "error-canned-response-not-found": "Standaardantwoord niet gevonden", + "error-cannot-delete-app-user": "Het verwijderen van de app-gebruiker is niet toegestaan, verwijder de bijhorende app om deze te verwijderen.", "error-cant-invite-for-direct-room": "Kan gebruiker niet uitnodigen in directe kamers", - "error-channels-setdefault-is-same": "De standaardinstelling van het kanaal is hetzelfde als waar het naar wordt gewijzigd.", - "error-channels-setdefault-missing-default-param": "De bodyParam 'standaard' is vereist", - "error-could-not-change-email": "Kon e-mail niet wijzigen", + "error-channels-setdefault-is-same": "De standaardinstelling van het kanaal is hetzelfde als waarnaar het zou worden gewijzigd.", + "error-channels-setdefault-missing-default-param": "De bodyParam 'default' is vereist", + "error-could-not-change-email": "Kan e-mailadres niet wijzigen", "error-could-not-change-name": "Kon naam niet wijzigen", "error-could-not-change-username": "Kan gebruikersnaam niet wijzigen", "error-custom-field-name-already-exists": "Aangepaste veldnaam bestaat al", "error-delete-protected-role": "Kan een beschermde rol niet verwijderen", "error-department-not-found": "Afdeling niet gevonden", - "error-direct-message-file-upload-not-allowed": "Bestanden delen is niet toegestaan in directe berichten", - "error-duplicate-channel-name": "Een kanaal met de naam '__channel_name__' bestaat reeds", + "error-direct-message-file-upload-not-allowed": "Bestanden delen is niet toegestaan in directe berichten", + "error-duplicate-channel-name": "Er bestaat al een kanaal met de naam '__channel_name__'", "error-edit-permissions-not-allowed": "Het bewerken van rechten is niet toegestaan", - "error-email-domain-blacklisted": "De e-mail domein wordt op de zwarte lijst", - "error-email-send-failed": "Fout bij proberen e-mail te verzenden: __message__", + "error-email-domain-blacklisted": "Het e-maildomein staat op de zwarte lijst", + "error-email-send-failed": "Fout bij verzenden van e-mail: __message__", + "error-essential-app-disabled": "Fout: een Rocket.Chat-app die hiervoor essentieel is, is uitgeschakeld. Neem contact op met uw administrator", "error-field-unavailable": "__field__ is al in gebruik :(", "error-file-too-large": "Bestand is te groot", + "error-forwarding-chat-same-department": "De geselecteerde afdeling en de huidige kamerafdeling zijn hetzelfde", + "error-forwarding-department-target-not-allowed": "Het doorsturen naar de doelafdeling is niet toegestaan.", + "error-guests-cant-have-other-roles": "Gastgebruikers kunnen geen andere rol hebben.", + "error-import-file-extract-error": "Uitpakken van importbestand mislukt.", + "error-import-file-is-empty": "Het geïmporteerde bestand lijkt leeg te zijn.", "error-import-file-missing": "Het te importeren bestand is niet gevonden op het opgegeven pad.", - "error-importer-not-defined": "De importeur is niet goed gedefinieerd, is het missen van de klasse importeren.", + "error-importer-not-defined": "De importeur is niet goed gedefinieerd, de klasse import ontbreekt.", "error-input-is-not-a-valid-field": "__input__ is geen geldige __field__", "error-invalid-account": "Ongeldig account", - "error-invalid-actionlink": "Ongeldige actie koppeling", - "error-invalid-arguments": "ongeldige argumenten", - "error-invalid-asset": "Invalid asset", - "error-invalid-channel": "Ongeldige kanaal.", - "error-invalid-channel-start-with-chars": "Ongeldige kanaal. Begin met @ of #", - "error-invalid-custom-field": "Ongeldige aangepaste veld", + "error-invalid-actionlink": "Ongeldige actielink", + "error-invalid-arguments": "Ongeldige argumenten", + "error-invalid-asset": "Ongeldig item", + "error-invalid-channel": "Ongeldig kanaal.", + "error-invalid-channel-start-with-chars": "Ongeldig kanaal. Begin met @ of #", + "error-invalid-custom-field": "Ongeldig aangepast veld", "error-invalid-custom-field-name": "Ongeldige aangepaste veldnaam. Gebruik alleen letters, cijfers, koppeltekens en underscores.", - "error-invalid-date": "Ongeldige datum verstrekt.", - "error-invalid-description": "ongeldige beschrijving", - "error-invalid-domain": "ongeldige domeinnaam", - "error-invalid-email": "Ongeldig e-__email__", - "error-invalid-email-address": "Ongeldig email adres", - "error-invalid-file-height": "Ongeldige hoogte", + "error-invalid-custom-field-value": "Ongeldige waarde voor veld __field__", + "error-invalid-date": "Ongeldige datum opgegeven.", + "error-invalid-description": "Ongeldige beschrijving", + "error-invalid-domain": "Ongeldige domein", + "error-invalid-email": "Ongeldig e-mail __email__", + "error-invalid-email-address": "Ongeldig e-mailadres", + "error-invalid-email-inbox": "Ongeldige e-mailinbox", + "error-invalid-file-height": "Ongeldige bestandshoogte", "error-invalid-file-type": "Ongeldig bestandstype", - "error-invalid-file-width": "Ongeldige breedte", - "error-invalid-from-address": "You informed an invalid FROM address.", - "error-invalid-integration": "ongeldige integratie", - "error-invalid-message": "ongeldig bericht", - "error-invalid-method": "ongeldige methode", + "error-invalid-file-width": "Ongeldige bestandsbreedte", + "error-invalid-from-address": "Je hebt een ongeldig VAN-adres opgegeven.", + "error-invalid-inquiry": "Ongeldige aanvraag", + "error-invalid-integration": "Ongeldige integratie", + "error-invalid-message": "Ongeldig bericht", + "error-invalid-method": "Ongeldige methode", "error-invalid-name": "Ongeldige naam", "error-invalid-password": "Ongeldig wachtwoord", + "error-invalid-param": "Ongeldige parameter", "error-invalid-params": "Ongeldige parameters", - "error-invalid-permission": "Ongeldige machtiging", - "error-invalid-redirectUri": "ongeldige redirectUri", - "error-invalid-role": "ongeldige rol", - "error-invalid-room": "ongeldige kamer", - "error-invalid-room-name": "__room_name__ is geen geldige naam van de kamer", - "error-invalid-room-type": "__type__ is geen geldig kamer type", - "error-invalid-settings": "Ongeldige instellingen voorzien", - "error-invalid-subscription": "ongeldige abonnement", + "error-invalid-permission": "Ongeldige toestemming", + "error-invalid-port-number": "Ongeldig poortnummer", + "error-invalid-priority": "Ongeldige prioriteit", + "error-invalid-redirectUri": "Ongeldige redirectUri", + "error-invalid-role": "Ongeldige rol", + "error-invalid-room": "Ongeldige kamer", + "error-invalid-room-name": "__room_name__ is geen geldige kamernaam", + "error-invalid-room-type": "__type__ is geen geldig kamertype.", + "error-invalid-settings": "Ongeldige instellingen opgegeven", + "error-invalid-subscription": "Ongeldig abonnement", "error-invalid-token": "Ongeldige Token", - "error-invalid-triggerWords": "ongeldige triggerWords", - "error-invalid-urls": "ongeldige URL", + "error-invalid-triggerWords": "Ongeldige triggerWords", + "error-invalid-urls": "Ongeldige URL", "error-invalid-user": "Ongeldige gebruiker", "error-invalid-username": "Ongeldige gebruikersnaam", - "error-invalid-webhook-response": "De webhook URL reageerde met een ander dan 200-status", + "error-invalid-value": "Ongeldige waarde", + "error-invalid-webhook-response": "De webhook-URL reageerde met een andere status dan 200", "error-logged-user-not-in-room": "Je bent niet in de kamer `%s`", - "error-message-deleting-blocked": "Bericht wissen wordt geblokkeerd", - "error-message-editing-blocked": "editing-bericht wordt geblokkeerd", - "error-message-size-exceeded": "size bericht overschrijdt Message_MaxAllowedSize", - "error-missing-unsubscribe-link": "Je moet een [unsubscribe] link toevoegen.", + "error-max-guests-number-reached": "U heeft het maximale aantal gastgebruikers bereikt dat is toegestaan door uw licentie. Neem contact op met sale@rocket.chat voor een nieuwe licentie.", + "error-max-number-simultaneous-chats-reached": "Het maximale aantal gelijktijdige chats per agent is bereikt.", + "error-message-deleting-blocked": "Het verwijderen van berichten is geblokkeerd", + "error-message-editing-blocked": "Het bewerken van berichten is geblokkeerd", + "error-message-size-exceeded": "De berichtgrootte is groter dan Message_MaxAllowedSize", + "error-missing-unsubscribe-link": "Je moet een [unsubscribe] link opgeven.", "error-no-tokens-for-this-user": "Er zijn geen tokens voor deze gebruiker", + "error-no-message-for-unread": "Er zijn geen berichten die als ongelezen kunnen worden gemarkeerd", "error-not-allowed": "Niet toegestaan", - "error-not-authorized": "niet toegestaan", - "error-password-policy-not-met": "Wachtwoord voldoet niet aan het beleid van de server", - "error-password-policy-not-met-maxLength": "Wachtwoord voldoet niet aan het beleid van de server met betrekking tot de maximale lengte (wachtwoord te lang)", - "error-password-policy-not-met-minLength": "Wachtwoord voldoet niet aan het beleid van de server met betrekking tot de minimale lengte (wachtwoord te kort)", - "error-password-policy-not-met-oneLowercase": "Wachtwoord voldoet niet aan het beleid van de server van ten minste één kleine letter", - "error-password-policy-not-met-oneNumber": "Wachtwoord voldoet niet aan het beleid van de server van ten minste één numeriek teken", - "error-password-policy-not-met-oneSpecial": "Wachtwoord voldoet niet aan het beleid van de server van ten minste één speciaal teken", - "error-password-policy-not-met-oneUppercase": "Wachtwoord voldoet niet aan het beleid van de server van ten minste één hoofdletter", - "error-password-policy-not-met-repeatingCharacters": "Wachtwoord voldoet niet aan het beleid van de server van verboden herhaalde karakters (je hebt te veel van dezelfde karakters naast elkaar)", + "error-not-authorized": "Niet geautoriseerd", + "error-office-hours-are-closed": "De kantooruren zijn gesloten.", + "error-password-policy-not-met": "Wachtwoord voldoet niet aan het serverbeleid", + "error-password-policy-not-met-maxLength": "Wachtwoord voldoet niet aan het serverbeleid voor maximale lengte (wachtwoord te lang)", + "error-password-policy-not-met-minLength": "Wachtwoord voldoet niet aan het serverbeleid voor minimale lengte (wachtwoord te kort)", + "error-password-policy-not-met-oneLowercase": "Wachtwoord voldoet niet aan het serverbeleid van ten minste één kleine letter", + "error-password-policy-not-met-oneNumber": "Wachtwoord voldoet niet aan het serverbeleid van ten minste één numeriek teken", + "error-password-policy-not-met-oneSpecial": "Wachtwoord voldoet niet aan het serverbeleid van ten minste één speciaal teken", + "error-password-policy-not-met-oneUppercase": "Wachtwoord voldoet niet aan het serverbeleid van ten minste één hoofdletter", + "error-password-policy-not-met-repeatingCharacters": "Wachtwoord voldoet niet aan het serverbeleid van verboden herhalende tekens (je hebt te veel dezelfde tekens naast elkaar)", + "error-password-same-as-current": "Ingevoerd wachtwoord hetzelfde als huidig wachtwoord", + "error-personal-access-tokens-are-current-disabled": "Personal Access Tokens zijn momenteel uitgeschakeld", + "error-pinning-message": "Bericht kan niet worden vastgezet", "error-push-disabled": "Push is uitgeschakeld", - "error-remove-last-owner": "Dit is de laatste eigenaar. Stel een nieuwe eigenaar voordat u deze.", + "error-remove-last-owner": "Dit is de laatste eigenaar. Stel een nieuwe eigenaar in voordat u deze verwijdert.", + "error-returning-inquiry": "Fout bij het terugsturen van de vraag naar de wachtrij", "error-role-in-use": "Kan rol niet verwijderen omdat het in gebruik is", - "error-role-name-required": "Rol naam is verplicht", + "error-role-name-required": "Rolnaam is vereist", "error-room-is-not-closed": "Kamer is niet gesloten", - "error-the-field-is-required": "Het veld __field__ is vereist.", + "error-selected-agent-room-agent-are-same": "De geselecteerde agent en de kameragent zijn dezelfde", + "error-starring-message": "Bericht kan geen ster krijgen", + "error-tags-must-be-assigned-before-closing-chat": "Tag(s) moeten worden toegewezen voor het sluiten van de chat", + "error-the-field-is-required": "Het veld __field__ is verplicht.", "error-this-is-not-a-livechat-room": "Dit is geen omnichannelkamer", - "error-too-many-requests": "Fout, te veel verzoeken. Gelieve vertragen. U moet __seconds__ seconden wachten voordat u het opnieuw probeert.", + "error-token-already-exists": "Er bestaat al een token met deze naam", + "error-token-does-not-exists": "Token bestaat niet", + "error-too-many-requests": "Fout, te veel verzoeken. Gelieve te vertragen. U moet __seconds__ seconden wachten voordat u het opnieuw probeert.", + "error-transcript-already-requested": "Transcript al aangevraagd", + "error-unpinning-message": "Bericht kan niet worden losgemaakt", "error-user-has-no-roles": "Gebruiker heeft geen rollen", "error-user-is-not-activated": "Gebruiker is niet geactiveerd", "error-user-is-not-agent": "Gebruiker is geen omnichannel-agent", - "error-user-limit-exceeded": "Het aantal gebruikers dat u probeert te uitnodigen voor #kanaalnaam overschrijdt de limiet die is ingesteld door de beheerder", + "error-user-is-offline": "Gebruiker indien offline", + "error-user-limit-exceeded": "Het aantal gebruikers dat u probeert te uitnodigen voor #channel_name overschrijdt de limiet die is ingesteld door de beheerder", + "error-user-not-belong-to-department": "Gebruiker behoort niet tot deze afdeling", "error-user-not-in-room": "Gebruiker is niet in deze kamer", - "error-user-registration-disabled": "Gebruikers registratie is uitgeschakeld", - "error-user-registration-secret": "Gebruikers registratie is alleen toegestaan via Secret URL", - "error-you-are-last-owner": "Jij bent de laatste eigenaar. Stel nieuwe eigenaar voor het verlaten van de kamer.", - "Esc_to": "Esc om", + "error-user-registration-disabled": "Gebruikersregistratie is uitgeschakeld", + "error-user-registration-secret": "Gebruikers registratie is alleen toegestaan via een geheime URL", + "error-validating-department-chat-closing-tags": "Er is ten minste één afsluitende tag vereist wanneer de afdeling tag(s) nodig heeft voor het sluiten van gesprekken.", + "error-you-are-last-owner": "U bent de laatste eigenaar. Stel een nieuwe eigenaar in voordat u de kamer verlaat.", + "Errors_and_Warnings": "Fouten en waarschuwingen", + "Esc_to": "Esc naar", "Estimated_due_time": "Geschatte tijd", - "Event_Trigger": "Event Trigger", + "Estimated_due_time_in_minutes": "Geschatte tijd (tijd in minuten)", + "Event_Trigger": "Gebeurtenistrigger", "Event_Trigger_Description": "Selecteer welk type gebeurtenis deze uitgaande WebHook-integratie zal activeren", "every_5_minutes": "Een keer per 5 minuten", "every_10_seconds": "Een keer per 10 seconden", - "every_30_minutes": "Eenmaal per 30 minuten", + "every_30_minutes": "Een keer per 30 minuten", "every_day": "Een keer per dag", "every_hour": "Een keer per uur", "every_minute": "Een keer per minuut", "every_second": "Een keer per seconde", "every_six_hours": "Eens in de zes uur", "Everyone_can_access_this_channel": "Iedereen heeft toegang tot dit kanaal", + "Exact": "Precies", + "Example_payload": "Voorbeeld payload", "Example_s": "Voorbeeld: %s", - "except_pinned": "(behalve degene die zijn vastgezet)", + "except_pinned": "(behalve degene die zijn vastgemaakt)", "Exclude_Botnames": "Bots uitsluiten", - "Exclude_Botnames_Description": "Verspreid geen berichten van bots waarvan de naam overeenkomt met de bovenstaande reguliere expressie. Als ze leeg worden gelaten, worden alle berichten van bots doorgegeven.", + "Exclude_Botnames_Description": "Propageer geen berichten van bots waarvan de naam overeenkomt met de bovenstaande reguliere expressie. Indien leeg gelaten, worden alle berichten van bots gepropageerd.", "Exclude_pinned": "Sluit vastgezette berichten uit", "Execute_Synchronization_Now": "Voer nu synchronisatie uit", + "Exit_Full_Screen": "Volledig scherm verlaten", + "Expand": "Uitbreiden", "Experimental_Feature_Alert": "Dit is een expirementele functie! Houd er rekening mee dat het in de toekomst zonder voorafgaande waarschuwing kan veranderen, breken of zelfs worden verwijderd.", "Expiration": "Vervaldatum", "Expiration_(Days)": "Vervaldatum (dagen)", "Export_as_file": "Exporteren als bestand", "Export_Messages": "Berichten exporteren", - "Export_My_Data": "Mijn gegevens exporteren", - "External_Queue_Service_URL": "URL Externe wachtrijservice", + "Export_My_Data": "Mijn gegevens exporteren (JSON)", + "expression": "Uitdrukking", + "Extended": "Uitgebreid", + "External_Domains": "Externe domeinen", + "External_Queue_Service_URL": "URL externe wachtrijservice", "External_Service": "Externe dienst", + "External_Users": "Externe gebruikers", + "Extremely_likely": "Zeer waarschijnlijk", "Facebook_Page": "Facebook pagina", + "Failed": "Mislukt", "Failed_to_activate_invite_token": "Kan uitnodigingstoken niet activeren", + "Failed_to_add_monitor": "Het toevoegen van monitor is mislukt", "Failed_To_Download_Files": "Downloaden van bestanden is mislukt", "Failed_to_generate_invite_link": "Kan uitnodigingslink niet genereren", + "Failed_To_Load_Import_Data": "Kan importgegevens niet laden", + "Failed_To_Load_Import_History": "Kan importgeschiedenis niet laden", + "Failed_To_Load_Import_Operation": "Het laden van importbewerking is mislukt", + "Failed_To_Start_Import": "Starten van import mislukt", "Failed_to_validate_invite_token": "Kan uitnodigingstoken niet valideren", "False": "Valse", "Favorite": "Favoriete", - "Favorite_Rooms": "Inschakelen Favorite Kamers", + "Favorite_Rooms": "Schakel favoriete kamers in", "Favorites": "Favorieten", - "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Deze functie is afhankelijk van 'Stuur bezoekersnavigatiegeschiedenis als bericht' om te worden ingeschakeld.", + "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Deze functie is afhankelijk van het feit of 'Navigatiegeschiedenis van bezoeker als bericht verzenden' is ingeschakeld.", "Features": "Functies", - "Features_Enabled": "features Ingeschakeld", + "Features_Enabled": "Ingeschakelde functies", "Federation_Dashboard": "Federatiedashboard", "FEDERATION_Discovery_Method": "Ontdekkingsmethode", + "FEDERATION_Discovery_Method_Description": "U kunt de hub of een SRV en een TXT-vermelding op uw DNS-records gebruiken.", "FEDERATION_Domain": "Domein", + "FEDERATION_Domain_Alert": "Wijzig dit niet nadat u de functie hebt ingeschakeld, we kunnen nog geen domeinwijzigingen verwerken.", + "FEDERATION_Domain_Description": "Voeg het domein toe waaraan deze server moet worden gekoppeld, bijvoorbeeld: @rocket.chat.", + "FEDERATION_Enabled": "Poging om federatieve ondersteuning te integreren.", + "FEDERATION_Enabled_Alert": "Federatie-ondersteuning is een werk in uitvoering. Gebruik op een productiesysteem wordt op dit moment niet aanbevolen.", + "FEDERATION_Error_user_is_federated_on_rooms": "U kunt geen federatieve gebruikers verwijderen die tot chatruimten behoren", + "FEDERATION_Hub_URL": "Hub URL", + "FEDERATION_Hub_URL_Description": "Stel de hub-URL in, bijvoorbeeld: https://hub.rocket.chat. Poorten worden ook geaccepteerd.", + "FEDERATION_Public_Key": "Publieke sleutel", + "FEDERATION_Public_Key_Description": "Dit is de sleutel die je moet delen met je collega's.", "FEDERATION_Room_Status": "Federatiestatus", "FEDERATION_Status": "Toestand", "FEDERATION_Test_Setup": "Test de opstelling", + "FEDERATION_Test_Setup_Error": "Kan uw server niet vinden met uw installatie. Controleer uw instellingen.", + "FEDERATION_Test_Setup_Success": "Uw federatie-installatie werkt en andere servers kunnen u vinden!", + "FEDERATION_Unique_Id": "Unieke ID", + "FEDERATION_Unique_Id_Description": "Dit is uw unieke federatie-ID, die wordt gebruikt om uw peer op de mesh te identificeren.", "Field": "Veld", - "Field_removed": "Het gebied verwijderd", + "Field_removed": "Veld verwijderd", "Field_required": "Veld vereist", "File": "Bestand", "File_Downloads_Started": "Het downloaden van bestanden is gestart", "File_exceeds_allowed_size_of_bytes": "Bestand overschrijdt de toegestane grootte van __size__ bytes", "File_name_Placeholder": "Zoek bestanden...", - "File_not_allowed_direct_messages": "Bestanden delen is niet toegestaan in directe berichten.", + "File_not_allowed_direct_messages": "Bestanden delen is niet toegestaan in directe berichten.", "File_Path": "Bestandspad", - "File_removed_by_automatic_prune": "Bestand verwijderd door automatische prune", + "file_pruned": "bestand gesnoeid", + "File_removed_by_automatic_prune": "Bestand verwijderd door automatische snoei", "File_removed_by_prune": "Bestand verwijderd door snoeien", "File_Type": "Bestandstype", "File_type_is_not_accepted": "Bestandstype wordt niet geaccepteerd.", @@ -1434,248 +1761,325 @@ "Files_only": "Verwijder alleen de bijgevoegde bestanden, bewaar berichten", "files_pruned": "bestanden gesnoeid", "FileSize_Bytes": "__fileSize__ bytes", + "FileSize_KB": "__fileSize__ KB", + "FileSize_MB": "__fileSize__ MB", "FileUpload": "Bestand uploaden", "FileUpload_Disabled": "Bestandsuploads zijn uitgeschakeld.", - "FileUpload_Enabled": "File uploaden ingeschakeld", - "FileUpload_Enabled_Direct": "Bestandsuploads ingeschakeld in Directe berichten", + "FileUpload_Enable_json_web_token_for_files": "Schakel Json Web Tokens-beveiliging in voor bestandsuploads", + "FileUpload_Enable_json_web_token_for_files_description": "Voegt een JWT toe aan geüploade bestands-url's", + "FileUpload_Enabled": "Bestandsuploads ingeschakeld", + "FileUpload_Enabled_Direct": "Bestandsuploads ingeschakeld in privéberichten", "FileUpload_Error": "Fout bij het uploaden van bestand", "FileUpload_File_Empty": "Bestand leeg", "FileUpload_FileSystemPath": "Systeempad", "FileUpload_GoogleStorage_AccessId": "Google Storage Access Id", - "FileUpload_GoogleStorage_AccessId_Description": "De toegangs-ID heeft meestal een e-mailindeling, bijvoorbeeld: \"example-test@example.iam.gserviceaccount.com\"", - "FileUpload_GoogleStorage_Bucket": "Google Storage Bucket Name", + "FileUpload_GoogleStorage_AccessId_Description": "De toegangs-ID is doorgaans in een e-mailindeling, bijvoorbeeld: \"example-test@example.iam.gserviceaccount.com\"", + "FileUpload_GoogleStorage_Bucket": "Naam van Google Storage-bucket", "FileUpload_GoogleStorage_Bucket_Description": "De naam van de bucket waarnaar de bestanden moeten worden geüpload.", "FileUpload_GoogleStorage_Proxy_Avatars": "Proxy-avatars", - "FileUpload_GoogleStorage_Proxy_Avatars_Description": "Proxy-overdracht van avatarbestanden via uw server in plaats van directe toegang tot de URL van het item", + "FileUpload_GoogleStorage_Proxy_Avatars_Description": "Transmissies van proxy-avatarbestanden via uw server in plaats van directe toegang tot de URL van het item", "FileUpload_GoogleStorage_Proxy_Uploads": "Proxy-uploads", - "FileUpload_GoogleStorage_Proxy_Uploads_Description": "Proxy upload bestandsverzendingen via uw server in plaats van directe toegang tot de URL van het item", - "FileUpload_GoogleStorage_Secret": "Google Storage Secret", - "FileUpload_GoogleStorage_Secret_Description": "Volg deze instructiesen plak hier het resultaat.", + "FileUpload_GoogleStorage_Proxy_Uploads_Description": "Proxy upload bestandsoverdracht via uw server in plaats van directe toegang tot de URL van het item", + "FileUpload_GoogleStorage_Secret": "Google-opslaggeheim", + "FileUpload_GoogleStorage_Secret_Description": "Volg deze instructiesen plak het resultaat hier.", + "FileUpload_json_web_token_secret_for_files": "Json Web Token Secret voor bestanden uploaden", + "FileUpload_json_web_token_secret_for_files_description": "Json Web Token Secret voor bestanden uploaden (gebruikt om toegang te krijgen tot geüploade bestanden zonder authenticatie)", "FileUpload_MaxFileSize": "Maximale bestandsuploadgrootte (in bytes)", - "FileUpload_MaxFileSizeDescription": "Stel dit in op -1 om de bestandsgroottebegrenzing te verwijderen.", - "FileUpload_MediaType_NotAccepted": "Mediatypen niet geaccepteerd", - "FileUpload_MediaTypeWhiteList": "Geaccepteerde Media Types", - "FileUpload_MediaTypeWhiteListDescription": "Komma-gescheiden lijst van media types. Laat het leeg om alle media types te accepteren.", + "FileUpload_MaxFileSizeDescription": "Stel het in op -1 om de beperking van de bestandsgrootte te verwijderen.", + "FileUpload_MediaType_NotAccepted": "Mediatypen worden niet geaccepteerd", + "FileUpload_MediaTypeBlackList": "Geblokkeerde mediatypen", + "FileUpload_MediaTypeBlackListDescription": "Door komma's gescheiden lijst met mediatypen. Deze instelling heeft voorrang op de geaccepteerde mediatypen.", + "FileUpload_MediaTypeWhiteList": "Geaccepteerde mediatypen", + "FileUpload_MediaTypeWhiteListDescription": "Door komma's gescheiden lijst van mediatypen. Laat het leeg om alle mediatypen te accepteren.", "FileUpload_ProtectFiles": "Bescherm geüploade bestanden", - "FileUpload_ProtectFilesDescription": "Alleen geverifieerde gebruikers hebben toegang", + "FileUpload_ProtectFilesDescription": "Alleen geauthenticeerde gebruikers hebben toegang", "FileUpload_RotateImages": "Afbeeldingen roteren bij het uploaden", - "FileUpload_S3_Acl": "Amazon S3 acl", - "FileUpload_S3_AWSAccessKeyId": "Amazon S3 AWSAccessKeyId", - "FileUpload_S3_AWSSecretAccessKey": "Amazon S3 AWSSecretAccessKey", - "FileUpload_S3_Bucket": "Amazon S3 bucket naam", + "FileUpload_RotateImages_Description": "Als u deze instelling inschakelt, kan de beeldkwaliteit achteruitgaan", + "FileUpload_S3_Acl": "Acl", + "FileUpload_S3_AWSAccessKeyId": "Toegangssleutel", + "FileUpload_S3_AWSSecretAccessKey": "Geheime sleutel", + "FileUpload_S3_Bucket": "Bucketnaam", "FileUpload_S3_BucketURL": "Bucket URL", - "FileUpload_S3_CDN": "CDN domein voor downloads", - "FileUpload_S3_ForcePathStyle": "Force Path Style", + "FileUpload_S3_CDN": "CDN-domein voor downloads", + "FileUpload_S3_ForcePathStyle": "Force Path-stijl", "FileUpload_S3_Proxy_Avatars": "Proxy-avatars", - "FileUpload_S3_Proxy_Avatars_Description": "Proxy-overdracht van avatarbestanden via uw server in plaats van directe toegang tot de URL van het item", + "FileUpload_S3_Proxy_Avatars_Description": "Transmissies van proxy-avatarbestanden via uw server in plaats van directe toegang tot de URL van het item", "FileUpload_S3_Proxy_Uploads": "Proxy-uploads", - "FileUpload_S3_Proxy_Uploads_Description": "Proxy upload bestandsverzendingen via uw server in plaats van directe toegang tot de URL van het item", + "FileUpload_S3_Proxy_Uploads_Description": "Proxy upload bestandsoverdracht via uw server in plaats van directe toegang tot de URL van het item", "FileUpload_S3_Region": "Regio", "FileUpload_S3_SignatureVersion": "Handtekening versie", - "FileUpload_S3_URLExpiryTimeSpan": "URL's Vervaltijd Tijdspanne", - "FileUpload_S3_URLExpiryTimeSpan_Description": "De tijd waarna de door Amazon S3 gegenereerde URL's niet langer geldig zijn (in seconden). Indien ingesteld op minder dan 5 seconden, zal dit veld worden genegeerd.", - "FileUpload_Storage_Type": "Storage Type", + "FileUpload_S3_URLExpiryTimeSpan": "Vervaltijd van URL's", + "FileUpload_S3_URLExpiryTimeSpan_Description": "De tijd waarna de door Amazon S3 gegenereerde URL's niet langer geldig zijn (in seconden). Indien ingesteld op minder dan 5 seconden, wordt dit veld genegeerd.", + "FileUpload_Storage_Type": "Opslag type", "FileUpload_Webdav_Password": "WebDAV-wachtwoord", "FileUpload_Webdav_Proxy_Avatars": "Proxy-avatars", - "FileUpload_Webdav_Proxy_Avatars_Description": "Proxy-overdracht van avatarbestanden via uw server in plaats van directe toegang tot de URL van het item", + "FileUpload_Webdav_Proxy_Avatars_Description": "Transmissies van proxy-avatarbestanden via uw server in plaats van directe toegang tot de URL van het item", "FileUpload_Webdav_Proxy_Uploads": "Proxy-uploads", - "FileUpload_Webdav_Proxy_Uploads_Description": "Proxy upload bestandsverzendingen via uw server in plaats van directe toegang tot de URL van het item", - "FileUpload_Webdav_Server_URL": "WebDAV Server Access-URL", - "FileUpload_Webdav_Upload_Folder_Path": "Mappad uploaden", + "FileUpload_Webdav_Proxy_Uploads_Description": "Proxy upload bestandsoverdracht via uw server in plaats van directe toegang tot de URL van het item", + "FileUpload_Webdav_Server_URL": "Toegangs-URL voor WebDAV-server", + "FileUpload_Webdav_Upload_Folder_Path": "Upload mappad", "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV-mappad waarnaar de bestanden moeten worden geüpload", "FileUpload_Webdav_Username": "WebDAV-gebruikersnaam", "Filter": "Filter", + "Filters": "Filters", + "Filters_applied": "Filters toegepast", "Financial_Services": "Financiële diensten", "First_Channel_After_Login": "Eerste kanaal na inloggen", - "Flags": "vlaggen", - "Follow_social_profiles": "Volg ons via de sociale netwerken, kopieer ons op GitHub en deel uw mening over de rocket.chat app op onze Trello pagina.", - "Following": "Gevolgde", + "First_response_time": "Eerste reactietijd", + "Flags": "Vlaggen", + "Follow_message": "Volg bericht", + "Follow_social_profiles": "Volg ons sociale profielen, kopieer ons op GitHub en deel uw mening over de rocket.chat app op onze Trello pagina.", + "Following": "Volgend", "Fonts": "Lettertypen", - "Food_and_Drink": "Eten drinken", - "Footer": "footer", + "Food_and_Drink": "Eten & drinken", + "Footer": "Voettekst", "Footer_Direct_Reply": "Voettekst wanneer direct antwoord is ingeschakeld", "For_more_details_please_check_our_docs": "Raadpleeg onze documentatie voor meer informatie.", - "For_your_security_you_must_enter_your_current_password_to_continue": "Voor uw eigen veiligheid, dient u deze opnieuw voer uw wachtwoord in om door te gaan", + "For_your_security_you_must_enter_your_current_password_to_continue": "Voor uw veiligheid moet u uw huidige wachtwoord invoeren om door te gaan", "Force_Disable_OpLog_For_Cache": "Forceer OpLog uitschakelen voor cache", - "Force_Disable_OpLog_For_Cache_Description": "Gebruikt OpLog niet om de cache te synchroniseren, zelfs wanneer deze beschikbaar is", - "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.", - "force-delete-message": "Force Delete Message", - "force-delete-message_description": "Toestemming om een bericht te verwijderen zonder alle beperkingen te omzeilen", - "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.", + "Force_Disable_OpLog_For_Cache_Description": "Zal OpLog niet gebruiken om de cache te synchroniseren, zelfs niet als deze beschikbaar is", + "Force_Screen_Lock": "Forceer schermvergrendeling", + "Force_Screen_Lock_After": "Forceer schermvergrendeling na", + "Force_Screen_Lock_After_description": "De tijd om opnieuw een wachtwoord aan te vragen na het beëindigen van de laatste sessie, in seconden.", + "Force_Screen_Lock_description": "Indien ingeschakeld, dwingt u uw gebruikers om een PIN / BIOMETRIE / FACEID te gebruiken om de app te ontgrendelen.", + "Force_SSL": "Forceer SSL", + "Force_SSL_Description": "*Let op!* _Force SSL_ mag nooit worden gebruikt in combinatie met reverse proxy. Als u een reverse proxy heeft, moet u de omleiding DAAR uitvoeren. Deze optie bestaat voor implementaties zoals Heroku, die de omleidingsconfiguratie op de reverse proxy niet toestaat.", + "Force_visitor_to_accept_data_processing_consent": "Dwing de bezoeker om toestemming vor gegevensverwerking te accepteren", + "Force_visitor_to_accept_data_processing_consent_description": "Bezoekers mogen niet zonder toestemming beginnen met chatten.", + "Force_visitor_to_accept_data_processing_consent_enabled_alert": "Overeenstemming met gegevensverwerking moet gebesaard zijn op een transparant begrip van de reden van verwerking. Daarom moet u de onderstaande instelling invullen die aan gebruikers worden weergegeven om de redenen voor het verzamelen en verwerken van uw persoonlijke gegevens te vermelden.", + "force-delete-message": "Het verwijderen van bericht forceren", + "force-delete-message_description": "Toestemming om een bericht te verwijderen waarbij alle beperkingen worden omzeild", + "Forgot_password": "Wachtwoord vergeten?", + "Forgot_Password_Description": "U kunt de volgende placeholders gebruiken: [Forgot_Password_Url] voor de URL voor wachtwoordherstel.[naam], [fname], [lname] voor de volledige naam, voornaam of achternaam van de gebruiker, respectievelijk.[email] voor het e-mailadres van de gebruiker.[Site_Name] en [Site_URL] voor respectievelijk de applicatienaam en URL.", + "Forgot_Password_Email": "Klik hierom uw wachtwoord opnieuw in te stellen.", "Forgot_Password_Email_Subject": "[Site_Name] - Wachtwoordherstel", - "Forgot_password_section": "Paswoord vergeten", - "Forward": "vooruit", - "Forward_chat": "Voorwaartse chat", + "Forgot_password_section": "Wachtwoord vergeten", + "Forward": "Doorsturen", + "Forward_chat": "Chat doorsturen", "Forward_to_department": "Doorsturen naar afdeling", "Forward_to_user": "Doorsturen naar gebruiker", + "Forwarding": "Doorsturen", "Free": "Gratis", "Frequently_Used": "Vaak gebruikt", "Friday": "Vrijdag", - "From": "Afzender", - "From_Email": "Afzender e-mail", - "From_email_warning": "Waarschuwing: Het veld Afzender is afhankelijk van je mail mail server instellingen.", - "Gaming": "gaming", + "From": "Van", + "From_Email": "Van e-mail", + "From_email_warning": "Waarschuwing: Het veld Van is afhankelijk van uw mailserverinstellingen.", + "Full_Name": "Volledige naam", + "Full_Screen": "Volledig scherm", + "Gaming": "Gamen", "General": "Algemeen", + "Generate_new_key": "Genereer een nieuwe sleutel", "Generate_New_Link": "Genereer een nieuwe link", + "Generating_key": "Sleutel genereren", + "Get_link": "Link krijgen", + "get-password-policy-forbidRepeatingCharacters": "Het wachtwoord mag geen herhalende tekens bevatten", + "get-password-policy-forbidRepeatingCharactersCount": "Het wachtwoord mag niet meer dan __forbidRepeatingCharactersCount__ herhalende tekens bevatten", + "get-password-policy-maxLength": "Het wachtwoord mag maximaal __maxLength__ tekens lang zijn", + "get-password-policy-minLength": "Het wachtwoord moet minimaal __minLength__ tekens lang zijn", + "get-password-policy-mustContainAtLeastOneLowercase": "Het wachtwoord moet minstens één kleine letter bevatten", "get-password-policy-mustContainAtLeastOneNumber": "Het wachtwoord moet minstens één cijfer bevatten", - "github_no_public_email": "U heeft geen openbaar e-mail adres in uw GitHub toegang", + "get-password-policy-mustContainAtLeastOneSpecialCharacter": "Het wachtwoord moet minstens één speciaal teken bevatten", + "get-password-policy-mustContainAtLeastOneUppercase": "Het wachtwoord moet minstens één hoofdletter bevatten", + "github_no_public_email": "Je hebt geen e-mail als openbare e-mailadres in je GitHub-account", "Give_a_unique_name_for_the_custom_oauth": "Geef een unieke naam voor de aangepaste OAuth", - "Give_the_application_a_name_This_will_be_seen_by_your_users": "Geef de toepassing een naam. Dit zal worden gezien door de gebruiker.", + "Give_the_application_a_name_This_will_be_seen_by_your_users": "Geef de applicatie een naam. Dit zal worden gezien door de gebruikers.", "Global": "Globaal", - "Global_purge_override_warning": "Er is een wereldwijd retentiebeleid ingesteld. Als u het selectievakje 'Algemeen bewaarbeleid overschrijven' uitschakelt, kunt u alleen een beleid toepassen dat strenger is dan het algemene beleid.", + "Global Policy": "Globaal beleid", + "Global_purge_override_warning": "Er is een globaal retentiebeleid ingesteld. Als u 'Globaal bewaarbeleid negeren' uitschakelt, kunt u alleen een beleid toepassen dat strenger is dan het globale beleid.", "Global_Search": "Globaal zoeken", "Go_to_your_workspace": "Ga naar je werkruimte", - "Google_Vision_usage_limit_exceeded": "Gebruiksbeperking voor Google Vision overschreden", + "Google_Vision_usage_limit_exceeded": "Gebruikslimiet voor Google Vision overschreden", "GoogleCloudStorage": "Google Cloud Storage", "GoogleNaturalLanguage_ServiceAccount_Description": "JSON-bestand serviceaccountsleutel. Meer informatie is [hier](https://cloud.google.com/natural-language/docs/common/auth#set_up_a_service_account) te vinden", "GoogleTagManager_id": "Google Tag Manager Id", - "GoogleVision_Block_Adult_Images": "Blokkeer uw volwassen afbeeldingen", - "GoogleVision_Block_Adult_Images_Description": "Het blokkeren van pornografische afbeeldingen zal niet werken als de maandelijkse limiet is bereikt", + "GoogleVision_Block_Adult_Images": "Blokkeer afbeeldingen voor volwassenen", + "GoogleVision_Block_Adult_Images_Description": "Het blokkeren van afbeeldingen voor volwassenen zal niet werken als de maandelijkse limiet is bereikt", "GoogleVision_Current_Month_Calls": "Huidige maandoproepen", "GoogleVision_Enable": "Schakel Google Vision in", "GoogleVision_Max_Monthly_Calls": "Max. Maandelijkse oproepen", "GoogleVision_Max_Monthly_Calls_Description": "Gebruik 0 voor onbeperkt", "GoogleVision_ServiceAccount": "Google Vision-serviceaccount", "GoogleVision_ServiceAccount_Description": "Maak een serversleutel (JSON-indeling) en plak de JSON-inhoud hier", - "GoogleVision_Type_Document": "Document Text Detection", + "GoogleVision_Type_Document": "Documenttekstdetectie", "GoogleVision_Type_Faces": "Gezichtsherkenning", - "GoogleVision_Type_Labels": "Labels Detectie", - "GoogleVision_Type_Landmarks": "Oriëntatie Detectie", - "GoogleVision_Type_Logos": "Logos detectie", + "GoogleVision_Type_Labels": "Etiketdetectie", + "GoogleVision_Type_Landmarks": "Detectie van oriëntatiepunten", + "GoogleVision_Type_Logos": "Logo's detectie", "GoogleVision_Type_Properties": "Eigenschappen (kleur) detectie", "GoogleVision_Type_SafeSearch": "SafeSearch-detectie", "GoogleVision_Type_Similar": "Zoek vergelijkbare beelden", "Government": "Regering", + "Graphql_CORS": "GraphQL CORS", "Graphql_Enabled": "GraphQL ingeschakeld", + "Graphql_Subscription_Port": "GraphQL-abonnementspoort", "Group_by": "Groeperen op", "Group_by_Type": "Groeperen op type", - "Group_favorites": "Groep favorieten", + "Group_discussions": "Groepsdiscussies", + "Group_favorites": "Groepsfavorieten", "Group_mentions_disabled_x_members": "Groepvermeldingen `@all` en`@here` zijn uitgeschakeld voor kamers met meer dan __total__ leden.", "Group_mentions_only": "Alleen groepsvermeldingen", + "Grouping": "Groepering", "Hash": "Hash", - "Header": "hoofd", + "Header": "Header", "Header_and_Footer": "Koptekst en voettekst", - "Healthcare_and_Pharmaceutical": "Gezondheidszorg / Pharmaceutical", - "Help_Center": "Helpcentrum", - "Helpers": "helpers", - "Hex_Color_Preview": "Hex Color Preview", + "Pharmaceutical": "Farmaceutisch", + "Healthcare": "Gezondheidszorg", + "Helpers": "Helpers", + "Here_is_your_authentication_code": "Hier is uw authenticatiecode:", + "Hex_Color_Preview": "Hex-kleurvoorbeeld", + "Hi": "Hoi", + "Hi_username": "Hallo __name__", "Hidden": "Verborgen", "Hide": "Verbergen", "Hide_Avatars": "Verberg Avatars", "Hide_Avatars_Sidebar": "Verberg avatars in zijbalk", "Hide_counter": "Teller verbergen", "Hide_flextab": "Verberg de rechterzijbalk met klik", - "Hide_Group_Warning": "Weet je zeker dat je groep \"%s\" wil verbergen?", + "Hide_Group_Warning": "Weet je zeker dat je groep \"%s\" wilt verbergen?", "Hide_Livechat_Warning": "Weet je zeker dat je de chat met \"%s\" wilt verbergen?", - "Hide_Private_Warning": "Weet je zeker dat je de discussie met \"%s\" wil verbergen?", + "Hide_Private_Warning": "Weet je zeker dat je de discussie met \"%s\" wilt verbergen?", "Hide_roles": "Rollen verbergen", "Hide_room": "Kamer verbergen", - "Hide_Room_Warning": "Weet je zeker dat je kamer \"%s\" wil verbergen?", + "Hide_Room_Warning": "Weet je zeker dat je het kanaal \"%s\" wilt verbergen?", "Hide_System_Messages": "Verberg systeemberichten", - "Hide_Unread_Room_Status": "Ongelezen kamerstatus verbergen", + "Hide_Unread_Room_Status": "Verberg ongelezen kamerstatus", "Hide_usernames": "Gebruikersnamen verbergen", "Highlights": "Hoogtepunten", - "Highlights_How_To": "Worden gewaarschuwd wanneer iemand een woord of zin noemt, hier toevoegen. U kunt woorden of zinnen te scheiden met komma's. Highlight Woorden zijn niet hoofdlettergevoelig.", + "Highlights_How_To": "Als u een melding wilt ontvangen wanneer iemand een woord of zin noemt, voegt u deze hier toe. U kunt woorden of woordgroepen met komma's scheiden. Markeringswoorden zijn niet hoofdlettergevoelig.", "Highlights_List": "Highlight woorden", "History": "Geschiedenis", - "Host": "gastheer", - "hours": "uur", - "Hours": "uren", - "How_friendly_was_the_chat_agent": "Hoe vriendelijk was de chat-agent?", - "How_knowledgeable_was_the_chat_agent": "Hoe deskundig was de chat-agent?", + "Home": "Home", + "Host": "Host", + "Hospitality_Businness": "Horeca", + "hours": "uren", + "Hours": "Uren", + "How_friendly_was_the_chat_agent": "Hoe vriendelijk was de chatagent?", + "How_knowledgeable_was_the_chat_agent": "Hoe deskundig was de chatagent?", "How_long_to_wait_after_agent_goes_offline": "Hoelang gewacht moet worden nadat agent offline is gegaan", - "How_responsive_was_the_chat_agent": "Hoe goed reageert de chat-agent?", - "How_satisfied_were_you_with_this_chat": "Hoe tevreden bent u met deze chat?", + "How_long_to_wait_to_consider_visitor_abandonment": "Hoe lang moet je wachten voordat je overweegt dat de bezoeker het heeft verlaten?", + "How_long_to_wait_to_consider_visitor_abandonment_in_seconds": "Hoe lang moet je wachten voordat je overweegt dat de bezoeker het heeft verlaten?", + "How_responsive_was_the_chat_agent": "Hoe responsief was de chatagent?", + "How_satisfied_were_you_with_this_chat": "Hoe tevreden was je met deze chat?", "How_to_handle_open_sessions_when_agent_goes_offline": "Hoe u open sessies moet afhandelen wanneer agent offline gaat", - "Idle_Time_Limit": "Niet-actieve tijdslimiet", - "Idle_Time_Limit_Description": "Tijdsduur totdat status verandert naar weg. De waarde moet in seconden zijn.", - "if_they_are_from": "(als ze uit %s zijn)", - "If_this_email_is_registered": "Als deze e-mail is geregistreerd, sturen we instructies over het opnieuw instellen van uw wachtwoord. Als u binnenkort geen e-mail ontvangt, kunt u terugkomen en het opnieuw proberen.", - "If_you_are_sure_type_in_your_password": "Als u zeker weet typ uw wachtwoord:", - "If_you_are_sure_type_in_your_username": "Als u zeker weet typ uw gebruikersnaam:", + "I_ll_do_it_later": "Ik doe het later", + "I_saved_my_password_close_this_message": "Ik heb mijn wachtwoord opgeslagen, sluit dit bericht", + "Idle_Time_Limit": "Tijdslimiet voor inactiviteit", + "Idle_Time_Limit_Description": "Tijdsduur totdat status verandert in afwezig. Waarde moet in seconden zijn.", + "if_they_are_from": "(als ze van %s zijn)", + "If_this_email_is_registered": "Als deze e-mail is geregistreerd, sturen we instructies om uw wachtwoord opnieuw in te instellen. Als je binnenkort geen e-mail ontvangt, kom dan terug en probeer het opnieuw.", + "If_you_are_sure_type_in_your_password": "Als je het zeker weet, typ je wachtwoord in:", + "If_you_are_sure_type_in_your_username": "Als je het zeker weet, typ je gebruikersnaam in:", + "If_you_didnt_ask_for_reset_ignore_this_email": "Als je niet hebt gevraagd om je wachtwoord opnieuw in te stellen, kun je deze e-mail negeren.", + "If_you_didnt_try_to_login_in_your_account_please_ignore_this_email": "Als u niet heeft geprobeerd in te loggen op uw account, kunt u deze e-mail negeren.", "If_you_dont_have_one_send_an_email_to_omni_rocketchat_to_get_yours": "Als je er geen hebt, stuur dan een e-mail naar [omni@rocket.chat](mailto: omni@rocket.chat) om de jouwe te krijgen.", "Iframe_Integration": "Iframe-integratie", "Iframe_Integration_receive_enable": "Schakel ontvangen in", - "Iframe_Integration_receive_enable_Description": "Toestaan dat bovenliggend venster commando's naar Rocket.Chat stuurt.", - "Iframe_Integration_receive_origin": "Ontvang Oorsprong", - "Iframe_Integration_receive_origin_Description": "Oorsprong met protocolprefix, gescheiden door komma's, die opdrachten mogen ontvangen, b.v. 'https: // localhost, http: // localhost' of * om vanaf elke locatie te kunnen ontvangen.", + "Iframe_Integration_receive_enable_Description": "Sta het bovenliggende venster om opdrachten naar Rocket.Chat te sturen.", + "Iframe_Integration_receive_origin": "Ontvang Origins", + "Iframe_Integration_receive_origin_Description": "Oorsprong met protocolvoorvoegsel, gescheiden door komma's, die commando's mogen ontvangen, bijv. 'https://localhost, http://localhost' of * om ontvangst van overal toe te staan.", "Iframe_Integration_send_enable": "Schakel Verzenden in", - "Iframe_Integration_send_enable_Description": "Verstuur gebeurtenissen naar bovenliggend venster", - "Iframe_Integration_send_target_origin": "Stuur doelherkomst", - "Iframe_Integration_send_target_origin_Description": "Oorsprong met protocolprefix, welke opdrachten worden verzonden naar b.v. 'https: // localhost' of * om verzending overal toe te staan.", + "Iframe_Integration_send_enable_Description": "Stuur gebeurtenissen naar het bovenliggende venster", + "Iframe_Integration_send_target_origin": "Verzend doelherkomst", + "Iframe_Integration_send_target_origin_Description": "Oorsprong met protocolvoorvoegsel, welke opdrachten worden verzonden naar bijv. 'https://localhost, http://localhost' of * om overal naartoe te kunnen verzenden.", "Iframe_Restrict_Access": "Beperk de toegang binnen elk Iframe", + "Iframe_Restrict_Access_Description": "Deze instelling schakelt beperkingen in / uit om de RC in een iframe te laden", "Iframe_X_Frame_Options": "Opties voor X-Frame-Options", "Iframe_X_Frame_Options_Description": "Opties voor X-Frame-Options. [Je kunt alle opties hier zien.](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options#Syntax)", "Ignore": "Negeren", - "Ignored": "Buiten beschouwing gelaten", + "Ignored": "Genegeerd", "Images": "Afbeeldingen", - "IMAP_intercepter_already_running": "IMAP-intercepter al actief", - "IMAP_intercepter_Not_running": "IMAP-onderschepper Niet actief", - "Impersonate_next_agent_from_queue": "Uitdenken van de volgende agent uit de wachtrij", + "IMAP_intercepter_already_running": "IMAP-intercepter wordt al uitgevoerd", + "IMAP_intercepter_Not_running": "IMAP-intercepter werkt niet", + "Impersonate_next_agent_from_queue": "Zich voordoen als de volgende agent uit de wachtrij", "Impersonate_user": "Zich voordoen als gebruiker", - "Impersonate_user_description": "Indien ingeschakeld, worden integratieposten als de gebruiker die integratie heeft geactiveerd", - "Import": "Import", + "Impersonate_user_description": "Indien ingeschakeld, wordt integratie gepost als de gebruiker die integratie heeft geactiveerd", + "Import": "Importeren", "Import_New_File": "Nieuw bestand importeren", "Import_requested_successfully": "Import succesvol aangevraagd", "Import_Type": "Importtype", "Importer_Archived": "Gearchiveerd", "Importer_CSV_Information": "De CSV-importeur vereist een specifiek formaat, lees de documentatie voor het structureren van uw zipbestand:", - "Importer_done": "Importeren compleet!", + "Importer_done": "Importeren voltooid!", + "Importer_ExternalUrl_Description": "U kunt ook een URL gebruiken voor een publiek toegankelijk bestand:", "Importer_finishing": "Afwerking van de import.", - "Importer_From_Description": "Invoer __from__ 's gegevens in Rocket.Chat.", - "Importer_HipChatEnterprise_BetaWarning": "Houd er rekening mee dat deze import nog steeds in uitvoering is. Rapporteer eventuele fouten in GitHub:", - "Importer_HipChatEnterprise_Information": "Het geüploade bestand moet een gedecodeerde tar.gz zijn. Lees de documentatie voor meer informatie:", - "Importer_import_cancelled": "Importeren geannuleerd.", + "Importer_From_Description": "Impoort __from__-gegevens in Rocket.Chat.", + "Importer_HipChatEnterprise_BetaWarning": "Houd er rekening mee dat deze import nog steeds in uitvoering is, meld eventuele fouten die optreden op GitHub:", + "Importer_HipChatEnterprise_Information": "Het geüploade bestand moet een ontsleutelde tar.gz zijn, lees de documentatie voor meer informatie:", + "Importer_import_cancelled": "Import geannuleerd.", "Importer_import_failed": "Er is een fout opgetreden tijdens het importeren.", - "Importer_importing_channels": "Het importeren van de kanalen.", + "Importer_importing_channels": "De kanalen importeren.", "Importer_importing_files": "Importeren van de bestanden.", - "Importer_importing_messages": "Het importeren van de berichten.", + "Importer_importing_messages": "De berichten importeren.", "Importer_importing_started": "Starten van de import.", - "Importer_importing_users": "Het importeren van de gebruikers.", + "Importer_importing_users": "De gebruikers importeren.", "Importer_not_in_progress": "De importeur is momenteel niet actief.", - "Importer_not_setup": "De importeur is niet juist ingesteld omdat er geen gegevens zijn geretourneerd.", - "Importer_Prepare_Restart_Import": "Restart Import", - "Importer_Prepare_Start_Import": "start importeren", - "Importer_Prepare_Uncheck_Archived_Channels": "Haal het vinkje weg Gearchiveerd Channels", - "Importer_Prepare_Uncheck_Deleted_Users": "Haal het vinkje weg Verwijderde Gebruikers", - "Importer_progress_error": "Kan de vooruitgang van de import te krijgen.", - "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_not_setup": "De importeur is niet correct ingesteld, omdat er geen gegevens zijn geretourneerd.", + "Importer_Prepare_Restart_Import": "Start de import opnieuw", + "Importer_Prepare_Start_Import": "Begin met importeren", + "Importer_Prepare_Uncheck_Archived_Channels": "Haal het vinkje weg van gearchiveerde kanalen", + "Importer_Prepare_Uncheck_Deleted_Users": "Haal het vinkje weg van verwijderde gebruikers", + "Importer_progress_error": "Het ophalen van de voortgang voor het importeren is mislukt.", + "Importer_setup_error": "Er is een fout opgetreden bij het instellen van de importeur.", + "Importer_Slack_Users_CSV_Information": "Het geüploade bestand moet het exportbestand van Slack's Gebruikers zijn, wat een CSV-bestand is. Kijk hier voor meer informatie:", + "Importer_Source_File": "Selectie van bronbestand", + "importer_status_done": "Succesvol voltooid", + "importer_status_downloading_file": "Bestand downloaden", + "importer_status_file_loaded": "Bestand geladen", "importer_status_finishing": "Bijna klaar", + "importer_status_import_cancelled": "Geannuleerd", "importer_status_import_failed": "Fout", + "importer_status_importing_channels": "Kanalen importeren", "importer_status_importing_files": "Bestanden importeren", + "importer_status_importing_messages": "Berichten importeren", + "importer_status_importing_started": "Gegevens importeren", + "importer_status_importing_users": "Gebruikers importeren", + "importer_status_new": "Niet begonnen", + "importer_status_preparing_channels": "Kanalenbestand lezen", "importer_status_preparing_messages": "Berichtbestanden lezen", "importer_status_preparing_started": "Bestanden lezen", + "importer_status_preparing_users": "Gebruikersbestand lezen", + "importer_status_uploading": "Bestand uploaden", + "importer_status_user_selection": "Klaar om te selecteren wat u wilt importeren", "Importer_Upload_FileSize_Message": "Uw serverinstellingen sta het uploaden van bestanden van elk grootte toe tot __maxFileSize__.", "Importer_Upload_Unlimited_FileSize": "Uw serverinstellingen laat het uploaden van bestanden van elke grootte toe.", + "Importing_channels": "Kanalen importeren", + "Importing_Data": "Gegevens importeren", + "Importing_messages": "Berichten importeren", + "Importing_users": "Gebruikers importeren", + "In_progress": "Bezig", + "Inbox_Info": "Inbox-info", "Include_Offline_Agents": "Offline agenten toevoegen", - "Inclusive": "inclusief", - "Incoming_Livechats": "Inkomende Livechats", + "Inclusive": "Inclusief", + "Incoming_Livechats": "Chats in de wachtrij", "Incoming_WebHook": "Inkomende WebHook", "Industry": "Industrie", + "Info": "Info", "initials_avatar": "Initialen Avatar", - "inline_code": "inline_code", - "Install_Extension": "Installeer Uitbreiding", - "Install_FxOs": "Rocket.Chat installeren op uw Firefox-", - "Install_FxOs_done": "Super! Je kunt Rocket.Chat gebruiker d.m.v. het ikoon op je beginscherm. Veel plezier met Rocket.Chat!", + "inline_code": "inline code", + "Install": "Installeren", + "Install_Extension": "Installeer extensie", + "Install_FxOs": "Installeer Rocket.Chat op uw Firefox", + "Install_FxOs_done": "Super! Je kunt Rocket.Chat nu gebruiken via het icoontje op je homescherm. Veel plezier met Rocket.Chat!", "Install_FxOs_error": "Sorry, dat werkte niet zoals de bedoeling! De volgende fout is opgetreden:", - "Install_FxOs_follow_instructions": "S.v.p. de app installatie op uw apparaten bevestigen (druk op \"Installeer\" wanneer daar om gevraagd wordt).", + "Install_FxOs_follow_instructions": "Bevestig de installatie van de app op uw apparaat (druk op \"Installeren\" wanneer daar om gevraagd wordt).", "Install_package": "Installeer pakket", "Installation": "Installatie", + "Installed": "Geïnstalleerd", "Installed_at": "Geïnstalleerd op", + "Instance": "Instantie", "Instances": "Instanties", "Instances_health": "Gezondheid van instanties", - "Instance_Record": "Exemplaar", - "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Instructies om uw bezoeker vul het formulier in om een bericht te sturen", + "Instance_Record": "Record instantie", + "Instructions": "Instructies", + "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Instructies voor uw bezoeker vul het formulier in om een bericht te verzenden", + "Insert_Contact_Name": "Voer de naam van het contact in", "Insurance": "Verzekering", "Integration_added": "Integratie is toegevoegd", "Integration_Advanced_Settings": "Geavanceerde instellingen", + "Integration_Delete_Warning": "Het verwijderen van een integratie kan niet ongedaan worden gemaakt.", "Integration_disabled": "Integratie uitgeschakeld", - "Integration_History_Cleared": "Integratiegeschiedenis met succes gewist", + "Integration_History_Cleared": "Integratiegeschiedenis succesvol gewist", "Integration_Incoming_WebHook": "Inkomende WebHook Integratie", "Integration_New": "Nieuwe integratie", "Integration_Outgoing_WebHook": "Uitgaande WebHook integratie", @@ -1685,84 +2089,86 @@ "Integration_Outgoing_WebHook_History_Error_Stacktrace": "Fout Stacktrace", "Integration_Outgoing_WebHook_History_Http_Response": "HTTP-reactie", "Integration_Outgoing_WebHook_History_Http_Response_Error": "HTTP-antwoordfout", - "Integration_Outgoing_WebHook_History_Messages_Sent_From_Prepare_Script": "Berichten verzonden vanaf Stap voorbereiden", - "Integration_Outgoing_WebHook_History_Messages_Sent_From_Process_Script": "Berichten verzonden vanuit stap Procesreactie", - "Integration_Outgoing_WebHook_History_Time_Ended_Or_Error": "Time it ended of Error'd", + "Integration_Outgoing_WebHook_History_Messages_Sent_From_Prepare_Script": "Berichten verzonden vanuit de voorbereidingsstap", + "Integration_Outgoing_WebHook_History_Messages_Sent_From_Process_Script": "Berichten verzonden vanuit procesantwoordstap", + "Integration_Outgoing_WebHook_History_Time_Ended_Or_Error": "Tijd dat het eindigde of een fout maakte", "Integration_Outgoing_WebHook_History_Time_Triggered": "Tijdintegratie geactiveerd", - "Integration_Outgoing_WebHook_History_Trigger_Step": "Last Trigger Step", - "Integration_Outgoing_WebHook_No_History": "Deze uitgaande webhookintegratie heeft nog geen geschiedenis vastgelegd.", - "Integration_Retry_Count": "Retry Count", - "Integration_Retry_Count_Description": "Hoe vaak moet de integratie worden geprobeerd als de aanroep naar de URL mislukt?", - "Integration_Retry_Delay": "Probeer opnieuw proberen", - "Integration_Retry_Delay_Description": "Welk vertragingsalgoritme moet het opnieuw proberen gebruiken? 10 ^ xof 2 ^ xof x * 2", - "Integration_Retry_Failed_Url_Calls": "Opnieuw mislukken Url-oproepen", - "Integration_Retry_Failed_Url_Calls_Description": "Moet de integratie een redelijke tijd proberen als de oproep naar de URL mislukt?", + "Integration_Outgoing_WebHook_History_Trigger_Step": "Laatste activeringsstap", + "Integration_Outgoing_WebHook_No_History": "Deze uitgaande webhook-integratie heeft nog geen geschiedenis geregistreerd.", + "Integration_Retry_Count": "Aantal pogingen", + "Integration_Retry_Count_Description": "Hoe vaak moet de integratie worden geprobeerd als de aanroep naar de url mislukt?", + "Integration_Retry_Delay": "Wachttijd nieuwe poging", + "Integration_Retry_Delay_Description": "Welk vertragingsalgoritme moet de nieuwe poging gebruiken? 10^xof 2^x of x*2", + "Integration_Retry_Failed_Url_Calls": "Probeer mislukte URL-oproepen opnieuw", + "Integration_Retry_Failed_Url_Calls_Description": "Moet de integratie een redelijke aantal keer proberen als de oproep naar de URL mislukt?", "Integration_Run_When_Message_Is_Edited": "Uitvoeren op bewerkingen", "Integration_Run_When_Message_Is_Edited_Description": "Moet de integratie worden uitgevoerd wanneer het bericht wordt bewerkt? Als u dit op false instelt, wordt de integratie alleen uitgevoerd op nieuwe berichten.", "Integration_updated": "Integratie is bijgewerkt", - "Integration_Word_Trigger_Placement": "Word plaatsing overal", - "Integration_Word_Trigger_Placement_Description": "Moet het Woord worden getriggerd wanneer het ergens anders dan in het begin in de zin wordt geplaatst?", + "Integration_Word_Trigger_Placement": "Woordplaatsing overal", + "Integration_Word_Trigger_Placement_Description": "Moet het woord worden getriggerd wanneer het ergens in de zin wordt geplaatst, behalve aan het begin?", "Integrations": "Integraties", - "Integrations_for_all_channels": "Voer all_public_channels Publieke zenders te luisteren, all_private_groups om op alle particuliere groepen luisteren, en all_direct_messages om alle rechtstreekse berichten te beluisteren.", + "Integrations_for_all_channels": "Voer all_public_channels in om naar openbare kanalen te luisteren, all_private_groups om naar alle privégroepen te luisteren, en all_direct_messages om naar alle directe berichten te luisteren.", "Integrations_Outgoing_Type_FileUploaded": "Bestand geüpload", "Integrations_Outgoing_Type_RoomArchived": "Kamer gearchiveerd", - "Integrations_Outgoing_Type_RoomCreated": "Kamer gemaakt (openbaar en privé)", - "Integrations_Outgoing_Type_RoomJoined": "User Joined Room", - "Integrations_Outgoing_Type_RoomLeft": "User Left Room", + "Integrations_Outgoing_Type_RoomCreated": "Kamer aangemaakt (openbaar en privé)", + "Integrations_Outgoing_Type_RoomJoined": "Gebruiker is kamer toegetreden", + "Integrations_Outgoing_Type_RoomLeft": "Gebruiker heeft de kamer verlaten", "Integrations_Outgoing_Type_SendMessage": "Bericht verzonden", - "Integrations_Outgoing_Type_UserCreated": "Gebruiker gemaakt", - "InternalHubot": "interne Hubot", - "InternalHubot_EnableForChannels": "Inschakelen voor publieke zenders", - "InternalHubot_EnableForDirectMessages": "Inschakelen voor Direct Messages", - "InternalHubot_EnableForPrivateGroups": "Inschakelen voor particuliere zenders", + "Integrations_Outgoing_Type_UserCreated": "Gebruiker aangemaakt", + "InternalHubot": "Interne Hubot", + "InternalHubot_EnableForChannels": "Inschakelen voor openbare kanalen", + "InternalHubot_EnableForDirectMessages": "Inschakelen voor privéberichten", + "InternalHubot_EnableForPrivateGroups": "Inschakelen voor privékanalen", "InternalHubot_PathToLoadCustomScripts": "Map om de scripts te laden", "InternalHubot_reload": "Herlaad de scripts", "InternalHubot_ScriptsToLoad": "Scripts om te laden", - "InternalHubot_ScriptsToLoad_Description": "Geef een door komma's gescheiden lijst met scripts te laden uit https://github.com/github/hubot-scripts/tree/master/src/scripts", - "InternalHubot_Username_Description": "Dit moet een geldige gebruikersnaam van een bot geregistreerd op uw server.", - "Invalid_confirm_pass": "De wachtwoorden zijn verschillend", - "Invalid_email": "Ongeldig e-mail adres", - "Invalid_Export_File": "Het bestand geüpload is geen geldig %s exportbestand.", - "Invalid_Import_File_Type": "Ongeldig bestandstype importeren.", + "InternalHubot_ScriptsToLoad_Description": "Voer een door door komma's gescheiden lijst met scripts in om vanuit uw aangepaste map te laden", + "InternalHubot_Username_Description": "Dit moet een geldige gebruikersnaam zijn van een bot die op uw server is geregistreerd.", + "Invalid Canned Response": "Ongeldige standaardantwoord", + "Invalid_confirm_pass": "De wachtwoordbevestiging komt niet overeen met het wachtwoord", + "Invalid_Department": "Ongeldige afdeling", + "Invalid_email": "Het ingevoerde e-mailadres is ongeldig", + "Invalid_Export_File": "Het geüploade bestand is geen geldig %s exportbestand.", + "Invalid_Import_File_Type": "Ongeldige importbestandstype.", "Invalid_name": "De naam mag niet leeg zijn", - "Invalid_notification_setting_s": "Ongeldige melding-instelling: %s", + "Invalid_notification_setting_s": "Ongeldige meldingsinstelling: %s", "Invalid_or_expired_invite_token": "Ongeldige of verlopen uitnodigingstoken", "Invalid_pass": "Het wachtwoord mag niet leeg zijn", - "Invalid_reason": "De reden om mee te doen mag niet leeg zijn", + "Invalid_reason": "De reden om lid te worden mag niet leeg zijn", "Invalid_room_name": "%s is geen geldige naam", "Invalid_secret_URL_message": "De gegeven URL is ongeldig.", - "Invalid_setting_s": "Ongeldige instelling:%s", - "Invalid_two_factor_code": "Ongeldige code met twee factoren", + "Invalid_setting_s": "Ongeldige instelling: %s", + "Invalid_two_factor_code": "Ongeldige tweefactorcode", "Invalid_username": "De ingevoerde gebruikersnaam is ongeldig", "invisible": "onzichtbaar", "Invisible": "Onzichtbaar", "Invitation": "Uitnodiging", "Invitation_Email_Description": "U kunt de volgende variabels gebruiken: [email] voor het e-mailadres van de ontvanger. [Site_Name] en [Site_URL] voor respectievelijk de applicatienaam en URL. ", "Invitation_HTML": "Uitnodiging HTML", - "Invitation_HTML_Default": "Je bent uitgenodigd voor [Site_Name] Ga naar [Site_URL] en probeer de beste open source chat-oplossing die vandaag beschikbaar zijn! ", - "Invitation_Subject": "Uitnodiging Onderwerp", - "Invitation_Subject_Default": "Je bent uitgenodigd om [Site_Name]", + "Invitation_HTML_Default": "Je bent uitgenodigd voor [Site_Name] Ga naar [Site_URL] en probeer de beste open source chat-oplossing die vandaag beschikbaar is! ", + "Invitation_Subject": "Uitnodiging onderwerp", + "Invitation_Subject_Default": "Je bent uitgenodigd voor [Site_Name]", "Invite_Link": "Uitnodigingslink", "Invite_user_to_join_channel": "Nodig een gebruiker uit om lid te worden van dit kanaal", - "Invite_user_to_join_channel_all_from": "Nodig alle gebruikers uit [#kanaal] uit om lid te worden van dit kanaal", + "Invite_user_to_join_channel_all_from": "Nodig alle gebruikers van [#kanaal] uit om lid te worden van dit kanaal", "Invite_user_to_join_channel_all_to": "Alle gebruikers van dit kanaal uitnodigen om lid te worden van [#channel]", "Invite_Users": "Gebruikers uitnodigen", - "IRC_Channel_Join": "Uitvoer van het commando JOIN.", - "IRC_Channel_Leave": "Uitvoer van de opdracht PART.", - "IRC_Channel_Users": "Uitvoer van de opdracht NAMES.", - "IRC_Channel_Users_End": "Einde van de uitvoer van de opdracht NAMES.", - "IRC_Description": "Internet Relay Chat (IRC) is een op tekst gebaseerde groepscommunicatietool. Gebruikers sluiten zich aan bij unieke kanalen of kamers voor een open discussie. IRC ondersteunt ook privéberichten tussen individuele gebruikers en mogelijkheden voor het delen van bestanden. Dit pakket integreert deze functionaliteitslagen met Rocket.Chat.", - "IRC_Enabled": "Probeer IRC-ondersteuning te integreren. Voor het wijzigen van deze waarde moet Rocket.Chat opnieuw worden gestart.", + "IRC_Channel_Join": "Uitvoer van het JOIN-commando.", + "IRC_Channel_Leave": "Uitvoer van het PART-commando.", + "IRC_Channel_Users": "Uitvoer van het NAMES-commando.", + "IRC_Channel_Users_End": "Einde van de uitvoer van het NAMES-commando.", + "IRC_Description": "Internet Relay Chat (IRC) is een op tekst gebaseerde hulpmiddel voor groepscommunicatie. Gebruikers sluiten zich aan bij kanalen met een unieke naam, of kamers, voor een open discussie. IRC ondersteunt ook privéberichten tussen individuele gebruikers en mogelijkheden voor het delen van bestanden. Dit pakket integreert deze functionaliteit met Rocket.Chat.", + "IRC_Enabled": "Probeer IRC-ondersteuning te integreren. Als u deze waarde wilt wijzigen, moet Rocket.Chat opnieuw worden opgestart.", "IRC_Enabled_Alert": "IRC-ondersteuning is een werk in uitvoering. Gebruik op een productiesysteem wordt op dit moment niet aanbevolen.", "IRC_Federation": "IRC-federatie", "IRC_Federation_Disabled": "IRC-federatie is uitgeschakeld.", - "IRC_Hostname": "De IRC-hostserver waarmee verbinding wordt gemaakt.", + "IRC_Hostname": "De IRC-hostserver waarmee verbinding moet worden gemaakt.", "IRC_Login_Fail": "Uitvoer na een mislukte verbinding met de IRC-server.", - "IRC_Login_Success": "Uitvoer na een succesvolle verbinding met de IRC-server.", - "IRC_Message_Cache_Size": "De cachelimiet voor het verwerken van uitgaande berichten.", - "IRC_Port": "De poort om aan te binden op de IRC-hostserver.", + "IRC_Login_Success": "Uitvoer bij een succesvolle verbinding met de IRC-server.", + "IRC_Message_Cache_Size": "De cachelimiet voor het afhandelen van uitgaande berichten.", + "IRC_Port": "De poort waarmee moet worden verbonden op de IRC-hostserver.", "IRC_Private_Message": "Uitvoer van het PRIVMSG-commando.", - "IRC_Quit": "Uitvoer bij het afsluiten van een IRC-sessie.", + "IRC_Quit": "Uitvoer bij het verlaten van een IRC-sessie.", "is_also_typing": "is ook aan het typen", "is_also_typing_female": "is ook aan het typen", "is_also_typing_male": "is ook aan het typen", @@ -1770,272 +2176,367 @@ "is_typing_female": "is aan het typen", "is_typing_male": "is aan het typen", "Issue_Links": "Issue tracker-links", - "IssueLinks_Incompatible": "Waarschuwing: schakel dit niet in en de 'Hex Color Preview' tegelijkertijd.", + "IssueLinks_Incompatible": "Waarschuwing: schakel dit en de 'Hex Color Preview' niet tegelijkertijd in.", "IssueLinks_LinkTemplate": "Sjabloon voor probleemkoppelingen", - "IssueLinks_LinkTemplate_Description": "Sjabloon voor verbindingslinks; %s wordt vervangen door het probleemnummer.", + "IssueLinks_LinkTemplate_Description": "Sjabloon voor probleemkoppelingen; %s wordt vervangen door het probleemnummer.", "It_works": "Het werkt", + "It_Security": "IT beveiliging", + "italic": "Cursief", "italics": "cursief", "Items_per_page:": "Items per pagina:", + "Jitsi_Application_ID": "Applicatie-ID (iss)", + "Jitsi_Application_Secret": "Application Secret", "Jitsi_Chrome_Extension": "Chrome Extension Id", - "Jitsi_Enable_Channels": "Schakelen in Channels", + "Jitsi_Enable_Channels": "Schakel kanalen in", + "Jitsi_Enabled_TokenAuth": "Schakel JWT-verificatie in", + "Jitsi_Limit_Token_To_Room": "Beperk het token tot Jitsi Room", "Job_Title": "Functietitel", "join": "Toetreden", - "Join_audio_call": "Voeg me toe aan audio gesprek", - "Join_Chat": "Word lid van Chat", + "Join_audio_call": "Deelnemen aan audiogesprek", + "Join_Chat": "Met chat meedoen", "Join_default_channels": "Word lid van standaardkanalen", - "Join_the_Community": "Word lid", + "Join_the_Community": "Word lid van de community", "Join_the_given_channel": "Word lid van het gegeven kanaal", - "Join_video_call": "Voeg me toe aan video gesprek", - "join-without-join-code": "Word lid zonder code", - "join-without-join-code_description": "Toestemming om de join-code te omzeilen in kanalen waarop joincode is ingeschakeld", - "Joined": "Geregistreerd", + "Join_video_call": "Deelnemen aan videogesprek", + "join-without-join-code": "Word lid zonder aanmeldcode", + "join-without-join-code_description": "Toestemming om de join-code te omzeilen in kanalen waarvoor join-code is ingeschakeld", + "Joined": "Toegetreden", "Joined_at": "Toegetreden op", "Jump": "Springen", - "Jump_to_first_unread": "Naar eerste ongelezen", + "Jump_to_first_unread": "Ga naar eerste ongelezen", "Jump_to_message": "Ga naar bericht", "Jump_to_recent_messages": "Ga naar recente berichten", - "Just_invited_people_can_access_this_channel": "Alleen genodigden hebben toegang tot dit kanaal.", - "Katex_Dollar_Syntax": "Laat Dollar Syntax", - "Katex_Dollar_Syntax_Description": "Laat met behulp van $$ Katex blok $$ en $ inline Katex $ syntaxis", + "Just_invited_people_can_access_this_channel": "Alleen uitgenodige mensen hebben toegang tot dit kanaal.", + "Katex_Dollar_Syntax": "Dollar-syntaxis toestaan", + "Katex_Dollar_Syntax_Description": "Sta het gebruik van $$katex block$$ en $inline katex$ syntaxis toe", "Katex_Enabled": "Katex ingeschakeld", - "Katex_Enabled_Description": "Laat met behulp van Katex voor wiskunde zetwerk in berichten", - "Katex_Parenthesis_Syntax": "Laat Haakjes Syntax", - "Katex_Parenthesis_Syntax_Description": "Laat het gebruik van \\ [Katex block \\] en \\ (inline Katex \\) syntaxis", - "Keep_default_user_settings": "Houd de standaardinstellingen aan", + "Katex_Enabled_Description": "Sta het gebruik van Katex toe voor het zetten van wiskunde in berichten", + "Katex_Parenthesis_Syntax": "Syntaxis tussen haakjes toestaan", + "Katex_Parenthesis_Syntax_Description": "Sta het gebruik van \\[katex block\\] en \\(inline katex\\) syntaxis toe", + "Keep_default_user_settings": "Behoud de standaardinstellingen", "Keyboard_Shortcuts_Edit_Previous_Message": "Bewerk vorig bericht", - "Keyboard_Shortcuts_Keys_1": "Ctrl+ p", - "Keyboard_Shortcuts_Keys_2": "Pijl-omhoog", + "Keyboard_Shortcuts_Keys_1": "Command (of Ctrl) + p OF Command (of Ctrl) + k", + "Keyboard_Shortcuts_Keys_2": "Pijltje omhoog", "Keyboard_Shortcuts_Keys_3": "Command (of Alt) + Linker pijl", "Keyboard_Shortcuts_Keys_4": "Command (of Alt) + Pijltje omhoog", "Keyboard_Shortcuts_Keys_5": "Command (of Alt) + Pijl naar rechts", - "Keyboard_Shortcuts_Keys_6": "OpdrachtAlt) + Pijltje omlaag", - "Keyboard_Shortcuts_Keys_7": "Shift+ Voerin", - "Keyboard_Shortcuts_Keys_8": "Shift (of Ctrl) + ESC ", + "Keyboard_Shortcuts_Keys_6": "Command (of Alt) + Pijltje omlaag", + "Keyboard_Shortcuts_Keys_7": "Shift + Enter", + "Keyboard_Shortcuts_Keys_8": "Shift (of Ctrl) + ESC", "Keyboard_Shortcuts_Mark_all_as_read": "Markeer alle berichten (in alle kanalen) als gelezen", "Keyboard_Shortcuts_Move_To_Beginning_Of_Message": "Ga naar het begin van het bericht", "Keyboard_Shortcuts_Move_To_End_Of_Message": "Ga naar het einde van het bericht", - "Keyboard_Shortcuts_New_Line_In_Message": "Nieuwe regel in bericht opstellen van invoer", + "Keyboard_Shortcuts_New_Line_In_Message": "Nieuwe regel in bericht opstellen", "Keyboard_Shortcuts_Open_Channel_Slash_User_Search": "Open kanaal / gebruiker zoeken", "Keyboard_Shortcuts_Title": "Toetsenbord sneltoetsen", "Knowledge_Base": "Kennis basis", - "Label": "Etiket", + "Label": "Label", "Language": "Taal", + "Language_Dutch": "Nederlands", + "Language_English": "Engels", + "Language_French": "Frans", + "Language_German": "Duits", + "Language_Italian": "Italiaans", "Language_Not_set": "Geen specifiek", - "Language_Version": "Nederlandse versie", + "Language_Polish": "Pools", + "Language_Portuguese": "Portugees", + "Language_Russian": "Russisch", + "Language_Spanish": "Spaans", + "Language_Version": "Engelse versie", + "Last_7_days": "Laatste 7 dagen", + "Last_30_days": "Laatste 30 dagen", + "Last_90_days": "Laatste 90 dagen", + "Last_active": "Laatst actief", + "Last_Chat": "Laatste chat", "Last_login": "Laatste aanmelding", "Last_Message": "Laatste bericht", - "Last_Message_At": "Laatste Bericht At", + "Last_Message_At": "Laatste bericht op", "Last_seen": "Laatst gezien", "Last_Status": "Laatste status", - "Last_token_part": "Laatste tokendeel", + "Last_token_part": "Laatste tokengedeelte", "Last_Updated": "Laatst bijgewerkt", - "Launched_successfully": "Gelanceerd met succes", + "Launched_successfully": "Succesvol gelanceerd", "Layout": "Lay-out", - "Layout_Home_Body": "Home Body", + "Layout_Home_Body": "Home body", "Layout_Home_Title": "Home Titel", "Layout_Legal_Notice": "Wettelijke bepaling", "Layout_Login_Terms": "Login voorwaarden", "Layout_Privacy_Policy": "Privacybeleid", - "Layout_Sidenav_Footer": "Side Navigation Footer", - "Layout_Sidenav_Footer_description": "Footer afmetingen zijn 260 x 70px", - "Layout_Terms_of_Service": "Algemene Voorwaarden", + "Layout_Show_Home_Button": "Toon \"thuisknop\"", + "Layout_Sidenav_Footer": "Voettekst voor navigatie aan de zijkant", + "Layout_Sidenav_Footer_description": "De voettekst afmetingen zijn 260 x 70 px", + "Layout_Terms_of_Service": "Servicevoorwaarden", "LDAP": "LDAP", - "LDAP_Authentication": "In staat stellen", + "LDAP_Advanced_Sync": "Geavanceerde synchronisatie", + "LDAP_Authentication": "Inschakelen", "LDAP_Authentication_Password": "Wachtwoord", "LDAP_Authentication_UserDN": "Gebruiker DN", - "LDAP_Authentication_UserDN_Description": "De LDAP-gebruiker die gebruiker lookups uitvoert om andere gebruikers te verifiëren wanneer ze zich aanmelden. Dit is typisch een service-account speciaal gemaakt voor derden integraties. Gebruik een volledig gekwalificeerde naam, zoals `cn = Administrator, cn = Users, dc = voorbeeld, dc = com`.", - "LDAP_Background_Sync": "Achtergrondsync", + "LDAP_Authentication_UserDN_Description": "De LDAP-gebruiker die gebruikerszoekopdrachten uitvoert om andere gebruikers te verifiëren wanneer ze zich aanmelden. Dit is doorgaans een serviceaccount dat speciaal is gemaakt voor integraties van derden. Gebruik een volledig gekwalificeerde naam, zoals `cn=Administrator,cn=Users,dc=Example,dc=com`.", + "LDAP_Avatar_Field": "Gebruikersavatarveld", + "LDAP_Avatar_Field_Description": "Welk veld wordt gebruikt als *avatar* voor gebruikers. Laat leeg om eerst `thumbnailPhoto` te gebruiken en `jpegPhoto` als fallback.", + "LDAP_Background_Sync": "Achtergrondsynchronisatie", "LDAP_Background_Sync_Import_New_Users": "Achtergrondsynchronisatie Nieuwe gebruikers importeren", - "LDAP_Background_Sync_Import_New_Users_Description": "Zal alle gebruikers importeren (op basis van uw filtercriteria) die bestaat in LDAP en niet bestaat in Rocket.Chat", - "LDAP_Background_Sync_Interval": "Interval achtergrondsynchronisatie", + "LDAP_Background_Sync_Import_New_Users_Description": "Importeert alle gebruikers (op basis van uw filtercriteria) die in LDAP bestaan en niet in Rocket.Chat", + "LDAP_Background_Sync_Interval": "Interval voor achtergrondsynchronisatie", "LDAP_Background_Sync_Interval_Description": "Het interval tussen synchronisaties. Voorbeeld `elke 24 uur` of `op de eerste dag van de week`, meer voorbeelden op [Cron Text Parser](http://bunkat.github.io/later/parsers.html#text)", - "LDAP_Background_Sync_Keep_Existant_Users_Updated": "Achtergrondsynchronisatie Update bestaande gebruikers", - "LDAP_Background_Sync_Keep_Existant_Users_Updated_Description": "Synchroniseert de avatar, velden, gebruikersnaam, enz. (Op basis van uw configuratie) van alle gebruikers die al vanuit LDAP zijn geïmporteerd op elke ** Synchronisatie-interval **", - "LDAP_BaseDN": "Base DN", - "LDAP_BaseDN_Description": "De volledig gekwalificeerde Distinguished Name (DN) van een LDAP subtree u wilt zoeken voor gebruikers en groepen. U kunt zoveel als je wilt toevoegen; echter, moet elke groep worden gedefinieerd in hetzelfde domein basis als de gebruikers die behoren. Als u beperkte gebruikersgroepen geven, zullen alleen gebruikers die behoren tot die groepen in scope. Wij raden u aan het hoogste niveau van de LDAP-directory tree opgeven als uw domein basis en gebruiken zoekfilter om toegang te controleren.", + "LDAP_Background_Sync_Keep_Existant_Users_Updated": "Achtergrondsynchronisatie update bestaande gebruikers", + "LDAP_Background_Sync_Keep_Existant_Users_Updated_Description": "Synchroniseert de avatar, velden, gebruikersnaam, enz. (Op basis van uw configuratie) van alle gebruikers die al zijn geïmporteerd vanuit LDAP op elk **Synchronisatie-interval**", + "LDAP_BaseDN": "Basis DN", + "LDAP_BaseDN_Description": "De volledig gekwalificeerde Distinguished Name (DN) van een LDAP-substructuur waarin u wilt zoeken naar gebruikers en groepen. U kunt zoveel er zoveel toevoegen als u wilt; Elke groep moet echter in hetzelfde domein worden gedefinieerd als de gebruikers die erbij horen. Voorbeeld: `ou=Users+ou=Projects,dc=Example,dc=com`. Als u beperkte gebruikersgroepen opgeeft, vallen alleen gebruikers die tot die groepen behoren in het bereik. Wij raden u aan het hoogste niveau van de LDAP-directorystructuur op te geven als uw domeinbasis en een zoekfilter te gebruiken om de toegang te regelen.", "LDAP_CA_Cert": "CA Cert", - "LDAP_Connect_Timeout": "Connection Timeout (ms)", + "LDAP_Connect_Timeout": "Time-out verbinding (ms)", "LDAP_Default_Domain": "Standaard domein", - "LDAP_Default_Domain_Description": "Indien aanwezig, wordt het standaarddomein gebruikt om een unieke e-mail te maken voor gebruikers waarbij e-mail niet is geïmporteerd uit LDAP. De e-mail wordt aangekoppeld als `gebruikersnaam@standaard_domein` of` unieke_id@standaard_domein`.Voorbeeld: `rocket.chat`", + "LDAP_Default_Domain_Description": "Indien aanwezig, wordt het standaarddomein gebruikt om een unieke e-mail te maken voor gebruikers waarbij e-mail niet is geïmporteerd vanuit LDAP. De e-mail wordt aangekoppeld als `gebruikersnaam@standaard_domein` of `unieke_id@standaard_domein`.Voorbeeld: `rocket.chat`", "LDAP_Default_Role_To_User": "Standaardrol voor gebruiker", - "LDAP_Description": "LDAP is a hierarchical database that many companies use to provide single sign on - a facility for sharing one password between multiple sites and services. For advanced configuration information and examples, please consult our wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.", - "LDAP_Enable": "Aanzetten", + "LDAP_Default_Role_To_User_Description": "De standaard RC-rol die op de gebruiker moet worden toegepast als de gebruiker een LDAP-rol heeft die niet is toegewezen.", + "LDAP_Description": "LDAP is een hiërarchische database die door veel bedrijven wordt voor eenmalige aanmelding - een mogelijkheid om één wachtwoord te delen tussen meerdere sites en services. Raadpleeg onze wiki voor geavanceerde configuratie-informatie en voorbeelden: https://rocket.chat/docs/administrator-guides/authentication/ldap/.", + "LDAP_Enable": "Inschakelen", "LDAP_Enable_Description": "Probeer LDAP te gebruiken voor authenticatie.", - "LDAP_Encryption": "encryptie", - "LDAP_Encryption_Description": "De encryptie methode die wordt gebruikt om de communicatie te beveiligen met de LDAP-server. Voorbeelden zijn `plain` (geen encryptie),` SSL / LDAPS` (versleutelde vanaf het begin), en `StartTLS` (upgraden naar versleutelde communicatie eenmaal aangesloten).", - "LDAP_Find_User_After_Login": "Zoek gebruiker na inloggen", - "LDAP_Find_User_After_Login_Description": "Zal een zoekopdracht uitvoeren naar de DN van de gebruiker na binding om zeker te zijn dat de binding succesvol was om te voorkomen dat hij inlogt met lege wachtwoorden wanneer dit is toegestaan door de AD-configuratie.", - "LDAP_Group_Filter_Enable": "LDAP gebruikersgroepfilter inschakelen", - "LDAP_Group_Filter_Enable_Description": "Beperk de toegang tot gebruikers in een LDAP-groepNuttig voor OpenLDAP-servers zonder overlays die *memberOf* -filter niet toestaan", - "LDAP_Group_Filter_Group_Id_Attribute": "Groeps-ID kenmerk", - "LDAP_Group_Filter_Group_Id_Attribute_Description": "Bijv. * OpenLDAP: * cn", - "LDAP_Group_Filter_Group_Member_Attribute": "Groepsdeelkenmerk", - "LDAP_Group_Filter_Group_Member_Attribute_Description": "Bijv. * OpenLDAP: * uniqueMember", + "LDAP_Enable_LDAP_Roles_To_RC_Roles": "Schakel roltoewijzing van LDAP naar Rocket.Chat in", + "LDAP_Encryption": "Versleuteling", + "LDAP_Encryption_Description": "De versleutelingsmethode die wordt gebruikt om de communicatiememt de LDAP-server te beveiligen. Voorbeelden zijn `plain` (geen codering), `SSL/LDAPS` (vanaf het begin gecodeerd), en `StartTLS` (upgrade naar gecodeerde communicatie zodra verbinding is gemaakt).", + "LDAP_Find_User_After_Login": "Vind gebruiker na inloggen", + "LDAP_Find_User_After_Login_Description": "Voert een zoekopdracht uit naar de DN van de gebruiker na de binding om ervoor te zorgen dat de binding succesvol was, waardoor inloggen met lege wachtwoorden wordt voorkomen wanneer dit is toegestaan door de AD-configuratie.", + "LDAP_Group_Filter_Enable": "Schakel LDAP-gebruikersgroepfilter in", + "LDAP_Group_Filter_Enable_Description": "Toegang beperken tot gebruikers in een LDAP-groepHandig om OpenLDAP-servers zonder een *memberOf* -filter toe te staan om de toegang door groepen te beperken", + "LDAP_Group_Filter_Group_Id_Attribute": "Groeps-ID-kenmerk", + "LDAP_Group_Filter_Group_Id_Attribute_Description": "Bijv. *OpenLDAP:*cn", + "LDAP_Group_Filter_Group_Member_Attribute": "Groepslidkenmerk", + "LDAP_Group_Filter_Group_Member_Attribute_Description": "Bijv. *OpenLDAP:*uniqueMember", "LDAP_Group_Filter_Group_Member_Format": "Groepslid formaat", - "LDAP_Group_Filter_Group_Member_Format_Description": "Bijv. * OpenLDAP: * uid = # {username}, ou = gebruikers, o = Company, c = com", + "LDAP_Group_Filter_Group_Member_Format_Description": "Bijv. *OpenLDAP:*uid=#{username},ou=users,o=Company,c=com", "LDAP_Group_Filter_Group_Name": "Groepsnaam", - "LDAP_Group_Filter_Group_Name_Description": "Groepsnaam waartoe het behoort de gebruiker", - "LDAP_Group_Filter_ObjectClass": "Group ObjectClass", - "LDAP_Group_Filter_ObjectClass_Description": "De *objectclass* die de groepen identificeert. Bv. OpenLDAP:groupOfUniqueNames", - "LDAP_Host": "gastheer", - "LDAP_Host_Description": "De LDAP-host, bijvoorbeeld `ldap.example.com` of` 10.0.0.30`.", - "LDAP_Idle_Timeout": "Idle Timeout (ms)", - "LDAP_Idle_Timeout_Description": "Hoeveel milliseconden wachten na de laatste LDAP-bewerking tot de verbinding wordt verbroken. (Elke bewerking opent een nieuwe verbinding)", - "LDAP_Import_Users_Description": "Het True Sync-proces zal alle LDAP-gebruikers importeren. *Let op!* Geef zoekfilter op om geen overtollige gebruikers te importeren.", - "LDAP_Internal_Log_Level": "Intern logniveau", - "LDAP_Login_Fallback": "Inloggen Terugval", + "LDAP_Group_Filter_Group_Name_Description": "Groepsnaam waartoe de gebruiker behoort", + "LDAP_Group_Filter_ObjectClass": "Groep ObjectClass", + "LDAP_Group_Filter_ObjectClass_Description": "De *objectclass* die de groepen identificeert. Bijv. OpenLDAP:groupOfUniqueNames", + "LDAP_Host": "Host", + "LDAP_Host_Description": "De LDAP-host, bijv. `ldap.example.com` of `10.0.0.30`.", + "LDAP_Idle_Timeout": "Time-out bij inactiviteit (ms)", + "LDAP_Idle_Timeout_Description": "Hoeveel milliseconden wachten na de laatste LDAP-bewerking tot het verbreken van de verbinding. (Elke bewerking opent een nieuwe verbinding)", + "LDAP_Import_Users_Description": "Het True Sync-proces zal alle LDAP-gebruikers importeren. *Let op!* Specifieer een zoekfilter om geen overtollige gebruikers te importeren.", + "LDAP_Internal_Log_Level": "Intern logboekniveau", + "LDAP_Login_Fallback": "Login Fallback", "LDAP_Login_Fallback_Description": "Als het aanmelden op LDAP niet succesvol is, probeert u in te loggen in het standaard / lokale accountsysteem. Helpt wanneer de LDAP om de een of andere reden niet werkt.", - "LDAP_Merge_Existing_Users": "Bestaande gebruikers samenvoegen", - "LDAP_Merge_Existing_Users_Description": "* Let op! * Wanneer u een gebruiker importeert vanuit LDAP en een gebruiker met dezelfde gebruikersnaam al bestaat, worden de LDAP-info en het wachtwoord ingesteld in de bestaande gebruiker.", - "LDAP_Port": "LDAP Port", - "LDAP_Port_Description": "Poort om LDAP te benaderen. bijv. 389 of 636 voor LDAPS", - "LDAP_Reconnect": "sluit", - "LDAP_Reconnect_Description": "Probeer automatisch opnieuw verbinding te maken wanneer de verbinding om wat voor reden dan ook wordt verbroken tijdens het uitvoeren van bewerkingen", - "LDAP_Reject_Unauthorized": "Reject Unauthorized", + "LDAP_Merge_Existing_Users": "Voeg bestaande gebruikers samen", + "LDAP_Merge_Existing_Users_Description": "*Let op!* Bij het importen van een gebruiker uit LDAP en er bestaat al een gebruiker met dezelfde gebruikersnaam, dan worden de LDAP-info en het wachtwoord ingesteld op de bestaande gebruiker.", + "LDAP_Port": "Poort", + "LDAP_Port_Description": "Poort voor toegang tot LDAP. Bijv. `389` of `636` voor LDAPS", + "LDAP_Query_To_Get_User_Groups": "LDAP-query om gebruikersgroepen op te halen", + "LDAP_Query_To_Get_User_Groups_Description": "LDAP-query om de LDAP-groepen op te halen waarvan de gebruiker deel uitmaakt.", + "LDAP_Reconnect": "Verbinding opnieuw maken", + "LDAP_Reconnect_Description": "Probeer automatisch opnieuw verbinding te maken wanneer de verbinding om een of andere reden wordt onderbroken tijdens het uitvoeren van bewerkingen", + "LDAP_Reject_Unauthorized": "Ongeautoriseerde weigeren", "LDAP_Reject_Unauthorized_Description": "Schakel deze optie uit om certificaten toe te staan die niet kunnen worden geverifieerd. Meestal vereist een zelfondertekend certificaat dat deze optie uitgeschakeld is om te werken", - "LDAP_Search_Page_Size": "Zoek paginaformaat", - "LDAP_Search_Page_Size_Description": "Het maximumaantal items dat op elke resultaatpagina wordt geretourneerd, wordt weer verwerkt", - "LDAP_Search_Size_Limit": "Beperking op zoekgrootte", + "LDAP_Roles_To_Rocket_Chat_Roles": "Roltoewijzing van LDAP naar Rocket.Chat.", + "LDAP_Roles_To_Rocket_Chat_Roles_Description": "Roltoewijzing in objectindeling waarbij de objectsleutel de LDAP-rol moet zijn en de objectwaarde een array van RC-rollen. Voorbeeld: { 'ldapRole': ['rcRole', 'anotherRCRole'] }", + "LDAP_Search_Page_Size": "Zoekpaginaformaat", + "LDAP_Search_Page_Size_Description": "Het maximale aantal items dat elke resultaatpagina zal terugsturen om te verwerken", + "LDAP_Search_Size_Limit": "Limiet voor zoekgrootte", "LDAP_Search_Size_Limit_Description": "Het maximumaantal items dat moet worden geretourneerd.**Attentie** Dit aantal moet groter zijn dan **Zoekpaginaformaat**", "LDAP_Sync_Now": "Achtergrondsynchronisatie nu", - "LDAP_Sync_Now_Description": "De **Background Sync** zal nu worden uitgevoerd in plaats van te wachten op de **Sync Interval**, zelfs als **Background Sync** False is.Deze actie is asynchroon, zie de logboeken voor meer informatie over de werkwijze", + "LDAP_Sync_Now_Description": "Zal nu de **Achtergrondsynchronisatie** uitgevoeren in plaats van te wachten op het **Synchronisatie-interval**, zelfs als **Achtergrondsynchronisatie** False is.Deze actie is asynchroon, zie de logboeken voor meer informatie over het proces", + "LDAP_Sync_User_Active_State": "Synchroniseer de actieve status van de gebruiker", + "LDAP_Sync_User_Active_State_Both": "Schakel gebruikers in en uit", + "LDAP_Sync_User_Active_State_Description": "Bepaal of gebruikers moeten worden in- of uitgeschakeld op Rocket.Chat op basis van de LDAP-status. Het kenmerk 'pwdAccountLockedTime' wordt gebruikt om te bepalen of de gebruiker is uitgeschakeld.", + "LDAP_Sync_User_Active_State_Disable": "Schakel gebruikers uit", "LDAP_Sync_User_Active_State_Nothing": "Niets doen", - "LDAP_Sync_User_Avatar": "Sync User Avatar", + "LDAP_Sync_User_Avatar": "Synchroniseer gebruikersavatar", "LDAP_Sync_User_Data": "Gebruikersgegevens synchroniseren", - "LDAP_Sync_User_Data_Description": "Houd gebruikersdata synchroon met de server tijdens login (bijv. naam en email).", - "LDAP_Sync_User_Data_FieldMap": "User Data Field Map", - "LDAP_Sync_User_Data_FieldMap_Description": "Configureren hoe velden van gebruikersaccounts (zoals e-mail) worden ingevuld vanuit een record in LDAP (eenmaal gevonden). Als voorbeeld, `{\" cn \":\" name \",\" mail \":\" email \"}` kiest de door mensen leesbare naam van een persoon uit het cn-attribuut en hun e-mailadres uit het e-mailattribuut. Daarnaast is het mogelijk om variabelen te gebruiken, bijvoorbeeld: `{\" # {givenName} # {sn} \":\" name \",\" mail \":\" email \"}` gebruikt een combinatie van de voor- en achternaam van de gebruiker voor de raket chat `naam` veld. Beschikbare velden in Rocket.Chat:` name`, `email` en` customFields`.", + "LDAP_Sync_User_Data_Description": "Houd gebruikersgegevens gesynchroniseerd met de server bij **inloggen** of bij **achtergrondsynchronisatie** (bijvoorbeeld: naam, e-mail).", + "LDAP_Sync_User_Data_FieldMap": "Gebruikersgegevensveldkaart", + "LDAP_Sync_User_Data_FieldMap_Description": "Configureer hoe gebruikersaccountvelden (zoals e-mail) worden ingevuld vanuit een record in LDAP (eenmaal gevonden). Als voorbeeld, `{\"cn\":\"name\", \"mail\":\"email\"}` zal de door mensen leesbare naam van een persoon kiezen uit het cn-attribuut en hun e-mailadres uit het mailattribuut. Bovendien is het mogelijk om variabelen te gebruiken, bijvoorbeeld: `{ \"#{givenName} # {sn} \": \"name\", \"mail\": \"email\"}` gebruikt een combinatie van de voor- en achternaam van de gebruiker voor de rocket chat `naam` veld. Beschikbare velden in Rocket.Chat:`name`, `email` en `customFields`.", + "LDAP_Sync_User_Data_Groups": "Synchroniseer LDAP-groepen", + "LDAP_Sync_User_Data_Groups_AutoChannels": "LDAP-groepen automatisch synchroniseren met kanalen", + "LDAP_Sync_User_Data_Groups_AutoChannels_Admin": "Kanaalbeheerder", + "LDAP_Sync_User_Data_Groups_AutoChannels_Admin_Description": "Als er automatisch kanalen worden aangemaakt die niet bestaan tijdens een synchronisatie, wordt deze gebruiker automatisch de beheerder van het kanaal.", + "LDAP_Sync_User_Data_Groups_AutoChannels_Description": "Schakel deze functie in om automatisch gebruikers aan een kanaal toe te voegen op basis van hun LDAP-groep. Als je ook gebruikers van een kanaal wilt verwijderen, bekijk dan de onderstaande optie over het automatisch verwijderen van gebruikers.", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap": "Kanaaloverzicht LDAP-groep", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Default": "// Schakel LDAP-groepen automatische synchronisatie in voor de kanalen hierboven", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Description": "Wijs LDAP-groepen toe aan Rocket.Chat-kanalen. Als voorbeeld: `{\"employee\":\"general\"}` zal elke gebruiker in de LDAP-groep employee toevoegen aan het algemene kanaal.", + "LDAP_Sync_User_Data_Groups_AutoRemove": "Automatisch gebruikersrollen verwijderen", + "LDAP_Sync_User_Data_Groups_AutoRemove_Description": "**Let op**: als u dit inschakelt, worden gebruikers automatisch uit een rol verwijderd als ze niet zijn toegewezen in LDAP! HIermee worden alleen automatisch rollen verwijderd die zijn ingesteld onder de gebruikersgegevensgroepkaart hieronder.", + "LDAP_Sync_User_Data_Groups_BaseDN": "LDAP groep BaseDN", + "LDAP_Sync_User_Data_Groups_BaseDN_Description": "De LDAP BaseDN die gebruikt wordt om gebruikers op te zoeken.", + "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels": "Gebruikers automatisch verwijderen uit kanalen", "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels_Description": "**Opgelet**: als u dit inschakelt, worden alle gebruikers in een kanaal verwijderd die niet de bijhorende LDAP-groep hebben! Schakel dit alleen in wanneer u weet wat u doet.", + "LDAP_Sync_User_Data_Groups_Filter": "Gebruikersgroepfilter", + "LDAP_Sync_User_Data_Groups_Filter_Description": "Het LDAP-zoekfilter dat wordt gebruikt om te controleren of een gebruiker deel uitmaakt van een groep.", "LDAP_Sync_User_Data_GroupsMap": "User Data Group Map", + "LDAP_Sync_User_Data_GroupsMap_Description": "Wijs LDAP-groepen toe aan Rocket.Chat-gebruikersrollen Als voorbeeld zal `{\"rocket-admin\":\"admin\", \"tech-support\":\"support\"}` de rocket-admin LDAP-groep toewijzen aan Rocket's rol \"admin\".", "LDAP_Test_Connection": "Test verbinding", "LDAP_Timeout": "Time-out (ms)", - "LDAP_Timeout_Description": "Hoeveel mijlen wachten op een zoekresultaat voordat een foutmelding wordt geretourneerd", - "LDAP_Unique_Identifier_Field": "Unique Identifier Field", - "LDAP_Unique_Identifier_Field_Description": "Welk veld zal worden gebruikt om de LDAP-gebruiker en de Rocket.Chat gebruiker te koppelen. U kunt meerdere waarden gescheiden door een komma te informeren om te proberen om de waarde van LDAP plaat te krijgen. Standaard waarde is `objectGUID, ibm-entryUUID, GUID, dominoUNID, nsuniqueId, uidNumber`", + "LDAP_Timeout_Description": "Hoeveel milliseconden wachten op een zoekresultaat voordat een fout wordt geretourneerd", + "LDAP_Unique_Identifier_Field": "Uniek identificatieveld", + "LDAP_Unique_Identifier_Field_Description": "Welk veld wordt gebruikt om de LDAP-gebruiker en de Rocket.Chat-gebruiker te koppelen. U kunt meerdere waarden aangeven, gescheiden door komma's om te proberen de waarde uit het LDAP-record te halen. De standaardwaarde is `objectGUID,ibm-entryUUID,GUID,dominoUNID,nsuniqueId,uidNumber`", "LDAP_User_Search_Field": "Zoekveld", - "LDAP_User_Search_Field_Description": "De LDAP-kenmerk dat de LDAP-gebruiker die verificatie probeert identificeert. Dit veld moet `sAMAccountName` voor de meeste Active Directory-installaties, maar het kan` uid` andere LDAP-oplossingen, zoals OpenLDAP zijn. U kunt `mail` gebruiken om gebruikers te identificeren via e-mail of wat kenmerk dat u wilt. U kunt meerdere waarden gescheiden door een komma te gebruiken om gebruikers in staat om in te loggen met behulp van meerdere identifiers zoals gebruikersnaam of e-mail.", + "LDAP_User_Search_Field_Description": "Het LDAP-kenmerk dat de LDAP-gebruiker identificeert die verificatie probeert. Dit veld zou voor de meeste Active Directory-installaties `sAMAccountName` moeten zijn, maar het kan ook `uid` zijn voor andere LDAP-oplossingen, zoals OpenLDAP. U kunt `mail` gebruiken om gebruikers te identificeren via e-mail of welk attribuut u maar wilt. U kunt meerdere waarden gebruiken, gescheiden door komma's, zodat gebruikers kunnen inloggen met behulp van meerdere identificatiegegevens zoals gebruikersnaam of e-mail.", "LDAP_User_Search_Filter": "Filter", - "LDAP_User_Search_Filter_Description": "Indien gespecificeerd, alleen gebruikers die overeenkomen met dit filter zal worden toegestaan om in te loggen. Als er geen filter is aangegeven, zijn alle gebruikers in het kader van het opgegeven domein basis zal in staat zijn om in te loggen. Bijvoorbeeld voor Active Directory `memberOf = cn = ROCKET_CHAT, ou = General Groups`. Bijvoorbeeld voor OpenLDAP (extensible match zoeken) `ou: dn: = ROCKET_CHAT`.", - "LDAP_User_Search_Scope": "strekking", - "LDAP_Username_Field": "gebruikersnaam Field", - "LDAP_Username_Field_Description": "Welk veld zal gebruikt worden als gebruikersnaam * * voor nieuwe gebruikers. Laat leeg om de gebruikersnaam op de hoogte inlogpagina te gebruiken. U kunt template-tags te gebruiken, zoals `#{givenName}.#{sn}`. Standaard waarde is `sAMAccountName`.", - "Lead_capture_email_regex": "Lead capture email regex", + "LDAP_User_Search_Filter_Description": "Indien opgegeven, mogen alleen gebruikers die aan dit filter voldoen, inloggen. Als er geen filter is opgegeven, kunnen alle gebruikers binnen het bereik van het opgegeven domein zich aanmelden. Bijvoorbeeld voor Active Directory `memberOf=cn=ROCKET_CHAT,ou=General Groups`. Bijvoorbeeld voor OpenLDAP (extensible match zoeken) `ou:dn:=ROCKET_CHAT`.", + "LDAP_User_Search_Scope": "Reikwijdte", + "LDAP_Username_Field": "Gebruikersnaam veld", + "LDAP_Username_Field_Description": "Welk veld wordt gebruikt als *gebruikersnaam* voor nieuwe gebruikers. Laat leeg om de gebruikersnaam te gebruiken die op de inlogpagina wordt vermeld. U kunt sjabloontags gebruiken, zoals `#{givenName}.#{sn}`. De standaardwaarde is `sAMAccountName`.", + "LDAP_Validate_Roles_For_Each_Login": "Valideer de mapping voor elke login", + "LDAP_Validate_Roles_For_Each_Login_Description": "Als de validatie voor elke login moet plaatsvinden (wees voorzichtig met deze instelling, want hierdoor worden de gebruikersrollen bij elke login overschreven, anders wordt dit pas gevalideerd op het moment dat de gebruiker wordt aangemaakt).", + "Lead_capture_email_regex": "Regex voor e-mailregistratie voor leads", "Lead_capture_phone_regex": "Lead capture telefoon regex", "Leave": "Verlaten", - "Leave_Group_Warning": "Weet je zeker dat je groep \"%s\" wil verlaten?", + "Leave_a_comment": "Laat een reactie achter", + "Leave_Group_Warning": "Weet je zeker dat je groep \"%s\" wilt verlaten?", "Leave_Livechat_Warning": "Weet je zeker dat je het omnichannel wilt verlaten met \"%s\"?", - "Leave_Private_Warning": "Weet je zeker dat je de discussie met \"%s\" wil verlaten?", - "Leave_room": "Kamer verlaten", - "Leave_Room_Warning": "Weet je zeker dat je kamer \"%s\" wil verlaten?", + "Leave_Private_Warning": "Weet je zeker dat je de discussie met \"%s\" wilt verlaten?", + "Leave_room": "Verlaten", + "Leave_Room_Warning": "Weet je zeker dat je het kanaal \"%s\" wilt verlaten?", "Leave_the_current_channel": "Verlaat het huidige kanaal", "Leave_the_description_field_blank_if_you_dont_want_to_show_the_role": "Laat het beschrijvingsveld leeg als u de rol niet wilt weergeven", - "leave-c": "Laat kanalen achter", + "leave-c": "Verlaat kanalen", "leave-p": "Verlaat privégroepen", - "Lets_get_you_new_one": "Laten wij zorgen voor een nieuwe!", + "Lets_get_you_new_one": "Laten we een nieuwe voor je regelen!", "line": "lijn", - "List_of_Channels": "Lijst van kanalen", - "List_of_Direct_Messages": "Lijst van Direct Messages", + "List_of_Channels": "Lijst met kanalen", + "List_of_departments_for_forward": "Lijst met afdelingen die mogen worden doorgestuurd (optioneel)", + "List_of_departments_for_forward_description": "Sta toe om een beperkte lijst van afdelingen in te stellen die chats van deze afdeling kunnen ontvangen", + "List_of_departments_to_apply_this_business_hour": "Lijst met afdelingen die dit kantooruur moeten toepassen", + "List_of_Direct_Messages": "Lijst met privéberichten", "Omnichannel": "Omnichannel", "Livechat": "Livechat", + "Livechat_abandoned_rooms_closed_custom_message": "Aangepast bericht wanneer de kamer automatisch wordt afgesloten door inactiveit van de bezoekers", "Livechat_agents": "Omnichannel-agenten", "Livechat_Agents": "Agenten", - "Livechat_AllowedDomainsList": "Livechat Toegestane domeinen", + "Livechat_AllowedDomainsList": "Livechat toegestane domeinen", + "Livechat_Appearance": "Livechat-uiterlijk", + "Livechat_auto_transfer_chat_timeout": "Time-out (in seconden) voor automatische overdracht van onbeantwoorde chats naar een andere agent", + "Livechat_auto_transfer_chat_timeout_description": "Deze gebeurtenis vindt alleen plaats wanneer de chat net is begonnen. Na de eerste overdracht door inactiviteit wordt de ruimte niet meer bewaakt.", + "Livechat_business_hour_type": "Type kantooruur (enkel of meervoudig)", + "Livechat_chat_transcript_sent": "Chattranscript verzonden: __transcript__", + "Livechat_custom_fields_options_placeholder": "Door komma's gescheiden lijst die wordt gebruikt om een vooraf geconfigureerde waarde te selecteren. Spaties tussen elementen worden niet geaccepteerd.", + "Livechat_custom_fields_public_description": "Openbare aangepaste velden worden weergeven in externe applicaties, zoals Livechat, enz.", "Livechat_Dashboard": "Omnichannel-dashboard", "Livechat_DepartmentOfflineMessageToChannel": "Stuur de Livechat offline berichten van deze afdeling naar een kanaal", + "Livechat_enable_message_character_limit": "Tekenlimiet inschakelen", "Livechat_enabled": "Omnichannel ingeschakeld", - "Livechat_Facebook_API_Key": "OmniChannel API Key", + "Livechat_Facebook_API_Key": "OmniChannel API-sleutel", "Livechat_Facebook_API_Secret": "OmniChannel API-geheim", "Livechat_Facebook_Enabled": "Facebook-integratie ingeschakeld", - "Livechat_forward_open_chats": "Forward geopend chats", - "Livechat_forward_open_chats_timeout": "Time-out (in seconden) om chats doorsturen", + "Livechat_forward_open_chats": "Stuur open chats door", + "Livechat_forward_open_chats_timeout": "Time-out (in seconden) om chats door te sturen", "Livechat_guest_count": "Gastenteller", "Livechat_Inquiry_Already_Taken": "Omnichannel-onderzoek is al uitgevoerd", + "Livechat_Installation": "Livechat-installatie", + "Livechat_last_chatted_agent_routing": "Voorkeur voor laatstgekozen agent", + "Livechat_last_chatted_agent_routing_Description": "De instelling Last-Chatted Agent wijst chats toe aan de agent die eerder interactie heeft gehad met dezelfde bezoeker, indien de agent beschikbaar is wanneer de chat start.", "Livechat_managers": "Omnichannel-managers", + "Livechat_Managers": "Managers", + "Livechat_message_character_limit": "Tekenlimiet voor Livechat-bericht", + "Livechat_monitors": "Livechat-monitoren", + "Livechat_Monitors": "Monitoren", "Livechat_offline": "Omnichannel offline", "Livechat_offline_message_sent": "Livechat offline bericht verzonden", "Livechat_OfflineMessageToChannel_enabled": "Stuur de Livechat offline berichten naar een kanaal", "Livechat_online": "Omnichannel online", "Livechat_Queue": "Omnichannel-wachtrij", "Livechat_registration_form": "Registratieformulier", - "Livechat_registration_form_message": "Registratieformulier Bericht", + "Livechat_registration_form_message": "Registratieformulier bericht", "Livechat_room_count": "Aantal omnichannelkamers", "Livechat_Routing_Method": "Omnichannel-routeringsmethode", + "Livechat_status": "Livechat-status", "Livechat_Take_Confirm": "Wil je deze klant nemen?", - "Livechat_title": "Livechat Titel", - "Livechat_title_color": "Livechat Titel Achtergrond Kleur", + "Livechat_title": "Livechat-titel", + "Livechat_title_color": "Livechat-titel achtergrondkleur", + "Livechat_transcript_already_requested_warning": "Het transcript van deze chat is al aangevraagd en wordt verzonden zodra het gesprek is afgelopen.", + "Livechat_transcript_has_been_requested": "Het chattranscript is aangevraagd.", + "Livechat_transcript_request_has_been_canceled": "Het chattranscriptieverzoek is geannuleerd.", "Livechat_transcript_sent": "Omnichannel-transcript verzonden", + "Livechat_transfer_return_to_the_queue": "__from__ heeft de chat teruggestuurd naar de wachtrij", + "Livechat_transfer_to_agent": "__from__ heeft de chat overgebracht naar __to__", + "Livechat_transfer_to_agent_with_a_comment": "__from__ heeft de chat overgebracht naar __to__ met een opmerking: __comment__", + "Livechat_transfer_to_department": "__from__ heeft de chat overgebracht naar de afdeling __to__", + "Livechat_transfer_to_department_with_a_comment": "__from__ heeft de chat overgebracht naar de afdeling __to__ met een opmerking: __comment__", + "Livechat_Triggers": "Livechat-triggers", + "Livechat_user_sent_chat_transcript_to_visitor": "__agent__ heeft het chattranscript naar __guest__ gestuurd", "Livechat_Users": "Omnichannel-gebruikers", + "Livechat_visitor_email_and_transcript_email_do_not_match": "E-mailadres van bezoeker en transcriptie-e-mailadres komen niet overeen", + "Livechat_visitor_transcript_request": "__guest__ heeft het chattranscript aangevraagd", "LiveStream & Broadcasting": "LiveStream & Broadcasting", "Livestream_close": "Livestream sluiten", - "Livestream_enable_audio_only": "Schakel alleen audiomodus in", + "Livestream_enable_audio_only": "Schakel alleen de audiomodus in", "Livestream_enabled": "Livestream ingeschakeld", "Livestream_not_found": "Livestream niet beschikbaar", "Livestream_popout": "Livestream openen", - "Livestream_source_changed_succesfully": "Livestream-bron met succes gewijzigd", + "Livestream_source_changed_succesfully": "Livestream-bron is succesvol gewijzigd", "Livestream_switch_to_room": "Schakel over naar de livestream van de huidige kamer", - "Livestream_url": "Livestream-bron-URL", + "Livestream_url": "Bron-URL van Livestream", "Livestream_url_incorrect": "Livestream-URL is onjuist", + "Livestream_live_now": "Nu live!", + "Load_Balancing": "Load balancing", "Load_more": "Meer laden", - "Loading_more_from_history": "Meer oude berichten laden", - "Loading_suggestion": "Suggesties laden...", - "Loading...": "Laden ...", + "Loading_more_from_history": "Meer laden uit de geschiedenis", + "Loading_suggestion": "Suggesties laden", + "Loading...": "Bezig met laden...", + "Local_Domains": "Lokale domeinen", "Local_Password": "Lokaal wachtwoord", "Local_Time": "Lokale tijd", "Local_Time_time": "Lokale tijd: __time__", "Localization": "Lokalisatie", - "Log_Exceptions_to_Channel": "Uitzonderingen bij kanaal registreren", + "Location": "Locatie", + "Log_Exceptions_to_Channel": "Log uitzonderingen op kanaal", "Log_Exceptions_to_Channel_Description": "Een kanaal dat alle vastgelegde uitzonderingen ontvangt. Laat leeg om uitzonderingen te negeren.", - "Log_File": "Laat bestand en regelnummer zien", - "Log_Level": "Log level", - "Log_Package": "Laat package zien", - "Log_Trace_Methods": "Trace method calls", + "Log_File": "Toon bestand en regel", + "Log_Level": "Log niveau", + "Log_Package": "Pakket tonen", + "Log_Trace_Methods": "Traceer methode aanroepen", "Log_Trace_Methods_Filter": "Traceermethode filter", - "Log_Trace_Methods_Filter_Description": "De tekst hier zal worden geëvalueerd als RegExp (`nieuwe RegExp ('tekst')`). Houd het leeg om een spoor van elke oproep weer te geven.", + "Log_Trace_Methods_Filter_Description": "De tekst hier wordt geëvalueerd als RegExp (`new RegExp ('text)`). Houd het leeg om het spoor van elk gesprek te tonen.", "Log_Trace_Subscriptions": "Traceer abonnementsoproepen", - "Log_Trace_Subscriptions_Filter": "Filter voor abonnementen traceren", - "Log_Trace_Subscriptions_Filter_Description": "De tekst hier zal worden geëvalueerd als RegExp (`nieuwe RegExp ('tekst')`). Houd het leeg om een spoor van elke oproep weer te geven.", - "Log_View_Limit": "Log limiet", - "Logged_out_of_other_clients_successfully": "Uitgeloggen van andere plekken is gelukt", - "Login": "Log In", + "Log_Trace_Subscriptions_Filter": "Traceer abonnementsfilter", + "Log_Trace_Subscriptions_Filter_Description": "De tekst hier wordt geëvalueerd als RegExp (`new RegExp ('text)`). Houd het leeg om het spoor van elk gesprek te tonen.", + "Log_View_Limit": "Limiet logboekweergave", + "Logged_out_of_other_clients_successfully": "Met succes afgemeld bij andere clients", + "Login": "Log in", + "Login_Attempts": "Mislukte aanmeldingspogingen", "Login_Logs": "Aanmeldingslogboeken", "Login_Logs_ClientIp": "Toon client-IP in logboeken van mislukte inlogpogingen", + "Login_Logs_Enabled": "Log (op console) de mislukte inlogpogingen", "Login_Logs_ForwardedForIp": "Toon doorgestuurd IP-adres in logboeken van mislukte inlogpogingen", "Login_Logs_UserAgent": "Toon UserAgent in logboeken van mislukte inlogpogingen", "Login_Logs_Username": "Toon gebruikersnaam in logboeken van mislukte inlogpogingen", - "Login_with": "Login met %s", + "Login_with": "Log in met %s", "Logistics": "Logistiek", "Logout": "Uitloggen", - "Logout_Others": "Uitloggen van andere plekken", + "Logout_Others": "Afmelden bij andere aangemelde locaties", "Logs": "Logboeken", "Longest_chat_duration": "Langste chatduur", "Longest_reaction_time": "Langste reactietijd", "Longest_response_time": "Langste reactietijd", "Looked_for": "Gezocht naar", - "Mail_Message_Invalid_emails": "Je hebt één of meer ongeldige e-mails gegeven: %s", - "Mail_Message_Missing_to": "U moet een of meer gebruikers selecteren of één of meer e-mailadressen invullen, gescheiden door komma's.", + "Mail_Message_Invalid_emails": "Je hebt één of meer ongeldige e-mails opgegeven: %s", + "Mail_Message_Missing_subject": "U moet een e-mailonderwerp geven.", + "Mail_Message_Missing_to": "U moet een of meer gebruikers selecteren of één of meer e-mailadressen opgeven, gescheiden door komma's.", "Mail_Message_No_messages_selected_select_all": "Je hebt geen bericten geslecteerd.", - "Mail_Messages": "Mailberichten", - "Mail_Messages_Instructions": "Kies welke berichten je wil versturen via e-mail door te klikken op de berichten", - "Mail_Messages_Subject": "Hier is een geselecteerd deel van %s berichten", - "mail-messages": "Mailberichten", - "mail-messages_description": "Toestemming om de optie voor e-mailberichten te gebruiken", + "Mail_Messages": "E-mailberichten", + "Mail_Messages_Instructions": "Kies welke berichten u via e-mail wilt verzenden door op de berichten te klikken", + "Mail_Messages_Subject": "Hier is een geselecteerd gedeelte van %s berichten", + "mail-messages": "E-mailberichten", + "mail-messages_description": "Toestemming om de optie e-mailberichten te gebruiken", "Mailer": "Mailer", - "Mailer_body_tags": "Je moet [unsubscribe] gebruiken voor een unsubscribe link.Je kunt [name], [fname], [lname] gebruiken voor een gebruikers volledige naam, voorname of achtername.Je kunt [email] gebruiken voor het email adres van de gebruiker.", + "Mailer_body_tags": "Je moet [unsubscribe] gebruiken voor een unsubscribe link.Je kunt [name], [fname], [lname] gebruiken voor respectievelijk de volledige naam, voorname of achternaam van de gebruiker.Je mag [email] gebruiken voor de e-mail van de gebruiker.", "Mailing": "Mailing", - "Make_Admin": "Maak Admin", - "Make_sure_you_have_a_copy_of_your_codes_1": "Zorg ervoor dat u een kopie van uw codes hebt:", - "Make_sure_you_have_a_copy_of_your_codes_2": "Als u de toegang tot uw authenticator-app verliest, kunt u een van deze codes gebruiken om u aan te melden.", + "Make_Admin": "Admin maken", + "Make_sure_you_have_a_copy_of_your_codes_1": "Zorg ervoor dat u een kopie van uw codes heeft:", + "Make_sure_you_have_a_copy_of_your_codes_2": "Als u de toegang tot uw authenticator-app verliest, kunt u een van deze codes gebruiken om in te loggen.", "Manage_Apps": "Apps beheren", "Manage_the_App": "Beheer de app", "manage-apps": "Apps beheren", - "manage-assets": "Beheer activa", + "manage-assets": "Beheer branding", "manage-assets_description": "Toestemming om de serveractiva te beheren", + "manage-cloud_description": "Beheer Cloud", + "manage-email-inbox": "Beheer e-mailinbox", + "manage-email-inbox_description": "Toestemming om e-mailinboxen te beheren", "manage-emoji": "Beheer Emoji", - "manage-emoji_description": "Toestemming om de server-emoji's te beheren", + "manage-emoji_description": "Toestemming om de serveremoji's te beheren", "manage-incoming-integrations": "Beheer inkomende integraties", - "manage-incoming-integrations_description": "Toestemming om inkomende integraties van de server te beheren", + "manage-incoming-integrations_description": "Toestemming om de inkomende integraties van de server te beheren", "manage-integrations": "Beheer Integraties", - "manage-integrations_description": "Toestemming voor het beheren van de serverintegraties", + "manage-integrations_description": "Toestemming om de serverintegraties te beheren", "manage-livechat-agents": "Beheer omnichannel-agenten", "manage-livechat-departments": "Beheer omnichannel-afdelingen", "manage-livechat-managers": "Beheer omnichannel-managers", @@ -2044,96 +2545,126 @@ "manage-outgoing-integrations": "Uitgaande integraties beheren", "manage-outgoing-integrations_description": "Toestemming om de uitgaande integraties van de server te beheren", "manage-own-incoming-integrations": "Beheer eigen inkomende integraties", - "manage-own-incoming-integrations_description": "Toestemming om gebruikers in staat te stellen hun eigen inkomende integratie of webhook aan te maken of te bewerken", + "manage-own-incoming-integrations_description": "Toestemming om gebruikers in staat te stellen hun eigen inkomende integratie of webhooks aan te maken of te bewerken", "manage-own-integrations": "Beheer eigen integraties", - "manage-own-integrations_description": "Permissie om gebruikers toe te staan hun eigen integratie of webhooks te maken en te bewerken", + "manage-own-integrations_description": "Toestemming waarmee gebruikers hun eigen integratie of webhooks kunnen maken en bewerken", "manage-own-outgoing-integrations": "Eigen uitgaande integraties beheren", "manage-own-outgoing-integrations_description": "Toestemming waarmee gebruikers hun eigen uitgaande integraties of webhooks kunnen aanmaken of bewerken", + "manage-selected-settings": "Wijzig enkele instellingen", + "manage-selected-settings_description": "Toestemming om instellingen te wijzigen die expliciet zijn verleend om te worden gewijzigd", "manage-sounds": "Beheer geluiden", "manage-sounds_description": "Toestemming om de servergeluiden te beheren", + "manage-user-status": "Beheer de gebruikersstatus", + "manage-user-status_description": "Toestemming om aangepaste gebruikersstatussen van de server te beheren", "Manager_added": "Manager toegevoegd", "Manager_removed": "Manager verwijderd", - "Managing_assets": "Het beheer van activa", - "Managing_integrations": "Het beheer van integraties", - "Manufacturing": "Manufacturing", - "MapView_Enabled": "Schakel Mapview in", - "MapView_Enabled_Description": "Als u kaartweergave inschakelt, wordt links van het chat-invoerveld een knop voor het delen van locaties weergegeven.", - "MapView_GMapsAPIKey": "Google Static Maps API Key", - "MapView_GMapsAPIKey_Description": "Dit kan gratis worden verkregen via de Google Developers Console.", + "Managers": "Managers", + "Managing_assets": "Branding beheren", + "Managing_integrations": "Integraties beheren", + "Manual_Selection": "Handmatige selectie", + "Manufacturing": "Productie", + "MapView_Enabled": "Schakel kaartweergave in", + "MapView_Enabled_Description": "Als u kaartweergave inschakelt, wordt links van het chatinvoerveld een knop voor het delen van locaties weergegeven.", + "MapView_GMapsAPIKey": "Google Static Maps API-sleutel", + "MapView_GMapsAPIKey_Description": "Dit is gratis verkrijgbaar via de Google Developers Console.", "Mark_all_as_read": "Markeer alle berichten (in alle kanalen) als gelezen", "Mark_as_read": "Markeer als gelezen", "Mark_as_unread": "Markeren als ongelezen", - "Markdown_Headers": "Markdown kopteksten", + "Mark_read": "Markeer gelezen", + "Mark_unread": "Markeer als ongelezen", + "Markdown_Headers": "Markdown-kopteksten toestaan in berichten", "Markdown_Marked_Breaks": "Schakel gemarkeerde pauzes in", "Markdown_Marked_GFM": "Schakel gemarkeerde GFM in", - "Markdown_Marked_Pedantic": "Schakel gemarkeerd pedant in", + "Markdown_Marked_Pedantic": "Schakel Marked Pedantic in", "Markdown_Marked_SmartLists": "Schakel gemarkeerde slimme lijsten in", - "Markdown_Marked_Smartypants": "Schakel gemarkeerde smartypants in", + "Markdown_Marked_Smartypants": "Schakel gemarkeerde Smartypants in", "Markdown_Marked_Tables": "Schakel gemarkeerde tabellen in", "Markdown_Parser": "Markdown Parser", - "Markdown_SupportSchemesForLink": "Markdown steunregelingen voor Link", - "Markdown_SupportSchemesForLink_Description": "Komma's gescheiden lijst met toegestane regelingen", + "Markdown_SupportSchemesForLink": "Markdown-ondersteuningsregelingen voor Link", + "Markdown_SupportSchemesForLink_Description": "Door komma's gescheiden lijst met toegestane schema's", "Marketplace_view_marketplace": "Marketplace bekijken", - "Max_length_is": "Max lengte is%s", + "MAU_value": "MAU __value__", + "Max_length_is": "De maximale lengte is %s", + "Max_number_incoming_livechats_displayed": "Max. aantal items weergegeven in de wachtrij", "Max_number_incoming_livechats_displayed_description": "(Optioneel) Max. aantal items dat wordt weergegeven in de inkomende Omnichannel-wachtrij.", + "Max_number_of_chats_per_agent": "Max. aantal gelijktijdige chats", + "Max_number_of_chats_per_agent_description": "Het max. aantal gelijktijdige chats dat de agenten kunnen bijwonen", "Max_number_of_uses": "Max aantal toepassingen", + "Maximum": "Maximaal", + "Maximum_number_of_guests_reached": "Maximaal aantal gasten bereikt", + "Me": "Ik", "Media": "Media", "Medium": "Medium", "Members": "Leden", "Members_List": "Ledenlijst", - "mention-all": "Noem alles", + "mention-all": "Vermeld All", "mention-all_description": "Toestemming om de @all-vermelding te gebruiken", - "mention-here": "Hier vermelden", + "mention-here": "Vermelding hier", "mention-here_description": "Toestemming om de @here-vermelding te gebruiken", "Mentions": "Vermeldingen", "Mentions_default": "Vermeldingen (standaard)", "Mentions_only": "Alleen vermeldingen", "Merge_Channels": "Kanalen samenvoegen", + "message": "bericht", "Message": "Bericht", - "Message_AllowBadWordsFilter": "Laat bericht slechte woorden filteren", - "Message_AllowDeleting": "Bericht verwijderen toestaan", - "Message_AllowDeleting_BlockDeleteInMinutes": "Block Message verwijderen After (n) Notulen", - "Message_AllowDeleting_BlockDeleteInMinutes_Description": "Voer 0 tot blokkering uit te schakelen.", - "Message_AllowDirectMessagesToYourself": "Sta gebruikers directe berichten toe aan jezelf", - "Message_AllowEditing": "Bericht bewerken toestaan", - "Message_AllowEditing_BlockEditInMinutes": "Blokkeer berichtbewerkingen na (n) minuten", - "Message_AllowEditing_BlockEditInMinutesDescription": "Vul 0 in om blokkeren uit te schakelen.", - "Message_AllowPinning": "Bericht vastzetten toestaan", - "Message_AllowPinning_Description": "Sta berichten vastzetten toe op elk kanaal.", - "Message_AllowSnippeting": "Mogelijkheid om berichten te snappen", - "Message_AllowStarring": "Sta markeren toe", - "Message_AllowUnrecognizedSlashCommand": "Niet-herkende Slash-opdrachten toestaan", + "Message_AllowBadWordsFilter": "Sta filtering van slechte woorden toe", + "Message_AllowConvertLongMessagesToAttachment": "Sta het omzetten van lange berichten in bijlage toe", + "Message_AllowDeleting": "Sta het verwijderen van berichten toe", + "Message_AllowDeleting_BlockDeleteInMinutes": "Verwijderen van berichten na (n) minuten blokkeren", + "Message_AllowDeleting_BlockDeleteInMinutes_Description": "Voer 0 in om blokkeren uit te schakelen.", + "Message_AllowDirectMessagesToYourself": "Sta gebruikers toe directe berichten naar jezelf te sturen", + "Message_AllowEditing": "Sta bericht bewerken toe", + "Message_AllowEditing_BlockEditInMinutes": "Blokkeer berichtbewerking na (n) minuten", + "Message_AllowEditing_BlockEditInMinutesDescription": "Voer 0 in om blokkeren uit te schakelen.", + "Message_AllowPinning": "Sta het vastzetten van berichten toe", + "Message_AllowPinning_Description": "Sta toe dat berichten worden vastgezet aan een van de kanalen.", + "Message_AllowSnippeting": "Sta berichten snippeting toe", + "Message_AllowStarring": "Sta bericht markeren toe", + "Message_AllowUnrecognizedSlashCommand": "Sta niet-herkende slash-commando's toe", + "Message_Already_Sent": "Dit bericht is al verzonden en wordt verwerkt door de server", "Message_AlwaysSearchRegExp": "Altijd zoeken met behulp van RegExp", "Message_AlwaysSearchRegExp_Description": "Wij raden aan om `TRUE` in te stellen als uw taal niet wordt ondersteund bij zoek MongoDB tekst.", "Message_Attachments": "Berichtbijlagen", - "Message_Attachments_GroupAttach": "Knoppen groepsbevestiging", + "Message_Attachments_GroupAttach": "Groepsbijlage-knoppen", "Message_Attachments_GroupAttachDescription": "Dit groepeert de pictogrammen onder een uitvouwbaar menu. Neemt minder schermruimte in beslag.", "Message_Audio": "Audiobericht", - "Message_Audio_bitRate": "Bitsnelheid audiobericht", - "Message_AudioRecorderEnabled": "Audio Recorder Ingeschakeld", - "Message_AudioRecorderEnabled_Description": "Vereist dat 'audio / mp3'-bestanden een geaccepteerd mediatype zijn binnen de instellingen voor' Bestand uploaden '.", - "Message_BadWordsFilterList": "Voeg slechte woorden aan de zwarte lijst", - "Message_BadWordsFilterListDescription": "Voeg Lijst van door komma's gescheiden lijst van slechte woorden te filteren", + "Message_Audio_bitRate": "Bitsnelheid van audioberichten", + "Message_AudioRecorderEnabled": "Audiorecorder ingeschakeld", + "Message_AudioRecorderEnabled_Description": "Vereist dat 'audio/mp3'-bestanden een geaccepteerd mediatype zijn in de 'Bestand uploaden'-instellingen.", + "Message_auditing": "Bericht auditing", + "Message_auditing_log": "Bericht controlelogboek", + "Message_BadWordsFilterList": "Voeg slechte woorden toe aan de zwarte lijst", + "Message_BadWordsFilterListDescription": "Voeg lijst met door komma's gescheiden lijst van slechte woorden om te filteren toe", + "Message_BadWordsWhitelist": "Verwijder woorden van de zwarte lijst", + "Message_BadWordsWhitelistDescription": "Voeg een door komma's gescheiden woordenlijst toe die uit het filter moet worden verwijderd", + "Message_Characther_Limit": "Tekenlimiet", + "message_counter": "__counter__ bericht", "message_counter_plural": "__counter__ berichten", "Message_DateFormat": "Datumnotatie", "Message_DateFormat_Description": "Zie ook: Moment.js", - "Message_deleting_blocked": "Dit bericht kan niet verwijderd worden meer", - "Message_editing": "bericht bewerken", - "Message_ErasureType": "Bericht Erasure Type", + "Message_deleting_blocked": "Dit bericht kan niet meer worden verwijderd", + "Message_editing": "Bericht bewerken", + "Message_ErasureType": "Berichtverwijderingstype", "Message_ErasureType_Delete": "Verwijder alle berichten", - "Message_ErasureType_Description": "Bepaal wat u moet doen met berichten van gebruikers die hun account verwijderen.", + "Message_ErasureType_Description": "Bepaal wat u wilt doen met berichten van gebruikers die hun account verwijderen.", "Message_ErasureType_Keep": "Bewaar berichten en gebruikersnaam", - "Message_ErasureType_Unlink": "Koppelingen tussen gebruiker en berichten verwijderen", + "Message_ErasureType_Unlink": "Verwijder de link tussen gebruiker en berichten", "Message_GlobalSearch": "Globaal zoeken", - "Message_GroupingPeriod": "Groeperen periode (in seconden)", - "Message_GroupingPeriodDescription": "Berichten worden gegroepeerd met het vorige bericht als beide van dezelfde gebruiker zijn.", - "Message_HideType_au": "Verberg \"User Added\" berichten", - "Message_HideType_mute_unmute": "Verberg \"User Muted / Unmuted\" -berichten", + "Message_GroupingPeriod": "Groeperingsperiode (in seconden)", + "Message_GroupingPeriodDescription": "Berichten worden gegroepeerd met het vorige bericht als beide van dezelfde gebruiker zijn en de verstreken tijd minder was dan de geïnformeerde tijd in seconden.", + "Message_has_been_pinned": "Bericht is vastgezet", + "Message_has_been_starred": "Bericht heeft een ster", + "Message_has_been_unpinned": "Bericht is losgemaakt", + "Message_has_been_unstarred": "Bericht heeft geen ster", + "Message_HideType_au": "Verberg \"Door gebruiker toegevoegd\" berichten", + "Message_HideType_mute_unmute": "Verberg \"Gebruiker Muted / Unmuted\" berichten", "Message_HideType_r": "Verberg \"Kamernaam veranderd\" berichten", "Message_HideType_rm": "Verberg \"Bericht verwijderd\" berichten", "Message_HideType_room_archived": "Verberd \"Kamer gearchiveerd\" berichten", "Message_HideType_room_changed_avatar": "Verberg \"Kameravatar gewijzigd\" berichten", "Message_HideType_room_changed_privacy": "Verberg \"Kamertype gewijzigd\" berichten", + "Message_HideType_room_enabled_encryption": "Verberg \"Kamer versleuteling ingeschakeld\" berichten", + "Message_HideType_room_disabled_encryption": "Verberg \"Kamer versleuteling uitgeschakeld\" berichten", "Message_HideType_room_unarchived": "Verberg \"Kamer niet gearchiveerd meer\" berichten", "Message_HideType_ru": "Verberg \"Gebruiker verwijderd\" berichten", "Message_HideType_subscription_role_added": "Verberg \"Kreeg rol\" berichten", @@ -2142,82 +2673,104 @@ "Message_HideType_ul": "Verberg \"Gebruiker vertrokken\" berichten", "Message_HideType_ut": "Verberg \"Gebruiker deelt mee aan gesprek\" berichten", "Message_HideType_wm": "Verberg \"Welkom\" berichten", - "Message_Ignored": "Dit bericht is genegeerd", + "Message_Id": "Bericht-id", + "Message_Ignored": "Dit bericht werd genegeerd", "Message_info": "Bericht info", - "Message_KeepHistory": "Bewaar berichten geschiedenis", - "Message_MaxAll": "Maximale grootte kanaal voor ALL boodschap", - "Message_MaxAllowedSize": "Maximaal toegestane berichtgrootte", - "Message_pinning": "Message pinning", - "Message_QuoteChainLimit": "Maximum aantal gekoppelde offertes", - "Message_Read_Receipt_Enabled": "Toon leesbevestigingen", + "Message_KeepHistory": "Bewaar de bewerkingsgeschiedenis per bericht", + "Message_MaxAll": "Maximale kanaalgrootte voor ALLE berichten", + "Message_MaxAllowedSize": "Maximaal toegestane tekens per bericht", + "Message_pinning": "Bericht vastzetten", + "message_pruned": "bericht gesnoeid", + "Message_QuoteChainLimit": "Maximum aantal geketende citaten", + "Message_Read_Receipt_Enabled": "Leesbevestigingen weergeven", "Message_Read_Receipt_Store_Users": "Gedetailleerde leesbevestigingen", "Message_Read_Receipt_Store_Users_Description": "Toont de leesbevestigingen van elke gebruiker", "Message_removed": "Bericht verwijderd", "Message_sent_by_email": "Bericht verzonden per e-mail", - "Message_ShowDeletedStatus": "Toon Verwijderde Status", - "Message_ShowEditedStatus": "Toon Gewijzigde Status", + "Message_ShowDeletedStatus": "Toon verwijderde status", + "Message_ShowEditedStatus": "Toon gewijzigde status", "Message_ShowFormattingTips": "Toon opmaaktips", - "Message_starring": "bericht in de hoofdrol", - "Message_TimeAndDateFormat": "Tijd en datum formaat", - "Message_TimeAndDateFormat_Description": "Zie ook: Moment.js", + "Message_starring": "Bericht in de hoofdrol", + "Message_Time": "Berichttijd", + "Message_TimeAndDateFormat": "Tijd- en datumnotatie", + "Message_TimeAndDateFormat_Description": "Zie ook: Moment.js", "Message_TimeFormat": "Tijd formaat", "Message_TimeFormat_Description": "Zie ook: Moment.js", "Message_too_long": "Bericht te lang", + "Message_too_long_as_an_attachment_question": "Bericht te lang. Als bijlage verzenden?", + "Message_UserId": "Gebruikers-id", "Message_VideoRecorderEnabled": "Videorecorder ingeschakeld", - "Message_VideoRecorderEnabledDescription": "Vereist dat 'video / webm'-bestanden een geaccepteerd mediatype zijn binnen de instellingen voor' Bestand uploaden '.", - "Message_view_mode_info": "Dit verandert de hoeveelheid ruimte boodschappen nemen op het scherm.", - "messages": "Berichten", + "Message_VideoRecorderEnabledDescription": "Vereist dat 'video/webm'-bestanden een geaccepteerd mediatype zijn in de 'Bestand uploaden'-instellingen.", + "Message_view_mode_info": "Dit verandert de hoeveelheid ruimte de berichten op het scherm nemen.", + "MessageBox_view_mode": "MessageBox-weergavemodus", + "messages": "berichten", "Messages": "Berichten", "messages_pruned": "berichten gesnoeid", - "Messages_that_are_sent_to_the_Incoming_WebHook_will_be_posted_here": "Berichten die worden verstuurd naar de binnenkomende WebHook zullen hier gepost worden.", + "Messages_sent": "Berichten verzonden", + "Messages_that_are_sent_to_the_Incoming_WebHook_will_be_posted_here": "Berichten die naar de inkomende WebHook worden gestuurd, worden hier gepost.", "Meta": "Meta", "Meta_custom": "Aangepaste metatags", - "Meta_fb_app_id": "Facebook App Id", - "Meta_google-site-verification": "Google Site Verification", + "Meta_fb_app_id": "Facebook App ID", + "Meta_google-site-verification": "Google-siteverificatie", "Meta_language": "Taal", "Meta_msvalidate01": "MSValidate.01", "Meta_robots": "Robots", "meteor_status_connected": "Verbonden", - "meteor_status_connecting": "Bezig met verbinden...", - "meteor_status_failed": "Verbinding met de server mislukt", + "meteor_status_connecting": "Verbinden...", + "meteor_status_failed": "Verbinding met de server is mislukt", "meteor_status_offline": "Offline modus.", "meteor_status_reconnect_in": "probeer het over een seconde opnieuw...", "meteor_status_reconnect_in_plural": "probeer het over __count__ seconden opnieuw...", "meteor_status_try_now_offline": "Verbind opnieuw", - "meteor_status_try_now_waiting": "Probeer het nu", + "meteor_status_try_now_waiting": "Probeer nu", "meteor_status_waiting": "Wachten op serververbinding,", "Method": "Methode", - "Min_length_is": "Min lengte is%s", + "Min_length_is": "Min lengte is %s", + "Minimum": "Minimum", "Minimum_balance": "Minimum balans", + "minute": "minuut", "minutes": "minuten", + "Mobex_sms_gateway_address": "Mobex SMS Gateway-adres", + "Mobex_sms_gateway_address_desc": "IP of Host van uw Mobex-service met gespecifieerde poort, bijv. `http://192.168.1.1:1401` of `https://www.example.com:1401`", "Mobex_sms_gateway_from_number": "Van", + "Mobex_sms_gateway_from_number_desc": "Oorspronkelijk adres / telefoonnummer bij het verzenden van een nieuwe sms naar de livechat-client", + "Mobex_sms_gateway_from_numbers_list": "Lijst met nummers om sms-berichten van te verzenden", + "Mobex_sms_gateway_from_numbers_list_desc": "Door komma's gescheiden lijst met nummers om te gebruiken bij het verzenden van gloednieuwe berichten, bijv. 123456789, 123456788, 123456888", "Mobex_sms_gateway_password": "Wachtwoord", + "Mobex_sms_gateway_restful_address": "Mobex SMS REST API-adres", + "Mobex_sms_gateway_restful_address_desc": "IP of Host van uw Mobex REST API, bijv. `http://192.168.1.1:8080` of `https://www.example.com:8080`", "Mobex_sms_gateway_username": "Gebruikersnaam", - "Mobile": "mobiel", + "Mobile": "Mobiel", "Mobile_Notifications_Default_Alert": "Standaardwaarschuwing voor mobiele meldingen", "Monday": "Maandag", + "Mongo_storageEngine": "Mongo Storage Engine", "Mongo_version": "Mongo-versie", "MongoDB_Deprecated": "MongoDB verouderd", "MongoDB_version_s_is_deprecated_please_upgrade_your_installation": "MongoDB-versie %s is verouderd, upgrade uw installatie.", - "Monitor_history_for_changes_on": "Bewaak de geschiedenis voor wijzigingen aan", + "Monitor_added": "Monitor toegevoegd", + "Monitor_history_for_changes_on": "Monitor geschiedenis voor wijzigingen op", + "Monitor_removed": "Monitor verwijderd", + "Monitors": "Monitoren", + "Monthly_Active_Users": "Maandelijks actieve gebruikers", "More": "Meer", "More_channels": "Meer kanalen", - "More_direct_messages": "Meer directe berichten", - "More_groups": "Meer privé-berichten", + "More_direct_messages": "Meer privéberichten", + "More_groups": "Meer privégroepen", "More_unreads": "Meer ongelezen", + "Most_popular_channels_top_5": "Meest populaire kanalen (Top 5)", "Move_beginning_message": "`%s` - Ga naar het begin van het bericht", "Move_end_message": "`%s` - Ga naar het einde van het bericht", "Msgs": "Berichten", "multi": "multi", "multi_line": "meerdere lijnen", "Mute_all_notifications": "Demp alle meldingen", - "Mute_Focused_Conversations": "Gedwongen gesprekken onderdrukken", - "Mute_Group_Mentions": "Dempen @all en @hier vermeldt", - "Mute_someone_in_room": "Maak iemand in de kamer stil", - "Mute_user": "Maak gebruiker stil", + "Mute_Focused_Conversations": "Demp gerichte gesprekken", + "Mute_Group_Mentions": "Mute @all en @hier vermeldingen", + "Mute_someone_in_room": "Demp iemand in de kamer", + "Mute_user": "Gebruiker dempen", "mute-user": "Gebruiker dempen", "mute-user_description": "Toestemming om andere gebruikers in hetzelfde kanaal te dempen", - "Muted": "Mond Snoeren", + "Muted": "Gedempt", "My Data": "Mijn data", "My_Account": "Mijn account", "My_location": "Mijn locatie", @@ -2227,14 +2780,15 @@ "Name_cant_be_empty": "De naam mag niet leeg zijn", "Name_of_agent": "Naam agent", "Name_optional": "Naam (optioneel)", - "Name_Placeholder": "Voer uw naam in ...", - "Navigation_History": "Navigation Geschiedenis", + "Name_Placeholder": "Voer uw naam in...", + "Navigation_History": "Navigationgeschiedenis", "Never": "Nooit", "New": "Nieuw", "New_Application": "Nieuwe app", "New_Business_Hour": "Nieuw zakenuur", "New_Canned_Response": "Nieuwe standaardreactie", "New_chat_in_queue": "Nieuwe chat in wachtrij", + "New_chat_priority": "Prioriteit gewijzigd: __user__ heeft de prioriteit gewijzigd naar __priority__", "New_chat_transfer": "Nieuwe chatoverdracht: __transfer__", "New_Contact": "Nieuw contact", "New_Custom_Field": "Nieuw aangepast veld", @@ -2242,15 +2796,16 @@ "New_discussion": "Nieuwe discussie", "New_discussion_first_message": "Meestal begint een discussie met een vraag, zoals \"Hoe upload ik een foto?\"", "New_discussion_name": "Een betekenisvolle naam voor de discussiezaal", + "New_Email_Inbox": "Nieuwe e-mailpostvak", "New_encryption_password": "Nieuw coderingswachtwoord", "New_integration": "Nieuwe intergratie", - "New_line_message_compose_input": "`%s` - nieuwe regel in bericht opstellen van invoer", + "New_line_message_compose_input": "`%s` - Nieuwe regel in invoer voor het opstellen van berichten", "New_Livechat_offline_message_has_been_sent": "Er is een nieuw offline Livechat-bericht verzonden", "New_logs": "Nieuwe logboeken", "New_Message_Notification": "Nieuwe berichtmelding", "New_messages": "Nieuwe berichten", "New_password": "Nieuw wachtwoord", - "New_Password_Placeholder": "Voer een nieuw wachtwoord in ...", + "New_Password_Placeholder": "Voer een nieuw wachtwoord in...", "New_Priority": "Nieuwe prioriteit", "New_role": "Nieuwe rol", "New_Room_Notification": "Melding nieuwe kamer", @@ -2259,14 +2814,14 @@ "New_Unit": "Nieuwe eenheid", "New_users": "Nieuwe gebruikers", "New_version_available_(s)": "Nieuwe versie beschikbaar (%s)", - "New_videocall_request": "Nieuwe video-oproepaanvraag", + "New_videocall_request": "Nieuw videogesprekverzoek", "New_visitor_navigation": "Nieuwe navigatie: __history__", "Newer_than": "Nieuwer dan", - "Newer_than_may_not_exceed_Older_than": "\"Nieuwer dan\" mag \"Ouder dan\" niet overschrijden", + "Newer_than_may_not_exceed_Older_than": "'Nieuwer dan' mag niet groter zijn dan 'Ouder dan'", "Nickname": "Bijnaam", "Nickname_Placeholder": "Vul je bijnaam in...", "No": "Nee", - "No_available_agents_to_transfer": "Geen beschikbare agenten om over te zetten", + "No_available_agents_to_transfer": "Geen beschikbare agenten om over te dragen", "No_Canned_Responses": "Geen standaardreacties", "No_channel_with_name_%s_was_found": "Geen kanaal met de naam \"%s\" gevonden!", "No_channels_yet": "U maakt nog geen deel uit van een kanaal.", @@ -2275,74 +2830,90 @@ "No_Discussions_found": "Geen discussies gevonden", "No_discussions_yet": "Nog geen discussies", "No_emojis_found": "Geen emoji's gevonden", - "No_Encryption": "geen codering", + "No_Encryption": "Geen versleuteling", "No_files_left_to_download": "Geen bestanden meer om te downloaden", "No_group_with_name_%s_was_found": "Geen privégroep met de naam \"%s\" gevonden", - "No_groups_yet": "U heeft nog geen privé-groepen.", + "No_groups_yet": "Je hebt nog geen privégroepen.", "No_integration_found": "Geen integratie gevonden door de opgegeven ID.", "No_Limit": "Geen limiet", - "No_livechats": "Je hebt geen livechats.", + "No_livechats": "Je hebt geen livechats", "No_mentions_found": "Geen vermeldingen gevonden", + "No_messages_found_to_prune": "Geen berichten gevonden om te verwijderen", "No_messages_yet": "Nog geen berichten", - "No_pages_yet_Try_hitting_Reload_Pages_button": "Nog geen pagina's. Probeer de knop Pagina's opnieuw laden te raken.", + "No_pages_yet_Try_hitting_Reload_Pages_button": "Nog geen pagina's. Druk op de knop \"Pagina's opnieuw laden\".", "No_pinned_messages": "Geen vastgezette berichten", + "No_previous_chat_found": "Geen vorige chat gevonden", "No_results_found": "Geen resultaten gevonden", "No_results_found_for": "Geen resultaten gevonden voor:", "No_snippet_messages": "Geen fragment", - "No_starred_messages": "Geen gemarkeerde berichten", - "No_such_command": "Geen dergelijk commando: `/ __command__`", + "No_starred_messages": "Geen berichten met ster", + "No_such_command": "Geen dergelijk commando: `/__command__`", "No_Threads": "Geen discussies gevonden", "No_user_with_username_%s_was_found": "Geen gebruiker met de naam \"%s\" gevonden", "Nobody_available": "Niemand beschikbaar", "Node_version": "Node-versie", "None": "Geen", - "Nonprofit": "Non-profit", + "Nonprofit": "Non-profitorganisatie", "Normal": "Normaal", "Not_authorized": "Geen bevoegdheid", "Not_Available": "Niet beschikbaar", + "Not_enough_data": "Niet genoeg data", "Not_following": "Niet gevolgd", + "Not_Following": "Volgt niet", "Not_found_or_not_allowed": "Niet gevonden of niet toegestaan", "Not_Imported_Messages_Title": "De volgende berichten zijn niet succesvol geïmporteerd", "Not_in_channel": "Niet in kanaal", + "Not_likely": "Onwaarschijnlijk", + "Not_started": "Niet begonnen", "Not_verified": "Niet geverifieerd", - "Nothing": "Niks", + "Nothing": "Niets", "Nothing_found": "Niets gevonden", - "Notification_Desktop_Default_For": "Laat bureaubladmeldingen zien voor", + "Notification_Desktop_Default_For": "Bureaubladmeldingen weergeven voor", "Notification_Desktop_Audio_Default_For": "Speel desktop audiomeldingen voor", "Notification_Mobile_Default_For": "Mobiele pushmeldingen voor", "Notification_RequireInteraction": "Interactie vereisen om bureaubladmelding te sluiten", + "Notification_RequireInteraction_Description": "Werkt alleen met Chrome-browserversies > 50. Gebruikt de parameter requireInteraction om de bureaubladmelding voor onbepaalde tijd weer te geven totdat de gebruiker er interactie mee heeft.", "Notifications": "Meldingen", - "Notifications_Max_Room_Members": "Max Room-leden voordat u alle berichtmeldingen uitschakelt", - "Notifications_Max_Room_Members_Description": "Max aantal leden in de ruimte wanneer meldingen voor alle berichten worden uitgeschakeld. Gebruikers kunnen nog steeds per kamerinstelling wijzigen om alle meldingen op individuele basis te ontvangen. (0 om uit te schakelen)", - "Notifications_Muted_Description": "Als u ervoor kiest alles te dempen, wordt de kamer niet gemarkeerd in de lijst wanneer er nieuwe berichten zijn, behalve vermeldingen. Muting-meldingen zullen de instellingen voor meldingen overschrijven.", + "Notifications_Max_Room_Members": "Max aantaal kamerleden voordat alle berichtmeldingen worden uitgeschakeld", + "Notifications_Max_Room_Members_Description": "Max aantal leden in de ruimte wanneer meldingen voor alle berichten worden uitgeschakeld. Gebruikers kunnen nog steeds de instelling per kamer wijzigen om alle meldingen op individuele basis te ontvangen. (0 om uit te schakelen)", + "Notifications_Muted_Description": "Als u ervoor kiest om alles te dempen, wordt de kamer niet gemarkeerd in de lijst als er nieuwe berichten zijn, behalve bij vermeldingen. Als u meldingen dempt, worden de instellingen voor meldingen overschreven.", "Notifications_Preferences": "Meldingsvoorkeuren", - "Notifications_Sound_Volume": "Geluidsniveau meldingen", - "Notify_active_in_this_room": "Breng actieve gebruikers op de hoogte in deze kamer", - "Notify_all_in_this_room": "Meld aan iederen in deze kamer", + "Notifications_Sound_Volume": "Meldingen geluidsvolume", + "Notify_active_in_this_room": "Breng actieve gebruikers in deze kamer op de hoogte", + "Notify_all_in_this_room": "Breng iedereen in deze kamer op de hoogte", + "NPS_survey_enabled": "Schakel de NPS-enquête in", + "NPS_survey_enabled_Description": "Sta NPS-enquête toe voor alle gebruikers. Beheerders ontvangen 2 maanden voor de lancering van de enquête een melding", + "NPS_survey_is_scheduled_to-run-at__date__for_all_users": "De NPS-enquête wordt voor alle gebruikers op __date__ uitgevoerd. Het is mogelijk om de enquête uit te schakelen op 'Admin > Algemeen > NPS'.", "Num_Agents": "# Agenten", + "Number_in_seconds": "Getal in seconden", + "Number_of_events": "Aantal evenementen", "Number_of_federated_servers": "Aantal gefedereerde servers", + "Number_of_federated_users": "Aantal gefedereerde gebruikers", "Number_of_messages": "Aantal berichten", + "Number_of_most_recent_chats_estimate_wait_time": "Aantal recente chats om de geschatte wachttijd te berekenen", + "Number_of_most_recent_chats_estimate_wait_time_description": "Dit aantal definieert het aantal laatst bediende kamers dat zal worden gebruikt om wachttijden in de wachtrij te berekenen.", "Number_of_users_autocomplete_suggestions": "Aantal autoaanvullingsvoorstellen van gebruikers", "OAuth Apps": "OAuth-apps", - "OAuth_Application": "OAuth Application", - "OAuth_Applications": "OAuth Applications", + "OAuth_Application": "OAuth-applicatie", + "OAuth_Applications": "OAuth-applicaties", "Objects": "Voorwerpen", "Off": "Uit", - "Off_the_record_conversation": "Off-the-opname Conversation", + "Off_the_record_conversation": "Off-the-record gesprek", "Off_the_record_conversation_is_not_available_for_your_browser_or_device": "Off-the-opname gesprek is niet beschikbaar voor uw browser of apparaat.", "Office_Hours": "Kantoortijden", "Office_hours_enabled": "Kantooruren ingeschakeld", "Office_hours_updated": "Kantooruren bijgewerkt", "Offline": "Offline", - "Offline_DM_Email": "Je hebt direct zijn messaged door __user__", + "Offline_DM_Email": "Onderwerp e-mail privébericht", "Offline_Email_Subject_Description": "U kunt de volgende tijdelijke aanduidingen gebruiken:[Site_Name], [Site_URL], [User] en [Room] voor respectievelijk de app-naam, URL, gebruikersnaam en roomname.", "Offline_form": "Offline formulier", "Offline_form_unavailable_message": "Offline formulier niet beschikbaar bericht", "Offline_Link_Message": "GA NAAR BERICHT", - "Offline_Mention_All_Email": "Vermeld alle e-mailonderwerp", - "Offline_Mention_Email": "Je bent genoemd door __user__ in #__room__", + "Offline_Mention_All_Email": "E-mailonderwerp van @all vermelding", + "Offline_Mention_Email": "E-mailonderwerp van vermelding", "Offline_message": "Offline bericht", "Offline_Message": "Offline bericht", + "Offline_Message_Use_DeepLink": "Gebruik Deep Link URL-indeling", "Offline_messages": "Offline berichten", "Offline_success_message": "Offline succesbericht", "Offline_unavailable": "Offline niet beschikbaar", @@ -2352,138 +2923,178 @@ "Omnichannel_Directory": "Omnichannel-directory", "Omnichannel_appearance": "Omnichannel-uiterlijk", "Omnichannel_Contact_Center": "Omnichannel-contactcentrum", + "Omnichannel_contact_manager_routing": "Wijs nieuwe gesprekken toe aan de contactmanager", + "Omnichannel_contact_manager_routing_Description": "Deze instelling wijst een chat toe aan de toegewezen Contact Manager, zolang de Contact Manager online is wanneer de chat start", + "Omnichannel_External_Frame": "Externe frame", "Omnichannel_External_Frame_Enabled": "Externe frame ingeschakeld", + "Omnichannel_External_Frame_Encryption_JWK": "Versleutelingssleuten (JWK)", + "Omnichannel_External_Frame_Encryption_JWK_Description": "Indien verstrekt, versleutelt het het token van de gebruiker met de meegeleverde sleutel en moet het externe systeem de gegevens ontsleutelen om toegang te krijgen tot het token", + "Omnichannel_External_Frame_URL": "URL van externe frame", "On": "Aan", "online": "online", "Online": "Online", "Only_authorized_users_can_write_new_messages": "Alleen geautoriseerde gebruikers kunnen nieuwe berichten schrijven", - "Only_from_users": "Alleen inhoud van deze gebruikers snoeien (leeg laten om de inhoud van iedereen te snoeien)", - "Only_On_Desktop": "Desktop-modus (verzendt alleen met enter op desktop)", - "Only_you_can_see_this_message": "Alleen jij kunt dit bericht lezen", + "Only_from_users": "Snoei alleen inhoud van deze gebruikers (laat leeg om de inhoud van iedereen te snoeien)", + "Only_Members_Selected_Department_Can_View_Channel": "Alleen leden van de geselecteerde afdeling kunnen chats op dit kanaal bekijken", + "Only_On_Desktop": "Bureaubladmodus (wordt alleen verzonden met enter op desktop)", + "Only_works_with_chrome_version_greater_50": "Werkt alleen met Chrome-browserversies > 50", + "Only_you_can_see_this_message": "Alleen jij kunt dit bericht zien", + "Only_invited_users_can_acess_this_channel": "Alleen uitgenodigde gebruikers hebben toegang tot dit kanaal", "Oops_page_not_found": "Oeps, pagina niet gevonden", "Oops!": "Oeps", "Open": "Open", "Open_channel_user_search": "`%s` - Open kanaal- / gebruikerszoekopdracht", - "Open_conversations": "Open conversaties", + "Open_conversations": "Open gesprekken", + "Open_Days": "Open dagen", "Open_days_of_the_week": "Open dagen van de week", - "Open_Livechats": "Open Livechats", + "Open_Livechats": "Chats in uitvoering", + "Open_thread": "Open draad", "Open_your_authentication_app_and_enter_the_code": "Open uw authenticatie-app en voer de code in. U kunt ook een van uw back-upcodes gebruiken.", "Opened": "Geopend", "Opened_in_a_new_window": "Geopend in een nieuw venster.", - "Opens_a_channel_group_or_direct_message": "Opent een kanaal, groep of direct bericht", + "Opens_a_channel_group_or_direct_message": "Opent een kanaal, groep of privébericht", "optional": "optioneel", - "Options": "opties", + "Options": "Opties", "or": "of", "Or_talk_as_anonymous": "Of praat als anoniem", - "Order": "Bestelling", + "Order": "Volgorde", "Organization_Email": "Organisatie e-mail", "Organization_Info": "Organisatie info", "Organization_Name": "Organisatie naam", "Organization_Type": "Organisatie type", - "Original": "origineel", + "Original": "Origineel", "OS_Arch": "OS Arch", - "OS_Cpus": "OS CPU Count", + "OS_Cpus": "OS CPU-aantal", "OS_Freemem": "OS beschikbare geheugen", - "OS_Loadavg": "OS Load Gemiddeld", - "OS_Platform": "OS Platform", - "OS_Release": "OS Versie", + "OS_Loadavg": "Gemiddelde OS-belasting", + "OS_Platform": "OS-platform", + "OS_Release": "OS-versie", "OS_Totalmem": "OS Totaal geheugen", - "OS_Type": "OS Type", - "OS_Uptime": "OS Uptime", - "Other": "Ander", + "OS_Type": "Type besturingssysteem", + "OS_Uptime": "Uptime van besturingssysteem", + "Other": "Andere", "others": "anderen", + "Others": "Anderen", "OTR": "OTR", - "OTR_is_only_available_when_both_users_are_online": "OTR is alleen beschikbaar als zowel gebruikers online", + "OTR_is_only_available_when_both_users_are_online": "OTR is alleen beschikbaar als beide gebruikers online zijn", "Outgoing_WebHook": "Uitgaande WebHook", - "Outgoing_WebHook_Description": "Haal realtime gegevens uit Rocket.Chat.", - "Override_URL_to_which_files_are_uploaded_This_url_also_used_for_downloads_unless_a_CDN_is_given": "Override URL waarop bestanden worden geüpload. Deze url ook gebruikt voor downloads, tenzij een CDN wordt gegeven", + "Outgoing_WebHook_Description": "Haal uit Rocket.Chat in realtime.", + "Output_format": "Uitvoerformaat", + "Override_URL_to_which_files_are_uploaded_This_url_also_used_for_downloads_unless_a_CDN_is_given": "Overschrijf de URL waarnaar bestanden worden geüpload. Deze url wordt ook gebruikt voor downloads, tenzij een CDN is opgegeven", "Page_title": "Pagina titel", - "Page_URL": "pagina URL", + "Page_URL": "Pagina URL", + "Parent_channel_doesnt_exist": "Kanaal bestaat niet.", "Password": "Wachtwoord", - "Password_Change_Disabled": "Uw Rocket.Chat beheerder heeft het veranderen van wachtwoorden uitgeschakeld", + "Password_Change_Disabled": "Uw Rocket.Chat beheerder heeft het wijzigen van wachtwoorden uitgeschakeld", "Password_Changed_Description": "U kunt de volgende variabels gebruiken: [password] voor het tijdelijke wachtwoord.[name], [fname], [lname] voor respectievelijk 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 applicatienaam en URL.", "Password_Changed_Email_Subject": "[Site_Name] - Wachtwoord gewijzigd", + "Password_changed_section": "Wachtwoord veranderd", "Password_changed_successfully": "Wachtwoord succesvol gewijzigd", "Password_Policy": "Wachtwoordbeleid", "Password_to_access": "Wachtwoord om toegang te krijgen", - "Past_Chats": "Past Chats", + "Passwords_do_not_match": "Wachtwoorden komen niet overeen", + "Past_Chats": "Eerdere chats", + "Paste_here": "Plak hier...", "Paste": "Plakken", - "Payload": "payload", + "Paste_error": "Fout bij lezen van klembord", + "Payload": "Payload", + "Peer_Password": "Peer-wachtwoord", "People": "Mensen", - "Permalink": "permalink", + "Permalink": "Permalink", "Permissions": "Machtigingen", "Personal_Access_Tokens": "Persoonlijke toegangstokens", "Phone": "Telefoon", "Phone_already_exists": "Telefoon bestaat al", "Phone_number": "Telefoonnummer", - "Pin_Message": "Zet bericht vast", - "pin-message": "Pinbericht", - "pin-message_description": "Toestemming om een bericht in een kanaal vast te zetten", + "Pin": "Pin", + "Pin_Message": "Pin bericht", + "pin-message": "Pin bericht", + "pin-message_description": "Toestemming om een bericht in een kanaal vast te pinnen", "Pinned_a_message": "Heeft een bericht vastgezet:", "Pinned_Messages": "Vastgezette berichten", + "pinning-not-allowed": "Vastzetten is niet toegestaan", "PiwikAdditionalTrackers": "Extra Piwik-sites", "PiwikAdditionalTrackers_Description": "Voer additionele Piwik-website-URL's en SiteID's in de volgende indeling in, als u dezelfde gegevens op verschillende websites wilt bijhouden: [{ \"trackerURL\" : \"https://my.piwik.domain2/\", \"siteId\" : 42 }, { \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 }]", "PiwikAnalytics_cookieDomain": "Alle subdomeinen", "PiwikAnalytics_cookieDomain_Description": "Volg bezoekers over alle subdomeinen", - "PiwikAnalytics_domains": "Verberg Uitgaande Links", + "PiwikAnalytics_domains": "Verberg uitgaande links", "PiwikAnalytics_domains_Description": "Verberg in het rapport 'Outlinks' klikken naar bekende alias-URL's. Voer één domein per regel in en gebruik geen scheidingstekens.", - "PiwikAnalytics_prependDomain": "Domein vooraf voorbereiden", - "PiwikAnalytics_prependDomain_Description": "Voorzie het sitedomein van de paginatitel bij het volgen", - "PiwikAnalytics_siteId_Description": "De site id te gebruiken voor het identificeren van deze site. Voorbeeld: 17", - "PiwikAnalytics_url_Description": "De url waar de Piwik woont, moet u de trialing slash bevatten. Voorbeeld: //piwik.rocket.chat/", - "Placeholder_for_email_or_username_login_field": "Aanduiding voor e-mail of gebruikersnaam login veld", - "Placeholder_for_password_login_field": "Tijdelijke aanduiding voor het wachtwoord veld", - "Please_add_a_comment": "Voeg dan een reactie", - "Please_add_a_comment_to_close_the_room": "Gelieve, voeg een opmerking naar de kamer te sluiten", - "Please_answer_survey": "Heeft u een moment om een korte enquête over deze chat te beantwoorden", - "Please_enter_usernames": "Voer gebruikersnaam in ...", - "please_enter_valid_domain": "Geef een geldig domein", - "Please_enter_value_for_url": "Vul s.v.p. een URL voor uw Avatar in.", + "PiwikAnalytics_prependDomain": "Voor domein vooraf toe", + "PiwikAnalytics_prependDomain_Description": "Zet het sitedomein voor de paginatitel bij het tracken", + "PiwikAnalytics_siteId_Description": "De site-ID die moet worden gebruikt om deze site te identificeren. Voorbeeld: 17", + "PiwikAnalytics_url_Description": "De url waar de Piwik zich bevindt, vergeet niet de slash aan het einde op te nemen. Voorbeeld: //piwik.rocket.chat/", + "Placeholder_for_email_or_username_login_field": "Tijdelijke aanduiding voor inlogveld voor e-mail of gebruikersnaam", + "Placeholder_for_password_login_confirm_field": "Bevestigingsplaceholder voor inlogveld wachtwoord", + "Placeholder_for_password_login_field": "Tijdelijke aanduiding voor inlogveld voor wachtwoord", + "Please_add_a_comment": "Voeg een opmerking toe", + "Please_add_a_comment_to_close_the_room": "Voeg een opmerking toe om de kamer te sluiten", + "Please_answer_survey": "Neem even de tijd om een korte enquête over deze chat te beantwoorden", + "Please_enter_usernames": "Voer gebruikersnamen in...", + "please_enter_valid_domain": "Voer een geldig domein in", + "Please_enter_value_for_url": "Voer een waarde in voor de url van je avatar.", "Please_enter_your_new_password_below": "Vul hieronder uw nieuwe wachtwoord in:", - "Please_enter_your_password": "Vul alstublieft uw wachtwoord opnieuw in", - "Please_fill_a_label": "Vul een label", + "Please_enter_your_password": "Voer uw wachtwoord in", + "Please_fill_a_label": "Vul een label in", "Please_fill_a_name": "Vul een naam in", "Please_fill_a_token_name": "Vul een geldige tokennaam in", "Please_fill_a_username": "Vul een gebruikersnaam in", - "Please_fill_all_the_information": "Vul alstublieft alle informatie in", + "Please_fill_all_the_information": "Vul alstublieft alle gegevens in", + "Please_fill_an_email": "Gelive een e-mail in te vullen", "Please_fill_name_and_email": "Vul naam en e-mailadres in", "Please_go_to_the_Administration_page_then_Livechat_Facebook": "Ga naar de beheerpagina en vervolgens naar Omnichannel > Facebook", "Please_select_an_user": "Selecteer een gebruiker", "Please_select_enabled_yes_or_no": "Selecteer een optie voor Ingeschakeld", - "Please_wait": "Wacht alstublieft", + "Please_select_visibility": "Selecteer een zichtbaarheid", + "Please_wait": "Even geduld", "Please_wait_activation": "Even geduld, dit kan enige tijd duren.", - "Please_wait_while_OTR_is_being_established": "Een moment geduld aub OTR tot stand wordt gebracht", - "Please_wait_while_your_account_is_being_deleted": "Een moment geduld aub uw account wordt verwijderd ...", - "Please_wait_while_your_profile_is_being_saved": "Een ogenblik geduld terwijl uw profiel wordt opgeslagen ...", + "Please_wait_while_OTR_is_being_established": "Even geduld terwijl OTR tot stand wordt gebracht", + "Please_wait_while_your_account_is_being_deleted": "Een ogenblik geduld, uw account wordt verwijderd...", + "Please_wait_while_your_profile_is_being_saved": "Een ogenblik geduld terwijl uw profiel wordt opgeslagen...", + "Pool": "Pool", "Port": "Poort", - "Post_as": "Stuur als", + "Post_as": "Posten als", "Post_to": "Posten in", "Post_to_Channel": "Posten in kanaal", - "Post_to_s_as_s": "Posten in %s als %s", - "post-readonly": "Plaats ReadOnly", - "post-readonly_description": "Toestemming om een bericht op een alleen-lezen kanaal te plaatsen", + "Post_to_s_as_s": "Post naar %s als %s", + "post-readonly": "Post alleen-lezen", + "post-readonly_description": "Toestemming om een bericht in een alleen-lezen kanaal te plaatsen", "Preferences": "Voorkeuren", "Preferences_saved": "Voorkeuren opgeslagen", + "Preparing_data_for_import_process": "Gegevens voorbereiden voor importproces", + "Preparing_list_of_channels": "Lijst met kanalen voorbereiden", + "Preparing_list_of_messages": "Lijst met berichten voorbereiden", + "Preparing_list_of_users": "Lijst met gebruikers voorbereiden", + "Presence": "Aanwezigheid", "preview-c-room": "Voorbeeld van openbaar kanaal", "preview-c-room_description": "Toestemming om de inhoud van een openbaar kanaal te bekijken voordat je lid wordt", "Previous_month": "Vorige maand", "Previous_week": "Vorige week", + "Priorities": "Prioriteiten", + "Priority": "Prioriteit", + "Priority_removed": "Prioriteit verwijderd", "Privacy": "Privacy", "Privacy_Policy": "Privacybeleid", "Private": "Privé", - "Private_Channel": "Privé kanaal", - "Private_Group": "Privé-groep", - "Private_Groups": "Privé groepen", - "Private_Groups_list": "Lijst van privé-groepen", + "Private_Channel": "Privékanaal", + "Private_Channels": "Privékanalen", + "Private_Chats": "Privéchats", + "Private_Group": "Privégroep", + "Private_Groups": "Privégroepen", + "Private_Groups_list": "Lijst met privégroepen", "Private_Team": "Privé team", - "Productivity": "produktiviteit", + "Productivity": "Productiviteit", "Profile": "Profiel", "Profile_details": "Profiel details", "Profile_picture": "Profielfoto", "Profile_saved_successfully": "Profiel succesvol opgeslagen", + "Prometheus": "Prometheus", + "Prometheus_API_User_Agent": "API: Track User Agent", + "Prometheus_Garbage_Collector": "Collect NodeJS GC", + "Prometheus_Garbage_Collector_Alert": "Opnieuw opstarten vereist om te deactiveren", + "Prometheus_Reset_Interval": "Reset-interval (ms)", "Protocol": "Protocol", "Prune": "Snoeien", - "Prune_finished": "Prune is klaar", + "Prune_finished": "Snoeien is gedaan", "Prune_Messages": "Berichten snoeien", "Prune_Modal": "Weet je zeker dat je deze berichten wilt snoeien? Gesnapte berichten kunnen niet worden hersteld.", "Prune_Warning_after": "Hiermee worden alle %s in %s na %s verwijderd.", @@ -2491,178 +3102,206 @@ "Prune_Warning_before": "Hiermee worden alle %s in %s vóór %s verwijderd.", "Prune_Warning_between": "Hiermee worden alle %s in %s tussen %s en %s verwijderd.", "Pruning_files": "Bestanden snoeien...", - "Pruning_messages": "Berichten snoeien ...", + "Pruning_messages": "Berichten snoeien...", "Public": "Openbaar", "Public_Channel": "Openbaar kanaal", - "Public_Community": "Openbare gemeenschap", - "Public_Relations": "Publieke relaties", + "Public_Channels": "Openbare kanalen", + "Public_Community": "Openbare community", "Public_URL": "Openbare URL", "Purchase_for_free": "GRATIS aanschaffen", - "Purchase_for_price": "Aankopen voor $%s", + "Purchase_for_price": "Koop voor $%s", + "Purchased": "Aangekocht", "Push": "Push", "Push_Notifications": "Push-meldingen", "Push_apn_cert": "APN Certificaat", - "Push_apn_dev_cert": "APN Ontwikkelaars Certificaat", - "Push_apn_dev_key": "APN Ontwikkelaars Sleutel", - "Push_apn_dev_passphrase": "APN Ontwikkelaars Wachtwoord", - "Push_apn_key": "APN Key", - "Push_apn_passphrase": "APN Wachtwoord", - "Push_enable": "Enable", + "Push_apn_dev_cert": "APN-ontwikkelaarscertificaat", + "Push_apn_dev_key": "APN-ontwikkelaarsleutel", + "Push_apn_dev_passphrase": "APN-ontwikkelaars wachtwoordzin", + "Push_apn_key": "APN-sleutel", + "Push_apn_passphrase": "APN-wachtwoordzin", + "Push_enable": "Inschakelen", "Push_enable_gateway": "Gateway inschakelen", "Push_enable_gateway_Description": "Je moet accepteren om uw server te registreren (Installatiewizard > Organisatie info > Server registreren) en onze privacyvoorwaarden (Installatiewizard > Cloud-informatie > Overeenkomst voor privacyvoorwaarden voor cloudservice) om deze instelling in te schakelen en onze gateway te gebruiken", "Push_gateway": "Gateway", - "Push_gcm_api_key": "GCM API Sleutel", + "Push_gateway_description": "Meerdere lijnen kunnen worden gebruikt om meerdere gateways te specificeren", + "Push_gcm_api_key": "GCM API-sleutel", "Push_gcm_project_number": "GCM projectnummer", "Push_production": "Productie", "Push_request_content_from_server": "Haal bij ontvangst de volledige berichtinhoud van de server op", - "Push_Setting_Requires_Restart_Alert": "Voor het wijzigen van deze waarde moet Rocket.Chat opnieuw worden gestart.", - "Push_show_message": "Toon bericht notificatie", + "Push_Setting_Requires_Restart_Alert": "Als u deze waarde wilt wijzigen, moet Rocket.Chat opnieuw worden opgestart.", + "Push_show_message": "Toon bericht in melding", "Push_show_username_room": "Toon kanaal/groep/gebruikersnaam in de melding", "Push_test_push": "Test", - "Query": "Query/vraag", - "Query_description": "Additional conditions for determining which users to send the e-mail to. Unsubscribed users are automatically removed from the query. It must be a valid JSON. Example: \"{\"createdAt\":{\"$gt\":{\"$date\": \"2015-01-01T00:00:00.000Z\"}}}\"", + "Query": "Vraag", + "Query_description": "Aanvullende voorwaarden om te bepalen naar welke gebruikers de e-mail moet worden verzonden. Niet-geabonneerde gebruikers worden automatisch uit de zoekopdracht verwijderd. Het moet een geldige JSON zijn. Voorbeeld: \"{\"createdAt\":{\"$gt\":{\"$date\": \"2015-01-01T00:00:00.000Z\"}}}\"", + "Query_is_not_valid_JSON": "Query is geen geldige JSON", "Queue": "Wachtrij", "quote": "citaat", "Quote": "Citaat", - "Random": "toevallig", + "Random": "Willekeurig", "RD Station": "RD Station", "RDStation_Token": "RD Station-token", "React_when_read_only": "Reageren toestaan", - "React_when_read_only_changed_successfully": "Reageren toestaan wanneer lezen alleen succesvol is gewijzigd", - "Reacted_with": "omgezet met", - "Reactions": "reacties", - "Read_by": "Lezen door", + "React_when_read_only_changed_successfully": "Laat reageren wanneer alleen lezen succesvol is gewijzigd", + "Reacted_with": "Reageerde met", + "Reactions": "Reacties", + "Read_by": "Gelezen door", "Read_only": "Alleen lezen", "Read_only_changed_successfully": "Alleen lezen is succesvol gewijzigd", - "Read_only_channel": "Alleen kanaal lezen", - "Read_only_group": "Read Only Group", + "Read_only_channel": "Alleen lezen kanaal", + "Read_only_group": "Alleen lezen groep", "Real_Estate": "Onroerend goed", "Real_Time_Monitoring": "Real-time monitoring", - "RealName_Change_Disabled": "Uw Rocket.Chat-beheerder heeft het wijzigen van namen uitgeschakeld", + "RealName_Change_Disabled": "Je Rocket.Chat-beheerder heeft het wijzigen van namen uitgeschakeld", "Reason_To_Join": "Reden om mee te doen", - "Receive_alerts": "Waarschuwingen ontvangen", - "Receive_Group_Mentions": "Ontvang @all en @hier vermeldt", + "Receive_alerts": "Ontvang waarschuwingen", + "Receive_Group_Mentions": "Ontvang @all en @hier vermeldingen", "Recent_Import_History": "Recente importgeschiedenis", "Record": "Opnemen", - "Redirect_URI": "Redirect URI", + "Redirect_URI": "Omleidings-URI", "Refresh": "Vernieuwen", - "Refresh_keys": "Vernieuwen sleutels", - "Refresh_oauth_services": "OAuth-services vernieuwen", - "Refresh_your_page_after_install_to_enable_screen_sharing": "Ververs uw pagina na installeren om het delen van het scherm mogelijk te maken", - "Regenerate_codes": "Regenereer codes", + "Refresh_keys": "Vernieuw sleutels", + "Refresh_oauth_services": "Vernieuw OAuth-services", + "Refresh_your_page_after_install_to_enable_screen_sharing": "Vernieuw uw pagina na de installatie om het delen van scherm in te schakelen", + "Regenerate_codes": "Genereer codes opnieuw", + "Regexp_validation": "Validatie door reguliere expressie", "Register": "Maak een nieuw account aan", - "Register_Server": "Registreer de server", - "Register_Server_Info": "Gebruik de voorgeconfigureerde gateways en proxies van Rocket.Chat Technologies Corp.", - "Register_Server_Opt_In": "Nieuwsbrief, aanbiedingen en productupdates", + "Register_Server": "Registreer server", + "Register_Server_Info": "Gebruik de voorgeconfigureerde gateways en proxy's van Rocket.Chat Technologies Corp.", + "Register_Server_Opt_In": "Product- en beveiligingsupdates", "Register_Server_Registered": "Registreer om toegang te krijgen", "Register_Server_Registered_I_Agree": "Ik ga akkoord met de", "Register_Server_Registered_Livechat": "Livechat omnichannel-proxy", "Register_Server_Registered_Marketplace": "Apps Marketplace", "Register_Server_Registered_OAuth": "OAuth-proxy voor sociaal netwerk", - "Register_Server_Registered_Push_Notifications": "Mobiele pushmeldingen-gateway", + "Register_Server_Registered_Push_Notifications": "Gateway voor mobiele pushmeldingen", "Register_Server_Standalone": "Blijf stand-alone, dat moet je doen", "Register_Server_Standalone_Own_Certificates": "Hercompileer de mobiele apps met uw eigen certificaten", - "Register_Server_Standalone_Service_Providers": "Maak accounts bij serviceproviders", + "Register_Server_Standalone_Service_Providers": "Maak accounts aan bij serviceproviders", "Register_Server_Standalone_Update_Settings": "Werk de voorgeconfigureerde instellingen bij", + "Register_Server_Terms_Alert": "Ga akkoord met de voorwaarden om de registratie te voltooien", "Registration": "Registratie", - "Registration_Succeeded": "Registratie Geslaagd", + "Registration_Succeeded": "Registratie geslaagd", "Registration_via_Admin": "Registratie via beheerder", - "Regular_Expressions": "Normale uitdrukkingen", - "Release": "vrijlating", - "Religious": "religieus", - "Reload": "vernieuwen", - "Reload_Pages": "Pagina's herladen", + "Regular_Expressions": "Reguliere expressies", + "Release": "Versie", + "Religious": "Religieus", + "Reload": "Herladen", + "Reload_Pages": "Pagina's opnieuw laden", "Remove": "Verwijderen", "Remove_Admin": "Verwijder Admin", - "Remove_as_leader": "Verwijderen als leider", - "Remove_as_moderator": "Verwijder als moderator", - "Remove_as_owner": "Verwijder als eigenaar", + "Remove_as_leader": "Verwijder als leider", + "Remove_as_moderator": "Verwijderen als moderator", + "Remove_as_owner": "Verwijderen als eigenaar", + "Remove_Channel_Links": "Verwijder kanaallinks", "Remove_custom_oauth": "Verwijder aangepaste OAuth", "Remove_from_room": "Verwijderen uit de kamer", "Remove_last_admin": "De laatste beheerder verwijderen", "Remove_someone_from_room": "Verwijder iemand uit de kamer", "remove-closed-livechat-rooms": "Verwijder gesloten omnichannel-kamers", "remove-user": "Verwijder gebruiker", - "remove-user_description": "Toestemming om een gebruiker uit een kamer te verwijderen", + "remove-user_description": "Toestemming om een gebruiker uit een kamer te verwijderen", "Removed": "Verwijderd", "Removed_User": "Gebruiker verwijderd", - "Reply": "Antwoorden", + "Replay": "Herhaling", + "Replied_on": "Beantwoord op", + "Replies": "Antwoorden", + "Reply": "Antwoord", + "reply_counter": "__counter__ antwoord", + "reply_counter_plural": "__counter__ antwoorden", "Reply_in_direct_message": "Reageer in privébericht", + "Reply_in_thread": "Reageer in draad", + "Reply_via_Email": "Reageer via e-mail", "ReplyTo": "Antwoord aan", + "Report": "Rapporteren", "Report_Abuse": "Meld misbruik", - "Report_exclamation_mark": "Rapport!", - "Report_sent": "rapport verzonden", - "Report_this_message_question_mark": "Dit bericht rapporteren?", - "Reporting": "Rapportage", + "Report_exclamation_mark": "Rapporteer!", + "Report_sent": "Rapport verzonden", + "Report_this_message_question_mark": "Dit bericht melden?", + "Reporting": "Rapporteren", + "Request_comment_when_closing_conversation": "Commentaar vragen bij het sluiten van het gesprek", "Request_comment_when_closing_conversation_description": "Indien ingeschakeld, moet de agent een opmerking plaatsen voor het gesprek wordt gesloten.", + "Request_tag_before_closing_chat": "Vraag tag(s) aan voordat u het gesprek sluit", + "Requested_At": "Aangevraagd bij", + "Requested_By": "Aangevraagd door", "Require": "Vereist", - "Require_all_tokens": "Vereisen alle tokens", - "Require_any_token": "Een token vereisen", - "Require_password_change": "Vereis paswoord wijziging", + "Required": "Vereist", + "required": "vereist", + "Require_all_tokens": "Vereist alle tokens", + "Require_any_token": "Vereist een token", + "Require_password_change": "Wachtwoordwijziging vereisen", "Resend_verification_email": "Verificatie e-mail opnieuw verzenden", "Reset": "Reset", - "Reset_Connection": "Reset verbinding", + "Reset_Connection": "Verbinding resetten", "Reset_E2E_Key": "Reset E2E-sleutel", - "Reset_password": "Reset Wachtwoord", - "Reset_section_settings": "Reset sectie-instellingen", + "Reset_password": "Wachtwoord opnieuw instellen", + "Reset_section_settings": "Sectie naar standaard-instellingen resetten", + "Reset_TOTP": "TOTP resetten", "reset-other-user-e2e-key": "Reset andere gebruiker E2E-sleutel", "Responding": "Reageren", - "Restart": "Herstart", - "Restart_the_server": "Herstart de server", + "Response_description_post": "Lege bodies of bodies met een lege teksteigenschap worden eenvoudigweg genegeerd. Niet-200 reacties worden een redelijk aantal keren opnieuw geprobeerd. Een antwoord wordt gepost met de alias en avatar die hierboven zijn opgegeven. U kunt deze informatie negeren zoals in het bovenstaande voorbeeld.", + "Response_description_pre": "Als de handler een antwoord terug in het kanaal wil plaatsen, moet de volgende JSON worden geretourneerd als de hoofdtekst van het antwoord:", + "Restart": "Herstarten", + "Restart_the_server": "Start de server opnieuw op", "Retail": "Kleinhandel", - "Retention_setting_changed_successfully": "Bewaarbeleid-instelling succesvol gewijzigd", - "RetentionPolicy": "Retentiebeleid", + "Retention_setting_changed_successfully": "De instelling voor het bewaarbeleid is gewijzigd", + "RetentionPolicy": "Bewaarbeleid", "RetentionPolicy_Advanced_Precision": "Configuratie van geavanceerde retentiebeleid gebruiken", "RetentionPolicy_Advanced_Precision_Cron": "Gebruik cron geavanceerde retentiebeleid", + "RetentionPolicy_Advanced_Precision_Cron_Description": "Hoe vaak de prune-timer moet worden uitgevoerd, gedefinieerd door cron job expressie. Als u dit instelt op een nauwkeurigere waarde, werken kanalen met snelle retentietimers beter, maar kan dit extra verwerkingskracht kosten voor grote gemeenschappen.", "RetentionPolicy_AppliesToChannels": "Geldt voor kanalen", "RetentionPolicy_AppliesToDMs": "Geldt voor directe berichten", "RetentionPolicy_AppliesToGroups": "Geldt voor privégroepen", "RetentionPolicy_Description": "Verwijdert automatisch oude berichten uit uw Rocket.Chat-instantie.", "RetentionPolicy_DoNotPruneDiscussion": "Geen discussieberichten snoeien", + "RetentionPolicy_DoNotPrunePinned": "Verwijder vastgezette berichten niet", + "RetentionPolicy_DoNotPruneThreads": "Draden niet verwijderen", "RetentionPolicy_Enabled": "Ingeschakeld", "RetentionPolicy_ExcludePinned": "Sluit vastgezette berichten uit", "RetentionPolicy_FilesOnly": "Alleen bestanden verwijderen", "RetentionPolicy_FilesOnly_Description": "Alleen bestanden worden verwijderd, de berichten zelf blijven op hun plaats.", "RetentionPolicy_MaxAge": "Maximale berichtleeftijd", "RetentionPolicy_MaxAge_Channels": "Maximale berichtleeftijd in kanalen", - "RetentionPolicy_MaxAge_Description": "Snoei alle berichten die ouder zijn dan deze waarde, in dagen af", - "RetentionPolicy_MaxAge_DMs": "Maximale berichtleeftijd in directe berichten", + "RetentionPolicy_MaxAge_Description": "Snoei alle berichten die ouder zijn dan deze waarde, in dagen", + "RetentionPolicy_MaxAge_DMs": "Maximale berichtleeftijd in privéberichten", "RetentionPolicy_MaxAge_Groups": "Maximale berichtleeftijd in privégroepen", "RetentionPolicy_Precision": "Timer precisie", - "RetentionPolicy_Precision_Description": "Hoe vaak de prune-timer moet worden uitgevoerd. Als u dit op een meer precieze waarde instelt, werken kanalen met snelle retentietimers beter, maar dit kan extra verwerkingskracht voor grote community's kosten.", - "RetentionPolicy_RoomWarning": "Berichten die ouder zijn dan __time__ worden hier automatisch gesnoeid", + "RetentionPolicy_Precision_Description": "Hoe vaak de prune-timer moet worden uitgevoerd. Als u dit instelt op een nauwkeurigere waarde, werken kanalen met snelle retentietimers beter, maar kan dit extra verwerkingskracht kosten voor grote gemeenschappen.", + "RetentionPolicy_RoomWarning": "Berichten ouder dan __time__ worden hier automatisch gesnoeid", "RetentionPolicy_RoomWarning_FilesOnly": "Bestanden ouder dan __time__ worden hier automatisch gesnoeid (berichten blijven intact)", "RetentionPolicy_RoomWarning_Unpinned": "Niet-vastgezette berichten ouder dan __time__ worden hier automatisch gesnoeid", "RetentionPolicy_RoomWarning_UnpinnedFilesOnly": "Niet-vastgezette bestanden ouder dan __time__ worden hier automatisch gesnoeid (berichten blijven intact)", "RetentionPolicyRoom_Enabled": "Oude berichten automatisch snoeien", "RetentionPolicyRoom_ExcludePinned": "Sluit vastgezette berichten uit", - "RetentionPolicyRoom_FilesOnly": "Alleen bestanden snoeien, berichten bewaren", + "RetentionPolicyRoom_FilesOnly": "Snoei alleen bestanden, bewaar berichten", "RetentionPolicyRoom_MaxAge": "Maximale berichtleeftijd in dagen (standaard: __max__)", - "RetentionPolicyRoom_OverrideGlobal": "Negeer het wereldwijde retentiebeleid", + "RetentionPolicyRoom_OverrideGlobal": "Negeer het globale retentiebeleid", "RetentionPolicyRoom_ReadTheDocs": "Kijk uit! Als u deze instellingen zonder de grootste zorg aanpast, kan dit alle berichthistorie vernietigen. Lees de documentatie voordat u de functie inschakelt hier.", - "Retry_Count": "Retry Count", + "Retry_Count": "Aantal pogingen", "Return_to_home": "Terugkeren naar homepagina", "Return_to_previous_page": "Terugkeren naar de vorige pagina", "Robot_Instructions_File_Content": "Robots.txt-bestandsinhoud", + "Rocket_Chat_Alert": "Rocket.Chat-waarschuwing", "Role": "Rol", - "Role_Editing": "Rol bewerken", + "Role_Editing": "Rolbewerking", "Role_Mapping": "Roltoewijzing", "Role_removed": "Rol verwijderd", "Room": "Kamer", "Room_announcement_changed_successfully": "Kameraankondiging succesvol gewijzigd", - "Room_archivation_state": "State", - "Room_archivation_state_false": "Aktief", + "Room_archivation_state": "Staat", + "Room_archivation_state_false": "Actief", "Room_archivation_state_true": "Gearchiveerd", "Room_archived": "Kamer gearchiveerd", "room_changed_announcement": "Zaalaankondiging gewijzigd in: __room_announcement__ door __user_by__", + "room_changed_avatar": "Kameravatar gewijzigd door __user_by__", "room_changed_description": "Kamerbeschrijving gewijzigd in: __room_description__ door __user_by__", - "room_changed_privacy": "Room type changed to: __room_type__ by __user_by__", - "room_changed_topic": "Room topic changed to: __room_topic__ by __user_by__", - "Room_default_change_to_private_will_be_default_no_more": "Dit is een standaardkanaal en als dit wordt gewijzigd in een privégroep, is dit niet langer een standaardkanaal. Wil je doorgaan?", - "Room_description_changed_successfully": "Kamerbeschrijving succesvol gewijzigd", + "room_changed_privacy": "Kamertype gewijzigd in: __room_type__ door __user_by__", + "room_changed_topic": "Kameronderwerp gewijzigd in: __room_topic__ door __user_by__", + "Room_default_change_to_private_will_be_default_no_more": "Dit is een standaardkanaal en als u het wijzigt in een privégroep, zal het niet langer een standaardkanaal zijn. Wil je doorgaan?", + "Room_description_changed_successfully": "Kamerbeschrijving is succesvol gewijzigd", "Room_has_been_archived": "Kamer is gearchiveerd", "Room_has_been_deleted": "Kamer is verwijderd", - "Room_has_been_unarchived": "Kamer is uit archief verwijderd", + "Room_has_been_unarchived": "Kamer is uit archief gehaald", "Room_Info": "Kamer info", "room_is_blocked": "Deze kamer is geblokkeerd", "room_is_read_only": "Deze kamer is alleen-lezen", @@ -2671,140 +3310,209 @@ "Room_name_changed_successfully": "Kamernaam succesvol gewijzigd", "Room_not_found": "Kamer niet gevonden", "Room_password_changed_successfully": "Kamerwachtwoord succesvol gewijzigd", - "Room_tokenpass_config_changed_successfully": "Kamertokenpass-configuratie is succesvol gewijzigd", - "Room_topic_changed_successfully": "Kamer onderwerp succesvol gewijzigd", - "Room_type_changed_successfully": "Kamertype met succes gewijzigd", - "Room_type_of_default_rooms_cant_be_changed": "Dit is een standaardkamer en het type kan niet worden gewijzigd, raadpleeg uw beheerder.", - "Room_unarchived": "Kamer uit meer gearchiveerd", + "Room_tokenpass_config_changed_successfully": "De configuratie van de kamertokenpass is succesvol gewijzigd", + "Room_topic_changed_successfully": "Kameronderwerp is succesvol gewijzigd", + "Room_type_changed_successfully": "Kamertype is succesvol gewijzigd", + "Room_type_of_default_rooms_cant_be_changed": "Dit is een standaardkamer en het type kan niet worden gewijzigd, raadpleeg hiervoor uw beheerder.", + "Room_unarchived": "Kamer uit archief gehaald", "Room_updated_successfully": "Kamer succesvol bijgewerkt!", - "Room_uploaded_file_list": "Bestandslijst", + "Room_uploaded_file_list": "Lijst met bestanden", "Room_uploaded_file_list_empty": "Geen bestanden beschikbaar.", "Rooms": "Kamers", - "Routing": "routing", - "Run_only_once_for_each_visitor": "Slechts eenmaal uitvoeren voor elke bezoeker", + "Routing": "Routing", + "Run_only_once_for_each_visitor": "Voer slechts één keer uit voor elke bezoeker", "run-import": "Import uitvoeren", - "run-import_description": "Toestemming voor het uitvoeren van de importeurs", + "run-import_description": "Toestemming om de importeurs te runnen", "run-migration": "Voer migratie uit", - "run-migration_description": "Toestemming voor het uitvoeren van de migraties", + "run-migration_description": "Toestemming om de migraties uit te voeren", "Running_Instances": "Instanties", - "Runtime_Environment": "Runtime Environment", + "Runtime_Environment": "Runtime-omgeving", "S_new_messages_since_s": "%s nieuwe berichten sinds %s", - "Same_As_Token_Sent_Via": "Hetzelfde als \"Token Sent Via\"", + "Same_As_Token_Sent_Via": "Hetzelfde als \"Token verzonden via\"", "Same_Style_For_Mentions": "Dezelfde stijl voor vermeldingen", "SAML": "SAML", - "SAML_Custom_Cert": "Custom Certificate", - "SAML_Custom_Debug": "Schakel Debug in", + "SAML_Allowed_Clock_Drift": "Toegestane klokafwijking van identiteitsprovider", + "SAML_Allowed_Clock_Drift_Description": "De klok van de identiteitsprovider kan iets voorlopen op uw systeemklokken. U kunt een kleine hoeveelheid klokafwijking toestaan. De waarde moet worden opgegeven in een aantal milliseconden (ms). De opgegeven waarde wordt opgeteld bij het huidige tijdstip waarop het antwoord wordt gevalideerd.", + "SAML_AuthnContext_Template": "AuthnContext Template", + "SAML_AuthnContext_Template_Description": "U kunt hier elke variabele uit de AuthnRequest Template gebruiken.\n\nOm extra authn-contexten toe te voegen, dupliceert u de __AuthnContextClassRef__-tag en vervangt u de __\\_\\_authnContext\\_\\___ variabele door de nieuwe context.", + "SAML_AuthnRequest_Template": "AuthnRequest Template", + "SAML_AuthnRequest_Template_Description": "De volgende variabelen zijn beschikbaar:\n- **\\_\\_newId\\_\\_**: Willekeurig gegenegeerde id-string\n- **\\_\\_instant\\_\\_**: Huidige tijdstempel\n- **\\_\\_callbackUrl\\_\\_**: De Rocket.Chat callback URL.\n- **\\_\\_entryPoint\\_\\_**: De waarde van de __Custom Entry Point__ instelling.\n- **\\_\\_issuer\\_\\_**: De waarde van de __Custom Issuer__ instelling.\n- **\\_\\_identifierFormatTag\\_\\_**: De inhoud van de __NameID Policy Template__ indien een geldige __Identifier Format__ geconfigureerd is.\n- **\\_\\_identifierFormat\\_\\_**: De waarde van de __Identifier Format__ instelling.\n- **\\_\\_authnContextTag\\_\\_**: De inhoud van de __AuthnContext Template__ indien een geldige __Custom Authn Context__ geconfigureerd is.\n- **\\_\\_authnContextComparison\\_\\_**: De waarde van de __Authn Context Comparison__ instelling.\n- **\\_\\_authnContext\\_\\_**: De waarde van de __Custom Authn Context__ instelling.", + "SAML_Custom_Authn_Context": "Aangepaste Authn-context", + "SAML_Custom_Authn_Context_Comparison": "Authn-contextvergelijking", + "SAML_Custom_Authn_Context_description": "Laat dit leeg om de authn-context uit het verzoek weg te laten.\n\n Om meerdere authn-contexten toe te voegen, voegt u de extra contexten rechtstreeks toe aan de __AuthnContext Template__ instelling.", + "SAML_Custom_Cert": "Aangepast certificaat", + "SAML_Custom_Debug": "Schakel debug in", "SAML_Custom_EMail_Field": "E-mailveldnaam", - "SAML_Custom_Entry_point": "Custom Entry Point", - "SAML_Custom_Generate_Username": "Generate Username", - "SAML_Custom_IDP_SLO_Redirect_URL": "IDP SLO Omleidings-URL", + "SAML_Custom_Entry_point": "Aangepast toegangspunt", + "SAML_Custom_Generate_Username": "Genereer gebruikersnaam", + "SAML_Custom_IDP_SLO_Redirect_URL": "IDP SLO-omleidings-URL", "SAML_Custom_Immutable_Property": "Onveranderlijke veldnaam", + "SAML_Custom_Immutable_Property_EMail": "E-mail", "SAML_Custom_Immutable_Property_Username": "Gebruikersnaam", - "SAML_Custom_Issuer": "Custom Issuer", - "SAML_Custom_Logout_Behaviour": "Afmeldingsgedrag", + "SAML_Custom_Issuer": "Aangepast uitgever", + "SAML_Custom_Logout_Behaviour": "Uitloggedrag", "SAML_Custom_Logout_Behaviour_End_Only_RocketChat": "Log alleen uit van Rocket.Chat", "SAML_Custom_Logout_Behaviour_Terminate_SAML_Session": "SAML-sessie beëindigen", - "SAML_Custom_Private_Key": "Private Key Inhoud", - "SAML_Custom_Provider": "Custom Provider", - "SAML_Custom_Public_Cert": "Public Cert Contents", - "SAML_Custom_user_data_fieldmap": "User Data Field Map", + "SAML_Custom_mail_overwrite": "Gebruikersmail overschrijven (gebruik idp-kenmerk)", + "SAML_Custom_name_overwrite": "Volledige naam van gebruiker overschrijven (gebruik idp-kenmerk)", + "SAML_Custom_Private_Key": "Inhoud van de privésleutel", + "SAML_Custom_Provider": "Aangepaste provider", + "SAML_Custom_Public_Cert": "Inhoud van openbare certificaten", + "SAML_Custom_signature_validation_all": "Valideer alle handtekeningen", + "SAML_Custom_signature_validation_assertion": "Valideer de handtekening van de bewering", + "SAML_Custom_signature_validation_either": "Valideer een van beide handtekeningen", + "SAML_Custom_signature_validation_response": "Valideer antwoordhandtekening", + "SAML_Custom_signature_validation_type": "Type handtekening validatie", + "SAML_Custom_signature_validation_type_description": "Deze instelling wordt genegeerd als er geen aangepast certificaat is opgegeven.", + "SAML_Custom_user_data_fieldmap": "Gebruikersgegevensveldkaart", + "SAML_Custom_user_data_fieldmap_description": "Configureer hoe gebruikersaccountvelden (zoals e-mail) worden ingevuld vanuit een record in SAML (eenmaal gevonden).\nAls voorbeeld: `{\"name\":\"cn\", \"email\":\"mail\"}` zal de door mensen leesbare naam van een persoon kiezen uit het cn-attribuut en zijn e-mail uit het mail-attribuut.\nBeschikbare velden in Rocket.Chat: `name`, `email` en `username`, al het andere wordt opgeslagen als `customFields`.\nWijs de naam van een onveranderlijk attribuut toe aan de '__identifier__' sleutel om het als gebruikers-ID te gebruiken.\nU kunt ook regexes en sjablonen gebruiken. Sjablonen worden eerst verwerkt, behalve wanneer ze verwijzen naar het resultaat van de regex.\n```\n{\n \"email\": \"mail\",\n \"username\": {\n \"fieldName\": \"mail\",\n \"regex\": \"(.*)@.+$\",\n \"template\": \"user-__regex__\"\n },\n\"name\":{\n \"fieldNames\": [\n \"firstName\",\n \"lastName\"\n ],\n \"template\": \"__firstName__ __lastName__\"\n },\n\"__identifier__\": \"uid\"\n}```", "SAML_Custom_Username_Field": "Veldnaam gebruikersnaam", + "SAML_Custom_Username_Normalize": "Normaliseer gebruikersnaam", + "SAML_Custom_Username_Normalize_Lowercase": "In kleine letters", + "SAML_Custom_Username_Normalize_None": "Geen normalisatie", "SAML_Default_User_Role": "Standaard gebruikersrol", + "SAML_Default_User_Role_Description": "U kunt meerdere rollen specificeren, gescheiden door komma's.", + "SAML_Identifier_Format": "Identifier-indeling", + "SAML_Identifier_Format_Description": "Laat dit leeg om het NameID-beleid uit de aanvraag weg te laten.", + "SAML_LogoutRequest_Template": "Sjabloon voor uitlogverzoek", + "SAML_LogoutRequest_Template_Description": "De volgende variabelen zijn beschikbaar:\n- **\\_\\_newId\\_\\_**: willekeurige gegenereerde id-string\n- **\\_\\_instant\\_\\_**: Huidige tijdstempel\n- **\\_\\_idpSLORedirectURL\\_\\_**: De IDP Single LogOut URL waarnaar moet worden doorverwezen.\n- **\\_\\_issuer\\_\\_**: De waarde van de __Custom Issuer__ instelling.\n- **\\_\\_identifierFormat\\_\\_**: De waarde van de __Identifier Format__ instelling.\n- **\\_\\_nameID\\_\\_**: De NameID ontvangen van de IdP-inlogverzoek.\n- **\\_\\_sessionIndex\\_\\_**: De sessionIndex die ontvangen is van de IdP wanneer de gebruiker zich heeft aangemeld.", + "SAML_LogoutResponse_Template": "Template voor de afmeldingsreactie", + "SAML_LogoutResponse_Template_Description": "De volgende variabelen zijn beschikbaar:\n- **\\_\\_newId\\_\\_**: willekeurige gegenereerde id-string\n- **\\_\\_inResponseToId\\_\\_**: De ID van het uitlogverzoek ontvangen van de IdP\n- **\\_\\_instant\\_\\_**: Huidige tijdstempel\n- **\\_\\_idpSLORedirectURL\\_\\_**: De IDP Single LogOut URL waarnaar moet worden doorverwezen.\n- **\\_\\_issuer\\_\\_**: De waarde van de __Custom Issuer__ instelling.\n- **\\_\\_identifierFormat\\_\\_**: De waarde van de __Identifier Format__ instelling.\n- **\\_\\_nameID\\_\\_**: De NameID ontvangen van de IdP-uitlogverzoek.\n- **\\_\\_sessionIndex\\_\\_**: De sessionIndex die ontvangen is van het IdP-uitlogverzoek.", + "SAML_Metadata_Certificate_Template_Description": "De volgende variabelen zijn beschikbaar:\n- **\\_\\_certificate\\_\\_**: het privécertificaat voor assertion-encryptie.", + "SAML_Metadata_Template": "Metagegevenssjabloon", + "SAML_Metadata_Template_Description": "De volgende variabelen zijn beschikbaar:\n- **\\_\\_sloLocation\\_\\_**: De Rocket.Chat Single Logout URL.\n- **\\_\\_issuer\\_\\_**: De waarde van de __Custom Issuer__ instelling.\n- **\\_\\_identifierFormat\\_\\_**: De waarde van de __Identifier Format__ instelling.\n- **\\_\\_certificateTag\\_\\_**: Als een privécertificaat geconfigureerd is, bevat dit de __Metadata Certificate Template__, anders wordt het genegeerd.\n- **\\_\\_callbackUrl\\_\\_**: De Rocket.Chat callback-URL.", + "SAML_MetadataCertificate_Template": "Metagegevens certificaatsjabloon", + "SAML_NameIdPolicy_Template": "NameID-beleidssjabloon", + "SAML_NameIdPolicy_Template_Description": "U kunt hier elke variabele uit de Authorize Request Template gebruiken.", "SAML_Role_Attribute_Name": "Rolkenmerknaam", "SAML_Role_Attribute_Name_Description": "Als dit kenmerk in het SAML-antwoord gevonden wordt, dan worden de waarden ervan gebruikt als rolnamen voor nieuwe gebruikers.", + "SAML_Role_Attribute_Sync": "Synchroniseer gebruikersrollen", + "SAML_Role_Attribute_Sync_Description": "Synchroniseer SAML-gebruikersrollen bij het inloggen (overschrijft lokale gebruikersrollen).", "SAML_Section_1_User_Interface": "Gebruikersomgeving", + "SAML_Section_2_Certificate": "Certificaat", + "SAML_Section_3_Behavior": "Gedrag", "SAML_Section_4_Roles": "Rollen", + "SAML_Section_5_Mapping": "Mapping", + "SAML_Section_6_Advanced": "Geavanceerd", + "SAML_Custom_channels_update": "Werk kamerabonnementen bij bij elke aanmelding", + "SAML_Custom_channels_update_description": "Zorgt ervoor dat de gebruiker bij elke aanmelding lid is van alle kanalen in SAML-bewering.", + "SAML_Custom_include_private_channels_update": "Neem privékamers op in kamerabonnement", + "SAML_Custom_include_private_channels_update_description": "Voegt een gebruiker toe aan alle privéruimten die bestaan in de SAML-bewering.", "Saturday": "Zaterdag", - "Save": "Bewaren", + "Save": "Opslaan", "Save_changes": "Wijzigingen opslaan", - "Save_Mobile_Bandwidth": "Bespaar op mobile bandbreedte", - "Save_to_enable_this_action": "Bewaar deze actie mogelijk te maken", - "Save_To_Webdav": "Opslaan naar WebDAV", - "Save_your_encryption_password": "Sla uw coderingswachtwoord op", + "Save_Mobile_Bandwidth": "Bespaar mobiele bandbreedte", + "Save_to_enable_this_action": "Opslaan om deze actie mogelijk te maken", + "Save_To_Webdav": "Opslaan in WebDAV", + "Save_your_encryption_password": "Bewaar uw versleutelingswachtwoord", "save-others-livechat-room-info": "Bewaar andere omnichannel kamerinformatie", "save-others-livechat-room-info_description": "Toestemming om informatie uit andere omnichannel-kamers op te slaan", "Saved": "Opgeslagen", "Saving": "Opslaan", - "Scan_QR_code": "Gebruik de authenticator-app zoals Google Authenticator, Authy of Duo om de QR-code te scannen. Het toont een 6-cijferige code die je hieronder moet invoeren.", - "Scan_QR_code_alternative_s": "Als u de QR-code niet kunt scannen, kunt u in plaats daarvan de code handmatig invoeren:", - "Scope": "strekking", + "Scan_QR_code": "Gebruik een authenticator-app zoals Google Authenticator, Authy of Duo, scan de QR-code. Er wordt een 6-cijferige code weergegeven die u hieronder moet invoeren.", + "Scan_QR_code_alternative_s": "Als u de QR-code niet kunt scannen, kunt u de code ook handmatig invoeren:", + "Scope": "Reikwijdte", + "Score": "Score", + "Screen_Lock": "Schermvergrendeling", "Screen_Share": "Scherm delen", - "Script_Enabled": "script Ingeschakeld", + "Script_Enabled": "Script ingeschakeld", "Search": "Zoeken", "Search_Apps": "Zoek apps", "Search_by_file_name": "Zoeken op bestandsnaam", "Search_by_username": "Zoek op gebruikersnaam", "Search_Channels": "Zoek kanalen", + "Search_Chat_History": "Zoek chatgeschiedenis", "Search_current_provider_not_active": "Huidige zoekmachine is niet actief", "Search_Integrations": "Zoek integraties", - "Search_message_search_failed": "Zoekopdracht is mislukt", + "Search_message_search_failed": "Zoekopdracht mislukt", "Search_Messages": "Berichten zoeken", "Search_Files": "Zoek bestanden", "Search_Page_Size": "Pagina grootte", "Search_Private_Groups": "Zoek privégroepen", - "Search_Provider": "Zoekaanbieder", + "Search_Provider": "Zoekprovider", "Search_Rooms": "Kamers zoeken", "Search_Users": "Zoek gebruikers", "seconds": "seconden", - "Secret_token": "geheime token", + "Secret_token": "Geheime token", "Security": "Veiligheid", "See_full_profile": "Bekijk het volledige profiel", "Select_a_department": "Selecteer een afdeling", + "Select_a_room": "Kies een kamer", "Select_a_user": "Selecteer een gebruiker", - "Select_an_avatar": "Selecteer een afbeelding", + "Select_an_avatar": "Selecteer een avatar", "Select_an_option": "Kies een optie", + "Select_at_least_one_user": "Selecteer minimaal één gebruiker", + "Select_at_least_two_users": "Selecteer minimaal twee gebruikers", "Select_department": "Selecteer een afdeling", "Select_file": "Selecteer bestand", "Select_role": "Selecteer een rol", - "Select_service_to_login": "Selecteer een dienst in te loggen om uw foto op te halen of upload er één van uw computer", - "Select_user": "Kies een gebruiker", + "Select_service_to_login": "Selecteer een dienst in te loggen om uw foto op te laden of upload er een rechtstreeks vanaf uw computer", + "Select_tag": "Selecteer een tag", + "Select_user": "Selecteer gebruiker", "Select_users": "Selecteer gebruikers", "Selected_agents": "Geselecteerde agenten", - "Send": "Verstuur", + "Selected_departments": "Geselecteerde afdelingen", + "Selected_monitors": "Geselecteerde monitoren", + "Selecting_users": "Gebruikers selecteren", + "Send": "Sturen", "Send_a_message": "Stuur een bericht", - "Send_a_test_mail_to_my_user": "Stuur een test email naar mijn gebruiker", + "Send_a_test_mail_to_my_user": "Stuur een testmail naar mijn gebruiker", "Send_a_test_push_to_my_user": "Stuur een test push notificatie naar mijn gebruiker", - "Send_confirmation_email": "Bevestigings e-mail sturen", - "Send_data_into_RocketChat_in_realtime": "Stuur gegevens in Rocket.Chat in real-time.", - "Send_email": "Verstuur e-mail", - "Send_invitation_email": "Stuur uitnodiging e-mail", - "Send_invitation_email_error": "Je hebt geen geldig e-mailadres gegeven.", - "Send_invitation_email_info": "Je kunt meerdere e-mail uitnodigingen verzenden per keer sturen.", - "Send_invitation_email_success": "U hebt een uitnodiging e-mail gestuurd naar de volgende adressen:", - "Send_request_on_agent_message": "Verzoek verzenden over agentberichten", - "Send_request_on_chat_close": "Nu aanvraag sturen op de chat in de buurt", - "Send_request_on_lead_capture": "Verzend aanvraag over lead capture", + "Send_confirmation_email": "Stuur een bevestigingsmail", + "Send_data_into_RocketChat_in_realtime": "Stuur gegevens in realtime naar Rocket.Chat.", + "Send_email": "E-mail verzenden", + "Send_invitation_email": "Stuur uitnodigingsmail", + "Send_invitation_email_error": "Je hebt geen geldig e-mailadres opgegeven.", + "Send_invitation_email_info": "Je kunt meerdere e-mailuitnodigingen tegelijk verzenden.", + "Send_invitation_email_success": "U heeft met succes een uitnodigingsmail gestuurd naar de volgende adressen:", + "Send_me_the_code_again": "Stuur me de code opnieuw", + "Send_request_on": "Verzoek verzenden op", + "Send_request_on_agent_message": "Stuur verzoek op berichten van agent", + "Send_request_on_chat_close": "Verzoek verzenden bij het sluiten van chat", + "Send_request_on_chat_queued": "Verzoek verzenden bij chat in wachtrij", + "Send_request_on_chat_start": "Verzoek verzenden bij start van chat", + "Send_request_on_chat_taken": "Verzoek verzenden op genomen chat", + "Send_request_on_forwarding": "Verzoek verzenden bij doorsturen", + "Send_request_on_lead_capture": "Verzoek verzenden over het vastleggen van leads", "Send_request_on_offline_messages": "Verzoek verzenden voor offline berichten", - "Send_request_on_visitor_message": "Verzend verzoek over bezoekersberichten", - "Send_Test": "Stuur Test", + "Send_request_on_visitor_message": "Stuur verzoek op berichten van bezoekers", + "Send_Test": "Test verzenden", + "Send_Test_Email": "Stuur een test-e-mail", "Send_via_email": "Verstuur via mail", + "Send_via_Email_as_attachment": "Stuur via e-mail als bijlage", "Send_Visitor_navigation_history_as_a_message": "Stuur bezoekersnavigatiegeschiedenis als een bericht", "Send_visitor_navigation_history_on_request": "Stuur bezoekersnavigatiegeschiedenis op aanvraag", - "Send_welcome_email": "Stuur welkome e-mail", - "Send_your_JSON_payloads_to_this_URL": "Verstuur je JSON payload naar deze URL.", - "send-many-messages": "Verzend veel berichten", + "Send_welcome_email": "Stuur een welkomstmail", + "Send_your_JSON_payloads_to_this_URL": "Stuur uw JSON-payload naar deze URL.", + "send-many-messages": "Stuur veel berichten", "send-omnichannel-chat-transcript": "Transcript van omnichannel conversatie verzenden", - "Sending": "Verzenden ...", + "Sender_Info": "Info afzender", + "Sending": "Verzenden...", "Sent_an_attachment": "Stuur een bijlage", + "Sent_from": "Verzonden vanaf", + "Separate_multiple_words_with_commas": "Scheid meerdere woorden met komma's", "Served_By": "Bediend door", + "Server": "Server", "Server_File_Path": "Server bestandspad", - "Server_Info": "Server informatie", - "Server_Type": "server type", + "Server_Folder_Path": "Pad naar servermap", + "Server_Info": "Serverinformatie", + "Server_Type": "Server type", "Service": "Service", "Service_account_key": "Serviceaccountsleutel", + "Set_as_favorite": "Stel in als favoriet", "Set_as_leader": "Instellen als leider", "Set_as_moderator": "Stel in als moderator", - "Set_as_owner": "Maak eigenaar", + "Set_as_owner": "Stel in als eigenaar", "Set_random_password_and_send_by_email": "Stel een willekeurig wachtwoord in en stuur het per e-mail", "set-leader": "Leider instellen", - "set-moderator": "Stel Moderator in", + "set-moderator": "Stel moderator in", "set-moderator_description": "Toestemming om andere gebruikers in te stellen als moderator van een kanaal", "set-owner": "Stel eigenaar in", "set-owner_description": "Toestemming om andere gebruikers in te stellen als eigenaar van een kanaal", - "set-react-when-readonly": "Stel React in bij Alleen lezen", + "set-react-when-readonly": "Stel reageer bij alleen lezen in", "set-react-when-readonly_description": "Toestemming om de mogelijkheid in te stellen om te reageren op berichten in een alleen-lezen kanaal", - "set-readonly": "Alleen lezen instellen", - "set-readonly_description": "Toestemming om een kanaal in te stellen om alleen kanaal te lezen", + "set-readonly": "Stel als alleen lezen in", + "set-readonly_description": "Toestemming om een kanaal in te stellen als een alleen-lezen kanaal", "Settings": "Instellingen", "Settings_updated": "Instellingen bijgewerkt", "Setup_Wizard": "Installatiewizard", @@ -2812,79 +3520,89 @@ "Share_Location_Title": "Deel locatie?", "Canned_responses": "Standaardantwoorden", "Shared_Location": "Gedeelde locatie", - "Should_be_a_URL_of_an_image": "Dit moet een URL van een afbeelding zijn.", + "Shared_Secret": "Gedeeld geheim", + "Shortcut": "Snelkoppeling", + "Should_be_a_URL_of_an_image": "Moet een URL van een afbeelding zijn.", "Should_exists_a_user_with_this_username": "De gebruiker moet al bestaan.", - "Show_agent_email": "Toon agent-e-mail", + "Show_agent_email": "E-mailadres van agent tonen", + "Show_agent_info": "Toon agentinformatie", "Show_all": "Toon alles", - "Show_Avatars": "Laat Avatars zien", + "Show_Avatars": "Toon Avatars", "Show_counter": "Toon teller", - "Show_email_field": "Toon e-mail veld", + "Show_email_field": "Toon e-mailveld", + "Show_Message_In_Main_Thread": "Toon threadberichten in de hoofdthread", "Show_more": "Laat meer zien", "Show_name_field": "Naamveld tonen", "show_offline_users": "offline gebruikers tonen", "Show_on_offline_page": "Weergeven op offline pagina", "Show_on_registration_page": "Weergeven op registratiepagina", - "Show_only_online": "Alleen online", + "Show_only_online": "Alleen online weergeven", "Show_preregistration_form": "Toon pre-registratieformulier", - "Show_queue_list_to_all_agents": "Wachtlijst tonen voor alle agenten", - "Show_room_counter_on_sidebar": "Toon kamerteller op zijbalk", + "Show_queue_list_to_all_agents": "Toon wachtrijlijst aan alle agenten", + "Show_room_counter_on_sidebar": "Toon de kamerteller op de zijbalk", "Show_Setup_Wizard": "Toon de installatiewizard", - "Show_the_keyboard_shortcut_list": "Toon de sneltoetslijst", + "Show_the_keyboard_shortcut_list": "Toon de lijst met sneltoetsen", "Showing_archived_results": "Zichtbaar: %s gearchiveerde resultaten", "Showing_online_users": "Toont: __total_showing__, online: __online__, totaal: __total__ gebruikers", "Showing_results": "Toon %s resultaten", "Showing_results_of": "Weergave resultaten %s - %s van %s", - "Sidebar": "sidebar", - "Sidebar_list_mode": "Zijbalkkanalijstmodus", - "Sign_in_to_start_talking": "Log in om te beginnen met praten", + "Sidebar": "Zijbalk", + "Sidebar_list_mode": "Zijbalk kanalenlijstmodus", + "Sign_in_to_start_talking": "Log in om te praten", "since_creation": "sinds %s", "Site_Name": "Site naam", "Site_Url": "URL van de site", "Site_Url_Description": "Voorbeeld: https://chat.domain.com/", "Size": "Grootte", "Skip": "Overslaan", - "Slack_Users": "Slack's Gebruikers CSV", - "SlackBridge_error": "SlackBridge heeft een fout opgetreden tijdens het importeren van uw berichten met%s:%s", - "SlackBridge_finish": "SlackBridge is klaar met het importeren van de berichten op%s. Laad opnieuw om alle berichten te bekijken.", - "SlackBridge_Out_All": "SlackBridge Out All", - "SlackBridge_Out_All_Description": "Stuur berichten van alle kanalen die in Slack bestaan en de bot is toegetreden", + "Slack_Users": "Slack's gebruikers CSV", + "SlackBridge_APIToken": "API-tokens", + "SlackBridge_APIToken_Description": "U kunt meerdere slack-servers configureren door één API-token per regel toe te voegen.", + "Slackbridge_channel_links_removed_successfully": "De slackbridge-kanaalkoppelingen zijn succesvol verwijderd.", + "SlackBridge_error": "SlackBridge kreeg een fout tijdens het importeren van uw berichten op %s: %s", + "SlackBridge_finish": "SlackBridge is klaar met het importeren van de berichten op %s. Laad opnieuw om alle berichten te bekijken.", + "SlackBridge_Out_All": "SlackBridge Out Alles", + "SlackBridge_Out_All_Description": "Stuur berichten van alle kanalen die in Slack bestaan en waar de bot is toegetreden", "SlackBridge_Out_Channels": "SlackBridge Out-kanalen", - "SlackBridge_Out_Channels_Description": "Kies uit welke kanalen berichten naar Slack worden verzonden", + "SlackBridge_Out_Channels_Description": "Kies welke kanalen berichten naar Slack terugsturen", "SlackBridge_Out_Enabled": "SlackBridge Out ingeschakeld", - "SlackBridge_Out_Enabled_Description": "Kies of SlackBridge uw berichten ook naar Slack moet terugsturen", - "SlackBridge_start": "@%s is een SlackBridge-import gestart met `#%s`. We laten het je weten als het klaar is.", - "Slash_Gimme_Description": "Displays (つ ◕_◕) つ voor uw bericht", - "Slash_LennyFace_Description": "Displays (͡ ° ͜ʖ ͡ °) na uw bericht", - "Slash_Shrug_Description": "Displays ¯ \\ _ (ツ) _ / ¯ na uw bericht", + "SlackBridge_Out_Enabled_Description": "Kies of SlackBridge uw berichten ook terug naar Slack moet sturen", + "SlackBridge_Remove_Channel_Links_Description": "Verwijder de interne link tussen Rocket.Chat-kanalen en Slack-kanalen. De links worden daarna opnieuw gemaakt op basis van de kanaalnamen.", + "SlackBridge_start": "@%s is begonnen met een SlackBridge-import op `#%s`. We laten het je weten als het klaar is.", + "Slash_Gimme_Description": "Geeft ༼ つ ◕_◕ ༽つ weer voor uw bericht", + "Slash_LennyFace_Description": "Geeft ( ͡° ͜ʖ ͡°) na uw bericht weer", + "Slash_Shrug_Description": "Geeft ¯\\_(ツ)_/¯ na uw bericht", "Slash_Status_Description": "Stel uw statusbericht in", "Slash_Status_Params": "Statusbericht", - "Slash_Tableflip_Description": "Displays (╯ ° □ °) ╯( ┻━┻", - "Slash_TableUnflip_Description": "Displays ┬─┬ ノ (゜ - ゜ ノ)", - "Slash_Topic_Description": "Stel topic", + "Slash_Tableflip_Description": "Geeft (╯°□°)╯︵ ┻━┻ weer", + "Slash_TableUnflip_Description": "Geeft ┬─┬ ノ( ゜-゜ノ) weer", + "Slash_Topic_Description": "Stel onderwerp in", "Slash_Topic_Params": "Onderwerp bericht", - "Smarsh_Email": "Smarste e-mail", - "Smarsh_Email_Description": "Smarsh e-mailadres om het .eml-bestand naar te verzenden.", - "Smarsh_Enabled": "Smars ingeschakeld", + "Smarsh_Email": "Smarsh e-mail", + "Smarsh_Email_Description": "Smarsh-e-mailadres waarnaar het .eml-bestand moet worden verzonden.", + "Smarsh_Enabled": "Smarsh ingeschakeld", "Smarsh_Enabled_Description": "Of de Smarsh eml-connector is ingeschakeld of niet (vereist 'Van e-mail' ingevuld onder E-mail -> SMTP).", - "Smarsh_Interval": "Smarsh Interval", - "Smarsh_Interval_Description": "De hoeveelheid tijd om te wachten voordat de chats worden verzonden (vereist 'Van e-mail' ingevuld onder E-mail -> SMTP).", - "Smarsh_MissingEmail_Email": "Ontbrekende e-mail", - "Smarsh_MissingEmail_Email_Description": "Het e-mailadres dat wordt weergegeven voor een gebruikersaccount wanneer hun e-mailadres ontbreekt, gebeurt meestal met bot-accounts.", - "Smileys_and_People": "Smileys & People", + "Smarsh_Interval": "Smarsh-interval", + "Smarsh_Interval_Description": "De hoeveelheid tijd die moet worden gewacht voordat de chats worden verzonden (vereist 'Van e-mail' ingevuld onder E-mail -> SMTP).", + "Smarsh_MissingEmail_Email": "E-mailadres ontbreekt", + "Smarsh_MissingEmail_Email_Description": "De e-mail die voor een gebruikersaccount wordt weergegeven wanneer hun e-mailadres ontbreekt, gebeurt meestal met botaccounts.", + "Smarsh_Timezone": "Smarsh-tijdzone", + "Smileys_and_People": "Smileys & Mensen", "SMS_Default_Omnichannel_Department": "Omnichannel-afdeling (standaard)", - "SMS_Enabled": "SMS Ingeschakeld", + "SMS_Default_Omnichannel_Department_Description": "Indien ingesteld, worden alle nieuwe inkomende chats die door deze integratie worden geïnitieerd, naar deze afdeling gestuurd.", + "SMS_Enabled": "SMS ingeschakeld", "SMTP": "SMTP", - "SMTP_Host": "SMTP Host", + "SMTP_Host": "SMTP-host", "SMTP_Password": "SMTP-wachtwoord", - "SMTP_Port": "SMTP Poort", - "SMTP_Test_Button": "Test SMTP Instellingen", - "SMTP_Username": "SMTP Gebruikersnaam", - "Snippet_Added": "Gemaakt op%s", - "Snippet_Messages": "Fragmentboodschappen", + "SMTP_Port": "SMTP-poort", + "SMTP_Test_Button": "Test SMTP-instellingen", + "SMTP_Username": "SMTP-gebruikersnaam", + "Snippet_Added": "Gemaakt op %s", + "Snippet_Messages": "Snippet-berichten", "Snippet_name": "Fragmentnaam", - "snippet-message": "Snippetbericht", - "snippet-message_description": "Toestemming voor het maken van een fragmentboodschap", - "Snippeted_a_message": "Een fragment gemaakt __snippetLink__", + "snippet-message": "Snippet-bericht", + "snippet-message_description": "Toestemming om een snippet-bericht te maken", + "Snippeted_a_message": "Heeft een snippet-bericht __snippetLink__ gemaakt", "Social_Network": "Sociaal netwerk", "Sorry_page_you_requested_does_not_exist_or_was_deleted": "Sorry, de opgevraagde pagina bestaat niet of is verwijderd!", "Sort": "Soort", @@ -2893,6 +3611,7 @@ "Sound": "Geluid", "Sound_File_mp3": "Geluidsbestand (mp3)", "SSL": "SSL", + "Star": "Voeg aan favorieten toe", "Star_Message": "Markeer bericht", "Starred_Messages": "Gemarkeerde berichten", "Start": "Begin", @@ -2900,26 +3619,27 @@ "Start_Chat": "Begin chat", "Start_of_conversation": "Begin van het gesprek", "Start_OTR": "Start OTR", - "Start_video_call": "Begin video gesprek", - "Start_video_conference": "Start videoconferentie?", + "Start_video_call": "Start een videogesprek", + "Start_video_conference": "Videoconferentie starten?", "Start_with_s_for_user_or_s_for_channel_Eg_s_or_s": "Begin met %s voor gebruiker of %s voor kanaal. Bijv.: %s of %s", - "start-discussion_description": "Discussie starten", + "start-discussion_description": "Start de discussie", "start-discussion-other-user_description": "Discussie starten", - "Started_a_video_call": "Startte een video-oproep", - "Started_At": "gestart op", + "Started": "Begonnen", + "Started_a_video_call": "Is een videogesprek gestart", + "Started_At": "Begonnen om", "Statistics": "Statistieken", - "Statistics_reporting": "Stuur statistieken Rocket.Chat", + "Statistics_reporting": "Stuur statistieken naar Rocket.Chat", "Statistics_reporting_Description": "Door het verzenden van uw statistieken, zult u ons helpen bepalen hoeveel instanties van Rocket.Chat worden ingezet, maar ook hoe goed het systeem zich gedraagt, zodat we kunnen verder te verbeteren. Maak je geen zorgen, omdat er geen informatie over de gebruiker wordt verzonden en alle informatie die wij ontvangen wordt vertrouwelijk behandeld.", "Stats_Active_Guests": "Geactiveerde gasten", - "Stats_Active_Users": "Actieve gebruikers", + "Stats_Active_Users": "Geactiveerde gebruikers", "Stats_App_Users": "Rocket.Chat App-gebruikers", - "Stats_Avg_Channel_Users": "Gemiddeld aantal Kanaal Gebruikers", - "Stats_Avg_Private_Group_Users": "Gemiddeld aantal Privé Groep Gebruikers", + "Stats_Avg_Channel_Users": "Gemiddeld aantal kanaalgebruikers", + "Stats_Avg_Private_Group_Users": "Gemiddeld aantal privégroepgebruikers", "Stats_Away_Users": "Afwezige gebruikers", - "Stats_Max_Room_Users": "Maximaal aantal Kamer Gebruikers", - "Stats_Non_Active_Users": "Inactieve Gebruikers", + "Stats_Max_Room_Users": "Maximaal aantal kamergebruikers", + "Stats_Non_Active_Users": "Gedeactiveerde gebruikers", "Stats_Offline_Users": "Offline gebruikers", - "Stats_Online_Users": "Online Gebruikers", + "Stats_Online_Users": "Online gebruikers", "Stats_Total_Active_Apps": "Totaal aantal actieve apps", "Stats_Total_Active_Incoming_Integrations": "Totaal aantal actieve inkomende integraties", "Stats_Total_Active_Outgoing_Integrations": "Totaal aantal actieve uitgaande integraties", @@ -2944,151 +3664,187 @@ "Stats_Total_Users": "Totaal aantal gebruikers", "Status": "Toestand", "StatusMessage": "Statusbericht", + "StatusMessage_Change_Disabled": "Uw Rocket.Chat-beheerder heeft het wijzigen van statusberichten uitgeschakeld", "StatusMessage_Changed_Successfully": "Statusbericht succesvol gewijzigd.", + "StatusMessage_Placeholder": "Wat doe je op dit moment?", "StatusMessage_Too_Long": "Statusbericht moet korter zijn dan 120 tekens.", "Step": "Stap", "Stop_Recording": "Stop opname", "Store_Last_Message": "Laatste bericht opslaan", - "Store_Last_Message_Sent_per_Room": "Bewaar laatste bericht verzonden op elke kamer.", + "Store_Last_Message_Sent_per_Room": "Sla het laatste bericht op dat naar elke kamer is verzonden.", "Stream_Cast": "Stream Cast", "Stream_Cast_Address": "Stream Cast-adres", "Stream_Cast_Address_Description": "IP of host van je Rocket.Chat Central Stream Cast. Bijv. `192.168.1.1:3000` of `localhost:4000`", - "strike": "doorhalen", + "strike": "doorstreept", "Style": "Stijl", "Subject": "Onderwerp", "Submit": "Verzenden", "Success": "Succes", - "Success_message": "succes bericht", + "Success_message": "Succesbericht", + "Successfully_downloaded_file_from_external_URL_should_start_preparing_soon": "Bestand gedownload van externe URL, zou binnenkort mmoeten beginnen met voorbereiden", + "Suggestion_from_recent_messages": "Suggestie uit recente berichten", "Sunday": "Zondag", "Support": "Ondersteuning", + "Support_Cordova_App": "Ondersteuning van de Cordova-app", + "Support_Cordova_App_Alert": "Deze functie is verouderd en wordt verwijderd bij de volgende grote release", + "Support_Cordova_App_Description": "Geef de oude mobiele app, gebaseerd op Cordova-technologie, toegang tot de server die CORS voor sommige API's mogelijk maakt", "Survey": "Enquête", - "Survey_instructions": "Beoordeel elke vraag naar mate uw tevredenheid, 1 betekent dat u helemaal ontevreden bent en 5 betekent volledig tevreden.", + "Survey_instructions": "Beoordeel elke vraag op basis van uw tevredenheid, waarbij 1 inhoudt dat u volledig ontevreden bent en 5 dat u volledig tevreden bent.", "Symbols": "Symbolen", + "Sync": "Synchroniseren", "Sync / Import": "Synchroniseren / importeren", - "Sync_in_progress": "Bezig met synchronisatie", + "Sync_in_progress": "Synchronisatie bezig", "Sync_Interval": "Synchronisatie-interval", - "Sync_success": "Sync succes", - "Sync_Users": "Sync Gebruikers", - "System_messages": "Systeem berichten", - "Tag": "Label", + "Sync_success": "Synchronisatie geslaagd", + "Sync_Users": "Synchroniseer gebruikers", + "System_messages": "Systeemberichten", + "Tag": "Tag", + "Tag_removed": "Tag verwijderd", "Take_it": "Pak aan!", - "Target user not allowed to receive messages": "Target gebruiker die geen berichten mag ontvangen", - "TargetRoom": "Target Room", - "TargetRoom_Description": "De ruimte waar berichten worden verzonden die het gevolg zijn van het feit dat deze gebeurtenis wordt afgevuurd. Slechts één doelruimte is toegestaan en deze moet bestaan.", + "Target user not allowed to receive messages": "Doelgebruiker mag geen berichten ontvangen", + "TargetRoom": "Doelkamer", + "TargetRoom_Description": "De kamer waar berichten naartoe worden gestuurd die het resultaat zijn van het afvuren van deze gebeurtenis. Er is slechts één doelkamer toegestaan en deze moet bestaan.", "Team": "Team", - "Technology_Provider": "Technologieprovider", + "Technology_Provider": "Technologieleverancier", "Technology_Services": "Technologiediensten", "Telecom": "Telecom", + "Terms": "Voorwaarden", "Test_Connection": "Test verbinding", "Test_Desktop_Notifications": "Desktopmeldingen testen", "Texts": "Teksten", "Thank_you_exclamation_mark": "Dank je!", - "Thank_you_for_your_feedback": "Hartelijk dank voor uw feedback", + "Thank_you_for_your_feedback": "Bedankt voor je feedback", "The_application_name_is_required": "De naam van de applicatie is vereist", "The_channel_name_is_required": "De naam van het kanaal is vereist", "The_emails_are_being_sent": "De e-mails worden verzonden.", + "The_empty_room__roomName__will_be_removed_automatically": "De lege kamer __roomName__ wordt automatisch verwijderd.", "The_field_is_required": "Het veld %s is vereist.", - "The_image_resize_will_not_work_because_we_can_not_detect_ImageMagick_or_GraphicsMagick_installed_in_your_server": "Het beeld zal niet van grootte worden veranderd omdat we niet kunnen zien of Imagemagick of GraphicsMagick geïnstalleerd zijn op uw server.", + "The_image_resize_will_not_work_because_we_can_not_detect_ImageMagick_or_GraphicsMagick_installed_in_your_server": "Het wijzigen van de grootte van de afbeelding zal niet werken omdat we ImageMagick of GraphicsMagick niet kunnen detecteren die op uw server zijn geïnstalleerd.", "The_message_is_a_discussion_you_will_not_be_able_to_recover": "Het bericht is een discussie, u kunt de berichten niet herstellen!", "The_mobile_notifications_were_disabled_to_all_users_go_to_Admin_Push_to_enable_the_Push_Gateway_again": "De mobiele meldingen werden voor alle gebruikers uitgeschakeld, ga naar \"Admin > Push\" om de Push Gateway weer in te schakelen", - "The_redirectUri_is_required": "The redirectUri is required", - "The_server_will_restart_in_s_seconds": "De server wordt herstart in %s seconden", - "The_setting_s_is_configured_to_s_and_you_are_accessing_from_s": "De configuratie %s is ingesteld op %s en u gebruikt toegang vanaf %s!", - "The_user_will_be_removed_from_s": "De gebruiker zal worden verwijderd van %s", + "The_necessary_browser_permissions_for_location_sharing_are_not_granted": "De benodige browsermachtigingen voor het delen van locaties worden niet verleend", + "The_peer__peer__does_not_exist": "De peer __peer__ bestaat niet.", + "The_redirectUri_is_required": "De redirectUri is vereist", + "The_selected_user_is_not_a_monitor": "De geselecteerde gebruiker is geen monitor", + "The_selected_user_is_not_an_agent": "De geselecteerde gebruiker is geen agent", + "The_server_will_restart_in_s_seconds": "De server zal over %s seconden opnieuw opstarten", + "The_setting_s_is_configured_to_s_and_you_are_accessing_from_s": "De instelling %s is geconfigureerd op %s en u gebruikt %s!", + "The_user_s_will_be_removed_from_role_s": "De gebruiker %s wordt verwijderd uit rol %s", + "The_user_will_be_removed_from_s": "De gebruiker wordt verwijderd uit %s", "The_user_wont_be_able_to_type_in_s": "De gebruiker kan niet typen in %s", "Theme": "Thema", - "theme-color-attention-color": "Aandacht kleur", + "theme-color-attention-color": "Aandachtskleur", "theme-color-component-color": "Component kleur", - "theme-color-content-background-color": "Inhoud Achtergrondkleur", - "theme-color-custom-scrollbar-color": "Handmatige Scrollbarkleur", + "theme-color-content-background-color": "Inhoud achtergrondkleur", + "theme-color-custom-scrollbar-color": "Aangepaste scrollbalkkleur", "theme-color-error-color": "Foutkleur", - "theme-color-info-font-color": "Info Tekstkleur", - "theme-color-link-font-color": "Link Tekstkleur", - "theme-color-pending-color": "In afwachting van kleur", + "theme-color-info-font-color": "Info lettertypekleur", + "theme-color-link-font-color": "Link lettertypekleur", + "theme-color-pending-color": "Kleur voor in afwachting van", "theme-color-primary-action-color": "Primaire actiekleur", - "theme-color-primary-background-color": "Primaire Achtergrondkleur", - "theme-color-primary-font-color": "Primaire Tekstkleur", - "theme-color-rc-color-alert": "alarm", + "theme-color-primary-background-color": "Primaire achtergrondkleur", + "theme-color-primary-font-color": "Primaire lettertypekleur", + "theme-color-rc-color-alert": "Alert", "theme-color-rc-color-alert-light": "Waarschuwingslicht", - "theme-color-rc-color-alert-message-primary": "Primaire hoofd alert", - "theme-color-rc-color-alert-message-primary-background": "Primair Bericht Achtergrond", - "theme-color-rc-color-alert-message-secondary": "Secundaire alert bericht", - "theme-color-rc-color-alert-message-secondary-background": "Waarschuwingsbericht Secundaire achtergrond", - "theme-color-rc-color-alert-message-warning": "Alert bericht waarschuwing", - "theme-color-rc-color-alert-message-warning-background": "Alert bericht waarschuwing achtergrond", + "theme-color-rc-color-alert-message-primary": "Waarschuwingsbericht primair", + "theme-color-rc-color-alert-message-primary-background": "Waarschuwingsbericht primaire achtergrond", + "theme-color-rc-color-alert-message-secondary": "Waarschuwingsbericht secundair", + "theme-color-rc-color-alert-message-secondary-background": "Waarschuwingsbericht secundaire achtergrond", + "theme-color-rc-color-alert-message-warning": "Waarschuwingsbericht waarschuwing", + "theme-color-rc-color-alert-message-warning-background": "Waarschuwingsbericht waarschuwingsachtergrond", + "theme-color-rc-color-announcement-text": "Tekstkleur van aankondiging", + "theme-color-rc-color-announcement-background": "Achtergrondkleur van aankondiging", + "theme-color-rc-color-announcement-text-hover": "Tekstkleur voor hover van aankondiging", + "theme-color-rc-color-announcement-background-hover": "Hover van achtergrondkleur van aankondiging", "theme-color-rc-color-button-primary": "Knop Primair", "theme-color-rc-color-button-primary-light": "Knop Primair licht", "theme-color-rc-color-content": "Inhoud", "theme-color-rc-color-error": "Fout", - "theme-color-rc-color-error-light": "Fout licht", + "theme-color-rc-color-error-light": "Licht voor fout", "theme-color-rc-color-link-active": "Link actief", - "theme-color-rc-color-primary": "primair", - "theme-color-rc-color-primary-dark": "Primaire Dark", + "theme-color-rc-color-primary": "Primair", + "theme-color-rc-color-primary-background": "Primaire achtergrond", + "theme-color-rc-color-primary-dark": "Primair donker", "theme-color-rc-color-primary-darkest": "Primaire donkerste", "theme-color-rc-color-primary-light": "Primair licht", - "theme-color-rc-color-primary-light-medium": "Primair Licht Medium", - "theme-color-rc-color-primary-lightest": "Primaire lichtste", + "theme-color-rc-color-primary-light-medium": "Primair medium licht", + "theme-color-rc-color-primary-lightest": "Primaire lichtst", "theme-color-rc-color-success": "Succes", - "theme-color-rc-color-success-light": "Succeslicht", + "theme-color-rc-color-success-light": "Succes licht", "theme-color-secondary-action-color": "Secundaire actiekleur", - "theme-color-secondary-background-color": "Secondaire Achtergrondkleur", - "theme-color-secondary-font-color": "Secondaire Tekstkleur", - "theme-color-selection-color": "Selectiekleur", - "theme-color-status-away": "Afwezig Statuskleur", - "theme-color-status-busy": "Bezet Statuskleur", + "theme-color-secondary-background-color": "Secondaire achtergrondkleur", + "theme-color-secondary-font-color": "Secondaire lettertypekleur", + "theme-color-selection-color": "Selectie kleur", + "theme-color-status-away": "Statuskleur voor \"Afwezig\"", + "theme-color-status-busy": "Statuskleur voor \"Bezig\"", "theme-color-status-offline": "Offline statuskleur", - "theme-color-status-online": "Online Statuskleur", - "theme-color-success-color": "Succeskleur", - "theme-color-tertiary-font-color": "Tertiaire Tekstkleur ", + "theme-color-status-online": "Statuskleur voor \"Online\"", + "theme-color-success-color": "Succes kleur", + "theme-color-tertiary-font-color": "Tertiaire letterkleur", "theme-color-transparent-dark": "Transparant donker", "theme-color-transparent-darker": "Transparant donkerder", "theme-color-transparent-light": "Transparant licht", - "theme-color-transparent-lighter": "Transparante aansteker", - "theme-color-transparent-lightest": "Transparant Lichtst", - "theme-color-unread-notification-color": "Ongelezen Notificaties Kleur", + "theme-color-transparent-lighter": "Transparant lichter", + "theme-color-transparent-lightest": "Transparant lichtst", + "theme-color-unread-notification-color": "Kleur van ongelezen meldingen", "theme-custom-css": "Aangepaste CSS", "theme-font-body-font-family": "Lettertypefamilie van body", - "There_are_no_agents_added_to_this_department_yet": "Er zijn nog geen agenten aan deze afdeling toegevoegd.", + "There_are_no_agents_added_to_this_department_yet": "Er zijn nog geen agenten toegevoegd aan deze afdeling.", "There_are_no_applications": "Er zijn nog geen oAuth-applicaties toegevoegd.", "There_are_no_applications_installed": "Er zijn momenteel geen Rocket.Chat-applicaties geïnstalleerd.", + "There_are_no_available_monitors": "Er zijn geen beschikbare monitoren", + "There_are_no_departments_added_to_this_tag_yet": "Er zijn nog geen afdelingen aan deze tag toegevoegd", + "There_are_no_departments_added_to_this_unit_yet": "Er zijn nog geen afdelingen toegevoegd aan deze unit", + "There_are_no_departments_available": "Er zijn geen afdelingen beschikbaar", "There_are_no_integrations": "Er zijn geen integraties", - "There_are_no_personal_access_tokens_created_yet": "Er zijn nog geen Persoonlijke Toegangstokens gemaakt.", + "There_are_no_monitors_added_to_this_unit_yet": "Er zijn nog geen monitoren aan dit toestel toegevoegd", + "There_are_no_personal_access_tokens_created_yet": "Er zijn nog geen persoonlijke toegangstokens gemaakt.", "There_are_no_users_in_this_role": "Er zijn geen gebruikers met deze rol.", "There_is_one_or_more_apps_in_an_invalid_state_Click_here_to_review": "Er zijn een of meer apps in een ongeldige staat. Klik hier om het te bekijken.", + "This_agent_was_already_selected": "Deze agent was al geselecteerd", "This_conversation_is_already_closed": "Dit gesprek is al gesloten.", "This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password": "Dit e-mailadres is al gebruikt en is niet geverifieerd. Gelieve uw wachtwoord te wijzigen.", - "This_is_a_desktop_notification": "Dit is een desktop kennisgeving", + "This_is_a_desktop_notification": "Dit is een bureaubladmelding", "This_is_a_push_test_messsage": "Dit is een push-testbericht", + "This_message_was_rejected_by__peer__peer": "Dit bericht is afgewezen door __peer__ peer.", + "This_monitor_was_already_selected": "Deze monitor was al geselecteerd", "This_month": "Deze maand", "This_room_has_been_archived_by__username_": "Deze kamer is gearchiveerd door __username__", "This_room_has_been_unarchived_by__username_": "Deze kamer is uit het archief gehaald door __username__", "This_week": "Deze week", + "thread": "draad", + "Thread_message": "Heeft gereageerd op *__username__'s* bericht: _ __msg__ _", + "Threads": "Draden", "Thursday": "Donderdag", "Time_in_seconds": "Tijd in seconden", + "Timeout": "Time-out", "Timeouts": "Time-outs", + "Timezone": "Tijdzone", "Title": "Titel", "Title_bar_color": "Titelbalk kleur", "Title_bar_color_offline": "Titelbalkkleur offline", "Title_offline": "Titel offline", - "To": "naar", - "To_additional_emails": "Aan extra e-mails", - "To_install_RocketChat_Livechat_in_your_website_copy_paste_this_code_above_the_last_body_tag_on_your_site": "Om Rocket.Chat Livechat te installeren op uw website, kopiëert u de volgende code boven de laatste </body> html tag op uw web pagina's.", + "To": "Naar", + "To_additional_emails": "Op aanvullende e-mails", + "To_install_RocketChat_Livechat_in_your_website_copy_paste_this_code_above_the_last_body_tag_on_your_site": "Om Rocket.Chat Livechat op uw website te installeren, kopiëer & plakt u deze code boven de laatste </body>-tag op uw site.", "to_see_more_details_on_how_to_integrate": "voor meer informatie over hoe u kunt integreren.", - "To_users": "Aan Gebruikers", + "To_users": "Aan gebruikers", "Today": "Vandaag", - "Toggle_original_translated": "Origineel / vertaald omschakelen", - "Token_Access": "Toegang token", + "Toggle_original_translated": "Wisselen tussen origineel / vertaald", + "toggle-room-e2e-encryption": "Schakel kamer E2E-codering", + "Token": "Token", + "Token_Access": "Token-toegang", "Token_Controlled_Access": "Token gecontroleerde toegang", "Token_required": "Token vereist", "Tokenpass_Channel_Label": "Tokenpass-kanaal", "Tokenpass_Channels": "Tokenpass-kanalen", - "Tokens_Minimum_Needed_Balance": "Minimaal benodigde tokenbalans", - "Tokens_Minimum_Needed_Balance_Description": "Stel minimaal benodigde saldo in op elke token. Blanco of \"0\" voor geen limiet.", + "Tokens_Minimum_Needed_Balance": "Minimaal benodigde tokensaldo", + "Tokens_Minimum_Needed_Balance_Description": "Stel het minimaal benodigde saldo in op elk token. Blanco of \"0\" voor geen limiet.", "Tokens_Minimum_Needed_Balance_Placeholder": "Saldo waarde", "Tokens_Required": "Tokens vereist", - "Tokens_Required_Input_Description": "Typ een of meer tokens-activanamen, gescheiden door een komma.", + "Tokens_Required_Input_Description": "Typ een of meer namen van token, gescheiden door komma's.", "Tokens_Required_Input_Error": "Ongeldige getypte tokens.", - "Tokens_Required_Input_Placeholder": "Tokens namen van activa", + "Tokens_Required_Input_Placeholder": "Tokens activanamen", "Topic": "Onderwerp", "Total": "Totaal", "Total_abandoned_chats": "Totaal aantal verlaten chats", @@ -3097,111 +3853,158 @@ "Total_messages": "Totaal aantal berichten", "Total_Threads": "Totaal aantal draden", "Total_visitors": "Totaal aantal bezoekers", + "TOTP Invalid [totp-invalid]": "Code of wachtwoord ongeldig", + "TOTP_reset_email": "Twee Factor TOTP reset-melding", + "TOTP_Reset_Other_Key_Warning": "Als u het huidige twee factor TOTP reset, wordt de gebruiker uitgelogd. De gebruiker kan de twee factoren later opnieuw instellen.", "totp-disabled": "U heeft geen 2FA-login ingeschakeld voor uw gebruiker", - "Tourism": "Toerisme", - "Transcript_Enabled": "Vraag de bezoeker of ze een transcript willen nadat de chat is gesloten", - "Transcript_message": "Te tonen bericht bij vragen over transcript", + "totp-invalid": "Code of wachtwoord ongeldig", + "totp-required": "TOTP vereist", + "Transcript": "Transcriptie", + "Transcript_Enabled": "Vraag de bezoeker of ze een transcriptie willen nadat de chat is gesloten", + "Transcript_message": "Bericht dat moet worden weergegeven bij vragen over transcript", "Transcript_of_your_livechat_conversation": "Transcript van uw omnichannel-gesprek.", - "Translated": "vertaald", - "Translations": "vertaalwerk", - "Travel_and_Places": "Travel & Places", + "Transcript_Request": "Transcriptieverzoek", + "transfer-livechat-guest": "Transfer Livechat-gasten", + "Translate": "Vertalen", + "Translated": "Vertaald", + "Translations": "Vertalingen", + "Travel_and_Places": "Reizen & plaatsen", "Trigger_removed": "Trigger verwijderd", "Trigger_Words": "Trigger woorden", "Triggers": "Triggers", + "Troubleshoot": "Los problemen op", "Troubleshoot_Description": "Deze instellingen zijn alleen bedoeld om te worden ingeschakeld onder begeleiding van de Rocket.Chat ontwikkelings- of ondersteuningsteams. Raak ze niet aan als je niet weet wat je doet!", + "Troubleshoot_Disable_Data_Exporter_Processor": "Schakel Data Exporter Processor uit", + "Troubleshoot_Disable_Data_Exporter_Processor_Alert": "Deze instelling stopt de verwerking van alle exportverzoeken van gebruikers, zodat ze geen link meer ontvangen om hun gegevens te downloaden!", + "Troubleshoot_Disable_Instance_Broadcast": "Schakel Instant Broadcast uit", + "Troubleshoot_Disable_Instance_Broadcast_Alert": "Deze instelling voorkomt dat de Rocket.Chat-instanties events naar de andere instanties verzenden, dit kan synchronisatieproblemen en wangedrag veroorzaken!", + "Troubleshoot_Disable_Livechat_Activity_Monitor": "Schakel Livechat Activity Monitor uit", + "Troubleshoot_Disable_Livechat_Activity_Monitor_Alert": "Deze instelling stopt de verwerking van livechat-bezoekerssessies waardoor de statistieken niet meer correct werken!", "Troubleshoot_Disable_Notifications": "Meldingen uitschakelen", + "Troubleshoot_Disable_Notifications_Alert": "Deze instelling schakelt het notificatiesysteem volledig uit; geluiden, bureaubladmeldingen, mobiele meldingen en e-mails zullen stoppen!", + "Troubleshoot_Disable_Presence_Broadcast": "Schakel aanwezigheidsuitzending uit", + "Troubleshoot_Disable_Presence_Broadcast_Alert": "Deze instelling voorkomt dat alle instanties de statuswijzingen van de gebruikers naar hun clients sturen, waarbij alle gebruikers hun aanwezigheidsstatus behouden van de eerste lading!", + "Troubleshoot_Disable_Sessions_Monitor": "Schakel sessies monitor uit", + "Troubleshoot_Disable_Sessions_Monitor_Alert": "Deze instelling stopt de verwerking van gebruikerssessies waardoor de statistieken niet meer correct werken!", + "Troubleshoot_Disable_Statistics_Generator": "Schakel statistieken generator uit", + "Troubleshoot_Disable_Statistics_Generator_Alert": "Deze instelling stopt de verwerking van alle statistieken waardoor de info-pagina verouderd raakt totdat iemand op de Vernieuwen knop klikt, en kan ontbrekende informatie in het systeem verzoorzaken!", + "Troubleshoot_Disable_Workspace_Sync": "Schakel Workspace Sync uit", + "Troubleshoot_Disable_Workspace_Sync_Alert": "Deze instelling stopt de synchronisatie van deze server met Rocket.Chat's cloud en kan problemen veroorzaken met marktplaats- en bedrijfslicenties!", "True": "Waar", "Tuesday": "Dinsdag", "Turn_OFF": "Uitschakelen", "Turn_ON": "Aanzetten", - "Two Factor Authentication": "Twee-factor-authenticatie", - "Two-factor_authentication": "Twee-factor-authenticatie", - "Two-factor_authentication_disabled": "Twee-factor-authenticatie uitgeschakeld", - "Two-factor_authentication_enabled": "Twee-factor authenticatie ingeschakeld", - "Two-factor_authentication_is_currently_disabled": "Twee-factor-authenticatie is momenteel uitgeschakeld", - "Two-factor_authentication_native_mobile_app_warning": "WAARSCHUWING: Zodra u dit hebt ingeschakeld, kunt u niet inloggen op de native mobiele apps (Rocket.Chat +) met uw wachtwoord totdat ze de 2FA implementeren.", + "Two Factor Authentication": "Twee-factorenauthenticatie", + "Two-factor_authentication": "Tweefactorauthenticatie via TOTP", + "Two-factor_authentication_disabled": "Tweefactorauthenticatie uitgeschakeld", + "Two-factor_authentication_email": "Tweefactorauthenticatie via e-mail", + "Two-factor_authentication_email_is_currently_disabled": "Tweefactorauthentificatie via e-mail is momenteel uitgeschakeld", + "Two-factor_authentication_enabled": "Tweefactorauthenticatie ingeschakeld", + "Two-factor_authentication_is_currently_disabled": "Tweefactorauthenticatie via TOTP is momenteel uitgeschakeld", + "Two-factor_authentication_native_mobile_app_warning": "WAARSCHUWING: Zodra je dit hebt ingeschakeld, kun je niet inloggen op de native mobiele apps (Rocket.Chat+) met je wachtwoord totdat ze de 2FA implementeren.", "Type": "Type", "Types_and_Distribution": "Types en distributie", "Type_your_email": "Typ uw e-mail", - "Type_your_job_title": "Voer uw functie in", - "Type_your_message": "Typ uw bericht", + "Type_your_job_title": "Typ uw functietitel", + "Type_your_message": "Schrijf je bericht", "Type_your_name": "Typ je naam", "Type_your_new_password": "Typ uw nieuwe wachtwoord", - "Type_your_password": "Voer uw wachtwoord in", + "Type_your_password": "Typ uw wachtwoord", "Type_your_username": "Typ je gebruikersnaam", "UI_Allow_room_names_with_special_chars": "Sta speciale tekens toe in kamernamen", "UI_Click_Direct_Message": "Klik om een direct bericht aan te maken", "UI_Click_Direct_Message_Description": "Sla het openen van het profieltabblad over en ga rechtstreeks naar het gesprek", "UI_DisplayRoles": "Rollen tonen", "UI_Group_Channels_By_Type": "Groepeer kanalen op type", - "UI_Merge_Channels_Groups": "Samenvoegen particuliere groepen met kanalen", + "UI_Merge_Channels_Groups": "Voeg privégroepen samen met kanalen", "UI_Show_top_navbar_embedded_layout": "Toon bovenste navigatiebalk in geïntegreerde lay-out", "UI_Unread_Counter_Style": "Ongelezen tellerstijl", "UI_Use_Name_Avatar": "Gebruik de initialen van de volledige naam om een standaardavatar te genereren", "UI_Use_Real_Name": "Echte naam gebruiken", + "unable-to-get-file": "Kan bestand niet ophalen", "Unarchive": "Uit archief halen", - "unarchive-room": "Unarchive Room", - "unarchive-room_description": "Toestemming voor het uitpakken van kanalen", + "unarchive-room": "Kamer uit het archief halen", + "unarchive-room_description": "Toestemming om kanalen uit het archief te halen", + "Unavailable": "Niet beschikbaar", "Unblock_User": "Deblokkeer gebruiker", + "Uncheck_All": "Alles uitvinken", "Uncollapse": "Alles tonen", - "Unfavorite": "Verwijder favoriet", - "Unignore": "Negeer", - "Uninstall": "Uninstall", + "Undefined": "Ongedefinieerd", + "Unfavorite": "Favoriet verwijderen", + "Unfollow_message": "Bericht niet meer volgen", + "Unignore": "Niet meer negeren", + "Uninstall": "Verwijderen", + "Unit_removed": "Unit verwijderd", + "Unknown_Import_State": "Onbekende importstatus", "Unlimited": "Onbeperkt", - "Unmute_someone_in_room": "Laat iemand weer in de kamer praten", - "Unmute_user": "Laat iemand weer praten", + "Unmute_someone_in_room": "Schakel het dempen van iemand in de kamer uit", + "Unmute_user": "Dempen van gebruiker opheffen", "Unnamed": "Naamloos", + "Unpin": "Losmaken", "Unpin_Message": "Bericht niet meer vastzetten", + "unpinning-not-allowed": "Losmaken is niet toegestaan", "Unread": "Ongelezen", "Unread_Count": "Ongelezen aantal", - "Unread_Count_DM": "Ongelezen aantal voor directe berichten", - "Unread_Messages": "ongelezen berichten", + "Unread_Count_DM": "Ongelezen aantal voor privéberichten", + "Unread_Messages": "Ongelezen berichten", "Unread_on_top": "Ongelezen bovenaan", - "Unread_Rooms": "Ongelezen Kamers", - "Unread_Rooms_Mode": "Ongelezen Kamers Mode", - "Unread_Tray_Icon_Alert": "Ongelezen ladepictogramwaarschuwing", + "Unread_Rooms": "Ongelezen kamers", + "Unread_Rooms_Mode": "Ongelezen kamers-modus", + "Unread_Tray_Icon_Alert": "Waarschuwing in systeemvak voor ongelezen berichten", "Unstar_Message": "Verwijder markering", "Update": "Bijwerken", "Update_EnableChecker": "Update Checker inschakelen", "Update_EnableChecker_Description": "Controleert automatisch op nieuwe updates / belangrijke berichten van de Rocket.Chat-ontwikkelaars en ontvangt meldingen indien beschikbaar. De melding verschijnt één keer per nieuwe versie als een klikbare banner en als bericht van de Rocket.Cat-bot, beide alleen zichtbaar voor beheerders.", - "Update_LatestAvailableVersion": "Update laatste beschikbare versie", + "Update_every": "Update elke", + "Update_LatestAvailableVersion": "Update naar de laatste beschikbare versie", "Update_to_version": "Update naar __version__", - "Update_your_RocketChat": "Werk je Rocket.Chat bij", - "Updated_at": "Bijgewerkt om", + "Update_your_RocketChat": "Update je Rocket.Chat", + "Updated_at": "Bijgewerkt op", + "Upload": "Uploaden", + "Upload_app": "App uploaden", "Upload_file_description": "Bestandsomschrijving", "Upload_file_name": "Bestandsnaam", - "Upload_file_question": "Bestand uploaden?", - "Upload_Folder_Path": "Mappad uploaden", + "Upload_file_question": "Upload bestand?", + "Upload_Folder_Path": "Upload mappad", "Upload_From": "Uploaden van __name__", "Upload_user_avatar": "Upload avatar", "Uploading_file": "Bestand uploaden...", "Uptime": "Uptime", "URL": "URL", "URL_room_hash": "Schakel hash voor kamernaam in", + "URL_room_hash_description": "Aanbevolen om in te schakelen als de Jitsi-instantie geen verificatiemechanisme gebruikt.", "URL_room_prefix": "Voorvoegsel URL-kamer", + "URL_room_suffix": "URL kamer achtervoegsel", "Use_account_preference": "Gebruik accountvoorkeuren", "Use_Emojis": "Emojis gebruiken", "Use_Global_Settings": "Algemene instellingen gebruiken", "Use_initials_avatar": "Gebruik de initialen van uw gebruikersnaam", "Use_minor_colors": "Gebruik een klein kleurenpalet (standaardinstellingen erven hoofdkleuren)", + "Use_Room_configuration": "Overschrijft de serverconfiguratie en gebruikt kamerconfiguratie", + "Use_Server_configuration": "Gebruik serverconfiguratie", "Use_service_avatar": "Gebruik %s avatar", + "Use_this_response": "Gebruik dit antwoord", + "Use_response": "Gebruiker reactie", "Use_this_username": "Deze gebruikersnaam gebruiken", "Use_uploaded_avatar": "Gebruik geüploade avatar", "Use_url_for_avatar": "Gebruik url voor avatar", "Use_User_Preferences_or_Global_Settings": "Gebruik Gebruikersvoorkeuren of Algemene instellingen", "User": "Gebruiker", - "User Search": "Zoek gebruikers", + "User Search": "Gebruiker zoeken", "User Search (Group Validation)": "Gebruikers zoeken (groepsvalidatie)", "User__username__is_now_a_leader_of__room_name_": "Gebruiker __username__ is nu een leider van __room_name__", "User__username__is_now_a_moderator_of__room_name_": "Gebruiker __username__ is nu een moderator van __room_name__", "User__username__is_now_a_owner_of__room_name_": "Gebruiker __username__ is nu eigenaar van __room_name__", + "User__username__muted_in_room__roomName__": "Gebruiker __username__ gedempt in kamer __roomName__", "User__username__removed_from__room_name__leaders": "Gebruiker __username__ verwijderd uit __room_name__ leiders", "User__username__removed_from__room_name__moderators": "Gebruiker __username__ verwijderd uit __room_name__ moderators", "User__username__removed_from__room_name__owners": "Gebruiker __username__ verwijderd uit __room_name__ eigenaars", + "User__username__unmuted_in_room__roomName__": "Gebruiker __username__ unmuted in kamer __roomName__", "User_added": "Gebruiker toegevoegd", "User_added_by": "Gebruiker __user_added__ toegevoegd door __user_by__", - "User_added_successfully": "Nieuwe gebruiker succesvol toegevoegd", + "User_added_successfully": "Gebruiker succesvol toegevoegd", "User_and_group_mentions_only": "Alleen gebruikers- en groepsvermeldingen", + "User_created_successfully!": "Gebruiker succesvol aangemaakt!", "User_default": "Gebruiker standaard", "User_doesnt_exist": "Er bestaat geen gebruiker met de naam `@%s`.", "User_e2e_key_was_reset": "Gebruiker E2E-sleutel is succesvol gereset.", @@ -3209,7 +4012,7 @@ "User_has_been_deactivated": "Gebruiker is gedeactiveerd", "User_has_been_deleted": "Gebruiker is verwijderd", "User_has_been_ignored": "Gebruiker is genegeerd", - "User_has_been_muted_in_s": "Gebruiker is de mond gesnoerd in %s", + "User_has_been_muted_in_s": "Gebruiker is genegeerd in %s", "User_has_been_removed_from_s": "Gebruiker is verwijderd van %s", "User_has_been_unignored": "Gebruiker wordt niet langer genegeerd", "User_Info": "Gebruikers informatie", @@ -3218,9 +4021,10 @@ "User_is_no_longer_an_admin": "Gebruiker is niet langer een admin", "User_is_now_an_admin": "Gebruiker is nu een admin", "User_is_unblocked": "Gebruiker is gedeblokkeerd", - "User_joined_channel": "Heeft zich aangesloten bij het kanaal.", - "User_joined_channel_female": "Heeft zich aangesloten bij het kanaal.", - "User_joined_channel_male": "Heeft zich aangesloten bij het kanaal.", + "User_joined_channel": "Is lid geworden van het kanaal.", + "User_joined_channel_female": "Is lid geworden van het kanaal.", + "User_joined_channel_male": "Is lid geworden van het kanaal.", + "User_joined_conversation": "Heeft zich aangesloten bij het gesprek", "User_left": "Heeft het kanaal verlaten.", "User_left_female": "Heeft het kanaal verlaten.", "User_left_male": "Heeft het kanaal verlaten.", @@ -3228,213 +4032,255 @@ "User_management": "Gebruikersbeheer", "User_mentions_only": "Alleen gebruikersvermeldingen", "User_muted": "Gebruiker gedempt", - "User_muted_by": "Gebruiker __user_muted__ tot zwijgen gebracht door __user_by__.", + "User_muted_by": "Gebruiker __user_muted__ is door __user_by__ gedempt.", "User_not_found": "Gebruiker niet gevonden", "User_not_found_or_incorrect_password": "Gebruiker niet gevonden of wachtwoord onjuist", "User_or_channel_name": "Gebruikers- of kanaalnaam", - "User_Presence": "Aanwezigheid van de gebruiker", + "User_Presence": "Aanwezigheid van gebruiker", "User_removed": "Gebruiker verwijderd", "User_removed_by": "Gebruiker __user_removed__ verwijderd door __user_by__.", - "User_sent_a_message_on_channel": "__username__ heeft een bericht verzonden op __channel__", + "User_sent_a_message_on_channel": "__username__ heeft een bericht gestuurd op __channel__", "User_sent_a_message_to_you": "__username__ heeft je een bericht gestuurd", - "user_sent_an_attachment": "__user__ heeft een bijlage verzonden", + "user_sent_an_attachment": "__user__ heeft een bijlage gestuurd", "User_Settings": "Gebruikersinstellingen", - "User_unmuted_by": "Gebruiker __user_unmuted__ mag weer spreken dankzij __user_by__.", + "User_started_a_new_conversation": "__username__ begon een nieuw gesprek", + "User_unmuted_by": "Gebruiker __user_unmuted__ niet meer gedempt door __user_by__.", "User_unmuted_in_room": "Gebruiker kan weer spreken in de kamer", "User_updated_successfully": "Gebruiker succesvol bijgewerkt", "User_uploaded_a_file_on_channel": "__username__ heeft een bestand geüpload op __channel__", "User_uploaded_a_file_to_you": "__username__ heeft je een bestand gestuurd", - "User_uploaded_file": "Uploadde een bestand", - "User_uploaded_image": "Een afbeelding geüpload", + "User_uploaded_file": "Heeft een bestand geüpload", + "User_uploaded_image": "Heeft een afbeelding geüpload", "user-generate-access-token": "Gebruiker genereert toegangstoken", "user-generate-access-token_description": "Toestemming voor gebruikers om toegangstokens te genereren", - "UserData_EnableDownload": "Schakel download van gebruikersgegevens in", + "UserData_EnableDownload": "Schakel het downloaden van gebruikersgegevens in", "UserData_FileSystemPath": "Systeempad (geëxporteerde bestanden)", "UserData_FileSystemZipPath": "Systeempad (gecomprimeerd bestand)", - "UserData_MessageLimitPerRequest": "Berichtlimiet per aanvraag", + "UserData_MessageLimitPerRequest": "Berichtenlimiet per verzoek", "UserData_ProcessingFrequency": "Verwerkingsfrequentie (minuten)", "UserDataDownload": "Gebruikersgegevens downloaden", - "UserDataDownload_CompletedRequestExisted_Text": "Uw gegevensbestand was al gegenereerd. Controleer uw e-mailaccount voor de downloadkoppeling.", + "UserDataDownload_CompletedRequestExisted_Text": "Uw gegevensbestand is al gegenereerd. Controleer uw e-mailaccount voor de downloadlink.", "UserDataDownload_CompletedRequestExistedWithLink_Text": "Uw gegevensbestand is al gegenereerd. Klik hier om het te downloaden.", - "UserDataDownload_EmailBody": "Uw gegevensbestand is nu gereed om te downloaden. Klik op hierom het te downloaden.", + "UserDataDownload_EmailBody": "Uw gegevensbestand is nu klaar om te downloaden. Klik hierom het te downloaden.", "UserDataDownload_EmailSubject": "Uw gegevensbestand is klaar om te downloaden", "UserDataDownload_Requested": "Gevraagde bestand downloaden", - "UserDataDownload_Requested_Text": "Uw gegevensbestand wordt gegenereerd. Een link om het te downloaden zal naar uw e-mailadres worden verzonden wanneer het klaar is. Er zijn nog __pending_operations__ aanvragen die voor de uwe moeten worden uitgevoerd.", + "UserDataDownload_Requested_Text": "Uw gegevensbestand wordt gegenereerd. Een link om het te downloaden wodrt naar uw e-mailadres verstuurd wanneer het klaar is. Er zijn nog __pending_operations__ aanvragen die vóór de uwe moeten worden uitgevoerd.", "UserDataDownload_RequestExisted_Text": "Uw gegevensbestand wordt al gegenereerd. Een link om het te downloaden zal naar uw e-mailadres worden verzonden wanneer het klaar is. Er zijn nog __pending_operations__ operaties in de wachtrij die vóór de uwe moeten worden uitgevoerd.", "Username": "Gebruikersnaam", "Username_already_exist": "Gebruikersnaam bestaat al. Probeer een andere gebruikersnaam.", - "Username_and_message_must_not_be_empty": "Gebruikersnaam en bericht moeten ingevuld zijn.", + "Username_and_message_must_not_be_empty": "Gebruikersnaam en bericht mogen niet leeg zijn.", "Username_cant_be_empty": "De gebruikersnaam mag niet leeg zijn", - "Username_Change_Disabled": "Uw Rocket.Chat beheerder heeft het wijzigen van gebruikersnamen uitgeschakeld", - "Username_denied_the_OTR_session": "__username__ ontkende de OTR-sessie", - "Username_description": "De gebruikersnaam kan door anderen gebruikt worden om aan u te refereren.", + "Username_Change_Disabled": "Je Rocket.Chat beheerder heeft het wijzigen van gebruikersnamen uitgeschakeld", + "Username_denied_the_OTR_session": "__username__ heeft de OTR-sessie geweigerd", + "Username_description": "De gebruikersnaam wordt gebruikt om anderen in staat te stellen u in berichten te vermelden.", "Username_doesnt_exist": "De gebruikersnaam `%s` bestaat niet.", "Username_ended_the_OTR_session": "__username__ eindigde de OTR-sessie", "Username_invalid": "%s is geen geldige gebruikersnaam, gebruik uitsluitend letters, cijfers, punten, koppeltekens en underscores", "Username_is_already_in_here": "`@%s` is al hier.", - "Username_is_not_in_this_room": "De gebruiker `#%s` is niet in deze kamer.", - "Username_Placeholder": "Voer gebruikersnaam in ...", - "Username_title": "Registreer Gebruikersnaam", - "Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ wil OTR starten. Heeft u wilt accepteren?", + "Username_is_not_in_this_room": "De gebruiker `#%s` bevindt zich niet in deze kamer.", + "Username_Placeholder": "Voer gebruikersnamen in...", + "Username_title": "Registreer gebruikersnaam", + "Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ wil OTR starten. Wilt u accepteren?", "Users": "Gebruikers", "Users must use Two Factor Authentication": "Gebruikers moeten Two Factor Authentication gebruiken", "Users_added": "De gebruikers zijn toegevoegd", - "Users_in_role": "Gebruikers met rol", + "Users_and_rooms": "Gebruikers en kamers", + "Users_by_time_of_day": "Gebruikers op tijdstip van de dag", + "Users_in_role": "Gebruikers in rol", + "Users_key_has_been_reset": "De gebruikerssleutel is gereset", + "Users_reacted": "Gebruikers die reageerden", + "Users_TOTP_has_been_reset": "Het TOTP van de gebruiker is gereset", "Uses": "Toepassingen", "Uses_left": "Overblijvende toepassingen", - "UTF8_Names_Slugify": "UTF8 Names Slugify", - "UTF8_Names_Validation": "UTF8 Names Validation", - "UTF8_Names_Validation_Description": "Geen speciale tekens en spaties toestaan. U kunt - _ en. gebruiken maar niet aan het einde van de naam", + "Utilities": "Nutsbedrijven", + "UTF8_Names_Slugify": "UTF8-namen Slugify", + "UTF8_Names_Validation": "UTF8-naamvalidatie", + "UTF8_Names_Validation_Description": "RegEx die zal worden gebruikt om gebruikersnamen en kanaalnamen te valideren", "Validate_email_address": "E-mailadres valideren", + "Validation": "Validatie", "Value_messages": "__value__ berichten", + "Value_users": "__value__ gebruikers", "Verification": "Verificatie", - "Verification_Description": "U kunt de volgende tijdelijke aanduidingen gebruiken:[Verification_Url] voor de verificatie-URL.[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.", - "Verification_Email": "Klik op hierom uw account te verifiëren.", + "Verification_Description": "U kunt de volgende tijdelijke aanduidingen gebruiken:[Verification_Url] voor de verificatie-URL.[naam], [fname], [lname] voor de volledige naam, voornaam of achternaam van de gebruiker, respectievelijk.[email] voor het e-mailadres van de gebruiker.[Site_Name] en [Site_URL] voor respectievelijk de applicatienaam en URL.", + "Verification_Email": "Klik hierom uw e-mailadres te verifiëren.", "Verification_email_body": "U hebt met succes een account aangemaakt op [Site_Name]. Klik op de onderstaande knop om uw e-mailadres te bevestigen en de registratie te voltooien.", "Verification_email_sent": "Verificatie e-mail verzonden", "Verification_Email_Subject": "[Site_Name] - E-mailadresverificatie", - "Verified": "geverifieerd", - "Verify": "Controleren", - "Verify_your_email": "Controleer je email", + "Verified": "Geverifieerd", + "Verify": "Verifiëren", + "Verify_your_email": "Controleer je e-mailadres", + "Verify_your_email_for_the_code_we_sent": "Verifieer uw e-mail voor de code die we hebben verzonden", "Version": "Versie", + "Version_version": "Versie __version__", "Video Conference": "Videoconferentie", - "Video_Chat_Window": "video Chat", + "Video_Chat_Window": "Videochat", "Video_Conference": "Videoconferentie", - "Video_message": "Video bericht", - "Videocall_declined": "Videogesprek afgewezen.", + "Video_message": "Videoboodschap", + "Videocall_declined": "Videogesprek geweigerd.", "Videocall_enabled": "Videogesprek ingeschakeld", "Videos": "Videos", - "View_All": "Bekijk alles", + "View_All": "Bekijk alle leden", "View_Logs": "Logboeken bekijken", "View_mode": "Weergavemodus", + "View_original": "Bekijk origineel", "View_the_Logs_for": "Bekijk de logboeken voor: \"__name__\"", - "view-broadcast-member-list": "Ledenlijst in uitzendkamer weergeven", + "view-broadcast-member-list": "Bekijk de ledenlijst in de uitzendruimte", "view-c-room": "Bekijk openbaar kanaal", "view-c-room_description": "Toestemming om openbare kanalen te bekijken", + "view-canned-responses": "Bekijk standaardantwoorden", "view-d-room": "Directe berichten bekijken", "view-d-room_description": "Toestemming om directe berichten te bekijken", "view-full-other-user-info": "Bekijk volledige andere gebruikersinformatie", - "view-full-other-user-info_description": "Toestemming om het volledige profiel van andere gebruikers te bekijken, inclusief de aanmaakdatum van het account, de laatste keer inloggen, enz.", + "view-full-other-user-info_description": "Toestemming om het volledige profiel van andere gebruikers te bekijken, inclusief aanmaakdatum van het account, laatste login, enz.", "view-history": "Bekijk geschiedenis", "view-history_description": "Toestemming om de kanaalgeschiedenis te bekijken", - "view-join-code": "Bekijk Join Code", - "view-join-code_description": "Toestemming om de kanaal join-code te bekijken", - "view-joined-room": "Bekijk Joined Room", - "view-joined-room_description": "Toestemming om de momenteel gekoppelde kanalen te bekijken", + "view-join-code": "Bekijk de deelnamecode", + "view-join-code_description": "Toestemming om de kanaalverbindingscode te bekijken", + "view-joined-room": "Bekijk toegetreden kamers", + "view-joined-room_description": "Toestemming om de momenteel aangesloten kanalen te bekijken", "view-l-room": "Bekijk omnichannel-kamers", "view-l-room_description": "Toestemming om omnichannel-kamers te bekijken", "view-livechat-analytics": "Omnichannel analytics bekijken", "view-livechat-departments": "Bekijk omnichannel-afdelingen", "view-livechat-manager": "Bekijk omnichannel manager", "view-livechat-manager_description": "Toestemming om andere omnichannel-managers te bekijken", + "view-livechat-monitor": "Bekijk livechat-monitoren", "view-livechat-queue": "Omnichannel-wachtrij bekijken", "view-livechat-room-closed-by-another-agent": "Bekijk de omnichannel-kamers die door een andere agent gesloten zijn", "view-livechat-room-closed-same-department": "Bekijk omnichannel-kamers die gesloten zijn door een andere agent uit dezelfde afdeling", "view-livechat-rooms": "Bekijk omnichannel-kamers", "view-livechat-rooms_description": "Toestemming om andere omnichannel-kamers te bekijken", + "view-livechat-unit": "Bekijk livechat-eenheden", "view-logs": "Logboeken bekijken", "view-logs_description": "Toestemming om de serverlogboeken te bekijken", "view-other-user-channels": "Bekijk andere gebruikerskanalen", "view-other-user-channels_description": "Toestemming om kanalen te bekijken die eigendom zijn van andere gebruikers", - "view-outside-room": "View Outside Room", + "view-outside-room": "Bekijk buitenkamer", + "view-outside-room_description": "Toestemming om gebruikers buiten de huidige ruimte te bekijken", "view-p-room": "Bekijk privékamer", - "view-p-room_description": "Toestemming om privé-kanalen te bekijken", + "view-p-room_description": "Toestemming om privékanalen te bekijken", "view-privileged-setting": "Bekijk bevoorrechte instellingen", "view-privileged-setting_description": "Toestemming om instellingen te bekijken", - "view-room-administration": "Bekijk Room Administration", - "view-room-administration_description": "Toestemming voor het bekijken van openbare, privé- en directe berichtstatistieken. Omvat niet de mogelijkheid om gesprekken of archieven te bekijken", - "view-statistics": "Statistieken bekijken", - "view-statistics_description": "Toestemming voor het bekijken van systeemstatistieken, zoals het aantal ingelogde gebruikers, het aantal kamers, informatie over het besturingssysteem", - "view-user-administration": "Gebruikersbeheer bekijken", - "view-user-administration_description": "Toestemming voor gedeeltelijke, alleen-lezen lijstweergave van andere gebruikersaccounts die momenteel in het systeem zijn aangemeld. Er is geen gebruikersaccountinformatie toegankelijk met deze toestemming", - "Viewing_room_administration": "room administratie bekijken", + "view-room-administration": "Bekijk kamerbeheer", + "view-room-administration_description": "Toestemming om statistieken van openbare, privé- en directe berichten te bekijken. Bevat niet de mogelijkheid om gesprekken of archieven te bekijken", + "view-statistics": "Bekijk statistieken", + "view-statistics_description": "Toestemming om systeemstatistieken te bekijken, zoals het aantal aangemelde gebruikers, het aantal kamers, informatie over het besturingssysteem", + "view-user-administration": "Bekijk gebruikersbeheer", + "view-user-administration_description": "Toestemming voor gedeeltelijke, alleen-lezen lijstweergave van andere gebruikersaccounts die momenteel in het systeem zijn aangemeld. Met deze toestemming is geen gebruikersaccountinformatie toegankelijk", + "Viewing_room_administration": "Kameradministratie bekijken", "Visibility": "Zichtbaarheid", "Visible": "Zichtbaar", - "Visit_Site_Url_and_try_the_best_open_source_chat_solution_available_today": "Ga naar __Site_URL__ en probeer de beste open-sourcechatoplossing die vandaag beschikbaar is!", + "Visit_Site_Url_and_try_the_best_open_source_chat_solution_available_today": "Bezoek __Site_URL__ en probeer de beste open source chatoplossing die vandaag beschikbaar is!", "Visitor": "Bezoeker", - "Visitor_Info": "bezoeker Info", + "Visitor_Email": "E-mail bezoeker", + "Visitor_Info": "Bezoekersinfo", + "Visitor_message": "Bezoekersberichten", "Visitor_Name": "Bezoekersnaam", "Visitor_Name_Placeholder": "Voer een bezoekersnaam in...", - "Visitor_Navigation": "bezoeker Navigatie", - "Visitor_page_URL": "Bezoeker URL", - "Visitor_time_on_site": "Bezoeker tijd aanwezig op de site", + "Visitor_Navigation": "Bezoekersnavigatie", + "Visitor_page_URL": "URL van bezoekerspagina", + "Visitor_time_on_site": "Bezoeker tijd op de site", "Wait_activation_warning": "Voordat u kunt inloggen, moet uw account handmatig worden geactiveerd door een beheerder.", - "Warnings": "waarschuwingen", + "Waiting_queue": "Wachtrij", + "Waiting_queue_message": "Wachtrijbericht", + "Waiting_queue_message_description": "Bericht dat aan de bezoekers wordt getoond wanneer ze in de wachtrij komen", + "Warning": "Waarschuwing", + "Warnings": "Waarschuwingen", + "WAU_value": "WAU __value__", + "We_appreciate_your_feedback": "Wij waarderen uw feedback", "We_are_offline_Sorry_for_the_inconvenience": "We zijn offline. Excuses voor het ongemak.", - "We_have_sent_password_email": "Wij hebben u een e-mail gestuurd met herstel instructies voor uw wachtwoord. Als u deze e-mail niet snel ontvangt, ook niet in uw spam-folder, kom dan terug en probeer het opnieuw.", - "We_have_sent_registration_email": "Wij hebben een e-mail gestuurd om uw registratie te bevestigen. Als u deze e-mail niet snel ontvangt, ook niet in uw spam-folder, kom dan terug en probeer het opnieuw.", - "Webdav Integration": "Webdav-integratie", + "We_have_sent_password_email": "Wij hebben u een e-mail gestuurd met instructies voor het opnieuw instellen van uw wachtwoord. Als u binnenkort geen e-mail ontvangt, kom dan terug en probeer het opnieuw.", + "We_have_sent_registration_email": "Wij hebben u een e-mail gestuurd om uw registratie te bevestigen. Als u binnenkort geen e-mail ontvangt, kom dan terug en probeer het opnieuw.", + "Webdav Integration": "WebDAV-integratie", "WebDAV_Accounts": "WebDAV-accounts", "Webdav_add_new_account": "Voeg een nieuw WebDAV-account toe", - "Webdav_Integration_Enabled": "Webdav-integratie ingeschakeld", + "Webdav_Integration_Enabled": "WebDAV-integratie ingeschakeld", "Webdav_Password": "WebDAV-wachtwoord", - "Webdav_Server_URL": "WebDAV Server Access-URL", + "Webdav_Server_URL": "Toegangs-URL voor WebDAV-server", "Webdav_Username": "WebDAV-gebruikersnaam", "webdav-account-saved": "WebDAV-account opgeslagen", + "webdav-account-updated": "WebDAV-account bijgewerkt", "Webhook_Details": "WebHook details", - "Webhook_URL": "webhook URL", + "Webhook_URL": "Webhook-URL", "Webhooks": "Webhooks", - "WebRTC_direct_audio_call_from_%s": "Directe audio-oproep van%s", - "WebRTC_direct_video_call_from_%s": "Direct videogesprek van%s", - "WebRTC_Enable_Channel": "Toestaan voor openbare kanalen", - "WebRTC_Enable_Direct": "Toestaan directe berichten", - "WebRTC_Enable_Private": "Toestaan voor privé-berichten", - "WebRTC_group_audio_call_from_%s": "Groeps-audio-oproep van%s", - "WebRTC_group_video_call_from_%s": "Groepsvideogesprek van%s", - "WebRTC_monitor_call_from_%s": "Oproep van%s controleren", + "WebRTC_direct_audio_call_from_%s": "Directe audiogesprek van %s", + "WebRTC_direct_video_call_from_%s": "Direct videogesprek van %s", + "WebRTC_Enable_Channel": "Inschakelen voor openbare kanalen", + "WebRTC_Enable_Direct": "Inschakelen voor privéberichten", + "WebRTC_Enable_Private": "Inschakelen voor privékanalen", + "WebRTC_group_audio_call_from_%s": "Groepsaudiogesprek van %s", + "WebRTC_group_video_call_from_%s": "Groepsvideogesprek van %s", + "WebRTC_monitor_call_from_%s": "Monitor oproep van %s", "WebRTC_Servers": "STUN / TURN Servers", - "WebRTC_Servers_Description": "Een lijst van STUN en TURN servers gescheiden door een komma. Gebruikersnaam, wachtwoord en de poort zijn toegestaan in het formaat `gebruikersnaam: wachtwoord @ stun: host: port` of` gebruikersnaam: wachtwoord @ beurt: host: port`.", + "WebRTC_Servers_Description": "Een lijst met STUN- en TURN-servers gescheiden door komma's. Gebruikersnaam, wachtwoord en poort zijn toegestaan in de indeling `gebruikersnaam: wachtwoord@stun:host:poort` of `gebruikersnaam:wachtwoord@turn:host:poort`.", "Website": "Website", "Wednesday": "Woensdag", + "Weekly_Active_Users": "Wekelijks actieve gebruikers", "Welcome": "Welkom %s.", "Welcome_to": "Welkom bij __Site_Name__", "Welcome_to_the": "Welkom bij de", - "Why_do_you_want_to_report_question_mark": "Waarom wil je melden?", + "When": "Wanneer", + "When_a_line_starts_with_one_of_there_words_post_to_the_URLs_below": "Als een regel met een van deze worden begint, post deze dan op de onderstaande URL('s)", + "When_is_the_chat_busier?": "Wanneer is de chat drukker?", + "Where_are_the_messages_being_sent?": "Waar worden de berichten naartoe gestuurd?", + "Why_did_you_chose__score__": "Waarom koos je voor __score__?", + "Why_do_you_want_to_report_question_mark": "Waarom wil je rapporteren?", + "Will_Appear_In_From": "Verschijnt in de Van: koptekst van e-mails die u verzendt.", "will_be_able_to": "zal in staat zijn om", + "Will_be_available_here_after_saving": "Zal hier beschikbaar zijn na het opslaan.", + "Without_priority": "Zonder prioriteit", "Worldwide": "Wereldwijd", - "Would_you_like_to_return_the_inquiry": "Wilt u het onderzoek retourneren?", + "Would_you_like_to_return_the_inquiry": "Wilt u de aanvraag retourneren?", "Yes": "Ja", "Yes_archive_it": "Ja, archiveer het!", "Yes_clear_all": "Ja, alles wissen!", + "Yes_deactivate_it": "Ja, deactiveer het!", "Yes_delete_it": "Ja, verwijder het!", "Yes_hide_it": "Ja, verberg het!", - "Yes_leave_it": "Ja, verlaat het!", - "Yes_mute_user": "Ja, snoer gebruiker de mond!", + "Yes_leave_it": "Ja, laat het!", + "Yes_mute_user": "Ja, demp gebruiker!", "Yes_prune_them": "Ja, snoei ze!", "Yes_remove_user": "Ja, verwijder gebruiker!", - "Yes_unarchive_it": "Ja, verwijder het uit het archief!", + "Yes_unarchive_it": "Ja, zet het uit het archief!", "yesterday": "gisteren", - "Yesterday": "gisteren", + "Yesterday": "Gisteren", "You": "U", "you_are_in_preview_mode_of": "U bevindt zich in de previewmomdus van het kanaal #__room_name__", + "you_are_in_preview_mode_of_incoming_livechat": "U bevindt zich in de preview-modus van deze chat", "You_are_logged_in_as": "Je bent ingelogd als", "You_are_not_authorized_to_view_this_page": "U bent niet bevoegd om deze pagina te bekijken.", - "You_can_change_a_different_avatar_too": "U kunt de afbeelding die bij berichten gebruikt wordt vervangen.", + "You_can_change_a_different_avatar_too": "U kunt de avatar die is gebruikt om te posten vanuit deze integratie overschrijven.", + "You_can_close_this_window_now": "U kunt dit venster nu sluiten.", "You_can_search_using_RegExp_eg": "U kunt zoeken met behulp van reguliere expressie, bv /^text$/i", - "You_can_use_an_emoji_as_avatar": "U kunt ook een emoji gebruiken als een afbeelding.", + "You_can_use_an_emoji_as_avatar": "U kunt ook een emoji als avatar gebruiken.", "You_can_use_webhooks_to_easily_integrate_livechat_with_your_CRM": "Je kunt webhooks gebruiken om omnichannel eenvoudig te integreren met uw CRM.", "You_cant_leave_a_livechat_room_Please_use_the_close_button": "Je kunt een omnichannel kamer niet verlaten. Gelieve gebruik te maken van de sluitknop.", - "You_have_been_muted": "Je bent tot zwijgen gebracht in deze kamer.", + "You_have_a_new_message": "Je hebt een nieuw bericht", + "You_have_been_muted": "Je bent gedempt en kan niet meer spreken in deze kamer.", "You_have_n_codes_remaining": "Je hebt __number__-codes over.", "You_have_not_verified_your_email": "Je hebt uw e-mailadres niet geverifieerd.", - "You_have_successfully_unsubscribed": "U bent uitgeschreven van onze mailinglijst.", - "You_have_to_set_an_API_token_first_in_order_to_use_the_integration": "U moet eerst een API-token instellen om de integratie te gebruiken.", - "You_must_join_to_view_messages_in_this_channel": "Je moet meedoen om berichten op dit kanaal te bekijken", - "You_need_confirm_email": "U dient uw e-mail te bevestigen on in te kunnen loggen!", - "You_need_install_an_extension_to_allow_screen_sharing": "U moet een uitbreiding op uw browser installeren om het delen van het scherm mogelijk te maken", - "You_need_to_change_your_password": "Je moet je paswoord wijzigen", - "You_need_to_type_in_your_password_in_order_to_do_this": "Je nodig hebt om te typen in uw wachtwoord in om dit te doen!", - "You_need_to_type_in_your_username_in_order_to_do_this": "Je nodig hebt om te typen in uw gebruikersnaam in om dit te doen!", + "You_have_successfully_unsubscribed": "U heeft zich met succes afgemeld van onze mailinglijst.", + "You_have_to_set_an_API_token_first_in_order_to_use_the_integration": "U moet eerst een API-token instellen om de integratie te kunnen gebruiken.", + "You_must_join_to_view_messages_in_this_channel": "Je moet lid worden om berichten in dit kanaal te bekijken", + "You_need_confirm_email": "U moet uw e-mailadres bevestigen om in te kunnen loggen!", + "You_need_install_an_extension_to_allow_screen_sharing": "U moet een extensie installeren om het delen van het scherm toe te staan", + "You_need_to_change_your_password": "Je moet je wachtwoord wijzigen", + "You_need_to_type_in_your_password_in_order_to_do_this": "Hiervoor moet u uw wachtwoord invoeren!", + "You_need_to_type_in_your_username_in_order_to_do_this": "U moet uw gebruikersnaam invoeren om dit te doen!", "You_need_to_verifiy_your_email_address_to_get_notications": "U moet uw e-mailadres verifiëren om meldingen te ontvangen", - "You_need_to_write_something": "Je nodig hebt om iets te schrijven!", + "You_need_to_write_something": "Je moet iets schrijven!", "You_reached_the_maximum_number_of_guest_users_allowed_by_your_license": "U heeft het maximale aantal gastgebruikers dat is toegestaan door uw licentie bereikt.", "You_should_inform_one_url_at_least": "U moet ten minste één URL definiëren.", "You_should_name_it_to_easily_manage_your_integrations": "Je moet het een naam geven om je integraties gemakkelijk te beheren.", - "You_will_not_be_able_to_recover": "Dit bericht zal niet meer te herstellen zijn!", - "You_will_not_be_able_to_recover_file": "Je kunt dit bestand niet terughalen!", + "You_will_be_asked_for_permissions": "U wordt om toestemming gevraagd", + "You_will_not_be_able_to_recover": "U kunt dit bericht niet herstellen!", + "You_will_not_be_able_to_recover_email_inbox": "U kunt deze e-mailinbox niet herstellen", + "You_will_not_be_able_to_recover_file": "U kunt dit bestand niet herstellen!", "You_wont_receive_email_notifications_because_you_have_not_verified_your_email": "Je ontvangt geen e-mailmeldingen omdat je jouw e-mailadres niet hebt geverifieerd.", + "Your_e2e_key_has_been_reset": "Jouw e2e-sleutel werd gereset.", + "Your_email_address_has_changed": "Uw e-mailadres werd veranderd.", "Your_email_has_been_queued_for_sending": "Uw e-mail staat in de wachtrij voor het verzenden", - "Your_entry_has_been_deleted": "Uw bericht is verwijderd.", + "Your_entry_has_been_deleted": "Uw invoer is verwijderd.", "Your_file_has_been_deleted": "Je bestand is verwijderd.", "Your_invite_link_will_expire_after__usesLeft__uses": "Uw uitnodigingslink vervalt na __usesLeft__ toepassingen.", "Your_invite_link_will_expire_on__date__": "Uw uitnodigingslink vervalt op __date__.", @@ -3445,7 +4291,11 @@ "your_message_optional": "uw bericht (optioneel)", "Your_new_email_is_email": "Uw nieuwe e-mailadres is [email].", "Your_password_is_wrong": "Je wachtwoord is verkeerd!", + "Your_password_was_changed_by_an_admin": "Uw wachtwoord werd gewijzigd door een admin.", "Your_push_was_sent_to_s_devices": "Je push werd verzonden naar %s apparaten", + "Your_question": "Uw vraag", "Your_server_link": "Uw serverlink", + "Your_temporary_password_is_password": "Uw tijdelijke wachtwoord is [password].", + "Your_TOTP_has_been_reset": "Uw Two Factor TOTP werd gereset.", "Your_workspace_is_ready": "Je werkruimte is klaar voor gebruik 🎉" } \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/no.i18n.json b/packages/rocketchat-i18n/i18n/no.i18n.json index 75c591515af7..7e77fd8c11d6 100644 --- a/packages/rocketchat-i18n/i18n/no.i18n.json +++ b/packages/rocketchat-i18n/i18n/no.i18n.json @@ -220,6 +220,7 @@ "Accounts_UserAddedEmail_Description": "Du kan bruke følgende plassholdere: [navn], [fname], [lname] for brukerens fulle navn, fornavn eller etternavn.[email] for brukerens e-postadresse.[passord] for brukerens passord.[Site_Name] og [Site_URL] for henholdsvis programnavnet og nettadressen.", "Accounts_UserAddedEmailSubject_Default": "Du har blitt lagt til i [Site_Name]", "Activate": "Aktiver", + "Active": "Aktiv", "Active_users": "Aktive brukere", "Activity": "Aktivitet", "Add": "Legg til", @@ -254,7 +255,6 @@ "Admin_Info": "Admin Info", "Administration": "Administrasjon", "Adult_images_are_not_allowed": "Voksenbilder er ikke tillatt", - "Advocacy": "Beslutningspåvirkning", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Etter OAuth2-godkjenning, blir brukerne omdirigert til denne nettadressen", "Agent": "Agent", "Agent_added": "Lagt til agent", @@ -612,7 +612,6 @@ "Connection_Closed": "Tilkoblingen er stengt", "Connection_Reset": "Tilbakestilling av tilkobling", "Consulting": "Consulting", - "Consumer_Goods": "Forbruksvarer", "Contains_Security_Fixes": "Inneholder sikkerhetsoppdateringer", "Content": "Innhold", "Continue": "Fortsette", @@ -1268,6 +1267,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV mappebane som filene skal lastes opp til", "FileUpload_Webdav_Username": "WebDAV Brukernavn", "Filter": "Filter", + "Filters": "Filtre", "Financial_Services": "Finansielle tjenester", "First_Channel_After_Login": "Første kanal etter innlogging", "Flags": "Flags", @@ -1336,8 +1336,6 @@ "Hash": "hash", "Header": "Overskrift", "Header_and_Footer": "Topptekst og bunntekst", - "Healthcare_and_Pharmaceutical": "Healthcare / Farmasøytisk", - "Help_Center": "Hjelpesenter", "Helpers": "Hjelpere", "Hex_Color_Preview": "Hex-fargeforhåndsvisning", "Hidden": "skjult", @@ -1357,6 +1355,7 @@ "Highlights_How_To": "For å bli varslet når noen nevner et ord eller en setning, legg den til her. Du kan skille ord eller setninger med kommaer. Høydeord Ordene er ikke sosialfølsomme.", "Highlights_List": "Fremhev ord", "History": "Historie", + "Home": "Hjem", "Host": "Vert", "hours": "timer", "Hours": "timer", @@ -2138,7 +2137,6 @@ "Public": "Offentlig", "Public_Channel": "Offentlig kanal", "Public_Community": "Offentlig fellesskap", - "Public_Relations": "PR", "Push": "Trykk", "Push_apn_cert": "APN-sertifisering", "Push_apn_dev_cert": "APN Dev Cert", @@ -2647,7 +2645,6 @@ "Total_Discussions": "Totalt antall diskusjoner", "Total_messages": "Totalt antall meldinger", "Total_Threads": "Totalt antall tråder", - "Tourism": "Turisme", "Transcript_Enabled": "Spør besøkende hvis de vil ha en transkripsjon etter at Chat er lukket", "Transcript_message": "Melding til å vise når du spør om transkripsjon", "Transcript_of_your_livechat_conversation": "Transkripsjon av livechat-samtalen.", diff --git a/packages/rocketchat-i18n/i18n/pl.i18n.json b/packages/rocketchat-i18n/i18n/pl.i18n.json index b6ef7f4eac06..893d5a95c024 100644 --- a/packages/rocketchat-i18n/i18n/pl.i18n.json +++ b/packages/rocketchat-i18n/i18n/pl.i18n.json @@ -240,6 +240,7 @@ "Accounts_Verify_Email_For_External_Accounts": "Weryfikuj email dla zewnętrznych kont", "Action_required": "Wymagana akcja", "Activate": "Aktywuj", + "Active": "Aktywny", "Active_users": "Aktywni użytkownicy", "Activity": "Aktywność", "Add": "Dodaj", @@ -277,7 +278,6 @@ "Admin_Info": "Informacje administracyjne", "Administration": "Administracja", "Adult_images_are_not_allowed": "Obrazy dla dorosłych nie są dozwolone", - "Advocacy": "Adwokaci", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Po uwierzytelnieniu OAuth2, użytkownik zostanie przekierowany na ten adres URL", "Agent": "Agent", "Agent_added": "Agent dodany", @@ -836,7 +836,6 @@ "Connection_success": "Połączenie z LDAP zakończone powodzeniem", "Connectivity_Services": "Usługi łączności", "Consulting": "Ordynacyjny", - "Consumer_Goods": "Dobra konsumpcyjne", "Contact": "Kontakt", "Contact_Chat_History": "Historia czatu kontaktu", "Contains_Security_Fixes": "Zawiera poprawki bezpieczeństwa", @@ -1147,8 +1146,8 @@ "Custom_Emoji_Has_Been_Deleted": "Własne emoji usunięty", "Custom_Emoji_Info": "Niestandardowa informacja o emotikonie", "Custom_Emoji_Updated_Successfully": "Własny emoji zaktualizowany poprawnie", - "Custom_Field_Removed": "Pole niestandardowe usunięte", "Custom_Fields": "Pola niestandardowe", + "Custom_Field_Removed": "Pole niestandardowe usunięte", "Custom_oauth_helper": "Przy konfiguracji dostawcy OAuth będziesz musiał podać zwrotny adres URL (Callback). Użyj adresu %s.", "Custom_oauth_unique_name": "Nazwa własnego serwisu OAuth", "Custom_Script_Logged_In": "Skrypt dla zalogowanych użytkowników", @@ -1735,6 +1734,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Ścieżka folderu WebDAV, do której pliki mają być przesłane", "FileUpload_Webdav_Username": "Nazwa użytkownika WebDAV", "Filter": "Filtr", + "Filters": "Filtry", "Filters_applied": "Zastosowane filtry", "Financial_Services": "Usługi finansowe", "First_Channel_After_Login": "Pierwszy kanał po zalogowaniu", @@ -1835,8 +1835,6 @@ "Hash": "Hash", "Header": "Nagłówek", "Header_and_Footer": "Nagłówek i stopka", - "Healthcare_and_Pharmaceutical": "Opieka zdrowotna / farmaceutyczna", - "Help_Center": "Centrum pomocy", "Helpers": "Pomocnicy", "Here_is_your_authentication_code": "Oto twój kod uwierzytelniający:", "Hex_Color_Preview": "Podgląd koloru heksadecymalnego", @@ -2984,7 +2982,6 @@ "Public_Channel": "Kanał publiczny", "Public_Channels": "Kanały publiczne", "Public_Community": "Społeczność publiczna", - "Public_Relations": "Relacje Publiczne", "Public_URL": "Publiczny URL", "Purchase_for_free": "Za darmo", "Purchase_for_price": "Kup za $% s", @@ -3712,7 +3709,6 @@ "totp-disabled": "Nie masz włączonego loginu 2FA dla swojego użytkownika", "totp-invalid": "Kod lub hasło niepoprawne", "totp-required": "TOTP wymagane", - "Tourism": "Turystyka", "Transcript": "Transkrypt", "Transcript_Enabled": "Zapytaj odwiedzających czy potrzebują transkryptu rozmowy po jej zakończeniu.", "Transcript_message": "Wiadomość do wyświetlenia przy zapytaniu o transkrypt.", diff --git a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json index bac84a925127..e50ddf1dca2d 100644 --- a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json @@ -235,6 +235,7 @@ "Add_monitor": "Adicionar Monitor", "Add_Reaction": "Adicionar reação", "Add_Role": "Adicionar Role", + "Add_Sender_To_ReplyTo": "Adicionar Remetente ao campo \"Responder para\"", "Add_user": "Adicionar usuário", "Add_User": "Adicionar Usuário", "Add_users": "Adicionar usuários", @@ -260,7 +261,6 @@ "Admin_Info": "Informação de administração", "Administration": "Administração", "Adult_images_are_not_allowed": "Imagens com conteúdo adulto não são permitidas", - "Advocacy": "Apoio dado", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Após a autenticação OAuth2, os usuários serão redirecionados para esta URL", "Agent": "Agente", "Agent_added": "Agente adicionado", @@ -403,8 +403,6 @@ "Apps_Marketplace_pricingPlan_yearly_perUser": "__price__/ano por usuário", "Apps_Marketplace_Uninstall_App_Prompt": "Você quer mesmo desinstalar este aplicativo?", "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "Desinstalar mesmo assim", - - "Apps_Permissions_Review_Modal_Title": "Este app necessita das seguintes permissões", "Apps_Permissions_No_Permissions_Required": "Este app não necessita de nenhuma permissão", "Apps_Permissions_user_read": "Acessar dados de usuários", @@ -434,8 +432,6 @@ "Apps_Permissions_persistence": "Salvar informações internas no banco de dados", "Apps_Permissions_scheduler": "Registrar e gerenciar tarefas agendadas", "Apps_Permissions_ui_interact": "Interagir com a UI", - "Required": "obrigatório", - "Apps_Settings": "Configurações da aplicação", "Apps_User_Already_Exists": "O nome de usuário \"__username__\" já está em uso. Escolha outro nome de usuário ou remova o usuário com este nome para instalar o aplicativo.", "Apps_WhatIsIt": "Apps: o que são eles?", @@ -630,7 +626,6 @@ "Channel_Archived": "Canal com o nome `#%s` foi arquivado com sucesso", "Channel_created": "Canal '#%s` criado.", "Channel_doesnt_exist": "O canal `#%s` não existe.", - "Channel_Info": "Informações do Canal", "Channel_name": "Nome do Canal", "Channel_Name_Placeholder": "Digite o nome do canal ...", "Channel_to_listen_on": "Canal para ouvir", @@ -644,6 +639,7 @@ "Chat_closed_by_agent": "Chat encerrado pelo agente", "Chat_closed_successfully": "Chat encerrado com sucesso", "Chat_Now": "Converse agora", + "Chat_started": "Chat iniciado", "Chat_window": "Janela de chat", "Chatops_Enabled": "Ativar Chatops", "Chatops_Title": "Painel Chatops", @@ -762,9 +758,9 @@ "Common_Access": "Acesso comum", "Community": "Comunidade", "Compact": "Compacto", + "Condensed": "Condensado", "Completed": "Completo", "Computer": "Computador", - "Condensed": "Condensado", "Configure_Incoming_Mail_IMAP": "Configurar protocolo de entrada (IMAP)", "Configure_Outgoing_Mail_SMTP": "Configurar protocolo de saída (SMTP)", "Confirm_new_encryption_password": "Confirmar nova senha de criptografia", @@ -776,7 +772,6 @@ "Connection_Closed": "Conexão fechada", "Connection_Reset": "Conexão reset", "Consulting": "Consultar", - "Consumer_Goods": "Bens de consumo", "Contact": "Contato", "Contacts": "Contatos", "Contact_Name": "Nome do Contato", @@ -1064,10 +1059,10 @@ "create-personal-access-tokens": "Criar tokens de acesso pessoal", "create-user": "Criar Usuário", "create-user_description": "Permissão para criar usuários", - "Created_by": "Criado por", "Created_at": "Data criação", "Created_at_s_by_s": "Criado em %s por %s", "Created_at_s_by_s_triggered_by_s": "Criado em %s por %s desencadeado por %s", + "Created_by": "Criado por", "CRM_Integration": "Integração de CRM", "CROWD_Allow_Custom_Username": "Permitir nome de usuário personalizado no Rocket.Chat", "CROWD_Reject_Unauthorized": "Rejeitar não autorizado", @@ -1295,11 +1290,11 @@ "Email_Placeholder": "Por favor, indique o seu endereço de e-mail...", "Email_Placeholder_any": "Digite endereços de e-mail ...", "email_plain_text_only": "Enviar emails apenas em texto puro", - "Email_sent": "Email enviado", "email_style_description": "Evite seletores aninhados", "email_style_label": "Estilo do Email", "Email_subject": "Assunto", "Email_verified": "Email verificado", + "Email_sent": "Email enviado", "Emoji": "Emoji", "EmojiCustomFilesystem": "Sistema de arquivos do emoji customizado", "Empty_title": "Título vazio", @@ -1426,6 +1421,7 @@ "error-message-size-exceeded": "O tamanho da mensagem excede Message_MaxAllowedSize", "error-missing-unsubscribe-link": "Você deve fornecer o link para desinscrever-se: [unsubscribe].", "error-no-tokens-for-this-user": "Não existem tokens para este usuário", + "error-no-message-for-unread": "Não há mensagens para serem marcadas como não lidas", "error-not-allowed": "Não permitido", "error-not-authorized": "Não autorizado", "error-office-hours-are-closed": "O horário de expediente está fechado.", @@ -1582,6 +1578,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Caminho da pasta WebDAV para o qual os arquivos devem ser enviados", "FileUpload_Webdav_Username": "Nome de usuário do WebDAV", "Filter": "Filtrar", + "Filters": "Filtros", "Financial_Services": "Serviços financeiros", "First_Channel_After_Login": "Primeiro canal após o login", "First_response_time": "Primeiro tempo de resposta", @@ -1670,8 +1667,6 @@ "Hash": "Hash", "Header": "Cabeçalho", "Header_and_Footer": "Cabeçalho e rodapé", - "Healthcare_and_Pharmaceutical": "Saúde / Farmacêutica", - "Help_Center": "Centro de ajuda", "Helpers": "Ajudantes", "Here_is_your_authentication_code": "Aqui está o seu código de autenticação:", "Hex_Color_Preview": "Hex Color Preview", @@ -2069,7 +2064,7 @@ "Livechat_AllowedDomainsList": "Domínios permitidos em Livechat", "Livechat_Appearance": "Aparência do Livechat", "Livechat_auto_transfer_chat_timeout": "Tempo limite (em segundos) para transferência automática de conversas não respondidas pelo agente", - "Livechat_auto_transfer_chat_timeout_description" : "Este evento ocorre apenas quando a conversa foi iniciada. Após a primeira transferência por inatividade a conversa não será mais monitorada.", + "Livechat_auto_transfer_chat_timeout_description": "Este evento ocorre apenas quando a conversa foi iniciada. Após a primeira transferência por inatividade a conversa não será mais monitorada.", "Livechat_business_hour_type": "Tipo de Horário de expediente (Único ou Múltiplo)", "Livechat_chat_transcript_sent": "Transcrição de bate-papo enviada: __transcript__", "Livechat_custom_fields_options_placeholder": "Lista separada por vírgula usada para selecionar um valor pré-configurado. Espaços entre elementos não são aceitos.", @@ -2511,8 +2506,8 @@ "online": "online", "Online": "Online", "Only_authorized_users_can_write_new_messages": "Somente usuários autorizados podem escrever novas mensagens", - "Only_Members_Selected_Department_Can_View_Channel": "Apenas membros do departamento selecionado poderão ver os chats neste canal.", "Only_from_users": "Apenas retire o conteúdo desses usuários (deixe em branco para remover o conteúdo de todos)", + "Only_Members_Selected_Department_Can_View_Channel": "Apenas membros do departamento selecionado poderão ver os chats neste canal.", "Only_On_Desktop": "Modo Desktop (apenas envia com enter na área de trabalho)", "Only_you_can_see_this_message": "Apenas você pode ver esta mensagem", "Oops_page_not_found": "Opa, página não encontrada", @@ -2662,7 +2657,6 @@ "Public": "Público", "Public_Channel": "Canal público", "Public_Community": "Comunidade", - "Public_Relations": "Relações públicas", "Purchase_for_free": "Compre de GRAÇA", "Purchased": "Comprado", "Push": "Notificações Push", @@ -2740,6 +2734,7 @@ "Remove_as_leader": "Remova como líder", "Remove_as_moderator": "Remover como moderador", "Remove_as_owner": "Remover de proprietário", + "Remove_Channel_Links": "Remover relação entre canais", "Remove_custom_oauth": "Remover oauth customizado", "Remove_from_room": "Retire da sala", "Remove_last_admin": "Removendo o último administrador", @@ -2770,6 +2765,7 @@ "Requested_At": "Solicitado Em", "Requested_By": "Solicitado Por", "Require": "Exigir", + "Required": "obrigatório", "Require_all_tokens": "Exigir todos os tokens", "Require_any_token": "Exigir qualquer token", "Require_password_change": "Exigir alteração de senha", @@ -3025,6 +3021,7 @@ "SlackBridge_Out_Channels_Description": "Escolha quais canais enviarão mensagens de volta para Slack", "SlackBridge_Out_Enabled": "SlackBridge Out Enabled", "SlackBridge_Out_Enabled_Description": "Escolha se SlackBridge também deve enviar suas mensagens de volta para Slack", + "SlackBridge_Remove_Channel_Links_Description": "Remover o vínculo interno entre os canais do Rocket.Chat e os do Slack. Os vínculos serão posteriormente recriados com base no nome dos canais.", "SlackBridge_start": "@%s iniciou uma importação do SlackBridge em `#%s`. Nós informaremos quando terminar.", "Slash_Gimme_Description": "Mostra (つ ◕_◕) つ antes de sua mensagem", "Slash_LennyFace_Description": "Mostra (͡ ° ͜ʖ ͡ °) após a sua mensagem", @@ -3275,7 +3272,6 @@ "Total_visitors": "Total de visitantes", "TOTP Invalid [totp-invalid]": "Código ou senha invalidos", "totp-invalid": "Código ou senha invalidos", - "Tourism": "Turismo", "Transcript": "Transcrição", "Transcript_Enabled": "Pergunte ao visitante se eles gostariam de uma transcrição após o bate-papo fechado", "Transcript_message": "Mensagem para mostrar ao perguntar sobre Transcrição", @@ -3645,4 +3641,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 56f8a36ff632..323268b8342b 100644 --- a/packages/rocketchat-i18n/i18n/pt.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt.i18n.json @@ -221,6 +221,7 @@ "Accounts_UserAddedEmailSubject_Default": "Foi adicionado ao [Site_Name]", "Accounts_Verify_Email_For_External_Accounts": "Verificar o Email para Contas Externas", "Activate": "Ativar", + "Active": "Activo", "Activity": "Atividade", "Add": "Adicionar", "Add_agent": "Adicionar agente", @@ -229,6 +230,7 @@ "Add_files_from": "Adicionar arquivos de", "Add_manager": "Adicionar gerente", "Add_Role": "Adicionar função", + "Add_Sender_To_ReplyTo": "Adicionar Remetente ao campo \"Responder a\"", "Add_user": "Adicionar utilizador", "Add_User": "Adicionar Utilizador", "Add_users": "Adicionar utilizadores", @@ -254,7 +256,6 @@ "Admin_Info": "Informação de administração", "Administration": "Administração", "Adult_images_are_not_allowed": "Não são permitidas imagens para adultos", - "Advocacy": "Apoio dado", "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_added": "Agente adicionado", @@ -681,7 +682,6 @@ "Connection_Reset": "Redefinir Conexão", "Connectivity_Services": "Serviços de Ligação", "Consulting": "Consultar", - "Consumer_Goods": "Bens de consumo", "Contact": "Contacto", "Contains_Security_Fixes": "Contém correcções de segurança", "Content": "Conteúdo", @@ -1507,8 +1507,6 @@ "Hash": "Divisão", "Header": "Cabeçalho", "Header_and_Footer": "Cabeçalho e rodapé", - "Healthcare_and_Pharmaceutical": "Saúde / Farmacêutica", - "Help_Center": "Centro de ajuda", "Helpers": "Ajudantes", "Hex_Color_Preview": "Pré-visualizar a Cor em hexadecimal", "Hi_username": "Oi __name__", @@ -2371,7 +2369,6 @@ "Public": "Público", "Public_Channel": "Canal público", "Public_Community": "Comunidade", - "Public_Relations": "Relações públicas", "Purchase_for_free": "Adquirir de graça", "Purchase_for_price": "Adquirir por $%s", "Push": "Empurre", @@ -2932,7 +2929,6 @@ "Total_conversations": "Total de conversas", "Total_messages": "Total de mensagens", "Total_visitors": "Total de visitantes", - "Tourism": "Turismo", "Transcript_Enabled": "Pergunte ao visitante se eles gostariam de uma transcrição após o chat fechado", "Transcript_message": "Mensagem para mostrar ao perguntar sobre Transcrição", "Transcript_of_your_livechat_conversation": "Transcrição da sua conversa Livechat.", diff --git a/packages/rocketchat-i18n/i18n/ro.i18n.json b/packages/rocketchat-i18n/i18n/ro.i18n.json index c2dc6ab9a82b..15b39d979bc0 100644 --- a/packages/rocketchat-i18n/i18n/ro.i18n.json +++ b/packages/rocketchat-i18n/i18n/ro.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Aveți dreptul să utilizați următoarele Placeholder: [name], [fname], [lname] pentru numele utilizatorului completă, prenumele sau numele de familie, respectiv. [email] pentru e-mail a utilizatorului. [password] pentru parola utilizatorului. [Site_Name] și [Site_URL] pentru Nume aplicație și, respectiv, URL-ul. ", "Accounts_UserAddedEmailSubject_Default": "Ați fost adăugat la [Site_Name]", "Activate": "Activează", + "Active": "Activă", "Activity": "Activitate", "Add": "Adăugă", "Add_agent": "Adaugă agent", @@ -219,7 +220,6 @@ "Admin_Info": "Admin Info", "Administration": "Administrare", "Adult_images_are_not_allowed": "Imaginile adulte nu sunt permise", - "Advocacy": "susținere", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "După autentificare OAuth2, utilizatorii vor fi redirecționat către această adresă URL", "Agent": "Agent", "Agent_added": "Agent adăugat", @@ -549,7 +549,6 @@ "Connection_Closed": "Conexiunea este închisă", "Connection_Reset": "Resetarea conexiunii", "Consulting": "consultant", - "Consumer_Goods": "Bunuri de consum", "Contains_Security_Fixes": "Conține remedierile de securitate", "Content": "Conţinut", "Continue": "Continua", @@ -1196,6 +1195,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Calea directorului WebDAV la care ar trebui încărcate fișierele", "FileUpload_Webdav_Username": "Numele de utilizator WebDAV", "Filter": "Filtru", + "Filters": "Filtre", "Financial_Services": "Servicii financiare", "First_Channel_After_Login": "Primul canal după conectare", "Flags": "Steaguri", @@ -1263,8 +1263,6 @@ "Hash": "hașiș", "Header": "Antet", "Header_and_Footer": "Antet și subsol", - "Healthcare_and_Pharmaceutical": "Sănătate / farmaceutice", - "Help_Center": "Centru de ajutor", "Helpers": "Helpers", "Hex_Color_Preview": "Hex Color Preview", "Hidden": "Ascuns", @@ -1284,6 +1282,7 @@ "Highlights_How_To": "Pentru a fi notificat atunci când cineva menționează un cuvânt sau o expresie, adăugați-l aici. Puteți separa cuvinte sau fraze cu virgulă. Cuvintele de evidențiere nu sunt sensibile la majuscule.", "Highlights_List": "cuvinte de evidențiere", "History": "Istoric", + "Home": "Acasă", "Host": "Gazdă", "hours": "ore", "Hours": "ore", @@ -2043,7 +2042,6 @@ "Public": "Public", "Public_Channel": "Canalul public", "Public_Community": "Comunitatea publică", - "Public_Relations": "Relatii publice", "Push": "Notificări Push", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2541,7 +2539,6 @@ "Tokens_Required_Input_Placeholder": "Denumiri de active Tokens", "Topic": "Subiect", "Total_messages": "Numărul total de mesaje", - "Tourism": "Turism", "Transcript_Enabled": "Întrebați vizitatorul dacă ar dori o transcriere după închiderea convorbirilor", "Transcript_message": "Mesaj pentru a afișa atunci când solicită transcriere", "Transcript_of_your_livechat_conversation": "Transcrierea conversației dvs. livechat.", diff --git a/packages/rocketchat-i18n/i18n/ru.i18n.json b/packages/rocketchat-i18n/i18n/ru.i18n.json index 3b4e3fe2b791..bf6d07066bbe 100644 --- a/packages/rocketchat-i18n/i18n/ru.i18n.json +++ b/packages/rocketchat-i18n/i18n/ru.i18n.json @@ -5,6 +5,8 @@ "__count__empty_rooms_will_be_removed_automatically__rooms__": "__count__ пустых чатов будет удалено автоматически: __rooms__.", "__username__is_no_longer__role__defined_by__user_by_": "__username__ больше не __role__ по решению __user_by__", "__username__was_set__role__by__user_by_": "__username__ был установлен __role__ по решению __user_by__", + "This_room_encryption_has_been_enabled_by__username_": "Шифрование этой комнаты было включено __username__", + "This_room_encryption_has_been_disabled_by__username_": "Шифрование этой комнаты было отключено __username__", "@username": "@логин", "@username_message": "@логин ", "#channel": "#канал", @@ -240,6 +242,7 @@ "Accounts_Verify_Email_For_External_Accounts": "Проверить электронную почту для внешних аккаунтов", "Action_required": "Требуется действие", "Activate": "Активировать", + "Active": "В сети", "Active_users": "Активные пользователи", "Activity": "Активность", "Add": "Добавить", @@ -255,6 +258,7 @@ "Add_user": "Добавить пользователя", "Add_User": "Добавить Пользователя", "Add_users": "Добавить пользователей", + "Add_members": "Добавить участников", "add-livechat-department-agents": "Добавить Livechat Агентов в Отделы", "add-oauth-service": "Добавить сервис Oauth", "add-oauth-service_description": "Разрешение на добавление новых сервисов Oauth", @@ -277,7 +281,7 @@ "Admin_Info": "Информация Администратора", "Administration": "Администрирование", "Adult_images_are_not_allowed": "Изображения для взрослых запрещены", - "Advocacy": "Адвокатура", + "Aerospace_and_Defense": "Аэрокосмическая промышленность и оборона", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "После аутентификации OAuth2, пользователи будут перенаправляться на этот URL-адрес", "Agent": "Представитель", "Agent_added": "Представитель добавлен", @@ -455,6 +459,18 @@ "Apps_Marketplace_Uninstall_App_Prompt": "Вы действительно хотите удалить это приложение?", "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "Удалить в любом случае", "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "Это приложение имеет активную подписку, и удаление не отменит его. Если вы хотите это сделать, пожалуйста, измените подписку перед удалением.", + "Apps_Permissions_Review_Modal_Title": "Это приложение требует следующие разрешения", + "Apps_Permissions_No_Permissions_Required": "Приложение не требует дополнительных разрешений", + "Apps_Permissions_user_read": "Прочитать основную информацию пользователя", + "Apps_Permissions_user_write": "Изменить информацию о пользователе", + "Apps_Permissions_upload_read": "Доступ к файлам, загруженным на этот сервер", + "Apps_Permissions_upload_write": "Загружать файлы", + "Apps_Permissions_server-setting_read": "Читать информацию о сервере", + "Apps_Permissions_server-setting_write": "Изменять информацию о сервере", + "Apps_Permissions_room_read": "Читать информацию о комнате", + "Apps_Permissions_room_write": "Изменять информацию о комнате", + "Apps_Permissions_message_read": "Чтение сообщений", + "Apps_Permissions_message_write": "Отправка и изменение сообщений", "Apps_Settings": "Настройки приложения", "Apps_User_Already_Exists": "Имя пользователя \"__username__\" уже используется. Переименуйте или удалите пользователя использующего это имя для установки приложения", "Apps_WhatIsIt": "Приложения: что это такое?", @@ -557,6 +573,9 @@ "Backup_codes": "Коды резервного копирования", "ban-user": "Забанить пользователя", "ban-user_description": "Разрешение на бан пользователей на канале", + "BBB_End_Meeting": "Закончить встречу", + "BBB_Join_Meeting": "Присоединиться к встрече", + "BBB_Start_Meeting": "Начать встречу", "Best_first_response_time": "Лучшее время первого ответа", "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "Функция в бета тестировании. Зависит от Video Conference.", "Better": "Лучше", @@ -678,7 +697,8 @@ "Chat_closed": "Чат закрыт", "Chat_closed_by_agent": "Чат закрыт агентом", "Chat_closed_successfully": "Чат успешно закрыт", - "Chat_Now": "Теперь говорите", + "Chat_History": "История чата", + "Chat_Now": "Написать", "Chat_queued": "Чат в очереди", "Chat_removed": "Чат удален", "Chat_start": "Начать чат", @@ -703,6 +723,7 @@ "Chatpal_Current_Room_Only": "Этот же чат", "Chatpal_Default_Result_Type": "Тип результата по умолчанию", "Chatpal_Default_Result_Type_Description": "Определяет, какой результат будет показан по результату. Все означает, что предоставляется общий обзор для всех типов.", + "Chat_Duration": "Длительность чата", "Chatpal_Email_Address": "Адрес электронной почты", "Chatpal_ERROR_Email_must_be_set": "Необходимо указать адрес электронной почты", "Chatpal_ERROR_Email_must_be_valid": "Email должен быть действительным", @@ -779,6 +800,12 @@ "Closing_chat": "Закрыть чат", "Closing_chat_message": "Сообщение о закрытии чата", "Cloud": "Облако", + "Cloud_Apply_Offline_License": "Применить автономную лицензию", + "Cloud_Change_Offline_License": "Изменить автономную лицензию", + "Cloud_License_applied_successfully": "Лицензия применена успешно!", + "Cloud_Invalid_license": "Недействительная лицензия!", + "Cloud_Apply_license": "Применить лицензию", + "Cloud_connectivity": "Облачная связь", "Cloud_address_to_send_registration_to": "Адрес для отправки электронного письма с регистрацией в облаке.", "Cloud_click_here": "После копирования текста перейдите на Cloud Console. [Щелкните здесь](__cloudConsoleUrl__)", "Cloud_console": "Облачная Консоль", @@ -816,6 +843,7 @@ "Cloud_workspace_disconnect": "Если вы больше не хотите использовать облачные сервисы, вы можете отключить свое рабочее пространство от Rocket.Chat Cloud.", "Cloud_workspace_support": "Если у вас возникли проблемы с облачным сервисом, попробуйте сначала выполнить синхронизацию. Если проблема не устранена, откройте заявку в службу поддержки в облачной консоли.", "Collaborative": "Совместный", + "Collapse": "Свернуть", "Collapse_Embedded_Media_By_Default": "Сворачивать вложенные медиа по умолчанию", "color": "Цвет", "Color": "Цвет", @@ -826,22 +854,31 @@ "Community": "Сообщество", "Compact": "Компактный", "Condensed": "Компактный", + "Commit_details": "Подробности", "Completed": "Завершен", "Computer": "Компьютер", + "Configure_Incoming_Mail_IMAP": "Настройка входящей почты (IMAP)", + "Configure_Outgoing_Mail_SMTP": "Настройка исходящей почты (SMTP)", "Confirm_new_encryption_password": "Подтвердить новый пароль для шифрования", "Confirm_new_password": "Подтвердите новый пароль", "Confirm_New_Password_Placeholder": "Повторно введите новый пароль ...", "Confirm_password": "Подтвердить пароль", "Connect": "Подключение", + "Connect_SSL_TLS": "Подключение с помощью SSL/TLS", "Connection_Closed": "Соединение закрыто", "Connection_Reset": "Сброс соединения", "Connection_success": "Подключение к LDAP успешное", "Connectivity_Services": "Connectivity Services", "Consulting": "Консалтинг", - "Consumer_Goods": "Потребительские товары", "Contact": "Контакт", + "Contacts": "Контакты", + "Contact_Name": "Имя контакта", + "Contact_Center": "Контакт-центр", "Contact_Chat_History": "История чата контакта", "Contains_Security_Fixes": "Содержит исправления уязвимостей", + "Contact_Manager": "Контакт-менеджер", + "Contact_not_found": "Контакт не найден", + "Contact_Profile": "Профиль контакта", "Content": "Содержимое", "Continue": "Продолжить", "Continuous_sound_notifications_for_new_livechat_room": "Непрерывные звуковые уведомления для новой комнаты livechat", @@ -1149,8 +1186,9 @@ "Custom_Emoji_Has_Been_Deleted": "Пользовательский эмодзи успешно удален", "Custom_Emoji_Info": "Информация о пользовательском эмодзи", "Custom_Emoji_Updated_Successfully": "Пользовательский эмодзи успешно обновлен", - "Custom_Field_Removed": "Пользовательское поле удалено", "Custom_Fields": "Пользовательские поля", + "Custom_Field_Removed": "Пользовательское поле удалено", + "Custom_Field_Not_Found": "Пользовательское поле не найдено", "Custom_oauth_helper": "Настраивая вашего поставщика OAuth, вам необходимо сообщить обратный URL-адрес. Используйте %s .", "Custom_oauth_unique_name": "Имя OAuth сервиса", "Custom_Script_Logged_In": "Пользовательский скрипт для авторизованных пользователей", @@ -1169,6 +1207,7 @@ "Custom_Sound_Info": "Информация о пользовательском звуке", "Custom_Sound_Saved_Successfully": "Пользовательский звук успешно сохранен", "Custom_Sounds": "Пользовательские звуки", + "Custom_Status": "Пользовательский статус", "Custom_Translations": "Пользовательские переводы", "Custom_Translations_Description": "Должен быть валидным JSON, где ключи - языки, значения - словари ключей и их переводов. Пример:\n \"en\": {\n \"Channels\": \"Rooms\"\n },\n \"pt\": {\n \"Channels\": \"Salas\"\n }\n}", "Custom_User_Status": "Пользовательский статус", @@ -1217,6 +1256,7 @@ "Default_value": "Значение по умолчанию", "Delete": "Удалить", "Delete_all_closed_chats": "Удалить все закрытые чаты", + "Delete_File_Warning": "Удаление файла удалит его навсегда. Это нельзя отменить.", "Delete_message": "Удалить сообщение", "Delete_my_account": "Удалить мою учетную запись", "Delete_Room_Warning": "Удаление комнаты удалит все сообщения в ней. Это действие невозможно отменить.", @@ -1287,6 +1327,7 @@ "Disconnect": "Отключить", "Discussion": "Обсуждение", "Discussion_description": "Держите всех в курсе событий! Создавая дискуссии - будет создан субканал привязанный к основному каналу.", + "Discussion_first_message_disabled_due_to_e2e": "Вы можете начать отправку сообщений с End-to-End шифрованием в этом обсуждении, после его создания.", "Discussion_first_message_title": "Ваше сообщение", "Discussion_name": "Название обсуждения", "Discussion_start": "Начать обсуждение", @@ -1329,6 +1370,8 @@ "Duplicated_Email_address_will_be_ignored": "Дублированный адрес электронной почты будет игнорироваться.", "duplicated-account": "Дублированный аккаунт", "E2E Encryption": "Шифрование E2E", + "E2E_enable": "Включить E2E", + "E2E_disable": "Отключить E2E", "E2E_Enable_alert": "Эта функция в настоящее время находится в бета-версии! Сообщайте об ошибках в github.com/RocketChat/Rocket.Chat/issues и будьте в курсе: - Зашифрованные сообщения зашифрованных комнат не будут найдены в результате операций поиска. - мобильные приложения могут не поддерживать кодированные сообщения (они будут реализованы позже). - Боты могут не видеть зашифрованные сообщения до тех пор, пока они не реализуют поддержку кодированных сообщений. - Загрузка не будет зашифрована в этой версии.", "E2E_Enable_description": "Включить возможность создания зашифрованных групп и возможность изменять группы и прямые сообщения для шифрования", "E2E_Enabled": "E2E включен", @@ -1344,6 +1387,7 @@ "E2E_Reset_Other_Key_Warning": "Сброс текущего ключа E2E приведет к выходу пользователя из системы. При повторном входе пользователя в систему Rocket.Chat сгенерирует новый ключ и восстановит доступ пользователя в любой зашифрованный чат в котором есть один или несколько пользователей в сети. В связи с особенностями шифрования E2E, Rocket.Chat не сможет восстановить доступ к любому зашифрованному чату, в котором нет участников онлайн.", "Edit": "Редактировать", "Edit_Business_Hour": "Редактировать рабочие часы", + "Edit_Canned_Responses": "Править заготовленные ответы", "Edit_Custom_Field": "Редактировать поле", "Edit_Department": "Редактировать отдел", "Edit_Invite": "Изменить Приглашение", @@ -1370,8 +1414,11 @@ "edit-privileged-setting_description": "Возможность редактирование настроек", "edit-room": "Редактировать комнату", "edit-room_description": "Разрешение на редактирование имени, темы, типа (приватный или публичный) и статуса (активный или архивный) комнаты.", + "edit-room-avatar": "Изменить аватар чата", + "edit-room-avatar_description": "Разрешения на правку аватара чата", "edit-room-retention-policy": "Изменить политику очистки чата", "edit-room-retention-policy_description": "Разрешение изменять политику очистки чатов, автоматически удалять в ней сообщения", + "Edit_Contact_Profile": "Редактировать профиль контакта", "edited": "отредактировано", "Editing_room": "Редактирование комнаты", "Editing_user": "Редактирование пользователя", @@ -1387,6 +1434,8 @@ "Email_Footer_Description": "Вы можете использовать следующие подстановки: [Site_Name] и [Site_URL] для имени приложения и его URL соответственно.", "Email_from": "От", "Email_Header_Description": "Вы можете использовать следующие подстановки: [Site_Name] и [Site_URL] для имени приложения и его URL соответственно.", + "Email_Inbox": "Входящая почта", + "Email_Inboxes": "Почтовые ящики", "Email_Notification_Mode": "Офлайн уведомления по Email", "Email_Notification_Mode_All": "Каждое упоминание/ЛС", "Email_Notification_Mode_Disabled": "Отключено", @@ -1400,6 +1449,7 @@ "email_style_label": "Стиль электронной почты", "Email_subject": "Тема", "Email_verified": "Адрес электронной почты подтверждён", + "Email_sent": "Письмо отправлено", "Emails_sent_successfully!": "Электронные письма успешно отправлены!", "Emoji": "Эмодзи ", "Emoji_provided_by_JoyPixels": "Emoji предоставлено JoyPixels", @@ -1420,6 +1470,7 @@ "Encrypted_setting_changed_successfully": "Зашифрованный параметр успешно изменен", "Encryption_key_saved_successfully": "Ваш ключ шифрования был успешно сохранен.", "EncryptionKey_Change_Disabled": "Вы не можете установить пароль для своего ключа шифрования, потому что ваш закрытый ключ отсутствует на этом клиенте. Чтобы установить новый пароль, вам необходимо загрузить свой секретный ключ с использованием существующего пароля или использовать клиент, где ключ уже загружен.", + "End": "Конец", "End_OTR": "Завершить конфиденциальную беседу", "Engagement_Dashboard": "Панель взаимодействия", "Enter_a_custom_message": "Введите персонифицированное сообщение", @@ -1446,6 +1497,8 @@ "Error_404": "Ошибка 404", "Error_changing_password": "Ошибка при изменении пароля", "Error_loading_pages": "Ошибка загрузки страниц", + "Error_login_blocked_for_ip": "Вход был временно заблокирован для этого IP", + "Error_login_blocked_for_user": "Вход был временно заблокирован для этого пользователя", "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Ошибка: требуется слежение за Oplog при запуске Rocket.Chat на виртуальных машинах", "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Пожалуйста, убедитесь, что ваш MongoDB находится в режиме ReplicaSet, а переменная среды MONGO_OPLOG_URL правильно определена на сервере приложений.", "Error_sending_livechat_offline_message": "Ошибка отправки сообщения Livechat в автономном режиме", @@ -1467,6 +1520,7 @@ "error-could-not-change-email": "Невозможно изменить адрес электронной почты", "error-could-not-change-name": "Невозможно изменить имя", "error-could-not-change-username": "Не удалось изменить логин", + "error-custom-field-name-already-exists": "Имя пользовательского поля уже существует", "error-delete-protected-role": "Нельзя удалить защищённую роль", "error-department-not-found": "Отдел не найден", "error-direct-message-file-upload-not-allowed": "Обмен файлами не разрешен в личных сообщениях", @@ -1499,6 +1553,7 @@ "error-invalid-domain": "Ошибочный домен", "error-invalid-email": "Некорректный адрес электронной почты __email__", "error-invalid-email-address": "Некорректный адрес электронной почты", + "error-invalid-email-inbox": "Неверный почтовый ящик", "error-invalid-file-height": "Недопустимая высота файла", "error-invalid-file-type": "Неверный тип файла", "error-invalid-file-width": "Недопустимая ширина файла", @@ -1509,7 +1564,10 @@ "error-invalid-method": "Недопустимый метод", "error-invalid-name": "Неверное имя", "error-invalid-password": "Неверный пароль", + "error-invalid-param": "Неверный параметр", + "error-invalid-params": "Неверные параметры", "error-invalid-permission": "Недействительное разрешение", + "error-invalid-port-number": "Неверный номер порта", "error-invalid-priority": "Некорректный приоритет", "error-invalid-redirectUri": "Ошибочный redirectUri", "error-invalid-role": "Недопустимая роль", @@ -1592,9 +1650,12 @@ "Exclude_pinned": "Не удалять прикрепленные сообщения", "Execute_Synchronization_Now": "Выполнить синхронизацию сейчас", "Exit_Full_Screen": "Выход из полноэкранного режима", + "Expand": "Развернуть", "Experimental_Feature_Alert": "Это экспериментальная функция! Пожалуйста, имейте в виду, что она может быть изменена, сломана или даже удалена в будущем без какого-либо уведомления.", "Expiration": "Срок действия", "Expiration_(Days)": "Срок действия (дни)", + "Export_as_file": "Экспорт как файл", + "Export_Messages": "Экспорт сообщений", "Export_My_Data": "Экспорт моих данных", "expression": "Выражение", "Extended": "Расширенное", @@ -1606,13 +1667,19 @@ "Failed": "Не удалось", "Failed_to_activate_invite_token": "Не удалось активировать токен приглашения", "Failed_to_add_monitor": "Не удалось добавить монитор", + "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": "Избранное", "Favorite_Rooms": "Включить избранные каналы", "Favorites": "Избранное", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Эта функция зависит от того, включена ли функция «Отправить историю навигации посетителя как сообщения».", + "Features": "Доступные функции", "Features_Enabled": "Доступные функции", "Federation_Dashboard": "Панель инструментов Федерации", "FEDERATION_Discovery_Method": "Метод открытия", @@ -1643,11 +1710,13 @@ "File_name_Placeholder": "Искать файлы...", "File_not_allowed_direct_messages": "Передача файлов не разрешена в личных сообщениях", "File_Path": "Путь файла", + "file_pruned": "файл очищен", "File_removed_by_automatic_prune": "Файл удаляется автоматической обрезкой", "File_removed_by_prune": "Файл удален снизу", "File_Type": "Тип файла", "File_type_is_not_accepted": "Недопустимый тип файла", "File_uploaded": "Файл загружен", + "File_uploaded_successfully": "Файл успешно загружен", "File_URL": "URL-адрес файла", "files": "файлы", "Files": "Файлы", @@ -1680,10 +1749,14 @@ "FileUpload_MaxFileSize": "Максимальный размер загружаемых файлов (в байтах)", "FileUpload_MaxFileSizeDescription": "Установите значение -1 для удаления ограничения размера файла.", "FileUpload_MediaType_NotAccepted": "Медиа-файлы не приняты", + "FileUpload_MediaTypeBlackList": "Запрещенные типы файлов", + "FileUpload_MediaTypeBlackListDescription": "Список типов медиа разделенных запятыми. Данная настойка имеет приоритет перед настройкой Разрешённые типы файлов", "FileUpload_MediaTypeWhiteList": "Разрешённые типы файлов", "FileUpload_MediaTypeWhiteListDescription": "Список медиа-файлов, разделённый запятой. Оставьте его пустым, чтобы разрешить все типы медиа файлов.", "FileUpload_ProtectFiles": "Защитить загруженные файлы", "FileUpload_ProtectFilesDescription": "Только авторизованные пользователи будут иметь доступ", + "FileUpload_RotateImages": "Поворот изображений при загрузке", + "FileUpload_RotateImages_Description": "Включение этого параметра может привести к потере качества изображения", "FileUpload_S3_Acl": "Amazon S3 acl", "FileUpload_S3_AWSAccessKeyId": "Access Key", "FileUpload_S3_AWSSecretAccessKey": "Secret Key", @@ -1710,6 +1783,8 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Путь к папке WebDAV, файлы которого должны быть загружены в", "FileUpload_Webdav_Username": "Имя пользователя WebDAV", "Filter": "Фильтр", + "Filters": "Фильтры", + "Filters_applied": "Примененные фильтры", "Financial_Services": "Финансовые услуги", "First_Channel_After_Login": "Открыть канал после авторизации", "First_response_time": "Время первого ответа", @@ -1725,6 +1800,7 @@ "For_your_security_you_must_enter_your_current_password_to_continue": "Для вашей же безопасности, вы должны повторно ввести свой пароль, чтобы продолжить", "Force_Disable_OpLog_For_Cache": "Форсировать отключение OpLog для кэша", "Force_Disable_OpLog_For_Cache_Description": "Не использовать OpLog для синхронизации кеша, даже, если он доступен", + "Force_Screen_Lock_description": "Когда эта функция включена, вы заставляете ваших пользователей использовать PIN/BIOMETRY/FACEID для разблокировки приложения.", "Force_SSL": "Форсировать SSL", "Force_SSL_Description": "* Внимание! * _Force SSL_ никогда не должен использоваться с обратным прокси (например, nginx). Если у вас есть обратный прокси-сервер, вы должны сделать перенаправление ТАМ. _Force SSL_ существует для таких платформ, как Heroku, которая не позволяет перенаправить конфигурацию в обратном прокси.", "Force_visitor_to_accept_data_processing_consent": "Заставить посетителя принять согласие на обработку данных", @@ -1748,6 +1824,7 @@ "From": "От", "From_Email": "Адрес электронной почты отправителя", "From_email_warning": "Внимание: Поле От зависит от настроек вашего почтового сервера.", + "Full_Name": "Полное имя", "Full_Screen": "Полноэкранный", "Gaming": "Игорный бизнес", "General": "Общие настройки", @@ -1755,6 +1832,14 @@ "Generate_New_Link": "Сгенерировать новую ссылку", "Generating_key": "Генерация ключа", "Get_link": "Получить ссылку", + "get-password-policy-forbidRepeatingCharacters": "Пароль не может содержать повторяющихся символов подряд", + "get-password-policy-forbidRepeatingCharactersCount": "Пароль не должен содержать более __forbidRepeatingCharactersCount__ повторяющихся символов в пароле", + "get-password-policy-maxLength": "Пароль должен быть максимум __maxLength__ символов длиной", + "get-password-policy-minLength": "Пароль должен быть не менее __minLength__ символов", + "get-password-policy-mustContainAtLeastOneLowercase": "Пароль должен содержать как минимум одну строчную букву", + "get-password-policy-mustContainAtLeastOneNumber": "Пароль должен содержать как минимум одну цифру", + "get-password-policy-mustContainAtLeastOneSpecialCharacter": "Пароль должен содержать как минимум один специальный символ", + "get-password-policy-mustContainAtLeastOneUppercase": "Пароль должен содержать как минимум одну заглавную букву", "github_no_public_email": "В вашей учетной записи GitHub отсутствует публично доступный адрес электронной почты", "Give_a_unique_name_for_the_custom_oauth": "Выберите имя OAuth сервиса", "Give_the_application_a_name_This_will_be_seen_by_your_users": "Задайте приложению имя. Оно будет видно всем пользователям.", @@ -1787,17 +1872,19 @@ "Graphql_CORS": "GraphQL CORS", "Graphql_Enabled": "GraphQL включен", "Graphql_Subscription_Port": "Порт подписки GraphQL", + "Group_by": "Группировка по", "Group_by_Type": "Группировать по типу", "Group_discussions": "Групповые обсуждения", "Group_favorites": "Группировать избранное", "Group_mentions_disabled_x_members": "Групповые упоминания, для `@all` и `@here` были отключены для комнат с более чем __total__ участниками.", "Group_mentions_only": "Только при упоминаниях в общих чатах", + "Grouping": "Группировка", "Hash": "Хэш", "Header": "Шапка", "Header_and_Footer": "Шапка и подвал", - "Healthcare_and_Pharmaceutical": "Здравоохранение/Фармацевтика", - "Help_Center": "Справочный центр", + "Healthcare": "Здравоохранение", "Helpers": "Хелперы", + "Here_is_your_authentication_code": "Вот ваш код аутентификации:", "Hex_Color_Preview": "Превью для Hex-цветов", "Hi": "Привет", "Hi_username": "Привет __name__", @@ -1820,6 +1907,7 @@ "Highlights_How_To": "Чтобы получать уведомления, когда кто-то упоминает слово или фразу, добавьте её здесь. Вы можете разделять слова или фразы запятыми. Слова не чувствительны к регистру.", "Highlights_List": "Подсвечивать слова", "History": "История", + "Home": "Главная", "Host": "Хост", "hours": "часы", "Hours": "Часы", @@ -1840,6 +1928,7 @@ "If_you_are_sure_type_in_your_password": "Если вы уверены, введите пароль:", "If_you_are_sure_type_in_your_username": "Если вы уверены, введите ваш логин:", "If_you_didnt_ask_for_reset_ignore_this_email": "Если вы не просили сбросить пароль, вы можете проигнорировать это письмо.", + "If_you_didnt_try_to_login_in_your_account_please_ignore_this_email": "Если вы не пытались войти в свой аккаунт, пожалуйста, проигнорируйте это письмо.", "If_you_dont_have_one_send_an_email_to_omni_rocketchat_to_get_yours": "Если у вас нет одного, отправьте электронное сообщение на адрес [omni@rocket.chat] (mailto: omni@rocket.chat), чтобы получить свой.", "Iframe_Integration": "Интеграция Iframe ", "Iframe_Integration_receive_enable": "Разрешить получение", @@ -1863,6 +1952,8 @@ "Impersonate_user": "Представляться пользователем", "Impersonate_user_description": "Когда включено, инеграция отправляет сообщения от имени пользователя, который заставил интеграцию сработать", "Import": "Импортировать", + "Import_New_File": "Импорт нового файла", + "Import_requested_successfully": "Импорт запрошен успешно", "Import_Type": "Тип импорта", "Importer_Archived": "Архивные", "Importer_CSV_Information": "При импорте CSV требуется соблюдать определенный формат, пожалуйста, прочитайте документацию о том, каким должен быть zip архив:", @@ -1875,6 +1966,7 @@ "Importer_import_cancelled": "Импорт данных отменен.", "Importer_import_failed": "Во время импорта данных возникла ошибка.", "Importer_importing_channels": "Импортировать каналы.", + "Importer_importing_files": "Импорт файлов.", "Importer_importing_messages": "Импортировать сообщения.", "Importer_importing_started": "Начать импорт данных.", "Importer_importing_users": "Импортировать пользователей.", @@ -1888,10 +1980,16 @@ "Importer_setup_error": "При настройке импортера возникла ошибка.", "Importer_Slack_Users_CSV_Information": "Загруженный файл должен быть файлом экспорта файлов Slack, который является файлом CSV. Смотрите здесь для более подробной информации:", "Importer_Source_File": "Выбор исходного файла", + "importer_status_done": "Успешно завершено", + "importer_status_downloading_file": "Скачивание файла", + "importer_status_file_loaded": "Файл загружен", "importer_status_finishing": "Почти сделано", + "importer_status_import_cancelled": "Отменено", "importer_status_import_failed": "Ошибка", "importer_status_importing_channels": "Импорт каналов", + "importer_status_importing_files": "Импорт файлов", "importer_status_importing_messages": "Импорт сообщений", + "importer_status_importing_started": "Импорт данных", "importer_status_importing_users": "Импорт пользователей", "importer_status_new": "Не начато", "Importer_Upload_FileSize_Message": "Настройки вашего сервера позволяют загружать файлы любого размера до __maxFileSize__.", @@ -1917,9 +2015,11 @@ "Installation": "Установка", "Installed": "Установлен", "Installed_at": "Установленно", + "Instances_health": "Случаи заболевания", "Instance_Record": "Быстрая запись", "Instructions": "Инструкции", "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Инструкции для вашего посетителя заполнить форму, чтобы отправить сообщение", + "Insert_Contact_Name": "Введите имя контакта", "Insurance": "Страхование", "Integration_added": "Интеграция была добавлена", "Integration_Advanced_Settings": "Дополнительные настройки", @@ -2025,6 +2125,7 @@ "IssueLinks_LinkTemplate": "Шаблон ссылок на задачи", "IssueLinks_LinkTemplate_Description": "Шаблон для ссылок на задачи; %s будет заменена на номер задачи.", "It_works": "Оно работает", + "It_Security": "ИТ-безопасность", "italic": "Курсивный", "italics": "курсив", "Jitsi_Application_ID": "Идентификатор приложения (iss)", @@ -2085,6 +2186,9 @@ "Language_Russian": "Русский", "Language_Spanish": "Испанский", "Language_Version": "Английская версия", + "Last_7_days": "Последние 7 дней", + "Last_30_days": "Последние 30 дней", + "Last_90_days": "Последние 90 дней", "Last_login": "Последний раз заходил", "Last_Message": "Последнее сообщение", "Last_Message_At": "Последнее сообщение", @@ -2109,6 +2213,7 @@ "LDAP_Authentication_Password": "Пароль", "LDAP_Authentication_UserDN": "User DN", "LDAP_Authentication_UserDN_Description": "Пользователь LDAP, который выполняет поиск пользователей для аутентификации других пользователей при входе в систему. Обычно это учетная запись службы, созданная специально для сторонних интеграций. Используйте полное имя, например\n `cn = Administrator, cn = Users, dc = Example, dc = com`.", + "LDAP_Avatar_Field": "Пользовательский аватар", "LDAP_Background_Sync": "Фоновая синхронизация", "LDAP_Background_Sync_Import_New_Users": "Фоновая синхронизация импортирует новых пользователей", "LDAP_Background_Sync_Import_New_Users_Description": "Импортирует всех пользователей (на основе критериев вашего фильтра), которые существуют в LDAP, и не существует в Rocket.Chat", @@ -2215,6 +2320,7 @@ "Lead_capture_email_regex": "Регулярное перемещение по электронной почте", "Lead_capture_phone_regex": "Повторное использование", "Leave": "Покинуть", + "Leave_a_comment": "Оставить комментарий", "Leave_Group_Warning": "Вы уверены, что хотите покинуть группу \"%s\"?", "Leave_Livechat_Warning": "Вы уверены, что хотите покинуть Livechat с \"%s\"?", "Leave_Private_Warning": "Вы уверены, что хотите покинуть беседу с \"%s\"?", @@ -2231,11 +2337,13 @@ "List_of_departments_for_forward_description": "Разрешить установить ограниченный список департаментов, которые могут принимать перенаправляемые чаты от данного департамента", "List_of_departments_to_apply_this_business_hour": "Список департаментов для применения этих рабочих часов", "List_of_Direct_Messages": "Список личных переписок", + "Omnichannel": "Омниканальность", "Livechat": "Livechat", "Livechat_abandoned_rooms_closed_custom_message": "Настраиваемое сообщение, когда комната автоматически закрывается из-за неактивности посетителей", "Livechat_agents": "Представители Livechat", "Livechat_Agents": "Агенты", "Livechat_AllowedDomainsList": "Разрешенные домены Livechat", + "Livechat_Appearance": "Внешний вид Livechat", "Livechat_business_hour_type": "Тип рабочих часов (единичный или множественный)", "Livechat_custom_fields_options_placeholder": "Список с разделителями-запятыми, используемый для выбора предварительно настроенных значений. Пробелы между элементами не принимаются.", "Livechat_custom_fields_public_description": "Общедоступные пользовательские поля будут отображаться во внешних приложениях, таких как Livechat и др.", @@ -2249,6 +2357,7 @@ "Livechat_forward_open_chats_timeout": "Тайм-аут (в секундах) для пересылки чатов", "Livechat_guest_count": "Счетчик гостей", "Livechat_Inquiry_Already_Taken": "Уже выполнено", + "Livechat_Installation": "Установка Livechat", "Livechat_last_chatted_agent_routing": "Предпочитать последнего чатившегося агента", "Livechat_last_chatted_agent_routing_Description": "Настройка последний общавшийся агент назначает чаты агенту, который ранее взаимодействовал с тем же посетителем, если агент доступен, когда чат начинается.", "Livechat_managers": "Менеджеры Livechat", @@ -2289,7 +2398,10 @@ "Loading...": "Загрузка...", "Local_Domains": "Локальные домены", "Local_Password": "Локальный пароль", + "Local_Time": "Местное время", + "Local_Time_time": "Местное время: __time__", "Localization": "Язык", + "Location": "Местоположение", "Log_Exceptions_to_Channel": "Логировать исключения на канале", "Log_Exceptions_to_Channel_Description": "Канал, который получит все захваченные исключения. Оставьте пустым, чтобы игнорировать исключения.", "Log_File": "Отображать файл и строки", @@ -2319,6 +2431,7 @@ "Longest_response_time": "Наибольшее время отклика", "Looked_for": "Искал", "Mail_Message_Invalid_emails": "Вы предоставили один или более недействительных адресов электронной почты: %s", + "Mail_Message_Missing_subject": "Вы должны указать тему письма.", "Mail_Message_Missing_to": "Вы должны выбрать одного или нескольких пользователей или указать один или несколько адресов электронной почты, разделенных запятыми.", "Mail_Message_No_messages_selected_select_all": "Вы не выбрали ни одного сообщения. ", "Mail_Messages": "Почтовые сообщения", @@ -2401,6 +2514,7 @@ "Me": "Я", "Media": "СМИ", "Medium": "Обычный", + "Members": "Участники", "Members_List": "Пользователи", "mention-all": "Упоминать всех", "mention-all_description": "Разрешение на использование упоминания @all", @@ -2629,6 +2743,7 @@ "No_Limit": "Без Ограничений", "No_livechats": "У вас нет livechats", "No_mentions_found": "Упоминания не найдены", + "No_messages_found_to_prune": "Не найдено сообщений для удаления", "No_messages_yet": "Нет сообщений", "No_pages_yet_Try_hitting_Reload_Pages_button": "Пока нет страниц. Попробуйте нажать кнопку «Обновить страницы».", "No_pinned_messages": "Нет прикрепленных сообщений", @@ -2638,7 +2753,7 @@ "No_snippet_messages": "Нет сниппетов", "No_starred_messages": "Нет отмеченных сообщений", "No_such_command": "Несуществующая команда: \"__command__\"", - "No_Threads": "Темы не найдены", + "No_Threads": "Треды не найдены", "No_user_with_username_%s_was_found": "Пользователь с логином \"%s\" не найден!", "Nobody_available": "Никто не доступен", "Node_version": "Версия Node", @@ -2716,6 +2831,7 @@ "Open_Days": "Открытые дни", "Open_days_of_the_week": "Рабочие дни", "Open_Livechats": "Открыть Livechat", + "Open_thread": "Открыть тред", "Open_your_authentication_app_and_enter_the_code": "Откройте ваше приложение аутентификации и введите код. Вы также можете использовать один из кодов восстановления (backup codes).", "Opened": "Открыто", "Opened_in_a_new_window": "Открыть в новом окне", @@ -2853,7 +2969,7 @@ "Protocol": "Протокол", "Prune": "Очистка", "Prune_finished": "Очистка завершена", - "Prune_Messages": "Черновики", + "Prune_Messages": "Удалить сообщения", "Prune_Modal": "Вы уверены, что хотите удалить эти сообщения? Удаленные сообщения не могут быть восстановлены.", "Prune_Warning_after": "Это приведет к удалению всех %s в %s после %s.", "Prune_Warning_all": "Это удалит все %s в %s!", @@ -2864,7 +2980,6 @@ "Public": "Открытый", "Public_Channel": "Открытый канал", "Public_Community": "Открытое сообщество", - "Public_Relations": "Связи с общественностью", "Public_URL": "Публичный URL", "Purchase_for_free": "Покупка БЕСПЛАТНО", "Purchase_for_price": "Покупка за $%s", @@ -2962,8 +3077,8 @@ "Reply": "Ответить", "reply_counter": "__counter__ ответ", "reply_counter_plural": "__counter__ ответы", - "Reply_in_direct_message": "Ответить в прямом сообщении", - "Reply_in_thread": "Ответить в теме", + "Reply_in_direct_message": "Ответить личным сообщением", + "Reply_in_thread": "Ответить в треде", "ReplyTo": "Ответить", "Report": "Отчет", "Report_Abuse": "Сообщить о нарушениях", @@ -2997,8 +3112,8 @@ "RetentionPolicy_AppliesToDMs": "Применяется к личным сообщениям", "RetentionPolicy_AppliesToGroups": "Применяется к закрытым каналам", "RetentionPolicy_Description": "Автоматически обрезает старые сообщения через ваш экземпляр Rocket.Chat.", - "RetentionPolicy_DoNotPruneDiscussion": "Не очищать сообщения обсуждений", - "RetentionPolicy_DoNotPrunePinned": "Не очищать прикрепленные сообщения", + "RetentionPolicy_DoNotPruneDiscussion": "Не удалять сообщения обсуждений", + "RetentionPolicy_DoNotPrunePinned": "Не удалять прикрепленные сообщения", "RetentionPolicy_DoNotPruneThreads": "Не очищать треды", "RetentionPolicy_Enabled": "Включено", "RetentionPolicy_ExcludePinned": "Исключить закрепленные сообщения", @@ -3006,8 +3121,8 @@ "RetentionPolicy_FilesOnly_Description": "Удаляются только файлы, сами сообщения остаются на месте.", "RetentionPolicy_MaxAge": "Максимальное время жизни сообщений", "RetentionPolicy_MaxAge_Channels": "Максимальное время жизни сообщений в открытых каналах", - "RetentionPolicy_MaxAge_Description": "Обрезать все сообщения старше этого значения, в днях", - "RetentionPolicy_MaxAge_DMs": "Максимальное время жизни сообщений в личных сообщениях", + "RetentionPolicy_MaxAge_Description": "Удалять все сообщения старше этого значения, в днях", + "RetentionPolicy_MaxAge_DMs": "Максимальное время жизни личных сообщений", "RetentionPolicy_MaxAge_Groups": "Максимальное время жизни сообщений в закрытых каналах", "RetentionPolicy_Precision": "Точность таймера", "RetentionPolicy_Precision_Description": "Как часто должен запускаться таймер очистки. Установка этих значений позволяет каналам с более частыми таймерами очистки сообщений работать лучше, но может стоить дополнительных вычислительных мощностей на больших сообществах.", @@ -3104,9 +3219,16 @@ "SAML_Custom_Username_Normalize_None": "Нет нормализации", "SAML_Default_User_Role": "Роль пользователя по умолчанию", "SAML_Default_User_Role_Description": "Вы можете указать несколько ролей, разделяя их запятыми.", + "SAML_LogoutResponse_Template": "Шаблон выхода из системы", + "SAML_Metadata_Template": "Шаблон метаданных", + "SAML_Metadata_Template_Description": "Доступны следующие переменные:\n- **\\_\\_sloLocation\\_\\_**:URL одиночного входа в систему Rocket.Chat.\n- **\\__\\issuer\\__\\_**: Значение параметра __Custom Issuer__.\n- **\\_\\_identifierFormat\\_\\_**: Значение параметра __Identifier Format__.\n- **\\__\\certificateTag\\__\\_**: Если настроен личный сертификат, он будет включать __Metadata Certificate Template__, в противном случае он будет проигнорирован.\n- **\\__\\callbackUrl\\__\\_**: URL обратного вызова Rocket.Chat.", + "SAML_MetadataCertificate_Template": "Шаблон сертификата метаданных", + "SAML_NameIdPolicy_Template": "Шаблон политики NameID", + "SAML_NameIdPolicy_Template_Description": "Тут Вы можете использовать любую переменную из шаблона запроса авторизации.", "SAML_Role_Attribute_Name": "Имя атрибута роли", "SAML_Role_Attribute_Name_Description": "Если этот атрибут найден в ответе SAML, его значения будут использоваться в качестве имен ролей для новых пользователей.", "SAML_Role_Attribute_Sync": "Синхронизация ролей пользователя", + "SAML_Role_Attribute_Sync_Description": "Синхронизация ролей пользователей SAML при входе в систему (перезапись ролей локальных пользователей).", "SAML_Section_1_User_Interface": "Пользовательский интерфейс", "SAML_Section_2_Certificate": "Сертификат", "SAML_Section_3_Behavior": "Поведение", @@ -3139,6 +3261,7 @@ "Search_Integrations": "Поиск по интеграциям", "Search_message_search_failed": "Не удалось выполнить запрос поиска", "Search_Messages": "Поиск сообщений", + "Search_Files": "Искать файлы", "Search_Page_Size": "Размер страницы", "Search_Private_Groups": "Поиск приватных групп", "Search_Provider": "Поисковый провайдер", @@ -3153,6 +3276,7 @@ "Select_a_user": "Выберите пользователя", "Select_an_avatar": "Выберите аватар", "Select_an_option": "Выберите пункт", + "Select_at_least_one_user": "Выберите хотя бы одного пользователя", "Select_at_least_two_users": "Выберите как минимум двух пользователей", "Select_department": "Выберите отдел", "Select_file": "Выберите файл", @@ -3188,18 +3312,22 @@ "Send_request_on_offline_messages": "Отправить запрос на сообщения в автономном режиме", "Send_request_on_visitor_message": "Отправить запрос на гостевые сообщения", "Send_Test": "Отправить тест", + "Send_Test_Email": "Отправить тестовый email", "Send_via_email": "Отправить по электронной почте", + "Send_via_Email_as_attachment": "Отправить через Email как вложение", "Send_Visitor_navigation_history_as_a_message": "Отправить историю навигации посетителя в качестве сообщения", "Send_visitor_navigation_history_on_request": "Отправить историю навигации посетителя по запросу", "Send_welcome_email": "Отправить электронное письмо с приветствием", "Send_your_JSON_payloads_to_this_URL": "Отправить ваши полезные данные формата JSON на этот URL-адрес.", "send-many-messages": "Отправить много сообщений", "send-omnichannel-chat-transcript": "Отправить стенограмму omnichannel беседы", + "Sender_Info": "Информация об отправителе", "Sending": "Отправка...", "Sent_an_attachment": "Отправить вложение", "Sent_from": "Отправлено от", "Separate_multiple_words_with_commas": "Разделите несколько слов запятыми", "Served_By": "Обслуживается", + "Server": "Сервер", "Server_File_Path": "Путь к файлам сервера", "Server_Folder_Path": "Путь к папкам сервера", "Server_Info": "Информация о сервере", @@ -3511,11 +3639,12 @@ "This_room_has_been_archived_by__username_": "Комната была архивирована __username__", "This_room_has_been_unarchived_by__username_": "__username__ вернул этот чат из архива", "This_week": "На этой неделе", - "thread": "Обсуждение", + "thread": "Тред", "Thread_message": "Оставлен комментарий для *__username__'s* сообщение: _ __msg__ _", - "Threads": "Потоки", + "Threads": "Треды", "Thursday": "Четверг", "Time_in_seconds": "Время в секундах", + "Timeout": "Таймаут", "Timeouts": "Таймауты", "Timezone": "Часовой пояс", "Title": "Заголовок", @@ -3548,12 +3677,11 @@ "Total_conversations": "Всего разговоров", "Total_Discussions": "Всего обсуждений", "Total_messages": "Всего сообщений", - "Total_Threads": "Всего тем", + "Total_Threads": "Всего тредов", "Total_visitors": "Всего посетителей", "TOTP Invalid [totp-invalid]": "Код или пароль недействительны", "TOTP_reset_email": "Уведомление о сбросе двухфакторной аутентификации через TOTP", "totp-invalid": "Код или пароль недействительны", - "Tourism": "Туризм", "Transcript": "Стенограмма", "Transcript_Enabled": "Спросить у посетителя хочет ли он получить переписку после окончания чата", "Transcript_message": "Показать это сообщение, когда спрашиваем про получение переписке", @@ -3647,6 +3775,7 @@ "Unstar_Message": "Убрать отметку", "Update": "Обновить", "Update_EnableChecker": "Включить проверку обновлений", + "Update_EnableChecker_Description": "Автоматически проверяет наличие новых обновлений / важных сообщений от разработчиков Rocket.Chat и получает уведомления, когда они доступны. Уведомление появляется один раз на каждую новую версию в виде кликабельного баннера, а также в виде сообщения от бота Rocket.Cat, оба видны только администраторам.", "Update_every": "Обновлять каждые", "Update_LatestAvailableVersion": "Обновление до последней доступной версии", "Update_to_version": "Обновить до __version__", @@ -3676,6 +3805,7 @@ "Use_Server_configuration": "Использовать конфигурацию сервера", "Use_service_avatar": "Использовать %s аватар", "Use_this_response": "Использовать этот ответ", + "Use_response": "Использовать ответ", "Use_this_username": "Использовать этот логин", "Use_uploaded_avatar": "Использовать загруженный аватар", "Use_url_for_avatar": "Использовать URL для аватара", @@ -3799,6 +3929,7 @@ "Verified": "Подтверждён", "Verify": "Подтверждение", "Verify_your_email": "Подтвердите Ваш электронный адрес", + "Verify_your_email_for_the_code_we_sent": "Проверьте свою электронную почту на наличие кода, который мы отправили", "Version": "Версия", "Version_version": "Версия __version__", "Video Conference": "Видеоконференция", @@ -3875,6 +4006,7 @@ "Warning": "Предупреждение", "Warnings": "Предупреждения", "WAU_value": "WAU __value__", + "We_appreciate_your_feedback": "Мы ценим ваши отзывы", "We_are_offline_Sorry_for_the_inconvenience": "Мы не в сети. Извините за доставленные неудобства.", "We_have_sent_password_email": "На вашу электронную почту было отправлено письмо с инструкциями. Если по каким-то причинам письмо не пришло, попробуйте еще раз и/или напишите нам.", "We_have_sent_registration_email": "Чтобы подтвердить вашу регистрацию, мы отправили вам электронное сообщение. Пожалуйста, следуйте инструкциям в этом сообщении. Если вы не получили электронное сообщение, попробуйте ещё раз позже.", @@ -3909,7 +4041,9 @@ "When_a_line_starts_with_one_of_there_words_post_to_the_URLs_below": "Когда строка начинается с одного из этих слов, отправьте по URL(s) ниже", "When_is_the_chat_busier?": "Когда чат занят?", "Where_are_the_messages_being_sent?": "Куда отправляются сообщения?", + "Why_did_you_chose__score__": "Почему Вы выбрали __score__?", "Why_do_you_want_to_report_question_mark": "Почему вы хотите сообщить?", + "Will_Appear_In_From": "Будет отображаться в заголовке От: в отправленных Вами письмах", "will_be_able_to": "сможет", "Will_be_available_here_after_saving": "Будет доступен здесь после сохранения.", "Without_priority": "Без приоритета", @@ -3958,6 +4092,7 @@ "You_should_name_it_to_easily_manage_your_integrations": "Вам следует указать название для более удобного управления вашими интеграциями", "You_will_be_asked_for_permissions": "У вас будут запрошены разрешения", "You_will_not_be_able_to_recover": "Вы не сможете восстановить это сообщение!", + "You_will_not_be_able_to_recover_email_inbox": "Вы не сможете восстановить этот почтовый ящик", "You_will_not_be_able_to_recover_file": "Восстановить этот файл будет невозможно!", "You_wont_receive_email_notifications_because_you_have_not_verified_your_email": "Вы не можете получать уведомления по электронной почте, потому что не подтвердили ваш адрес электронной почты.", "Your_e2e_key_has_been_reset": "Ваш e2e ключ был сброшен.", diff --git a/packages/rocketchat-i18n/i18n/sk-SK.i18n.json b/packages/rocketchat-i18n/i18n/sk-SK.i18n.json index cba16b16d10f..8e1eebd54901 100644 --- a/packages/rocketchat-i18n/i18n/sk-SK.i18n.json +++ b/packages/rocketchat-i18n/i18n/sk-SK.i18n.json @@ -190,6 +190,7 @@ "Accounts_UserAddedEmail_Description": "Môžete použiť nasledujúce zástupné symboly: [meno], [fname], [lname] pre celé meno používateľa, krstné meno alebo priezvisko.[email] pre e-mail používateľa.[password] pre heslo používateľa.[Site_Name] a [Site_URL] pre názov a adresu URL.", "Accounts_UserAddedEmailSubject_Default": "Boli ste pridaný na lokalitu [Site_Name]", "Activate": "Aktivovať", + "Active": "aktívny", "Activity": "Aktivita", "Add": "Pridať", "Add_agent": "Pridať agenta", @@ -222,7 +223,6 @@ "Admin_Info": "Informácia o Adminovi", "Administration": "Administrácia", "Adult_images_are_not_allowed": "Obrázky pre dospelých nie sú povolené", - "Advocacy": "Obhajoba", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Po overení OAuth2 budú používatelia presmerovaní na túto adresu URL", "Agent": "Agent", "Agent_added": "Agent bol pridaný", @@ -555,7 +555,6 @@ "Connection_Closed": "Pripojenie je ukončené", "Connection_Reset": "Reset pripojenia", "Consulting": "Konzultovanie", - "Consumer_Goods": "Spotrebný tovar", "Contains_Security_Fixes": "Obsahuje bezpečnostné opravy", "Content": "Obsah", "Continue": "Pokračovať", @@ -1208,6 +1207,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Cesta k priečinku WebDAV, do ktorej majú byť nahrané súbory", "FileUpload_Webdav_Username": "WebDAV používateľské meno", "Filter": "filter", + "Filters": "Filtre", "Financial_Services": "Finančné služby", "First_Channel_After_Login": "Prvý kanál po prihlásení", "Flags": "flags", @@ -1275,8 +1275,6 @@ "Hash": "hašiš", "Header": "hlavička", "Header_and_Footer": "Hlavička a päta", - "Healthcare_and_Pharmaceutical": "Zdravotníctvo / Farmácia", - "Help_Center": "Centrum pomoci", "Helpers": "pomocníci", "Hex_Color_Preview": "Hex Color Preview", "Hidden": "skrytý", @@ -1296,6 +1294,7 @@ "Highlights_How_To": "Ak chcete byť upozornení, keď niekto spomína slovo alebo frázu, pridajte ho sem. Slovami alebo frázami môžete oddeliť čiarkami. Zvýraznite slová nerozlišujú veľkosť písmen.", "Highlights_List": "Zvýraznite slová", "History": "histórie", + "Home": "Domov", "Host": "Hostiteľ", "hours": "hodiny", "Hours": "hodiny", @@ -2055,7 +2054,6 @@ "Public": "verejnosť", "Public_Channel": "Verejný kanál", "Public_Community": "Verejné spoločenstvo", - "Public_Relations": "Vzťahy s verejnosťou", "Push": "TAM", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2554,7 +2552,6 @@ "Tokens_Required_Input_Placeholder": "Token názvy aktív", "Topic": "téma", "Total_messages": "Celkom správ", - "Tourism": "cestovný ruch", "Transcript_Enabled": "Spýtajte sa návštevníka, či by sa chcel prepisovať po ukončení chatu", "Transcript_message": "Správa na zobrazenie pri žiadaní o prepis", "Transcript_of_your_livechat_conversation": "Prepis vašej konverzácie z livechat.", diff --git a/packages/rocketchat-i18n/i18n/sl-SI.i18n.json b/packages/rocketchat-i18n/i18n/sl-SI.i18n.json index 303df068ee19..d0b65dfaaf48 100644 --- a/packages/rocketchat-i18n/i18n/sl-SI.i18n.json +++ b/packages/rocketchat-i18n/i18n/sl-SI.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Uporabite lahko naslednje oznake mesta: [name], [fname], [lname] za polno ime, ime ali priimek uporabnika.[email] za uporabniški e-poštni naslov.[password] za uporabniško geslo.[Site_Name] in [Site_URL] za ime aplikacije in URL.", "Accounts_UserAddedEmailSubject_Default": "Dodani ste bili na [Site_Name]", "Activate": "Sproži", + "Active": "Aktiven", "Activity": "Aktivnost", "Add": "Dodaj", "Add_agent": "Dodaj agenta", @@ -218,7 +219,6 @@ "Admin_Info": "Admin Info", "Administration": "Skrbništvo", "Adult_images_are_not_allowed": "Slike z neprimerno vsebino niso dovoljene", - "Advocacy": "Zagovorništvo", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Po OAuth2 avtentikaciji bo uporabnik preusmerjen na ta URL", "Agent": "Agent", "Agent_added": "Agent je bil dodan", @@ -547,7 +547,6 @@ "Connection_Closed": "Povezava je zaprta", "Connection_Reset": "Ponastavitev povezave", "Consulting": "Svetovanje", - "Consumer_Goods": "Potrošniško blago", "Contains_Security_Fixes": "Vsebuje varnostne popravke", "Content": "Vsebina", "Continue": "Nadaljuj", @@ -1189,6 +1188,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Pot do mape WebDAV, na katero naj bodo prenesene datoteke", "FileUpload_Webdav_Username": "Uporabniško ime za spletno mesto", "Filter": "Filter", + "Filters": "Filtri", "Financial_Services": "Finančne storitve", "First_Channel_After_Login": "Prvi kanal po vpisu", "Flags": "Zastavice", @@ -1256,8 +1256,6 @@ "Hash": "Zgoščena vrednost", "Header": "Glava", "Header_and_Footer": "Glava in noga", - "Healthcare_and_Pharmaceutical": "Zdravstvo / farmacevtski izdelki", - "Help_Center": "Center pomoči", "Helpers": "Pomočniki", "Hex_Color_Preview": "Barvni predogled Hex", "Hidden": "Skrito", @@ -1277,6 +1275,7 @@ "Highlights_How_To": "Dodajte tukaj, če želite biti obveščeni o omembi besede ali besedne zveze. Besede ali besedne zveze lahko ločite z vejicami. Označene besede niso občutljive na velike in male črke.", "Highlights_List": "Izpostavi besede", "History": "Zgodovina", + "Home": "Domov", "Host": "Gostitelj", "hours": "ure", "Hours": "Ure", @@ -2035,7 +2034,6 @@ "Public": "Javno", "Public_Channel": "Javni kanal", "Public_Community": "Javna skupnost", - "Public_Relations": "Odnosi z javnostjo", "Push": "Potisni", "Push_apn_cert": "Certifikat APN", "Push_apn_dev_cert": "APN Dev Cert", @@ -2534,7 +2532,6 @@ "Tokens_Required_Input_Placeholder": "Imena žetonov osnovnih sredstev", "Topic": "Tema", "Total_messages": "Skupno število sporočil", - "Tourism": "Turizem", "Transcript_Enabled": "Vprašajte obiskovalca, če bi želeli transkripcijo po tem, ko zaprejo klepet", "Transcript_message": "Sporočilo, ki se prikaže pri vprašanju o transkripciji", "Transcript_of_your_livechat_conversation": "Transkripcija vašega pogovora v živo.", diff --git a/packages/rocketchat-i18n/i18n/sq.i18n.json b/packages/rocketchat-i18n/i18n/sq.i18n.json index ba6df38d1d90..ca31379ca5f0 100644 --- a/packages/rocketchat-i18n/i18n/sq.i18n.json +++ b/packages/rocketchat-i18n/i18n/sq.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "Ju mund të përdorni placeholders e mëposhtme: [name], [fname], [lname] për emrin e përdoruesit të plotë, emrin e parë ose emrin e fundit, respektivisht. [email] për email të përdoruesit. [password] për fjalëkalimin e përdoruesit. [Site_Name] dhe [Site_URL] në emër Aplikimit dhe URL respektivisht. ", "Accounts_UserAddedEmailSubject_Default": "Ju janë shtuar në [Site_Name]", "Activate": "Aktivizoj", + "Active": "aktiv", "Activity": "aktivitet", "Add": "shtoj", "Add_agent": "Shto agjent", @@ -219,7 +220,6 @@ "Admin_Info": "Info Admin", "Administration": "administratë", "Adult_images_are_not_allowed": "Imazhet e të rriturve nuk lejohen", - "Advocacy": "mbrojtje", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Pas vërtetimit OAuth2, përdoruesit do të ridrejtuar në këtë URL", "Agent": "agjent", "Agent_added": "Agent shtuar", @@ -549,7 +549,6 @@ "Connection_Closed": "Lidhja u mbyll", "Connection_Reset": "Rivendosja e lidhjes", "Consulting": "këshillues", - "Consumer_Goods": "Mallrat e Konsumit", "Contains_Security_Fixes": "Përmban rregullime të sigurisë", "Content": "Përmbajtje", "Continue": "vazhdoj", @@ -1265,8 +1264,6 @@ "Hash": "hashish", "Header": "arkitra", "Header_and_Footer": "Header dhe Footer", - "Healthcare_and_Pharmaceutical": "Shëndetësore / Pharmaceutical", - "Help_Center": "Qendra e ndihmes", "Helpers": "Helpers", "Hex_Color_Preview": "Hex Color Preview", "Hidden": "I fshehur", @@ -2045,7 +2042,6 @@ "Public": "publik", "Public_Channel": "Kanali publik", "Public_Community": "Komuniteti Publik", - "Public_Relations": "Marrëdhëniet me publikun", "Push": "shtytje", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2544,7 +2540,6 @@ "Tokens_Required_Input_Placeholder": "Emrat e pasurive të xhepit", "Topic": "temë", "Total_messages": "Gjithë mesazhet", - "Tourism": "turizëm", "Transcript_Enabled": "Pyetni vizitorin nëse do të donin një transkript pas bisedës së mbyllur", "Transcript_message": "Mesazhi për të treguar kur pyet për transkriptin", "Transcript_of_your_livechat_conversation": "Transkripti i bisedës tuaj livechat.", diff --git a/packages/rocketchat-i18n/i18n/sr.i18n.json b/packages/rocketchat-i18n/i18n/sr.i18n.json index 594c29c27316..40755e2bd256 100644 --- a/packages/rocketchat-i18n/i18n/sr.i18n.json +++ b/packages/rocketchat-i18n/i18n/sr.i18n.json @@ -124,6 +124,7 @@ "Accounts_UserAddedEmail_Description": "Можете користити следеће симболе: [name], [fname], [lname] за пуно име корисника, имену или презимену, респективно. [email] е-поште корисника. [password] за лозинку корисника. [Site_Name] и [Site_URL] за апликације Име и УРЛ респективно. ", "Accounts_UserAddedEmailSubject_Default": "Додати сте у [Site_Name]", "Activate": "Активирај", + "Active": "активан", "Activity": "Активност", "Add": "Додај", "Add_agent": "Додај агента", @@ -147,7 +148,6 @@ "Additional_emails": "Додатне Е-поште", "Administration": "Администрација", "Adult_images_are_not_allowed": "Слике за одрасле нису дозвољене", - "Advocacy": "Адвокатура", "Agent": "Агент", "Agent_added": "Агент додат", "Agent_removed": "Агент уклоњен", @@ -397,7 +397,6 @@ "Connection_Closed": "Веза је затворена", "Connection_Reset": "Ресет везе", "Consulting": "Консалтинг", - "Consumer_Goods": "Роба широке потрошње", "Contains_Security_Fixes": "Садржи сигурносне исправке", "Content": "Садржај", "Continue": "наставити", @@ -1003,6 +1002,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Путања фасцикле ВебДАВ на коју треба отпремити датотеке", "FileUpload_Webdav_Username": "ВебДАВ корисничко име", "Filter": "филтер", + "Filters": "Филтери", "Financial_Services": "Финансијске услуге", "First_Channel_After_Login": "Први канал након пријаве", "Flags": "Заставе", @@ -1056,8 +1056,6 @@ "Hash": "Хеш", "Header": "Заглавље", "Header_and_Footer": "Заглавље и подножје", - "Healthcare_and_Pharmaceutical": "Здравство/фармација", - "Help_Center": "Центар за помоћ", "Helpers": "Помоћници", "Hidden": "Сакривен", "Hide": "Сакриј собу", @@ -1075,6 +1073,7 @@ "Highlights_How_To": "Да би били обавештени када неко помене реч или фразу, додајте је овде. Можеш раздвојити речи или фразе зарезом. Велика/мала слова нису битна.", "Highlights_List": "Наглаши речи", "History": "Историја", + "Home": "дом", "Host": "Домаћин", "hours": "сати", "Hours": "Сати", @@ -1745,7 +1744,6 @@ "Public": "јавни", "Public_Channel": "Јавни канал", "Public_Community": "Јавна заједница", - "Public_Relations": "Односи са јавношћу", "Push": "Гурај", "Push_apn_cert": "АПН Церт", "Push_apn_dev_cert": "АПН Дев Церт", @@ -2234,7 +2232,6 @@ "Topic": "тема", "Total_Discussions": "Укупно дискусија", "Total_messages": "Укупно порука", - "Tourism": "Туризам", "Transcript_Enabled": "Питајте посетиоца да ли би желели транскрипт после затварања ћаскања", "Transcript_message": "Порука која се прикаже приликом тражења транскрипта", "Transcript_of_your_livechat_conversation": "Транскрипт вашег разговора.", diff --git a/packages/rocketchat-i18n/i18n/sv.i18n.json b/packages/rocketchat-i18n/i18n/sv.i18n.json index a14baafc508a..f41b14d77546 100644 --- a/packages/rocketchat-i18n/i18n/sv.i18n.json +++ b/packages/rocketchat-i18n/i18n/sv.i18n.json @@ -33,6 +33,7 @@ "Accounts_AllowedDomainsList": "Tillåten Domänlista", "Accounts_AllowedDomainsList_Description": "Kommaseparerad lista över tillåtna domäner", "Accounts_AllowEmailChange": "Tillåt byte av e-postadress", + "Accounts_AllowEmailNotifications": "Tillåt e-postaviseringar", "Accounts_AllowPasswordChange": "Tillåt byte av lösenord", "Accounts_AllowRealNameChange": "Tillåt namnändring", "Accounts_AllowUserAvatarChange": "Tillåt byte av användarens avatar", @@ -77,20 +78,25 @@ "Accounts_iframe_url": "Iframe URL", "Accounts_LoginExpiration": "Utgångsdagar för inloggning", "Accounts_ManuallyApproveNewUsers": "Godkänn nya användare manuellt", + "Accounts_OAuth_Apple": "Logga in med Apple", "Accounts_OAuth_Custom_Authorize_Path": "Tillåt sökväg", "Accounts_OAuth_Custom_Avatar_Field": "Avatarfält", "Accounts_OAuth_Custom_Button_Color": "Knappfärg", "Accounts_OAuth_Custom_Button_Label_Color": "Textfärg på knapp", "Accounts_OAuth_Custom_Button_Label_Text": "Knapptext", + "Accounts_OAuth_Custom_Email_Field": "E-postfält", "Accounts_OAuth_Custom_Enable": "Aktivera", "Accounts_OAuth_Custom_id": "ID", "Accounts_OAuth_Custom_Identity_Path": "Sökväg för identitet", "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Identitetstoken skickad via", "Accounts_OAuth_Custom_Login_Style": "Stil på inloggning", + "Accounts_OAuth_Custom_Merge_Roles": "Slå samman roller från SSO", "Accounts_OAuth_Custom_Merge_Users": "Slå samman användare", + "Accounts_OAuth_Custom_Name_Field": "Namnfält", "Accounts_OAuth_Custom_Roles_Claim": "Roller / Grupper fältnamn", "Accounts_OAuth_Custom_Scope": "Omfattning", "Accounts_OAuth_Custom_Secret": "Hemlig", + "Accounts_OAuth_Custom_Show_Button_On_Login_Page": "Visa knapp på inloggningssidan", "Accounts_OAuth_Custom_Token_Path": "Sökväg Token", "Accounts_OAuth_Custom_Token_Sent_Via": "Token sänd via", "Accounts_OAuth_Custom_Username_Field": "Fält för användarnamn", @@ -196,7 +202,10 @@ "Accounts_UserAddedEmail_Default": "Välkommen till [Site_Name] Gå till [Site_URL] och prova den bästa öppen källkod chattlösningen som finns idag! Du kan logga in med din e-post: [email] och lösenord: [password]. Du kan bli tvungen att ändra den vid första inloggningen.", "Accounts_UserAddedEmail_Description": "Du kan använda följande platsmarkörer: [name], [fname], [lname] för användarens fullständiga namn, förnamn eller efternamn. [email] för användarens e-post. [password] för användarens lösenord. [Site_Name] och [Site_URL] för Programnamn och webbadress. ", "Accounts_UserAddedEmailSubject_Default": "Du har lagts till [Site_Name]", + "Action_required": "Åtgärd krävs", "Activate": "Aktivera", + "Active": "Aktiv", + "Active_users": "Aktiva användare", "Activity": "Aktivitet", "Add": "Skapa", "Add_agent": "Skapa agent", @@ -204,6 +213,7 @@ "Add_Domain": "Lägg till domän", "Add_files_from": "Lägg till filer från", "Add_manager": "Skapa manager", + "Add_Reaction": "Lägg till reaktion", "Add_Role": "Lägg till roll", "Add_user": "Skapa användare", "Add_User": "Skapa Användare", @@ -229,7 +239,6 @@ "Admin_Info": "Admin Info", "Administration": "Administrering", "Adult_images_are_not_allowed": "Pornografiskt material är inte tillåtet", - "Advocacy": "Främjande", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Efter OAuth2 autentisering kommer användarna att omdirigeras till den här webbadressen", "Agent": "Agent", "Agent_added": "Agent tillagd", @@ -590,7 +599,6 @@ "Connection_Closed": "Anslutningen är stängd", "Connection_Reset": "Anslutning återställd", "Consulting": "Consulting", - "Consumer_Goods": "Konsumtionsvaror", "Contact": "Kontakt", "Contains_Security_Fixes": "Innehåller säkerhetsfixar", "Content": "Innehåll", @@ -1328,8 +1336,6 @@ "Hash": "Hash", "Header": "Rubrik", "Header_and_Footer": "Sidhuvud och sidfot", - "Healthcare_and_Pharmaceutical": "Sjukvård / Läkemedel", - "Help_Center": "Hjälpcenter", "Helpers": "hjälpare", "Hex_Color_Preview": "Hex-färgförhandsgranskning", "Hi_username": "Hej __name__", @@ -1350,6 +1356,7 @@ "Highlights_How_To": "För att bli meddelad när någon nämner ett ord eller en fras, lägg till ordet eller frasen här. Du kan separera ord eller fraser med kommatecken. Markerade ord är inte skiftlägeskänsliga.", "Highlights_List": "Markera ord", "History": "Historik", + "Home": "Hem", "Host": "Värd", "hours": "timmar", "Hours": "Timmar", @@ -1513,7 +1520,7 @@ "IRC_Login_Fail": "Utmatning vid en misslyckad anslutning till IRC-servern.", "IRC_Login_Success": "Utgång vid en lyckad anslutning till IRC-servern.", "IRC_Message_Cache_Size": "Cachemärkningen för utgående meddelandehantering.", - "IRC_Port": "Hamnen att binda till på IRC-värdservern.", + "IRC_Port": "Porten att binda till på IRC-värdservern.", "IRC_Private_Message": "Utmatning av PRIVMSG-kommandot.", "IRC_Quit": "Utgång vid avslutande av en IRC-session.", "is_also_typing": "skriver också", @@ -2115,7 +2122,6 @@ "Public": "Offentlig", "Public_Channel": "Publik kanal", "Public_Community": "Offentlig gemenskap", - "Public_Relations": "Public relations", "Push": "Push", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -2632,7 +2638,6 @@ "Total_Discussions": "Totala diskussioner", "Total_messages": "Totala meddelanden", "Total_Threads": "Totala trådar", - "Tourism": "Turism", "Transcript_Enabled": "Fråga besökare om de skulle vilja ha ett transkript efter chatt stängt", "Transcript_message": "Meddelande att visa när du frågar om transkript", "Transcript_of_your_livechat_conversation": "Avskrift av din livechat-konversation.", diff --git a/packages/rocketchat-i18n/i18n/ta-IN.i18n.json b/packages/rocketchat-i18n/i18n/ta-IN.i18n.json index 683c7af8f009..52e0b66c4d41 100644 --- a/packages/rocketchat-i18n/i18n/ta-IN.i18n.json +++ b/packages/rocketchat-i18n/i18n/ta-IN.i18n.json @@ -188,6 +188,7 @@ "Accounts_UserAddedEmail_Description": "நீங்கள் கீழ்கண்ட இடப்பயனர்கள் பயன்படுத்தலாம்: [name], [fname], [lname] முறையே பயனர் முழு பெயர், முதல் பெயர் அல்லது கடைசி பெயர், ஐந்து. பயனர் மின்னஞ்சல் ஐந்து [email]. பயனரின் கடவுச்சொல்லை [password]. [Site_Name] மற்றும் [Site_URL] முறையே விண்ணப்ப பெயர் மற்றும் URL க்கான. ", "Accounts_UserAddedEmailSubject_Default": "நீங்கள் சேர்க்கப் பட்டுள்ளது [Site_Name]", "Activate": "செயல்படுத்த", + "Active": "செயலில்", "Activity": "செயல்பாடு", "Add": "கூட்டு", "Add_agent": "முகவர் சேர்", @@ -219,7 +220,6 @@ "Admin_Info": "நிர்வாகம் தகவல்", "Administration": "நிர்வாகம்", "Adult_images_are_not_allowed": "வயது வந்தோருக்கான படங்கள் அனுமதிக்கப்படவில்லை", - "Advocacy": "ஆலோசனை", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "OAuth2 ஐப் அங்கீகரித்த பின், பயனர்கள் இந்த URL திருப்பிவிடப்பட்டது", "Agent": "முகவர்", "Agent_added": "முகவர் சேர்க்கப்பட்டது", @@ -549,7 +549,6 @@ "Connection_Closed": "இணைப்பு மூடப்பட்டது", "Connection_Reset": "இணைப்பு மீட்டமை", "Consulting": "ஆலோசனை", - "Consumer_Goods": "நுகர்வோர் பொருட்கள்", "Contains_Security_Fixes": "பாதுகாப்பு திருத்தங்கள் உள்ளன", "Content": "உள்ளடக்க", "Continue": "தொடர்ந்து", @@ -1196,6 +1195,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV அடைவு பாதை பதிவேற்றப்பட வேண்டிய கோப்பு", "FileUpload_Webdav_Username": "WebDAV பயனர்பெயர்", "Filter": "வடிகட்டி", + "Filters": "வடிப்பான்கள்", "Financial_Services": "நிதி சேவைகள்", "First_Channel_After_Login": "உள்நுழைந்த பிறகு முதல் சேனல்", "Flags": "கொடிகள்", @@ -1263,8 +1263,6 @@ "Hash": "புல", "Header": "தலைப்பு", "Header_and_Footer": "தலைப்பு மற்றும் முடிப்பு", - "Healthcare_and_Pharmaceutical": "ஹெல்த்கேர் / மருந்து", - "Help_Center": "உதவி மையம்", "Helpers": "உதவியாளர்கள்", "Hex_Color_Preview": "ஹெக்ஸ் கலர் முன்னோட்டம்", "Hidden": "மறைக்கப்பட்ட", @@ -2043,7 +2041,6 @@ "Public": "பொது", "Public_Channel": "பொது சேனல்", "Public_Community": "பொது சமூகம்", - "Public_Relations": "பொது உறவுகள்", "Push": "புஷ்", "Push_apn_cert": "APN ஆனது சான்றிதழ்", "Push_apn_dev_cert": "APN ஆனது தேவ் சான்றிதழ்", @@ -2541,7 +2538,6 @@ "Tokens_Required_Input_Placeholder": "டோக்கன்கள் சொத்து பெயர்கள்", "Topic": "தலைப்பு", "Total_messages": "மொத்த செய்திகள்", - "Tourism": "சுற்றுலா", "Transcript_Enabled": "சேட் மூடப்பட்ட பிறகு அவர்கள் ஒரு டிரான்ஸ்கிரிப்ட் விரும்பியிருந்தால் பார்வையாளரைக் கேள்", "Transcript_message": "டிரான்ஸ்கிரிப்டைப் பற்றி கேட்கும் போது செய்தி காட்டு", "Transcript_of_your_livechat_conversation": "உங்கள் livechat உரையாடலைப் படியுங்கள்.", diff --git a/packages/rocketchat-i18n/i18n/th-TH.i18n.json b/packages/rocketchat-i18n/i18n/th-TH.i18n.json index 551d5d0e2e16..982769802a40 100644 --- a/packages/rocketchat-i18n/i18n/th-TH.i18n.json +++ b/packages/rocketchat-i18n/i18n/th-TH.i18n.json @@ -187,6 +187,7 @@ "Accounts_UserAddedEmail_Description": "คุณสามารถใช้ตัวยึดตำแหน่งต่อไปนี้: [name], [fname], [lname] สำหรับชื่อเต็มของผู้ใช้ชื่อหรือนามสกุลตามลำดับ[email] สำหรับอีเมลของผู้ใช้[รหัสผ่าน] สำหรับรหัสผ่านของผู้ใช้[Site_Name] และ [Site_URL] สำหรับชื่อแอ็พพลิเคชันและ URL ตามลำดับ", "Accounts_UserAddedEmailSubject_Default": "คุณได้รับการเพิ่มใน [Site_Name]", "Activate": "กระตุ้น", + "Active": "คล่องแคล่ว", "Activity": "กิจกรรม", "Add": "เพิ่ม", "Add_agent": "เพิ่มตัวแทน", @@ -218,7 +219,6 @@ "Admin_Info": "ข้อมูลผู้ดูแลระบบ", "Administration": "การบริหาร", "Adult_images_are_not_allowed": "ภาพผู้ใหญ่ไม่ได้รับอนุญาต", - "Advocacy": "ทนาย", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "หลังจากการตรวจสอบสิทธิ์ OAuth2 ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยัง URL นี้", "Agent": "ตัวแทน", "Agent_added": "เพิ่มตัวแทนแล้ว", @@ -548,7 +548,6 @@ "Connection_Closed": "ปิดการเชื่อมต่อ", "Connection_Reset": "รีเซ็ตการเชื่อมต่อ", "Consulting": "การให้คำปรึกษา", - "Consumer_Goods": "เครื่องอุปโภคบริโภค", "Contains_Security_Fixes": "ประกอบด้วยการแก้ปัญหาด้านความปลอดภัย", "Content": "เนื้อหา", "Continue": "ต่อ", @@ -1194,6 +1193,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "เส้นทางโฟลเดอร์ WebDAV ซึ่งควรอัปโหลดไฟล์ไปที่", "FileUpload_Webdav_Username": "ชื่อผู้ใช้ WebDAV", "Filter": "กรอง", + "Filters": "ฟิลเตอร์", "Financial_Services": "บริการทางการเงิน", "First_Channel_After_Login": "ช่องแรกหลังจากเข้าสู่ระบบ", "Flags": "ธง", @@ -1260,8 +1260,6 @@ "Hash": "กัญชา", "Header": "ส่วนหัว", "Header_and_Footer": "ส่วนหัวและท้ายกระดาษ", - "Healthcare_and_Pharmaceutical": "การดูแลสุขภาพ / เภสัชกรรม", - "Help_Center": "ศูนย์ช่วยเหลือ", "Helpers": "ผู้ช่วย", "Hex_Color_Preview": "ตัวอย่างสี Hex", "Hidden": "ซ่อนเร้น", @@ -1281,6 +1279,7 @@ "Highlights_How_To": "หากต้องการแจ้งเมื่อมีคนพูดถึงคำหรือวลีให้เพิ่มที่นี่ คุณสามารถแยกคำหรือวลีด้วยเครื่องหมายจุลภาค ไฮไลต์คำไม่สำคัญต่อกรณี", "Highlights_List": "ไฮไลต์คำ", "History": "ประวัติศาสตร์", + "Home": "บ้าน", "Host": "เจ้าภาพ", "hours": "ชั่วโมง", "Hours": "ชั่วโมง", @@ -2039,7 +2038,6 @@ "Public": "สาธารณะ", "Public_Channel": "ช่องสาธารณะ", "Public_Community": "ชุมชนสาธารณะ", - "Public_Relations": "ประชาสัมพันธ์", "Push": "ดัน", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "AP Dev Dev", @@ -2536,7 +2534,6 @@ "Tokens_Required_Input_Placeholder": "ชื่อสินทรัพย์ Tokens", "Topic": "หัวข้อเรื่อง", "Total_messages": "ข้อความทั้งหมด", - "Tourism": "การท่องเที่ยว", "Transcript_Enabled": "ถามผู้เข้าชมว่าพวกเขาต้องการการถอดเสียงหลังจากปิดแชท", "Transcript_message": "ข้อความที่แสดงเมื่อถามเกี่ยวกับการถอดเสียง", "Transcript_of_your_livechat_conversation": "บันทึกการสนทนา livechat ของคุณ", diff --git a/packages/rocketchat-i18n/i18n/tr.i18n.json b/packages/rocketchat-i18n/i18n/tr.i18n.json index 0530d7aea14b..f68743f75c5d 100644 --- a/packages/rocketchat-i18n/i18n/tr.i18n.json +++ b/packages/rocketchat-i18n/i18n/tr.i18n.json @@ -210,6 +210,7 @@ "Accounts_UserAddedEmail_Description": " Kullanıcının tam adı, ad veya soyadı içrma Temsilcisi' Olmadan da Kabul Etin sırasıyla [name], [fname], [lname] kullanabilirsiniz. Kullanıcının e-posta'sı için [email]. Kullanıcının parolası için [password]. Site adı ve Site URL'si için de [Site_Name] ve [Site_URL] kullanabilirsiniz. ", "Accounts_UserAddedEmailSubject_Default": "[Site_Name] adlı siteye eklendiniz", "Activate": "Etkinleştir", + "Active": "Etkin", "Activity": "Etkinlik", "Add": "Ekle", "Add_agent": "Temsilci Ekle", @@ -243,7 +244,6 @@ "Admin_Info": "Yönetici Bilgisi", "Administration": "Yönetim", "Adult_images_are_not_allowed": "Yetişkinlere özel içeriklere izin verilmiyor", - "Advocacy": "Savunma", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "OAuth2 kimlik doğrulamadan sonra, kullanıcılar bu URL'ye yönlendirilecektir", "Agent": "Firma Temsilcisi", "Agent_added": "Temsilci Eklendi", @@ -674,7 +674,6 @@ "Connection_Reset": "Bağlantı sıfırlama", "Connectivity_Services": "Bağlantı Hizmetleri", "Consulting": "Danışmanlık", - "Consumer_Goods": "Tüketici Malları", "Contact": "İletişim", "Contains_Security_Fixes": "Güvenlik Düzeltmeleri İçeriyor", "Content": "İçerik", @@ -1442,6 +1441,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Dosyaların yüklenmesi gereken WebDAV klasör yolu", "FileUpload_Webdav_Username": "WebDAV Kullanıcı Adı", "Filter": "Filtre", + "Filters": "Filtreler", "Financial_Services": "Finansal hizmetler", "First_Channel_After_Login": "Giriş Sonrası Birinci Kanal", "First_response_time": "İlk Yanıt Süresi", @@ -1521,8 +1521,6 @@ "Group_mentions_only": "Yalnızca grup bahsetmeleri", "Header": "Üst kısım", "Header_and_Footer": "Üst ve alt kısım", - "Healthcare_and_Pharmaceutical": "Sağlık / İlaç", - "Help_Center": "Yardım Merkezi", "Helpers": "Yardımcılar", "Hex_Color_Preview": "Onaltılı Renkli Önizleme", "Hi": "Merhaba", @@ -1545,6 +1543,7 @@ "Highlights_How_To": "Birisi bu sözcük veya ifadelerden bahsettiğinde bildirim gelmesi için, buraya ekleyin. Sözcük veya ifadeleri virgüller ile ayırabilirsiniz. Vurgulanacak Sözcükler büyük küçük harf duyarlı değildir.", "Highlights_List": "Vurgulanacak sözcükler", "History": "Geçmiş", + "Home": "Ev", "hours": "saatler", "Hours": "Saatler", "How_friendly_was_the_chat_agent": "Görüşme temsilcisi ne kadar dost canlısıydı?", @@ -2415,7 +2414,6 @@ "Public": "kamu", "Public_Channel": "Herkese Açık Kanal", "Public_Community": "Kamu Topluluğu", - "Public_Relations": "Halkla ilişkiler", "Purchase_for_free": "ÜCRETSİZ satın al", "Purchase_for_price": "%s$'a satın al", "Purchased": "Satın alınan", @@ -2992,7 +2990,6 @@ "Total_messages": "Toplam İleti Sayısı", "Total_Threads": "Toplam Konu", "Total_visitors": "Toplam Ziyaretçi", - "Tourism": "Turizm", "Transcript_Enabled": "Sohbet Kapanışından Sonra Bir Transkript Olsun mı Ziyaretçiye Sorun", "Transcript_message": "Transkript Hakkında Sormak İsterseniz Gösterilecek İleti", "Transcript_of_your_livechat_conversation": "Canlı sohbet konuşmasının not belgesi.", diff --git a/packages/rocketchat-i18n/i18n/ug.i18n.json b/packages/rocketchat-i18n/i18n/ug.i18n.json index 224573ad5fb2..ce23a8fa81ec 100644 --- a/packages/rocketchat-i18n/i18n/ug.i18n.json +++ b/packages/rocketchat-i18n/i18n/ug.i18n.json @@ -110,6 +110,7 @@ "Accounts_UserAddedEmail_Description": "سىز تۆۋەنكى ئورۇن ئىگىلەش بەلگىسى ئىشلىتەلەيسىز:[name], [fname], [lname] ئايرىم ھالدا ئابونتنىڭ تولۇق ئىسمى ، ئىسمى ياكى فامىلىسى بولىدۇ. [email] ئابونتنىڭ ئىلخىتى بولىدۇ[password] ئابونتنىڭ مەخپىي نومۇرى بولىدۇ [Site_Name] ۋە [Site_URL] ئايرىم ھالدا توربەت ئىسمى ۋە تور بەر ئادرېسى بولىدۇ ", "Accounts_UserAddedEmailSubject_Default": "گە قاچىلاندىڭىز [Site_Name] سىز", "Activate": "قوزغىتىش", + "Active": "ھەرىكەتتە", "Activity": "ھەرىكەتلىنىش", "Add": "قوشۇش", "Add_agent": "خېرىدار مۇلازىمىتى قوشۇش", @@ -483,6 +484,7 @@ "Highlights_How_To": "باشقىلار يوللىغان ئۇچۇرنىڭ ئىچىدە بۇيەردىكى ئاچقۇچلۇق سۆز بولغاندا ، سىز ئەسكەرتىش قوبۇل قىلىسىز.پەش بەلگىسى ئارقىلىق كۆپلىگەن ئاچقۇچلۇق سۆزنى ئايرىڭ . چوڭ-كىچىك يېزىلىشى پەرقلەنمەيدۇ.", "Highlights_List": "يۇقىرى ئېنىقلىق خەتلەر", "History": "تارىخ", + "Home": "ئۆي", "Host": "مۇلازىمىتېر", "hours": "سائەت", "How_friendly_was_the_chat_agent": "توردا بار مۇلازىمنىڭ دوستانە بولۇش دەرىجىسى قانداق ؟", diff --git a/packages/rocketchat-i18n/i18n/uk.i18n.json b/packages/rocketchat-i18n/i18n/uk.i18n.json index 3b9b153c6ff1..75f6e36e12ad 100644 --- a/packages/rocketchat-i18n/i18n/uk.i18n.json +++ b/packages/rocketchat-i18n/i18n/uk.i18n.json @@ -16,6 +16,7 @@ "24_Hour": "24-годинний формат часу", "A_new_owner_will_be_assigned_automatically_to__count__rooms": "Новий власник буде призначений автоматично до __count__ кімнат.", "A_new_owner_will_be_assigned_automatically_to_the__roomName__room": "Новий власник буде призначений автоматично до кімнати __roomName__.", + "A_new_owner_will_be_assigned_automatically_to_those__count__rooms__rooms__": "Для наступних кімнат кількістю __count__ буде автоматично призначено нового власника: __rooms__.", "Accept": "Погоджуюсь", "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Приймати запити із livechat, навіть коли немає підключених співробітників", "Accept_new_livechats_when_agent_is_idle": "Приймати нові запити livechat, коли представник не активний ", @@ -41,6 +42,7 @@ "Accounts_AllowEmailChange": "Дозволити зміну email адреси", "Accounts_AllowEmailNotifications": "Дозволити сповіщення електронною поштою", "Accounts_AllowPasswordChange": "Дозволити зміну пароля", + "Accounts_AllowPasswordChangeForOAuthUsers": "Дозволити зміну пароля для користувачів OAuth", "Accounts_AllowRealNameChange": "Дозволити змінювати назву", "Accounts_AllowUserAvatarChange": "Дозволити користувачеві змінювати аватар", "Accounts_AllowUsernameChange": "Дозволити зміну імені користувача", @@ -86,18 +88,23 @@ "Accounts_iframe_url": "Iframe Url", "Accounts_LoginExpiration": "Термін дії входу у днях", "Accounts_ManuallyApproveNewUsers": "Вручну затверджувати нових користувачів", + "Accounts_OAuth_Apple": "Вхід із Apple", "Accounts_OAuth_Custom_Access_Token_Param": "Назва Параметру для токена доступу", "Accounts_OAuth_Custom_Authorize_Path": "Шлях авторизації", "Accounts_OAuth_Custom_Avatar_Field": "Поле аватару", "Accounts_OAuth_Custom_Button_Color": "колір кнопки", "Accounts_OAuth_Custom_Button_Label_Color": "Колір тексту кнопки", "Accounts_OAuth_Custom_Button_Label_Text": "Текст кнопки", + "Accounts_OAuth_Custom_Channel_Admin": "Карта групи даних користувачів", + "Accounts_OAuth_Custom_Channel_Map": "Карта Channel групи OAuth", "Accounts_OAuth_Custom_Email_Field": "Поле електронної пошти", "Accounts_OAuth_Custom_Enable": "Включити", + "Accounts_OAuth_Custom_Groups_Claim": "Поле Ролі / Групи для зіставлення каналів", "Accounts_OAuth_Custom_id": "Id", "Accounts_OAuth_Custom_Identity_Path": "Шлях ідентифікації ", "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Токен ідентифікації відправлено через", "Accounts_OAuth_Custom_Login_Style": "Стиль входу", + "Accounts_OAuth_Custom_Map_Channels": "Зіставити ролі / групи із каналами", "Accounts_OAuth_Custom_Merge_Roles": "Об'єднати ролі з SSO", "Accounts_OAuth_Custom_Merge_Users": "Об'єднати користувачів", "Accounts_OAuth_Custom_Name_Field": "Поле імені", @@ -203,6 +210,8 @@ "Accounts_RegistrationForm_SecretURL_Description": "Ви повинні забезпечити випадковий рядок, який буде додано до вашої URL-адреси реєстрації . Приклад: https://open.rocket.chat/register/[secret_hash]", "Accounts_RequireNameForSignUp": "Вимагати ім'я для реєстрації", "Accounts_RequirePasswordConfirmation": "Вимагати підтвердження паролю", + "Accounts_RoomAvatarExternalProviderUrl": "URL-адреса зовнішнього постачальника аватару Room", + "Accounts_RoomAvatarExternalProviderUrl_Description": "Приклад: `https://acme.com/api/v1/{roomId}`", "Accounts_SearchFields": "Поля, які потрібно враховувати в пошуку", "Accounts_Send_Email_When_Activating": "Надіслати електронний лист активованому користувачеві", "Accounts_Send_Email_When_Deactivating": "Надіслати електронний деактивованому користувачеві", @@ -212,18 +221,28 @@ "Accounts_SetDefaultAvatar_Description": "Спробувати визначити аватар із сервісів OAuth або Gravatar", "Accounts_ShowFormLogin": "Показати форму входу за замовчуванням", "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In": "Автоматично вибирайте нових користувачів для двофакторної авторизації за допомогою електронної пошти", + "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In_Description": "Для нових користувачів за замовчуванням ввімкнено двофакторну автентифікацію із використанням електронної пошти. Цей параметр можна вимкнути на сторінці профілю.", + "Accounts_TwoFactorAuthentication_By_Email_Code_Expiration": "Час закінчення терміну дії коду, надісланого електронною поштою, у секундах", "Accounts_TwoFactorAuthentication_By_Email_Enabled": "Увімкніть двофакторну автентифікацію електронною поштою", "Accounts_TwoFactorAuthentication_By_Email_Enabled_Description": "Користувачі із підтвердженою електронною поштою та включеною опцією у своєму профілі, отримають електронний лист із тимчасовим кодом для авторизації певних дій, таких як вхід, збереження профілю тощо.", "Accounts_TwoFactorAuthentication_Enabled": "Увімкнути двофакторну автентифікацію через TOTP", + "Accounts_TwoFactorAuthentication_Enabled_Description": "Користувачі можуть налаштувати двофакторну автентифікацію за допомогою будь-якого додатка TOTP, наприклад Google Authenticator або Authy", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback": "Застосовувати резервний пароль", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback_Description": "Користувачі будуть змушені вводити свій пароль при здійсненні важливих дій, якщо не ввімкнено жоден інший метод двофакторної автентифікації, а пароль встановлено.", "Accounts_TwoFactorAuthentication_MaxDelta": "Максимальна дельта", "Accounts_TwoFactorAuthentication_MaxDelta_Description": "Максимальна дельта визначає, скільки токенів дійсні в будь-який момент часу. Токени генеруються кожні 30 секунд і діють для (30 * максимальної дельти) секунд. Приклад: якщо максимальна дельта дорівнює 10, кожен токен може бути використаний до 300 секунд перед або після позначки часу. Це корисно, коли годинник клієнта не синхронізовано з сервером належним чином.", + "Accounts_TwoFactorAuthentication_RememberFor": "Пам’ятати другий фактор (сек.)", + "Accounts_TwoFactorAuthentication_RememberFor_Description": "Не запитувати код двофакторної авторизації, якщо його було надано раніше протягом певного проміжку часу.", "Accounts_UseDefaultBlockedDomainsList": "Використовувати за замовчуванням список заблокованих доменів", "Accounts_UseDNSDomainCheck": "Використовувати DNS перевірку домену", "Accounts_UserAddedEmail_Default": "Ласкаво просимо до [Site_Name] Перейти до [Site_URL] і спробувати краще рішення чату з відкритим вихідним кодом на сьогоднішній день! Ви можете увійти в систему, використовуючи адресу електронної пошти: [email] і пароль: [password]. Можливо, вам буде потрібно змінити його після першого входу в систему.", "Accounts_UserAddedEmail_Description": "Ви можете використовувати наступні наповнювачі: [name], [fname], [lname] для повного ім'я користувача, ім'я або прізвище, відповідно. [email] для електронної пошти користувача. [password] для пароля користувача. [Site_Name] і [Site_URL] назви програми і URL-адреси відповідно. ", "Accounts_UserAddedEmailSubject_Default": "Ви були додані до [Site_Name]", "Accounts_Verify_Email_For_External_Accounts": "Перевірте електронну пошту для зовнішніх облікових записів", + "Action_required": "Потрібна дія", "Activate": "Активувати", + "Active": "активний", + "Active_users": "Активні користувачі", "Activity": "Активність", "Add": "Додати", "Add_agent": "Додати представника", @@ -258,7 +277,6 @@ "Admin_Info": "Інформація адміністратора", "Administration": "Адміністрування", "Adult_images_are_not_allowed": "Картинки із змістом для дорослих заборонені", - "Advocacy": "Адвокація", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Після аутентифікації OAuth2 користувачі будуть перенаправлені на URL-адресу в цьому списку. Ви можете додати одну URL-адресу на рядок.", "Agent": "Представник", "Agent_added": "Представника додано", @@ -738,7 +756,6 @@ "Connection_Reset": "З'єднання скинуто", "Connectivity_Services": "Послуги з підключення", "Consulting": "Консалтинг", - "Consumer_Goods": "Споживчі товари", "Contact": "Контакти", "Contains_Security_Fixes": "Містять виправлення безпеки", "Content": "Вміст", @@ -1574,6 +1591,7 @@ "FileUpload_Webdav_Upload_Folder_Path_Description": "Шлях до папки WebDAV, до якої слід завантажити файли ", "FileUpload_Webdav_Username": "Ім'я користувача WebDAV", "Filter": "Фільтр", + "Filters": "Фільтри", "Financial_Services": "Фінансові послуги", "First_Channel_After_Login": "Перший канал після входу", "First_response_time": "Час першої відповіді", @@ -1654,8 +1672,6 @@ "Hash": "Хеш", "Header": "Заголовок", "Header_and_Footer": "Заголовок і нижній колонтитул", - "Healthcare_and_Pharmaceutical": "Медицина / Фармацевтика", - "Help_Center": "Центр допомоги", "Helpers": "Помічники", "Here_is_your_authentication_code": "Ось ваш код автентифікації:", "Hex_Color_Preview": "Hex Color Preview", @@ -1679,6 +1695,7 @@ "Highlights_How_To": "Для того, щоб отримувати повідомлення, коли хтось згадує слово або фразу, додайте його тут. Ви можете відокремити слова або фрази комами. Виділіть слова не чутливі до регістру.", "Highlights_List": "Виділення слів", "History": "Історія", + "Home": "Додому", "Host": "Хост", "hours": "години", "Hours": "годин", @@ -2040,6 +2057,7 @@ "LDAP_Sync_User_Data_Groups_AutoRemove": "Автоматичне видалення ролей користувача", "LDAP_Sync_User_Data_Groups_AutoRemove_Description": "** Увага **: Увімкнення, автоматично видалить користувачів із ролі, якщо вони не призначені в LDAP! Це видалить лише автоматичні ролі, які встановлені нижче на карті групи даних користувачів.", "LDAP_Sync_User_Data_Groups_Filter": "Фільтр груп користувачів", + "LDAP_Sync_User_Data_GroupsMap": "Карта групи даних користувачів", "LDAP_Test_Connection": "Тестове підключення", "LDAP_Timeout": "Тайм-аут (мс)", "LDAP_Timeout_Description": "Скільки миль-секунд чекає результат пошуку перед тим, як повернути помилку", @@ -2567,7 +2585,6 @@ "Public": "суспільного", "Public_Channel": "Публічний канал", "Public_Community": "Громадська спільнота", - "Public_Relations": "Зв'язки з громадськістю", "Push": "натиск", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Дев Cert", @@ -3092,7 +3109,6 @@ "Total_Discussions": "Всього обговорень", "Total_messages": "всього повідомлень", "Total_Threads": "Всього тем", - "Tourism": "Туризм", "Transcript_Enabled": "Попросіть відвідувачів, чи хотіли б вони стенограму після того, як чат був закритий", "Transcript_message": "Повідомлення для показу при запиті про транскрипт", "Transcript_of_your_livechat_conversation": "Стенограма вашої лівчатної бесіди.", diff --git a/packages/rocketchat-i18n/i18n/vi-VN.i18n.json b/packages/rocketchat-i18n/i18n/vi-VN.i18n.json index b4f69a6480a9..bc9b6d9392ab 100644 --- a/packages/rocketchat-i18n/i18n/vi-VN.i18n.json +++ b/packages/rocketchat-i18n/i18n/vi-VN.i18n.json @@ -179,6 +179,7 @@ "Accounts_UserAddedEmail_Description": "Bạn có thể sử dụng các placeholder sau: [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.[password] cho mật khẩu của người dùng.[Site_Name] và [Site_URL] cho Tên Ứng dụng và URL tương ứng.", "Accounts_UserAddedEmailSubject_Default": "Bạn đã được thêm vào [Site_Name]", "Activate": "Đang hoạt động", + "Active": "Hoạt động", "Activity": "Hoạt động", "Add": "Thêm", "Add_agent": "Thêm nhân viên / agent", @@ -210,7 +211,6 @@ "Admin_Info": "Thông tin quản trị", "Administration": "Quản trị", "Adult_images_are_not_allowed": "Hình ảnh người lớn không được phép", - "Advocacy": "Luật sư", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Sau khi xác thực OAuth2, người dùng sẽ được chuyển hướng đến URL này", "Agent": "Đặc vụ", "Agent_added": "Agent đã thêm", @@ -540,7 +540,6 @@ "Connection_Closed": "Kêt nôi bị đong", "Connection_Reset": "Đặt lại kết nối", "Consulting": "Tư vấn", - "Consumer_Goods": "Hàng hoá tiêu dùng", "Contains_Security_Fixes": "Chứa các bản sửa lỗi bảo mật", "Content": "Nội dung", "Continue": "Tiếp tục", @@ -1255,8 +1254,6 @@ "Hash": "Hash", "Header": "Đầu trang", "Header_and_Footer": "Đầu trang và cuối trang", - "Healthcare_and_Pharmaceutical": "Chăm sóc sức khỏe/Dược phẩm", - "Help_Center": "Trung tâm trợ giúp", "Helpers": "Helpers", "Hex_Color_Preview": "Xem trước Màu Hex", "Hidden": "Ẩn", @@ -2044,7 +2041,6 @@ "Public": "Công cộng", "Public_Channel": "Kênh công cộng", "Public_Community": "Cộng đồng mở", - "Public_Relations": "Quan hệ công chúng", "Push": "Đẩy", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "AP Dev Dev", @@ -2542,7 +2538,6 @@ "Tokens_Required_Input_Placeholder": "Tên nội dung mã thông báo", "Topic": "Đề tài", "Total_messages": "Tổng tin nhắn", - "Tourism": "Du lịch", "Transcript_Enabled": "Hỏi Khách xem nếu họ muốn bản ghi lại sau khi trò chuyện đã kết thúc", "Transcript_message": "Thông báo để hiển thị khi Yêu cầu Bản ghi", "Transcript_of_your_livechat_conversation": "Bản ghi cuộc trò chuyện livechat của bạn.", diff --git a/packages/rocketchat-i18n/i18n/zh-HK.i18n.json b/packages/rocketchat-i18n/i18n/zh-HK.i18n.json index 982c46e4c78b..19fa81e03dbe 100644 --- a/packages/rocketchat-i18n/i18n/zh-HK.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh-HK.i18n.json @@ -201,6 +201,7 @@ "Accounts_UserAddedEmail_Description": "您可以分别使用以下占位符:[名称],[名称],[名称]分别为用户的全名,名字或姓氏。用户的电子邮件为[email]。[密码]作为用户的密码。分别为应用程序名称和URL分别为[Site_Name]和[Site_URL]。", "Accounts_UserAddedEmailSubject_Default": "您已被添加到[Site_Name]", "Activate": "激活", + "Active": "积极", "Activity": "活动", "Add": "加", "Add_agent": "添加代理", @@ -232,7 +233,6 @@ "Admin_Info": "管理员信息", "Administration": "管理", "Adult_images_are_not_allowed": "成人图像是不允许的", - "Advocacy": "拥护", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "OAuth2身份验证后,用户将被重定向到此URL", "Agent": "代理人", "Agent_added": "代理添加", @@ -570,7 +570,6 @@ "Connection_Closed": "连接关闭", "Connection_Reset": "连接重置", "Consulting": "咨询", - "Consumer_Goods": "消费品", "Contains_Security_Fixes": "包含安全修复程序", "Content": "内容", "Continue": "继续", @@ -1284,8 +1283,6 @@ "Hash": "哈希", "Header": "头", "Header_and_Footer": "页眉和页脚", - "Healthcare_and_Pharmaceutical": "医疗保健/医药", - "Help_Center": "帮助中心", "Helpers": "助手", "Hex_Color_Preview": "十六进制颜色预览", "Hidden": "隐", @@ -2069,7 +2066,6 @@ "Public": "上市", "Public_Channel": "公共频道", "Public_Community": "公共社区", - "Public_Relations": "公共关系", "Push": "推送", "Push_apn_cert": "APN证书", "Push_apn_dev_cert": "APN Dev 证书 ", @@ -2568,7 +2564,6 @@ "Tokens_Required_Input_Placeholder": "令牌资产名称", "Topic": "话题", "Total_messages": "消息总数", - "Tourism": "旅游", "Transcript_Enabled": "询问访问者是否会在聊天结束后收到抄本", "Transcript_message": "询问笔录时要显示的信息", "Transcript_of_your_livechat_conversation": "你的聊天记录的谈话内容。", @@ -2863,4 +2858,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 cda8e66845fe..e94683f5b8b6 100644 --- a/packages/rocketchat-i18n/i18n/zh-TW.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh-TW.i18n.json @@ -5,6 +5,8 @@ "__count__empty_rooms_will_be_removed_automatically__rooms__": "__count__ 空的房間將會自動移除: __rooms__。", "__username__is_no_longer__role__defined_by__user_by_": "__username__不再是__role__,由__user_by__", "__username__was_set__role__by__user_by_": "__user_by__設定__username__為__role__的身份", + "This_room_encryption_has_been_enabled_by__username_": "__username__已啟用此房間的加密", + "This_room_encryption_has_been_disabled_by__username_": "__username__已停用此房間的加密", "@username": "@使用者名稱", "@username_message": "@使用者名稱 ", "#channel": "#頻道", @@ -241,6 +243,7 @@ "Accounts_Verify_Email_For_External_Accounts": "驗證外部帳號的電子郵件", "Action_required": "需要採取的行動", "Activate": "啟用", + "Active": "活躍", "Active_users": "活躍的使用者", "Activity": "活動記錄", "Add": "新增", @@ -278,7 +281,6 @@ "Admin_Info": "管理員訊息", "Administration": "管理", "Adult_images_are_not_allowed": "成人圖像是不允許的", - "Advocacy": "擁護", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "OAuth2驗證後,用戶會被轉向到此網址", "Agent": "代理人", "Agent_added": "線上客服已新增", @@ -456,6 +458,19 @@ "Apps_Marketplace_Uninstall_App_Prompt": "是否確定要反安裝此應用程式?", "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "無論如何都要反安裝它", "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "此應用程式具有一個訂閱資訊,反安裝不會取消訂閱。如果要執行此操作,請在反安裝之前取消訂閱。", + "Apps_Permissions_Review_Modal_Title": "檢視權限", + "Apps_Permissions_No_Permissions_Required": "該應用程式不需要其他權限", + "Apps_Permissions_user_read": "讀取使用者的基本資訊", + "Apps_Permissions_user_write": "修改使用者的資訊", + "Apps_Permissions_upload_read": "upload_read", + "Apps_Permissions_upload_write": "上傳檔案", + "Apps_Permissions_server-setting_read": "讀取伺服器的資訊", + "Apps_Permissions_server-setting_write": "修改伺服器的資訊", + "Apps_Permissions_room_read": "讀取房間的資訊", + "Apps_Permissions_room_write": "修改房間的資訊", + "Apps_Permissions_message_read": "讀取訊息", + "Apps_Permissions_message_write": "發送和修改訊息", + "Apps_Permissions_env_read": "env_read", "Apps_Settings": "應用程式的設定", "Apps_User_Already_Exists": "使用者名稱 \"__username__\" 已經在使用。更名或移除使用它來安裝這個應用程式的使用者", "Apps_WhatIsIt": "應用程式:它們是什麼?", @@ -782,6 +797,12 @@ "Closing_chat": "關閉聊天中", "Closing_chat_message": "關閉聊天中", "Cloud": "雲端", + "Cloud_Apply_Offline_License": "套用離線授權", + "Cloud_Change_Offline_License": "變更離線授權", + "Cloud_License_applied_successfully": "成功套用授權!", + "Cloud_Invalid_license": "無效的授權!", + "Cloud_Apply_license": "套用授權", + "Cloud_connectivity": "雲端連接", "Cloud_address_to_send_registration_to": "寄送郵件到您在雲端註冊的電子郵件。", "Cloud_click_here": "在複製完文字後,到雲端控制介面。[點這裡](__cloudConsoleUrl__)", "Cloud_console": "雲端控制台", @@ -819,6 +840,7 @@ "Cloud_workspace_disconnect": "假如您不想再使用雲端服務,您可以從Rocket.Chat 雲端中斷與您的工作區域連結。", "Cloud_workspace_support": "假如您有雲端服務問題,請先試著同步。看問題是否依然存在,請在雲端控制台開啟支援服務。", "Collaborative": "共同", + "Collapse": "收合", "Collapse_Embedded_Media_By_Default": "預設將嵌入式媒體收合", "color": "顏色", "Color": "顏色", @@ -829,19 +851,22 @@ "Community": "社會的", "Compact": "小巧", "Condensed": "簡明", + "Commit_details": "送出詳細資料", "Completed": "已完成", "Computer": "電腦", + "Configure_Incoming_Mail_IMAP": "設定收信 (IMAP)", + "Configure_Outgoing_Mail_SMTP": "設定寄信 (SMTP)", "Confirm_new_encryption_password": "確認新的加密密碼", "Confirm_new_password": "確認新密碼", "Confirm_New_Password_Placeholder": "請重新輸入新密碼...", "Confirm_password": "確認密碼", "Connect": "連線", + "Connect_SSL_TLS": "用 SSL/TLS 連線", "Connection_Closed": "連接關閉", "Connection_Reset": "連線重置", "Connection_success": "LDAP 連接成功", "Connectivity_Services": "連線的服務", "Consulting": "諮詢", - "Consumer_Goods": "消費品", "Contact": "聯絡人", "Contacts": "聯絡人", "Contact_Name": "聯絡人名字", @@ -1158,8 +1183,8 @@ "Custom_Emoji_Has_Been_Deleted": "自定義表情符號已被刪除。", "Custom_Emoji_Info": "自定義表情符號資訊", "Custom_Emoji_Updated_Successfully": "自定義表情符號已成功更新", - "Custom_Field_Removed": "自訂欄位已移除", "Custom_Fields": "自訂欄位", + "Custom_Field_Removed": "自訂欄位已移除", "Custom_oauth_helper": "設定 OAuth 提供者時,請提供一個 Callback URL。使用 %s 。", "Custom_oauth_unique_name": "自訂 OAuth 名稱", "Custom_Script_Logged_In": "針對登錄使用者自訂腳本", @@ -1178,6 +1203,7 @@ "Custom_Sound_Info": "自訂音效資訊", "Custom_Sound_Saved_Successfully": "自訂音效已成功保存", "Custom_Sounds": "自訂音效", + "Custom_Status": "自訂狀態", "Custom_Translations": "自訂翻譯", "Custom_Translations_Description": "應該是有效的JSON,其中鍵是包含鍵和翻譯字典的語言。例如:{\n \"en\": {\n \"Channels\": \"Rooms\"\n }, \n\"pt\":{\n \"Channels\": \"Salas\"\n }\n}", "Custom_User_Status": "自訂使用者狀態", @@ -1297,6 +1323,7 @@ "Disconnect": "中斷連線", "Discussion": "討論", "Discussion_description": "幫助保持對正在發生的事情的概述!通過建立討論,將建立您選擇的子通道,並且兩者都是連接的。", + "Discussion_first_message_disabled_due_to_e2e": "您可以在這個建立後開始在這個論壇裡傳送點對點的加密訊息。", "Discussion_first_message_title": "您的訊息", "Discussion_name": "論壇名稱", "Discussion_start": "開始論壇", @@ -1404,6 +1431,8 @@ "Email_Footer_Description": "您可以使用以下佔位符: [Site_Name]和[Site_URL]分別為應用程式的名稱和網址。 ", "Email_from": "寄件者", "Email_Header_Description": "您可以使用以下佔位符: [Site_Name]和[Site_URL]分別為應用程式的名稱和網址。 ", + "Email_Inbox": "電子郵件收件箱", + "Email_Inboxes": "電子郵件收件箱", "Email_Notification_Mode": "離線電子郵件通知", "Email_Notification_Mode_All": "每次受標記或私訊", "Email_Notification_Mode_Disabled": "已停用", @@ -1417,6 +1446,7 @@ "email_style_label": "電子郵件型態", "Email_subject": "主旨", "Email_verified": "電子郵件已驗證", + "Email_sent": "電子郵件寄件", "Emails_sent_successfully!": "電子郵件送出成功!", "Emoji": "表情符號", "Emoji_provided_by_JoyPixels": "表情符號提供者為 JoyPixels", @@ -1849,8 +1879,6 @@ "Hash": "Hash", "Header": "標頭", "Header_and_Footer": "頁首和頁尾", - "Healthcare_and_Pharmaceutical": "醫療保健/醫藥", - "Help_Center": "求助中心", "Helpers": "助手", "Here_is_your_authentication_code": "這是您的驗證碼:", "Hex_Color_Preview": "十六進制顏色預覽", @@ -3006,7 +3034,6 @@ "Public_Channel": "公共 Channel", "Public_Channels": "公開 Channel s", "Public_Community": "公共社區", - "Public_Relations": "公共關係", "Public_URL": "公開網址", "Purchase_for_free": "免費購買", "Purchase_for_price": "購買 $%s", @@ -3121,6 +3148,7 @@ "Requested_At": "要求於", "Requested_By": "被要求", "Require": "必須", + "Required": "必須的", "Require_all_tokens": "要求所有 tokens", "Require_any_token": "需要任何 token", "Require_password_change": "需要更改密碼", @@ -3735,7 +3763,6 @@ "totp-disabled": "您尚未為使用者啟用兩階段登入", "totp-invalid": "無效的代碼或密碼", "totp-required": "需要 TOTP", - "Tourism": "旅遊", "Transcript": "紀錄", "Transcript_Enabled": "詢問訪問者是否會在聊天結束後收到副本", "Transcript_message": "詢問筆錄時要顯示的訊息", diff --git a/packages/rocketchat-i18n/i18n/zh.i18n.json b/packages/rocketchat-i18n/i18n/zh.i18n.json index d436c544cfa0..3e07e9dff118 100644 --- a/packages/rocketchat-i18n/i18n/zh.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh.i18n.json @@ -1,22 +1,27 @@ { - "403": "禁止访问", + "403": "已禁止", "500": "内部服务器错误", - "__count__empty_rooms_will_be_removed_automatically": "__count__ 个空房间将会被自动移除。", - "__count__empty_rooms_will_be_removed_automatically__rooms__": "以下 __count__ 个空房间将会被自动移除:__rooms__", - "__username__is_no_longer__role__defined_by__user_by_": "__user_by__ 已把 __username__ 从 __role__ 中移除", - "__username__was_set__role__by__user_by_": "__username__ 被 __user_by__ 设为 __role__", + "__count__empty_rooms_will_be_removed_automatically": "将会自动移除 __count__ 个空聊天室。", + "__count__empty_rooms_will_be_removed_automatically__rooms__": "将会自动移除以下 __count__ 个空聊天室:__rooms__", + "__username__is_no_longer__role__defined_by__user_by_": "__user_by__ 移除了 __username__ 的 __role__ 角色", + "__username__was_set__role__by__user_by_": "__user_by__ 设置 __username__ 为 __role__ 角色", + "This_room_encryption_has_been_enabled_by__username_": "__username__ 已启用聊天室加密", + "This_room_encryption_has_been_disabled_by__username_": "__username__ 已禁用聊天室加密", "@username": "@用户名", "@username_message": "@用户名 ", "#channel": "#频道", "%_of_conversations": "% 的会话", - "0_Errors_Only": "0 - 仅错误 ", + "0_Errors_Only": "0 - 仅错误", "1_Errors_and_Information": "1 - 错误和信息", - "2_Erros_Information_and_Debug": "2 - 错误、信息和调试信息", - "12_Hour": "12小时制", - "24_Hour": "24小时制", + "2_Erros_Information_and_Debug": "2 - 错误、信息和调试", + "12_Hour": "12 小时制", + "24_Hour": "24 小时制", + "A_new_owner_will_be_assigned_automatically_to__count__rooms": "新的所有者将被自动分配至 __count__ 个聊天室。", + "A_new_owner_will_be_assigned_automatically_to_the__roomName__room": "新的所有者将被自动分配至聊天室 __roomName__ /span0> 。", + "A_new_owner_will_be_assigned_automatically_to_those__count__rooms__rooms__": "新的所有者将被自动分配至以下 __count__ 个聊天室: __rooms__。", "Accept": "接受", - "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "没有客服在线时也接受入站即时聊天请求", - "Accept_new_livechats_when_agent_is_idle": "代理空闲时接受新的聊天请求", + "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "没有客服在线时也接受入站 omnichannel 请求", + "Accept_new_livechats_when_agent_is_idle": "客服空闲时接受新的 omnichannel 请求", "Accept_with_no_online_agents": "无在线客服时仍接受", "Access_not_authorized": "访问未被授权", "Access_Token_URL": "访问令牌 URL", @@ -26,19 +31,20 @@ "access-permissions_description": "修改各种角色的权限。", "access-setting-permissions": "修改基于设置的权限", "Accessing_permissions": "访问权限", - "Account_SID": "帐户 SID", - "Accounts": "帐户", - "Accounts_Admin_Email_Approval_Needed_Default": "用户[name]([email])已注册。请检查“管理->用户”将其激活或删除。", + "Account_SID": "账号 SID", + "Accounts": "账号", + "Accounts_Admin_Email_Approval_Needed_Default": "用户[name]([email])已注册。请检查 “管理 -> 用户” 将其激活或删除。", "Accounts_Admin_Email_Approval_Needed_Subject_Default": "有新用户注册并需要批准", "Accounts_Admin_Email_Approval_Needed_With_Reason_Default": "用户[name]([email])已被注册。原因:[reason]请检查“管理->用户”以激活或删除它。", - "Accounts_AllowAnonymousRead": "允许匿名阅读", + "Accounts_AllowAnonymousRead": "允许匿名读取", "Accounts_AllowAnonymousWrite": "允许匿名写入", "Accounts_AllowDeleteOwnAccount": "允许用户删除自己的帐号", - "Accounts_AllowedDomainsList": "允许的域名列表", - "Accounts_AllowedDomainsList_Description": "以逗号分隔的允许的域名列表", + "Accounts_AllowedDomainsList": "允许域名列表", + "Accounts_AllowedDomainsList_Description": "以逗号分隔的允许域名列表", "Accounts_AllowEmailChange": "允许修改电子邮箱", "Accounts_AllowEmailNotifications": "允许电子邮件通知", "Accounts_AllowPasswordChange": "允许修改密码", + "Accounts_AllowPasswordChangeForOAuthUsers": "允许 OAuth 用户更改密码", "Accounts_AllowRealNameChange": "允许更改名称", "Accounts_AllowUserAvatarChange": "允许修改头像", "Accounts_AllowUsernameChange": "允许修改用户名", @@ -46,8 +52,8 @@ "Accounts_AllowUserStatusMessageChange": "允许自定义状态信息", "Accounts_AvatarBlockUnauthenticatedAccess": "拦截未认证用户访问头像", "Accounts_AvatarCacheTime": "头像缓存时间", - "Accounts_AvatarCacheTime_description": "通知http协议缓存化身图像的秒数。", - "Accounts_AvatarExternalProviderUrl": "外部头像提供商的URL地址", + "Accounts_AvatarCacheTime_description": "让 http 协议缓存头像图片的秒数。", + "Accounts_AvatarExternalProviderUrl": "外部头像提供者 URL", "Accounts_AvatarExternalProviderUrl_Description": "例:`https://acme.com/api/v1/{username}`", "Accounts_AvatarResize": "调整头像大小", "Accounts_AvatarSize": "头像尺寸", @@ -55,26 +61,26 @@ "Accounts_BlockedDomainsList_Description": "逗号分隔的屏蔽的域名列表", "Accounts_BlockedUsernameList": "已屏蔽的用户名列表", "Accounts_BlockedUsernameList_Description": "以逗号分隔的已屏蔽用户名列表(不区分大小写)", - "Accounts_CustomFields_Description": "应该为有效的 JSON 格式,键为字段名,值为该字段的设置项。例如:{\n \"role\": {\n \"type\": \"select\",\n \"defaultValue\": \"student\",\n \"options\": [\"teacher\", \"student\"],\n \"required\": true,\n \"modifyRecordField\": {\n \"array\": true,\n \"field\": \"roles\"\n }\n },\n \"twitter\": {\n \"type\": \"text\",\n \"required\": true,\n \"minLength\": 2,\n \"maxLength\": 10\n }\n}", + "Accounts_CustomFields_Description": "应该为有效的 JSON,键为字段名,值为该字段的字典设置项。例如:{\n \"role\": {\n \"type\": \"select\",\n \"defaultValue\": \"student\",\n \"options\": [\"teacher\", \"student\"],\n \"required\": true,\n \"modifyRecordField\": {\n \"array\": true,\n \"field\": \"roles\"\n }\n },\n \"twitter\": {\n \"type\": \"text\",\n \"required\": true,\n \"minLength\": 2,\n \"maxLength\": 10\n }\n}", "Accounts_CustomFieldsToShowInUserInfo": "要在用户信息中显示的自定义信息", "Accounts_Default_User_Preferences": "默认用户首选项", - "Accounts_Default_User_Preferences_audioNotifications": "通知音频提醒", - "Accounts_Default_User_Preferences_desktopNotifications": "默认桌面通知", - "Accounts_Default_User_Preferences_mobileNotifications": "默认手机通知", - "Accounts_Default_User_Preferences_not_available": "无法检索用户首选项,因为它们尚未由用户设置", - "Accounts_DefaultUsernamePrefixSuggestion": "默认的用户名前缀建议", + "Accounts_Default_User_Preferences_audioNotifications": "音频通知默认提醒", + "Accounts_Default_User_Preferences_desktopNotifications": "桌面通知默认提醒", + "Accounts_Default_User_Preferences_mobileNotifications": "移动端通知默认提醒", + "Accounts_Default_User_Preferences_not_available": "因用户首选项尚未由用户设置而获取失败", + "Accounts_DefaultUsernamePrefixSuggestion": "默认用户名前缀建议", "Accounts_denyUnverifiedEmail": "拒绝未经验证的电子邮件地址", - "Accounts_Directory_DefaultView": "默认目录列表", + "Accounts_Directory_DefaultView": "默认目录清单", "Accounts_Email_Activated": "[name]您的帐号已被激活。", - "Accounts_Email_Activated_Subject": "帐号已激活", - "Accounts_Email_Approved": "[name]您的帐号已获批准。", - "Accounts_Email_Approved_Subject": "帐号已被批准", - "Accounts_Email_Deactivated": "[name]您的帐户已被停用。", - "Accounts_Email_Deactivated_Subject": "帐户已停用", + "Accounts_Email_Activated_Subject": "已激活帐号", + "Accounts_Email_Approved": "[name]您的帐号已被批准", + "Accounts_Email_Approved_Subject": "已批准帐号", + "Accounts_Email_Deactivated": "[name]您的帐号已被停用。", + "Accounts_Email_Deactivated_Subject": "已停用账号", "Accounts_EmailVerification": "只允许已验证的用户登录", - "Accounts_EmailVerification_Description": "要使用该功能,请确保 SMTP 设置正确", + "Accounts_EmailVerification_Description": "请确保 SMTP 设置正确再使用此功能", "Accounts_Enrollment_Email": "注册电子邮件", - "Accounts_Enrollment_Email_Default": "欢迎来到 [Site_Name]转到 [Site_URL] 并尝试当今最先进的开源聊天解决方案!", + "Accounts_Enrollment_Email_Default": "欢迎来到 [Site_Name]转到 [Site_URL] 并尝试当今最棒的开源聊天解决方案!", "Accounts_Enrollment_Email_Description": "你可以使用以下占位符: 姓名[name]、名字[fname]或者姓氏 [lname]。邮箱[email]。网站名称[Site_Name]和网站地址[Site_URL]。", "Accounts_Enrollment_Email_Subject_Default": "欢迎访问 [Site_Name]", "Accounts_ForgetUserSessionOnWindowClose": "关闭窗口时自动注销用户", @@ -84,163 +90,188 @@ "Accounts_iframe_url": "Iframe URL", "Accounts_LoginExpiration": "保持登录的天数", "Accounts_ManuallyApproveNewUsers": "手动审核新用户", + "Accounts_OAuth_Apple": "使用 Apple 登录", "Accounts_OAuth_Custom_Access_Token_Param": "访问令牌参数名称", "Accounts_OAuth_Custom_Authorize_Path": "授权路径", "Accounts_OAuth_Custom_Avatar_Field": "头像字段", "Accounts_OAuth_Custom_Button_Color": "按钮颜色", "Accounts_OAuth_Custom_Button_Label_Color": "按钮文字颜色", - "Accounts_OAuth_Custom_Button_Label_Text": "按钮文字", - "Accounts_OAuth_Custom_Channel_Admin": "用户数据群组对应", + "Accounts_OAuth_Custom_Button_Label_Text": "按钮文本", + "Accounts_OAuth_Custom_Channel_Admin": "用户数据组映射", + "Accounts_OAuth_Custom_Channel_Map": "OAuth 组频道映射", + "Accounts_OAuth_Custom_Email_Field": "邮件地址字段", "Accounts_OAuth_Custom_Enable": "启用", + "Accounts_OAuth_Custom_Groups_Claim": "用于频道映射的角色/组字段", "Accounts_OAuth_Custom_id": "ID", "Accounts_OAuth_Custom_Identity_Path": "身份路径", "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "身份令牌发送自", "Accounts_OAuth_Custom_Login_Style": "登录样式", + "Accounts_OAuth_Custom_Map_Channels": "映射角色/组至频道", "Accounts_OAuth_Custom_Merge_Roles": "从 SSO 合并角色", "Accounts_OAuth_Custom_Merge_Users": "合并用户", - "Accounts_OAuth_Custom_Name_Field": " 名称字段", + "Accounts_OAuth_Custom_Name_Field": "名称字段", "Accounts_OAuth_Custom_Roles_Claim": "角色/组字段名称", "Accounts_OAuth_Custom_Scope": "范围", - "Accounts_OAuth_Custom_Secret": "秘密(Secret)", + "Accounts_OAuth_Custom_Secret": "秘密", "Accounts_OAuth_Custom_Show_Button_On_Login_Page": "在登录页面显示按钮", - "Accounts_OAuth_Custom_Token_Path": "Token 路径", - "Accounts_OAuth_Custom_Token_Sent_Via": "Token 发送自", + "Accounts_OAuth_Custom_Token_Path": "令牌路径", + "Accounts_OAuth_Custom_Token_Sent_Via": "令牌发送自", "Accounts_OAuth_Custom_Username_Field": "用户名字段", "Accounts_OAuth_Drupal": "启用 Drupal 登录", "Accounts_OAuth_Drupal_callback_url": "Drupal oAuth2 重定向 URI 地址", "Accounts_OAuth_Drupal_id": "Drupal oAuth2 客户端 ID", - "Accounts_OAuth_Drupal_secret": "Drupal oAuth2 客户端密钥", + "Accounts_OAuth_Drupal_secret": "Drupal oAuth2 客户端秘密", "Accounts_OAuth_Facebook": "Facebook 账户登录", "Accounts_OAuth_Facebook_callback_url": "Facebook 回调地址", - "Accounts_OAuth_Facebook_id": "Facebook APP ID", - "Accounts_OAuth_Facebook_secret": "Facebook Secret", + "Accounts_OAuth_Facebook_id": "Facebook 应用 ID", + "Accounts_OAuth_Facebook_secret": "Facebook 秘密", "Accounts_OAuth_Github": "OAuth 已启用", "Accounts_OAuth_Github_callback_url": "Github 回调地址", "Accounts_OAuth_GitHub_Enterprise": "OAuth 已启用", "Accounts_OAuth_GitHub_Enterprise_callback_url": "GitHub 企业版回调地址", "Accounts_OAuth_GitHub_Enterprise_id": "客户端 ID", - "Accounts_OAuth_GitHub_Enterprise_secret": "客户端密钥", + "Accounts_OAuth_GitHub_Enterprise_secret": "客户端秘密", "Accounts_OAuth_Github_id": "客户端 ID", - "Accounts_OAuth_Github_secret": "客户端密钥", + "Accounts_OAuth_Github_secret": "客户端秘密", "Accounts_OAuth_Gitlab": "OAuth 已启用", "Accounts_OAuth_Gitlab_callback_url": "GitLab 回调地址", "Accounts_OAuth_Gitlab_id": "GitLab ID", "Accounts_OAuth_Gitlab_identity_path": "身份路径", "Accounts_OAuth_Gitlab_merge_users": "合并用户", - "Accounts_OAuth_Gitlab_secret": "客户端密钥", - "Accounts_OAuth_Google": "Google 账户登录", + "Accounts_OAuth_Gitlab_secret": "客户端秘密", + "Accounts_OAuth_Google": "Google 登录", "Accounts_OAuth_Google_callback_url": "Google 回调地址", "Accounts_OAuth_Google_id": "Google ID", - "Accounts_OAuth_Google_secret": "Google密钥", - "Accounts_OAuth_Linkedin": "LinkedIn 账户登录", + "Accounts_OAuth_Google_secret": "Google 秘密", + "Accounts_OAuth_Linkedin": "LinkedIn 登录", "Accounts_OAuth_Linkedin_callback_url": "LinkedIn 回调地址", "Accounts_OAuth_Linkedin_id": "LinkedIn ID", - "Accounts_OAuth_Linkedin_secret": "LinkedIn Secret", - "Accounts_OAuth_Meteor": "Meteor 账户登录", + "Accounts_OAuth_Linkedin_secret": "LinkedIn 秘密", + "Accounts_OAuth_Meteor": "Meteor 登录", "Accounts_OAuth_Meteor_callback_url": "Meteor 回调地址", "Accounts_OAuth_Meteor_id": "Meteor ID", - "Accounts_OAuth_Meteor_secret": "Meteor Secret", + "Accounts_OAuth_Meteor_secret": "Meteor 秘密", "Accounts_OAuth_Nextcloud": "OAuth 已启用", - "Accounts_OAuth_Nextcloud_callback_url": "Nextcloud 回应(Callback) URL", + "Accounts_OAuth_Nextcloud_callback_url": "Nextcloud 回调 URL", "Accounts_OAuth_Nextcloud_id": "Nextcloud ID", - "Accounts_OAuth_Nextcloud_secret": "客户端密钥", + "Accounts_OAuth_Nextcloud_secret": "客户端秘密", "Accounts_OAuth_Nextcloud_URL": "Nextcloud 服务器 URL", "Accounts_OAuth_Proxy_host": "代理主机", "Accounts_OAuth_Proxy_services": "代理服务", "Accounts_OAuth_Tokenpass": "Tokenpass 登录", "Accounts_OAuth_Tokenpass_callback_url": "Tokenpass 回调地址", "Accounts_OAuth_Tokenpass_id": "Tokenpass Id", - "Accounts_OAuth_Tokenpass_secret": "Tokenpass 密钥", - "Accounts_OAuth_Twitter": "Twitter 账户登录", + "Accounts_OAuth_Tokenpass_secret": "Tokenpass 秘密", + "Accounts_OAuth_Twitter": "Twitter 登录", "Accounts_OAuth_Twitter_callback_url": "Twitter 回调地址", "Accounts_OAuth_Twitter_id": "Twitter ID", - "Accounts_OAuth_Twitter_secret": "Twitter Secret", - "Accounts_OAuth_Wordpress": "WordPress 账户登录", + "Accounts_OAuth_Twitter_secret": "Twitter 秘密", + "Accounts_OAuth_Wordpress": "WordPress 登录", "Accounts_OAuth_Wordpress_authorize_path": "授权路径", "Accounts_OAuth_Wordpress_callback_url": "WordPress 回调地址", "Accounts_OAuth_Wordpress_id": "WordPress ID", "Accounts_OAuth_Wordpress_identity_path": "身份路径", "Accounts_OAuth_Wordpress_identity_token_sent_via": "身份令牌发送自", "Accounts_OAuth_Wordpress_scope": "范围", - "Accounts_OAuth_Wordpress_secret": "WordPress Secret", + "Accounts_OAuth_Wordpress_secret": "WordPress 秘密", "Accounts_OAuth_Wordpress_server_type_custom": "自定义", "Accounts_OAuth_Wordpress_server_type_wordpress_com": "Wordpress.com", "Accounts_OAuth_Wordpress_server_type_wp_oauth_server": "WP OAuth 服务器插件", "Accounts_OAuth_Wordpress_token_path": "Token 路径", - "Accounts_Password_Policy_AtLeastOneLowercase": "至少一个小写", - "Accounts_Password_Policy_AtLeastOneLowercase_Description": "强制密码至少包含一个小写字符。", + "Accounts_Password_Policy_AtLeastOneLowercase": "至少一个小写字符", + "Accounts_Password_Policy_AtLeastOneLowercase_Description": "确保密码包含至少一个小写字符。", "Accounts_Password_Policy_AtLeastOneNumber": "至少一个数字", - "Accounts_Password_Policy_AtLeastOneNumber_Description": "强制密码至少包含一个数字字符。", + "Accounts_Password_Policy_AtLeastOneNumber_Description": "确保密码包含至少一个数字字符。", "Accounts_Password_Policy_AtLeastOneSpecialCharacter": "至少一个特殊字符", - "Accounts_Password_Policy_AtLeastOneSpecialCharacter_Description": "强制密码至少包含一个特殊字符。", - "Accounts_Password_Policy_AtLeastOneUppercase": "至少一个大写字母", - "Accounts_Password_Policy_AtLeastOneUppercase_Description": "强制密码至少包含一个小写字符。", + "Accounts_Password_Policy_AtLeastOneSpecialCharacter_Description": "确保密码包含至少一个特殊字符。", + "Accounts_Password_Policy_AtLeastOneUppercase": "至少一个大写字符", + "Accounts_Password_Policy_AtLeastOneUppercase_Description": "确保密码包含至少一个大写字符。", "Accounts_Password_Policy_Enabled": "启用密码策略", "Accounts_Password_Policy_Enabled_Description": "启用时,用户密码必须遵守所述的策略。注意:这仅适用于新密码,而不适用于现有密码。", "Accounts_Password_Policy_ForbidRepeatingCharacters": "禁止重复字符", "Accounts_Password_Policy_ForbidRepeatingCharacters_Description": "确保密码不包含重复相邻的相同字符。", "Accounts_Password_Policy_ForbidRepeatingCharactersCount": "最大重复字符", - "Accounts_Password_Policy_ForbidRepeatingCharactersCount_Description": "在不允许的情况下,字符可以重复的次数。", + "Accounts_Password_Policy_ForbidRepeatingCharactersCount_Description": "字符可以重复的次数。", "Accounts_Password_Policy_MaxLength": "最大长度", "Accounts_Password_Policy_MaxLength_Description": "确保密码的字符数不超过此数量。使用`-1`来禁用。", "Accounts_Password_Policy_MinLength": "最小长度", "Accounts_Password_Policy_MinLength_Description": "确保密码必须至少有多少个字符。使用`-1`来禁用。", "Accounts_PasswordReset": "重置密码", "Accounts_Registration_AuthenticationServices_Default_Roles": "认证服务的默认角色", - "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "当通过认证服务注册时被授予默认角色的用户(用逗号分隔)", + "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "默认授予经验证服务注册用户的角色(用逗号分隔)", "Accounts_Registration_AuthenticationServices_Enabled": "使用认证服务注册", "Accounts_Registration_InviteUrlType": "邀请网址类型", - "Accounts_Registration_InviteUrlType_Direct": "直接", + "Accounts_Registration_InviteUrlType_Direct": "私聊", "Accounts_Registration_InviteUrlType_Proxy": "代理", "Accounts_RegistrationForm": "注册表单", "Accounts_RegistrationForm_Disabled": "已禁用", "Accounts_RegistrationForm_LinkReplacementText": "注册表单链接的替代文本", - "Accounts_RegistrationForm_Public": "公开", + "Accounts_RegistrationForm_Public": "公共", "Accounts_RegistrationForm_Secret_URL": "Secret URL", "Accounts_RegistrationForm_SecretURL": "注册表单 Secret URL", "Accounts_RegistrationForm_SecretURL_Description": "您必须提供一个随机字符串,该字符串将被添加到您的注册地址中。例如:https://open.rocket.chat/register/[secret_hash]", "Accounts_RequireNameForSignUp": "姓名必须填写", "Accounts_RequirePasswordConfirmation": "请输入确认密码", + "Accounts_RoomAvatarExternalProviderUrl": "房间头像外部提供者 URL", + "Accounts_RoomAvatarExternalProviderUrl_Description": "示例: `https://acme.com/api/v1/{roomId}`", "Accounts_SearchFields": "搜索中需要考虑的字段", "Accounts_Send_Email_When_Activating": "用户激活时向用户发送电子邮件", "Accounts_Send_Email_When_Deactivating": "用户停用时向用户发送电子邮件", + "Accounts_Set_Email_Of_External_Accounts_as_Verified": "设置外部账号的邮箱地址为已验证", + "Accounts_Set_Email_Of_External_Accounts_as_Verified_Description": "由外部服务创建的账号,例如 LDAP、OAuth,将自动设邮件地址为已验证", "Accounts_SetDefaultAvatar": "设置默认头像", - "Accounts_SetDefaultAvatar_Description": "尝试从 OAuth 账户或 Gravatar 读取头像", + "Accounts_SetDefaultAvatar_Description": "尝试基于 OAuth 账户或 Gravatar 决定默认头像", "Accounts_ShowFormLogin": "显示默认登录表单", - "Accounts_TwoFactorAuthentication_Enabled": "启用双因素身份验证", + "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In": "自动为新用户启用基于邮件的两步验证", + "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In_Description": "新用户将默认启用基于邮件的两步验证。他们可以稍后在个人资料页面禁用它。", + "Accounts_TwoFactorAuthentication_By_Email_Code_Expiration": "从邮件验证码过期秒数", + "Accounts_TwoFactorAuthentication_By_Email_Enabled": "启用基于邮件的两步验证", + "Accounts_TwoFactorAuthentication_By_Email_Enabled_Description": "启用了此项的已验证邮箱用户将收到用于授权对应操作(例如登录,更改个人资料)的验证码邮件。", + "Accounts_TwoFactorAuthentication_Enabled": "启用基于 TOTP 的两步验证", + "Accounts_TwoFactorAuthentication_Enabled_Description": "用户可以使用 TOTP 应用进行两步验证,例如谷歌身份验证器或 Authy。", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback": "强制密码回退", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback_Description": "如果用户启用两步验证并设置了密码,用户进行重要的操作时必须输入密码。", "Accounts_TwoFactorAuthentication_MaxDelta": "最大 Delta", - "Accounts_TwoFactorAuthentication_MaxDelta_Description": "最大差值确定在任何给定时间有多少令牌有效。令牌每30秒产生一次,并且对于(30 * 最大差值)秒有效。 示例:将最大差值设置为10时,每个令牌可以在时间戳之前或之后使用达300秒。当客户端的时钟与服务器没有正确同步时,这很有用。", - "Accounts_UseDefaultBlockedDomainsList": "使用默认的屏蔽域名列表", + "Accounts_TwoFactorAuthentication_MaxDelta_Description": "最大差值确定在任何给定时间有多少令牌有效。令牌每30秒产生一次,并且对于(30 * 最大差值)秒有效。 示例:将最大差值设置为10时,每个令牌可以在时间戳之前或之后使用达300秒。在客户端的时钟与服务器没有正确同步时,这很有用。", + "Accounts_TwoFactorAuthentication_RememberFor": "记住两步验证(秒)", + "Accounts_TwoFactorAuthentication_RememberFor_Description": "如果在时间内已经提供了两步验证码,将不再请求。", + "Accounts_UseDefaultBlockedDomainsList": "使用默认的域名屏蔽列表", "Accounts_UseDNSDomainCheck": "使用 DNS 域名检查", "Accounts_UserAddedEmail_Default": "欢迎访问 [Site_Name] 转到 [Site_URL] 并尝试当今最先进的开源聊天解决方案!您可以使用您的电子邮件地址:[email] 和密码:[password] 进行登陆。您可能需要在您首次登录后更改密码。", "Accounts_UserAddedEmail_Description": "您可以使用以下占位符:全名 [name],名字 [fname],姓氏 [lname]。[email] 为用户的 email。[password] 为用户的密码。[Site_Name] 和 [Site_URL] 分为网站名称和网站地址。", "Accounts_UserAddedEmailSubject_Default": "您已被添加到 [Site_Name]", + "Accounts_Verify_Email_For_External_Accounts": "为外部账号验证邮箱", + "Action_required": "需要操作", "Activate": "激活", + "Active": "活跃", + "Active_users": "活跃用户", "Activity": "活动", "Add": "添加", "Add_agent": "添加客服", + "Add_custom_emoji": "添加自定义表情", "Add_custom_oauth": "添加自定义 OAuth ", "Add_Domain": "添加域名", "Add_files_from": "添加文件", "Add_manager": "添加管理员", - "Add_monitor": "新增监视器", + "Add_monitor": "新增监控", + "Add_Reaction": "添加回应", "Add_Role": "添加角色", "Add_user": "添加用户", "Add_User": "添加用户", "Add_users": "添加用户", - "add-livechat-department-agents": "将客服添加到部门", + "add-livechat-department-agents": "将 omnichannel 客服添加到部门", "add-oauth-service": "添加 Oauth 服务", "add-oauth-service_description": "添加新 Oauth 服务的权限", "add-user": "添加用户", - "add-user_description": "通过用户屏幕将新用户添加到服务器的权限", + "add-user_description": "通过用户筛选将新用户添加到服务器的权限", "add-user-to-any-c-room": "将用户添加到任何公共频道", "add-user-to-any-c-room_description": "将用户添加到任何公共频道的权限", "add-user-to-any-p-room": "将用户添加到任何私人频道", "add-user-to-any-p-room_description": "将用户添加到任何私人频道的权限", "add-user-to-joined-room": "将用户添加到任何加入的频道", - "add-user-to-joined-room_description": "将用户添加到当前加入的频道的权限", + "add-user-to-joined-room_description": "将用户添加到当前已加入的频道的权限", "Adding_OAuth_Services": "添加 OAuth 服务", - "Adding_permission": "正在添加权限", + "Adding_permission": "权限添加", "Adding_user": "正在添加用户", "Additional_emails": "其他 Email", "Additional_Feedback": "其他反馈", @@ -250,12 +281,13 @@ "Admin_Info": "管理员信息", "Administration": "管理", "Adult_images_are_not_allowed": "成人图像是不允许的", - "Advocacy": "拥护", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "通过 OAuth2 认证后,用户将被重定向至此地址", "Agent": "客服", "Agent_added": "客服已添加", "Agent_Info": "客服信息", - "Agent_removed": "客服已删除", + "Agent_messages": "客服消息", + "Agent_Name_Placeholder": "请输入客服名称…", + "Agent_removed": "已移除客服", "Agents": "客服", "Alerts": "警报", "Alias": "别名", @@ -266,20 +298,23 @@ "All": "全部", "All_added_tokens_will_be_required_by_the_user": "所有添加的令牌都将被用户需要", "All_channels": "所有频道", - "All_closed_chats_have_been_removed": "所有已关闭的聊天已移除", + "All_closed_chats_have_been_removed": "已移除所有关闭的聊天", "All_logs": "所有日志", "All_messages": "所有消息", "All_users": "全部用户", "All_users_in_the_channel_can_write_new_messages": "该频道中的所有用户都可以发送新消息", "Allow_collect_and_store_HTTP_header_informations": "允许收集和存储 HTTP 标头信息", "Allow_collect_and_store_HTTP_header_informations_description": "此设置确定是否允许即时聊天存储从 HTTP 标头数据收集的信息,例如 IP 地址,用户代理等。", - "Allow_Invalid_SelfSigned_Certs": "允许无效的自签名 SSL 证书", + "Allow_Invalid_SelfSigned_Certs": "允许无效的自签名证书", "Allow_Invalid_SelfSigned_Certs_Description": "允许无效的自签名 SSL 证书用于验证和预览链接。", "Allow_Marketing_Emails": "允许营销电子邮件", + "Allow_Online_Agents_Outside_Business_Hours": "允许非营业的在线客服…", "Allow_Online_Agents_Outside_Office_Hours": "允许下班时间的在线客服", + "Allow_Save_Media_to_Gallery": "允许存储媒体至画廊", "Allow_switching_departments": "允许访客切换部门", "Almost_done": "快完成了", "Alphabetical": "按英文字母顺序", + "Also_send_to_channel": "同时发送至频道", "Always_open_in_new_window": "总是在新窗口中打开", "Analytics": "分析", "Analytics_features_enabled": "功能已启用", @@ -313,8 +348,8 @@ "API_EmbedSafePorts": "安全端口", "API_EmbedSafePorts_Description": "逗号分隔允许预览的端口列表。", "API_Enable_CORS": "启用 CORS", - "API_Enable_Direct_Message_History_EndPoint": "启用私聊历史记录的端点", - "API_Enable_Direct_Message_History_EndPoint_Description": "这会启用 `/api/v1/im.history.others` ,它允许查看其他用户发送的私信。", + "API_Enable_Direct_Message_History_EndPoint": "启用私聊消息历史端点", + "API_Enable_Direct_Message_History_EndPoint_Description": "这会启用 `/api/v1/im.history.others` ,它允许查看调用者未参与的其他用户私聊消息。", "API_Enable_Personal_Access_Tokens": "允许使用个人访问令牌访问 REST API", "API_Enable_Personal_Access_Tokens_Description": "允许使用个人访问令牌使用 REST API", "API_Enable_Rate_Limiter": "启用速率限制器", @@ -338,16 +373,19 @@ "API_Personal_Access_Tokens_To_REST_API": "个人访问令牌访问 REST API", "API_Shield_Types": "盾牌类型", "API_Shield_Types_Description": "屏蔽类型以逗号分隔列表形式启用,可以从“在线”,“频道”或“*”中为所有人选择", + "API_Shield_user_require_auth": "对用户 shields 启用验证", "API_Token": "API 令牌", "API_Tokenpass_URL": "Tokenpass 服务器 URL", "API_Tokenpass_URL_Description": "例如:https://domain.com(不包括尾部斜线)", "API_Upper_Count_Limit": "最大记录量", "API_Upper_Count_Limit_Description": "REST API 应返回的最大记录数量(在没有限制的条件下)?", + "API_Use_REST_For_DDP_Calls": "在 Meteor 调用中使用 REST 代替 websocket", "API_User_Limit": "添加所有用户到频道的用户限制", "API_Wordpress_URL": "WordPress URL", "api-bypass-rate-limit": "绕过 REST API 速率限制", "Apiai_Key": "Api.ai Key", "Apiai_Language": "Api.ai 语言", + "APIs": "API", "App_author_homepage": "作者主页", "App_Details": "应用细节", "App_Information": "应用信息", @@ -365,26 +403,56 @@ "App_support_url": "支持网址", "App_Url_to_Install_From": "从 URL 安装", "App_Url_to_Install_From_File": "从文件安装", - "App_user_not_allowed_to_login": "App类型用户不允许直接登录。", + "App_user_not_allowed_to_login": "应用用户不被允许直接登录。", "Appearance": "外观", "Application_added": "应用已添加", + "Application_delete_warning": "你将无法还原此应用!", "Application_Name": "应用名称", "Application_updated": "应用已更新", "Apply": "申请", "Apply_and_refresh_all_clients": "应用并刷新所有客户端", "Apps": "应用", "Apps_Engine_Version": "应用程序引擎版本", + "Apps_Essential_Alert": "此应用对以下事件为必须:", + "Apps_Essential_Disclaimer": "此应用禁用时上方列出的事件将被影响。如果想让 Rocket.Chat 在没有此应用的情况下运行,您需要卸载它。", "Apps_Framework_Development_Mode": "启用开发模式", "Apps_Framework_Development_Mode_Description": "开发模式允许您安装那些不在 Rocket.Chat 市场中的应用。", "Apps_Framework_enabled": "启用应用框架", "Apps_Game_Center": "游戏中心", + "Apps_Game_Center_Back": "返回游戏中心", "Apps_Game_Center_enabled": "启用游戏中心", + "Apps_Game_Center_Invite_Friends": "邀请您的朋友加入", + "Apps_Game_Center_Play_Game_Together": "@here 来一起玩 __name__ 吧!", + "Apps_Interface_IPostExternalComponentClosed": "外部组件关闭后事件", + "Apps_Interface_IPostExternalComponentOpened": "外部组件开启后事件", + "Apps_Interface_IPostMessageDeleted": "消息删除后事件", + "Apps_Interface_IPostMessageSent": "消息发送后事件", + "Apps_Interface_IPostMessageUpdated": "消息更新后事件", + "Apps_Interface_IPostRoomCreate": "房间创建后事件", + "Apps_Interface_IPostRoomDeleted": "房间删除后事件", + "Apps_Interface_IPostRoomUserJoined": "用户加入房间后事件(私聊,频道)", + "Apps_Interface_IPreMessageDeletePrevent": "消息删除前事件", + "Apps_Interface_IPreMessageSentExtend": "消息发送前事件", + "Apps_Interface_IPreMessageSentModify": "消息发送前事件", + "Apps_Interface_IPreMessageSentPrevent": "消息发送前事件", + "Apps_Interface_IPreMessageUpdatedExtend": "消息更新前事件", + "Apps_Interface_IPreMessageUpdatedModify": "消息更新前事件", + "Apps_Interface_IPreMessageUpdatedPrevent": "消息更新前事件", + "Apps_Interface_IPreRoomCreateExtend": "房间创建前事件", + "Apps_Interface_IPreRoomCreateModify": "房间创建前事件", + "Apps_Interface_IPreRoomCreatePrevent": "房间创建前事件", + "Apps_Interface_IPreRoomDeletePrevent": "房间删除前事件", + "Apps_Interface_IPreRoomUserJoined": "用户加入房间前事件(私聊,频道)", "Apps_Marketplace_Deactivate_App_Prompt": "是否确定要禁用此应用程序?", "Apps_Marketplace_Login_Required_Description": "从 Rocket.Chat 市场购买应用需要在注册您的工作区并登陆。", "Apps_Marketplace_Login_Required_Title": "需要登录市场", "Apps_Marketplace_Modify_App_Subscription": "修改订阅", "Apps_Marketplace_pricingPlan_monthly": "__price__ /月", "Apps_Marketplace_pricingPlan_monthly_perUser": "每个用户__price__ /月", + "Apps_Marketplace_pricingPlan_startingAt_monthly": "每月 __price__ 起", + "Apps_Marketplace_pricingPlan_startingAt_monthly_perUser": "每月每用户 __price__ 起", + "Apps_Marketplace_pricingPlan_startingAt_yearly": "每年 __price__ 起", + "Apps_Marketplace_pricingPlan_startingAt_yearly_perUser": "每年每用户 __price__ 起", "Apps_Marketplace_pricingPlan_yearly": "__price__ /年", "Apps_Marketplace_pricingPlan_yearly_perUser": "每个用户__price__ /年", "Apps_Marketplace_Uninstall_App_Prompt": "是否确定要卸载此应用程序?", @@ -420,7 +488,7 @@ "Apps_Permissions_scheduler": "使用定时器去执行定时任务", "Apps_Permissions_ui_interact": "使用UI组件", "Apps_Settings": "应用的设置", - "Apps_User_Already_Exists": "与待安装App同名的用户 __username__ 已存在,请在安装前重命名或删除该用户。", + "Apps_User_Already_Exists": "与待安装App同名的用户 “__username__” 已存在,请在安装前重命名或删除该用户。", "Apps_WhatIsIt": "应用程序:它们是什么?", "Apps_WhatIsIt_paragraph1": "管理后台的新图标!这是什么意思,什么是应用程序?", "Apps_WhatIsIt_paragraph2": "首先,在这种情况下的应用程序不涉及移动应用程序。事实上,最好从插件或高级集成角度考虑它们。", @@ -442,8 +510,8 @@ "assign-admin-role": "分配管理员角色", "assign-admin-role_description": "将管理员角色分配给其他用户的权限", "assign-roles": "分配角色", - "at": "在", - "At_least_one_added_token_is_required_by_the_user": "用户至少需要添加一个令牌", + "at": "于", + "At_least_one_added_token_is_required_by_the_user": "至少需要一个由用户添加的令牌", "AtlassianCrowd": "Atlassian人群", "Attachment_File_Uploaded": "文件已上传", "Attribute_handling": "属性处理", @@ -483,10 +551,12 @@ "AutoTranslate_Enabled": "启用自动翻译", "AutoTranslate_Enabled_Description": "启用自动翻译功能后,拥有auto-translate权限的用户可以将所有消息自动翻译成用户选择的语言。这可能需要付费。", "AutoTranslate_Google": "谷歌", + "AutoTranslate_Microsoft": "微软", + "AutoTranslate_Microsoft_API_Key": "Ocp-Apim-Subscription-Key", "AutoTranslate_ServiceProvider": "服务提供者", "Available": "可用", "Available_agents": "空闲客服", - "Available_departments": "可用的目标", + "Available_departments": "可用部门", "Avatar": "头像", "Avatar_changed_successfully": "头像更新成功", "Avatar_URL": "头像地址", @@ -498,7 +568,7 @@ "Avg_of_chat_duration_time": "平均聊天时间", "Avg_of_service_time": "平均服务时间", "Avg_of_waiting_time": "平均等待时间", - "Avg_reaction_time": "平均反应时间", + "Avg_reaction_time": "平均回应时间", "Avg_response_time": "平均响应时间", "away": "离开", "Away": "离开", @@ -509,6 +579,7 @@ "Back": "返回", "Back_to_applications": "返回应用列表", "Back_to_chat": "回到聊天室", + "Back_to_imports": "返回导入", "Back_to_integration_detail": "返回查看集成的详细信息", "Back_to_integrations": "返回集成页", "Back_to_login": "返回登录界面", @@ -521,7 +592,18 @@ "Best_first_response_time": "最快首次响应时间", "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "测试功能。需要视频会议功能支持才能启用。", "Better": "更好", - "Block_Multiple_Failed_Logins_Ip_Whitelist": "IP白名单", + "Bio": "个人经历", + "Bio_Placeholder": "个人经历占位符", + "Block_Multiple_Failed_Logins_Attempts_Until_Block_By_Ip": "在按 IP 屏蔽前允许失败的尝试次数", + "Block_Multiple_Failed_Logins_Attempts_Until_Block_by_User": "在按用户屏蔽前允许失败的尝试次数", + "Block_Multiple_Failed_Logins_By_Ip": "按 IP 屏蔽失败的登录尝试", + "Block_Multiple_Failed_Logins_By_User": "按用户名屏蔽失败的登录尝试", + "Block_Multiple_Failed_Logins_Enable_Collect_Login_data_Description": "在数据库的数据集中存储登录尝试对应的 IP 和用户名", + "Block_Multiple_Failed_Logins_Enabled": "启用在数据中收集日志", + "Block_Multiple_Failed_Logins_Ip_Whitelist": "IP 白名单", + "Block_Multiple_Failed_Logins_Ip_Whitelist_Description": "白名单 IP 的逗号分隔列表", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_Ip_In_Minutes": "解除 IP 屏蔽的分钟数", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_User_In_Minutes": "解除用户屏蔽的分钟数", "Block_User": "屏蔽用户", "Blockchain": "区块链", "Blockstack_Auth_Description": "认证描述", @@ -543,6 +625,8 @@ "Broadcasting_enabled": "启用广播", "Broadcasting_media_server_url": "广播媒体服务器 URL", "Browse_Files": "浏览文件", + "Browser_does_not_support_audio_element": "您的浏览器不支持音频元素。", + "Browser_does_not_support_video_element": "您的浏览器不支持视频元素。", "Bugsnag_api_key": "Bugsnag API Key", "Build_Environment": "构建环境", "bulk-register-user": "批量创建频道", @@ -551,6 +635,9 @@ "Busiest_time": "最忙的时间", "Business_Hour": "营业时间", "Business_Hour_Removed": "已移除营业时间", + "Business_Hours": "营业时间", + "Business_hours_enabled": "已启用营业时间", + "Business_hours_updated": "已更新营业时间", "busy": "忙碌", "Busy": "忙碌", "busy_female": "忙碌", @@ -558,22 +645,28 @@ "busy_male": "忙碌", "Busy_male": "忙碌", "by": "通过", + "By_author": "由 __author__", "cache_cleared": "缓存已清理", + "Call": "调用", "call-management": "呼叫管理", + "Caller": "调用者", "Cancel": "取消", "Cancel_message_input": "取消", "Canceled": "已取消", - "Canned Responses": "罐装回复", - "Canned_Response_Removed": "已移除罐装回复", - "Canned_Responses_Enable": "启用罐装回复", - "Cannot_invite_users_to_direct_rooms": "不能邀请用户加入私聊房间", - "Cannot_open_conversation_with_yourself": "不能与你自己发送消息", + "Canned Responses": "自动回复", + "Canned_Response_Removed": "已移除自动回复", + "Canned_Responses_Enable": "启用自动回复", + "Cannot_invite_users_to_direct_rooms": "不能邀请用户加入私聊", + "Cannot_open_conversation_with_yourself": "不能和你自己私聊", + "Cannot_share_your_location": "不能分享您的位置…", "CAS_autoclose": "自动关闭登录窗口", "CAS_base_url": "SSO 基本 URL", "CAS_base_url_Description": "外部 SSO 服务的基本 URL,例如:https://sso.example.undef/sso/", "CAS_button_color": "登录按钮背景颜色", "CAS_button_label_color": "登录按钮文字颜色", "CAS_button_label_text": "登录按钮标签", + "CAS_Creation_User_Enabled": "允许创建用户", + "CAS_Creation_User_Enabled_Description": "允许从 CAS 单据数据创建 CAS 用户", "CAS_enabled": "已启用", "CAS_Login_Layout": "CAS 登录布局", "CAS_login_url": "SSO 登录URL", @@ -603,18 +696,26 @@ "Channel_Archived": "频道 `#%s` 已成功存档", "Channel_created": "频道 `#%s` 已创建。", "Channel_doesnt_exist": "不存在 `#%s` 频道。", + "Channel_Export": "导出频道", "Channel_name": "频道名称", "Channel_Name_Placeholder": "请输入频道名称...", - "Channel_to_listen_on": "监听频道", - "Channel_Unarchived": "频道 `#%s` 已成功取消归档", + "Channel_to_listen_on": "要监听的频道", + "Channel_Unarchived": "已成功取消频道 `#%s` 的归档", "Channels": "频道", - "Channels_are_where_your_team_communicate": "频道是您的团队沟通的地方", + "Channels_are_where_your_team_communicate": "频道是您团队沟通的地方", "Channels_list": "公共频道列表", + "Chart": "购物车", "Chat_button": "聊天按钮", + "Chat_close": "聊天关闭", "Chat_closed": "聊天已关闭", "Chat_closed_by_agent": "客服关闭了聊天", "Chat_closed_successfully": "聊天已成功关闭", + "Chat_History": "聊天历史", "Chat_Now": "现在聊天", + "Chat_queued": "聊天已排队", + "Chat_removed": "已移除聊天", + "Chat_start": "聊天开始", + "Chat_taken": "聊天已进行", "Chat_window": "聊天窗口", "Chatops_Enabled": "启用 Chatops", "Chatops_Title": "Chatops 面版", @@ -629,10 +730,13 @@ "Chatpal_Base_URL_Description": "查找一些说明如何在github上运行本地实例。网址必须是绝对地址,并指向 chatpal 核心,例如Http://localhost:8983/solr/chatpal。", "Chatpal_Batch_Size": "索引批量大小", "Chatpal_Batch_Size_Description": "索引文件的批量大小(自举)", + "Chatpal_channel_not_joined_yet": "尚未加入频道", "Chatpal_create_key": "创建密钥", "Chatpal_created_key_successfully": "API密钥创建成功", + "Chatpal_Current_Room_Only": "同一房间", "Chatpal_Default_Result_Type": "默认结果类型", "Chatpal_Default_Result_Type_Description": "定义结果显示哪个结果类型。所有这一切意味着提供了所有类型的概述。", + "Chat_Duration": "聊天时长", "Chatpal_Email_Address": "电子邮件地址", "Chatpal_ERROR_Email_must_be_set": "电子邮件必须设置", "Chatpal_ERROR_Email_must_be_valid": "电子邮件必须有效", @@ -641,9 +745,11 @@ "Chatpal_Get_more_information_about_chatpal_on_our_website": "在http://chatpal.io获取有关Chatpal的更多信息!", "Chatpal_go_to_message": "跳转", "Chatpal_go_to_room": "跳转", - "Chatpal_go_to_user": "发送直接消息", + "Chatpal_go_to_user": "发送私聊消息", "Chatpal_HTTP_Headers": "HTTP 标头", "Chatpal_HTTP_Headers_Description": "HTTP 标头列表,每一个header一行。格式:名称:值", + "Chatpal_Include_All_Public_Channels": "包含所有公共频道", + "Chatpal_Include_All_Public_Channels_Description": "在所有公共频道中搜索,即便您尚未加入它们。", "Chatpal_Main_Language": "主要语言", "Chatpal_Main_Language_Description": "在对话中最常用的语言", "Chatpal_Messages": "信息", @@ -666,54 +772,78 @@ "Chatpal_Welcome": "享受您的搜索!", "Chatpal_Window_Size": "索引窗口大小", "Chatpal_Window_Size_Description": "索引窗口的大小以小时为单位(在引导时)", + "Chats_removed": "已移除聊天", + "Check_All": "全选", + "Check_Progress": "检查进度", "Choose_a_room": "选择一个聊天室", "Choose_messages": "选择信息", "Choose_the_alias_that_will_appear_before_the_username_in_messages": "选择将在消息中的用户名前出现的别名。", "Choose_the_username_that_this_integration_will_post_as": "选择该集成以什么用户名身份发布信息", + "Choose_users": "选择用户", "Clean_Usernames": "清除用户名", - "clean-channel-history": "清理频道记录", - "clean-channel-history_description": "清除渠道历史记录的权限", + "clean-channel-history": "清理频道历史记录", + "clean-channel-history_description": "清除频道历史记录的权限", "clear": "清理", "Clear_all_unreads_question": "清除所有未读标记?", "clear_cache_now": "立即清理缓存", + "Clear_filters": "清除筛选", "clear_history": "清理历史记录", - "Click_here": "点击这里", + "Click_here": "点击此处", + "Click_here_for_more_details_or_contact_sales_for_a_new_license": "点击此处 获取更多细节或联系 __email__ 获取新的许可。", "Click_here_for_more_info": "点此查看更多信息", - "Click_here_to_enter_your_encryption_password": "点击此处输入密码", - "Click_here_to_view_and_copy_your_password": "点击此处查看并复制您的密码", + "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": "客户端 ID", "Client_Secret": "客户端 Secret", "Clients_will_refresh_in_a_few_seconds": "客户端将在几秒钟内刷新", "close": "关闭", "Close": "关闭", - "close-livechat-room": "关闭即时聊天室", - "close-livechat-room_description": "关闭当前即时聊天频道的权限", - "close-others-livechat-room": "关闭即时聊天室", - "close-others-livechat-room_description": "关闭其他即时聊天频道的权限", + "Close_room_description": "将关闭此聊天。您确定要继续吗?", + "close-livechat-room": "关闭 omnichannel ", + "close-livechat-room_description": "关闭当前 omnichannel 聊天室的权限", + "close-others-livechat-room": "关闭其他 omnichannel 聊天室", + "close-others-livechat-room_description": "关闭其他 omnichannel 聊天室的权限", "Closed": "已关闭", + "Closed_At": "关闭于", + "Closed_automatically": "已被系统自动关闭", "Closed_by_visitor": "由访客关闭", "Closing_chat": "正在关闭聊天", + "Closing_chat_message": "关闭聊天信息", "Cloud": "Cloud ", + "Cloud_Apply_Offline_License": "应用离线许可", + "Cloud_Change_Offline_License": "变更离线许可", + "Cloud_License_applied_successfully": "成功应用许可!", + "Cloud_Invalid_license": "无效许可!", + "Cloud_Apply_license": "应用许可", + "Cloud_connectivity": "云连接性", "Cloud_address_to_send_registration_to": "您用来注册 Cloud 的电子邮件的地址。", + "Cloud_click_here": "在复制文本后,前往 [cloud console (click here)](__cloudConsoleUrl__)。", "Cloud_console": "云控制台", "Cloud_error_code": "代码: __errorCode__", "Cloud_error_in_authenticating": "验证出错", - "Cloud_Info": "云端资料", + "Cloud_Info": "云信息", "Cloud_login_to_cloud": "登录至 Rocket.Chat Cloud", "Cloud_logout": "登出 Rocket.Chat 云", - "Cloud_manually_input_token": "手动输入在 Cloud 注册邮件中包含的令牌。", + "Cloud_manually_input_token": "手动输入在云控制台中获取的令牌。", "Cloud_register_error": "处理请求时出错。请稍后再试。", - "Cloud_Register_manually": "手动注册", + "Cloud_Register_manually": "离线注册", "Cloud_register_offline_finish_helper": "在Cloud Console中完成注册过程后,应该显示出一些文本。请粘贴到此处以完成注册。", "Cloud_register_offline_helper": "如果网络访问受到限制,可以手动注册工作区。复制下面的文字并转到Cloud Console以完成本次操作。", "Cloud_register_success": "您的工作区已成功注册!", + "Cloud_registration_pending_html": "完成注册前移动端通知将不可用。了解更多", + "Cloud_registration_pending_title": "云注册尚未完成", "Cloud_registration_required": "要求注册", "Cloud_registration_required_description": "在安装过程中,您似乎没有选择注册工作区。", - "Cloud_registration_required_link_text": "点击此处注册您的工作区。", + "Cloud_registration_required_link_text": "点此注册您的工作区。", "Cloud_resend_email": "重新发送邮件", + "Cloud_Service_Agree_PrivacyTerms": "云服务隐私条款", + "Cloud_Service_Agree_PrivacyTerms_Description": "我同意条款和隐私协议", + "Cloud_Service_Agree_PrivacyTerms_Login_Disabled_Warning": "您应当接受云隐私条款(安装向导>云信息>云服务隐私条款同意书)以连接你的云工作区", "Cloud_status_page_description": "如果某项云服务有问题您可以查看我们的状态页面于", + "Cloud_token_instructions": "要注册你的工作区,前往云控制台。登录或创建账号后点击注册自主管理实例。粘贴以下提供的令牌", "Cloud_troubleshooting": "故障排除", "Cloud_update_email": "更新邮箱", "Cloud_what_is_it": "这是什么?", @@ -726,6 +856,7 @@ "Cloud_workspace_disconnect": "如果您不想继续使用云服务, 您可以断开工作区和 Rocket.Chat 云的连接。", "Cloud_workspace_support": "如果您遇到任何云服务的问题, 请先尝试同步。如果问题依旧, 请在云控制台中开启一个支持工单。", "Collaborative": "协作", + "Collapse": "折叠", "Collapse_Embedded_Media_By_Default": "关闭默认的嵌入式媒体", "color": "颜色", "Color": "颜色", @@ -736,29 +867,42 @@ "Community": "社区", "Compact": "紧凑", "Condensed": "简明", + "Commit_details": "提交细节", "Completed": "已完成", "Computer": "电脑", - "Confirm_new_encryption_password": "确认新密码", + "Configure_Incoming_Mail_IMAP": "编辑入站邮件(IMAP)", + "Configure_Outgoing_Mail_SMTP": "编辑出站邮件(SMTP)", + "Confirm_new_encryption_password": "确认新加密密码", "Confirm_new_password": "确认新密码", "Confirm_New_Password_Placeholder": "请重新输入新密码...", "Confirm_password": "确认密码", "Connect": "连接", + "Connect_SSL_TLS": "使用 SSL/TLS 连接", "Connection_Closed": "连接关闭", "Connection_Reset": "连接重置", + "Connection_success": "LDAP 连接成功", "Connectivity_Services": "连接性服务", "Consulting": "咨询", - "Consumer_Goods": "消费品", "Contact": "联系人", + "Contacts": "联系人", + "Contact_Name": "联系人名称", + "Contact_Center": "联系人中心", + "Contact_Chat_History": "联系聊天历史", "Contains_Security_Fixes": "包含安全修复程序", + "Contact_Manager": "联系人管理员", + "Contact_not_found": "未找到联系人", + "Contact_Profile": "联系人资料", "Content": "内容", "Continue": "继续", - "Continuous_sound_notifications_for_new_livechat_room": "新即时聊天室的连续声音通知", + "Continuous_sound_notifications_for_new_livechat_room": "新 omnichannel 聊天室的连续声音通知", "Conversation": "会话", "Conversation_closed": "会话已关闭:__comment__。", - "Conversation_finished": "对话结束", + "Conversation_closing_tags": "会话关闭标签", + "Conversation_closing_tags_description": "将会在对话关闭时自动分配关闭标签", + "Conversation_finished": "会话结束", "Conversation_finished_message": "会话完成时的消息", - "Conversation_finished_text": "对话已完成文字", - "conversation_with_s": "与 %s 的对话", + "Conversation_finished_text": "会话完成时的文本", + "conversation_with_s": "与 %s 的会话", "Conversations": "会话", "Conversations_per_day": "每日会话", "Convert_Ascii_Emojis": "自动识别文字中的表情", @@ -1012,13 +1156,13 @@ "Country_Zimbabwe": "津巴布韦", "Cozy": "舒适", "Create": "创建", - "Create_A_New_Channel": "创建一个新频道", + "Create_A_New_Channel": "创建新频道", "Create_new": "新建", "Create_unique_rules_for_this_channel": "为此频道创建独特的规则", "create-c": "创建公共频道", "create-c_description": "创建公共频道的权限", "create-d": "创建私聊消息", - "create-d_description": "开始私聊消息的权限", + "create-d_description": "开启私聊的权限", "create-invite-links": "创建邀请链接", "create-invite-links_description": "创建频道邀请链接的权限", "create-p": "创建私人频道", @@ -1026,15 +1170,20 @@ "create-personal-access-tokens": "创建个人访问令牌", "create-user": "创建用户", "create-user_description": "创建用户的权限", + "Created": "已创建", + "Created_as": "创建为", "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": "创建于 %s, 由 %s ", + "Created_at_s_by_s_triggered_by_s": "创建于 %s,由%s 通过 %s 触发", + "Created_by": "创建由", "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)上的更多示例,", + "Crowd_Remove_Orphaned_Users": "移除孤立用户", + "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", @@ -1045,12 +1194,13 @@ "Custom_Emoji_Add": "添加新表情", "Custom_Emoji_Added_Successfully": "自定义表情添加成功", "Custom_Emoji_Delete_Warning": "表情删除操作无法撤销。", - "Custom_Emoji_Error_Invalid_Emoji": "无效的表情", + "Custom_Emoji_Error_Invalid_Emoji": "无效表情", "Custom_Emoji_Error_Name_Or_Alias_Already_In_Use": "自定义表情或别名已经被占用。", - "Custom_Emoji_Has_Been_Deleted": "自定义表情已经被删除。", + "Custom_Emoji_Has_Been_Deleted": "自定义表情已删除。", "Custom_Emoji_Info": "自定义表情信息", "Custom_Emoji_Updated_Successfully": "自定义表情更新成功", "Custom_Fields": "自定义字段", + "Custom_Field_Removed": "已移除自定义字段", "Custom_oauth_helper": "设置完 OAuth 提供者之后,你还需要设置回调 URL。请使用 %s。", "Custom_oauth_unique_name": "自定义 OAuth 唯一名称 ", "Custom_Script_Logged_In": "为已登录用户准备的自定义脚本", @@ -1062,32 +1212,38 @@ "Custom_Scripts": "自定义脚本", "Custom_Sound_Add": "添加自定义声音", "Custom_Sound_Delete_Warning": "声音删除操作无法撤销。", - "Custom_Sound_Error_Invalid_Sound": "无效的声音", + "Custom_Sound_Edit": "编辑自定义声音", + "Custom_Sound_Error_Invalid_Sound": "无效声音", "Custom_Sound_Error_Name_Already_In_Use": "自定义声音的名称已被占用。", "Custom_Sound_Has_Been_Deleted": "自定义声音已删除。", "Custom_Sound_Info": "自定义声音信息", "Custom_Sound_Saved_Successfully": "自定义声音保存成功", "Custom_Sounds": "自定义声音", + "Custom_Status": "自定义状态", "Custom_Translations": "自定义翻译", "Custom_Translations_Description": "应使用 JSON 文件格式,键为语言,值为翻译。例如:{\n \"en\": {\n \"Channels\": \"Rooms\"\n },\n \"pt\": {\n \"Channels\": \"Salas\"\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_Edit": "编辑自定义用户状态", + "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": "自定义声音文件系统", + "Daily_Active_Users": "每日活跃用户", "Dashboard": "控制面板", "Data_processing_consent_text": "数据处理同意书", - "Data_processing_consent_text_description": "使用此设置表示您可以在对话中收集,存储和处理客户的个人信息。", + "Data_processing_consent_text_description": "使用此设置来表示您可以在对话中收集,存储和处理客户的个人信息。", "Date": "日期", "Date_From": "从", "Date_to": "到", + "DAU_value": "DAU __value__", "days": "天", + "Days": "日", "DB_Migration": "数据库迁移", "DB_Migration_Date": "数据库迁移日期", "DDP_Rate_Limit_Connection_By_Method_Enabled": "连接每方法限制: 启用", @@ -1112,6 +1268,7 @@ "Default_value": "默认值", "Delete": "删除", "Delete_all_closed_chats": "删除所有已关闭的聊天", + "Delete_File_Warning": "删除文件是永久的。这不能被撤销。", "Delete_message": "删除消息", "Delete_my_account": "删除我的帐号", "Delete_Room_Warning": "删除聊天室会同时删除聊天室内的所有消息。这不能被撤销。", @@ -1120,18 +1277,18 @@ "Delete_User_Warning_Keep": "用户将被删除,但他们的消息将保持可见。这不能被撤销。", "Delete_User_Warning_Unlink": "删除用户将从用户的所有消息中删除用户名。这不能被撤销。", "delete-c": "删除公共频道", - "delete-c_description": "允许删除公共频道", + "delete-c_description": "删除公共频道的权限", "delete-d": "删除私聊消息", - "delete-d_description": "删除直接消息的权限", + "delete-d_description": "删除私聊消息的权限", "delete-message": "删除消息", - "delete-message_description": "允许删除房间内的消息", + "delete-message_description": "允许删除聊天室内的消息", "delete-p": "删除私人频道", "delete-p_description": "允许删除私人频道", "delete-user": "删除用户", "delete-user_description": "删除用户的权限", "Deleted": "已删除!", "Department": "部门", - "Department_removed": "部门已删除", + "Department_removed": "已删除部门", "Departments": "部门", "Deployment_ID": "部署 ID", "Description": "描述", @@ -1141,21 +1298,24 @@ "Desktop_Notifications_Default_Alert": "桌面通知默认提醒", "Desktop_Notifications_Disabled": "桌面通知已被禁用。如果您需要启用桌面通知,请修改浏览器设置。", "Desktop_Notifications_Duration": "桌面通知时间", - "Desktop_Notifications_Duration_Description": "显示多少秒桌面通知。这可能会影响 OS X 通知中心。输入 0 可使用默认浏览器设置,并不会影响 OS X 通知中心。", + "Desktop_Notifications_Duration_Description": "桌面通知显示秒数。这可能会影响 OS X 通知中心。输入 0 使用默认浏览器设置,避免影响 OS X 通知中心。", "Desktop_Notifications_Enabled": "桌面通知已启用", "Desktop_Notifications_Not_Enabled": "桌面通知未启用", "Details": "详细信息", "Different_Style_For_User_Mentions": "用户提及的不同风格", - "Direct_message_someone": "直接给某人发送消息", - "Direct_Messages": "私聊", + "Direct_Message": "私聊消息", + "Direct_message_creation_description": "您将创建与多个用户的聊天。这将允许您同时和多个用户进行私聊。", + "Direct_message_someone": "和某人私聊", + "Direct_message_you_have_joined": "您加入了新的私聊与", + "Direct_Messages": "私聊消息", "Direct_Reply": "直接回复", - "Direct_Reply_Advice": "您能直接回复此邮件。请不要修改此回复邮件的之前内容", + "Direct_Reply_Advice": "您能直接回复此邮件。请不要修改讨论串中其他邮件的内容。", "Direct_Reply_Debug": "调试直接回复", "Direct_Reply_Debug_Description": "[注意] 启用调试模式将在管理控制台中显示您的 “纯文本密码”。", - "Direct_Reply_Delete": "删除截获的电子邮件", - "Direct_Reply_Delete_Description": "[注意!]如果激活此选项,所有未读消息将永久删除,包括未直接回复的消息。设置的邮箱将总为空并不能由人员同时进行处理。", + "Direct_Reply_Delete": "删除电子邮件", + "Direct_Reply_Delete_Description": "[注意!]如果激活此选项,所有未读消息将永久删除,包括未直接回复的消息。设置的邮箱将总为空并不能由人员”同时“进行处理。", "Direct_Reply_Enable": "启用直接回复", - "Direct_Reply_Enable_Description": "[注意!]如果 \"直接回复\" 启用, Rocket.Chat 将控制设置的邮箱。所有未读邮件将会被收取并标记为已读进行处理。\"直接回复\" 应当仅用于 Rocket.Chat 专用的邮箱,不应有人员同时进行读取或处理。", + "Direct_Reply_Enable_Description": "[注意!]如果“直接回复”启用, Rocket.Chat 将控制锁设置的邮箱。所有未读邮件将会被收取并标记为已读进行处理。“直接回复”应当为 Rocket.Chat 专用的邮箱启用,不应有人员“同时”进行读取或处理。", "Direct_Reply_Frequency": "邮件检查频率", "Direct_Reply_Frequency_Description": "(以分钟为单位,默认/最小 2)", "Direct_Reply_Host": "直接回复主机", @@ -1170,13 +1330,16 @@ "Directory": "目录", "Disable_Facebook_integration": "禁用 Facebook 集成", "Disable_Notifications": "禁用通知", - "Disable_two-factor_authentication": "禁用双因素身份验证", + "Disable_two-factor_authentication": "禁用基于 TOTP 的两步验证", + "Disable_two-factor_authentication_email": "禁用基于邮件的两步验证", "Disabled": "已禁用", - "Disallow_reacting": "不允许反应", - "Disallow_reacting_Description": "不允许反应", + "Disallow_reacting": "不允许回应", + "Disallow_reacting_Description": "不允许回应", + "Discard": "放弃", "Disconnect": "断开连接", "Discussion": "讨论", - "Discussion_description": "帮助保持事态更新! 通过创建讨论,一个和所选频道双向关联的子频道将会被创建。", + "Discussion_description": "帮助保持事态更新! 通过创建讨论,可创建一个和所选频道双向关联的子频道。", + "Discussion_first_message_disabled_due_to_e2e": "在此讨论的创建完成后您可以发送端到端加密的消息", "Discussion_first_message_title": "你的消息", "Discussion_name": "讨论名称", "Discussion_start": "开始一个讨论", @@ -1192,40 +1355,51 @@ "Display_unread_counter": "显示未读消息的数量", "Displays_action_text": "显示动作文字", "Do_not_display_unread_counter": "不要显示此频道的任何计数器", + "Do_not_provide_this_code_to_anyone": "不要把这个代码给任何人。", "Do_you_want_to_accept": "你想接受吗?", "Do_you_want_to_change_to_s_question": "您是否想修改为 %s?", "Document_Domain": "文档域", "Domain": "域名", "Domain_added": "域名已添加", - "Domain_removed": "域名已移除", + "Domain_removed": "已移除域名", "Domains": "域名", "Domains_allowed_to_embed_the_livechat_widget": "允许嵌入即时聊天小部件的逗号分隔的域列表。留空以允许所有域。", "Dont_ask_me_again": "不要再问我了!", "Dont_ask_me_again_list": "不要再问我列表", - "Download_My_Data": "下载我的数据", + "Download_Info": "下载信息", + "Download_My_Data": "下载我的数据(HTML)", + "Download_Pending_Files": "下载挂起的文件", "Download_Snippet": "下载", "Downloading_file_from_external_URL": "从外部 URL 下载文件", "Drop_to_upload_file": "拖放上传", "Dry_run": "试运行", "Dry_run_description": "表单中的 E-mail 都只会收到一封邮件。邮件必须对应有效用户。", "Duplicate_archived_channel_name": "名为 `%s` 的已归档频道已存在", - "Duplicate_archived_private_group_name": "名为 `%s` 的已归档私有组已存在", + "Duplicate_archived_private_group_name": "名为 `%s` 的已归档私人组已存在", "Duplicate_channel_name": "名为 `%s` 的频道已存在", "Duplicate_file_name_found": "发现重复文件名。", - "Duplicate_private_group_name": "名为 `%s` 的私有组已存在", + "Duplicate_private_group_name": "名为 `%s` 的私人组已存在", "Duplicated_Email_address_will_be_ignored": "重复的电子邮件地址将被忽略。", "duplicated-account": "重复的账号", "E2E Encryption": "端到端(E2E)加密", - "E2E_Enable_alert": "此功能目前处于测试阶段!请将错误报告给github.com/RocketChat/Rocket.Chat/issues并注意: - 搜索操作无法找到加密聊天室的加密消息。 - 移动应用暂时不支持加密消息(他们正在开发)。 - 机器人可能无法看到加密消息,直到实现对它的支持。 - 此版本中不会加密上传文件。", - "E2E_Enable_description": "启用选项以创建加密组,并能够更改组以及指示要加密的消息", + "E2E_enable": "启用端到端加密", + "E2E_disable": "禁用端到端加密", + "E2E_Enable_alert": "此功能目前处于测试阶段!请将错误报告给 github.com/RocketChat/Rocket.Chat/issues 并注意: - 搜索操作无法找到加密聊天室的加密消息。 - 移动应用暂时不支持加密消息(他们正在开发)。 - 机器人可能无法看到加密消息,直到实现对它的支持。 - 此版本中不会加密上传文件。", + "E2E_Enable_description": "启用选项以创建加密组,并能够更改要加密的组和私聊消息。", "E2E_Enabled": "端到端已启用", + "E2E_Enabled_Default_DirectRooms": "默认为私聊启用加密", + "E2E_Enabled_Default_PrivateRooms": "默认为私人聊天室启用加密", "E2E_Encryption_Password_Change": "更改加密密码", - "E2E_Encryption_Password_Explanation": "您现在可以创建加密的专用组和直接消息。您也可以将现有的私人组或直接消息更改为加密。这是端到端加密,因此编码/解码邮件的密钥不会保存在服务器上。因此,您需要将密码存储在安全的地方。您需要在希望使用端到端加密的其他设备上输入。", - "E2E_password_request_text": "要访问加密的专用组和直接消息,请输入密码。 您需要输入此密码才能对您使用的每个客户端上的邮件进行编码/解码,因为密钥未存储在服务器上。", - "E2E_password_reveal_text": "您现在可以创建加密的专用组和直接消息。您也可以将现有的私人组或DM模式。这是端到端加密,因此编码/解码邮件的密钥不会保存在服务器上。因此,您需要将此密码存储在安全的地方。您需要在希望使用e2e加密的其他设备上输入。 点击这里了解更多您的密码是: %s 这是系统自动生成的密码,您可以为您的密钥设置一个新密码(您可以随时从任何浏览器输入现有密码)。此密码仅存储在此浏览器中,直到您存储密码并关闭此消息。", + "E2E_Encryption_Password_Explanation": "您现在可以创建加密的私有组和私聊。您也可以将现有的私人组或直接消息更改为加密。这是端到端加密,因此编码/解码邮件的密钥不会保存在服务器上。因此,您需要将密码存储在安全的地方。您需要在希望使用端到端加密的其他设备上输入。", + "E2E_key_reset_email": "端到端加密重置通知", + "E2E_password_request_text": "要访问加密的私人组和私聊,请输入密码。 您需要在使用的每个客户端上输入此密码来对消息进行编码/解码,因为密钥未存储在服务器上。", + "E2E_password_reveal_text": "您现在可以创建加密的组和私聊。您也可以将现有的私有组和私聊转为加密的。这是端到端加密,因此编码/解码邮件的密钥不会保存在服务器上。所以您需要将此密码存储在安全的地方。您需要在希望使用端到端加密的其他设备上输入它。 点击这里了解更多您的密码是: %s 这是系统自动生成的密码,您可以为您的密钥设置一个新密码(您可以随时从任何浏览器输入现有密码)。此浏览器仅存储此密码到您存储密码并关闭此消息前。", + "E2E_Reset_Email_Content": "您将被自动登出。当您再次登录时,Rocket.Chat 将生成新的密钥并恢复您对任何有至少一个成员在线加密聊天室的访问权。由于端到端加密的原理,Rocket.Chat 将不能恢复您对无成员在线的聊天室访问权。", "E2E_Reset_Key_Explanation": "此选项将删除您当前的E2E密钥并注销您的账户。 再次登录时,Rocket.Chat将为您生成一个新密钥,并恢复您对具有一个以上成员的加密房间。因E2E加密的性质,Rocket.Chat不能够恢复对没有在线成员加密房间的访问权。", + "E2E_Reset_Other_Key_Warning": "重置当前的端到端加密密钥将使用户登出。当用户再次登录时,Rocket.Chat 将生成新的密钥并恢复用户对任何有至少一个成员在线加密聊天室的访问权。由于端到端加密的原理,Rocket.Chat 将不能恢复用户对无成员在线的聊天室访问权。", "Edit": "编辑", "Edit_Business_Hour": "编辑营业时间", + "Edit_Canned_Responses": "编辑自动回复", "Edit_Custom_Field": "编辑自定义字段", "Edit_Department": "编辑部门", "Edit_Invite": "编辑邀请", @@ -1234,22 +1408,30 @@ "Edit_Status": "编辑状态", "Edit_Tag": "编辑标签", "Edit_Trigger": "编辑触发器", + "Edit_Unit": "编辑单位", + "Edit_User": "编辑用户", "edit-message": "编辑信息", "edit-message_description": "编辑聊天室内消息的权限", "edit-other-user-active-status": "编辑其他用户活动状态", "edit-other-user-active-status_description": "启用或禁用其他帐户的权限", "edit-other-user-avatar": "编辑其他用户头像", "edit-other-user-avatar_description": "编辑其他用户头像的权限", + "edit-other-user-e2ee": "编辑其他用户的端到端加密", + "edit-other-user-e2ee_description": "编辑其他用户端到端加密的权限", "edit-other-user-info": "编辑其他用户信息", - "edit-other-user-info_description": "更改其他用户的姓名,用户名或电子邮件地址的权限。", + "edit-other-user-info_description": "更改其他用户名称,用户名或电子邮件地址的权限。", "edit-other-user-password": "编辑其他用户密码", "edit-other-user-password_description": "修改其他用户密码的权限。需要编辑其他用户信息的权限。", + "edit-other-user-totp": "编辑其他用户的两步验证 TOTP", "edit-privileged-setting": "编辑特权设置", "edit-privileged-setting_description": "编辑设置的权限", "edit-room": "编辑Room", "edit-room_description": "编辑聊天室的名称,主题,类型(私人或公共状态)和状态(活动或归档)的权限", + "edit-room-avatar": "编辑聊天室头像", + "edit-room-avatar_description": "编辑聊天室头像的权限", "edit-room-retention-policy": "编辑聊天室的保留政策", "edit-room-retention-policy_description": "编辑聊天室保留策略,自动删除其中的消息的权限", + "Edit_Contact_Profile": "编辑联系人资料", "edited": "已编辑", "Editing_room": "正在编辑聊天室", "Editing_user": "正在编辑用户", @@ -1265,28 +1447,36 @@ "Email_Footer_Description": "您可以使用以下占位符: [Site_Name] 和 [Site_URL] 分别作为应用程序的名称和网址。", "Email_from": "从", "Email_Header_Description": "您可以使用以下占位符: [Site_Name] 和 [Site_URL] 分别作为应用程序的名称和网址。", + "Email_Inbox": "电子邮件收件箱", + "Email_Inboxes": "电子邮件收件箱", "Email_Notification_Mode": "离线电子邮件通知", "Email_Notification_Mode_All": "所有提及/直接提及", "Email_Notification_Mode_Disabled": "已禁用", "Email_notification_show_message": "在电子邮件通知中显示消息", - "Email_Notifications_Change_Disabled": "您的 Rocket.Chat 管理员已禁止电子邮箱同志", + "Email_Notifications_Change_Disabled": "您的 Rocket.Chat 管理员已禁止电子邮箱通知", "Email_or_username": "电子邮件或用户名", "Email_Placeholder": "请输入您的电子邮件地址...", "Email_Placeholder_any": "请输入电子邮件地址...", + "email_plain_text_only": "仅发送纯文本邮件", "email_style_description": "避免嵌套选择器", "email_style_label": "邮箱风格", - "Email_subject": "标题", + "Email_subject": "邮件主题", "Email_verified": "邮箱已验证", + "Email_sent": "已发送的电子邮件", + "Emails_sent_successfully!": "已成功发送邮件!", "Emoji": "表情符号", "Emoji_provided_by_JoyPixels": "颜文字由 JoyPixels 提供", "EmojiCustomFilesystem": "自定义表情文件系统", "Empty_title": "空标题", + "See_on_Engagement_Dashboard": "在合约仪表盘中查看", "Enable": "启用", "Enable_Auto_Away": "启用自动离开", "Enable_Desktop_Notifications": "启用桌面通知", - "Enable_inquiry_fetch_by_stream": "启用使用流(stream)从服务器获取查询数据", + "Enable_inquiry_fetch_by_stream": "启用使用流从服务器获取询价数据", + "Enable_omnichannel_auto_close_abandoned_rooms": "启用自动关闭被访客废弃的聊天室", "Enable_Svg_Favicon": "启用 SVG 图标", - "Enable_two-factor_authentication": "启用双因素身份验证", + "Enable_two-factor_authentication": "启用两步验证", + "Enable_two-factor_authentication_email": "启用基于邮件的两步验证", "Enabled": "已启用", "Encrypted": "加密的", "Encrypted_channel_Description": "端到端加密频道。搜索不适用于加密频道,并且频道消息通知可能不会显示消息内容。", @@ -1294,7 +1484,11 @@ "Encrypted_setting_changed_successfully": "加密设置修改成功", "Encryption_key_saved_successfully": "您的加密密钥保存成功", "EncryptionKey_Change_Disabled": "因为此客户端上不存在您的私钥,您无法为加密密钥设置密码。要设置新密码,您需要使用现有密码加载私钥,或使用已加载密钥的客户端。", + "End": "结束", "End_OTR": "结束无记录对话", + "Engagement_Dashboard": "合约仪表盘", + "Enter_a_custom_message": "输入自定义消息", + "Enter_a_department_name": "输入部门名称", "Enter_a_name": "输入名称", "Enter_a_regex": "输入正则表达式", "Enter_a_room_name": "输入聊天室名称", @@ -1305,7 +1499,7 @@ "Enter_Behaviour": "回车键", "Enter_Behaviour_Description": "此项用来设置回车键发送消息还是换行", "Enter_E2E_password_to_decode_your_key": "输入端到端密码以解码您的密钥", - "Enter_name_here": "在这里输入名字", + "Enter_name_here": "在此输入名称", "Enter_Normal": "常规模式(Enter 发送消息)", "Enter_to": "进入", "Enter_your_E2E_password": "输入您的端到端密码", @@ -1317,25 +1511,30 @@ "Error_404": "错误:404", "Error_changing_password": "密码更改失败", "Error_loading_pages": "加载页面时出错", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "错误:Rocket.Chat在多个实例中运行时需要oplog拖尾", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "请确保您的MongoDB处于ReplicaSet模式,并且MONGO_OPLOG_URL环境变量已在应用程序服务器上正确定义", - "Error_sending_livechat_offline_message": "发送即时聊天离线消息时出错", - "Error_sending_livechat_transcript": "发送即时聊天记录时出错", + "Error_login_blocked_for_ip": "此 IP 的登录被临时禁用了", + "Error_login_blocked_for_user": "此用户的登录被临时禁用了", + "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "错误:Rocket.Chat 在多个实例中运行时需要 oplog 跟踪", + "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "请确保您的 MongoDB 处于 ReplicaSet 模式,并且 MONGO_OPLOG_URL 环境变量已在应用程序服务器上正确定义", + "Error_sending_livechat_offline_message": "发送 omnichannel 离线消息时出错", + "Error_sending_livechat_transcript": "发送 omnichannel 聊天记录时出错", "Error_Site_URL": "无效的 Site_Url", - "Error_Site_URL_description": "请更新您的“ Site_Url”设置。在此处<>活得更多信息", + "Error_Site_URL_description": "请更新您的“Site_Url”设置。在此>获得更多信息", "error-action-not-allowed": "__action__ 不允许", + "error-agent-offline": "客服离线", "error-application-not-found": "应用程序未找到", "error-archived-duplicate-name": "有一个名为 '__room_name__' 的已归档频道", - "error-avatar-invalid-url": "无效的头像地址:__url__", + "error-avatar-invalid-url": "无效头像地址:__url__", "error-avatar-url-handling": "为用户 __username__ 从网址 (__url__) 处理头像时出错", - "error-canned-response-not-found": "未找到罐装回复", - "error-cannot-delete-app-user": "不允许直接删除App用户”,请卸载相应的App以移除此用户。", - "error-cant-invite-for-direct-room": "不能邀请用户进入私聊房间", - "error-channels-setdefault-is-same": "频道的默认设置与更改的频道相同。", + "error-business-hours-are-closed": "营业时间已结束", + "error-canned-response-not-found": "未找到自动回复", + "error-cannot-delete-app-user": "已禁用不允许直接删除应用用户,请卸载相应的应用来移除它。", + "error-cant-invite-for-direct-room": "不能邀请用户加入私聊", + "error-channels-setdefault-is-same": "频道的默认设置与要更改的设置相同。", "error-channels-setdefault-missing-default-param": "bodyParam 'default' 是必需的", "error-could-not-change-email": "无法更改电子邮箱地址", "error-could-not-change-name": "无法更改名称", "error-could-not-change-username": "无法更改用户名", + "error-custom-field-name-already-exists": "自定义字段名称已存在", "error-delete-protected-role": "无法删除受保护的角色", "error-department-not-found": "找不到该部门", "error-direct-message-file-upload-not-allowed": "私聊中不允许文件共享", @@ -1343,55 +1542,64 @@ "error-edit-permissions-not-allowed": "不允许编辑权限", "error-email-domain-blacklisted": "电子邮箱域名被列入黑名单", "error-email-send-failed": "尝试发送邮件出错:__message__", + "error-essential-app-disabled": "错误:为此所需的 Rocket.Chat 应用已禁用。请联系您的系统管理员", "error-field-unavailable": "__field__ 已被使用 :(", "error-file-too-large": "文件太大", - "error-forwarding-department-target-not-allowed": "未授权重定向目标的权限", - "error-guests-cant-have-other-roles": "来宾用户无法拥有其他角色", + "error-forwarding-chat-same-department": "所选部门和当前聊天室部门小童", + "error-forwarding-department-target-not-allowed": "不允许转发到目标部门", + "error-guests-cant-have-other-roles": "访客用户无法拥有其他角色", "error-import-file-extract-error": "无法提取导入文件。", "error-import-file-is-empty": "导入的文件似乎是空的。", "error-import-file-missing": "在指定的路径上找不到要导入的文件。", "error-importer-not-defined": "导入程序没有正确定义,它缺少导入类。", "error-input-is-not-a-valid-field": "__input__ 不是一个有效的 __field__", - "error-invalid-account": "无效账户", - "error-invalid-actionlink": "无效的操作链接", - "error-invalid-arguments": "参数无效", - "error-invalid-asset": "无效数据", - "error-invalid-channel": "无效的频道。", - "error-invalid-channel-start-with-chars": "无效的频道。应该以 @ 或 # 开头", - "error-invalid-custom-field": "无效的自定义字段", - "error-invalid-custom-field-name": "无效的自定义字段名称。只能使用字母、数字、连字符和下划线。", - "error-invalid-date": "日期无效。", - "error-invalid-description": "无效的说明", - "error-invalid-domain": "域名无效", - "error-invalid-email": "无效的电子邮件地址 __email__", - "error-invalid-email-address": "邮件地址无效", - "error-invalid-file-height": "无效的文件高度", - "error-invalid-file-type": "无效的文件类型", - "error-invalid-file-width": "无效的文件宽度", - "error-invalid-from-address": "您的 FROM 地址无效。", + "error-invalid-account": "无效账号", + "error-invalid-actionlink": "无效操作链接", + "error-invalid-arguments": "无效参数", + "error-invalid-asset": "无效资产", + "error-invalid-channel": "无效频道。", + "error-invalid-channel-start-with-chars": "无效频道。应该以 @ 或 # 开头", + "error-invalid-custom-field": "无效自定义字段", + "error-invalid-custom-field-name": "无效自定义字段名称。只能使用字母、数字、连字符和下划线。", + "error-invalid-custom-field-value": "无效 __field__ 字段值", + "error-invalid-date": "提供的日期无效。", + "error-invalid-description": "无效描述", + "error-invalid-domain": "无效域名", + "error-invalid-email": "无效电子邮件 __email__", + "error-invalid-email-address": "无效电子邮件地址", + "error-invalid-email-inbox": "非法电子邮件收件箱", + "error-invalid-file-height": "无效文件高度", + "error-invalid-file-type": "无效文件类型", + "error-invalid-file-width": "无效文件宽度", + "error-invalid-from-address": "您提供了一个无效 FROM 地址。", "error-invalid-inquiry": "无效查询", - "error-invalid-integration": "无效的集成", - "error-invalid-message": "无效的消息", - "error-invalid-method": "无效的方法", - "error-invalid-name": "无效的名称", + "error-invalid-integration": "无效集成", + "error-invalid-message": "无效消息", + "error-invalid-method": "无效方法", + "error-invalid-name": "无效名称", "error-invalid-password": "无效密码", - "error-invalid-permission": "无效的权限", - "error-invalid-priority": "无效的优先级", - "error-invalid-redirectUri": "无效的回调地址", - "error-invalid-role": "无效的角色", + "error-invalid-param": "非法参数", + "error-invalid-params": "无效参数", + "error-invalid-permission": "无效权限", + "error-invalid-port-number": "非法端口", + "error-invalid-priority": "无效优先级", + "error-invalid-redirectUri": "无效回调地址", + "error-invalid-role": "无效角色", "error-invalid-room": "无效聊天室", "error-invalid-room-name": "__room_name__ 不是合法的聊天室名称", "error-invalid-room-type": "__type__ 不是一个有效的聊天室类型。", "error-invalid-settings": "提供的设置无效", - "error-invalid-subscription": "无效的订阅", - "error-invalid-token": "令牌无效", - "error-invalid-triggerWords": "无效的触发关键词", - "error-invalid-urls": "无效的网址", + "error-invalid-subscription": "无效订阅", + "error-invalid-token": "无效令牌", + "error-invalid-triggerWords": "无效触发关键词", + "error-invalid-urls": "无效网址", "error-invalid-user": "无效用户", "error-invalid-username": "无效用户名", + "error-invalid-value": "无效值", "error-invalid-webhook-response": "WebHook 地址响应的状态码不是200", "error-logged-user-not-in-room": "你不在 `%s` 聊天室里", - "error-max-guests-number-reached": "您的来宾用户数已经达到当前许可证的最大值。请联系 sale@rocket.chat 以获取一个新的许可证。", + "error-max-guests-number-reached": "您的访客用户数已经达到当前许可的最大值。请联系 sale@rocket.chat 以获取一个新的许可。", + "error-max-number-simultaneous-chats-reached": "已达到每客服最大同时聊天数量", "error-message-deleting-blocked": "不允许删除消息", "error-message-editing-blocked": "不允许编辑消息", "error-message-size-exceeded": "消息大小超过 Message_MaxAllowedSize", @@ -1403,35 +1611,45 @@ "error-password-policy-not-met": "密码不符合服务器的政策", "error-password-policy-not-met-maxLength": "密码不符合服务器的最大长度限制(密码过长)", "error-password-policy-not-met-minLength": "密码不符合服务器的最小长度限制(密码太短)", - "error-password-policy-not-met-oneLowercase": "密码不符合至少有一个小写字符的服务器策略", - "error-password-policy-not-met-oneNumber": "密码不符合至少一个数字字符的策略", - "error-password-policy-not-met-oneSpecial": "密码不符合至少有一个特殊字符的策略", - "error-password-policy-not-met-oneUppercase": "密码不符合至少一个大写字符的策略", + "error-password-policy-not-met-oneLowercase": "密码不符合服务器策略:至少一个小写字符", + "error-password-policy-not-met-oneNumber": "密码不符合服务器策略:至少一个数字字符", + "error-password-policy-not-met-oneSpecial": "密码不符合服务器策略:至少一个特殊字符", + "error-password-policy-not-met-oneUppercase": "密码不符合服务器策略:至少一个大写字符", "error-password-policy-not-met-repeatingCharacters": "密码不符合禁止重复字符的策略(您有太多相同的字符相邻)", + "error-password-same-as-current": "输入的密码和当前密码相同", "error-personal-access-tokens-are-current-disabled": "个人访问令牌已禁用", + "error-pinning-message": "消息不应被固定", "error-push-disabled": "推送被禁用", "error-remove-last-owner": "这是最后一个所有者。要删除此用户,请先设置一个新的所有者。", - "error-role-in-use": "无法删除正在被使用的角色", + "error-returning-inquiry": "询价队列返回错误", + "error-role-in-use": "无法删除使用中的角色", "error-role-name-required": "角色名称是必需的", "error-room-is-not-closed": "聊天室没有关闭", - "error-selected-agent-room-agent-are-same": "所选代理和房间代理相同", + "error-selected-agent-room-agent-are-same": "所选客服和聊天室客服相同", + "error-starring-message": "不能开始消息", "error-tags-must-be-assigned-before-closing-chat": "必须在聊天结束前分配标签", "error-the-field-is-required": "字段 __field__ 必填。", - "error-this-is-not-a-livechat-room": "这不是一个即时聊天室", + "error-this-is-not-a-livechat-room": "这不是一个 omnichannel 聊天室", "error-token-already-exists": "已存在具有此名称的令牌", "error-token-does-not-exists": "令牌不存在", "error-too-many-requests": "错误,请求过多。请放慢速度。你必须等待 __seconds__ 秒后再次重试。", + "error-transcript-already-requested": "已请求聊天记录", + "error-unpinning-message": "不能取消固定消息", "error-user-has-no-roles": "用户没有角色", "error-user-is-not-activated": "用户未激活", - "error-user-is-not-agent": "用户不是Livechat代理", + "error-user-is-not-agent": "用户不是 omnichannel 客服", "error-user-is-offline": "若用户为离线状态", "error-user-limit-exceeded": "你邀请加入 #channel_name 的用户数量超出了管理员设置的限制", + "error-user-not-belong-to-department": "用户不属于此部门", "error-user-not-in-room": "用户不在此聊天室", "error-user-registration-disabled": "用户注册被禁用", "error-user-registration-secret": "用户注册只能通过私密地址", + "error-validating-department-chat-closing-tags": "当部门要求标签时关闭对话需要至少一个关闭标签", "error-you-are-last-owner": "你是聊天室当前的所有者。请先重设所有者再离开聊天室。", "Errors_and_Warnings": "错误和警告", "Esc_to": "退出", + "Estimated_due_time": "预计到期时间", + "Estimated_due_time_in_minutes": "预计到期时间(分钟)", "Event_Trigger": "事件触发", "Event_Trigger_Description": "选择将触发此出站 WebHook 集成的事件类型", "every_5_minutes": "每5分钟一次", @@ -1444,6 +1662,7 @@ "every_six_hours": "每6小时一次", "Everyone_can_access_this_channel": "每个人都可以访问此频道", "Exact": "精确", + "Example_payload": "示例载荷", "Example_s": "例如:%s", "except_pinned": "(固定的除外)", "Exclude_Botnames": "排除机器人", @@ -1452,25 +1671,34 @@ "Execute_Synchronization_Now": "立即执行同步", "Exit_Full_Screen": "退出全屏", "Experimental_Feature_Alert": "这是一个实验性特性!请注意这个特性随时都会改变、损坏甚至在未来版本中不加任何通知地被移除。", - "Expiration": "期满", - "Expiration_(Days)": "到期天数", - "Export_My_Data": "导出我的数据", + "Expiration": "到期", + "Expiration_(Days)": "到期(天)", + "Export_as_file": "作为文件导出", + "Export_Messages": "导出消息", + "Export_My_Data": "导出我的数据(JSON)", "expression": "表达式", "Extended": "已扩展", "External_Domains": "外部域名", "External_Queue_Service_URL": "外部队列服务 URL", "External_Service": "外部服务", + "External_Users": "外部用户", "Facebook_Page": "Facebook页面", "Failed": "失败", "Failed_to_activate_invite_token": "无法激活邀请令牌", - "Failed_to_add_monitor": "添加监视器失败", - "Failed_to_generate_invite_link": "无法生成邀请链接", + "Failed_to_add_monitor": "添加监控失败", + "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": "喜爱", "Favorite_Rooms": "启用房間收藏", "Favorites": "收藏", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "此功能依赖于 “发送访客导航历史记录为消息” 启用。", + "Features": "特性", "Features_Enabled": "功能已启用", "Federation_Dashboard": "联盟仪表盘", "FEDERATION_Discovery_Method": "发现方法", @@ -1478,9 +1706,9 @@ "FEDERATION_Domain": "域名", "FEDERATION_Domain_Alert": "开启此功能后不要更改这里, 当前还不能处理域变更。", "FEDERATION_Domain_Description": "添加此服务器应该关联的域, 如: @rocket.chat。", - "FEDERATION_Enabled": "尝试集成 Federation。更改此值需要重启 Rocket.Chat。", - "FEDERATION_Enabled_Alert": "Federation 支持正在完善中。当前不推荐在生产系统中使用。", - "FEDERATION_Error_user_is_federated_on_rooms": "您无法删除属于房间联盟的用户", + "FEDERATION_Enabled": "尝试集成联盟支持。", + "FEDERATION_Enabled_Alert": "联盟支持正在完善中。当前不推荐在生产系统中使用。", + "FEDERATION_Error_user_is_federated_on_rooms": "您无法移除房间中的联盟用户", "FEDERATION_Hub_URL": "Hub URL 地址", "FEDERATION_Hub_URL_Description": "设置 Hub URL 地址, 例如: https://hub.rocket.chat。可以使用端口号。", "FEDERATION_Public_Key": "公钥", @@ -1493,15 +1721,22 @@ "FEDERATION_Unique_Id": "唯一 ID", "FEDERATION_Unique_Id_Description": "这是你的 Federation 唯一 ID, 用于在网络中识别你的对等端。", "Field": "字段", - "Field_removed": "字段已删除", + "Field_removed": "已移除字段", "Field_required": "字段必须填写", + "File": "文件", + "File_Downloads_Started": "文件下载开始", "File_exceeds_allowed_size_of_bytes": "文件大小超过允许的 __size__ 字节", "File_name_Placeholder": "搜索文件...", "File_not_allowed_direct_messages": "私聊中不允许文件共享。", - "File_removed_by_automatic_prune": "通过自动修剪删除文件", - "File_removed_by_prune": "文件被修剪删除", + "File_Path": "文件路径", + "file_pruned": "文件已修剪", + "File_removed_by_automatic_prune": "已自动修剪移除文件", + "File_removed_by_prune": "已修剪移除文件", + "File_Type": "文件类型", "File_type_is_not_accepted": "文件类型不被系统接受。", "File_uploaded": "文件已上传", + "File_uploaded_successfully": "文件上传成功", + "File_URL": "文件 URL", "files": "文件", "Files": "文件", "Files_only": "只删除附加的文件,保留消息", @@ -1511,10 +1746,10 @@ "FileSize_MB": "__fileSize__ MB", "FileUpload": "文件上传", "FileUpload_Disabled": "已禁用文件上传。", - "FileUpload_Enable_json_web_token_for_files": "为文件上传启用Json Web令牌保护", - "FileUpload_Enable_json_web_token_for_files_description": "将JWT附加到上传的文件网址", + "FileUpload_Enable_json_web_token_for_files": "为文件上传启用 Json 网络令牌(JWT)保护", + "FileUpload_Enable_json_web_token_for_files_description": "将 JWT 附加到已上传文件网址", "FileUpload_Enabled": "文件上传已启用", - "FileUpload_Enabled_Direct": "私聊已启用文件上传", + "FileUpload_Enabled_Direct": "私聊中已启用文件上传", "FileUpload_Error": "文件上传错误", "FileUpload_File_Empty": "文件为空", "FileUpload_FileSystemPath": "系统路径", @@ -1525,18 +1760,22 @@ "FileUpload_GoogleStorage_Proxy_Avatars": "代理头像", "FileUpload_GoogleStorage_Proxy_Avatars_Description": "通过您的服务器代理头像文件传输,而不是直接访问资产的URL", "FileUpload_GoogleStorage_Proxy_Uploads": "代理上传", - "FileUpload_GoogleStorage_Proxy_Uploads_Description": "代理通过您的服务器上传文件传输,而不是直接访问资产的URL", + "FileUpload_GoogleStorage_Proxy_Uploads_Description": "通过您的服务器代理上传文件传输,而不是直接访问资产的URL", "FileUpload_GoogleStorage_Secret": "Google Storage 密钥", "FileUpload_GoogleStorage_Secret_Description": "请使用这些指令并将结果粘贴在此处。", - "FileUpload_json_web_token_secret_for_files": "文件上传Json Web令牌秘密", - "FileUpload_json_web_token_secret_for_files_description": "文件上传Json Web令牌密钥(用于无需身份验证即可访问上传的文件)", + "FileUpload_json_web_token_secret_for_files": "文件上传 Json 网络令牌(JWT)密钥", + "FileUpload_json_web_token_secret_for_files_description": "文件上传 Json 网络令牌(JWT)密钥(用于无需身份验证即可访问上传的文件)", "FileUpload_MaxFileSize": "文件上传大小限制(以字节为单位)", "FileUpload_MaxFileSizeDescription": "将其设置为-1以删除文件大小限制。", "FileUpload_MediaType_NotAccepted": "不支持该类型媒体文件", + "FileUpload_MediaTypeBlackList": "阻止的媒体类型", + "FileUpload_MediaTypeBlackListDescription": "媒体类型的逗号分隔列表。此设定优先于接受的媒体类型。", "FileUpload_MediaTypeWhiteList": "支持的媒体类型", "FileUpload_MediaTypeWhiteListDescription": "以逗号分隔的媒体类型列表。留空表示允许所有媒体类型。", "FileUpload_ProtectFiles": "保护已上传的文件", "FileUpload_ProtectFilesDescription": "只有已登录的用户可以访问", + "FileUpload_RotateImages": "在上传时旋转图像", + "FileUpload_RotateImages_Description": "启用此设置可能会导致图像质量损失", "FileUpload_S3_Acl": "Amazon S3 acl", "FileUpload_S3_AWSAccessKeyId": "Amazon S3 AWSAccessKeyId", "FileUpload_S3_AWSSecretAccessKey": "Amazon S3 AWSSecretAccessKey", @@ -1547,7 +1786,7 @@ "FileUpload_S3_Proxy_Avatars": "代理头像", "FileUpload_S3_Proxy_Avatars_Description": "通过您的服务器代理头像文件传输,而不是直接访问资产的URL", "FileUpload_S3_Proxy_Uploads": "代理上传", - "FileUpload_S3_Proxy_Uploads_Description": "代理通过您的服务器上传文件传输,而不是直接访问资产的URL", + "FileUpload_S3_Proxy_Uploads_Description": "通过您的服务器代理上传文件传输,而不是直接访问资产的URL", "FileUpload_S3_Region": "地区", "FileUpload_S3_SignatureVersion": "签名版本", "FileUpload_S3_URLExpiryTimeSpan": "网址过期期限", @@ -1557,12 +1796,13 @@ "FileUpload_Webdav_Proxy_Avatars": "代理头像", "FileUpload_Webdav_Proxy_Avatars_Description": "通过您的服务器代理头像文件传输,而不是直接访问资产的 URL", "FileUpload_Webdav_Proxy_Uploads": "代理上传", - "FileUpload_Webdav_Proxy_Uploads_Description": "代理通过您的服务器上传文件传输,而不是直接访问资产的 URL", + "FileUpload_Webdav_Proxy_Uploads_Description": "通过您的服务器代理上传文件传输,而不是直接访问资产的URL", "FileUpload_Webdav_Server_URL": "WebDAV 服务器访问 URL", "FileUpload_Webdav_Upload_Folder_Path": "上传文件夹路径", "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV 文件上传路径", "FileUpload_Webdav_Username": "WebDAV 用户名", "Filter": "过滤器", + "Filters_applied": "已应用过滤器", "Financial_Services": "金融服务", "First_Channel_After_Login": "登录后的第一个频道", "First_response_time": "首次响应时间", @@ -1573,11 +1813,15 @@ "Fonts": "字体", "Food_and_Drink": "饮食", "Footer": "页脚", - "Footer_Direct_Reply": "启用直接回复时的页脚", + "Footer_Direct_Reply": "直接回复启用时的页脚", "For_more_details_please_check_our_docs": "欲了解更多详情,请查阅我们的文档。", "For_your_security_you_must_enter_your_current_password_to_continue": "出于安全考虑,您必须输入您的密码以便继续操作", "Force_Disable_OpLog_For_Cache": "强制禁用缓存 OpLog ", "Force_Disable_OpLog_For_Cache_Description": "即使可用,也不会使用 OpLog 来同步缓存", + "Force_Screen_Lock": "强制屏幕锁", + "Force_Screen_Lock_After": "强制屏幕锁,在此后", + "Force_Screen_Lock_After_description": "在最后一个会话完成后在此请求密码的时间秒数。", + "Force_Screen_Lock_description": "当启用时,您将强制您的用户使用 PIN/BIOMETRY/FACEID 来解锁应用。", "Force_SSL": "强制 SSL", "Force_SSL_Description": "*注意!* _Force SSL_ 不应该与反向代理同时使用。如果您有一个反向代理,您应该在那里设置重定向操作。这个选项用于像 Heroku 的特殊平台,此类平台不允许在反向代理中配置重定向。", "Force_visitor_to_accept_data_processing_consent": "强制访问者接受数据处理同意书", @@ -1587,30 +1831,42 @@ "force-delete-message_description": "绕过所有限制删除消息的权限", "Forgot_password": "忘记密码", "Forgot_Password_Description": "您可以使用以下占位符:[Forgot_Password_Url]获取密码恢复网址。[姓名],[fname],[lname]分别代表用户的全名,名字或姓氏。用户的电子邮件为[email]。分别为应用程序名称和URL分别为[Site_Name]和[Site_URL]。", - "Forgot_Password_Email": "点此重置你的密码。", + "Forgot_Password_Email": "点此重置您的密码。", "Forgot_Password_Email_Subject": "[Site_Name] - 密码恢复", "Forgot_password_section": "忘记密码", "Forward": "转发", "Forward_chat": "转发对话", "Forward_to_department": "转到部门", "Forward_to_user": "转到用户", + "Forwarding": "转发", "Free": "免费", "Frequently_Used": "常用", "Friday": "星期五", "From": "从", "From_Email": "从电子邮件", "From_email_warning": "警告:From 字段来自于邮件服务器的设置。", + "Full_Name": "全称", "Full_Screen": "全屏", "Gaming": "游戏", "General": "通用", + "Generate_new_key": "生成新钥", "Generate_New_Link": "产生新链接", + "Generating_key": "生成钥", "Get_link": "获取链接", + "get-password-policy-forbidRepeatingCharacters": "密码不应包含重复的字符", + "get-password-policy-forbidRepeatingCharactersCount": "密码不应包含多于 __forbidRepeatingCharactersCount__ 个重复的字符", + "get-password-policy-maxLength": "密码长度最大不应超过 __maxLength__ ", + "get-password-policy-minLength": "密码长度最小不应超过 __minLength__ ", + "get-password-policy-mustContainAtLeastOneLowercase": "密码应包含至少一个小写字符", + "get-password-policy-mustContainAtLeastOneNumber": "密码应包含至少一个数字", + "get-password-policy-mustContainAtLeastOneSpecialCharacter": "密码应包含至少一个特殊字符", + "get-password-policy-mustContainAtLeastOneUppercase": "密码应包含至少一个大写字符", "github_no_public_email": "在您的 GitHub 帐户中没有设置任何电子邮件作为公共电子邮件地址。", "Give_a_unique_name_for_the_custom_oauth": "请给自定义 OAuth 设置一个唯一的名称", "Give_the_application_a_name_This_will_be_seen_by_your_users": "给该应用设置一个名称。该名称将被您的用户看到。", "Global": "全局", "Global Policy": "全局策略", - "Global_purge_override_warning": "制定了全球保留政策。如果禁用“覆盖全局保留策略”,则只能应用比全局策略更严格的策略。", + "Global_purge_override_warning": "制定了全局保留政策。如果禁用“覆盖全局保留策略”,则只能应用比全局策略更严格的策略。", "Global_Search": "全球搜索", "Go_to_your_workspace": "转到您的工作区", "Google_Vision_usage_limit_exceeded": "超出 Google Vision 使用限制", @@ -1637,19 +1893,20 @@ "Graphql_CORS": "GraphQL CORS", "Graphql_Enabled": "启用 GraphQL", "Graphql_Subscription_Port": "GraphQL 订阅(Subscription)端口", + "Group_by": "分组依据", "Group_by_Type": "按类型分组", "Group_discussions": "组讨论", "Group_favorites": "组最爱", - "Group_mentions_disabled_x_members": "在 __total__ 以上成员的房间中使用`@all`和`@here` 组提及已禁用。", + "Group_mentions_disabled_x_members": "已禁用在 __total__ 以上成员的聊天室中使用 `@all` 和 `@here` 组提及。", "Group_mentions_only": "仅组提及", + "Grouping": "分组", "Hash": "哈希值", "Header": "标头", "Header_and_Footer": "页头和页尾", - "Healthcare_and_Pharmaceutical": "医疗保健/医药", - "Help_Center": "帮助中心", "Helpers": "助手", + "Here_is_your_authentication_code": "这是您的验证码:", "Hex_Color_Preview": "Hex 颜色预览", - "Hi": "您好", + "Hi": "你好", "Hi_username": "您好 __name__", "Hidden": "已隐藏", "Hide": "隐藏", @@ -1658,11 +1915,12 @@ "Hide_counter": "隐藏计数器", "Hide_flextab": "通过点击隐藏右边栏", "Hide_Group_Warning": "您确定要隐藏用户组 “%s” 吗?", - "Hide_Livechat_Warning": "你确定要隐藏 “%s” 的即时聊天吗?", - "Hide_Private_Warning": "您确定要隐藏和 “%s” 的讨论吗?", + "Hide_Livechat_Warning": "您确定要隐藏与 “%s” 的聊天吗?", + "Hide_Private_Warning": "您确定要隐藏与 “%s” 的讨论吗?", "Hide_roles": "隐藏角色", - "Hide_room": "隐藏 Room", - "Hide_Room_Warning": "您确定要隐藏聊天室 “%s” 吗?", + "Hide_room": "隐藏", + "Hide_Room_Warning": "您确定要隐藏频道 “%s” 吗?", + "Hide_System_Messages": "隐藏系统信息", "Hide_Unread_Room_Status": "隐藏未读聊天室状态", "Hide_usernames": "隐藏用户名", "Highlights": "高亮", @@ -1675,8 +1933,8 @@ "How_friendly_was_the_chat_agent": "在线客服的友善度如何?", "How_knowledgeable_was_the_chat_agent": "在线客服的知识储备如何", "How_long_to_wait_after_agent_goes_offline": "客服下线后等待的时间", - "How_long_to_wait_to_consider_visitor_abandonment": "需要等待多长时间才能考虑放弃访客?", - "How_long_to_wait_to_consider_visitor_abandonment_in_seconds": "需要等待多长时间才能考虑放弃访客?", + "How_long_to_wait_to_consider_visitor_abandonment": "认为访客放弃需要等待多久?", + "How_long_to_wait_to_consider_visitor_abandonment_in_seconds": "认为访客放弃需要等待多久?", "How_responsive_was_the_chat_agent": "在线客服的反应速度如何?", "How_satisfied_were_you_with_this_chat": "您是否满意这次聊天?", "How_to_handle_open_sessions_when_agent_goes_offline": "客服离线时如何处理正在进行的会话", @@ -1689,6 +1947,7 @@ "If_you_are_sure_type_in_your_password": "如果您确定,请输入您的密码:", "If_you_are_sure_type_in_your_username": "如果您确定,请输入您的用户名:", "If_you_didnt_ask_for_reset_ignore_this_email": "如果您没有要求重置密码,则可以忽略此电子邮件。", + "If_you_didnt_try_to_login_in_your_account_please_ignore_this_email": "如果您未尝试登录请忽略这封邮件。", "If_you_dont_have_one_send_an_email_to_omni_rocketchat_to_get_yours": "如果您未持有, 发送邮件到[omni@rocket.chat](mailto:omni@rocket.chat)获取。", "Iframe_Integration": "框架集成", "Iframe_Integration_receive_enable": "启用接收", @@ -1699,10 +1958,10 @@ "Iframe_Integration_send_enable_Description": "发送事件到父窗口", "Iframe_Integration_send_target_origin": "发送目标原点", "Iframe_Integration_send_target_origin_Description": "具有协议前缀的来源,哪些命令被发送到例如 'https:// localhost' 或 * 以允许发送到任何地方。", - "Iframe_Restrict_Access": "限制任何iframe内的访问", - "Iframe_Restrict_Access_Description": "此设置启用/禁用限制以在任何iframe中加载RC", - "Iframe_X_Frame_Options": "X-Frame-Options的选项", - "Iframe_X_Frame_Options_Description": "X-Frame-Options的选项。 [您可以在这里看到所有选项。](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/X-Frame-Options#Syntax)", + "Iframe_Restrict_Access": "限制任何 iframe 内的访问", + "Iframe_Restrict_Access_Description": "此设置启用/禁用在任何 iframe 中加载 RC 的限制", + "Iframe_X_Frame_Options": "X-Frame-Options 选项", + "Iframe_X_Frame_Options_Description": "X-Frame-Options 选项。 [您可以在这里看到所有选项。](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/X-Frame-Options#Syntax)", "Ignore": "忽略", "Ignored": "忽略", "Images": "图片", @@ -1712,6 +1971,8 @@ "Impersonate_user": "模拟用户", "Impersonate_user_description": "启用后,集成帖子将作为触发集成的用户", "Import": "导入", + "Import_New_File": "导入新文件", + "Import_requested_successfully": "导入已成功请求", "Import_Type": "导入类型", "Importer_Archived": "已归档", "Importer_CSV_Information": "CSV导入程序需要特定格式,请阅读文档以了解如何构建您的zip文件:", @@ -1724,6 +1985,7 @@ "Importer_import_cancelled": "已取消导入。", "Importer_import_failed": "导入过程中发生错误!", "Importer_importing_channels": "正在导入频道。", + "Importer_importing_files": "导入文件。", "Importer_importing_messages": "正在导入信息。", "Importer_importing_started": "正在开始导入。", "Importer_importing_users": "正在导入用户。", @@ -1735,22 +1997,37 @@ "Importer_Prepare_Uncheck_Deleted_Users": "取消选中已删除的用户", "Importer_progress_error": "无法获得导入进度。", "Importer_setup_error": "设置导入工具时发生了错误。", - "Importer_Slack_Users_CSV_Information": "上传的文件必须是Slack的用户导出文件,这是一个CSV文件。浏览此处获取更多信息:", + "Importer_Slack_Users_CSV_Information": "上传的文件必须是 Slack 的用户导出文件,应当是一个CSV文件。参见:", "Importer_Source_File": "选择源文件", + "importer_status_done": "成功完成", + "importer_status_downloading_file": "下载文件", + "importer_status_file_loaded": "文件已加载", "importer_status_finishing": "快完成了", + "importer_status_import_cancelled": "已取消", "importer_status_import_failed": "错误", "importer_status_importing_channels": "导入频道", + "importer_status_importing_files": "导入文件", "importer_status_importing_messages": "导入消息", + "importer_status_importing_started": "导入数据", "importer_status_importing_users": "导入用户", "importer_status_new": "尚未开始", + "importer_status_preparing_channels": "读取频道文件", + "importer_status_preparing_messages": "读取消息文件", + "importer_status_preparing_started": "读取文件", + "importer_status_preparing_users": "读取用户文件", + "importer_status_uploading": "上传文件", + "importer_status_user_selection": "已可选择要导入的内容", "Importer_Upload_FileSize_Message": "您的服务器设置允许上传任何大小的文件,最高可达 __maxFileSize__ 。", "Importer_Upload_Unlimited_FileSize": "您的服务器设置允许上传任何大小的文件。", "Importing_channels": "导入频道", + "Importing_Data": "导入数据", "Importing_messages": "导入消息", "Importing_users": "导入用户", + "In_progress": "进行中", + "Inbox_Info": "收件箱信息", "Include_Offline_Agents": "包括离线克服", "Inclusive": "包括的", - "Incoming_Livechats": "入站聊天", + "Incoming_Livechats": "等候处理的聊天", "Incoming_WebHook": "入站 WebHook", "Industry": "行业", "Info": "信息", @@ -1765,13 +2042,18 @@ "Install_package": "安装软件包", "Installation": "安装", "Installed": "已安装", - "Installed_at": "安装在", + "Installed_at": "安装与", + "Instance": "实例", + "Instances": "实例", + "Instances_health": "实例健康", "Instance_Record": "实例记录", "Instructions": "说明", "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "给你访问者的说明,指导它们填写表格来发送一条消息", + "Insert_Contact_Name": "添加联系人名称", "Insurance": "保险", "Integration_added": "集成已添加", "Integration_Advanced_Settings": "高级设置", + "Integration_Delete_Warning": "继承移除无法撤销。", "Integration_disabled": "集成被禁用", "Integration_History_Cleared": "已成功清理集成历史", "Integration_Incoming_WebHook": "入站 WebHook 集成", @@ -1803,35 +2085,36 @@ "Integrations": "集成", "Integrations_for_all_channels": "输入 all_public_channels 监听所有公共频道,all_private_groups 监听所有私有组,all_direct_messages 监听所有私聊消息。", "Integrations_Outgoing_Type_FileUploaded": "文件已上传", - "Integrations_Outgoing_Type_RoomArchived": "Room已存档", + "Integrations_Outgoing_Type_RoomArchived": "聊天室已归档", "Integrations_Outgoing_Type_RoomCreated": "创建的聊天室(公共和私人)", "Integrations_Outgoing_Type_RoomJoined": "用户加入Room", "Integrations_Outgoing_Type_RoomLeft": "用户离开Room", "Integrations_Outgoing_Type_SendMessage": "消息已发送", "Integrations_Outgoing_Type_UserCreated": "用户创建", "InternalHubot": "内部 Hubot", - "InternalHubot_EnableForChannels": "启用公共频道", - "InternalHubot_EnableForDirectMessages": "启用私聊", + "InternalHubot_EnableForChannels": "为公共频道启用", + "InternalHubot_EnableForDirectMessages": "为私聊启用", "InternalHubot_EnableForPrivateGroups": "为私人频道启用", "InternalHubot_PathToLoadCustomScripts": "加载脚本的文件夹", "InternalHubot_reload": "重新加载脚本", "InternalHubot_ScriptsToLoad": "需要加载的脚本", "InternalHubot_ScriptsToLoad_Description": "请输入逗号分隔的脚本列表以从您的自定义文件夹加载", "InternalHubot_Username_Description": "这必须是在服务器上注册的机器人的有效用户名。", - "Invalid Canned Response": "无效的罐装回复", + "Invalid Canned Response": "无效自动回复", "Invalid_confirm_pass": "两次输入的密码不一致", + "Invalid_Department": "无效部门", "Invalid_email": "输入的电子邮件地址无效", "Invalid_Export_File": "上传的文件不是有效的 %s 导出文件。", - "Invalid_Import_File_Type": "无效的导入文件类型。", + "Invalid_Import_File_Type": "无效导入文件类型。", "Invalid_name": "用户名不能为空", - "Invalid_notification_setting_s": "无效的通知设置:%s", + "Invalid_notification_setting_s": "无效通知设置:%s", "Invalid_or_expired_invite_token": "无效或过期的邀请令牌", "Invalid_pass": "密码不能为空", "Invalid_reason": "加入的原因不能为空", "Invalid_room_name": "%s 不是一个有效的聊天室名称", "Invalid_secret_URL_message": "提供的网址无效。", - "Invalid_setting_s": "无效的设置:%s", - "Invalid_two_factor_code": "无效的两个因素代码", + "Invalid_setting_s": "无效设置:%s", + "Invalid_two_factor_code": "无效两步验证码", "Invalid_username": "输入的用户名无效", "invisible": "隐身", "Invisible": "隐身", @@ -1869,12 +2152,13 @@ "is_typing_female": "正在输入", "is_typing_male": "正在输入", "Issue_Links": "问题跟踪器链接", - "IssueLinks_Incompatible": "警告:不要同时启用此功能和“十六进制颜色预览”。", + "IssueLinks_Incompatible": "警告:不要和“十六进制颜色预览”同时启用。", "IssueLinks_LinkTemplate": "问题链接模板", "IssueLinks_LinkTemplate_Description": "问题链接模板; %s 将被问题编号替换。", "It_works": "有用", "italic": "斜体", "italics": "斜体", + "Items_per_page:": "每页条数:", "Jitsi_Application_ID": "应用ID (iss)", "Jitsi_Application_Secret": "应用秘密(Secret)", "Jitsi_Chrome_Extension": "Chrome 扩展标识", @@ -1892,6 +2176,7 @@ "join-without-join-code": "无加入码加入", "join-without-join-code_description": "绕过频道加入码的权限", "Joined": "已加入", + "Joined_at": "加入于", "Jump": "跳转", "Jump_to_first_unread": "跳转到第一条未读消息", "Jump_to_message": "跳转到消息", @@ -1905,13 +2190,13 @@ "Katex_Parenthesis_Syntax_Description": "允许使用 \\[katex 段落\\] 和\\(内嵌 katex\\)语法", "Keep_default_user_settings": "保持默认设置", "Keyboard_Shortcuts_Edit_Previous_Message": "编辑上一条消息", - "Keyboard_Shortcuts_Keys_1": "Command (或 Ctrl) + p 或 Command (或 Ctrl) + k", + "Keyboard_Shortcuts_Keys_1": "Command(或 Ctrl)+ p 或 Command(或 Ctrl)+ k", "Keyboard_Shortcuts_Keys_2": "向上箭头", - "Keyboard_Shortcuts_Keys_3": "Command(或Alt)+ 左箭头", - "Keyboard_Shortcuts_Keys_4": "Command(或Alt)+ 向上箭头", - "Keyboard_Shortcuts_Keys_5": "Command(或Alt)+ 右箭头", - "Keyboard_Shortcuts_Keys_6": "Command(或Alt)+ 向下箭头", - "Keyboard_Shortcuts_Keys_7": "Shift+ 输入", + "Keyboard_Shortcuts_Keys_3": "Command(或 Alt)+ 向左箭头", + "Keyboard_Shortcuts_Keys_4": "Command(或 Alt)+ 向上箭头", + "Keyboard_Shortcuts_Keys_5": "Command(或 Alt)+ 向右箭头", + "Keyboard_Shortcuts_Keys_6": "Command(或 Alt)+ 向下箭头", + "Keyboard_Shortcuts_Keys_7": "Shift + Enter", "Keyboard_Shortcuts_Keys_8": "Shift(或Ctrl)+ ESC ", "Keyboard_Shortcuts_Mark_all_as_read": "将所有频道中的消息标记为已读", "Keyboard_Shortcuts_Move_To_Beginning_Of_Message": "移动到消息的开头", @@ -1933,10 +2218,16 @@ "Language_Russian": "俄罗斯语", "Language_Spanish": "西班牙语", "Language_Version": "英语版本", + "Last_7_days": "最近 7 天", + "Last_30_days": "最近 30 天", + "Last_90_days": "最近 90 天", + "Last_active": "最近活跃", + "Last_Chat": "上次聊天", "Last_login": "上次登录", "Last_Message": "上次消息", - "Last_Message_At": "最后消息在", + "Last_Message_At": "最后消息于", "Last_seen": "上次遇见", + "Last_Status": "最近状态", "Last_token_part": "最后的令牌部分", "Last_Updated": "最近更新时间", "Launched_successfully": "成功启动", @@ -1946,6 +2237,7 @@ "Layout_Legal_Notice": "法律声明", "Layout_Login_Terms": "登录条款", "Layout_Privacy_Policy": "隐私政策", + "Layout_Show_Home_Button": "显示 “Home 键”", "Layout_Sidenav_Footer": "侧面导航页脚", "Layout_Sidenav_Footer_description": "页脚大小为 260 x 70px", "Layout_Terms_of_Service": "服务条款", @@ -1955,6 +2247,8 @@ "LDAP_Authentication_Password": "密码", "LDAP_Authentication_UserDN": "用户DN", "LDAP_Authentication_UserDN_Description": "该LDAP用户将在其他用户登录时被用于在 LDAP 中执行检索和认证。通常情况下,该用户是在 LDAP 中特地为第三方集成而创建的帐号。请使用有效的全名,如`cn=Administrator,cn=Users,dc=Example,dc=com`。", + "LDAP_Avatar_Field": "用户头像字段", + "LDAP_Avatar_Field_Description": "用来作为用户 *头像* 的字段。留空以优先使用 `thumbnailPhoto` 并以 `jpegPhoto`作为回退。", "LDAP_Background_Sync": "后台同步", "LDAP_Background_Sync_Import_New_Users": "后台同步导入新用户", "LDAP_Background_Sync_Import_New_Users_Description": "将导入LDAP中存在的所有用户(基于您的筛选条件),并且不存在于Rocket.Chat中", @@ -1985,7 +2279,7 @@ "LDAP_Group_Filter_Group_Member_Attribute": "组成员属性", "LDAP_Group_Filter_Group_Member_Attribute_Description": "例如。 * OpenLDAP的:* uniqueMember", "LDAP_Group_Filter_Group_Member_Format": "组成员格式", - "LDAP_Group_Filter_Group_Member_Format_Description": "例如。 * OpenLDAP的:* UID =#{用户名},OU =用户,O =公司,C = com的", + "LDAP_Group_Filter_Group_Member_Format_Description": "例如。 *OpenLDAP:*uid=#{username},ou=users,o=Company,c=com", "LDAP_Group_Filter_Group_Name": "团队名字", "LDAP_Group_Filter_Group_Name_Description": "它属于用户的组名", "LDAP_Group_Filter_ObjectClass": "组 ", @@ -1999,17 +2293,17 @@ "LDAP_Login_Fallback": "备用登录", "LDAP_Login_Fallback_Description": "如果无法在 LDAP 上成功登录,则尝试在 默认/本地 账户系统上登录。这在 LDAP 服务器因为某些原因宕机时会有帮助。", "LDAP_Merge_Existing_Users": "合并现有用户", - "LDAP_Merge_Existing_Users_Description": "*小心!* 当从 LDAP 导入与当前程序已经存在的同名用户时,LDAP 服务器上的用户信息和密码将会覆盖已存在用户。", + "LDAP_Merge_Existing_Users_Description": "*小心!* 当从 LDAP 导入和已经存在用户同名的用户时,会将 LDAP 信息和密码设置在已有用户上。", "LDAP_Port": "LDAP 端口", "LDAP_Port_Description": "LDAP 端口。比如:`389` 或 `636`", - "LDAP_Query_To_Get_User_Groups": "LDAP 查询以获得用户组", - "LDAP_Query_To_Get_User_Groups_Description": "LDAP 查询以获得用户所属的LDAP用户组", + "LDAP_Query_To_Get_User_Groups": "用于获取用户组的 LDAP 查询", + "LDAP_Query_To_Get_User_Groups_Description": "用于获取用户所属的LDAP用户组的 LDAP 查询", "LDAP_Reconnect": "重新连接", "LDAP_Reconnect_Description": "尝试在执行操作时由于某种原因中断连接时自动重新连接", "LDAP_Reject_Unauthorized": "拒绝未授权", "LDAP_Reject_Unauthorized_Description": "禁用此选项以允许无法验证的证书。通常,自签名证书将要求禁用此选项才能工作", - "LDAP_Roles_To_Rocket_Chat_Roles": "由 LDAP 到 Rocket.Chat 的角色映射。", - "LDAP_Roles_To_Rocket_Chat_Roles_Description": "在角色映射对象中,其键必须为LDAP角色,其值必须为以RC角色为值的数组。例:{ 'ldapRole': ['rcRole', 'anotherRCRole'] }", + "LDAP_Roles_To_Rocket_Chat_Roles": "从 LDAP 到 Rocket.Chat 的角色映射。", + "LDAP_Roles_To_Rocket_Chat_Roles_Description": "在对象格式的角色映射中,其键必须为LDAP角色,其值必须为 RC 角色数组。例:{ 'ldapRole': ['rcRole', 'anotherRCRole'] }", "LDAP_Search_Page_Size": "搜索页面大小", "LDAP_Search_Page_Size_Description": "每个结果页面的最大条目数将返回进行处理", "LDAP_Search_Size_Limit": "搜索大小限制", @@ -2018,7 +2312,7 @@ "LDAP_Sync_Now_Description": "将立即执行 **后台同步**,而不是等待 **同步间隔**,即使 **后台同步** 为 False。此操作是异步的,请参阅日志以获取有关处理", "LDAP_Sync_User_Active_State": "同步用户激活状态", "LDAP_Sync_User_Active_State_Both": "启用和禁用用户", - "LDAP_Sync_User_Active_State_Description": "根据LDAP状态确定用户在Rocket.Chat应该启用还是禁用。其中`pwdAccountLockedTime`属性将会被用于确认用户是否被禁用。", + "LDAP_Sync_User_Active_State_Description": "根据 LDAP 状态确定用户在 Rocket.Chat 应该启用还是禁用。其中`pwdAccountLockedTime`属性将会被用于确认用户是否被禁用。", "LDAP_Sync_User_Active_State_Disable": "禁用用户", "LDAP_Sync_User_Active_State_Nothing": "什么也不做", "LDAP_Sync_User_Avatar": "同步用户头像", @@ -2027,19 +2321,19 @@ "LDAP_Sync_User_Data_FieldMap": "用户数据字段映射", "LDAP_Sync_User_Data_FieldMap_Description": "设置用户数据字段(比如 E-mail)来自 LDAP 何处(如果能找到)。 ;例如:`{\"cn\":\"name\", \"mail\":\"email\"}` 会从属性 cn 中取出名字字段,从 mail 属性中取出 email 字段。有效字段包括 `name` 和 `email`。", "LDAP_Sync_User_Data_Groups": "同步 LDAP 群组", - "LDAP_Sync_User_Data_Groups_AutoChannels": "自动同步 LDAP 群组到 Channel", - "LDAP_Sync_User_Data_Groups_AutoChannels_Admin": "Channel 管理员", + "LDAP_Sync_User_Data_Groups_AutoChannels": "自动同步 LDAP 组到频道", + "LDAP_Sync_User_Data_Groups_AutoChannels_Admin": "频道管理员", "LDAP_Sync_User_Data_Groups_AutoChannels_Admin_Description": "当自动创建在同步过程中不存在的频道时,该用户将自动成为频道的管理员。", - "LDAP_Sync_User_Data_Groups_AutoChannels_Description": "启用此功能可以根据用户的LDAP组自动将用户添加到频道。如果您还想从频道中删除用户,请参阅以下有关自动删除用户的选项。", - "LDAP_Sync_User_Data_Groups_AutoChannelsMap": "LDAP组Channel对应", - "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Default": "//启用自动同步LDAP组到上述Channel", - "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Description": "将LDAP组对应到Rocket.Chat频道例如,`{\"employee\":\"general\"}`会将LDAP员工组的用户添加到标准频道。", + "LDAP_Sync_User_Data_Groups_AutoChannels_Description": "启用此功能可以根据用户的 LDAP 组自动将用户添加到频道。如果您还想从频道中移除用户,请参阅以下有关自动移除用户的选项。", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap": "LDAP 组频道映射", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Default": "//启用自动同步 LDAP 组到上述频道", + "LDAP_Sync_User_Data_Groups_AutoChannelsMap_Description": "将 LDAP 组对应到 Rocket.Chat 频道例如,`{\"employee\":\"general\"}`会将 LDAP employee 组的用户添加到 general 频道。", "LDAP_Sync_User_Data_Groups_AutoRemove": "自动删除用户角色", "LDAP_Sync_User_Data_Groups_AutoRemove_Description": "**注意**:如果未在LDAP中分配用户,启用此功能将自动从角色中删除用户!这只会自动删除在下面的用户数据组对应设置下的角色。", "LDAP_Sync_User_Data_Groups_BaseDN": "LDAP组BaseDN", "LDAP_Sync_User_Data_Groups_BaseDN_Description": "用于查找用户的LDAP BaseDN。", "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels": "自动从频道中删除用户", - "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels_Description": "**注意**:启用此选项将删除频道中没有对应LDAP组的所有用户!请谨慎使用。", + "LDAP_Sync_User_Data_Groups_Enforce_AutoChannels_Description": "**注意**:启用此选项将删除频道中没有对应 LDAP 组的所有用户!请谨慎使用。", "LDAP_Sync_User_Data_Groups_Filter": "用户组过滤器", "LDAP_Sync_User_Data_Groups_Filter_Description": "LDAP搜索过滤器,用于检查用户是否在组中。", "LDAP_Sync_User_Data_GroupsMap": "用户数据群组对应", @@ -2056,55 +2350,87 @@ "LDAP_User_Search_Scope": "范围", "LDAP_Username_Field": "用户名字段", "LDAP_Username_Field_Description": "指定新用户登录时,使用 LDAP 中哪个字段的值作为*用户名*。若要使用登录页面所用的用户名,请留空。可使用模版标签,比如 `#{givenName}.#{sn}`。默认字段为 `sAMAccountName`。", - "LDAP_Validate_Roles_For_Each_Login": "验证每次登录的角色映射关系", - "LDAP_Validate_Roles_For_Each_Login_Description": "如果每次登录都需要验证(请小心使用这个设置,它将会在每次登录时覆盖用户的角色,如果不使用这个选项,则只会在创建用户时进行验证)。", + "LDAP_Validate_Roles_For_Each_Login": "每次登录时验证映射", + "LDAP_Validate_Roles_For_Each_Login_Description": "如果每次登录都需要验证(请小心使用这个设置,它将会在每次登录时覆盖用户的角色,否则只会在创建用户时进行验证)。", "Lead_capture_email_regex": "领导捕获电子邮件正则表达式", "Lead_capture_phone_regex": "领导捕获手机正则表达式", "Leave": "离开", + "Leave_a_comment": "留言", "Leave_Group_Warning": "您确定要离开用户组 “%s” 吗?", - "Leave_Livechat_Warning": "你确定要离开 “%s” 的即时聊天吗?", + "Leave_Livechat_Warning": "你确定要离开和 “%s” 的 omnichannel 吗?", "Leave_Private_Warning": "您确定要离开和 “%s” 的讨论吗?", - "Leave_room": "离开聊天室", + "Leave_room": "离开", "Leave_Room_Warning": "您确定要离开聊天室 “%s” 吗?", "Leave_the_current_channel": "离开当前频道", + "Leave_the_description_field_blank_if_you_dont_want_to_show_the_role": "如果不想显示对应角色,请将描述字段留空", "leave-c": "保留频道", - "leave-p": "离开私人团体", + "leave-p": "离开私人组", "Lets_get_you_new_one": "新版本即将到来", "line": "行", "List_of_Channels": "频道列表", + "List_of_departments_for_forward": "允许转发的部门列表(可选)", + "List_of_departments_for_forward_description": "允许设置一个列表来限制可从此部门接收聊天的部门", + "List_of_departments_to_apply_this_business_hour": "要适用此营业时间的部门", "List_of_Direct_Messages": "私聊列表", + "Omnichannel": "Omnichannel", "Livechat": "即时聊天", - "Livechat_agents": "即时聊天客服", + "Livechat_abandoned_rooms_closed_custom_message": "聊天室自动因访客无活动而关闭时的自定义信息", + "Livechat_agents": "Omnichannel 客服", "Livechat_Agents": "客服", "Livechat_AllowedDomainsList": "即时聊天允许的域名", - "Livechat_Dashboard": "即时聊天控制面板", - "Livechat_enabled": "即时聊天启用", + "Livechat_Appearance": "Livechat 外观", + "Livechat_auto_transfer_chat_timeout": "自动将未应答聊天转给其他客服的超时(秒)", + "Livechat_auto_transfer_chat_timeout_description": "此事件只在聊天刚开始时生效。在第一次因无活动而转移后,聊天室将不再被监控。", + "Livechat_business_hour_type": "营业时间类型(单个或多个)", + "Livechat_chat_transcript_sent": "聊天记录已发送:__transcript__", + "Livechat_custom_fields_options_placeholder": "用于选择预定义值的逗号分隔列表。在元素间不允许使用空格。", + "Livechat_custom_fields_public_description": "公共自定义字段将在外部应用中显示,例如 LiveChat 等等。", + "Livechat_Dashboard": "Omnichannel 仪表盘", + "Livechat_DepartmentOfflineMessageToChannel": "发送部门的 Livechat 离线信息到频道", + "Livechat_enable_message_character_limit": "启用消息字数限制", + "Livechat_enabled": "Omnichannel 启用", "Livechat_Facebook_API_Key": "OmniChannel API Key", "Livechat_Facebook_API_Secret": "OmniChannel API Secret", "Livechat_Facebook_Enabled": "已启用 Facebook 集成", "Livechat_forward_open_chats": "前开口聊天", "Livechat_forward_open_chats_timeout": "超时(以秒为单位)转发聊天", "Livechat_guest_count": "访客计数器", - "Livechat_Inquiry_Already_Taken": "即时聊天查询已经完成", - "Livechat_managers": "即时聊天管理员", + "Livechat_Inquiry_Already_Taken": "Omnichannel 问询已进行", + "Livechat_Installation": "Livechat 安装", + "Livechat_last_chatted_agent_routing": "优先最近接待客服", + "Livechat_last_chatted_agent_routing_Description": "最新接待客服设置优先分配给访客上一个聊天过的在线客服。", + "Livechat_managers": "Omnichannel 管理员", "Livechat_Managers": "管理员", - "Livechat_Monitors": "监视器", - "Livechat_offline": "即时聊天离线", - "Livechat_offline_message_sent": "即时聊天离线消息已发送", - "Livechat_online": "即时聊天在线", - "Livechat_Queue": "即时聊天队列", + "Livechat_message_character_limit": "Livechat 消息字符限制", + "Livechat_monitors": "Livechat 监控", + "Livechat_Monitors": "监控", + "Livechat_offline": "Omnichannel 离线", + "Livechat_offline_message_sent": "Livechat 离线消息已发送", + "Livechat_OfflineMessageToChannel_enabled": "发送 Livechat 离线信息到频道", + "Livechat_online": "Omnichannel 在线", + "Livechat_Queue": "Omnichannel 队列", "Livechat_registration_form": "注册表单", "Livechat_registration_form_message": "注册表单提示信息", - "Livechat_room_count": "即时聊天室计数", - "Livechat_Routing_Method": "即时聊天路由方法", + "Livechat_room_count": "Omnichannel 聊天室计数", + "Livechat_Routing_Method": "Omnichannel 路由方法", + "Livechat_status": "Livechat 状态", "Livechat_Take_Confirm": "你想接下这个客户吗?", "Livechat_title": "即时聊天标题", "Livechat_title_color": "即时聊天标题背景颜色", - "Livechat_transcript_sent": "即时聊天记录已发送", + "Livechat_transcript_already_requested_warning": "此聊天的聊天记录已被请求并将在会话结束后尽快发送。", + "Livechat_transcript_has_been_requested": "已请求聊天记录。", + "Livechat_transcript_request_has_been_canceled": "聊天记录请求已取消。", + "Livechat_transcript_sent": "Omnichannel 聊天记录已发送", "Livechat_transfer_return_to_the_queue": "__from__将聊天返回队列", - "Livechat_transfer_to_agent": "__from__ 以将聊天转移到 __to__", - "Livechat_transfer_to_department": "__from__将聊天转移到__to__部门", - "Livechat_Users": "即时聊天用户", + "Livechat_transfer_to_agent": "__from__ 将聊天转移至 __to__", + "Livechat_transfer_to_agent_with_a_comment": "__from__ 将聊天转移至 __to__,备注:__comment__", + "Livechat_transfer_to_department": "__from__ 将聊天转移至部门 __to__", + "Livechat_transfer_to_department_with_a_comment": "__from__ 将聊天转移至部门 __to__,备注:__comment__", + "Livechat_Triggers": "Livechat 触发器", + "Livechat_user_sent_chat_transcript_to_visitor": "__agent__ 已将聊天记录发送至 __guest__", + "Livechat_Users": "Omnichannel 用户", + "Livechat_visitor_email_and_transcript_email_do_not_match": "访客邮件地址和聊天记录邮件地址不匹配", + "Livechat_visitor_transcript_request": "__guest__ 已请求聊天记录", "LiveStream & Broadcasting": "LiveStream 和广播", "Livestream_close": "关闭 Livestream", "Livestream_enable_audio_only": "只启用音频模式", @@ -2115,6 +2441,7 @@ "Livestream_switch_to_room": "切换到当前聊天室的直播", "Livestream_url": "直播来源网址", "Livestream_url_incorrect": "直播网址不正确", + "Livestream_live_now": "已开播!", "Load_Balancing": "负载均衡", "Load_more": "加载更多", "Loading_more_from_history": "加载更多", @@ -2122,7 +2449,10 @@ "Loading...": "加载中...", "Local_Domains": "本地域名", "Local_Password": "本地密码", + "Local_Time": "本地时间", + "Local_Time_time": "本地时间:__time__", "Localization": "本地化", + "Location": "位置", "Log_Exceptions_to_Channel": "将异常记录至频道", "Log_Exceptions_to_Channel_Description": "一个将接收所有捕获的异常的频道。留空以忽略异常。", "Log_File": "显示文件和行数", @@ -2137,16 +2467,24 @@ "Log_View_Limit": "日志展示上限", "Logged_out_of_other_clients_successfully": "登出其它设备成功", "Login": "登录", - "Login_Logs_Enabled": "(在控制台上)显示尝试登录失败的日志", + "Login_Attempts": "失败的登录尝试", + "Login_Logs": "登录日志", + "Login_Logs_ClientIp": "在登录尝试日志中显示客户端 IP", + "Login_Logs_Enabled": "(在控制台上)记录失败的登录尝试", + "Login_Logs_ForwardedForIp": "在失败的登录尝试日志中显示转发 IP", + "Login_Logs_UserAgent": "在失败的登录尝试日志中显示用户代理", + "Login_Logs_Username": "在失败的登录尝试日志中显示用户名", "Login_with": "使用 %s 登录", "Logistics": "后勤", "Logout": "退出", "Logout_Others": "从其它已登录的设备上登出", "Logs": "日志", "Longest_chat_duration": "最长聊天时长", - "Longest_reaction_time": "最长的反应时间", + "Longest_reaction_time": "最长回应时间", "Longest_response_time": "最长的响应时间", + "Looked_for": "已查询", "Mail_Message_Invalid_emails": "你提供了一个或多个无效电子邮件地址:%s", + "Mail_Message_Missing_subject": "您必须提供邮件主题", "Mail_Message_Missing_to": "您必须选则一个或多个用户,或者提供一个或多个电子邮箱地址(多个电子邮箱地址之间使用逗号分隔)。", "Mail_Message_No_messages_selected_select_all": "您还没有选中任何消息。", "Mail_Messages": "发送邮件", @@ -2158,33 +2496,35 @@ "Mailer_body_tags": "你必须使用 [unsubscribe] 作为取消订阅的链接。你可以使用 [name]、[fname] 和 [lname] 分别作为用户全名、名称或姓氏。你可以使用 [email] 作为用户的电子邮箱地址。", "Mailing": "邮件", "Make_Admin": "设置为管理员", - "Make_sure_you_have_a_copy_of_your_codes_1": "请确保您有一份代码副本:", - "Make_sure_you_have_a_copy_of_your_codes_2": "如果您无法访问您的身份验证器应用程序,则可以使用其中一个代码登录。", + "Make_sure_you_have_a_copy_of_your_codes_1": "请确保您有一份您代码的副本:", + "Make_sure_you_have_a_copy_of_your_codes_2": "如果您无法访问身份验证器应用,可使用其中的一条代码来登录。", "Manage_Apps": "管理应用", "Manage_the_App": "管理应用程序", "manage-apps": "管理应用", "manage-assets": "管理资产", "manage-assets_description": "管理服务器资产的权限", "manage-cloud_description": "管理云", + "manage-email-inbox": "管理电子邮件收件箱", + "manage-email-inbox_description": "管理电子邮件收件箱的权限", "manage-emoji": "管理表情符号", - "manage-emoji_description": "管理服务器 emojis 的权限", + "manage-emoji_description": "管理服务器表情的权限", "manage-incoming-integrations": "管理连入集成", - "manage-incoming-integrations_description": "管理服务器连入集成的权限", + "manage-incoming-integrations_description": "管理服务器入站集成的权限", "manage-integrations": "管理集成", "manage-integrations_description": "管理服务器集成的权限", - "manage-livechat-agents": "管理聊天客服", - "manage-livechat-departments": "管理聊天客服部门", - "manage-livechat-managers": "管理聊天客服管理员", + "manage-livechat-agents": "管理 Omnichannel 客服", + "manage-livechat-departments": "管理 Omnichannel 部门", + "manage-livechat-managers": "管理 Omnichannel 管理员", "manage-oauth-apps": "管理Oauth应用程序", "manage-oauth-apps_description": "管理服务器 Oauth 应用程序的权限", "manage-outgoing-integrations": "管理外向集成", - "manage-outgoing-integrations_description": "管理服务器外向集成的权限", - "manage-own-incoming-integrations": "管理自己的传入集成", - "manage-own-incoming-integrations_description": "允许用户创建和编辑自己的传入集成或网络挂钩(webhooks)的权限", + "manage-outgoing-integrations_description": "管理服务器出站集成的权限", + "manage-own-incoming-integrations": "管理自己的入站集成", + "manage-own-incoming-integrations_description": "允许用户创建和编辑自己的入站集成或网络钩子的权限", "manage-own-integrations": "管理自己的集成", "manage-own-integrations_description": "允许用户创建和编辑自己的集成或webhook", - "manage-own-outgoing-integrations": "管理自己的外向集成", - "manage-own-outgoing-integrations_description": "允许用户创建和编辑自己的外向集成或网络挂钩(webhooks)的权限", + "manage-own-outgoing-integrations": "管理自己的出站集成", + "manage-own-outgoing-integrations_description": "允许用户创建和编辑自己的出站集成或网络钩子的权限", "manage-selected-settings": "更改一些设置", "manage-selected-settings_description": "更改已明确允许更改设置的权限", "manage-sounds": "管理声音", @@ -2192,7 +2532,7 @@ "manage-user-status": "管理用户状态", "manage-user-status_description": "管理服务器自定义用户状态的权限", "Manager_added": "管理员已添加", - "Manager_removed": "管理员已删除", + "Manager_removed": "已移除管理员", "Managers": "管理员", "Managing_assets": "资产管理", "Managing_integrations": "集成管理", @@ -2202,7 +2542,7 @@ "MapView_Enabled_Description": "启用 mapview 将在聊天输入字段左侧显示位置分享按钮。", "MapView_GMapsAPIKey": "Google 静态地图 API Key", "MapView_GMapsAPIKey_Description": "这可以从 Google Developers Console 免费获得。", - "Mark_all_as_read": "将所有频道中的消息标记为已读", + "Mark_all_as_read": "将所有消息(所有频道)标记为已读", "Mark_as_read": "标记为已读", "Mark_as_unread": "标记为未读", "Mark_read": "标记为已读", @@ -2218,13 +2558,19 @@ "Markdown_SupportSchemesForLink": "Markdown 支持的链接协议", "Markdown_SupportSchemesForLink_Description": "由英文逗号分割的协议列表", "Marketplace_view_marketplace": "查看市场", + "MAU_value": "MAU __value__", "Max_length_is": "最大长度 %s", "Max_number_incoming_livechats_displayed": "已在队列中显示最大数量的条目", - "Max_number_incoming_livechats_displayed_description": "(可选) Livechat 队列中显示的最大消息数量。", + "Max_number_incoming_livechats_displayed_description": "(可选) Omnichannel 队列中显示的最大消息数量。", + "Max_number_of_chats_per_agent": "最多同时进行的聊天数", + "Max_number_of_chats_per_agent_description": "客服可以同时进行的聊天数最大值。", "Max_number_of_uses": "最大使用次数", - "Maximum": "最大限度", + "Maximum": "最大值", + "Maximum_number_of_guests_reached": "已达到最大访客数量", + "Me": "我", "Media": "媒体", "Medium": "中", + "Members": "成员", "Members_List": "成员列表", "mention-all": "提及所有", "mention-all_description": "使用 @all 提及的权限", @@ -2246,7 +2592,7 @@ "Message_AllowEditing_BlockEditInMinutes": "(n) 分钟后禁止修改消息", "Message_AllowEditing_BlockEditInMinutesDescription": "输入 0 以禁用阻止。", "Message_AllowPinning": "允许信息固定", - "Message_AllowPinning_Description": "允许信息固定在频道顶部。", + "Message_AllowPinning_Description": "允许固定信息在任何频道顶部。", "Message_AllowSnippeting": "允许消息片段", "Message_AllowStarring": "允许给信息加星标", "Message_AllowUnrecognizedSlashCommand": "允许无法识别的斜线命令", @@ -2260,8 +2606,13 @@ "Message_Audio_bitRate": "音频消息比特率", "Message_AudioRecorderEnabled": "音频录制已启用", "Message_AudioRecorderEnabled_Description": "需要在 “文件上传” 中设置 “audio/mp3” 为可接受的媒体类型。", + "Message_auditing": "消息审计", + "Message_auditing_log": "消息审计日志", "Message_BadWordsFilterList": "添加脏话到黑名单", "Message_BadWordsFilterListDescription": "添加一串由逗号分隔的脏话列表到过滤器", + "Message_BadWordsWhitelist": "将黑名单中移除词语", + "Message_BadWordsWhitelistDescription": "添加逗号分隔的列表从过滤器中移除词语", + "Message_Characther_Limit": "消息字符数限制", "message_counter": "__counter__ 消息", "message_counter_plural": "__counter__ 消息", "Message_DateFormat": "日期格式", @@ -2276,23 +2627,40 @@ "Message_GlobalSearch": "全局搜索", "Message_GroupingPeriod": "合并周期(以秒为单位)", "Message_GroupingPeriodDescription": "同一用户在规定秒数内发布的消息将被合并。", + "Message_has_been_pinned": "已固定消息", + "Message_has_been_starred": "已标星消息", + "Message_has_been_unpinned": "已取消固定消息", + "Message_has_been_unstarred": "已取消标星消息", "Message_HideType_au": "隐藏“用户添加”消息", "Message_HideType_mute_unmute": "隐藏“用户静音/取消静音”消息", - "Message_HideType_ru": "隐藏“用户已删除”消息", + "Message_HideType_r": "隐藏“已变更聊天室名称”消息", + "Message_HideType_rm": "隐藏“已移除消息”消息", + "Message_HideType_room_archived": "隐藏“聊天室已归档”消息", + "Message_HideType_room_changed_avatar": "隐藏“已变更聊天室头像”消息", + "Message_HideType_room_changed_privacy": "隐藏“已变更聊天室类型”消息", + "Message_HideType_room_enabled_encryption": "隐藏“已启用聊天室加密”消息", + "Message_HideType_room_disabled_encryption": "隐藏“已禁用聊天室加密”消息", + "Message_HideType_room_unarchived": "隐藏“已取消归档聊天室”消息", + "Message_HideType_ru": "隐藏“已移除用户”消息", + "Message_HideType_subscription_role_added": "隐藏“已设置角色”消息", + "Message_HideType_subscription_role_removed": "隐藏“角色不再被定义”消息", "Message_HideType_uj": "隐藏“用户加入”消息", "Message_HideType_ul": "隐藏“用户离开”消息", + "Message_HideType_ut": "隐藏“用户加入会话”消息", + "Message_HideType_wm": "隐藏“欢迎”消息", "Message_Id": "消息 ID", "Message_Ignored": "已忽略此消息", "Message_info": "消息信息", "Message_KeepHistory": "保存消息历史记录", - "Message_MaxAll": "ALL消息支持的最大频道人数", + "Message_MaxAll": "ALL 消息支持的最大频道人数", "Message_MaxAllowedSize": "最大消息长度", "Message_pinning": "固定消息", + "message_pruned": "已修剪消息", "Message_QuoteChainLimit": "链接报价的最大数量", "Message_Read_Receipt_Enabled": "显示读取收据", "Message_Read_Receipt_Store_Users": "详细的读取收据", "Message_Read_Receipt_Store_Users_Description": "显示每个用户的阅读收据", - "Message_removed": "消息已删除", + "Message_removed": "已移除消息", "Message_sent_by_email": "邮件发送的消息", "Message_ShowDeletedStatus": "显示删除状态", "Message_ShowEditedStatus": "显示编辑状态", @@ -2309,9 +2677,11 @@ "Message_VideoRecorderEnabled": "录像机启用", "Message_VideoRecorderEnabledDescription": "要求 'video/webm' 文件在 '文件上传' 设置中成为可接受的媒体类型。", "Message_view_mode_info": "这会改变消息在屏幕上占用的空间。", + "MessageBox_view_mode": "消息框查看模式", "messages": "消息", "Messages": "消息", "messages_pruned": "消息被修剪", + "Messages_sent": "已发送消息", "Messages_that_are_sent_to_the_Incoming_WebHook_will_be_posted_here": "入站 WebHook 的消息会发布到这里。", "Meta": "Meta", "Meta_custom": "自定义元标记", @@ -2320,17 +2690,18 @@ "Meta_language": "语言", "Meta_msvalidate01": "微软网站验证", "Meta_robots": "机器人", - "meteor_status_connected": "已连线", - "meteor_status_connecting": "连线中...", - "meteor_status_failed": "无法与服务器连线", - "meteor_status_offline": "离线模式", - "meteor_status_reconnect_in": "一分钟后再尝试...", - "meteor_status_reconnect_in_plural": "在__count__秒钟后再尝试...", - "meteor_status_try_now_offline": "重新连线", - "meteor_status_try_now_waiting": "现在再试", - "meteor_status_waiting": "等待与服务器连线,", + "meteor_status_connected": "已连接", + "meteor_status_connecting": "连接中...", + "meteor_status_failed": "服务器连接失败", + "meteor_status_offline": "离线模式。", + "meteor_status_reconnect_in": "一分钟后重试...", + "meteor_status_reconnect_in_plural": "在 __count__ 秒钟后重试...", + "meteor_status_try_now_offline": "重新连接", + "meteor_status_try_now_waiting": "立即尝试", + "meteor_status_waiting": "等待服务器连接,", + "Method": "方法", "Min_length_is": "最小长度是 %s", - "Minimum": "最低限度", + "Minimum": "最小值", "Minimum_balance": "最小余额", "minute": "分钟", "minutes": "分钟", @@ -2342,7 +2713,7 @@ "Mobex_sms_gateway_from_numbers_list_desc": "以逗号分隔的数字列表,用于发送全新的消息,例如:123456789, 123456788, 123456888", "Mobex_sms_gateway_password": "密码", "Mobex_sms_gateway_restful_address": "Mobex SMS REST API地址", - "Mobex_sms_gateway_restful_address_desc": "您 Mobex REST API 的 IP 或 Host。例:`http://192.168.1.1:8080` 或 `https://www.example.com:8080`", + "Mobex_sms_gateway_restful_address_desc": "您 Mobex REST API 的 IP 或主机。例:`http://192.168.1.1:8080` 或 `https://www.example.com:8080`", "Mobex_sms_gateway_username": "用户名", "Mobile": "移动", "Mobile_Notifications_Default_Alert": "默认的移动通知", @@ -2351,14 +2722,17 @@ "Mongo_version": "Mongo 版本", "MongoDB_Deprecated": "MongoDB已弃用", "MongoDB_version_s_is_deprecated_please_upgrade_your_installation": "MongoDB版本 %s 已弃用,请尽快升级安装。", - "Monitor_history_for_changes_on": "监视历史记录以更改", - "Monitor_removed": "监视器已移除", - "Monitors": "监视器", + "Monitor_added": "已添加监控", + "Monitor_history_for_changes_on": "监控更改历史于", + "Monitor_removed": "已移除监控", + "Monitors": "监控", + "Monthly_Active_Users": "阅读活跃用户", "More": "更多", "More_channels": "更多频道", "More_direct_messages": "更多私聊", - "More_groups": "更多私有组", + "More_groups": "更多私人组", "More_unreads": "更多未阅读", + "Most_popular_channels_top_5": "最受欢迎的频道(前5)", "Move_beginning_message": "`%s` - 移动到消息的开头", "Move_end_message": "`%s` - 移至消息末尾", "Msgs": "消息", @@ -2370,7 +2744,7 @@ "Mute_someone_in_room": "禁止某人在聊天室中发言", "Mute_user": "禁止用户发言", "mute-user": "静音用户", - "mute-user_description": "允许在同一频道中静音其他用户", + "mute-user_description": "禁言同一频道中其他用户的权限", "Muted": "已被禁止发言", "My Data": "我的数据", "My_Account": "我的账户", @@ -2383,48 +2757,67 @@ "Name_optional": "姓名(可选)", "Name_Placeholder": "请输入你的名字...", "Navigation_History": "浏览历史记录", + "Never": "从不", + "New": "新", "New_Application": "新应用", - "New_Canned_Response": "新的罐装回复", - "New_chat_transfer": "新聊天转换:__transfer__", + "New_Business_Hour": "新的营业时间", + "New_Canned_Response": "新的自动回复", + "New_chat_in_queue": "新聊天等候处理", + "New_chat_priority": "已变更优先级:__user__ 变更优先级为 __priority__", + "New_chat_transfer": "新聊天转移:__transfer__", + "New_Contact": "新联系人", "New_Custom_Field": "新的自定义字段", "New_Department": "新部门", "New_discussion": "新讨论", "New_discussion_first_message": "通常, 一个讨论由一个问题开始, 例如 \"如何上传图片?\"", "New_discussion_name": "有意义的讨论房间名称", + "New_Email_Inbox": "新的电子邮件收件箱", "New_encryption_password": "新加密密码", "New_integration": "新的集成", "New_line_message_compose_input": "`%s` - 消息编写中的新行", + "New_Livechat_offline_message_has_been_sent": "已发送新 Livechat 离线消息", "New_logs": "新日志", "New_Message_Notification": "新消息通知", "New_messages": "新消息", "New_password": "新密码", "New_Password_Placeholder": "请输入新密码...", + "New_Priority": "新优先级", "New_role": "新角色", "New_Room_Notification": "新聊天室通知", + "New_Tag": "新标签", "New_Trigger": "新的触发器", - "New_version_available_(s)": "有可用的新版本(%s)", + "New_Unit": "新单位", + "New_users": "新用户", + "New_version_available_(s)": "新版本可用(%s)", "New_videocall_request": "新的视频通话请求", "New_visitor_navigation": "新的导航:__history__", "Newer_than": "比...更新", "Newer_than_may_not_exceed_Older_than": "“晚于“不得超过”早于“", + "Nickname": "昵称", + "Nickname_Placeholder": "输入您的昵称…", "No": "否", - "No_available_agents_to_transfer": "没有可用的代理进行传输", - "No_Canned_Responses": "无罐装回复", + "No_available_agents_to_transfer": "没有可用的客服来进行转移", + "No_Canned_Responses": "无自动回复", "No_channel_with_name_%s_was_found": "未找到频道 \"%s\" !", "No_channels_yet": "您尚未加入这个频道。", - "No_direct_messages_yet": "您还没有开始任何私聊。", - "No_discussions_yet": "尚未有任何讨论", + "No_data_found": "未找到数据", + "No_direct_messages_yet": "无私聊消息。", + "No_Discussions_found": "未找到讨论", + "No_discussions_yet": "尚无讨论", "No_emojis_found": "未找到颜文字", "No_Encryption": "未使用加密", - "No_group_with_name_%s_was_found": "未找到私有组 \"%s\" !", - "No_groups_yet": "您还没有私有组。", + "No_files_left_to_download": "没有需要下载的文件", + "No_group_with_name_%s_was_found": "未找到私人组 \"%s\" !", + "No_groups_yet": "您还没有私人组。", "No_integration_found": "由提供的ID找不到集成。", - "No_Limit": "无限", + "No_Limit": "无限制", "No_livechats": "您没有任何实时聊天会话", "No_mentions_found": "没有发现任何提及", + "No_messages_found_to_prune": "未找到需修剪的消息", "No_messages_yet": "还没有消息", "No_pages_yet_Try_hitting_Reload_Pages_button": "还没有页面。尝试点击“重新加载页面”按钮。", "No_pinned_messages": "未固定的信息", + "No_previous_chat_found": "未找到上次的聊天", "No_results_found": "无结果", "No_results_found_for": "未找到结果:", "No_snippet_messages": "没有片段", @@ -2439,17 +2832,21 @@ "Normal": "正常", "Not_authorized": "未经授权", "Not_Available": "不可用", + "Not_enough_data": "数据不足", "Not_following": "未关注", + "Not_Following": "取消关注", "Not_found_or_not_allowed": "未找到或者不允许", "Not_Imported_Messages_Title": "下列消息未能导入成功", + "Not_in_channel": "不在频道中", "Not_started": "尚未开始", "Not_verified": "未验证", "Nothing": "没有", "Nothing_found": "没有找到", "Notification_Desktop_Default_For": "显示桌面通知", + "Notification_Desktop_Audio_Default_For": "播放桌面通知声音", "Notification_Mobile_Default_For": "推送移动通知", - "Notification_RequireInteraction": "关闭桌面通知需用户回应", - "Notification_RequireInteraction_Description": "仅适用于Chrome浏览器版本>50。使用requireInteraction 参数来无限期显示桌面通知,直到用户与其互动。", + "Notification_RequireInteraction": "关闭桌面通知要求用户操作", + "Notification_RequireInteraction_Description": "仅当 Chrome 浏览器版本 >50 时适用。使用 requireInteraction 参数来无限期显示桌面通知,直到用户与其互动。", "Notifications": "通知", "Notifications_Max_Room_Members": "禁用所有消息通知之前的最大聊天室人数", "Notifications_Max_Room_Members_Description": "所有消息通知被禁用前的聊天室内的最大成员数量。用户仍然可以更改每个房间的设置,以单独接收所有通知。 (0禁用)", @@ -2458,23 +2855,30 @@ "Notifications_Sound_Volume": "通知音量", "Notify_active_in_this_room": "通知此房间的活跃用户", "Notify_all_in_this_room": "提醒聊天室中的所有人", + "NPS_survey_enabled": "启用 NPS 问卷调查", + "NPS_survey_enabled_Description": "允许对所有用户进行 NPS 问卷调查。管理员将在调查启动前 2 个月收到提醒。", + "NPS_survey_is_scheduled_to-run-at__date__for_all_users": "NPS 问卷调查计划在 __date__ 对所有用户进行。可在 \"管理 > 一般 > NPS\" 中关闭文件调查?", "Num_Agents": "# 客服", + "Number_in_seconds": "秒数", "Number_of_events": "事件数量", - "Number_of_federated_servers": "联合服务器数", + "Number_of_federated_servers": "联盟服务器数", "Number_of_federated_users": "联盟用户数量", "Number_of_messages": "消息条数", + "Number_of_most_recent_chats_estimate_wait_time": "用于计算预计等待时间的最近聊天数", + "Number_of_most_recent_chats_estimate_wait_time_description": "此数值将定义用于计算队列等候时间的近期服务聊天室数量", + "Number_of_users_autocomplete_suggestions": "自动建议数量", "OAuth Apps": "OAuth 应用", "OAuth_Application": "OAuth 应用", "OAuth_Applications": "OAuth 应用", "Objects": "物品", "Off": "关闭", - "Off_the_record_conversation": "无记录对话", - "Off_the_record_conversation_is_not_available_for_your_browser_or_device": "您的浏览器或设备不支持无记录对话。", + "Off_the_record_conversation": "无记录会话", + "Off_the_record_conversation_is_not_available_for_your_browser_or_device": "您的浏览器或设备不支持无记录会话。", "Office_Hours": "工作时间", "Office_hours_enabled": "办公时间已启用", "Office_hours_updated": "办公时间更新", "Offline": "离线", - "Offline_DM_Email": "__user__ 请求和你直接对话", + "Offline_DM_Email": "私聊消息邮件主题", "Offline_Email_Subject_Description": "您可以使用以下占位符:[Site_Name],[Site_URL],[User]&[Room]", "Offline_form": "离线表单", "Offline_form_unavailable_message": "离线表单不可用提示信息", @@ -2482,18 +2886,32 @@ "Offline_Mention_All_Email": "提及所有邮件主题", "Offline_Mention_Email": "提及电子邮件主题", "Offline_message": "离线消息", + "Offline_Message": "离线消息", + "Offline_Message_Use_DeepLink": "使用 Deep Link URL 格式", + "Offline_messages": "离线消息", "Offline_success_message": "离线成功消息", "Offline_unavailable": "离线不可用", "Old Colors": "旧颜色", "Old Colors (minor)": "旧颜色(小)", "Older_than": "早于", + "Omnichannel_Directory": "Omnichannel 目录", + "Omnichannel_appearance": "Omnichannel 外观", + "Omnichannel_Contact_Center": "Omnichannel 联系中心", + "Omnichannel_contact_manager_routing": "分配新的对话至联系人管理员", + "Omnichannel_contact_manager_routing_Description": "在聊天开始时如果联系人管理员在线,此设置将聊天分配给已分配的联系人管理员。", + "Omnichannel_External_Frame": "外部框架", + "Omnichannel_External_Frame_Enabled": "已启用外部框架", + "Omnichannel_External_Frame_Encryption_JWK": "加密密钥(JWK)", + "Omnichannel_External_Frame_Encryption_JWK_Description": "如提供则会使用提供的密钥加密用户的令牌,外部系统需要对数据进行解密才能使用令牌", + "Omnichannel_External_Frame_URL": "外部框架 URL", "On": "打开", "online": "在线", "Online": "在线", "Only_authorized_users_can_write_new_messages": "只有授权用户可以发送消息", "Only_from_users": "仅修剪这些用户的内容(留空以修剪每个人的内容)", + "Only_Members_Selected_Department_Can_View_Channel": "只有所选部门的成员可以查看此频道的聊天", "Only_On_Desktop": "桌面模式(仅在桌面上输入时发送)", - "Only_works_with_chrome_version_greater_50": "仅适用于版本在50以上的谷歌浏览器(Chrome)", + "Only_works_with_chrome_version_greater_50": "仅适用于版本在 50 以上的谷歌浏览器(Chrome)", "Only_you_can_see_this_message": "只有你能看到这条信息", "Oops_page_not_found": "糟糕,页面未找到", "Oops!": "哎呀", @@ -2502,11 +2920,12 @@ "Open_conversations": "活跃的会话", "Open_Days": "开放日", "Open_days_of_the_week": "每周开放日", - "Open_Livechats": "打开在线聊天", + "Open_Livechats": "正在进行的聊天", + "Open_thread": "开启讨论串", "Open_your_authentication_app_and_enter_the_code": "打开您的验证应用程序并输入代码。您也可以使用其中一个备份代码。", "Opened": "已开启", "Opened_in_a_new_window": "在新窗口中打开。", - "Opens_a_channel_group_or_direct_message": "打开一个频道、小组、或直接对话", + "Opens_a_channel_group_or_direct_message": "打开频道、组或私聊", "optional": "可选", "Options": "选项", "or": "或", @@ -2523,34 +2942,42 @@ "OS_Loadavg": "OS 平均负载", "OS_Platform": "OS 平台", "OS_Release": "OS 发行版本", - "OS_Totalmem": "OS 内存总量", + "OS_Totalmem": "OS 总内存", "OS_Type": "OS 类型", "OS_Uptime": "OS 运新时间", "Other": "其他", "others": "其它", + "Others": "其他", "OTR": "OTR", "OTR_is_only_available_when_both_users_are_online": "OTR 只能在双方均在线时使用", "Outgoing_WebHook": "出站 WebHook", "Outgoing_WebHook_Description": "实时获取Rocket.Chat数据。", + "Output_format": "输出格式", "Override_URL_to_which_files_are_uploaded_This_url_also_used_for_downloads_unless_a_CDN_is_given": "重写 URL 为文件上传地址。如果没有设置 CDN,url 也会被当作下载链接。", "Page_title": "页面标题", "Page_URL": "页面地址", "Parent_channel_doesnt_exist": "频道不存在", "Password": "密码", "Password_Change_Disabled": "您的 Rocket.Chat 管理员已经禁止了修改密码的功能。 ", - "Password_Changed_Description": "您可以使用以下占位符:[password]为暂时密码。[name]、[fname]、[lname]为用户的全名、名和性。[email]为用户的用户的邮箱[Site_Name]和[Site_URL]为应用名和网址。", + "Password_Changed_Description": "您可以使用以下占位符:[password]为暂时密码。[name]、[fname]、[lname]为用户的全名、名和姓。[email]为用户的邮箱[Site_Name]和[Site_URL]为应用名和网址。", "Password_Changed_Email_Subject": "[Site_Name] - 密码已更改", "Password_changed_section": "密码已更改", "Password_changed_successfully": "密码更改成功", "Password_Policy": "密码策略", + "Password_to_access": "访问密码", + "Passwords_do_not_match": "密码不匹配", "Past_Chats": "过去的聊天", - "Paste_here": "在此处粘贴", + "Paste_here": "在此粘贴", + "Paste": "粘贴", + "Paste_error": "从剪贴板读取时出错", "Payload": "有效载荷", "Peer_Password": "对等端密码", "People": "人", "Permalink": "永久链接", "Permissions": "权限", "Personal_Access_Tokens": "个人访问令牌", + "Phone": "电话", + "Phone_already_exists": "电话已存在", "Phone_number": "电话号码", "Pin": "固定", "Pin_Message": "固定消息", @@ -2558,6 +2985,7 @@ "pin-message_description": "在频道中固定消息的权限", "Pinned_a_message": "已固定消息:", "Pinned_Messages": "已固定的信息", + "pinning-not-allowed": "不允许固定", "PiwikAdditionalTrackers": "额外的Piwik网站", "PiwikAdditionalTrackers_Description": "如果您想将相同的数据跟踪到不同的网站,请输入以下格式的Piwik网站网址和SiteID:[{ \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 },{ \"trackerURL\" : \"https://my.piwik.domain2/\", \"siteId\" : 42 } ]", "PiwikAnalytics_cookieDomain": "所有子域", @@ -2569,6 +2997,7 @@ "PiwikAnalytics_siteId_Description": "用于标识此站点网站ID,例如:17", "PiwikAnalytics_url_Description": "Piwik 所在的网页地址,请包含结尾的斜线。例如://piwik.rocket.chat/", "Placeholder_for_email_or_username_login_field": "登录窗 E-mail 或用户的占位符", + "Placeholder_for_password_login_confirm_field": "密码登录字段的确认占位符", "Placeholder_for_password_login_field": "登录窗中密码的占位符", "Please_add_a_comment": "请添加一条评论", "Please_add_a_comment_to_close_the_room": "请添加评论并关闭聊天室", @@ -2585,9 +3014,10 @@ "Please_fill_all_the_information": "请填写所有信息", "Please_fill_an_email": "请填写邮件地址", "Please_fill_name_and_email": "请填写姓名和电子邮箱地址", - "Please_go_to_the_Administration_page_then_Livechat_Facebook": "请到管理页面,然后进入 即时聊天 > Facebook", + "Please_go_to_the_Administration_page_then_Livechat_Facebook": "请到管理页面,然后进入 Omnichannel > Facebook", "Please_select_an_user": "请选择一个用户", "Please_select_enabled_yes_or_no": "请选择要启用的项", + "Please_select_visibility": "请选择可见度", "Please_wait": "请稍候", "Please_wait_activation": "请稍候,这可能需要一些时间。", "Please_wait_while_OTR_is_being_established": "请稍候,正在建立 OTR 连接", @@ -2596,10 +3026,11 @@ "Pool": "池", "Port": "端口", "Post_as": "以该身份发送", - "Post_to_Channel": "向频道发送", + "Post_to": "发布至", + "Post_to_Channel": "发布至频道", "Post_to_s_as_s": "向 %s 推送,以 %s 的身份", "post-readonly": "发送只读", - "post-readonly_description": "允许在只读频道中发布消息", + "post-readonly_description": "在只读频道发布消息的权限", "Preferences": "偏好设置", "Preferences_saved": "偏好设置已保存", "Preparing_data_for_import_process": "正在为导入过程准备数据", @@ -2613,14 +3044,16 @@ "Previous_week": "前一个星期", "Priorities": "优先级", "Priority": "优先级", - "Priority_removed": "优先级已移除", + "Priority_removed": "已移除优先级", "Privacy": "隐私条款", "Privacy_Policy": "隐私政策", - "Private": "私有", + "Private": "私人", "Private_Channel": "私人频道", - "Private_Group": "私有组", - "Private_Groups": "私有组", - "Private_Groups_list": "私有组列表", + "Private_Channels": "私人频道", + "Private_Chats": "私人聊天", + "Private_Group": "私人组", + "Private_Groups": "私人组", + "Private_Groups_list": "私人组列表", "Private_Team": "私人团队", "Productivity": "产出", "Profile": "资料", @@ -2628,25 +3061,31 @@ "Profile_picture": "头像", "Profile_saved_successfully": "资料保存成功", "Prometheus": "普罗米修斯", + "Prometheus_API_User_Agent": "API:跟踪用户代理", + "Prometheus_Garbage_Collector": "收集 NodeJS GC", + "Prometheus_Garbage_Collector_Alert": "需要重启以停用", + "Prometheus_Reset_Interval": "重置间隔(毫秒)", "Protocol": "协议", "Prune": "修剪", "Prune_finished": "修剪完成", "Prune_Messages": "修剪消息", - "Prune_Modal": "你确定要修剪这些消息吗?已修剪的邮件无法恢复。", - "Prune_Warning_after": "这将删除 %s 后 %s 中的所有 %s。", + "Prune_Modal": "你确定要修剪这些消息吗?已修剪的消息无法恢复。", + "Prune_Warning_after": "这将删除 %s 中的所有 %s 于 %s 后。", "Prune_Warning_all": "这将删除 %s 中的所有 %s !", - "Prune_Warning_before": "这将删除 %s 之前 %s 中的所有 %s。", - "Prune_Warning_between": "这将删除 %s 和 %s 之间 %s 中的所有 %s。", + "Prune_Warning_before": "这将删除 %s 中的所有 %s 于 %s 前。", + "Prune_Warning_between": "这将删除 %s 中的所有 %s 于 %s 和 %s 之间。", "Pruning_files": "修剪文件......", "Pruning_messages": "修剪消息......", "Public": "公共", "Public_Channel": "公共频道", + "Public_Channels": "公共频道", "Public_Community": "公共社区", - "Public_Relations": "公共关系", + "Public_URL": "公共 URL", "Purchase_for_free": "免费购买", "Purchase_for_price": "以 $%s 购买", "Purchased": "已购买", "Push": "推送", + "Push_Notifications": "推送通知", "Push_apn_cert": "APN 证书", "Push_apn_dev_cert": "APN Dev 证书 ", "Push_apn_dev_key": "APN Dev 密钥", @@ -2655,25 +3094,28 @@ "Push_apn_passphrase": "APN 口令", "Push_enable": "启用", "Push_enable_gateway": "启用网关", + "Push_enable_gateway_Description": "您需要接受注册您的服务器(安装向导 > 组织信息 > 注册服务器)和我们的隐私条款(安装向导 > 云信息 > 云服务隐私条款同意书)来启用此设定和我们的网关", "Push_gateway": "网关", - "Push_gateway_description": "可以使用多行来指定多个网关", + "Push_gateway_description": "可使用多行来指定多个网关", "Push_gcm_api_key": "GCM API key", "Push_gcm_project_number": "GCM 项目数字", "Push_production": "生产", + "Push_request_content_from_server": "使用收据上的服务器获取完整消息内容", "Push_Setting_Requires_Restart_Alert": "更改此值需要重新启动 Rocket.Chat 。", "Push_show_message": "在通知中显示消息", "Push_show_username_room": "在通知中显示频道/群组/用户名", "Push_test_push": "测试", "Query": "请求", "Query_description": "决定向哪些用户发送电子邮件的额外条件。取消订阅的用户会自动从请求中删除。这必须是有效的 JSON 数据,例如:`{\"createdAt\":{\"$gt\":{\"$date\": \"2015-01-01T00:00:00.000Z\"}}}`。", + "Query_is_not_valid_JSON": "查询非合法 JSON", "Queue": "队列", "quote": "引用", "Quote": "引用", "Random": "随机", "RD Station": "RD 站点", "RDStation_Token": "RD站令牌", - "React_when_read_only": "允许反应", - "React_when_read_only_changed_successfully": "允许反应时只读更改成功", + "React_when_read_only": "允许回应", + "React_when_read_only_changed_successfully": "当只读变更成功时允许回应", "Reacted_with": "的反应是", "Reactions": "反应", "Read_by": "阅读", @@ -2686,7 +3128,7 @@ "RealName_Change_Disabled": "您的Rocket.Chat管理员已禁用更改名称", "Reason_To_Join": "加入的理由", "Receive_alerts": "接收提醒", - "Receive_Group_Mentions": "接收@all和@here提及", + "Receive_Group_Mentions": "接收 @all 和 @here 提及", "Recent_Import_History": "最近的导入历史", "Record": "记录", "Redirect_URI": "跳转 URI", @@ -2695,13 +3137,14 @@ "Refresh_oauth_services": "刷新OAuth服务", "Refresh_your_page_after_install_to_enable_screen_sharing": "安装完成后需要刷新页面才能支持屏幕共享", "Regenerate_codes": "重新生成代码", + "Regexp_validation": "正则表达式验证", "Register": "注册一个新帐号", "Register_Server": "注册服务器", "Register_Server_Info": "使用 Rocket.Chat 科技集团提供的预配置网关和代理。", - "Register_Server_Opt_In": "时事通讯,优惠和产品更新", + "Register_Server_Opt_In": "产品和安全更新", "Register_Server_Registered": "注册访问", "Register_Server_Registered_I_Agree": "我同意", - "Register_Server_Registered_Livechat": "即时聊天 omnichannel 代理", + "Register_Server_Registered_Livechat": "Livechat Omnichannel 代理", "Register_Server_Registered_Marketplace": "应用市场地位", "Register_Server_Registered_OAuth": "社交网络的OAuth代理", "Register_Server_Registered_Push_Notifications": "移动推送通知网关", @@ -2719,35 +3162,42 @@ "Reload": "刷新", "Reload_Pages": "重新加载页面", "Remove": "移除", - "Remove_Admin": "取消管理员", + "Remove_Admin": "移除管理员", "Remove_as_leader": "作为领导者移除", "Remove_as_moderator": "取消主持", "Remove_as_owner": "移除“所有者”身份", "Remove_custom_oauth": "删除自定义 OAuth ", "Remove_from_room": "从聊天室中删除", - "Remove_last_admin": "删除最后一个管理员", + "Remove_last_admin": "删除上个管理员", "Remove_someone_from_room": "将某人从聊天室中删除", - "remove-closed-livechat-rooms": "删除已关闭的即时聊天房间", + "remove-closed-livechat-rooms": "删除已关闭的 Omnichannel 聊天室", "remove-user": "删除用户", - "remove-user_description": "允许从房间中移除用户", - "Removed": "已删除", + "remove-user_description": "从聊天室移除用户的权限", + "Removed": "已移除", "Removed_User": "已移除用户", + "Replay": "重放", "Replied_on": "回复于", "Replies": "回复", "Reply": "回复", "reply_counter": "__counter__ 回复", "reply_counter_plural": "__counter__ 回复", - "Reply_in_direct_message": "回复直接消息", - "Reply_in_thread": "回复讨论串", + "Reply_in_direct_message": "在私聊中回复", + "Reply_in_thread": "在讨论串中回复", + "Reply_via_Email": "通过电子邮件回复", "ReplyTo": "回复", - "Report": "报告", - "Report_Abuse": "报告滥用", - "Report_exclamation_mark": "报告!", - "Report_sent": "报告已发送", + "Report": "举报", + "Report_Abuse": "举报滥用", + "Report_exclamation_mark": "举报!", + "Report_sent": "已发送举报", "Report_this_message_question_mark": "举报此消息?", "Reporting": "报告", - "Request_comment_when_closing_conversation": "在聊天结束时请求评价", - "Request_tag_before_closing_chat": "在结束对话之前请求标签", + "Request_comment_when_closing_conversation": "在会话结束时请求评价", + "Request_comment_when_closing_conversation_description": "在启用时,客服将需要在会话结束时设置备注。", + "Request_tag_before_closing_chat": "在结束会话之前请求标签", + "Requested_At": "请求于", + "Requested_By": "请求由", + "Require": "要求", + "Required": "必需", "Require_all_tokens": "要求所有令牌", "Require_any_token": "需要任何令牌", "Require_password_change": "要求修改密码", @@ -2756,33 +3206,43 @@ "Reset_Connection": "重置连接", "Reset_E2E_Key": "重置端到端密钥", "Reset_password": "重设密码", - "Reset_section_settings": "重置部分设置", + "Reset_section_settings": "重置区块为默认", + "Reset_TOTP": "重置 TOTP", "reset-other-user-e2e-key": "重置其他用户端到端密钥", + "Responding": "回复", + "Response_description_post": "空的请求体或空文本请求体将被直接忽略。非-200 响应将以合理次数重试。响应将以上方的别名和头像进行发布。您可以参考上方示例覆盖这些信息。", + "Response_description_pre": "如果处理者希望将响应发布回频道,应当返回以下 JSON 作为响应体:", "Restart": "重启", "Restart_the_server": "重启服务器", "Retail": "零售", "Retention_setting_changed_successfully": "保留策略设置已成功更改", "RetentionPolicy": "保留政策", + "RetentionPolicy_Advanced_Precision": "使用高级保留策略配置", + "RetentionPolicy_Advanced_Precision_Cron": "使用高级保留策略任务计划", + "RetentionPolicy_Advanced_Precision_Cron_Description": "使用 cron 任务表达式定义修剪定时器运行频度,将此设置为更精确的值会使具有快速保留计时器的频道更好地工作,但对大型社区可能会消耗额外的处理能力。", "RetentionPolicy_AppliesToChannels": "适用于频道", - "RetentionPolicy_AppliesToDMs": "适用于直接消息", - "RetentionPolicy_AppliesToGroups": "适用于私人团体", + "RetentionPolicy_AppliesToDMs": "适用于私聊消息", + "RetentionPolicy_AppliesToGroups": "适用于私人组", "RetentionPolicy_Description": "自动修剪 Rocket.Chat 实例中的旧消息。", + "RetentionPolicy_DoNotPruneDiscussion": "不修剪讨论消息", + "RetentionPolicy_DoNotPrunePinned": "不修剪已固定的消息", + "RetentionPolicy_DoNotPruneThreads": "不修剪讨论串", "RetentionPolicy_Enabled": "已启用", "RetentionPolicy_ExcludePinned": "排除固定消息", "RetentionPolicy_FilesOnly": "只删除文件", - "RetentionPolicy_FilesOnly_Description": "只删除文件,邮件本身将保留在原位。", + "RetentionPolicy_FilesOnly_Description": "只有文件会被删除,消息本身将保留在原位。", "RetentionPolicy_MaxAge": "消息保持时限", "RetentionPolicy_MaxAge_Channels": "频道中的消息保持时限", - "RetentionPolicy_MaxAge_Description": "修剪所有早于此值的邮件,以天为单位", - "RetentionPolicy_MaxAge_DMs": "直接消息保持时限", - "RetentionPolicy_MaxAge_Groups": "私人组中的消息保持时限", + "RetentionPolicy_MaxAge_Description": "修剪所有早于此值的消息,以天为单位", + "RetentionPolicy_MaxAge_DMs": "私聊消息最大年龄", + "RetentionPolicy_MaxAge_Groups": "私人组中的消息最大年龄", "RetentionPolicy_Precision": "定时精度", - "RetentionPolicy_Precision_Description": "修剪计时器应该多久运行一次。将此设置为更精确的值会使具有快速保留计时器的通道更好地工作,但可能会对大型社区造成额外的处理能力。", + "RetentionPolicy_Precision_Description": "修剪计时器应该多久运行一次。将此设置为更精确的值会使具有快速保留计时器的频道更好地工作,但对大型社区可能会消耗额外的处理能力。", "RetentionPolicy_RoomWarning": "此会话中超过 __time__ 的消息将会自动删除", "RetentionPolicy_RoomWarning_FilesOnly": "此会话中超过 __time__ 的文件将自动删除(消息保持不变)", "RetentionPolicy_RoomWarning_Unpinned": "此会话中超过 __time__ 的未固定消息将会自动删除", "RetentionPolicy_RoomWarning_UnpinnedFilesOnly": "此会话中超过 __time__ 的未固定文件将自动删除(消息保持不变)", - "RetentionPolicyRoom_Enabled": "自动修剪旧邮件", + "RetentionPolicyRoom_Enabled": "自动修剪旧消息", "RetentionPolicyRoom_ExcludePinned": "排除固定消息", "RetentionPolicyRoom_FilesOnly": "仅修剪文件,保留消息", "RetentionPolicyRoom_MaxAge": "消息保持时限(以天为单位)(默认值:__max__)", @@ -2796,7 +3256,7 @@ "Role": "角色", "Role_Editing": "编辑角色", "Role_Mapping": "角色映射", - "Role_removed": "角色已删除", + "Role_removed": "已移除角色", "Room": "聊天室", "Room_announcement_changed_successfully": "公告已成功修改", "Room_archivation_state": "状态", @@ -2804,12 +3264,13 @@ "Room_archivation_state_true": "已归档", "Room_archived": "已归档聊天室", "room_changed_announcement": "__user_by__ 将公告修改为:__room_announcement__", + "room_changed_avatar": "聊天室头像被 __user_by__ 更改", "room_changed_description": "聊天室描述由 __user_by__ 修改为:__room_description__", "room_changed_privacy": "__user_by__ 将聊天室类型修改为:__room_type__", "room_changed_topic": "__user_by__ 将聊天室主题修改为:__room_topic__", - "Room_default_change_to_private_will_be_default_no_more": "这是一个默认频道,并将其更改为专用群组将使其不再是默认频道。你想继续吗?", + "Room_default_change_to_private_will_be_default_no_more": "将默认频道更改为私人组将使其不再是默认频道。您想继续吗?", "Room_description_changed_successfully": "聊天室描述修改成功", - "Room_has_been_archived": "Room已归档", + "Room_has_been_archived": "聊天室已归档", "Room_has_been_deleted": "聊天室已被删除", "Room_has_been_unarchived": "已撤销Room归档", "Room_Info": "聊天室信息", @@ -2823,15 +3284,16 @@ "Room_tokenpass_config_changed_successfully": "聊天室令牌传输配置已成功更改", "Room_topic_changed_successfully": "聊天室话题已成功修改", "Room_type_changed_successfully": "聊天室类型已成功修改", - "Room_type_of_default_rooms_cant_be_changed": "这是一个默认聊天室,类型不能更改,请咨询您的管理员。", + "Room_type_of_default_rooms_cant_be_changed": "不能更改默认聊天室的类型,请咨询您的管理员。", "Room_unarchived": "聊天室归档状态已取消", + "Room_updated_successfully": "聊天室更新成功!", "Room_uploaded_file_list": "文件列表", "Room_uploaded_file_list_empty": "没有任何文件。", "Rooms": "聊天室", "Routing": "路由", "Run_only_once_for_each_visitor": "每位访客仅运行一次", "run-import": "运行导入", - "run-import_description": "运行导入器的权限", + "run-import_description": "运行导入的权限", "run-migration": "运行迁移", "run-migration_description": "运行迁移的权限", "Running_Instances": "正在运行的实例", @@ -2840,8 +3302,15 @@ "Same_As_Token_Sent_Via": "与“通过发送的令牌”相同", "Same_Style_For_Mentions": "同样的风格提及", "SAML": "SAML", + "SAML_Allowed_Clock_Drift": "允许来自标识符提供者的时间偏移", + "SAML_Allowed_Clock_Drift_Description": "标识符提供者的时间可能相对您的系统时间向前偏移。您可以允许少量的时间偏移。值必须以毫秒数提供。值将加到相应验证时的当前时间。", + "SAML_AuthnContext_Template": "AuthnContext 模版", + "SAML_AuthnContext_Template_Description": "你可以在这里使用 AuthnRequest 模板中的任何变量。\n\n 要添加额外的 authn 上下文,复制 __AuthnContextClassRef__ 标签,并用新的上下文替换 __\\_\\_authnContext\\_\\___ 变量。", + "SAML_AuthnRequest_Template": "AuthnRequest 模板", + "SAML_AuthnRequest_Template_Description": "下列变量可用:\n- **\\_\\_newId\\_\\_**: 随机生成的字符串 ID\n- **\\_\\_instant\\_\\_**: 当前时间戳\n- **\\_\\_callbackUrl\\_\\_**: Rocket.Chat 回调 URL\n- **\\_\\_entryPoint\\_\\_**: __Custom Entry Point__ 设置值.\n- **\\_\\_issuer\\_\\_**: __Custom Issuer__ 设置值\n- **\\_\\_identifierFormatTag\\_\\_**: 配置了合法 __Identifier Format__ 时的 __NameID Policy Template__ 内容\n- **\\_\\_identifierFormat\\_\\_**: __Identifier Format__ 设置值.\n- **\\_\\_authnContextTag\\_\\_**: 配置了合法 __Custom Authn Context__ 时的 __AuthnContext Template__ 内容\n- **\\_\\_authnContextComparison\\_\\_**: __Authn Context Comparison__ 设置值\n- **\\_\\_authnContext\\_\\_**: __Custom Authn Context__ 设置值", "SAML_Custom_Authn_Context": "自定义授权上下文", "SAML_Custom_Authn_Context_Comparison": "Authn Context 对比", + "SAML_Custom_Authn_Context_description": "留空以省略请求中的 authn上下文。\n\n要添加多个 authn 上下文,添加额外的上下文到 __AuthnContext Template__ 设置。", "SAML_Custom_Cert": "自定义凭证", "SAML_Custom_Debug": "使能调试", "SAML_Custom_EMail_Field": "电子邮件字段名称", @@ -2857,33 +3326,65 @@ "SAML_Custom_Logout_Behaviour_Terminate_SAML_Session": "终止SAML会话", "SAML_Custom_mail_overwrite": "覆盖用户邮件 (使用 idp 属性)", "SAML_Custom_name_overwrite": "覆盖用户全名 (使用 idp 属性)", - "SAML_Custom_Private_Key": "Private Key", + "SAML_Custom_Private_Key": "私钥内容", "SAML_Custom_Provider": "自定义供应商", - "SAML_Custom_Public_Cert": "Public Cert", + "SAML_Custom_Public_Cert": "公共证书内容", + "SAML_Custom_signature_validation_all": "验证所有签名", + "SAML_Custom_signature_validation_assertion": "验证断言签名", + "SAML_Custom_signature_validation_either": "验证任一签名", + "SAML_Custom_signature_validation_response": "验证响应签名", + "SAML_Custom_signature_validation_type": "签名验证类型", + "SAML_Custom_signature_validation_type_description": "如果没有提供自定义证书,此设置将被忽略。", "SAML_Custom_user_data_fieldmap": "用户数据字段映射", + "SAML_Custom_user_data_fieldmap_description": "设置用户数据字段(比如 E-mail)来自 LDAP 何处(如果能找到)。 例如:`{\"name\":\"cn\", \"email\":\"mail\"}` 会从属性 cn 中取出名字字段,从 mail 属性中取出 email 字段。有效字段包括 `name` 和 `email` 和 `username`,所有其他的字段将被作为 `customFields` 保存。\n分配不可更改属性到 `__identifier__` 键使用它作为用户标识符。\n您也可以使用正则表达式和模版。除非引用正则表达式结果,模版将先被处理。\n```{\n \"email\": \"mail\",\n \"username\": {\n \"fieldName\": \"mail\",\n \"regex\": \"(.*)@.+$\",\n \"template\": \"user-__regex__\"\n },\n \"name\": {\n \"fieldNames\": [\n \"firstName\",\n \"lastName\"\n ],\n \"template\": \"__firstName__ __lastName__\"\n },\n \"__identifier__\": \"uid\"\n}```", "SAML_Custom_Username_Field": "用户名字段名称", "SAML_Custom_Username_Normalize": "标准化用户名", - "SAML_Custom_Username_Normalize_Lowercase": "转成小写", - "SAML_Custom_Username_Normalize_None": "没有规范化", - "SAML_Default_User_Role": "默认用户身份", - "SAML_Default_User_Role_Description": "您可以制定多个身份,用逗号分隔。", + "SAML_Custom_Username_Normalize_Lowercase": "至小写", + "SAML_Custom_Username_Normalize_None": "无标准化", + "SAML_Default_User_Role": "默认用户角色", + "SAML_Default_User_Role_Description": "您可以指定多个角色,用逗号分隔。", + "SAML_Identifier_Format": "标识符格式", + "SAML_Identifier_Format_Description": "将此留空以忽略请求的 NameID 策略", + "SAML_LogoutRequest_Template": "登出请求模版", + "SAML_LogoutRequest_Template_Description": "下列变量可用:\n- **\\_\\_newId\\_\\_**: 随机生成的 ID 字符串\n- **\\_\\_instant\\_\\_**: 当前时间戳\n- **\\_\\_idpSLORedirectURL\\_\\_**: 要重定向至的 IDP 单点登出 URL\n- **\\_\\_issuer\\_\\_**: __Custom Issuer__ 设置值\n- **\\_\\_identifierFormat\\_\\_**: __Identifier Format__ 设置值\n- **\\_\\_nameID\\_\\_**: 当用户登录时从 Idp 获取的 NameID\n- **\\_\\_sessionIndex\\_\\_**: 当用户登录时从 Idp 获取的 sessionIndex", + "SAML_LogoutResponse_Template": "登出响应模版", + "SAML_LogoutResponse_Template_Description": "下列变量可用:\n- **\\_\\_newId\\_\\_**: 随机生成的 ID 字符串\n- **\\_\\_inResponseToId\\_\\_**: 从 Idp 从获取到的登出请求 ID\n- **\\_\\_instant\\_\\_**: 当前时间戳\n- **\\_\\_idpSLORedirectURL\\_\\_**: 要重定向至的 IDP 单点登出 URL\n- **\\_\\_issuer\\_\\_**: __Custom Issuer__ 设置值\n- **\\_\\_identifierFormat\\_\\_**: __Identifier Format__ 设置值\n- **\\_\\_nameID\\_\\_**: 当用户登录时从 Idp 获取的 NameID\n- **\\_\\_sessionIndex\\_\\_**: 当用户登录时从 Idp 获取的 sessionIndex", + "SAML_Metadata_Certificate_Template_Description": "下列变量可用:\n- **\\_\\_certificate\\_\\_**: 用于断言加密的私有证书", + "SAML_Metadata_Template": "元数据模版", + "SAML_Metadata_Template_Description": "下列变量可用:\n- **\\_\\_sloLocation\\_\\_**: Rocket.Chat 单点登出 URL\n- **\\_\\_issuer\\_\\_**: __Custom Issuer__ 设置值.\n- **\\_\\_identifierFormat\\_\\_**: __Identifier Format__ 设置值.\n- **\\_\\_certificateTag\\_\\_**: 当配置了私有证书时,将包含 __Metadata Certificate Template__, 否则将被忽略\n- **\\_\\_callbackUrl\\_\\_**: Rocket.Chat 回调 URL.", + "SAML_MetadataCertificate_Template": "元数据证书模版", + "SAML_NameIdPolicy_Template": "NameID 策略模版", + "SAML_NameIdPolicy_Template_Description": "您可以在授权请求模版中使用这里的任何变量。", "SAML_Role_Attribute_Name": "身份属性名", "SAML_Role_Attribute_Name_Description": "如果在SAML回应中找到此属性,则其值将用作新用户的角色名称。", + "SAML_Role_Attribute_Sync": "同步用户角色", + "SAML_Role_Attribute_Sync_Description": "在登录时同步 SAML 用户角色(覆盖本地用户角色)", "SAML_Section_1_User_Interface": "用户界面", + "SAML_Section_2_Certificate": "证书", + "SAML_Section_3_Behavior": "行为", + "SAML_Section_4_Roles": "角色", + "SAML_Section_5_Mapping": "映射", + "SAML_Section_6_Advanced": "高级", + "SAML_Custom_channels_update": "在每次登陆时更新聊天室订阅", + "SAML_Custom_channels_update_description": "在每次登陆时确保用户是所有匹配 SAML 断言频道的成员。", + "SAML_Custom_include_private_channels_update": "在聊天室订阅中包含私人聊天室", + "SAML_Custom_include_private_channels_update_description": "将用户添加至任何匹配 SMAL 断言的私人聊天室。", "Saturday": "星期六", "Save": "保存", "Save_changes": "保存修改", "Save_Mobile_Bandwidth": "节约移动网络带宽", "Save_to_enable_this_action": "保存以启用该操作", "Save_To_Webdav": "保存到 WebDAV", - "Save_your_encryption_password": "保存加密密码", - "save-others-livechat-room-info": "保存其他即时聊天室信息", - "save-others-livechat-room-info_description": "保存来自其他即时聊天频道的信息的权限", + "Save_your_encryption_password": "保存您的加密密码", + "save-others-livechat-room-info": "保存其他 Omnichannel 聊天室信息", + "save-others-livechat-room-info_description": "保存其他 Omnichannel 聊天室信息的权限", "Saved": "已保存", "Saving": "保存中", "Scan_QR_code": "使用Google身份验证器、Authy或Duo等身份验证器应用扫描这个二维码。它将显示一个6位数的代码,您需要在下面输入这串代码。", "Scan_QR_code_alternative_s": "如果您无法扫描二维码,可以手动输入代码:", "Scope": "范围", + "Score": "评分", + "Screen_Lock": "屏幕锁", "Screen_Share": "屏幕共享", "Script_Enabled": "脚本已启用", "Search": "搜索", @@ -2891,20 +3392,28 @@ "Search_by_file_name": "按文件名搜索", "Search_by_username": "按用户名搜索", "Search_Channels": "搜索频道", + "Search_Chat_History": "搜索聊天历史", "Search_current_provider_not_active": "当前搜索提供程序不活动", + "Search_Integrations": "搜索继承", "Search_message_search_failed": "搜索请求失败", "Search_Messages": "搜索消息", + "Search_Files": "搜索文件", "Search_Page_Size": "页面大小", - "Search_Private_Groups": "搜索私有组", + "Search_Private_Groups": "搜索私人组", "Search_Provider": "搜索提供商", + "Search_Rooms": "搜索聊天室", "Search_Users": "搜索用户", "seconds": "秒", "Secret_token": "Secret 令牌", "Security": "安全", + "See_full_profile": "查看全部资料", "Select_a_department": "选择一个部门", + "Select_a_room": "选择聊天室", "Select_a_user": "选择一个用户", "Select_an_avatar": "请选择一个头像", "Select_an_option": "选择一个选项", + "Select_at_least_one_user": "选择至少一个用户", + "Select_at_least_two_users": "选择至少两个用户", "Select_department": "选择一个部门", "Select_file": "选择文件", "Select_role": "选择一个角色", @@ -2913,6 +3422,8 @@ "Select_user": "选择用户", "Select_users": "选择用户", "Selected_agents": "已选择的客服", + "Selected_departments": "已选择的部门", + "Selected_monitors": "已选择的监控", "Selecting_users": "正在选择用户", "Send": "发送", "Send_a_message": "发送一条消息", @@ -2925,24 +3436,41 @@ "Send_invitation_email_error": "您还没有提供任何有效的电子邮箱地址。", "Send_invitation_email_info": "您可以一次发送多个电子邮件邀请。", "Send_invitation_email_success": "您已成功发送邀请电子邮件至以下地址:", + "Send_me_the_code_again": "再次向我发送验证码", + "Send_request_on": "发送请求于", "Send_request_on_agent_message": "客服消息时发送请求", "Send_request_on_chat_close": "当聊天关闭时发送请求", + "Send_request_on_chat_queued": "于聊天等候处理时发送请求", + "Send_request_on_chat_start": "于聊天开始时发送请求", + "Send_request_on_chat_taken": "于聊天进行后发送请求", + "Send_request_on_forwarding": "于转发时发送请求", "Send_request_on_lead_capture": "发送潜在客户请求", "Send_request_on_offline_messages": "当显示离线消息时发送请求", "Send_request_on_visitor_message": "在访问者消息上发送请求", "Send_Test": "发送测试", + "Send_Test_Email": "发送测试邮件", + "Send_via_email": "通过邮件发送", + "Send_via_Email_as_attachment": "通过电子邮件作为附件发送", "Send_Visitor_navigation_history_as_a_message": "将访客导航历史记录作为消息发送", "Send_visitor_navigation_history_on_request": "根据要求发送访客导航历史", "Send_welcome_email": "发送欢迎邮件", "Send_your_JSON_payloads_to_this_URL": "将你的 JSON 信息发送到这个 URL。", "send-many-messages": "发送多条消息", + "send-omnichannel-chat-transcript": "发送 Omnichannel 会话记录", + "Sender_Info": "发送者信息", "Sending": "发送中", "Sent_an_attachment": "发送附件", + "Sent_from": "发送自", + "Separate_multiple_words_with_commas": "用逗号分隔多个词语", "Served_By": "服务于", + "Server": "服务器", + "Server_File_Path": "服务器文件路径", + "Server_Folder_Path": "服务器文件夹路径", "Server_Info": "服务器信息", "Server_Type": "服务器类型", "Service": "服务", "Service_account_key": "服务帐户密钥", + "Set_as_favorite": "设为收藏", "Set_as_leader": "设为领导", "Set_as_moderator": "设为主持", "Set_as_owner": "设为所有者", @@ -2953,7 +3481,7 @@ "set-owner": "设置所有者", "set-owner_description": "将其他用户设置为频道所有者的权限", "set-react-when-readonly": "设置只读时反应", - "set-react-when-readonly_description": "对只读通道中的消息作出反应的权限", + "set-react-when-readonly_description": "对只读通道中的消息作出回应的权限", "set-readonly": "设置只读", "set-readonly_description": "将频道设置为只读频道的权限", "Settings": "设置", @@ -2961,7 +3489,9 @@ "Setup_Wizard": "安装向导", "Setup_Wizard_Info": "我们将指导您设置第一位管理员用户,配置您的组织并注册您的服务器以接收免费推送通知等。", "Share_Location_Title": "分享位置信息?", + "Canned_responses": "自动回复", "Shared_Location": "共享位置", + "Shared_Secret": "共享的秘密", "Shortcut": "快捷方式", "Should_be_a_URL_of_an_image": "应当是一个图片的地址。", "Should_exists_a_user_with_this_username": "用户必须已存在。", @@ -2971,6 +3501,7 @@ "Show_Avatars": "显示头像", "Show_counter": "显示柜台", "Show_email_field": "显示电子邮件字段", + "Show_Message_In_Main_Thread": "在主讨论串中展示讨论串消息", "Show_more": "显示更多", "Show_name_field": "显示名称字段", "show_offline_users": "显示离线用户", @@ -2982,8 +3513,10 @@ "Show_room_counter_on_sidebar": "在侧边栏上显示房间计数器", "Show_Setup_Wizard": "显示安装向导", "Show_the_keyboard_shortcut_list": "显示键盘快捷键列表", - "Showing_archived_results": "显示 %s 已归档结果", + "Showing_archived_results": "显示 %s 归档结果", + "Showing_online_users": "显示:__total_showing__,在线:__online__, 总计:__total__ 用户", "Showing_results": "显示%s条结果", + "Showing_results_of": "展示结果 %s-%s 共 %s", "Sidebar": "侧边栏", "Sidebar_list_mode": "边栏频道列表模式", "Sign_in_to_start_talking": "登录以便开始聊天", @@ -2996,15 +3529,15 @@ "Slack_Users": "Slack 的用户 CSV", "SlackBridge_APIToken": "API 令牌", "SlackBridge_APIToken_Description": "你可以通过每行添加一个 API 令牌来配置多个 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 输出频道", "SlackBridge_Out_Channels_Description": "选择哪些频道将消息发回 Slack", "SlackBridge_Out_Enabled": "SlackBridge 输出已启用", "SlackBridge_Out_Enabled_Description": "选择 SlackBridge 是否也应该将您的消息发送回 Slack", - "SlackBridge_start": "@%s 已经在`#%s`启动了一个 SlackBridge 导入。完成后我们会通知您。", + "SlackBridge_start": "@%s 已于`#%s`启动了一个 SlackBridge 导入。完成后我们会通知您。", "Slash_Gimme_Description": "在您的消息前显示 ༼ つ ◕_◕ ༽つ", "Slash_LennyFace_Description": "在您的消息后显示 ( ͡° ͜ʖ ͡°)", "Slash_Shrug_Description": "在您的消息后显示 ¯\\ _(ツ)_ /¯", @@ -3024,6 +3557,8 @@ "Smarsh_MissingEmail_Email_Description": "电子邮件地址缺失时显示给用户帐户的电子邮件通常发生在机器人帐户中。", "Smarsh_Timezone": "Smarsh 时区", "Smileys_and_People": "表情与人物", + "SMS_Default_Omnichannel_Department": "Omnichannel 部门(默认)", + "SMS_Default_Omnichannel_Department_Description": "当设置时,新初始化的入站聊天将被路由至此部门", "SMS_Enabled": "短信功能已开启", "SMTP": "SMTP", "SMTP_Host": "SMTP 主机", @@ -3035,7 +3570,7 @@ "Snippet_Messages": "消息片段", "Snippet_name": "片段名称", "snippet-message": "片段消息", - "snippet-message_description": "创建片段讯息的权限", + "snippet-message_description": "创建代码片段消息的权限", "Snippeted_a_message": "创建了一个片段 __snippetLink__", "Social_Network": "社交网络", "Sorry_page_you_requested_does_not_exist_or_was_deleted": "对不起,您请求的网页不存在或被删除!", @@ -3051,7 +3586,7 @@ "Start": "开始", "Start_audio_call": "开始音频对话", "Start_Chat": "开始聊天", - "Start_of_conversation": "开始交谈", + "Start_of_conversation": "会话的开始", "Start_OTR": "开始无记录对话", "Start_video_call": "开始视频对话", "Start_video_conference": "开始视频会议?", @@ -3064,36 +3599,38 @@ "Statistics": "统计", "Statistics_reporting": "发送统计数据到 Rocket.Chat", "Statistics_reporting_Description": "通过发送您的统计数据,您会帮助我们确定有多少 Rocket.Chat 实例已被部署,以及系统表现如何,所以我们可以进一步改进。不要担心,因为没有用户信息会被发送,并且我们收到的所有信息都是保密的。", + "Stats_Active_Guests": "活跃访客", "Stats_Active_Users": "活跃用户", + "Stats_App_Users": "Rocket.Chat 应用用户", "Stats_Avg_Channel_Users": "平均频道人数", - "Stats_Avg_Private_Group_Users": "平均私人组人数", + "Stats_Avg_Private_Group_Users": "平均私人组用户", "Stats_Away_Users": "离线用户", "Stats_Max_Room_Users": "最大的房间人数", "Stats_Non_Active_Users": "非活跃用户", "Stats_Offline_Users": "脱机用户", "Stats_Online_Users": "在线用户", - "Stats_Total_Active_Apps": "活动应用程序总数", - "Stats_Total_Active_Incoming_Integrations": "总有效输入积分", - "Stats_Total_Active_Outgoing_Integrations": "有活动的外向集成总数", - "Stats_Total_Channels": "频道总数", - "Stats_Total_Connected_Users": "连接用户总数", - "Stats_Total_Direct_Messages": "点对点发送消息房间数", - "Stats_Total_Incoming_Integrations": "传入集成总数", - "Stats_Total_Installed_Apps": "已安装的应用总数", - "Stats_Total_Integrations": "集成总数", - "Stats_Total_Integrations_With_Script_Enabled": "启用脚本的集成总数", - "Stats_Total_Livechat_Rooms": "总计即时聊天房间", - "Stats_Total_Messages": "消息总数", - "Stats_Total_Messages_Channel": "频道消息总计", - "Stats_Total_Messages_Direct": "私聊总数", - "Stats_Total_Messages_Livechat": "在线聊天消息总计", - "Stats_Total_Messages_PrivateGroup": "私有群组消息总计", - "Stats_Total_Outgoing_Integrations": "外向集成总数", - "Stats_Total_Private_Groups": "私有组数", - "Stats_Total_Rooms": "房间总数", + "Stats_Total_Active_Apps": "总计活动应用", + "Stats_Total_Active_Incoming_Integrations": "总计活动入站集成", + "Stats_Total_Active_Outgoing_Integrations": "总计活动出站集成", + "Stats_Total_Channels": "总计频道", + "Stats_Total_Connected_Users": "总计连接用户", + "Stats_Total_Direct_Messages": "总计私聊聊天室", + "Stats_Total_Incoming_Integrations": "总计入站集成", + "Stats_Total_Installed_Apps": "总计已安装应用", + "Stats_Total_Integrations": "总计集成", + "Stats_Total_Integrations_With_Script_Enabled": "总计启用脚本的集成", + "Stats_Total_Livechat_Rooms": "总计 Omnichannel 聊天室", + "Stats_Total_Messages": "总计消息", + "Stats_Total_Messages_Channel": "总计频道消息", + "Stats_Total_Messages_Direct": "总计私聊消息", + "Stats_Total_Messages_Livechat": "总计 Omnichannel 消息", + "Stats_Total_Messages_PrivateGroup": "总计私人组消息", + "Stats_Total_Outgoing_Integrations": "总计出站集成", + "Stats_Total_Private_Groups": "总计私人组", + "Stats_Total_Rooms": "总计聊天室", "Stats_Total_Uploads": "总计上传", "Stats_Total_Uploads_Size": "总计上传大小", - "Stats_Total_Users": "用户总数", + "Stats_Total_Users": "总计用户", "Status": "状态", "StatusMessage": "状态消息", "StatusMessage_Change_Disabled": "你的 Rocket.Chat 管理员已禁止编辑自定义状态消息", @@ -3114,10 +3651,11 @@ "Success": "成功", "Success_message": "成功消息", "Successfully_downloaded_file_from_external_URL_should_start_preparing_soon": "从外部 URL 成功下载文件,即将开始准备", + "Suggestion_from_recent_messages": "基于最近消息进行建议", "Sunday": "星期日", "Support": "支持", "Support_Cordova_App": "支持Cordova应用", - "Support_Cordova_App_Alert": "此功能已不推荐使用并将在下一个主要版本中移出", + "Support_Cordova_App_Alert": "此功能已过时并将在下一个主要版本中移除", "Support_Cordova_App_Description": "允许基于Cordova技术的旧版移动应用访问服务器,从而为某些API启用CORS", "Survey": "调查", "Survey_instructions": "根据问题填写您的满意度,1 代表完全不满意,5 代表非常满意。", @@ -3130,7 +3668,7 @@ "Sync_Users": "同步用户", "System_messages": "系统消息", "Tag": "标签", - "Tag_removed": "标签已移除", + "Tag_removed": "已移除标签", "Take_it": "拿去!", "Target user not allowed to receive messages": "目标用户不允许接收消息", "TargetRoom": "目标Room", @@ -3146,18 +3684,22 @@ "Thank_you_exclamation_mark": "谢谢!", "Thank_you_for_your_feedback": "感谢您的反馈", "The_application_name_is_required": "应用名称必填", - "The_channel_name_is_required": "频道名称必填", + "The_channel_name_is_required": "频道名称为必填", "The_emails_are_being_sent": "邮件已发送。", + "The_empty_room__roomName__will_be_removed_automatically": "空房间 __roomName__ 将被自动移除。", "The_field_is_required": "字段 %s 必填", "The_image_resize_will_not_work_because_we_can_not_detect_ImageMagick_or_GraphicsMagick_installed_in_your_server": "无法调整图片尺寸,因为我们无法在服务器上找到已安装的 ImageMagick 或 GraphicsMagick 。", "The_message_is_a_discussion_you_will_not_be_able_to_recover": "此消息是一个讨论你将无法恢复此消息!", + "The_mobile_notifications_were_disabled_to_all_users_go_to_Admin_Push_to_enable_the_Push_Gateway_again": "所有用户的移动端通知都已禁用。前往 “管理 > 推送” 再次启用推送网关", + "The_necessary_browser_permissions_for_location_sharing_are_not_granted": "未准许获取分享位置所需的浏览器权限", "The_peer__peer__does_not_exist": "对等端 __peer__ 不存在。", "The_redirectUri_is_required": "跳转 URI 必填", + "The_selected_user_is_not_a_monitor": "所选用户非监控", "The_selected_user_is_not_an_agent": "所选用户不是代理", "The_server_will_restart_in_s_seconds": "服务器将在 %s 秒后重启", "The_setting_s_is_configured_to_s_and_you_are_accessing_from_s": "%s已被设置为%s但你是从%s访问的!", "The_user_s_will_be_removed_from_role_s": "用户 %s 将被移除 %s 角色", - "The_user_will_be_removed_from_s": "该用户将从 %s 中被删除", + "The_user_will_be_removed_from_s": "将从 %s 中移除该用户", "The_user_wont_be_able_to_type_in_s": "该用户将被禁止在 %s 房间中发言", "Theme": "主题", "theme-color-attention-color": "关注颜色", @@ -3186,6 +3728,7 @@ "theme-color-rc-color-error-light": "错误指示灯", "theme-color-rc-color-link-active": "当前链接", "theme-color-rc-color-primary": "主", + "theme-color-rc-color-primary-background": "主要背景", "theme-color-rc-color-primary-dark": "主暗色", "theme-color-rc-color-primary-darkest": "主最暗色", "theme-color-rc-color-primary-light": "主亮色", @@ -3214,16 +3757,22 @@ "There_are_no_agents_added_to_this_department_yet": "该部门尚未分配任何客服。", "There_are_no_applications": "尚未添加 oAuth 应用程序。", "There_are_no_applications_installed": "目前还没有安装 Rocket.Chat 应用程序。", + "There_are_no_available_monitors": "无可用监控", + "There_are_no_departments_added_to_this_tag_yet": "尚未有部门添加至此标签", + "There_are_no_departments_added_to_this_unit_yet": "尚未有部门添加至此单位", + "There_are_no_departments_available": "无可用部门", "There_are_no_integrations": "没有集成", + "There_are_no_monitors_added_to_this_unit_yet": "尚未有监控添加至此单元", "There_are_no_personal_access_tokens_created_yet": "尚未创建个人访问令牌。", "There_are_no_users_in_this_role": "该角色没有对应用户。", - "There_is_one_or_more_apps_in_an_invalid_state_Click_here_to_review": "一个或多个应用程序处于无效状态。单击此处查看。", + "There_is_one_or_more_apps_in_an_invalid_state_Click_here_to_review": "一个或多个应用程序处于无效状态。点击此处查看。", "This_agent_was_already_selected": "该代理已被选中", - "This_conversation_is_already_closed": "该会话已结束!", + "This_conversation_is_already_closed": "该会话已关闭。", "This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password": "此电子邮箱地址已被使用但未经验证。请修改您的密码。", "This_is_a_desktop_notification": "这是一条桌面通知", "This_is_a_push_test_messsage": "这是一条测试消息", "This_message_was_rejected_by__peer__peer": "此消息被对等端 __peer__ 拒绝。", + "This_monitor_was_already_selected": "已选中监控", "This_month": "这个月", "This_room_has_been_archived_by__username_": "此聊天室已被 __username__ 归档", "This_room_has_been_unarchived_by__username_": "此聊天室已被 __username__ 取消归档", @@ -3233,7 +3782,9 @@ "Threads": "讨论串", "Thursday": "星期四", "Time_in_seconds": "时间(秒)", + "Timeout": "超时", "Timeouts": "超时", + "Timezone": "时区", "Title": "标题", "Title_bar_color": "标题栏颜色", "Title_bar_color_offline": "离线标题栏颜色", @@ -3245,51 +3796,79 @@ "To_users": "给用户", "Today": "今天", "Toggle_original_translated": "切换地区/语言", + "toggle-room-e2e-encryption": "开关聊天室端到端加密", "Token": "令牌", "Token_Access": "令牌访问", "Token_Controlled_Access": "令牌受控访问", "Token_required": "需要令牌", - "Tokenpass_Channel_Label": "Tokenpass Channel", - "Tokenpass_Channels": "令牌 Channel", + "Tokenpass_Channel_Label": "Tokenpass 频道", + "Tokenpass_Channels": "Tokenpass 频道", "Tokens_Minimum_Needed_Balance": "最低需要的令牌余额", "Tokens_Minimum_Needed_Balance_Description": "在每个令牌上设置最低需要的余额。空白或“0”不限制。", "Tokens_Minimum_Needed_Balance_Placeholder": "平衡值", "Tokens_Required": "需要令牌", "Tokens_Required_Input_Description": "输入一个或多个以逗号分隔的令牌资产名称。", - "Tokens_Required_Input_Error": "输入的令牌无效。", + "Tokens_Required_Input_Error": "无效带类型令牌。", "Tokens_Required_Input_Placeholder": "令牌资产名称", "Topic": "话题", "Total": "总计", - "Total_abandoned_chats": "放弃的聊天总数", - "Total_conversations": "对话总数", - "Total_Discussions": "讨论总数", - "Total_messages": "消息总数", - "Total_Threads": "帖子总数", - "Total_visitors": "访问者总数", - "Tourism": "旅游", + "Total_abandoned_chats": "总计放弃的聊天", + "Total_conversations": "总计对话", + "Total_Discussions": "总计讨论", + "Total_messages": "总计消息", + "Total_Threads": "总计讨论串", + "Total_visitors": "总计访客", + "TOTP Invalid [totp-invalid]": "代码或密码无效", + "TOTP_reset_email": "两步验证 TOTP 重置通知", + "TOTP_Reset_Other_Key_Warning": "重置当前的两步验证 TOTP 将使用户登出。用户稍后能再次设置两步验证。", + "totp-disabled": "您没有为您的用户启用两步验证登录。", + "totp-invalid": "代码或密码无效", + "totp-required": "需要 TOTP", + "Transcript": "聊天记录", "Transcript_Enabled": "询问访问者是否会在聊天结束后收到抄本", "Transcript_message": "查询历史记录时要显示的消息", - "Transcript_of_your_livechat_conversation": "你的即时聊天谈话记录。", - "transfer-livechat-guest": "转移聊天用户", + "Transcript_of_your_livechat_conversation": "您的 Omnichannel 会话记录。", + "Transcript_Request": "聊天记录请求", + "transfer-livechat-guest": "转移 LiveChat 访客", "Translate": "翻译", "Translated": "翻译", "Translations": "翻译", "Travel_and_Places": "旅行与地点", - "Trigger_removed": "触发器已删除", + "Trigger_removed": "已移除的触发器", "Trigger_Words": "触发关键词", "Triggers": "触发器", + "Troubleshoot": "疑难解答", + "Troubleshoot_Description": "这些设置只能在 Rocket.Chat 开发或支持团队的指导下启用。如果您不知道自己在做什么,请不要碰它们!", + "Troubleshoot_Disable_Data_Exporter_Processor": "禁用数据输出处理器", + "Troubleshoot_Disable_Data_Exporter_Processor_Alert": "此设定停止处理所有来自用户的导出请求,因此他们将不会收到导出自己数据的链接!", + "Troubleshoot_Disable_Instance_Broadcast": "禁用实例广播", + "Troubleshoot_Disable_Instance_Broadcast_Alert": "这个设置可以防止 Rocket.Chat 实例向其他实例发送事件,它可能会导致同步问题和行为不正常!", + "Troubleshoot_Disable_Livechat_Activity_Monitor": "禁用 Livechat 活动监控", + "Troubleshoot_Disable_Livechat_Activity_Monitor_Alert": "此设置可以停止处理 livechat 访客会话,将导致统计工作无法正常进行!", "Troubleshoot_Disable_Notifications": "禁用通知", + "Troubleshoot_Disable_Notifications_Alert": "这个设置可以完全关闭通知系统;声音、桌面通知、移动端通知和邮件都会停止!", + "Troubleshoot_Disable_Presence_Broadcast": "禁用在场广播", + "Troubleshoot_Disable_Presence_Broadcast_Alert": "这个设置可以防止所有的实例将用户的状态变化发送给他们的客户端,使所有的用户保持他们第一次加载时的存在状态。", + "Troubleshoot_Disable_Sessions_Monitor": "禁用会话监控", + "Troubleshoot_Disable_Sessions_Monitor_Alert": "这个设置停止了对用户会话的处理,将导致统计工作无法正常进行!", + "Troubleshoot_Disable_Statistics_Generator": "禁用统计生成器", + "Troubleshoot_Disable_Statistics_Generator_Alert": "这个设置会停止处理所有的统计数据,使信息页面过时,直到有人点击刷新按钮,并可能导致系统中的其他信息缺失!", + "Troubleshoot_Disable_Workspace_Sync": "禁用工作区同步", + "Troubleshoot_Disable_Workspace_Sync_Alert": "该设置会停止同步该服务器到 Rocket.Chat 云端,并可能导致市场和企业许可证出现问题!", "True": "是", "Tuesday": "星期二", "Turn_OFF": "关掉", "Turn_ON": "打开", "Two Factor Authentication": "两步验证", - "Two-factor_authentication": "双因素认证", - "Two-factor_authentication_disabled": "双因素身份验证已被禁用", - "Two-factor_authentication_enabled": "启用双因素身份验证", - "Two-factor_authentication_is_currently_disabled": "双因素认证目前被禁用", + "Two-factor_authentication": "基于 TOTP 的两步验证", + "Two-factor_authentication_disabled": "两步验证被禁用", + "Two-factor_authentication_email": "基于邮件的两步验证", + "Two-factor_authentication_email_is_currently_disabled": "基于邮件的两步验证当前被禁用", + "Two-factor_authentication_enabled": "启用两步验证", + "Two-factor_authentication_is_currently_disabled": "基于 TOTP 的两步验证当前被禁用", "Two-factor_authentication_native_mobile_app_warning": "警告:一旦启用此功能,您将无法使用密码登录原生移动应用(Rocket.Chat +),直到他们实施2FA。", "Type": "类型", + "Types_and_Distribution": "类型和分发", "Type_your_email": "输入您的电子邮件地址", "Type_your_job_title": "输入你的职位", "Type_your_message": "输入您的留言", @@ -3298,11 +3877,11 @@ "Type_your_password": "输入您的密码", "Type_your_username": "输入您的用户名", "UI_Allow_room_names_with_special_chars": "允许Room名称中的特殊字符", - "UI_Click_Direct_Message": "点击创建直接消息", + "UI_Click_Direct_Message": "点击以创建私聊", "UI_Click_Direct_Message_Description": "跳过打开个人信息标签页,直接进入会话", "UI_DisplayRoles": "显示角色", "UI_Group_Channels_By_Type": "按类型分组频道", - "UI_Merge_Channels_Groups": "合并频道与私人组", + "UI_Merge_Channels_Groups": "将私人组与频道合并", "UI_Show_top_navbar_embedded_layout": "在嵌入式界面中显示顶部导航栏", "UI_Unread_Counter_Style": "未读计数器风格", "UI_Use_Name_Avatar": "使用全名缩写来生成默认头像", @@ -3310,22 +3889,28 @@ "unable-to-get-file": "无法取得文件", "Unarchive": "取消归档", "unarchive-room": "解除Room的归档", - "unarchive-room_description": "允许解除归档频道的权限", + "unarchive-room_description": "取消频道归档的权限", + "Unavailable": "不可用", "Unblock_User": "取消阻止用户", + "Uncheck_All": "取消全部选择", + "Uncollapse": "展开", "Undefined": "未定义", "Unfavorite": "取消收藏", "Unfollow_message": "取消关注消息", "Unignore": "屏蔽", "Uninstall": "卸载", + "Unit_removed": "已移除的单位", + "Unknown_Import_State": "未知导入状态", "Unlimited": "无限", "Unmute_someone_in_room": "取消某人在聊天室中的禁言", "Unmute_user": "取消禁言", "Unnamed": "未命名", "Unpin": "取消固定", "Unpin_Message": "取消消息固定", + "unpinning-not-allowed": "不允许取消固定", "Unread": "未读", "Unread_Count": "未读数", - "Unread_Count_DM": "私聊消息的未读统计", + "Unread_Count_DM": "未读私聊消息数", "Unread_Messages": "未读消息", "Unread_on_top": "未读在最上面", "Unread_Rooms": "未读房间", @@ -3333,6 +3918,9 @@ "Unread_Tray_Icon_Alert": "未读托盘图标提醒", "Unstar_Message": "取消星标", "Update": "更新", + "Update_EnableChecker": "启用更新检查", + "Update_EnableChecker_Description": "自动检查来自 Rocket.Chat 开发者的新更新/重要消息,并在可用时接收通知。每一个新版本的通知都会以可点击的横幅和 Rocket.Ca t机器人的消息的形式出现一次,两者均为仅管理员可见。", + "Update_every": "更新于每", "Update_LatestAvailableVersion": "更新至最新版本", "Update_to_version": "更新到 __version__", "Update_your_RocketChat": "更新你的 Rocket.Chat", @@ -3348,14 +3936,20 @@ "Uploading_file": "文件上传中……", "Uptime": "运行时间", "URL": "URL", - "URL_room_prefix": "Room URL 前缀", + "URL_room_hash": "启用聊天室名称摘要", + "URL_room_hash_description": " Jitsi 实例不使用任何认证机制时建议启用。", + "URL_room_prefix": "聊天室 URL 前缀", + "URL_room_suffix": "聊天室 URL 后缀", "Use_account_preference": "使用账户特性", "Use_Emojis": "使用表情", "Use_Global_Settings": "使用全局设置", "Use_initials_avatar": "使用您用户名的首字母缩写", "Use_minor_colors": "使用次要调色板(默认继承主要颜色)", + "Use_Room_configuration": "使用聊天室配置并覆盖服务器配置", + "Use_Server_configuration": "使用服务器配置", "Use_service_avatar": "使用 %s 头像", "Use_this_response": "使用这个回复", + "Use_response": "使用回复", "Use_this_username": "使用此用户名", "Use_uploaded_avatar": "使用上传头像", "Use_url_for_avatar": "为头像使用链接", @@ -3364,15 +3958,18 @@ "User Search": "用户搜索", "User Search (Group Validation)": "用户搜索(组校验)", "User__username__is_now_a_leader_of__room_name_": "用户 __username__ 现在是 __room_name__ 的领导者", - "User__username__is_now_a_moderator_of__room_name_": "用户 __username__ 现在是 __room_name__ 的主持了", - "User__username__is_now_a_owner_of__room_name_": "用户 __username__ 现在是 __room_name__ 的拥有者了", - "User__username__removed_from__room_name__leaders": "用户 __username__ 已被从 __room_name__ 的领导者中删除", - "User__username__removed_from__room_name__moderators": "用户 __username__ 不再是 __room_name__ 的主持了", + "User__username__is_now_a_moderator_of__room_name_": "用户 __username__ 现在是 __room_name__ 的主持", + "User__username__is_now_a_owner_of__room_name_": "用户 __username__ 现在是 __room_name__ 的拥有者", + "User__username__muted_in_room__roomName__": "用户 __username__ 在聊天室 __roomName__ 中被禁言", + "User__username__removed_from__room_name__leaders": "用户 __username__ 不再是 __room_name__ 的领导者", + "User__username__removed_from__room_name__moderators": "用户 __username__ 不再是 __room_name__ 的主持", "User__username__removed_from__room_name__owners": "用户 __username__ 不再是 __room_name__ 的拥有者了", + "User__username__unmuted_in_room__roomName__": "用户 __username__ 在聊天室 __roomName__ 中被取消禁言", "User_added": "用户已添加", "User_added_by": "__user_by__添加了__user_added__。", "User_added_successfully": "添加新用户成功", "User_and_group_mentions_only": "仅用户和组提及", + "User_created_successfully!": "用户创建成功!", "User_default": "用户默认", "User_doesnt_exist": "不存在名为 `@%s` 的用户。", "User_e2e_key_was_reset": "用户端到端密钥已成功重置。", @@ -3381,7 +3978,7 @@ "User_has_been_deleted": "用户已被删除", "User_has_been_ignored": "用户已被忽略", "User_has_been_muted_in_s": "该用户已在 %s 中被禁言", - "User_has_been_removed_from_s": "该用户已从 %s 中被删除", + "User_has_been_removed_from_s": "已从移除 %s 中用户", "User_has_been_unignored": "用户不再被忽略", "User_Info": "用户信息", "User_Interface": "用户界面", @@ -3395,7 +3992,7 @@ "User_joined_conversation": "加入了会话", "User_left": "已离开频道。", "User_left_female": "已退出本频道。", - "User_left_male": "已退出本频道。", + "User_left_male": "已退出频道。", "User_logged_out": "用户已注销", "User_management": "用户管理", "User_mentions_only": "仅用户提及", @@ -3405,12 +4002,13 @@ "User_not_found_or_incorrect_password": "用户不存在或密码错误", "User_or_channel_name": "用户或者频道名称", "User_Presence": "在线状态", - "User_removed": "用户已被删除", - "User_removed_by": "__user_by__ 已删除用户 __user_removed__。", + "User_removed": "已移除用户", + "User_removed_by": "__user_by__ 移除了用户 __user_removed__", "User_sent_a_message_on_channel": "__username__在__channel__中发送了一条消息", "User_sent_a_message_to_you": "__username__向您发送了一条消息", "user_sent_an_attachment": "__user__发送了一个附件", "User_Settings": "用户设置", + "User_started_a_new_conversation": "__username__ 开始了新的会话", "User_unmuted_by": "__user_by__ 已解除用户 __user_unmuted__的禁言。", "User_unmuted_in_room": "用户在聊天室中的禁言已被取消", "User_updated_successfully": "用户更新成功", @@ -3419,7 +4017,7 @@ "User_uploaded_file": "上传了一个文件", "User_uploaded_image": "上传了一张图片", "user-generate-access-token": "用户生成访问令牌", - "user-generate-access-token_description": "允许用户生成访问令牌", + "user-generate-access-token_description": "生成用户访问令牌的权限", "UserData_EnableDownload": "启用用户数据下载", "UserData_FileSystemPath": "系统路径(导出的文件)", "UserData_FileSystemZipPath": "系统路径(压缩文件)", @@ -3430,8 +4028,9 @@ "UserDataDownload_CompletedRequestExistedWithLink_Text": "你的数据已生成。点击此处以下载。", "UserDataDownload_EmailBody": "您的数据文件现在已准备好下载。点击这里下载它。", "UserDataDownload_EmailSubject": "您的数据文件已准备好下载", - "UserDataDownload_Requested": "下载要求的文件", - "UserDataDownload_RequestExisted_Text": "您的数据文件已经生成。准备好后,下载它的链接将发送到您的电子邮件地址。在您之前,队列中有__pending_operations__个操作要运行。", + "UserDataDownload_Requested": "已请求下载文件", + "UserDataDownload_Requested_Text": "将您的数据文件。准备好后,下载它的链接将发送到您的电子邮件地址。在您之前,队列中有__pending_operations__ 个操作要运行。", + "UserDataDownload_RequestExisted_Text": "您的数据文件已经生成。准备好后,下载它的链接将发送到您的电子邮件地址。在您之前,队列中有__pending_operations__ 个操作要运行。", "Username": "用户名", "Username_already_exist": "此用户名已存在。请尝试其他用户名。", "Username_and_message_must_not_be_empty": "用户名和消息内容不能为空。", @@ -3442,7 +4041,7 @@ "Username_doesnt_exist": "用户名 `%s` 不存在。", "Username_ended_the_OTR_session": "__username__ 结束了无记录对话", "Username_invalid": "%s 不是一个有效的用户名, 只能使用字母、数字、连字符和下划线", - "Username_is_already_in_here": "`@%s` 已存在。", + "Username_is_already_in_here": "`@%s` 已存在于此。", "Username_is_not_in_this_room": "用户 `#%s` 不在该聊天室中。", "Username_Placeholder": "请输入用户名...", "Username_title": "注册用户名", @@ -3450,22 +4049,31 @@ "Users": "用户", "Users must use Two Factor Authentication": "用户必须使用两步验证", "Users_added": "用户已被添加", + "Users_and_rooms": "用户和聊天室", + "Users_by_time_of_day": "按每日时间段的用户", "Users_in_role": "用户存在于该角色", + "Users_key_has_been_reset": "用户的密钥已被重置", + "Users_reacted": "回应过的用户", + "Users_TOTP_has_been_reset": "用户的 TOTP 已被重置", "Uses": "使用次数", "Uses_left": "剩余使用次数", "UTF8_Names_Slugify": "着重显示 UTF-8 名字", "UTF8_Names_Validation": "UTF-8 名称验证", - "UTF8_Names_Validation_Description": "用来校验用户名称和频道名称的正则表达式", + "UTF8_Names_Validation_Description": "用来校验用户和频道名称的正则表达式", "Validate_email_address": "验证邮箱", + "Validation": "验证", + "Value_messages": "__value__ 消息", + "Value_users": "__value__ 用户", "Verification": "验证", "Verification_Description": "您可以使用以下占位符: [Verification_Url] 代表验证网址。[姓名],[fname],[lname]分别代表用户的全名,名字或姓氏。用户的电子邮件为[email]。应用程序名称和URL分别为[Site_Name]和[Site_URL]。", - "Verification_Email": "点击这里 验证你的账户。", - "Verification_email_body": "您已在[Site_Name]上成功创建了一个帐户。请单击下面的按钮确认您的电子邮件地址并完成注册。", + "Verification_Email": "点击 这里 验证你的垫邮件地址。", + "Verification_email_body": "请点击下面的按钮确认您的电子邮件地址。", "Verification_email_sent": "确认邮件已发送", - "Verification_Email_Subject": "[Site_Name] - 验证你的账户", + "Verification_Email_Subject": "[Site_Name] - 邮件地址验证", "Verified": "已验证", "Verify": "验证", "Verify_your_email": "验证您的电子邮件", + "Verify_your_email_for_the_code_we_sent": "检查您的邮箱以获得我们发送的验证码", "Version": "版本", "Version_version": "版本 __version__", "Video Conference": "视频会议", @@ -3482,8 +4090,8 @@ "View_the_Logs_for": "查看 \"__name__\" 的日志", "view-broadcast-member-list": "在广播室中查看会员列表", "view-c-room": "查看公共频道", - "view-c-room_description": "允许查看公共频道", - "view-canned-responses": "查看罐装回复", + "view-c-room_description": "查看公共频道的权限", + "view-canned-responses": "查看自动回复", "view-d-room": "查看私聊消息", "view-d-room_description": "查看私聊信息的权限", "view-full-other-user-info": "查看完整的其他用户信息", @@ -3491,32 +4099,36 @@ "view-history": "查看历史", "view-history_description": "查看频道历史记录的权限", "view-join-code": "查看加入代码", - "view-join-code_description": "允许查看频道加入代码", + "view-join-code_description": "查看频道加入码的权限", "view-joined-room": "查看加入的Room", "view-joined-room_description": "允许查看当前加入的频道", - "view-l-room": "查看即时聊天室", - "view-l-room_description": "查看即时聊天频道的权限", - "view-livechat-analytics": "查看即时聊天分析", - "view-livechat-departments": "查看客服聊天部门", - "view-livechat-manager": "查看即时聊天管理员", - "view-livechat-manager_description": "查看其他即时聊天管理员的权限", - "view-livechat-queue": "查看聊天队列", - "view-livechat-rooms": "查看即时聊天室", - "view-livechat-rooms_description": "查看其他实时聊天频道的权限", + "view-l-room": "查看 Omnichannel 聊天室", + "view-l-room_description": "查看 Omnichannel 聊天室的权限", + "view-livechat-analytics": "查看 Omnichannel 分析", + "view-livechat-departments": "查看 Omnichannel 部门", + "view-livechat-manager": "查看 Omnichannel 管理员", + "view-livechat-manager_description": "查看其他 Omnichannel 管理员的权限", + "view-livechat-monitor": "查看 Livechat 监控", + "view-livechat-queue": "查看 Omnichannel 队列", + "view-livechat-room-closed-by-another-agent": "查看其他客服关闭的 Omnichannel 聊天室", + "view-livechat-room-closed-same-department": "查看其他同部门客服关闭的 Omnichannel 聊天室", + "view-livechat-rooms": "查看 Omnichannel 聊天室", + "view-livechat-rooms_description": "查看其他 Omnichannel 聊天室的权限", + "view-livechat-unit": "查看 Livechat 单位", "view-logs": "查看日志", "view-logs_description": "查看服务器日志的权限", "view-other-user-channels": "查看其他用户频道", "view-other-user-channels_description": "查看其他用户拥有频道的权限", "view-outside-room": "查看外部聊天室", "view-outside-room_description": "查看房间外用户的权限", - "view-p-room": "查看私人Room", + "view-p-room": "查看私人聊天室", "view-p-room_description": "允许查看私人频道", "view-privileged-setting": "查看特权设置", "view-privileged-setting_description": "查看设置的权限", "view-room-administration": "查看Room管理", - "view-room-administration_description": "查看公共,私人和直接的消息统计的权限。不包括查看对话或归档", + "view-room-administration_description": "查看公共,私人和私聊消息统计的权限。不包括查看对话或归档的能力", "view-statistics": "查看统计", - "view-statistics_description": "查看系统统计信息的权限,如登录的用户数量,房间数量,操作系统信息", + "view-statistics_description": "查看系统统计信息的权限,如登录的用户数量,聊天室数量,操作系统信息", "view-user-administration": "查看用户管理", "view-user-administration_description": "访问当前登录的其他用户的部分只读列表视图的权限。使用此权限不能访问用户帐户信息", "Viewing_room_administration": "正在查看聊天室管理", @@ -3524,15 +4136,22 @@ "Visible": "可见", "Visit_Site_Url_and_try_the_best_open_source_chat_solution_available_today": "访问 __Site_URL__ 并尝试最好的开源即时消息解决方案!", "Visitor": "访客", + "Visitor_Email": "访客电子邮件", "Visitor_Info": "访客信息", + "Visitor_message": "访客消息", + "Visitor_Name": "访客名称", + "Visitor_Name_Placeholder": "请输入访客名称…", "Visitor_Navigation": "游客导航", "Visitor_page_URL": "访客页面地址", "Visitor_time_on_site": "访客网站停留时间", "Wait_activation_warning": "您的帐户必须由管理员手工激活后才能登录。", "Waiting_queue": "等待队列", - "Waiting_queue_message": "等待消息队列", + "Waiting_queue_message": "等待队列消息", + "Waiting_queue_message_description": "访客进入等待队列时显示的消息", "Warning": "警告", "Warnings": "警告", + "WAU_value": "WAU __value__", + "We_appreciate_your_feedback": "我们很感谢您的反馈", "We_are_offline_Sorry_for_the_inconvenience": "现在没有人在线,带来不便请您谅解。", "We_have_sent_password_email": "我们已经向您发送密码重置的电子邮件。如果您没有收到邮件,请重试。", "We_have_sent_registration_email": "我们已经向您发出一封电子邮件,以确认您的注册。如果您没有收到邮件,请重试。", @@ -3545,51 +4164,62 @@ "Webdav_Username": "WebDAV 用户名", "webdav-account-saved": "WebDAV 帐户已保存", "webdav-account-updated": "WebDAV 账户已更新", + "Webhook_Details": "WebHook 详情", "Webhook_URL": "WebHook 地址", "Webhooks": "Webhooks", "WebRTC_direct_audio_call_from_%s": "来自 %s 的直接音频通话", "WebRTC_direct_video_call_from_%s": "来自 %s 的直接视频通话", - "WebRTC_Enable_Channel": "启用公共频道", - "WebRTC_Enable_Direct": "启用私聊", - "WebRTC_Enable_Private": "启用私有频道", + "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_monitor_call_from_%s": "监控来自 %s 的通话", "WebRTC_Servers": "STUN/TURN 服务器 ", "WebRTC_Servers_Description": "用逗号分隔STUN和TURN服务器的列表。 用户名,密码和端口格式支持`username:password@stun:host:port` 和 `username:password@turn:host:port`。", "Website": "网站", "Wednesday": "星期三", + "Weekly_Active_Users": "每周活跃用户", "Welcome": "欢迎 %s", + "Welcome_to": "欢迎来到 __Site_Name__", "Welcome_to_the": "欢迎来到", - "Why_do_you_want_to_report_question_mark": "你为什么要举报?", + "When": "当", + "When_a_line_starts_with_one_of_there_words_post_to_the_URLs_below": "当行以这些词开头时,发布至以下 URL", + "When_is_the_chat_busier?": "什么时候聊天比较忙?", + "Where_are_the_messages_being_sent?": "信息发送至哪里?", + "Why_did_you_chose__score__": "您选择 __score__ 的原因是?", + "Why_do_you_want_to_report_question_mark": "你为什么想举报?", + "Will_Appear_In_From": "将显示在您发送的电子邮件 From: 标头中。", "will_be_able_to": "将能", + "Will_be_available_here_after_saving": "将在保存后可用", "Without_priority": "没有优先级", "Worldwide": "全世界", "Would_you_like_to_return_the_inquiry": "你想返回调查吗?", "Yes": "是", "Yes_archive_it": "是的,存档!", "Yes_clear_all": "是,清除所有!", - "Yes_deactivate_it": "好,取消激活!", - "Yes_delete_it": "确定,删除!", + "Yes_deactivate_it": "是,停用它!", + "Yes_delete_it": "是的,删除它!", "Yes_hide_it": "确定,隐藏!", "Yes_leave_it": "确定,离开!", "Yes_mute_user": "确定,禁言该用户!", - "Yes_prune_them": "是的,裁剪它们!", + "Yes_prune_them": "是的,修剪它们!", "Yes_remove_user": "确定,删除用户!", "Yes_unarchive_it": "是的,解除它的归档!", "yesterday": "昨天", "Yesterday": "昨天", "You": "您", "you_are_in_preview_mode_of": "您正在预览频道 #__room_name__", - "you_are_in_preview_mode_of_incoming_livechat": "你正在预览当前 Livechat", + "you_are_in_preview_mode_of_incoming_livechat": "您正在此聊天的预览模式中", "You_are_logged_in_as": "您已登录为", "You_are_not_authorized_to_view_this_page": "您无权查看此页面。", "You_can_change_a_different_avatar_too": "您可以覆盖从这次整合后的分身。", "You_can_close_this_window_now": "您现在可以关闭这个窗口了。", "You_can_search_using_RegExp_eg": "您可以使用正则表达式(Regular Expression)搜索。例如:/^text$/i", "You_can_use_an_emoji_as_avatar": "您也可以使用表情符号作为头像。", - "You_can_use_webhooks_to_easily_integrate_livechat_with_your_CRM": "您可以使用网页钩子方便地将即时聊天集成到您的客户关系管理系统。", - "You_cant_leave_a_livechat_room_Please_use_the_close_button": "你不能离开即时聊天室。请使用关闭按钮。", + "You_can_use_webhooks_to_easily_integrate_livechat_with_your_CRM": "您可以使用网页钩子方便地将 Omnichannel 集成到您的客户关系管理系统。", + "You_cant_leave_a_livechat_room_Please_use_the_close_button": "你不能离开 Omnichannel 聊天室。请使用关闭按钮。", + "You_have_a_new_message": "您有新的消息", "You_have_been_muted": "你已被禁言,因此不能在此聊天室内发言", "You_have_n_codes_remaining": "你有 __number__ 条剩余代码。", "You_have_not_verified_your_email": "您尚未验证您的电子邮箱地址。", @@ -3603,15 +4233,18 @@ "You_need_to_type_in_your_username_in_order_to_do_this": "您需要输入您的用户名以便完成此操作!", "You_need_to_verifiy_your_email_address_to_get_notications": "您需要验证您的电子邮箱地址才能收到通知", "You_need_to_write_something": "你需要写一些东西!", - "You_reached_the_maximum_number_of_guest_users_allowed_by_your_license": "您的来宾用户数已经达到当前许可证的最大值。", - "You_should_inform_one_url_at_least": "你应该定义至少一个URL。", + "You_reached_the_maximum_number_of_guest_users_allowed_by_your_license": "您的访客用户数已经达到当前许可证允许的最大值。", + "You_should_inform_one_url_at_least": "您应定义至少一个 URL 。", "You_should_name_it_to_easily_manage_your_integrations": "为了方便管理您的集成,请给它命名。", + "You_will_be_asked_for_permissions": "您将被要求提供权限", "You_will_not_be_able_to_recover": "您将无法恢复此消息!", + "You_will_not_be_able_to_recover_email_inbox": "您将不能恢复此电子邮件收件箱", "You_will_not_be_able_to_recover_file": "您将不能恢复此文件!", "You_wont_receive_email_notifications_because_you_have_not_verified_your_email": "您将不会收到电子邮件通知,因为您还没有验证您的电子邮箱地址。", + "Your_e2e_key_has_been_reset": "您的端到端加密密钥已被重置", "Your_email_address_has_changed": "您的电子邮箱已更改。", "Your_email_has_been_queued_for_sending": "您的电子邮件已被列队等待发送", - "Your_entry_has_been_deleted": "您的项目已被删除。", + "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__": "您的邀请链接将于__date__过期。", @@ -3627,5 +4260,6 @@ "Your_question": "你的问题", "Your_server_link": "您的服务器链接", "Your_temporary_password_is_password": "您的暂时密码为 [password]。", + "Your_TOTP_has_been_reset": "您的两步验证 TOTP 已重置。", "Your_workspace_is_ready": "您的工作区已准备好使用🎉" -} +} \ No newline at end of file diff --git a/packages/rocketchat-mongo-config/server/index.js b/packages/rocketchat-mongo-config/server/index.js index 2db736697b63..8dcfc9404c59 100644 --- a/packages/rocketchat-mongo-config/server/index.js +++ b/packages/rocketchat-mongo-config/server/index.js @@ -30,12 +30,12 @@ tls.DEFAULT_ECDH_CURVE = 'auto'; const mongoConnectionOptions = { // add retryWrites=false if not present in MONGO_URL ...!process.env.MONGO_URL.includes('retryWrites') && { retryWrites: false }, + // ignoreUndefined: false, // TODO evaluate adding this config }; const mongoOptionStr = process.env.MONGO_OPTIONS; if (typeof mongoOptionStr !== 'undefined') { const mongoOptions = JSON.parse(mongoOptionStr); - Object.assign(mongoConnectionOptions, mongoOptions); } diff --git a/public/packages/rocketchat_videobridge/client/public/external_api.js b/public/packages/rocketchat_videobridge/client/public/external_api.js deleted file mode 100644 index 9acc01d2cb9b..000000000000 --- a/public/packages/rocketchat_videobridge/client/public/external_api.js +++ /dev/null @@ -1,462 +0,0 @@ -/** - * Implements API class that embeds Jitsi Meet in external applications. - */ - -// var postisInit = require("postis"); - -/** - * The minimum width for the Jitsi Meet frame - * @type {number} - */ -var MIN_WIDTH = 200; -// var MIN_WIDTH = 790; - -/** - * The minimum height for the Jitsi Meet frame - * @type {number} - */ -var MIN_HEIGHT = 300; - -/** - * Last id of api object - * @type {number} - */ -var id = 0; - -/** - * Maps the names of the commands expected by the API with the name of the - * commands expected by jitsi-meet - */ -var commands = { - "displayName": "display-name", - "toggleAudio": "toggle-audio", - "toggleVideo": "toggle-video", - "toggleFilmStrip": "toggle-film-strip", - "toggleChat": "toggle-chat", - "toggleContactList": "toggle-contact-list", - "toggleShareScreen": "toggle-share-screen" -}; - -/** - * Maps the names of the events expected by the API with the name of the - * events expected by jitsi-meet - */ -var events = { - "incomingMessage": "incoming-message", - "outgoingMessage": "outgoing-message", - "displayNameChange": "display-name-change", - "participantJoined": "participant-joined", - "participantLeft": "participant-left", - "videoConferenceJoined": "video-conference-joined", - "videoConferenceLeft": "video-conference-left" -}; - -/** - * Sends the passed object to Jitsi Meet - * @param postis {Postis object} the postis instance that is going to be used - * to send the message - * @param object the object to be sent - * - method {sting} - * - params {object} - */ -function sendMessage(postis, object) { - postis.send(object); -} - -/** - * Sends message for event enable/disable status change. - * @param postis {Postis object} the postis instance that is going to be used. - * @param event {string} the name of the event - * @param status {boolean} true - enabled; false - disabled; - */ -function changeEventStatus(postis, event, status) { - if (!(event in events)) { - console.error("Not supported event name."); - return; - } - sendMessage(postis, { - method: "jitsiSystemMessage", - params: { type: "eventStatus", name: events[event], value: status } - }); -} - -var JitsiMeetExternalAPI; - -/** - * Constructs new API instance. Creates iframe element that loads - * Jitsi Meet. - * @param domain the domain name of the server that hosts the conference - * @param room_name the name of the room to join - * @param width width of the iframe - * @param height height of the iframe - * @param parent_node the node that will contain the iframe - * @param filmStripOnly if the value is true only the small videos will be - * visible. - * @param noSsl if the value is true https won't be used - * @param token if you need token authentication, then pass the token - * @constructor - */ -function JitsiMeetExternalAPI(domain, room_name, width, height, parentNode, configOverwrite, interfaceConfigOverwrite, noSsl, token) { - if (!width || width < MIN_WIDTH) width = MIN_WIDTH; - if (!height || height < MIN_HEIGHT) height = MIN_HEIGHT; - - this.parentNode = null; - if (parentNode) { - this.parentNode = parentNode; - } else { - var scriptTag = document.scripts[document.scripts.length - 1]; - this.parentNode = scriptTag.parentNode; - } - - this.iframeHolder = this.parentNode.appendChild(document.createElement("div")); - this.iframeHolder.id = "jitsiConference" + id; - if (width) this.iframeHolder.style.width = width + "px"; - if (height) this.iframeHolder.style.height = height + "px"; - this.frameName = "jitsiConferenceFrame" + id; - this.url = (noSsl ? "http" : "https") + "://" + domain + "/"; - if (room_name) this.url += room_name; - if (token) { - this.url += "?jwt=" + token; - } - this.url += "#jitsi_meet_external_api_id=" + id; - - var key; - if (configOverwrite) { - for (key in configOverwrite) { - if (!configOverwrite.hasOwnProperty(key) || typeof key !== 'string') continue; - this.url += "&config." + key + "=" + configOverwrite[key]; - } - } - - if (interfaceConfigOverwrite) { - for (key in interfaceConfigOverwrite) { - if (!interfaceConfigOverwrite.hasOwnProperty(key) || typeof key !== 'string') continue; - this.url += "&interfaceConfig." + key + "=" + interfaceConfigOverwrite[key]; - } - } - - this.frame = document.createElement("iframe"); - this.frame.src = this.url; - this.frame.name = this.frameName; - this.frame.id = this.frameName; - this.frame.width = "100%"; - this.frame.height = "100%"; - this.frame.setAttribute("allowFullScreen", "true"); - this.frame.setAttribute("allow", "microphone; camera"); - this.frame = this.iframeHolder.appendChild(this.frame); - this.postis = Postis({ - window: this.frame.contentWindow, - scope: "jitsi_meet_external_api_" + id - }); - - this.eventHandlers = {}; - - id++; -} - -/** - * Executes command. The available commands are: - * displayName - sets the display name of the local participant to the value - * passed in the arguments array. - * toggleAudio - mutes / unmutes audio with no arguments - * toggleVideo - mutes / unmutes video with no arguments - * filmStrip - hides / shows the film strip with no arguments - * If the command doesn't require any arguments the parameter should be set - * to empty array or it may be omitted. - * @param name the name of the command - * @param arguments array of arguments - */ -JitsiMeetExternalAPI.prototype.executeCommand = function (name, argumentsList) { - if (!(name in commands)) { - console.error("Not supported command name."); - return; - } - var argumentsArray = argumentsList; - if (!argumentsArray) argumentsArray = []; - sendMessage(this.postis, { method: commands[name], params: argumentsArray }); -}; - -/** - * Executes commands. The available commands are: - * displayName - sets the display name of the local participant to the value - * passed in the arguments array. - * toggleAudio - mutes / unmutes audio. no arguments - * toggleVideo - mutes / unmutes video. no arguments - * filmStrip - hides / shows the film strip. no arguments - * toggleChat - hides / shows chat. no arguments. - * toggleContactList - hides / shows contact list. no arguments. - * toggleShareScreen - starts / stops screen sharing. no arguments. - * @param object the object with commands to be executed. The keys of the - * object are the commands that will be executed and the values are the - * arguments for the command. - */ -JitsiMeetExternalAPI.prototype.executeCommands = function (object) { - for (var key in object) { - this.executeCommand(key, object[key]); - } -}; - -/** - * Adds event listeners to Meet Jitsi. The object key should be the name of - * the event and value - the listener. - * Currently we support the following - * events: - * incomingMessage - receives event notifications about incoming - * messages. The listener will receive object with the following structure: - * {{ - * "from": from,//JID of the user that sent the message - * "nick": nick,//the nickname of the user that sent the message - * "message": txt//the text of the message - * }} - * outgoingMessage - receives event notifications about outgoing - * messages. The listener will receive object with the following structure: - * {{ - * "message": txt//the text of the message - * }} - * displayNameChanged - receives event notifications about display name - * change. The listener will receive object with the following structure: - * {{ - * jid: jid,//the JID of the participant that changed his display name - * displayname: displayName //the new display name - * }} - * participantJoined - receives event notifications about new participant. - * The listener will receive object with the following structure: - * {{ - * jid: jid //the jid of the participant - * }} - * participantLeft - receives event notifications about the participant that - * left the room. - * The listener will receive object with the following structure: - * {{ - * jid: jid //the jid of the participant - * }} - * video-conference-joined - receives event notifications about the local user - * has successfully joined the video conference. - * The listener will receive object with the following structure: - * {{ - * roomName: room //the room name of the conference - * }} - * video-conference-left - receives event notifications about the local user - * has left the video conference. - * The listener will receive object with the following structure: - * {{ - * roomName: room //the room name of the conference - * }} - * @param object - */ -JitsiMeetExternalAPI.prototype.addEventListeners = function (object) { - for (var i in object) { - this.addEventListener(i, object[i]); - } -}; - -/** - * Adds event listeners to Meet Jitsi. Currently we support the following - * events: - * incomingMessage - receives event notifications about incoming - * messages. The listener will receive object with the following structure: - * {{ - * "from": from,//JID of the user that sent the message - * "nick": nick,//the nickname of the user that sent the message - * "message": txt//the text of the message - * }} - * outgoingMessage - receives event notifications about outgoing - * messages. The listener will receive object with the following structure: - * {{ - * "message": txt//the text of the message - * }} - * displayNameChanged - receives event notifications about display name - * change. The listener will receive object with the following structure: - * {{ - * jid: jid,//the JID of the participant that changed his display name - * displayname: displayName //the new display name - * }} - * participantJoined - receives event notifications about new participant. - * The listener will receive object with the following structure: - * {{ - * jid: jid //the jid of the participant - * }} - * participantLeft - receives event notifications about participant the that - * left the room. - * The listener will receive object with the following structure: - * {{ - * jid: jid //the jid of the participant - * }} - * video-conference-joined - receives event notifications fired when the local - * user has joined the video conference. - * The listener will receive object with the following structure: - * {{ - * roomName: room //the room name of the conference - * }} - * video-conference-left - receives event notifications fired when the local - * user has joined the video conference. - * The listener will receive object with the following structure: - * {{ - * roomName: room //the room name of the conference - * }} - * @param event the name of the event - * @param listener the listener - */ -JitsiMeetExternalAPI.prototype.addEventListener = function (event, listener) { - if (!(event in events)) { - console.error("Not supported event name."); - return; - } - // We cannot remove listeners from postis that's why we are handling the - // callback that way. - if (!(event in this.eventHandlers)) this.postis.listen(events[event], function (data) { - if (event in this.eventHandlers && typeof this.eventHandlers[event] === "function") this.eventHandlers[event].call(null, data); - }.bind(this)); - this.eventHandlers[event] = listener; - changeEventStatus(this.postis, event, true); -}; - -/** - * Removes event listener. - * @param event the name of the event. - */ -JitsiMeetExternalAPI.prototype.removeEventListener = function (event) { - if (!(event in this.eventHandlers)) { - console.error("The event " + event + " is not registered."); - return; - } - delete this.eventHandlers[event]; - changeEventStatus(this.postis, event, false); -}; - -/** - * Removes event listeners. - * @param events array with the names of the events. - */ -JitsiMeetExternalAPI.prototype.removeEventListeners = function (events) { - for (var i = 0; i < events.length; i++) { - this.removeEventListener(events[i]); - } -}; - -/** - * Removes the listeners and removes the Jitsi Meet frame. - */ -JitsiMeetExternalAPI.prototype.dispose = function () { - this.postis.destroy(); - var frame = document.getElementById(this.frameName); - if (frame) frame.src = 'about:blank'; - var self = this; - window.setTimeout(function () { - self.iframeHolder.removeChild(self.frame); - self.iframeHolder.parentNode.removeChild(self.iframeHolder); - }, 10); -}; - -function Postis(options) { - var scope = options.scope; - var targetWindow = options.window; - var windowForEventListening = options.windowForEventListening || window; - var listeners = {}; - var sendBuffer = []; - var listenBuffer = {}; - var ready = false; - var readyMethod = "__ready__"; - var readynessCheck; - - var listener = function(event) { - var data; - try { - data = JSON.parse(event.data); - } catch (e) { - return; - } - - if (data.postis && data.scope === scope) { - var listenersForMethod = listeners[data.method]; - if (listenersForMethod) { - for (var i = 0; i < listenersForMethod.length; i++) { - listenersForMethod[i].call(null, data.params); - } - } else { - listenBuffer[data.method] = listenBuffer[data.method] || []; - listenBuffer[data.method].push(data.params); - } - } - }; - - windowForEventListening.addEventListener("message", listener, false); - - var postis = { - listen: function (method, callback) { - listeners[method] = listeners[method] || []; - listeners[method].push(callback); - - var listenBufferForMethod = listenBuffer[method]; - if (listenBufferForMethod) { - var listenersForMethod = listeners[method]; - for (var i = 0; i < listenersForMethod.length; i++) { - for (var j = 0; j < listenBufferForMethod.length; j++) { - listenersForMethod[i].call(null, listenBufferForMethod[j]); - } - } - } - delete listenBuffer[method]; - }, - - send: function (opts) { - var method = opts.method; - - if ((ready || opts.method === readyMethod) && (targetWindow && typeof targetWindow.postMessage === "function")) { - targetWindow.postMessage(JSON.stringify({ - postis: true, - scope: scope, - method: method, - params: opts.params - }), "*"); - } else { - sendBuffer.push(opts); - } - }, - - ready: function (callback) { - if (ready) { - callback(); - } else { - setTimeout(function () { postis.ready(callback); }, 50); - } - }, - - destroy: function (callback) { - clearInterval(readynessCheck); - ready = false; - if (windowForEventListening && typeof windowForEventListening.removeEventListener === "function") { - windowForEventListening.removeEventListener("message", listener); - } - callback && callback(); - } - }; - - var readyCheckID = +new Date() + Math.random() + ""; - - readynessCheck = setInterval(function () { - postis.send({ - method: readyMethod, - params: readyCheckID - }); - }, 50); - - postis.listen(readyMethod, function (id) { - if (id === readyCheckID) { - clearInterval(readynessCheck); - ready = true; - - for (var i = 0; i < sendBuffer.length; i++) { - postis.send(sendBuffer[i]); - } - sendBuffer = []; - } else { - postis.send({ - method: readyMethod, - params: id - }); - } - }); - - return postis; -} diff --git a/server/importPackages.js b/server/importPackages.js index 91cbf02a61ec..412bb39fd387 100644 --- a/server/importPackages.js +++ b/server/importPackages.js @@ -34,6 +34,7 @@ import '../app/importer-csv/server'; import '../app/importer-hipchat/server'; import '../app/importer-hipchat-enterprise/server'; import '../app/importer-pending-files/server'; +import '../app/importer-pending-avatars/server'; import '../app/importer-slack/server'; import '../app/importer-slack-users/server'; import '../app/integrations/server'; diff --git a/server/methods/addAllUserToRoom.js b/server/methods/addAllUserToRoom.js index d8379b2030c7..83dffa5abc9e 100644 --- a/server/methods/addAllUserToRoom.js +++ b/server/methods/addAllUserToRoom.js @@ -11,52 +11,54 @@ Meteor.methods({ check(rid, String); check(activeUsersOnly, Boolean); - if (hasRole(this.userId, 'admin') === true) { - const userCount = Users.find().count(); - if (userCount > settings.get('API_User_Limit')) { - throw new Meteor.Error('error-user-limit-exceeded', 'User Limit Exceeded', { - method: 'addAllToRoom', - }); - } + if (!hasRole(this.userId, 'admin')) { + throw new Meteor.Error(403, 'Access to Method Forbidden', { + method: 'addAllToRoom', + }); + } - const room = Rooms.findOneById(rid); - if (room == null) { - throw new Meteor.Error('error-invalid-room', 'Invalid room', { - method: 'addAllToRoom', - }); - } + const userFilter = {}; + if (activeUsersOnly === true) { + userFilter.active = true; + } - const userFilter = {}; - if (activeUsersOnly === true) { - userFilter.active = true; - } + const userCursor = Users.find(userFilter); + const usersCount = userCursor.count(); + if (usersCount > settings.get('API_User_Limit')) { + throw new Meteor.Error('error-user-limit-exceeded', 'User Limit Exceeded', { + method: 'addAllToRoom', + }); + } - const users = Users.find(userFilter).fetch(); - const now = new Date(); - users.forEach(function(user) { - const subscription = Subscriptions.findOneByRoomIdAndUserId(rid, user._id); - if (subscription != null) { - return; - } - callbacks.run('beforeJoinRoom', user, room); - Subscriptions.createWithRoomAndUser(room, user, { - ts: now, - open: true, - alert: true, - unread: 1, - userMentions: 1, - groupMentions: 0, - }); - Messages.createUserJoinWithRoomIdAndUser(rid, user, { - ts: now, - }); - Meteor.defer(function() {}); - return callbacks.run('afterJoinRoom', user, room); + const room = Rooms.findOneById(rid); + if (!room) { + throw new Meteor.Error('error-invalid-room', 'Invalid room', { + method: 'addAllToRoom', }); - return true; } - throw new Meteor.Error(403, 'Access to Method Forbidden', { - method: 'addAllToRoom', + + const users = userCursor.fetch(); + const now = new Date(); + users.forEach(function(user) { + const subscription = Subscriptions.findOneByRoomIdAndUserId(rid, user._id); + if (subscription != null) { + return; + } + callbacks.run('beforeJoinRoom', user, room); + Subscriptions.createWithRoomAndUser(room, user, { + ts: now, + open: true, + alert: true, + unread: 1, + userMentions: 1, + groupMentions: 0, + }); + Messages.createUserJoinWithRoomIdAndUser(rid, user, { + ts: now, + }); + Meteor.defer(function() {}); + return callbacks.run('afterJoinRoom', user, room); }); + return true; }, }); diff --git a/server/methods/saveUserProfile.js b/server/methods/saveUserProfile.js index 11115c8923c0..9888331914ee 100644 --- a/server/methods/saveUserProfile.js +++ b/server/methods/saveUserProfile.js @@ -9,108 +9,108 @@ import { twoFactorRequired } from '../../app/2fa/server/twoFactorRequired'; import { saveUserIdentity } from '../../app/lib/server/functions/saveUserIdentity'; import { compareUserPassword } from '../lib/compareUserPassword'; -Meteor.methods({ - saveUserProfile: twoFactorRequired(function(settings, customFields) { - check(settings, Object); - check(customFields, Match.Maybe(Object)); +function saveUserProfile(settings, customFields) { + if (!rcSettings.get('Accounts_AllowUserProfileChange')) { + throw new Meteor.Error('error-not-allowed', 'Not allowed', { + method: 'saveUserProfile', + }); + } + + if (!this.userId) { + throw new Meteor.Error('error-invalid-user', 'Invalid user', { + method: 'saveUserProfile', + }); + } + + const user = Users.findOneById(this.userId); + + if (settings.realname || settings.username) { + if (!saveUserIdentity(this.userId, { + _id: this.userId, + name: settings.realname, + username: settings.username, + })) { + throw new Meteor.Error('error-could-not-save-identity', 'Could not save user identity', { method: 'saveUserProfile' }); + } + } - if (!rcSettings.get('Accounts_AllowUserProfileChange')) { - throw new Meteor.Error('error-not-allowed', 'Not allowed', { + if (settings.statusText || settings.statusText === '') { + Meteor.call('setUserStatus', null, settings.statusText); + } + + if (settings.statusType) { + Meteor.call('setUserStatus', settings.statusType, null); + } + + if (settings.bio != null) { + if (typeof settings.bio !== 'string' || settings.bio.length > 260) { + throw new Meteor.Error('error-invalid-field', 'bio', { method: 'saveUserProfile', }); } + Users.setBio(user._id, settings.bio.trim()); + } - if (!this.userId) { - throw new Meteor.Error('error-invalid-user', 'Invalid user', { + if (settings.nickname != null) { + if (typeof settings.nickname !== 'string' || settings.nickname.length > 120) { + throw new Meteor.Error('error-invalid-field', 'nickname', { method: 'saveUserProfile', }); } - - const user = Users.findOneById(this.userId); - - if (settings.realname || settings.username) { - if (!saveUserIdentity(this.userId, { - _id: this.userId, - name: settings.realname, - username: settings.username, - })) { - throw new Meteor.Error('error-could-not-save-identity', 'Could not save user identity', { method: 'saveUserProfile' }); - } - } - - if (settings.statusText || settings.statusText === '') { - Meteor.call('setUserStatus', null, settings.statusText); - } - - if (settings.statusType) { - Meteor.call('setUserStatus', settings.statusType, null); - } - - if (settings.bio != null) { - if (typeof settings.bio !== 'string' || settings.bio.length > 260) { - throw new Meteor.Error('error-invalid-field', 'bio', { + Users.setNickname(user._id, settings.nickname.trim()); + } + + if (settings.email) { + Meteor.call('setEmail', settings.email); + } + + const canChangePasswordForOAuth = rcSettings.get('Accounts_AllowPasswordChangeForOAuthUsers'); + if (canChangePasswordForOAuth || user.services?.password) { + // Should be the last check to prevent error when trying to check password for users without password + if (settings.newPassword && rcSettings.get('Accounts_AllowPasswordChange') === true) { + // don't let user change to same password + if (compareUserPassword(user, { plain: settings.newPassword })) { + throw new Meteor.Error('error-password-same-as-current', 'Entered password same as current password', { method: 'saveUserProfile', }); } - Users.setBio(user._id, settings.bio.trim()); - } - if (settings.nickname != null) { - if (typeof settings.nickname !== 'string' || settings.nickname.length > 120) { - throw new Meteor.Error('error-invalid-field', 'nickname', { - method: 'saveUserProfile', - }); + passwordPolicy.validate(settings.newPassword); + + Accounts.setPassword(this.userId, settings.newPassword, { + logout: false, + }); + + try { + Meteor.call('removeOtherTokens'); + } catch (e) { + Accounts._clearAllLoginTokens(this.userId); } - Users.setNickname(user._id, settings.nickname.trim()); } + } - if (settings.email) { - if (!compareUserPassword(user, { sha256: settings.typedPassword })) { - throw new Meteor.Error('error-invalid-password', 'Invalid password', { - method: 'saveUserProfile', - }); - } + Users.setProfile(this.userId, {}); - Meteor.call('setEmail', settings.email); - } + if (customFields && Object.keys(customFields).length) { + saveCustomFields(this.userId, customFields); + } - const canChangePasswordForOAuth = rcSettings.get('Accounts_AllowPasswordChangeForOAuthUsers'); - if (canChangePasswordForOAuth || user.services?.password) { - // Should be the last check to prevent error when trying to check password for users without password - if (settings.newPassword && rcSettings.get('Accounts_AllowPasswordChange') === true) { - if (!compareUserPassword(user, { sha256: settings.typedPassword })) { - throw new Meteor.Error('error-invalid-password', 'Invalid password', { - method: 'saveUserProfile', - }); - } - - // don't let user change to same password - if (compareUserPassword(user, { plain: settings.newPassword })) { - throw new Meteor.Error('error-password-same-as-current', 'Entered password same as current password', { - method: 'saveUserProfile', - }); - } - - passwordPolicy.validate(settings.newPassword); - - Accounts.setPassword(this.userId, settings.newPassword, { - logout: false, - }); + return true; +} - try { - Meteor.call('removeOtherTokens'); - } catch (e) { - Accounts._clearAllLoginTokens(this.userId); - } - } - } +const saveUserProfileWithTwoFactor = twoFactorRequired(saveUserProfile, { + requireSecondFactor: true, +}); - Users.setProfile(this.userId, {}); +Meteor.methods({ + saveUserProfile(settings, customFields, ...args) { + check(settings, Object); + check(customFields, Match.Maybe(Object)); - if (customFields && Object.keys(customFields).length) { - saveCustomFields(this.userId, customFields); + if (settings.email || settings.newPassword) { + return saveUserProfileWithTwoFactor.call(this, settings, customFields, ...args); } - return true; - }), + return saveUserProfile.call(this, settings, customFields); + }, }); diff --git a/server/modules/listeners/listeners.module.ts b/server/modules/listeners/listeners.module.ts index 491f0dd1ca4b..c01e05a108c1 100644 --- a/server/modules/listeners/listeners.module.ts +++ b/server/modules/listeners/listeners.module.ts @@ -101,7 +101,7 @@ export class ListenersModule { notifications.streamRoomMessage._emit('__my_messages__', [message], undefined, false, (streamer, _sub, eventName, args, allowed) => streamer.changedPayload(streamer.subscriptionName, 'id', { eventName, - args: [args, allowed], + args: [...args, allowed], })); notifications.streamRoomMessage.emitWithoutBroadcast(message.rid, message); diff --git a/server/modules/notifications/notifications.module.ts b/server/modules/notifications/notifications.module.ts index 27c824c691d1..37f2337966fd 100644 --- a/server/modules/notifications/notifications.module.ts +++ b/server/modules/notifications/notifications.module.ts @@ -87,6 +87,8 @@ export class NotificationsModule { }; streamer.on(userId, userEvent); + + publication.onStop(() => streamer.removeListener(userId, userEvent)); }); this.streamUser = new this.Streamer('notify-user'); diff --git a/server/modules/streamer/streamer.module.ts b/server/modules/streamer/streamer.module.ts index 0d97b9e9fa51..dd08ac0b52a2 100644 --- a/server/modules/streamer/streamer.module.ts +++ b/server/modules/streamer/streamer.module.ts @@ -1,4 +1,4 @@ -import { EventEmitter } from 'events'; +import { EventEmitter } from 'eventemitter3'; class StreamerCentralClass extends EventEmitter { public instances: Record = {}; @@ -359,8 +359,8 @@ export abstract class Streamer extends EventEmitter implements IStreamer { }); } - emit(eventName: string, ...args: any[]): boolean { - return this._emit(eventName, args, undefined, true); + emit(eventName: string | symbol, ...args: any[]): boolean { + return this._emit(eventName as string, args, undefined, true); } __emit(eventName: string, ...args: any[]): boolean { diff --git a/server/modules/watchers/watchers.module.ts b/server/modules/watchers/watchers.module.ts index ca202fc85ee3..a6f856a4413d 100644 --- a/server/modules/watchers/watchers.module.ts +++ b/server/modules/watchers/watchers.module.ts @@ -1,3 +1,5 @@ +import mem from 'mem'; + import { SubscriptionsRaw } from '../../../app/models/server/raw/Subscriptions'; import { UsersRaw } from '../../../app/models/server/raw/Users'; import { SettingsRaw } from '../../../app/models/server/raw/Settings'; @@ -13,7 +15,7 @@ import { IBaseRaw } from '../../../app/models/server/raw/BaseRaw'; import { LivechatInquiryRaw } from '../../../app/models/server/raw/LivechatInquiry'; import { IBaseData } from '../../../definition/IBaseData'; import { IPermission } from '../../../definition/IPermission'; -import { ISetting } from '../../../definition/ISetting'; +import { ISetting, SettingValue } from '../../../definition/ISetting'; import { IInquiry } from '../../../definition/IInquiry'; import { UsersSessionsRaw } from '../../../app/models/server/raw/UsersSessions'; import { IUserSession } from '../../../definition/IUserSession'; @@ -83,6 +85,13 @@ export function initWatchers(models: IModelsParam, broadcast: BroadcastCallback, EmailInbox, } = models; + const getSettingCached = mem(async (setting: string): Promise => Settings.getValueById(setting), { maxAge: 10000 }); + + const getUserNameCached = mem(async (userId: string): Promise => { + const user = await Users.findOneById(userId, { projection: { name: 1 } }); + return user?.name; + }, { maxAge: 10000 }); + watch(Messages, async ({ clientAction, id, data }) => { switch (clientAction) { case 'inserted': @@ -93,18 +102,16 @@ export function initWatchers(models: IModelsParam, broadcast: BroadcastCallback, } if (message._hidden !== true && message.imported == null) { - const UseRealName = await Settings.getValueById('UI_Use_Real_Name') === true; + const UseRealName = await getSettingCached('UI_Use_Real_Name') === true; if (UseRealName) { if (message.u?._id) { - const user = await Users.findOneById(message.u._id); - message.u.name = user?.name; + message.u.name = await getUserNameCached(message.u._id); } if (message.mentions?.length) { for await (const mention of message.mentions) { - const user = await Users.findOneById(mention._id); - mention.name = user?.name; + mention.name = await getUserNameCached(mention._id); } } } diff --git a/server/publications/spotlight.js b/server/publications/spotlight.js index 86d4c1b6a20f..c09add21e061 100644 --- a/server/publications/spotlight.js +++ b/server/publications/spotlight.js @@ -93,6 +93,7 @@ function _searchInsiderUsers({ rid, text, usernames, options, users, insiderExtr } } + function _searchOutsiderUsers({ text, usernames, options, users, canListOutsiders, match = { startsWith: false, endsWith: false } }) { // Then get the outsiders if allowed if (canListOutsiders) { @@ -175,7 +176,7 @@ function searchUsers({ userId, rid, text, usernames }) { if (users.length === 0 && canListOutsiders) { const exactMatch = Promise.await(Users.findOneByUsernameIgnoringCase(text, { projection: options.projection, readPreference: options.readPreference })); if (exactMatch) { - users.push(exactMatch); + users.push(mapOutsiders(exactMatch)); processLimitAndUsernames(options, usernames, users); } } diff --git a/server/startup/migrations/index.js b/server/startup/migrations/index.js index c2de2a86bdae..e4e5470f4846 100644 --- a/server/startup/migrations/index.js +++ b/server/startup/migrations/index.js @@ -212,4 +212,7 @@ import './v212'; import './v213'; import './v214'; import './v215'; +import './v216'; +import './v217'; +import './v218'; import './xrun'; diff --git a/server/startup/migrations/v216.js b/server/startup/migrations/v216.js new file mode 100644 index 000000000000..2074d65036f3 --- /dev/null +++ b/server/startup/migrations/v216.js @@ -0,0 +1,42 @@ +import { Migrations } from '../../../app/migrations'; +import { Settings } from '../../../app/models'; + +Migrations.add({ + version: 216, + up() { + Settings.find({ _id: /Accounts_OAuth_Custom/, i18nLabel: 'Accounts_OAuth_Custom_Enable' }).forEach(function(customOauth) { + const parts = customOauth._id.split('-'); + const name = parts[1]; + const id = `Accounts_OAuth_Custom-${ name }-key_field`; + if (!Settings.findOne({ _id: id })) { + Settings.insert({ + _id: id, + type: 'select', + group: 'OAuth', + section: `Custom OAuth: ${ name }`, + i18nLabel: 'Accounts_OAuth_Custom_Key_Field', + persistent: true, + values: [ + { + key: 'username', + i18nLabel: 'Username', + }, + { + key: 'email', + i18nLabel: 'Email', + }, + ], + packageValue: 'username', + valueSource: 'packageValue', + ts: new Date(), + hidden: false, + blocked: false, + sorter: 103, + i18nDescription: `Accounts_OAuth_Custom-${ name }-key_field_Description`, + createdAt: new Date(), + value: 'username', + }); + } + }); + }, +}); diff --git a/server/startup/migrations/v217.js b/server/startup/migrations/v217.js new file mode 100644 index 000000000000..d618f85242ba --- /dev/null +++ b/server/startup/migrations/v217.js @@ -0,0 +1,12 @@ +import { Migrations } from '../../../app/migrations'; +import { Permissions } from '../../../app/models'; + +Migrations.add({ + version: 217, + up() { + const oldPermission = Permissions.findOne('view-livechat-queue'); + if (oldPermission) { + Permissions.update({ _id: 'view-livechat-queue' }, { $addToSet: { roles: 'livechat-agent' } }); + } + }, +}); diff --git a/server/startup/migrations/v218.js b/server/startup/migrations/v218.js new file mode 100644 index 000000000000..05b3dffb9f2f --- /dev/null +++ b/server/startup/migrations/v218.js @@ -0,0 +1,9 @@ +import { Migrations } from '../../../app/migrations/server'; +import { Statistics } from '../../../app/models/server'; + +Migrations.add({ + version: 218, + up() { + Statistics.tryDropIndex({ createdAt: 1 }); + }, +}); diff --git a/tests/cypress/integration/06-messaging.js b/tests/cypress/integration/06-messaging.js index e629069b3d0f..ba3ae6b5b90f 100644 --- a/tests/cypress/integration/06-messaging.js +++ b/tests/cypress/integration/06-messaging.js @@ -5,10 +5,13 @@ import { username, email, password } from '../../data/user.js'; import { publicChannelName, privateChannelName } from '../../data/channel.js'; import { targetUser, imgURL } from '../../data/interactions.js'; import { checkIfUserIsValid, publicChannelCreated, privateChannelCreated, directMessageCreated, setPublicChannelCreated, setPrivateChannelCreated, setDirectMessageCreated } from '../../data/checks'; - +import { updatePermission } from '../../data/permissions.helper'; +import { api, getCredentials, credentials, request } from '../../data/api-data'; +import { createUser, login } from '../../data/users.helper'; // Test data const message = `message from ${ username }`; +let testDMUsername; function messagingTest(currentTest) { describe('Normal message:', () => { @@ -88,7 +91,63 @@ function messagingTest(currentTest) { }); } -function messageActionsTest(currentTest) { +function grantCreateDPermission() { + return new Promise((resolve) => { + getCredentials(() => { + updatePermission('create-d', ['user']).then(resolve); + }); + }); +} + +function revokeCreateDPermission() { + return new Promise((resolve) => { + getCredentials(() => { + updatePermission('create-d', []).then(resolve); + }); + }); +} + +function toggleOpenMessageActionMenu() { + mainContent.popoverWrapper.click(); + mainContent.openMessageActionMenu(); +} + +function createDMUserAndPost(testChannel, done) { + getCredentials(() => { + createUser().then((createdUser) => { + testDMUsername = createdUser.username; + + request.post(api('users.setActiveStatus')) + .set(credentials) + .send({ + activeStatus: true, + userId: createdUser._id, + }).then(() => { + login(testDMUsername, password).then((userCredentials) => { + request.post(api('chat.postMessage')) + .set(userCredentials) + .send({ + channel: testChannel, + text: 'Message from Test DM user', + }) + .end(done); + }); + }); + }); + }); +} + +function leaveTestDM() { + // Leave the existing DM + const dmElement = sideNav.getChannelFromList(testDMUsername).scrollIntoView(); + dmElement.closest('.sidebar-item').find('.sidebar-item__menu').invoke('show').click(); + sideNav.popOverHideOption.click(); + + Global.modal.should('be.visible'); + Global.modalConfirm.click(); +} + +function messageActionsTest(currentTest, testChannel) { describe('[Actions]', () => { before(() => { mainContent.sendMessage('Message for Message Actions Tests'); @@ -139,6 +198,66 @@ function messageActionsTest(currentTest) { it('it should not show the mark as unread action', () => { mainContent.messageUnread.should('not.be.visible'); }); + + if (currentTest === 'direct') { + it('it should not show the Reply to DM action', () => { + mainContent.messageReplyInDM.should('not.be.visible'); + }); + } else if (currentTest !== 'private') { + context('when the channel last message was posted by someone else', () => { + before((done) => { + revokeCreateDPermission().then(() => { + createDMUserAndPost(testChannel, done); + }); + }); + + it('it should not show the Reply to DM action', () => { + toggleOpenMessageActionMenu(); + + // We don't have the test DM user in a DM channel or have the `create-d` permission + mainContent.messageReplyInDM.should('not.be.visible'); + }); + + context('when the user has permission to create DMs', () => { + before(() => grantCreateDPermission()); + after(() => revokeCreateDPermission()); + + it('it should show the Reply to DM action', () => { + toggleOpenMessageActionMenu(); + + mainContent.messageReplyInDM.should('be.visible'); + }); + }); + + context('when the user already has a created DM', () => { + // Grant Create DM permission, create a DM, then revoke the permission + before(() => grantCreateDPermission()); + + before(() => { + mainContent.popoverWrapper.click(); + sideNav.spotlightSearchIcon.click(); + sideNav.searchChannel(testDMUsername); + }); + + before(() => revokeCreateDPermission()); + + before(() => { + sideNav.openChannel(testChannel); + mainContent.openMessageActionMenu(); + }); + + after(() => { + mainContent.popoverWrapper.click(); + leaveTestDM(); + mainContent.openMessageActionMenu(); + }); + + it('it should show the Reply to DM action', () => { + mainContent.messageReplyInDM.should('be.visible'); + }); + }); + }); + } }); describe('[Usage]', () => { @@ -252,7 +371,7 @@ describe('[Message]', () => { sideNav.searchChannel('general'); }); messagingTest('general'); - messageActionsTest('general'); + messageActionsTest('general', 'general'); }); describe('[Public Channel]', () => { @@ -265,7 +384,7 @@ describe('[Message]', () => { sideNav.openChannel(publicChannelName); }); messagingTest('public'); - messageActionsTest('public'); + messageActionsTest('public', publicChannelName); }); describe('[Private Channel]', () => { @@ -278,7 +397,7 @@ describe('[Message]', () => { sideNav.openChannel(privateChannelName); }); messagingTest('private'); - messageActionsTest('private'); + messageActionsTest('private', privateChannelName); }); describe('[Direct Message]', () => { @@ -292,5 +411,6 @@ describe('[Message]', () => { sideNav.openChannel(targetUser); }); messagingTest('direct'); + messageActionsTest('direct'); }); }); diff --git a/tests/cypress/pageobjects/main-content.page.js b/tests/cypress/pageobjects/main-content.page.js index 7ba9fe6fce88..d2f788e6b44f 100644 --- a/tests/cypress/pageobjects/main-content.page.js +++ b/tests/cypress/pageobjects/main-content.page.js @@ -76,6 +76,8 @@ class MainContent extends Page { get messageUnread() { return browser.element('[data-id="mark-message-as-unread"][data-type="message-action"]'); } + get messageReplyInDM() { return browser.element('[data-id="reply-directly"][data-type="message-action"]'); } + // get messageReaction() { return browser.element('.message-actions__button[data-message-action="reaction-message"]'); } get messagePin() { return browser.element('[data-id="pin-message"][data-type="message-action"]'); } // get messageClose() { return browser.element('[data-id="rc-popover-close"][data-type="message-action"]'); } diff --git a/tests/cypress/pageobjects/side-nav.page.js b/tests/cypress/pageobjects/side-nav.page.js index 3de1a990aac8..0d334c7027b7 100644 --- a/tests/cypress/pageobjects/side-nav.page.js +++ b/tests/cypress/pageobjects/side-nav.page.js @@ -28,6 +28,8 @@ class SideNav extends Page { get popOverContent() { return browser.element('.rc-popover__content'); } + get popOverHideOption() { return browser.element('.rc-popover__content [data-id="hide"][data-type="sidebar-item"]'); } + get statusOnline() { return browser.element('.rc-popover__item--online'); } get statusAway() { return browser.element('.rc-popover__item--away'); } diff --git a/tests/data/api-data.js b/tests/data/api-data.js index 9f45ba970c8e..79dbdc2f53df 100644 --- a/tests/data/api-data.js +++ b/tests/data/api-data.js @@ -41,6 +41,10 @@ export function api(path) { return prefix + path; } +export function methodCall(methodName) { + return api(`method.call/${ methodName }`); +} + export function log(res) { console.log(res.req.path); console.log({ diff --git a/tests/end-to-end/api/00-miscellaneous.js b/tests/end-to-end/api/00-miscellaneous.js index 5fee636efac7..3190fe7c8a15 100644 --- a/tests/end-to-end/api/00-miscellaneous.js +++ b/tests/end-to-end/api/00-miscellaneous.js @@ -3,6 +3,7 @@ import { expect } from 'chai'; import { getCredentials, api, login, request, credentials } from '../../data/api-data.js'; import { adminEmail, adminUsername, adminPassword, password } from '../../data/user.js'; import { createUser, login as doLogin } from '../../data/users.helper'; +import { updateSetting } from '../../data/permissions.helper'; describe('miscellaneous', function() { this.retries(0); @@ -155,6 +156,7 @@ describe('miscellaneous', function() { expect(res.body).to.have.nested.property('emails[0].address', adminEmail); expect(res.body).to.have.nested.property('settings.preferences').and.to.be.an('object'); expect(res.body.settings.preferences).to.have.all.keys(allUserPreferencesKeys); + expect(res.body.services).to.not.have.property('password'); }) .end(done); }); @@ -503,4 +505,34 @@ describe('miscellaneous', function() { .end(done); }); }); + + describe('[/shield.svg]', () => { + it('should fail if API_Enable_Shields is disabled', (done) => { + updateSetting('API_Enable_Shields', false).then(() => { + request.get(api('shield.svg')) + .expect('Content-Type', 'application/json') + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-endpoint-disabled'); + }) + .end(done); + }); + }); + + it('should succeed if API_Enable_Shields is enabled', (done) => { + updateSetting('API_Enable_Shields', true).then(() => { + request.get(api('shield.svg')) + .query({ + type: 'online', + icon: true, + channel: 'general', + name: 'Rocket.Chat', + }) + .expect('Content-Type', 'image/svg+xml;charset=utf-8') + .expect(200) + .end(done); + }); + }); + }); }); diff --git a/tests/end-to-end/api/01-users.js b/tests/end-to-end/api/01-users.js index e27af2b04654..8b7501e3b000 100644 --- a/tests/end-to-end/api/01-users.js +++ b/tests/end-to-end/api/01-users.js @@ -602,6 +602,126 @@ describe('[Users]', function() { }); }); + describe('[/users.resetAvatar]', () => { + let user; + before(async () => { + user = await createUser(); + }); + + let userCredentials; + before(async () => { + userCredentials = await login(user.username, password); + }); + before((done) => { + updatePermission('edit-other-user-info', ['admin', 'user']).then(done); + }); + after(async () => { + await deleteUser(user); + user = undefined; + await updatePermission('edit-other-user-info', ['admin']); + }); + it('should set the avatar of the logged user by a local image', (done) => { + request.post(api('users.setAvatar')) + .set(userCredentials) + .attach('image', imgURL) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + it('should reset the avatar of the logged user', (done) => { + request.post(api('users.resetAvatar')) + .set(userCredentials) + .expect('Content-Type', 'application/json') + .send({ + userId: userCredentials['X-User-Id'], + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + it('should reset the avatar of another user by userId when the logged user has the necessary permission (edit-other-user-info)', (done) => { + request.post(api('users.resetAvatar')) + .set(userCredentials) + .send({ + userId: credentials['X-User-Id'], + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + it('should reset the avatar of another user by username and local image when the logged user has the necessary permission (edit-other-user-info)', (done) => { + request.post(api('users.resetAvatar')) + .set(credentials) + .send({ + username: adminUsername, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + it.skip('should prevent from resetting someone else\'s avatar when the logged user has not the necessary permission(edit-other-user-info)', (done) => { + updatePermission('edit-other-user-info', []).then(() => { + request.post(api('users.resetAvatar')) + .set(userCredentials) + .send({ + userId: credentials['X-User-Id'], + }) + .expect('Content-Type', 'application/json') + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + }) + .end(done); + }); + }); + }); + + describe('[/users.getAvatar]', () => { + let user; + before(async () => { + user = await createUser(); + }); + + let userCredentials; + before(async () => { + userCredentials = await login(user.username, password); + }); + after(async () => { + await deleteUser(user); + user = undefined; + await updatePermission('edit-other-user-info', ['admin']); + }); + it('should get the url of the avatar of the logged user via userId', (done) => { + request.get(api('users.getAvatar')) + .set(userCredentials) + .query({ + userId: userCredentials['X-User-Id'], + }) + .expect(307) + .end(done); + }); + it('should get the url of the avatar of the logged user via username', (done) => { + request.get(api('users.getAvatar')) + .set(userCredentials) + .query({ + username: user.username, + }) + .expect(307) + .end(done); + }); + }); + describe('[/users.update]', () => { before((done) => { updateSetting('Accounts_AllowUserProfileChange', true) @@ -2287,6 +2407,133 @@ describe('[Users]', function() { }); }); + describe('[/users.deactivateIdle]', () => { + let testUser; + let testUserCredentials; + const testRoleName = `role.test.${ Date.now() }`; + + before('Create a new role with Users scope', (done) => { + request.post(api('roles.create')) + .set(credentials) + .send({ + name: testRoleName, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + before('Create test user', (done) => { + const username = `user.test.${ Date.now() }`; + const email = `${ username }@rocket.chat`; + request.post(api('users.create')) + .set(credentials) + .send({ email, name: username, username, password }) + .end((err, res) => { + testUser = res.body.user; + done(); + }); + }); + before('Assign a role to test user', (done) => { + request.post(api('roles.addUserToRole')) + .set(credentials) + .send({ + roleName: testRoleName, + username: testUser.username, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + before('Login as test user', (done) => { + request.post(api('login')) + .send({ + user: testUser.username, + password, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + testUserCredentials = {}; + testUserCredentials['X-Auth-Token'] = res.body.data.authToken; + testUserCredentials['X-User-Id'] = res.body.data.userId; + }) + .end(done); + }); + + it('should fail to deactivate if user doesnt have edit-other-user-active-status permission', (done) => { + updatePermission('edit-other-user-active-status', []).then(() => { + request.post(api('users.deactivateIdle')) + .set(credentials) + .send({ + daysIdle: 0, + }) + .expect('Content-Type', 'application/json') + .expect(403) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('error', 'unauthorized'); + }) + .end(done); + }); + }); + it('should deactivate no users when no users in time range', (done) => { + updatePermission('edit-other-user-active-status', ['admin']).then(() => { + request.post(api('users.deactivateIdle')) + .set(credentials) + .send({ + daysIdle: 999999, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('count', 0); + }) + .end(done); + }); + }); + it('should deactivate the test user when given its role and daysIdle = 0', (done) => { + updatePermission('edit-other-user-active-status', ['admin']).then(() => { + request.post(api('users.deactivateIdle')) + .set(credentials) + .send({ + daysIdle: 0, + role: testRoleName, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('count', 1); + }) + .end(done); + }); + }); + it('should not deactivate the test user again when given its role and daysIdle = 0', (done) => { + updatePermission('edit-other-user-active-status', ['admin']).then(() => { + request.post(api('users.deactivateIdle')) + .set(credentials) + .send({ + daysIdle: 0, + role: testRoleName, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('count', 0); + }) + .end(done); + }); + }); + }); + describe('[/users.requestDataDownload]', () => { it('should return the request data with fullExport false when no query parameter was send', (done) => { request.get(api('users.requestDataDownload')) diff --git a/tests/end-to-end/api/02-channels.js b/tests/end-to-end/api/02-channels.js index 4b4b2cee4a03..1c9cd0fb2613 100644 --- a/tests/end-to-end/api/02-channels.js +++ b/tests/end-to-end/api/02-channels.js @@ -182,6 +182,235 @@ describe('[Channels]', function() { }); }); + it('/channels.online', (done) => { + request.get(api('channels.online')) + .set(credentials) + .query({ + query: '{ "_id": "GENERAL" }', + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('online').and.to.be.an('array'); + }) + .end(done); + }); + + describe('[/channels.files]', () => { + it('should fail if invalid channel', (done) => { + request.get(api('channels.files')) + .set(credentials) + .query({ + roomId: 'invalid', + }) + .expect('Content-Type', 'application/json') + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-room-not-found'); + }) + .end(done); + }); + + it('should succeed when searching by roomId', (done) => { + request.get(api('channels.files')) + .set(credentials) + .query({ + roomId: 'GENERAL', + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('files').and.to.be.an('array'); + }) + .end(done); + }); + + it('should succeed when searching by roomName', (done) => { + request.get(api('channels.files')) + .set(credentials) + .query({ + roomName: 'general', + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('files').and.to.be.an('array'); + }) + .end(done); + }); + }); + + describe('[/channels.join]', () => { + let testChannelNoCode; + let testChannelWithCode; + let testUser; + let testUserCredentials; + before('Create test user', (done) => { + const username = `user.test.${ Date.now() }`; + const email = `${ username }@rocket.chat`; + request.post(api('users.create')) + .set(credentials) + .send({ email, name: username, username, password }) + .end((err, res) => { + testUser = res.body.user; + done(); + }); + }); + before('Login as test user', (done) => { + request.post(api('login')) + .send({ + user: testUser.username, + password, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + testUserCredentials = {}; + testUserCredentials['X-Auth-Token'] = res.body.data.authToken; + testUserCredentials['X-User-Id'] = res.body.data.userId; + }) + .end(done); + }); + before('Create no code channel', (done) => { + request.post(api('channels.create')) + .set(testUserCredentials) + .send({ + name: `${ apiPublicChannelName }-nojoincode`, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + testChannelNoCode = res.body.channel; + }) + .end(done); + }); + before('Create code channel', (done) => { + request.post(api('channels.create')) + .set(testUserCredentials) + .send({ + name: `${ apiPublicChannelName }-withjoincode`, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + testChannelWithCode = res.body.channel; + }) + .end(done); + }); + before('Set code for channel', (done) => { + request.post(api('channels.setJoinCode')) + .set(testUserCredentials) + .send({ + roomId: testChannelWithCode._id, + joinCode: '123', + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + + it('should fail if invalid channel', (done) => { + request.post(api('channels.join')) + .set(credentials) + .send({ + roomId: 'invalid', + }) + .expect('Content-Type', 'application/json') + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-room-not-found'); + }) + .end(done); + }); + + it('should succeed when joining code-free channel without join code', (done) => { + request.post(api('channels.join')) + .set(credentials) + .send({ + roomId: testChannelNoCode._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('channel._id', testChannelNoCode._id); + }) + .end(done); + }); + + it('should fail when joining code-needed channel without join code and no join-without-join-code permission', (done) => { + updatePermission('join-without-join-code', []).then(() => { + request.post(api('channels.join')) + .set(credentials) + .send({ + roomId: testChannelWithCode._id, + }) + .expect('Content-Type', 'application/json') + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.nested.property('errorType', 'error-code-invalid'); + }) + .end(done); + }); + }); + + it('should succeed when joining code-needed channel without join code and with join-without-join-code permission', (done) => { + updatePermission('join-without-join-code', ['admin']).then(() => { + request.post(api('channels.join')) + .set(credentials) + .send({ + roomId: testChannelWithCode._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('channel._id', testChannelWithCode._id); + }) + .end(done); + }); + }); + + it('leave channel', (done) => { + request.post(api('channels.leave')) + .set(credentials) + .send({ + roomId: testChannelWithCode._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + + it('should succeed when joining code-needed channel with join code', (done) => { + request.post(api('channels.join')) + .set(credentials) + .send({ + roomId: testChannelWithCode._id, + joinCode: '123', + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('channel._id', testChannelWithCode._id); + }) + .end(done); + }); + }); + it('/channels.invite', async () => { const roomInfo = await getRoomInfo(channel._id); diff --git a/tests/end-to-end/api/03-groups.js b/tests/end-to-end/api/03-groups.js index a303cea914a2..e33c3b6aeda8 100644 --- a/tests/end-to-end/api/03-groups.js +++ b/tests/end-to-end/api/03-groups.js @@ -537,6 +537,83 @@ describe('[Groups]', function() { .end(done); }); + it('/groups.online', (done) => { + request.get(api('groups.online')) + .set(credentials) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('online').and.to.be.an('array'); + }) + .end(done); + }); + + it('/groups.members', (done) => { + request.get(api('groups.members')) + .set(credentials) + .query({ + roomId: group._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('count'); + expect(res.body).to.have.property('total'); + expect(res.body).to.have.property('offset'); + expect(res.body).to.have.property('members').and.to.be.an('array'); + }) + .end(done); + }); + + it('/groups.files', (done) => { + request.get(api('groups.files')) + .set(credentials) + .query({ + roomId: group._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('count'); + expect(res.body).to.have.property('total'); + expect(res.body).to.have.property('offset'); + expect(res.body).to.have.property('files').and.to.be.an('array'); + }) + .end(done); + }); + + describe('/groups.listAll', () => { + it('should fail if the user doesnt have view-room-administration permission', (done) => { + updatePermission('view-room-administration', []).then(() => { + request.get(api('groups.listAll')) + .set(credentials) + .expect('Content-Type', 'application/json') + .expect(403) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('error', 'unauthorized'); + }) + .end(done); + }); + }); + it('should succeed if user has view-room-administration permission', (done) => { + updatePermission('view-room-administration', ['admin']).then(() => { + request.get(api('groups.listAll')) + .set(credentials) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('groups').and.to.be.an('array'); + }) + .end(done); + }); + }); + }); + it('/groups.counters', (done) => { request.get(api('groups.counters')) .set(credentials) diff --git a/tests/end-to-end/api/04-direct-message.js b/tests/end-to-end/api/04-direct-message.js index 5cc76691b73f..3899e77c70a7 100644 --- a/tests/end-to-end/api/04-direct-message.js +++ b/tests/end-to-end/api/04-direct-message.js @@ -10,6 +10,7 @@ import { apiEmail, } from '../../data/api-data.js'; import { password, adminUsername } from '../../data/user.js'; +import { updateSetting, updatePermission } from '../../data/permissions.helper'; describe('[Direct Messages]', function() { @@ -239,6 +240,82 @@ describe('[Direct Messages]', function() { .end(done); }); + it('/im.files', (done) => { + request.get(api('im.files')) + .set(credentials) + .query({ + roomId: directMessage._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('files'); + expect(res.body).to.have.property('count'); + expect(res.body).to.have.property('offset'); + expect(res.body).to.have.property('total'); + }) + .end(done); + }); + + describe('/im.messages.others', () => { + it('should fail when the endpoint is disabled', (done) => { + updateSetting('API_Enable_Direct_Message_History_EndPoint', false).then(() => { + request.get(api('im.messages.others')) + .set(credentials) + .query({ + roomId: directMessage._id, + }) + .expect('Content-Type', 'application/json') + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-endpoint-disabled'); + }) + .end(done); + }); + }); + it('should fail when the endpoint is enabled but the user doesnt have permission', (done) => { + updateSetting('API_Enable_Direct_Message_History_EndPoint', true).then(() => { + updatePermission('view-room-administration', []).then(() => { + request.get(api('im.messages.others')) + .set(credentials) + .query({ + roomId: directMessage._id, + }) + .expect('Content-Type', 'application/json') + .expect(403) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('error', 'unauthorized'); + }) + .end(done); + }); + }); + }); + it('should succeed when the endpoint is enabled and user has permission', (done) => { + updateSetting('API_Enable_Direct_Message_History_EndPoint', true).then(() => { + updatePermission('view-room-administration', ['admin']).then(() => { + request.get(api('im.messages.others')) + .set(credentials) + .query({ + roomId: directMessage._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('messages').and.to.be.an('array'); + expect(res.body).to.have.property('offset'); + expect(res.body).to.have.property('count'); + expect(res.body).to.have.property('total'); + }) + .end(done); + }); + }); + }); + }); + it('/im.close', (done) => { request.post(api('im.close')) .set(credentials) diff --git a/tests/end-to-end/api/05-chat.js b/tests/end-to-end/api/05-chat.js index 2572e3a16810..86ae717104c9 100644 --- a/tests/end-to-end/api/05-chat.js +++ b/tests/end-to-end/api/05-chat.js @@ -733,6 +733,7 @@ describe('[Chat]', function() { ytEmbedMsgId = ytPostResponse.body.message._id; imgUrlMsgId = imgUrlResponse.body.message._id; + imgUrlMsgId = imgUrlResponse.body.message._id; }); it('should have an iframe oembed with style max-width', (done) => { @@ -1475,6 +1476,112 @@ describe('[Chat]', function() { }); }); + describe('[/chat.unStarMessage]', () => { + it('should return an error when starMessage is not allowed in this server', (done) => { + updateSetting('Message_AllowStarring', false).then(() => { + request.post(api('chat.unStarMessage')) + .set(credentials) + .send({ + messageId: message._id, + }) + .expect('Content-Type', 'application/json') + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('error'); + }) + .end(done); + }); + }); + + it('should unstar Message successfully', (done) => { + updateSetting('Message_AllowStarring', true).then(() => { + request.post(api('chat.unStarMessage')) + .set(credentials) + .send({ + messageId: message._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.not.have.property('error'); + }) + .end(done); + }); + }); + }); + + describe('[/chat.ignoreUser]', () => { + it('should fail if invalid roomId', (done) => { + request.get(api('chat.ignoreUser')) + .set(credentials) + .query({ + rid: 'invalid', + userId: 'rocket.cat', + }) + .expect('Content-Type', 'application/json') + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-invalid-subscription'); + }) + .end(() => { + done(); + }); + }); + it('should fail if invalid userId', (done) => { + request.get(api('chat.ignoreUser')) + .set(credentials) + .query({ + rid: 'rocket.catrocketchat.internal.admin.test', + userId: 'invalid', + }) + .expect('Content-Type', 'application/json') + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-invalid-subscription'); + }) + .end(() => { + done(); + }); + }); + it('should successfully ignore user', (done) => { + request.get(api('chat.ignoreUser')) + .set(credentials) + .query({ + rid: 'rocket.catrocketchat.internal.admin.test', + userId: 'rocket.cat', + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(() => { + done(); + }); + }); + it('should successfully unignore user', (done) => { + request.get(api('chat.ignoreUser')) + .set(credentials) + .query({ + rid: 'rocket.catrocketchat.internal.admin.test', + userId: 'rocket.cat', + ignore: false, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(() => { + done(); + }); + }); + }); + describe('[/chat.getPinnedMessages]', () => { let roomId; before((done) => { diff --git a/tests/end-to-end/api/10-subscriptions.js b/tests/end-to-end/api/10-subscriptions.js index d4bb10226729..56d522ad6598 100644 --- a/tests/end-to-end/api/10-subscriptions.js +++ b/tests/end-to-end/api/10-subscriptions.js @@ -214,6 +214,20 @@ describe('[Subscriptions]', function() { done(); }); }); + it('should fail when there are no messages on an channel', (done) => { + request.post(api('subscriptions.unread')) + .set(credentials) + .send({ + roomId: testChannel._id, + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('error'); + expect(res.body).to.have.property('errorType', 'error-no-message-for-unread'); + }) + .end(done); + }); it('sending message', (done) => { request.post(api('chat.sendMessage')) .set(credentials) diff --git a/tests/end-to-end/api/22-push-token.js b/tests/end-to-end/api/22-push-token.js new file mode 100644 index 000000000000..2223d20c6c16 --- /dev/null +++ b/tests/end-to-end/api/22-push-token.js @@ -0,0 +1,192 @@ +import { expect } from 'chai'; + +import { getCredentials, api, request, credentials } from '../../data/api-data.js'; + +describe('push token', function() { + this.retries(0); + + before((done) => getCredentials(done)); + + describe('POST [/push.token]', () => { + it('should fail if not logged in', (done) => { + request.post(api('push.token')) + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should fail if missing type', (done) => { + request.post(api('push.token')) + .set(credentials) + .send({ + value: 'token', + appName: 'com.example.rocketchat', + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-type-param-not-valid'); + }) + .end(done); + }); + + it('should fail if missing value', (done) => { + request.post(api('push.token')) + .set(credentials) + .send({ + type: 'gcm', + appName: 'com.example.rocketchat', + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-token-param-not-valid'); + }) + .end(done); + }); + + it('should fail if missing appName', (done) => { + request.post(api('push.token')) + .set(credentials) + .send({ + type: 'gcm', + value: 'token', + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-appName-param-not-valid'); + }) + .end(done); + }); + + it('should fail if type param is unknown', (done) => { + request.post(api('push.token')) + .set(credentials) + .send({ + type: 'unknownPlatform', + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-type-param-not-valid'); + }) + .end(done); + }); + + it('should fail if token param is empty', (done) => { + request.post(api('push.token')) + .set(credentials) + .send({ + type: 'gcm', + appName: 'com.example.rocketchat', + value: '', + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-token-param-not-valid'); + }) + .end(done); + }); + + it('should add a token if valid', (done) => { + request.post(api('push.token')) + .set(credentials) + .send({ + type: 'gcm', + value: 'token', + appName: 'com.example.rocketchat', + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('result').and.to.be.an('object'); + }) + .end(done); + }); + }); + + describe('DELETE [/push.token]', () => { + it('should fail if not logged in', (done) => { + request.delete(api('push.token')) + .send({ + token: 'token', + }) + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should fail if missing token key', (done) => { + request.delete(api('push.token')) + .set(credentials) + .send({}) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-token-param-not-valid'); + }) + .end(done); + }); + + it('should fail if token is empty', (done) => { + request.delete(api('push.token')) + .set(credentials) + .send({ + token: '', + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-token-param-not-valid'); + }) + .end(done); + }); + + it('should fail if token is invalid', (done) => { + request.delete(api('push.token')) + .set(credentials) + .send({ + token: '123', + }) + .expect(404) + .expect((res) => { + expect(res.body).to.have.property('success', false); + }) + .end(done); + }); + + it('should delete a token if valid', (done) => { + request.delete(api('push.token')) + .set(credentials) + .send({ + token: 'token', + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + + it('should fail if token is already deleted', (done) => { + request.delete(api('push.token')) + .set(credentials) + .send({ + token: 'token', + }) + .expect(404) + .expect((res) => { + expect(res.body).to.have.property('success', false); + }) + .end(done); + }); + }); +}); diff --git a/tests/end-to-end/api/23-invites.js b/tests/end-to-end/api/23-invites.js new file mode 100644 index 000000000000..834a3704c778 --- /dev/null +++ b/tests/end-to-end/api/23-invites.js @@ -0,0 +1,230 @@ +import { expect } from 'chai'; + +import { getCredentials, api, request, credentials } from '../../data/api-data.js'; + +describe('Invites', function() { + let testInviteID; + this.retries(0); + + before((done) => getCredentials(done)); + describe('POST [/findOrCreateInvite]', () => { + it('should fail if not logged in', (done) => { + request.post(api('findOrCreateInvite')) + .send({ + rid: 'GENERAL', + days: 1, + maxUses: 10, + }) + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should fail if invalid roomid', (done) => { + request.post(api('findOrCreateInvite')) + .set(credentials) + .send({ + rid: 'invalid', + days: 1, + maxUses: 10, + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-invalid-room'); + }) + .end(done); + }); + + it('should create an invite for GENERAL', (done) => { + request.post(api('findOrCreateInvite')) + .set(credentials) + .send({ + rid: 'GENERAL', + days: 1, + maxUses: 10, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('days', 1); + expect(res.body).to.have.property('maxUses', 10); + expect(res.body).to.have.property('uses'); + expect(res.body).to.have.property('_id'); + testInviteID = res.body._id; + }) + .end(done); + }); + + it('should return an existing invite for GENERAL', (done) => { + request.post(api('findOrCreateInvite')) + .set(credentials) + .send({ + rid: 'GENERAL', + days: 1, + maxUses: 10, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('days', 1); + expect(res.body).to.have.property('maxUses', 10); + expect(res.body).to.have.property('uses'); + expect(res.body).to.have.property('_id', testInviteID); + }) + .end(done); + }); + }); + + describe('GET [/listInvites]', () => { + it('should fail if not logged in', (done) => { + request.get(api('listInvites')) + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should return the existing invite for GENERAL', (done) => { + request.get(api('listInvites')) + .set(credentials) + .expect(200) + .expect((res) => { + expect(res.body[0]).to.have.property('_id', testInviteID); + }) + .end(done); + }); + }); + + describe('POST [/useInviteToken]', () => { + it('should fail if not logged in', (done) => { + request.post(api('useInviteToken')) + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should fail if invalid token', (done) => { + request.post(api('useInviteToken')) + .set(credentials) + .send({ + token: 'invalid', + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-invalid-token'); + }) + .end(done); + }); + + it('should fail if missing token', (done) => { + request.post(api('useInviteToken')) + .set(credentials) + .send({ + }) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'error-invalid-token'); + }) + .end(done); + }); + + it('should use the existing invite for GENERAL', (done) => { + request.post(api('useInviteToken')) + .set(credentials) + .send({ + token: testInviteID, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + }); + + describe('POST [/validateInviteToken]', () => { + it('should warn if invalid token', (done) => { + request.post(api('validateInviteToken')) + .set(credentials) + .send({ + token: 'invalid', + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('valid', false); + }) + .end(done); + }); + + it('should succeed when valid token', (done) => { + request.post(api('validateInviteToken')) + .set(credentials) + .send({ + token: testInviteID, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('valid', true); + }) + .end(done); + }); + }); + + describe('DELETE [/removeInvite]', () => { + it('should fail if not logged in', (done) => { + request.delete(api(`removeInvite/${ testInviteID }`)) + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + + it('should fail if invalid token', (done) => { + request.delete(api('removeInvite/invalid')) + .set(credentials) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'invalid-invitation-id'); + }) + .end(done); + }); + + it('should succeed when valid token', (done) => { + request.delete(api(`removeInvite/${ testInviteID }`)) + .set(credentials) + .expect(200) + .expect((res) => { + expect(res.body).to.equal(true); + }) + .end(done); + }); + + it('should fail when deleting the same invite again', (done) => { + request.delete(api(`removeInvite/${ testInviteID }`)) + .set(credentials) + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('errorType', 'invalid-invitation-id'); + }) + .end(done); + }); + }); +}); diff --git a/tests/end-to-end/api/24-methods.js b/tests/end-to-end/api/24-methods.js new file mode 100644 index 000000000000..91c6cc3346c4 --- /dev/null +++ b/tests/end-to-end/api/24-methods.js @@ -0,0 +1,192 @@ +import { expect } from 'chai'; + +import { getCredentials, request, methodCall, api, credentials } from '../../data/api-data.js'; + +describe('Meteor.methods', function() { + this.retries(0); + + before((done) => getCredentials(done)); + + describe('[@loadMissedMessages]', () => { + let rid = false; + const date = { + $date: new Date().getTime(), + }; + let postMessageDate = false; + + const channelName = `methods-test-channel-${ Date.now() }`; + + before('@loadMissedMessages', (done) => { + request.post(api('groups.create')) + .set(credentials) + .send({ + name: channelName, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('group._id'); + expect(res.body).to.have.nested.property('group.name', channelName); + expect(res.body).to.have.nested.property('group.t', 'p'); + expect(res.body).to.have.nested.property('group.msgs', 0); + rid = res.body.group._id; + }) + .end(done); + }); + + before('@loadMissedMessages', (done) => { + request.post(api('chat.sendMessage')) + .set(credentials) + .send({ + message: { + text: 'Sample message', + rid, + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + postMessageDate = { $date: new Date().getTime() }; + }) + .end(done); + }); + + before('@loadMissedMessages', (done) => { + request.post(api('chat.sendMessage')) + .set(credentials) + .send({ + message: { + text: 'Second Sample message', + rid, + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + + it('should fail if not logged in', (done) => { + request.post(methodCall('loadMissedMessages')) + .send({ + message: JSON.stringify({ + method: 'loadMissedMessages', + params: [rid, date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(401) + .expect((res) => { + expect(res.body).to.have.property('status', 'error'); + expect(res.body).to.have.property('message'); + }) + .end(done); + }); + + it('should return an error if the rid param is empty', (done) => { + request.post(methodCall('loadMissedMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadMissedMessages', + params: ['', date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.include('error-invalid-room'); + }) + .end(done); + }); + + it('should return an error if the start param is missing', (done) => { + request.post(methodCall('loadMissedMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadMissedMessages', + params: [rid], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.include('Match error'); + }) + .end(done); + }); + + it('should return and empty list if using current time', (done) => { + request.post(methodCall('loadMissedMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadMissedMessages', + params: [rid, { $date: new Date().getTime() }], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.a('array'); + expect(data.result.length).to.be.equal(0); + }) + .end(done); + }); + + it('should return two messages if using a time from before the first msg was sent', (done) => { + request.post(methodCall('loadMissedMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadMissedMessages', + params: [rid, date], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.a('array'); + expect(data.result.length).to.be.equal(2); + }) + .end(done); + }); + + it('should return a single message if using a time from in between the messages', (done) => { + request.post(methodCall('loadMissedMessages')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'loadMissedMessages', + params: [rid, postMessageDate], + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.a.property('success', true); + expect(res.body).to.have.a.property('message').that.is.a('string'); + + const data = JSON.parse(res.body.message); + expect(data).to.have.a.property('result').that.is.a('array'); + expect(data.result.length).to.be.equal(1); + }) + .end(done); + }); + }); +});
{{_ "Channels_are_where_your_team_communicate"}}
{{_ "Opened_in_a_new_window"}}
{{_ "You have no permission to start a call"}}
{\n \"role\": {\n \"type\": \"select\",\n \"defaultValue\": \"student\",\n \"options\": [\"teacher\", \"student\"],\n \"required\": true,\n \"modifyRecordField\": {\n \"array\": true,\n \"field\": \"roles\"\n }\n },\n \"twitter\": {\n \"type\": \"text\",\n \"required\": true,\n \"minLength\": 2,\n \"maxLength\": 10\n }\n}
El vostre compte s'ha desactivat.
Vés a [Site_URL] i prova la millor eina de programari lliure per a treball a distància disponible actualment!
Vés a [Site_URL] i provi la millor solució de xat de codi obert disponible actualment!
Pots entrar utilitzant el teu correu-e: [email] i contrasenya: [password]. És possible que et demanem canviar-la quan entris per primera vegada.", "Accounts_UserAddedEmail_Description": "És possible utilitzar els marcadors:
traduir automàticament
%s
{\n \"en\": {\n \"Channels\": \"Rooms\"\n },\n \"pt\":{\n \"Channels\": \"Salas\"\n }\n}
Aneu a [Site_URL] i proveu la millor solució de col·laboració a distància de codi lliure!
Mostrant %s resultats arxivats
Mostrant %s resultats
/ ^ text $ / i
Ve a [Site_URL] y prueba la mejor solución de chat de código abierto disponible en la actualidad!
Ve a [Site_URL] y pruebe la mejor solución de chat de código abierto disponible en la actualidad!
auto-traducción
{\n \"en\": {\n \"Channels\": \"Rooms\"\n },\n\"pt\": {\n \"Channels\": \"Salas\"\n }\n}
/^text$/i
Allez sur [Site_URL] et essayer la meilleure solution de chat open source disponible aujourd'hui !
Vous pouvez vous connecter en utilisant votre email: [email] et mot de passe : [password]. Vous pouvez être amené à le changer après votre première connexion.", - "Accounts_UserAddedEmail_Description": "Vous pouvez utiliser les variables suivantes :
auto-translate
{\n \"en\": {\n \"Channels\": \"Rooms\"\n },\n \"pt\": {\n \"Channels\": \"Salas\"\n }\n}
10 ^ x
2 ^ x
x * 2
10^x
2^x
x*2
Accédez à [Site_URL] et essayez la meilleure solution de chat open source disponible aujourd'hui !
Affichage de %s résultats archivés
Afficher %s résultat(s)
Afficher %s résultats
{\n \"role\": {\n \"type\": \"select\",\n \"defaultValue\": \"student\",\n \"options\": [\"teacher\", \"student\"],\n \"required\": true,\n \"modifyRecordField\": {\n \"array\": true,\n \"field\": \"roles\"\n }\n},\n\"twitter\": {\n \"type\": \"text\",\n \"required\": true,\n \"minLength\": 2,\n \"maxLength\": 10\n }\n}
Ga naar [Site_URL] en probeer de beste open source chat-oplossing die vandaag beschikbaar is!
U kunt inloggen met uw e-mail: [email] en wachtwoord: [password]. U kan nodig zijn om het te veranderen na uw eerste login.", "Accounts_UserAddedEmail_Description": "U kunt de volgende variabels gebruiken:
automatische vertaling
{\n \"en\": {\n \"Channels\": \"Rooms\"\n }, \n\"pt\": {\n \"Channels\": \"Salas\"\n }\n}
Ga naar [Site_URL] en probeer de beste open source chat-oplossing die vandaag beschikbaar zijn!
Zichtbaar: %s gearchiveerde resultaten
Toon %s resultaten
\n \"en\": {\n \"Channels\": \"Rooms\"\n },\n \"pt\": {\n \"Channels\": \"Salas\"\n }\n}
Gå till [Site_URL] och prova den bästa öppen källkod chattlösningen som finns idag!
Du kan logga in med din e-post: [email] och lösenord: [password]. Du kan bli tvungen att ändra den vid första inloggningen.", "Accounts_UserAddedEmail_Description": "Du kan använda följande platsmarkörer:
Перейти до [Site_URL] і спробувати краще рішення чату з відкритим вихідним кодом на сьогоднішній день!
Ви можете увійти в систему, використовуючи адресу електронної пошти: [email] і пароль: [password]. Можливо, вам буде потрібно змінити його після першого входу в систему.", "Accounts_UserAddedEmail_Description": "Ви можете використовувати наступні наповнювачі:
{\n \"en\": {\n \"Channels\": \"Rooms\"\n }, \n\"pt\":{\n \"Channels\": \"Salas\"\n }\n}
用户[name]([email])已注册。
请检查“管理->用户”将其激活或删除。
请检查 “管理 -> 用户” 将其激活或删除。
用户[name]([email])已被注册。
原因:[reason]
请检查“管理->用户”以激活或删除它。
您的帐号已被激活。
您的帐号已获批准。
您的帐户已被停用。
您的帐号已被批准
您的帐号已被停用。
转到 [Site_URL] 并尝试当今最先进的开源聊天解决方案!
转到 [Site_URL] 并尝试当今最棒的开源聊天解决方案!
您可以使用您的电子邮件地址:[email] 和密码:[password] 进行登陆。您可能需要在您首次登录后更改密码。", "Accounts_UserAddedEmail_Description": "您可以使用以下占位符:
显示 %s 已归档结果
显示 %s 归档结果
显示%s条结果