diff --git a/.changeset/afraid-guests-jog.md b/.changeset/afraid-guests-jog.md deleted file mode 100644 index 420b9bb5d329..000000000000 --- a/.changeset/afraid-guests-jog.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@rocket.chat/meteor": minor -"@rocket.chat/livechat": minor ---- - -Created a `transferChat` Livechat API endpoint for transferring chats programmatically, the endpoint has all the limitations & permissions required that transferring via UI has diff --git a/.changeset/brown-crabs-chew.md b/.changeset/brown-crabs-chew.md new file mode 100644 index 000000000000..3291f18bf225 --- /dev/null +++ b/.changeset/brown-crabs-chew.md @@ -0,0 +1,13 @@ +--- +'@rocket.chat/uikit-playground': patch +'@rocket.chat/fuselage-ui-kit': patch +'@rocket.chat/ui-theming': patch +'@rocket.chat/ui-video-conf': patch +'@rocket.chat/ui-composer': patch +'@rocket.chat/gazzodown': patch +'@rocket.chat/ui-avatar': patch +'@rocket.chat/ui-client': patch +'@rocket.chat/meteor': patch +--- + +Bumped @rocket.chat/fuselage that fixes the Menu onPointerUp event behavior diff --git a/.changeset/calm-tigers-peel.md b/.changeset/calm-tigers-peel.md new file mode 100644 index 000000000000..32feed6f7107 --- /dev/null +++ b/.changeset/calm-tigers-peel.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/ui-kit": patch +--- + +fix UiKit error message: Failed to resolve module: @rocket.chat/icons diff --git a/.changeset/chatty-hounds-hammer.md b/.changeset/chatty-hounds-hammer.md deleted file mode 100644 index 1a2d3a7de559..000000000000 --- a/.changeset/chatty-hounds-hammer.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@rocket.chat/meteor": patch -"@rocket.chat/fuselage-ui-kit": patch ---- - -Fix validations from "UiKit" modal component diff --git a/.changeset/chilled-yaks-beg.md b/.changeset/chilled-yaks-beg.md deleted file mode 100644 index 670fa24887b7..000000000000 --- a/.changeset/chilled-yaks-beg.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -Fixed issue in Marketplace that caused a subscription app to show incorrect modals when subscribing diff --git a/.changeset/chilly-papayas-march.md b/.changeset/chilly-papayas-march.md deleted file mode 100644 index a7724b126695..000000000000 --- a/.changeset/chilly-papayas-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -Fixed SAML users' full names being updated on login regardless of the "Overwrite user fullname (use idp attribute)" setting diff --git a/.changeset/cuddly-brooms-approve.md b/.changeset/cuddly-brooms-approve.md deleted file mode 100644 index 24905bb91c62..000000000000 --- a/.changeset/cuddly-brooms-approve.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@rocket.chat/meteor": minor -"@rocket.chat/i18n": minor ---- - -Allows admins to customize the `Subject` field of Omnichannel email transcripts via setting. By passing a value to the setting `Custom email subject for transcript`, system will use it as the `Subject` field, unless a custom subject is passed when requesting a transcript. If there's no custom subject and setting value is empty, the current default value will be used diff --git a/.changeset/dry-pumas-draw.md b/.changeset/dry-pumas-draw.md deleted file mode 100644 index b66ca5157cd5..000000000000 --- a/.changeset/dry-pumas-draw.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@rocket.chat/meteor": patch -"@rocket.chat/livechat": patch ---- - -Fixed an issue that caused the widget to set the wrong department when using the setDepartment Livechat api endpoint in conjunction with a Livechat Trigger diff --git a/.changeset/empty-readers-teach.md b/.changeset/empty-readers-teach.md deleted file mode 100644 index b4bd075ef654..000000000000 --- a/.changeset/empty-readers-teach.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@rocket.chat/meteor": patch -"@rocket.chat/tools": patch -"@rocket.chat/account-service": patch ---- - -Fixed an inconsistent evaluation of the `Accounts_LoginExpiration` setting over the codebase. In some places, it was being used as milliseconds while in others as days. Invalid values produced different results. A helper function was created to centralize the setting validation and the proper value being returned to avoid edge cases. -Negative values may be saved on the settings UI panel but the code will interpret any negative, NaN or 0 value to the default expiration which is 90 days. diff --git a/.changeset/empty-toys-smell.md b/.changeset/empty-toys-smell.md new file mode 100644 index 000000000000..043d9c19567d --- /dev/null +++ b/.changeset/empty-toys-smell.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Federated users can no longer be deleted. diff --git a/.changeset/fast-buttons-shake.md b/.changeset/fast-buttons-shake.md deleted file mode 100644 index 6281fc9941ec..000000000000 --- a/.changeset/fast-buttons-shake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': minor ---- - -Fixed an issue where FCM actions did not respect environment's proxy settings diff --git a/.changeset/fast-lobsters-turn.md b/.changeset/fast-lobsters-turn.md new file mode 100644 index 000000000000..ff1d97ea7289 --- /dev/null +++ b/.changeset/fast-lobsters-turn.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +Fixed an issue due to an endpoint pagination that was causing that when an agent have assigned more than 50 departments, the departments have a blank space instead of the name. diff --git a/.changeset/fifty-mails-admire.md b/.changeset/fifty-mails-admire.md deleted file mode 100644 index b87fd11d47ee..000000000000 --- a/.changeset/fifty-mails-admire.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@rocket.chat/web-ui-registration': patch -"@rocket.chat/meteor": minor ---- - -Login services button was not respecting the button color and text color settings. Implemented a fix to respect these settings and change the button colors accordingly. - -Added a warning on all settings which allow admins to change OAuth button colors, so that they can be alerted about WCAG (Web Content Accessibility Guidelines) compliance. diff --git a/.changeset/funny-boats-guess.md b/.changeset/funny-boats-guess.md new file mode 100644 index 000000000000..076acff98329 --- /dev/null +++ b/.changeset/funny-boats-guess.md @@ -0,0 +1,6 @@ +--- +"@rocket.chat/meteor": minor +"@rocket.chat/i18n": minor +--- + +Added a new Audit endpoint `audit/rooms.members` that allows users with `view-members-list-all-rooms` to fetch a list of the members of any room even if the user is not part of it. diff --git a/.changeset/funny-snails-promise.md b/.changeset/funny-snails-promise.md deleted file mode 100644 index bdd74a60b1e9..000000000000 --- a/.changeset/funny-snails-promise.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@rocket.chat/meteor": patch -"@rocket.chat/livechat": patch ---- - -livechat `setDepartment` livechat api fixes: -- Changing department didn't reflect on the registration form in real time -- Changing the department mid conversation didn't transfer the chat -- Depending on the state of the department, it couldn't be set as default - diff --git a/.changeset/funny-wolves-tie.md b/.changeset/funny-wolves-tie.md deleted file mode 100644 index e2364ccb05e5..000000000000 --- a/.changeset/funny-wolves-tie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': patch ---- - -Fixed issue where bad word filtering was not working in the UI for messages diff --git a/.changeset/gentle-bugs-think.md b/.changeset/gentle-bugs-think.md new file mode 100644 index 000000000000..fc4738f3043a --- /dev/null +++ b/.changeset/gentle-bugs-think.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +Prevent `processRoomAbandonment` callback from erroring out when a room was inactive during a day Business Hours was not configured for. diff --git a/.changeset/gentle-news-wonder.md b/.changeset/gentle-news-wonder.md new file mode 100644 index 000000000000..dd3218003d7a --- /dev/null +++ b/.changeset/gentle-news-wonder.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": minor +--- + +Added a new 'Deactivated' tab to the users page, this tab lists users who have logged in for the first time but have been deactivated for any reason. Also added the UI code for the Active tab; diff --git a/.changeset/gorgeous-hotels-attend.md b/.changeset/gorgeous-hotels-attend.md new file mode 100644 index 000000000000..fd858d7ace86 --- /dev/null +++ b/.changeset/gorgeous-hotels-attend.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +Stopped non channel members from dragging and dropping files in a channel they do not belong diff --git a/.changeset/grumpy-worms-appear.md b/.changeset/grumpy-worms-appear.md deleted file mode 100644 index fb9fab77b24c..000000000000 --- a/.changeset/grumpy-worms-appear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/i18n": patch ---- - -Fixed wrong wording on a federation setting diff --git a/.changeset/happy-peaches-nail.md b/.changeset/happy-peaches-nail.md deleted file mode 100644 index 2dfb2151ced0..000000000000 --- a/.changeset/happy-peaches-nail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -Fixed issue with livechat agents not being able to leave omnichannel rooms if joining after a room has been closed by the visitor (due to race conditions) diff --git a/.changeset/hip-queens-taste.md b/.changeset/hip-queens-taste.md deleted file mode 100644 index f1d7bb6f3f0e..000000000000 --- a/.changeset/hip-queens-taste.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": minor ---- - -Added the possibility for apps to remove users from a room diff --git a/.changeset/hungry-wombats-act.md b/.changeset/hungry-wombats-act.md deleted file mode 100644 index 4e50b172e17e..000000000000 --- a/.changeset/hungry-wombats-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -Fixed an issue where non-encrypted attachments were not being downloaded diff --git a/.changeset/kind-drinks-joke.md b/.changeset/kind-drinks-joke.md new file mode 100644 index 000000000000..b235f5556805 --- /dev/null +++ b/.changeset/kind-drinks-joke.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Fixed issue with asterisk-wrapped text not becoming bold when user enters profile custom status. diff --git a/.changeset/large-geese-ring.md b/.changeset/large-geese-ring.md new file mode 100644 index 000000000000..9b36edf1c02d --- /dev/null +++ b/.changeset/large-geese-ring.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': minor +--- + +Replaces an outdated banner with the Bubble component in order to display retention policy warning diff --git a/.changeset/large-vans-attack.md b/.changeset/large-vans-attack.md deleted file mode 100644 index c1008b2ca06f..000000000000 --- a/.changeset/large-vans-attack.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -fixed the contextual bar closing when editing thread messages instead of cancelling the message edit diff --git a/.changeset/lemon-steaks-provide.md b/.changeset/lemon-steaks-provide.md new file mode 100644 index 000000000000..29f0289419a0 --- /dev/null +++ b/.changeset/lemon-steaks-provide.md @@ -0,0 +1,6 @@ +--- +'@rocket.chat/i18n': minor +'@rocket.chat/meteor': minor +--- + +Added an accordion for advanced settings on Create teams and channels diff --git a/.changeset/lucky-beds-glow.md b/.changeset/lucky-beds-glow.md deleted file mode 100644 index 3e23797025e1..000000000000 --- a/.changeset/lucky-beds-glow.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@rocket.chat/ui-client': minor -'@rocket.chat/i18n': minor -'@rocket.chat/meteor': minor ---- - -Feature Preview: New Navigation - `Header` and `Contextualbar` size improvements consistent with the new global `NavBar` diff --git a/.changeset/lucky-countries-look.md b/.changeset/lucky-countries-look.md deleted file mode 100644 index 79deda53edfc..000000000000 --- a/.changeset/lucky-countries-look.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': patch ---- - -Fixed the disappearance of some settings after navigation under network latency. diff --git a/.changeset/many-tables-love.md b/.changeset/many-tables-love.md deleted file mode 100644 index 8f37283c6a96..000000000000 --- a/.changeset/many-tables-love.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@rocket.chat/meteor": minor -"@rocket.chat/model-typings": minor ---- - -Fixed Livechat rooms being displayed in the Engagement Dashboard's "Channels" tab diff --git a/.changeset/mean-hairs-move.md b/.changeset/mean-hairs-move.md deleted file mode 100644 index c92293d6ae95..000000000000 --- a/.changeset/mean-hairs-move.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': minor ---- - -Fixed an issue where adding `OVERWRITE_SETTING_` for any setting wasn't immediately taking effect sometimes, and needed a server restart to reflect. diff --git a/.changeset/nervous-rockets-impress.md b/.changeset/nervous-rockets-impress.md deleted file mode 100644 index 26e9276193de..000000000000 --- a/.changeset/nervous-rockets-impress.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -Fixes Missing line breaks on Omnichannel Room Info Panel diff --git a/.changeset/new-balloons-speak.md b/.changeset/new-balloons-speak.md deleted file mode 100644 index 7d4e7cd3a57e..000000000000 --- a/.changeset/new-balloons-speak.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': patch ---- - -Fixed web client crashing on Firefox private window. Firefox disables access to service workers inside private windows. Rocket.Chat needs service workers to process E2EE encrypted files on rooms. These types of files won't be available inside private windows, but the rest of E2EE encrypted features should work normally diff --git a/.changeset/new-mayflies-wait.md b/.changeset/new-mayflies-wait.md new file mode 100644 index 000000000000..832db68cecd4 --- /dev/null +++ b/.changeset/new-mayflies-wait.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Deactivating users who federated will now be permanent. diff --git a/.changeset/new-scissors-love.md b/.changeset/new-scissors-love.md deleted file mode 100644 index fb962407b353..000000000000 --- a/.changeset/new-scissors-love.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@rocket.chat/omnichannel-services': minor -'@rocket.chat/pdf-worker': minor -'@rocket.chat/core-services': minor -'@rocket.chat/model-typings': minor -'@rocket.chat/i18n': minor -'@rocket.chat/meteor': minor ---- - -Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. - -Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. diff --git a/.changeset/nice-laws-eat.md b/.changeset/nice-laws-eat.md deleted file mode 100644 index e99e4f219ef9..000000000000 --- a/.changeset/nice-laws-eat.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'rocketchat-services': minor -'@rocket.chat/core-services': minor -'@rocket.chat/model-typings': minor -'@rocket.chat/ui-video-conf': minor -'@rocket.chat/core-typings': minor -'@rocket.chat/ui-contexts': minor -'@rocket.chat/models': minor -'@rocket.chat/ui-kit': minor -'@rocket.chat/i18n': minor -'@rocket.chat/meteor': minor ---- - -New Feature: Video Conference Persistent Chat. -This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. \ No newline at end of file diff --git a/.changeset/perfect-coins-camp.md b/.changeset/perfect-coins-camp.md deleted file mode 100644 index 4dbddf965742..000000000000 --- a/.changeset/perfect-coins-camp.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -fixed an issue in the "Create discussion" form, that would have the "Create" action button disabled even though the form is prefilled when opening it from the message action diff --git a/.changeset/polite-foxes-repair.md b/.changeset/polite-foxes-repair.md deleted file mode 100644 index 2f524c7e5f10..000000000000 --- a/.changeset/polite-foxes-repair.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': minor ---- - -Added a method to the Apps-Engine that allows apps to read multiple messages from a room diff --git a/.changeset/popular-bottles-visit.md b/.changeset/popular-bottles-visit.md new file mode 100644 index 000000000000..9e44e9dd7144 --- /dev/null +++ b/.changeset/popular-bottles-visit.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +Fixed an issue that caused UI to show an error when the call to get the Business Hour type from settings returned `undefined`. diff --git a/.changeset/popular-trees-lay.md b/.changeset/popular-trees-lay.md deleted file mode 100644 index f38ef1f92367..000000000000 --- a/.changeset/popular-trees-lay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -Removed 'Hide' option in the room menu for Omnichannel conversations. diff --git a/.changeset/proud-waves-bathe.md b/.changeset/proud-waves-bathe.md deleted file mode 100644 index 556fa3af80e1..000000000000 --- a/.changeset/proud-waves-bathe.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@rocket.chat/meteor": minor -"@rocket.chat/model-typings": minor ---- - -Improved Engagement Dashboard's "Channels" tab performance by not returning rooms that had no activity in the analyzed period diff --git a/.changeset/proud-years-buy.md b/.changeset/proud-years-buy.md new file mode 100644 index 000000000000..94f4ab0df736 --- /dev/null +++ b/.changeset/proud-years-buy.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/i18n': patch +--- + +Fixes a typo in german translation and fixes the broken hyperlink for Resend and Change Email diff --git a/.changeset/quick-ducks-live.md b/.changeset/quick-ducks-live.md deleted file mode 100644 index ad628c13d087..000000000000 --- a/.changeset/quick-ducks-live.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -Fixed LDAP rooms, teams and roles syncs not being triggered on login even when the "Update User Data on Login" setting is enabled diff --git a/.changeset/rare-penguins-hope.md b/.changeset/rare-penguins-hope.md deleted file mode 100644 index 187bd9d09ddc..000000000000 --- a/.changeset/rare-penguins-hope.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@rocket.chat/meteor": patch -"@rocket.chat/core-typings": patch ---- - -Allow customFields on livechat creation bridge diff --git a/.changeset/red-numbers-happen.md b/.changeset/red-numbers-happen.md deleted file mode 100644 index 61cb0d2b7586..000000000000 --- a/.changeset/red-numbers-happen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -Fixed "Copy link" message action enabled in Starred and Pinned list for End to End Encrypted channels, this action is disabled now diff --git a/.changeset/red-vans-shave.md b/.changeset/red-vans-shave.md deleted file mode 100644 index ddf76535087e..000000000000 --- a/.changeset/red-vans-shave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -Fixed issue that caused unintentional clicks when scrolling the channels sidebar on safari/chrome in iOS diff --git a/.changeset/rich-carpets-brush.md b/.changeset/rich-carpets-brush.md deleted file mode 100644 index 16741e31e54a..000000000000 --- a/.changeset/rich-carpets-brush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': patch ---- - -Fixed some anomalies related to disabled E2EE rooms. Earlier there are some weird issues with disabled E2EE rooms, this PR fixes these anomalies. diff --git a/.changeset/rooms-table-ts.md b/.changeset/rooms-table-ts.md new file mode 100644 index 000000000000..b5055ad26f69 --- /dev/null +++ b/.changeset/rooms-table-ts.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': minor +--- + +Add "Created at" column to admin rooms table diff --git a/.changeset/rotten-eggs-end.md b/.changeset/rotten-eggs-end.md deleted file mode 100644 index 7d0ad6ee5047..000000000000 --- a/.changeset/rotten-eggs-end.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@rocket.chat/meteor": minor -"@rocket.chat/i18n": patch -"@rocket.chat/ui-client": patch ---- - -Implemented a new tab to the users page called 'Active', this tab lists all users who have logged in for the first time and are active. diff --git a/.changeset/rude-dogs-burn.md b/.changeset/rude-dogs-burn.md new file mode 100644 index 000000000000..e81f00782083 --- /dev/null +++ b/.changeset/rude-dogs-burn.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +Fixed a behavior when updating messages that prevented the `customFields` prop from being updated if there were no changes to the `msg` property. Now, `customFields` will be always updated on message update even if `msg` doesn't change diff --git a/.changeset/selfish-emus-sing.md b/.changeset/selfish-emus-sing.md deleted file mode 100644 index 315d674a1857..000000000000 --- a/.changeset/selfish-emus-sing.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@rocket.chat/meteor": minor -"@rocket.chat/i18n": minor ---- - -Added account setting `Accounts_Default_User_Preferences_sidebarSectionsOrder` to allow users to reorganize sidebar sections diff --git a/.changeset/shaggy-hats-raise.md b/.changeset/shaggy-hats-raise.md deleted file mode 100644 index 40ee9f8fbb55..000000000000 --- a/.changeset/shaggy-hats-raise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": minor ---- - -Added a new setting `Livechat_transcript_send_always` that allows admins to decide if email transcript should be sent all the times when a conversation is closed. This setting bypasses agent's preferences. For this setting to work, `Livechat_enable_transcript` should be off, meaning that visitors will no longer receive the option to decide if they want a transcript or not. diff --git a/.changeset/sixty-nails-clean.md b/.changeset/sixty-nails-clean.md deleted file mode 100644 index 7d13e02f0bd3..000000000000 --- a/.changeset/sixty-nails-clean.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': patch ---- - -Fixed an issue that prevented the option to start a discussion from being shown on the message actions diff --git a/.changeset/smooth-lobsters-flash.md b/.changeset/smooth-lobsters-flash.md deleted file mode 100644 index 541d5069ee9c..000000000000 --- a/.changeset/smooth-lobsters-flash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': patch ---- - -Fix show correct user roles after updating user roles on admin edit user panel. diff --git a/.changeset/soft-donkeys-thank.md b/.changeset/soft-donkeys-thank.md deleted file mode 100644 index 7273ddcffca4..000000000000 --- a/.changeset/soft-donkeys-thank.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@rocket.chat/meteor": patch -"@rocket.chat/mock-providers": patch -"@rocket.chat/ui-contexts": patch -"@rocket.chat/web-ui-registration": patch ---- - -Fixed an issue with blocked login when dismissed 2FA modal by clicking outside of it or pressing the escape key diff --git a/.changeset/sour-forks-breathe.md b/.changeset/sour-forks-breathe.md deleted file mode 100644 index 2d1076845fa9..000000000000 --- a/.changeset/sour-forks-breathe.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": minor ---- - -Extended apps-engine events for users leaving a room to also fire when being removed by another user. Also added the triggering user's information to the event's context payload. diff --git a/.changeset/spicy-kings-think.md b/.changeset/spicy-kings-think.md new file mode 100644 index 000000000000..9e8f3648b28c --- /dev/null +++ b/.changeset/spicy-kings-think.md @@ -0,0 +1,6 @@ +--- +"@rocket.chat/meteor": patch +--- + +Fixes multiple problems with the `processRoomAbandonment` hook. This hook is in charge of calculating the time a room has been abandoned (this means, the time that elapsed since a room was last answered by an agent until it was closed). However, when business hours were enabled and the user didn't open on one day, if an abandoned room happened to be abandoned _over_ the day there was no business hour configuration, then the process will error out. +Additionally, the values the code was calculating were not right. When business hours are enabled, this code should only count the abandonment time _while a business hour was open_. When rooms were left abandoned for days or weeks, this will also throw an error or output an invalid count. diff --git a/.changeset/strong-swans-double.md b/.changeset/strong-swans-double.md new file mode 100644 index 000000000000..db521aeeef0f --- /dev/null +++ b/.changeset/strong-swans-double.md @@ -0,0 +1,6 @@ +--- +'@rocket.chat/uikit-playground': minor +'@rocket.chat/meteor': minor +--- + +Upgrades fuselage-toastbar version in order to add pause on hover functionality diff --git a/.changeset/swift-maps-tickle.md b/.changeset/swift-maps-tickle.md new file mode 100644 index 000000000000..076ead1cea4c --- /dev/null +++ b/.changeset/swift-maps-tickle.md @@ -0,0 +1,9 @@ +--- +'@rocket.chat/core-services': minor +'@rocket.chat/model-typings': minor +'@rocket.chat/core-typings': minor +'@rocket.chat/rest-typings': minor +'@rocket.chat/meteor': minor +--- + +Added `sidepanel` field to `teams.create` and `rooms.saveRoomSettings` endpoints diff --git a/.changeset/ten-bulldogs-clap.md b/.changeset/ten-bulldogs-clap.md new file mode 100644 index 000000000000..15f88bb6bd97 --- /dev/null +++ b/.changeset/ten-bulldogs-clap.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +fixed an issue with the "follow message" button not changing state after click diff --git a/.changeset/thin-windows-reply.md b/.changeset/thin-windows-reply.md deleted file mode 100644 index 1a32e1ddebfb..000000000000 --- a/.changeset/thin-windows-reply.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': patch ---- - -Fixes an issue not displaying all groups in settings list diff --git a/.changeset/thirty-dryers-help.md b/.changeset/thirty-dryers-help.md new file mode 100644 index 000000000000..6d9a7dc205ae --- /dev/null +++ b/.changeset/thirty-dryers-help.md @@ -0,0 +1,6 @@ +--- +"@rocket.chat/meteor": patch +"@rocket.chat/livechat": patch +--- + +Fixed issue where `after-registration-triggers` would show up in a page when the user was not yet registered diff --git a/.changeset/twelve-windows-train.md b/.changeset/twelve-windows-train.md new file mode 100644 index 000000000000..4c6ef548e650 --- /dev/null +++ b/.changeset/twelve-windows-train.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Fixed: Custom fields in extraData now correctly added to extraRoomInfo by livechat.beforeRoom callback during livechat room creation. diff --git a/.changeset/violet-brooms-press.md b/.changeset/violet-brooms-press.md deleted file mode 100644 index 632026d6fe2e..000000000000 --- a/.changeset/violet-brooms-press.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': patch ---- - -Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) diff --git a/.changeset/weak-insects-sort.md b/.changeset/weak-insects-sort.md deleted file mode 100644 index cbbe7c4aa08c..000000000000 --- a/.changeset/weak-insects-sort.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -Improving UX by change the position of room info actions buttons and menu order to avoid missclick in destructive actions. diff --git a/.changeset/weak-pets-talk.md b/.changeset/weak-pets-talk.md deleted file mode 100644 index abaa9c683d65..000000000000 --- a/.changeset/weak-pets-talk.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@rocket.chat/omnichannel-services': patch -'@rocket.chat/core-services': patch -'@rocket.chat/meteor': patch ---- - -Reduced time on generation of PDF transcripts. Earlier Rocket.Chat was fetching the required translations everytime a PDF transcript was requested, this process was async and was being unnecessarily being performed on every pdf transcript request. This PR improves this and now the translations are loaded at the start and kept in memory to process further pdf transcripts requests. This reduces the time of asynchronously fetching translations again and again. diff --git a/.changeset/weak-taxis-design.md b/.changeset/weak-taxis-design.md deleted file mode 100644 index a2d435495cd7..000000000000 --- a/.changeset/weak-taxis-design.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@rocket.chat/meteor': minor ---- - -Added handling of attachments in Omnichannel email transcripts. Earlier attachments were being skipped and were being shown as empty space, now it should render the image attachments and should show relevant error message for unsupported attachments. diff --git a/.changeset/weak-tigers-suffer.md b/.changeset/weak-tigers-suffer.md deleted file mode 100644 index 91748a43c677..000000000000 --- a/.changeset/weak-tigers-suffer.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@rocket.chat/meteor": minor -"@rocket.chat/model-typings": minor -"@rocket.chat/rest-typings": minor ---- - -Added the ability to filter chats by `queued` on the Current Chats Omnichannel page diff --git a/.changeset/witty-bats-develop.md b/.changeset/witty-bats-develop.md deleted file mode 100644 index 42c9409d9ef3..000000000000 --- a/.changeset/witty-bats-develop.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -"@rocket.chat/meteor": patch -"@rocket.chat/apps": patch -"@rocket.chat/core-services": patch -"@rocket.chat/core-typings": patch -"@rocket.chat/fuselage-ui-kit": patch -"@rocket.chat/rest-typings": patch -"@rocket.chat/ddp-streamer": patch -"@rocket.chat/presence": patch -"rocketchat-services": patch ---- - -Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. diff --git a/.github/actions/build-docker/action.yml b/.github/actions/build-docker/action.yml index 364957ecdf01..5af39b924057 100644 --- a/.github/actions/build-docker/action.yml +++ b/.github/actions/build-docker/action.yml @@ -17,13 +17,28 @@ inputs: required: false description: 'Containers to build along with Rocket.Chat' type: string + turbo-cache: + required: false + description: 'Enable turbo cache' + default: 'true' + publish-image: + required: false + description: 'Publish image' + default: 'true' + setup: + required: false + description: 'Setup node.js' + default: 'true' + NPM_TOKEN: + required: false + description: 'NPM token' runs: using: composite steps: - name: Login to GitHub Container Registry - if: (github.event.pull_request.head.repo.full_name == github.repository || github.event_name == 'release' || github.ref == 'refs/heads/develop') + if: inputs.publish-image == 'true' &&(github.event.pull_request.head.repo.full_name == github.repository || github.event_name == 'release' || github.ref == 'refs/heads/develop') uses: docker/login-action@v2 with: registry: ghcr.io @@ -31,7 +46,7 @@ runs: password: ${{ inputs.CR_PAT }} - name: Restore build - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: build path: /tmp/build @@ -42,17 +57,21 @@ runs: cd /tmp/build tar xzf Rocket.Chat.tar.gz rm Rocket.Chat.tar.gz - - - uses: dtinth/setup-github-actions-caching-for-turbo@v1 + - uses: rharkor/caching-for-turbo@v1.5 + # if we are testing a PR from a fork, we already called the turbo cache at this point, so it should be false + if: inputs.turbo-cache == 'true' - name: Setup NodeJS uses: ./.github/actions/setup-node + if: inputs.setup == 'true' with: node-version: ${{ inputs.node-version }} cache-modules: true install: true + NPM_TOKEN: ${{ inputs.NPM_TOKEN }} - run: yarn build + if: inputs.setup == 'true' shell: bash - name: Build Docker images @@ -63,9 +82,14 @@ runs: docker compose -f docker-compose-ci.yml build "${args[@]}" - name: Publish Docker images to GitHub Container Registry - if: (github.event.pull_request.head.repo.full_name == github.repository || github.event_name == 'release' || github.ref == 'refs/heads/develop') + if: inputs.publish-image == 'true' && (github.event.pull_request.head.repo.full_name == github.repository || github.event_name == 'release' || github.ref == 'refs/heads/develop') shell: bash run: | args=(rocketchat ${{ inputs.build-containers }}) docker compose -f docker-compose-ci.yml push "${args[@]}" + + - name: Clean up temporary files + shell: bash + run: | + sudo rm -rf /tmp/bundle diff --git a/.github/actions/meteor-build/action.yml b/.github/actions/meteor-build/action.yml index d261000ceb87..525595146700 100644 --- a/.github/actions/meteor-build/action.yml +++ b/.github/actions/meteor-build/action.yml @@ -13,6 +13,9 @@ inputs: required: true description: 'Node version' type: string + NPM_TOKEN: + required: false + description: 'NPM token' runs: using: composite @@ -29,6 +32,7 @@ runs: node-version: ${{ inputs.node-version }} cache-modules: true install: true + NPM_TOKEN: ${{ inputs.NPM_TOKEN }} # - name: Free disk space # run: | @@ -91,7 +95,7 @@ runs: meteor node -v git version - - uses: dtinth/setup-github-actions-caching-for-turbo@v1 + - uses: rharkor/caching-for-turbo@v1.5 - name: Translation check shell: bash @@ -124,7 +128,8 @@ runs: tar czf /tmp/Rocket.Chat.tar.gz bundle - name: Store build - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: build path: /tmp/Rocket.Chat.tar.gz + overwrite: true diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml index caa3c63e00f0..1035e2835792 100644 --- a/.github/actions/setup-node/action.yml +++ b/.github/actions/setup-node/action.yml @@ -1,22 +1,27 @@ name: 'Setup Node' +description: 'Setup NodeJS' inputs: node-version: required: true - type: string + description: 'Node version' cache-modules: required: false - type: boolean + description: 'Cache node_modules' install: required: false - type: boolean + description: 'Install dependencies' deno-dir: required: false - type: string + description: 'Deno directory' default: ~/.deno-cache + NPM_TOKEN: + required: false + description: 'NPM token' outputs: node-version: + description: 'Node version' value: ${{ steps.node-version.outputs.node-version }} runs: @@ -32,6 +37,7 @@ runs: uses: actions/cache@v3 with: path: | + .turbo/cache node_modules ${{ env.DENO_DIR }} apps/meteor/node_modules @@ -48,6 +54,13 @@ runs: node-version: ${{ inputs.node-version }} cache: 'yarn' + - name: yarn login + shell: bash + if: inputs.NPM_TOKEN + run: | + echo "//registry.npmjs.org/:_authToken=${{ inputs.NPM_TOKEN }}" > ~/.npmrc + - name: yarn install + if: inputs.install shell: bash run: yarn diff --git a/.github/workflows/ci-code-check.yml b/.github/workflows/ci-code-check.yml index 75deb399d2f2..af50b3230ba7 100644 --- a/.github/workflows/ci-code-check.yml +++ b/.github/workflows/ci-code-check.yml @@ -35,6 +35,7 @@ jobs: node-version: ${{ inputs.node-version }} cache-modules: true install: true + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # - name: Free disk space # run: | @@ -42,7 +43,7 @@ jobs: # docker rmi $(docker image ls -aq) # df -h - - uses: dtinth/setup-github-actions-caching-for-turbo@v1 + - uses: rharkor/caching-for-turbo@v1.5 - name: Cache TypeCheck uses: actions/cache@v3 diff --git a/.github/workflows/ci-test-e2e.yml b/.github/workflows/ci-test-e2e.yml index 6ac9d751fc7a..e6c02b7b6417 100644 --- a/.github/workflows/ci-test-e2e.yml +++ b/.github/workflows/ci-test-e2e.yml @@ -130,16 +130,24 @@ jobs: node-version: ${{ inputs.node-version }} cache-modules: true install: true + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + - uses: rharkor/caching-for-turbo@v1.5 + + - run: yarn build # if we are testing a PR from a fork, we need to build the docker image at this point - uses: ./.github/actions/build-docker - if: github.event.pull_request.head.repo.full_name != github.repository + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository with: CR_USER: ${{ secrets.CR_USER }} CR_PAT: ${{ secrets.CR_PAT }} node-version: ${{ inputs.node-version }} - - - uses: dtinth/setup-github-actions-caching-for-turbo@v1 + # we already called the turbo cache at this point, so it should be false + turbo-cache: false + # the same reason we need to rebuild the docker image at this point is the reason we dont want to publish it + publish-image: false + setup: false + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Start httpbin container and wait for it to be ready if: inputs.type == 'api' @@ -159,8 +167,6 @@ jobs: exit 1 fi - - run: yarn build - - name: Prepare code coverage directory if: inputs.release == 'ee' run: | @@ -221,6 +227,8 @@ jobs: sleep 10 done; + - name: Remove unused Docker images + run: docker system prune -af - name: E2E Test API if: inputs.type == 'api' working-directory: ./apps/meteor @@ -281,9 +289,9 @@ jobs: - name: Store playwright test trace if: inputs.type == 'ui' && always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: playwright-test-trace${{ inputs.release }} + name: playwright-test-trace-${{ matrix.mongodb-version }}-${{ matrix.shard }} path: ./apps/meteor/tests/e2e/.playwright* - name: Show server logs if E2E test failed @@ -314,14 +322,14 @@ jobs: - name: Store e2e-api-ee-coverage if: inputs.type == 'api' && inputs.release == 'ee' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: e2e-api-ee-coverage + name: e2e-api-ee-coverage-${{ matrix.mongodb-version }}-${{ matrix.shard }} path: /tmp/coverage - name: Store e2e-ee-coverage if: inputs.type == 'ui' && inputs.release == 'ee' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: e2e-ee-coverage + name: e2e-ee-coverage-${{ matrix.mongodb-version }}-${{ matrix.shard }} path: ./apps/meteor/coverage* diff --git a/.github/workflows/ci-test-unit.yml b/.github/workflows/ci-test-unit.yml index bfb22ffa4e73..840808ff5e31 100644 --- a/.github/workflows/ci-test-unit.yml +++ b/.github/workflows/ci-test-unit.yml @@ -39,8 +39,9 @@ jobs: node-version: ${{ inputs.node-version }} cache-modules: true install: true + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - uses: dtinth/setup-github-actions-caching-for-turbo@v1 + - uses: rharkor/caching-for-turbo@v1.5 - name: Unit Test run: yarn testunit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 411aa2cc5b1a..514dd6d1c518 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -152,6 +152,7 @@ jobs: node-version: ${{ needs.release-versions.outputs.node-version }} cache-modules: true install: true + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Cache vite uses: actions/cache@v3 @@ -161,7 +162,7 @@ jobs: restore-keys: | vite-local-cache-${{ runner.os }}- - - uses: dtinth/setup-github-actions-caching-for-turbo@v1 + - uses: rharkor/caching-for-turbo@v1.5 - name: Build Rocket.Chat Packages run: yarn build @@ -253,6 +254,7 @@ jobs: node-version: ${{ needs.release-versions.outputs.node-version }} platform: ${{ matrix.platform }} build-containers: ${{ matrix.platform == 'alpine' && 'authorization-service account-service ddp-streamer-service presence-service stream-hub-service queue-worker-service omnichannel-transcript-service' || '' }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} build-gh-docker: name: đŸšĸ Build Docker Images for Production @@ -280,6 +282,7 @@ jobs: node-version: ${{ needs.release-versions.outputs.node-version }} platform: ${{ matrix.platform }} build-containers: ${{ matrix.platform == 'alpine' && 'authorization-service account-service ddp-streamer-service presence-service stream-hub-service queue-worker-service omnichannel-transcript-service' || '' }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Rename official Docker tag to GitHub Container Registry if: matrix.platform == 'official' @@ -492,7 +495,7 @@ jobs: ref: ${{ github.ref }} - name: Restore build - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: build path: /tmp/build @@ -540,7 +543,7 @@ jobs: - uses: actions/checkout@v4 - name: Restore build - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: build path: /tmp/build @@ -560,6 +563,7 @@ jobs: release: preview username: ${{ secrets.CR_USER }} password: ${{ secrets.CR_PAT }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} docker-image-publish: name: 🚀 Publish Docker Image (main) @@ -576,13 +580,13 @@ jobs: steps: - name: Login to DockerHub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASS }} - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ secrets.CR_USER }} @@ -683,13 +687,13 @@ jobs: steps: - name: Login to DockerHub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASS }} - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ secrets.CR_USER }} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 483b404a6dc8..202a02dd7785 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -26,7 +26,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 # Override language selection by uncommenting this and choosing your languages with: languages: javascript @@ -34,7 +34,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -48,4 +48,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/new-release.yml b/.github/workflows/new-release.yml index f10578d5879f..b2eae5d90b92 100644 --- a/.github/workflows/new-release.yml +++ b/.github/workflows/new-release.yml @@ -37,8 +37,9 @@ jobs: node-version: 14.21.3 cache-modules: true install: true + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - uses: dtinth/setup-github-actions-caching-for-turbo@v1 + - uses: rharkor/caching-for-turbo@v1.5 - name: Build packages run: yarn build diff --git a/.github/workflows/pr-title-checker.yml b/.github/workflows/pr-title-checker.yml index bc9d1f042d58..d8f6db97c455 100644 --- a/.github/workflows/pr-title-checker.yml +++ b/.github/workflows/pr-title-checker.yml @@ -12,6 +12,6 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: thehanimo/pr-title-checker@v1.4.1 + - uses: thehanimo/pr-title-checker@v1.4.2 with: GITHUB_TOKEN: ${{ secrets.RC_TITLE_CHECKER }} diff --git a/.github/workflows/pr-update-description.yml b/.github/workflows/pr-update-description.yml index 71b4ffeda801..084f2a383480 100644 --- a/.github/workflows/pr-update-description.yml +++ b/.github/workflows/pr-update-description.yml @@ -24,8 +24,9 @@ jobs: node-version: 14.21.3 cache-modules: true install: true + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - uses: dtinth/setup-github-actions-caching-for-turbo@v1 + - uses: rharkor/caching-for-turbo@v1.5 - name: Build packages run: yarn build @@ -36,4 +37,3 @@ jobs: action: update-pr-description env: GITHUB_TOKEN: ${{ secrets.CI_PAT }} - diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index e133a3153722..3f2067ac7ec3 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -27,8 +27,9 @@ jobs: node-version: 14.21.3 cache-modules: true install: true + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - uses: dtinth/setup-github-actions-caching-for-turbo@v1 + - uses: rharkor/caching-for-turbo@v1.5 - name: Build packages run: yarn build diff --git a/.github/workflows/update-version-durability.yml b/.github/workflows/update-version-durability.yml index e52b4870b369..90c835577dc1 100644 --- a/.github/workflows/update-version-durability.yml +++ b/.github/workflows/update-version-durability.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v4 - name: Use Node.js - uses: actions/setup-node@v3.7.0 + uses: actions/setup-node@v4.0.3 with: node-version: '20.15.1' diff --git a/_templates/package/new/jest.config.ts.t b/_templates/package/new/jest.config.ts.t new file mode 100644 index 000000000000..c18c8ae02465 --- /dev/null +++ b/_templates/package/new/jest.config.ts.t @@ -0,0 +1,6 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + +export default { + preset: server.preset, +} satisfies Config; diff --git a/_templates/package/new/package.json.ejs.t b/_templates/package/new/package.json.ejs.t index 950e5cb2bf62..6bee52f55927 100644 --- a/_templates/package/new/package.json.ejs.t +++ b/_templates/package/new/package.json.ejs.t @@ -7,11 +7,11 @@ to: packages/<%= name %>/package.json "version": "0.0.1", "private": true, "devDependencies": { - "@types/jest": "~29.5.3", + "@rocket.chat/jest-presets": "workspace:~", + "@types/jest": "~29.5.12", "eslint": "~8.45.0", - "jest": "~29.6.1", - "ts-jest": "~29.0.5", - "typescript": "~5.1.6" + "jest": "~29.7.0", + "typescript": "~5.3.3" }, "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", diff --git a/_templates/package/new/tsconfig.json.ejs.t b/_templates/package/new/tsconfig.json.ejs.t index 3e192c674d1b..399544502ed0 100644 --- a/_templates/package/new/tsconfig.json.ejs.t +++ b/_templates/package/new/tsconfig.json.ejs.t @@ -2,10 +2,10 @@ to: packages/<%= name %>/tsconfig.json --- { - "extends": "../../tsconfig.base.client.json", + "extends": "../../tsconfig.base.server.json", "compilerOptions": { "rootDir": "./src", "outDir": "./dist" }, - "include": ["./src/**/*"] + "include": ["./src/**/*"], } diff --git a/apps/meteor/.meteorMocks/index.ts b/apps/meteor/.meteorMocks/index.ts deleted file mode 100644 index e70ffa7f7c46..000000000000 --- a/apps/meteor/.meteorMocks/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import sinon from 'sinon'; - -export const Meteor = { - loginWithSamlToken: sinon.stub(), -}; diff --git a/apps/meteor/.mocharc.client.js b/apps/meteor/.mocharc.client.js deleted file mode 100644 index cf339a420378..000000000000 --- a/apps/meteor/.mocharc.client.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -/** - * Mocha configuration for client-side unit and integration tests. - */ - -const base = require('./.mocharc.base.json'); - -/** - * Mocha will run `ts-node` without doing type checking to speed-up the tests. It should be fine as `npm run typecheck` - * covers test files too. - */ - -Object.assign( - process.env, - { - TS_NODE_FILES: true, - TS_NODE_TRANSPILE_ONLY: true, - }, - process.env, -); - -module.exports = { - ...base, // see https://github.com/mochajs/mocha/issues/3916 - require: [ - ...base.require, - './tests/setup/registerWebApiMocks.ts', - './tests/setup/hoistedReact.ts', - './tests/setup/cleanupTestingLibrary.ts', - ], - reporter: 'dot', - timeout: 5000, - exit: false, - slow: 200, - spec: [ - 'tests/unit/client/sidebar/**/*.spec.{ts,tsx}', - 'tests/unit/client/components/**/*.spec.{ts,tsx}', - 'tests/unit/client/lib/**/*.spec.{ts,tsx}', - 'tests/unit/lib/**/*.tests.ts', - 'tests/unit/client/**/*.test.ts', - ], -}; diff --git a/apps/meteor/CHANGELOG.md b/apps/meteor/CHANGELOG.md index 75ffb7f02d7a..f466c34da838 100644 --- a/apps/meteor/CHANGELOG.md +++ b/apps/meteor/CHANGELOG.md @@ -1,5 +1,516 @@ # @rocket.chat/meteor +## 6.11.0 + +### Minor Changes + +- ([#32498](https://github.com/RocketChat/Rocket.Chat/pull/32498)) Created a `transferChat` Livechat API endpoint for transferring chats programmatically, the endpoint has all the limitations & permissions required that transferring via UI has + +- ([#32792](https://github.com/RocketChat/Rocket.Chat/pull/32792)) Allows admins to customize the `Subject` field of Omnichannel email transcripts via setting. By passing a value to the setting `Custom email subject for transcript`, system will use it as the `Subject` field, unless a custom subject is passed when requesting a transcript. If there's no custom subject and setting value is empty, the current default value will be used + +- ([#32739](https://github.com/RocketChat/Rocket.Chat/pull/32739)) Fixed an issue where FCM actions did not respect environment's proxy settings + +- ([#32706](https://github.com/RocketChat/Rocket.Chat/pull/32706)) Added the possibility for apps to remove users from a room + +- ([#32517](https://github.com/RocketChat/Rocket.Chat/pull/32517)) Feature Preview: New Navigation - `Header` and `Contextualbar` size improvements consistent with the new global `NavBar` + +- ([#32493](https://github.com/RocketChat/Rocket.Chat/pull/32493)) Fixed Livechat rooms being displayed in the Engagement Dashboard's "Channels" tab + +- ([#32742](https://github.com/RocketChat/Rocket.Chat/pull/32742)) Fixed an issue where adding `OVERWRITE_SETTING_` for any setting wasn't immediately taking effect sometimes, and needed a server restart to reflect. + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. +- ([#32176](https://github.com/RocketChat/Rocket.Chat/pull/32176)) Added a method to the Apps-Engine that allows apps to read multiple messages from a room + +- ([#32493](https://github.com/RocketChat/Rocket.Chat/pull/32493)) Improved Engagement Dashboard's "Channels" tab performance by not returning rooms that had no activity in the analyzed period + +- ([#32024](https://github.com/RocketChat/Rocket.Chat/pull/32024)) Implemented a new tab to the users page called 'Active', this tab lists all users who have logged in for the first time and are active. + +- ([#32744](https://github.com/RocketChat/Rocket.Chat/pull/32744)) Added account setting `Accounts_Default_User_Preferences_sidebarSectionsOrder` to allow users to reorganize sidebar sections + +- ([#32820](https://github.com/RocketChat/Rocket.Chat/pull/32820)) Added a new setting `Livechat_transcript_send_always` that allows admins to decide if email transcript should be sent all the times when a conversation is closed. This setting bypasses agent's preferences. For this setting to work, `Livechat_enable_transcript` should be off, meaning that visitors will no longer receive the option to decide if they want a transcript or not. + +- ([#32724](https://github.com/RocketChat/Rocket.Chat/pull/32724)) Extended apps-engine events for users leaving a room to also fire when being removed by another user. Also added the triggering user's information to the event's context payload. + +- ([#32777](https://github.com/RocketChat/Rocket.Chat/pull/32777)) Added handling of attachments in Omnichannel email transcripts. Earlier attachments were being skipped and were being shown as empty space, now it should render the image attachments and should show relevant error message for unsupported attachments. + +- ([#32800](https://github.com/RocketChat/Rocket.Chat/pull/32800)) Added the ability to filter chats by `queued` on the Current Chats Omnichannel page + +### Patch Changes + +- Bump @rocket.chat/meteor version. + +- Bump @rocket.chat/meteor version. + +- Bump @rocket.chat/meteor version. + +- Bump @rocket.chat/meteor version. + +- Bump @rocket.chat/meteor version. + +- Bump @rocket.chat/meteor version. + +- Bump @rocket.chat/meteor version. + +- ([#32679](https://github.com/RocketChat/Rocket.Chat/pull/32679)) Fix validations from "UiKit" modal component + +- ([#32730](https://github.com/RocketChat/Rocket.Chat/pull/32730)) Fixed issue in Marketplace that caused a subscription app to show incorrect modals when subscribing + +- ([#32628](https://github.com/RocketChat/Rocket.Chat/pull/32628)) Fixed SAML users' full names being updated on login regardless of the "Overwrite user fullname (use idp attribute)" setting + +- ([#32692](https://github.com/RocketChat/Rocket.Chat/pull/32692)) Fixed an issue that caused the widget to set the wrong department when using the setDepartment Livechat api endpoint in conjunction with a Livechat Trigger + +- ([#32527](https://github.com/RocketChat/Rocket.Chat/pull/32527)) Fixed an inconsistent evaluation of the `Accounts_LoginExpiration` setting over the codebase. In some places, it was being used as milliseconds while in others as days. Invalid values produced different results. A helper function was created to centralize the setting validation and the proper value being returned to avoid edge cases. + Negative values may be saved on the settings UI panel but the code will interpret any negative, NaN or 0 value to the default expiration which is 90 days. +- ([#32626](https://github.com/RocketChat/Rocket.Chat/pull/32626)) livechat `setDepartment` livechat api fixes: + - Changing department didn't reflect on the registration form in real time + - Changing the department mid conversation didn't transfer the chat + - Depending on the state of the department, it couldn't be set as default +- ([#32810](https://github.com/RocketChat/Rocket.Chat/pull/32810)) Fixed issue where bad word filtering was not working in the UI for messages + +- ([#32707](https://github.com/RocketChat/Rocket.Chat/pull/32707)) Fixed issue with livechat agents not being able to leave omnichannel rooms if joining after a room has been closed by the visitor (due to race conditions) + +- ([#32837](https://github.com/RocketChat/Rocket.Chat/pull/32837)) Fixed an issue where non-encrypted attachments were not being downloaded + +- ([#32861](https://github.com/RocketChat/Rocket.Chat/pull/32861)) fixed the contextual bar closing when editing thread messages instead of cancelling the message edit + +- ([#32713](https://github.com/RocketChat/Rocket.Chat/pull/32713)) Fixed the disappearance of some settings after navigation under network latency. + +- ([#32592](https://github.com/RocketChat/Rocket.Chat/pull/32592)) Fixes Missing line breaks on Omnichannel Room Info Panel + +- ([#32807](https://github.com/RocketChat/Rocket.Chat/pull/32807)) Fixed web client crashing on Firefox private window. Firefox disables access to service workers inside private windows. Rocket.Chat needs service workers to process E2EE encrypted files on rooms. These types of files won't be available inside private windows, but the rest of E2EE encrypted features should work normally + +- ([#32864](https://github.com/RocketChat/Rocket.Chat/pull/32864)) fixed an issue in the "Create discussion" form, that would have the "Create" action button disabled even though the form is prefilled when opening it from the message action + +- ([#32691](https://github.com/RocketChat/Rocket.Chat/pull/32691)) Removed 'Hide' option in the room menu for Omnichannel conversations. + +- ([#32445](https://github.com/RocketChat/Rocket.Chat/pull/32445)) Fixed LDAP rooms, teams and roles syncs not being triggered on login even when the "Update User Data on Login" setting is enabled + +- ([#32328](https://github.com/RocketChat/Rocket.Chat/pull/32328)) Allow customFields on livechat creation bridge + +- ([#32803](https://github.com/RocketChat/Rocket.Chat/pull/32803)) Fixed "Copy link" message action enabled in Starred and Pinned list for End to End Encrypted channels, this action is disabled now + +- ([#32769](https://github.com/RocketChat/Rocket.Chat/pull/32769)) Fixed issue that caused unintentional clicks when scrolling the channels sidebar on safari/chrome in iOS + +- ([#32857](https://github.com/RocketChat/Rocket.Chat/pull/32857)) Fixed some anomalies related to disabled E2EE rooms. Earlier there are some weird issues with disabled E2EE rooms, this PR fixes these anomalies. + +- ([#32765](https://github.com/RocketChat/Rocket.Chat/pull/32765)) Fixed an issue that prevented the option to start a discussion from being shown on the message actions + +- ([#32671](https://github.com/RocketChat/Rocket.Chat/pull/32671)) Fix show correct user roles after updating user roles on admin edit user panel. + +- ([#32482](https://github.com/RocketChat/Rocket.Chat/pull/32482)) Fixed an issue with blocked login when dismissed 2FA modal by clicking outside of it or pressing the escape key + +- ([#32804](https://github.com/RocketChat/Rocket.Chat/pull/32804)) Fixes an issue not displaying all groups in settings list + +- ([#32815](https://github.com/RocketChat/Rocket.Chat/pull/32815)) Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) + +- ([#32632](https://github.com/RocketChat/Rocket.Chat/pull/32632)) Improving UX by change the position of room info actions buttons and menu order to avoid missclick in destructive actions. + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Reduced time on generation of PDF transcripts. Earlier Rocket.Chat was fetching the required translations everytime a PDF transcript was requested, this process was async and was being unnecessarily being performed on every pdf transcript request. This PR improves this and now the translations are loaded at the start and kept in memory to process further pdf transcripts requests. This reduces the time of asynchronously fetching translations again and again. + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
Updated dependencies [88e5219bd2, b4bbcbfc9a, 8fc6ca8b4e, 25da5280a5, 1b7b1161cf, 439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 3ffe4a2944, 3b4b19cfc5, 4e8aa575a6, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/fuselage-ui-kit@9.0.0 + - @rocket.chat/i18n@0.6.0 + - @rocket.chat/tools@0.2.2 + - @rocket.chat/ui-client@9.0.0 + - @rocket.chat/model-typings@0.6.0 + - @rocket.chat/omnichannel-services@0.3.0 + - @rocket.chat/pdf-worker@0.2.0 + - @rocket.chat/core-services@0.5.0 + - @rocket.chat/ui-video-conf@9.0.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/ui-contexts@9.0.0 + - @rocket.chat/models@0.2.0 + - @rocket.chat/ui-kit@0.36.0 + - @rocket.chat/web-ui-registration@9.0.0 + - @rocket.chat/rest-typings@6.11.0 + - @rocket.chat/apps@0.1.3 + - @rocket.chat/presence@0.2.3 + - @rocket.chat/gazzodown@9.0.0 + - @rocket.chat/api-client@0.2.3 + - @rocket.chat/license@0.2.3 + - @rocket.chat/cron@0.1.3 + - @rocket.chat/ui-theming@0.2.0 + - @rocket.chat/ui-avatar@5.0.0 + - @rocket.chat/instance-status@0.1.3 + - @rocket.chat/server-cloud-communication@0.0.2 +
+ +## 6.11.0-rc.6 + +### Patch Changes + +- Bump @rocket.chat/meteor version. + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/rest-typings@6.11.0-rc.6 + - @rocket.chat/api-client@0.2.3-rc.6 + - @rocket.chat/license@0.2.3-rc.6 + - @rocket.chat/omnichannel-services@0.3.0-rc.6 + - @rocket.chat/pdf-worker@0.2.0-rc.6 + - @rocket.chat/presence@0.2.3-rc.6 + - @rocket.chat/apps@0.1.3-rc.6 + - @rocket.chat/core-services@0.5.0-rc.6 + - @rocket.chat/cron@0.1.3-rc.6 + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.6 + - @rocket.chat/gazzodown@9.0.0-rc.6 + - @rocket.chat/model-typings@0.6.0-rc.6 + - @rocket.chat/ui-contexts@9.0.0-rc.6 + - @rocket.chat/server-cloud-communication@0.0.2 + - @rocket.chat/models@0.2.0-rc.6 + - @rocket.chat/ui-theming@0.2.0 + - @rocket.chat/ui-avatar@5.0.0-rc.6 + - @rocket.chat/ui-client@9.0.0-rc.6 + - @rocket.chat/ui-video-conf@9.0.0-rc.6 + - @rocket.chat/web-ui-registration@9.0.0-rc.6 + - @rocket.chat/instance-status@0.1.3-rc.6 +
+ +## 6.11.0-rc.5 + +### Patch Changes + +- Bump @rocket.chat/meteor version. + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/rest-typings@6.11.0-rc.5 + - @rocket.chat/api-client@0.2.3-rc.5 + - @rocket.chat/license@0.2.3-rc.5 + - @rocket.chat/omnichannel-services@0.3.0-rc.5 + - @rocket.chat/pdf-worker@0.2.0-rc.5 + - @rocket.chat/presence@0.2.3-rc.5 + - @rocket.chat/apps@0.1.3-rc.5 + - @rocket.chat/core-services@0.5.0-rc.5 + - @rocket.chat/cron@0.1.3-rc.5 + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.5 + - @rocket.chat/gazzodown@9.0.0-rc.5 + - @rocket.chat/model-typings@0.6.0-rc.5 + - @rocket.chat/ui-contexts@9.0.0-rc.5 + - @rocket.chat/server-cloud-communication@0.0.2 + - @rocket.chat/models@0.2.0-rc.5 + - @rocket.chat/ui-theming@0.2.0 + - @rocket.chat/ui-avatar@5.0.0-rc.5 + - @rocket.chat/ui-client@9.0.0-rc.5 + - @rocket.chat/ui-video-conf@9.0.0-rc.5 + - @rocket.chat/web-ui-registration@9.0.0-rc.5 + - @rocket.chat/instance-status@0.1.3-rc.5 +
+ +## 6.11.0-rc.4 + +### Patch Changes + +- Bump @rocket.chat/meteor version. + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/rest-typings@6.11.0-rc.4 + - @rocket.chat/api-client@0.2.3-rc.4 + - @rocket.chat/license@0.2.3-rc.4 + - @rocket.chat/omnichannel-services@0.3.0-rc.4 + - @rocket.chat/pdf-worker@0.2.0-rc.4 + - @rocket.chat/presence@0.2.3-rc.4 + - @rocket.chat/apps@0.1.3-rc.4 + - @rocket.chat/core-services@0.5.0-rc.4 + - @rocket.chat/cron@0.1.3-rc.4 + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.4 + - @rocket.chat/gazzodown@9.0.0-rc.4 + - @rocket.chat/model-typings@0.6.0-rc.4 + - @rocket.chat/ui-contexts@9.0.0-rc.4 + - @rocket.chat/server-cloud-communication@0.0.2 + - @rocket.chat/models@0.2.0-rc.4 + - @rocket.chat/ui-theming@0.2.0 + - @rocket.chat/ui-avatar@5.0.0-rc.4 + - @rocket.chat/ui-client@9.0.0-rc.4 + - @rocket.chat/ui-video-conf@9.0.0-rc.4 + - @rocket.chat/web-ui-registration@9.0.0-rc.4 + - @rocket.chat/instance-status@0.1.3-rc.4 +
+ +## 6.11.0-rc.3 + +### Patch Changes + +- Bump @rocket.chat/meteor version. + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/rest-typings@6.11.0-rc.3 + - @rocket.chat/api-client@0.2.3-rc.3 + - @rocket.chat/license@0.2.3-rc.3 + - @rocket.chat/omnichannel-services@0.3.0-rc.3 + - @rocket.chat/pdf-worker@0.2.0-rc.3 + - @rocket.chat/presence@0.2.3-rc.3 + - @rocket.chat/apps@0.1.3-rc.3 + - @rocket.chat/core-services@0.5.0-rc.3 + - @rocket.chat/cron@0.1.3-rc.3 + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.3 + - @rocket.chat/gazzodown@9.0.0-rc.3 + - @rocket.chat/model-typings@0.6.0-rc.3 + - @rocket.chat/ui-contexts@9.0.0-rc.3 + - @rocket.chat/server-cloud-communication@0.0.2 + - @rocket.chat/models@0.2.0-rc.3 + - @rocket.chat/ui-theming@0.2.0 + - @rocket.chat/ui-avatar@5.0.0-rc.3 + - @rocket.chat/ui-client@9.0.0-rc.3 + - @rocket.chat/ui-video-conf@9.0.0-rc.3 + - @rocket.chat/web-ui-registration@9.0.0-rc.3 + - @rocket.chat/instance-status@0.1.3-rc.3 +
+ +## 6.11.0-rc.2 + +### Patch Changes + +- Bump @rocket.chat/meteor version. + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/rest-typings@6.11.0-rc.2 + - @rocket.chat/api-client@0.2.3-rc.2 + - @rocket.chat/license@0.2.3-rc.2 + - @rocket.chat/omnichannel-services@0.3.0-rc.2 + - @rocket.chat/pdf-worker@0.2.0-rc.2 + - @rocket.chat/presence@0.2.3-rc.2 + - @rocket.chat/apps@0.1.3-rc.2 + - @rocket.chat/core-services@0.5.0-rc.2 + - @rocket.chat/cron@0.1.3-rc.2 + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.2 + - @rocket.chat/gazzodown@9.0.0-rc.2 + - @rocket.chat/model-typings@0.6.0-rc.2 + - @rocket.chat/ui-contexts@9.0.0-rc.2 + - @rocket.chat/server-cloud-communication@0.0.2 + - @rocket.chat/models@0.2.0-rc.2 + - @rocket.chat/ui-theming@0.2.0 + - @rocket.chat/ui-avatar@5.0.0-rc.2 + - @rocket.chat/ui-client@9.0.0-rc.2 + - @rocket.chat/ui-video-conf@9.0.0-rc.2 + - @rocket.chat/web-ui-registration@9.0.0-rc.2 + - @rocket.chat/instance-status@0.1.3-rc.2 +
+ +## 6.11.0-rc.1 + +### Patch Changes + +- Bump @rocket.chat/meteor version. + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/rest-typings@6.11.0-rc.1 + - @rocket.chat/api-client@0.2.2-rc.1 + - @rocket.chat/license@0.2.2-rc.1 + - @rocket.chat/omnichannel-services@0.3.0-rc.1 + - @rocket.chat/pdf-worker@0.2.0-rc.1 + - @rocket.chat/presence@0.2.2-rc.1 + - @rocket.chat/apps@0.1.2-rc.1 + - @rocket.chat/core-services@0.5.0-rc.1 + - @rocket.chat/cron@0.1.2-rc.1 + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.1 + - @rocket.chat/gazzodown@9.0.0-rc.1 + - @rocket.chat/model-typings@0.6.0-rc.1 + - @rocket.chat/ui-contexts@9.0.0-rc.1 + - @rocket.chat/server-cloud-communication@0.0.2 + - @rocket.chat/models@0.2.0-rc.1 + - @rocket.chat/ui-theming@0.2.0 + - @rocket.chat/ui-avatar@5.0.0-rc.1 + - @rocket.chat/ui-client@9.0.0-rc.1 + - @rocket.chat/ui-video-conf@9.0.0-rc.1 + - @rocket.chat/web-ui-registration@9.0.0-rc.1 + - @rocket.chat/instance-status@0.1.2-rc.1 +
+ +## 6.11.0-rc.0 + +### Minor Changes + +- ([#32498](https://github.com/RocketChat/Rocket.Chat/pull/32498)) Created a `transferChat` Livechat API endpoint for transferring chats programmatically, the endpoint has all the limitations & permissions required that transferring via UI has + +- ([#32792](https://github.com/RocketChat/Rocket.Chat/pull/32792)) Allows admins to customize the `Subject` field of Omnichannel email transcripts via setting. By passing a value to the setting `Custom email subject for transcript`, system will use it as the `Subject` field, unless a custom subject is passed when requesting a transcript. If there's no custom subject and setting value is empty, the current default value will be used + +- ([#32739](https://github.com/RocketChat/Rocket.Chat/pull/32739)) Fixed an issue where FCM actions did not respect environment's proxy settings + +- ([#32570](https://github.com/RocketChat/Rocket.Chat/pull/32570)) Login services button was not respecting the button color and text color settings. Implemented a fix to respect these settings and change the button colors accordingly. + + Added a warning on all settings which allow admins to change OAuth button colors, so that they can be alerted about WCAG (Web Content Accessibility Guidelines) compliance. + +- ([#32706](https://github.com/RocketChat/Rocket.Chat/pull/32706)) Added the possibility for apps to remove users from a room + +- ([#32517](https://github.com/RocketChat/Rocket.Chat/pull/32517)) Feature Preview: New Navigation - `Header` and `Contextualbar` size improvements consistent with the new global `NavBar` + +- ([#32493](https://github.com/RocketChat/Rocket.Chat/pull/32493)) Fixed Livechat rooms being displayed in the Engagement Dashboard's "Channels" tab + +- ([#32742](https://github.com/RocketChat/Rocket.Chat/pull/32742)) Fixed an issue where adding `OVERWRITE_SETTING_` for any setting wasn't immediately taking effect sometimes, and needed a server restart to reflect. + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. +- ([#32176](https://github.com/RocketChat/Rocket.Chat/pull/32176)) Added a method to the Apps-Engine that allows apps to read multiple messages from a room + +- ([#32493](https://github.com/RocketChat/Rocket.Chat/pull/32493)) Improved Engagement Dashboard's "Channels" tab performance by not returning rooms that had no activity in the analyzed period + +- ([#32024](https://github.com/RocketChat/Rocket.Chat/pull/32024)) Implemented a new tab to the users page called 'Active', this tab lists all users who have logged in for the first time and are active. + +- ([#32744](https://github.com/RocketChat/Rocket.Chat/pull/32744)) Added account setting `Accounts_Default_User_Preferences_sidebarSectionsOrder` to allow users to reorganize sidebar sections + +- ([#32820](https://github.com/RocketChat/Rocket.Chat/pull/32820)) Added a new setting `Livechat_transcript_send_always` that allows admins to decide if email transcript should be sent all the times when a conversation is closed. This setting bypasses agent's preferences. For this setting to work, `Livechat_enable_transcript` should be off, meaning that visitors will no longer receive the option to decide if they want a transcript or not. + +- ([#32724](https://github.com/RocketChat/Rocket.Chat/pull/32724)) Extended apps-engine events for users leaving a room to also fire when being removed by another user. Also added the triggering user's information to the event's context payload. + +- ([#32777](https://github.com/RocketChat/Rocket.Chat/pull/32777)) Added handling of attachments in Omnichannel email transcripts. Earlier attachments were being skipped and were being shown as empty space, now it should render the image attachments and should show relevant error message for unsupported attachments. + +- ([#32800](https://github.com/RocketChat/Rocket.Chat/pull/32800)) Added the ability to filter chats by `queued` on the Current Chats Omnichannel page + +### Patch Changes + +- ([#32679](https://github.com/RocketChat/Rocket.Chat/pull/32679)) Fix validations from "UiKit" modal component + +- ([#32730](https://github.com/RocketChat/Rocket.Chat/pull/32730)) Fixed issue in Marketplace that caused a subscription app to show incorrect modals when subscribing + +- ([#32628](https://github.com/RocketChat/Rocket.Chat/pull/32628)) Fixed SAML users' full names being updated on login regardless of the "Overwrite user fullname (use idp attribute)" setting + +- ([#32692](https://github.com/RocketChat/Rocket.Chat/pull/32692)) Fixed an issue that caused the widget to set the wrong department when using the setDepartment Livechat api endpoint in conjunction with a Livechat Trigger + +- ([#32527](https://github.com/RocketChat/Rocket.Chat/pull/32527)) Fixed an inconsistent evaluation of the `Accounts_LoginExpiration` setting over the codebase. In some places, it was being used as milliseconds while in others as days. Invalid values produced different results. A helper function was created to centralize the setting validation and the proper value being returned to avoid edge cases. + Negative values may be saved on the settings UI panel but the code will interpret any negative, NaN or 0 value to the default expiration which is 90 days. +- ([#32626](https://github.com/RocketChat/Rocket.Chat/pull/32626)) livechat `setDepartment` livechat api fixes: + - Changing department didn't reflect on the registration form in real time + - Changing the department mid conversation didn't transfer the chat + - Depending on the state of the department, it couldn't be set as default +- ([#32810](https://github.com/RocketChat/Rocket.Chat/pull/32810)) Fixed issue where bad word filtering was not working in the UI for messages + +- ([#32707](https://github.com/RocketChat/Rocket.Chat/pull/32707)) Fixed issue with livechat agents not being able to leave omnichannel rooms if joining after a room has been closed by the visitor (due to race conditions) + +- ([#32837](https://github.com/RocketChat/Rocket.Chat/pull/32837)) Fixed an issue where non-encrypted attachments were not being downloaded + +- ([#32861](https://github.com/RocketChat/Rocket.Chat/pull/32861)) fixed the contextual bar closing when editing thread messages instead of cancelling the message edit + +- ([#32713](https://github.com/RocketChat/Rocket.Chat/pull/32713)) Fixed the disappearance of some settings after navigation under network latency. + +- ([#32592](https://github.com/RocketChat/Rocket.Chat/pull/32592)) Fixes Missing line breaks on Omnichannel Room Info Panel + +- ([#32807](https://github.com/RocketChat/Rocket.Chat/pull/32807)) Fixed web client crashing on Firefox private window. Firefox disables access to service workers inside private windows. Rocket.Chat needs service workers to process E2EE encrypted files on rooms. These types of files won't be available inside private windows, but the rest of E2EE encrypted features should work normally + +- ([#32864](https://github.com/RocketChat/Rocket.Chat/pull/32864)) fixed an issue in the "Create discussion" form, that would have the "Create" action button disabled even though the form is prefilled when opening it from the message action + +- ([#32691](https://github.com/RocketChat/Rocket.Chat/pull/32691)) Removed 'Hide' option in the room menu for Omnichannel conversations. + +- ([#32445](https://github.com/RocketChat/Rocket.Chat/pull/32445)) Fixed LDAP rooms, teams and roles syncs not being triggered on login even when the "Update User Data on Login" setting is enabled + +- ([#32328](https://github.com/RocketChat/Rocket.Chat/pull/32328)) Allow customFields on livechat creation bridge + +- ([#32803](https://github.com/RocketChat/Rocket.Chat/pull/32803)) Fixed "Copy link" message action enabled in Starred and Pinned list for End to End Encrypted channels, this action is disabled now + +- ([#32769](https://github.com/RocketChat/Rocket.Chat/pull/32769)) Fixed issue that caused unintentional clicks when scrolling the channels sidebar on safari/chrome in iOS + +- ([#32857](https://github.com/RocketChat/Rocket.Chat/pull/32857)) Fixed some anomalies related to disabled E2EE rooms. Earlier there are some weird issues with disabled E2EE rooms, this PR fixes these anomalies. + +- ([#32765](https://github.com/RocketChat/Rocket.Chat/pull/32765)) Fixed an issue that prevented the option to start a discussion from being shown on the message actions + +- ([#32671](https://github.com/RocketChat/Rocket.Chat/pull/32671)) Fix show correct user roles after updating user roles on admin edit user panel. + +- ([#32482](https://github.com/RocketChat/Rocket.Chat/pull/32482)) Fixed an issue with blocked login when dismissed 2FA modal by clicking outside of it or pressing the escape key + +- ([#32804](https://github.com/RocketChat/Rocket.Chat/pull/32804)) Fixes an issue not displaying all groups in settings list + +- ([#32815](https://github.com/RocketChat/Rocket.Chat/pull/32815)) Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) + +- ([#32632](https://github.com/RocketChat/Rocket.Chat/pull/32632)) Improving UX by change the position of room info actions buttons and menu order to avoid missclick in destructive actions. + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Reduced time on generation of PDF transcripts. Earlier Rocket.Chat was fetching the required translations everytime a PDF transcript was requested, this process was async and was being unnecessarily being performed on every pdf transcript request. This PR improves this and now the translations are loaded at the start and kept in memory to process further pdf transcripts requests. This reduces the time of asynchronously fetching translations again and again. + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
Updated dependencies [88e5219bd2, b4bbcbfc9a, 8fc6ca8b4e, 15664127be, 25da5280a5, 1b7b1161cf, 439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 3ffe4a2944, 3b4b19cfc5, 4e8aa575a6, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.0 + - @rocket.chat/i18n@0.6.0-rc.0 + - @rocket.chat/tools@0.2.2-rc.0 + - @rocket.chat/web-ui-registration@9.0.0-rc.0 + - @rocket.chat/ui-client@9.0.0-rc.0 + - @rocket.chat/model-typings@0.6.0-rc.0 + - @rocket.chat/omnichannel-services@0.3.0-rc.0 + - @rocket.chat/pdf-worker@0.2.0-rc.0 + - @rocket.chat/core-services@0.5.0-rc.0 + - @rocket.chat/ui-video-conf@9.0.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/ui-contexts@9.0.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 + - @rocket.chat/ui-kit@0.36.0-rc.0 + - @rocket.chat/rest-typings@6.11.0-rc.0 + - @rocket.chat/apps@0.1.2-rc.0 + - @rocket.chat/presence@0.2.2-rc.0 + - @rocket.chat/gazzodown@9.0.0-rc.0 + - @rocket.chat/api-client@0.2.2-rc.0 + - @rocket.chat/license@0.2.2-rc.0 + - @rocket.chat/cron@0.1.2-rc.0 + - @rocket.chat/ui-theming@0.2.0 + - @rocket.chat/ui-avatar@5.0.0-rc.0 + - @rocket.chat/instance-status@0.1.2-rc.0 + - @rocket.chat/server-cloud-communication@0.0.2 + +## 6.10.2 + +### Patch Changes + +- Bump @rocket.chat/meteor version. + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from being updated or uninstalled in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from handling errors during execution in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Improved Apps-Engine installation to prevent start up errors on manual installation setups + +- ([#32950](https://github.com/RocketChat/Rocket.Chat/pull/32950) by [@dionisio-bot](https://github.com/dionisio-bot)) Fixed a crash on web client due to service workers not being available, this can happen in multiple scenarios like on Firefox's private window or if the connection is not secure (non-HTTPS), [see more details](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts). + + Rocket.Chat needs service workers to process E2EE encrypted files on rooms. These types of files won't be available inside private windows, but the rest of E2EE encrypted features should work normally + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that caused the video conference button on rooms to not recognize a video conference provider app in some cases + +-
Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/fuselage-ui-kit@8.0.2 + - @rocket.chat/core-services@0.4.2 + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/rest-typings@6.10.2 + - @rocket.chat/presence@0.2.2 + - @rocket.chat/apps@0.1.2 + - @rocket.chat/omnichannel-services@0.2.2 + - @rocket.chat/api-client@0.2.2 + - @rocket.chat/license@0.2.2 + - @rocket.chat/pdf-worker@0.1.2 + - @rocket.chat/cron@0.1.2 + - @rocket.chat/gazzodown@8.0.2 + - @rocket.chat/model-typings@0.5.2 + - @rocket.chat/ui-contexts@8.0.2 + - @rocket.chat/server-cloud-communication@0.0.2 + - @rocket.chat/models@0.1.2 + - @rocket.chat/ui-theming@0.2.0 + - @rocket.chat/ui-avatar@4.0.2 + - @rocket.chat/ui-client@8.0.2 + - @rocket.chat/ui-video-conf@8.0.2 + - @rocket.chat/web-ui-registration@8.0.2 + - @rocket.chat/instance-status@0.1.2 +
+ ## 6.10.1 ### Patch Changes diff --git a/apps/meteor/app/2fa/server/methods/checkCodesRemaining.ts b/apps/meteor/app/2fa/server/methods/checkCodesRemaining.ts index 219a78483cea..f5f5b0e1f275 100644 --- a/apps/meteor/app/2fa/server/methods/checkCodesRemaining.ts +++ b/apps/meteor/app/2fa/server/methods/checkCodesRemaining.ts @@ -1,7 +1,7 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { '2fa:checkCodesRemaining': () => { remaining: number }; diff --git a/apps/meteor/app/2fa/server/methods/disable.ts b/apps/meteor/app/2fa/server/methods/disable.ts index 0927b3f854ac..d2c71febdc35 100644 --- a/apps/meteor/app/2fa/server/methods/disable.ts +++ b/apps/meteor/app/2fa/server/methods/disable.ts @@ -1,10 +1,10 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { TOTP } from '../lib/totp'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { '2fa:disable': (code: string) => Promise; diff --git a/apps/meteor/app/2fa/server/methods/enable.ts b/apps/meteor/app/2fa/server/methods/enable.ts index 6b786c0743e9..dea859d27b62 100644 --- a/apps/meteor/app/2fa/server/methods/enable.ts +++ b/apps/meteor/app/2fa/server/methods/enable.ts @@ -1,10 +1,10 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { TOTP } from '../lib/totp'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { '2fa:enable': () => Promise<{ secret: string; url: string }>; diff --git a/apps/meteor/app/2fa/server/methods/regenerateCodes.ts b/apps/meteor/app/2fa/server/methods/regenerateCodes.ts index e0f4cfaa4797..6968abfb93c2 100644 --- a/apps/meteor/app/2fa/server/methods/regenerateCodes.ts +++ b/apps/meteor/app/2fa/server/methods/regenerateCodes.ts @@ -1,10 +1,10 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { TOTP } from '../lib/totp'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { '2fa:regenerateCodes': (userToken: string) => { codes: string[] } | undefined; diff --git a/apps/meteor/app/2fa/server/methods/validateTempToken.ts b/apps/meteor/app/2fa/server/methods/validateTempToken.ts index cc2b44372a04..840fadc8cbf7 100644 --- a/apps/meteor/app/2fa/server/methods/validateTempToken.ts +++ b/apps/meteor/app/2fa/server/methods/validateTempToken.ts @@ -1,11 +1,11 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { notifyOnUserChangeAsync } from '../../../lib/server/lib/notifyListener'; import { TOTP } from '../lib/totp'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { '2fa:validateTempToken': (userToken: string) => { codes: string[] } | undefined; diff --git a/apps/meteor/app/api/server/v1/emoji-custom.ts b/apps/meteor/app/api/server/v1/emoji-custom.ts index a61149c5e66e..9cbf202896e1 100644 --- a/apps/meteor/app/api/server/v1/emoji-custom.ts +++ b/apps/meteor/app/api/server/v1/emoji-custom.ts @@ -3,6 +3,8 @@ import { EmojiCustom } from '@rocket.chat/models'; import { Meteor } from 'meteor/meteor'; import { SystemLogger } from '../../../../server/lib/logger/system'; +import { insertOrUpdateEmoji } from '../../../emoji-custom/server/lib/insertOrUpdateEmoji'; +import { uploadEmojiCustomWithBuffer } from '../../../emoji-custom/server/lib/uploadEmojiCustom'; import { settings } from '../../../settings/server'; import { API } from '../api'; import { getPaginationItems } from '../helpers/getPaginationItems'; @@ -148,9 +150,19 @@ API.v1.addRoute( fields.extension = emojiToUpdate.extension; } - await Meteor.callAsync('insertOrUpdateEmoji', { ...fields, newFile }); + const emojiData = { + name: fields.name, + _id: fields._id, + aliases: fields.aliases, + extension: fields.extension, + previousName: fields.previousName, + previousExtension: fields.previousExtension, + newFile, + }; + + await insertOrUpdateEmoji(this.userId, emojiData); if (fields.newFile) { - await Meteor.callAsync('uploadEmojiCustom', fileBuffer, mimetype, { ...fields, newFile }); + await uploadEmojiCustomWithBuffer(this.userId, fileBuffer, mimetype, emojiData); } return API.v1.success(); }, diff --git a/apps/meteor/app/api/server/v1/teams.ts b/apps/meteor/app/api/server/v1/teams.ts index 4ea8f2a48f38..f64f8c820575 100644 --- a/apps/meteor/app/api/server/v1/teams.ts +++ b/apps/meteor/app/api/server/v1/teams.ts @@ -1,6 +1,6 @@ import { Team } from '@rocket.chat/core-services'; import type { ITeam, UserStatus } from '@rocket.chat/core-typings'; -import { TEAM_TYPE } from '@rocket.chat/core-typings'; +import { TEAM_TYPE, isValidSidepanel } from '@rocket.chat/core-typings'; import { Users, Rooms } from '@rocket.chat/models'; import { isTeamsConvertToChannelProps, @@ -85,7 +85,11 @@ API.v1.addRoute( }), ); - const { name, type, members, room, owner } = this.bodyParams; + const { name, type, members, room, owner, sidepanel } = this.bodyParams; + + if (sidepanel?.items && !isValidSidepanel(sidepanel)) { + throw new Error('error-invalid-sidepanel'); + } const team = await Team.create(this.userId, { team: { @@ -95,6 +99,7 @@ API.v1.addRoute( room, members, owner, + sidepanel, }); return API.v1.success({ team }); diff --git a/apps/meteor/app/api/server/v1/users.ts b/apps/meteor/app/api/server/v1/users.ts index 26ef2fa30ff2..7ae585b89dfa 100644 --- a/apps/meteor/app/api/server/v1/users.ts +++ b/apps/meteor/app/api/server/v1/users.ts @@ -1216,7 +1216,7 @@ API.v1.addRoute( throw new Meteor.Error('error-invalid-user-id', 'Invalid user id'); } - void notifyOnUserChange({ clientAction: 'updated', id: this.userId, diff: { 'services.resume.loginTokens': [] } }); + void notifyOnUserChange({ clientAction: 'updated', id: userId, diff: { 'services.resume.loginTokens': [] } }); return API.v1.success({ message: `User ${userId} has been logged out!`, diff --git a/apps/meteor/app/apps/server/bridges/livechat.ts b/apps/meteor/app/apps/server/bridges/livechat.ts index ec5cff29a99b..4f4794591e02 100644 --- a/apps/meteor/app/apps/server/bridges/livechat.ts +++ b/apps/meteor/app/apps/server/bridges/livechat.ts @@ -1,7 +1,7 @@ -import type { IAppServerOrchestrator, IAppsLivechatMessage } from '@rocket.chat/apps'; +import type { IAppServerOrchestrator, IAppsLivechatMessage, IAppsMessage } from '@rocket.chat/apps'; import type { IExtraRoomParams } from '@rocket.chat/apps-engine/definition/accessors/ILivechatCreator'; import type { IVisitor, ILivechatRoom, ILivechatTransferData, IDepartment } from '@rocket.chat/apps-engine/definition/livechat'; -import type { IMessage as IAppsEngineMesage } from '@rocket.chat/apps-engine/definition/messages'; +import type { IMessage as IAppsEngineMessage } from '@rocket.chat/apps-engine/definition/messages'; import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import { LivechatBridge } from '@rocket.chat/apps-engine/server/bridges/LivechatBridge'; import type { ILivechatDepartment, IOmnichannelRoom, SelectedAgent, IMessage, ILivechatVisitor } from '@rocket.chat/core-typings'; @@ -13,6 +13,12 @@ import { deasyncPromise } from '../../../../server/deasync/deasync'; import { type ILivechatMessage, Livechat as LivechatTyped } from '../../../livechat/server/lib/LivechatTyped'; import { settings } from '../../../settings/server'; +declare module '@rocket.chat/apps/dist/converters/IAppMessagesConverter' { + export interface IAppMessagesConverter { + convertMessage(message: IMessage, cacheObj?: object): Promise; + } +} + declare module '@rocket.chat/apps-engine/definition/accessors/ILivechatCreator' { interface IExtraRoomParams { customFields?: Record; @@ -337,7 +343,7 @@ export class AppLivechatBridge extends LivechatBridge { return Promise.all((await LivechatDepartment.findEnabledWithAgents().toArray()).map(boundConverter)); } - protected async _fetchLivechatRoomMessages(appId: string, roomId: string): Promise> { + protected async _fetchLivechatRoomMessages(appId: string, roomId: string): Promise> { this.orch.debugLog(`The App ${appId} is getting the transcript for livechat room ${roomId}.`); const messageConverter = this.orch.getConverters()?.get('messages'); @@ -346,8 +352,7 @@ export class AppLivechatBridge extends LivechatBridge { } const livechatMessages = await LivechatTyped.getRoomMessages({ rid: roomId }); - - return Promise.all(livechatMessages.map((message) => messageConverter.convertMessage(message) as Promise)); + return Promise.all(await livechatMessages.map((message) => messageConverter.convertMessage(message, livechatMessages)).toArray()); } protected async setCustomFields( diff --git a/apps/meteor/app/apps/server/converters/messages.js b/apps/meteor/app/apps/server/converters/messages.js index d7dae512e9a8..89ef2454d895 100644 --- a/apps/meteor/app/apps/server/converters/messages.js +++ b/apps/meteor/app/apps/server/converters/messages.js @@ -52,19 +52,26 @@ export class AppMessagesConverter { return transformMappedData(message, map); } - async convertMessage(msgObj) { + async convertMessage(msgObj, cacheObj = msgObj) { if (!msgObj) { return undefined; } const cache = - this.mem.get(msgObj) ?? + this.mem.get(cacheObj) ?? new Map([ ['room', cachedFunction(this.orch.getConverters().get('rooms').convertById.bind(this.orch.getConverters().get('rooms')))], - ['user', cachedFunction(this.orch.getConverters().get('users').convertById.bind(this.orch.getConverters().get('users')))], + [ + 'user.convertById', + cachedFunction(this.orch.getConverters().get('users').convertById.bind(this.orch.getConverters().get('users'))), + ], + [ + 'user.convertToApp', + cachedFunction(this.orch.getConverters().get('users').convertToApp.bind(this.orch.getConverters().get('users'))), + ], ]); - this.mem.set(msgObj, cache); + this.mem.set(cacheObj, cache); const map = { id: '_id', @@ -96,7 +103,7 @@ export class AppMessagesConverter { return undefined; } - return cache.get('user')(editedBy._id); + return cache.get('user.convertById')(editedBy._id); }, attachments: async (message) => { const result = await this._convertAttachmentsToApp(message.attachments); @@ -110,8 +117,8 @@ export class AppMessagesConverter { // When the message contains token, means the message is from the visitor(omnichannel) const user = await (isMessageFromVisitor(msgObj) - ? this.orch.getConverters().get('users').convertToApp(message.u) - : cache.get('user')(message.u._id)); + ? cache.get('user.convertToApp')(message.u) + : cache.get('user.convertById')(message.u._id)); delete message.u; @@ -120,7 +127,7 @@ export class AppMessagesConverter { * `sender` as undefined, so we need to add this fallback here. */ - return user || this.orch.getConverters().get('users').convertToApp(message.u); + return user || cache.get('user.convertToApp')(message.u); }, }; diff --git a/apps/meteor/app/assets/server/assets.ts b/apps/meteor/app/assets/server/assets.ts index b9653a2f1b9a..5d627a4b1d29 100644 --- a/apps/meteor/app/assets/server/assets.ts +++ b/apps/meteor/app/assets/server/assets.ts @@ -2,8 +2,8 @@ import crypto from 'crypto'; import type { ServerResponse, IncomingMessage } from 'http'; import type { IRocketChatAssets, IRocketChatAsset, ISetting } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Settings } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import type { NextHandleFunction } from 'connect'; import sizeOf from 'image-size'; import { Meteor } from 'meteor/meteor'; @@ -406,7 +406,7 @@ Meteor.startup(() => { }, 200); }); -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { refreshClients(): boolean; diff --git a/apps/meteor/app/authorization/server/methods/addPermissionToRole.ts b/apps/meteor/app/authorization/server/methods/addPermissionToRole.ts index 13a114732bd2..9a336478ca3e 100644 --- a/apps/meteor/app/authorization/server/methods/addPermissionToRole.ts +++ b/apps/meteor/app/authorization/server/methods/addPermissionToRole.ts @@ -1,12 +1,12 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Permissions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { notifyOnPermissionChangedById } from '../../../lib/server/lib/notifyListener'; import { CONSTANTS, AuthorizationUtils } from '../../lib'; import { hasPermissionAsync } from '../functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'authorization:addPermissionToRole'(permissionId: string, role: string): void; diff --git a/apps/meteor/app/authorization/server/methods/addUserToRole.ts b/apps/meteor/app/authorization/server/methods/addUserToRole.ts index 02ccc76373f1..81582dd7e9fb 100644 --- a/apps/meteor/app/authorization/server/methods/addUserToRole.ts +++ b/apps/meteor/app/authorization/server/methods/addUserToRole.ts @@ -1,14 +1,14 @@ import { api } from '@rocket.chat/core-services'; import type { IRole, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Roles, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { settings } from '../../../settings/server'; import { hasPermissionAsync } from '../functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'authorization:addUserToRole'(roleId: IRole['_id'], username: IUser['username'], scope: string | undefined): Promise; diff --git a/apps/meteor/app/authorization/server/methods/deleteRole.ts b/apps/meteor/app/authorization/server/methods/deleteRole.ts index 2ff09deadf68..140852e0f1ec 100644 --- a/apps/meteor/app/authorization/server/methods/deleteRole.ts +++ b/apps/meteor/app/authorization/server/methods/deleteRole.ts @@ -1,13 +1,13 @@ import type { IRole } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Roles } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import type { DeleteResult } from 'mongodb'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { hasPermissionAsync } from '../functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'authorization:deleteRole'(roleId: IRole['_id'] | IRole['name']): Promise; diff --git a/apps/meteor/app/authorization/server/methods/removeRoleFromPermission.ts b/apps/meteor/app/authorization/server/methods/removeRoleFromPermission.ts index 91a4df1eddf7..68ca11ef9fb5 100644 --- a/apps/meteor/app/authorization/server/methods/removeRoleFromPermission.ts +++ b/apps/meteor/app/authorization/server/methods/removeRoleFromPermission.ts @@ -1,12 +1,12 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Permissions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { notifyOnPermissionChangedById } from '../../../lib/server/lib/notifyListener'; import { CONSTANTS } from '../../lib'; import { hasPermissionAsync } from '../functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'authorization:removeRoleFromPermission'(permissionId: string, role: string): void; diff --git a/apps/meteor/app/authorization/server/methods/removeUserFromRole.ts b/apps/meteor/app/authorization/server/methods/removeUserFromRole.ts index d5dba40a1e53..56f0c2e307ab 100644 --- a/apps/meteor/app/authorization/server/methods/removeUserFromRole.ts +++ b/apps/meteor/app/authorization/server/methods/removeUserFromRole.ts @@ -1,14 +1,14 @@ import { api } from '@rocket.chat/core-services'; import type { IRole, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Roles, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { settings } from '../../../settings/server'; import { hasPermissionAsync } from '../functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'authorization:removeUserFromRole'(roleId: IRole['_id'], username: IUser['username'], scope?: string): Promise; diff --git a/apps/meteor/app/authorization/server/streamer/permissions/index.ts b/apps/meteor/app/authorization/server/streamer/permissions/index.ts index ff8fd3c93262..e74cf37869fd 100644 --- a/apps/meteor/app/authorization/server/streamer/permissions/index.ts +++ b/apps/meteor/app/authorization/server/streamer/permissions/index.ts @@ -1,11 +1,11 @@ import type { IPermission, RocketChatRecordDeleted } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Permissions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check, Match } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import type { WithId } from 'mongodb'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'permissions/get'( diff --git a/apps/meteor/app/autotranslate/server/autotranslate.ts b/apps/meteor/app/autotranslate/server/autotranslate.ts index 7a9eb8780a2d..f3c6d9e55fdb 100644 --- a/apps/meteor/app/autotranslate/server/autotranslate.ts +++ b/apps/meteor/app/autotranslate/server/autotranslate.ts @@ -15,7 +15,7 @@ import _ from 'underscore'; import { callbacks } from '../../../lib/callbacks'; import { isTruthy } from '../../../lib/isTruthy'; -import { broadcastMessageFromData } from '../../../server/modules/watchers/lib/messages'; +import { notifyOnMessageChange } from '../../lib/server/lib/notifyListener'; import { Markdown } from '../../markdown/server'; import { settings } from '../../settings/server'; @@ -79,7 +79,7 @@ export class TranslationProviderRegistry { return null; } - return provider.translateMessage(message, room, targetLanguage); + return provider.translateMessage(message, { room, targetLanguage }); } static getProviders(): AutoTranslate[] { @@ -290,7 +290,7 @@ export abstract class AutoTranslate { * @param {object} targetLanguage * @returns {object} unmodified message object. */ - async translateMessage(message: IMessage, room: IRoom, targetLanguage?: string): Promise { + async translateMessage(message: IMessage, { room, targetLanguage }: { room: IRoom; targetLanguage?: string }): Promise { let targetLanguages: string[]; if (targetLanguage) { targetLanguages = [targetLanguage]; @@ -332,7 +332,7 @@ export abstract class AutoTranslate { } private notifyTranslatedMessage(messageId: string): void { - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: messageId, }); } diff --git a/apps/meteor/app/autotranslate/server/methods/getProviderUiMetadata.ts b/apps/meteor/app/autotranslate/server/methods/getProviderUiMetadata.ts index 30760e854ed1..1d443c21d210 100644 --- a/apps/meteor/app/autotranslate/server/methods/getProviderUiMetadata.ts +++ b/apps/meteor/app/autotranslate/server/methods/getProviderUiMetadata.ts @@ -1,9 +1,9 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { TranslationProviderRegistry } from '../autotranslate'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'autoTranslate.getProviderUiMetadata'(): Record; diff --git a/apps/meteor/app/autotranslate/server/methods/getSupportedLanguages.ts b/apps/meteor/app/autotranslate/server/methods/getSupportedLanguages.ts index e0118e8d95a4..7b9614da7739 100644 --- a/apps/meteor/app/autotranslate/server/methods/getSupportedLanguages.ts +++ b/apps/meteor/app/autotranslate/server/methods/getSupportedLanguages.ts @@ -1,5 +1,5 @@ import type { ISupportedLanguage } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; @@ -7,7 +7,7 @@ import { TranslationProviderRegistry } from '..'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { settings } from '../../../settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'autoTranslate.getSupportedLanguages'(targetLanguage: string): ISupportedLanguage[] | undefined; diff --git a/apps/meteor/app/autotranslate/server/methods/saveSettings.ts b/apps/meteor/app/autotranslate/server/methods/saveSettings.ts index e396d78887a9..2f119c948263 100644 --- a/apps/meteor/app/autotranslate/server/methods/saveSettings.ts +++ b/apps/meteor/app/autotranslate/server/methods/saveSettings.ts @@ -1,11 +1,11 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'autoTranslate.saveSettings'(rid: string, field: string, value: string, options: { defaultLanguage: string }): boolean; diff --git a/apps/meteor/app/autotranslate/server/methods/translateMessage.ts b/apps/meteor/app/autotranslate/server/methods/translateMessage.ts index d90cad90ce77..551eba57c005 100644 --- a/apps/meteor/app/autotranslate/server/methods/translateMessage.ts +++ b/apps/meteor/app/autotranslate/server/methods/translateMessage.ts @@ -1,11 +1,11 @@ import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { TranslationProviderRegistry } from '..'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'autoTranslate.translateMessage'(message: IMessage | undefined, targetLanguage: string): Promise; diff --git a/apps/meteor/app/bot-helpers/server/index.ts b/apps/meteor/app/bot-helpers/server/index.ts index 5e19e1652454..6c0984ae483d 100644 --- a/apps/meteor/app/bot-helpers/server/index.ts +++ b/apps/meteor/app/bot-helpers/server/index.ts @@ -1,7 +1,7 @@ import type { IUser } from '@rocket.chat/core-typings'; import { UserStatus } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import type { Filter, FindCursor } from 'mongodb'; @@ -194,7 +194,7 @@ settings.watch('BotHelpers_userFields', (value) => { botHelpers.setupCursors(value); }); -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { botRequest: (prop: keyof BotHelpers, ...params: unknown[]) => Promise; diff --git a/apps/meteor/app/channel-settings/server/methods/saveRoomSettings.ts b/apps/meteor/app/channel-settings/server/methods/saveRoomSettings.ts index e17faebea384..44ad253d83ef 100644 --- a/apps/meteor/app/channel-settings/server/methods/saveRoomSettings.ts +++ b/apps/meteor/app/channel-settings/server/methods/saveRoomSettings.ts @@ -1,8 +1,8 @@ import { Team } from '@rocket.chat/core-services'; import type { IRoom, IRoomWithRetentionPolicy, IUser, MessageTypesValues } from '@rocket.chat/core-typings'; -import { TEAM_TYPE } from '@rocket.chat/core-typings'; +import { TEAM_TYPE, isValidSidepanel } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -49,6 +49,7 @@ type RoomSettings = { favorite: boolean; defaultValue: boolean; }; + sidepanel?: IRoom['sidepanel']; }; type RoomSettingsValidators = { @@ -80,6 +81,24 @@ const validators: RoomSettingsValidators = { }); } }, + async sidepanel({ room, userId, value }) { + if (!room.teamMain) { + throw new Meteor.Error('error-action-not-allowed', 'Invalid room', { + method: 'saveRoomSettings', + }); + } + + if (!(await hasPermissionAsync(userId, 'edit-team', room._id))) { + throw new Meteor.Error('error-action-not-allowed', 'You do not have permission to change sidepanel items', { + method: 'saveRoomSettings', + }); + } + + if (!isValidSidepanel(value)) { + throw new Meteor.Error('error-invalid-sidepanel'); + } + }, + async roomType({ userId, room, value }) { if (value === room.t) { return; @@ -213,6 +232,11 @@ const settingSavers: RoomSettingsSavers = { await saveRoomTopic(rid, value, user); } }, + async sidepanel({ value, rid, room }) { + if (JSON.stringify(value) !== JSON.stringify(room.sidepanel)) { + await Rooms.setSidepanelById(rid, value); + } + }, async roomAnnouncement({ value, room, rid, user }) { if (!value && !room.announcement) { return; @@ -304,7 +328,7 @@ const settingSavers: RoomSettingsSavers = { }, }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { saveRoomSettings(rid: IRoom['_id'], settings: Partial): Promise<{ result: true; rid: IRoom['_id'] }>; @@ -339,6 +363,7 @@ const fields: (keyof RoomSettings)[] = [ 'retentionOverrideGlobal', 'encrypted', 'favorite', + 'sidepanel', ]; const validate = ( diff --git a/apps/meteor/app/cloud/server/methods.ts b/apps/meteor/app/cloud/server/methods.ts index 0e47a8ba8754..29daefe0d58c 100644 --- a/apps/meteor/app/cloud/server/methods.ts +++ b/apps/meteor/app/cloud/server/methods.ts @@ -1,4 +1,4 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -13,7 +13,7 @@ import { startRegisterWorkspace } from './functions/startRegisterWorkspace'; import { syncWorkspace } from './functions/syncWorkspace'; import { userLogout } from './functions/userLogout'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'cloud:checkRegisterStatus': () => { diff --git a/apps/meteor/app/crowd/server/methods.ts b/apps/meteor/app/crowd/server/methods.ts index a621e3c8d027..48faa2fcbcab 100644 --- a/apps/meteor/app/crowd/server/methods.ts +++ b/apps/meteor/app/crowd/server/methods.ts @@ -1,4 +1,5 @@ -import type { ServerMethods, TranslationKey } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; +import type { TranslationKey } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../authorization/server/functions/hasPermission'; @@ -6,7 +7,7 @@ import { settings } from '../../settings/server'; import { CROWD } from './crowd'; import { logger } from './logger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { crowd_test_connection(): { message: TranslationKey; params: string[] }; diff --git a/apps/meteor/app/custom-sounds/server/methods/deleteCustomSound.ts b/apps/meteor/app/custom-sounds/server/methods/deleteCustomSound.ts index 5ddf0cc66e52..1c63c7a67d9f 100644 --- a/apps/meteor/app/custom-sounds/server/methods/deleteCustomSound.ts +++ b/apps/meteor/app/custom-sounds/server/methods/deleteCustomSound.ts @@ -1,13 +1,13 @@ import { api } from '@rocket.chat/core-services'; import type { ICustomSound } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { CustomSounds } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { RocketChatFileCustomSoundsInstance } from '../startup/custom-sounds'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { deleteCustomSound(_id: ICustomSound['_id']): Promise; diff --git a/apps/meteor/app/custom-sounds/server/methods/insertOrUpdateSound.ts b/apps/meteor/app/custom-sounds/server/methods/insertOrUpdateSound.ts index 4b48a64dc14c..1b922c6b162e 100644 --- a/apps/meteor/app/custom-sounds/server/methods/insertOrUpdateSound.ts +++ b/apps/meteor/app/custom-sounds/server/methods/insertOrUpdateSound.ts @@ -1,6 +1,6 @@ import { api } from '@rocket.chat/core-services'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { CustomSounds } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -20,7 +20,7 @@ export type ICustomSoundData = { random?: number; }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { insertOrUpdateSound(soundData: ICustomSoundData): Promise; diff --git a/apps/meteor/app/custom-sounds/server/methods/listCustomSounds.ts b/apps/meteor/app/custom-sounds/server/methods/listCustomSounds.ts index 2c2130fc0d30..eda1325d7733 100644 --- a/apps/meteor/app/custom-sounds/server/methods/listCustomSounds.ts +++ b/apps/meteor/app/custom-sounds/server/methods/listCustomSounds.ts @@ -1,9 +1,9 @@ import type { ICustomSound } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { CustomSounds } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { listCustomSounds(): ICustomSound[]; diff --git a/apps/meteor/app/custom-sounds/server/methods/uploadCustomSound.ts b/apps/meteor/app/custom-sounds/server/methods/uploadCustomSound.ts index eee693634d7d..f955f373ed4d 100644 --- a/apps/meteor/app/custom-sounds/server/methods/uploadCustomSound.ts +++ b/apps/meteor/app/custom-sounds/server/methods/uploadCustomSound.ts @@ -1,6 +1,6 @@ import { api } from '@rocket.chat/core-services'; import type { RequiredField } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; @@ -8,7 +8,7 @@ import { RocketChatFile } from '../../../file/server'; import { RocketChatFileCustomSoundsInstance } from '../startup/custom-sounds'; import type { ICustomSoundData } from './insertOrUpdateSound'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { uploadCustomSound(binaryContent: string, contentType: string, soundData: RequiredField): void; diff --git a/apps/meteor/app/discussion/server/hooks/propagateDiscussionMetadata.ts b/apps/meteor/app/discussion/server/hooks/propagateDiscussionMetadata.ts index d8e3637575ab..1ff9ed1dc1ba 100644 --- a/apps/meteor/app/discussion/server/hooks/propagateDiscussionMetadata.ts +++ b/apps/meteor/app/discussion/server/hooks/propagateDiscussionMetadata.ts @@ -2,15 +2,15 @@ import type { IRoom } from '@rocket.chat/core-typings'; import { Messages, Rooms, VideoConference } from '@rocket.chat/models'; import { callbacks } from '../../../../lib/callbacks'; -import { broadcastMessageFromData } from '../../../../server/modules/watchers/lib/messages'; import { deleteRoom } from '../../../lib/server/functions/deleteRoom'; +import { notifyOnMessageChange } from '../../../lib/server/lib/notifyListener'; const updateAndNotifyParentRoomWithParentMessage = async (room: IRoom): Promise => { const { value: parentMessage } = await Messages.refreshDiscussionMetadata(room); if (!parentMessage) { return; } - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: parentMessage._id, data: parentMessage, }); @@ -22,7 +22,7 @@ const updateAndNotifyParentRoomWithParentMessage = async (room: IRoom): Promise< */ callbacks.add( 'afterSaveMessage', - async (message, { _id, prid }) => { + async (message, { room: { _id, prid } }) => { if (!prid) { return message; } diff --git a/apps/meteor/app/discussion/server/methods/createDiscussion.ts b/apps/meteor/app/discussion/server/methods/createDiscussion.ts index 18b42ba1a31f..96e0bd846390 100644 --- a/apps/meteor/app/discussion/server/methods/createDiscussion.ts +++ b/apps/meteor/app/discussion/server/methods/createDiscussion.ts @@ -1,11 +1,10 @@ import { Message } from '@rocket.chat/core-services'; import type { IMessage, IRoom, IUser, MessageAttachmentDefault } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Rooms, Users } from '@rocket.chat/models'; import { Random } from '@rocket.chat/random'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; -import { callbacks } from '../../../../lib/callbacks'; import { i18n } from '../../../../server/lib/i18n'; import { roomCoordinator } from '../../../../server/lib/rooms/roomCoordinator'; import { canSendMessageAsync } from '../../../authorization/server/functions/canSendMessage'; @@ -14,6 +13,7 @@ import { addUserToRoom } from '../../../lib/server/functions/addUserToRoom'; import { attachMessage } from '../../../lib/server/functions/attachMessage'; import { createRoom } from '../../../lib/server/functions/createRoom'; import { sendMessage } from '../../../lib/server/functions/sendMessage'; +import { afterSaveMessageAsync } from '../../../lib/server/lib/afterSaveMessage'; import { settings } from '../../../settings/server'; const getParentRoom = async (rid: IRoom['_id']) => { @@ -27,13 +27,11 @@ async function createDiscussionMessage( drid: IRoom['_id'], msg: IMessage['msg'], messageEmbedded?: MessageAttachmentDefault, -): Promise { - const msgId = await Message.saveSystemMessage('discussion-created', rid, msg, user, { +): Promise { + return Message.saveSystemMessage('discussion-created', rid, msg, user, { drid, ...(messageEmbedded && { attachments: [messageEmbedded] }), }); - - return Messages.findOneById(msgId); } async function mentionMessage( @@ -191,12 +189,13 @@ const create = async ({ } if (discussionMsg) { - callbacks.runAsync('afterSaveMessage', discussionMsg, parentRoom); + afterSaveMessageAsync(discussionMsg, parentRoom); } + return discussion; }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { createDiscussion: typeof create; diff --git a/apps/meteor/app/e2e/server/methods/fetchMyKeys.ts b/apps/meteor/app/e2e/server/methods/fetchMyKeys.ts index 519317cb40fe..df1150cee846 100644 --- a/apps/meteor/app/e2e/server/methods/fetchMyKeys.ts +++ b/apps/meteor/app/e2e/server/methods/fetchMyKeys.ts @@ -1,8 +1,8 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'e2e.fetchMyKeys'(): { public_key?: string; private_key?: string }; diff --git a/apps/meteor/app/e2e/server/methods/getUsersOfRoomWithoutKey.ts b/apps/meteor/app/e2e/server/methods/getUsersOfRoomWithoutKey.ts index cc586676482f..1f1a21262de8 100644 --- a/apps/meteor/app/e2e/server/methods/getUsersOfRoomWithoutKey.ts +++ b/apps/meteor/app/e2e/server/methods/getUsersOfRoomWithoutKey.ts @@ -1,12 +1,12 @@ import type { IRoom, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomIdAsync } from '../../../authorization/server/functions/canAccessRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'e2e.getUsersOfRoomWithoutKey'(rid: IRoom['_id']): { users: Pick[] }; diff --git a/apps/meteor/app/e2e/server/methods/requestSubscriptionKeys.ts b/apps/meteor/app/e2e/server/methods/requestSubscriptionKeys.ts index 8c5add77a0bf..cf899a5d64ad 100644 --- a/apps/meteor/app/e2e/server/methods/requestSubscriptionKeys.ts +++ b/apps/meteor/app/e2e/server/methods/requestSubscriptionKeys.ts @@ -1,9 +1,9 @@ import { api } from '@rocket.chat/core-services'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'e2e.requestSubscriptionKeys'(): boolean; diff --git a/apps/meteor/app/e2e/server/methods/resetOwnE2EKey.ts b/apps/meteor/app/e2e/server/methods/resetOwnE2EKey.ts index 365feb1ac95d..b1d40e48bb5e 100644 --- a/apps/meteor/app/e2e/server/methods/resetOwnE2EKey.ts +++ b/apps/meteor/app/e2e/server/methods/resetOwnE2EKey.ts @@ -1,10 +1,10 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { resetUserE2EEncriptionKey } from '../../../../server/lib/resetUserE2EKey'; import { twoFactorRequired } from '../../../2fa/server/twoFactorRequired'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'e2e.resetOwnE2EKey'(): Promise; diff --git a/apps/meteor/app/e2e/server/methods/setRoomKeyID.ts b/apps/meteor/app/e2e/server/methods/setRoomKeyID.ts index 6b0e685616b5..b52913e4f984 100644 --- a/apps/meteor/app/e2e/server/methods/setRoomKeyID.ts +++ b/apps/meteor/app/e2e/server/methods/setRoomKeyID.ts @@ -1,13 +1,13 @@ import type { IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomIdAsync } from '../../../authorization/server/functions/canAccessRoom'; import { notifyOnRoomChangedById } from '../../../lib/server/lib/notifyListener'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'e2e.setRoomKeyID'(rid: IRoom['_id'], keyID: string): void; diff --git a/apps/meteor/app/e2e/server/methods/setUserPublicAndPrivateKeys.ts b/apps/meteor/app/e2e/server/methods/setUserPublicAndPrivateKeys.ts index 94d252601bc4..6ef35a063a28 100644 --- a/apps/meteor/app/e2e/server/methods/setUserPublicAndPrivateKeys.ts +++ b/apps/meteor/app/e2e/server/methods/setUserPublicAndPrivateKeys.ts @@ -1,8 +1,8 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'e2e.setUserPublicAndPrivateKeys'({ public_key, private_key }: { public_key: string; private_key: string; force?: boolean }): void; diff --git a/apps/meteor/app/e2e/server/methods/updateGroupKey.ts b/apps/meteor/app/e2e/server/methods/updateGroupKey.ts index c856f8cf708a..5764a021f54c 100644 --- a/apps/meteor/app/e2e/server/methods/updateGroupKey.ts +++ b/apps/meteor/app/e2e/server/methods/updateGroupKey.ts @@ -1,10 +1,10 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'e2e.updateGroupKey'(rid: string, uid: string, key: string): Promise; diff --git a/apps/meteor/app/emoji-custom/server/lib/insertOrUpdateEmoji.ts b/apps/meteor/app/emoji-custom/server/lib/insertOrUpdateEmoji.ts new file mode 100644 index 000000000000..7e838baee9b0 --- /dev/null +++ b/apps/meteor/app/emoji-custom/server/lib/insertOrUpdateEmoji.ts @@ -0,0 +1,148 @@ +import { api } from '@rocket.chat/core-services'; +import { EmojiCustom } from '@rocket.chat/models'; +import limax from 'limax'; +import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + +import { trim } from '../../../../lib/utils/stringUtils'; +import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; +import { RocketChatFileEmojiCustomInstance } from '../startup/emoji-custom'; + +type EmojiData = { + _id?: string; + name: string; + aliases: string; + extension: string; + previousName?: string; + previousExtension?: string; + newFile?: boolean; +}; + +type EmojiDataWithParsedAliases = Omit & { _id: string; aliases: string[] }; + +export async function insertOrUpdateEmoji(userId: string | null, emojiData: EmojiData): Promise { + if (!userId || !(await hasPermissionAsync(userId, 'manage-emoji'))) { + throw new Meteor.Error('not_authorized'); + } + + if (!trim(emojiData.name)) { + throw new Meteor.Error('error-the-field-is-required', 'The field Name is required', { + method: 'insertOrUpdateEmoji', + field: 'Name', + }); + } + + emojiData.name = limax(emojiData.name, { replacement: '_' }); + emojiData.aliases = limax(emojiData.aliases, { replacement: '_' }); + + // allow all characters except colon, whitespace, comma, >, <, &, ", ', /, \, (, ) + // more practical than allowing specific sets of characters; also allows foreign languages + const nameValidation = /[\s,:><&"'\/\\\(\)]/; + const aliasValidation = /[:><&\|"'\/\\\(\)]/; + + // silently strip colon; this allows for uploading :emojiname: as emojiname + emojiData.name = emojiData.name.replace(/:/g, ''); + emojiData.aliases = emojiData.aliases.replace(/:/g, ''); + + if (nameValidation.test(emojiData.name)) { + throw new Meteor.Error('error-input-is-not-a-valid-field', `${emojiData.name} is not a valid name`, { + method: 'insertOrUpdateEmoji', + input: emojiData.name, + field: 'Name', + }); + } + + let aliases: string[] = []; + if (emojiData.aliases) { + if (aliasValidation.test(emojiData.aliases)) { + throw new Meteor.Error('error-input-is-not-a-valid-field', `${emojiData.aliases} is not a valid alias set`, { + method: 'insertOrUpdateEmoji', + input: emojiData.aliases, + field: 'Alias_Set', + }); + } + aliases = _.without(emojiData.aliases.split(/[\s,]/).filter(Boolean), emojiData.name); + } + + emojiData.extension = emojiData.extension === 'svg+xml' ? 'png' : emojiData.extension; + + let matchingResults = []; + + if (emojiData._id) { + matchingResults = await EmojiCustom.findByNameOrAliasExceptID(emojiData.name, emojiData._id).toArray(); + for await (const alias of aliases) { + matchingResults = matchingResults.concat(await EmojiCustom.findByNameOrAliasExceptID(alias, emojiData._id).toArray()); + } + } else { + matchingResults = await EmojiCustom.findByNameOrAlias(emojiData.name).toArray(); + for await (const alias of aliases) { + matchingResults = matchingResults.concat(await EmojiCustom.findByNameOrAlias(alias).toArray()); + } + } + + if (matchingResults.length > 0) { + throw new Meteor.Error('Custom_Emoji_Error_Name_Or_Alias_Already_In_Use', 'The custom emoji or one of its aliases is already in use', { + method: 'insertOrUpdateEmoji', + }); + } + + if (typeof emojiData.extension === 'undefined') { + throw new Meteor.Error('error-the-field-is-required', 'The custom emoji file is required', { + method: 'insertOrUpdateEmoji', + }); + } + + if (!emojiData._id) { + // insert emoji + const createEmoji = { + name: emojiData.name, + aliases, + extension: emojiData.extension, + }; + + const _id = (await EmojiCustom.create(createEmoji)).insertedId; + + void api.broadcast('emoji.updateCustom', createEmoji); + + return { ...emojiData, ...createEmoji, _id }; + } + + // update emoji + if (emojiData.newFile) { + await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.name}.${emojiData.extension}`)); + await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.name}.${emojiData.previousExtension}`)); + await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.previousName}.${emojiData.extension}`)); + await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.previousName}.${emojiData.previousExtension}`)); + + await EmojiCustom.setExtension(emojiData._id, emojiData.extension); + } else if (emojiData.name !== emojiData.previousName) { + const rs = await RocketChatFileEmojiCustomInstance.getFileWithReadStream( + encodeURIComponent(`${emojiData.previousName}.${emojiData.previousExtension}`), + ); + if (rs !== null) { + await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.name}.${emojiData.extension}`)); + const ws = RocketChatFileEmojiCustomInstance.createWriteStream( + encodeURIComponent(`${emojiData.name}.${emojiData.previousExtension}`), + rs.contentType, + ); + ws.on('end', () => + RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.previousName}.${emojiData.previousExtension}`)), + ); + rs.readStream.pipe(ws); + } + } + + if (emojiData.name !== emojiData.previousName) { + await EmojiCustom.setName(emojiData._id, emojiData.name); + } + + if (emojiData.aliases) { + await EmojiCustom.setAliases(emojiData._id, aliases); + } else { + await EmojiCustom.setAliases(emojiData._id, []); + } + + void api.broadcast('emoji.updateCustom', { ...emojiData, aliases }); + + return { ...emojiData, aliases } as EmojiDataWithParsedAliases; +} diff --git a/apps/meteor/app/emoji-custom/server/lib/uploadEmojiCustom.ts b/apps/meteor/app/emoji-custom/server/lib/uploadEmojiCustom.ts new file mode 100644 index 000000000000..07633eaa1a7d --- /dev/null +++ b/apps/meteor/app/emoji-custom/server/lib/uploadEmojiCustom.ts @@ -0,0 +1,77 @@ +import { api, Media } from '@rocket.chat/core-services'; +import limax from 'limax'; +import { Meteor } from 'meteor/meteor'; +import sharp from 'sharp'; + +import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; +import { RocketChatFile } from '../../../file/server'; +import { RocketChatFileEmojiCustomInstance } from '../startup/emoji-custom'; + +const getFile = async (file: Buffer, extension: string) => { + if (extension !== 'svg+xml') { + return file; + } + + return sharp(file).png().toBuffer(); +}; + +type EmojiData = { + _id?: string; + name: string; + aliases?: string | string[]; + extension: string; + previousName?: string; + previousExtension?: string; + newFile?: boolean; +}; + +export async function uploadEmojiCustom(userId: string | null, binaryContent: string, contentType: string, emojiData: EmojiData) { + return uploadEmojiCustomWithBuffer(userId, Buffer.from(binaryContent, 'binary'), contentType, emojiData); +} + +export async function uploadEmojiCustomWithBuffer( + userId: string | null, + buffer: Buffer, + contentType: string, + emojiData: EmojiData, +): Promise { + // technically, since this method doesnt have any datatype validations, users can + // upload videos as emojis. The FE won't play them, but they will waste space for sure. + if (!userId || !(await hasPermissionAsync(userId, 'manage-emoji'))) { + throw new Meteor.Error('not_authorized'); + } + + emojiData.name = limax(emojiData.name, { replacement: '_' }); + // delete aliases for notification purposes. here, it is a string rather than an array + delete emojiData.aliases; + + const file = await getFile(buffer, emojiData.extension); + emojiData.extension = emojiData.extension === 'svg+xml' ? 'png' : emojiData.extension; + + let fileBuffer; + // sharp doesn't support these formats without imagemagick or libvips installed + // so they will be stored as they are :( + if (['gif', 'x-icon', 'bmp', 'webm'].includes(emojiData.extension)) { + fileBuffer = file; + } else { + // This is to support the idea of having "sticker-like" emojis + const { data: resizedEmojiBuffer } = await Media.resizeFromBuffer(file, 512, 512, true, false, false, 'inside'); + fileBuffer = resizedEmojiBuffer; + } + + const rs = RocketChatFile.bufferToStream(fileBuffer); + await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.name}.${emojiData.extension}`)); + + return new Promise((resolve) => { + const ws = RocketChatFileEmojiCustomInstance.createWriteStream( + encodeURIComponent(`${emojiData.name}.${emojiData.extension}`), + contentType, + ); + ws.on('end', () => { + setTimeout(() => api.broadcast('emoji.updateCustom', emojiData), 500); + resolve(); + }); + + rs.pipe(ws); + }); +} diff --git a/apps/meteor/app/emoji-custom/server/methods/deleteEmojiCustom.ts b/apps/meteor/app/emoji-custom/server/methods/deleteEmojiCustom.ts index 555d5544ab33..c16d3b82449b 100644 --- a/apps/meteor/app/emoji-custom/server/methods/deleteEmojiCustom.ts +++ b/apps/meteor/app/emoji-custom/server/methods/deleteEmojiCustom.ts @@ -1,13 +1,13 @@ import { api } from '@rocket.chat/core-services'; import type { ICustomEmojiDescriptor } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { EmojiCustom } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { RocketChatFileEmojiCustomInstance } from '../startup/emoji-custom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { deleteEmojiCustom(emojiID: ICustomEmojiDescriptor['_id']): boolean; diff --git a/apps/meteor/app/emoji-custom/server/methods/insertOrUpdateEmoji.ts b/apps/meteor/app/emoji-custom/server/methods/insertOrUpdateEmoji.ts index 874180097cb9..1891d1b3ed95 100644 --- a/apps/meteor/app/emoji-custom/server/methods/insertOrUpdateEmoji.ts +++ b/apps/meteor/app/emoji-custom/server/methods/insertOrUpdateEmoji.ts @@ -1,15 +1,9 @@ -import { api } from '@rocket.chat/core-services'; -import { EmojiCustom } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; -import limax from 'limax'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; -import _ from 'underscore'; -import { trim } from '../../../../lib/utils/stringUtils'; -import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -import { RocketChatFileEmojiCustomInstance } from '../startup/emoji-custom'; +import { insertOrUpdateEmoji } from '../lib/insertOrUpdateEmoji'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { insertOrUpdateEmoji(emojiData: { @@ -26,130 +20,12 @@ declare module '@rocket.chat/ui-contexts' { Meteor.methods({ async insertOrUpdateEmoji(emojiData) { - if (!this.userId || !(await hasPermissionAsync(this.userId, 'manage-emoji'))) { - throw new Meteor.Error('not_authorized'); - } - - if (!trim(emojiData.name)) { - throw new Meteor.Error('error-the-field-is-required', 'The field Name is required', { - method: 'insertOrUpdateEmoji', - field: 'Name', - }); - } - - emojiData.name = limax(emojiData.name, { replacement: '_' }); - emojiData.aliases = limax(emojiData.aliases, { replacement: '_' }); - - // allow all characters except colon, whitespace, comma, >, <, &, ", ', /, \, (, ) - // more practical than allowing specific sets of characters; also allows foreign languages - const nameValidation = /[\s,:><&"'\/\\\(\)]/; - const aliasValidation = /[:><&\|"'\/\\\(\)]/; - - // silently strip colon; this allows for uploading :emojiname: as emojiname - emojiData.name = emojiData.name.replace(/:/g, ''); - emojiData.aliases = emojiData.aliases.replace(/:/g, ''); - - if (nameValidation.test(emojiData.name)) { - throw new Meteor.Error('error-input-is-not-a-valid-field', `${emojiData.name} is not a valid name`, { - method: 'insertOrUpdateEmoji', - input: emojiData.name, - field: 'Name', - }); - } - - let aliases: string[] = []; - if (emojiData.aliases) { - if (aliasValidation.test(emojiData.aliases)) { - throw new Meteor.Error('error-input-is-not-a-valid-field', `${emojiData.aliases} is not a valid alias set`, { - method: 'insertOrUpdateEmoji', - input: emojiData.aliases, - field: 'Alias_Set', - }); - } - aliases = _.without(emojiData.aliases.split(/[\s,]/).filter(Boolean), emojiData.name); - } - - emojiData.extension = emojiData.extension === 'svg+xml' ? 'png' : emojiData.extension; - - let matchingResults = []; - - if (emojiData._id) { - matchingResults = await EmojiCustom.findByNameOrAliasExceptID(emojiData.name, emojiData._id).toArray(); - for await (const alias of aliases) { - matchingResults = matchingResults.concat(await EmojiCustom.findByNameOrAliasExceptID(alias, emojiData._id).toArray()); - } - } else { - matchingResults = await EmojiCustom.findByNameOrAlias(emojiData.name).toArray(); - for await (const alias of aliases) { - matchingResults = matchingResults.concat(await EmojiCustom.findByNameOrAlias(alias).toArray()); - } - } - - if (matchingResults.length > 0) { - throw new Meteor.Error( - 'Custom_Emoji_Error_Name_Or_Alias_Already_In_Use', - 'The custom emoji or one of its aliases is already in use', - { method: 'insertOrUpdateEmoji' }, - ); - } - - if (typeof emojiData.extension === 'undefined') { - throw new Meteor.Error('error-the-field-is-required', 'The custom emoji file is required', { - method: 'insertOrUpdateEmoji', - }); - } + const emoji = await insertOrUpdateEmoji(this.userId, emojiData); if (!emojiData._id) { - // insert emoji - const createEmoji = { - name: emojiData.name, - aliases, - extension: emojiData.extension, - }; - - const _id = (await EmojiCustom.create(createEmoji)).insertedId; - - void api.broadcast('emoji.updateCustom', createEmoji); - - return _id; + return emoji._id; } - // update emoji - if (emojiData.newFile) { - await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.name}.${emojiData.extension}`)); - await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.name}.${emojiData.previousExtension}`)); - await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.previousName}.${emojiData.extension}`)); - await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.previousName}.${emojiData.previousExtension}`)); - - await EmojiCustom.setExtension(emojiData._id, emojiData.extension); - } else if (emojiData.name !== emojiData.previousName) { - const rs = await RocketChatFileEmojiCustomInstance.getFileWithReadStream( - encodeURIComponent(`${emojiData.previousName}.${emojiData.previousExtension}`), - ); - if (rs !== null) { - await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.name}.${emojiData.extension}`)); - const ws = RocketChatFileEmojiCustomInstance.createWriteStream( - encodeURIComponent(`${emojiData.name}.${emojiData.previousExtension}`), - rs.contentType, - ); - ws.on('end', () => - RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.previousName}.${emojiData.previousExtension}`)), - ); - rs.readStream.pipe(ws); - } - } - - if (emojiData.name !== emojiData.previousName) { - await EmojiCustom.setName(emojiData._id, emojiData.name); - } - - if (emojiData.aliases) { - await EmojiCustom.setAliases(emojiData._id, aliases); - } else { - await EmojiCustom.setAliases(emojiData._id, []); - } - - void api.broadcast('emoji.updateCustom', emojiData); - return true; + return !!emoji; }, }); diff --git a/apps/meteor/app/emoji-custom/server/methods/listEmojiCustom.ts b/apps/meteor/app/emoji-custom/server/methods/listEmojiCustom.ts index 485737b95f9b..a16d536d92d4 100644 --- a/apps/meteor/app/emoji-custom/server/methods/listEmojiCustom.ts +++ b/apps/meteor/app/emoji-custom/server/methods/listEmojiCustom.ts @@ -1,12 +1,12 @@ import type { IEmojiCustom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { EmojiCustom } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check, Match } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { listEmojiCustom(options?: { name?: string; aliases?: string[] }): IEmojiCustom[]; diff --git a/apps/meteor/app/emoji-custom/server/methods/uploadEmojiCustom.ts b/apps/meteor/app/emoji-custom/server/methods/uploadEmojiCustom.ts index ded98b7f5469..e387888b1311 100644 --- a/apps/meteor/app/emoji-custom/server/methods/uploadEmojiCustom.ts +++ b/apps/meteor/app/emoji-custom/server/methods/uploadEmojiCustom.ts @@ -1,22 +1,9 @@ -import { api, Media } from '@rocket.chat/core-services'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; -import limax from 'limax'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; -import sharp from 'sharp'; -import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -import { RocketChatFile } from '../../../file/server'; -import { RocketChatFileEmojiCustomInstance } from '../startup/emoji-custom'; +import { uploadEmojiCustom } from '../lib/uploadEmojiCustom'; -const getFile = async (file: Buffer, extension: string) => { - if (extension !== 'svg+xml') { - return file; - } - - return sharp(file).png().toBuffer(); -}; - -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { uploadEmojiCustom( @@ -33,44 +20,6 @@ declare module '@rocket.chat/ui-contexts' { Meteor.methods({ async uploadEmojiCustom(binaryContent, contentType, emojiData) { - // technically, since this method doesnt have any datatype validations, users can - // upload videos as emojis. The FE won't play them, but they will waste space for sure. - if (!this.userId || !(await hasPermissionAsync(this.userId, 'manage-emoji'))) { - throw new Meteor.Error('not_authorized'); - } - - emojiData.name = limax(emojiData.name, { replacement: '_' }); - // delete aliases for notification purposes. here, it is a string rather than an array - delete emojiData.aliases; - - const file = await getFile(Buffer.from(binaryContent, 'binary'), emojiData.extension); - emojiData.extension = emojiData.extension === 'svg+xml' ? 'png' : emojiData.extension; - - let fileBuffer; - // sharp doesn't support these formats without imagemagick or libvips installed - // so they will be stored as they are :( - if (['gif', 'x-icon', 'bmp', 'webm'].includes(emojiData.extension)) { - fileBuffer = file; - } else { - // This is to support the idea of having "sticker-like" emojis - const { data: resizedEmojiBuffer } = await Media.resizeFromBuffer(file, 512, 512, true, false, false, 'inside'); - fileBuffer = resizedEmojiBuffer; - } - - const rs = RocketChatFile.bufferToStream(fileBuffer); - await RocketChatFileEmojiCustomInstance.deleteFile(encodeURIComponent(`${emojiData.name}.${emojiData.extension}`)); - - return new Promise((resolve) => { - const ws = RocketChatFileEmojiCustomInstance.createWriteStream( - encodeURIComponent(`${emojiData.name}.${emojiData.extension}`), - contentType, - ); - ws.on('end', () => { - setTimeout(() => api.broadcast('emoji.updateCustom', emojiData), 500); - resolve(); - }); - - rs.pipe(ws); - }); + await uploadEmojiCustom(this.userId, binaryContent, contentType, emojiData); }, }); diff --git a/apps/meteor/app/federation/server/endpoints/dispatch.js b/apps/meteor/app/federation/server/endpoints/dispatch.js index 4cab0b0c41e8..7090f053a22b 100644 --- a/apps/meteor/app/federation/server/endpoints/dispatch.js +++ b/apps/meteor/app/federation/server/endpoints/dispatch.js @@ -3,11 +3,10 @@ import { eventTypes } from '@rocket.chat/core-typings'; import { FederationServers, FederationRoomEvents, Rooms, Messages, Subscriptions, Users, ReadReceipts } from '@rocket.chat/models'; import EJSON from 'ejson'; -import { broadcastMessageFromData } from '../../../../server/modules/watchers/lib/messages'; import { API } from '../../../api/server'; import { FileUpload } from '../../../file-upload/server'; import { deleteRoom } from '../../../lib/server/functions/deleteRoom'; -import { notifyOnRoomChanged, notifyOnRoomChangedById } from '../../../lib/server/lib/notifyListener'; +import { notifyOnMessageChange, notifyOnRoomChanged, notifyOnRoomChangedById } from '../../../lib/server/lib/notifyListener'; import { notifyUsersOnMessage } from '../../../lib/server/lib/notifyUsersOnMessage'; import { sendAllNotifications } from '../../../lib/server/lib/sendNotificationsOnMessage'; import { processThreads } from '../../../threads/server/hooks/aftersavemessage'; @@ -294,8 +293,12 @@ const eventHandlers = { await processThreads(denormalizedMessage, room); - // Notify users - await notifyUsersOnMessage(denormalizedMessage, room); + const roomUpdater = Rooms.getUpdater(); + await notifyUsersOnMessage(denormalizedMessage, room, roomUpdater); + if (roomUpdater.hasChanges()) { + await Rooms.updateFromUpdater({ _id: room._id }, roomUpdater); + } + sendAllNotifications(denormalizedMessage, room); messageForNotification = denormalizedMessage; } catch (err) { @@ -303,7 +306,7 @@ const eventHandlers = { } } if (messageForNotification) { - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: messageForNotification._id, data: messageForNotification, }); @@ -334,7 +337,7 @@ const eventHandlers = { } else { // Update the message await Messages.updateOne({ _id: persistedMessage._id }, { $set: { msg: message.msg, federation: message.federation } }); - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: persistedMessage._id, data: { ...persistedMessage, @@ -404,7 +407,7 @@ const eventHandlers = { // Update the property await Messages.updateOne({ _id: messageId }, { $set: { [`reactions.${reaction}`]: reactionObj } }); - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: persistedMessage._id, data: { ...persistedMessage, @@ -462,7 +465,7 @@ const eventHandlers = { // Otherwise, update the property await Messages.updateOne({ _id: messageId }, { $set: { [`reactions.${reaction}`]: reactionObj } }); } - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: persistedMessage._id, data: { ...persistedMessage, diff --git a/apps/meteor/app/federation/server/hooks/afterSaveMessage.js b/apps/meteor/app/federation/server/hooks/afterSaveMessage.js index 7f67f4770686..20c64f87dda8 100644 --- a/apps/meteor/app/federation/server/hooks/afterSaveMessage.js +++ b/apps/meteor/app/federation/server/hooks/afterSaveMessage.js @@ -6,7 +6,7 @@ import { getFederationDomain } from '../lib/getFederationDomain'; import { clientLogger } from '../lib/logger'; import { normalizers } from '../normalizers'; -async function afterSaveMessage(message, room) { +async function afterSaveMessage(message, { room }) { // If there are not federated users on this room, ignore it if (!hasExternalDomain(room)) { return message; diff --git a/apps/meteor/app/federation/server/methods/dashboard.ts b/apps/meteor/app/federation/server/methods/dashboard.ts index 90a050556893..eacb42b24cbb 100644 --- a/apps/meteor/app/federation/server/methods/dashboard.ts +++ b/apps/meteor/app/federation/server/methods/dashboard.ts @@ -1,10 +1,10 @@ import type { IFederationServer } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { federationGetServers, federationGetOverviewData } from '../functions/dashboard'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'federation:getServers': () => { data: IFederationServer[] }; diff --git a/apps/meteor/app/federation/server/methods/loadContextEvents.ts b/apps/meteor/app/federation/server/methods/loadContextEvents.ts index 9e286bbf913a..e20acb7e37c9 100644 --- a/apps/meteor/app/federation/server/methods/loadContextEvents.ts +++ b/apps/meteor/app/federation/server/methods/loadContextEvents.ts @@ -1,11 +1,11 @@ import type { IFederationEvent } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { FederationRoomEvents } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'federation:loadContextEvents'(latestEventTimestamp: number): IFederationEvent[]; diff --git a/apps/meteor/app/federation/server/methods/testSetup.ts b/apps/meteor/app/federation/server/methods/testSetup.ts index 93e501535474..bc50ef158194 100644 --- a/apps/meteor/app/federation/server/methods/testSetup.ts +++ b/apps/meteor/app/federation/server/methods/testSetup.ts @@ -1,11 +1,11 @@ import { eventTypes } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { dispatchEvent } from '../handler'; import { getFederationDomain } from '../lib/getFederationDomain'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { FEDERATION_Test_Setup(): { message: string }; diff --git a/apps/meteor/app/file-upload/server/methods/getS3FileUrl.ts b/apps/meteor/app/file-upload/server/methods/getS3FileUrl.ts index fdb8d131916d..3e9bcd192674 100644 --- a/apps/meteor/app/file-upload/server/methods/getS3FileUrl.ts +++ b/apps/meteor/app/file-upload/server/methods/getS3FileUrl.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms, Uploads } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -7,7 +7,7 @@ import { UploadFS } from '../../../../server/ufs'; import { canAccessRoomAsync } from '../../../authorization/server'; import { settings } from '../../../settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getS3FileUrl(fileId: string): string; diff --git a/apps/meteor/app/file-upload/server/methods/sendFileMessage.ts b/apps/meteor/app/file-upload/server/methods/sendFileMessage.ts index 485528a5e62f..73dfd0216a73 100644 --- a/apps/meteor/app/file-upload/server/methods/sendFileMessage.ts +++ b/apps/meteor/app/file-upload/server/methods/sendFileMessage.ts @@ -7,8 +7,8 @@ import type { FilesAndAttachments, IMessage, } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms, Uploads, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -141,7 +141,7 @@ export const parseFileIntoMessageAttachments = async ( return { files, attachments }; }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { sendFileMessage: (roomId: string, _store: string, file: Partial, msgData?: Record) => boolean; diff --git a/apps/meteor/app/iframe-login/server/iframe_server.ts b/apps/meteor/app/iframe-login/server/iframe_server.ts index c7e67edf9deb..b3e661cf6ff3 100644 --- a/apps/meteor/app/iframe-login/server/iframe_server.ts +++ b/apps/meteor/app/iframe-login/server/iframe_server.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Accounts } from 'meteor/accounts-base'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -23,7 +23,7 @@ Accounts.registerLoginHandler('iframe', async (result) => { } }); -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'OAuth.retrieveCredential'(credentialToken: string, credentialSecret: string): unknown; diff --git a/apps/meteor/app/importer/server/methods/downloadPublicImportFile.ts b/apps/meteor/app/importer/server/methods/downloadPublicImportFile.ts index 81e06ec8eb0f..d2da85c7cfd4 100644 --- a/apps/meteor/app/importer/server/methods/downloadPublicImportFile.ts +++ b/apps/meteor/app/importer/server/methods/downloadPublicImportFile.ts @@ -4,7 +4,7 @@ import https from 'https'; import { Import } from '@rocket.chat/core-services'; import type { IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { Importers } from '..'; @@ -75,7 +75,7 @@ export const executeDownloadPublicImportFile = async (userId: IUser['_id'], file } }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { downloadPublicImportFile(fileUrl: string, importerKey: string): void; diff --git a/apps/meteor/app/importer/server/methods/getImportFileData.ts b/apps/meteor/app/importer/server/methods/getImportFileData.ts index 03f9a53abe6c..1d36f7fc5a5e 100644 --- a/apps/meteor/app/importer/server/methods/getImportFileData.ts +++ b/apps/meteor/app/importer/server/methods/getImportFileData.ts @@ -2,8 +2,8 @@ import fs from 'fs'; import path from 'path'; import type { IImportProgress, IImporterSelection } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Imports } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { Importers } from '..'; @@ -61,7 +61,7 @@ export const executeGetImportFileData = async (): Promise => { return instance.getProgress(); }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getImportProgress(): IImportProgress; diff --git a/apps/meteor/app/importer/server/methods/getLatestImportOperations.ts b/apps/meteor/app/importer/server/methods/getLatestImportOperations.ts index edf021a19eac..0471cb57955d 100644 --- a/apps/meteor/app/importer/server/methods/getLatestImportOperations.ts +++ b/apps/meteor/app/importer/server/methods/getLatestImportOperations.ts @@ -1,6 +1,6 @@ import type { IImport } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Imports } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; @@ -17,7 +17,7 @@ export const executeGetLatestImportOperations = async () => { return data.toArray(); }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getLatestImportOperations(): IImport[]; diff --git a/apps/meteor/app/importer/server/methods/startImport.ts b/apps/meteor/app/importer/server/methods/startImport.ts index af91295ede29..bbb5ce76ad1c 100644 --- a/apps/meteor/app/importer/server/methods/startImport.ts +++ b/apps/meteor/app/importer/server/methods/startImport.ts @@ -1,7 +1,7 @@ import type { IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Imports } from '@rocket.chat/models'; import type { StartImportParamsPOST } from '@rocket.chat/rest-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { Importers, Selection, SelectionChannel, SelectionUser } from '..'; @@ -32,7 +32,7 @@ export const executeStartImport = async ({ input }: StartImportParamsPOST, start await instance.startImport(selection, startedByUserId); }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { startImport(params: StartImportParamsPOST): void; diff --git a/apps/meteor/app/importer/server/methods/uploadImportFile.ts b/apps/meteor/app/importer/server/methods/uploadImportFile.ts index d6ded455793b..df5d2af883fa 100644 --- a/apps/meteor/app/importer/server/methods/uploadImportFile.ts +++ b/apps/meteor/app/importer/server/methods/uploadImportFile.ts @@ -1,6 +1,6 @@ import { Import } from '@rocket.chat/core-services'; import type { IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { Importers } from '..'; @@ -55,7 +55,7 @@ export const executeUploadImportFile = async ( await instance.updateProgress(ProgressStep.FILE_LOADED); }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { uploadImportFile(binaryContent: string, contentType: string, fileName: string, importerKey: string): void; diff --git a/apps/meteor/app/integrations/server/methods/clearIntegrationHistory.ts b/apps/meteor/app/integrations/server/methods/clearIntegrationHistory.ts index 5b8f13ef1a3a..a30bb9b5ee9a 100644 --- a/apps/meteor/app/integrations/server/methods/clearIntegrationHistory.ts +++ b/apps/meteor/app/integrations/server/methods/clearIntegrationHistory.ts @@ -1,11 +1,11 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Integrations, IntegrationHistory } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import notifications from '../../../notifications/server/lib/Notifications'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { clearIntegrationHistory(integrationId: string): Promise; diff --git a/apps/meteor/app/integrations/server/methods/incoming/addIncomingIntegration.ts b/apps/meteor/app/integrations/server/methods/incoming/addIncomingIntegration.ts index db058bec960b..8f1f1b5dd576 100644 --- a/apps/meteor/app/integrations/server/methods/incoming/addIncomingIntegration.ts +++ b/apps/meteor/app/integrations/server/methods/incoming/addIncomingIntegration.ts @@ -1,7 +1,7 @@ import type { INewIncomingIntegration, IIncomingIntegration } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Integrations, Roles, Subscriptions, Users, Rooms } from '@rocket.chat/models'; import { Random } from '@rocket.chat/random'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Babel } from 'meteor/babel-compiler'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -13,7 +13,7 @@ import { validateScriptEngine, isScriptEngineFrozen } from '../../lib/validateSc const validChannelChars = ['@', '#']; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addIncomingIntegration(integration: INewIncomingIntegration): Promise; diff --git a/apps/meteor/app/integrations/server/methods/incoming/deleteIncomingIntegration.ts b/apps/meteor/app/integrations/server/methods/incoming/deleteIncomingIntegration.ts index e73a46bb27db..9a116f51bbaf 100644 --- a/apps/meteor/app/integrations/server/methods/incoming/deleteIncomingIntegration.ts +++ b/apps/meteor/app/integrations/server/methods/incoming/deleteIncomingIntegration.ts @@ -1,11 +1,11 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Integrations } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../authorization/server/functions/hasPermission'; import { notifyOnIntegrationChangedById } from '../../../../lib/server/lib/notifyListener'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { deleteIncomingIntegration(integrationId: string): Promise; diff --git a/apps/meteor/app/integrations/server/methods/incoming/updateIncomingIntegration.ts b/apps/meteor/app/integrations/server/methods/incoming/updateIncomingIntegration.ts index 0ea5028130da..c94b7b9fd7a8 100644 --- a/apps/meteor/app/integrations/server/methods/incoming/updateIncomingIntegration.ts +++ b/apps/meteor/app/integrations/server/methods/incoming/updateIncomingIntegration.ts @@ -1,7 +1,7 @@ import type { IIntegration, INewIncomingIntegration, IUpdateIncomingIntegration } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Integrations, Roles, Subscriptions, Users, Rooms } from '@rocket.chat/models'; import { wrapExceptions } from '@rocket.chat/tools'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Babel } from 'meteor/babel-compiler'; import { Meteor } from 'meteor/meteor'; import _ from 'underscore'; @@ -12,7 +12,7 @@ import { isScriptEngineFrozen, validateScriptEngine } from '../../lib/validateSc const validChannelChars = ['@', '#']; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { updateIncomingIntegration( diff --git a/apps/meteor/app/integrations/server/methods/outgoing/addOutgoingIntegration.ts b/apps/meteor/app/integrations/server/methods/outgoing/addOutgoingIntegration.ts index c8dc31e08446..dc54c76b1897 100644 --- a/apps/meteor/app/integrations/server/methods/outgoing/addOutgoingIntegration.ts +++ b/apps/meteor/app/integrations/server/methods/outgoing/addOutgoingIntegration.ts @@ -1,6 +1,6 @@ import type { INewOutgoingIntegration, IOutgoingIntegration } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Integrations } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -9,7 +9,7 @@ import { notifyOnIntegrationChanged } from '../../../../lib/server/lib/notifyLis import { validateOutgoingIntegration } from '../../lib/validateOutgoingIntegration'; import { validateScriptEngine } from '../../lib/validateScriptEngine'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addOutgoingIntegration(integration: INewOutgoingIntegration): Promise; diff --git a/apps/meteor/app/integrations/server/methods/outgoing/deleteOutgoingIntegration.ts b/apps/meteor/app/integrations/server/methods/outgoing/deleteOutgoingIntegration.ts index c9f2211d835b..46d4c65159c0 100644 --- a/apps/meteor/app/integrations/server/methods/outgoing/deleteOutgoingIntegration.ts +++ b/apps/meteor/app/integrations/server/methods/outgoing/deleteOutgoingIntegration.ts @@ -1,11 +1,11 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Integrations, IntegrationHistory } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../authorization/server/functions/hasPermission'; import { notifyOnIntegrationChangedById } from '../../../../lib/server/lib/notifyListener'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { deleteOutgoingIntegration(integrationId: string): Promise; diff --git a/apps/meteor/app/integrations/server/methods/outgoing/replayOutgoingIntegration.ts b/apps/meteor/app/integrations/server/methods/outgoing/replayOutgoingIntegration.ts index 417c308ca6cb..83c13f2d981b 100644 --- a/apps/meteor/app/integrations/server/methods/outgoing/replayOutgoingIntegration.ts +++ b/apps/meteor/app/integrations/server/methods/outgoing/replayOutgoingIntegration.ts @@ -1,11 +1,11 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Integrations, IntegrationHistory } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../authorization/server/functions/hasPermission'; import { triggerHandler } from '../../lib/triggerHandler'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { replayOutgoingIntegration(params: { integrationId: string; historyId: string }): Promise; diff --git a/apps/meteor/app/integrations/server/methods/outgoing/updateOutgoingIntegration.ts b/apps/meteor/app/integrations/server/methods/outgoing/updateOutgoingIntegration.ts index 116dbd043039..c9b1f4ed7d64 100644 --- a/apps/meteor/app/integrations/server/methods/outgoing/updateOutgoingIntegration.ts +++ b/apps/meteor/app/integrations/server/methods/outgoing/updateOutgoingIntegration.ts @@ -1,7 +1,7 @@ import type { IIntegration, INewOutgoingIntegration, IUpdateOutgoingIntegration } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Integrations, Users } from '@rocket.chat/models'; import { wrapExceptions } from '@rocket.chat/tools'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../authorization/server/functions/hasPermission'; @@ -9,7 +9,7 @@ import { notifyOnIntegrationChanged } from '../../../../lib/server/lib/notifyLis import { validateOutgoingIntegration } from '../../lib/validateOutgoingIntegration'; import { isScriptEngineFrozen, validateScriptEngine } from '../../lib/validateScriptEngine'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { updateOutgoingIntegration( diff --git a/apps/meteor/app/irc/server/methods/resetIrcConnection.ts b/apps/meteor/app/irc/server/methods/resetIrcConnection.ts index 24eef975d5d5..aaaeef1c06b8 100644 --- a/apps/meteor/app/irc/server/methods/resetIrcConnection.ts +++ b/apps/meteor/app/irc/server/methods/resetIrcConnection.ts @@ -1,12 +1,12 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Settings } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { notifyOnSettingChangedById } from '../../../lib/server/lib/notifyListener'; import { settings } from '../../../settings/server'; import Bridge from '../irc-bridge'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { resetIrcConnection(): { message: string; params: unknown[] }; diff --git a/apps/meteor/app/lib/client/methods/sendMessage.ts b/apps/meteor/app/lib/client/methods/sendMessage.ts index e824c9e491af..bdaca587493a 100644 --- a/apps/meteor/app/lib/client/methods/sendMessage.ts +++ b/apps/meteor/app/lib/client/methods/sendMessage.ts @@ -1,5 +1,5 @@ import type { IMessage, IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { onClientMessageReceived } from '../../../../client/lib/onClientMessageReceived'; diff --git a/apps/meteor/app/lib/server/functions/createRoom.ts b/apps/meteor/app/lib/server/functions/createRoom.ts index 19e5fb2f9489..183cb789051f 100644 --- a/apps/meteor/app/lib/server/functions/createRoom.ts +++ b/apps/meteor/app/lib/server/functions/createRoom.ts @@ -112,6 +112,7 @@ export const createRoom = async ( readOnly?: boolean, roomExtraData?: Partial, options?: ICreateRoomParams['options'], + sidepanel?: ICreateRoomParams['sidepanel'], ): Promise< ICreatedRoom & { rid: string; @@ -187,6 +188,7 @@ export const createRoom = async ( }, ts: now, ro: readOnly === true, + sidepanel, }; if (teamId) { diff --git a/apps/meteor/app/lib/server/functions/deleteMessage.ts b/apps/meteor/app/lib/server/functions/deleteMessage.ts index e977874b3454..04542d5f1d27 100644 --- a/apps/meteor/app/lib/server/functions/deleteMessage.ts +++ b/apps/meteor/app/lib/server/functions/deleteMessage.ts @@ -5,11 +5,10 @@ import { Messages, Rooms, Uploads, Users, ReadReceipts } from '@rocket.chat/mode import { Meteor } from 'meteor/meteor'; import { callbacks } from '../../../../lib/callbacks'; -import { broadcastMessageFromData } from '../../../../server/modules/watchers/lib/messages'; import { canDeleteMessageAsync } from '../../../authorization/server/functions/canDeleteMessage'; import { FileUpload } from '../../../file-upload/server'; import { settings } from '../../../settings/server'; -import { notifyOnRoomChangedById } from '../lib/notifyListener'; +import { notifyOnRoomChangedById, notifyOnMessageChange } from '../lib/notifyListener'; export const deleteMessageValidatingPermission = async (message: AtLeast, userId: IUser['_id']): Promise => { if (!message?._id) { @@ -93,7 +92,7 @@ export async function deleteMessage(message: IMessage, user: IUser): Promise, + message: AtLeast, user: IUser, originalMsg?: IMessage, previewUrls?: string[], @@ -100,11 +99,11 @@ export const updateMessage = async function ( // although this is an "afterSave" kind callback, we know they can extend message's properties // so we wait for it to run before broadcasting - const data = await callbacks.run('afterSaveMessage', msg, room, user._id); + const data = await afterSaveMessage(msg, room, user._id); - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: msg._id, - data: data as any, // TODO move "afterSaveMessage" type definition to specify a return value + data, }); if (room?.lastMessage?._id === msg._id) { diff --git a/apps/meteor/app/lib/server/lib/afterSaveMessage.ts b/apps/meteor/app/lib/server/lib/afterSaveMessage.ts new file mode 100644 index 000000000000..5b6e12b1e185 --- /dev/null +++ b/apps/meteor/app/lib/server/lib/afterSaveMessage.ts @@ -0,0 +1,35 @@ +import type { IMessage, IUser, IRoom } from '@rocket.chat/core-typings'; +import type { Updater } from '@rocket.chat/models'; +import { Rooms } from '@rocket.chat/models'; + +import { callbacks } from '../../../../lib/callbacks'; + +export async function afterSaveMessage( + message: IMessage, + room: IRoom, + uid?: IUser['_id'], + roomUpdater?: Updater, +): Promise { + const updater = roomUpdater ?? Rooms.getUpdater(); + const data = await callbacks.run('afterSaveMessage', message, { room, uid, roomUpdater: updater }); + + if (!roomUpdater && updater.hasChanges()) { + await Rooms.updateFromUpdater({ _id: room._id }, updater); + } + + // TODO: Fix type - callback configuration needs to be updated + return data as unknown as IMessage; +} + +export function afterSaveMessageAsync( + message: IMessage, + room: IRoom, + uid?: IUser['_id'], + roomUpdater: Updater = Rooms.getUpdater(), +): void { + callbacks.runAsync('afterSaveMessage', message, { room, uid, roomUpdater }); + + if (roomUpdater.hasChanges()) { + void Rooms.updateFromUpdater({ _id: room._id }, roomUpdater); + } +} diff --git a/apps/meteor/app/lib/server/lib/notifyListener.ts b/apps/meteor/app/lib/server/lib/notifyListener.ts index 635c236fda27..934742945f2d 100644 --- a/apps/meteor/app/lib/server/lib/notifyListener.ts +++ b/apps/meteor/app/lib/server/lib/notifyListener.ts @@ -17,6 +17,9 @@ import type { AtLeast, ISettingColor, IUser, + IMessage, + SettingValue, + MessageTypesValues, } from '@rocket.chat/core-typings'; import { Rooms, @@ -30,7 +33,11 @@ import { LivechatInquiry, LivechatDepartmentAgents, Users, + Messages, } from '@rocket.chat/models'; +import mem from 'mem'; + +import { shouldHideSystemMessage } from '../../../../server/lib/systemMessage/hideSystemMessage'; type ClientAction = 'inserted' | 'updated' | 'removed'; @@ -401,3 +408,62 @@ export const notifyOnUserChangeById = withDbWatcherCheck( void notifyOnUserChange({ id, clientAction, data: user }); }, ); + +const getUserNameCached = mem( + async (userId: string): Promise => { + const user = await Users.findOne>(userId, { projection: { name: 1 } }); + return user?.name; + }, + { maxAge: 10000 }, +); + +const getSettingCached = mem(async (setting: string): Promise => Settings.getValueById(setting), { maxAge: 10000 }); + +export async function getMessageToBroadcast({ id, data }: { id: IMessage['_id']; data?: IMessage }): Promise { + const message = data ?? (await Messages.findOneById(id)); + if (!message) { + return; + } + + if (message.t) { + const hiddenSystemMessages = (await getSettingCached('Hide_System_Messages')) as MessageTypesValues[]; + const shouldHide = shouldHideSystemMessage(message.t, hiddenSystemMessages); + + if (shouldHide) { + return; + } + } + + if (message._hidden || message.imported != null) { + return; + } + + const useRealName = (await getSettingCached('UI_Use_Real_Name')) === true; + if (useRealName) { + if (message.u?._id) { + const name = await getUserNameCached(message.u._id); + if (name) { + message.u.name = name; + } + } + + if (message.mentions?.length) { + for await (const mention of message.mentions) { + const name = await getUserNameCached(mention._id); + if (name) { + mention.name = name; + } + } + } + } + + return message; +} + +export const notifyOnMessageChange = withDbWatcherCheck(async ({ id, data }: { id: IMessage['_id']; data?: IMessage }): Promise => { + const message = await getMessageToBroadcast({ id, data }); + if (!message) { + return; + } + void api.broadcast('watch.messages', { message }); +}); diff --git a/apps/meteor/app/lib/server/lib/notifyUsersOnMessage.ts b/apps/meteor/app/lib/server/lib/notifyUsersOnMessage.ts index 76a18eba3362..85f2ac52b702 100644 --- a/apps/meteor/app/lib/server/lib/notifyUsersOnMessage.ts +++ b/apps/meteor/app/lib/server/lib/notifyUsersOnMessage.ts @@ -1,5 +1,6 @@ import type { IMessage, IRoom, IUser, RoomType } from '@rocket.chat/core-typings'; import { isEditedMessage } from '@rocket.chat/core-typings'; +import type { Updater } from '@rocket.chat/models'; import { Subscriptions, Rooms } from '@rocket.chat/models'; import { escapeRegExp } from '@rocket.chat/string-helpers'; import moment from 'moment'; @@ -141,12 +142,14 @@ export async function updateThreadUsersSubscriptions(message: IMessage, replies: await Subscriptions.setLastReplyForRoomIdAndUserIds(message.rid, repliesPlusSender, new Date()); } -export async function notifyUsersOnMessage(message: IMessage, room: IRoom): Promise { +export async function notifyUsersOnMessage(message: IMessage, room: IRoom, roomUpdater: Updater): Promise { + console.log('notifyUsersOnMessage function'); + // Skips this callback if the message was edited and increments it if the edit was way in the past (aka imported) if (isEditedMessage(message)) { if (Math.abs(moment(message.editedAt).diff(Date.now())) > 60000) { // TODO: Review as I am not sure how else to get around this as the incrementing of the msgs count shouldn't be in this callback - await Rooms.incMsgCountById(message.rid, 1); + Rooms.getIncMsgCountUpdateQuery(1, roomUpdater); return message; } @@ -156,25 +159,39 @@ export async function notifyUsersOnMessage(message: IMessage, room: IRoom): Prom (!message.tmid || message.tshow) && (!room.lastMessage || room.lastMessage._id === message._id) ) { - await Rooms.setLastMessageById(message.rid, message); + Rooms.getLastMessageUpdateQuery(message, roomUpdater); } return message; } if (message.ts && Math.abs(moment(message.ts).diff(Date.now())) > 60000) { - await Rooms.incMsgCountById(message.rid, 1); + Rooms.getIncMsgCountUpdateQuery(1, roomUpdater); return message; } // If message sent ONLY on a thread, skips the rest as it is done on a callback specific to threads if (message.tmid && !message.tshow) { - await Rooms.incMsgCountById(message.rid, 1); + Rooms.getIncMsgCountUpdateQuery(1, roomUpdater); return message; } // Update all the room activity tracker fields - await Rooms.incMsgCountAndSetLastMessageById(message.rid, 1, message.ts, settings.get('Store_Last_Message') ? message : undefined); + Rooms.setIncMsgCountAndSetLastMessageUpdateQuery(1, message, !!settings.get('Store_Last_Message'), roomUpdater); + await updateUsersSubscriptions(message, room); + + return message; +} + +export async function notifyUsersOnSystemMessage(message: IMessage, room: IRoom): Promise { + const roomUpdater = Rooms.getUpdater(); + Rooms.setIncMsgCountAndSetLastMessageUpdateQuery(1, message, !!settings.get('Store_Last_Message'), roomUpdater); + + if (roomUpdater.hasChanges()) { + await Rooms.updateFromUpdater({ _id: room._id }, roomUpdater); + } + + // TODO: Rewrite to use just needed calls from the function await updateUsersSubscriptions(message, room); return message; @@ -182,7 +199,15 @@ export async function notifyUsersOnMessage(message: IMessage, room: IRoom): Prom callbacks.add( 'afterSaveMessage', - (message, room) => notifyUsersOnMessage(message, room), + async (message, { room, roomUpdater }) => { + if (!roomUpdater) { + return message; + } + + await notifyUsersOnMessage(message, room, roomUpdater); + + return message; + }, callbacks.priority.MEDIUM, 'notifyUsersOnMessage', ); diff --git a/apps/meteor/app/lib/server/lib/sendNotificationsOnMessage.ts b/apps/meteor/app/lib/server/lib/sendNotificationsOnMessage.ts index 49fcc0ea4725..94c25f476222 100644 --- a/apps/meteor/app/lib/server/lib/sendNotificationsOnMessage.ts +++ b/apps/meteor/app/lib/server/lib/sendNotificationsOnMessage.ts @@ -406,7 +406,7 @@ settings.watch('Troubleshoot_Disable_Notifications', (value) => { callbacks.add( 'afterSaveMessage', - (message, room) => sendAllNotifications(message, room), + (message, { room }) => sendAllNotifications(message, room), callbacks.priority.LOW, 'sendNotificationsOnMessage', ); diff --git a/apps/meteor/app/lib/server/methods/addOAuthService.ts b/apps/meteor/app/lib/server/methods/addOAuthService.ts index 05b0e5a7e4e6..09287bb9bb74 100644 --- a/apps/meteor/app/lib/server/methods/addOAuthService.ts +++ b/apps/meteor/app/lib/server/methods/addOAuthService.ts @@ -1,11 +1,11 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { addOAuthService } from '../../../../server/lib/oauth/addOAuthService'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addOAuthService(name: string): void; diff --git a/apps/meteor/app/lib/server/methods/addUserToRoom.ts b/apps/meteor/app/lib/server/methods/addUserToRoom.ts index 880b413d0618..8100cafc33b0 100644 --- a/apps/meteor/app/lib/server/methods/addUserToRoom.ts +++ b/apps/meteor/app/lib/server/methods/addUserToRoom.ts @@ -1,9 +1,9 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { addUsersToRoomMethod } from './addUsersToRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addUserToRoom(data: { rid: string; username: string }): void; diff --git a/apps/meteor/app/lib/server/methods/addUsersToRoom.ts b/apps/meteor/app/lib/server/methods/addUsersToRoom.ts index 48b7f9db58f5..73fbf6e51a04 100644 --- a/apps/meteor/app/lib/server/methods/addUsersToRoom.ts +++ b/apps/meteor/app/lib/server/methods/addUsersToRoom.ts @@ -1,8 +1,8 @@ import { api } from '@rocket.chat/core-services'; import type { IUser } from '@rocket.chat/core-typings'; import { isRoomFederated } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Users, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -12,7 +12,7 @@ import { Federation } from '../../../../server/services/federation/Federation'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { addUserToRoom } from '../functions/addUserToRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addUsersToRoom(data: { rid: string; users: string[] }): boolean; diff --git a/apps/meteor/app/lib/server/methods/archiveRoom.ts b/apps/meteor/app/lib/server/methods/archiveRoom.ts index c30014f59c11..dfa5a2c55412 100644 --- a/apps/meteor/app/lib/server/methods/archiveRoom.ts +++ b/apps/meteor/app/lib/server/methods/archiveRoom.ts @@ -1,6 +1,6 @@ import { isRegisterUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -9,7 +9,7 @@ import { roomCoordinator } from '../../../../server/lib/rooms/roomCoordinator'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { archiveRoom } from '../functions/archiveRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { archiveRoom(rid: string): Promise; diff --git a/apps/meteor/app/lib/server/methods/blockUser.ts b/apps/meteor/app/lib/server/methods/blockUser.ts index b65423edf25b..b967e35d7bc1 100644 --- a/apps/meteor/app/lib/server/methods/blockUser.ts +++ b/apps/meteor/app/lib/server/methods/blockUser.ts @@ -1,12 +1,12 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { RoomMemberActions } from '../../../../definition/IRoomTypeConfig'; import { roomCoordinator } from '../../../../server/lib/rooms/roomCoordinator'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { blockUser({ rid, blocked }: { rid: string; blocked: string }): boolean; diff --git a/apps/meteor/app/lib/server/methods/checkRegistrationSecretURL.ts b/apps/meteor/app/lib/server/methods/checkRegistrationSecretURL.ts index 3f349a8b43e6..ecba6844da26 100644 --- a/apps/meteor/app/lib/server/methods/checkRegistrationSecretURL.ts +++ b/apps/meteor/app/lib/server/methods/checkRegistrationSecretURL.ts @@ -1,4 +1,4 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; diff --git a/apps/meteor/app/lib/server/methods/checkUsernameAvailability.ts b/apps/meteor/app/lib/server/methods/checkUsernameAvailability.ts index 34ad02ddb2cf..4df2706bb479 100644 --- a/apps/meteor/app/lib/server/methods/checkUsernameAvailability.ts +++ b/apps/meteor/app/lib/server/methods/checkUsernameAvailability.ts @@ -1,4 +1,4 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -6,7 +6,7 @@ import { checkUsernameAvailabilityWithValidation } from '../functions/checkUsern import { RateLimiter } from '../lib'; import { methodDeprecationLogger } from '../lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { checkUsernameAvailability(username: string): boolean; diff --git a/apps/meteor/app/lib/server/methods/cleanRoomHistory.ts b/apps/meteor/app/lib/server/methods/cleanRoomHistory.ts index a724d1b38b2c..d6136eee9131 100644 --- a/apps/meteor/app/lib/server/methods/cleanRoomHistory.ts +++ b/apps/meteor/app/lib/server/methods/cleanRoomHistory.ts @@ -1,11 +1,11 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { cleanRoomHistory } from '../functions/cleanRoomHistory'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { cleanRoomHistory(data: { diff --git a/apps/meteor/app/lib/server/methods/createChannel.ts b/apps/meteor/app/lib/server/methods/createChannel.ts index 98cea517bed4..a490fa1e3c42 100644 --- a/apps/meteor/app/lib/server/methods/createChannel.ts +++ b/apps/meteor/app/lib/server/methods/createChannel.ts @@ -1,13 +1,13 @@ import type { ICreatedRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { createRoom } from '../functions/createRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { createChannel( diff --git a/apps/meteor/app/lib/server/methods/createPrivateGroup.ts b/apps/meteor/app/lib/server/methods/createPrivateGroup.ts index 75097b5c89b8..3b92b2607829 100644 --- a/apps/meteor/app/lib/server/methods/createPrivateGroup.ts +++ b/apps/meteor/app/lib/server/methods/createPrivateGroup.ts @@ -1,13 +1,13 @@ import type { ICreatedRoom, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { createRoom } from '../functions/createRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { createPrivateGroup( diff --git a/apps/meteor/app/lib/server/methods/createToken.ts b/apps/meteor/app/lib/server/methods/createToken.ts index ed665944415a..de60a7e37fe8 100644 --- a/apps/meteor/app/lib/server/methods/createToken.ts +++ b/apps/meteor/app/lib/server/methods/createToken.ts @@ -1,12 +1,12 @@ import { User } from '@rocket.chat/core-services'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Accounts } from 'meteor/accounts-base'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { createToken(userId: string): { userId: string; authToken: string }; diff --git a/apps/meteor/app/lib/server/methods/deleteMessage.ts b/apps/meteor/app/lib/server/methods/deleteMessage.ts index a1b1000c06b8..b0be64c245ef 100644 --- a/apps/meteor/app/lib/server/methods/deleteMessage.ts +++ b/apps/meteor/app/lib/server/methods/deleteMessage.ts @@ -1,11 +1,11 @@ import type { IMessage } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { deleteMessageValidatingPermission } from '../functions/deleteMessage'; import { methodDeprecationLogger } from '../lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { deleteMessage({ _id }: Pick): void; diff --git a/apps/meteor/app/lib/server/methods/deleteUserOwnAccount.ts b/apps/meteor/app/lib/server/methods/deleteUserOwnAccount.ts index 2d651950da19..7b5663185bc5 100644 --- a/apps/meteor/app/lib/server/methods/deleteUserOwnAccount.ts +++ b/apps/meteor/app/lib/server/methods/deleteUserOwnAccount.ts @@ -1,7 +1,7 @@ import { Apps, AppEvents } from '@rocket.chat/apps'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; import { SHA256 } from '@rocket.chat/sha256'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Accounts } from 'meteor/accounts-base'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -10,7 +10,7 @@ import { trim } from '../../../../lib/utils/stringUtils'; import { settings } from '../../../settings/server'; import { deleteUser } from '../functions/deleteUser'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { deleteUserOwnAccount(password: string, confirmRelinquish?: boolean): Promise; diff --git a/apps/meteor/app/lib/server/methods/executeSlashCommandPreview.ts b/apps/meteor/app/lib/server/methods/executeSlashCommandPreview.ts index 80b5428efbef..1c116863610d 100644 --- a/apps/meteor/app/lib/server/methods/executeSlashCommandPreview.ts +++ b/apps/meteor/app/lib/server/methods/executeSlashCommandPreview.ts @@ -1,10 +1,10 @@ import type { IMessage, RequiredField, SlashCommandPreviewItem } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { slashCommands } from '../../../utils/server/slashCommand'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { executeSlashCommandPreview( diff --git a/apps/meteor/app/lib/server/methods/getChannelHistory.ts b/apps/meteor/app/lib/server/methods/getChannelHistory.ts index 00ff01639593..8f1f4c586141 100644 --- a/apps/meteor/app/lib/server/methods/getChannelHistory.ts +++ b/apps/meteor/app/lib/server/methods/getChannelHistory.ts @@ -1,6 +1,6 @@ import type { IMessage, MessageTypesValues } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Subscriptions, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import _ from 'underscore'; @@ -11,7 +11,7 @@ import { settings } from '../../../settings/server/cached'; import { normalizeMessagesForUser } from '../../../utils/server/lib/normalizeMessagesForUser'; import { getHiddenSystemMessages } from '../lib/getHiddenSystemMessages'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getChannelHistory(params: { diff --git a/apps/meteor/app/lib/server/methods/getMessages.ts b/apps/meteor/app/lib/server/methods/getMessages.ts index 909e3d0c656b..d8684f82453c 100644 --- a/apps/meteor/app/lib/server/methods/getMessages.ts +++ b/apps/meteor/app/lib/server/methods/getMessages.ts @@ -1,12 +1,12 @@ import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomIdAsync } from '../../../authorization/server/functions/canAccessRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getMessages(messages: IMessage['_id'][]): Promise; diff --git a/apps/meteor/app/lib/server/methods/getRoomJoinCode.ts b/apps/meteor/app/lib/server/methods/getRoomJoinCode.ts index 75e4a4372f57..5ba4b3490722 100644 --- a/apps/meteor/app/lib/server/methods/getRoomJoinCode.ts +++ b/apps/meteor/app/lib/server/methods/getRoomJoinCode.ts @@ -1,12 +1,12 @@ import { isRoomWithJoinCode } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getRoomJoinCode(rid: string): string | false; diff --git a/apps/meteor/app/lib/server/methods/getRoomRoles.ts b/apps/meteor/app/lib/server/methods/getRoomRoles.ts index ac5fcc734d0f..b411ba8fedf5 100644 --- a/apps/meteor/app/lib/server/methods/getRoomRoles.ts +++ b/apps/meteor/app/lib/server/methods/getRoomRoles.ts @@ -1,6 +1,6 @@ import type { IRoom, ISubscription } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -8,7 +8,7 @@ import { getRoomRoles } from '../../../../server/lib/roles/getRoomRoles'; import { canAccessRoomAsync } from '../../../authorization/server'; import { settings } from '../../../settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getRoomRoles(rid: IRoom['_id']): ISubscription[]; diff --git a/apps/meteor/app/lib/server/methods/getSingleMessage.ts b/apps/meteor/app/lib/server/methods/getSingleMessage.ts index 1aaf2a652257..c4b6f065296b 100644 --- a/apps/meteor/app/lib/server/methods/getSingleMessage.ts +++ b/apps/meteor/app/lib/server/methods/getSingleMessage.ts @@ -1,12 +1,12 @@ import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomIdAsync } from '../../../authorization/server/functions/canAccessRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getSingleMessage(mid: IMessage['_id']): Promise; diff --git a/apps/meteor/app/lib/server/methods/getSlashCommandPreviews.ts b/apps/meteor/app/lib/server/methods/getSlashCommandPreviews.ts index dcb39c466063..965c91cc502f 100644 --- a/apps/meteor/app/lib/server/methods/getSlashCommandPreviews.ts +++ b/apps/meteor/app/lib/server/methods/getSlashCommandPreviews.ts @@ -1,10 +1,10 @@ import type { IMessage, RequiredField, SlashCommandPreviews } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { slashCommands } from '../../../utils/server/slashCommand'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getSlashCommandPreviews(command: { diff --git a/apps/meteor/app/lib/server/methods/getUserRoles.ts b/apps/meteor/app/lib/server/methods/getUserRoles.ts index cc7588276c33..cbd4712930a2 100644 --- a/apps/meteor/app/lib/server/methods/getUserRoles.ts +++ b/apps/meteor/app/lib/server/methods/getUserRoles.ts @@ -1,9 +1,9 @@ import { Authorization } from '@rocket.chat/core-services'; import type { IUser, IRocketChatRecord } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getUserRoles(): (IRocketChatRecord & Pick)[]; diff --git a/apps/meteor/app/lib/server/methods/getUsernameSuggestion.ts b/apps/meteor/app/lib/server/methods/getUsernameSuggestion.ts index 5724449a5790..b42799f24081 100644 --- a/apps/meteor/app/lib/server/methods/getUsernameSuggestion.ts +++ b/apps/meteor/app/lib/server/methods/getUsernameSuggestion.ts @@ -1,9 +1,9 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { generateUsernameSuggestion } from '../functions/getUsernameSuggestion'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getUsernameSuggestion(): Promise; diff --git a/apps/meteor/app/lib/server/methods/insertOrUpdateUser.ts b/apps/meteor/app/lib/server/methods/insertOrUpdateUser.ts index 5a8b1c8d1a58..122b11172d57 100644 --- a/apps/meteor/app/lib/server/methods/insertOrUpdateUser.ts +++ b/apps/meteor/app/lib/server/methods/insertOrUpdateUser.ts @@ -1,4 +1,4 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -6,7 +6,7 @@ import { twoFactorRequired } from '../../../2fa/server/twoFactorRequired'; import { saveUser } from '../functions/saveUser'; import { methodDeprecationLogger } from '../lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { insertOrUpdateUser(userData: Record): Promise; diff --git a/apps/meteor/app/lib/server/methods/joinDefaultChannels.ts b/apps/meteor/app/lib/server/methods/joinDefaultChannels.ts index 309ac4e449be..df654bc4aef0 100644 --- a/apps/meteor/app/lib/server/methods/joinDefaultChannels.ts +++ b/apps/meteor/app/lib/server/methods/joinDefaultChannels.ts @@ -1,11 +1,11 @@ import type { IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { addUserToDefaultChannels } from '../functions/addUserToDefaultChannels'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { joinDefaultChannels(silenced?: boolean): void; diff --git a/apps/meteor/app/lib/server/methods/joinRoom.ts b/apps/meteor/app/lib/server/methods/joinRoom.ts index 0fa3ac0b3c3b..ef3f069ee614 100644 --- a/apps/meteor/app/lib/server/methods/joinRoom.ts +++ b/apps/meteor/app/lib/server/methods/joinRoom.ts @@ -1,11 +1,11 @@ import { Room } from '@rocket.chat/core-services'; import type { IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { joinRoom(rid: IRoom['_id'], code?: string): boolean | undefined; diff --git a/apps/meteor/app/lib/server/methods/leaveRoom.ts b/apps/meteor/app/lib/server/methods/leaveRoom.ts index ec1bb1638a21..4fc85b35fd05 100644 --- a/apps/meteor/app/lib/server/methods/leaveRoom.ts +++ b/apps/meteor/app/lib/server/methods/leaveRoom.ts @@ -1,6 +1,6 @@ import type { IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Roles, Subscriptions, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -10,7 +10,7 @@ import { hasPermissionAsync } from '../../../authorization/server/functions/hasP import { hasRoleAsync } from '../../../authorization/server/functions/hasRole'; import { removeUserFromRoom } from '../functions/removeUserFromRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { leaveRoom(rid: string): Promise; diff --git a/apps/meteor/app/lib/server/methods/refreshOAuthService.ts b/apps/meteor/app/lib/server/methods/refreshOAuthService.ts index e5b1c377a33e..1d547b770361 100644 --- a/apps/meteor/app/lib/server/methods/refreshOAuthService.ts +++ b/apps/meteor/app/lib/server/methods/refreshOAuthService.ts @@ -1,10 +1,10 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { refreshLoginServices } from '../../../../server/lib/refreshLoginServices'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { refreshOAuthService(): Promise; diff --git a/apps/meteor/app/lib/server/methods/removeOAuthService.ts b/apps/meteor/app/lib/server/methods/removeOAuthService.ts index 6e16dc8d2d5b..fee2caa911d2 100644 --- a/apps/meteor/app/lib/server/methods/removeOAuthService.ts +++ b/apps/meteor/app/lib/server/methods/removeOAuthService.ts @@ -1,13 +1,13 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Settings } from '@rocket.chat/models'; import { capitalize } from '@rocket.chat/string-helpers'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { notifyOnSettingChangedById } from '../lib/notifyListener'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { removeOAuthService(name: string): Promise; diff --git a/apps/meteor/app/lib/server/methods/restartServer.ts b/apps/meteor/app/lib/server/methods/restartServer.ts index 206824aebe7e..264ab4d1bee6 100644 --- a/apps/meteor/app/lib/server/methods/restartServer.ts +++ b/apps/meteor/app/lib/server/methods/restartServer.ts @@ -1,9 +1,9 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { restart_server(): { diff --git a/apps/meteor/app/lib/server/methods/saveCustomFields.ts b/apps/meteor/app/lib/server/methods/saveCustomFields.ts index a509c97bdb85..d683e59a905c 100644 --- a/apps/meteor/app/lib/server/methods/saveCustomFields.ts +++ b/apps/meteor/app/lib/server/methods/saveCustomFields.ts @@ -1,11 +1,11 @@ import type { IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { saveCustomFields } from '../functions/saveCustomFields'; import { RateLimiter } from '../lib'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { saveCustomFields: (fields: IUser['customFields']) => Promise; diff --git a/apps/meteor/app/lib/server/methods/saveSetting.ts b/apps/meteor/app/lib/server/methods/saveSetting.ts index 7f900d1751d8..4f4d29b9fa24 100644 --- a/apps/meteor/app/lib/server/methods/saveSetting.ts +++ b/apps/meteor/app/lib/server/methods/saveSetting.ts @@ -1,6 +1,6 @@ import type { SettingValue } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Settings } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -9,7 +9,7 @@ import { getSettingPermissionId } from '../../../authorization/lib'; import { hasPermissionAsync, hasAllPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { notifyOnSettingChanged } from '../lib/notifyListener'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { saveSetting(_id: string, value: SettingValue, editor?: string): Promise; diff --git a/apps/meteor/app/lib/server/methods/saveSettings.ts b/apps/meteor/app/lib/server/methods/saveSettings.ts index 8c4f92cfb88f..dffa986b7217 100644 --- a/apps/meteor/app/lib/server/methods/saveSettings.ts +++ b/apps/meteor/app/lib/server/methods/saveSettings.ts @@ -1,7 +1,7 @@ import type { ISetting } from '@rocket.chat/core-typings'; import { isSettingCode } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Settings } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -11,7 +11,7 @@ import { hasPermissionAsync } from '../../../authorization/server/functions/hasP import { settings } from '../../../settings/server'; import { notifyOnSettingChangedById } from '../lib/notifyListener'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { saveSettings( diff --git a/apps/meteor/app/lib/server/methods/sendMessage.ts b/apps/meteor/app/lib/server/methods/sendMessage.ts index a61ab499ce87..56009f15fede 100644 --- a/apps/meteor/app/lib/server/methods/sendMessage.ts +++ b/apps/meteor/app/lib/server/methods/sendMessage.ts @@ -1,7 +1,7 @@ import { api } from '@rocket.chat/core-services'; import type { AtLeast, IMessage, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import moment from 'moment'; @@ -111,7 +111,7 @@ export async function executeSendMessage(uid: IUser['_id'], message: AtLeast, previewUrls?: string[]): any; diff --git a/apps/meteor/app/lib/server/methods/sendSMTPTestEmail.ts b/apps/meteor/app/lib/server/methods/sendSMTPTestEmail.ts index 2ede129dd380..5a04032ad82e 100644 --- a/apps/meteor/app/lib/server/methods/sendSMTPTestEmail.ts +++ b/apps/meteor/app/lib/server/methods/sendSMTPTestEmail.ts @@ -1,11 +1,11 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; import * as Mailer from '../../../mailer/server/api'; import { settings } from '../../../settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { sendSMTPTestEmail(): { diff --git a/apps/meteor/app/lib/server/methods/setAdminStatus.ts b/apps/meteor/app/lib/server/methods/setAdminStatus.ts index 42ffdc91f85e..300aa735b014 100644 --- a/apps/meteor/app/lib/server/methods/setAdminStatus.ts +++ b/apps/meteor/app/lib/server/methods/setAdminStatus.ts @@ -1,12 +1,12 @@ import { isUserFederated } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { setAdminStatus(userId: string, admin?: boolean): void; diff --git a/apps/meteor/app/lib/server/methods/setEmail.ts b/apps/meteor/app/lib/server/methods/setEmail.ts index a172eba72555..26540db26b4c 100644 --- a/apps/meteor/app/lib/server/methods/setEmail.ts +++ b/apps/meteor/app/lib/server/methods/setEmail.ts @@ -1,4 +1,4 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -6,7 +6,7 @@ import { settings } from '../../../settings/server'; import { setEmail } from '../functions/setEmail'; import { RateLimiter } from '../lib'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { setEmail(email: string): string; diff --git a/apps/meteor/app/lib/server/methods/setRealName.ts b/apps/meteor/app/lib/server/methods/setRealName.ts index 2a55bd102172..f347eef1580e 100644 --- a/apps/meteor/app/lib/server/methods/setRealName.ts +++ b/apps/meteor/app/lib/server/methods/setRealName.ts @@ -1,4 +1,4 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -6,7 +6,7 @@ import { settings } from '../../../settings/server'; import { setRealName } from '../functions/setRealName'; import { RateLimiter } from '../lib'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { setRealName(name: string): string; diff --git a/apps/meteor/app/lib/server/methods/setUsername.ts b/apps/meteor/app/lib/server/methods/setUsername.ts index 900848f37783..58fac75ed3bd 100644 --- a/apps/meteor/app/lib/server/methods/setUsername.ts +++ b/apps/meteor/app/lib/server/methods/setUsername.ts @@ -1,11 +1,11 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { setUsernameWithValidation } from '../functions/setUsername'; import { RateLimiter } from '../lib'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { setUsername(username: string, param?: { joinDefaultChannelsSilenced?: boolean }): string; diff --git a/apps/meteor/app/lib/server/methods/unarchiveRoom.ts b/apps/meteor/app/lib/server/methods/unarchiveRoom.ts index 0f9349365f4f..74b74c11e54a 100644 --- a/apps/meteor/app/lib/server/methods/unarchiveRoom.ts +++ b/apps/meteor/app/lib/server/methods/unarchiveRoom.ts @@ -1,13 +1,13 @@ import { isRegisterUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { unarchiveRoom } from '../functions/unarchiveRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { unarchiveRoom(rid: string): Promise; diff --git a/apps/meteor/app/lib/server/methods/unblockUser.ts b/apps/meteor/app/lib/server/methods/unblockUser.ts index 6c8a9d486bab..2eec5a082109 100644 --- a/apps/meteor/app/lib/server/methods/unblockUser.ts +++ b/apps/meteor/app/lib/server/methods/unblockUser.ts @@ -1,9 +1,9 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { unblockUser({ rid, blocked }: { rid: string; blocked: string }): boolean; diff --git a/apps/meteor/app/lib/server/methods/updateMessage.ts b/apps/meteor/app/lib/server/methods/updateMessage.ts index 161a168a2cdc..8cebe563cd23 100644 --- a/apps/meteor/app/lib/server/methods/updateMessage.ts +++ b/apps/meteor/app/lib/server/methods/updateMessage.ts @@ -1,6 +1,6 @@ import type { IEditedMessage, IMessage, IUser, AtLeast } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import moment from 'moment'; @@ -12,7 +12,11 @@ import { updateMessage } from '../functions/updateMessage'; const allowedEditedFields = ['tshow', 'alias', 'attachments', 'avatar', 'emoji', 'msg', 'customFields', 'content']; -export async function executeUpdateMessage(uid: IUser['_id'], message: AtLeast, previewUrls?: string[]) { +export async function executeUpdateMessage( + uid: IUser['_id'], + message: AtLeast, + previewUrls?: string[], +) { const originalMessage = await Messages.findOneById(message._id); if (!originalMessage?._id) { return; @@ -26,8 +30,11 @@ export async function executeUpdateMessage(uid: IUser['_id'], message: AtLeast { + async (message, { room }) => { // TODO: check if I need to test this 60 second rule. // If the message was edited, or is older than 60 seconds (imported) // the notifications will be skipped, so we can also skip this validation diff --git a/apps/meteor/app/livechat-enterprise/client/startup.ts b/apps/meteor/app/livechat-enterprise/client/startup.ts index 0535f8926a7d..bdf6c2549816 100644 --- a/apps/meteor/app/livechat-enterprise/client/startup.ts +++ b/apps/meteor/app/livechat-enterprise/client/startup.ts @@ -15,7 +15,7 @@ const businessHours: Record = { Meteor.startup(() => { Tracker.autorun(async () => { const bhType = settings.get('Livechat_business_hour_type'); - if (await hasLicense('livechat-enterprise')) { + if (bhType && (await hasLicense('livechat-enterprise'))) { businessHourManager.registerBusinessHourBehavior(businessHours[bhType.toLowerCase()]); } }); diff --git a/apps/meteor/app/livechat/client/externalFrame/generateNewKey.ts b/apps/meteor/app/livechat/client/externalFrame/generateNewKey.ts index eb0742813c1f..54c6ba4d75f1 100644 --- a/apps/meteor/app/livechat/client/externalFrame/generateNewKey.ts +++ b/apps/meteor/app/livechat/client/externalFrame/generateNewKey.ts @@ -1,4 +1,4 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { sdk } from '../../../utils/client/lib/SDKClient'; diff --git a/apps/meteor/app/livechat/server/api/lib/agents.ts b/apps/meteor/app/livechat/server/api/lib/agents.ts index 3bc5180c2f59..2dbcce8c7e2e 100644 --- a/apps/meteor/app/livechat/server/api/lib/agents.ts +++ b/apps/meteor/app/livechat/server/api/lib/agents.ts @@ -7,14 +7,8 @@ export async function findAgentDepartments({ }: { enabledDepartmentsOnly?: boolean; agentId: string; -}): Promise<{ departments: ILivechatDepartmentAgents[] }> { - if (enabledDepartmentsOnly) { - return { - departments: await LivechatDepartmentAgents.findActiveDepartmentsByAgentId(agentId).toArray(), - }; - } - +}): Promise<{ departments: (ILivechatDepartmentAgents & { departmentName: string })[] }> { return { - departments: await LivechatDepartmentAgents.find({ agentId }).toArray(), + departments: await LivechatDepartmentAgents.findDepartmentsOfAgent(agentId, enabledDepartmentsOnly).toArray(), }; } diff --git a/apps/meteor/app/livechat/server/api/v1/pageVisited.ts b/apps/meteor/app/livechat/server/api/v1/pageVisited.ts index e89a3e17f0a1..2688ad673af0 100644 --- a/apps/meteor/app/livechat/server/api/v1/pageVisited.ts +++ b/apps/meteor/app/livechat/server/api/v1/pageVisited.ts @@ -1,5 +1,4 @@ import type { IOmnichannelSystemMessage } from '@rocket.chat/core-typings'; -import { Messages } from '@rocket.chat/models'; import { isPOSTLivechatPageVisitedParams } from '@rocket.chat/rest-typings'; import { API } from '../../../../api/server'; @@ -11,17 +10,13 @@ API.v1.addRoute( { async post() { const { token, rid, pageInfo } = this.bodyParams; - const msgId = await Livechat.savePageHistory(token, rid, pageInfo); - if (!msgId) { - return API.v1.success(); - } - const message = await Messages.findOneById(msgId); + const message = await Livechat.savePageHistory(token, rid, pageInfo); if (!message) { return API.v1.success(); } - const { msg, navigation } = message; + const { msg, navigation } = message as IOmnichannelSystemMessage; return API.v1.success({ page: { msg, navigation } }); }, }, diff --git a/apps/meteor/app/livechat/server/externalFrame/generateNewKey.ts b/apps/meteor/app/livechat/server/externalFrame/generateNewKey.ts index 11463bcf00d4..a8f145f47d39 100644 --- a/apps/meteor/app/livechat/server/externalFrame/generateNewKey.ts +++ b/apps/meteor/app/livechat/server/externalFrame/generateNewKey.ts @@ -1,7 +1,7 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { omnichannelExternalFrameGenerateKey(): unknown; diff --git a/apps/meteor/app/livechat/server/hooks/afterSaveOmnichannelMessage.ts b/apps/meteor/app/livechat/server/hooks/afterSaveOmnichannelMessage.ts new file mode 100644 index 000000000000..311343c4ad01 --- /dev/null +++ b/apps/meteor/app/livechat/server/hooks/afterSaveOmnichannelMessage.ts @@ -0,0 +1,24 @@ +import { isOmnichannelRoom } from '@rocket.chat/core-typings'; +import { LivechatRooms } from '@rocket.chat/models'; + +import { callbacks } from '../../../../lib/callbacks'; + +callbacks.add( + 'afterSaveMessage', + async (message, { room }) => { + if (!isOmnichannelRoom(room)) { + return message; + } + + const updater = LivechatRooms.getUpdater(); + const result = await callbacks.run('afterOmnichannelSaveMessage', message, { room, roomUpdater: updater }); + + if (updater.hasChanges()) { + await LivechatRooms.updateFromUpdater({ _id: room._id }, updater); + } + + return result; + }, + callbacks.priority.MEDIUM, + 'after-omnichannel-save-message', +); diff --git a/apps/meteor/app/livechat/server/hooks/leadCapture.ts b/apps/meteor/app/livechat/server/hooks/leadCapture.ts index 4b987c00c02e..6a3826b8ba11 100644 --- a/apps/meteor/app/livechat/server/hooks/leadCapture.ts +++ b/apps/meteor/app/livechat/server/hooks/leadCapture.ts @@ -1,5 +1,5 @@ import type { IMessage, IOmnichannelRoom } from '@rocket.chat/core-typings'; -import { isEditedMessage, isOmnichannelRoom } from '@rocket.chat/core-typings'; +import { isEditedMessage } from '@rocket.chat/core-typings'; import { LivechatVisitors } from '@rocket.chat/models'; import { callbacks } from '../../../../lib/callbacks'; @@ -31,12 +31,8 @@ function validateMessage(message: IMessage, room: IOmnichannelRoom) { } callbacks.add( - 'afterSaveMessage', - async (message, room) => { - if (!isOmnichannelRoom(room)) { - return message; - } - + 'afterOmnichannelSaveMessage', + async (message, { room }) => { if (!validateMessage(message, room)) { return message; } diff --git a/apps/meteor/app/livechat/server/hooks/markRoomNotResponded.ts b/apps/meteor/app/livechat/server/hooks/markRoomNotResponded.ts index f0bfb8574e6a..01d3014f1c27 100644 --- a/apps/meteor/app/livechat/server/hooks/markRoomNotResponded.ts +++ b/apps/meteor/app/livechat/server/hooks/markRoomNotResponded.ts @@ -1,15 +1,11 @@ -import { isOmnichannelRoom, isEditedMessage } from '@rocket.chat/core-typings'; +import { isEditedMessage } from '@rocket.chat/core-typings'; import { LivechatRooms } from '@rocket.chat/models'; import { callbacks } from '../../../../lib/callbacks'; callbacks.add( - 'afterSaveMessage', - async (message, room) => { - if (!isOmnichannelRoom(room)) { - return message; - } - + 'afterOmnichannelSaveMessage', + (message, { room, roomUpdater }) => { // skips this callback if the message was edited if (!message || isEditedMessage(message)) { return message; @@ -21,11 +17,11 @@ callbacks.add( } // check if room is yet awaiting for response - if (typeof room.t !== 'undefined' && room.t === 'l' && room.waitingResponse) { + if (room.waitingResponse) { return message; } - await LivechatRooms.setNotResponseByRoomId(room._id); + LivechatRooms.getNotResponseByRoomIdUpdateQuery(roomUpdater); return message; }, diff --git a/apps/meteor/app/livechat/server/hooks/markRoomResponded.ts b/apps/meteor/app/livechat/server/hooks/markRoomResponded.ts index 48ec985aa42c..69e9b11c57b9 100644 --- a/apps/meteor/app/livechat/server/hooks/markRoomResponded.ts +++ b/apps/meteor/app/livechat/server/hooks/markRoomResponded.ts @@ -1,78 +1,72 @@ -import type { IOmnichannelRoom } from '@rocket.chat/core-typings'; -import { isOmnichannelRoom, isEditedMessage } from '@rocket.chat/core-typings'; +import type { IOmnichannelRoom, IMessage } from '@rocket.chat/core-typings'; +import { isEditedMessage, isMessageFromVisitor } from '@rocket.chat/core-typings'; +import type { Updater } from '@rocket.chat/models'; import { LivechatRooms, LivechatVisitors, LivechatInquiry } from '@rocket.chat/models'; import moment from 'moment'; import { callbacks } from '../../../../lib/callbacks'; import { notifyOnLivechatInquiryChanged } from '../../../lib/server/lib/notifyListener'; -callbacks.add( - 'afterSaveMessage', - async (message, room) => { - if (!isOmnichannelRoom(room)) { - return message; - } - - // skips this callback if the message was edited - if (!message || isEditedMessage(message)) { - return message; - } +export async function markRoomResponded( + message: IMessage, + room: IOmnichannelRoom, + roomUpdater: Updater, +): Promise { + if (message.t || isEditedMessage(message) || isMessageFromVisitor(message)) { + return; + } - // skips this callback if the message is a system message - if (message.t) { - return message; - } + const monthYear = moment().format('YYYY-MM'); + const isVisitorActive = await LivechatVisitors.isVisitorActiveOnPeriod(room.v._id, monthYear); - // if the message has a token, it was sent by the visitor, so ignore it - if (message.token) { - return message; - } + // Case: agent answers & visitor is not active, we mark visitor as active + if (!isVisitorActive) { + await LivechatVisitors.markVisitorActiveForPeriod(room.v._id, monthYear); + } - // Return YYYY-MM from moment - const monthYear = moment().format('YYYY-MM'); - const isVisitorActive = await LivechatVisitors.isVisitorActiveOnPeriod(room.v._id, monthYear); + if (!room.v?.activity?.includes(monthYear)) { + LivechatRooms.getVisitorActiveForPeriodUpdateQuery(monthYear, roomUpdater); + const livechatInquiry = await LivechatInquiry.markInquiryActiveForPeriod(room._id, monthYear); - // Case: agent answers & visitor is not active, we mark visitor as active - if (!isVisitorActive) { - await LivechatVisitors.markVisitorActiveForPeriod(room.v._id, monthYear); + if (livechatInquiry) { + void notifyOnLivechatInquiryChanged(livechatInquiry, 'updated', { v: livechatInquiry.v }); } + } - if (!room.v?.activity?.includes(monthYear)) { - const [, livechatInquiry] = await Promise.all([ - LivechatRooms.markVisitorActiveForPeriod(room._id, monthYear), - LivechatInquiry.markInquiryActiveForPeriod(room._id, monthYear), - ]); - if (livechatInquiry) { - void notifyOnLivechatInquiryChanged(livechatInquiry, 'updated', { v: livechatInquiry.v }); - } - } + if (room.responseBy) { + LivechatRooms.getAgentLastMessageTsUpdateQuery(roomUpdater); + } + if (!room.waitingResponse) { + // case where agent sends second message or any subsequent message in a room before visitor responds to the first message + // in this case, we just need to update the lastMessageTs of the responseBy object if (room.responseBy) { - await LivechatRooms.setAgentLastMessageTs(room._id); + LivechatRooms.getAgentLastMessageTsUpdateQuery(roomUpdater); } - // check if room is yet awaiting for response from visitor - if (!room.waitingResponse) { - // case where agent sends second message or any subsequent message in a room before visitor responds to the first message - // in this case, we just need to update the lastMessageTs of the responseBy object - if (room.responseBy) { - await LivechatRooms.setAgentLastMessageTs(room._id); - } - return message; - } + return room.responseBy; + } + + const responseBy: IOmnichannelRoom['responseBy'] = room.responseBy || { + _id: message.u._id, + username: message.u.username, + firstResponseTs: new Date(message.ts), + lastMessageTs: new Date(message.ts), + }; - // This is the first message from agent after visitor had last responded - const responseBy: IOmnichannelRoom['responseBy'] = room.responseBy || { - _id: message.u._id, - username: message.u.username, - firstResponseTs: new Date(message.ts), - lastMessageTs: new Date(message.ts), - }; + LivechatRooms.getResponseByRoomIdUpdateQuery(responseBy, roomUpdater); - // this unsets waitingResponse and sets responseBy object - await LivechatRooms.setResponseByRoomId(room._id, responseBy); + return responseBy; +} + +callbacks.add( + 'afterOmnichannelSaveMessage', + async (message, { room, roomUpdater }) => { + if (!message || message.t || isEditedMessage(message) || isMessageFromVisitor(message)) { + return; + } - return message; + await markRoomResponded(message, room, roomUpdater); }, callbacks.priority.HIGH, 'markRoomResponded', diff --git a/apps/meteor/app/livechat/server/hooks/processRoomAbandonment.ts b/apps/meteor/app/livechat/server/hooks/processRoomAbandonment.ts index 8a5a4c280670..a6031bd42efa 100644 --- a/apps/meteor/app/livechat/server/hooks/processRoomAbandonment.ts +++ b/apps/meteor/app/livechat/server/hooks/processRoomAbandonment.ts @@ -6,11 +6,12 @@ import moment from 'moment'; import { callbacks } from '../../../../lib/callbacks'; import { settings } from '../../../settings/server'; import { businessHourManager } from '../business-hour'; +import type { CloseRoomParams } from '../lib/localTypes'; -const getSecondsWhenOfficeHoursIsDisabled = (room: IOmnichannelRoom, agentLastMessage: IMessage) => +export const getSecondsWhenOfficeHoursIsDisabled = (room: IOmnichannelRoom, agentLastMessage: IMessage) => moment(new Date(room.closedAt || new Date())).diff(moment(new Date(agentLastMessage.ts)), 'seconds'); -const parseDays = ( +export const parseDays = ( acc: Record, day: IBusinessHourWorkHour, ) => { @@ -22,7 +23,7 @@ const parseDays = ( return acc; }; -const getSecondsSinceLastAgentResponse = async (room: IOmnichannelRoom, agentLastMessage: IMessage) => { +export const getSecondsSinceLastAgentResponse = async (room: IOmnichannelRoom, agentLastMessage: IMessage) => { if (!settings.get('Livechat_enable_business_hours')) { return getSecondsWhenOfficeHoursIsDisabled(room, agentLastMessage); } @@ -43,65 +44,91 @@ const getSecondsSinceLastAgentResponse = async (room: IOmnichannelRoom, agentLas officeDays = (await businessHourManager.getBusinessHour())?.workHours.reduce(parseDays, {}); } - if (!officeDays) { + // Empty object we assume invalid config + if (!officeDays || !Object.keys(officeDays).length) { return getSecondsWhenOfficeHoursIsDisabled(room, agentLastMessage); } let totalSeconds = 0; - const endOfConversation = moment(new Date(room.closedAt || new Date())); - const startOfInactivity = moment(new Date(agentLastMessage.ts)); + const endOfConversation = moment.utc(new Date(room.closedAt || new Date())); + const startOfInactivity = moment.utc(new Date(agentLastMessage.ts)); const daysOfInactivity = endOfConversation.clone().startOf('day').diff(startOfInactivity.clone().startOf('day'), 'days'); - const inactivityDay = moment(new Date(agentLastMessage.ts)); + const inactivityDay = moment.utc(new Date(agentLastMessage.ts)); + for (let index = 0; index <= daysOfInactivity; index++) { const today = inactivityDay.clone().format('dddd'); const officeDay = officeDays[today]; - const startTodaysOfficeHour = moment(`${officeDay.start.day}:${officeDay.start.time}`, 'dddd:HH:mm').add(index, 'days'); - const endTodaysOfficeHour = moment(`${officeDay.finish.day}:${officeDay.finish.time}`, 'dddd:HH:mm').add(index, 'days'); - if (officeDays[today].open) { - const firstDayOfInactivity = startOfInactivity.clone().format('D') === inactivityDay.clone().format('D'); - const lastDayOfInactivity = endOfConversation.clone().format('D') === inactivityDay.clone().format('D'); - - if (!firstDayOfInactivity && !lastDayOfInactivity) { - totalSeconds += endTodaysOfficeHour.clone().diff(startTodaysOfficeHour, 'seconds'); - } else { - const end = endOfConversation.isBefore(endTodaysOfficeHour) ? endOfConversation : endTodaysOfficeHour; - const start = firstDayOfInactivity ? inactivityDay : startTodaysOfficeHour; - totalSeconds += end.clone().diff(start, 'seconds'); - } + if (!officeDay) { + inactivityDay.add(1, 'days'); + continue; + } + if (!officeDay.open) { + inactivityDay.add(1, 'days'); + continue; + } + if (!officeDay?.start?.time || !officeDay?.finish?.time) { + inactivityDay.add(1, 'days'); + continue; } - inactivityDay.add(1, 'days'); - } - return totalSeconds; -}; -callbacks.add( - 'livechat.closeRoom', - async (params) => { - const { room } = params; + const [officeStartHour, officeStartMinute] = officeDay.start.time.split(':'); + const [officeCloseHour, officeCloseMinute] = officeDay.finish.time.split(':'); + // We should only take in consideration the time where the office is open and the conversation was inactive + const todayStartOfficeHours = inactivityDay + .clone() + .set({ hour: parseInt(officeStartHour, 10), minute: parseInt(officeStartMinute, 10) }); + const todayEndOfficeHours = inactivityDay.clone().set({ hour: parseInt(officeCloseHour, 10), minute: parseInt(officeCloseMinute, 10) }); - if (!isOmnichannelRoom(room)) { - return params; + // 1: Room was inactive the whole day, we add the whole time BH is inactive + if (startOfInactivity.isBefore(todayStartOfficeHours) && endOfConversation.isAfter(todayEndOfficeHours)) { + totalSeconds += todayEndOfficeHours.diff(todayStartOfficeHours, 'seconds'); } - const closedByAgent = room.closer !== 'visitor'; - const wasTheLastMessageSentByAgent = room.lastMessage && !room.lastMessage.token; - if (!closedByAgent || !wasTheLastMessageSentByAgent) { - return params; + // 2: Room was inactive before start but was closed before end of BH, we add the inactive time + if (startOfInactivity.isBefore(todayStartOfficeHours) && endOfConversation.isBefore(todayEndOfficeHours)) { + totalSeconds += endOfConversation.diff(todayStartOfficeHours, 'seconds'); } - if (!room.v?.lastMessageTs) { - return params; + // 3: Room was inactive after start and ended after end of BH, we add the inactive time + if (startOfInactivity.isAfter(todayStartOfficeHours) && endOfConversation.isAfter(todayEndOfficeHours)) { + totalSeconds += todayEndOfficeHours.diff(startOfInactivity, 'seconds'); } - const agentLastMessage = await Messages.findAgentLastMessageByVisitorLastMessageTs(room._id, room.v.lastMessageTs); - if (!agentLastMessage) { - return params; + // 4: Room was inactive after start and before end of BH, we add the inactive time + if (startOfInactivity.isAfter(todayStartOfficeHours) && endOfConversation.isBefore(todayEndOfficeHours)) { + totalSeconds += endOfConversation.diff(startOfInactivity, 'seconds'); } - const secondsSinceLastAgentResponse = await getSecondsSinceLastAgentResponse(room, agentLastMessage); - await LivechatRooms.setVisitorInactivityInSecondsById(room._id, secondsSinceLastAgentResponse); + inactivityDay.add(1, 'days'); + } + return totalSeconds; +}; + +export const onCloseRoom = async (params: { room: IOmnichannelRoom; options: CloseRoomParams['options'] }) => { + const { room } = params; + + if (!isOmnichannelRoom(room)) { return params; - }, - callbacks.priority.HIGH, - 'process-room-abandonment', -); + } + + const closedByAgent = room.closer !== 'visitor'; + const wasTheLastMessageSentByAgent = room.lastMessage && !room.lastMessage.token; + if (!closedByAgent || !wasTheLastMessageSentByAgent) { + return params; + } + + if (!room.v?.lastMessageTs) { + return params; + } + + const agentLastMessage = await Messages.findAgentLastMessageByVisitorLastMessageTs(room._id, room.v.lastMessageTs); + if (!agentLastMessage) { + return params; + } + const secondsSinceLastAgentResponse = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + await LivechatRooms.setVisitorInactivityInSecondsById(room._id, secondsSinceLastAgentResponse); + + return params; +}; + +callbacks.add('livechat.closeRoom', onCloseRoom, callbacks.priority.HIGH, 'process-room-abandonment'); diff --git a/apps/meteor/app/livechat/server/hooks/saveAnalyticsData.ts b/apps/meteor/app/livechat/server/hooks/saveAnalyticsData.ts index e92e6b4d940b..109f49f440b5 100644 --- a/apps/meteor/app/livechat/server/hooks/saveAnalyticsData.ts +++ b/apps/meteor/app/livechat/server/hooks/saveAnalyticsData.ts @@ -1,84 +1,82 @@ -import { isEditedMessage, isOmnichannelRoom } from '@rocket.chat/core-typings'; +import { isEditedMessage, isMessageFromVisitor } from '@rocket.chat/core-typings'; +import type { IOmnichannelRoom } from '@rocket.chat/core-typings'; import { LivechatRooms } from '@rocket.chat/models'; import { callbacks } from '../../../../lib/callbacks'; import { normalizeMessageFileUpload } from '../../../utils/server/functions/normalizeMessageFileUpload'; -callbacks.add( - 'afterSaveMessage', - async (message, room) => { - // check if room is livechat - if (!isOmnichannelRoom(room)) { - return message; - } +const getMetricValue = (metric: T | undefined, defaultValue: T): T => metric ?? defaultValue; +const calculateTimeDifference = (startTime: T, now: Date): number => + (now.getTime() - new Date(startTime).getTime()) / 1000; +const calculateAvgResponseTime = (totalResponseTime: number, newResponseTime: number, responseCount: number) => + (totalResponseTime + newResponseTime) / (responseCount + 1); - // skips this callback if the message was edited - if (!message || isEditedMessage(message)) { - return message; - } +const getFirstResponseAnalytics = ( + visitorLastQuery: Date, + agentJoinTime: Date, + totalResponseTime: number, + responseCount: number, + now: Date, +) => { + const responseTime = calculateTimeDifference(visitorLastQuery, now); + const reactionTime = calculateTimeDifference(agentJoinTime, now); + const avgResponseTime = calculateAvgResponseTime(totalResponseTime, responseTime, responseCount); - // if the message has a token, it was sent by the visitor - if (message.token) { - // When visitor sends a mesage, most metrics wont be calculated/served. - // But, v.lq (last query) will be updated to the message time. This has to be done - // As not doing it will cause the metrics to be crazy and not have real values. - await LivechatRooms.saveAnalyticsDataByRoomId(room, message); - return message; - } + return { + firstResponseDate: now, + firstResponseTime: responseTime, + responseTime, + avgResponseTime, + firstReactionDate: now, + firstReactionTime: reactionTime, + reactionTime, + }; +}; - if (message.file) { - message = { ...(await normalizeMessageFileUpload(message)), ...{ _updatedAt: message._updatedAt } }; - } +const getSubsequentResponseAnalytics = (visitorLastQuery: Date, totalResponseTime: number, responseCount: number, now: Date) => { + const responseTime = calculateTimeDifference(visitorLastQuery, now); + const avgResponseTime = calculateAvgResponseTime(totalResponseTime, responseTime, responseCount); - const now = new Date(); - let analyticsData; + return { + responseTime, + avgResponseTime, + reactionTime: responseTime, + }; +}; - const visitorLastQuery = room.metrics?.v ? room.metrics.v.lq : room.ts; - const agentLastReply = room.metrics?.servedBy ? room.metrics.servedBy.lr : room.ts; - const agentJoinTime = room.servedBy?.ts ? room.servedBy.ts : room.ts; +const getAnalyticsData = (room: IOmnichannelRoom, now: Date): Record | undefined => { + const visitorLastQuery = getMetricValue(room.metrics?.v?.lq, room.ts); + const agentLastReply = getMetricValue(room.metrics?.servedBy?.lr, room.ts); + const agentJoinTime = getMetricValue(room.servedBy?.ts, room.ts); + const totalResponseTime = getMetricValue(room.metrics?.response?.tt, 0); + const responseCount = getMetricValue(room.metrics?.response?.total, 0); - const isResponseTt = room.metrics?.response?.tt; - const isResponseTotal = room.metrics?.response?.total; + if (agentLastReply === room.ts) { + return getFirstResponseAnalytics(visitorLastQuery, agentJoinTime, totalResponseTime, responseCount, now); + } + if (visitorLastQuery > agentLastReply) { + return getSubsequentResponseAnalytics(visitorLastQuery, totalResponseTime, responseCount, now); + } +}; - if (agentLastReply === room.ts) { - // first response - const firstResponseDate = now; - const firstResponseTime = (now.getTime() - new Date(visitorLastQuery).getTime()) / 1000; - const responseTime = (now.getTime() - new Date(visitorLastQuery).getTime()) / 1000; - const avgResponseTime = - ((isResponseTt ? room.metrics?.response?.tt : 0) || 0 + responseTime) / - ((isResponseTotal ? room.metrics?.response?.total : 0) || 0 + 1); - - const firstReactionDate = now; - const firstReactionTime = (now.getTime() - new Date(agentJoinTime).getTime()) / 1000; - const reactionTime = (now.getTime() - new Date(agentJoinTime).getTime()) / 1000; - - analyticsData = { - firstResponseDate, - firstResponseTime, - responseTime, - avgResponseTime, - firstReactionDate, - firstReactionTime, - reactionTime, - }; - } else if (visitorLastQuery > agentLastReply) { - // response, not first - const responseTime = (now.getTime() - new Date(visitorLastQuery).getTime()) / 1000; - const avgResponseTime = - ((isResponseTt ? room.metrics?.response?.tt : 0) || 0 + responseTime) / - ((isResponseTotal ? room.metrics?.response?.total : 0) || 0 + 1); +callbacks.add( + 'afterOmnichannelSaveMessage', + async (message, { room, roomUpdater }) => { + if (!message || isEditedMessage(message)) { + return message; + } - const reactionTime = (now.getTime() - new Date(visitorLastQuery).getTime()) / 1000; + if (message.file) { + message = { ...(await normalizeMessageFileUpload(message)), ...{ _updatedAt: message._updatedAt } }; + } - analyticsData = { - responseTime, - avgResponseTime, - reactionTime, - }; - } // ignore, its continuing response + if (isMessageFromVisitor(message)) { + LivechatRooms.getAnalyticsUpdateQueryBySentByVisitor(room, message, roomUpdater); + } else { + const analyticsData = getAnalyticsData(room, new Date()); + LivechatRooms.getAnalyticsUpdateQueryBySentByAgent(room, message, analyticsData, roomUpdater); + } - await LivechatRooms.saveAnalyticsDataByRoomId(room, message, analyticsData); return message; }, callbacks.priority.LOW, diff --git a/apps/meteor/app/livechat/server/hooks/saveLastMessageToInquiry.ts b/apps/meteor/app/livechat/server/hooks/saveLastMessageToInquiry.ts index e65f1d99b884..1925e135a562 100644 --- a/apps/meteor/app/livechat/server/hooks/saveLastMessageToInquiry.ts +++ b/apps/meteor/app/livechat/server/hooks/saveLastMessageToInquiry.ts @@ -1,4 +1,4 @@ -import { isOmnichannelRoom, isEditedMessage } from '@rocket.chat/core-typings'; +import { isEditedMessage } from '@rocket.chat/core-typings'; import { LivechatInquiry } from '@rocket.chat/models'; import { callbacks } from '../../../../lib/callbacks'; @@ -7,9 +7,9 @@ import { settings } from '../../../settings/server'; import { RoutingManager } from '../lib/RoutingManager'; callbacks.add( - 'afterSaveMessage', - async (message, room) => { - if (!isOmnichannelRoom(room) || isEditedMessage(message) || message.t) { + 'afterOmnichannelSaveMessage', + async (message, { room }) => { + if (isEditedMessage(message) || message.t) { return message; } diff --git a/apps/meteor/app/livechat/server/hooks/saveLastVisitorMessageTs.ts b/apps/meteor/app/livechat/server/hooks/saveLastVisitorMessageTs.ts index 4bc28c3990ba..03dcfdbf81bd 100644 --- a/apps/meteor/app/livechat/server/hooks/saveLastVisitorMessageTs.ts +++ b/apps/meteor/app/livechat/server/hooks/saveLastVisitorMessageTs.ts @@ -1,22 +1,18 @@ -import { isOmnichannelRoom } from '@rocket.chat/core-typings'; +import { isMessageFromVisitor } from '@rocket.chat/core-typings'; import { LivechatRooms } from '@rocket.chat/models'; import { callbacks } from '../../../../lib/callbacks'; callbacks.add( - 'afterSaveMessage', - async (message, room) => { - if (!(isOmnichannelRoom(room) && room.v.token)) { - return message; - } - if (message.t) { - return message; - } - if (!message.token) { + 'afterOmnichannelSaveMessage', + async (message, { roomUpdater }) => { + if (message.t || !isMessageFromVisitor(message)) { return message; } - await LivechatRooms.setVisitorLastMessageTimestampByRoomId(room._id, message.ts); + await LivechatRooms.getVisitorLastMessageTsUpdateQueryByRoomId(message.ts, roomUpdater); + + return message; }, callbacks.priority.HIGH, 'save-last-visitor-message-timestamp', diff --git a/apps/meteor/app/livechat/server/hooks/sendToCRM.ts b/apps/meteor/app/livechat/server/hooks/sendToCRM.ts index 24e1d685a0e6..b3624bd3ecf6 100644 --- a/apps/meteor/app/livechat/server/hooks/sendToCRM.ts +++ b/apps/meteor/app/livechat/server/hooks/sendToCRM.ts @@ -261,13 +261,8 @@ callbacks.add( ); callbacks.add( - 'afterSaveMessage', - async (message, room) => { - // only call webhook if it is a livechat room - if (!isOmnichannelRoom(room) || !room?.v?.token) { - return message; - } - + 'afterOmnichannelSaveMessage', + async (message, { room }) => { // if the message has a token, it was sent from the visitor // if not, it was sent from the agent if (message.token && !settings.get('Livechat_webhook_on_visitor_message')) { diff --git a/apps/meteor/app/livechat/server/index.ts b/apps/meteor/app/livechat/server/index.ts index fc96f2a921a9..9a1f40238df5 100644 --- a/apps/meteor/app/livechat/server/index.ts +++ b/apps/meteor/app/livechat/server/index.ts @@ -16,6 +16,7 @@ import './hooks/saveContactLastChat'; import './hooks/saveLastMessageToInquiry'; import './hooks/afterUserActions'; import './hooks/afterAgentRemoved'; +import './hooks/afterSaveOmnichannelMessage'; import './methods/addAgent'; import './methods/addManager'; import './methods/changeLivechatStatus'; diff --git a/apps/meteor/app/livechat/server/lib/Helper.ts b/apps/meteor/app/livechat/server/lib/Helper.ts index c0e85a8c7c2b..1ef572df3068 100644 --- a/apps/meteor/app/livechat/server/lib/Helper.ts +++ b/apps/meteor/app/livechat/server/lib/Helper.ts @@ -36,7 +36,6 @@ import { validateEmail as validatorFunc } from '../../../../lib/emailValidator'; import { i18n } from '../../../../server/lib/i18n'; import { hasRoleAsync } from '../../../authorization/server/functions/hasRole'; import { sendNotification } from '../../../lib/server'; -import { sendMessage } from '../../../lib/server/functions/sendMessage'; import { notifyOnLivechatDepartmentAgentChanged, notifyOnLivechatDepartmentAgentChangedByAgentsAndDepartmentId, @@ -141,10 +140,7 @@ export const createLivechatRoom = async < } await callbacks.run('livechat.newRoom', room); - - // TODO: replace with `Message.saveSystemMessage` - - await sendMessage(guest, { t: 'livechat-started', msg: '', groupable: false, token: guest.token }, room); + await Message.saveSystemMessageAndNotifyUser('livechat-started', rid, '', { _id, username }, { groupable: false, token: guest.token }); return result.value as IOmnichannelRoom; }; diff --git a/apps/meteor/app/livechat/server/lib/LivechatTyped.ts b/apps/meteor/app/livechat/server/lib/LivechatTyped.ts index ccca7a8eb68e..bb8a3fd77ba2 100644 --- a/apps/meteor/app/livechat/server/lib/LivechatTyped.ts +++ b/apps/meteor/app/livechat/server/lib/LivechatTyped.ts @@ -252,7 +252,6 @@ class LivechatClass { const isRoomClosedByVisitorParams = (params: CloseRoomParams): params is CloseRoomParamsByVisitor => (params as CloseRoomParamsByVisitor).visitor !== undefined; - let chatCloser: any; if (isRoomClosedByUserParams(params)) { const { user } = params; this.logger.debug(`Closing by user ${user?._id}`); @@ -261,7 +260,6 @@ class LivechatClass { _id: user?._id || '', username: user?.username, }; - chatCloser = user; } else if (isRoomClosedByVisitorParams(params)) { const { visitor } = params; this.logger.debug(`Closing by visitor ${params.visitor._id}`); @@ -270,7 +268,6 @@ class LivechatClass { _id: visitor._id, username: visitor.username, }; - chatCloser = visitor; } else { throw new Error('Error: Please provide details of the user or visitor who closed the room'); } @@ -296,10 +293,6 @@ class LivechatClass { this.logger.debug(`DB updated for room ${room._id}`); - const transcriptRequested = - !!transcriptRequest || (!settings.get('Livechat_enable_transcript') && settings.get('Livechat_transcript_send_always')); - - // Retrieve the closed room const newRoom = await LivechatRooms.findOneById(rid); if (!newRoom) { @@ -307,24 +300,20 @@ class LivechatClass { } this.logger.debug(`Sending closing message to room ${room._id}`); - await sendMessage( - chatCloser, - { - t: 'livechat-close', - msg: comment, - groupable: false, - transcriptRequested, - ...(isRoomClosedByVisitorParams(params) && { token: chatCloser.token }), - }, - newRoom, - ); + + const transcriptRequested = + !!transcriptRequest || (!settings.get('Livechat_enable_transcript') && settings.get('Livechat_transcript_send_always')); + + await Message.saveSystemMessageAndNotifyUser('livechat-close', rid, comment ?? '', closeData.closedBy, { + groupable: false, + transcriptRequested, + ...(isRoomClosedByVisitorParams(params) && { token: params.visitor.token }), + }); if (settings.get('Livechat_enable_transcript') && !settings.get('Livechat_transcript_send_always')) { await Message.saveSystemMessage('command', rid, 'promptTranscript', closeData.closedBy); } - this.logger.debug(`Running callbacks for room ${newRoom._id}`); - process.nextTick(() => { /** * @deprecated the `AppEvents.ILivechatRoomClosedHandler` event will be removed @@ -878,7 +867,7 @@ class LivechatClass { return Messages.findVisibleByRoomIdNotContainingTypes(rid, ignoredMessageTypes, { sort: { ts: 1 }, - }).toArray(); + }); } async archiveDepartment(_id: string) { @@ -1254,31 +1243,20 @@ class LivechatClass { const scopeData = scope || (nextDepartment ? 'department' : 'agent'); this.logger.info(`Storing new chat transfer of ${room._id} [Transfered by: ${_id} to ${scopeData}]`); - await sendMessage( - transferredBy, - { - t: 'livechat_transfer_history', - rid: room._id, + const transferMessage = { + ...(transferData.transferredBy.userType === 'visitor' && { token: room.v.token }), + transferData: { + transferredBy, ts: new Date(), - msg: '', - u: { - _id, - username, - }, - groupable: false, - ...(transferData.transferredBy.userType === 'visitor' && { token: room.v.token }), - transferData: { - transferredBy, - ts: new Date(), - scope: scopeData, - comment, - ...(previousDepartment && { previousDepartment }), - ...(nextDepartment && { nextDepartment }), - ...(transferredTo && { transferredTo }), - }, + scope: scopeData, + comment, + ...(previousDepartment && { previousDepartment }), + ...(nextDepartment && { nextDepartment }), + ...(transferredTo && { transferredTo }), }, - room, - ); + }; + + await Message.saveSystemMessageAndNotifyUser('livechat_transfer_history', room._id, '', { _id, username }, transferMessage); } async saveGuest(guestData: Pick & { email?: string; phone?: string }, userId: string) { diff --git a/apps/meteor/app/livechat/server/lib/QueueManager.ts b/apps/meteor/app/livechat/server/lib/QueueManager.ts index 5ae03e0ee03b..e1ea79d84163 100644 --- a/apps/meteor/app/livechat/server/lib/QueueManager.ts +++ b/apps/meteor/app/livechat/server/lib/QueueManager.ts @@ -15,6 +15,7 @@ import { Random } from '@rocket.chat/random'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; +import { dispatchInquiryPosition } from '../../../../ee/app/livechat-enterprise/server/lib/Helper'; import { callbacks } from '../../../../lib/callbacks'; import { sendNotification } from '../../../lib/server'; import { @@ -27,6 +28,7 @@ import { i18n } from '../../../utils/lib/i18n'; import { createLivechatRoom, createLivechatInquiry, allowAgentSkipQueue } from './Helper'; import { Livechat } from './LivechatTyped'; import { RoutingManager } from './RoutingManager'; +import { getInquirySortMechanismSetting } from './settings'; const logger = new Logger('QueueManager'); @@ -221,7 +223,7 @@ export class QueueManager { const name = (roomInfo?.fname as string) || guest.name || guest.username; - const room = await createLivechatRoom(rid, name, guest, roomInfo, { + const room = await createLivechatRoom(rid, name, { ...guest, ...(department && { department }) }, roomInfo, { ...extraData, ...(Boolean(customFields) && { customFields }), }); @@ -259,6 +261,18 @@ export class QueueManager { throw new Error('room-not-found'); } + if (!newRoom.servedBy && settings.get('Omnichannel_calculate_dispatch_service_queue_statistics')) { + const [inq] = await LivechatInquiry.getCurrentSortedQueueAsync({ + inquiryId: inquiry._id, + department, + queueSortBy: getInquirySortMechanismSetting(), + }); + + if (inq) { + void dispatchInquiryPosition(inq); + } + } + return newRoom; } diff --git a/apps/meteor/app/livechat/server/methods/addAgent.ts b/apps/meteor/app/livechat/server/methods/addAgent.ts index 6160db590ece..0551e985e18e 100644 --- a/apps/meteor/app/livechat/server/methods/addAgent.ts +++ b/apps/meteor/app/livechat/server/methods/addAgent.ts @@ -1,12 +1,12 @@ import type { IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:addAgent'(username: string): Promise; diff --git a/apps/meteor/app/livechat/server/methods/addManager.ts b/apps/meteor/app/livechat/server/methods/addManager.ts index 347c4f07d63f..a954d8111773 100644 --- a/apps/meteor/app/livechat/server/methods/addManager.ts +++ b/apps/meteor/app/livechat/server/methods/addManager.ts @@ -1,12 +1,12 @@ import type { IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:addManager'(username: string): Promise; diff --git a/apps/meteor/app/livechat/server/methods/changeLivechatStatus.ts b/apps/meteor/app/livechat/server/methods/changeLivechatStatus.ts index 8ccfcd5ec468..f45588cad6d3 100644 --- a/apps/meteor/app/livechat/server/methods/changeLivechatStatus.ts +++ b/apps/meteor/app/livechat/server/methods/changeLivechatStatus.ts @@ -1,13 +1,13 @@ import { ILivechatAgentStatus } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Livechat as LivechatTS } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:changeLivechatStatus'(params?: { status?: ILivechatAgentStatus; agentId?: string }): unknown; diff --git a/apps/meteor/app/livechat/server/methods/closeRoom.ts b/apps/meteor/app/livechat/server/methods/closeRoom.ts index 5fdf9e7d504f..19c8b2709389 100644 --- a/apps/meteor/app/livechat/server/methods/closeRoom.ts +++ b/apps/meteor/app/livechat/server/methods/closeRoom.ts @@ -1,6 +1,6 @@ import type { IOmnichannelRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users, LivechatRooms, Subscriptions as SubscriptionRaw } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; @@ -35,7 +35,7 @@ type LivechatCloseRoomOptions = Omit }; }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:closeRoom'(roomId: string, comment?: string, options?: CloseRoomOptions): void; diff --git a/apps/meteor/app/livechat/server/methods/discardTranscript.ts b/apps/meteor/app/livechat/server/methods/discardTranscript.ts index d46c8ffea35f..3265aa9c54d2 100644 --- a/apps/meteor/app/livechat/server/methods/discardTranscript.ts +++ b/apps/meteor/app/livechat/server/methods/discardTranscript.ts @@ -1,12 +1,12 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatRooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:discardTranscript'(rid: string): boolean; diff --git a/apps/meteor/app/livechat/server/methods/getAgentData.ts b/apps/meteor/app/livechat/server/methods/getAgentData.ts index d32d24d7f7c1..5fe58560806e 100644 --- a/apps/meteor/app/livechat/server/methods/getAgentData.ts +++ b/apps/meteor/app/livechat/server/methods/getAgentData.ts @@ -1,13 +1,13 @@ import type { ILivechatAgent } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatVisitors, LivechatRooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { settings } from '../../../settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:getAgentData'(params: { diff --git a/apps/meteor/app/livechat/server/methods/getAgentOverviewData.ts b/apps/meteor/app/livechat/server/methods/getAgentOverviewData.ts index b5ea8dafe92c..819bac03c5b4 100644 --- a/apps/meteor/app/livechat/server/methods/getAgentOverviewData.ts +++ b/apps/meteor/app/livechat/server/methods/getAgentOverviewData.ts @@ -1,13 +1,13 @@ import type { ConversationData } from '@rocket.chat/core-services'; import { OmnichannelAnalytics } from '@rocket.chat/core-services'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:getAgentOverviewData'(options: { chartOptions: { name: string } }): ConversationData | void; diff --git a/apps/meteor/app/livechat/server/methods/getAnalyticsChartData.ts b/apps/meteor/app/livechat/server/methods/getAnalyticsChartData.ts index 85c8e033b8f5..2ff682c1c39c 100644 --- a/apps/meteor/app/livechat/server/methods/getAnalyticsChartData.ts +++ b/apps/meteor/app/livechat/server/methods/getAnalyticsChartData.ts @@ -1,12 +1,12 @@ import type { ChartDataResult } from '@rocket.chat/core-services'; import { OmnichannelAnalytics } from '@rocket.chat/core-services'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:getAnalyticsChartData'(options: { chartOptions: { name: string } }): ChartDataResult | void; diff --git a/apps/meteor/app/livechat/server/methods/getAnalyticsOverviewData.ts b/apps/meteor/app/livechat/server/methods/getAnalyticsOverviewData.ts index c9bb3d163457..9f56cfa57069 100644 --- a/apps/meteor/app/livechat/server/methods/getAnalyticsOverviewData.ts +++ b/apps/meteor/app/livechat/server/methods/getAnalyticsOverviewData.ts @@ -1,14 +1,14 @@ import type { AnalyticsOverviewDataResult } from '@rocket.chat/core-services'; import { OmnichannelAnalytics } from '@rocket.chat/core-services'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { settings } from '../../../settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:getAnalyticsOverviewData'(options: { analyticsOptions: { name: string } }): AnalyticsOverviewDataResult[] | void; diff --git a/apps/meteor/app/livechat/server/methods/getCustomFields.ts b/apps/meteor/app/livechat/server/methods/getCustomFields.ts index ec0ac35d6c21..36dca08f0859 100644 --- a/apps/meteor/app/livechat/server/methods/getCustomFields.ts +++ b/apps/meteor/app/livechat/server/methods/getCustomFields.ts @@ -1,11 +1,11 @@ import type { ILivechatCustomField } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatCustomField } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:getCustomFields'(): ILivechatCustomField[]; diff --git a/apps/meteor/app/livechat/server/methods/getDepartmentForwardRestrictions.ts b/apps/meteor/app/livechat/server/methods/getDepartmentForwardRestrictions.ts index b26d9706a8cd..2b891514d03e 100644 --- a/apps/meteor/app/livechat/server/methods/getDepartmentForwardRestrictions.ts +++ b/apps/meteor/app/livechat/server/methods/getDepartmentForwardRestrictions.ts @@ -1,10 +1,10 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { callbacks } from '../../../../lib/callbacks'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:getDepartmentForwardRestrictions'(departmentId: string): unknown; diff --git a/apps/meteor/app/livechat/server/methods/getFirstRoomMessage.ts b/apps/meteor/app/livechat/server/methods/getFirstRoomMessage.ts index 197898e8d2b2..d8accf7f84f5 100644 --- a/apps/meteor/app/livechat/server/methods/getFirstRoomMessage.ts +++ b/apps/meteor/app/livechat/server/methods/getFirstRoomMessage.ts @@ -1,12 +1,12 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatRooms, Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:getFirstRoomMessage'(params: { rid: string }): unknown; diff --git a/apps/meteor/app/livechat/server/methods/getNextAgent.ts b/apps/meteor/app/livechat/server/methods/getNextAgent.ts index 53b8441cad2e..179f1f95dedf 100644 --- a/apps/meteor/app/livechat/server/methods/getNextAgent.ts +++ b/apps/meteor/app/livechat/server/methods/getNextAgent.ts @@ -1,6 +1,6 @@ import type { ILivechatAgent } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatRooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -9,7 +9,7 @@ import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarn import { settings } from '../../../settings/server'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:getNextAgent'(params: { diff --git a/apps/meteor/app/livechat/server/methods/getRoutingConfig.ts b/apps/meteor/app/livechat/server/methods/getRoutingConfig.ts index 364853a74511..02b2840f41cc 100644 --- a/apps/meteor/app/livechat/server/methods/getRoutingConfig.ts +++ b/apps/meteor/app/livechat/server/methods/getRoutingConfig.ts @@ -1,10 +1,10 @@ import type { OmichannelRoutingConfig } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { RoutingManager } from '../lib/RoutingManager'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:getRoutingConfig'(): OmichannelRoutingConfig | undefined; diff --git a/apps/meteor/app/livechat/server/methods/getTagsList.ts b/apps/meteor/app/livechat/server/methods/getTagsList.ts index e9e467d243c8..b3efe5d026a3 100644 --- a/apps/meteor/app/livechat/server/methods/getTagsList.ts +++ b/apps/meteor/app/livechat/server/methods/getTagsList.ts @@ -1,11 +1,11 @@ import type { ILivechatTag } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { callbacks } from '../../../../lib/callbacks'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:getTagsList'(): ILivechatTag[]; diff --git a/apps/meteor/app/livechat/server/methods/loadHistory.ts b/apps/meteor/app/livechat/server/methods/loadHistory.ts index 373ede1a3610..1004f9dd604d 100644 --- a/apps/meteor/app/livechat/server/methods/loadHistory.ts +++ b/apps/meteor/app/livechat/server/methods/loadHistory.ts @@ -1,13 +1,13 @@ import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatVisitors, LivechatRooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check, Match } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { loadMessageHistory } from '../../../lib/server/functions/loadMessageHistory'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:loadHistory'(params: { token: string; rid: string; end?: Date; limit?: number; ls: Date }): diff --git a/apps/meteor/app/livechat/server/methods/loginByToken.ts b/apps/meteor/app/livechat/server/methods/loginByToken.ts index cae23e6d16f7..3b82413e038a 100644 --- a/apps/meteor/app/livechat/server/methods/loginByToken.ts +++ b/apps/meteor/app/livechat/server/methods/loginByToken.ts @@ -1,10 +1,10 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatVisitors } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:loginByToken'(token: string): { _id: string } | undefined; diff --git a/apps/meteor/app/livechat/server/methods/pageVisited.ts b/apps/meteor/app/livechat/server/methods/pageVisited.ts index c226a91de430..7c0864f27b74 100644 --- a/apps/meteor/app/livechat/server/methods/pageVisited.ts +++ b/apps/meteor/app/livechat/server/methods/pageVisited.ts @@ -1,10 +1,10 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:pageVisited'(token: string, room: string, pageInfo: { title: string; location: { href: string }; change: string }): void; diff --git a/apps/meteor/app/livechat/server/methods/registerGuest.ts b/apps/meteor/app/livechat/server/methods/registerGuest.ts index 4a531d0c89e5..c6a119d91591 100644 --- a/apps/meteor/app/livechat/server/methods/registerGuest.ts +++ b/apps/meteor/app/livechat/server/methods/registerGuest.ts @@ -1,13 +1,13 @@ import type { ILivechatVisitor, IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatVisitors, Messages, LivechatRooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { callbacks } from '../../../../lib/callbacks'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Livechat as LivechatTyped } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:registerGuest'({ diff --git a/apps/meteor/app/livechat/server/methods/removeAgent.ts b/apps/meteor/app/livechat/server/methods/removeAgent.ts index 643ae696ada0..ebb57383784f 100644 --- a/apps/meteor/app/livechat/server/methods/removeAgent.ts +++ b/apps/meteor/app/livechat/server/methods/removeAgent.ts @@ -1,11 +1,11 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:removeAgent'(username: string): boolean; diff --git a/apps/meteor/app/livechat/server/methods/removeAllClosedRooms.ts b/apps/meteor/app/livechat/server/methods/removeAllClosedRooms.ts index 9be699ae05ed..ba3939bb8573 100644 --- a/apps/meteor/app/livechat/server/methods/removeAllClosedRooms.ts +++ b/apps/meteor/app/livechat/server/methods/removeAllClosedRooms.ts @@ -1,14 +1,14 @@ import type { IOmnichannelRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Logger } from '@rocket.chat/logger'; import { LivechatRooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { callbacks } from '../../../../lib/callbacks'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:removeAllClosedRooms'(departmentIds?: string[]): Promise; diff --git a/apps/meteor/app/livechat/server/methods/removeCustomField.ts b/apps/meteor/app/livechat/server/methods/removeCustomField.ts index 1d3e7c817738..ad02df582337 100644 --- a/apps/meteor/app/livechat/server/methods/removeCustomField.ts +++ b/apps/meteor/app/livechat/server/methods/removeCustomField.ts @@ -1,12 +1,12 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatCustomField } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import type { DeleteResult } from 'mongodb'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:removeCustomField'(_id: string): DeleteResult; diff --git a/apps/meteor/app/livechat/server/methods/removeDepartment.ts b/apps/meteor/app/livechat/server/methods/removeDepartment.ts index 3c46f3a424d6..6e4b11c836f6 100644 --- a/apps/meteor/app/livechat/server/methods/removeDepartment.ts +++ b/apps/meteor/app/livechat/server/methods/removeDepartment.ts @@ -1,4 +1,4 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import type { DeleteResult } from 'mongodb'; @@ -7,7 +7,7 @@ import { hasPermissionAsync } from '../../../authorization/server/functions/hasP import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { DepartmentHelper } from '../lib/Departments'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:removeDepartment'(_id: string): DeleteResult; diff --git a/apps/meteor/app/livechat/server/methods/removeManager.ts b/apps/meteor/app/livechat/server/methods/removeManager.ts index 4c003ff922bc..85a5f3076c8c 100644 --- a/apps/meteor/app/livechat/server/methods/removeManager.ts +++ b/apps/meteor/app/livechat/server/methods/removeManager.ts @@ -1,11 +1,11 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:removeManager'(username: string): boolean; diff --git a/apps/meteor/app/livechat/server/methods/removeRoom.ts b/apps/meteor/app/livechat/server/methods/removeRoom.ts index db3fcf2c849f..751d51d4f019 100644 --- a/apps/meteor/app/livechat/server/methods/removeRoom.ts +++ b/apps/meteor/app/livechat/server/methods/removeRoom.ts @@ -1,12 +1,12 @@ import type { IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatRooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:removeRoom'(rid: IRoom['_id']): void; diff --git a/apps/meteor/app/livechat/server/methods/removeTrigger.ts b/apps/meteor/app/livechat/server/methods/removeTrigger.ts index 69f3a4a2d80c..41d79d725176 100644 --- a/apps/meteor/app/livechat/server/methods/removeTrigger.ts +++ b/apps/meteor/app/livechat/server/methods/removeTrigger.ts @@ -1,12 +1,12 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatTrigger } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:removeTrigger'(triggerId: string): boolean; diff --git a/apps/meteor/app/livechat/server/methods/requestTranscript.ts b/apps/meteor/app/livechat/server/methods/requestTranscript.ts index 5abf6a3b72e3..80cb3a9625fe 100644 --- a/apps/meteor/app/livechat/server/methods/requestTranscript.ts +++ b/apps/meteor/app/livechat/server/methods/requestTranscript.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -7,7 +7,7 @@ import { hasPermissionAsync } from '../../../authorization/server/functions/hasP import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:requestTranscript'(rid: string, email: string, subject: string): Promise; diff --git a/apps/meteor/app/livechat/server/methods/returnAsInquiry.ts b/apps/meteor/app/livechat/server/methods/returnAsInquiry.ts index 38b58b9d2d42..bf76519a5afb 100644 --- a/apps/meteor/app/livechat/server/methods/returnAsInquiry.ts +++ b/apps/meteor/app/livechat/server/methods/returnAsInquiry.ts @@ -1,13 +1,13 @@ import { Omnichannel } from '@rocket.chat/core-services'; import type { ILivechatDepartment, IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatRooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:returnAsInquiry'(rid: IRoom['_id'], departmentID?: ILivechatDepartment['_id']): boolean; diff --git a/apps/meteor/app/livechat/server/methods/saveAgentInfo.ts b/apps/meteor/app/livechat/server/methods/saveAgentInfo.ts index 90d9815d4cf1..fe542b67156e 100644 --- a/apps/meteor/app/livechat/server/methods/saveAgentInfo.ts +++ b/apps/meteor/app/livechat/server/methods/saveAgentInfo.ts @@ -1,12 +1,12 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { hasRoleAsync } from '../../../authorization/server/functions/hasRole'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveAgentInfo'(_id: string, agentData: Record, agentDepartments: string[]): unknown; diff --git a/apps/meteor/app/livechat/server/methods/saveAppearance.ts b/apps/meteor/app/livechat/server/methods/saveAppearance.ts index cac5d34264d2..619dae147708 100644 --- a/apps/meteor/app/livechat/server/methods/saveAppearance.ts +++ b/apps/meteor/app/livechat/server/methods/saveAppearance.ts @@ -1,12 +1,12 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Settings } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { notifyOnSettingChangedById } from '../../../lib/server/lib/notifyListener'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveAppearance'(settings: { _id: string; value: any }[]): Promise; diff --git a/apps/meteor/app/livechat/server/methods/saveBusinessHour.ts b/apps/meteor/app/livechat/server/methods/saveBusinessHour.ts index 2e3e64365649..9bf32697fae9 100644 --- a/apps/meteor/app/livechat/server/methods/saveBusinessHour.ts +++ b/apps/meteor/app/livechat/server/methods/saveBusinessHour.ts @@ -1,10 +1,10 @@ import type { ILivechatBusinessHour } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { businessHourManager } from '../business-hour'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveBusinessHour'(businessHourData: ILivechatBusinessHour): void; diff --git a/apps/meteor/app/livechat/server/methods/saveCustomField.ts b/apps/meteor/app/livechat/server/methods/saveCustomField.ts index 8a0435560dd5..c83148ba8d29 100644 --- a/apps/meteor/app/livechat/server/methods/saveCustomField.ts +++ b/apps/meteor/app/livechat/server/methods/saveCustomField.ts @@ -1,12 +1,12 @@ import type { ILivechatCustomField } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatCustomField } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveCustomField'( diff --git a/apps/meteor/app/livechat/server/methods/saveDepartment.ts b/apps/meteor/app/livechat/server/methods/saveDepartment.ts index 971c2189f9a7..b4833523ab3f 100644 --- a/apps/meteor/app/livechat/server/methods/saveDepartment.ts +++ b/apps/meteor/app/livechat/server/methods/saveDepartment.ts @@ -1,11 +1,11 @@ import type { ILivechatDepartment } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveDepartment': ( diff --git a/apps/meteor/app/livechat/server/methods/saveDepartmentAgents.ts b/apps/meteor/app/livechat/server/methods/saveDepartmentAgents.ts index 73a471869926..42ee521713c0 100644 --- a/apps/meteor/app/livechat/server/methods/saveDepartmentAgents.ts +++ b/apps/meteor/app/livechat/server/methods/saveDepartmentAgents.ts @@ -1,12 +1,12 @@ import type { ILivechatDepartmentAgents } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveDepartmentAgents'( diff --git a/apps/meteor/app/livechat/server/methods/saveInfo.ts b/apps/meteor/app/livechat/server/methods/saveInfo.ts index a057706fdc23..bb22c127effa 100644 --- a/apps/meteor/app/livechat/server/methods/saveInfo.ts +++ b/apps/meteor/app/livechat/server/methods/saveInfo.ts @@ -1,6 +1,6 @@ import { isOmnichannelRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatRooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -9,7 +9,7 @@ import { hasPermissionAsync } from '../../../authorization/server/functions/hasP import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Livechat as LivechatTyped } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveInfo'( diff --git a/apps/meteor/app/livechat/server/methods/saveIntegration.ts b/apps/meteor/app/livechat/server/methods/saveIntegration.ts index de7461d08e10..0a4d82cfbcc1 100644 --- a/apps/meteor/app/livechat/server/methods/saveIntegration.ts +++ b/apps/meteor/app/livechat/server/methods/saveIntegration.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Settings } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { trim } from '../../../../lib/utils/stringUtils'; @@ -7,7 +7,7 @@ import { hasPermissionAsync } from '../../../authorization/server/functions/hasP import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { notifyOnSettingChangedById } from '../../../lib/server/lib/notifyListener'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveIntegration'(values: Record): void; diff --git a/apps/meteor/app/livechat/server/methods/saveSurveyFeedback.ts b/apps/meteor/app/livechat/server/methods/saveSurveyFeedback.ts index 48dea8175ea8..36fc3f775b9f 100644 --- a/apps/meteor/app/livechat/server/methods/saveSurveyFeedback.ts +++ b/apps/meteor/app/livechat/server/methods/saveSurveyFeedback.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatRooms, LivechatVisitors } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import type { UpdateResult } from 'mongodb'; @@ -7,7 +7,7 @@ import _ from 'underscore'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveSurveyFeedback'( diff --git a/apps/meteor/app/livechat/server/methods/saveTrigger.ts b/apps/meteor/app/livechat/server/methods/saveTrigger.ts index 37f78d081203..850dead9a589 100644 --- a/apps/meteor/app/livechat/server/methods/saveTrigger.ts +++ b/apps/meteor/app/livechat/server/methods/saveTrigger.ts @@ -1,13 +1,13 @@ import type { ILivechatTrigger } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatTrigger } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveTrigger'(trigger: ILivechatTrigger): boolean; diff --git a/apps/meteor/app/livechat/server/methods/searchAgent.ts b/apps/meteor/app/livechat/server/methods/searchAgent.ts index 2a69679f2a07..932eb51e89d6 100644 --- a/apps/meteor/app/livechat/server/methods/searchAgent.ts +++ b/apps/meteor/app/livechat/server/methods/searchAgent.ts @@ -1,12 +1,12 @@ import type { IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:searchAgent'(username: string): { _id: string; username?: string } | undefined; diff --git a/apps/meteor/app/livechat/server/methods/sendFileLivechatMessage.ts b/apps/meteor/app/livechat/server/methods/sendFileLivechatMessage.ts index 15577abd76e3..0268207b2f6c 100644 --- a/apps/meteor/app/livechat/server/methods/sendFileLivechatMessage.ts +++ b/apps/meteor/app/livechat/server/methods/sendFileLivechatMessage.ts @@ -5,9 +5,9 @@ import type { VideoAttachmentProps, IUpload, } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatVisitors, LivechatRooms } from '@rocket.chat/models'; import { Random } from '@rocket.chat/random'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -21,7 +21,7 @@ interface ISendFileLivechatMessage { msgData?: { avatar?: string; emoji?: string; alias?: string; groupable?: boolean; msg?: string }; } -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { sendFileLivechatMessage( diff --git a/apps/meteor/app/livechat/server/methods/sendMessageLivechat.ts b/apps/meteor/app/livechat/server/methods/sendMessageLivechat.ts index ad16dea23e4f..6fac80397906 100644 --- a/apps/meteor/app/livechat/server/methods/sendMessageLivechat.ts +++ b/apps/meteor/app/livechat/server/methods/sendMessageLivechat.ts @@ -1,6 +1,6 @@ import { OmnichannelSourceType } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatVisitors } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -18,7 +18,7 @@ interface ISendMessageLivechat { agent?: ILivechatMessageAgent; } -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { sendMessageLivechat(message: ILivechatMessage, agent: ILivechatMessageAgent): boolean; diff --git a/apps/meteor/app/livechat/server/methods/sendOfflineMessage.ts b/apps/meteor/app/livechat/server/methods/sendOfflineMessage.ts index c3b5537f31be..b620aa434100 100644 --- a/apps/meteor/app/livechat/server/methods/sendOfflineMessage.ts +++ b/apps/meteor/app/livechat/server/methods/sendOfflineMessage.ts @@ -1,4 +1,4 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; @@ -6,7 +6,7 @@ import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:sendOfflineMessage'(data: { name: string; email: string; message: string }): Promise; diff --git a/apps/meteor/app/livechat/server/methods/sendTranscript.ts b/apps/meteor/app/livechat/server/methods/sendTranscript.ts index 366a73c8bb0a..4891f579926a 100644 --- a/apps/meteor/app/livechat/server/methods/sendTranscript.ts +++ b/apps/meteor/app/livechat/server/methods/sendTranscript.ts @@ -1,6 +1,6 @@ import { Omnichannel } from '@rocket.chat/core-services'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatRooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -8,7 +8,7 @@ import { hasPermissionAsync } from '../../../authorization/server/functions/hasP import { RateLimiter } from '../../../lib/server'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:sendTranscript'(token: string, rid: string, email: string, subject: string): boolean; diff --git a/apps/meteor/app/livechat/server/methods/setCustomField.ts b/apps/meteor/app/livechat/server/methods/setCustomField.ts index fb07c2b29a4e..6d3a2384cdd7 100644 --- a/apps/meteor/app/livechat/server/methods/setCustomField.ts +++ b/apps/meteor/app/livechat/server/methods/setCustomField.ts @@ -1,11 +1,11 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatVisitors, LivechatCustomField, LivechatRooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import type { UpdateResult, Document } from 'mongodb'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:setCustomField'(token: string, key: string, value: string, overwrite?: boolean): Promise; diff --git a/apps/meteor/app/livechat/server/methods/setDepartmentForVisitor.ts b/apps/meteor/app/livechat/server/methods/setDepartmentForVisitor.ts index a14933ed8d47..385f2d989015 100644 --- a/apps/meteor/app/livechat/server/methods/setDepartmentForVisitor.ts +++ b/apps/meteor/app/livechat/server/methods/setDepartmentForVisitor.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatVisitors, Messages, LivechatRooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -7,7 +7,7 @@ import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarn import { normalizeTransferredByData } from '../lib/Helper'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:setDepartmentForVisitor'({ diff --git a/apps/meteor/app/livechat/server/methods/setUpConnection.ts b/apps/meteor/app/livechat/server/methods/setUpConnection.ts index 788b2384c4d3..21ce09acaa22 100644 --- a/apps/meteor/app/livechat/server/methods/setUpConnection.ts +++ b/apps/meteor/app/livechat/server/methods/setUpConnection.ts @@ -1,11 +1,11 @@ import { UserStatus } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:setUpConnection'(data: { token: string }): void; diff --git a/apps/meteor/app/livechat/server/methods/takeInquiry.ts b/apps/meteor/app/livechat/server/methods/takeInquiry.ts index 30a5dabb5717..733cbd995208 100644 --- a/apps/meteor/app/livechat/server/methods/takeInquiry.ts +++ b/apps/meteor/app/livechat/server/methods/takeInquiry.ts @@ -1,13 +1,13 @@ import { Omnichannel } from '@rocket.chat/core-services'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatInquiry, LivechatRooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { settings } from '../../../settings/server'; import { RoutingManager } from '../lib/RoutingManager'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:takeInquiry'( diff --git a/apps/meteor/app/livechat/server/methods/transfer.ts b/apps/meteor/app/livechat/server/methods/transfer.ts index 64a32c24638c..e0516fa27981 100644 --- a/apps/meteor/app/livechat/server/methods/transfer.ts +++ b/apps/meteor/app/livechat/server/methods/transfer.ts @@ -1,7 +1,7 @@ import { Omnichannel } from '@rocket.chat/core-services'; import type { IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatVisitors, LivechatRooms, Subscriptions, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -10,7 +10,7 @@ import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarn import { normalizeTransferredByData } from '../lib/Helper'; import { Livechat } from '../lib/LivechatTyped'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:transfer'(transferData: { diff --git a/apps/meteor/app/livechat/server/methods/webhookTest.ts b/apps/meteor/app/livechat/server/methods/webhookTest.ts index 12a4711d75b4..68800e1a0616 100644 --- a/apps/meteor/app/livechat/server/methods/webhookTest.ts +++ b/apps/meteor/app/livechat/server/methods/webhookTest.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { serverFetch as fetch } from '@rocket.chat/server-fetch'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { SystemLogger } from '../../../../server/lib/logger/system'; @@ -14,7 +14,7 @@ const postCatchError = async function (url: string, options?: Record; diff --git a/apps/meteor/app/livechat/server/sendMessageBySMS.ts b/apps/meteor/app/livechat/server/sendMessageBySMS.ts index 2557fcdeb83d..c7f88646158b 100644 --- a/apps/meteor/app/livechat/server/sendMessageBySMS.ts +++ b/apps/meteor/app/livechat/server/sendMessageBySMS.ts @@ -1,5 +1,5 @@ import { OmnichannelIntegration } from '@rocket.chat/core-services'; -import { isEditedMessage, isOmnichannelRoom } from '@rocket.chat/core-typings'; +import { isEditedMessage } from '@rocket.chat/core-typings'; import { LivechatVisitors } from '@rocket.chat/models'; import { callbacks } from '../../../lib/callbacks'; @@ -8,8 +8,8 @@ import { normalizeMessageFileUpload } from '../../utils/server/functions/normali import { callbackLogger } from './lib/logger'; callbacks.add( - 'afterSaveMessage', - async (message, room) => { + 'afterOmnichannelSaveMessage', + async (message, { room }) => { // skips this callback if the message was edited if (isEditedMessage(message)) { return message; @@ -20,7 +20,7 @@ callbacks.add( } // only send the sms by SMS if it is a livechat room with SMS set to true - if (!(isOmnichannelRoom(room) && room.sms && room.v && room.v.token)) { + if (!(room.sms && room.v && room.v.token)) { return message; } diff --git a/apps/meteor/app/mail-messages/server/methods/sendMail.ts b/apps/meteor/app/mail-messages/server/methods/sendMail.ts index 158d271d5379..cc6469544df8 100644 --- a/apps/meteor/app/mail-messages/server/methods/sendMail.ts +++ b/apps/meteor/app/mail-messages/server/methods/sendMail.ts @@ -1,11 +1,11 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Mailer } from '../lib/Mailer'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'Mailer.sendMail'(from: string, subject: string, body: string, dryrun?: boolean, query?: string): any; diff --git a/apps/meteor/app/mail-messages/server/methods/unsubscribe.ts b/apps/meteor/app/mail-messages/server/methods/unsubscribe.ts index 24243cc98c2d..e52677b5ee1a 100644 --- a/apps/meteor/app/mail-messages/server/methods/unsubscribe.ts +++ b/apps/meteor/app/mail-messages/server/methods/unsubscribe.ts @@ -1,11 +1,11 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; import { Mailer } from '../lib/Mailer'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'Mailer:unsubscribe'(_id: string, createdAt: string): Promise; diff --git a/apps/meteor/app/mentions/server/methods/getUserMentionsByChannel.ts b/apps/meteor/app/mentions/server/methods/getUserMentionsByChannel.ts index 948187d089ae..6d9a16539704 100644 --- a/apps/meteor/app/mentions/server/methods/getUserMentionsByChannel.ts +++ b/apps/meteor/app/mentions/server/methods/getUserMentionsByChannel.ts @@ -1,12 +1,12 @@ import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Users, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomAsync } from '../../../authorization/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getUserMentionsByChannel(params: { roomId: string; options: { limit: number; sort: { ts: -1 | 1 } } }): IMessage[]; diff --git a/apps/meteor/app/message-mark-as-unread/server/unreadMessages.ts b/apps/meteor/app/message-mark-as-unread/server/unreadMessages.ts index 2ba0224a0c70..6ef1f5567a20 100644 --- a/apps/meteor/app/message-mark-as-unread/server/unreadMessages.ts +++ b/apps/meteor/app/message-mark-as-unread/server/unreadMessages.ts @@ -1,11 +1,11 @@ import type { IMessage, IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Subscriptions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import logger from './logger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { unreadMessages(firstUnreadMessage?: IMessage, room?: IRoom['_id']): void; diff --git a/apps/meteor/app/message-pin/server/pinMessage.ts b/apps/meteor/app/message-pin/server/pinMessage.ts index b0eab3f929d6..9f3dd44cc16d 100644 --- a/apps/meteor/app/message-pin/server/pinMessage.ts +++ b/apps/meteor/app/message-pin/server/pinMessage.ts @@ -2,17 +2,16 @@ import { Apps, AppEvents } from '@rocket.chat/apps'; import { Message } from '@rocket.chat/core-services'; import { isQuoteAttachment, isRegisterUser } from '@rocket.chat/core-typings'; import type { IMessage, MessageAttachment, MessageQuoteAttachment } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Rooms, Subscriptions, Users, ReadReceipts } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { isTruthy } from '../../../lib/isTruthy'; -import { broadcastMessageFromData } from '../../../server/modules/watchers/lib/messages'; import { canAccessRoomAsync, roomAccessAttributes } from '../../authorization/server'; import { hasPermissionAsync } from '../../authorization/server/functions/hasPermission'; import { isTheLastMessage } from '../../lib/server/functions/isTheLastMessage'; -import { notifyOnRoomChangedById } from '../../lib/server/lib/notifyListener'; +import { notifyOnRoomChangedById, notifyOnMessageChange } from '../../lib/server/lib/notifyListener'; import { settings } from '../../settings/server'; import { getUserAvatarURL } from '../../utils/server/getUserAvatarURL'; @@ -36,7 +35,7 @@ const recursiveRemove = (msg: MessageAttachment, deep = 1) => { const shouldAdd = (attachments: MessageAttachment[], attachment: MessageQuoteAttachment) => !attachments.some((_attachment) => isQuoteAttachment(_attachment) && _attachment.message_link === attachment.message_link); -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { pinMessage(message: IMessage, pinnedAt?: Date): IMessage | null; @@ -135,7 +134,7 @@ Meteor.methods({ const pinMessageType = originalMessage.t === 'e2e' ? 'message_pinned_e2e' : 'message_pinned'; - const msgId = await Message.saveSystemMessage(pinMessageType, originalMessage.rid, '', me, { + return Message.saveSystemMessage(pinMessageType, originalMessage.rid, '', me, { attachments: [ { text: originalMessage.msg, @@ -146,8 +145,6 @@ Meteor.methods({ }, ], }); - - return Messages.findOneById(msgId); }, async unpinMessage(message) { check(message._id, String); @@ -227,7 +224,7 @@ Meteor.methods({ if (settings.get('Message_Read_Receipt_Store_Users')) { await ReadReceipts.setPinnedByMessageId(originalMessage._id, originalMessage.pinned); } - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: message._id, }); diff --git a/apps/meteor/app/message-star/server/starMessage.ts b/apps/meteor/app/message-star/server/starMessage.ts index 4529efb63f6f..36c67c1f4020 100644 --- a/apps/meteor/app/message-star/server/starMessage.ts +++ b/apps/meteor/app/message-star/server/starMessage.ts @@ -1,16 +1,15 @@ import { Apps, AppEvents } from '@rocket.chat/apps'; import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Subscriptions, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; -import { broadcastMessageFromData } from '../../../server/modules/watchers/lib/messages'; import { canAccessRoomAsync, roomAccessAttributes } from '../../authorization/server'; import { isTheLastMessage } from '../../lib/server/functions/isTheLastMessage'; -import { notifyOnRoomChangedById } from '../../lib/server/lib/notifyListener'; +import { notifyOnRoomChangedById, notifyOnMessageChange } from '../../lib/server/lib/notifyListener'; import { settings } from '../../settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { starMessage(message: Omit & { starred: boolean }): boolean; @@ -63,7 +62,7 @@ Meteor.methods({ await Messages.updateUserStarById(message._id, uid, message.starred); - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: message._id, }); diff --git a/apps/meteor/app/meteor-accounts-saml/server/lib/settings.ts b/apps/meteor/app/meteor-accounts-saml/server/lib/settings.ts index 5c16716720b0..bb9567260337 100644 --- a/apps/meteor/app/meteor-accounts-saml/server/lib/settings.ts +++ b/apps/meteor/app/meteor-accounts-saml/server/lib/settings.ts @@ -230,12 +230,10 @@ export const addSettings = async function (name: string): Promise { await this.add(`SAML_Custom_${name}_button_label_color`, '#FFFFFF', { type: 'string', i18nLabel: 'Accounts_OAuth_Custom_Button_Label_Color', - alert: 'OAuth_button_colors_alert', }); await this.add(`SAML_Custom_${name}_button_color`, '#1d74f5', { type: 'string', i18nLabel: 'Accounts_OAuth_Custom_Button_Color', - alert: 'OAuth_button_colors_alert', }); }); diff --git a/apps/meteor/app/meteor-accounts-saml/server/methods/addSamlService.ts b/apps/meteor/app/meteor-accounts-saml/server/methods/addSamlService.ts index f952ce3b3fe3..0b6b5a6c8f6e 100644 --- a/apps/meteor/app/meteor-accounts-saml/server/methods/addSamlService.ts +++ b/apps/meteor/app/meteor-accounts-saml/server/methods/addSamlService.ts @@ -1,9 +1,9 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { addSamlService } from '../lib/settings'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addSamlService(name: string): void; diff --git a/apps/meteor/app/meteor-accounts-saml/server/methods/samlLogout.ts b/apps/meteor/app/meteor-accounts-saml/server/methods/samlLogout.ts index 956426082d40..a7f9e87a93de 100644 --- a/apps/meteor/app/meteor-accounts-saml/server/methods/samlLogout.ts +++ b/apps/meteor/app/meteor-accounts-saml/server/methods/samlLogout.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import type { IServiceProviderOptions } from '../definition/IServiceProviderOptions'; @@ -25,7 +25,7 @@ function getSamlServiceProviderOptions(provider: string): IServiceProviderOption return providers.filter(samlProvider)[0]; } -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { samlLogout(provider: string): string | undefined; diff --git a/apps/meteor/app/models/client/models/Users.ts b/apps/meteor/app/models/client/models/Users.ts index 089486f3a20c..26d333cc8bb1 100644 --- a/apps/meteor/app/models/client/models/Users.ts +++ b/apps/meteor/app/models/client/models/Users.ts @@ -30,5 +30,13 @@ class UsersCollection extends Mongo.Collection { } } +Object.assign(Meteor.users, { + _connection: undefined, + findOneById: UsersCollection.prototype.findOneById, + isUserInRole: UsersCollection.prototype.isUserInRole, + findUsersInRoles: UsersCollection.prototype.findUsersInRoles, + remove: UsersCollection.prototype.remove, +}); + /** @deprecated */ -export const Users = new UsersCollection(); +export const Users = Meteor.users as UsersCollection; diff --git a/apps/meteor/app/notifications/server/lib/Notifications.ts b/apps/meteor/app/notifications/server/lib/Notifications.ts index ed4985777414..3ddb611d76bd 100644 --- a/apps/meteor/app/notifications/server/lib/Notifications.ts +++ b/apps/meteor/app/notifications/server/lib/Notifications.ts @@ -1,5 +1,5 @@ import { api } from '@rocket.chat/core-services'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { DDPCommon } from 'meteor/ddp-common'; import { Meteor } from 'meteor/meteor'; diff --git a/apps/meteor/app/notifications/server/lib/Presence.ts b/apps/meteor/app/notifications/server/lib/Presence.ts index 9955b687701f..17f35a9d39ff 100644 --- a/apps/meteor/app/notifications/server/lib/Presence.ts +++ b/apps/meteor/app/notifications/server/lib/Presence.ts @@ -1,6 +1,6 @@ import type { IUser } from '@rocket.chat/core-typings'; +import type { StreamerEvents } from '@rocket.chat/ddp-client'; import { Emitter } from '@rocket.chat/emitter'; -import type { StreamerEvents } from '@rocket.chat/ui-contexts'; import type { IPublication, IStreamerConstructor, Connection, IStreamer } from 'meteor/rocketchat:streamer'; type UserPresenceStreamProps = { diff --git a/apps/meteor/app/oauth2-server-config/server/admin/methods/addOAuthApp.ts b/apps/meteor/app/oauth2-server-config/server/admin/methods/addOAuthApp.ts index 4556a5be7d9f..3f41b1b01bea 100644 --- a/apps/meteor/app/oauth2-server-config/server/admin/methods/addOAuthApp.ts +++ b/apps/meteor/app/oauth2-server-config/server/admin/methods/addOAuthApp.ts @@ -1,12 +1,12 @@ import type { IOAuthApps } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import type { OauthAppsAddParams } from '@rocket.chat/rest-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../../lib/server/lib/deprecationWarningLogger'; import { addOAuthApp } from '../functions/addOAuthApp'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addOAuthApp(application: OauthAppsAddParams): IOAuthApps; diff --git a/apps/meteor/app/oauth2-server-config/server/admin/methods/deleteOAuthApp.ts b/apps/meteor/app/oauth2-server-config/server/admin/methods/deleteOAuthApp.ts index 0209f9d453b5..9c5cbf6fd9ae 100644 --- a/apps/meteor/app/oauth2-server-config/server/admin/methods/deleteOAuthApp.ts +++ b/apps/meteor/app/oauth2-server-config/server/admin/methods/deleteOAuthApp.ts @@ -1,11 +1,11 @@ import type { IOAuthApps } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { OAuthAccessTokens, OAuthApps, OAuthAuthCodes } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { deleteOAuthApp(applicationId: IOAuthApps['_id']): boolean; diff --git a/apps/meteor/app/oauth2-server-config/server/admin/methods/updateOAuthApp.ts b/apps/meteor/app/oauth2-server-config/server/admin/methods/updateOAuthApp.ts index 525d0fa2d124..f2daca1885c9 100644 --- a/apps/meteor/app/oauth2-server-config/server/admin/methods/updateOAuthApp.ts +++ b/apps/meteor/app/oauth2-server-config/server/admin/methods/updateOAuthApp.ts @@ -1,12 +1,12 @@ import type { IOAuthApps } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { OAuthApps, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../authorization/server/functions/hasPermission'; import { parseUriList } from '../functions/parseUriList'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { updateOAuthApp( diff --git a/apps/meteor/app/otr/server/methods/deleteOldOTRMessages.ts b/apps/meteor/app/otr/server/methods/deleteOldOTRMessages.ts index a994b19dd1a4..1b57c65b4bb7 100644 --- a/apps/meteor/app/otr/server/methods/deleteOldOTRMessages.ts +++ b/apps/meteor/app/otr/server/methods/deleteOldOTRMessages.ts @@ -1,9 +1,9 @@ import type { IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Subscriptions, ReadReceipts } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { deleteOldOTRMessages(roomId: IRoom['_id']): Promise; diff --git a/apps/meteor/app/otr/server/methods/sendSystemMessages.ts b/apps/meteor/app/otr/server/methods/sendSystemMessages.ts index a2abf0938b9e..13abbd7511af 100644 --- a/apps/meteor/app/otr/server/methods/sendSystemMessages.ts +++ b/apps/meteor/app/otr/server/methods/sendSystemMessages.ts @@ -1,7 +1,7 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { sendSystemMessages(rid: string, user: string | undefined, id: string): void; diff --git a/apps/meteor/app/otr/server/methods/updateOTRAck.ts b/apps/meteor/app/otr/server/methods/updateOTRAck.ts index a5a502ddf1a2..4fbd182e9d27 100644 --- a/apps/meteor/app/otr/server/methods/updateOTRAck.ts +++ b/apps/meteor/app/otr/server/methods/updateOTRAck.ts @@ -1,9 +1,9 @@ import { api } from '@rocket.chat/core-services'; import type { IOTRMessage } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { updateOTRAck({ message, ack }: { message: IOTRMessage; ack: string }): void; diff --git a/apps/meteor/app/push-notifications/server/methods/saveNotificationSettings.ts b/apps/meteor/app/push-notifications/server/methods/saveNotificationSettings.ts index a4376c709275..a86ded6f24e5 100644 --- a/apps/meteor/app/push-notifications/server/methods/saveNotificationSettings.ts +++ b/apps/meteor/app/push-notifications/server/methods/saveNotificationSettings.ts @@ -1,6 +1,6 @@ import type { ISubscription } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -9,7 +9,7 @@ import { getUserNotificationPreference } from '../../../utils/server/getUserNoti const saveAudioNotificationValue = (subId: ISubscription['_id'], value: string) => value === 'default' ? Subscriptions.clearAudioNotificationValueById(subId) : Subscriptions.updateAudioNotificationValueById(subId, value); -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { saveNotificationSettings( diff --git a/apps/meteor/app/push/server/methods.ts b/apps/meteor/app/push/server/methods.ts index 364a16cbdb5e..1f1e261eccae 100644 --- a/apps/meteor/app/push/server/methods.ts +++ b/apps/meteor/app/push/server/methods.ts @@ -1,7 +1,7 @@ import type { IAppsTokens } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { AppsTokens } from '@rocket.chat/models'; import { Random } from '@rocket.chat/random'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Accounts } from 'meteor/accounts-base'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -9,7 +9,7 @@ import { Meteor } from 'meteor/meteor'; import { logger } from './logger'; import { _matchToken } from './push'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'raix:push-update'(options: { diff --git a/apps/meteor/app/reactions/client/methods/setReaction.ts b/apps/meteor/app/reactions/client/methods/setReaction.ts index a38e6c156790..ed15cda9ab8e 100644 --- a/apps/meteor/app/reactions/client/methods/setReaction.ts +++ b/apps/meteor/app/reactions/client/methods/setReaction.ts @@ -1,5 +1,5 @@ import type { IMessage, IRoom } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { roomCoordinator } from '../../../../client/lib/rooms/roomCoordinator'; diff --git a/apps/meteor/app/reactions/server/setReaction.ts b/apps/meteor/app/reactions/server/setReaction.ts index 896e5041bd61..e35103e9d333 100644 --- a/apps/meteor/app/reactions/server/setReaction.ts +++ b/apps/meteor/app/reactions/server/setReaction.ts @@ -1,19 +1,18 @@ import { Apps, AppEvents } from '@rocket.chat/apps'; import { api } from '@rocket.chat/core-services'; import type { IMessage, IRoom, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, EmojiCustom, Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import _ from 'underscore'; import { callbacks } from '../../../lib/callbacks'; import { i18n } from '../../../server/lib/i18n'; -import { broadcastMessageFromData } from '../../../server/modules/watchers/lib/messages'; import { canAccessRoomAsync } from '../../authorization/server'; import { hasPermissionAsync } from '../../authorization/server/functions/hasPermission'; import { emoji } from '../../emoji/server'; import { isTheLastMessage } from '../../lib/server/functions/isTheLastMessage'; -import { notifyOnRoomChangedById } from '../../lib/server/lib/notifyListener'; +import { notifyOnRoomChangedById, notifyOnMessageChange } from '../../lib/server/lib/notifyListener'; const removeUserReaction = (message: IMessage, reaction: string, username: string) => { if (!message.reactions) { @@ -111,7 +110,7 @@ async function setReaction(room: IRoom, user: IUser, message: IMessage, reaction await Apps.self?.triggerEvent(AppEvents.IPostMessageReacted, message, user, reaction, isReacted); - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: message._id, }); } @@ -140,7 +139,7 @@ export async function executeSetReaction(userId: string, reaction: string, messa return setReaction(room, user, message, reaction, shouldReact); } -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { setReaction(reaction: string, messageId: IMessage['_id'], shouldReact?: boolean): boolean | undefined; diff --git a/apps/meteor/app/retention-policy/server/cronPruneMessages.ts b/apps/meteor/app/retention-policy/server/cronPruneMessages.ts index 337691bfbe57..640aa517a679 100644 --- a/apps/meteor/app/retention-policy/server/cronPruneMessages.ts +++ b/apps/meteor/app/retention-policy/server/cronPruneMessages.ts @@ -6,13 +6,20 @@ import { getCronAdvancedTimerFromPrecisionSetting } from '../../../lib/getCronAd import { cleanRoomHistory } from '../../lib/server/functions/cleanRoomHistory'; import { settings } from '../../settings/server'; -const maxTimes = { - c: 0, - p: 0, - d: 0, +type RetentionRoomTypes = 'c' | 'p' | 'd'; + +const getMaxAgeSettingIdByRoomType = (type: RetentionRoomTypes) => { + switch (type) { + case 'c': + return settings.get('RetentionPolicy_TTL_Channels'); + case 'p': + return settings.get('RetentionPolicy_TTL_Groups'); + case 'd': + return settings.get('RetentionPolicy_TTL_DMs'); + } }; -let types: (keyof typeof maxTimes)[] = []; +let types: RetentionRoomTypes[] = []; const oldest = new Date('0001-01-01T00:00:00Z'); @@ -29,7 +36,7 @@ async function job(): Promise { // get all rooms with default values for await (const type of types) { - const maxAge = maxTimes[type] || 0; + const maxAge = getMaxAgeSettingIdByRoomType(type) || 0; const latest = new Date(now.getTime() - maxAge); const rooms = await Rooms.find( @@ -95,9 +102,6 @@ settings.watchMultiple( 'RetentionPolicy_AppliesToChannels', 'RetentionPolicy_AppliesToGroups', 'RetentionPolicy_AppliesToDMs', - 'RetentionPolicy_TTL_Channels', - 'RetentionPolicy_TTL_Groups', - 'RetentionPolicy_TTL_DMs', 'RetentionPolicy_Advanced_Precision', 'RetentionPolicy_Advanced_Precision_Cron', 'RetentionPolicy_Precision', @@ -120,10 +124,6 @@ settings.watchMultiple( types.push('d'); } - maxTimes.c = settings.get('RetentionPolicy_TTL_Channels'); - maxTimes.p = settings.get('RetentionPolicy_TTL_Groups'); - maxTimes.d = settings.get('RetentionPolicy_TTL_DMs'); - const precision = (settings.get('RetentionPolicy_Advanced_Precision') && settings.get('RetentionPolicy_Advanced_Precision_Cron')) || getCronAdvancedTimerFromPrecisionSetting(settings.get('RetentionPolicy_Precision')); diff --git a/apps/meteor/app/search/server/methods.ts b/apps/meteor/app/search/server/methods.ts index 686b5b429e96..cdb3b4180f7a 100644 --- a/apps/meteor/app/search/server/methods.ts +++ b/apps/meteor/app/search/server/methods.ts @@ -1,12 +1,12 @@ import type { IMessageSearchProvider, IMessageSearchSuggestion, IRoom, IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { SearchLogger } from './logger/logger'; import type { IRawSearchResult, ISearchResult } from './model/ISearchResult'; import { searchProviderService, validationService } from './service'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'rocketchatSearch.getProvider'(): IMessageSearchProvider | undefined; diff --git a/apps/meteor/app/settings/server/SettingsRegistry.ts b/apps/meteor/app/settings/server/SettingsRegistry.ts index e86a391ad8fa..d7d2fa0a79f8 100644 --- a/apps/meteor/app/settings/server/SettingsRegistry.ts +++ b/apps/meteor/app/settings/server/SettingsRegistry.ts @@ -139,6 +139,7 @@ export class SettingsRegistry { const settingFromCodeOverwritten = overwriteSetting(settingFromCode); const settingStored = this.store.getSetting(_id); + const settingStoredOverwritten = settingStored && overwriteSetting(settingStored); try { @@ -166,7 +167,10 @@ export class SettingsRegistry { })(); await this.saveUpdatedSetting(_id, updatedProps, removedKeys); - this.store.set(settingFromCodeOverwritten); + if ('value' in updatedProps) { + this.store.set(updatedProps as ISetting); + } + return; } diff --git a/apps/meteor/app/slackbridge/client/slackbridge_import.client.js b/apps/meteor/app/slackbridge/client/slackbridge_import.client.js index 6aeffb7bef45..eebc07ddb72d 100644 --- a/apps/meteor/app/slackbridge/client/slackbridge_import.client.js +++ b/apps/meteor/app/slackbridge/client/slackbridge_import.client.js @@ -1,5 +1,5 @@ import { settings } from '../../settings/client'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; settings.onload('SlackBridge_Enabled', (key, value) => { if (value) { diff --git a/apps/meteor/app/slackbridge/server/removeChannelLinks.ts b/apps/meteor/app/slackbridge/server/removeChannelLinks.ts index 1a4e6f6a0096..2c89e71f9635 100644 --- a/apps/meteor/app/slackbridge/server/removeChannelLinks.ts +++ b/apps/meteor/app/slackbridge/server/removeChannelLinks.ts @@ -1,11 +1,11 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../authorization/server/functions/hasPermission'; import { settings } from '../../settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { removeSlackBridgeChannelLinks(): { message: string; params: unknown[] }; diff --git a/apps/meteor/app/slashcommand-asciiarts/client/gimme.ts b/apps/meteor/app/slashcommand-asciiarts/client/gimme.ts index 4c9d6a4e40c8..7cd5edb6bb87 100644 --- a/apps/meteor/app/slashcommand-asciiarts/client/gimme.ts +++ b/apps/meteor/app/slashcommand-asciiarts/client/gimme.ts @@ -1,7 +1,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { sdk } from '../../utils/client/lib/SDKClient'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; /* * Gimme is a named function that will replace /gimme commands * @param {Object} message - The message object diff --git a/apps/meteor/app/slashcommand-asciiarts/client/lenny.ts b/apps/meteor/app/slashcommand-asciiarts/client/lenny.ts index 99eaa03b9e59..0e3cc55f6b86 100644 --- a/apps/meteor/app/slashcommand-asciiarts/client/lenny.ts +++ b/apps/meteor/app/slashcommand-asciiarts/client/lenny.ts @@ -1,7 +1,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { sdk } from '../../utils/client/lib/SDKClient'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; /* * Lenny is a named function that will replace /lenny commands * @param {Object} message - The message object diff --git a/apps/meteor/app/slashcommand-asciiarts/client/shrug.ts b/apps/meteor/app/slashcommand-asciiarts/client/shrug.ts index bc0fb300789e..c4bdec8f1a8c 100644 --- a/apps/meteor/app/slashcommand-asciiarts/client/shrug.ts +++ b/apps/meteor/app/slashcommand-asciiarts/client/shrug.ts @@ -1,7 +1,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { sdk } from '../../utils/client/lib/SDKClient'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; /* * Shrug is a named function that will replace /shrug commands * @param {Object} message - The message object diff --git a/apps/meteor/app/slashcommand-asciiarts/client/tableflip.ts b/apps/meteor/app/slashcommand-asciiarts/client/tableflip.ts index 0d709760fe84..8820b81f7c4a 100644 --- a/apps/meteor/app/slashcommand-asciiarts/client/tableflip.ts +++ b/apps/meteor/app/slashcommand-asciiarts/client/tableflip.ts @@ -1,7 +1,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { sdk } from '../../utils/client/lib/SDKClient'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; /* * Tableflip is a named function that will replace /Tableflip commands * @param {Object} message - The message object diff --git a/apps/meteor/app/slashcommand-asciiarts/client/unflip.ts b/apps/meteor/app/slashcommand-asciiarts/client/unflip.ts index a7dc0d257e78..6c02fa196052 100644 --- a/apps/meteor/app/slashcommand-asciiarts/client/unflip.ts +++ b/apps/meteor/app/slashcommand-asciiarts/client/unflip.ts @@ -1,7 +1,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { sdk } from '../../utils/client/lib/SDKClient'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; /* * Unflip is a named function that will replace /unflip commands * @param {Object} message - The message object diff --git a/apps/meteor/app/slashcommand-asciiarts/server/gimme.ts b/apps/meteor/app/slashcommand-asciiarts/server/gimme.ts index f426d6cf85c0..f902d75f33d1 100644 --- a/apps/meteor/app/slashcommand-asciiarts/server/gimme.ts +++ b/apps/meteor/app/slashcommand-asciiarts/server/gimme.ts @@ -1,7 +1,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { executeSendMessage } from '../../lib/server/methods/sendMessage'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Gimme is a named function that will replace /gimme commands * @param {Object} message - The message object diff --git a/apps/meteor/app/slashcommand-asciiarts/server/lenny.ts b/apps/meteor/app/slashcommand-asciiarts/server/lenny.ts index 878a10e356d4..e760b5a1169e 100644 --- a/apps/meteor/app/slashcommand-asciiarts/server/lenny.ts +++ b/apps/meteor/app/slashcommand-asciiarts/server/lenny.ts @@ -1,7 +1,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { executeSendMessage } from '../../lib/server/methods/sendMessage'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Lenny is a named function that will replace /lenny commands * @param {Object} message - The message object diff --git a/apps/meteor/app/slashcommand-asciiarts/server/shrug.ts b/apps/meteor/app/slashcommand-asciiarts/server/shrug.ts index 1240027bb38f..c2e5d166bfd8 100644 --- a/apps/meteor/app/slashcommand-asciiarts/server/shrug.ts +++ b/apps/meteor/app/slashcommand-asciiarts/server/shrug.ts @@ -1,7 +1,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { executeSendMessage } from '../../lib/server/methods/sendMessage'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Shrug is a named function that will replace /shrug commands * @param {Object} message - The message object diff --git a/apps/meteor/app/slashcommand-asciiarts/server/tableflip.ts b/apps/meteor/app/slashcommand-asciiarts/server/tableflip.ts index 34acef9805e2..ac3f599dff1d 100644 --- a/apps/meteor/app/slashcommand-asciiarts/server/tableflip.ts +++ b/apps/meteor/app/slashcommand-asciiarts/server/tableflip.ts @@ -1,7 +1,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { executeSendMessage } from '../../lib/server/methods/sendMessage'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Tableflip is a named function that will replace /Tableflip commands * @param {Object} message - The message object diff --git a/apps/meteor/app/slashcommand-asciiarts/server/unflip.ts b/apps/meteor/app/slashcommand-asciiarts/server/unflip.ts index 689e7262eac0..b905ed567447 100644 --- a/apps/meteor/app/slashcommand-asciiarts/server/unflip.ts +++ b/apps/meteor/app/slashcommand-asciiarts/server/unflip.ts @@ -1,7 +1,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { executeSendMessage } from '../../lib/server/methods/sendMessage'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Unflip is a named function that will replace /unflip commands * @param {Object} message - The message object diff --git a/apps/meteor/app/slashcommands-archiveroom/client/client.ts b/apps/meteor/app/slashcommands-archiveroom/client/client.ts index c24763106684..f5154fb32a5b 100644 --- a/apps/meteor/app/slashcommands-archiveroom/client/client.ts +++ b/apps/meteor/app/slashcommands-archiveroom/client/client.ts @@ -1,4 +1,4 @@ -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; slashCommands.add({ command: 'archive', diff --git a/apps/meteor/app/slashcommands-archiveroom/server/server.ts b/apps/meteor/app/slashcommands-archiveroom/server/server.ts index 99bcec2cd7b3..f1b33c1022bb 100644 --- a/apps/meteor/app/slashcommands-archiveroom/server/server.ts +++ b/apps/meteor/app/slashcommands-archiveroom/server/server.ts @@ -10,7 +10,7 @@ import { roomCoordinator } from '../../../server/lib/rooms/roomCoordinator'; import { hasPermissionAsync } from '../../authorization/server/functions/hasPermission'; import { archiveRoom } from '../../lib/server/functions/archiveRoom'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; slashCommands.add({ command: 'archive', diff --git a/apps/meteor/app/slashcommands-create/client/client.ts b/apps/meteor/app/slashcommands-create/client/client.ts index 299db606db9c..7e8ba831dbd8 100644 --- a/apps/meteor/app/slashcommands-create/client/client.ts +++ b/apps/meteor/app/slashcommands-create/client/client.ts @@ -1,4 +1,4 @@ -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; slashCommands.add({ command: 'create', diff --git a/apps/meteor/app/slashcommands-create/server/server.ts b/apps/meteor/app/slashcommands-create/server/server.ts index 104d50c56926..6abee71c56fd 100644 --- a/apps/meteor/app/slashcommands-create/server/server.ts +++ b/apps/meteor/app/slashcommands-create/server/server.ts @@ -6,7 +6,7 @@ import { i18n } from '../../../server/lib/i18n'; import { createChannelMethod } from '../../lib/server/methods/createChannel'; import { createPrivateGroupMethod } from '../../lib/server/methods/createPrivateGroup'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; slashCommands.add({ command: 'create', diff --git a/apps/meteor/app/slashcommands-help/server/server.ts b/apps/meteor/app/slashcommands-help/server/server.ts index c24bfb22c6fe..80efaffeb852 100644 --- a/apps/meteor/app/slashcommands-help/server/server.ts +++ b/apps/meteor/app/slashcommands-help/server/server.ts @@ -4,7 +4,7 @@ import { Users } from '@rocket.chat/models'; import { i18n } from '../../../server/lib/i18n'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Help is a named function that will replace /help commands diff --git a/apps/meteor/app/slashcommands-hide/client/hide.ts b/apps/meteor/app/slashcommands-hide/client/hide.ts index 99c1eaea7049..c6486053ecc2 100644 --- a/apps/meteor/app/slashcommands-hide/client/hide.ts +++ b/apps/meteor/app/slashcommands-hide/client/hide.ts @@ -1,4 +1,4 @@ -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; slashCommands.add({ command: 'hide', diff --git a/apps/meteor/app/slashcommands-invite/client/client.ts b/apps/meteor/app/slashcommands-invite/client/client.ts index 729073b785d8..7c8af755d64d 100644 --- a/apps/meteor/app/slashcommands-invite/client/client.ts +++ b/apps/meteor/app/slashcommands-invite/client/client.ts @@ -1,4 +1,4 @@ -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; slashCommands.add({ command: 'invite', diff --git a/apps/meteor/app/slashcommands-invite/server/server.ts b/apps/meteor/app/slashcommands-invite/server/server.ts index de525d8c6fc6..06a85301540c 100644 --- a/apps/meteor/app/slashcommands-invite/server/server.ts +++ b/apps/meteor/app/slashcommands-invite/server/server.ts @@ -6,7 +6,7 @@ import { Meteor } from 'meteor/meteor'; import { i18n } from '../../../server/lib/i18n'; import { addUsersToRoomMethod } from '../../lib/server/methods/addUsersToRoom'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Invite is a named function that will replace /invite commands diff --git a/apps/meteor/app/slashcommands-inviteall/client/client.ts b/apps/meteor/app/slashcommands-inviteall/client/client.ts index f8ab40953d27..5083cd4a83ab 100644 --- a/apps/meteor/app/slashcommands-inviteall/client/client.ts +++ b/apps/meteor/app/slashcommands-inviteall/client/client.ts @@ -1,4 +1,4 @@ -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; slashCommands.add({ command: 'invite-all-to', diff --git a/apps/meteor/app/slashcommands-inviteall/server/server.ts b/apps/meteor/app/slashcommands-inviteall/server/server.ts index bac4349ec72c..e74bb89899c2 100644 --- a/apps/meteor/app/slashcommands-inviteall/server/server.ts +++ b/apps/meteor/app/slashcommands-inviteall/server/server.ts @@ -15,7 +15,7 @@ import { addUsersToRoomMethod } from '../../lib/server/methods/addUsersToRoom'; import { createChannelMethod } from '../../lib/server/methods/createChannel'; import { createPrivateGroupMethod } from '../../lib/server/methods/createPrivateGroup'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; function inviteAll(type: T): SlashCommand['callback'] { return async function inviteAll({ command, params, message, userId }: SlashCommandCallbackParams): Promise { diff --git a/apps/meteor/app/slashcommands-join/client/client.ts b/apps/meteor/app/slashcommands-join/client/client.ts index 417fe1e5cd47..bc8d589f51ac 100644 --- a/apps/meteor/app/slashcommands-join/client/client.ts +++ b/apps/meteor/app/slashcommands-join/client/client.ts @@ -1,6 +1,6 @@ import type { Meteor } from 'meteor/meteor'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; slashCommands.add({ command: 'join', diff --git a/apps/meteor/app/slashcommands-join/server/server.ts b/apps/meteor/app/slashcommands-join/server/server.ts index 33d0278f81a3..6497324ae9e0 100644 --- a/apps/meteor/app/slashcommands-join/server/server.ts +++ b/apps/meteor/app/slashcommands-join/server/server.ts @@ -5,7 +5,7 @@ import { Meteor } from 'meteor/meteor'; import { i18n } from '../../../server/lib/i18n'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; slashCommands.add({ command: 'join', diff --git a/apps/meteor/app/slashcommands-kick/client/client.ts b/apps/meteor/app/slashcommands-kick/client/client.ts index 475346216f1e..7fc167e17c88 100644 --- a/apps/meteor/app/slashcommands-kick/client/client.ts +++ b/apps/meteor/app/slashcommands-kick/client/client.ts @@ -1,6 +1,6 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; slashCommands.add({ command: 'kick', diff --git a/apps/meteor/app/slashcommands-kick/server/server.ts b/apps/meteor/app/slashcommands-kick/server/server.ts index 5ca6b45ec835..fdde07b897bf 100644 --- a/apps/meteor/app/slashcommands-kick/server/server.ts +++ b/apps/meteor/app/slashcommands-kick/server/server.ts @@ -6,7 +6,7 @@ import { Users } from '@rocket.chat/models'; import { i18n } from '../../../server/lib/i18n'; import { removeUserFromRoomMethod } from '../../../server/methods/removeUserFromRoom'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; slashCommands.add({ command: 'kick', diff --git a/apps/meteor/app/slashcommands-leave/server/leave.ts b/apps/meteor/app/slashcommands-leave/server/leave.ts index 42dad0807246..fa108fe18c72 100644 --- a/apps/meteor/app/slashcommands-leave/server/leave.ts +++ b/apps/meteor/app/slashcommands-leave/server/leave.ts @@ -5,7 +5,7 @@ import { Users } from '@rocket.chat/models'; import { i18n } from '../../../server/lib/i18n'; import { leaveRoomMethod } from '../../lib/server/methods/leaveRoom'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Leave is a named function that will replace /leave commands diff --git a/apps/meteor/app/slashcommands-me/server/me.ts b/apps/meteor/app/slashcommands-me/server/me.ts index ba6a9f8c82cc..b8b4a593cb73 100644 --- a/apps/meteor/app/slashcommands-me/server/me.ts +++ b/apps/meteor/app/slashcommands-me/server/me.ts @@ -1,7 +1,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { executeSendMessage } from '../../lib/server/methods/sendMessage'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Me is a named function that will replace /me commands diff --git a/apps/meteor/app/slashcommands-msg/server/server.ts b/apps/meteor/app/slashcommands-msg/server/server.ts index c6a244b80207..e757938106eb 100644 --- a/apps/meteor/app/slashcommands-msg/server/server.ts +++ b/apps/meteor/app/slashcommands-msg/server/server.ts @@ -7,7 +7,7 @@ import { i18n } from '../../../server/lib/i18n'; import { createDirectMessage } from '../../../server/methods/createDirectMessage'; import { executeSendMessage } from '../../lib/server/methods/sendMessage'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Msg is a named function that will replace /msg commands diff --git a/apps/meteor/app/slashcommands-mute/server/mute.ts b/apps/meteor/app/slashcommands-mute/server/mute.ts index 03ce960496da..da20ff4fed47 100644 --- a/apps/meteor/app/slashcommands-mute/server/mute.ts +++ b/apps/meteor/app/slashcommands-mute/server/mute.ts @@ -5,7 +5,7 @@ import { Users } from '@rocket.chat/models'; import { i18n } from '../../../server/lib/i18n'; import { muteUserInRoom } from '../../../server/methods/muteUserInRoom'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Mute is a named function that will replace /mute commands diff --git a/apps/meteor/app/slashcommands-mute/server/unmute.ts b/apps/meteor/app/slashcommands-mute/server/unmute.ts index 25c0956d49e3..4dc683f4ca93 100644 --- a/apps/meteor/app/slashcommands-mute/server/unmute.ts +++ b/apps/meteor/app/slashcommands-mute/server/unmute.ts @@ -5,7 +5,7 @@ import { Users } from '@rocket.chat/models'; import { i18n } from '../../../server/lib/i18n'; import { unmuteUserInRoom } from '../../../server/methods/unmuteUserInRoom'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; /* * Unmute is a named function that will replace /unmute commands diff --git a/apps/meteor/app/slashcommands-open/client/client.ts b/apps/meteor/app/slashcommands-open/client/client.ts index 987df9599761..99438a24eeb0 100644 --- a/apps/meteor/app/slashcommands-open/client/client.ts +++ b/apps/meteor/app/slashcommands-open/client/client.ts @@ -5,7 +5,7 @@ import { roomCoordinator } from '../../../client/lib/rooms/roomCoordinator'; import { router } from '../../../client/providers/RouterProvider'; import { Subscriptions, ChatSubscription } from '../../models/client'; import { sdk } from '../../utils/client/lib/SDKClient'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; slashCommands.add({ command: 'open', diff --git a/apps/meteor/app/slashcommands-status/client/status.ts b/apps/meteor/app/slashcommands-status/client/status.ts index 9136ef8f586f..3698b5fda4cb 100644 --- a/apps/meteor/app/slashcommands-status/client/status.ts +++ b/apps/meteor/app/slashcommands-status/client/status.ts @@ -2,7 +2,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { dispatchToastMessage } from '../../../client/lib/toast'; import { sdk } from '../../utils/client/lib/SDKClient'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; slashCommands.add({ command: 'status', diff --git a/apps/meteor/app/slashcommands-status/server/status.ts b/apps/meteor/app/slashcommands-status/server/status.ts index 72d92afaf3f2..a2ff6483d398 100644 --- a/apps/meteor/app/slashcommands-status/server/status.ts +++ b/apps/meteor/app/slashcommands-status/server/status.ts @@ -5,7 +5,7 @@ import { Users } from '@rocket.chat/models'; import { i18n } from '../../../server/lib/i18n'; import { settings } from '../../settings/server'; import { setUserStatusMethod } from '../../user-status/server/methods/setUserStatus'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; slashCommands.add({ command: 'status', diff --git a/apps/meteor/app/slashcommands-topic/client/topic.ts b/apps/meteor/app/slashcommands-topic/client/topic.ts index f5f5ed58bb0f..f7e47c334b5a 100644 --- a/apps/meteor/app/slashcommands-topic/client/topic.ts +++ b/apps/meteor/app/slashcommands-topic/client/topic.ts @@ -5,7 +5,7 @@ import { callbacks } from '../../../lib/callbacks'; import { hasPermission } from '../../authorization/client'; import { ChatRoom } from '../../models/client/models/ChatRoom'; import { sdk } from '../../utils/client/lib/SDKClient'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; slashCommands.add({ command: 'topic', diff --git a/apps/meteor/app/slashcommands-topic/server/topic.ts b/apps/meteor/app/slashcommands-topic/server/topic.ts index 24fd51d5f509..c1fa6ea283b7 100644 --- a/apps/meteor/app/slashcommands-topic/server/topic.ts +++ b/apps/meteor/app/slashcommands-topic/server/topic.ts @@ -2,7 +2,7 @@ import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { hasPermissionAsync } from '../../authorization/server/functions/hasPermission'; import { saveRoomSettings } from '../../channel-settings/server/methods/saveRoomSettings'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; slashCommands.add({ command: 'topic', diff --git a/apps/meteor/app/slashcommands-unarchiveroom/client/client.ts b/apps/meteor/app/slashcommands-unarchiveroom/client/client.ts index 2fed1e1c7802..7b65fc067031 100644 --- a/apps/meteor/app/slashcommands-unarchiveroom/client/client.ts +++ b/apps/meteor/app/slashcommands-unarchiveroom/client/client.ts @@ -1,4 +1,4 @@ -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/client/slashCommand'; slashCommands.add({ command: 'unarchive', diff --git a/apps/meteor/app/slashcommands-unarchiveroom/server/server.ts b/apps/meteor/app/slashcommands-unarchiveroom/server/server.ts index d87981bd65a2..4c0c44269d2f 100644 --- a/apps/meteor/app/slashcommands-unarchiveroom/server/server.ts +++ b/apps/meteor/app/slashcommands-unarchiveroom/server/server.ts @@ -10,7 +10,7 @@ import { roomCoordinator } from '../../../server/lib/rooms/roomCoordinator'; import { hasPermissionAsync } from '../../authorization/server/functions/hasPermission'; import { unarchiveRoom } from '../../lib/server/functions/unarchiveRoom'; import { settings } from '../../settings/server'; -import { slashCommands } from '../../utils/lib/slashCommand'; +import { slashCommands } from '../../utils/server/slashCommand'; slashCommands.add({ command: 'unarchive', diff --git a/apps/meteor/app/statistics/server/methods/getStatistics.ts b/apps/meteor/app/statistics/server/methods/getStatistics.ts index c7eb79b5b985..a804ef83584e 100644 --- a/apps/meteor/app/statistics/server/methods/getStatistics.ts +++ b/apps/meteor/app/statistics/server/methods/getStatistics.ts @@ -1,10 +1,10 @@ import type { IStats } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { getLastStatistics } from '../functions/getLastStatistics'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getStatistics(refresh?: boolean): IStats; diff --git a/apps/meteor/app/theme/client/imports/general/base_old.css b/apps/meteor/app/theme/client/imports/general/base_old.css index 20b023cc61aa..3120d9c05ff0 100644 --- a/apps/meteor/app/theme/client/imports/general/base_old.css +++ b/apps/meteor/app/theme/client/imports/general/base_old.css @@ -776,21 +776,6 @@ padding: 21px 0 10px; } - & .start { - margin-top: 44px; - - text-align: center; - - & .start__purge-warning { - margin-top: -33px; - margin-bottom: 0.5rem; - padding: 1rem; - - border-width: 1px 0 0; - background: linear-gradient(to bottom, var(--rc-color-alert-message-warning-background) 0%, rgba(255, 255, 255, 0) 100%); - } - } - & .editing .body { border-radius: var(--border-radius); } diff --git a/apps/meteor/app/threads/server/hooks/aftersavemessage.ts b/apps/meteor/app/threads/server/hooks/aftersavemessage.ts index ab1fa182599b..a938dadddb27 100644 --- a/apps/meteor/app/threads/server/hooks/aftersavemessage.ts +++ b/apps/meteor/app/threads/server/hooks/aftersavemessage.ts @@ -4,7 +4,7 @@ import { Messages } from '@rocket.chat/models'; import { Meteor } from 'meteor/meteor'; import { callbacks } from '../../../../lib/callbacks'; -import { broadcastMessageFromData } from '../../../../server/modules/watchers/lib/messages'; +import { notifyOnMessageChange } from '../../../lib/server/lib/notifyListener'; import { updateThreadUsersSubscriptions, getMentions } from '../../../lib/server/lib/notifyUsersOnMessage'; import { sendMessageNotifications } from '../../../lib/server/lib/sendNotificationsOnMessage'; import { settings } from '../../../settings/server'; @@ -62,7 +62,7 @@ export async function processThreads(message: IMessage, room: IRoom) { await notifyUsersOnReply(message, replies); await metaData(message, parentMessage, replies); await notification(message, room, replies); - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: message.tmid, }); @@ -77,7 +77,7 @@ Meteor.startup(() => { } callbacks.add( 'afterSaveMessage', - async (message, room) => { + async (message, { room }) => { return processThreads(message, room); }, callbacks.priority.LOW, diff --git a/apps/meteor/app/threads/server/methods/followMessage.ts b/apps/meteor/app/threads/server/methods/followMessage.ts index 05650d0ad2ef..8ed7093e00d4 100644 --- a/apps/meteor/app/threads/server/methods/followMessage.ts +++ b/apps/meteor/app/threads/server/methods/followMessage.ts @@ -1,16 +1,17 @@ import { Apps, AppEvents } from '@rocket.chat/apps'; import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomIdAsync } from '../../../authorization/server/functions/canAccessRoom'; import { RateLimiter } from '../../../lib/server'; +import { notifyOnMessageChange } from '../../../lib/server/lib/notifyListener'; import { settings } from '../../../settings/server'; import { follow } from '../functions'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { followMessage(message: { mid: IMessage['_id'] }): false | undefined; @@ -41,7 +42,13 @@ Meteor.methods({ throw new Meteor.Error('error-not-allowed', 'not-allowed', { method: 'followMessage' }); } - const followResult = await follow({ tmid: message.tmid || message._id, uid }); + const id = message.tmid || message._id; + + const followResult = await follow({ tmid: id, uid }); + + void notifyOnMessageChange({ + id, + }); const isFollowed = true; await Apps.self?.triggerEvent(AppEvents.IPostMessageFollowed, message, await Meteor.userAsync(), isFollowed); diff --git a/apps/meteor/app/threads/server/methods/getThreadMessages.ts b/apps/meteor/app/threads/server/methods/getThreadMessages.ts index d6c2d65ff4d4..8ae31130df1b 100644 --- a/apps/meteor/app/threads/server/methods/getThreadMessages.ts +++ b/apps/meteor/app/threads/server/methods/getThreadMessages.ts @@ -1,6 +1,6 @@ import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { callbacks } from '../../../../lib/callbacks'; @@ -8,7 +8,7 @@ import { canAccessRoomAsync } from '../../../authorization/server'; import { settings } from '../../../settings/server'; import { readThread } from '../functions'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getThreadMessages(params: { tmid: IMessage['_id']; limit?: number; skip?: number }): Promise; diff --git a/apps/meteor/app/threads/server/methods/getThreadsList.ts b/apps/meteor/app/threads/server/methods/getThreadsList.ts index 5a33dc16280b..c51449ff2d4d 100644 --- a/apps/meteor/app/threads/server/methods/getThreadsList.ts +++ b/apps/meteor/app/threads/server/methods/getThreadsList.ts @@ -1,6 +1,6 @@ import type { IMessage, IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomAsync } from '../../../authorization/server'; @@ -8,7 +8,7 @@ import { settings } from '../../../settings/server'; const MAX_LIMIT = 100; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getThreadsList(params: { rid: IRoom['_id']; limit?: number; skip?: number }): IMessage[]; diff --git a/apps/meteor/app/threads/server/methods/unfollowMessage.ts b/apps/meteor/app/threads/server/methods/unfollowMessage.ts index afc9206b038f..de4f2683be41 100644 --- a/apps/meteor/app/threads/server/methods/unfollowMessage.ts +++ b/apps/meteor/app/threads/server/methods/unfollowMessage.ts @@ -1,16 +1,17 @@ import { Apps, AppEvents } from '@rocket.chat/apps'; import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomIdAsync } from '../../../authorization/server/functions/canAccessRoom'; import { RateLimiter } from '../../../lib/server'; +import { notifyOnMessageChange } from '../../../lib/server/lib/notifyListener'; import { settings } from '../../../settings/server'; import { unfollow } from '../functions'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { unfollowMessage(message: { mid: IMessage['_id'] }): false | undefined; @@ -41,7 +42,13 @@ Meteor.methods({ throw new Meteor.Error('error-not-allowed', 'not-allowed', { method: 'unfollowMessage' }); } - const unfollowResult = await unfollow({ rid: message.rid, tmid: message.tmid || message._id, uid }); + const id = message.tmid || message._id; + + const unfollowResult = await unfollow({ rid: message.rid, tmid: id, uid }); + + void notifyOnMessageChange({ + id, + }); const isFollowed = false; await Apps.self?.triggerEvent(AppEvents.IPostMessageFollowed, message, await Meteor.userAsync(), isFollowed); diff --git a/apps/meteor/app/ui-cached-collection/client/models/CachedCollection.ts b/apps/meteor/app/ui-cached-collection/client/models/CachedCollection.ts index 545e1e73342d..602a0eddb8ce 100644 --- a/apps/meteor/app/ui-cached-collection/client/models/CachedCollection.ts +++ b/apps/meteor/app/ui-cached-collection/client/models/CachedCollection.ts @@ -1,5 +1,5 @@ +import type { StreamNames } from '@rocket.chat/ddp-client'; import { Emitter } from '@rocket.chat/emitter'; -import type { StreamNames } from '@rocket.chat/ui-contexts'; import localforage from 'localforage'; import { Accounts } from 'meteor/accounts-base'; import { Meteor } from 'meteor/meteor'; diff --git a/apps/meteor/app/ui-cached-collection/client/models/CachedCollectionManager.ts b/apps/meteor/app/ui-cached-collection/client/models/CachedCollectionManager.ts index 845731e2450a..b03115105841 100644 --- a/apps/meteor/app/ui-cached-collection/client/models/CachedCollectionManager.ts +++ b/apps/meteor/app/ui-cached-collection/client/models/CachedCollectionManager.ts @@ -41,12 +41,12 @@ class CachedCollectionManager extends Emitter<{ reconnect: void; login: string | } }); + Accounts.onLogin(() => { + this.emit('login', Meteor.userId()); + }); Tracker.autorun(() => { const uid = Meteor.userId(); this.logged = uid !== null; - if (this.logged) { - this.emit('login', uid); - } }); } diff --git a/apps/meteor/app/user-status/server/methods/deleteCustomUserStatus.ts b/apps/meteor/app/user-status/server/methods/deleteCustomUserStatus.ts index f58fa9551f4c..416bc6f678ed 100644 --- a/apps/meteor/app/user-status/server/methods/deleteCustomUserStatus.ts +++ b/apps/meteor/app/user-status/server/methods/deleteCustomUserStatus.ts @@ -1,11 +1,11 @@ import { api } from '@rocket.chat/core-services'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { CustomUserStatus } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { deleteCustomUserStatus(userStatusID: string): Promise; diff --git a/apps/meteor/app/user-status/server/methods/getUserStatusText.ts b/apps/meteor/app/user-status/server/methods/getUserStatusText.ts index 5aa80627d562..911a69854b95 100644 --- a/apps/meteor/app/user-status/server/methods/getUserStatusText.ts +++ b/apps/meteor/app/user-status/server/methods/getUserStatusText.ts @@ -1,9 +1,9 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { getStatusText } from '../../../lib/server/functions/getStatusText'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getUserStatusText(userId: string): Promise; diff --git a/apps/meteor/app/user-status/server/methods/insertOrUpdateUserStatus.ts b/apps/meteor/app/user-status/server/methods/insertOrUpdateUserStatus.ts index b6a98895bc2c..6e034f030679 100644 --- a/apps/meteor/app/user-status/server/methods/insertOrUpdateUserStatus.ts +++ b/apps/meteor/app/user-status/server/methods/insertOrUpdateUserStatus.ts @@ -1,14 +1,14 @@ import { api } from '@rocket.chat/core-services'; import type { ICustomUserStatus } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import type { InsertionModel } from '@rocket.chat/model-typings'; import { CustomUserStatus } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { trim } from '../../../../lib/utils/stringUtils'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { insertOrUpdateUserStatus(userStatusData: { diff --git a/apps/meteor/app/user-status/server/methods/listCustomUserStatus.ts b/apps/meteor/app/user-status/server/methods/listCustomUserStatus.ts index 3a962121d65c..d9a58f8b8c72 100644 --- a/apps/meteor/app/user-status/server/methods/listCustomUserStatus.ts +++ b/apps/meteor/app/user-status/server/methods/listCustomUserStatus.ts @@ -1,9 +1,9 @@ import type { ICustomUserStatus } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { CustomUserStatus } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { listCustomUserStatus(): ICustomUserStatus[]; diff --git a/apps/meteor/app/user-status/server/methods/setUserStatus.ts b/apps/meteor/app/user-status/server/methods/setUserStatus.ts index 32db93e722fb..0b40e7e37246 100644 --- a/apps/meteor/app/user-status/server/methods/setUserStatus.ts +++ b/apps/meteor/app/user-status/server/methods/setUserStatus.ts @@ -1,6 +1,6 @@ import { Presence } from '@rocket.chat/core-services'; import type { IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -8,7 +8,7 @@ import { RateLimiter } from '../../../lib/server'; import { setStatusText } from '../../../lib/server/functions/setStatusText'; import { settings } from '../../../settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { setUserStatus(statusType: IUser['status'], statusText: IUser['statusText']): void; diff --git a/apps/meteor/app/utils/client/index.ts b/apps/meteor/app/utils/client/index.ts index fd03ffc3d720..561a1116141b 100644 --- a/apps/meteor/app/utils/client/index.ts +++ b/apps/meteor/app/utils/client/index.ts @@ -2,6 +2,6 @@ export { Info } from '../rocketchat.info'; export { getUserPreference } from './lib/getUserPreference'; export { fileUploadIsValidContentType } from './restrictions'; export { getUserAvatarURL } from './getUserAvatarURL'; -export { slashCommands } from '../lib/slashCommand'; +export { slashCommands } from './slashCommand'; export { getURL } from './getURL'; export { APIClient } from './lib/RestApiClient'; diff --git a/apps/meteor/app/utils/client/lib/SDKClient.ts b/apps/meteor/app/utils/client/lib/SDKClient.ts index c174f9125f49..3c7e43c85f7c 100644 --- a/apps/meteor/app/utils/client/lib/SDKClient.ts +++ b/apps/meteor/app/utils/client/lib/SDKClient.ts @@ -1,15 +1,12 @@ import type { RestClientInterface } from '@rocket.chat/api-client'; -import type { SDK } from '@rocket.chat/ddp-client/src/DDPSDK'; -import type { ClientStream } from '@rocket.chat/ddp-client/src/types/ClientStream'; -import type { StreamKeys, StreamNames, StreamerCallbackArgs } from '@rocket.chat/ddp-client/src/types/streams'; +import type { SDK, ClientStream, StreamKeys, StreamNames, StreamerCallbackArgs, ServerMethods } from '@rocket.chat/ddp-client'; import { Emitter } from '@rocket.chat/emitter'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { DDPCommon } from 'meteor/ddp-common'; import { Meteor } from 'meteor/meteor'; import { APIClient } from './RestApiClient'; -declare module '@rocket.chat/ddp-client/src/DDPSDK' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface SDK { stream>( @@ -138,6 +135,12 @@ const createStreamManager = () => { const streams = new Map(); + Accounts.onLogout(() => { + streams.forEach((stream) => { + stream.unsubList.forEach((stop) => stop()); + }); + }); + Meteor.connection._stream.on('message', (rawMsg: string) => { const msg = DDPCommon.parseDDP(rawMsg); if (!isChangedCollectionPayload(msg)) { @@ -169,7 +172,6 @@ const createStreamManager = () => { const stop = (): void => { streamProxy.off(eventLiteral, proxyCallback); - // If someone is still listening, don't unsubscribe if (streamProxy.has(eventLiteral)) { return; @@ -182,11 +184,15 @@ const createStreamManager = () => { }; const stream = streams.get(eventLiteral) || createNewMeteorStream(name, key, args); + stream.unsubList.add(stop); if (!streams.has(eventLiteral)) { streams.set(eventLiteral, stream); } - stream.error(() => stop()); + + stream.error(() => { + stream.unsubList.forEach((stop) => stop()); + }); return { id: '', diff --git a/apps/meteor/app/utils/lib/slashCommand.ts b/apps/meteor/app/utils/client/slashCommand.ts similarity index 84% rename from apps/meteor/app/utils/lib/slashCommand.ts rename to apps/meteor/app/utils/client/slashCommand.ts index f4e2cc1b359a..66e793012fac 100644 --- a/apps/meteor/app/utils/lib/slashCommand.ts +++ b/apps/meteor/app/utils/client/slashCommand.ts @@ -6,7 +6,8 @@ import type { SlashCommandPreviewItem, SlashCommandPreviews, } from '@rocket.chat/core-typings'; -import { Meteor } from 'meteor/meteor'; + +import { InvalidCommandUsage, InvalidPreview } from '../../../client/lib/errors'; interface ISlashCommandAddParams { command: string; @@ -69,7 +70,7 @@ export const slashCommands = { } if (!message?.rid) { - throw new Meteor.Error('invalid-command-usage', 'Executing a command requires at least a message with a room id.'); + throw new InvalidCommandUsage(); } return cmd.callback({ command, params, message, triggerId, userId }); @@ -85,7 +86,7 @@ export const slashCommands = { } if (!message?.rid) { - throw new Meteor.Error('invalid-command-usage', 'Executing a command requires at least a message with a room id.'); + throw new InvalidCommandUsage(); } const previewInfo = await cmd.previewer(command, params, message); @@ -114,19 +115,19 @@ export const slashCommands = { } if (!message?.rid) { - throw new Meteor.Error('invalid-command-usage', 'Executing a command requires at least a message with a room id.'); + throw new InvalidCommandUsage(); } // { id, type, value } if (!preview.id || !preview.type || !preview.value) { - throw new Meteor.Error('error-invalid-preview', 'Preview Item must have an id, type, and value.'); + throw new InvalidPreview(); } return cmd.previewCallback(command, params, message, preview, triggerId); }, }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { slashCommand(params: { cmd: string; params: string; msg: IMessage; triggerId: string }): unknown; diff --git a/apps/meteor/app/utils/lib/i18n.ts b/apps/meteor/app/utils/lib/i18n.ts index 9d3fbc59d245..b69fe6b30513 100644 --- a/apps/meteor/app/utils/lib/i18n.ts +++ b/apps/meteor/app/utils/lib/i18n.ts @@ -9,11 +9,11 @@ export const i18n = i18next.use(sprintf); export const addSprinfToI18n = function (t: (typeof i18n)['t']) { return function (key: string, ...replaces: any): string { if (replaces[0] === undefined) { - return t(key, ...replaces); + return t(key); } if (isObject(replaces[0]) && !Array.isArray(replaces[0])) { - return t(key, ...replaces); + return t(key, replaces[0]); } return t(key, { diff --git a/apps/meteor/app/utils/rocketchat.info b/apps/meteor/app/utils/rocketchat.info index ef7c8e5717c9..faf0e8f47de6 100644 --- a/apps/meteor/app/utils/rocketchat.info +++ b/apps/meteor/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "6.11.0-develop" + "version": "6.12.0-develop" } diff --git a/apps/meteor/app/utils/server/slashCommand.ts b/apps/meteor/app/utils/server/slashCommand.ts index 74f2c5716cc4..27b3c81735f9 100644 --- a/apps/meteor/app/utils/server/slashCommand.ts +++ b/apps/meteor/app/utils/server/slashCommand.ts @@ -1,7 +1,139 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import { MeteorError } from '@rocket.chat/core-services'; +import type { + IMessage, + SlashCommand, + SlashCommandOptions, + RequiredField, + SlashCommandPreviewItem, + SlashCommandPreviews, +} from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; -import { slashCommands } from '../lib/slashCommand'; +interface ISlashCommandAddParams { + command: string; + callback?: SlashCommand['callback']; + options?: SlashCommandOptions; + result?: SlashCommand['result']; + providesPreview?: boolean; + previewer?: SlashCommand['previewer']; + previewCallback?: SlashCommand['previewCallback']; + appId?: string; + description?: string; +} + +export const slashCommands = { + commands: {} as Record, + add({ + command, + callback, + options = {}, + result, + providesPreview = false, + previewer, + previewCallback, + appId, + description = '', + }: ISlashCommandAddParams): void { + if (this.commands[command]) { + return; + } + this.commands[command] = { + command, + callback, + params: options.params, + description: options.description || description, + permission: options.permission, + clientOnly: options.clientOnly || false, + result, + providesPreview: Boolean(providesPreview), + previewer, + previewCallback, + appId, + } as SlashCommand; + }, + async run({ + command, + message, + params, + triggerId, + userId, + }: { + command: string; + params: string; + message: RequiredField, 'rid' | '_id'>; + userId: string; + triggerId?: string | undefined; + }): Promise { + const cmd = this.commands[command]; + if (typeof cmd?.callback !== 'function') { + return; + } + + if (!message?.rid) { + throw new MeteorError('invalid-command-usage', 'Executing a command requires at least a message with a room id.'); + } + + return cmd.callback({ command, params, message, triggerId, userId }); + }, + async getPreviews( + command: string, + params: string, + message: RequiredField, 'rid'>, + ): Promise { + const cmd = this.commands[command]; + if (typeof cmd?.previewer !== 'function') { + return; + } + + if (!message?.rid) { + throw new MeteorError('invalid-command-usage', 'Executing a command requires at least a message with a room id.'); + } + + const previewInfo = await cmd.previewer(command, params, message); + + if (!previewInfo?.items?.length) { + return; + } + + // A limit of ten results, to save time and bandwidth + if (previewInfo.items.length >= 10) { + previewInfo.items = previewInfo.items.slice(0, 10); + } + + return previewInfo; + }, + async executePreview( + command: string, + params: string, + message: Pick & Partial>, + preview: SlashCommandPreviewItem, + triggerId?: string, + ) { + const cmd = this.commands[command]; + if (typeof cmd?.previewCallback !== 'function') { + return; + } + + if (!message?.rid) { + throw new MeteorError('invalid-command-usage', 'Executing a command requires at least a message with a room id.'); + } + + // { id, type, value } + if (!preview.id || !preview.type || !preview.value) { + throw new MeteorError('error-invalid-preview', 'Preview Item must have an id, type, and value.'); + } + + return cmd.previewCallback(command, params, message, preview, triggerId); + }, +}; + +declare module '@rocket.chat/ddp-client' { + // eslint-disable-next-line @typescript-eslint/naming-convention + interface ServerMethods { + slashCommand(params: { cmd: string; params: string; msg: IMessage; triggerId: string }): unknown; + } +} Meteor.methods({ async slashCommand(command) { @@ -27,5 +159,3 @@ Meteor.methods({ }); }, }); - -export { slashCommands }; diff --git a/apps/meteor/app/version-check/server/methods/banner_dismiss.ts b/apps/meteor/app/version-check/server/methods/banner_dismiss.ts index 5ffebcfbbd5a..a3bf337626f9 100644 --- a/apps/meteor/app/version-check/server/methods/banner_dismiss.ts +++ b/apps/meteor/app/version-check/server/methods/banner_dismiss.ts @@ -1,10 +1,10 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { notifyOnUserChange } from '../../../lib/server/lib/notifyListener'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'banner/dismiss'({ id }: { id: string }): void; diff --git a/apps/meteor/app/webdav/server/methods/addWebdavAccount.ts b/apps/meteor/app/webdav/server/methods/addWebdavAccount.ts index e2c9a9ddc324..2c3973649091 100644 --- a/apps/meteor/app/webdav/server/methods/addWebdavAccount.ts +++ b/apps/meteor/app/webdav/server/methods/addWebdavAccount.ts @@ -1,14 +1,14 @@ import { api } from '@rocket.chat/core-services'; import type { IWebdavAccountPayload } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { WebdavAccounts } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { settings } from '../../../settings/server'; import { WebdavClientAdapter } from '../lib/webdavClientAdapter'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addWebdavAccount(formData: IWebdavAccountPayload): boolean; diff --git a/apps/meteor/app/webdav/server/methods/getFileFromWebdav.ts b/apps/meteor/app/webdav/server/methods/getFileFromWebdav.ts index 346362935d87..38aeb0442c5c 100644 --- a/apps/meteor/app/webdav/server/methods/getFileFromWebdav.ts +++ b/apps/meteor/app/webdav/server/methods/getFileFromWebdav.ts @@ -1,15 +1,15 @@ import type { IWebdavAccount, IWebdavNode } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { WebdavAccounts } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { settings } from '../../../settings/server'; import { getWebdavCredentials } from '../lib/getWebdavCredentials'; import { WebdavClientAdapter } from '../lib/webdavClientAdapter'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention - export interface ServerMethods { + interface ServerMethods { getFileFromWebdav(accountId: IWebdavAccount['_id'], file: IWebdavNode): Promise<{ success: boolean; data: Uint8Array }>; } } diff --git a/apps/meteor/app/webdav/server/methods/getWebdavFileList.ts b/apps/meteor/app/webdav/server/methods/getWebdavFileList.ts index f4d944181928..66e924b719a2 100644 --- a/apps/meteor/app/webdav/server/methods/getWebdavFileList.ts +++ b/apps/meteor/app/webdav/server/methods/getWebdavFileList.ts @@ -1,13 +1,13 @@ import type { IWebdavAccount, IWebdavNode } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { WebdavAccounts } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { settings } from '../../../settings/server'; import { getWebdavCredentials } from '../lib/getWebdavCredentials'; import { WebdavClientAdapter } from '../lib/webdavClientAdapter'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getWebdavFileList(accountId: IWebdavAccount['_id'], path: string): { success: boolean; data: IWebdavNode[] }; diff --git a/apps/meteor/app/webdav/server/methods/getWebdavFilePreview.ts b/apps/meteor/app/webdav/server/methods/getWebdavFilePreview.ts index 1e01937a0e52..34077babf276 100644 --- a/apps/meteor/app/webdav/server/methods/getWebdavFilePreview.ts +++ b/apps/meteor/app/webdav/server/methods/getWebdavFilePreview.ts @@ -1,13 +1,13 @@ import type { IWebdavAccount } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { WebdavAccounts } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { createClient } from 'webdav'; import { settings } from '../../../settings/server'; import { getWebdavCredentials } from '../lib/getWebdavCredentials'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getWebdavFilePreview(accountId: IWebdavAccount['_id'], path: string): { success: true; data: ArrayBuffer } | undefined; diff --git a/apps/meteor/app/webdav/server/methods/removeWebdavAccount.ts b/apps/meteor/app/webdav/server/methods/removeWebdavAccount.ts index df6102297cc2..a68a14e29e40 100644 --- a/apps/meteor/app/webdav/server/methods/removeWebdavAccount.ts +++ b/apps/meteor/app/webdav/server/methods/removeWebdavAccount.ts @@ -1,14 +1,14 @@ import { api } from '@rocket.chat/core-services'; import type { IWebdavAccount } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { WebdavAccounts } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import type { DeleteResult } from 'mongodb'; import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { removeWebdavAccount(accountId: IWebdavAccount['_id']): DeleteResult; diff --git a/apps/meteor/app/webdav/server/methods/uploadFileToWebdav.ts b/apps/meteor/app/webdav/server/methods/uploadFileToWebdav.ts index 8a2e1badd27d..97bcf4632216 100644 --- a/apps/meteor/app/webdav/server/methods/uploadFileToWebdav.ts +++ b/apps/meteor/app/webdav/server/methods/uploadFileToWebdav.ts @@ -1,7 +1,8 @@ import { MeteorError } from '@rocket.chat/core-services'; import type { IWebdavAccount } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Logger } from '@rocket.chat/logger'; -import type { ServerMethods, TranslationKey } from '@rocket.chat/ui-contexts'; +import type { TranslationKey } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { settings } from '../../../settings/server'; @@ -9,7 +10,7 @@ import { uploadFileToWebdav } from '../lib/uploadFileToWebdav'; const logger = new Logger('WebDAV_Upload'); -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { uploadFileToWebdav( diff --git a/apps/meteor/client/NavBarV2/NavBarPagesToolbar/hooks/useAuditMenu.spec.tsx b/apps/meteor/client/NavBarV2/NavBarPagesToolbar/hooks/useAuditMenu.spec.tsx index 11eddf934055..94fdfe25a92d 100644 --- a/apps/meteor/client/NavBarV2/NavBarPagesToolbar/hooks/useAuditMenu.spec.tsx +++ b/apps/meteor/client/NavBarV2/NavBarPagesToolbar/hooks/useAuditMenu.spec.tsx @@ -1,10 +1,11 @@ import { mockAppRoot } from '@rocket.chat/mock-providers'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook, waitFor } from '@testing-library/react'; import { useAuditMenu } from './useAuditMenu'; it('should return an empty array of items if doesn`t have license', async () => { - const { result, waitFor } = renderHook(() => useAuditMenu(), { + const { result } = renderHook(() => useAuditMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/v1/licenses.info', () => ({ // @ts-expect-error: just for testing @@ -18,13 +19,12 @@ it('should return an empty array of items if doesn`t have license', async () => .build(), }); - await waitFor(() => result.all.length > 1); - - expect(result.current).toEqual([]); + await waitFor(() => expect(result.current).toEqual([])); }); it('should return an empty array of items if have license and not have permissions', async () => { - const { result, waitFor } = renderHook(() => useAuditMenu(), { + const { result } = renderHook(() => useAuditMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/v1/licenses.info', () => ({ license: { @@ -41,13 +41,12 @@ it('should return an empty array of items if have license and not have permissio .build(), }); - await waitFor(() => result.all.length > 1); - - expect(result.current).toEqual([]); + await waitFor(() => expect(result.current).toEqual([])); }); it('should return auditItems if have license and permissions', async () => { - const { result, waitFor } = renderHook(() => useAuditMenu(), { + const { result } = renderHook(() => useAuditMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/v1/licenses.info', () => ({ license: { @@ -65,12 +64,12 @@ it('should return auditItems if have license and permissions', async () => { .build(), }); - await waitFor(() => result.current.length > 0); - - expect(result.current[0].items[0]).toEqual( - expect.objectContaining({ - id: 'messages', - }), + await waitFor(() => + expect(result.current[0]?.items[0]).toEqual( + expect.objectContaining({ + id: 'messages', + }), + ), ); expect(result.current[0].items[1]).toEqual( @@ -81,7 +80,8 @@ it('should return auditItems if have license and permissions', async () => { }); it('should return auditMessages item if have license and can-audit permission', async () => { - const { result, waitFor } = renderHook(() => useAuditMenu(), { + const { result } = renderHook(() => useAuditMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/v1/licenses.info', () => ({ license: { @@ -98,17 +98,18 @@ it('should return auditMessages item if have license and can-audit permission', .build(), }); - await waitFor(() => result.current.length > 0); - - expect(result.current[0].items[0]).toEqual( - expect.objectContaining({ - id: 'messages', - }), + await waitFor(() => + expect(result.current[0]?.items[0]).toEqual( + expect.objectContaining({ + id: 'messages', + }), + ), ); }); it('should return audiLogs item if have license and can-audit-log permission', async () => { - const { result, waitFor } = renderHook(() => useAuditMenu(), { + const { result } = renderHook(() => useAuditMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/v1/licenses.info', () => ({ license: { @@ -125,11 +126,11 @@ it('should return audiLogs item if have license and can-audit-log permission', a .build(), }); - await waitFor(() => result.current.length > 0); - - expect(result.current[0].items[0]).toEqual( - expect.objectContaining({ - id: 'auditLog', - }), + await waitFor(() => + expect(result.current[0]?.items[0]).toEqual( + expect.objectContaining({ + id: 'auditLog', + }), + ), ); }); diff --git a/apps/meteor/client/NavBarV2/NavBarPagesToolbar/hooks/useMarketPlaceMenu.spec.tsx b/apps/meteor/client/NavBarV2/NavBarPagesToolbar/hooks/useMarketPlaceMenu.spec.tsx index 2a3d277e69fe..d2d1e36ca05e 100644 --- a/apps/meteor/client/NavBarV2/NavBarPagesToolbar/hooks/useMarketPlaceMenu.spec.tsx +++ b/apps/meteor/client/NavBarV2/NavBarPagesToolbar/hooks/useMarketPlaceMenu.spec.tsx @@ -1,11 +1,12 @@ import { UIActionButtonContext } from '@rocket.chat/apps-engine/definition/ui'; import { mockAppRoot } from '@rocket.chat/mock-providers'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook, waitFor } from '@testing-library/react'; import { useMarketPlaceMenu } from './useMarketPlaceMenu'; it('should return and empty array if the user does not have `manage-apps` and `access-marketplace` permission', () => { const { result } = renderHook(() => useMarketPlaceMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/apps/actionButtons', () => []) .build(), @@ -16,6 +17,7 @@ it('should return and empty array if the user does not have `manage-apps` and `a it('should return `explore` and `installed` items if the user has `access-marketplace` permission', () => { const { result } = renderHook(() => useMarketPlaceMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/apps/actionButtons', () => []) .withPermission('access-marketplace') @@ -37,6 +39,7 @@ it('should return `explore` and `installed` items if the user has `access-market it('should return `explore`, `installed` and `requested` items if the user has `manage-apps` permission', () => { const { result } = renderHook(() => useMarketPlaceMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/apps/actionButtons', () => []) .withEndpoint('GET', '/apps/app-request/stats', () => ({ @@ -69,7 +72,8 @@ it('should return `explore`, `installed` and `requested` items if the user has ` }); it('should return one action from the server with no conditions', async () => { - const { result, waitForValueToChange } = renderHook(() => useMarketPlaceMenu(), { + const { result } = renderHook(() => useMarketPlaceMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/apps/actionButtons', () => [ { @@ -101,18 +105,19 @@ it('should return one action from the server with no conditions', async () => { }), ); - await waitForValueToChange(() => result.current[0].items[3]); - - expect(result.current[0].items[3]).toEqual( - expect.objectContaining({ - id: 'APP_ID_ACTION_ID', - }), + await waitFor(() => + expect(result.current[0]?.items[3]).toEqual( + expect.objectContaining({ + id: 'APP_ID_ACTION_ID', + }), + ), ); }); describe('Marketplace menu with role conditions', () => { it('should return the action if the user has admin role', async () => { - const { result, waitForValueToChange } = renderHook(() => useMarketPlaceMenu(), { + const { result } = renderHook(() => useMarketPlaceMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/apps/actionButtons', () => [ { @@ -149,17 +154,18 @@ describe('Marketplace menu with role conditions', () => { }), ); - await waitForValueToChange(() => result.current[0].items[3]); - - expect(result.current[0].items[3]).toEqual( - expect.objectContaining({ - id: 'APP_ID_ACTION_ID', - }), + await waitFor(() => + expect(result.current[0]?.items[3]).toEqual( + expect.objectContaining({ + id: 'APP_ID_ACTION_ID', + }), + ), ); }); it('should return filter the action if the user doesn`t have admin role', async () => { const { result } = renderHook(() => useMarketPlaceMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/apps/actionButtons', () => [ { @@ -206,7 +212,8 @@ describe('Marketplace menu with role conditions', () => { describe('Marketplace menu with permission conditions', () => { it('should return the action if the user has manage-apps permission', async () => { - const { result, waitForValueToChange } = renderHook(() => useMarketPlaceMenu(), { + const { result } = renderHook(() => useMarketPlaceMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/apps/actionButtons', () => [ { @@ -241,17 +248,18 @@ describe('Marketplace menu with permission conditions', () => { }), ); - await waitForValueToChange(() => result.current[0].items[3]); - - expect(result.current[0].items[3]).toEqual( - expect.objectContaining({ - id: 'APP_ID_ACTION_ID', - }), + await waitFor(() => + expect(result.current[0].items[3]).toEqual( + expect.objectContaining({ + id: 'APP_ID_ACTION_ID', + }), + ), ); }); it('should return filter the action if the user doesn`t have `any` permission', async () => { const { result } = renderHook(() => useMarketPlaceMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/apps/actionButtons', () => [ { diff --git a/apps/meteor/client/NavBarV2/NavBarSettingsToolbar/hooks/useAdministrationMenu.spec.tsx b/apps/meteor/client/NavBarV2/NavBarSettingsToolbar/hooks/useAdministrationMenu.spec.tsx index 1315d1053392..ba100fe79783 100644 --- a/apps/meteor/client/NavBarV2/NavBarSettingsToolbar/hooks/useAdministrationMenu.spec.tsx +++ b/apps/meteor/client/NavBarV2/NavBarSettingsToolbar/hooks/useAdministrationMenu.spec.tsx @@ -1,10 +1,11 @@ import { mockAppRoot } from '@rocket.chat/mock-providers'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook, waitFor } from '@testing-library/react'; import { useAdministrationMenu } from './useAdministrationMenu'; it('should return omnichannel item if has `view-livechat-manager` permission ', async () => { - const { result, waitFor } = renderHook(() => useAdministrationMenu(), { + const { result } = renderHook(() => useAdministrationMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/v1/licenses.info', () => ({ // @ts-expect-error this is a mock @@ -19,17 +20,18 @@ it('should return omnichannel item if has `view-livechat-manager` permission ', .build(), }); - await waitFor(() => !!result.current.length); - - expect(result.current[0].items[0]).toEqual( - expect.objectContaining({ - id: 'omnichannel', - }), + await waitFor(() => + expect(result.current[0]?.items[0]).toEqual( + expect.objectContaining({ + id: 'omnichannel', + }), + ), ); }); it('should show administration item if has at least one admin permission', async () => { - const { result, waitFor } = renderHook(() => useAdministrationMenu(), { + const { result } = renderHook(() => useAdministrationMenu(), { + legacyRoot: true, wrapper: mockAppRoot() .withEndpoint('GET', '/v1/licenses.info', () => ({ // @ts-expect-error this is a mock @@ -44,11 +46,11 @@ it('should show administration item if has at least one admin permission', async .build(), }); - await waitFor(() => !!result.current.length); - - expect(result.current[0].items[0]).toEqual( - expect.objectContaining({ - id: 'workspace', - }), + await waitFor(() => + expect(result.current[0]?.items[0]).toEqual( + expect.objectContaining({ + id: 'workspace', + }), + ), ); }); diff --git a/apps/meteor/client/components/FilterByText.tsx b/apps/meteor/client/components/FilterByText.tsx index 1aeeb29a0a57..5c5a3d599e2f 100644 --- a/apps/meteor/client/components/FilterByText.tsx +++ b/apps/meteor/client/components/FilterByText.tsx @@ -1,26 +1,13 @@ -import { Box, Icon, TextInput, Button, Margins } from '@rocket.chat/fuselage'; +import { Box, Icon, TextInput, Margins } from '@rocket.chat/fuselage'; import { useAutoFocus, useMergedRefs } from '@rocket.chat/fuselage-hooks'; import { useTranslation } from '@rocket.chat/ui-contexts'; -import type { ReactNode, ChangeEvent, FormEvent } from 'react'; -import React, { forwardRef, memo, useCallback, useEffect, useState } from 'react'; +import type { ChangeEvent, FormEvent, HTMLAttributes } from 'react'; +import React, { forwardRef, memo, useCallback, useState } from 'react'; -type FilterByTextCommonProps = { - children?: ReactNode | undefined; - placeholder?: string; - onChange: (filter: { text: string }) => void; +type FilterByTextProps = { + onChange: (filter: string) => void; shouldAutoFocus?: boolean; -}; - -type FilterByTextPropsWithButton = FilterByTextCommonProps & { - displayButton: true; - textButton: string; - onButtonClick: () => void; -}; - -type FilterByTextProps = FilterByTextCommonProps | FilterByTextPropsWithButton; - -const isFilterByTextPropsWithButton = (props: any): props is FilterByTextPropsWithButton => - 'displayButton' in props && props.displayButton === true; +} & Omit, 'is' | 'onChange'>; const FilterByText = forwardRef(function FilterByText( { placeholder, onChange: setFilter, shouldAutoFocus = false, children, ...props }, @@ -31,13 +18,10 @@ const FilterByText = forwardRef(function Fi const autoFocusRef = useAutoFocus(shouldAutoFocus); const mergedRefs = useMergedRefs(ref, autoFocusRef); - const handleInputChange = useCallback((event: ChangeEvent) => { + const handleInputChange = (event: ChangeEvent) => { setText(event.currentTarget.value); - }, []); - - useEffect(() => { - setFilter({ text }); - }, [setFilter, text]); + setFilter(event.currentTarget.value); + }; const handleFormSubmit = useCallback((event: FormEvent) => { event.preventDefault(); @@ -47,6 +31,7 @@ const FilterByText = forwardRef(function Fi } @@ -57,13 +42,7 @@ const FilterByText = forwardRef(function Fi aria-label={placeholder ?? t('Search')} /> - {isFilterByTextPropsWithButton(props) ? ( - - ) : ( - children && {children} - )} + {children && {children}} ); }); diff --git a/apps/meteor/client/components/GenericMenu/GenericMenu.spec.tsx b/apps/meteor/client/components/GenericMenu/GenericMenu.spec.tsx index 99e62bac1a60..530bd1404dc7 100644 --- a/apps/meteor/client/components/GenericMenu/GenericMenu.spec.tsx +++ b/apps/meteor/client/components/GenericMenu/GenericMenu.spec.tsx @@ -1,4 +1,3 @@ -import '@testing-library/jest-dom'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; @@ -32,28 +31,28 @@ const sections = [regular, danger]; describe('Room Actions Menu', () => { it('should render kebab menu with the list content', async () => { - render(); + render(, { legacyRoot: true }); - userEvent.click(screen.getByRole('button')); + await userEvent.click(screen.getByRole('button')); expect(await screen.findByText('Edit')).toBeInTheDocument(); expect(await screen.findByText('Delete')).toBeInTheDocument(); }); it('should have two different sections, regular and danger', async () => { - render(); + render(, { legacyRoot: true }); - userEvent.click(screen.getByRole('button')); + await userEvent.click(screen.getByRole('button')); expect(screen.getAllByRole('presentation')).toHaveLength(2); expect(screen.getByRole('separator')).toBeInTheDocument(); }); it('should call the action when item clicked', async () => { - render(); + render(, { legacyRoot: true }); - userEvent.click(screen.getByRole('button')); - userEvent.click(screen.getAllByRole('menuitem')[0]); + await userEvent.click(screen.getByRole('button')); + await userEvent.click(screen.getAllByRole('menuitem')[0]); expect(mockedFunction).toHaveBeenCalled(); }); diff --git a/apps/meteor/client/components/GenericModal/GenericModal.spec.tsx b/apps/meteor/client/components/GenericModal/GenericModal.spec.tsx index 0ef7235729c4..b47b6abf7b00 100644 --- a/apps/meteor/client/components/GenericModal/GenericModal.spec.tsx +++ b/apps/meteor/client/components/GenericModal/GenericModal.spec.tsx @@ -1,6 +1,5 @@ import { useSetModal } from '@rocket.chat/ui-contexts'; -import { act, screen } from '@testing-library/react'; -import { renderHook } from '@testing-library/react-hooks'; +import { act, screen, renderHook } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import type { ReactElement } from 'react'; import React, { Suspense } from 'react'; @@ -8,12 +7,11 @@ import React, { Suspense } from 'react'; import ModalProviderWithRegion from '../../providers/ModalProvider/ModalProviderWithRegion'; import GenericModal from './GenericModal'; -import '@testing-library/jest-dom'; - const renderModal = (modalElement: ReactElement) => { const { result: { current: setModal }, } = renderHook(() => useSetModal(), { + legacyRoot: true, wrapper: ({ children }) => ( {children} @@ -34,11 +32,11 @@ describe('callbacks', () => { renderModal(); - expect(await screen.findByRole('heading', { name: 'Modal', exact: true })).toBeInTheDocument(); + expect(await screen.findByRole('heading', { name: 'Modal' })).toBeInTheDocument(); - userEvent.keyboard('{Escape}'); + await userEvent.keyboard('{Escape}'); - expect(screen.queryByRole('heading', { name: 'Modal', exact: true })).not.toBeInTheDocument(); + expect(screen.queryByRole('heading', { name: 'Modal' })).not.toBeInTheDocument(); expect(handleClose).toHaveBeenCalled(); }); @@ -49,9 +47,9 @@ describe('callbacks', () => { const { setModal } = renderModal(); - expect(await screen.findByRole('heading', { name: 'Modal', exact: true })).toBeInTheDocument(); + expect(await screen.findByRole('heading', { name: 'Modal' })).toBeInTheDocument(); - userEvent.click(screen.getByRole('button', { name: 'Ok', exact: true })); + await userEvent.click(screen.getByRole('button', { name: 'Ok' })); expect(handleConfirm).toHaveBeenCalled(); @@ -59,7 +57,7 @@ describe('callbacks', () => { setModal(null); }); - expect(screen.queryByRole('heading', { name: 'Modal', exact: true })).not.toBeInTheDocument(); + expect(screen.queryByRole('heading', { name: 'Modal' })).not.toBeInTheDocument(); expect(handleClose).not.toHaveBeenCalled(); }); @@ -70,9 +68,9 @@ describe('callbacks', () => { const { setModal } = renderModal(); - expect(await screen.findByRole('heading', { name: 'Modal', exact: true })).toBeInTheDocument(); + expect(await screen.findByRole('heading', { name: 'Modal' })).toBeInTheDocument(); - userEvent.click(screen.getByRole('button', { name: 'Cancel', exact: true })); + await userEvent.click(screen.getByRole('button', { name: 'Cancel' })); expect(handleCancel).toHaveBeenCalled(); @@ -80,7 +78,7 @@ describe('callbacks', () => { setModal(null); }); - expect(screen.queryByRole('heading', { name: 'Modal', exact: true })).not.toBeInTheDocument(); + expect(screen.queryByRole('heading', { name: 'Modal' })).not.toBeInTheDocument(); expect(handleClose).not.toHaveBeenCalled(); }); diff --git a/apps/meteor/client/components/InfoPanel/RetentionPolicyCallout.spec.tsx b/apps/meteor/client/components/InfoPanel/RetentionPolicyCallout.spec.tsx index 9a2e7eac4c45..8db42e8c649d 100644 --- a/apps/meteor/client/components/InfoPanel/RetentionPolicyCallout.spec.tsx +++ b/apps/meteor/client/components/InfoPanel/RetentionPolicyCallout.spec.tsx @@ -1,26 +1,30 @@ import { render, screen } from '@testing-library/react'; import React from 'react'; -import '@testing-library/jest-dom/extend-expect'; import { createRenteionPolicySettingsMock as createMock } from '../../../tests/mocks/client/mockRetentionPolicySettings'; import { createFakeRoom } from '../../../tests/mocks/data'; -import { setDate } from '../../../tests/mocks/mockDate'; import RetentionPolicyCallout from './RetentionPolicyCallout'; jest.useFakeTimers(); +beforeEach(() => { + jest.setSystemTime(new Date(2024, 5, 1, 0, 0, 0)); +}); + describe('RetentionPolicyCallout', () => { it('Should render callout if settings are valid', () => { - setDate(); const fakeRoom = createFakeRoom({ t: 'c' }); - render(, { wrapper: createMock({ appliesToChannels: true, TTLChannels: 60000 }) }); + render(, { + legacyRoot: true, + wrapper: createMock({ appliesToChannels: true, TTLChannels: 60000 }), + }); expect(screen.getByRole('alert')).toHaveTextContent('a minute June 1, 2024, 12:30 AM'); }); it('Should not render callout if settings are invalid', () => { - setDate(); const fakeRoom = createFakeRoom({ t: 'c' }); render(, { + legacyRoot: true, wrapper: createMock({ appliesToChannels: true, TTLChannels: 60000, advancedPrecisionCron: '* * * 12 *', advancedPrecision: true }), }); expect(screen.queryByRole('alert')).not.toBeInTheDocument(); diff --git a/apps/meteor/client/components/MarkdownText.tsx b/apps/meteor/client/components/MarkdownText.tsx index c9af942f6e1c..3670bcc7cec0 100644 --- a/apps/meteor/client/components/MarkdownText.tsx +++ b/apps/meteor/client/components/MarkdownText.tsx @@ -16,16 +16,21 @@ type MarkdownTextParams = { withTruncatedText: boolean; } & ComponentProps; +const walkTokens = (token: marked.Token) => { + const boldPattern = /^\*.*\*$|^\*.*|.*\*$/; + const italicPattern = /^__(?=\S)([\s\S]*?\S)__(?!_)|^_(?=\S)([\s\S]*?\S)_(?!_)/; + if (boldPattern.test(token.raw)) { + token.type = 'strong'; + } else if (italicPattern.test(token.raw)) { + token.type = 'em'; + } +}; + +marked.use({ walkTokens }); const documentRenderer = new marked.Renderer(); const inlineRenderer = new marked.Renderer(); const inlineWithoutBreaks = new marked.Renderer(); -marked.Lexer.rules.gfm = { - ...marked.Lexer.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; @@ -112,7 +117,6 @@ const MarkdownText = ({ const markedHtml = /inline/.test(variant) ? marked.parseInline(new Option(content).innerHTML, markedOptions) : marked.parse(new Option(content).innerHTML, markedOptions); - if (parseEmoji) { // We are using the old emoji parser here. This could come // with additional processing use, but is the workaround available right now. diff --git a/apps/meteor/client/components/Omnichannel/modals/TranscriptModal.spec.tsx b/apps/meteor/client/components/Omnichannel/modals/TranscriptModal.spec.tsx new file mode 100644 index 000000000000..87f7f70fbfbb --- /dev/null +++ b/apps/meteor/client/components/Omnichannel/modals/TranscriptModal.spec.tsx @@ -0,0 +1,48 @@ +import type { IOmnichannelRoom } from '@rocket.chat/core-typings'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import React from 'react'; + +import TranscriptModal from './TranscriptModal'; + +const room = { + open: true, + v: { token: '1234567890' }, + transcriptRequest: { + email: 'example@example.com', + subject: 'Transcript of livechat conversation', + }, +} as IOmnichannelRoom; + +const defaultProps = { + room, + email: 'test@example.com', + onRequest: () => null, + onSend: () => null, + onCancel: () => null, + onDiscard: () => null, +}; + +it('should show Undo request button when roomOpen is true and transcriptRequest exist', async () => { + const onDiscardMock = jest.fn(); + render(, { legacyRoot: true }); + + const undoRequestButton = await screen.findByText('Undo_request'); + await userEvent.click(undoRequestButton); + + expect(onDiscardMock).toHaveBeenCalled(); +}); + +it('should show Request button when roomOpen is true and transcriptRequest not exist', async () => { + render(, { legacyRoot: true }); + + const requestBtn = await screen.findByRole('button', { name: 'request-button' }); + expect(requestBtn).toBeInTheDocument(); +}); + +it('should show Send button when roomOpen is false', async () => { + render(, { legacyRoot: true }); + + const sendBtn = await screen.findByRole('button', { name: 'send-button' }); + expect(sendBtn).toBeInTheDocument(); +}); diff --git a/apps/meteor/client/components/Omnichannel/modals/TranscriptModal.tsx b/apps/meteor/client/components/Omnichannel/modals/TranscriptModal.tsx index 95bda1e89107..c06b6a190465 100644 --- a/apps/meteor/client/components/Omnichannel/modals/TranscriptModal.tsx +++ b/apps/meteor/client/components/Omnichannel/modals/TranscriptModal.tsx @@ -21,8 +21,7 @@ const TranscriptModal = ({ email: emailDefault = '', room, onRequest, onSend, on handleSubmit, setValue, setFocus, - watch, - formState: { errors, isValid, isSubmitting }, + formState: { errors, isSubmitting }, } = useForm({ defaultValues: { email: emailDefault || '', subject: t('Transcript_of_your_livechat_conversation') }, }); @@ -56,7 +55,7 @@ const TranscriptModal = ({ email: emailDefault = '', room, onRequest, onSend, on } }, [setValue, transcriptRequest]); - const canSubmit = isValid && Boolean(watch('subject')); + // const canSubmit = isValid && Boolean(watch('subject')); return ( } {...props}> @@ -103,12 +102,12 @@ const TranscriptModal = ({ email: emailDefault = '', room, onRequest, onSend, on )} {roomOpen && !transcriptRequest && ( - )} {!roomOpen && ( - )} diff --git a/apps/meteor/client/components/UserAutoComplete/UserAutoComplete.tsx b/apps/meteor/client/components/UserAutoComplete/UserAutoComplete.tsx index 1f12f29ee13b..3f61f421035c 100644 --- a/apps/meteor/client/components/UserAutoComplete/UserAutoComplete.tsx +++ b/apps/meteor/client/components/UserAutoComplete/UserAutoComplete.tsx @@ -1,4 +1,4 @@ -import { AutoComplete, Option, Box, Chip, Options } from '@rocket.chat/fuselage'; +import { AutoComplete, Option, Box, Chip } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; import { UserAvatar } from '@rocket.chat/ui-avatar'; import { useEndpoint } from '@rocket.chat/ui-contexts'; @@ -46,7 +46,7 @@ const UserAutoComplete = ({ value, onChange, ...props }: UserAutoCompleteProps): )} renderItem={({ value, label, ...props }): ReactElement => ( - - {((isSuccess && data?.monitors.length > 0) || queryHasChanged) && setText(text)} />} + {((isSuccess && data?.monitors.length > 0) || queryHasChanged) && } {isLoading && ( {headers} diff --git a/apps/meteor/client/omnichannel/priorities/PriorityEditForm.tsx b/apps/meteor/client/omnichannel/priorities/PriorityEditForm.tsx index d67f637a2b4e..592cd6b0f932 100644 --- a/apps/meteor/client/omnichannel/priorities/PriorityEditForm.tsx +++ b/apps/meteor/client/omnichannel/priorities/PriorityEditForm.tsx @@ -7,7 +7,7 @@ import type { ReactElement } from 'react'; import React, { useState } from 'react'; import { Controller, useForm } from 'react-hook-form'; -import StringSettingInput from '../../views/admin/settings/inputs/StringSettingInput'; +import StringSettingInput from '../../views/admin/settings/Setting/inputs/StringSettingInput'; export type PriorityFormData = { name: string; reset: boolean }; diff --git a/apps/meteor/client/omnichannel/slaPolicies/SlaTable.tsx b/apps/meteor/client/omnichannel/slaPolicies/SlaTable.tsx index d550118a5017..01b4bfe90374 100644 --- a/apps/meteor/client/omnichannel/slaPolicies/SlaTable.tsx +++ b/apps/meteor/client/omnichannel/slaPolicies/SlaTable.tsx @@ -84,7 +84,7 @@ const SlaTable = ({ reload }: { reload: MutableRefObject<() => void> }) => { return ( <> - {((isSuccess && data?.sla.length > 0) || queryHasChanged) && setFilter(text)} />} + {((isSuccess && data?.sla.length > 0) || queryHasChanged) && } {isLoading && ( {headers} diff --git a/apps/meteor/client/omnichannel/tags/TagsTable.tsx b/apps/meteor/client/omnichannel/tags/TagsTable.tsx index 3b9757134bed..a4b31cd4755c 100644 --- a/apps/meteor/client/omnichannel/tags/TagsTable.tsx +++ b/apps/meteor/client/omnichannel/tags/TagsTable.tsx @@ -70,7 +70,7 @@ const TagsTable = () => { return ( <> - {((isSuccess && data?.tags.length > 0) || queryHasChanged) && setFilter(text)} />} + {((isSuccess && data?.tags.length > 0) || queryHasChanged) && } {isLoading && ( {headers} diff --git a/apps/meteor/client/omnichannel/units/UnitsTable.tsx b/apps/meteor/client/omnichannel/units/UnitsTable.tsx index fe95bc90d8a2..93734acb8de0 100644 --- a/apps/meteor/client/omnichannel/units/UnitsTable.tsx +++ b/apps/meteor/client/omnichannel/units/UnitsTable.tsx @@ -69,7 +69,7 @@ const UnitsTable = () => { return ( <> - {((isSuccess && data?.units.length > 0) || queryHasChanged) && setFilter(text)} />} + {((isSuccess && data?.units.length > 0) || queryHasChanged) && } {isLoading && ( {headers} diff --git a/apps/meteor/client/providers/AvatarUrlProvider.tsx b/apps/meteor/client/providers/AvatarUrlProvider.tsx index 6cdc9012f714..b5a92c9117f2 100644 --- a/apps/meteor/client/providers/AvatarUrlProvider.tsx +++ b/apps/meteor/client/providers/AvatarUrlProvider.tsx @@ -11,13 +11,9 @@ type AvatarUrlProviderProps = { const AvatarUrlProvider = ({ children }: AvatarUrlProviderProps) => { const cdnAvatarUrl = String(useSetting('CDN_PREFIX') || ''); - const externalProviderUrl = String(useSetting('Accounts_AvatarExternalProviderUrl') || ''); const contextValue = useMemo( () => ({ getUserPathAvatar: ((): ((uid: string, etag?: string) => string) => { - if (externalProviderUrl) { - return (uid: string): string => externalProviderUrl.trim().replace(/\/+$/, '').replace('{username}', uid); - } if (cdnAvatarUrl) { return (uid: string, etag?: string): string => `${cdnAvatarUrl}/avatar/${uid}${etag ? `?etag=${etag}` : ''}`; } @@ -26,7 +22,7 @@ const AvatarUrlProvider = ({ children }: AvatarUrlProviderProps) => { getRoomPathAvatar: ({ type, ...room }: any): string => roomCoordinator.getRoomDirectives(type || room.t).getAvatarPath({ username: room._id, ...room }) || '', }), - [externalProviderUrl, cdnAvatarUrl], + [cdnAvatarUrl], ); return ; diff --git a/apps/meteor/tests/unit/client/providers/CallProvider/lib/parseStringToIceServers.spec.ts b/apps/meteor/client/providers/CallProvider/lib/parseStringToIceServers.spec.ts similarity index 93% rename from apps/meteor/tests/unit/client/providers/CallProvider/lib/parseStringToIceServers.spec.ts rename to apps/meteor/client/providers/CallProvider/lib/parseStringToIceServers.spec.ts index 1c134f71780c..b24564bfb165 100644 --- a/apps/meteor/tests/unit/client/providers/CallProvider/lib/parseStringToIceServers.spec.ts +++ b/apps/meteor/client/providers/CallProvider/lib/parseStringToIceServers.spec.ts @@ -1,7 +1,4 @@ -import { - parseStringToIceServers, - parseStringToIceServer, -} from '../../../../../../client/providers/CallProvider/lib/parseStringToIceServers'; +import { parseStringToIceServers, parseStringToIceServer } from './parseStringToIceServers'; describe('parseStringToIceServers', () => { describe('parseStringToIceServers', () => { diff --git a/apps/meteor/client/providers/ModalProvider/ModalProvider.spec.tsx b/apps/meteor/client/providers/ModalProvider/ModalProvider.spec.tsx index ea062c324807..fd82af587760 100644 --- a/apps/meteor/client/providers/ModalProvider/ModalProvider.spec.tsx +++ b/apps/meteor/client/providers/ModalProvider/ModalProvider.spec.tsx @@ -8,10 +8,10 @@ import { imperativeModal } from '../../lib/imperativeModal'; import ModalRegion from '../../views/modal/ModalRegion'; import ModalProvider from './ModalProvider'; import ModalProviderWithRegion from './ModalProviderWithRegion'; -import '@testing-library/jest-dom'; const renderWithSuspense = (ui: ReactElement) => render(ui, { + legacyRoot: true, wrapper: ({ children }) => {children}, }); diff --git a/apps/meteor/client/providers/RouterProvider.tsx b/apps/meteor/client/providers/RouterProvider.tsx index d7fb25a1ed31..590c5f20da57 100644 --- a/apps/meteor/client/providers/RouterProvider.tsx +++ b/apps/meteor/client/providers/RouterProvider.tsx @@ -1,4 +1,5 @@ import type { RoomType, RoomRouteData } from '@rocket.chat/core-typings'; +import { RouterContext } from '@rocket.chat/ui-contexts'; import type { RouterContextValue, RouteName, @@ -7,9 +8,8 @@ import type { SearchParameters, To, RouteObject, + LocationSearch, } from '@rocket.chat/ui-contexts'; -import { RouterContext } from '@rocket.chat/ui-contexts'; -import type { LocationSearch } from '@rocket.chat/ui-contexts/src/RouterContext'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Tracker } from 'meteor/tracker'; import type { ReactNode } from 'react'; diff --git a/apps/meteor/client/providers/ServerProvider.tsx b/apps/meteor/client/providers/ServerProvider.tsx index 53ac92287f78..7bf442671f08 100644 --- a/apps/meteor/client/providers/ServerProvider.tsx +++ b/apps/meteor/client/providers/ServerProvider.tsx @@ -1,14 +1,14 @@ import type { Serialized } from '@rocket.chat/core-typings'; -import type { Method, PathFor, OperationParams, OperationResult, UrlParams, PathPattern } from '@rocket.chat/rest-typings'; import type { ServerMethodName, ServerMethodParameters, ServerMethodReturn, StreamerCallbackArgs, - UploadResult, StreamNames, StreamKeys, -} from '@rocket.chat/ui-contexts'; +} from '@rocket.chat/ddp-client'; +import type { Method, PathFor, OperationParams, OperationResult, UrlParams, PathPattern } from '@rocket.chat/rest-typings'; +import type { UploadResult } from '@rocket.chat/ui-contexts'; import { ServerContext } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { compile } from 'path-to-regexp'; diff --git a/apps/meteor/client/sidebar/footer/SidebarFooterDefault.tsx b/apps/meteor/client/sidebar/footer/SidebarFooterDefault.tsx index fbf987fa78af..3d1c17dcebbe 100644 --- a/apps/meteor/client/sidebar/footer/SidebarFooterDefault.tsx +++ b/apps/meteor/client/sidebar/footer/SidebarFooterDefault.tsx @@ -1,7 +1,7 @@ import { css } from '@rocket.chat/css-in-js'; import { Box, SidebarDivider, Palette, SidebarFooter as Footer } from '@rocket.chat/fuselage'; import { useSetting } from '@rocket.chat/ui-contexts'; -import { useThemeMode } from '@rocket.chat/ui-theming/src/hooks/useThemeMode'; +import { useThemeMode } from '@rocket.chat/ui-theming'; import type { ReactElement } from 'react'; import React from 'react'; diff --git a/apps/meteor/client/sidebar/header/CreateChannel/CreateChannelModal.tsx b/apps/meteor/client/sidebar/header/CreateChannel/CreateChannelModal.tsx index c45d300dc4c7..27ad314b2ab8 100644 --- a/apps/meteor/client/sidebar/header/CreateChannel/CreateChannelModal.tsx +++ b/apps/meteor/client/sidebar/header/CreateChannel/CreateChannelModal.tsx @@ -12,6 +12,8 @@ import { FieldError, FieldHint, FieldDescription, + Accordion, + AccordionItem, } from '@rocket.chat/fuselage'; import { useUniqueId } from '@rocket.chat/fuselage-hooks'; import type { TranslationKey } from '@rocket.chat/ui-contexts'; @@ -210,7 +212,7 @@ const CreateChannelModal = ({ teamId = '', onClose, reload }: CreateChannelModal - + {t('Name')} @@ -276,90 +278,99 @@ const CreateChannelModal = ({ teamId = '', onClose, reload }: CreateChannelModal {isPrivate ? t('People_can_only_join_by_being_invited') : t('Anyone_can_access')} - - - {t('Federation_Matrix_Federated')} - ( - + + + + + {t('Security_and_permissions')} + + + + {t('Federation_Matrix_Federated')} + ( + + )} /> - )} - /> - - {t(getFederationHintKey(federatedModule, federationEnabled))} - - - - {t('Encrypted')} - ( - + {t(getFederationHintKey(federatedModule, federationEnabled))} + + + + {t('Encrypted')} + ( + + )} /> - )} - /> - - {getEncryptedHint({ isPrivate, broadcast, encrypted })} - - - - {t('Read_only')} - ( - + {getEncryptedHint({ isPrivate, broadcast, encrypted })} + + + + {t('Read_only')} + ( + + )} /> - )} - /> - - - {readOnly ? t('Read_only_field_hint_enabled', { roomType: 'channel' }) : t('Anyone_can_send_new_messages')} - - - - - {t('Broadcast')} - ( - + + {readOnly ? t('Read_only_field_hint_enabled', { roomType: 'channel' }) : t('Anyone_can_send_new_messages')} + + + + + {t('Broadcast')} + ( + + )} /> - )} - /> - - {broadcast && {t('Broadcast_hint_enabled', { roomType: 'channel' })}} - - + + {broadcast && {t('Broadcast_hint_enabled', { roomType: 'channel' })}} + + + + diff --git a/apps/meteor/client/sidebar/header/CreateTeam/CreateTeamModal.tsx b/apps/meteor/client/sidebar/header/CreateTeam/CreateTeamModal.tsx index b56bb003aa9e..ad1abdcbf399 100644 --- a/apps/meteor/client/sidebar/header/CreateTeam/CreateTeamModal.tsx +++ b/apps/meteor/client/sidebar/header/CreateTeam/CreateTeamModal.tsx @@ -12,6 +12,8 @@ import { FieldError, FieldDescription, FieldHint, + Accordion, + AccordionItem, } from '@rocket.chat/fuselage'; import { useUniqueId } from '@rocket.chat/fuselage-hooks'; import { @@ -169,7 +171,7 @@ const CreateTeamModal = ({ onClose }: { onClose: () => void }): ReactElement => {t('Teams_new_description')} - + {t('Teams_New_Name_Label')} @@ -229,62 +231,77 @@ const CreateTeamModal = ({ onClose }: { onClose: () => void }): ReactElement => {isPrivate ? t('People_can_only_join_by_being_invited') : t('Anyone_can_access')} - - - {t('Teams_New_Read_only_Label')} - ( - + + + + + {t('Security_and_permissions')} + + + + {t('Teams_New_Encrypted_Label')} + ( + + )} /> - )} - /> - - - {readOnly ? t('Read_only_field_hint_enabled', { roomType: 'team' }) : t('Anyone_can_send_new_messages')} - - - - - {t('Teams_New_Encrypted_Label')} - ( - + {getEncryptedHint({ isPrivate, broadcast, encrypted })} + + + + {t('Teams_New_Read_only_Label')} + ( + + )} /> - )} - /> - - {getEncryptedHint({ isPrivate, broadcast, encrypted })} - - - - {t('Teams_New_Broadcast_Label')} - ( - - )} - /> - - {broadcast && {t('Teams_New_Broadcast_Description')}} - - + + + {readOnly ? t('Read_only_field_hint_enabled', { roomType: 'team' }) : t('Anyone_can_send_new_messages')} + + + + + {t('Teams_New_Broadcast_Label')} + ( + + )} + /> + + {broadcast && {t('Teams_New_Broadcast_Description')}} + + + + diff --git a/apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomList.tsx b/apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomList.tsx index b4ddbf32419d..eae8a91015a8 100644 --- a/apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomList.tsx +++ b/apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomList.tsx @@ -28,9 +28,8 @@ const FederatedRoomList = ({ serverName, roomName, count }: FederatedRoomListPro const { mutate: onClickJoin, isLoading: isLoadingMutation } = useMutation( ['federation/joinExternalPublicRoom'], - async ({ id, pageToken }: IFederationPublicRooms) => { - return joinExternalPublicRoom({ externalRoomId: id as `!${string}:${string}`, roomName, pageToken }); - }, + async ({ id, pageToken }: IFederationPublicRooms) => + joinExternalPublicRoom({ externalRoomId: id as `!${string}:${string}`, roomName, pageToken }), { onSuccess: (_, data) => { dispatchToastMessage({ diff --git a/apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomListItem.tsx b/apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomListItem.tsx index dfaa79ed44de..01cb22c2e1c5 100644 --- a/apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomListItem.tsx +++ b/apps/meteor/client/sidebar/header/MatrixFederationSearch/FederatedRoomListItem.tsx @@ -1,5 +1,6 @@ import { css } from '@rocket.chat/css-in-js'; import { Box, Button, Icon } from '@rocket.chat/fuselage'; +import { useUniqueId } from '@rocket.chat/fuselage-hooks'; import type { IFederationPublicRooms } from '@rocket.chat/rest-typings'; import { useTranslation } from '@rocket.chat/ui-contexts'; import React from 'react'; @@ -23,11 +24,12 @@ const FederatedRoomListItem = ({ disabled, }: FederatedRoomListItemProps) => { const t = useTranslation(); + const nameId = useUniqueId(); return ( - + - + {name} {canJoin && ( diff --git a/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationManageServerModal.tsx b/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationManageServerModal.tsx index e3c953dcb950..6909a2cacae0 100644 --- a/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationManageServerModal.tsx +++ b/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationManageServerModal.tsx @@ -1,4 +1,5 @@ -import { Divider, Modal, ButtonGroup, Button, Field, TextInput, FieldLabel, FieldRow, FieldError, FieldHint } from '@rocket.chat/fuselage'; +import { Divider, Modal, ButtonGroup, Button, Field, FieldLabel, FieldRow, FieldError, FieldHint, TextInput } from '@rocket.chat/fuselage'; +import { useUniqueId } from '@rocket.chat/fuselage-hooks'; import type { TranslationKey } from '@rocket.chat/ui-contexts'; import { useSetModal, useTranslation, useEndpoint, useToastMessageDispatch } from '@rocket.chat/ui-contexts'; import { useMutation, useQueryClient } from '@tanstack/react-query'; @@ -55,17 +56,21 @@ const MatrixFederationAddServerModal = ({ onClickClose }: MatrixFederationAddSer const { data, isLoading: isLoadingServerList } = useMatrixServerList(); + const titleId = useUniqueId(); + const serverNameId = useUniqueId(); + return ( - + - {t('Manage_servers')} + {t('Manage_servers')} - {t('Server_name')} + {t('Server_name')} ) => { @@ -76,7 +81,7 @@ const MatrixFederationAddServerModal = ({ onClickClose }: MatrixFederationAddSer }} mie={4} /> - diff --git a/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationRemoveServerList.tsx b/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationRemoveServerList.tsx index 361950cd39c9..88867313a5bc 100644 --- a/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationRemoveServerList.tsx +++ b/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationRemoveServerList.tsx @@ -1,5 +1,5 @@ import { css } from '@rocket.chat/css-in-js'; -import { Box, Option, Icon } from '@rocket.chat/fuselage'; +import { Box, Option, IconButton } from '@rocket.chat/fuselage'; import { useTranslation, useEndpoint } from '@rocket.chat/ui-contexts'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import React from 'react'; @@ -44,11 +44,13 @@ const MatrixFederationRemoveServerList = ({ servers }: MatrixFederationRemoveSer {servers.map(({ name, default: isDefault }) => ( diff --git a/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearch.spec.tsx b/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearch.spec.tsx new file mode 100644 index 000000000000..5072a1310228 --- /dev/null +++ b/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearch.spec.tsx @@ -0,0 +1,154 @@ +import { mockAppRoot } from '@rocket.chat/mock-providers'; +import { render, screen, within } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import React from 'react'; +import { VirtuosoMockContext } from 'react-virtuoso'; + +import MatrixFederationSearch from './MatrixFederationSearch'; + +jest.mock('../../../lib/rooms/roomCoordinator', () => ({ + roomCoordinator: {}, +})); + +const renderMatrixFederationSearch = ( + serverList = [ + { name: `server-1`, default: true, local: false }, + { name: `server-2`, default: false, local: false }, + { name: `server-3`, default: false, local: false }, + ], +) => { + return render(<>, { + legacyRoot: true, + wrapper: mockAppRoot() + .withEndpoint('GET', '/v1/federation/listServersByUser', () => ({ + servers: serverList, + })) + .withEndpoint('GET', '/v1/federation/searchPublicRooms', ({ serverName, roomName, count }) => ({ + rooms: Array.from({ length: count || 100 }, (_, index) => ({ + id: `Matrix${index}`, + name: `${roomName || 'Matrix'}${index + 1}`, + canJoin: true, + canonicalAlias: `#${serverName}:matrix.org`, + joinedMembers: 44461, + topic: + 'The Official Matrix HQ - chat about Matrix here! | https://matrix.org | https://spec.matrix.org | To support Matrix.org development: https://patreon.com/matrixdotorg | Code of Conduct: https://matrix.org/legal/code-of-conduct/ | This is an English speaking room | The Official Matrix HQ - chat about Matrix here! | https://matrix.org | https://spec.matrix.org | To support Matrix.org development: https://patreon.com/matrixdotorg | Code of Conduct: https://matrix.org/legal/code-of-conduct/ | This is an English speaking room The Official Matrix HQ - chat about Matrix here! | https://matrix.org | https://spec.matrix.org | To support Matrix.org development: https://patreon.com/matrixdotorg | Code of Conduct: https://matrix.org/legal/code-of-conduct/ | This is an English speaking room | The Official Matrix HQ - chat about Matrix here! | https://matrix.org | https://spec.matrix.org | To support Matrix.org development: https://patreon.com/matrixdotorg | Code of Conduct: https://matrix.org/legal/code-of-conduct/ | This is an English speaking room', + })), + count: 1, + total: 73080, + nextPageToken: 'g6FtzZa3oXK+IUpkemFiTlVQUFh6bENKQWhFbDpmYWJyaWMucHVioWTD', + })) + .withEndpoint('POST', '/v1/federation/joinExternalPublicRoom', () => null) + .withEndpoint('POST', '/v1/federation/addServerByUser', ({ serverName }) => { + serverList.push({ name: serverName, default: false, local: false }); + return null; + }) + .withEndpoint('POST', '/v1/federation/removeServerByUser', ({ serverName }) => { + serverList = serverList.filter((server) => server.name !== serverName); + return null; + }) + .withOpenModal() + .wrap((children) => ( + {children} + )) + .build(), + }); +}; + +const openManageServers = async () => { + const manageServerLink = await screen.findByRole('button', { name: 'Manage_server_list' }); + await userEvent.click(manageServerLink); +}; + +it('should render Federated Room search modal', async () => { + renderMatrixFederationSearch(); + + expect(await screen.findByRole('dialog', { name: 'Federation_Federated_room_search' })).toBeInTheDocument(); + + expect(await screen.findByRole('listitem', { name: 'Matrix1' }, { timeout: 2000 })).toBeInTheDocument(); // TODO: remove flakyness + expect(await screen.findByRole('listitem', { name: 'Matrix2' })).toBeInTheDocument(); +}); + +it('should search for rooms', async () => { + renderMatrixFederationSearch(); + + const input = await screen.findByRole('searchbox', { name: 'Search_rooms' }); + expect(input).toBeInTheDocument(); + await userEvent.type(input, 'NotMatrix'); + + expect(await screen.findByRole('listitem', { name: 'NotMatrix1' }, { timeout: 2000 })).toBeInTheDocument(); // TODO: remove flakyness + expect(await screen.findByRole('listitem', { name: 'NotMatrix2' })).toBeInTheDocument(); +}); + +it('should close the modal when joining a room', async () => { + renderMatrixFederationSearch(); + + const firstListItem = await screen.findByRole('listitem', { name: 'Matrix1' }); + const joinButton = await within(firstListItem).findByRole('button', { name: 'Join' }); + + await userEvent.click(joinButton); + + expect(screen.queryByRole('dialog')).not.toBeInTheDocument(); +}); + +// TODO: should be a unit test for `MatrixFederationAddServerModal` +describe('server management', () => { + it('should open the manage server modal', async () => { + renderMatrixFederationSearch(); + + await openManageServers(); + + expect(await screen.findByRole('dialog', { name: 'Manage_servers' })).toBeInTheDocument(); + + expect(await screen.findByText('server-1')).toBeInTheDocument(); + expect(await screen.findByText('server-2')).toBeInTheDocument(); + expect(await screen.findByText('server-3')).toBeInTheDocument(); + }); + + it('should return to the Search modal when clicking cancel', async () => { + renderMatrixFederationSearch(); + + await openManageServers(); + + const cancelButton = await screen.findByRole('button', { name: 'Cancel' }); + await userEvent.click(cancelButton); + + expect(await screen.findByRole('dialog', { name: 'Federation_Federated_room_search' })).toBeInTheDocument(); + }); + + it('should return to the Search modal with the new server selected', async () => { + renderMatrixFederationSearch(); + + await openManageServers(); + + const input = await screen.findByRole('textbox', { name: 'Server_name' }); + await userEvent.type(input, 'server-4'); + + const addButton = await screen.findByRole('button', { name: 'Add' }); + await userEvent.click(addButton); + + expect(await screen.findByRole('dialog', { name: 'Federation_Federated_room_search' })).toBeInTheDocument(); + expect(await screen.findByRole('button', { name: 'server-4' })).toBeInTheDocument(); + }); + + it('should remove servers from the list', async () => { + renderMatrixFederationSearch([ + { name: `server-1`, default: true, local: false }, + { name: `server-2`, default: false, local: false }, + { name: `server-3`, default: false, local: false }, + { name: `server-4`, default: false, local: false }, + ]); + + await openManageServers(); + + const defaultItem = await screen.findByRole('listitem', { name: 'server-1' }); + await userEvent.hover(defaultItem); + expect(within(defaultItem).queryByRole('button', { name: 'Remove' })).not.toBeInTheDocument(); + + const lastItem = await screen.findByRole('listitem', { name: 'server-4' }); + await userEvent.hover(lastItem); + const removeButton = await within(lastItem).findByRole('button', { name: 'Remove' }); + await userEvent.click(removeButton); + + expect(screen.queryByRole('listitem', { name: 'server-4' })).not.toBeInTheDocument(); + }); +}); diff --git a/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearch.tsx b/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearch.tsx index f3dc779d28c1..741eadf7bc7e 100644 --- a/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearch.tsx +++ b/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearch.tsx @@ -1,4 +1,5 @@ import { Modal, Skeleton } from '@rocket.chat/fuselage'; +import { useUniqueId } from '@rocket.chat/fuselage-hooks'; import { useTranslation } from '@rocket.chat/ui-contexts'; import React from 'react'; @@ -13,11 +14,12 @@ type MatrixFederationSearchProps = { const MatrixFederationSearch = ({ onClose, defaultSelectedServer }: MatrixFederationSearchProps) => { const t = useTranslation(); const { data, isLoading } = useMatrixServerList(); + const titleId = useUniqueId(); return ( - + - {t('Federation_Federated_room_search')} + {t('Federation_Federated_room_search')} diff --git a/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearchModalContent.tsx b/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearchModalContent.tsx index ec6396a83440..878a019fc059 100644 --- a/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearchModalContent.tsx +++ b/apps/meteor/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearchModalContent.tsx @@ -1,5 +1,5 @@ import type { SelectOption } from '@rocket.chat/fuselage'; -import { Box, Select, TextInput } from '@rocket.chat/fuselage'; +import { Box, SearchInput, Select } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; import { useSetModal, useTranslation } from '@rocket.chat/ui-contexts'; import type { FormEvent } from 'react'; @@ -33,7 +33,7 @@ const MatrixFederationSearchModalContent = ({ defaultSelectedServer, servers }: const t = useTranslation(); - const serverOptions = useMemo>(() => servers.map((server): SelectOption => [server.name, server.name]), [servers]); + const serverOptions = useMemo(() => servers.map((server): SelectOption => [server.name, server.name]), [servers]); const manageServers = useCallback(() => { setModal( @@ -47,7 +47,8 @@ const MatrixFederationSearchModalContent = ({ defaultSelectedServer, servers }: handleSort(value as WebdavSortOptions)} options={options} /> )} diff --git a/apps/meteor/client/views/root/MainLayout/MainLayoutStyleTags.spec.tsx b/apps/meteor/client/views/root/MainLayout/MainLayoutStyleTags.spec.tsx index 535ed378cec3..ad7159ab7d8e 100644 --- a/apps/meteor/client/views/root/MainLayout/MainLayoutStyleTags.spec.tsx +++ b/apps/meteor/client/views/root/MainLayout/MainLayoutStyleTags.spec.tsx @@ -7,6 +7,7 @@ import { MainLayoutStyleTags } from './MainLayoutStyleTags'; describe('MainLayout style tags', () => { it('should create the Light theme style tag', () => { render(, { + legacyRoot: true, wrapper: mockAppRoot().withUserPreference('themeAppearence', 'light').build(), }); const tagLight = queryByAttribute('id', document.head, 'main-palette-light'); @@ -15,6 +16,7 @@ describe('MainLayout style tags', () => { it('should create the Dark theme style tag', () => { render(, { + legacyRoot: true, wrapper: mockAppRoot().withUserPreference('themeAppearence', 'dark').build(), }); const tagDark = queryByAttribute('id', document.head, 'main-palette-dark'); @@ -23,9 +25,28 @@ describe('MainLayout style tags', () => { it('should create the codeBlock style tag when in dark mode', () => { render(, { + legacyRoot: true, wrapper: mockAppRoot().withUserPreference('themeAppearence', 'dark').build(), }); const style = queryByAttribute('id', document.head, 'codeBlock-palette'); expect(style).not.toBeNull(); }); }); + +it('should create the Dark theme style tag', () => { + render(, { + legacyRoot: true, + wrapper: mockAppRoot().withUserPreference('themeAppearence', 'dark').build(), + }); + const tagDark = queryByAttribute('id', document.head, 'main-palette-dark'); + expect(tagDark).not.toBeNull(); +}); + +it('should create the codeBlock style tag when in dark mode', () => { + render(, { + legacyRoot: true, + wrapper: mockAppRoot().withUserPreference('themeAppearence', 'dark').build(), + }); + const style = queryByAttribute('id', document.head, 'codeBlock-palette'); + expect(style).not.toBeNull(); +}); diff --git a/apps/meteor/client/views/root/MainLayout/MainLayoutStyleTags.tsx b/apps/meteor/client/views/root/MainLayout/MainLayoutStyleTags.tsx index 662ee415fa26..c46111c5bcc4 100644 --- a/apps/meteor/client/views/root/MainLayout/MainLayoutStyleTags.tsx +++ b/apps/meteor/client/views/root/MainLayout/MainLayoutStyleTags.tsx @@ -1,5 +1,5 @@ import { PaletteStyleTag } from '@rocket.chat/fuselage'; -import { useThemeMode } from '@rocket.chat/ui-theming/src/hooks/useThemeMode'; +import { useThemeMode } from '@rocket.chat/ui-theming'; import React from 'react'; import { codeBlock } from '../lib/codeBlockStyles'; diff --git a/apps/meteor/client/views/root/SAMLLoginRoute.spec.tsx b/apps/meteor/client/views/root/SAMLLoginRoute.spec.tsx new file mode 100644 index 000000000000..e642e7851707 --- /dev/null +++ b/apps/meteor/client/views/root/SAMLLoginRoute.spec.tsx @@ -0,0 +1,107 @@ +import { MockedServerContext, MockedUserContext } from '@rocket.chat/mock-providers'; +import { render } from '@testing-library/react'; +import { Meteor } from 'meteor/meteor'; +import React from 'react'; + +import RouterContextMock from '../../../tests/mocks/client/RouterContextMock'; +import SAMLLoginRoute from './SAMLLoginRoute'; + +const navigateStub = jest.fn(); + +beforeEach(() => { + jest.clearAllMocks(); + navigateStub.mockClear(); + (Meteor.loginWithSamlToken as jest.Mock).mockClear(); +}); + +it('should redirect to /home', async () => { + render( + + + + + + + , + { legacyRoot: true }, + ); + + expect(navigateStub).toHaveBeenCalledTimes(1); + expect(navigateStub).toHaveBeenLastCalledWith(expect.objectContaining({ pathname: '/home' }), expect.anything()); +}); + +it('should redirect to /home when userId is not null', async () => { + render( + + + + + + + , + { legacyRoot: true }, + ); + + expect(navigateStub).toHaveBeenCalledTimes(1); + expect(navigateStub).toHaveBeenLastCalledWith(expect.objectContaining({ pathname: '/home' }), expect.anything()); +}); + +it('should redirect to /home when userId is null and redirectUrl is not within the workspace domain', async () => { + render( + + + + + , + { legacyRoot: true }, + ); + + expect(navigateStub).toHaveBeenCalledTimes(1); + expect(navigateStub).toHaveBeenLastCalledWith(expect.objectContaining({ pathname: '/home' }), expect.anything()); +}); + +it('should redirect to the provided redirectUrl when userId is null and redirectUrl is within the workspace domain', async () => { + render( + + + + + , + { legacyRoot: true }, + ); + + expect(navigateStub).toHaveBeenCalledTimes(1); + expect(navigateStub).toHaveBeenLastCalledWith(expect.objectContaining({ pathname: '/invite/test' }), expect.anything()); +}); + +it('should call loginWithSamlToken when component is mounted', async () => { + render( + + + + + , + { legacyRoot: true }, + ); + + expect(Meteor.loginWithSamlToken).toHaveBeenCalledTimes(1); + expect(Meteor.loginWithSamlToken).toHaveBeenLastCalledWith(undefined, expect.any(Function)); +}); + +it('should call loginWithSamlToken with the token when it is present', async () => { + render( + + + + + , + { legacyRoot: true }, + ); + + expect(Meteor.loginWithSamlToken).toHaveBeenCalledTimes(1); + expect(Meteor.loginWithSamlToken).toHaveBeenLastCalledWith('testToken', expect.any(Function)); +}); diff --git a/apps/meteor/client/views/root/SAMLLoginRoute.tsx b/apps/meteor/client/views/root/SAMLLoginRoute.tsx index 61ceb82a5ee7..2e12b036a4b9 100644 --- a/apps/meteor/client/views/root/SAMLLoginRoute.tsx +++ b/apps/meteor/client/views/root/SAMLLoginRoute.tsx @@ -1,5 +1,5 @@ import type { LocationPathname } from '@rocket.chat/ui-contexts'; -import { useRouter, useToastMessageDispatch, useUserId, useAbsoluteUrl } from '@rocket.chat/ui-contexts'; +import { useRouter, useToastMessageDispatch, useAbsoluteUrl } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { useEffect } from 'react'; @@ -38,20 +38,6 @@ const SAMLLoginRoute = () => { }); }, [dispatchToastMessage, rootUrl, router]); - const userId = useUserId(); - useEffect(() => { - if (!userId) { - return; - } - - router.navigate( - { - pathname: '/home', - }, - { replace: true }, - ); - }, [userId, router]); - return null; }; diff --git a/apps/meteor/client/views/teams/contextualBar/channels/AddExistingModal/RoomsAvailableForTeamsAutoComplete.tsx b/apps/meteor/client/views/teams/contextualBar/channels/AddExistingModal/RoomsAvailableForTeamsAutoComplete.tsx index a172869205de..238e3e5ee1ce 100644 --- a/apps/meteor/client/views/teams/contextualBar/channels/AddExistingModal/RoomsAvailableForTeamsAutoComplete.tsx +++ b/apps/meteor/client/views/teams/contextualBar/channels/AddExistingModal/RoomsAvailableForTeamsAutoComplete.tsx @@ -1,4 +1,4 @@ -import { AutoComplete, Box, Option, Options, Chip } from '@rocket.chat/fuselage'; +import { AutoComplete, Box, Option, Chip } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; import { RoomAvatar } from '@rocket.chat/ui-avatar'; import { useEndpoint } from '@rocket.chat/ui-contexts'; @@ -58,7 +58,7 @@ const RoomsAvailableForTeamsAutoComplete = ({ value, onChange, ...props }: Rooms key={value} {...props} label={label.name} - avatar={} + avatar={} /> )} options={options} diff --git a/apps/meteor/definition/externals/meteor/meteor.d.ts b/apps/meteor/definition/externals/meteor/meteor.d.ts index 8aed1992c0cf..992595dc07bb 100644 --- a/apps/meteor/definition/externals/meteor/meteor.d.ts +++ b/apps/meteor/definition/externals/meteor/meteor.d.ts @@ -1,5 +1,5 @@ import 'meteor/meteor'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import type { IStreamerConstructor, IStreamer } from 'meteor/rocketchat:streamer'; type StringifyBuffers = { diff --git a/apps/meteor/ee/app/canned-responses/server/methods/removeCannedResponse.ts b/apps/meteor/ee/app/canned-responses/server/methods/removeCannedResponse.ts index 4185cf6356f5..dc0ab665063c 100644 --- a/apps/meteor/ee/app/canned-responses/server/methods/removeCannedResponse.ts +++ b/apps/meteor/ee/app/canned-responses/server/methods/removeCannedResponse.ts @@ -1,12 +1,12 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { CannedResponse } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import notifications from '../../../../../app/notifications/server/lib/Notifications'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { removeCannedResponse(_id: string): Promise; diff --git a/apps/meteor/ee/app/canned-responses/server/methods/saveCannedResponse.ts b/apps/meteor/ee/app/canned-responses/server/methods/saveCannedResponse.ts index 592ddaaf01da..96012a4367f1 100644 --- a/apps/meteor/ee/app/canned-responses/server/methods/saveCannedResponse.ts +++ b/apps/meteor/ee/app/canned-responses/server/methods/saveCannedResponse.ts @@ -1,13 +1,13 @@ import type { IOmnichannelCannedResponse, ILivechatDepartment } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatDepartment, CannedResponse, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import notifications from '../../../../../app/notifications/server/lib/Notifications'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { saveCannedResponse( diff --git a/apps/meteor/ee/app/license/server/methods.ts b/apps/meteor/ee/app/license/server/methods.ts index dbdfe7aea68c..3e0bcca67eb4 100644 --- a/apps/meteor/ee/app/license/server/methods.ts +++ b/apps/meteor/ee/app/license/server/methods.ts @@ -1,10 +1,10 @@ import { type ILicenseTag, type LicenseModule } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { License } from '@rocket.chat/license'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'license:hasLicense'(feature: string): boolean; diff --git a/apps/meteor/ee/app/livechat-enterprise/server/hooks/beforeNewRoom.ts b/apps/meteor/ee/app/livechat-enterprise/server/hooks/beforeNewRoom.ts index 35219fc6e03b..4b0db6814bf2 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/hooks/beforeNewRoom.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/hooks/beforeNewRoom.ts @@ -2,6 +2,7 @@ import { OmnichannelServiceLevelAgreements } from '@rocket.chat/models'; import { Meteor } from 'meteor/meteor'; import { callbacks } from '../../../../../lib/callbacks'; +import { isPlainObject } from '../../../../../lib/utils/isPlainObject'; callbacks.add( 'livechat.beforeRoom', @@ -10,9 +11,11 @@ callbacks.add( return roomInfo; } - const { sla: searchTerm } = extraData; + const { sla: searchTerm, customFields } = extraData; + const roomInfoWithExtraData = { ...roomInfo, ...(isPlainObject(customFields) && { customFields }) }; + if (!searchTerm) { - return roomInfo; + return roomInfoWithExtraData; } const sla = await OmnichannelServiceLevelAgreements.findOneByIdOrName(searchTerm); @@ -23,7 +26,7 @@ callbacks.add( } const { _id: slaId } = sla; - return { ...roomInfo, slaId }; + return { ...roomInfoWithExtraData, slaId }; }, callbacks.priority.MEDIUM, 'livechat-before-new-room', diff --git a/apps/meteor/ee/app/livechat-enterprise/server/hooks/resumeOnHold.ts b/apps/meteor/ee/app/livechat-enterprise/server/hooks/resumeOnHold.ts index 8a04166e1b72..249f988c7684 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/hooks/resumeOnHold.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/hooks/resumeOnHold.ts @@ -1,6 +1,6 @@ import { OmnichannelEEService } from '@rocket.chat/core-services'; -import type { ILivechatVisitor, IMessage, IOmnichannelRoom, IRoom, IUser } from '@rocket.chat/core-typings'; -import { isEditedMessage, isOmnichannelRoom } from '@rocket.chat/core-typings'; +import type { ILivechatVisitor, IMessage, IOmnichannelRoom, IUser } from '@rocket.chat/core-typings'; +import { isMessageFromVisitor, isEditedMessage } from '@rocket.chat/core-typings'; import { LivechatRooms, LivechatVisitors, Users } from '@rocket.chat/models'; import { callbackLogger } from '../../../../../app/livechat/server/lib/logger'; @@ -16,7 +16,7 @@ const resumeOnHoldCommentAndUser = async (room: IOmnichannelRoom): Promise<{ com projection: { name: 1, username: 1 }, }); if (!visitor) { - callbackLogger.error(`[afterSaveMessage] Visitor Not found for room ${rid} while trying to resume on hold`); + callbackLogger.error(`[afterOmnichannelSaveMessage] Visitor Not found for room ${rid} while trying to resume on hold`); throw new Error('Visitor not found while trying to resume on hold'); } @@ -26,43 +26,46 @@ const resumeOnHoldCommentAndUser = async (room: IOmnichannelRoom): Promise<{ com const resumedBy = await Users.findOneById('rocket.cat'); if (!resumedBy) { - callbackLogger.error(`[afterSaveMessage] User Not found for room ${rid} while trying to resume on hold`); + callbackLogger.error(`[afterOmnichannelSaveMessage] User Not found for room ${rid} while trying to resume on hold`); throw new Error(`User not found while trying to resume on hold`); } return { comment: resumeChatComment, resumedBy }; }; -const handleAfterSaveMessage = async (message: IMessage, room: IRoom) => { - if (isEditedMessage(message) || message.t || !isOmnichannelRoom(room)) { - return message; - } +callbacks.add( + 'afterOmnichannelSaveMessage', + async (message: IMessage, { room }) => { + if (isEditedMessage(message) || message.t) { + return message; + } - const { _id: rid, v: roomVisitor } = room; + const { _id: rid, v: roomVisitor } = room; - if (!roomVisitor?._id) { - return message; - } - - // Need to read the room every time, the room object is not updated - const updatedRoom = await LivechatRooms.findOneById(rid); - if (!updatedRoom) { - return message; - } - - if (message.token && room.onHold) { - callbackLogger.debug(`[afterSaveMessage] Room ${rid} is on hold, resuming it now since visitor sent a message`); + if (!roomVisitor?._id) { + return message; + } - try { - const { comment: resumeChatComment, resumedBy } = await resumeOnHoldCommentAndUser(updatedRoom); - await OmnichannelEEService.resumeRoomOnHold(updatedRoom, resumeChatComment, resumedBy); - } catch (error) { - callbackLogger.error(`[afterSaveMessage] Error while resuming room ${rid} on hold: Error: `, error); + // Need to read the room every time, the room object is not updated + const updatedRoom = await LivechatRooms.findOneById(rid); + if (!updatedRoom) { return message; } - } - return message; -}; + if (isMessageFromVisitor(message) && room.onHold) { + callbackLogger.debug(`[afterOmnichannelSaveMessage] Room ${rid} is on hold, resuming it now since visitor sent a message`); + + try { + const { comment: resumeChatComment, resumedBy } = await resumeOnHoldCommentAndUser(updatedRoom); + await OmnichannelEEService.resumeRoomOnHold(updatedRoom, resumeChatComment, resumedBy); + } catch (error) { + callbackLogger.error(`[afterOmnichannelSaveMessage] Error while resuming room ${rid} on hold: Error: `, error); + return message; + } + } -callbacks.add('afterSaveMessage', handleAfterSaveMessage, callbacks.priority.HIGH, 'livechat-resume-on-hold'); + return message; + }, + callbacks.priority.HIGH, + 'livechat-resume-on-hold', +); diff --git a/apps/meteor/ee/app/livechat-enterprise/server/hooks/scheduleAutoTransfer.ts b/apps/meteor/ee/app/livechat-enterprise/server/hooks/scheduleAutoTransfer.ts index fdf980c311ab..c0f4b1b9da1d 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/hooks/scheduleAutoTransfer.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/hooks/scheduleAutoTransfer.ts @@ -1,5 +1,4 @@ -import type { IMessage, IOmnichannelRoom, IRoom } from '@rocket.chat/core-typings'; -import { isOmnichannelRoom } from '@rocket.chat/core-typings'; +import type { IMessage, IOmnichannelRoom } from '@rocket.chat/core-typings'; import type { CloseRoomParams } from '../../../../../app/livechat/server/lib/LivechatTyped'; import { settings } from '../../../../../app/settings/server'; @@ -14,40 +13,6 @@ type LivechatCloseCallbackParams = { let autoTransferTimeout = 0; -const handleAfterSaveMessage = async (message: IMessage, room: IRoom | undefined): Promise => { - if (!room || !isOmnichannelRoom(room)) { - return message; - } - - const { _id: rid, autoTransferredAt, autoTransferOngoing } = room; - const { token, t: messageType } = message; - - if (messageType) { - // ignore system messages - return message; - } - - if (!autoTransferTimeout || autoTransferTimeout <= 0) { - return message; - } - - if (!message || token) { - // ignore messages from visitors - return message; - } - - if (autoTransferredAt) { - return message; - } - - if (!autoTransferOngoing) { - return message; - } - - await AutoTransferChatScheduler.unscheduleRoom(rid); - return message; -}; - const handleAfterCloseRoom = async (params: LivechatCloseCallbackParams): Promise => { const { room } = params; @@ -73,7 +38,7 @@ settings.watch('Livechat_auto_transfer_chat_timeout', (value) => { autoTransferTimeout = value as number; if (!autoTransferTimeout || autoTransferTimeout === 0) { callbacks.remove('livechat.afterTakeInquiry', 'livechat-auto-transfer-job-inquiry'); - callbacks.remove('afterSaveMessage', 'livechat-cancel-auto-transfer-job-after-message'); + callbacks.remove('afterOmnichannelSaveMessage', 'livechat-cancel-auto-transfer-job-after-message'); callbacks.remove('livechat.closeRoom', 'livechat-cancel-auto-transfer-on-close-room'); return; } @@ -98,6 +63,39 @@ settings.watch('Livechat_auto_transfer_chat_timeout', (value) => { callbacks.priority.MEDIUM, 'livechat-auto-transfer-job-inquiry', ); - callbacks.add('afterSaveMessage', handleAfterSaveMessage, callbacks.priority.HIGH, 'livechat-cancel-auto-transfer-job-after-message'); + callbacks.add( + 'afterOmnichannelSaveMessage', + async (message: IMessage, { room }): Promise => { + const { _id: rid, autoTransferredAt, autoTransferOngoing } = room; + const { token, t: messageType } = message; + + if (messageType) { + // ignore system messages + return message; + } + + if (!autoTransferTimeout || autoTransferTimeout <= 0) { + return message; + } + + if (!message || token) { + // ignore messages from visitors + return message; + } + + if (autoTransferredAt) { + return message; + } + + if (!autoTransferOngoing) { + return message; + } + + await AutoTransferChatScheduler.unscheduleRoom(rid); + return message; + }, + callbacks.priority.HIGH, + 'livechat-cancel-auto-transfer-job-after-message', + ); callbacks.add('livechat.closeRoom', handleAfterCloseRoom, callbacks.priority.HIGH, 'livechat-cancel-auto-transfer-on-close-room'); }); diff --git a/apps/meteor/ee/app/livechat-enterprise/server/hooks/setPredictedVisitorAbandonmentTime.ts b/apps/meteor/ee/app/livechat-enterprise/server/hooks/setPredictedVisitorAbandonmentTime.ts index 38238763e0ca..0fc630b5c260 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/hooks/setPredictedVisitorAbandonmentTime.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/hooks/setPredictedVisitorAbandonmentTime.ts @@ -1,57 +1,46 @@ -import type { IOmnichannelRoom } from '@rocket.chat/core-typings'; -import { isEditedMessage, isOmnichannelRoom } from '@rocket.chat/core-typings'; -import { LivechatRooms } from '@rocket.chat/models'; +import type { IMessage } from '@rocket.chat/core-typings'; +import { isEditedMessage, isMessageFromVisitor } from '@rocket.chat/core-typings'; import moment from 'moment'; +import { markRoomResponded } from '../../../../../app/livechat/server/hooks/markRoomResponded'; import { settings } from '../../../../../app/settings/server'; import { callbacks } from '../../../../../lib/callbacks'; import { setPredictedVisitorAbandonmentTime } from '../lib/Helper'; -callbacks.add( - 'afterSaveMessage', - async (message, room) => { - if (!isOmnichannelRoom(room)) { - return message; - } +function shouldSaveInactivity(message: IMessage): boolean { + if (message.t || isEditedMessage(message) || isMessageFromVisitor(message)) { + return false; + } - if ( - !settings.get('Livechat_abandoned_rooms_action') || - settings.get('Livechat_abandoned_rooms_action') === 'none' || - settings.get('Livechat_visitor_inactivity_timeout') <= 0 - ) { - return message; - } - // skips this callback if the message was edited - if (isEditedMessage(message)) { - return message; - } - // if the message has a type means it is a special message (like the closing comment), so skip it - if (message.t) { - return message; - } - // message from visitor - if (message.token) { - return message; - } + const abandonedRoomsAction = settings.get('Livechat_abandoned_rooms_action'); + const visitorInactivityTimeout = settings.get('Livechat_visitor_inactivity_timeout'); + + if (!abandonedRoomsAction || abandonedRoomsAction === 'none' || visitorInactivityTimeout <= 0) { + return false; + } - const latestRoom = await LivechatRooms.findOneById>(room._id, { - projection: { - _id: 1, - responseBy: 1, - departmentId: 1, - }, - }); + return true; +} - if (!latestRoom?.responseBy) { +callbacks.remove('afterOmnichannelSaveMessage', 'markRoomResponded'); + +callbacks.add( + 'afterOmnichannelSaveMessage', + async (message, { room, roomUpdater }) => { + const responseBy = await markRoomResponded(message, room, roomUpdater); + + if (!shouldSaveInactivity(message)) { return message; } - if (moment(latestRoom.responseBy.firstResponseTs).isSame(moment(message.ts))) { - await setPredictedVisitorAbandonmentTime(latestRoom); + if (!responseBy) { + return; } - return message; + if (moment(responseBy.firstResponseTs).isSame(moment(message.ts))) { + await setPredictedVisitorAbandonmentTime({ ...room, responseBy }, roomUpdater); + } }, callbacks.priority.MEDIUM, 'save-visitor-inactivity', -); // This hook priority should always be less than the priority of hook "markRoomResponded" bcs, the room.responseBy.firstMessage property set there is being used here for determining visitor abandonment +); diff --git a/apps/meteor/ee/app/livechat-enterprise/server/lib/AutoCloseOnHoldScheduler.ts b/apps/meteor/ee/app/livechat-enterprise/server/lib/AutoCloseOnHoldScheduler.ts index a893daa4f787..e8402534e40a 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/lib/AutoCloseOnHoldScheduler.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/lib/AutoCloseOnHoldScheduler.ts @@ -33,7 +33,7 @@ export class AutoCloseOnHoldSchedulerClass { mongo: (MongoInternals.defaultRemoteCollectionDriver().mongo as any).client.db(), db: { collection: SCHEDULER_NAME }, defaultConcurrency: 1, - processEvery: '1 minute', + processEvery: process.env.TEST_MODE === 'true' ? '3 seconds' : '1 minute', }); await this.scheduler.start(); diff --git a/apps/meteor/ee/app/livechat-enterprise/server/lib/AutoTransferChatScheduler.ts b/apps/meteor/ee/app/livechat-enterprise/server/lib/AutoTransferChatScheduler.ts index d8fb08a3e282..b3df0c322545 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/lib/AutoTransferChatScheduler.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/lib/AutoTransferChatScheduler.ts @@ -35,7 +35,7 @@ class AutoTransferChatSchedulerClass { mongo: (MongoInternals.defaultRemoteCollectionDriver().mongo as any).client.db(), db: { collection: SCHEDULER_NAME }, defaultConcurrency: 1, - processEvery: '1 minute', + processEvery: process.env.TEST_MODE === 'true' ? '3 seconds' : '1 minute', }); await this.scheduler.start(); diff --git a/apps/meteor/ee/app/livechat-enterprise/server/lib/Helper.ts b/apps/meteor/ee/app/livechat-enterprise/server/lib/Helper.ts index 08ea48910f02..3206fe9f94cc 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/lib/Helper.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/lib/Helper.ts @@ -1,5 +1,6 @@ import { api } from '@rocket.chat/core-services'; import type { IOmnichannelRoom, IOmnichannelServiceLevelAgreements, InquiryWithAgentInfo } from '@rocket.chat/core-typings'; +import type { Updater } from '@rocket.chat/models'; import { Rooms as RoomRaw, LivechatRooms, @@ -107,15 +108,11 @@ export const dispatchInquiryPosition = async (inquiry: Omit) => { + return setTimeout(() => { void api.broadcast('omnichannel.room', inquiry.rid, { type: 'queueData', data, }); - }; - - return setTimeout(() => { - propagateInquiryPosition(inquiry); }, 1000); }; @@ -143,7 +140,10 @@ const dispatchWaitingQueueStatus = async (department?: string) => { // but we don't need to notify _each_ change that takes place, just their final position export const debouncedDispatchWaitingQueueStatus = memoizeDebounce(dispatchWaitingQueueStatus, 1200); -export const setPredictedVisitorAbandonmentTime = async (room: Pick) => { +export const setPredictedVisitorAbandonmentTime = async ( + room: Pick, + roomUpdater?: Updater, +) => { if ( !room.responseBy?.firstResponseTs || !settings.get('Livechat_abandoned_rooms_action') || @@ -164,7 +164,11 @@ export const setPredictedVisitorAbandonmentTime = async (room: Pick { diff --git a/apps/meteor/ee/app/livechat-enterprise/server/lib/QueueInactivityMonitor.ts b/apps/meteor/ee/app/livechat-enterprise/server/lib/QueueInactivityMonitor.ts index a861219d6089..a8ffabc1f9f6 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/lib/QueueInactivityMonitor.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/lib/QueueInactivityMonitor.ts @@ -39,7 +39,7 @@ class OmnichannelQueueInactivityMonitorClass { mongo: (MongoInternals.defaultRemoteCollectionDriver().mongo as any).client.db(), db: { collection: SCHEDULER_NAME }, defaultConcurrency: 1, - processEvery: '1 minute', + processEvery: process.env.TEST_MODE === 'true' ? '3 seconds' : '1 minute', }); this.createIndex(); const language = settings.get('Language') || 'en'; diff --git a/apps/meteor/ee/app/livechat-enterprise/server/methods/addMonitor.ts b/apps/meteor/ee/app/livechat-enterprise/server/methods/addMonitor.ts index c4ff577fb326..6e6e5a7423d1 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/methods/addMonitor.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/methods/addMonitor.ts @@ -1,11 +1,11 @@ import type { IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import { LivechatEnterprise } from '../lib/LivechatEnterprise'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:addMonitor'(username: string): boolean | IUser; diff --git a/apps/meteor/ee/app/livechat-enterprise/server/methods/getUnitsFromUserRoles.ts b/apps/meteor/ee/app/livechat-enterprise/server/methods/getUnitsFromUserRoles.ts index 18ed1b1ea646..d32064fdd96c 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/methods/getUnitsFromUserRoles.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/methods/getUnitsFromUserRoles.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatUnit, LivechatDepartmentAgents } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import mem from 'mem'; import { Meteor } from 'meteor/meteor'; @@ -32,7 +32,7 @@ export const getUnitsFromUser = async (user: string): Promise; diff --git a/apps/meteor/ee/app/livechat-enterprise/server/methods/removeBusinessHour.ts b/apps/meteor/ee/app/livechat-enterprise/server/methods/removeBusinessHour.ts index d881fa5c1bcb..b71fd06d769f 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/methods/removeBusinessHour.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/methods/removeBusinessHour.ts @@ -1,10 +1,10 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import { businessHourManager } from '../../../../../app/livechat/server/business-hour'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:removeBusinessHour'(id: string, type: string): void; diff --git a/apps/meteor/ee/app/livechat-enterprise/server/methods/removeMonitor.ts b/apps/meteor/ee/app/livechat-enterprise/server/methods/removeMonitor.ts index 972c47f67c3c..12352a47d9cb 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/methods/removeMonitor.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/methods/removeMonitor.ts @@ -1,10 +1,10 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import { LivechatEnterprise } from '../lib/LivechatEnterprise'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:removeMonitor'(username: string): boolean; diff --git a/apps/meteor/ee/app/livechat-enterprise/server/methods/removeTag.ts b/apps/meteor/ee/app/livechat-enterprise/server/methods/removeTag.ts index 38af03202361..ca9bc93e97ee 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/methods/removeTag.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/methods/removeTag.ts @@ -1,10 +1,10 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import { LivechatEnterprise } from '../lib/LivechatEnterprise'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:removeTag'(id: string): Promise; diff --git a/apps/meteor/ee/app/livechat-enterprise/server/methods/removeUnit.ts b/apps/meteor/ee/app/livechat-enterprise/server/methods/removeUnit.ts index 5ff1fb7f7845..c4c193f4b105 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/methods/removeUnit.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/methods/removeUnit.ts @@ -1,10 +1,10 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import { LivechatEnterprise } from '../lib/LivechatEnterprise'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:removeUnit'(id: string): boolean; diff --git a/apps/meteor/ee/app/livechat-enterprise/server/methods/resumeOnHold.ts b/apps/meteor/ee/app/livechat-enterprise/server/methods/resumeOnHold.ts index d708f8941269..1831ddc98783 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/methods/resumeOnHold.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/methods/resumeOnHold.ts @@ -1,8 +1,8 @@ import { Message } from '@rocket.chat/core-services'; import type { ILivechatVisitor, IOmnichannelSystemMessage } from '@rocket.chat/core-typings'; import { isOmnichannelRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatVisitors, LivechatInquiry, LivechatRooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../../../../app/lib/server/lib/deprecationWarningLogger'; @@ -31,7 +31,7 @@ async function resolveOnHoldCommentInfo(options: { clientAction: boolean }, room return i18n.t('Omnichannel_on_hold_chat_automatically', { guest }); } -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:resumeOnHold'(roomId: string, options?: { clientAction: boolean }): void; diff --git a/apps/meteor/ee/app/livechat-enterprise/server/methods/saveTag.ts b/apps/meteor/ee/app/livechat-enterprise/server/methods/saveTag.ts index 42d7c91da971..094c4a97285a 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/methods/saveTag.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/methods/saveTag.ts @@ -1,11 +1,11 @@ import type { ILivechatTag } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import { LivechatEnterprise } from '../lib/LivechatEnterprise'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveTag'(id: string, tagData: any, tagDepartments: any): Promise; diff --git a/apps/meteor/ee/app/livechat-enterprise/server/methods/saveUnit.ts b/apps/meteor/ee/app/livechat-enterprise/server/methods/saveUnit.ts index 426dfaf8f81c..d686315e65df 100644 --- a/apps/meteor/ee/app/livechat-enterprise/server/methods/saveUnit.ts +++ b/apps/meteor/ee/app/livechat-enterprise/server/methods/saveUnit.ts @@ -1,11 +1,11 @@ import type { IOmnichannelBusinessUnit } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import { LivechatEnterprise } from '../lib/LivechatEnterprise'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'livechat:saveUnit'(_id: string, unitData: any, unitMonitors: any, unitDepartments: any): Omit; diff --git a/apps/meteor/ee/app/message-read-receipt/server/hooks/afterSaveMessage.ts b/apps/meteor/ee/app/message-read-receipt/server/hooks/afterSaveMessage.ts index 5b7a720ba312..9180632768af 100644 --- a/apps/meteor/ee/app/message-read-receipt/server/hooks/afterSaveMessage.ts +++ b/apps/meteor/ee/app/message-read-receipt/server/hooks/afterSaveMessage.ts @@ -1,4 +1,3 @@ -import type { IRoom, IMessage } from '@rocket.chat/core-typings'; import { isEditedMessage, isOmnichannelRoom } from '@rocket.chat/core-typings'; import { Subscriptions } from '@rocket.chat/models'; @@ -7,7 +6,7 @@ import { ReadReceipt } from '../../../../server/lib/message-read-receipt/ReadRec callbacks.add( 'afterSaveMessage', - async (message: IMessage, room: IRoom) => { + async (message, { room }) => { // skips this callback if the message was edited if (isEditedMessage(message)) { return message; diff --git a/apps/meteor/ee/server/api/audit.ts b/apps/meteor/ee/server/api/audit.ts new file mode 100644 index 000000000000..748368f0d569 --- /dev/null +++ b/apps/meteor/ee/server/api/audit.ts @@ -0,0 +1,95 @@ +import type { IUser, IRoom } from '@rocket.chat/core-typings'; +import { Rooms, AuditLog } from '@rocket.chat/models'; +import type { PaginatedRequest, PaginatedResult } from '@rocket.chat/rest-typings'; +import Ajv from 'ajv'; + +import { API } from '../../../app/api/server/api'; +import { getPaginationItems } from '../../../app/api/server/helpers/getPaginationItems'; +import { findUsersOfRoom } from '../../../server/lib/findUsersOfRoom'; + +const ajv = new Ajv({ + coerceTypes: true, +}); + +type AuditRoomMembersParams = PaginatedRequest<{ + roomId: string; + filter: string; +}>; + +const auditRoomMembersSchema = { + type: 'object', + properties: { + roomId: { type: 'string', minLength: 1 }, + filter: { type: 'string' }, + count: { type: 'number' }, + offset: { type: 'number' }, + sort: { type: 'string' }, + }, + required: ['roomId'], + additionalProperties: false, +}; + +export const isAuditRoomMembersProps = ajv.compile(auditRoomMembersSchema); + +declare module '@rocket.chat/rest-typings' { + // eslint-disable-next-line @typescript-eslint/naming-convention + interface Endpoints { + '/v1/audit/rooms.members': { + GET: ( + params: AuditRoomMembersParams, + ) => PaginatedResult<{ members: Pick[] }>; + }; + } +} + +API.v1.addRoute( + 'audit/rooms.members', + { authRequired: true, permissionsRequired: ['view-members-list-all-rooms'], validateParams: isAuditRoomMembersProps }, + { + async get() { + const { roomId, filter } = this.queryParams; + const { count: limit, offset: skip } = await getPaginationItems(this.queryParams); + const { sort } = await this.parseJsonQuery(); + + const room = await Rooms.findOneById>(roomId, { projection: { _id: 1, name: 1, fname: 1 } }); + if (!room) { + return API.v1.notFound(); + } + + const { cursor, totalCount } = findUsersOfRoom({ + rid: room._id, + filter, + skip, + limit, + ...(sort?.username && { sort: { username: sort.username } }), + }); + + const [members, total] = await Promise.all([cursor.toArray(), totalCount]); + + await AuditLog.insertOne({ + ts: new Date(), + results: total, + u: { + _id: this.user._id, + username: this.user.username, + name: this.user.name, + avatarETag: this.user.avatarETag, + }, + fields: { + msg: 'Room_members_list', + rids: [room._id], + type: 'room_member_list', + room: room.name || room.fname, + filters: filter, + }, + }); + + return API.v1.success({ + members, + count: members.length, + offset: skip, + total, + }); + }, + }, +); diff --git a/apps/meteor/ee/server/lib/audit/methods.ts b/apps/meteor/ee/server/lib/audit/methods.ts index add64414c6e8..a3d32f0635d8 100644 --- a/apps/meteor/ee/server/lib/audit/methods.ts +++ b/apps/meteor/ee/server/lib/audit/methods.ts @@ -1,7 +1,7 @@ import type { ILivechatAgent, ILivechatVisitor, IMessage, IRoom, IUser, IAuditLog } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { LivechatRooms, Messages, Rooms, Users, AuditLog } from '@rocket.chat/models'; import { escapeRegExp } from '@rocket.chat/string-helpers'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; @@ -57,7 +57,7 @@ const getRoomInfoByAuditParams = async ({ } }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { auditGetAuditions: (params: { startDate: Date; endDate: Date }) => IAuditLog[]; diff --git a/apps/meteor/ee/server/lib/audit/startup.ts b/apps/meteor/ee/server/lib/audit/startup.ts index ba50eb48e244..076336b50fe6 100644 --- a/apps/meteor/ee/server/lib/audit/startup.ts +++ b/apps/meteor/ee/server/lib/audit/startup.ts @@ -6,6 +6,7 @@ export const createPermissions = async () => { const permissions = [ { _id: 'can-audit', roles: ['admin', 'auditor'] }, { _id: 'can-audit-log', roles: ['admin', 'auditor-log'] }, + { _id: 'view-members-list-all-rooms', roles: ['admin', 'auditor'] }, ]; const defaultRoles = [ diff --git a/apps/meteor/ee/server/lib/engagementDashboard/messages.ts b/apps/meteor/ee/server/lib/engagementDashboard/messages.ts index 19939ae6e4e1..2a4bf67c12c5 100644 --- a/apps/meteor/ee/server/lib/engagementDashboard/messages.ts +++ b/apps/meteor/ee/server/lib/engagementDashboard/messages.ts @@ -5,7 +5,7 @@ import moment from 'moment'; import { roomCoordinator } from '../../../../server/lib/rooms/roomCoordinator'; import { convertDateToInt, diffBetweenDaysInclusive, convertIntToDate, getTotalOfWeekItems } from './date'; -export const handleMessagesSent = async (message: IMessage, room?: IRoom): Promise => { +export const handleMessagesSent = async (message: IMessage, { room }: { room?: IRoom }): Promise => { const roomTypesToShow = roomCoordinator.getTypesToShowOnDashboard(); if (!room || !roomTypesToShow.includes(room.t)) { return message; diff --git a/apps/meteor/ee/server/lib/message-read-receipt/ReadReceipt.js b/apps/meteor/ee/server/lib/message-read-receipt/ReadReceipt.js index 66be655a7d09..b1d9f43985ad 100644 --- a/apps/meteor/ee/server/lib/message-read-receipt/ReadReceipt.js +++ b/apps/meteor/ee/server/lib/message-read-receipt/ReadReceipt.js @@ -2,11 +2,10 @@ import { api } from '@rocket.chat/core-services'; import { LivechatVisitors, ReadReceipts, Messages, Rooms, Subscriptions, Users } from '@rocket.chat/models'; import { Random } from '@rocket.chat/random'; -import { notifyOnRoomChangedById } from '../../../../app/lib/server/lib/notifyListener'; +import { notifyOnRoomChangedById, notifyOnMessageChange } from '../../../../app/lib/server/lib/notifyListener'; import { settings } from '../../../../app/settings/server'; import { SystemLogger } from '../../../../server/lib/logger/system'; import { roomCoordinator } from '../../../../server/lib/rooms/roomCoordinator'; -import { broadcastMessageFromData } from '../../../../server/modules/watchers/lib/messages'; // debounced function by roomId, so multiple calls within 2 seconds to same roomId runs only once const list = {}; @@ -70,7 +69,7 @@ export const ReadReceipt = { if (isUserAlone) { const result = await Messages.setAsReadById(message._id); if (result.modifiedCount > 0) { - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: message._id, }); } diff --git a/apps/meteor/ee/server/local-services/federation/service.ts b/apps/meteor/ee/server/local-services/federation/service.ts index 15f661a29e63..6397f01ee9ac 100644 --- a/apps/meteor/ee/server/local-services/federation/service.ts +++ b/apps/meteor/ee/server/local-services/federation/service.ts @@ -215,4 +215,8 @@ export class FederationServiceEE extends AbstractBaseFederationServiceEE impleme async stopped(): Promise { return super.stopped(); } + + async deactivateRemoteUser(userId: string) { + return super.deactivateRemoteUser(userId); + } } diff --git a/apps/meteor/ee/server/methods/getReadReceipts.ts b/apps/meteor/ee/server/methods/getReadReceipts.ts index 78fe8a4d967e..04a6ed1dff35 100644 --- a/apps/meteor/ee/server/methods/getReadReceipts.ts +++ b/apps/meteor/ee/server/methods/getReadReceipts.ts @@ -1,14 +1,14 @@ import type { ReadReceipt as ReadReceiptType, IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { License } from '@rocket.chat/license'; import { Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomIdAsync } from '../../../app/authorization/server/functions/canAccessRoom'; import { ReadReceipt } from '../lib/message-read-receipt/ReadReceipt'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getReadReceipts(options: { messageId: IMessage['_id'] }): ReadReceiptType[]; diff --git a/apps/meteor/ee/server/models/raw/LivechatRooms.ts b/apps/meteor/ee/server/models/raw/LivechatRooms.ts index 3295af1b6179..5b89704a522c 100644 --- a/apps/meteor/ee/server/models/raw/LivechatRooms.ts +++ b/apps/meteor/ee/server/models/raw/LivechatRooms.ts @@ -7,6 +7,7 @@ import type { } from '@rocket.chat/core-typings'; import { LivechatPriorityWeight, DEFAULT_SLA_CONFIG } from '@rocket.chat/core-typings'; import type { ILivechatRoomsModel } from '@rocket.chat/model-typings'; +import type { Updater } from '@rocket.chat/models'; import type { FindCursor, UpdateResult, Document, FindOptions, Db, Collection, Filter, AggregationCursor } from 'mongodb'; import { readSecondaryPreferred } from '../../../../server/database/readSecondaryPreferred'; @@ -20,6 +21,7 @@ declare module '@rocket.chat/model-typings' { unsetPredictedVisitorAbandonmentByRoomId(rid: string): Promise; findAbandonedOpenRooms(date: Date, extraQuery?: Filter): FindCursor; setPredictedVisitorAbandonmentByRoomId(roomId: string, date: Date): Promise; + getPredictedVisitorAbandonmentByRoomIdUpdateQuery(date: Date, roomUpdater: Updater): Updater; unsetAllPredictedVisitorAbandonment(): Promise; setOnHoldByRoomId(roomId: string): Promise; unsetOnHoldByRoomId(roomId: string): Promise; @@ -209,6 +211,13 @@ export class LivechatRoomsRawEE extends LivechatRoomsRaw implements ILivechatRoo ); } + getPredictedVisitorAbandonmentByRoomIdUpdateQuery( + date: Date, + roomUpdater: Updater = this.getUpdater(), + ): Updater { + return roomUpdater.set('omnichannel.predictedVisitorAbandonmentAt', date); + } + setPredictedVisitorAbandonmentByRoomId(rid: string, willBeAbandonedAt: Date): Promise { const query = { _id: rid, diff --git a/apps/meteor/ee/server/services/CHANGELOG.md b/apps/meteor/ee/server/services/CHANGELOG.md index f53b5ae10ee6..230250c5ca64 100644 --- a/apps/meteor/ee/server/services/CHANGELOG.md +++ b/apps/meteor/ee/server/services/CHANGELOG.md @@ -1,5 +1,145 @@ # rocketchat-services +## 1.3.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0 + - @rocket.chat/core-services@0.5.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/models@0.2.0 + - @rocket.chat/ui-kit@0.36.0 + - @rocket.chat/rest-typings@6.11.0 +
+ +## 1.3.0-rc.6 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/rest-typings@6.11.0-rc.6 + - @rocket.chat/core-services@0.5.0-rc.6 + - @rocket.chat/model-typings@0.6.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 +
+ +## 1.3.0-rc.5 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/rest-typings@6.11.0-rc.5 + - @rocket.chat/core-services@0.5.0-rc.5 + - @rocket.chat/model-typings@0.6.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 +
+ +## 1.3.0-rc.4 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/rest-typings@6.11.0-rc.4 + - @rocket.chat/core-services@0.5.0-rc.4 + - @rocket.chat/model-typings@0.6.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 +
+ +## 1.3.0-rc.3 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/rest-typings@6.11.0-rc.3 + - @rocket.chat/core-services@0.5.0-rc.3 + - @rocket.chat/model-typings@0.6.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 +
+ +## 1.3.0-rc.2 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/rest-typings@6.11.0-rc.2 + - @rocket.chat/core-services@0.5.0-rc.2 + - @rocket.chat/model-typings@0.6.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 +
+ +## 1.3.0-rc.1 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/rest-typings@6.11.0-rc.1 + - @rocket.chat/core-services@0.5.0-rc.1 + - @rocket.chat/model-typings@0.6.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 +
+ +## 1.3.0-rc.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0-rc.0 + - @rocket.chat/core-services@0.5.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 + - @rocket.chat/ui-kit@0.36.0-rc.0 + - @rocket.chat/rest-typings@6.11.0-rc.0 + +## 1.2.2 + +### Patch Changes + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from being updated or uninstalled in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from handling errors during execution in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Improved Apps-Engine installation to prevent start up errors on manual installation setups + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that caused the video conference button on rooms to not recognize a video conference provider app in some cases + +-
Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-services@0.4.2 + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/rest-typings@6.10.2 + - @rocket.chat/model-typings@0.5.2 + - @rocket.chat/models@0.1.2 +
+ ## 1.2.1 ### Patch Changes diff --git a/apps/meteor/ee/server/services/package.json b/apps/meteor/ee/server/services/package.json index 4c987885c9c0..76a0c59d54e6 100644 --- a/apps/meteor/ee/server/services/package.json +++ b/apps/meteor/ee/server/services/package.json @@ -1,7 +1,7 @@ { "name": "rocketchat-services", "private": true, - "version": "1.2.1", + "version": "1.3.0", "description": "Rocket.Chat Authorization service", "main": "index.js", "scripts": { @@ -18,7 +18,7 @@ "author": "Rocket.Chat", "license": "MIT", "dependencies": { - "@rocket.chat/apps-engine": "alpha", + "@rocket.chat/apps-engine": "1.44.0", "@rocket.chat/core-services": "workspace:^", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/emitter": "~0.31.25", diff --git a/apps/meteor/ee/server/startup/audit.ts b/apps/meteor/ee/server/startup/audit.ts index c38794a7582e..9f8135a16a65 100644 --- a/apps/meteor/ee/server/startup/audit.ts +++ b/apps/meteor/ee/server/startup/audit.ts @@ -4,6 +4,7 @@ import { createPermissions } from '../lib/audit/startup'; await License.onLicense('auditing', async () => { await import('../lib/audit/methods'); + await import('../api/audit'); await createPermissions(); }); diff --git a/apps/meteor/imports/personal-access-tokens/server/api/methods/generateToken.ts b/apps/meteor/imports/personal-access-tokens/server/api/methods/generateToken.ts index a7dfc6ab46f6..7badb659774f 100644 --- a/apps/meteor/imports/personal-access-tokens/server/api/methods/generateToken.ts +++ b/apps/meteor/imports/personal-access-tokens/server/api/methods/generateToken.ts @@ -1,13 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { Random } from '@rocket.chat/random'; import { Accounts } from 'meteor/accounts-base'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import { twoFactorRequired } from '../../../../../app/2fa/server/twoFactorRequired'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'personalAccessTokens:generateToken'(params: { tokenName: string; bypassTwoFactor: boolean }): Promise; diff --git a/apps/meteor/imports/personal-access-tokens/server/api/methods/regenerateToken.ts b/apps/meteor/imports/personal-access-tokens/server/api/methods/regenerateToken.ts index 8fa323644283..14629ce4dd9d 100644 --- a/apps/meteor/imports/personal-access-tokens/server/api/methods/regenerateToken.ts +++ b/apps/meteor/imports/personal-access-tokens/server/api/methods/regenerateToken.ts @@ -1,11 +1,11 @@ import { Meteor } from 'meteor/meteor'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import { twoFactorRequired } from '../../../../../app/2fa/server/twoFactorRequired'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'personalAccessTokens:regenerateToken'(params: { tokenName: string }): Promise; diff --git a/apps/meteor/imports/personal-access-tokens/server/api/methods/removeToken.ts b/apps/meteor/imports/personal-access-tokens/server/api/methods/removeToken.ts index 7da13fe48eeb..0f03e6087ee2 100644 --- a/apps/meteor/imports/personal-access-tokens/server/api/methods/removeToken.ts +++ b/apps/meteor/imports/personal-access-tokens/server/api/methods/removeToken.ts @@ -1,11 +1,11 @@ import { Meteor } from 'meteor/meteor'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; import { hasPermissionAsync } from '../../../../../app/authorization/server/functions/hasPermission'; import { twoFactorRequired } from '../../../../../app/2fa/server/twoFactorRequired'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'personalAccessTokens:removeToken'(params: { tokenName: string }): Promise; diff --git a/apps/meteor/jest.config.ts b/apps/meteor/jest.config.ts index fb9c6f1247a9..8dc7fa033e03 100644 --- a/apps/meteor/jest.config.ts +++ b/apps/meteor/jest.config.ts @@ -1,33 +1,34 @@ +import client from '@rocket.chat/jest-presets/client'; +import server from '@rocket.chat/jest-presets/server'; import type { Config } from 'jest'; -const config: Config = { +export default { projects: [ { displayName: 'client', - testEnvironment: 'jsdom', + preset: client.preset, + setupFilesAfterEnv: [...client.setupFilesAfterEnv], + testMatch: [ '/client/**/**.spec.[jt]s?(x)', '/tests/unit/client/views/**/*.spec.{ts,tsx}', '/tests/unit/client/providers/**/*.spec.{ts,tsx}', ], - errorOnDeprecated: true, - - modulePathIgnorePatterns: ['/dist/'], - - transform: { - '^.+\\.(t|j)sx?$': '@swc/jest', - }, moduleNameMapper: { - '\\.css$': 'identity-obj-proxy', '^react($|/.+)': '/node_modules/react$1', + '^react-dom/client$': '/node_modules/react-dom$1', + '^react-dom($|/.+)': '/node_modules/react-dom$1', + '^react-i18next($|/.+)': '/node_modules/react-i18next$1', '^@tanstack/(.+)': '/node_modules/@tanstack/$1', - '^meteor/(.*)': '/.meteorMocks/index.ts', + '^meteor/(.*)': '/tests/mocks/client/meteor.ts', }, + + coveragePathIgnorePatterns: ['/tests/'], }, { displayName: 'server', - testEnvironment: 'node', + preset: server.preset, testMatch: [ '/app/livechat/server/business-hour/**/*.spec.ts?(x)', @@ -36,23 +37,6 @@ const config: Config = { '/app/cloud/server/functions/supportedVersionsToken/**.spec.ts', '/app/utils/lib/**.spec.ts', ], - transformIgnorePatterns: ['!/node_modules/jose'], - errorOnDeprecated: true, - - modulePathIgnorePatterns: ['/dist/'], - - transform: { - '^.+\\.(t|j)sx?$': '@swc/jest', - }, - - moduleNameMapper: { - '\\.css$': 'identity-obj-proxy', - '^react($|/.+)': '/node_modules/react$1', - '^@tanstack/(.+)': '/node_modules/@tanstack/$1', - }, }, ], - collectCoverage: true, -}; - -export default config; +} satisfies Config; diff --git a/apps/meteor/lib/callbacks.ts b/apps/meteor/lib/callbacks.ts index 02e9162c8330..7eaa9ed7595d 100644 --- a/apps/meteor/lib/callbacks.ts +++ b/apps/meteor/lib/callbacks.ts @@ -23,6 +23,7 @@ import type { MessageMention, OmnichannelSourceType, } from '@rocket.chat/core-typings'; +import type { Updater } from '@rocket.chat/models'; import type { FilterOperators } from 'mongodb'; import type { ILoginAttempt } from '../app/authentication/server/ILoginAttempt'; @@ -49,7 +50,8 @@ interface EventLikeCallbackSignatures { 'afterDeleteUser': (user: IUser) => void; 'afterFileUpload': (params: { user: IUser; room: IRoom; message: IMessage }) => void; 'afterRoomNameChange': (params: { rid: string; name: string; oldName: string }) => void; - 'afterSaveMessage': (message: IMessage, room: IRoom, uid?: string) => void; + 'afterSaveMessage': (message: IMessage, params: { room: IRoom; uid?: string; roomUpdater?: Updater }) => void; + 'afterOmnichannelSaveMessage': (message: IMessage, constant: { room: IOmnichannelRoom; roomUpdater: Updater }) => void; 'livechat.removeAgentDepartment': (params: { departmentId: ILivechatDepartmentRecord['_id']; agentsId: ILivechatAgent['_id'][] }) => void; 'livechat.saveAgentDepartment': (params: { departmentId: ILivechatDepartmentRecord['_id']; agentsId: ILivechatAgent['_id'][] }) => void; 'livechat.closeRoom': (params: { room: IOmnichannelRoom; options: CloseRoomParams['options'] }) => void; diff --git a/apps/meteor/lib/rooms/adminFields.ts b/apps/meteor/lib/rooms/adminFields.ts index 89441f04c9ae..21353da84c5e 100644 --- a/apps/meteor/lib/rooms/adminFields.ts +++ b/apps/meteor/lib/rooms/adminFields.ts @@ -9,6 +9,7 @@ export const adminFields: Partial> = { cl: 1, u: 1, usernames: 1, + ts: 1, usersCount: 1, muted: 1, unmuted: 1, diff --git a/apps/meteor/lib/utils/isPlainObject.ts b/apps/meteor/lib/utils/isPlainObject.ts new file mode 100644 index 000000000000..a2bcf15cc590 --- /dev/null +++ b/apps/meteor/lib/utils/isPlainObject.ts @@ -0,0 +1,3 @@ +export function isPlainObject(value: unknown) { + return value !== null && typeof value === 'object' && !Array.isArray(value); +} diff --git a/apps/meteor/package.json b/apps/meteor/package.json index 8c7c641c4bc2..5addaf756f8a 100644 --- a/apps/meteor/package.json +++ b/apps/meteor/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/meteor", "description": "The Ultimate Open Source WebChat Platform", - "version": "6.11.0-develop", + "version": "6.12.0-develop", "private": true, "author": { "name": "Rocket.Chat", @@ -31,25 +31,25 @@ "stylelint": "stylelint \"app/**/*.css\" \"client/**/*.css\" \"app/**/*.less\" \"client/**/*.less\" \"ee/**/*.less\"", "stylelint:fix": "stylelint --fix \"app/**/*.css\" \"client/**/*.css\" \"app/**/*.less\" \"client/**/*.less\" \"ee/**/*.less\"", "typecheck": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" tsc -p tsconfig.typecheck.json", - "deploy": "npm run build && pm2 startOrRestart pm2.json", + "deploy": "yarn build && pm2 startOrRestart pm2.json", "coverage": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' nyc -r html mocha --config ./.mocharc.js", "test:e2e": "playwright test", "test:e2e:federation": "playwright test --config=playwright-federation.config.ts", "test:e2e:nyc": "nyc report --reporter=lcov", "testapi": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' mocha --config ./.mocharc.api.js", - "testunit": "npm run .testunit:definition && npm run .testunit:client && npm run .testunit:server:cov", + "testunit": "yarn .testunit:definition && yarn .testunit:client && yarn .testunit:server:cov", ".testunit:server": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' mocha --config ./.mocharc.js", ".testunit:server:cov": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' nyc -r text -r lcov mocha --config ./.mocharc.js", - ".testunit:client": "jest --silent && TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' mocha --config ./.mocharc.client.js --exit", + ".testunit:client": "jest", ".testunit:definition": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' mocha --config ./.mocharc.definition.js", "testunit-watch": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' mocha --watch --config ./.mocharc.js", - "test": "npm run testapi && npm run testui", + "test": "yarn testunit && yarn testapi", "translation-diff": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' ts-node .scripts/translation-diff.ts", "translation-check": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' ts-node .scripts/translation-check.ts", "translation-fix-order": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' ts-node .scripts/translation-fix-order.ts", "version": "node .scripts/version.js", "set-version": "node .scripts/set-version.js", - "release": "meteor npm run set-version --silent", + "release": "meteor yarn set-version --silent", "storybook": "cross-env NODE_OPTIONS=--max-old-space-size=8192 start-storybook -p 6006 --no-version-updates", "prepare": "node playwright.prepare.mjs", "docker:start": "docker-compose up" @@ -75,6 +75,7 @@ "@faker-js/faker": "~8.0.2", "@playwright/test": "^1.40.1", "@rocket.chat/eslint-config": "workspace:^", + "@rocket.chat/jest-presets": "workspace:~", "@rocket.chat/livechat": "workspace:^", "@rocket.chat/mock-providers": "workspace:^", "@settlin/spacebars-loader": "^1.0.9", @@ -85,12 +86,9 @@ "@storybook/addons": "~6.5.16", "@storybook/react": "~6.5.16", "@storybook/testing-library": "0.0.13", - "@swc/core": "^1.3.95", - "@swc/jest": "^0.2.29", "@tanstack/react-query-devtools": "^4.19.1", - "@testing-library/react": "~12.1.5", - "@testing-library/react-hooks": "^8.0.1", - "@testing-library/user-event": "~13.5.0", + "@testing-library/react": "~16.0.0", + "@testing-library/user-event": "~14.5.2", "@types/adm-zip": "^0.5.3", "@types/archiver": "^5.3.4", "@types/bad-words": "^3.0.2", @@ -116,6 +114,7 @@ "@types/he": "^1.1.2", "@types/i18next-sprintf-postprocessor": "^0.2.2", "@types/imap": "^0.8.39", + "@types/jest": "~29.5.12", "@types/jsdom": "^16.2.15", "@types/jsdom-global": "^3.0.6", "@types/jsrsasign": "^10.5.11", @@ -181,11 +180,11 @@ "eslint-plugin-prettier": "~4.2.1", "eslint-plugin-react": "~7.32.2", "eslint-plugin-react-hooks": "~4.6.0", - "eslint-plugin-testing-library": "~5.11.1", + "eslint-plugin-testing-library": "~6.2.2", "eslint-plugin-you-dont-need-lodash-underscore": "~6.12.0", "fast-glob": "^3.2.12", "i18next": "~23.4.9", - "jest": "~29.6.4", + "jest": "~29.7.0", "jsdom-global": "^3.0.2", "mocha": "^9.2.2", "nyc": "^15.1.0", @@ -231,7 +230,7 @@ "@rocket.chat/agenda": "workspace:^", "@rocket.chat/api-client": "workspace:^", "@rocket.chat/apps": "workspace:^", - "@rocket.chat/apps-engine": "alpha", + "@rocket.chat/apps-engine": "1.44.0", "@rocket.chat/base64": "workspace:^", "@rocket.chat/cas-validate": "workspace:^", "@rocket.chat/core-services": "workspace:^", @@ -242,10 +241,10 @@ "@rocket.chat/favicon": "workspace:^", "@rocket.chat/forked-matrix-appservice-bridge": "^4.0.2", "@rocket.chat/forked-matrix-bot-sdk": "^0.6.0-beta.3", - "@rocket.chat/fuselage": "^0.56.0", + "@rocket.chat/fuselage": "^0.57.0", "@rocket.chat/fuselage-hooks": "^0.33.1", "@rocket.chat/fuselage-polyfills": "~0.31.25", - "@rocket.chat/fuselage-toastbar": "^0.32.0", + "@rocket.chat/fuselage-toastbar": "^0.33.0", "@rocket.chat/fuselage-tokens": "^0.33.1", "@rocket.chat/fuselage-ui-kit": "workspace:^", "@rocket.chat/gazzodown": "workspace:^", diff --git a/apps/meteor/server/features/EmailInbox/EmailInbox_Incoming.ts b/apps/meteor/server/features/EmailInbox/EmailInbox_Incoming.ts index 642d989f85b6..0797d896f22d 100644 --- a/apps/meteor/server/features/EmailInbox/EmailInbox_Incoming.ts +++ b/apps/meteor/server/features/EmailInbox/EmailInbox_Incoming.ts @@ -12,11 +12,11 @@ import type { ParsedMail, Attachment } from 'mailparser'; import stripHtml from 'string-strip-html'; import { FileUpload } from '../../../app/file-upload/server'; +import { notifyOnMessageChange } from '../../../app/lib/server/lib/notifyListener'; import { Livechat as LivechatTyped } from '../../../app/livechat/server/lib/LivechatTyped'; import { QueueManager } from '../../../app/livechat/server/lib/QueueManager'; import { settings } from '../../../app/settings/server'; import { i18n } from '../../lib/i18n'; -import { broadcastMessageFromData } from '../../modules/watchers/lib/messages'; import { logger } from './logger'; type FileAttachment = VideoAttachmentProps & ImageAttachmentProps & AudioAttachmentProps; @@ -234,7 +234,7 @@ export async function onEmailReceived(email: ParsedMail, inbox: string, departme }, ); room && (await LivechatRooms.updateEmailThreadByRoomId(room._id, thread)); - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: msgId, }); }) diff --git a/apps/meteor/server/features/EmailInbox/EmailInbox_Outgoing.ts b/apps/meteor/server/features/EmailInbox/EmailInbox_Outgoing.ts index 708d00422b5d..51718e4937d8 100644 --- a/apps/meteor/server/features/EmailInbox/EmailInbox_Outgoing.ts +++ b/apps/meteor/server/features/EmailInbox/EmailInbox_Outgoing.ts @@ -1,16 +1,16 @@ import { isIMessageInbox } from '@rocket.chat/core-typings'; -import type { IEmailInbox, IUser, IMessage, IOmnichannelRoom, SlashCommandCallbackParams } from '@rocket.chat/core-typings'; +import type { IEmailInbox, IUser, IOmnichannelRoom, SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { Messages, Uploads, LivechatRooms, Rooms, Users } from '@rocket.chat/models'; import { Match } from 'meteor/check'; import type Mail from 'nodemailer/lib/mailer'; import { FileUpload } from '../../../app/file-upload/server'; import { sendMessage } from '../../../app/lib/server/functions/sendMessage'; +import { notifyOnMessageChange } from '../../../app/lib/server/lib/notifyListener'; import { settings } from '../../../app/settings/server'; import { slashCommands } from '../../../app/utils/server/slashCommand'; import { callbacks } from '../../../lib/callbacks'; import { i18n } from '../../lib/i18n'; -import { broadcastMessageFromData } from '../../modules/watchers/lib/messages'; import { inboxes } from './EmailInbox'; import type { Inbox } from './EmailInbox'; import { logger } from './logger'; @@ -171,7 +171,7 @@ slashCommands.add({ }, }, ); - void broadcastMessageFromData({ + void notifyOnMessageChange({ id: message._id, }); @@ -190,7 +190,9 @@ slashCommands.add({ callbacks.add( 'afterSaveMessage', - async (message: IMessage, room: any) => { + async (message, { room: omnichannelRoom }) => { + const room = omnichannelRoom as IOmnichannelRoom; + if (!room?.email?.inbox) { return message; } diff --git a/apps/meteor/server/lib/oauth/addOAuthService.ts b/apps/meteor/server/lib/oauth/addOAuthService.ts index db84cb467ffc..2a49a23a1f4e 100644 --- a/apps/meteor/server/lib/oauth/addOAuthService.ts +++ b/apps/meteor/server/lib/oauth/addOAuthService.ts @@ -118,7 +118,6 @@ export async function addOAuthService(name: string, values: { [k: string]: strin section: `Custom OAuth: ${name}`, i18nLabel: 'Accounts_OAuth_Custom_Button_Label_Color', persistent: true, - alert: 'OAuth_button_colors_alert', }); await settingsRegistry.add(`Accounts_OAuth_Custom-${name}-button_color`, values.buttonColor || '#1d74f5', { type: 'string', @@ -126,7 +125,6 @@ export async function addOAuthService(name: string, values: { [k: string]: strin section: `Custom OAuth: ${name}`, i18nLabel: 'Accounts_OAuth_Custom_Button_Color', persistent: true, - alert: 'OAuth_button_colors_alert', }); await settingsRegistry.add(`Accounts_OAuth_Custom-${name}-key_field`, values.keyField || 'username', { type: 'select', diff --git a/apps/meteor/server/lib/pushConfig.ts b/apps/meteor/server/lib/pushConfig.ts index 2cf944bef737..fb2f91c4b868 100644 --- a/apps/meteor/server/lib/pushConfig.ts +++ b/apps/meteor/server/lib/pushConfig.ts @@ -1,6 +1,6 @@ import type { IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { AppsTokens } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; @@ -30,7 +30,7 @@ export const executePushTest = async (userId: IUser['_id'], username: IUser['use return tokens; }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { push_test(): { message: string; params: number[] }; diff --git a/apps/meteor/server/lib/resetUserE2EKey.ts b/apps/meteor/server/lib/resetUserE2EKey.ts index 3f30251dbb11..8535eee9a2cd 100644 --- a/apps/meteor/server/lib/resetUserE2EKey.ts +++ b/apps/meteor/server/lib/resetUserE2EKey.ts @@ -2,6 +2,7 @@ import { api } from '@rocket.chat/core-services'; import { Subscriptions, Users, Rooms } from '@rocket.chat/models'; import { Meteor } from 'meteor/meteor'; +import { notifyOnUserChange } from '../../app/lib/server/lib/notifyListener'; import * as Mailer from '../../app/mailer/server/api'; import { settings } from '../../app/settings/server'; import { i18n } from './i18n'; @@ -76,5 +77,7 @@ export async function resetUserE2EEncriptionKey(uid: string, notifyUser: boolean // Force the user to logout, so that the keys can be generated again await Users.unsetLoginTokens(uid); + void notifyOnUserChange({ clientAction: 'updated', id: uid, diff: { 'services.resume.loginTokens': [] } }); + return true; } diff --git a/apps/meteor/server/methods/OEmbedCacheCleanup.ts b/apps/meteor/server/methods/OEmbedCacheCleanup.ts index 158964125502..80e83959d5b0 100644 --- a/apps/meteor/server/methods/OEmbedCacheCleanup.ts +++ b/apps/meteor/server/methods/OEmbedCacheCleanup.ts @@ -1,11 +1,11 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { OEmbedCache } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; import { settings } from '../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { OEmbedCacheCleanup(): { message: string }; diff --git a/apps/meteor/server/methods/addAllUserToRoom.ts b/apps/meteor/server/methods/addAllUserToRoom.ts index 0c4f1532371d..c07bdc48040a 100644 --- a/apps/meteor/server/methods/addAllUserToRoom.ts +++ b/apps/meteor/server/methods/addAllUserToRoom.ts @@ -1,7 +1,7 @@ import { Message } from '@rocket.chat/core-services'; import type { IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -11,7 +11,7 @@ import { getDefaultSubscriptionPref } from '../../app/utils/lib/getDefaultSubscr import { callbacks } from '../../lib/callbacks'; import { getSubscriptionAutotranslateDefaultConfig } from '../lib/getSubscriptionAutotranslateDefaultConfig'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addAllUserToRoom(rid: IRoom['_id'], activeUsersOnly?: boolean): Promise; diff --git a/apps/meteor/server/methods/addRoomLeader.ts b/apps/meteor/server/methods/addRoomLeader.ts index d8c9d1a7351f..b8e09b44065a 100644 --- a/apps/meteor/server/methods/addRoomLeader.ts +++ b/apps/meteor/server/methods/addRoomLeader.ts @@ -1,14 +1,14 @@ import { api, Message, Team } from '@rocket.chat/core-services'; import type { IRoom, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; import { settings } from '../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addRoomLeader(rid: IRoom['_id'], userId: IUser['_id']): boolean; diff --git a/apps/meteor/server/methods/addRoomModerator.ts b/apps/meteor/server/methods/addRoomModerator.ts index 357629a8155e..ef64ced09423 100644 --- a/apps/meteor/server/methods/addRoomModerator.ts +++ b/apps/meteor/server/methods/addRoomModerator.ts @@ -1,15 +1,15 @@ import { api, Message, Team } from '@rocket.chat/core-services'; import type { IRoom, IUser } from '@rocket.chat/core-typings'; import { isRoomFederated } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; import { settings } from '../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addRoomModerator(rid: IRoom['_id'], userId: IUser['_id']): boolean; diff --git a/apps/meteor/server/methods/addRoomOwner.ts b/apps/meteor/server/methods/addRoomOwner.ts index 5ee7a9dd74d2..f64e6699a4cb 100644 --- a/apps/meteor/server/methods/addRoomOwner.ts +++ b/apps/meteor/server/methods/addRoomOwner.ts @@ -1,15 +1,15 @@ import { api, Message, Team } from '@rocket.chat/core-services'; import type { IRoom, IUser } from '@rocket.chat/core-typings'; import { isRoomFederated } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; import { settings } from '../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { addRoomOwner(rid: IRoom['_id'], userId: IUser['_id']): boolean; diff --git a/apps/meteor/server/methods/afterVerifyEmail.ts b/apps/meteor/server/methods/afterVerifyEmail.ts index c9c4819ed4f6..06bf389b0a03 100644 --- a/apps/meteor/server/methods/afterVerifyEmail.ts +++ b/apps/meteor/server/methods/afterVerifyEmail.ts @@ -1,11 +1,11 @@ import type { IRole } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Roles, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; const rolesToChangeTo: Map = new Map([['anonymous', ['user']]]); -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { afterVerifyEmail(): void; diff --git a/apps/meteor/server/methods/browseChannels.ts b/apps/meteor/server/methods/browseChannels.ts index 5516b83d184a..965accc83954 100644 --- a/apps/meteor/server/methods/browseChannels.ts +++ b/apps/meteor/server/methods/browseChannels.ts @@ -1,8 +1,8 @@ import { Team } from '@rocket.chat/core-services'; import type { IRoom, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms, Users, Subscriptions } from '@rocket.chat/models'; import { escapeRegExp } from '@rocket.chat/string-helpers'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import mem from 'mem'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; @@ -308,7 +308,7 @@ const getUsers = async ( }; }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { browseChannels: (params: { diff --git a/apps/meteor/server/methods/canAccessRoom.ts b/apps/meteor/server/methods/canAccessRoom.ts index 945dd0e9a14f..eeff599a8585 100644 --- a/apps/meteor/server/methods/canAccessRoom.ts +++ b/apps/meteor/server/methods/canAccessRoom.ts @@ -1,13 +1,13 @@ import type { IRoom, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomAsync } from '../../app/authorization/server'; import { settings } from '../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { canAccessRoom(rid: IRoom['_id'], userId: IUser['_id'], extraData?: Record): (IRoom & { username?: string }) | boolean; diff --git a/apps/meteor/server/methods/channelsList.ts b/apps/meteor/server/methods/channelsList.ts index 4a2a154a191a..654c4aa070d6 100644 --- a/apps/meteor/server/methods/channelsList.ts +++ b/apps/meteor/server/methods/channelsList.ts @@ -1,6 +1,6 @@ import type { IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms, Subscriptions, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import type { FindOptions } from 'mongodb'; @@ -11,7 +11,7 @@ import { settings } from '../../app/settings/server'; import { getUserPreference } from '../../app/utils/server/lib/getUserPreference'; import { trim } from '../../lib/utils/stringUtils'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { channelsList(filter: string, channelType: string, limit?: number, sort?: string): { channels: IRoom[] }; diff --git a/apps/meteor/server/methods/createDirectMessage.ts b/apps/meteor/server/methods/createDirectMessage.ts index ccbfe8916cae..51847454fe61 100644 --- a/apps/meteor/server/methods/createDirectMessage.ts +++ b/apps/meteor/server/methods/createDirectMessage.ts @@ -1,7 +1,7 @@ import type { ICreateRoomParams } from '@rocket.chat/core-services'; import type { ICreatedRoom, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check, Match } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -119,7 +119,7 @@ export async function createDirectMessage( }; } -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { createDirectMessage(...usernames: Exclude[]): Omit; diff --git a/apps/meteor/server/methods/deleteFileMessage.ts b/apps/meteor/server/methods/deleteFileMessage.ts index 42b52c404301..7fbf8650bd2a 100644 --- a/apps/meteor/server/methods/deleteFileMessage.ts +++ b/apps/meteor/server/methods/deleteFileMessage.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import type { DeleteResult } from 'mongodb'; @@ -7,7 +7,7 @@ import type { DeleteResult } from 'mongodb'; import { FileUpload } from '../../app/file-upload/server'; import { deleteMessageValidatingPermission } from '../../app/lib/server/functions/deleteMessage'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { deleteFileMessage(fileID: string): Promise; diff --git a/apps/meteor/server/methods/deleteUser.ts b/apps/meteor/server/methods/deleteUser.ts index e8b1f6eeed65..32dc4f8eb313 100644 --- a/apps/meteor/server/methods/deleteUser.ts +++ b/apps/meteor/server/methods/deleteUser.ts @@ -1,14 +1,14 @@ import { Apps, AppEvents } from '@rocket.chat/apps'; import type { IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; import { deleteUser } from '../../app/lib/server/functions/deleteUser'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { deleteUser(userId: IUser['_id'], confirmRelinquish?: boolean): boolean; diff --git a/apps/meteor/server/methods/eraseRoom.ts b/apps/meteor/server/methods/eraseRoom.ts index b9b4833ad67f..e11c0fe6dcfd 100644 --- a/apps/meteor/server/methods/eraseRoom.ts +++ b/apps/meteor/server/methods/eraseRoom.ts @@ -1,7 +1,7 @@ import { AppEvents, Apps } from '@rocket.chat/apps'; import { Message, Team } from '@rocket.chat/core-services'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -58,7 +58,7 @@ export async function eraseRoom(rid: string, uid: string): Promise { } } -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { eraseRoom(rid: string): Promise; diff --git a/apps/meteor/server/methods/getAvatarSuggestion.ts b/apps/meteor/server/methods/getAvatarSuggestion.ts index 5cf8cdd2e4b1..f00c1a6563d2 100644 --- a/apps/meteor/server/methods/getAvatarSuggestion.ts +++ b/apps/meteor/server/methods/getAvatarSuggestion.ts @@ -1,11 +1,11 @@ import type { IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; import { getAvatarSuggestionForUser } from '../../app/lib/server/functions/getAvatarSuggestionForUser'; import { methodDeprecationLogger } from '../../app/lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getAvatarSuggestion(): Record< diff --git a/apps/meteor/server/methods/getPasswordPolicy.ts b/apps/meteor/server/methods/getPasswordPolicy.ts index cc35f1cfb514..483938716093 100644 --- a/apps/meteor/server/methods/getPasswordPolicy.ts +++ b/apps/meteor/server/methods/getPasswordPolicy.ts @@ -1,12 +1,13 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods, TranslationKey } from '@rocket.chat/ui-contexts'; +import type { TranslationKey } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { passwordPolicy } from '../../app/lib/server'; import { methodDeprecationLogger } from '../../app/lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getPasswordPolicy(params: { token: string }): { diff --git a/apps/meteor/server/methods/getRoomById.ts b/apps/meteor/server/methods/getRoomById.ts index c14009a59451..ce21f9c9a043 100644 --- a/apps/meteor/server/methods/getRoomById.ts +++ b/apps/meteor/server/methods/getRoomById.ts @@ -1,13 +1,13 @@ import type { IRoom, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomAsync } from '../../app/authorization/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getRoomById(rid: IRoom['_id']): IRoom; diff --git a/apps/meteor/server/methods/getRoomIdByNameOrId.ts b/apps/meteor/server/methods/getRoomIdByNameOrId.ts index d660a43d3f6f..91dbf555fe79 100644 --- a/apps/meteor/server/methods/getRoomIdByNameOrId.ts +++ b/apps/meteor/server/methods/getRoomIdByNameOrId.ts @@ -1,12 +1,12 @@ // DEPRECATE +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomAsync } from '../../app/authorization/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getRoomIdByNameOrId(rid: string): string; diff --git a/apps/meteor/server/methods/getRoomNameById.ts b/apps/meteor/server/methods/getRoomNameById.ts index 3aec8ed249aa..ebe0ade89f44 100644 --- a/apps/meteor/server/methods/getRoomNameById.ts +++ b/apps/meteor/server/methods/getRoomNameById.ts @@ -1,12 +1,12 @@ import type { IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getRoomNameById(rid: IRoom['_id']): Promise; diff --git a/apps/meteor/server/methods/getSetupWizardParameters.ts b/apps/meteor/server/methods/getSetupWizardParameters.ts index 808c308611f3..e204b02514f9 100644 --- a/apps/meteor/server/methods/getSetupWizardParameters.ts +++ b/apps/meteor/server/methods/getSetupWizardParameters.ts @@ -1,11 +1,11 @@ import type { ISetting } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Settings } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { settings } from '../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getSetupWizardParameters(): Promise<{ diff --git a/apps/meteor/server/methods/getTotalChannels.ts b/apps/meteor/server/methods/getTotalChannels.ts index 45449f104e6b..f1492d85d458 100644 --- a/apps/meteor/server/methods/getTotalChannels.ts +++ b/apps/meteor/server/methods/getTotalChannels.ts @@ -1,8 +1,8 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getTotalChannels(): number; diff --git a/apps/meteor/server/methods/getUsersOfRoom.ts b/apps/meteor/server/methods/getUsersOfRoom.ts index dde359f8e490..d3d69ce93754 100644 --- a/apps/meteor/server/methods/getUsersOfRoom.ts +++ b/apps/meteor/server/methods/getUsersOfRoom.ts @@ -1,6 +1,6 @@ import type { IRoom, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -8,7 +8,7 @@ import { canAccessRoomAsync, roomAccessAttributes } from '../../app/authorizatio import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; import { findUsersOfRoom } from '../lib/findUsersOfRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { getUsersOfRoom( diff --git a/apps/meteor/server/methods/hideRoom.ts b/apps/meteor/server/methods/hideRoom.ts index 64397969cca0..a53a328d549a 100644 --- a/apps/meteor/server/methods/hideRoom.ts +++ b/apps/meteor/server/methods/hideRoom.ts @@ -1,9 +1,9 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { hideRoom(rid: string): Promise; diff --git a/apps/meteor/server/methods/ignoreUser.ts b/apps/meteor/server/methods/ignoreUser.ts index 980efbd31ba4..358fc3be3d8f 100644 --- a/apps/meteor/server/methods/ignoreUser.ts +++ b/apps/meteor/server/methods/ignoreUser.ts @@ -1,9 +1,9 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { ignoreUser(params: { rid: string; userId: string; ignore?: boolean }): boolean; diff --git a/apps/meteor/server/methods/loadHistory.ts b/apps/meteor/server/methods/loadHistory.ts index a2b44ffab519..44f4e8e98e7c 100644 --- a/apps/meteor/server/methods/loadHistory.ts +++ b/apps/meteor/server/methods/loadHistory.ts @@ -1,6 +1,6 @@ import type { IMessage, IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -9,7 +9,7 @@ import { hasPermissionAsync } from '../../app/authorization/server/functions/has import { loadMessageHistory } from '../../app/lib/server/functions/loadMessageHistory'; import { settings } from '../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { loadHistory( diff --git a/apps/meteor/server/methods/loadLocale.ts b/apps/meteor/server/methods/loadLocale.ts index 8cf011c18067..891f708037b9 100644 --- a/apps/meteor/server/methods/loadLocale.ts +++ b/apps/meteor/server/methods/loadLocale.ts @@ -1,10 +1,10 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { getMomentLocale } from '../lib/getMomentLocale'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { loadLocale(locale: string): string | undefined; diff --git a/apps/meteor/server/methods/loadMissedMessages.ts b/apps/meteor/server/methods/loadMissedMessages.ts index f2bdc1c4f0e0..7c0ac4609066 100644 --- a/apps/meteor/server/methods/loadMissedMessages.ts +++ b/apps/meteor/server/methods/loadMissedMessages.ts @@ -1,12 +1,12 @@ import type { IMessage, IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomIdAsync } from '../../app/authorization/server/functions/canAccessRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { loadMissedMessages(rid: IRoom['_id'], ts: Date): Promise; diff --git a/apps/meteor/server/methods/loadNextMessages.ts b/apps/meteor/server/methods/loadNextMessages.ts index a5ff7b6940c5..db3235a498cc 100644 --- a/apps/meteor/server/methods/loadNextMessages.ts +++ b/apps/meteor/server/methods/loadNextMessages.ts @@ -1,13 +1,13 @@ import type { IMessage, IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomIdAsync } from '../../app/authorization/server/functions/canAccessRoom'; import { normalizeMessagesForUser } from '../../app/utils/server/lib/normalizeMessagesForUser'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { loadNextMessages(rid: IRoom['_id'], end?: Date, limit?: number): Promise<{ messages: IMessage[] }>; diff --git a/apps/meteor/server/methods/loadSurroundingMessages.ts b/apps/meteor/server/methods/loadSurroundingMessages.ts index d4cd54dfc2a5..3ea0e1492a80 100644 --- a/apps/meteor/server/methods/loadSurroundingMessages.ts +++ b/apps/meteor/server/methods/loadSurroundingMessages.ts @@ -1,6 +1,6 @@ import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import type { FindOptions } from 'mongodb'; @@ -8,7 +8,7 @@ import type { FindOptions } from 'mongodb'; import { canAccessRoomIdAsync } from '../../app/authorization/server/functions/canAccessRoom'; import { normalizeMessagesForUser } from '../../app/utils/server/lib/normalizeMessagesForUser'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { loadSurroundingMessages( diff --git a/apps/meteor/server/methods/logoutCleanUp.ts b/apps/meteor/server/methods/logoutCleanUp.ts index 359933faccbd..c4ac54020ef7 100644 --- a/apps/meteor/server/methods/logoutCleanUp.ts +++ b/apps/meteor/server/methods/logoutCleanUp.ts @@ -1,12 +1,12 @@ import { AppEvents, Apps } from '@rocket.chat/apps'; import type { IUser } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { afterLogoutCleanUpCallback } from '../../lib/callbacks/afterLogoutCleanUpCallback'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { logoutCleanUp(user: IUser): Promise; diff --git a/apps/meteor/server/methods/messageSearch.ts b/apps/meteor/server/methods/messageSearch.ts index 3ba7b59d2655..e49e3f21a67e 100644 --- a/apps/meteor/server/methods/messageSearch.ts +++ b/apps/meteor/server/methods/messageSearch.ts @@ -1,6 +1,6 @@ import type { ISubscription, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Subscriptions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -10,7 +10,7 @@ import { settings } from '../../app/settings/server'; import { readSecondaryPreferred } from '../database/readSecondaryPreferred'; import { parseMessageSearchQuery } from '../lib/parseMessageSearchQuery'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { messageSearch(text: string, rid?: string, limit?: number, offset?: number): IRawSearchResult | boolean; diff --git a/apps/meteor/server/methods/muteUserInRoom.ts b/apps/meteor/server/methods/muteUserInRoom.ts index 95a0331d9bee..07e9683806da 100644 --- a/apps/meteor/server/methods/muteUserInRoom.ts +++ b/apps/meteor/server/methods/muteUserInRoom.ts @@ -1,7 +1,7 @@ import { Message } from '@rocket.chat/core-services'; import type { IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms, Subscriptions, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -12,7 +12,7 @@ import { RoomMemberActions } from '../../definition/IRoomTypeConfig'; import { callbacks } from '../../lib/callbacks'; import { roomCoordinator } from '../lib/rooms/roomCoordinator'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { muteUserInRoom(data: { rid: IRoom['_id']; username: string }): boolean; diff --git a/apps/meteor/server/methods/openRoom.ts b/apps/meteor/server/methods/openRoom.ts index 3348104862b5..b2957768f237 100644 --- a/apps/meteor/server/methods/openRoom.ts +++ b/apps/meteor/server/methods/openRoom.ts @@ -1,10 +1,10 @@ import type { IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { openRoom(rid: IRoom['_id']): Promise; diff --git a/apps/meteor/server/methods/readMessages.ts b/apps/meteor/server/methods/readMessages.ts index ed1c9fd6441e..217ba948b093 100644 --- a/apps/meteor/server/methods/readMessages.ts +++ b/apps/meteor/server/methods/readMessages.ts @@ -1,13 +1,13 @@ import type { IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomAsync } from '../../app/authorization/server'; import { readMessages } from '../lib/readMessages'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { readMessages(rid: string, readThreads?: boolean): Promise; diff --git a/apps/meteor/server/methods/readThreads.ts b/apps/meteor/server/methods/readThreads.ts index 234d0181294c..8f3652b7012c 100644 --- a/apps/meteor/server/methods/readThreads.ts +++ b/apps/meteor/server/methods/readThreads.ts @@ -1,6 +1,6 @@ import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages, Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -9,7 +9,7 @@ import { settings } from '../../app/settings/server'; import { readThread } from '../../app/threads/server/functions'; import { callbacks } from '../../lib/callbacks'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { readThreads(tmid: IMessage['_id']): void; diff --git a/apps/meteor/server/methods/registerUser.ts b/apps/meteor/server/methods/registerUser.ts index e67181f3b089..09e44c5e1b82 100644 --- a/apps/meteor/server/methods/registerUser.ts +++ b/apps/meteor/server/methods/registerUser.ts @@ -1,6 +1,6 @@ import type { IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Accounts } from 'meteor/accounts-base'; import { Match, check } from 'meteor/check'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; @@ -11,7 +11,7 @@ import { validateEmailDomain, passwordPolicy, RateLimiter } from '../../app/lib/ import { settings } from '../../app/settings/server'; import { trim } from '../../lib/utils/stringUtils'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { registerUser( diff --git a/apps/meteor/server/methods/removeRoomLeader.ts b/apps/meteor/server/methods/removeRoomLeader.ts index 40b217e2b793..754d68960a4a 100644 --- a/apps/meteor/server/methods/removeRoomLeader.ts +++ b/apps/meteor/server/methods/removeRoomLeader.ts @@ -1,14 +1,14 @@ import { api, Message, Team } from '@rocket.chat/core-services'; import type { IRoom, IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; import { settings } from '../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { removeRoomLeader(rid: IRoom['_id'], userId: IUser['_id']): boolean; diff --git a/apps/meteor/server/methods/removeRoomModerator.ts b/apps/meteor/server/methods/removeRoomModerator.ts index a0d24159e4c8..291cc294a5fa 100644 --- a/apps/meteor/server/methods/removeRoomModerator.ts +++ b/apps/meteor/server/methods/removeRoomModerator.ts @@ -1,15 +1,15 @@ import { api, Message, Team } from '@rocket.chat/core-services'; import type { IRoom, IUser } from '@rocket.chat/core-typings'; import { isRoomFederated } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; import { settings } from '../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { removeRoomModerator(rid: IRoom['_id'], userId: IUser['_id']): boolean; diff --git a/apps/meteor/server/methods/removeRoomOwner.ts b/apps/meteor/server/methods/removeRoomOwner.ts index 37311898177c..82ee2c37f9b8 100644 --- a/apps/meteor/server/methods/removeRoomOwner.ts +++ b/apps/meteor/server/methods/removeRoomOwner.ts @@ -1,7 +1,7 @@ import { api, Message, Team } from '@rocket.chat/core-services'; import { isRoomFederated } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -9,7 +9,7 @@ import { getUsersInRole } from '../../app/authorization/server'; import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; import { settings } from '../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { removeRoomOwner(rid: string, userId: string): boolean; diff --git a/apps/meteor/server/methods/removeUserFromRoom.ts b/apps/meteor/server/methods/removeUserFromRoom.ts index 6662ae8d22cf..2f0e703a3b66 100644 --- a/apps/meteor/server/methods/removeUserFromRoom.ts +++ b/apps/meteor/server/methods/removeUserFromRoom.ts @@ -1,8 +1,8 @@ import { Apps, AppEvents } from '@rocket.chat/apps'; import { AppsEngineException } from '@rocket.chat/apps-engine/definition/exceptions'; import { Message, Team } from '@rocket.chat/core-services'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Rooms, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -17,7 +17,7 @@ import { afterRemoveFromRoomCallback } from '../../lib/callbacks/afterRemoveFrom import { removeUserFromRolesAsync } from '../lib/roles/removeUserFromRoles'; import { roomCoordinator } from '../lib/rooms/roomCoordinator'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { removeUserFromRoom(data: { rid: string; username: string }): boolean; diff --git a/apps/meteor/server/methods/reportMessage.ts b/apps/meteor/server/methods/reportMessage.ts index 05ac5aaf7e7b..cc240a2fb291 100644 --- a/apps/meteor/server/methods/reportMessage.ts +++ b/apps/meteor/server/methods/reportMessage.ts @@ -1,14 +1,14 @@ import { Apps, AppEvents } from '@rocket.chat/apps'; import type { IMessage } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { ModerationReports, Rooms, Users, Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { canAccessRoomAsync } from '../../app/authorization/server/functions/canAccessRoom'; import { methodDeprecationLogger } from '../../app/lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { reportMessage(messageId: IMessage['_id'], description: string): Promise; diff --git a/apps/meteor/server/methods/requestDataDownload.ts b/apps/meteor/server/methods/requestDataDownload.ts index bedad2e0e316..80769aae6340 100644 --- a/apps/meteor/server/methods/requestDataDownload.ts +++ b/apps/meteor/server/methods/requestDataDownload.ts @@ -3,14 +3,14 @@ import { tmpdir } from 'os'; import path, { join } from 'path'; import type { IExportOperation } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { ExportOperations, UserDataFiles } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { settings } from '../../app/settings/server'; import * as dataExport from '../lib/dataExport'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { requestDataDownload(params: { fullExport?: boolean }): Promise<{ diff --git a/apps/meteor/server/methods/resetAvatar.ts b/apps/meteor/server/methods/resetAvatar.ts index 1ed59482840e..8df7beb72545 100644 --- a/apps/meteor/server/methods/resetAvatar.ts +++ b/apps/meteor/server/methods/resetAvatar.ts @@ -1,7 +1,7 @@ import { api } from '@rocket.chat/core-services'; import type { IUser } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; @@ -9,7 +9,7 @@ import { hasPermissionAsync } from '../../app/authorization/server/functions/has import { FileUpload } from '../../app/file-upload/server'; import { settings } from '../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { resetAvatar(userId: IUser['_id']): void; diff --git a/apps/meteor/server/methods/roomNameExists.ts b/apps/meteor/server/methods/roomNameExists.ts index e99def10215e..f510391ddd8e 100644 --- a/apps/meteor/server/methods/roomNameExists.ts +++ b/apps/meteor/server/methods/roomNameExists.ts @@ -1,11 +1,11 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { methodDeprecationLogger } from '../../app/lib/server/lib/deprecationWarningLogger'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { roomNameExists(roomName: string): boolean; diff --git a/apps/meteor/server/methods/saveUserPreferences.ts b/apps/meteor/server/methods/saveUserPreferences.ts index dbc6bf835640..f19e653f7ccc 100644 --- a/apps/meteor/server/methods/saveUserPreferences.ts +++ b/apps/meteor/server/methods/saveUserPreferences.ts @@ -1,7 +1,7 @@ +import type { ThemePreference } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions, Users } from '@rocket.chat/models'; import type { FontSize } from '@rocket.chat/rest-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; -import type { ThemePreference } from '@rocket.chat/ui-theming/src/types/themes'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -47,7 +47,7 @@ type UserPreferences = { mentionsWithSymbol?: boolean; }; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { saveUserPreferences(preferences: Partial): boolean; diff --git a/apps/meteor/server/methods/saveUserProfile.ts b/apps/meteor/server/methods/saveUserProfile.ts index c2ed41adaab9..beb72d9a2f63 100644 --- a/apps/meteor/server/methods/saveUserProfile.ts +++ b/apps/meteor/server/methods/saveUserProfile.ts @@ -1,7 +1,7 @@ import { Apps, AppEvents } from '@rocket.chat/apps'; import type { UserStatus } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Accounts } from 'meteor/accounts-base'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -165,7 +165,7 @@ const saveUserProfileWithTwoFactor = twoFactorRequired(saveUserProfile, { requireSecondFactor: true, }); -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { saveUserProfile( diff --git a/apps/meteor/server/methods/sendConfirmationEmail.ts b/apps/meteor/server/methods/sendConfirmationEmail.ts index 8c7d056532d3..b79d037c252f 100644 --- a/apps/meteor/server/methods/sendConfirmationEmail.ts +++ b/apps/meteor/server/methods/sendConfirmationEmail.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Accounts } from 'meteor/accounts-base'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; diff --git a/apps/meteor/server/methods/sendForgotPasswordEmail.ts b/apps/meteor/server/methods/sendForgotPasswordEmail.ts index b77f6318a324..7b8082812dde 100644 --- a/apps/meteor/server/methods/sendForgotPasswordEmail.ts +++ b/apps/meteor/server/methods/sendForgotPasswordEmail.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Accounts } from 'meteor/accounts-base'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -7,7 +7,7 @@ import { Meteor } from 'meteor/meteor'; import { settings } from '../../app/settings/server'; import { SystemLogger } from '../lib/logger/system'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { sendForgotPasswordEmail(to: string): boolean | undefined; diff --git a/apps/meteor/server/methods/setAvatarFromService.ts b/apps/meteor/server/methods/setAvatarFromService.ts index bec5018f9652..b59100e4a627 100644 --- a/apps/meteor/server/methods/setAvatarFromService.ts +++ b/apps/meteor/server/methods/setAvatarFromService.ts @@ -1,11 +1,11 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Match, check } from 'meteor/check'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; import { setAvatarFromServiceWithValidation } from '../../app/lib/server/functions/setUserAvatar'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { setAvatarFromService(dataURI: Buffer | Blob, contentType?: string, service?: string, targetUserId?: string): void; diff --git a/apps/meteor/server/methods/setUserActiveStatus.ts b/apps/meteor/server/methods/setUserActiveStatus.ts index 4a35080543fb..a14616c30c04 100644 --- a/apps/meteor/server/methods/setUserActiveStatus.ts +++ b/apps/meteor/server/methods/setUserActiveStatus.ts @@ -1,11 +1,11 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission'; import { setUserActiveStatus } from '../../app/lib/server/functions/setUserActiveStatus'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { setUserActiveStatus(userId: string, active: boolean, confirmRelinquish?: boolean): boolean; diff --git a/apps/meteor/server/methods/setUserPassword.ts b/apps/meteor/server/methods/setUserPassword.ts index a395b372c467..e17fa09baf4c 100644 --- a/apps/meteor/server/methods/setUserPassword.ts +++ b/apps/meteor/server/methods/setUserPassword.ts @@ -1,5 +1,5 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Accounts } from 'meteor/accounts-base'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -8,7 +8,7 @@ import type { UpdateResult } from 'mongodb'; import { passwordPolicy } from '../../app/lib/server'; import { compareUserPassword } from '../lib/compareUserPassword'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { setUserPassword(password: string): UpdateResult; diff --git a/apps/meteor/server/methods/toggleFavorite.ts b/apps/meteor/server/methods/toggleFavorite.ts index 14a363a3304a..36555a4566db 100644 --- a/apps/meteor/server/methods/toggleFavorite.ts +++ b/apps/meteor/server/methods/toggleFavorite.ts @@ -1,10 +1,10 @@ import type { IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { toggleFavorite(rid: IRoom['_id'], f?: boolean): Promise; diff --git a/apps/meteor/server/methods/unmuteUserInRoom.ts b/apps/meteor/server/methods/unmuteUserInRoom.ts index 74abdc472e78..ffdb8466de3f 100644 --- a/apps/meteor/server/methods/unmuteUserInRoom.ts +++ b/apps/meteor/server/methods/unmuteUserInRoom.ts @@ -1,7 +1,7 @@ import { Message } from '@rocket.chat/core-services'; import type { IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms, Subscriptions, Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Match, check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; @@ -12,7 +12,7 @@ import { RoomMemberActions } from '../../definition/IRoomTypeConfig'; import { callbacks } from '../../lib/callbacks'; import { roomCoordinator } from '../lib/rooms/roomCoordinator'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { unmuteUserInRoom(data: { rid: IRoom['_id']; username: string }): boolean; diff --git a/apps/meteor/server/methods/userPresence.ts b/apps/meteor/server/methods/userPresence.ts index aa5aefa297e8..21f3f795155e 100644 --- a/apps/meteor/server/methods/userPresence.ts +++ b/apps/meteor/server/methods/userPresence.ts @@ -1,9 +1,9 @@ import { Presence } from '@rocket.chat/core-services'; import { UserStatus } from '@rocket.chat/core-typings'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'UserPresence:setDefaultStatus'(status: UserStatus): boolean | undefined; diff --git a/apps/meteor/server/methods/userSetUtcOffset.ts b/apps/meteor/server/methods/userSetUtcOffset.ts index d06a8f4b76d3..819b9c1b92f1 100644 --- a/apps/meteor/server/methods/userSetUtcOffset.ts +++ b/apps/meteor/server/methods/userSetUtcOffset.ts @@ -1,10 +1,10 @@ +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Users } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { userSetUtcOffset(utcOffset: number): void; diff --git a/apps/meteor/server/models/dummy/BaseDummy.ts b/apps/meteor/server/models/dummy/BaseDummy.ts index 9c91036d3969..c3052ede9487 100644 --- a/apps/meteor/server/models/dummy/BaseDummy.ts +++ b/apps/meteor/server/models/dummy/BaseDummy.ts @@ -1,6 +1,7 @@ import type { RocketChatRecordDeleted } from '@rocket.chat/core-typings'; import type { DefaultFields, FindPaginated, IBaseModel, InsertionModel, ResultFields } from '@rocket.chat/model-typings'; -import { getCollectionName } from '@rocket.chat/models'; +import { getCollectionName, UpdaterImpl } from '@rocket.chat/models'; +import type { Updater } from '@rocket.chat/models'; import type { BulkWriteOptions, ChangeStream, @@ -40,6 +41,14 @@ export class BaseDummy< // nothing to do } + public getUpdater(): Updater { + return new UpdaterImpl(); + } + + public updateFromUpdater(query: Filter, updater: Updater): Promise { + return this.updateOne(query, updater); + } + getCollectionName(): string { return this.collectionName; } diff --git a/apps/meteor/server/models/raw/BaseRaw.ts b/apps/meteor/server/models/raw/BaseRaw.ts index 96f64b061ade..1a3dd1a3eb4c 100644 --- a/apps/meteor/server/models/raw/BaseRaw.ts +++ b/apps/meteor/server/models/raw/BaseRaw.ts @@ -1,6 +1,7 @@ import type { RocketChatRecordDeleted } from '@rocket.chat/core-typings'; import type { IBaseModel, DefaultFields, ResultFields, FindPaginated, InsertionModel } from '@rocket.chat/model-typings'; -import { getCollectionName } from '@rocket.chat/models'; +import type { Updater } from '@rocket.chat/models'; +import { getCollectionName, UpdaterImpl } from '@rocket.chat/models'; import { ObjectId } from 'mongodb'; import type { BulkWriteOptions, @@ -109,6 +110,18 @@ export abstract class BaseRaw< return this.collectionName; } + public getUpdater(): Updater { + return new UpdaterImpl(); + } + + public updateFromUpdater(query: Filter, updater: Updater): Promise { + const updateFilter = updater.getUpdateFilter(); + return this.updateOne(query, updateFilter).catch((e) => { + console.warn(e, updateFilter); + return Promise.reject(e); + }); + } + private doNotMixInclusionAndExclusionFields(options: FindOptions = {}): FindOptions { const optionsDef = this.ensureDefaultFields(options); if (optionsDef?.projection === undefined) { diff --git a/apps/meteor/server/models/raw/LivechatDepartmentAgents.ts b/apps/meteor/server/models/raw/LivechatDepartmentAgents.ts index 76a0e7610445..891542f03e7a 100644 --- a/apps/meteor/server/models/raw/LivechatDepartmentAgents.ts +++ b/apps/meteor/server/models/raw/LivechatDepartmentAgents.ts @@ -12,6 +12,7 @@ import type { DeleteResult, IndexDescription, SortDirection, + AggregationCursor, } from 'mongodb'; import { BaseRaw } from './BaseRaw'; @@ -111,34 +112,6 @@ export class LivechatDepartmentAgentsRaw extends BaseRaw; - - findActiveDepartmentsByAgentId(agentId: string, options: FindOptions): FindCursor; - - findActiveDepartmentsByAgentId

( - agentId: string, - options: FindOptions

, - ): FindCursor

; - - findActiveDepartmentsByAgentId

( - agentId: string, - options?: - | undefined - | FindOptions - | FindOptions

, - ): FindCursor | FindCursor

{ - const query = { - agentId, - departmentEnabled: true, - }; - - if (options === undefined) { - return this.find(query); - } - - return this.find(query, options); - } - findByDepartmentIds(departmentIds: string[], options = {}): FindCursor { return this.find({ departmentId: { $in: departmentIds } }, options); } @@ -395,6 +368,39 @@ export class LivechatDepartmentAgentsRaw extends BaseRaw { return this.find({ agentId: { $in: agentsIds }, departmentId }, options); } + + findDepartmentsOfAgent(agentId: string, enabled = false): AggregationCursor { + return this.col.aggregate([ + { + $match: { + agentId, + ...(enabled && { departmentEnabled: true }), + }, + }, + { + $lookup: { + from: 'rocketchat_livechat_department', + localField: 'departmentId', + foreignField: '_id', + as: 'department', + }, + }, + { $unwind: '$department' }, + { + $project: { + _id: '$_id', + agentId: '$agentId', + departmentId: '$departmentId', + departmentName: '$department.name', + username: '$username', + count: '$count', + order: '$order', + departmentEnabled: '$departmentEnabled', + _updatedAt: '$_updatedAt', + }, + }, + ]); + } } const isStringValue = (value: any): value is string => typeof value === 'string'; diff --git a/apps/meteor/server/models/raw/LivechatInquiry.ts b/apps/meteor/server/models/raw/LivechatInquiry.ts index 3178d217be4f..52aedd0585f8 100644 --- a/apps/meteor/server/models/raw/LivechatInquiry.ts +++ b/apps/meteor/server/models/raw/LivechatInquiry.ts @@ -154,10 +154,7 @@ export class LivechatInquiryRaw extends BaseRaw implemen }, }, { - locked: false, - }, - { - locked: { $exists: false }, + locked: { $ne: true }, }, ], }, @@ -189,7 +186,7 @@ export class LivechatInquiryRaw extends BaseRaw implemen async unlockAll(): Promise { return this.updateMany( - { $or: [{ lockedAt: { $exists: true } }, { locked: { $exists: true } }] }, + { locked: { $exists: true } }, { $unset: { locked: 1, lockedAt: 1 }, $set: { status: LivechatInquiryStatus.QUEUED, queuedAt: new Date() } }, ); } diff --git a/apps/meteor/server/models/raw/LivechatRooms.ts b/apps/meteor/server/models/raw/LivechatRooms.ts index 648af95ed180..731cbcebf593 100644 --- a/apps/meteor/server/models/raw/LivechatRooms.ts +++ b/apps/meteor/server/models/raw/LivechatRooms.ts @@ -11,6 +11,7 @@ import type { } from '@rocket.chat/core-typings'; import { UserStatus } from '@rocket.chat/core-typings'; import type { ILivechatRoomsModel } from '@rocket.chat/model-typings'; +import type { Updater } from '@rocket.chat/models'; import { Settings } from '@rocket.chat/models'; import { escapeRegExp } from '@rocket.chat/string-helpers'; import type { @@ -1972,100 +1973,75 @@ export class LivechatRoomsRaw extends BaseRaw implements ILive return this.find(query, options); } - setResponseByRoomId(roomId: string, responseBy: IOmnichannelRoom['responseBy']) { - return this.updateOne( - { - _id: roomId, - t: 'l', - }, - { - $set: { - responseBy, - }, - $unset: { - waitingResponse: 1, - }, - }, - ); + getResponseByRoomIdUpdateQuery(responseBy: IOmnichannelRoom['responseBy'], updater: Updater = this.getUpdater()) { + updater.set('responseBy', responseBy); + updater.unset('waitingResponse'); + return updater; } - setNotResponseByRoomId(roomId: string) { - return this.updateOne( - { - _id: roomId, - t: 'l', - }, - { - $set: { - waitingResponse: true, - }, - $unset: { - responseBy: 1, - }, - }, - ); + getNotResponseByRoomIdUpdateQuery(updater: Updater = this.getUpdater()) { + updater.set('waitingResponse', true); + updater.unset('responseBy'); + return updater; } - setAgentLastMessageTs(roomId: string) { - return this.updateOne( - { - _id: roomId, - t: 'l', - }, - { - $set: { - 'responseBy.lastMessageTs': new Date(), - }, - }, - ); + getAgentLastMessageTsUpdateQuery(updater: Updater = this.getUpdater()) { + return updater.set('responseBy.lastMessageTs', new Date()); } - saveAnalyticsDataByRoomId(room: IOmnichannelRoom, message: IMessage, analyticsData: Record) { - const update: DeepWritable> = { - $set: { - ...(analyticsData && { - 'metrics.response.avg': analyticsData.avgResponseTime, - }), - ...(analyticsData?.firstResponseTime && { - 'metrics.reaction.fd': analyticsData.firstReactionDate, - 'metrics.reaction.ft': analyticsData.firstReactionTime, - 'metrics.response.fd': analyticsData.firstResponseDate, - 'metrics.response.ft': analyticsData.firstResponseTime, - }), - }, - ...(analyticsData && { - $inc: { - 'metrics.response.total': 1, - 'metrics.response.tt': analyticsData.responseTime as number, - 'metrics.reaction.tt': analyticsData.reactionTime as number, - }, - }), - }; + private getAnalyticsUpdateQuery( + analyticsData: Record | undefined, + updater: Updater = this.getUpdater(), + ) { + if (analyticsData) { + updater.set('metrics.response.avg', analyticsData.avgResponseTime); + updater.inc('metrics.response.total', 1); + updater.inc('metrics.response.tt', analyticsData.responseTime as number); + updater.inc('metrics.reaction.tt', analyticsData.reactionTime as number); + } + + if (analyticsData?.firstResponseTime) { + updater.set('metrics.reaction.fd', analyticsData.firstReactionDate); + updater.set('metrics.reaction.ft', analyticsData.firstReactionTime); + updater.set('metrics.response.fd', analyticsData.firstResponseDate); + updater.set('metrics.response.ft', analyticsData.firstResponseTime); + } + return updater; + } + + getAnalyticsUpdateQueryBySentByAgent( + room: IOmnichannelRoom, + message: IMessage, + analyticsData: Record | undefined, + updater: Updater = this.getUpdater(), + ) { // livechat analytics : update last message timestamps const visitorLastQuery = room.metrics?.v ? room.metrics.v.lq : room.ts; const agentLastReply = room.metrics?.servedBy ? room.metrics.servedBy.lr : room.ts; - if (message.token) { - // update visitor timestamp, only if its new inquiry and not continuing message - if (agentLastReply >= visitorLastQuery) { - // if first query, not continuing query from visitor - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - update.$set!['metrics.v.lq'] = message.ts; - } - } else if (visitorLastQuery > agentLastReply) { - // update agent timestamp, if first response, not continuing - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - update.$set!['metrics.servedBy.lr'] = message.ts; + if (visitorLastQuery > agentLastReply) { + return this.getAnalyticsUpdateQuery(analyticsData, updater).set('metrics.servedBy.lr', message.ts); } - return this.updateOne( - { - _id: room._id, - t: 'l', - }, - update, - ); + return this.getAnalyticsUpdateQuery(analyticsData, updater); + } + + getAnalyticsUpdateQueryBySentByVisitor( + room: IOmnichannelRoom, + message: IMessage, + updater: Updater = this.getUpdater(), + ) { + // livechat analytics : update last message timestamps + const visitorLastQuery = room.metrics?.v ? room.metrics.v.lq : room.ts; + const agentLastReply = room.metrics?.servedBy ? room.metrics.servedBy.lr : room.ts; + + // update visitor timestamp, only if its new inquiry and not continuing message + if (agentLastReply >= visitorLastQuery) { + return updater.set('metrics.v.lq', message.ts); + } + + return updater; } getTotalConversationsBetweenDate(t: 'l', date: { gte: Date; lt: Date }, { departmentId }: { departmentId?: string } = {}) { @@ -2379,17 +2355,8 @@ export class LivechatRoomsRaw extends BaseRaw implements ILive return this.deleteOne(query); } - setVisitorLastMessageTimestampByRoomId(roomId: string, lastMessageTs: Date) { - const query = { - _id: roomId, - }; - const update = { - $set: { - 'v.lastMessageTs': lastMessageTs, - }, - }; - - return this.updateOne(query, update); + getVisitorLastMessageTsUpdateQueryByRoomId(lastMessageTs: Date, updater: Updater = this.getUpdater()) { + return updater.set('v.lastMessageTs', lastMessageTs); } setVisitorInactivityInSecondsById(roomId: string, visitorInactivity: number) { @@ -2441,18 +2408,17 @@ export class LivechatRoomsRaw extends BaseRaw implements ILive return this.updateOne(query, update); } + getVisitorActiveForPeriodUpdateQuery(period: string, updater: Updater = this.getUpdater()): Updater { + return updater.addToSet('v.activity', period); + } + markVisitorActiveForPeriod(rid: string, period: string): Promise { const query = { _id: rid, }; + const updater = this.getVisitorActiveForPeriodUpdateQuery(period); - const update = { - $addToSet: { - 'v.activity': period, - }, - }; - - return this.updateOne(query, update); + return this.updateOne(query, updater.getUpdateFilter()); } async getMACStatisticsForPeriod(period: string): Promise { @@ -2622,6 +2588,13 @@ export class LivechatRoomsRaw extends BaseRaw implements ILive throw new Error('Method not implemented.'); } + getPredictedVisitorAbandonmentByRoomIdUpdateQuery( + _willBeAbandonedAt: Date, + _updater: Updater, + ): Updater { + throw new Error('Method not implemented.'); + } + setPredictedVisitorAbandonmentByRoomId(_rid: string, _willBeAbandonedAt: Date): Promise { throw new Error('Method not implemented.'); } diff --git a/apps/meteor/server/models/raw/Rooms.ts b/apps/meteor/server/models/raw/Rooms.ts index a4cd19a1c30a..bb496bf79971 100644 --- a/apps/meteor/server/models/raw/Rooms.ts +++ b/apps/meteor/server/models/raw/Rooms.ts @@ -10,6 +10,7 @@ import type { } from '@rocket.chat/core-typings'; import type { FindPaginated, IRoomsModel, IChannelsWithNumberOfMessagesBetweenDate } from '@rocket.chat/model-typings'; import { Subscriptions } from '@rocket.chat/models'; +import type { Updater } from '@rocket.chat/models'; import { escapeRegExp } from '@rocket.chat/string-helpers'; import type { AggregationCursor, @@ -662,6 +663,10 @@ export class RoomsRaw extends BaseRaw implements IRoomsModel { return this.updateOne({ _id: roomId }, { $set: { name } }); } + setSidepanelById(roomId: IRoom['_id'], sidepanel: IRoom['sidepanel']): Promise { + return this.updateOne({ _id: roomId }, { $set: { sidepanel } }); + } + setFnameById(_id: IRoom['_id'], fname: IRoom['fname']): Promise { const query: Filter = { _id }; @@ -884,6 +889,10 @@ export class RoomsRaw extends BaseRaw implements IRoomsModel { return this.updateOne(query, update); } + getIncMsgCountUpdateQuery(inc: number, roomUpdater: Updater): Updater { + return roomUpdater.inc('msgs', inc); + } + decreaseMessageCountById(_id: IRoom['_id'], count = 1) { return this.incMsgCountById(_id, -count); } @@ -1523,25 +1532,19 @@ export class RoomsRaw extends BaseRaw implements IRoomsModel { return this.updateOne(query, update); } - incMsgCountAndSetLastMessageById( - _id: IRoom['_id'], - inc = 1, - lastMessageTimestamp: NonNullable, - lastMessage?: IMessage, - ): Promise { - const query: Filter = { _id }; + setIncMsgCountAndSetLastMessageUpdateQuery( + inc: number, + lastMessage: IMessage, + shouldStoreLastMessage: boolean, + roomUpdater: Updater, + ): Updater { + roomUpdater.inc('msgs', inc).set('lm', lastMessage.ts); - const update: UpdateFilter = { - $set: { - lm: lastMessageTimestamp, - ...(lastMessage ? { lastMessage } : {}), - }, - $inc: { - msgs: inc, - }, - }; + if (shouldStoreLastMessage) { + roomUpdater.set('lastMessage', lastMessage); + } - return this.updateOne(query, update); + return roomUpdater; } incUsersCountById(_id: IRoom['_id'], inc = 1): Promise { @@ -1574,16 +1577,8 @@ export class RoomsRaw extends BaseRaw implements IRoomsModel { return this.updateMany(query, update); } - setLastMessageById(_id: IRoom['_id'], lastMessage: IRoom['lastMessage']): Promise { - const query: Filter = { _id }; - - const update: UpdateFilter = { - $set: { - lastMessage, - }, - }; - - return this.updateOne(query, update); + getLastMessageUpdateQuery(lastMessage: IRoom['lastMessage'], roomUpdater: Updater): Updater { + return roomUpdater.set('lastMessage', lastMessage); } async resetLastMessageById(_id: IRoom['_id'], lastMessage: IRoom['lastMessage'] | null, msgCountDelta?: number): Promise { diff --git a/apps/meteor/server/modules/notifications/notifications.module.ts b/apps/meteor/server/modules/notifications/notifications.module.ts index 75a2935d5616..a0394591aadf 100644 --- a/apps/meteor/server/modules/notifications/notifications.module.ts +++ b/apps/meteor/server/modules/notifications/notifications.module.ts @@ -1,7 +1,7 @@ import { Authorization, VideoConf } from '@rocket.chat/core-services'; import type { ISubscription, IOmnichannelRoom, IUser } from '@rocket.chat/core-typings'; +import type { StreamerCallbackArgs, StreamKeys, StreamNames } from '@rocket.chat/ddp-client'; import { Rooms, Subscriptions, Users, Settings } from '@rocket.chat/models'; -import type { StreamerCallbackArgs, StreamKeys, StreamNames } from '@rocket.chat/ui-contexts'; import type { IStreamer, IStreamerConstructor, IPublication } from 'meteor/rocketchat:streamer'; import type { ImporterProgress } from '../../../app/importer/server/classes/ImporterProgress'; @@ -257,7 +257,7 @@ export class NotificationsModule { this.streamRoomUsers.allowRead('none'); this.streamRoomUsers.allowWrite(async function (eventName, ...args: any[]) { - const [roomId, e] = eventName.split('/') as typeof eventName extends `${infer K}/${infer E}` ? [K, E] : never; + const [roomId, e] = eventName.split('/'); if (!this.userId) { const room = await Rooms.findOneById(roomId, { projection: { 't': 1, 'servedBy._id': 1 }, diff --git a/apps/meteor/server/modules/streamer/streamer.module.ts b/apps/meteor/server/modules/streamer/streamer.module.ts index c669c7bc2a00..9fc8065db2e7 100644 --- a/apps/meteor/server/modules/streamer/streamer.module.ts +++ b/apps/meteor/server/modules/streamer/streamer.module.ts @@ -1,5 +1,5 @@ import { MeteorError } from '@rocket.chat/core-services'; -import type { StreamerEvents } from '@rocket.chat/ui-contexts'; +import type { StreamerEvents } from '@rocket.chat/ddp-client'; import { EventEmitter } from 'eventemitter3'; import type { IPublication, Rule, Connection, DDPSubscription, IStreamer, IRules, TransformMessage } from 'meteor/rocketchat:streamer'; diff --git a/apps/meteor/server/modules/watchers/lib/messages.ts b/apps/meteor/server/modules/watchers/lib/messages.ts deleted file mode 100644 index e127f465efe9..000000000000 --- a/apps/meteor/server/modules/watchers/lib/messages.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { api, dbWatchersDisabled } from '@rocket.chat/core-services'; -import type { IMessage, IUser, SettingValue, MessageTypesValues } from '@rocket.chat/core-typings'; -import { Messages, Settings, Users } from '@rocket.chat/models'; -import mem from 'mem'; - -import { shouldHideSystemMessage } from '../../../lib/systemMessage/hideSystemMessage'; - -const getUserNameCached = mem( - async (userId: string): Promise => { - const user = await Users.findOne>(userId, { projection: { name: 1 } }); - return user?.name; - }, - { maxAge: 10000 }, -); - -const getSettingCached = mem(async (setting: string): Promise => Settings.getValueById(setting), { maxAge: 10000 }); - -export async function getMessageToBroadcast({ id, data }: { id: IMessage['_id']; data?: IMessage }): Promise { - const message = data ?? (await Messages.findOneById(id)); - if (!message) { - return; - } - - if (message.t) { - const hiddenSystemMessages = (await getSettingCached('Hide_System_Messages')) as MessageTypesValues[]; - const shouldHide = shouldHideSystemMessage(message.t, hiddenSystemMessages); - - if (shouldHide) { - return; - } - } - - if (message._hidden || message.imported != null) { - return; - } - - const useRealName = (await getSettingCached('UI_Use_Real_Name')) === true; - if (useRealName) { - if (message.u?._id) { - const name = await getUserNameCached(message.u._id); - if (name) { - message.u.name = name; - } - } - - if (message.mentions?.length) { - for await (const mention of message.mentions) { - const name = await getUserNameCached(mention._id); - if (name) { - mention.name = name; - } - } - } - } - - return message; -} - -// TODO once the broadcast from file apps/meteor/server/modules/watchers/watchers.module.ts is removed -// this function can be renamed to broadcastMessage -export async function broadcastMessageFromData({ id, data }: { id: IMessage['_id']; data?: IMessage }): Promise { - // if db watchers are active, the event will be triggered automatically so we don't need to broadcast it here. - if (!dbWatchersDisabled) { - return; - } - const message = await getMessageToBroadcast({ id, data }); - if (!message) { - return; - } - void api.broadcast('watch.messages', { message }); -} diff --git a/apps/meteor/server/modules/watchers/watchers.module.ts b/apps/meteor/server/modules/watchers/watchers.module.ts index 684db6945626..c42b24d35b7e 100644 --- a/apps/meteor/server/modules/watchers/watchers.module.ts +++ b/apps/meteor/server/modules/watchers/watchers.module.ts @@ -37,9 +37,9 @@ import { LivechatPriority, } from '@rocket.chat/models'; +import { getMessageToBroadcast } from '../../../app/lib/server/lib/notifyListener'; import { subscriptionFields, roomFields } from '../../../lib/publishFields'; import type { DatabaseWatcher } from '../../database/DatabaseWatcher'; -import { getMessageToBroadcast } from './lib/messages'; type BroadcastCallback = (event: T, ...args: Parameters) => Promise; diff --git a/apps/meteor/server/publications/messages.ts b/apps/meteor/server/publications/messages.ts index e08aa61a13a3..ebf813a637d0 100644 --- a/apps/meteor/server/publications/messages.ts +++ b/apps/meteor/server/publications/messages.ts @@ -1,13 +1,13 @@ import type { IMessage, IRoom } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Messages } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; import { Meteor } from 'meteor/meteor'; import type { FindOptions } from 'mongodb'; import { canAccessRoomIdAsync } from '../../app/authorization/server/functions/canAccessRoom'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'messages/get': ( diff --git a/apps/meteor/server/publications/room/index.ts b/apps/meteor/server/publications/room/index.ts index 84841d30ce53..f8ced449f8cb 100644 --- a/apps/meteor/server/publications/room/index.ts +++ b/apps/meteor/server/publications/room/index.ts @@ -1,6 +1,6 @@ import type { IOmnichannelRoom, IRoom, RoomType } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Rooms } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import _ from 'underscore'; @@ -13,7 +13,7 @@ import { roomCoordinator } from '../../lib/rooms/roomCoordinator'; type PublicRoomField = keyof typeof roomFields; type PublicRoom = Pick & Pick; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'rooms/get'(updatedAt?: Date): IRoom[] | { update: IRoom[]; remove: IRoom[] }; diff --git a/apps/meteor/server/publications/settings/index.ts b/apps/meteor/server/publications/settings/index.ts index 2cf699c8d82e..17c58a123c37 100644 --- a/apps/meteor/server/publications/settings/index.ts +++ b/apps/meteor/server/publications/settings/index.ts @@ -1,6 +1,6 @@ import type { ISetting, RocketChatRecordDeleted } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Settings } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import type { WithId } from 'mongodb'; @@ -8,7 +8,7 @@ import { getSettingPermissionId } from '../../../app/authorization/lib'; import { hasPermissionAsync, hasAtLeastOnePermissionAsync } from '../../../app/authorization/server/functions/hasPermission'; import { SettingsEvents } from '../../../app/settings/server'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'public-settings/get'( diff --git a/apps/meteor/server/publications/spotlight.ts b/apps/meteor/server/publications/spotlight.ts index a88a0eb74b65..b9275598c4c6 100644 --- a/apps/meteor/server/publications/spotlight.ts +++ b/apps/meteor/server/publications/spotlight.ts @@ -1,10 +1,10 @@ -import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; import { Spotlight } from '../lib/spotlight'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { spotlight( diff --git a/apps/meteor/server/publications/subscription/index.ts b/apps/meteor/server/publications/subscription/index.ts index 9bbe1f63afe3..b691b7daf9ee 100644 --- a/apps/meteor/server/publications/subscription/index.ts +++ b/apps/meteor/server/publications/subscription/index.ts @@ -1,11 +1,11 @@ import type { ISubscription } from '@rocket.chat/core-typings'; +import type { ServerMethods } from '@rocket.chat/ddp-client'; import { Subscriptions } from '@rocket.chat/models'; -import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { subscriptionFields } from '../../../lib/publishFields'; -declare module '@rocket.chat/ui-contexts' { +declare module '@rocket.chat/ddp-client' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { 'subscriptions/get'(updatedAt?: Date): ISubscription[] | { update: ISubscription[]; remove: { _id: string; _deletedAt: Date }[] }; diff --git a/apps/meteor/server/routes/avatar/middlewares/auth.js b/apps/meteor/server/routes/avatar/middlewares/auth.js index 40eb072d405c..5a4ead7ed048 100644 --- a/apps/meteor/server/routes/avatar/middlewares/auth.js +++ b/apps/meteor/server/routes/avatar/middlewares/auth.js @@ -1,11 +1,20 @@ -import { userCanAccessAvatar } from '../utils'; +import { userCanAccessAvatar, renderSVGLetters } from '../utils'; // protect all avatar endpoints export const protectAvatars = async (req, res, next) => { if (!(await userCanAccessAvatar(req))) { - res.writeHead(403); - res.write('Forbidden'); + let roomOrUsername; + + if (req.url.startsWith('/room')) { + roomOrUsername = req.url.split('/')[2] || 'Room'; + } else { + roomOrUsername = req.url.split('/')[1] || 'Anonymous'; + } + + res.writeHead(200, { 'Content-Type': 'image/svg+xml' }); + res.write(renderSVGLetters(roomOrUsername, 200)); res.end(); + return; } diff --git a/apps/meteor/server/routes/avatar/user.js b/apps/meteor/server/routes/avatar/user.js index 0d86bc4a08cf..269c2e90019a 100644 --- a/apps/meteor/server/routes/avatar/user.js +++ b/apps/meteor/server/routes/avatar/user.js @@ -1,4 +1,5 @@ import { Avatars, Users } from '@rocket.chat/models'; +import { serverFetch as fetch } from '@rocket.chat/server-fetch'; import { FileUpload } from '../../../app/file-upload/server'; import { settings } from '../../../app/settings/server'; @@ -51,6 +52,13 @@ export const userAvatar = async function (req, res) { return FileUpload.get(file, req, res); } + if (settings.get('Accounts_AvatarExternalProviderUrl')) { + const response = await fetch(settings.get('Accounts_AvatarExternalProviderUrl').replace('{username}', requestUsername)); + response.headers.forEach((value, key) => res.setHeader(key, value)); + response.body.pipe(res); + return; + } + // if still using "letters fallback" if (!wasFallbackModified(reqModifiedHeader, res)) { res.writeHead(304); diff --git a/apps/meteor/server/services/federation/domain/IFederationBridge.ts b/apps/meteor/server/services/federation/domain/IFederationBridge.ts index 62036dfd817a..635202cdd6f4 100644 --- a/apps/meteor/server/services/federation/domain/IFederationBridge.ts +++ b/apps/meteor/server/services/federation/domain/IFederationBridge.ts @@ -110,4 +110,5 @@ export interface IFederationBridge { externalUserId: string, externalRoomId: string, ): Promise<{ creator: { id: string; username: string }; name: string; joinedMembers: string[] } | undefined>; + deactivateUser(externalUserId: string): Promise; } diff --git a/apps/meteor/server/services/federation/infrastructure/matrix/Bridge.ts b/apps/meteor/server/services/federation/infrastructure/matrix/Bridge.ts index 88090b34686d..f5eb049a7496 100644 --- a/apps/meteor/server/services/federation/infrastructure/matrix/Bridge.ts +++ b/apps/meteor/server/services/federation/infrastructure/matrix/Bridge.ts @@ -752,4 +752,17 @@ export class MatrixBridge implements IFederationBridge { 'de.sorunome.msc2409.push_ephemeral': registrationFile.enableEphemeralEvents, }; } + + public async deactivateUser(uid: string) { + /* + * https://spec.matrix.org/v1.11/client-server-api/#post_matrixclientv3accountdeactivate + * Using { erase: false } since rocket.chat side on deactivation we do not delete anything. + */ + const resp = await this.bridgeInstance + .getIntent() + .matrixClient.doRequest('POST', '/_matrix/client/v3/account/deactivate', { user_id: uid }, { erase: false }); + if (resp.id_server_unbind_result !== 'success') { + throw new Error('Failed to deactivate matrix user'); + } + } } diff --git a/apps/meteor/server/services/federation/infrastructure/rocket-chat/hooks/index.ts b/apps/meteor/server/services/federation/infrastructure/rocket-chat/hooks/index.ts index 950aac23a39a..f14257512b11 100644 --- a/apps/meteor/server/services/federation/infrastructure/rocket-chat/hooks/index.ts +++ b/apps/meteor/server/services/federation/infrastructure/rocket-chat/hooks/index.ts @@ -150,7 +150,7 @@ export class FederationHooks { public static afterMessageUpdated(callback: (message: IMessage, roomId: IRoom['_id'], userId: string) => Promise): void { callbacks.add( 'afterSaveMessage', - async (message: IMessage, room: IRoom): Promise => { + async (message, { room }): Promise => { if ( !room || !isRoomFederated(room) || @@ -174,7 +174,7 @@ export class FederationHooks { public static afterMessageSent(callback: (message: IMessage, roomId: IRoom['_id'], userId: string) => Promise): void { callbacks.add( 'afterSaveMessage', - async (message: IMessage, room: IRoom): Promise => { + async (message, { room }): Promise => { if (!room || !isRoomFederated(room) || !message || !settings.get('Federation_Matrix_enabled')) { return message; } diff --git a/apps/meteor/server/services/federation/service.ts b/apps/meteor/server/services/federation/service.ts index c25fd0d3a5a1..66d3fd0cb6ee 100644 --- a/apps/meteor/server/services/federation/service.ts +++ b/apps/meteor/server/services/federation/service.ts @@ -238,6 +238,10 @@ export abstract class AbstractFederationService extends ServiceClassInternal { protected async verifyMatrixIds(matrixIds: string[]): Promise> { return this.bridge.verifyInviteeIds(matrixIds); } + + protected async deactivateRemoteUser(remoteUserId: string) { + return this.bridge.deactivateUser(remoteUserId); + } } abstract class AbstractBaseFederationService extends AbstractFederationService { @@ -342,4 +346,8 @@ export class FederationService extends AbstractBaseFederationService implements public async created(): Promise { return super.created(); } + + public async deactivateRemoteUser(userId: string) { + return super.deactivateRemoteUser(userId); + } } diff --git a/apps/meteor/server/services/messages/service.ts b/apps/meteor/server/services/messages/service.ts index 03906bfd0208..906868b6bb17 100644 --- a/apps/meteor/server/services/messages/service.ts +++ b/apps/meteor/server/services/messages/service.ts @@ -6,12 +6,13 @@ import { Messages, Rooms } from '@rocket.chat/models'; import { deleteMessage } from '../../../app/lib/server/functions/deleteMessage'; import { sendMessage } from '../../../app/lib/server/functions/sendMessage'; import { updateMessage } from '../../../app/lib/server/functions/updateMessage'; +import { notifyOnRoomChangedById, notifyOnMessageChange } from '../../../app/lib/server/lib/notifyListener'; +import { notifyUsersOnSystemMessage } from '../../../app/lib/server/lib/notifyUsersOnMessage'; import { executeSendMessage } from '../../../app/lib/server/methods/sendMessage'; import { executeSetReaction } from '../../../app/reactions/server/setReaction'; import { settings } from '../../../app/settings/server'; import { getUserAvatarURL } from '../../../app/utils/server/getUserAvatarURL'; import { BeforeSaveCannedResponse } from '../../../ee/server/hooks/messages/BeforeSaveCannedResponse'; -import { broadcastMessageFromData } from '../../modules/watchers/lib/messages'; import { BeforeSaveBadWords } from './hooks/BeforeSaveBadWords'; import { BeforeSaveCheckMAC } from './hooks/BeforeSaveCheckMAC'; import { BeforeSaveJumpToMessage } from './hooks/BeforeSaveJumpToMessage'; @@ -97,19 +98,38 @@ export class MessageService extends ServiceClassInternal implements IMessageServ return executeSetReaction(userId, reaction, messageId, shouldReact); } + async saveSystemMessageAndNotifyUser( + type: MessageTypesValues, + rid: string, + messageText: string, + owner: Pick, + extraData?: Partial, + ): Promise { + const createdMessage = await this.saveSystemMessage(type, rid, messageText, owner, extraData); + + const room = await Rooms.findOneById(rid); + if (!room) { + throw new Error('Failed to find the room.'); + } + + await notifyUsersOnSystemMessage(createdMessage, room); + + return createdMessage; + } + async saveSystemMessage( type: MessageTypesValues, rid: string, message: string, owner: Pick, extraData?: Partial, - ): Promise { + ): Promise { const { _id: userId, username, name } = owner; if (!username) { throw new Error('The username cannot be empty.'); } - const [result] = await Promise.all([ + const [{ insertedId }] = await Promise.all([ Messages.createWithTypeRoomIdMessageUserAndUnread( type, rid, @@ -121,11 +141,19 @@ export class MessageService extends ServiceClassInternal implements IMessageServ Rooms.incMsgCountById(rid, 1), ]); - void broadcastMessageFromData({ - id: result.insertedId, - }); + if (!insertedId) { + throw new Error('Failed to save system message.'); + } + + const createdMessage = await Messages.findOneById(insertedId); + if (!createdMessage) { + throw new Error('Failed to find the created message.'); + } + + void notifyOnMessageChange({ id: createdMessage._id, data: createdMessage }); + void notifyOnRoomChangedById(rid); - return result.insertedId; + return createdMessage; } async beforeSave({ diff --git a/apps/meteor/server/services/room/service.ts b/apps/meteor/server/services/room/service.ts index b09dc865f928..3ba47284ddee 100644 --- a/apps/meteor/server/services/room/service.ts +++ b/apps/meteor/server/services/room/service.ts @@ -16,7 +16,7 @@ export class RoomService extends ServiceClassInternal implements IRoomService { protected name = 'room'; async create(uid: string, params: ICreateRoomParams): Promise { - const { type, name, members = [], readOnly, extraData, options } = params; + const { type, name, members = [], readOnly, extraData, options, sidepanel } = params; const hasPermission = await Authorization.hasPermission(uid, `create-${type}`); if (!hasPermission) { @@ -29,7 +29,7 @@ export class RoomService extends ServiceClassInternal implements IRoomService { } // TODO convert `createRoom` function to "raw" and move to here - return createRoom(type, name, user, members, false, readOnly, extraData, options) as unknown as IRoom; + return createRoom(type, name, user, members, false, readOnly, extraData, options, sidepanel) as unknown as IRoom; } async createDirectMessage({ to, from }: { to: string; from: string }): Promise<{ rid: string }> { diff --git a/apps/meteor/server/services/team/service.ts b/apps/meteor/server/services/team/service.ts index f898b1775ae9..bc4211322b66 100644 --- a/apps/meteor/server/services/team/service.ts +++ b/apps/meteor/server/services/team/service.ts @@ -37,7 +37,10 @@ import { settings } from '../../../app/settings/server'; export class TeamService extends ServiceClassInternal implements ITeamService { protected name = 'team'; - async create(uid: string, { team, room = { name: team.name, extraData: {} }, members, owner }: ITeamCreateParams): Promise { + async create( + uid: string, + { team, room = { name: team.name, extraData: {} }, members, owner, sidepanel }: ITeamCreateParams, + ): Promise { if (!(await checkUsernameAvailability(team.name))) { throw new Error('team-name-already-exists'); } @@ -120,6 +123,7 @@ export class TeamService extends ServiceClassInternal implements ITeamService { teamId, teamMain: true, }, + sidepanel, }; const createdRoom = await Room.create(owner || uid, newRoom); diff --git a/apps/meteor/server/services/video-conference/service.ts b/apps/meteor/server/services/video-conference/service.ts index f51ef8ec1c2f..a26e947b6b80 100644 --- a/apps/meteor/server/services/video-conference/service.ts +++ b/apps/meteor/server/services/video-conference/service.ts @@ -40,6 +40,7 @@ import { RocketChatAssets } from '../../../app/assets/server'; import { canAccessRoomIdAsync } from '../../../app/authorization/server/functions/canAccessRoom'; import { createRoom } from '../../../app/lib/server/functions/createRoom'; import { sendMessage } from '../../../app/lib/server/functions/sendMessage'; +import { notifyOnMessageChange } from '../../../app/lib/server/lib/notifyListener'; import { metrics } from '../../../app/metrics/server/lib/metrics'; import PushNotification from '../../../app/push-notifications/server/lib/PushNotification'; import { Push } from '../../../app/push/server/push'; @@ -55,7 +56,6 @@ import { isRoomCompatibleWithVideoConfRinging } from '../../lib/isRoomCompatible import { roomCoordinator } from '../../lib/rooms/roomCoordinator'; import { videoConfProviders } from '../../lib/videoConfProviders'; import { videoConfTypes } from '../../lib/videoConfTypes'; -import { broadcastMessageFromData } from '../../modules/watchers/lib/messages'; const { db } = MongoInternals.defaultRemoteCollectionDriver().mongo; @@ -360,7 +360,7 @@ export class VideoConfService extends ServiceClassInternal implements IVideoConf const text = i18n.t('video_livechat_missed', { username: name }); await Messages.setBlocksById(call.messages.started, [this.buildMessageBlock(text)]); - await broadcastMessageFromData({ + await notifyOnMessageChange({ id: call.messages.started, }); } diff --git a/apps/meteor/server/settings/accounts.ts b/apps/meteor/server/settings/accounts.ts index 39e4183dbf5f..a744c47b2a41 100644 --- a/apps/meteor/server/settings/accounts.ts +++ b/apps/meteor/server/settings/accounts.ts @@ -760,7 +760,7 @@ export const createAccountSettings = () => i18nDescription: 'Accounts_AvatarCacheTime_description', }); - await this.add('Accounts_AvatarBlockUnauthenticatedAccess', false, { + await this.add('Accounts_AvatarBlockUnauthenticatedAccess', true, { type: 'boolean', public: true, }); diff --git a/apps/meteor/server/settings/cas.ts b/apps/meteor/server/settings/cas.ts index f8ae4e6ca65a..48a13d8cbd9c 100644 --- a/apps/meteor/server/settings/cas.ts +++ b/apps/meteor/server/settings/cas.ts @@ -33,8 +33,8 @@ export const createCasSettings = () => await this.add('CAS_popup_width', 810, { type: 'int', group: 'CAS', public: true }); await this.add('CAS_popup_height', 610, { type: 'int', group: 'CAS', public: true }); await this.add('CAS_button_label_text', 'CAS', { type: 'string', group: 'CAS' }); - await this.add('CAS_button_label_color', '#FFFFFF', { type: 'color', group: 'CAS', alert: 'OAuth_button_colors_alert' }); - await this.add('CAS_button_color', '#1d74f5', { type: 'color', group: 'CAS', alert: 'OAuth_button_colors_alert' }); + await this.add('CAS_button_label_color', '#FFFFFF', { type: 'color', group: 'CAS' }); + await this.add('CAS_button_color', '#1d74f5', { type: 'color', group: 'CAS' }); await this.add('CAS_autoclose', true, { type: 'boolean', group: 'CAS' }); }); }); diff --git a/apps/meteor/server/settings/oauth.ts b/apps/meteor/server/settings/oauth.ts index acc397faa37d..c67286771a0a 100644 --- a/apps/meteor/server/settings/oauth.ts +++ b/apps/meteor/server/settings/oauth.ts @@ -115,14 +115,12 @@ export const createOauthSettings = () => public: true, i18nLabel: 'Accounts_OAuth_Custom_Button_Label_Color', persistent: true, - alert: 'OAuth_button_colors_alert', }); await this.add('Accounts_OAuth_Nextcloud_button_color', '#0082c9', { type: 'string', public: true, i18nLabel: 'Accounts_OAuth_Custom_Button_Color', persistent: true, - alert: 'OAuth_button_colors_alert', }); }); @@ -275,13 +273,11 @@ export const createOauthSettings = () => type: 'string', i18nLabel: 'Accounts_OAuth_Custom_Button_Label_Color', persistent: true, - alert: 'OAuth_button_colors_alert', }); await this.add('Accounts_OAuth_Dolphin_button_color', '#1d74f5', { type: 'string', i18nLabel: 'Accounts_OAuth_Custom_Button_Color', persistent: true, - alert: 'OAuth_button_colors_alert', }); }); await this.section('Facebook', async function () { diff --git a/apps/meteor/tests/data/livechat/department.ts b/apps/meteor/tests/data/livechat/department.ts index 47d0f7f2b468..72ab0af9f267 100644 --- a/apps/meteor/tests/data/livechat/department.ts +++ b/apps/meteor/tests/data/livechat/department.ts @@ -16,12 +16,16 @@ const NewDepartmentData = ((): Partial => ({ showOnOfflineForm: true, }))(); -export const createDepartment = async (departmentData: Partial = NewDepartmentData): Promise => { +export const createDepartment = async ( + departmentData: Partial = NewDepartmentData, + agents?: { agentId: string; count?: string; order?: string }[], +): Promise => { const response = await request .post(api('livechat/department')) .set(credentials) .send({ department: departmentData, + ...(agents && { agents }), }) .expect(200); return response.body.department; @@ -38,7 +42,16 @@ const updateDepartment = async (departmentId: string, departmentData: Partial

  • +const createDepartmentWithMethod = ( + initialAgents: { agentId: string; username: string }[] = [], + { + allowReceiveForwardOffline = false, + fallbackForwardDepartment, + }: { + allowReceiveForwardOffline?: boolean; + fallbackForwardDepartment?: string; + } = {}, +) => new Promise((resolve, reject) => { void request .post(methodCall('livechat:saveDepartment')) @@ -56,6 +69,7 @@ const createDepartmentWithMethod = (initialAgents: { agentId: string; username: name: `new department ${Date.now()}`, description: 'created from api', allowReceiveForwardOffline, + fallbackForwardDepartment, }, initialAgents, ], @@ -126,8 +140,10 @@ export const addOrRemoveAgentFromDepartment = async ( export const createDepartmentWithAnOfflineAgent = async ({ allowReceiveForwardOffline = false, + fallbackForwardDepartment, }: { - allowReceiveForwardOffline: boolean; + allowReceiveForwardOffline?: boolean; + fallbackForwardDepartment?: string; }): Promise<{ department: ILivechatDepartment; agent: { @@ -137,7 +153,10 @@ export const createDepartmentWithAnOfflineAgent = async ({ }> => { const { user, credentials } = await createAnOfflineAgent(); - const department = (await createDepartmentWithMethod(undefined, allowReceiveForwardOffline)) as ILivechatDepartment; + const department = (await createDepartmentWithMethod(undefined, { + allowReceiveForwardOffline, + fallbackForwardDepartment, + })) as ILivechatDepartment; await addOrRemoveAgentFromDepartment(department._id, { agentId: user._id, username: user.username }, true); diff --git a/apps/meteor/tests/e2e/administration-settings.spec.ts b/apps/meteor/tests/e2e/administration-settings.spec.ts new file mode 100644 index 000000000000..d2996d6eac88 --- /dev/null +++ b/apps/meteor/tests/e2e/administration-settings.spec.ts @@ -0,0 +1,52 @@ +import { Users } from './fixtures/userStates'; +import { Admin } from './page-objects'; +import { getSettingValueById } from './utils'; +import { test, expect } from './utils/test'; + +test.use({ storageState: Users.admin.state }); + +test.describe.parallel('administration-settings', () => { + let poAdmin: Admin; + + test.beforeEach(async ({ page }) => { + poAdmin = new Admin(page); + }); + + test.describe('General', () => { + let inputSiteURLSetting: string; + + test.beforeAll(async ({ api }) => { + inputSiteURLSetting = (await getSettingValueById(api, 'Site_Url')) as string; + }); + + test.beforeEach(async ({ page }) => { + await page.goto('/admin/settings/General'); + }); + + test('should be able to reset a setting after a change', async () => { + await poAdmin.inputSiteURL.fill('any_text'); + await poAdmin.btnResetSiteURL.click(); + + await expect(poAdmin.inputSiteURL).toHaveValue(inputSiteURLSetting); + }); + + test('should be able to go back to the settings page', async ({ page }) => { + await poAdmin.btnBack.click(); + + await expect(page).toHaveURL('/admin/settings'); + }); + }); + + test.describe('Layout', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/admin/settings/Layout'); + }); + + test('should code mirror full screen be displayed correctly', async ({ page }) => { + await poAdmin.getAccordionBtnByName('Custom CSS').click(); + await poAdmin.btnFullScreen.click(); + + await expect(page.getByRole('code')).toHaveCSS('width', '920px'); + }); + }); +}); diff --git a/apps/meteor/tests/e2e/administration.spec.ts b/apps/meteor/tests/e2e/administration.spec.ts index 703c4a4bd8b1..45fee011efc3 100644 --- a/apps/meteor/tests/e2e/administration.spec.ts +++ b/apps/meteor/tests/e2e/administration.spec.ts @@ -319,34 +319,4 @@ test.describe.parallel('administration', () => { await expect(poAdmin.getIntegrationByName(incomingIntegrationName)).not.toBeVisible(); }); }); - - test.describe('Settings', () => { - test.describe('General', () => { - test.beforeEach(async ({ page }) => { - await page.goto('/admin/settings/General'); - }); - - test.afterAll(async ({ api }) => { - await setSettingValueById(api, 'Language', 'en'); - }); - - test('expect be able to reset a setting after a change', async () => { - await poAdmin.inputSiteURL.type('any_text'); - await poAdmin.btnResetSiteURL.click(); - }); - }); - - test.describe('Layout', () => { - test.beforeEach(async ({ page }) => { - await page.goto('/admin/settings/Layout'); - }); - - test('should code mirror full screen be displayed correctly', async ({ page }) => { - await poAdmin.getAccordionBtnByName('Custom CSS').click(); - await poAdmin.btnFullScreen.click(); - - await expect(page.getByRole('code')).toHaveCSS('width', '920px'); - }); - }); - }); }); diff --git a/apps/meteor/tests/e2e/channel-management.spec.ts b/apps/meteor/tests/e2e/channel-management.spec.ts index fbdd1669eeb5..dc0ec9b1ebaa 100644 --- a/apps/meteor/tests/e2e/channel-management.spec.ts +++ b/apps/meteor/tests/e2e/channel-management.spec.ts @@ -320,6 +320,7 @@ test.describe.serial('channel-management', () => { await poHomeChannel.sidenav.openNewByLabel('Channel'); await poHomeChannel.sidenav.inputChannelName.fill(channelName); await poHomeChannel.sidenav.checkboxPrivateChannel.click(); + await poHomeChannel.sidenav.advancedSettingsAccordion.click(); await poHomeChannel.sidenav.checkboxReadOnly.click(); await poHomeChannel.sidenav.btnCreate.click(); diff --git a/apps/meteor/tests/e2e/e2e-encryption.spec.ts b/apps/meteor/tests/e2e/e2e-encryption.spec.ts index e1a87b4615f6..dd481ea39b6a 100644 --- a/apps/meteor/tests/e2e/e2e-encryption.spec.ts +++ b/apps/meteor/tests/e2e/e2e-encryption.spec.ts @@ -351,6 +351,7 @@ test.describe.serial('e2e-encryption', () => { await poHomeChannel.sidenav.openNewByLabel('Channel'); await poHomeChannel.sidenav.inputChannelName.fill(channelName); + await poHomeChannel.sidenav.advancedSettingsAccordion.click(); await poHomeChannel.sidenav.checkboxEncryption.click(); await poHomeChannel.sidenav.btnCreate.click(); @@ -661,6 +662,7 @@ test.describe.serial('e2ee room setup', () => { await poHomeChannel.sidenav.openNewByLabel('Channel'); await poHomeChannel.sidenav.inputChannelName.fill(channelName); + await poHomeChannel.sidenav.advancedSettingsAccordion.click(); await poHomeChannel.sidenav.checkboxEncryption.click(); await poHomeChannel.sidenav.btnCreate.click(); @@ -711,6 +713,7 @@ test.describe.serial('e2ee room setup', () => { await poHomeChannel.sidenav.openNewByLabel('Channel'); await poHomeChannel.sidenav.inputChannelName.fill(channelName); + await poHomeChannel.sidenav.advancedSettingsAccordion.click(); await poHomeChannel.sidenav.checkboxEncryption.click(); await poHomeChannel.sidenav.btnCreate.click(); @@ -758,6 +761,7 @@ test.describe.serial('e2ee room setup', () => { await poHomeChannel.sidenav.openNewByLabel('Channel'); await poHomeChannel.sidenav.inputChannelName.fill(channelName); + await poHomeChannel.sidenav.advancedSettingsAccordion.click(); await poHomeChannel.sidenav.checkboxEncryption.click(); await poHomeChannel.sidenav.btnCreate.click(); diff --git a/apps/meteor/tests/e2e/file-upload.spec.ts b/apps/meteor/tests/e2e/file-upload.spec.ts index 0a5d1cfd2512..159b2650ac16 100644 --- a/apps/meteor/tests/e2e/file-upload.spec.ts +++ b/apps/meteor/tests/e2e/file-upload.spec.ts @@ -12,7 +12,7 @@ test.describe.serial('file-upload', () => { test.beforeAll(async ({ api }) => { await setSettingValueById(api, 'FileUpload_MediaTypeBlackList', 'image/svg+xml'); - targetChannel = await createTargetChannel(api); + targetChannel = await createTargetChannel(api, { members: ['user1'] }); }); test.beforeEach(async ({ page }) => { @@ -76,3 +76,27 @@ test.describe.serial('file-upload', () => { await expect(poHomeChannel.content.btnModalConfirm).not.toBeVisible(); }); }); +test.describe('file-upload-not-member', () => { + let poHomeChannel: HomeChannel; + let targetChannel: string; + + test.beforeAll(async ({ api }) => { + targetChannel = await createTargetChannel(api); + }); + + test.beforeEach(async ({ page }) => { + poHomeChannel = new HomeChannel(page); + + await page.goto('/home'); + await poHomeChannel.sidenav.openChat(targetChannel); + }); + + test.afterAll(async ({ api }) => { + expect((await api.post('/channels.delete', { roomName: targetChannel })).status()).toBe(200); + }); + + test('expect not be able to upload if not a member', async () => { + await poHomeChannel.content.dragAndDropTxtFile(); + await expect(poHomeChannel.content.modalFilePreview).not.toBeVisible(); + }); +}); diff --git a/apps/meteor/tests/e2e/message-actions.spec.ts b/apps/meteor/tests/e2e/message-actions.spec.ts index bc916af89bae..8c84d6205e8c 100644 --- a/apps/meteor/tests/e2e/message-actions.spec.ts +++ b/apps/meteor/tests/e2e/message-actions.spec.ts @@ -38,6 +38,71 @@ test.describe.serial('message-actions', () => { await expect(poHomeChannel.tabs.flexTabViewThreadMessage).toHaveText('this is a reply message'); }); + + // with thread open we listen to the subscription and update the collection from there + test('expect follow/unfollow message with thread open', async ({ page }) => { + await test.step('start thread', async () => { + await poHomeChannel.content.sendMessage('this is a message for reply'); + await page.locator('[data-qa-type="message"]').last().hover(); + await page.locator('role=button[name="Reply in thread"]').click(); + await page.getByRole('dialog').locator(`role=textbox[name="Message #${targetChannel}"]`).fill('this is a reply message'); + await page.keyboard.press('Enter'); + await expect(poHomeChannel.tabs.flexTabViewThreadMessage).toHaveText('this is a reply message'); + }); + + await test.step('unfollow thread', async () => { + const unFollowButton = page + .locator('[data-qa-type="message"]', { has: page.getByRole('button', { name: 'Following' }) }) + .last() + .getByRole('button', { name: 'Following' }); + await expect(unFollowButton).toBeVisible(); + await unFollowButton.click(); + }); + + await test.step('follow thread', async () => { + const followButton = page + .locator('[data-qa-type="message"]', { has: page.getByRole('button', { name: 'Not following' }) }) + .last() + .getByRole('button', { name: 'Not following' }); + await expect(followButton).toBeVisible(); + await followButton.click(); + await expect( + page + .locator('[data-qa-type="message"]', { has: page.getByRole('button', { name: 'Following' }) }) + .last() + .getByRole('button', { name: 'Following' }), + ).toBeVisible(); + }); + }); + + // with thread closed we depend on message changed updates + test('expect follow/unfollow message with thread closed', async ({ page }) => { + await test.step('start thread', async () => { + await poHomeChannel.content.sendMessage('this is a message for reply'); + await page.locator('[data-qa-type="message"]').last().hover(); + await page.locator('role=button[name="Reply in thread"]').click(); + await page.locator('.rcx-vertical-bar').locator(`role=textbox[name="Message #${targetChannel}"]`).fill('this is a reply message'); + await page.keyboard.press('Enter'); + await expect(poHomeChannel.tabs.flexTabViewThreadMessage).toHaveText('this is a reply message'); + }); + + // close thread before testing because the behavior changes + await page.getByRole('dialog').getByRole('button', { name: 'Close', exact: true }).click(); + + await test.step('unfollow thread', async () => { + const unFollowButton = page.locator('[data-qa-type="message"]').last().getByTitle('Following'); + await expect(unFollowButton).toBeVisible(); + await unFollowButton.click(); + }); + + await test.step('follow thread', async () => { + const followButton = page.locator('[data-qa-type="message"]').last().getByTitle('Not following'); + await expect(followButton).toBeVisible(); + await followButton.click(); + await expect(page.locator('[data-qa-type="message"]').last().getByTitle('Following')).toBeVisible(); + }); + }); + test('expect edit the message', async ({ page }) => { await poHomeChannel.content.sendMessage('This is a message to edit'); await poHomeChannel.content.openLastMessageMenu(); diff --git a/apps/meteor/tests/e2e/message-composer.spec.ts b/apps/meteor/tests/e2e/message-composer.spec.ts index e68d82daf78f..2ed3bcbb238e 100644 --- a/apps/meteor/tests/e2e/message-composer.spec.ts +++ b/apps/meteor/tests/e2e/message-composer.spec.ts @@ -69,4 +69,39 @@ test.describe.serial('message-composer', () => { await expect(poHomeChannel.composer).toHaveValue(`[hello composer](${url})`); }); + + test('should select popup item and not send the message when pressing enter', async ({ page }) => { + await poHomeChannel.sidenav.openChat(targetChannel); + await poHomeChannel.content.sendMessage('hello composer'); + + await test.step('mention popup', async () => { + await page.keyboard.type('hello composer @all'); + + await page.keyboard.press('Enter'); + + await expect(poHomeChannel.composer).toHaveValue('hello composer @all '); + + await poHomeChannel.composer.fill(''); + }); + + await test.step('emoji popup', async () => { + await page.keyboard.type('hello composer :flag_br'); + + await page.keyboard.press('Enter'); + + await expect(poHomeChannel.composer).toHaveValue('hello composer :flag_br: '); + + await poHomeChannel.composer.fill(''); + }); + + await test.step('slash command', async () => { + await page.keyboard.type('/gim'); + + await page.keyboard.press('Enter'); + + await expect(poHomeChannel.composer).toHaveValue('/gimme '); + + await poHomeChannel.composer.fill(''); + }); + }); }); diff --git a/apps/meteor/tests/e2e/omnichannel/omnichannel-agents.spec.ts b/apps/meteor/tests/e2e/omnichannel/omnichannel-agents.spec.ts index ad4657b1841c..239978928126 100644 --- a/apps/meteor/tests/e2e/omnichannel/omnichannel-agents.spec.ts +++ b/apps/meteor/tests/e2e/omnichannel/omnichannel-agents.spec.ts @@ -105,4 +105,27 @@ test.describe.serial('OC - Manage Agents', () => { await poOmnichannelAgents.btnSave.click(); }); }); + + test('OC - Edit agent - Manage departments', async ({ page }) => { + await poOmnichannelAgents.selectUsername('user1'); + await poOmnichannelAgents.btnAdd.click(); + await poOmnichannelAgents.inputSearch.fill('user1'); + await poOmnichannelAgents.findRowByUsername('user1').click(); + + await poOmnichannelAgents.btnEdit.click(); + await poOmnichannelAgents.selectDepartment(department.data.name); + await poOmnichannelAgents.btnSave.click(); + + await test.step('expect the selected department is visible', async () => { + await poOmnichannelAgents.findRowByUsername('user1').click(); + + // mock the endpoint to use the one without pagination + await page.route('/api/v1/livechat/department?showArchived=true', async (route) => { + await route.fulfill({ json: { departments: [] } }); + }); + + await poOmnichannelAgents.btnEdit.click(); + await expect(poOmnichannelAgents.findSelectedDepartment(department.data.name)).toBeVisible(); + }); + }); }); diff --git a/apps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.ts b/apps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.ts index 0e368565cdc0..872eafdfb2a2 100644 --- a/apps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.ts +++ b/apps/meteor/tests/e2e/omnichannel/omnichannel-departaments.spec.ts @@ -22,274 +22,261 @@ test.describe('OC - Manage Departments', () => { test.beforeAll(async ({ api }) => { // turn on department removal - const statusCode = (await api.post('/settings/Omnichannel_enable_department_removal', { value: true })).status(); - await expect(statusCode).toBe(200); + await api.post('/settings/Omnichannel_enable_department_removal', { value: true }); }); test.afterAll(async ({ api }) => { // turn off department removal - const statusCode = (await api.post('/settings/Omnichannel_enable_department_removal', { value: false })).status(); - await expect(statusCode).toBe(200); + await api.post('/settings/Omnichannel_enable_department_removal', { value: false }); }); - test.beforeEach(async ({ page }: { page: Page }) => { - poOmnichannelDepartments = new OmnichannelDepartments(page); + test.describe('Create first department', async () => { + test.beforeEach(async ({ page }: { page: Page }) => { + poOmnichannelDepartments = new OmnichannelDepartments(page); - await page.goto('/omnichannel'); - await poOmnichannelDepartments.sidenav.linkDepartments.click(); - }); - - test('OC - Manage Departments - Create department', async () => { - const departmentName = faker.string.uuid(); - - await poOmnichannelDepartments.headingButtonNew('Create department').click(); + await page.goto('/omnichannel'); + await poOmnichannelDepartments.sidenav.linkDepartments.click(); + }); - await test.step('expect name and email to be required', async () => { - await expect(poOmnichannelDepartments.invalidInputEmail).not.toBeVisible(); - await poOmnichannelDepartments.inputName.fill('any_text'); - await poOmnichannelDepartments.inputName.fill(''); - await expect(poOmnichannelDepartments.invalidInputName).toBeVisible(); - await expect(poOmnichannelDepartments.errorMessage(ERROR.requiredName)).toBeVisible(); - await poOmnichannelDepartments.inputName.fill('any_text'); - await expect(poOmnichannelDepartments.invalidInputName).not.toBeVisible(); + test('Create department', async () => { + const departmentName = faker.string.uuid(); - await poOmnichannelDepartments.inputEmail.fill('any_text'); - await expect(poOmnichannelDepartments.invalidInputEmail).toBeVisible(); - await expect(poOmnichannelDepartments.errorMessage(ERROR.invalidEmail)).toBeVisible(); + await poOmnichannelDepartments.headingButtonNew('Create department').click(); - await poOmnichannelDepartments.inputEmail.fill(''); - await expect(poOmnichannelDepartments.invalidInputEmail).toBeVisible(); - await expect(poOmnichannelDepartments.errorMessage(ERROR.requiredEmail)).toBeVisible(); + await test.step('expect name and email to be required', async () => { + await expect(poOmnichannelDepartments.invalidInputEmail).not.toBeVisible(); + await poOmnichannelDepartments.inputName.fill('any_text'); + await poOmnichannelDepartments.inputName.fill(''); + await expect(poOmnichannelDepartments.invalidInputName).toBeVisible(); + await expect(poOmnichannelDepartments.errorMessage(ERROR.requiredName)).toBeVisible(); + await poOmnichannelDepartments.inputName.fill('any_text'); + await expect(poOmnichannelDepartments.invalidInputName).not.toBeVisible(); - await poOmnichannelDepartments.inputEmail.fill(faker.internet.email()); - await expect(poOmnichannelDepartments.invalidInputEmail).not.toBeVisible(); - await expect(poOmnichannelDepartments.errorMessage(ERROR.requiredEmail)).not.toBeVisible(); - }); + await poOmnichannelDepartments.inputEmail.fill('any_text'); + await expect(poOmnichannelDepartments.invalidInputEmail).toBeVisible(); + await expect(poOmnichannelDepartments.errorMessage(ERROR.invalidEmail)).toBeVisible(); - await test.step('expect create new department', async () => { - await poOmnichannelDepartments.btnEnabled.click(); - await poOmnichannelDepartments.inputName.fill(departmentName); - await poOmnichannelDepartments.inputEmail.fill(faker.internet.email()); - await poOmnichannelDepartments.btnSave.click(); - await poOmnichannelDepartments.btnCloseToastSuccess.click(); + await poOmnichannelDepartments.inputEmail.fill(''); + await expect(poOmnichannelDepartments.invalidInputEmail).toBeVisible(); + await expect(poOmnichannelDepartments.errorMessage(ERROR.requiredEmail)).toBeVisible(); - await poOmnichannelDepartments.search(departmentName); - await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); - }); + await poOmnichannelDepartments.inputEmail.fill(faker.internet.email()); + await expect(poOmnichannelDepartments.invalidInputEmail).not.toBeVisible(); + await expect(poOmnichannelDepartments.errorMessage(ERROR.requiredEmail)).not.toBeVisible(); + }); - await test.step('expect to delete department', async () => { - await poOmnichannelDepartments.search(departmentName); - await poOmnichannelDepartments.selectedDepartmentMenu(departmentName).click(); - await poOmnichannelDepartments.menuDeleteOption.click(); + await test.step('expect create new department', async () => { + await poOmnichannelDepartments.btnEnabled.click(); + await poOmnichannelDepartments.inputName.fill(departmentName); + await poOmnichannelDepartments.inputEmail.fill(faker.internet.email()); + await poOmnichannelDepartments.btnSave.click(); - await test.step('expect confirm delete department', async () => { - await expect(poOmnichannelDepartments.modalConfirmDelete).toBeVisible(); + await poOmnichannelDepartments.search(departmentName); + await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); + }); - await test.step('expect delete to be disabled when name is incorrect', async () => { - await expect(poOmnichannelDepartments.btnModalConfirmDelete).toBeDisabled(); - await poOmnichannelDepartments.inputModalConfirmDelete.fill('someramdomname'); - await expect(poOmnichannelDepartments.btnModalConfirmDelete).toBeDisabled(); + await test.step('expect to delete department', async () => { + await poOmnichannelDepartments.search(departmentName); + await poOmnichannelDepartments.selectedDepartmentMenu(departmentName).click(); + await poOmnichannelDepartments.menuDeleteOption.click(); + + await test.step('expect confirm delete department', async () => { + await test.step('expect delete to be disabled when name is incorrect', async () => { + await expect(poOmnichannelDepartments.btnModalConfirmDelete).toBeDisabled(); + await poOmnichannelDepartments.inputModalConfirmDelete.fill('someramdomname'); + await expect(poOmnichannelDepartments.btnModalConfirmDelete).toBeDisabled(); + }); + + await test.step('expect to successfuly delete if department name is correct', async () => { + await expect(poOmnichannelDepartments.btnModalConfirmDelete).toBeDisabled(); + await poOmnichannelDepartments.inputModalConfirmDelete.fill(departmentName); + await expect(poOmnichannelDepartments.btnModalConfirmDelete).toBeEnabled(); + await poOmnichannelDepartments.btnModalConfirmDelete.click(); + }); }); - await test.step('expect to successfuly delete if department name is correct', async () => { - await expect(poOmnichannelDepartments.btnModalConfirmDelete).toBeDisabled(); - await poOmnichannelDepartments.inputModalConfirmDelete.fill(departmentName); - await expect(poOmnichannelDepartments.btnModalConfirmDelete).toBeEnabled(); - await poOmnichannelDepartments.btnModalConfirmDelete.click(); + await test.step('expect department to have been deleted', async () => { + await poOmnichannelDepartments.search(departmentName); + await expect(poOmnichannelDepartments.firstRowInTable).toHaveCount(0); }); }); - - await test.step('expect department to have been deleted', async () => { - await poOmnichannelDepartments.search(departmentName); - await expect(poOmnichannelDepartments.firstRowInTable).toHaveCount(0); - }); }); }); - test('OC - Manage Departments - Edit department', async ({ api }) => { - const department = await test.step('expect create new department', async () => { - const { data: department } = await createDepartment(api); - - await poOmnichannelDepartments.search(department.name); - await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); - - return department; - }); - - await test.step('expect update department name', async () => { - await poOmnichannelDepartments.search(department.name); - - await poOmnichannelDepartments.firstRowInTableMenu.click(); - await poOmnichannelDepartments.menuEditOption.click(); + test.describe('After creation', async () => { + let department: Awaited>['data']; - await poOmnichannelDepartments.inputName.fill(`edited-${department.name}`); - await poOmnichannelDepartments.btnSave.click(); - await poOmnichannelDepartments.btnCloseToastSuccess.click(); + test.beforeEach(async ({ api, page }) => { + poOmnichannelDepartments = new OmnichannelDepartments(page); - await poOmnichannelDepartments.search(`edited-${department.name}`); - await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); + department = await createDepartment(api).then((res) => res.data); + await page.goto('/omnichannel/departments'); }); - await test.step('expect to delete department', async () => { - const deleteRes = await deleteDepartment(api, { id: department._id }); - await expect(deleteRes.status()).toBe(200); + test.afterEach(async ({ api }) => { + await deleteDepartment(api, { id: department._id }); }); - }); - test('OC - Manage Departments - Archive department', async ({ api }) => { - const department = await test.step('expect create new department', async () => { - const { data: department } = await createDepartment(api); + test('Edit department', async () => { + await test.step('expect create new department', async () => { + await poOmnichannelDepartments.search(department.name); + await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); - await poOmnichannelDepartments.search(department.name); - await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); - - return department; - }); + return department; + }); - await test.step('expect archive department', async () => { - await poOmnichannelDepartments.search(department.name); + await test.step('expect update department name', async () => { + await poOmnichannelDepartments.search(department.name); - await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); - await poOmnichannelDepartments.firstRowInTableMenu.click(); - await poOmnichannelDepartments.menuArchiveOption.click(); - await expect(poOmnichannelDepartments.toastSuccess).toBeVisible(); + await poOmnichannelDepartments.firstRowInTableMenu.click(); + await poOmnichannelDepartments.menuEditOption.click(); - await poOmnichannelDepartments.archivedDepartmentsTab.click(); - await poOmnichannelDepartments.search(department.name); - await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); - }); + await poOmnichannelDepartments.inputName.fill(`edited-${department.name}`); + await poOmnichannelDepartments.btnSave.click(); - await test.step('expect archived department to not be editable', async () => { - await poOmnichannelDepartments.firstRowInTableMenu.click(); - await expect(poOmnichannelDepartments.menuEditOption).not.toBeVisible(); + await poOmnichannelDepartments.search(`edited-${department.name}`); + await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); + }); }); - await test.step('expect unarchive department', async () => { - await poOmnichannelDepartments.menuUnarchiveOption.click(); - await expect(poOmnichannelDepartments.firstRowInTable).toHaveCount(0); - }); + test('Archive department', async () => { + await test.step('expect create new department', async () => { + await poOmnichannelDepartments.search(department.name); + await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); + }); - await test.step('expect to delete department', async () => { - const deleteRes = await deleteDepartment(api, { id: department._id }); - await expect(deleteRes.status()).toBe(200); - }); - }); + await test.step('expect archive department', async () => { + await poOmnichannelDepartments.search(department.name); - test('OC - Manage Departments - Request tag(s) before closing conversation', async ({ api }) => { - const department = await test.step('expect create new department', async () => { - const { data: department } = await createDepartment(api); + await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); + await poOmnichannelDepartments.firstRowInTableMenu.click(); + await poOmnichannelDepartments.menuArchiveOption.click(); + await expect(poOmnichannelDepartments.toastSuccess).toBeVisible(); - await poOmnichannelDepartments.search(department.name); - await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); + await poOmnichannelDepartments.archivedDepartmentsTab.click(); + await poOmnichannelDepartments.search(department.name); + await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); + }); - return department; - }); + await test.step('expect archived department to not be editable', async () => { + await poOmnichannelDepartments.firstRowInTableMenu.click(); + await expect(poOmnichannelDepartments.menuEditOption).not.toBeVisible(); + }); - await test.step('expect save form button be disabled', async () => { - await poOmnichannelDepartments.search(department.name); - await poOmnichannelDepartments.firstRowInTableMenu.click(); - await poOmnichannelDepartments.menuEditOption.click(); - await expect(poOmnichannelDepartments.btnSave).toBeDisabled(); - await poOmnichannelDepartments.btnBack.click(); + await test.step('expect unarchive department', async () => { + await poOmnichannelDepartments.menuUnarchiveOption.click(); + await expect(poOmnichannelDepartments.firstRowInTable).toHaveCount(0); + }); }); - await test.step('Disabled tags state', async () => { - await poOmnichannelDepartments.search(department.name); - await poOmnichannelDepartments.firstRowInTableMenu.click(); - await poOmnichannelDepartments.menuEditOption.click(); - - await test.step('expect to have department tags toggle button', async () => { - await expect(poOmnichannelDepartments.toggleRequestTags).toBeVisible(); + test('Request tag(s) before closing conversation', async () => { + await test.step('expect create new department', async () => { + await poOmnichannelDepartments.search(department.name); + await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); }); - await test.step('expect have no add tag to department', async () => { - await expect(poOmnichannelDepartments.inputTags).not.toBeVisible(); - await expect(poOmnichannelDepartments.btnTagsAdd).not.toBeVisible(); + await test.step('expect save form button be disabled', async () => { + await poOmnichannelDepartments.search(department.name); + await poOmnichannelDepartments.firstRowInTableMenu.click(); + await poOmnichannelDepartments.menuEditOption.click(); + await expect(poOmnichannelDepartments.btnSave).toBeDisabled(); await poOmnichannelDepartments.btnBack.click(); }); - }); - await test.step('Enabled tags state', async () => { - const tagName = faker.string.sample(5); + await test.step('Disabled tags state', async () => { + await poOmnichannelDepartments.search(department.name); + await poOmnichannelDepartments.firstRowInTableMenu.click(); + await poOmnichannelDepartments.menuEditOption.click(); - await poOmnichannelDepartments.search(department.name); - await poOmnichannelDepartments.firstRowInTableMenu.click(); - await poOmnichannelDepartments.menuEditOption.click(); + await test.step('expect to have department tags toggle button', async () => { + await expect(poOmnichannelDepartments.toggleRequestTags).toBeVisible(); + }); - await test.step('expect to have form save option disabled', async () => { - await expect(poOmnichannelDepartments.btnSave).toBeDisabled(); + await test.step('expect have no add tag to department', async () => { + await expect(poOmnichannelDepartments.inputTags).not.toBeVisible(); + await expect(poOmnichannelDepartments.btnTagsAdd).not.toBeVisible(); + await poOmnichannelDepartments.btnBack.click(); + }); }); - await test.step('expect clicking on toggle button to enable tags', async () => { - await poOmnichannelDepartments.toggleRequestTags.click(); - await expect(poOmnichannelDepartments.inputTags).toBeVisible(); - await expect(poOmnichannelDepartments.btnTagsAdd).toBeVisible(); - }); + await test.step('Enabled tags state', async () => { + const tagName = faker.string.sample(5); - await test.step('expect to have add and remove one tag properly tags', async () => { - await poOmnichannelDepartments.inputTags.fill(tagName); - await poOmnichannelDepartments.btnTagsAdd.click(); + await poOmnichannelDepartments.search(department.name); + await poOmnichannelDepartments.firstRowInTableMenu.click(); + await poOmnichannelDepartments.menuEditOption.click(); - await expect(poOmnichannelDepartments.btnTag(tagName)).toBeVisible(); - await expect(poOmnichannelDepartments.btnSave).toBeEnabled(); - }); + await test.step('expect to have form save option disabled', async () => { + await expect(poOmnichannelDepartments.btnSave).toBeDisabled(); + }); - await test.step('expect to be invalid if there is no tag added', async () => { - await poOmnichannelDepartments.btnTag(tagName).click(); - await expect(poOmnichannelDepartments.invalidInputTags).toBeVisible(); - await expect(poOmnichannelDepartments.btnSave).toBeDisabled(); - }); + await test.step('expect clicking on toggle button to enable tags', async () => { + await poOmnichannelDepartments.toggleRequestTags.click(); + await expect(poOmnichannelDepartments.inputTags).toBeVisible(); + await expect(poOmnichannelDepartments.btnTagsAdd).toBeVisible(); + }); - await test.step('expect to be not possible adding empty tags', async () => { - await poOmnichannelDepartments.inputTags.fill(''); - await expect(poOmnichannelDepartments.btnTagsAdd).toBeDisabled(); - }); + await test.step('expect to have add and remove one tag properly tags', async () => { + await poOmnichannelDepartments.inputTags.fill(tagName); + await poOmnichannelDepartments.btnTagsAdd.click(); - await test.step('expect to not be possible adding same tag twice', async () => { - const tagName = faker.string.sample(5); - await poOmnichannelDepartments.inputTags.fill(tagName); - await poOmnichannelDepartments.btnTagsAdd.click(); - await poOmnichannelDepartments.inputTags.fill(tagName); - await expect(poOmnichannelDepartments.btnTagsAdd).toBeDisabled(); - }); - }); - }); + await expect(poOmnichannelDepartments.btnTag(tagName)).toBeVisible(); + await expect(poOmnichannelDepartments.btnSave).toBeEnabled(); + }); - test('OC - Manage Departments - Toggle department removal', async ({ api }) => { - const department = await test.step('expect create new department', async () => { - const { data: department } = await createDepartment(api); + await test.step('expect to be invalid if there is no tag added', async () => { + await poOmnichannelDepartments.btnTag(tagName).click(); + await expect(poOmnichannelDepartments.invalidInputTags).toBeVisible(); + await expect(poOmnichannelDepartments.btnSave).toBeDisabled(); + }); - await poOmnichannelDepartments.search(department.name); - await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); + await test.step('expect to be not possible adding empty tags', async () => { + await poOmnichannelDepartments.inputTags.fill(''); + await expect(poOmnichannelDepartments.btnTagsAdd).toBeDisabled(); + }); - return department; + await test.step('expect to not be possible adding same tag twice', async () => { + const tagName = faker.string.sample(5); + await poOmnichannelDepartments.inputTags.fill(tagName); + await poOmnichannelDepartments.btnTagsAdd.click(); + await poOmnichannelDepartments.inputTags.fill(tagName); + await expect(poOmnichannelDepartments.btnTagsAdd).toBeDisabled(); + }); + }); }); - await test.step('expect to be able to delete department', async () => { - await poOmnichannelDepartments.search(department.name); - await poOmnichannelDepartments.selectedDepartmentMenu(department.name).click(); - await expect(poOmnichannelDepartments.menuDeleteOption).toBeEnabled(); - }); + test('Toggle department removal', async ({ api }) => { + await test.step('expect create new department', async () => { + await poOmnichannelDepartments.search(department.name); + await expect(poOmnichannelDepartments.firstRowInTable).toBeVisible(); + }); - await test.step('expect to disable department removal setting', async () => { - const statusCode = (await api.post('/settings/Omnichannel_enable_department_removal', { value: false })).status(); - await expect(statusCode).toBe(200); - }); + await test.step('expect to be able to delete department', async () => { + await poOmnichannelDepartments.search(department.name); + await poOmnichannelDepartments.selectedDepartmentMenu(department.name).click(); + await expect(poOmnichannelDepartments.menuDeleteOption).toBeEnabled(); + }); - await test.step('expect not to be able to delete department', async () => { - await poOmnichannelDepartments.search(department.name); - await poOmnichannelDepartments.selectedDepartmentMenu(department.name).click(); - await expect(poOmnichannelDepartments.menuDeleteOption).toBeDisabled(); - }); + await test.step('expect to disable department removal setting', async () => { + const statusCode = (await api.post('/settings/Omnichannel_enable_department_removal', { value: false })).status(); + expect(statusCode).toBe(200); + }); - await test.step('expect to enable department removal setting', async () => { - const statusCode = (await api.post('/settings/Omnichannel_enable_department_removal', { value: true })).status(); - await expect(statusCode).toBe(200); - }); + await test.step('expect not to be able to delete department', async () => { + await poOmnichannelDepartments.search(department.name); + await poOmnichannelDepartments.selectedDepartmentMenu(department.name).click(); + await expect(poOmnichannelDepartments.menuDeleteOption).toBeDisabled(); + }); + + await test.step('expect to enable department removal setting', async () => { + const statusCode = (await api.post('/settings/Omnichannel_enable_department_removal', { value: true })).status(); + expect(statusCode).toBe(200); + }); - await test.step('expect to delete department', async () => { - const deleteRes = await deleteDepartment(api, { id: department._id }); - await expect(deleteRes.status()).toBe(200); + await test.step('expect to delete department', async () => { + const deleteRes = await deleteDepartment(api, { id: department._id }); + expect(deleteRes.status()).toBe(200); + }); }); }); }); diff --git a/apps/meteor/tests/e2e/omnichannel/omnichannel-triggers-after-registration.spec.ts b/apps/meteor/tests/e2e/omnichannel/omnichannel-triggers-after-registration.spec.ts index fcc8a95e3862..75d104cf02dc 100644 --- a/apps/meteor/tests/e2e/omnichannel/omnichannel-triggers-after-registration.spec.ts +++ b/apps/meteor/tests/e2e/omnichannel/omnichannel-triggers-after-registration.spec.ts @@ -14,26 +14,43 @@ test.describe('OC - Livechat New Chat Triggers - After Registration', () => { let newVisitor: { email: string; name: string }; let agent: { page: Page; poHomeOmnichannel: HomeOmnichannel }; - test.beforeEach(async ({ api, browser }) => { + test.beforeEach(async ({ api, browser, page }) => { newVisitor = createFakeVisitor(); triggersName = faker.string.uuid(); triggerMessage = 'This is a trigger message after guest registration'; + await api.post('/livechat/triggers', { + name: triggersName, + description: 'Creating a fresh trigger', + enabled: true, + runOnce: false, + conditions: [ + { + name: 'after-guest-registration', + value: '', + }, + ], + actions: [ + { + name: 'send-message', + params: { + name: '', + msg: triggerMessage, + sender: 'queue', + }, + }, + ], + }); + await Promise.all([ api.post('/livechat/users/agent', { username: 'user1' }), api.post('/livechat/users/manager', { username: 'user1' }), ]); - const { page } = await createAuxContext(browser, Users.user1, '/omnichannel/triggers'); - agent = { page, poHomeOmnichannel: new HomeOmnichannel(page) }; - await page.emulateMedia({ reducedMotion: 'reduce' }); - - await agent.poHomeOmnichannel.triggers.createTrigger(triggersName, triggerMessage, 'after-guest-registration'); - await agent.poHomeOmnichannel.triggers.btnCloseToastMessage.click(); + const { page: agentPage } = await createAuxContext(browser, Users.user1); + agent = { page: agentPage, poHomeOmnichannel: new HomeOmnichannel(agentPage) }; - const { page: livechatPage } = await createAuxContext(browser, Users.user1); - - poLiveChat = new OmnichannelLiveChat(livechatPage, api); + poLiveChat = new OmnichannelLiveChat(page, api); }); test.afterEach(async ({ api }) => { @@ -46,7 +63,6 @@ test.describe('OC - Livechat New Chat Triggers - After Registration', () => { await Promise.all([api.delete('/livechat/users/agent/user1'), api.delete('/livechat/users/manager/user1')]); await agent.page.close(); - await poLiveChat.page.close(); }); test.afterAll(async ({ api }) => { @@ -101,11 +117,12 @@ test.describe('OC - Livechat New Chat Triggers - After Registration', () => { await api.post('/settings/Livechat_clear_local_storage_when_chat_ended', { value: true }); }); - test('expect trigger message after registration', async () => { + test('expect trigger message after registration not be visible after local storage clear', async () => { await poLiveChat.page.goto('/livechat'); await poLiveChat.sendMessageAndCloseChat(newVisitor); - await expect(poLiveChat.txtChatMessage(triggerMessage)).toBeVisible(); + await expect(poLiveChat.btnNewChat).toBeVisible(); + await expect(poLiveChat.txtChatMessage(triggerMessage)).not.toBeVisible(); await poLiveChat.startNewChat(); await poLiveChat.sendMessage(newVisitor, false); diff --git a/apps/meteor/tests/e2e/page-objects/auth.ts b/apps/meteor/tests/e2e/page-objects/auth.ts index 46ec7e1f38dc..8d5fe1edad20 100644 --- a/apps/meteor/tests/e2e/page-objects/auth.ts +++ b/apps/meteor/tests/e2e/page-objects/auth.ts @@ -20,7 +20,7 @@ export class Registration { } get btnLoginWithSaml(): Locator { - return this.page.locator('role=button[name="SAML test login button"]'); + return this.page.locator('role=button[name="SAML"]'); } get btnLoginWithGoogle(): Locator { diff --git a/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts b/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts index f8002ed450f5..0f17b7ccb5d4 100644 --- a/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts +++ b/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts @@ -9,6 +9,10 @@ export class HomeSidenav { this.page = page; } + get advancedSettingsAccordion(): Locator { + return this.page.getByRole('dialog').getByRole('button', { name: 'Advanced settings', exact: true }); + } + get checkboxPrivateChannel(): Locator { return this.page.locator('label', { has: this.page.getByRole('checkbox', { name: 'Private' }) }); } @@ -154,6 +158,7 @@ export class HomeSidenav { async createEncryptedChannel(name: string) { await this.openNewByLabel('Channel'); await this.inputChannelName.type(name); + await this.advancedSettingsAccordion.click(); await this.checkboxEncryption.click(); await this.btnCreate.click(); } diff --git a/apps/meteor/tests/e2e/page-objects/omnichannel-agents.ts b/apps/meteor/tests/e2e/page-objects/omnichannel-agents.ts index d588e409423f..4bde20c1da20 100644 --- a/apps/meteor/tests/e2e/page-objects/omnichannel-agents.ts +++ b/apps/meteor/tests/e2e/page-objects/omnichannel-agents.ts @@ -93,4 +93,8 @@ export class OmnichannelAgents { findRowByName(name: string) { return this.page.locator('tr', { has: this.page.locator(`td >> text="${name}"`) }); } + + findSelectedDepartment(name: string) { + return this.page.locator(`role=option[name="${name}"]`); + } } diff --git a/apps/meteor/tests/e2e/page-objects/omnichannel-livechat.ts b/apps/meteor/tests/e2e/page-objects/omnichannel-livechat.ts index 0b0862617524..330fc981237f 100644 --- a/apps/meteor/tests/e2e/page-objects/omnichannel-livechat.ts +++ b/apps/meteor/tests/e2e/page-objects/omnichannel-livechat.ts @@ -172,6 +172,7 @@ export class OmnichannelLiveChat { await this.onlineAgentMessage.fill(message); await this.btnSendMessageToOnlineAgent.click(); await expect(this.txtChatMessage(message)).toBeVisible(); + await expect(this.page.locator('[data-qa="message-bubble"] >> text="Chat started"')).toBeVisible(); await this.closeChat(); } diff --git a/apps/meteor/tests/e2e/saml.spec.ts b/apps/meteor/tests/e2e/saml.spec.ts index fe1295ca0b4b..3d5935107bb1 100644 --- a/apps/meteor/tests/e2e/saml.spec.ts +++ b/apps/meteor/tests/e2e/saml.spec.ts @@ -10,7 +10,6 @@ import * as constants from './config/constants'; import { createUserFixture } from './fixtures/collections/users'; import { Users } from './fixtures/userStates'; import { Registration } from './page-objects'; -import { convertHexToRGB } from './utils/convertHexToRGB'; import { createCustomRole, deleteCustomRole } from './utils/custom-role'; import { getUserInfo } from './utils/getUserInfo'; import { parseMeteorResponse } from './utils/parseMeteorResponse'; @@ -60,8 +59,6 @@ const resetTestData = async ({ api, cleanupOnly = false }: { api?: any; cleanupO { _id: 'SAML_Custom_Default_issuer', value: 'http://localhost:3000/_saml/metadata/test-sp' }, { _id: 'SAML_Custom_Default_entry_point', value: 'http://localhost:8080/simplesaml/saml2/idp/SSOService.php' }, { _id: 'SAML_Custom_Default_idp_slo_redirect_url', value: 'http://localhost:8080/simplesaml/saml2/idp/SingleLogoutService.php' }, - { _id: 'SAML_Custom_Default_button_label_text', value: 'SAML test login button' }, - { _id: 'SAML_Custom_Default_button_color', value: '#185925' }, ]; await Promise.all(settings.map(({ _id, value }) => setSettingValueById(api, _id, value))); @@ -155,10 +152,6 @@ test.describe('SAML', () => { await expect(poRegistration.btnLoginWithSaml).toBeVisible({ timeout: 10000 }); }); - await test.step('expect to have SAML login button to have the required background color', async () => { - await expect(poRegistration.btnLoginWithSaml).toHaveCSS('background-color', convertHexToRGB('#185925')); - }); - await test.step('expect to be redirected to the IdP for login', async () => { await poRegistration.btnLoginWithSaml.click(); diff --git a/apps/meteor/tests/e2e/team-management.spec.ts b/apps/meteor/tests/e2e/team-management.spec.ts index 9542b8a81a70..55530302ca96 100644 --- a/apps/meteor/tests/e2e/team-management.spec.ts +++ b/apps/meteor/tests/e2e/team-management.spec.ts @@ -46,6 +46,7 @@ test.describe.serial('teams-management', () => { test('expect create "targetTeamReadOnly" readonly', async ({ page }) => { await poHomeTeam.sidenav.openNewByLabel('Team'); await poHomeTeam.inputTeamName.type(targetTeamReadOnly); + await poHomeTeam.sidenav.advancedSettingsAccordion.click(); await poHomeTeam.textReadOnly.click(); await poHomeTeam.addMember('user1'); await poHomeTeam.btnTeamCreate.click(); diff --git a/apps/meteor/tests/e2e/utils/convertHexToRGB.ts b/apps/meteor/tests/e2e/utils/convertHexToRGB.ts deleted file mode 100644 index 9b20671cfcaa..000000000000 --- a/apps/meteor/tests/e2e/utils/convertHexToRGB.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const convertHexToRGB = (hex: string) => { - hex = hex.replace(/^#/, ''); - - const red = parseInt(hex.substring(0, 2), 16); - const green = parseInt(hex.substring(2, 4), 16); - const blue = parseInt(hex.substring(4, 6), 16); - - return `rgb(${red}, ${green}, ${blue})`; -}; diff --git a/apps/meteor/tests/end-to-end/api/audit.ts b/apps/meteor/tests/end-to-end/api/audit.ts new file mode 100644 index 000000000000..ba62caf621b8 --- /dev/null +++ b/apps/meteor/tests/end-to-end/api/audit.ts @@ -0,0 +1,301 @@ +import type { Credentials } from '@rocket.chat/api-client'; +import type { IRoom, IUser } from '@rocket.chat/core-typings'; +import { Random } from '@rocket.chat/random'; +import { expect } from 'chai'; +import EJSON from 'ejson'; +import { before, describe, it, after } from 'mocha'; + +import { getCredentials, api, request, credentials, methodCall } from '../../data/api-data'; +import { updatePermission } from '../../data/permissions.helper'; +import { createRoom, deleteRoom } from '../../data/rooms.helper'; +import { password } from '../../data/user'; +import { createUser, deleteUser, login } from '../../data/users.helper'; +import { IS_EE } from '../../e2e/config/constants'; + +(IS_EE ? describe : describe.skip)('Audit Panel', () => { + let testChannel: IRoom; + let testPrivateChannel: IRoom; + let dummyUser: IUser; + let auditor: IUser; + let auditorCredentials: Credentials; + before((done) => getCredentials(done)); + before(async () => { + testChannel = (await createRoom({ type: 'c', name: `chat.api-test-${Date.now()}` })).body.channel; + testPrivateChannel = (await createRoom({ type: 'p', name: `chat.api-test-${Date.now()}` })).body.group; + dummyUser = await createUser(); + auditor = await createUser({ roles: ['user', 'auditor'] }); + + auditorCredentials = await login(auditor.username, password); + }); + after(async () => { + await deleteRoom({ type: 'c', roomId: testChannel._id }); + await deleteUser({ _id: dummyUser._id }); + await deleteUser({ _id: auditor._id }); + await deleteRoom({ type: 'p', roomId: testPrivateChannel._id }); + }); + + describe('audit/rooms.members [no permissions]', () => { + before(async () => { + await updatePermission('view-members-list-all-rooms', []); + }); + after(async () => { + await updatePermission('view-members-list-all-rooms', ['admin', 'auditor']); + }); + it('should fail if user does not have view-members-list-all-rooms permission', async () => { + await request + .get(api('audit/rooms.members')) + .set(credentials) + .query({ + roomId: 'GENERAL', + }) + .expect(403); + await request + .get(api('audit/rooms.members')) + .set(auditorCredentials) + .query({ + roomId: 'GENERAL', + }) + .expect(403); + }); + }); + + describe('audit/rooms.members', () => { + it('should fail if user is not logged in', async () => { + await request + .get(api('audit/rooms.members')) + .query({ + roomId: 'GENERAL', + }) + .expect(401); + }); + it('should fail if roomId is invalid', async () => { + await request + .get(api('audit/rooms.members')) + .set(credentials) + .query({ + roomId: Random.id(), + }) + .expect(404); + }); + it('should fail if roomId is not present', async () => { + await request.get(api('audit/rooms.members')).set(credentials).query({}).expect(400); + }); + it('should fail if roomId is an empty string', async () => { + await request + .get(api('audit/rooms.members')) + .set(credentials) + .query({ + roomId: '', + }) + .expect(400); + }); + it('should fetch the members of a room', async () => { + await request + .get(api('audit/rooms.members')) + .set(credentials) + .query({ + roomId: testChannel._id, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body.members).to.be.an('array'); + expect(res.body.members).to.have.lengthOf(1); + }); + }); + it('should persist a log entry', async () => { + await request + .get(api('audit/rooms.members')) + .set(credentials) + .query({ + roomId: testChannel._id, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body.members).to.be.an('array'); + expect(res.body.members).to.have.lengthOf(1); + }); + + await request + .post(methodCall('auditGetAuditions')) + .set(credentials) + .send({ + message: EJSON.stringify({ + method: 'auditGetAuditions', + params: [{ startDate: new Date(Date.now() - 86400000), endDate: new Date() }], + id: 'id', + msg: 'method', + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + const message = JSON.parse(res.body.message); + + expect(message.result).to.be.an('array').with.lengthOf.greaterThan(1); + const entry = message.result.find((audition: any) => { + return audition.fields.rids.includes(testChannel._id); + }); + expect(entry).to.have.property('u').that.is.an('object').deep.equal({ + _id: 'rocketchat.internal.admin.test', + username: 'rocketchat.internal.admin.test', + name: 'RocketChat Internal Admin Test', + }); + expect(entry).to.have.property('fields').that.is.an('object'); + const { fields } = entry; + + expect(fields).to.have.property('msg', 'Room_members_list'); + expect(fields).to.have.property('rids').that.is.an('array').with.lengthOf(1); + }); + }); + it('should fetch the members of a room with offset and count', async () => { + await request + .post(methodCall('addUsersToRoom')) + .set(credentials) + .send({ + message: JSON.stringify({ + method: 'addUsersToRoom', + params: [{ rid: testChannel._id, users: [dummyUser.username] }], + id: 'id', + msg: 'method', + }), + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }); + + await request + .get(api('audit/rooms.members')) + .set(credentials) + .query({ + roomId: testChannel._id, + offset: 1, + count: 1, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body.members).to.be.an('array'); + expect(res.body.members).to.have.lengthOf(1); + expect(res.body.members[0].username).to.be.equal(dummyUser.username); + expect(res.body.total).to.be.equal(2); + expect(res.body.offset).to.be.equal(1); + expect(res.body.count).to.be.equal(1); + }); + }); + + it('should filter by username', async () => { + await request + .get(api('audit/rooms.members')) + .set(credentials) + .query({ + roomId: testChannel._id, + filter: dummyUser.username, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body.members).to.be.an('array'); + expect(res.body.members).to.have.lengthOf(1); + expect(res.body.members[0].username).to.be.equal(dummyUser.username); + }); + }); + + it('should filter by user name', async () => { + await request + .get(api('audit/rooms.members')) + .set(credentials) + .query({ + roomId: testChannel._id, + filter: dummyUser.name, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body.members).to.be.an('array'); + expect(res.body.members).to.have.lengthOf(1); + expect(res.body.members[0].name).to.be.equal(dummyUser.name); + }); + }); + + it('should sort by username', async () => { + await request + .get(api('audit/rooms.members')) + .set(credentials) + .query({ + roomId: testChannel._id, + sort: '{ "username": -1 }', + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body.members).to.be.an('array'); + expect(res.body.members).to.have.lengthOf(2); + expect(res.body.members[1].username).to.be.equal('rocketchat.internal.admin.test'); + expect(res.body.members[0].username).to.be.equal(dummyUser.username); + }); + }); + + it('should not allow nosqlinjection on filter param', async () => { + await request + .get(api('audit/rooms.members')) + .set(credentials) + .query({ + roomId: testChannel._id, + filter: '{ "$ne": "rocketchat.internal.admin.test" }', + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body.members).to.be.an('array'); + expect(res.body.members).to.have.lengthOf(0); + }); + + await request + .get(api('audit/rooms.members')) + .set(credentials) + .query({ + roomId: testChannel._id, + filter: { username: 'rocketchat.internal.admin.test' }, + }) + .expect(400); + }); + + it('should allow to fetch info even if user is not in the room', async () => { + await request + .get(api('audit/rooms.members')) + .set(auditorCredentials) + .query({ + roomId: testChannel._id, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body.members).to.be.an('array'); + expect(res.body.members[0].username).to.be.equal('rocketchat.internal.admin.test'); + expect(res.body.members[1].username).to.be.equal(dummyUser.username); + expect(res.body.total).to.be.equal(2); + }); + }); + + it('should allow to fetch info from private rooms', async () => { + await request + .get(api('audit/rooms.members')) + .set(auditorCredentials) + .query({ + roomId: testPrivateChannel._id, + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body.members).to.be.an('array'); + expect(res.body.members[0].username).to.be.equal('rocketchat.internal.admin.test'); + expect(res.body.total).to.be.equal(1); + }); + }); + }); +}); diff --git a/apps/meteor/tests/end-to-end/api/chat.ts b/apps/meteor/tests/end-to-end/api/chat.ts index 2b33e15526d4..7c10eeba45bc 100644 --- a/apps/meteor/tests/end-to-end/api/chat.ts +++ b/apps/meteor/tests/end-to-end/api/chat.ts @@ -1415,10 +1415,17 @@ describe('[Chat]', () => { let simpleMessageId: IMessage['_id']; before('should send simple message in room', async () => { + await updateSetting('Message_CustomFields_Enabled', true); + await updateSetting('Message_CustomFields', JSON.stringify({ properties: { test: { type: 'string' } } })); const res = await sendSimpleMessage({ roomId: 'GENERAL' }); simpleMessageId = res.body.message._id; }); + after(async () => { + await updateSetting('Message_CustomFields_Enabled', false); + await updateSetting('Message_CustomFields', ''); + }); + it('should update a message successfully', (done) => { void request .post(api('chat.update')) @@ -1517,6 +1524,62 @@ describe('[Chat]', () => { }); }); + it('should do nothing if the message text hasnt changed and theres no custom fields', async () => { + await request + .post(api('chat.update')) + .set(credentials) + .send({ + roomId: testChannel._id, + msgId: message._id, + text: 'This message was edited via API', + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('message.msg', 'This message was edited via API'); + expect(res.body).to.not.have.nested.property('message.customFields'); + }); + }); + + it('should update message custom fields along with msg', async () => { + await request + .post(api('chat.update')) + .set(credentials) + .send({ + roomId: testChannel._id, + msgId: message._id, + text: 'This message was edited via API 2', + customFields: { test: 'test' }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('message.msg', 'This message was edited via API 2'); + expect(res.body.message).to.have.property('customFields').that.is.an('object').that.deep.equals({ test: 'test' }); + }); + }); + + it('should update message custom fields without changes to msg', async () => { + await request + .post(api('chat.update')) + .set(credentials) + .send({ + roomId: testChannel._id, + msgId: message._id, + text: 'This message was edited via API 2', + customFields: { test: 'test 2' }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.nested.property('message.msg', 'This message was edited via API 2'); + expect(res.body.message).to.have.property('customFields').that.is.an('object').that.deep.equals({ test: 'test 2' }); + }); + }); + describe('Bad words filter', () => { before(() => Promise.all([updateSetting('Message_AllowBadWordsFilter', true), updateSetting('Message_BadWordsFilterList', 'badword,badword2')]), diff --git a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts index 23f6d35d2acd..9f0427ec2d8e 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts @@ -982,7 +982,6 @@ describe('LIVECHAT - rooms', () => { .expect('Content-Type', 'application/json') .expect(200) .expect((res: Response) => { - console.log({ res: res.body }); expect(res.body).to.have.property('success', true); }); @@ -1001,6 +1000,45 @@ describe('LIVECHAT - rooms', () => { roomId = newRoom._id; visitorToken = newVisitor.token; }); + (IS_EE ? describe : describe.skip)('fallback department', () => { + let fallbackDepartment: Awaited>['department']; + let initialDepartment: Awaited>['department']; + let newVisitor: ILivechatVisitor; + let latestRoom: IOmnichannelRoom; + before(async () => { + await updateSetting('Livechat_Routing_Method', 'Auto_Selection'); + + fallbackDepartment = (await createDepartmentWithAnOnlineAgent()).department; + initialDepartment = ( + await createDepartmentWithAnOfflineAgent({ + fallbackForwardDepartment: fallbackDepartment._id, + }) + ).department; + + expect(initialDepartment.fallbackForwardDepartment).to.be.equal(fallbackDepartment._id); + }); + + after(async () => { + await Promise.all([ + deleteDepartment(fallbackDepartment._id), + deleteDepartment(initialDepartment._id), + deleteVisitor(newVisitor._id), + closeOmnichannelRoom(latestRoom._id), + ]); + }); + + it('should redirect chat to fallback department when all agents in the initial department are offline', async () => { + await updateSetting('Livechat_Routing_Method', 'Auto_Selection'); + + newVisitor = await createVisitor(initialDepartment._id); + const newRoom = await createLivechatRoom(newVisitor.token); + + latestRoom = await getLivechatRoomInfo(newRoom._id); + + expect(latestRoom).to.have.property('departmentId'); + expect(latestRoom.departmentId).to.be.equal(fallbackDepartment._id); + }); + }); (IS_EE ? it : it.skip)('system messages sent on transfer should be properly generated', async () => { const messagesList = await fetchMessages(roomId, visitorToken); diff --git a/apps/meteor/tests/end-to-end/api/livechat/01-agents.ts b/apps/meteor/tests/end-to-end/api/livechat/01-agents.ts index fc81488ac37d..d8cd23d97752 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/01-agents.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/01-agents.ts @@ -1,11 +1,13 @@ import type { Credentials } from '@rocket.chat/api-client'; import { UserStatus, type ILivechatAgent, type ILivechatDepartment, type IRoom, type IUser } from '@rocket.chat/core-typings'; +import { Random } from '@rocket.chat/random'; import { expect } from 'chai'; import { after, before, describe, it } from 'mocha'; import type { Response } from 'supertest'; import { getCredentials, api, request, credentials } from '../../../data/api-data'; import { disableDefaultBusinessHour, makeDefaultBusinessHourActiveAndClosed } from '../../../data/livechat/businessHours'; +import { createDepartment, deleteDepartment } from '../../../data/livechat/department'; import { createAgent, createManager, @@ -21,6 +23,7 @@ import { import { updatePermission, updateSetting } from '../../../data/permissions.helper'; import { password } from '../../../data/user'; import { createUser, deleteUser, getMe, login, setUserStatus } from '../../../data/users.helper'; +import { IS_EE } from '../../../e2e/config/constants'; describe('LIVECHAT - Agents', () => { let agent: ILivechatAgent; @@ -377,7 +380,36 @@ describe('LIVECHAT - Agents', () => { }); }); - describe('livechat/agents/:agentId/departments', () => { + (IS_EE ? describe : describe.skip)('livechat/agents/:agentId/departments', () => { + let dep1: ILivechatDepartment; + let dep2: ILivechatDepartment; + before(async () => { + dep1 = await createDepartment( + { + enabled: true, + name: Random.id(), + showOnRegistration: true, + email: `${Random.id()}@example.com`, + showOnOfflineForm: true, + }, + [{ agentId: credentials['X-User-Id'] }], + ); + dep2 = await createDepartment( + { + enabled: false, + name: Random.id(), + email: `${Random.id()}@example.com`, + showOnRegistration: true, + showOnOfflineForm: true, + }, + [{ agentId: credentials['X-User-Id'] }], + ); + }); + + after(async () => { + await deleteDepartment(dep1._id); + await deleteDepartment(dep2._id); + }); it('should return an "unauthorized error" when the user does not have the necessary permission', async () => { await updatePermission('view-l-room', []); await request @@ -385,9 +417,9 @@ describe('LIVECHAT - Agents', () => { .set(credentials) .expect('Content-Type', 'application/json') .expect(403); + await updatePermission('view-l-room', ['livechat-manager', 'livechat-agent', 'admin']); }); it('should return an empty array of departments when the agentId is invalid', async () => { - await updatePermission('view-l-room', ['admin']); await request .get(api('livechat/agents/invalid-id/departments')) .set(credentials) @@ -399,7 +431,6 @@ describe('LIVECHAT - Agents', () => { }); }); it('should return an array of departments when the agentId is valid', async () => { - await updatePermission('view-l-room', ['admin']); await request .get(api(`livechat/agents/${agent._id}/departments`)) .set(credentials) @@ -408,12 +439,26 @@ describe('LIVECHAT - Agents', () => { .expect((res: Response) => { expect(res.body).to.have.property('success', true); expect(res.body).to.have.property('departments').and.to.be.an('array'); + expect(res.body.departments.length).to.be.equal(2); (res.body.departments as ILivechatDepartment[]).forEach((department) => { expect(department.agentId).to.be.equal(agent._id); + expect(department).to.have.property('departmentName').that.is.a('string'); }); }); - - await updatePermission('view-l-room', ['livechat-manager', 'livechat-agent', 'admin']); + }); + it('should return only enabled departments when param `enabledDepartmentsOnly` is true ', async () => { + await request + .get(api(`livechat/agents/${agent._id}/departments`)) + .set(credentials) + .query({ enabledDepartmentsOnly: true }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res: Response) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('departments').and.to.be.an('array'); + expect(res.body.departments.length).to.be.equal(1); + expect(res.body.departments[0].departmentEnabled).to.be.true; + }); }); }); diff --git a/apps/meteor/tests/end-to-end/api/rooms.ts b/apps/meteor/tests/end-to-end/api/rooms.ts index a8d64b1f4c7d..fa5878cc3c01 100644 --- a/apps/meteor/tests/end-to-end/api/rooms.ts +++ b/apps/meteor/tests/end-to-end/api/rooms.ts @@ -1995,6 +1995,24 @@ describe('[Rooms]', () => { }) .end(done); }); + it('should return an array sorted by "ts" property', (done) => { + void request + .get(api('rooms.adminRooms')) + .set(credentials) + .query({ + sort: JSON.stringify({ + ts: -1, + }), + }) + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('rooms').and.to.be.an('array'); + expect(res.body.rooms).to.have.lengthOf.at.least(1); + expect(res.body.rooms[0]).to.have.property('ts').that.is.a('string'); + }) + .end(done); + }); }); describe('update group dms name', () => { @@ -2129,12 +2147,15 @@ describe('[Rooms]', () => { describe('rooms.saveRoomSettings', () => { let testChannel: IRoom; const randomString = `randomString${Date.now()}`; + const teamName = `team-${Date.now()}`; let discussion: IRoom; + let testTeam: ITeam; before(async () => { const result = await createRoom({ type: 'c', name: `channel.test.${Date.now()}-${Math.random()}` }); testChannel = result.body.channel; + const resTeam = await request.post(api('teams.create')).set(credentials).send({ name: teamName, type: 0 }); const resDiscussion = await request .post(api('rooms.createDiscussion')) .set(credentials) @@ -2143,10 +2164,17 @@ describe('[Rooms]', () => { t_name: `discussion-create-from-tests-${testChannel.name}`, }); + testTeam = resTeam.body.team; discussion = resDiscussion.body.discussion; }); - after(() => Promise.all([deleteRoom({ type: 'p', roomId: discussion._id }), deleteRoom({ type: 'p', roomId: testChannel._id })])); + after(() => + Promise.all([ + deleteRoom({ type: 'p', roomId: discussion._id }), + deleteTeam(credentials, testTeam.name), + deleteRoom({ type: 'p', roomId: testChannel._id }), + ]), + ); it('should update the room settings', (done) => { const imageDataUri = `data:image/png;base64,${fs.readFileSync(path.join(process.cwd(), imgURL)).toString('base64')}`; @@ -2290,6 +2318,64 @@ describe('[Rooms]', () => { expect(res.body.room).to.not.have.property('favorite'); }); }); + it('should update the team sidepanel items to channels and discussions', async () => { + const sidepanelItems = ['channels', 'discussions']; + const response = await request + .post(api('rooms.saveRoomSettings')) + .set(credentials) + .send({ + rid: testTeam.roomId, + sidepanel: { items: sidepanelItems }, + }) + .expect('Content-Type', 'application/json') + .expect(200); + + expect(response.body).to.have.property('success', true); + + const channelInfoResponse = await request + .get(api('channels.info')) + .set(credentials) + .query({ roomId: response.body.rid }) + .expect('Content-Type', 'application/json') + .expect(200); + + expect(channelInfoResponse.body).to.have.property('success', true); + expect(channelInfoResponse.body.channel).to.have.property('sidepanel'); + expect(channelInfoResponse.body.channel.sidepanel).to.have.property('items').that.is.an('array').to.have.deep.members(sidepanelItems); + }); + it('should throw error when updating team sidepanel with incorrect items', async () => { + const sidepanelItems = ['wrong']; + await request + .post(api('rooms.saveRoomSettings')) + .set(credentials) + .send({ + rid: testTeam.roomId, + sidepanel: { items: sidepanelItems }, + }) + .expect(400); + }); + it('should throw error when updating team sidepanel with more than 2 items', async () => { + const sidepanelItems = ['channels', 'discussions', 'extra']; + await request + .post(api('rooms.saveRoomSettings')) + .set(credentials) + .send({ + rid: testTeam.roomId, + sidepanel: { items: sidepanelItems }, + }) + .expect(400); + }); + it('should throw error when updating team sidepanel with duplicated items', async () => { + const sidepanelItems = ['channels', 'channels']; + await request + .post(api('rooms.saveRoomSettings')) + .set(credentials) + .send({ + rid: testTeam.roomId, + sidepanel: { items: sidepanelItems }, + }) + .expect(400); + }); }); describe('rooms.images', () => { diff --git a/apps/meteor/tests/end-to-end/api/subscriptions.ts b/apps/meteor/tests/end-to-end/api/subscriptions.ts index c1df85bafccd..a03179569615 100644 --- a/apps/meteor/tests/end-to-end/api/subscriptions.ts +++ b/apps/meteor/tests/end-to-end/api/subscriptions.ts @@ -50,8 +50,36 @@ describe('[Subscriptions]', () => { .end(done); }); - it('/subscriptions.getOne:', () => { - it('subscriptions.getOne', (done) => { + describe('/subscriptions.getOne', () => { + it('should fail if no roomId provided', (done) => { + void request + .get(api('subscriptions.getOne')) + .set(credentials) + .expect('Content-Type', 'application/json') + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('error', "must have required property 'roomId' [invalid-params]"); + }) + .end(done); + }); + + it('should fail if not logged in', (done) => { + void request + .get(api('subscriptions.getOne')) + .query({ + roomId: testChannel._id, + }) + .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 the subscription with success', (done) => { void request .get(api('subscriptions.getOne')) .set(credentials) @@ -66,6 +94,52 @@ describe('[Subscriptions]', () => { }) .end(done); }); + + it('should keep subscription as read after sending a message', async () => { + await request + .get(api('subscriptions.getOne')) + .set(credentials) + .query({ + roomId: testChannel._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('subscription').and.to.be.an('object'); + expect(res.body.subscription).to.have.property('alert', false); + }); + + await request + .post(api('chat.sendMessage')) + .set(credentials) + .send({ + message: { + rid: testChannel._id, + msg: 'Sample message', + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('message').and.to.be.an('object'); + }); + + await request + .get(api('subscriptions.getOne')) + .set(credentials) + .query({ + roomId: testChannel._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('subscription').and.to.be.an('object'); + expect(res.body.subscription).to.have.property('alert', false); + }); + }); }); describe('[/subscriptions.read]', () => { diff --git a/apps/meteor/tests/end-to-end/api/teams.ts b/apps/meteor/tests/end-to-end/api/teams.ts index 99689650384d..425d0039e502 100644 --- a/apps/meteor/tests/end-to-end/api/teams.ts +++ b/apps/meteor/tests/end-to-end/api/teams.ts @@ -172,6 +172,84 @@ describe('[Teams]', () => { }) .end(done); }); + + it('should create a team with sidepanel items containing channels', async () => { + const teamName = `test-team-with-sidepanel-${Date.now()}`; + const sidepanelItems = ['channels']; + + const response = await request + .post(api('teams.create')) + .set(credentials) + .send({ + name: teamName, + type: 0, + sidepanel: { + items: sidepanelItems, + }, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }); + + await request + .get(api('channels.info')) + .set(credentials) + .query({ roomId: response.body.team.roomId }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((response) => { + expect(response.body).to.have.property('success', true); + expect(response.body.channel).to.have.property('sidepanel'); + expect(response.body.channel.sidepanel).to.have.property('items').that.is.an('array').to.have.deep.members(sidepanelItems); + }); + await deleteTeam(credentials, teamName); + }); + + it('should throw error when creating a team with sidepanel with more than 2 items', async () => { + await request + .post(api('teams.create')) + .set(credentials) + .send({ + name: `test-team-with-sidepanel-error-${Date.now()}`, + type: 0, + sidepanel: { + items: ['channels', 'discussion', 'other'], + }, + }) + .expect('Content-Type', 'application/json') + .expect(400); + }); + + it('should throw error when creating a team with sidepanel with incorrect items', async () => { + await request + .post(api('teams.create')) + .set(credentials) + .send({ + name: `test-team-with-sidepanel-error-${Date.now()}`, + type: 0, + sidepanel: { + items: ['other'], + }, + }) + .expect('Content-Type', 'application/json') + .expect(400); + }); + it('should throw error when creating a team with sidepanel with duplicated items', async () => { + await request + .post(api('teams.create')) + .set(credentials) + .send({ + name: `test-team-with-sidepanel-error-${Date.now()}`, + type: 0, + sidepanel: { + items: ['channels', 'channels'], + }, + }) + .expect('Content-Type', 'application/json') + .expect(400); + }); }); describe('/teams.convertToChannel', () => { diff --git a/apps/meteor/tests/mocks/client/ServerProviderMock.tsx b/apps/meteor/tests/mocks/client/ServerProviderMock.tsx index 6c07573f05b2..b661fea54379 100644 --- a/apps/meteor/tests/mocks/client/ServerProviderMock.tsx +++ b/apps/meteor/tests/mocks/client/ServerProviderMock.tsx @@ -69,14 +69,14 @@ const contextValue = { getStream, }; -type ServerProviderProps = { +type ServerProviderMockProps = { children?: ReactNode; callEndpoint?: ContextType['callEndpoint']; }; -const ServerProvider = ({ children, callEndpoint }: ServerProviderProps) => { +const ServerProviderMock = ({ children, callEndpoint }: ServerProviderMockProps) => { const value = useMemo(() => ({ ...contextValue, callEndpoint: callEndpoint ?? contextValue.callEndpoint }), [callEndpoint]); return ; }; -export default ServerProvider; +export default ServerProviderMock; diff --git a/apps/meteor/tests/mocks/client/blobUrls.ts b/apps/meteor/tests/mocks/client/blobUrls.ts deleted file mode 100644 index d56164c027ff..000000000000 --- a/apps/meteor/tests/mocks/client/blobUrls.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { v4 } from 'uuid'; - -export const enableBlobUrlsMock = (): void => { - const urlByBlob = new WeakMap(); - const blobByUrl = new Map(); - - window.URL.createObjectURL = (blob: Blob): string => { - const url = urlByBlob.get(blob) ?? `blob://${v4()}`; - urlByBlob.set(blob, url); - blobByUrl.set(url, blob); - return url; - }; - - window.URL.revokeObjectURL = (url: string): void => { - const blob = blobByUrl.get(url); - if (!blob) { - return; - } - - urlByBlob.delete(blob); - blobByUrl.delete(url); - }; -}; diff --git a/apps/meteor/tests/mocks/client/jsdom.ts b/apps/meteor/tests/mocks/client/jsdom.ts deleted file mode 100644 index 3398a619a932..000000000000 --- a/apps/meteor/tests/mocks/client/jsdom.ts +++ /dev/null @@ -1,9 +0,0 @@ -import globalJsdom from 'jsdom-global'; - -const testUrl = process.env.TEST_API_URL || 'http://localhost:3000'; - -export const enableJsdom = (): void => { - globalJsdom('', { - url: testUrl, - }); -}; diff --git a/apps/meteor/tests/mocks/client/meteor.ts b/apps/meteor/tests/mocks/client/meteor.ts new file mode 100644 index 000000000000..d8340ae7b3e7 --- /dev/null +++ b/apps/meteor/tests/mocks/client/meteor.ts @@ -0,0 +1,9 @@ +import { jest } from '@jest/globals'; + +export const Meteor = { + loginWithSamlToken: jest.fn((_token, callback: () => void) => callback()), +}; + +export const Mongo = { + Collection: class Collection {}, +}; diff --git a/apps/meteor/tests/mocks/mockDate.ts b/apps/meteor/tests/mocks/mockDate.ts deleted file mode 100644 index 6591dfdf7b1b..000000000000 --- a/apps/meteor/tests/mocks/mockDate.ts +++ /dev/null @@ -1,12 +0,0 @@ -// you must use jest.useFakeTimers for this to work. -export const setDate = (minutes = 1, hours = 0, date = 1) => { - // June 12, 2024, 12:00 AM - const fakeDate = new Date(); - fakeDate.setFullYear(2024); - fakeDate.setMonth(5); - fakeDate.setDate(date); - fakeDate.setHours(hours); - fakeDate.setMinutes(minutes); - fakeDate.setSeconds(0); - jest.setSystemTime(fakeDate); -}; diff --git a/apps/meteor/tests/setup/cleanupTestingLibrary.ts b/apps/meteor/tests/setup/cleanupTestingLibrary.ts deleted file mode 100644 index 663890796ac8..000000000000 --- a/apps/meteor/tests/setup/cleanupTestingLibrary.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { cleanup } from '@testing-library/react'; - -/** - * Usually the testing library attachs its `cleanup` function by itself when an `afterEach` function is present at the - * global scope. It provides a simple mechanism for, e.g., unmounting React components after tests to avoid leaking - * memory and breaking the idempotence of subsequent tests. Despite working fine at a single run, when Mocha is run in - * _watch mode_ all hooks previously attached are discarded and reloaded from **tests files only**, and its supposed to - * work that way. - * - * See https://testing-library.com/docs/react-testing-library/setup#auto-cleanup-in-mochas-watch-mode - */ - -export const mochaHooks = { - afterEach(): void { - cleanup(); - }, -}; diff --git a/apps/meteor/tests/setup/hoistedReact.ts b/apps/meteor/tests/setup/hoistedReact.ts deleted file mode 100644 index 47a42b21fd95..000000000000 --- a/apps/meteor/tests/setup/hoistedReact.ts +++ /dev/null @@ -1,15 +0,0 @@ -// A UNINTENDED LOL-ZONE: SORRY FOR THIS -// ------------+----------+------------- -// /\O | _O | O -// /\/ | //|_ | /_ -// /\ | | | |\ -// / \ | /| | / | -// LOL LOL | LLOL | LOLLOL -// ------------+----------+------------- -// BLACK MAGIC FULL FEATURED ENABLED - -// As Meteor requires a disabled hoisting of dependencies, we end up with multiple React instances, -// despite having the same version. - -// eslint-disable-next-line @typescript-eslint/no-var-requires -Object.assign(require('../../node_modules/react'), require('../../../../node_modules/react')); diff --git a/apps/meteor/tests/setup/registerWebApiMocks.ts b/apps/meteor/tests/setup/registerWebApiMocks.ts deleted file mode 100644 index 83bf826fa0d0..000000000000 --- a/apps/meteor/tests/setup/registerWebApiMocks.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { enableBlobUrlsMock } from '../mocks/client/blobUrls'; -import { enableJsdom } from '../mocks/client/jsdom'; - -enableJsdom(); -enableBlobUrlsMock(); diff --git a/apps/meteor/tests/unit/app/apps/server/messages.tests.js b/apps/meteor/tests/unit/app/apps/server/messages.tests.js index 2959820e0df9..04866f6440b6 100644 --- a/apps/meteor/tests/unit/app/apps/server/messages.tests.js +++ b/apps/meteor/tests/unit/app/apps/server/messages.tests.js @@ -18,6 +18,9 @@ const { AppMessagesConverter } = proxyquire.noCallThru().load('../../../../../ap Messages: new MessagesMock(), Users: new UsersMock(), }, + '@rocket.chat/core-typings': { + isMessageFromVisitor: (message) => 'token' in message, + }, }); describe('The AppMessagesConverter instance', () => { diff --git a/apps/meteor/tests/unit/app/lib/server/lib/checkUrlForSsrf.tests.ts b/apps/meteor/tests/unit/app/lib/server/lib/checkUrlForSsrf.tests.ts index 9cb7f1cd288c..bcd4fe73026c 100644 --- a/apps/meteor/tests/unit/app/lib/server/lib/checkUrlForSsrf.tests.ts +++ b/apps/meteor/tests/unit/app/lib/server/lib/checkUrlForSsrf.tests.ts @@ -1,8 +1,22 @@ import { expect } from 'chai'; +import p from 'proxyquire'; +import Sinon from 'sinon'; -import { checkUrlForSsrf } from '../../../../../../app/lib/server/functions/checkUrlForSsrf'; +const lookupMock = Sinon.stub(); +const dnsLookup = (host: string, cb: (...args: any[]) => any) => { + return cb(null, lookupMock(host)); +}; + +const { checkUrlForSsrf } = p.noCallThru().load('../../../../../../app/lib/server/functions/checkUrlForSsrf.ts', { + dns: { + lookup: dnsLookup, + }, +}); describe('checkUrlForSsrf', () => { + beforeEach(() => { + lookupMock.reset(); + }); it('should return false if the URL does not start with http:// or https://', async () => { const result = await checkUrlForSsrf('ftp://example.com'); expect(result).to.be.false; @@ -29,11 +43,13 @@ describe('checkUrlForSsrf', () => { }); it('should return false if DNS resolves to an IP in the restricted range', async () => { + lookupMock.returns('127.0.0.1'); const result = await checkUrlForSsrf('http://169.254.169.254.nip.io'); expect(result).to.be.false; }); it('should return true if valid domain', async () => { + lookupMock.returns('216.58.214.174'); const result = await checkUrlForSsrf('https://www.google.com/'); expect(result).to.be.true; }); @@ -44,6 +60,7 @@ describe('checkUrlForSsrf', () => { }); it('should return true if valid URL', async () => { + lookupMock.returns('216.58.214.174'); const result = await checkUrlForSsrf( 'https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Cat_August_2010-4.jpg/2560px-Cat_August_2010-4.jpg', ); diff --git a/apps/meteor/tests/unit/server/modules/watchers/lib/messages.spec.ts b/apps/meteor/tests/unit/app/lib/server/lib/notifyListener.spec.ts similarity index 74% rename from apps/meteor/tests/unit/server/modules/watchers/lib/messages.spec.ts rename to apps/meteor/tests/unit/app/lib/server/lib/notifyListener.spec.ts index 5ef8bbdd1634..60b01dcefd12 100644 --- a/apps/meteor/tests/unit/server/modules/watchers/lib/messages.spec.ts +++ b/apps/meteor/tests/unit/app/lib/server/lib/notifyListener.spec.ts @@ -9,7 +9,7 @@ describe('Message Broadcast Tests', () => { let messagesFindOneStub: sinon.SinonStub; let broadcastStub: sinon.SinonStub; let getMessageToBroadcast: any; - let broadcastMessageFromData: any; + let notifyOnMessageChange: any; let memStub: sinon.SinonStub; const sampleMessage: IMessage = { @@ -49,18 +49,14 @@ describe('Message Broadcast Tests', () => { broadcastStub = sinon.stub(); memStub = sinon.stub().callsFake((fn: any) => fn); - const proxyMock = proxyquire.noCallThru().load('../../../../../../server/modules/watchers/lib/messages', { + const proxyMock = proxyquire.noPreserveCache().load('../../../../../../app/lib/server/lib/notifyListener', { '@rocket.chat/models': modelsStubs(), '@rocket.chat/core-services': coreStubs(false), 'mem': memStub, }); getMessageToBroadcast = proxyMock.getMessageToBroadcast; - broadcastMessageFromData = proxyMock.broadcastMessageFromData; - }); - - afterEach(() => { - sinon.reset(); + notifyOnMessageChange = proxyMock.notifyOnMessageChange; }); describe('getMessageToBroadcast', () => { @@ -77,12 +73,19 @@ describe('Message Broadcast Tests', () => { const testCases = [ { - description: 'should return undefined if message is hidden or imported', + description: 'should return undefined if message is hidden', message: { ...sampleMessage, _hidden: true }, hideSystemMessages: [], useRealName: false, expectedResult: undefined, }, + { + description: 'should return undefined if message is imported', + message: { ...sampleMessage, imported: true }, + hideSystemMessages: [], + useRealName: false, + expectedResult: undefined, + }, { description: 'should hide message if type is in hideSystemMessage settings', message: sampleMessage, @@ -97,6 +100,26 @@ describe('Message Broadcast Tests', () => { useRealName: true, expectedResult: { ...sampleMessage, u: { ...sampleMessage.u, name: 'Real User' } }, }, + { + description: 'should return the message with mentions real name if useRealName is true', + message: { + ...sampleMessage, + mentions: [ + { _id: 'mention1', username: 'mention1', name: 'Mention 1' }, + { _id: 'mention2', username: 'mention2', name: 'Mention 2' }, + ], + }, + hideSystemMessages: [], + useRealName: true, + expectedResult: { + ...sampleMessage, + u: { ...sampleMessage.u, name: 'Real User' }, + mentions: [ + { _id: 'mention1', username: 'mention1', name: 'Mention 1' }, + { _id: 'mention2', username: 'mention2', name: 'Mention 2' }, + ], + }, + }, { description: 'should return the message if Hide_System_Messages is undefined', message: sampleMessage, @@ -162,7 +185,12 @@ describe('Message Broadcast Tests', () => { getSettingValueByIdStub.withArgs('UI_Use_Real_Name').resolves(useRealName); if (useRealName) { - usersFindOneStub.resolves({ name: 'Real User' }); + const realNames = + message.mentions && message.mentions.length > 0 + ? [message.u.name, ...message.mentions.map((mention) => mention.name)] + : [message.u.name]; + + realNames.forEach((user, index) => usersFindOneStub.onCall(index).resolves({ name: user })); } const result = await getMessageToBroadcast({ id: '123' }); @@ -172,14 +200,14 @@ describe('Message Broadcast Tests', () => { }); }); - describe('broadcastMessageFromData', () => { + describe('notifyOnMessageChange', () => { const setupProxyMock = (dbWatchersDisabled: boolean) => { - const proxyMock = proxyquire.noCallThru().load('../../../../../../server/modules/watchers/lib/messages', { + const proxyMock = proxyquire.noCallThru().load('../../../../../../app/lib/server/lib/notifyListener', { '@rocket.chat/models': modelsStubs(), '@rocket.chat/core-services': coreStubs(dbWatchersDisabled), 'mem': memStub, }); - broadcastMessageFromData = proxyMock.broadcastMessageFromData; + notifyOnMessageChange = proxyMock.notifyOnMessageChange; }; const testCases = [ @@ -187,25 +215,33 @@ describe('Message Broadcast Tests', () => { description: 'should broadcast the message if dbWatchersDisabled is true', dbWatchersDisabled: true, expectBroadcast: true, + message: sampleMessage, }, { description: 'should not broadcast the message if dbWatchersDisabled is false', dbWatchersDisabled: false, expectBroadcast: false, + message: sampleMessage, + }, + { + description: 'should not broadcast the message if there is no data attributes', + dbWatchersDisabled: true, + expectBroadcast: false, + message: null, }, ]; - testCases.forEach(({ description, dbWatchersDisabled, expectBroadcast }) => { + testCases.forEach(({ description, dbWatchersDisabled, expectBroadcast, message }) => { it(description, async () => { setupProxyMock(dbWatchersDisabled); - messagesFindOneStub.resolves(sampleMessage); + messagesFindOneStub.resolves(message); getSettingValueByIdStub.resolves([]); - await broadcastMessageFromData({ id: '123', data: sampleMessage }); + await notifyOnMessageChange({ id: '123', data: message }); if (expectBroadcast) { expect(broadcastStub.calledOnce).to.be.true; - expect(broadcastStub.calledOnceWith('watch.messages', { message: sampleMessage })).to.be.true; + expect(broadcastStub.calledOnceWith('watch.messages', { message })).to.be.true; } else { expect(broadcastStub.called).to.be.false; } diff --git a/apps/meteor/tests/unit/app/livechat/server/hooks/processRoomAbandonment.spec.ts b/apps/meteor/tests/unit/app/livechat/server/hooks/processRoomAbandonment.spec.ts new file mode 100644 index 000000000000..91f88c36b022 --- /dev/null +++ b/apps/meteor/tests/unit/app/livechat/server/hooks/processRoomAbandonment.spec.ts @@ -0,0 +1,623 @@ +import { expect } from 'chai'; +import { it, describe } from 'mocha'; +import p from 'proxyquire'; +import sinon from 'sinon'; + +const settingsStub = sinon.stub(); +const models = { + LivechatDepartment: { + findOneById: sinon.stub(), + }, + LivechatBusinessHours: { + findOneById: sinon.stub(), + }, + Messages: { + findAgentLastMessageByVisitorLastMessageTs: sinon.stub(), + }, + LivechatRooms: { + setVisitorInactivityInSecondsById: sinon.stub(), + }, +}; + +const businessHourManagerMock = { + getBusinessHour: sinon.stub(), +}; + +const { getSecondsWhenOfficeHoursIsDisabled, parseDays, getSecondsSinceLastAgentResponse, onCloseRoom } = p + .noCallThru() + .load('../../../../../../app/livechat/server/hooks/processRoomAbandonment.ts', { + '@rocket.chat/models': models, + '../../../../lib/callbacks': { + callbacks: { add: sinon.stub(), priority: { HIGH: 'high' } }, + }, + '../../../settings/server': { + settings: { get: settingsStub }, + }, + '../business-hour': { businessHourManager: businessHourManagerMock }, + }); + +describe('processRoomAbandonment', () => { + describe('getSecondsWhenOfficeHoursIsDisabled', () => { + it('should return the seconds since the agents last message till room was closed', () => { + const room = { + closedAt: new Date('2024-01-01T12:00:10Z'), + }; + const agentLastMessage = { + ts: new Date('2024-01-01T12:00:00Z'), + }; + const result = getSecondsWhenOfficeHoursIsDisabled(room, agentLastMessage); + expect(result).to.be.equal(10); + }); + it('should return the seconds since agents last message till now when room.closedAt is undefined', () => { + const room = { + closedAt: undefined, + }; + const agentLastMessage = { + ts: new Date(new Date().getTime() - 10000), + }; + const result = getSecondsWhenOfficeHoursIsDisabled(room, agentLastMessage); + expect(result).to.be.equal(10); + }); + }); + describe('parseDays', () => { + it('should properly return the days in the expected format', () => { + const days = [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Monday', time: '11:00' } }, + open: true, + }, + { + day: 'Tuesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: true, + }, + { + day: 'Wednesday', + start: { utc: { dayOfWeek: 'Wednesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Wednesday', time: '11:00' } }, + open: true, + }, + ]; + + const result = days.reduce(parseDays, {}); + expect(result).to.be.deep.equal({ + Monday: { + start: { day: 'Monday', time: '10:00' }, + finish: { day: 'Monday', time: '11:00' }, + open: true, + }, + Tuesday: { + start: { day: 'Tuesday', time: '10:00' }, + finish: { day: 'Tuesday', time: '11:00' }, + open: true, + }, + Wednesday: { + start: { day: 'Wednesday', time: '10:00' }, + finish: { day: 'Wednesday', time: '11:00' }, + open: true, + }, + }); + }); + it('should properly parse open/close days', () => { + const days = [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Monday', time: '11:00' } }, + open: true, + }, + { + day: 'Tuesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: false, + }, + { + day: 'Wednesday', + start: { utc: { dayOfWeek: 'Wednesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Wednesday', time: '11:00' } }, + open: true, + }, + ]; + + const result = days.reduce(parseDays, {}); + expect(result).to.be.deep.equal({ + Monday: { + start: { day: 'Monday', time: '10:00' }, + finish: { day: 'Monday', time: '11:00' }, + open: true, + }, + Tuesday: { + start: { day: 'Tuesday', time: '10:00' }, + finish: { day: 'Tuesday', time: '11:00' }, + open: false, + }, + Wednesday: { + start: { day: 'Wednesday', time: '10:00' }, + finish: { day: 'Wednesday', time: '11:00' }, + open: true, + }, + }); + }); + }); + describe('getSecondsSinceLastAgentResponse', () => { + beforeEach(() => { + settingsStub.reset(); + models.LivechatDepartment.findOneById.reset(); + models.LivechatBusinessHours.findOneById.reset(); + businessHourManagerMock.getBusinessHour.reset(); + }); + it('should return the seconds since agent last message when Livechat_enable_business_hours is false', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(false); + const room = { + closedAt: undefined, + }; + const agentLastMessage = { + ts: new Date(new Date().getTime() - 10000), + }; + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(10); + }); + it('should return the seconds since last agent message when room has a department but department has an invalid business hour attached', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + models.LivechatDepartment.findOneById.withArgs('departmentId').resolves({ + businessHourId: 'businessHourId', + }); + models.LivechatBusinessHours.findOneById.withArgs('businessHourId').resolves(null); + const room = { + closedAt: undefined, + departmentId: 'departmentId', + }; + const agentLastMessage = { + ts: new Date(new Date().getTime() - 10000), + }; + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(models.LivechatDepartment.findOneById.calledWith(room.departmentId)).to.be.true; + expect(result).to.be.equal(10); + }); + it('should return the seconds since last agent message when department has a valid business hour but business hour doest have work hours', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + models.LivechatDepartment.findOneById.withArgs('departmentId').resolves({ + businessHourId: 'businessHourId', + }); + models.LivechatBusinessHours.findOneById.withArgs('businessHourId').resolves({ + workHours: [], + }); + businessHourManagerMock.getBusinessHour.withArgs('businessHourId').resolves(null); + const room = { + closedAt: undefined, + departmentId: 'departmentId', + }; + const agentLastMessage = { + ts: new Date(new Date().getTime() - 10000), + }; + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(10); + }); + it('should return the seconds since last agent message when department has a valid business hour but business hour workhours is empty', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + models.LivechatDepartment.findOneById.withArgs('departmentId').resolves({ + businessHourId: 'businessHourId', + }); + models.LivechatBusinessHours.findOneById.withArgs('businessHourId').resolves({ + workHours: [], + }); + businessHourManagerMock.getBusinessHour.withArgs('businessHourId').resolves({ + workHours: [], + }); + const room = { + closedAt: undefined, + departmentId: 'departmentId', + }; + const agentLastMessage = { + ts: new Date(new Date().getTime() - 10000), + }; + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(10); + }); + it('should get the data from the default business hour when room has no department attached and return the seconds since last agent message when default bh has no workhours', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + businessHourManagerMock.getBusinessHour.resolves({ + workHours: [], + }); + const room = { + closedAt: undefined, + }; + const agentLastMessage = { + ts: new Date(new Date().getTime() - 10000), + }; + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(models.LivechatDepartment.findOneById.called).to.be.false; + expect(models.LivechatBusinessHours.findOneById.called).to.be.false; + expect(businessHourManagerMock.getBusinessHour.called).to.be.true; + expect(businessHourManagerMock.getBusinessHour.getCall(0).args.length).to.be.equal(0); + expect(result).to.be.equal(10); + }); + it('should return the proper number of seconds the room was inactive considering business hours (inactive same day)', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + const room = { + closedAt: new Date('2024-01-01T12:00:00Z'), + }; + const agentLastMessage = { + ts: new Date('2024-01-01T00:00:00Z'), + }; + + businessHourManagerMock.getBusinessHour.resolves({ + workHours: [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Monday', time: '11:00' } }, + open: true, + }, + { + day: 'Tuesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: true, + }, + { + day: 'Wednesday', + start: { utc: { dayOfWeek: 'Wednesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Wednesday', time: '11:00' } }, + open: true, + }, + ], + }); + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(3600); + }); + it('should return the proper number of seconds the room was inactive considering business hours (inactive same day)', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + const room = { + closedAt: new Date('2024-01-01T12:00:00Z'), + }; + const agentLastMessage = { + ts: new Date('2024-01-01T00:00:00Z'), + }; + businessHourManagerMock.getBusinessHour.resolves({ + workHours: [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Monday', time: '23:00' } }, + open: true, + }, + { + day: 'Tuesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: true, + }, + { + day: 'Wednesday', + start: { utc: { dayOfWeek: 'Wednesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Wednesday', time: '11:00' } }, + open: true, + }, + ], + }); + + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(7200); + }); + it('should return 0 if a room happened to be inactive on a day outside of business hours', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + const room = { + closedAt: new Date('2024-01-03T12:00:00Z'), + }; + const agentLastMessage = { + ts: new Date('2024-01-03T00:00:00Z'), + }; + businessHourManagerMock.getBusinessHour.resolves({ + workHours: [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Monday', time: '11:00' } }, + open: true, + }, + { + day: 'Tuesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: true, + }, + ], + }); + + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(0); + }); + it('should return the proper number of seconds when a room was inactive for more than 1 day', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + const room = { + closedAt: new Date('2024-01-03T12:00:00Z'), + }; + const agentLastMessage = { + ts: new Date('2024-01-01T00:00:00Z'), + }; + businessHourManagerMock.getBusinessHour.resolves({ + workHours: [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Monday', time: '11:00' } }, + open: true, + }, + { + day: 'Tuesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: true, + }, + ], + }); + + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(7200); + }); + it('should return the proper number of seconds when a room was inactive for more than 1 day, and one of those days was a closed day', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + const room = { + closedAt: new Date('2024-01-03T12:00:00Z'), + }; + const agentLastMessage = { + ts: new Date('2024-01-01T00:00:00Z'), + }; + businessHourManagerMock.getBusinessHour.resolves({ + workHours: [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Monday', time: '11:00' } }, + open: true, + }, + { + day: 'Tuesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: false, + }, + { + day: 'Wednesday', + start: { utc: { dayOfWeek: 'Wednesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Wednesday', time: '11:00' } }, + open: true, + }, + ], + }); + + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(7200); + }); + it('should return the proper number of seconds when a room was inactive for more than 1 day and one of those days is not in configuration', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + const room = { + closedAt: new Date('2024-01-03T12:00:00Z'), + }; + const agentLastMessage = { + ts: new Date('2024-01-01T00:00:00Z'), + }; + businessHourManagerMock.getBusinessHour.resolves({ + workHours: [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Monday', time: '11:00' } }, + open: true, + }, + { + day: 'Wednesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: true, + }, + ], + }); + + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(7200); + }); + it('should return the proper number of seconds when a room has been inactive for more than a week', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + const room = { + closedAt: new Date('2024-01-10T12:00:00Z'), + }; + const agentLastMessage = { + ts: new Date('2024-01-01T00:00:00Z'), + }; + businessHourManagerMock.getBusinessHour.resolves({ + workHours: [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Monday', time: '11:00' } }, + open: true, + }, + { + day: 'Tuesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: true, + }, + { + day: 'Wednesday', + start: { utc: { dayOfWeek: 'Wednesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Wednesday', time: '11:00' } }, + open: true, + }, + { + day: 'Thursday', + start: { utc: { dayOfWeek: 'Thursday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Thursday', time: '11:00' } }, + open: false, + }, + { + day: 'Saturday', + start: { utc: { dayOfWeek: 'Friday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Friday', time: '11:00' } }, + open: true, + }, + { + day: 'Sunday', + start: { utc: { dayOfWeek: 'Saturday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Saturday', time: '11:00' } }, + open: true, + }, + ], + }); + + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(28800); + }); + it('should return 0 when room was inactive in the same day but the configuration for bh on that day is invalid', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + const room = { + closedAt: new Date('2024-01-01T12:00:00Z'), + }; + const agentLastMessage = { + ts: new Date('2024-01-01T00:00:00Z'), + }; + businessHourManagerMock.getBusinessHour.resolves({ + workHours: [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: undefined } }, + finish: { utc: { dayOfWeek: 'Monday', time: undefined } }, + open: true, + }, + { + day: 'Wednesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: false, + }, + ], + }); + + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(0); + }); + it('should return the proper number of seconds when a room has been inactive for more than a day but the inactivity started after BH started', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + const room = { + closedAt: new Date('2024-01-02T12:00:00Z'), + }; + const agentLastMessage = { + ts: new Date('2024-01-01T10:15:00Z'), + }; + businessHourManagerMock.getBusinessHour.resolves({ + workHours: [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Monday', time: '11:00' } }, + open: true, + }, + { + day: 'Tuesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: true, + }, + ], + }); + + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(6300); + }); + it('should return the proper number of seconds when a room was inactive between a BH start and end', async () => { + settingsStub.withArgs('Livechat_enable_business_hours').returns(true); + const room = { + closedAt: new Date('2024-01-01T10:50:00Z'), + }; + const agentLastMessage = { + ts: new Date('2024-01-01T10:15:00Z'), + }; + businessHourManagerMock.getBusinessHour.resolves({ + workHours: [ + { + day: 'Monday', + start: { utc: { dayOfWeek: 'Monday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Monday', time: '11:00' } }, + open: true, + }, + { + day: 'Tuesday', + start: { utc: { dayOfWeek: 'Tuesday', time: '10:00' } }, + finish: { utc: { dayOfWeek: 'Tuesday', time: '11:00' } }, + open: true, + }, + ], + }); + + const result = await getSecondsSinceLastAgentResponse(room, agentLastMessage); + expect(result).to.be.equal(2100); + }); + }); + describe('onCloseRoom', () => { + beforeEach(() => { + models.Messages.findAgentLastMessageByVisitorLastMessageTs.reset(); + }); + it('should skip the hook if room is not an omnichannel room', async () => { + const param = { room: { t: 'd' } }; + const r = await onCloseRoom(param); + + expect(models.Messages.findAgentLastMessageByVisitorLastMessageTs.called).to.be.false; + expect(r).to.be.equal(param); + }); + it('should skip if room was not closed by agent', async () => { + const param = { room: { t: 'l' }, closer: 'visitor' }; + const r = await onCloseRoom(param); + + expect(models.Messages.findAgentLastMessageByVisitorLastMessageTs.called).to.be.false; + expect(r).to.be.equal(param); + }); + it('should skip if the last message on room was not from an agent', async () => { + const param = { room: { t: 'l' }, closer: 'user', lastMessage: { token: 'xxxx' } }; + const r = await onCloseRoom(param); + + expect(models.Messages.findAgentLastMessageByVisitorLastMessageTs.called).to.be.false; + expect(r).to.be.equal(param); + }); + it('should skip if the last message is not on db', async () => { + models.Messages.findAgentLastMessageByVisitorLastMessageTs.resolves(null); + const param = { room: { _id: 'xyz', t: 'l', v: { lastMessageTs: new Date() }, closer: 'user', lastMessage: { msg: 'test' } } }; + const r = await onCloseRoom(param); + + expect(models.Messages.findAgentLastMessageByVisitorLastMessageTs.calledWith('xyz', param.room.v.lastMessageTs)).to.be.true; + expect(r).to.be.equal(param); + }); + it('should skip if the visitor has not send any messages', async () => { + models.Messages.findAgentLastMessageByVisitorLastMessageTs.resolves({ ts: undefined }); + const param = { room: { _id: 'xyz', t: 'l', v: { token: 'xfasfdsa' }, closer: 'user', lastMessage: { msg: 'test' } } }; + const r = await onCloseRoom(param); + + expect(models.Messages.findAgentLastMessageByVisitorLastMessageTs.called).to.be.false; + expect(r).to.be.equal(param); + }); + it('should set the visitor inactivity in seconds when all params are valid', async () => { + models.Messages.findAgentLastMessageByVisitorLastMessageTs.resolves({ ts: new Date('2024-01-01T10:15:00Z') }); + settingsStub.withArgs('Livechat_enable_business_hours').returns(false); + const param = { + room: { + _id: 'xyz', + t: 'l', + v: { lastMessageTs: new Date() }, + closedAt: new Date('2024-01-01T10:50:00Z'), + closer: 'user', + lastMessage: { msg: 'test' }, + }, + }; + const r = await onCloseRoom(param); + + expect(models.Messages.findAgentLastMessageByVisitorLastMessageTs.calledWith('xyz', param.room.v.lastMessageTs)).to.be.true; + expect(models.LivechatRooms.setVisitorInactivityInSecondsById.calledWith('xyz', 2100)).to.be.true; + expect(r).to.be.equal(param); + }); + }); +}); diff --git a/apps/meteor/tests/unit/app/settings/server/functions/settings.tests.ts b/apps/meteor/tests/unit/app/settings/server/functions/settings.tests.ts index 3f409881b259..5f5001c0251d 100644 --- a/apps/meteor/tests/unit/app/settings/server/functions/settings.tests.ts +++ b/apps/meteor/tests/unit/app/settings/server/functions/settings.tests.ts @@ -448,7 +448,7 @@ describe('Settings', () => { .to.not.have.any.keys('section'); }); - it('should ignore setting object from code if only value changes and setting already stored', async () => { + it('should ignore setting object from code if only value changes in code and setting already stored', async () => { const settings = new CachedSettings(); Settings.settings = settings; settings.initialized(); @@ -467,7 +467,60 @@ describe('Settings', () => { expect(Settings.upsertCalls).to.be.equal(0); }); - it('should ignore value from environment if setting is already stored', async () => { + it('should not update (reset) cached setting with value in code if some prop in code changes (including value)', async () => { + Settings.setDelay(1000); + const settings = new CachedSettings(); + process.env[`OVERWRITE_SETTING_${testSetting._id}`] = 'false'; + const storedSetting = { ...testSetting, value: true, packageValue: true }; + settings.set(storedSetting); + + Settings.settings = settings; + + settings.initialized(); + + expect(settings.get(storedSetting._id)).to.be.equal(true); + + const settingsRegistry = new SettingsRegistry({ store: settings, model: Settings as any }); + + const settingFromCodeFaked = { + ...storedSetting, + value: true, + enterprise: true, + invalidValue: '', + }; + + await settingsRegistry.add(settingFromCodeFaked._id, settingFromCodeFaked.value, settingFromCodeFaked); + + expect(Settings.insertCalls).to.be.equal(0); + expect(Settings.upsertCalls).to.be.equal(1); + + expect(settings.get(storedSetting._id)).to.be.equal(false); + }); + + it('should update cached setting with value from environment if some prop including value in code changes', async () => { + const settings = new CachedSettings(); + Settings.settings = settings; + settings.initialized(); + const settingsRegistry = new SettingsRegistry({ store: settings, model: Settings as any }); + + await settingsRegistry.add(testSetting._id, testSetting.value, testSetting); + + expect(Settings.insertCalls).to.be.equal(1); + Settings.insertCalls = 0; + + const settingFromCodeFaked = { ...testSetting, value: Date.now().toString(), enterprise: true, invalidValue: '' }; + + process.env[`OVERWRITE_SETTING_${testSetting._id}`] = Date.now().toString(); + + await settingsRegistry.add(settingFromCodeFaked._id, settingFromCodeFaked.value, settingFromCodeFaked); + + expect(Settings.insertCalls).to.be.equal(0); + expect(Settings.upsertCalls).to.be.equal(1); + + expect(settings.get(testSetting._id)).to.be.equal(process.env[`OVERWRITE_SETTING_${testSetting._id}`]); + }); + + it('should ignore default value from environment if setting is already stored', async () => { const settings = new CachedSettings(); Settings.settings = settings; settings.initialized(); @@ -482,12 +535,14 @@ describe('Settings', () => { expect(Settings.findOne({ _id: testSetting._id }).value).to.be.equal(testSetting.value); }); - it('should update setting cache synchronously if overwrite is available in enviornment', async () => { + it('should update setting cache synchronously if overwrite is available in environment', async () => { const settings = new CachedSettings(); Settings.settings = settings; settings.initialized(); const settingsRegistry = new SettingsRegistry({ store: settings, model: Settings as any }); + settings.set(testSetting); + process.env[`OVERWRITE_SETTING_${testSetting._id}`] = Date.now().toString(); await settingsRegistry.add(testSetting._id, testSetting.value, testSetting); @@ -495,7 +550,7 @@ describe('Settings', () => { expect(settings.get(testSetting._id)).to.be.equal(process.env[`OVERWRITE_SETTING_${testSetting._id}`]); }); - it('should update cached value with OVERWRITE_SETTING value even if both with-prefixed and without-prefixed variables exist', async () => { + it('should update cached value with OVERWRITE_SETTING value even if both overwrite and default overwrite variables both exist', async () => { const settings = new CachedSettings(); Settings.settings = settings; settings.initialized(); @@ -506,7 +561,8 @@ describe('Settings', () => { await settingsRegistry.add(testSetting._id, testSetting.value, testSetting); - expect(Settings.findOne({ _id: testSetting._id }).value).to.be.equal(process.env[`OVERWRITE_SETTING_${testSetting._id}`]); + expect(Settings.insertCalls).to.be.equal(1); + expect(settings.get(testSetting._id)).to.be.equal(process.env[`OVERWRITE_SETTING_${testSetting._id}`]); }); it('should call `settings.get` callback on setting added', async () => { diff --git a/apps/meteor/tests/unit/app/ui-utils/client.tests.ts b/apps/meteor/tests/unit/app/ui-utils/client.tests.ts deleted file mode 100644 index 5de4d53e2003..000000000000 --- a/apps/meteor/tests/unit/app/ui-utils/client.tests.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* eslint-env mocha */ -import { expect } from 'chai'; -import { JSDOM } from 'jsdom'; - -import { waitForElement } from '../../../../client/lib/utils/waitForElement'; - -describe('waitUntilWrapperExists', () => { - const globalDocument = global.document; - const mutationObserver = global.MutationObserver; - - beforeEach(() => { - const dom = new JSDOM( - ` - - - - `, - { url: 'http://localhost' }, - ); - global.document = dom.window.document; - global.MutationObserver = dom.window.MutationObserver; - }); - - afterEach(() => { - global.document = globalDocument; - global.MutationObserver = mutationObserver; - }); - - it('should return the element when it is already in the dom', async () => { - expect(await waitForElement('.ready')).to.be.equal(document.querySelector('.ready')); - }); - - it('should await until the element be in the dom and return it', async () => { - setTimeout(() => { - const element = document.createElement('div'); - element.setAttribute('class', 'not-ready'); - document.body.appendChild(element); - }, 5); - expect(await waitForElement('.not-ready')).to.be.equal(document.querySelector('.not-ready')); - }); -}); diff --git a/apps/meteor/tests/unit/client/components/Omnichannel/modals/TranscriptModal.spec.tsx b/apps/meteor/tests/unit/client/components/Omnichannel/modals/TranscriptModal.spec.tsx deleted file mode 100644 index 517253afd087..000000000000 --- a/apps/meteor/tests/unit/client/components/Omnichannel/modals/TranscriptModal.spec.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import type { IOmnichannelRoom } from '@rocket.chat/core-typings'; -import { userEvent } from '@storybook/testing-library'; -import { render, screen } from '@testing-library/react'; -import { expect, spy } from 'chai'; -import React from 'react'; - -import TranscriptModal from '../../../../../../client/components/Omnichannel/modals/TranscriptModal'; - -const room = { - open: true, - v: { token: '1234567890' }, - transcriptRequest: { - email: 'example@example.com', - subject: 'Transcript of livechat conversation', - }, -} as IOmnichannelRoom; - -const defaultProps = { - room, - email: 'test@example.com', - onRequest: () => null, - onSend: () => null, - onCancel: () => null, - onDiscard: () => null, -}; - -describe('components/Omnichannel/TranscriptModal', () => { - it('should show Undo request button when roomOpen is true and transcriptRequest exist', () => { - const onDiscardMock = spy(); - render(); - const undoRequestButton = screen.getByText('Undo_request'); - - userEvent.click(undoRequestButton); - - expect(onDiscardMock).to.have.been.called(); - }); - - it('should show Request button when roomOpen is true and transcriptRequest not exist', async () => { - render(); - - const requestBtn = await screen.findByRole('button', { name: 'request-button' }); - expect(requestBtn).to.be.visible; - }); - - it('should show Send button when roomOpen is false', async () => { - render(); - - const sendBtn = await screen.findByRole('button', { name: 'send-button' }); - expect(sendBtn).to.be.visible; - }); -}); diff --git a/apps/meteor/tests/unit/client/lib/federation/Federation.test.ts b/apps/meteor/tests/unit/client/lib/federation/Federation.test.ts deleted file mode 100644 index dff34d739258..000000000000 --- a/apps/meteor/tests/unit/client/lib/federation/Federation.test.ts +++ /dev/null @@ -1,489 +0,0 @@ -import { expect } from 'chai'; -import proxyquire from 'proxyquire'; -import sinon from 'sinon'; - -import { RoomMemberActions, RoomSettingsEnum } from '../../../../../definition/IRoomTypeConfig'; - -const findOneStub = sinon.stub(); - -const Federation = proxyquire.noCallThru().load('../../../../../client/lib/federation/Federation', { - '../../../app/models/client': { - RoomRoles: { - findOne: findOneStub, - }, - }, -}); - -describe('Federation[Client] - Federation', () => { - afterEach(() => findOneStub.reset()); - - describe('#actionAllowed()', () => { - const me = 'user-id'; - const them = 'other-user-id'; - - it('should return false if the room is not federated', () => { - expect(Federation.actionAllowed({ federated: false } as any, RoomMemberActions.REMOVE_USER, 'user-id', { roles: ['owner'] } as any)) - .to.be.false; - }); - - it('should return false if the room is a direct message', () => { - expect( - Federation.actionAllowed({ federated: true, t: 'd' } as any, RoomMemberActions.REMOVE_USER, 'user-id', { roles: ['owner'] } as any), - ).to.be.false; - }); - - it('should return false if the user is not subscribed to the room', () => { - expect(Federation.actionAllowed({ federated: true } as any, RoomMemberActions.REMOVE_USER, 'user-id', undefined)).to.be.false; - }); - - it('should return false if the user is trying to remove himself', () => { - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.REMOVE_USER, 'user-id', { - u: { _id: 'user-id' }, - roles: ['owner'], - } as any), - ).to.be.false; - }); - - describe('Owners', () => { - const myRole = ['owner']; - - describe('Seeing another owners', () => { - const theirRole = ['owner']; - it('should return true if the user want to remove himself as an owner', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: me }, - roles: myRole, - } as any), - ).to.be.true; - }); - it('should return true if the user want to add himself as a moderator (Demoting himself to moderator)', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_MODERATOR, me, { - u: { _id: me }, - roles: myRole, - } as any), - ).to.be.true; - }); - it('should return false if the user want to remove another owners as an owner', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.false; - }); - it('should return false if the user want to remove another owners from the room', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.REMOVE_USER, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.false; - }); - }); - describe('Seeing moderators', () => { - const theirRole = ['moderator']; - - it('should return true if the user want to add/remove moderators as an owner', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.true; - }); - it('should return true if the user want to remove moderators as a moderator', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_MODERATOR, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.true; - }); - it('should return true if the user want to remove moderators from the room', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.REMOVE_USER, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.true; - }); - }); - describe('Seeing normal users', () => { - it('should return true if the user want to add/remove normal users as an owner', () => { - findOneStub.returns(undefined); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.true; - }); - it('should return true if the user want to add/remove normal users as a moderator', () => { - findOneStub.returns(undefined); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_MODERATOR, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.true; - }); - it('should return true if the user want to remove normal users from the room', () => { - findOneStub.returns(undefined); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.REMOVE_USER, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.true; - }); - }); - }); - - describe('Moderators', () => { - const myRole = ['moderator']; - describe('Seeing owners', () => { - const theirRole = ['owner']; - it('should return false if the user want to add/remove owners as a moderator', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: me }, - roles: myRole, - } as any), - ).to.be.false; - }); - it('should return false if the user want to add/remove owners as a moderator', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_MODERATOR, me, { - u: { _id: me }, - roles: myRole, - } as any), - ).to.be.false; - }); - it('should return false if the user want to add/remove owners as a moderator', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_MODERATOR, me, { - u: { _id: me }, - roles: myRole, - } as any), - ).to.be.false; - }); - it('should return false if the user want to remove owners from the room', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.REMOVE_USER, me, { - u: { _id: me }, - roles: myRole, - } as any), - ).to.be.false; - }); - }); - describe('Seeing another moderators', () => { - const theirRole = ['moderator']; - it('should return false if the user want to add/remove moderator as an owner', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.false; - }); - it('should return true if the user want to remove himself as a moderator (Demoting himself)', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_MODERATOR, me, { - u: { _id: me }, - roles: myRole, - } as any), - ).to.be.true; - }); - it('should return false if the user want to promote himself as an owner', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: me }, - roles: myRole, - } as any), - ).to.be.false; - }); - it('should return false if the user want to remove another moderator from their role', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_MODERATOR, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.false; - }); - it('should return false if the user want to remove another moderator from the room', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.REMOVE_USER, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.false; - }); - }); - describe('Seeing normal users', () => { - it('should return false if the user want to add/remove normal users as an owner', () => { - findOneStub.returns(undefined); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.false; - }); - it('should return true if the user want to add/remove normal users as a moderator', () => { - findOneStub.returns(undefined); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_MODERATOR, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.true; - }); - it('should return true if the user want to remove normal users from the room', () => { - findOneStub.returns(undefined); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.REMOVE_USER, me, { - u: { _id: them }, - roles: myRole, - } as any), - ).to.be.true; - }); - }); - }); - - describe('Normal user', () => { - describe('Seeing owners', () => { - const theirRole = ['owner']; - it('should return false if the user want to add/remove owners as a normal user', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: them }, - } as any), - ).to.be.false; - }); - it('should return false if the user want to add/remove moderators as a normal user', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_MODERATOR, me, { - u: { _id: them }, - } as any), - ).to.be.false; - }); - it('should return false if the user want to remove owners from the room', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.REMOVE_USER, me, { - u: { _id: them }, - } as any), - ).to.be.false; - }); - }); - describe('Seeing moderators', () => { - const theirRole = ['owner']; - it('should return false if the user want to add/remove owner as a normal user', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: them }, - } as any), - ).to.be.false; - }); - it('should return false if the user want to remove a moderator from their role', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_MODERATOR, me, { - u: { _id: them }, - } as any), - ).to.be.false; - }); - it('should return false if the user want to remove a moderator from the room', () => { - findOneStub.returns({ roles: theirRole }); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.REMOVE_USER, me, { - u: { _id: them }, - } as any), - ).to.be.false; - }); - }); - describe('Seeing another normal users', () => { - it('should return false if the user want to add/remove owner as a normal user', () => { - findOneStub.returns(undefined); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: them }, - } as any), - ).to.be.false; - }); - it('should return false if the user want to add/remove moderator as a normal user', () => { - findOneStub.returns(undefined); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.SET_AS_OWNER, me, { - u: { _id: them }, - } as any), - ).to.be.false; - }); - it('should return false if the user want to remove normal users from the room', () => { - findOneStub.returns(undefined); - expect( - Federation.actionAllowed({ federated: true } as any, RoomMemberActions.REMOVE_USER, me, { - u: { _id: them }, - } as any), - ).to.be.false; - }); - - [RoomMemberActions.SET_AS_MODERATOR, RoomMemberActions.SET_AS_OWNER, RoomMemberActions.REMOVE_USER].forEach((action) => { - it(`should return false if the user want to ${action} for himself`, () => { - findOneStub.returns(undefined); - expect( - Federation.actionAllowed({ federated: true } as any, action, me, { - u: { _id: me }, - } as any), - ).to.be.false; - }); - }); - }); - }); - }); - - describe('#isEditableByTheUser()', () => { - it('should return false if the user is null', () => { - expect(Federation.isEditableByTheUser(undefined, { u: { _id: 'id' } } as any, {} as any)).to.be.false; - }); - - it('should return false if the room is null', () => { - expect(Federation.isEditableByTheUser({} as any, undefined, {} as any)).to.be.false; - }); - - it('should return false if the subscription is null', () => { - expect(Federation.isEditableByTheUser({} as any, {} as any, undefined)).to.be.false; - }); - - it('should return false if the current room is NOT a federated one', () => { - expect(Federation.isEditableByTheUser({ _id: 'differentId' } as any, { u: { _id: 'id' } } as any, {} as any)).to.be.false; - }); - - it('should return false if the current user is NOT the room owner nor moderator', () => { - expect(Federation.isEditableByTheUser({ _id: 'differentId' } as any, { federated: true, u: { _id: 'id' } } as any, {} as any)).to.be - .false; - }); - - it('should return true if the current user is a room owner', () => { - expect( - Federation.isEditableByTheUser( - { _id: 'differentId' } as any, - { federated: true, u: { _id: 'id' } } as any, - { roles: ['owner'] } as any, - ), - ).to.be.true; - }); - - it('should return true if the current user is a room moderator', () => { - expect( - Federation.isEditableByTheUser( - { _id: 'differentId' } as any, - { federated: true, u: { _id: 'id' } } as any, - { roles: ['moderator'] } as any, - ), - ).to.be.true; - }); - }); - describe('#canCreateInviteLinks()', () => { - it('should return false if the user is null', () => { - expect(Federation.canCreateInviteLinks(undefined, { u: { _id: 'id' } } as any, {} as any)).to.be.false; - }); - - it('should return false if the room is null', () => { - expect(Federation.canCreateInviteLinks({} as any, undefined, {} as any)).to.be.false; - }); - - it('should return false if the subscription is null', () => { - expect(Federation.canCreateInviteLinks({} as any, {} as any, undefined)).to.be.false; - }); - - it('should return false if the current room is NOT a federated one', () => { - expect(Federation.canCreateInviteLinks({ _id: 'differentId' } as any, { u: { _id: 'id' } } as any, {} as any)).to.be.false; - }); - - it('should return false if the current room is federated one but NOT a public one', () => { - expect(Federation.canCreateInviteLinks({ _id: 'differentId' } as any, { federated: true, u: { _id: 'id' } } as any, {} as any)).to.be - .false; - }); - - it('should return false if the current room is federated one, a public one but the user is NOT an owner nor moderator', () => { - expect( - Federation.canCreateInviteLinks({ _id: 'differentId' } as any, { federated: true, t: 'c', u: { _id: 'id' } } as any, {} as any), - ).to.be.false; - }); - - it('should return false if the current room is federated one, a public one but the user is NOT an owner nor moderator', () => { - expect( - Federation.canCreateInviteLinks({ _id: 'differentId' } as any, { federated: true, t: 'c', u: { _id: 'id' } } as any, {} as any), - ).to.be.false; - }); - - it('should return true if the current room is federated one, a public one but the user is an owner', () => { - expect( - Federation.canCreateInviteLinks( - { _id: 'differentId' } as any, - { federated: true, t: 'c', u: { _id: 'id' } } as any, - { roles: ['owner'] } as any, - ), - ).to.be.true; - }); - - it('should return true if the current room is federated one, a public one but the user is an moderator', () => { - expect( - Federation.canCreateInviteLinks( - { _id: 'differentId' } as any, - { federated: true, t: 'c', u: { _id: 'id' } } as any, - { roles: ['moderator'] } as any, - ), - ).to.be.true; - }); - }); - - describe('#isRoomSettingAllowed()', () => { - it('should return false if the room is NOT federated', () => { - expect(Federation.isRoomSettingAllowed({ t: 'c' } as any, RoomSettingsEnum.NAME)).to.be.false; - }); - - it('should return false if the room is a DM one', () => { - expect(Federation.isRoomSettingAllowed({ t: 'd', federated: true } as any, RoomSettingsEnum.NAME)).to.be.false; - }); - - const allowedSettingsChanges = [RoomSettingsEnum.NAME, RoomSettingsEnum.TOPIC]; - - Object.values(RoomSettingsEnum) - .filter((setting) => !allowedSettingsChanges.includes(setting as any)) - .forEach((setting) => { - it('should return false if the setting change is NOT allowed within the federation context for regular channels', () => { - expect(Federation.isRoomSettingAllowed({ t: 'c', federated: true } as any, setting)).to.be.false; - }); - }); - - allowedSettingsChanges.forEach((setting) => { - it('should return true if the setting change is allowed within the federation context for regular channels', () => { - expect(Federation.isRoomSettingAllowed({ t: 'c', federated: true } as any, setting)).to.be.true; - }); - }); - }); -}); diff --git a/apps/meteor/tests/unit/client/lib/getRoomGroup.spec.ts b/apps/meteor/tests/unit/client/lib/getRoomGroup.spec.ts deleted file mode 100644 index 0c2a1e53dc8e..000000000000 --- a/apps/meteor/tests/unit/client/lib/getRoomGroup.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { IRoom } from '@rocket.chat/core-typings'; -import { expect } from 'chai'; -import { describe, it } from 'mocha'; - -import { getRoomGroup } from '../../../../client/views/room/lib/getRoomGroup'; - -describe('getRoomGroup', () => { - it('should return "direct" for direct message rooms', () => { - const result = getRoomGroup({ t: 'd' } as IRoom); - - expect(result).to.be.equal('direct'); - }); - - it('should return "team" for team rooms', () => { - const result = getRoomGroup({ teamMain: true } as IRoom); - - expect(result).to.be.equal('team'); - }); - - it('should return "direct_multiple" for direct message room with many users', () => { - const result = getRoomGroup({ uids: ['id1', 'id2', 'id3'], t: 'd' } as IRoom); - - expect(result).to.be.equal('direct_multiple'); - }); -}); diff --git a/apps/meteor/tests/unit/client/lib/minimongo/bson.spec.ts b/apps/meteor/tests/unit/client/lib/minimongo/bson.spec.ts deleted file mode 100644 index 9f177a90079e..000000000000 --- a/apps/meteor/tests/unit/client/lib/minimongo/bson.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { expect } from 'chai'; -import { describe, it } from 'mocha'; - -import { getBSONType, compareBSONValues } from '../../../../../client/lib/minimongo/bson'; -import { BSONType } from '../../../../../client/lib/minimongo/types'; - -describe('getBSONType', () => { - it('should work', () => { - expect(getBSONType(1)).to.be.equals(BSONType.Double); - expect(getBSONType('xyz')).to.be.equals(BSONType.String); - expect(getBSONType({})).to.be.equals(BSONType.Object); - expect(getBSONType([])).to.be.equals(BSONType.Array); - expect(getBSONType(new Uint8Array())).to.be.equals(BSONType.BinData); - expect(getBSONType(undefined)).to.be.equals(BSONType.Object); - expect(getBSONType(null)).to.be.equals(BSONType.Null); - expect(getBSONType(false)).to.be.equals(BSONType.Boolean); - expect(getBSONType(/.*/)).to.be.equals(BSONType.Regex); - expect(getBSONType(() => true)).to.be.equals(BSONType.JavaScript); - expect(getBSONType(new Date(0))).to.be.equals(BSONType.Date); - }); -}); - -describe('compareBSONValues', () => { - it('should work for the same types', () => { - expect(compareBSONValues(2, 3)).to.be.equals(-1); - expect(compareBSONValues('xyz', 'abc')).to.be.equals(1); - expect(compareBSONValues({}, {})).to.be.equals(0); - expect(compareBSONValues(true, false)).to.be.equals(1); - expect(compareBSONValues(new Date(0), new Date(1))).to.be.equals(-1); - }); - - it('should work for different types', () => { - expect(compareBSONValues(2, null)).to.be.equals(1); - expect(compareBSONValues('xyz', {})).to.be.equals(-1); - expect(compareBSONValues(false, 3)).to.be.equals(1); - }); -}); diff --git a/apps/meteor/tests/unit/client/lib/minimongo/comparisons.spec.ts b/apps/meteor/tests/unit/client/lib/minimongo/comparisons.spec.ts deleted file mode 100644 index 04163469e7e8..000000000000 --- a/apps/meteor/tests/unit/client/lib/minimongo/comparisons.spec.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { expect } from 'chai'; -import { describe, it } from 'mocha'; - -import { equals, isObject, flatSome, some, isEmptyArray } from '../../../../../client/lib/minimongo/comparisons'; - -describe('Comparisons service', () => { - describe('equals', () => { - it('should return true if two numbers are equal', () => { - expect(equals(1, 1)).to.be.equal(true); - }); - - it('should return false if arguments are null or undefined', () => { - expect(equals(undefined, null)).to.be.equal(false); - expect(equals(null, undefined)).to.be.equal(false); - }); - - it('should return false if arguments arent objects and they are not the same', () => { - expect(equals('not', 'thesame')).to.be.equal(false); - }); - - it('should return true if date objects provided have the same value', () => { - const currentDate = new Date(); - - expect(equals(currentDate, currentDate)).to.be.equal(true); - }); - - it('should return true if 2 equal UInt8Array are provided', () => { - const arr1 = new Uint8Array([1, 2]); - const arr2 = new Uint8Array([1, 2]); - - expect(equals(arr1, arr2)).to.be.equal(true); - }); - - it('should return true if 2 equal arrays are provided', () => { - const arr1 = [1, 2, 4]; - const arr2 = [1, 2, 4]; - - expect(equals(arr1, arr2)).to.be.equal(true); - }); - - it('should return false if 2 arrays with different length are provided', () => { - const arr1 = [1, 4, 5]; - const arr2 = [1, 4, 5, 7]; - - expect(equals(arr1, arr2)).to.be.equal(false); - }); - - it('should return true if the objects provided are "equal"', () => { - const obj = { a: 1 }; - const obj2 = obj; - - expect(equals(obj, obj2)).to.be.equal(true); - }); - - it('should return true if both objects have the same keys', () => { - const obj = { a: 1 }; - const obj2 = { a: 1 }; - - expect(equals(obj, obj2)).to.be.equal(true); - }); - }); - - describe('isObject', () => { - it('should return true if value is an object or function', () => { - const obj = {}; - const func = (a: any): any => a; - - expect(isObject(obj)).to.be.equal(true); - expect(isObject(func)).to.be.equal(true); - }); - - it('should return false for other data types', () => { - expect(isObject(1)).to.be.equal(false); - expect(isObject(true)).to.be.equal(false); - expect(isObject('212')).to.be.equal(false); - }); - }); - - describe('flatSome', () => { - it('should run .some on array', () => { - const arr = [1, 2, 4, 6, 9]; - const isEven = (v: number): boolean => v % 2 === 0; - - expect(flatSome(arr, isEven)).to.be.equal(true); - }); - - it('should run the function on the value when its not an array', () => { - const val = 1; - const isEven = (v: number): boolean => v % 2 === 0; - - expect(flatSome(val, isEven)).to.be.equal(false); - }); - }); - - describe('some', () => { - it('should run .some on array', () => { - const arr = [1, 2, 4, 6, 9]; - const isEven = (v: number | number[]): boolean => { - if (Array.isArray(v)) { - return false; - } - return v % 2 === 0; - }; - - expect(some(arr, isEven)).to.be.equal(true); - }); - - it('should run the function on the value when its not an array', () => { - const val = 1; - const isEven = (v: number | number[]): boolean => { - if (Array.isArray(v)) { - return false; - } - return v % 2 === 0; - }; - - expect(some(val, isEven)).to.be.equal(false); - }); - }); - - describe('isEmptyArray', () => { - it('should return true if array is empty', () => { - expect(isEmptyArray([])).to.be.equal(true); - }); - - it('should return false if value is not an array', () => { - expect(isEmptyArray(1)).to.be.equal(false); - }); - - it('should return false if array is not empty', () => { - expect(isEmptyArray([1, 2])).to.be.equal(false); - }); - }); -}); diff --git a/apps/meteor/tests/unit/client/lib/minimongo/lookups.spec.ts b/apps/meteor/tests/unit/client/lib/minimongo/lookups.spec.ts deleted file mode 100644 index f2117f6eaa96..000000000000 --- a/apps/meteor/tests/unit/client/lib/minimongo/lookups.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { expect } from 'chai'; -import { describe, it } from 'mocha'; - -import { createLookupFunction } from '../../../../../client/lib/minimongo/lookups'; - -describe('createLookupFunction', () => { - it('should work', () => { - expect(createLookupFunction('a.x')({ a: { x: 1 } })).to.be.deep.equals([1]); - expect(createLookupFunction('a.x')({ a: { x: [1] } })).to.be.deep.equals([[1]]); - expect(createLookupFunction('a.x')({ a: 5 })).to.be.deep.equals([undefined]); - expect(createLookupFunction('a.x')({ a: [{ x: 1 }, { x: [2] }, { y: 3 }] })).to.be.deep.equals([1, [2], undefined]); - }); -}); diff --git a/apps/meteor/tests/unit/client/lib/utils/isRTLScriptLanguage.spec.ts b/apps/meteor/tests/unit/client/lib/utils/isRTLScriptLanguage.spec.ts deleted file mode 100644 index bcf610b7bfbc..000000000000 --- a/apps/meteor/tests/unit/client/lib/utils/isRTLScriptLanguage.spec.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { expect } from 'chai'; - -import { isRTLScriptLanguage } from '../../../../../client/lib/utils/isRTLScriptLanguage'; - -describe('isRTLScriptLanguage', () => { - const testCases = [ - ['en', false], - ['ar', true], - ['dv', true], - ['fa', true], - ['he', true], - ['ku', true], - ['ps', true], - ['sd', true], - ['ug', true], - ['ur', true], - ['yi', true], - ['ar', true], - ['ar-LY', true], - ['dv-MV', true], - ['', false], - ] as const; - - testCases.forEach(([parameter, expectedResult]) => { - it(`should return ${JSON.stringify(expectedResult)} for ${JSON.stringify(parameter)}`, () => { - const result = isRTLScriptLanguage(parameter); - expect(result).to.be.equal(expectedResult); - }); - }); -}); diff --git a/apps/meteor/tests/unit/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearch.spec.tsx b/apps/meteor/tests/unit/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearch.spec.tsx deleted file mode 100644 index a5d7a250b722..000000000000 --- a/apps/meteor/tests/unit/client/sidebar/header/MatrixFederationSearch/MatrixFederationSearch.spec.tsx +++ /dev/null @@ -1,192 +0,0 @@ -import { cleanup, render, screen, within } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { expect } from 'chai'; -import proxyquire from 'proxyquire'; -import type { ReactElement } from 'react'; -import React from 'react'; - -const fetchRoomList = async ({ serverName, roomName, count }: any): Promise => { - return new Promise((resolve) => - resolve({ - rooms: Array.from({ length: count || 100 }).map((index) => ({ - id: `Matrix${index}`, - name: `${roomName}${index}` || `Matrix${index}`, - canJoin: true, - canonicalAlias: `#${serverName}:matrix.org`, - joinedMembers: 44461, - topic: - 'The Official Matrix HQ - chat about Matrix here! | https://matrix.org | https://spec.matrix.org | To support Matrix.org development: https://patreon.com/matrixdotorg | Code of Conduct: https://matrix.org/legal/code-of-conduct/ | This is an English speaking room | The Official Matrix HQ - chat about Matrix here! | https://matrix.org | https://spec.matrix.org | To support Matrix.org development: https://patreon.com/matrixdotorg | Code of Conduct: https://matrix.org/legal/code-of-conduct/ | This is an English speaking room The Official Matrix HQ - chat about Matrix here! | https://matrix.org | https://spec.matrix.org | To support Matrix.org development: https://patreon.com/matrixdotorg | Code of Conduct: https://matrix.org/legal/code-of-conduct/ | This is an English speaking room | The Official Matrix HQ - chat about Matrix here! | https://matrix.org | https://spec.matrix.org | To support Matrix.org development: https://patreon.com/matrixdotorg | Code of Conduct: https://matrix.org/legal/code-of-conduct/ | This is an English speaking room', - })), - count: 1, - total: 73080, - nextPageToken: 'g6FtzZa3oXK+IUpkemFiTlVQUFh6bENKQWhFbDpmYWJyaWMucHVioWTD', - prevPageToken: 'g6FtzYqIoXK+IWNOd2pkUXdWcFJNc0lNa1VweDptYXRyaXgub3JnoWTC', - success: true, - }), - ); -}; - -const joinExternalPublicRoom: any = async () => ({ success: true }); - -let serverList = [ - { name: `server-1`, default: true, local: false }, - { name: `server-2`, default: false, local: false }, - { name: `server-3`, default: false, local: false }, -]; - -const fetchServerList = async () => ({ - servers: serverList, -}); - -const removeMatrixServer: any = async ({ serverName }: any) => { - serverList = serverList.filter((server) => server.name !== serverName); -}; -const addMatrixServer: any = async ({ serverName }: any) => serverList.push({ name: serverName, default: false, local: false }); - -const COMPONENT_PATH = '../../../../../../client/sidebar/header/MatrixFederationSearch'; - -const defaultConfig = { - '@rocket.chat/ui-contexts': { - 'useSetModal': () => (modal: ReactElement) => { - cleanup(); - if (!modal) { - return; - } - render(modal); - }, - '@global': true, - }, - '../../../lib/rooms/roomCoordinator': { - '@noCallThru': true, - '@global': true, - 'roomCoordinator': { - openRouteLink: () => null, - }, - }, -}; -const { makeCallEndpoint } = proxyquire.load('../../../../../mocks/client/ServerProviderMock', defaultConfig); - -const [callEndpoint, registerEndpoint] = makeCallEndpoint(); - -registerEndpoint('GET', '/v1/federation/listServersByUser', fetchServerList); -registerEndpoint('GET', '/v1/federation/searchPublicRooms', fetchRoomList); -registerEndpoint('GET', '/v1/federation/joinExternalPublicRoom', joinExternalPublicRoom); -registerEndpoint('POST', '/v1/federation/addServerByUser', addMatrixServer); -registerEndpoint('POST', '/v1/federation/removeServerByUser', removeMatrixServer); - -const openManageServers = () => { - const manageServerLink = screen.getByRole('a'); - expect(manageServerLink).to.exist; - userEvent.click(manageServerLink); - expect(screen.getByRole('dialog')).to.exist; - expect(screen.getByText('Manage servers')).to.exist; -}; - -const renderMatrixFederationSearch = () => { - const MatrixFederationSearch = proxyquire.load(COMPONENT_PATH, defaultConfig).default; - const ServerProviderMock = proxyquire.load('../../../../../mocks/client/ServerProviderMock', defaultConfig).default; - const QueryClientProviderMock = proxyquire.load( - '../../../../../../client/stories/contexts/QueryClientProviderMock', - defaultConfig, - ).default; - - render( - - - - - , - ); -}; - -describe.skip('sidebar/header/MatrixFederationSearch', () => { - it('should render Federated Room search modal', async () => { - renderMatrixFederationSearch(); - - expect(screen.getByRole('dialog')).to.exist; - expect(screen.getByText('Federated room search')).to.exist; - expect(screen.getByText('Matrix1')).to.exist; - expect(screen.getByText('Matrix2')).to.exist; - }); - - it('should search for rooms', async () => { - renderMatrixFederationSearch(); - - const input = screen.getByPlaceholderText('Search rooms'); - expect(input).to.exist; - userEvent.type(input, 'NotMatrix'); - expect(screen.getByText('NotMatrix1')).to.exist; - expect(screen.getByText('NotMatrix2')).to.exist; - }); - - it('should close the modal when joining a room', async () => { - renderMatrixFederationSearch(); - - const firstListItem = screen.getByRole('li', { name: 'Matrix1' }); - expect(firstListItem).to.exist; - const joinButton = within(firstListItem).getByRole('button'); - expect(joinButton).to.exist; - userEvent.click(joinButton); - expect(screen.getByRole('dialog')).to.not.exist; - }); - - it('should open the manage server modal', async () => { - renderMatrixFederationSearch(); - - openManageServers(); - serverList.forEach((server) => { - expect(screen.getByText(server.name)).to.exist; - }); - }); - - it('should return to the Search modal when clicking cancel', async () => { - renderMatrixFederationSearch(); - - openManageServers(); - - const cancelButton = screen.getByText('Cancel'); - expect(cancelButton).to.exist; - userEvent.click(cancelButton); - - expect(screen.getByRole('dialog')).to.exist; - expect(screen.getByText('Federated room search')).to.exist; - }); - - it('should return to the Search modal with the new server selected', async () => { - renderMatrixFederationSearch(); - - openManageServers(); - - const input = screen.getByRole('input'); - expect(input).to.exist; - userEvent.type(input, 'server-4'); - - const addButton = screen.getByText('Add'); - expect(addButton).to.exist; - userEvent.click(addButton); - - expect(screen.getByRole('dialog')).to.exist; - expect(screen.getByText('Federated room search')).to.exist; - expect(screen.getByText('server-4')).to.be.visible; - }); - - it('should remove servers from the list', async () => { - renderMatrixFederationSearch(); - - openManageServers(); - - const defaultItem = screen.getByTitle('server-1'); - expect(defaultItem).to.exist; - userEvent.hover(defaultItem); - expect(within(defaultItem).getByRole('i')).to.not.exist; - - const lastItem = screen.getByTitle('server-4'); - expect(lastItem).to.exist; - userEvent.hover(lastItem); - const removeButton = within(lastItem).getByRole('i'); - expect(removeButton).to.be.visible; - userEvent.click(removeButton); - - expect(screen.getByText('server-4')).to.not.exist; - }); -}); diff --git a/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx b/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx deleted file mode 100644 index d188202c503a..000000000000 --- a/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { render, waitFor, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import '@testing-library/jest-dom'; -import type { MutableRefObject } from 'react'; -import React from 'react'; - -import NotFoundPage from '../../../../../client/views/notFound/NotFoundPage'; -import RouterContextMock from '../../../../mocks/client/RouterContextMock'; - -describe('views/notFound/NotFoundPage', () => { - it('should look good', async () => { - render(); - - await screen.findByRole('heading'); - - expect(screen.getByRole('heading')).toHaveTextContent('Page_not_found'); - - expect(screen.getByRole('button', { name: 'Homepage' })).not.toBeDisabled(); - }); - - it('should have correct tab order', () => { - render(); - // eslint-disable-next-line testing-library/no-node-access - expect(document.activeElement).toBe(document.body); - userEvent.tab(); - // eslint-disable-next-line testing-library/no-node-access - expect(document.activeElement).toBe(screen.getByRole('button', { name: 'Homepage' })); - userEvent.tab(); - // eslint-disable-next-line testing-library/no-node-access - expect(document.activeElement).toBe(document.body); - }); - - describe('"Return to home" button', () => { - describe('when clicked', () => { - it('should go back on history', async () => { - const currentPath: MutableRefObject = { current: undefined }; - - render( - - - , - ); - const button = screen.getByRole('button', { name: 'Homepage' }); - - userEvent.click(button); - - await waitFor(() => expect(currentPath.current).toBe('/home')); - }); - }); - }); -}); diff --git a/apps/meteor/tests/unit/client/views/room/MessageList/Message.test.tsx b/apps/meteor/tests/unit/client/views/room/MessageList/Message.test.tsx deleted file mode 100644 index b6a0f9ecd957..000000000000 --- a/apps/meteor/tests/unit/client/views/room/MessageList/Message.test.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import type { IMessage } from '@rocket.chat/core-typings'; -import { render, screen } from '@testing-library/react'; -import { expect } from 'chai'; -import proxyquire from 'proxyquire'; -import React from 'react'; - -import type { default as _RoomMessage } from '../../../../../../client/components/message/variants/RoomMessage'; - -const date = new Date('2021-10-27T00:00:00.000Z'); -const baseMessage: IMessage = { - ts: date, - u: { - _id: 'userId', - name: 'userName', - username: 'userName', - }, - msg: 'message', - md: [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'message', - }, - ], - }, - ], - rid: 'roomId', - _id: 'messageId', - _updatedAt: date, - urls: [], -}; - -const RoomMessage = proxyquire.noCallThru().load('../../../../../../client/components/message/variants/RoomMessage.tsx', { - '../../avatar/UserAvatar': () =>

    user avatar

    , - '../../../views/room/MessageList/contexts/MessageHighlightContext': { - useIsMessageHighlight: () => false, - }, - '../../../views/room/MessageList/contexts/SelectedMessagesContext': { - useIsSelecting: () => '', - useToggleSelect: () => '', - useIsSelectedMessage: () => '', - useCountSelected: () => '', - }, - '../IgnoredContent': () =>

    message ignored

    , - './room/RoomMessageContent': () => baseMessage.msg, - '../MessageHeader': () =>

    message header

    , - '../StatusIndicators': { MessageIndicators: () =>

    message indicators

    }, - '../MessageToolboxHolder': () =>

    toolbox

    , -}).default as typeof _RoomMessage; - -describe('Message', () => { - it('should show normal message', () => { - render( - , - ); - - expect(screen.getByText(baseMessage.msg)).to.exist; - }); - - it('should show ignored message', () => { - render( - , - ); - - expect(screen.getByText('message ignored')).to.exist; - }); - - it('should show ignored message', () => { - render( - , - ); - - expect(screen.getByText('message ignored')).to.exist; - }); -}); diff --git a/apps/meteor/tests/unit/client/views/room/MessageList/hooks/useKatex.test.ts b/apps/meteor/tests/unit/client/views/room/MessageList/hooks/useKatex.test.ts deleted file mode 100644 index 1739f070e32a..000000000000 --- a/apps/meteor/tests/unit/client/views/room/MessageList/hooks/useKatex.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks'; -import { expect } from 'chai'; -import proxyquire from 'proxyquire'; - -const COMPONENT_PATH = '../../../../../../../client/views/room/MessageList/hooks/useKatex'; -const defaultConfig = { - '@rocket.chat/ui-contexts': { - useSetting: () => true, - }, -}; - -describe('room/MessageList/hooks/useKatex', () => { - it('should return enabled true dollar syntax true and parenthesis syntax true if all settings is enabled', () => { - const { useKatex } = proxyquire.load(COMPONENT_PATH, defaultConfig); - - const { result } = renderHook(() => useKatex()); - - expect(result.current.katexEnabled).to.be.equal(true); - expect(result.current.katexDollarSyntaxEnabled).to.be.equal(true); - expect(result.current.katexParenthesisSyntaxEnabled).to.be.equal(true); - }); - - it('should return enabled false dollar syntax false and parenthesis syntax false if all settings is disabled', () => { - const { useKatex } = proxyquire.load(COMPONENT_PATH, { - ...defaultConfig, - '@rocket.chat/ui-contexts': { - useSetting: () => false, - }, - }); - - const { result } = renderHook(() => useKatex()); - - expect(result.current.katexEnabled).to.be.equal(false); - expect(result.current.katexDollarSyntaxEnabled).to.be.equal(false); - expect(result.current.katexParenthesisSyntaxEnabled).to.be.equal(false); - }); - - it('should return enabled true dollar syntax false and parenthesis syntax false if Katex_Enabled settings is enable', () => { - const { useKatex } = proxyquire.load(COMPONENT_PATH, { - ...defaultConfig, - '@rocket.chat/ui-contexts': { - useSetting: (str: string) => str === 'Katex_Enabled', - }, - }); - - const { result } = renderHook(() => useKatex()); - - expect(result.current.katexEnabled).to.be.equal(true); - expect(result.current.katexDollarSyntaxEnabled).to.be.equal(false); - expect(result.current.katexParenthesisSyntaxEnabled).to.be.equal(false); - }); - - it('should return enabled false dollar syntax false and parenthesis syntax false if DollarSyntaxEnabled and ParenthesisSyntaxEnabled settings is enable', () => { - const { useKatex } = proxyquire.load(COMPONENT_PATH, { - ...defaultConfig, - '@rocket.chat/ui-contexts': { - useSetting: (str: string) => str === 'DollarSyntaxEnabled' || str === 'ParenthesisSyntaxEnabled', - }, - }); - - const { result } = renderHook(() => useKatex()); - - expect(result.current.katexEnabled).to.be.equal(false); - expect(result.current.katexDollarSyntaxEnabled).to.be.equal(false); - expect(result.current.katexParenthesisSyntaxEnabled).to.be.equal(false); - }); -}); diff --git a/apps/meteor/tests/unit/client/views/room/MessageList/lib/autoTranslate.spec.ts b/apps/meteor/tests/unit/client/views/room/MessageList/lib/autoTranslate.spec.ts deleted file mode 100644 index bbf6f10cc7ef..000000000000 --- a/apps/meteor/tests/unit/client/views/room/MessageList/lib/autoTranslate.spec.ts +++ /dev/null @@ -1,43 +0,0 @@ -import type { IMessage, MessageAttachment } from '@rocket.chat/core-typings'; -import { expect } from 'chai'; - -import { - hasTranslationLanguageInAttachments, - hasTranslationLanguageInMessage, -} from '../../../../../../../client/views/room/MessageList/lib/autoTranslate'; - -describe('autoTranslate', () => { - describe('hasTranslationLanguageInMessage', () => { - const testCases = [ - [{}, '', false], - [{ translations: { en: 'bah' } }, '', false], - [{ translations: { en: 'bah' } }, 'pt', false], - [{ translations: { en: 'bah' } }, 'en', true], - ] as const; - - testCases.forEach(([message, language, expectedResult]) => { - it(`should return ${JSON.stringify(expectedResult)} for ${JSON.stringify(message)} with ${JSON.stringify(language)}`, () => { - const result = hasTranslationLanguageInMessage(message as unknown as IMessage, language); - expect(result).to.be.equal(expectedResult); - }); - }); - }); - - describe('hasTranslationLanguageInAttachments', () => { - const testCases = [ - [[{}], '', false], - [undefined, '', false], - [[{ translations: { en: 'bah' } }], '', false], - [[{ translations: { en: 'bah' } }], 'pt', false], - [[{ translations: { en: 'bah' } }], 'pt', false], - [[{ translations: { en: 'bah' } }], 'en', true], - ] as const; - - testCases.forEach(([attachment, language, expectedResult]) => { - it(`should return ${JSON.stringify(expectedResult)} for ${JSON.stringify(attachment)} with ${JSON.stringify(language)}`, () => { - const result = hasTranslationLanguageInAttachments(attachment as unknown as MessageAttachment[], language); - expect(result).to.be.equal(expectedResult); - }); - }); - }); -}); diff --git a/apps/meteor/tests/unit/client/views/room/MessageList/lib/buildImageURL.spec.ts b/apps/meteor/tests/unit/client/views/room/MessageList/lib/buildImageURL.spec.ts deleted file mode 100644 index 83d90f90e4c6..000000000000 --- a/apps/meteor/tests/unit/client/views/room/MessageList/lib/buildImageURL.spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { expect } from 'chai'; - -import { buildImageURL } from '../../../../../../../client/components/message/content/urlPreviews/buildImageURL'; - -describe('buildImageURL', () => { - const testCases = [ - [ - 'https://g1.globo.com/mundo/video/misseis-atingem-ponte-de-vidro-em-kiev-11012523.ghtml', - 'https://s2.glbimg.com/fXQKM_UZjF6I_3APIbPJzJTOUvw=/1200x/smart/filters:cover():strip_icc()/s04.video.glbimg.com/x720/11012523.jpg', - 'https://s2.glbimg.com/fXQKM_UZjF6I_3APIbPJzJTOUvw=/1200x/smart/filters:cover():strip_icc()/s04.video.glbimg.com/x720/11012523.jpg', - ], - ['https://open.rocket.chat/channel/general', 'assets/favicon_512.png', 'https://open.rocket.chat/assets/favicon_512.png'], - ['https://open.rocket.chat/channel/general', '/assets/favicon_512.png', 'https://open.rocket.chat/assets/favicon_512.png'], - ['https://open.rocket.chat/channel/general/', '/assets/favicon_512.png', 'https://open.rocket.chat/assets/favicon_512.png'], - ] as const; - - testCases.forEach(([linkUrl, metaImgUrl, expectedResult]) => { - it(`should return ${expectedResult} for ${metaImgUrl}`, () => { - const result = buildImageURL(linkUrl, metaImgUrl); - - expect(result).to.equal(JSON.stringify(expectedResult)); - }); - }); -}); diff --git a/apps/meteor/tests/unit/client/views/room/MessageList/lib/isMessageNewDay.spec.ts b/apps/meteor/tests/unit/client/views/room/MessageList/lib/isMessageNewDay.spec.ts deleted file mode 100644 index 27af3d4c6de9..000000000000 --- a/apps/meteor/tests/unit/client/views/room/MessageList/lib/isMessageNewDay.spec.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* eslint-env mocha */ -import type { IMessage } from '@rocket.chat/core-typings'; -import { expect } from 'chai'; - -import { isMessageNewDay } from '../../../../../../../client/views/room/MessageList/lib/isMessageNewDay'; - -const date = new Date('2021-10-27T00:00:00.000Z'); - -const baseMessage: IMessage = { - ts: date, - u: { - _id: 'userId', - name: 'userName', - username: 'userName', - }, - msg: 'message', - rid: 'roomId', - _id: 'messageId', - _updatedAt: date, - urls: [], -}; - -describe('isMessageNewDay', () => { - it('should return true if the message is from a different day', () => { - const message = { - ...baseMessage, - }; - const message2 = { - ...baseMessage, - ts: new Date('2021-10-28T00:00:00.000Z'), - }; - expect(isMessageNewDay(message, message2)).to.be.true; - }); - it('should return false if the message is from the same day', () => { - const message = { - ...baseMessage, - }; - const message2 = { - ...baseMessage, - }; - expect(isMessageNewDay(message, message2)).to.be.false; - }); - it('should return true if there is no previous message', () => { - const message = { - ...baseMessage, - }; - expect(isMessageNewDay(message, undefined)).to.be.true; - }); - - it('should return true for different days even if the range is on second', () => { - const previous: IMessage = { - ...baseMessage, - ts: new Date(2022, 0, 1, 23, 59, 59, 999), - }; - const current: IMessage = { - ...baseMessage, - ts: new Date(2022, 0, 2, 0, 0, 0, 0), - }; - expect(isMessageNewDay(current, previous)).to.be.true; - }); -}); diff --git a/apps/meteor/tests/unit/client/views/room/MessageList/lib/isMessageSequential.spec.ts b/apps/meteor/tests/unit/client/views/room/MessageList/lib/isMessageSequential.spec.ts deleted file mode 100644 index aa74388f04f6..000000000000 --- a/apps/meteor/tests/unit/client/views/room/MessageList/lib/isMessageSequential.spec.ts +++ /dev/null @@ -1,168 +0,0 @@ -/* eslint-env mocha */ -import type { IMessage } from '@rocket.chat/core-typings'; -import { expect } from 'chai'; - -import { MessageTypes } from '../../../../../../../app/ui-utils/lib/MessageTypes'; -import { isMessageSequential } from '../../../../../../../client/views/room/MessageList/lib/isMessageSequential'; - -const TIME_RANGE_IN_SECONDS = 300; - -const date = new Date('2021-10-27T00:00:00.000Z'); -const baseMessage: IMessage = { - ts: date, - u: { - _id: 'userId', - name: 'userName', - username: 'userName', - }, - msg: 'message', - rid: 'roomId', - _id: 'messageId', - _updatedAt: date, - urls: [], -}; - -describe('isMessageSequential', () => { - it('should return false if no previous message', () => { - const current: IMessage = { - ...baseMessage, - }; - expect(isMessageSequential(current, undefined, TIME_RANGE_IN_SECONDS)).to.be.false; - }); - - it("should return false if both messages doesn't belong to the same user", () => { - const previous: IMessage = { - ...baseMessage, - }; - const current: IMessage = { - ...baseMessage, - u: { - _id: 'userId2', - name: 'userName2', - username: 'userName2', - }, - }; - expect(isMessageSequential(current, previous, TIME_RANGE_IN_SECONDS)).to.be.false; - }); - - it('should return false if both messages belongs to the same user but have more than five minutes of difference', () => { - const previous: IMessage = { - ...baseMessage, - }; - - const current: IMessage = { - ...previous, - ts: new Date('2021-10-27T00:05:00.001Z'), - }; - - expect(isMessageSequential(current, previous, TIME_RANGE_IN_SECONDS)).to.be.false; - }); - it('should return true if both messages belongs to the same user and have less than five minutes of difference', () => { - const previous: IMessage = { - ...baseMessage, - }; - const current: IMessage = { - ...previous, - ts: new Date('2021-10-27T00:04:59.999Z'), - }; - expect(isMessageSequential(current, previous, TIME_RANGE_IN_SECONDS)).to.be.true; - }); - it('should return false if message are not groupable', () => { - const previous: IMessage = { - ...baseMessage, - groupable: false, - }; - const current: IMessage = { - ...previous, - groupable: false, - }; - expect(isMessageSequential(current, previous, TIME_RANGE_IN_SECONDS)).to.be.false; - }); - it('should return false if both messages are not from the same thread', () => { - const previous: IMessage = { - ...baseMessage, - tmid: 'threadId', - }; - const current: IMessage = { - ...previous, - tmid: 'threadId2', - }; - expect(isMessageSequential(current, previous, TIME_RANGE_IN_SECONDS)).to.be.false; - }); - - it('should return true if both messages are from the same thread same user and bellow the time range', () => { - const previous: IMessage = { - ...baseMessage, - tmid: 'threadId', - }; - const current: IMessage = { - ...previous, - tmid: 'threadId', - }; - expect(isMessageSequential(current, previous, TIME_RANGE_IN_SECONDS)).to.be.true; - }); - - it('should return false if previous message is thread message but the current is a regular one', () => { - const previous: IMessage = { - tmid: 'threadId', - ...baseMessage, - }; - const current: IMessage = { - ...baseMessage, - }; - - expect(isMessageSequential(current, previous, TIME_RANGE_IN_SECONDS)).to.be.false; - }); - - it('should return true if message is a reply from a previous message', () => { - const previous: IMessage = { - ...baseMessage, - _id: 'threadId', - }; - const current: IMessage = { - ...previous, - tmid: 'threadId', - }; - expect(isMessageSequential(current, previous, TIME_RANGE_IN_SECONDS)).to.be.true; - }); - it("should return false if both messages don't have the same alias", () => { - const previous: IMessage = { - ...baseMessage, - alias: 'alias', - }; - const current: IMessage = { - ...previous, - alias: 'alias2', - }; - expect(isMessageSequential(current, previous, TIME_RANGE_IN_SECONDS)).to.be.false; - }); - - it('should return false if message is from system', () => { - MessageTypes.registerType({ - id: 'au', - system: true, - message: 'User_added_by', - }); - const previous: IMessage = { - ...baseMessage, - }; - const current: IMessage = { - ...previous, - ts: new Date('2021-10-27T00:04:59.999Z'), - t: 'au', - }; - expect(isMessageSequential(current, previous, TIME_RANGE_IN_SECONDS)).to.be.false; - }); - - it('should return false even if messages should be sequential, but they are from a different day', () => { - const previous: IMessage = { - ...baseMessage, - ts: new Date(2022, 0, 1, 23, 59, 59, 999), - }; - const current: IMessage = { - ...baseMessage, - ts: new Date(2022, 0, 2, 0, 0, 0, 0), - }; - expect(isMessageSequential(current, previous, TIME_RANGE_IN_SECONDS)).to.be.false; - }); -}); diff --git a/apps/meteor/tests/unit/client/views/room/MessageList/lib/isOwnUserMessage.spec.ts b/apps/meteor/tests/unit/client/views/room/MessageList/lib/isOwnUserMessage.spec.ts deleted file mode 100644 index cc98cdce6647..000000000000 --- a/apps/meteor/tests/unit/client/views/room/MessageList/lib/isOwnUserMessage.spec.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* eslint-env mocha */ -import type { IMessage, ISubscription } from '@rocket.chat/core-typings'; -import { expect } from 'chai'; - -import { MessageTypes } from '../../../../../../../app/ui-utils/lib/MessageTypes'; -import { isOwnUserMessage } from '../../../../../../../client/views/room/MessageList/lib/isOwnUserMessage'; - -const date = new Date('2021-10-27T00:00:00.000Z'); - -const baseMessage: IMessage = { - ts: date, - u: { - _id: 'userId', - name: 'userName', - username: 'userName', - }, - msg: 'message', - rid: 'roomId', - _id: 'messageId', - _updatedAt: date, - urls: [], -}; - -// Register a system message -MessageTypes.registerType({ - id: 'au', - system: true, - message: 'User_added_to', -}); - -describe('isUserMessage', () => { - it('should return true if the message is from user', () => { - const message: IMessage = { - ...baseMessage, - }; - - const subscription: ISubscription = { - u: { - _id: 'userId', - }, - } as ISubscription; - - expect(isOwnUserMessage(message, subscription)).to.be.true; - }); - - it('should return false if the message is not from user', () => { - const message: IMessage = { - ...baseMessage, - }; - - const subscription: ISubscription = { - u: { - _id: 'otherUser', - }, - } as ISubscription; - - expect(isOwnUserMessage(message, subscription)).to.be.false; - }); - - it('should return false if there is no subscription', () => { - const message: IMessage = { - ...baseMessage, - }; - - expect(isOwnUserMessage(message, undefined)).to.be.false; - }); -}); diff --git a/apps/meteor/tests/unit/client/views/room/MessageList/lib/isParsedMessage.spec.ts b/apps/meteor/tests/unit/client/views/room/MessageList/lib/isParsedMessage.spec.ts deleted file mode 100644 index e2e2a57377f2..000000000000 --- a/apps/meteor/tests/unit/client/views/room/MessageList/lib/isParsedMessage.spec.ts +++ /dev/null @@ -1,51 +0,0 @@ -import type { IMessage } from '@rocket.chat/core-typings'; -import type { Root } from '@rocket.chat/message-parser'; -/* eslint-env mocha */ -import { expect } from 'chai'; - -import { isParsedMessage } from '../../../../../../../client/views/room/MessageList/lib/isParsedMessage'; - -const date = new Date('2021-10-27T00:00:00.000Z'); - -const baseMessage: IMessage = { - ts: date, - u: { - _id: 'userId', - name: 'userName', - username: 'userName', - }, - msg: 'message', - md: [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'message', - }, - ], - }, - ], - rid: 'roomId', - _id: 'messageId', - _updatedAt: date, - urls: [], -}; - -describe('isParsedMessage', () => { - it('should return true if the message parsed', () => { - const message: IMessage = { - ...baseMessage, - }; - - expect(isParsedMessage(message.md as Root)).to.be.true; - }); - - it('should return false if the message is not parsed', () => { - const message: IMessage = { - ...baseMessage, - }; - - expect(isParsedMessage(message.msg as string)).to.be.false; - }); -}); diff --git a/apps/meteor/tests/unit/client/views/room/MessageList/lib/parseMessage.spec.ts b/apps/meteor/tests/unit/client/views/room/MessageList/lib/parseMessage.spec.ts deleted file mode 100644 index eeca03982132..000000000000 --- a/apps/meteor/tests/unit/client/views/room/MessageList/lib/parseMessage.spec.ts +++ /dev/null @@ -1,317 +0,0 @@ -/* eslint-env mocha */ -import type { IMessage, ITranslatedMessage } from '@rocket.chat/core-typings'; -import type { Options, Root } from '@rocket.chat/message-parser'; -import { expect } from 'chai'; - -import { parseMessageTextToAstMarkdown } from '../../../../../../../client/lib/parseMessageTextToAstMarkdown'; - -const date = new Date('2021-10-27T00:00:00.000Z'); - -const parseOptions: Options = { - colors: true, - emoticons: true, - katex: { - dollarSyntax: true, - parenthesisSyntax: true, - }, -}; - -const messageParserTokenMessageWithWrongData: Root = [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'message', - }, - { - type: 'BOLD', - value: [ - { - type: 'PLAIN_TEXT', - value: 'bold', - }, - ], - }, - { - type: 'PLAIN_TEXT', - value: ' ', - }, - { - type: 'ITALIC', - value: [ - { - type: 'PLAIN_TEXT', - value: 'italic', - }, - ], - }, - { - type: 'PLAIN_TEXT', - value: ' and ', - }, - { - type: 'STRIKE', - value: [ - { - type: 'PLAIN_TEXT', - value: 'strike', - }, - ], - }, - ], - }, -]; - -const messageParserTokenMessage: Root = [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'message ', - }, - { - type: 'BOLD', - value: [ - { - type: 'PLAIN_TEXT', - value: 'bold', - }, - ], - }, - { - type: 'PLAIN_TEXT', - value: ' ', - }, - { - type: 'ITALIC', - value: [ - { - type: 'PLAIN_TEXT', - value: 'italic', - }, - ], - }, - { - type: 'PLAIN_TEXT', - value: ' and ', - }, - { - type: 'STRIKE', - value: [ - { - type: 'PLAIN_TEXT', - value: 'strike', - }, - ], - }, - ], - }, -]; - -const baseMessage: IMessage = { - ts: date, - u: { - _id: 'userId', - name: 'userName', - username: 'userName', - }, - msg: 'message **bold** _italic_ and ~strike~', - rid: 'roomId', - _id: 'messageId', - _updatedAt: date, - urls: [], -}; - -const autoTranslateOptions = { - autoTranslateEnabled: false, - showAutoTranslate: () => false, -}; - -const quoteMessage = { - author_name: 'authorName', - author_link: 'link', - author_icon: 'icon', - md: [], -}; - -describe('parseMessage', () => { - it('should return md property populated if the message is parsed', () => { - expect(parseMessageTextToAstMarkdown(baseMessage, parseOptions, autoTranslateOptions).md).to.deep.equal(messageParserTokenMessage); - }); - - it('should return correct parsed md property populated and fail in comparison with different Root element', () => { - expect(parseMessageTextToAstMarkdown(baseMessage, parseOptions, autoTranslateOptions).md).to.not.deep.equal( - messageParserTokenMessageWithWrongData, - ); - }); - - describe('translated', () => { - const translatedMessage: ITranslatedMessage = { - ...baseMessage, - msg: 'message not translated', - translationProvider: 'provider', - translations: { - en: 'message translated', - }, - }; - const translatedMessageParsed: Root = [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'message translated', - }, - ], - }, - ]; - - const enabledAutoTranslatedOptions = { - autoTranslateEnabled: true, - autoTranslateLanguage: 'en', - showAutoTranslate: () => true, - }; - it('should return correct translated parsed md when translate is active', () => { - expect(parseMessageTextToAstMarkdown(translatedMessage, parseOptions, enabledAutoTranslatedOptions).md).to.deep.equal( - translatedMessageParsed, - ); - }); - - it('should return correct attachment translated parsed md when translate is active', () => { - const attachmentTranslatedMessage = { - ...translatedMessage, - attachments: [ - { - description: 'description', - translations: { - en: 'description translated', - }, - }, - ], - }; - const attachmentTranslatedMessageParsed = { - ...translatedMessage, - md: translatedMessageParsed, - attachments: [ - { - description: 'description', - translations: { - en: 'description translated', - }, - md: [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'description translated', - }, - ], - }, - ], - }, - ], - }; - - expect(parseMessageTextToAstMarkdown(attachmentTranslatedMessage, parseOptions, enabledAutoTranslatedOptions)).to.deep.equal( - attachmentTranslatedMessageParsed, - ); - }); - - it('should return correct attachment quote translated parsed md when translate is active', () => { - const attachmentTranslatedMessage = { - ...translatedMessage, - attachments: [ - { - text: 'text', - translations: { - en: 'text translated', - }, - }, - ], - }; - const attachmentTranslatedMessageParsed = { - ...translatedMessage, - md: translatedMessageParsed, - attachments: [ - { - text: 'text', - translations: { - en: 'text translated', - }, - md: [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'text translated', - }, - ], - }, - ], - }, - ], - }; - - expect(parseMessageTextToAstMarkdown(attachmentTranslatedMessage, parseOptions, enabledAutoTranslatedOptions)).to.deep.equal( - attachmentTranslatedMessageParsed, - ); - }); - - it('should return correct multiple attachment quote translated parsed md when translate is active', () => { - const attachmentTranslatedMessage = { - ...translatedMessage, - attachments: [ - { - text: 'text', - translations: { - en: 'text translated', - }, - attachments: [{ ...quoteMessage, text: 'text level 2', translations: { en: 'text level 2 translated' } }], - }, - ], - }; - const attachmentTranslatedMessageParsed = { - ...translatedMessage, - md: translatedMessageParsed, - attachments: [ - { - text: 'text', - translations: { - en: 'text translated', - }, - md: [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'text translated', - }, - ], - }, - ], - attachments: [ - { - ...quoteMessage, - text: 'text level 2', - translations: { - en: 'text level 2 translated', - }, - }, - ], - }, - ], - }; - - expect(parseMessageTextToAstMarkdown(attachmentTranslatedMessage, parseOptions, enabledAutoTranslatedOptions)).to.deep.equal( - attachmentTranslatedMessageParsed, - ); - }); - }); - - // TODO: Add more tests for each type of message and for each type of token -}); diff --git a/apps/meteor/tests/unit/client/views/room/MessageList/lib/parseMessageAttachment.spec.ts b/apps/meteor/tests/unit/client/views/room/MessageList/lib/parseMessageAttachment.spec.ts deleted file mode 100644 index 7b94a3cfdef3..000000000000 --- a/apps/meteor/tests/unit/client/views/room/MessageList/lib/parseMessageAttachment.spec.ts +++ /dev/null @@ -1,191 +0,0 @@ -/* eslint-env mocha */ -import type { MessageQuoteAttachment } from '@rocket.chat/core-typings'; -import type { Options, Root } from '@rocket.chat/message-parser'; -import { expect } from 'chai'; - -import { parseMessageAttachment } from '../../../../../../../client/lib/parseMessageTextToAstMarkdown'; - -const parseOptions: Options = { - colors: true, - emoticons: true, - katex: { - dollarSyntax: true, - parenthesisSyntax: true, - }, -}; - -const messageParserTokenMessage: Root = [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'message ', - }, - { - type: 'BOLD', - value: [ - { - type: 'PLAIN_TEXT', - value: 'bold', - }, - ], - }, - { - type: 'PLAIN_TEXT', - value: ' ', - }, - { - type: 'ITALIC', - value: [ - { - type: 'PLAIN_TEXT', - value: 'italic', - }, - ], - }, - { - type: 'PLAIN_TEXT', - value: ' and ', - }, - { - type: 'STRIKE', - value: [ - { - type: 'PLAIN_TEXT', - value: 'strike', - }, - ], - }, - ], - }, -]; - -const autoTranslateOptions = { - autoTranslateEnabled: false, - translated: false, -}; - -const quoteMessage = { - author_name: 'authorName', - author_link: 'link', - author_icon: 'icon', - message_link: 'http://localhost/any_link', - text: 'message **bold** _italic_ and ~strike~', - md: messageParserTokenMessage, -}; - -describe('parseMessageAttachment', () => { - it('should return md property populated if the quote is parsed', () => { - expect(parseMessageAttachment(quoteMessage, parseOptions, autoTranslateOptions).md).to.deep.equal(messageParserTokenMessage); - }); - - it('should return md property populated if the quote is not parsed', () => { - expect( - parseMessageAttachment({ ...quoteMessage, md: undefined } as unknown as MessageQuoteAttachment, parseOptions, autoTranslateOptions) - .md, - ).to.deep.equal(messageParserTokenMessage); - }); - - describe('translated', () => { - const translatedQuote = { - ...quoteMessage, - text: 'quote not translated', - translationProvider: 'provider', - translations: { - en: 'quote translated', - }, - }; - const translatedMessageParsed: Root = [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'quote translated', - }, - ], - }, - ]; - - const enabledAutoTranslatedOptions = { - translated: true, - autoTranslateLanguage: 'en', - }; - it('should return correct quote translated parsed md when translate is active', () => { - expect(parseMessageAttachment(translatedQuote, parseOptions, enabledAutoTranslatedOptions).md).to.deep.equal(translatedMessageParsed); - }); - - it('should return text parsed md when translate is active and autoTranslateLanguage is undefined', () => { - expect( - parseMessageAttachment(translatedQuote, parseOptions, { ...enabledAutoTranslatedOptions, autoTranslateLanguage: undefined }).md, - ).to.deep.equal([ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'quote not translated', - }, - ], - }, - ]); - }); - - it('should return correct multiple attachment quote translated parsed md when translate is active', () => { - const quote = { ...quoteMessage, text: 'text level 2', translations: { en: 'text level 2 translated' } }; - - const multipleQuotes = { - ...translatedQuote, - attachments: [ - { - ...translatedQuote, - text: 'text', - translations: { - en: 'text translated', - }, - attachments: [quote], - }, - ], - }; - const multipleQuotesParsed = { - ...translatedQuote, - md: translatedMessageParsed, - attachments: [ - { - ...multipleQuotes.attachments[0], - md: [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'text translated', - }, - ], - }, - ], - attachments: [ - { - ...quote, - md: [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'text level 2 translated', - }, - ], - }, - ], - }, - ], - }, - ], - }; - - expect(parseMessageAttachment(multipleQuotes, parseOptions, enabledAutoTranslatedOptions)).to.deep.equal(multipleQuotesParsed); - }); - }); -}); diff --git a/apps/meteor/tests/unit/client/views/room/MessageList/lib/parseMessageAttachments.spec.ts b/apps/meteor/tests/unit/client/views/room/MessageList/lib/parseMessageAttachments.spec.ts deleted file mode 100644 index 23d6944f99f2..000000000000 --- a/apps/meteor/tests/unit/client/views/room/MessageList/lib/parseMessageAttachments.spec.ts +++ /dev/null @@ -1,236 +0,0 @@ -/* eslint-env mocha */ -import type { Options, Root } from '@rocket.chat/message-parser'; -import { expect } from 'chai'; - -import { parseMessageAttachments } from '../../../../../../../client/lib/parseMessageTextToAstMarkdown'; - -const parseOptions: Options = { - colors: true, - emoticons: true, - katex: { - dollarSyntax: true, - parenthesisSyntax: true, - }, -}; - -const messageParserTokenMessage: Root = [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'message ', - }, - { - type: 'BOLD', - value: [ - { - type: 'PLAIN_TEXT', - value: 'bold', - }, - ], - }, - { - type: 'PLAIN_TEXT', - value: ' ', - }, - { - type: 'ITALIC', - value: [ - { - type: 'PLAIN_TEXT', - value: 'italic', - }, - ], - }, - { - type: 'PLAIN_TEXT', - value: ' and ', - }, - { - type: 'STRIKE', - value: [ - { - type: 'PLAIN_TEXT', - value: 'strike', - }, - ], - }, - ], - }, -]; - -const autoTranslateOptions = { - autoTranslateEnabled: false, - translated: false, -}; - -const attachmentMessage = [ - { - description: 'message **bold** _italic_ and ~strike~', - md: messageParserTokenMessage, - }, -]; - -describe('parseMessageAttachments', () => { - it('should return md property populated if the message is parsed', () => { - expect(parseMessageAttachments(attachmentMessage, parseOptions, autoTranslateOptions)[0].md).to.deep.equal(messageParserTokenMessage); - }); - - it('should return md property populated if the attachment is not parsed', () => { - expect(parseMessageAttachments([{ ...attachmentMessage[0], md: undefined }], parseOptions, autoTranslateOptions)[0].md).to.deep.equal( - messageParserTokenMessage, - ); - }); - - describe('translated', () => { - const enabledAutoTranslatedOptions = { - translated: true, - autoTranslateLanguage: 'en', - }; - - it('should return correct attachment description translated parsed md when translate is active', () => { - const descriptionAttachment = [ - { - ...attachmentMessage[0], - description: 'attachment not translated', - translationProvider: 'provider', - translations: { - en: 'attachment translated', - }, - }, - ]; - const descriptionAttachmentParsed: Root = [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'attachment translated', - }, - ], - }, - ]; - - expect(parseMessageAttachments(descriptionAttachment, parseOptions, enabledAutoTranslatedOptions)[0].md).to.deep.equal( - descriptionAttachmentParsed, - ); - }); - - it('should return correct attachment description parsed md when translate is active and auto translate language is undefined', () => { - const descriptionAttachment = [ - { - ...attachmentMessage[0], - description: 'attachment not translated', - translationProvider: 'provider', - translations: { - en: 'attachment translated', - }, - }, - ]; - const descriptionAttachmentParsed: Root = [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'attachment not translated', - }, - ], - }, - ]; - - expect( - parseMessageAttachments(descriptionAttachment, parseOptions, { - ...enabledAutoTranslatedOptions, - autoTranslateLanguage: undefined, - })[0].md, - ).to.deep.equal(descriptionAttachmentParsed); - }); - - it('should return correct attachment text translated parsed md when translate is active', () => { - const textAttachment = [ - { - ...attachmentMessage[0], - text: 'attachment not translated', - translationProvider: 'provider', - translations: { - en: 'attachment translated', - }, - }, - ]; - const textAttachmentParsed: Root = [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'attachment translated', - }, - ], - }, - ]; - - expect(parseMessageAttachments(textAttachment, parseOptions, enabledAutoTranslatedOptions)[0].md).to.deep.equal(textAttachmentParsed); - }); - - it('should return correct attachment text translated parsed md when translate is active and has multiple texts', () => { - const quote = { - author_name: 'authorName', - author_link: 'link', - author_icon: 'icon', - message_link: 'messageLink', - md: [], - text: 'text level 2', - translations: { en: 'text level 2 translated' }, - }; - const textAttachment = [ - { - ...quote, - text: 'attachment not translated', - translationProvider: 'provider', - translations: { - en: 'attachment translated', - }, - attachments: [quote], - }, - ]; - const textAttachmentParsed = { - ...textAttachment[0], - md: [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'attachment translated', - }, - ], - }, - ], - attachments: [ - { - ...quote, - text: 'text level 2', - translations: { - en: 'text level 2 translated', - }, - md: [ - { - type: 'PARAGRAPH', - value: [ - { - type: 'PLAIN_TEXT', - value: 'text level 2 translated', - }, - ], - }, - ], - }, - ], - }; - - expect(parseMessageAttachments(textAttachment, parseOptions, enabledAutoTranslatedOptions)[0]).to.deep.equal(textAttachmentParsed); - }); - }); -}); diff --git a/apps/meteor/tests/unit/client/views/root/SAMLLoginRoute.spec.tsx b/apps/meteor/tests/unit/client/views/root/SAMLLoginRoute.spec.tsx deleted file mode 100644 index bfd0d9ec0a6b..000000000000 --- a/apps/meteor/tests/unit/client/views/root/SAMLLoginRoute.spec.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import { MockedServerContext, MockedUserContext } from '@rocket.chat/mock-providers'; -import { render } from '@testing-library/react'; -import '@testing-library/jest-dom'; -import { Meteor } from 'meteor/meteor'; -import React from 'react'; -import sinon from 'sinon'; - -import SAMLLoginRoute from '../../../../../client/views/root/SAMLLoginRoute'; -import RouterContextMock from '../../../../mocks/client/RouterContextMock'; - -const loginWithSamlTokenStub = Meteor.loginWithSamlToken as sinon.SinonStub; -const navigateStub = sinon.stub(); - -describe('views/root/SAMLLoginRoute', () => { - beforeEach(() => { - jest.clearAllMocks(); - navigateStub.resetHistory(); - loginWithSamlTokenStub.reset(); - loginWithSamlTokenStub.callsFake((_token, callback) => callback()); - }); - - it('should redirect to /home when userId is not null', async () => { - render( - - - - - - - , - ); - - expect(navigateStub.calledTwice).toBe(true); - expect( - navigateStub.calledWith( - sinon.match({ - pathname: '/home', - }), - ), - ).toBe(true); - }); - - it('should redirect to /home when userId is null and redirectUrl is not within the workspace domain', async () => { - render( - - - - - , - ); - - expect( - navigateStub.calledOnceWith( - sinon.match({ - pathname: '/home', - }), - ), - ).toBe(true); - }); - - it('should redirect to the provided redirectUrl when userId is null and redirectUrl is within the workspace domain', async () => { - render( - - - - - , - ); - - expect( - navigateStub.calledOnceWith( - sinon.match({ - pathname: '/invite/test', - }), - ), - ).toBe(true); - }); - - it('should call loginWithSamlToken when component is mounted', async () => { - render( - - - - - , - ); - - expect(loginWithSamlTokenStub.calledOnceWith(undefined)).toBe(true); - }); - - it('should call loginWithSamlToken with the token when it is present', async () => { - render( - - - - - , - ); - - expect(loginWithSamlTokenStub.calledOnceWith('testToken')).toBe(true); - }); -}); diff --git a/apps/meteor/tests/unit/server/federation/infrastructure/rocket-chat/hooks/hooks.spec.ts b/apps/meteor/tests/unit/server/federation/infrastructure/rocket-chat/hooks/hooks.spec.ts index 7d3e664022c8..c77f6e4993fa 100644 --- a/apps/meteor/tests/unit/server/federation/infrastructure/rocket-chat/hooks/hooks.spec.ts +++ b/apps/meteor/tests/unit/server/federation/infrastructure/rocket-chat/hooks/hooks.spec.ts @@ -507,7 +507,7 @@ describe('Federation - Infrastructure - RocketChat - Hooks', () => { get.returns(true); const stub = sinon.stub(); FederationHooks.afterMessageUpdated(stub); - hooks['federation-v2-after-room-message-updated'](message, { federated: true, _id: 'roomId' }); + hooks['federation-v2-after-room-message-updated'](message, { room: { federated: true, _id: 'roomId' } }); expect(stub.calledWith(message, 'roomId', 'userId')).to.be.true; }); }); @@ -551,7 +551,7 @@ describe('Federation - Infrastructure - RocketChat - Hooks', () => { get.returns(true); const stub = sinon.stub(); FederationHooks.afterMessageSent(stub); - hooks['federation-v2-after-room-message-sent']({ u: { _id: 'userId' } }, { federated: true, _id: 'roomId' }); + hooks['federation-v2-after-room-message-sent']({ u: { _id: 'userId' } }, { room: { federated: true, _id: 'roomId' } }); expect(stub.calledWith({ u: { _id: 'userId' } }, 'roomId', 'userId')).to.be.true; }); }); diff --git a/apps/meteor/tests/unit/server/livechat/hooks/beforeNewRoom.spec.ts b/apps/meteor/tests/unit/server/livechat/hooks/beforeNewRoom.spec.ts new file mode 100644 index 000000000000..9ba9ae73fe57 --- /dev/null +++ b/apps/meteor/tests/unit/server/livechat/hooks/beforeNewRoom.spec.ts @@ -0,0 +1,52 @@ +import { expect } from 'chai'; +import { describe, it, beforeEach } from 'mocha'; +import proxyquire from 'proxyquire'; +import sinon from 'sinon'; + +import { callbacks } from '../../../../../lib/callbacks'; + +const findStub = sinon.stub(); + +proxyquire.noCallThru().load('../../../../../ee/app/livechat-enterprise/server/hooks/beforeNewRoom.ts', { + 'meteor/meteor': { + Meteor: { + Error, + }, + }, + '@rocket.chat/models': { + OmnichannelServiceLevelAgreements: { + findOneByIdOrName: findStub, + }, + }, +}); + +describe('livechat.beforeRoom', () => { + beforeEach(() => findStub.withArgs('high').resolves({ _id: 'high' }).withArgs('invalid').resolves(null)); + + it('should return roomInfo with customFields when provided', async () => { + const roomInfo = { name: 'test' }; + const extraData = { customFields: { test: 'test' } }; + const result = await callbacks.run('livechat.beforeRoom', roomInfo, extraData); + expect(result).to.deep.equal({ ...roomInfo, customFields: extraData.customFields }); + }); + + it('should throw an error when provided with an invalid sla', async () => { + const roomInfo = { name: 'test' }; + const extraData = { customFields: { test: 'test' }, sla: 'invalid' }; + await expect(callbacks.run('livechat.beforeRoom', roomInfo, extraData)).to.be.rejectedWith(Error, 'error-invalid-sla'); + }); + + it('should not include field in roomInfo when extraData has field other than customFields, sla', async () => { + const roomInfo = { name: 'test' }; + const extraData = { customFields: { test: 'test' }, sla: 'high' }; + const result = await callbacks.run('livechat.beforeRoom', roomInfo, extraData); + expect(result).to.deep.equal({ ...roomInfo, customFields: extraData.customFields, slaId: 'high' }); + }); + + it('should return roomInfo with no customFields when customFields is not an object', async () => { + const roomInfo = { name: 'test' }; + const extraData = { customFields: 'not an object' }; + const result = await callbacks.run('livechat.beforeRoom', roomInfo, extraData); + expect(result).to.deep.equal({ ...roomInfo }); + }); +}); diff --git a/docker-compose-ci.yml b/docker-compose-ci.yml index 67b89d61ef52..23ee3b125524 100644 --- a/docker-compose-ci.yml +++ b/docker-compose-ci.yml @@ -30,6 +30,7 @@ services: traefik.http.services.rocketchat.loadbalancer.server.port: 3000 traefik.http.routers.rocketchat.service: rocketchat traefik.http.routers.rocketchat.rule: PathPrefix(`/`) + traefik.http.middlewares.test-retry.retry.attempts: 4 authorization-service: platform: linux/amd64 @@ -162,9 +163,10 @@ services: image: nats:2.6-alpine traefik: - image: traefik:v2.8 + image: traefik:v3.1 command: - --providers.docker=true + - '--serverstransport.maxidleconnsperhost=-1' ports: - 3000:80 volumes: diff --git a/ee/apps/account-service/CHANGELOG.md b/ee/apps/account-service/CHANGELOG.md index 238e83e92d97..fd5eb3925946 100644 --- a/ee/apps/account-service/CHANGELOG.md +++ b/ee/apps/account-service/CHANGELOG.md @@ -1,5 +1,127 @@ # @rocket.chat/account-service +## 0.4.3 + +### Patch Changes + +- ([#32527](https://github.com/RocketChat/Rocket.Chat/pull/32527)) Fixed an inconsistent evaluation of the `Accounts_LoginExpiration` setting over the codebase. In some places, it was being used as milliseconds while in others as days. Invalid values produced different results. A helper function was created to centralize the setting validation and the proper value being returned to avoid edge cases. + Negative values may be saved on the settings UI panel but the code will interpret any negative, NaN or 0 value to the default expiration which is 90 days. +-
    Updated dependencies [8fc6ca8b4e, 439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/tools@0.2.2 + - @rocket.chat/model-typings@0.6.0 + - @rocket.chat/core-services@0.5.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/models@0.2.0 + - @rocket.chat/rest-typings@6.11.0 +
    + +## 0.4.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/rest-typings@6.11.0-rc.6 + - @rocket.chat/core-services@0.5.0-rc.6 + - @rocket.chat/model-typings@0.6.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 +
    + +## 0.4.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/rest-typings@6.11.0-rc.5 + - @rocket.chat/core-services@0.5.0-rc.5 + - @rocket.chat/model-typings@0.6.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 +
    + +## 0.4.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/rest-typings@6.11.0-rc.4 + - @rocket.chat/core-services@0.5.0-rc.4 + - @rocket.chat/model-typings@0.6.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 +
    + +## 0.4.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/rest-typings@6.11.0-rc.3 + - @rocket.chat/core-services@0.5.0-rc.3 + - @rocket.chat/model-typings@0.6.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 +
    + +## 0.4.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/rest-typings@6.11.0-rc.2 + - @rocket.chat/core-services@0.5.0-rc.2 + - @rocket.chat/model-typings@0.6.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 +
    + +## 0.4.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/rest-typings@6.11.0-rc.1 + - @rocket.chat/core-services@0.5.0-rc.1 + - @rocket.chat/model-typings@0.6.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 +
    + +## 0.4.3-rc.0 + +### Patch Changes + +- ([#32527](https://github.com/RocketChat/Rocket.Chat/pull/32527)) Fixed an inconsistent evaluation of the `Accounts_LoginExpiration` setting over the codebase. In some places, it was being used as milliseconds while in others as days. Invalid values produced different results. A helper function was created to centralize the setting validation and the proper value being returned to avoid edge cases. + Negative values may be saved on the settings UI panel but the code will interpret any negative, NaN or 0 value to the default expiration which is 90 days. +-
    Updated dependencies [8fc6ca8b4e, 439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/tools@0.2.2-rc.0 + - @rocket.chat/model-typings@0.6.0-rc.0 + - @rocket.chat/core-services@0.5.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 + - @rocket.chat/rest-typings@6.11.0-rc.0 + +## 0.4.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-services@0.4.2 + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/rest-typings@6.10.2 + - @rocket.chat/model-typings@0.5.2 + - @rocket.chat/models@0.1.2 +
    + ## 0.4.1 ### Patch Changes diff --git a/ee/apps/account-service/package.json b/ee/apps/account-service/package.json index d52253fa2f94..ac28eb76e76d 100644 --- a/ee/apps/account-service/package.json +++ b/ee/apps/account-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/account-service", "private": true, - "version": "0.4.1", + "version": "0.4.3", "description": "Rocket.Chat Account service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/apps/authorization-service/CHANGELOG.md b/ee/apps/authorization-service/CHANGELOG.md index f216f11428d8..df7be3c9b1eb 100644 --- a/ee/apps/authorization-service/CHANGELOG.md +++ b/ee/apps/authorization-service/CHANGELOG.md @@ -1,5 +1,122 @@ # @rocket.chat/authorization-service +## 0.4.3 + +### Patch Changes + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0 + - @rocket.chat/core-services@0.5.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/models@0.2.0 + - @rocket.chat/rest-typings@6.11.0 +
    + +## 0.4.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/rest-typings@6.11.0-rc.6 + - @rocket.chat/core-services@0.5.0-rc.6 + - @rocket.chat/model-typings@0.6.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 +
    + +## 0.4.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/rest-typings@6.11.0-rc.5 + - @rocket.chat/core-services@0.5.0-rc.5 + - @rocket.chat/model-typings@0.6.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 +
    + +## 0.4.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/rest-typings@6.11.0-rc.4 + - @rocket.chat/core-services@0.5.0-rc.4 + - @rocket.chat/model-typings@0.6.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 +
    + +## 0.4.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/rest-typings@6.11.0-rc.3 + - @rocket.chat/core-services@0.5.0-rc.3 + - @rocket.chat/model-typings@0.6.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 +
    + +## 0.4.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/rest-typings@6.11.0-rc.2 + - @rocket.chat/core-services@0.5.0-rc.2 + - @rocket.chat/model-typings@0.6.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 +
    + +## 0.4.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/rest-typings@6.11.0-rc.1 + - @rocket.chat/core-services@0.5.0-rc.1 + - @rocket.chat/model-typings@0.6.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 +
    + +## 0.4.3-rc.0 + +### Patch Changes + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0-rc.0 + - @rocket.chat/core-services@0.5.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 + - @rocket.chat/rest-typings@6.11.0-rc.0 +
    + +## 0.4.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-services@0.4.2 + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/rest-typings@6.10.2 + - @rocket.chat/model-typings@0.5.2 + - @rocket.chat/models@0.1.2 +
    + ## 0.4.1 ### Patch Changes diff --git a/ee/apps/authorization-service/package.json b/ee/apps/authorization-service/package.json index 6eef0c30f9a7..bff15e7f7d91 100644 --- a/ee/apps/authorization-service/package.json +++ b/ee/apps/authorization-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/authorization-service", "private": true, - "version": "0.4.1", + "version": "0.4.3", "description": "Rocket.Chat Authorization service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/apps/ddp-streamer/CHANGELOG.md b/ee/apps/ddp-streamer/CHANGELOG.md index f43ecec49734..1162e17c05d7 100644 --- a/ee/apps/ddp-streamer/CHANGELOG.md +++ b/ee/apps/ddp-streamer/CHANGELOG.md @@ -1,5 +1,152 @@ # @rocket.chat/ddp-streamer +## 0.3.3 + +### Patch Changes + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 4e8aa575a6, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0 + - @rocket.chat/core-services@0.5.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/ui-contexts@9.0.0 + - @rocket.chat/models@0.2.0 + - @rocket.chat/rest-typings@6.11.0 + - @rocket.chat/instance-status@0.1.3 +
    + +## 0.3.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/rest-typings@6.11.0-rc.6 + - @rocket.chat/core-services@0.5.0-rc.6 + - @rocket.chat/model-typings@0.6.0-rc.6 + - @rocket.chat/ui-contexts@9.0.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 + - @rocket.chat/instance-status@0.1.3-rc.6 +
    + +## 0.3.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/rest-typings@6.11.0-rc.5 + - @rocket.chat/core-services@0.5.0-rc.5 + - @rocket.chat/model-typings@0.6.0-rc.5 + - @rocket.chat/ui-contexts@9.0.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 + - @rocket.chat/instance-status@0.1.3-rc.5 +
    + +## 0.3.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/rest-typings@6.11.0-rc.4 + - @rocket.chat/core-services@0.5.0-rc.4 + - @rocket.chat/model-typings@0.6.0-rc.4 + - @rocket.chat/ui-contexts@9.0.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 + - @rocket.chat/instance-status@0.1.3-rc.4 +
    + +## 0.3.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/rest-typings@6.11.0-rc.3 + - @rocket.chat/core-services@0.5.0-rc.3 + - @rocket.chat/model-typings@0.6.0-rc.3 + - @rocket.chat/ui-contexts@9.0.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 + - @rocket.chat/instance-status@0.1.3-rc.3 +
    + +## 0.3.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/rest-typings@6.11.0-rc.2 + - @rocket.chat/core-services@0.5.0-rc.2 + - @rocket.chat/model-typings@0.6.0-rc.2 + - @rocket.chat/ui-contexts@9.0.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 + - @rocket.chat/instance-status@0.1.3-rc.2 +
    + +## 0.3.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/rest-typings@6.11.0-rc.1 + - @rocket.chat/core-services@0.5.0-rc.1 + - @rocket.chat/model-typings@0.6.0-rc.1 + - @rocket.chat/ui-contexts@9.0.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 + - @rocket.chat/instance-status@0.1.2-rc.1 +
    + +## 0.3.3-rc.0 + +### Patch Changes + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 4e8aa575a6, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0-rc.0 + - @rocket.chat/core-services@0.5.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/ui-contexts@9.0.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 + - @rocket.chat/rest-typings@6.11.0-rc.0 + - @rocket.chat/instance-status@0.1.2-rc.0 +
    + +## 0.3.2 + +### Patch Changes + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from being updated or uninstalled in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from handling errors during execution in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Improved Apps-Engine installation to prevent start up errors on manual installation setups + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that caused the video conference button on rooms to not recognize a video conference provider app in some cases + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-services@0.4.2 + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/rest-typings@6.10.2 + - @rocket.chat/model-typings@0.5.2 + - @rocket.chat/ui-contexts@8.0.2 + - @rocket.chat/models@0.1.2 + - @rocket.chat/instance-status@0.1.2 +
    + ## 0.3.1 ### Patch Changes diff --git a/ee/apps/ddp-streamer/Dockerfile b/ee/apps/ddp-streamer/Dockerfile index 893fdcff858b..f556cbde6752 100644 --- a/ee/apps/ddp-streamer/Dockerfile +++ b/ee/apps/ddp-streamer/Dockerfile @@ -26,9 +26,6 @@ COPY ./packages/peggy-loader/dist packages/peggy-loader/dist COPY ./packages/password-policies/package.json packages/password-policies/package.json COPY ./packages/password-policies/dist packages/password-policies/dist -COPY ./packages/ui-contexts/package.json packages/ui-contexts/package.json -COPY ./packages/ui-contexts/dist packages/ui-contexts/dist - COPY ./packages/model-typings/package.json packages/model-typings/package.json COPY ./packages/model-typings/dist packages/model-typings/dist diff --git a/ee/apps/ddp-streamer/package.json b/ee/apps/ddp-streamer/package.json index 19d69091e453..fdee5d5d3b9a 100644 --- a/ee/apps/ddp-streamer/package.json +++ b/ee/apps/ddp-streamer/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/ddp-streamer", "private": true, - "version": "0.3.1", + "version": "0.3.3", "description": "Rocket.Chat DDP-Streamer service", "scripts": { "build": "tsc -p tsconfig.json", @@ -15,7 +15,7 @@ ], "author": "Rocket.Chat", "dependencies": { - "@rocket.chat/apps-engine": "alpha", + "@rocket.chat/apps-engine": "1.44.0", "@rocket.chat/core-services": "workspace:^", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/emitter": "~0.31.25", @@ -25,7 +25,6 @@ "@rocket.chat/models": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", "@rocket.chat/string-helpers": "~0.31.25", - "@rocket.chat/ui-contexts": "workspace:^", "colorette": "^1.4.0", "ejson": "^2.2.3", "event-loop-stats": "^1.4.1", @@ -45,6 +44,7 @@ "ws": "^8.8.1" }, "devDependencies": { + "@rocket.chat/ddp-client": "workspace:~", "@rocket.chat/eslint-config": "workspace:^", "@types/ejson": "^2.2.1", "@types/gc-stats": "^1.4.2", diff --git a/ee/apps/ddp-streamer/src/Streamer.ts b/ee/apps/ddp-streamer/src/Streamer.ts index fcb2d9decf5e..686e3224d7ef 100644 --- a/ee/apps/ddp-streamer/src/Streamer.ts +++ b/ee/apps/ddp-streamer/src/Streamer.ts @@ -1,5 +1,5 @@ import { api } from '@rocket.chat/core-services'; -import type { StreamNames } from '@rocket.chat/ui-contexts'; +import type { StreamNames } from '@rocket.chat/ddp-client'; import type { DDPSubscription, Connection, TransformMessage } from 'meteor/rocketchat:streamer'; import WebSocket from 'ws'; diff --git a/ee/apps/omnichannel-transcript/CHANGELOG.md b/ee/apps/omnichannel-transcript/CHANGELOG.md index 4666d1a632d9..aac67c02dd3d 100644 --- a/ee/apps/omnichannel-transcript/CHANGELOG.md +++ b/ee/apps/omnichannel-transcript/CHANGELOG.md @@ -1,5 +1,133 @@ # @rocket.chat/omnichannel-transcript +## 0.4.3 + +### Patch Changes + +-
    Updated dependencies [8fc6ca8b4e, 439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/tools@0.2.2 + - @rocket.chat/model-typings@0.6.0 + - @rocket.chat/omnichannel-services@0.3.0 + - @rocket.chat/pdf-worker@0.2.0 + - @rocket.chat/core-services@0.5.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/models@0.2.0 +
    + +## 0.4.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/omnichannel-services@0.3.0-rc.6 + - @rocket.chat/pdf-worker@0.2.0-rc.6 + - @rocket.chat/core-services@0.5.0-rc.6 + - @rocket.chat/model-typings@0.6.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 +
    + +## 0.4.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/omnichannel-services@0.3.0-rc.5 + - @rocket.chat/pdf-worker@0.2.0-rc.5 + - @rocket.chat/core-services@0.5.0-rc.5 + - @rocket.chat/model-typings@0.6.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 +
    + +## 0.4.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/omnichannel-services@0.3.0-rc.4 + - @rocket.chat/pdf-worker@0.2.0-rc.4 + - @rocket.chat/core-services@0.5.0-rc.4 + - @rocket.chat/model-typings@0.6.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 +
    + +## 0.4.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/omnichannel-services@0.3.0-rc.3 + - @rocket.chat/pdf-worker@0.2.0-rc.3 + - @rocket.chat/core-services@0.5.0-rc.3 + - @rocket.chat/model-typings@0.6.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 +
    + +## 0.4.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/omnichannel-services@0.3.0-rc.2 + - @rocket.chat/pdf-worker@0.2.0-rc.2 + - @rocket.chat/core-services@0.5.0-rc.2 + - @rocket.chat/model-typings@0.6.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 +
    + +## 0.4.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/omnichannel-services@0.3.0-rc.1 + - @rocket.chat/pdf-worker@0.2.0-rc.1 + - @rocket.chat/core-services@0.5.0-rc.1 + - @rocket.chat/model-typings@0.6.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 +
    + +## 0.4.3-rc.0 + +### Patch Changes + +-
    Updated dependencies [8fc6ca8b4e, 439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/tools@0.2.2-rc.0 + - @rocket.chat/model-typings@0.6.0-rc.0 + - @rocket.chat/omnichannel-services@0.3.0-rc.0 + - @rocket.chat/pdf-worker@0.2.0-rc.0 + - @rocket.chat/core-services@0.5.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 +
    + +## 0.4.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-services@0.4.2 + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/omnichannel-services@0.2.2 + - @rocket.chat/pdf-worker@0.1.2 + - @rocket.chat/model-typings@0.5.2 + - @rocket.chat/models@0.1.2 +
    + ## 0.4.1 ### Patch Changes diff --git a/ee/apps/omnichannel-transcript/package.json b/ee/apps/omnichannel-transcript/package.json index cbbfeedda398..c60542c180ec 100644 --- a/ee/apps/omnichannel-transcript/package.json +++ b/ee/apps/omnichannel-transcript/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/omnichannel-transcript", "private": true, - "version": "0.4.1", + "version": "0.4.3", "description": "Rocket.Chat service", "scripts": { "build": "tsc -p tsconfig.json", @@ -43,7 +43,6 @@ }, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", - "@rocket.chat/ui-contexts": "workspace:^", "@types/gc-stats": "^1.4.2", "@types/polka": "^0.5.6", "eslint": "~8.45.0", diff --git a/ee/apps/presence-service/CHANGELOG.md b/ee/apps/presence-service/CHANGELOG.md index 338c584f29da..b9544b0cdde9 100644 --- a/ee/apps/presence-service/CHANGELOG.md +++ b/ee/apps/presence-service/CHANGELOG.md @@ -1,5 +1,122 @@ # @rocket.chat/presence-service +## 0.4.3 + +### Patch Changes + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0 + - @rocket.chat/core-services@0.5.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/models@0.2.0 + - @rocket.chat/presence@0.2.3 +
    + +## 0.4.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/presence@0.2.3-rc.6 + - @rocket.chat/core-services@0.5.0-rc.6 + - @rocket.chat/model-typings@0.6.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 +
    + +## 0.4.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/presence@0.2.3-rc.5 + - @rocket.chat/core-services@0.5.0-rc.5 + - @rocket.chat/model-typings@0.6.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 +
    + +## 0.4.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/presence@0.2.3-rc.4 + - @rocket.chat/core-services@0.5.0-rc.4 + - @rocket.chat/model-typings@0.6.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 +
    + +## 0.4.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/presence@0.2.3-rc.3 + - @rocket.chat/core-services@0.5.0-rc.3 + - @rocket.chat/model-typings@0.6.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 +
    + +## 0.4.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/presence@0.2.3-rc.2 + - @rocket.chat/core-services@0.5.0-rc.2 + - @rocket.chat/model-typings@0.6.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 +
    + +## 0.4.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/presence@0.2.2-rc.1 + - @rocket.chat/core-services@0.5.0-rc.1 + - @rocket.chat/model-typings@0.6.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 +
    + +## 0.4.3-rc.0 + +### Patch Changes + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0-rc.0 + - @rocket.chat/core-services@0.5.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 + - @rocket.chat/presence@0.2.2-rc.0 +
    + +## 0.4.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-services@0.4.2 + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/presence@0.2.2 + - @rocket.chat/model-typings@0.5.2 + - @rocket.chat/models@0.1.2 +
    + ## 0.4.1 ### Patch Changes diff --git a/ee/apps/presence-service/Dockerfile b/ee/apps/presence-service/Dockerfile index a6b6e641a39d..aa9c1c0bd6c9 100644 --- a/ee/apps/presence-service/Dockerfile +++ b/ee/apps/presence-service/Dockerfile @@ -43,9 +43,6 @@ COPY ./packages/server-cloud-communication/ packages/server-cloud-communication/ COPY ./ee/packages/license/package.json packages/license/package.json COPY ./ee/packages/license/dist packages/license/dist -COPY ./packages/ui-contexts/package.json packages/ui-contexts/package.json -COPY ./packages/ui-contexts/dist packages/ui-contexts/dist - COPY ./packages/ui-kit/package.json packages/ui-kit/package.json COPY ./packages/ui-kit/dist packages/ui-kit/dist diff --git a/ee/apps/presence-service/package.json b/ee/apps/presence-service/package.json index 2bc89c48fdaf..c800dd4d6c80 100644 --- a/ee/apps/presence-service/package.json +++ b/ee/apps/presence-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/presence-service", "private": true, - "version": "0.4.1", + "version": "0.4.3", "description": "Rocket.Chat Presence service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/apps/queue-worker/CHANGELOG.md b/ee/apps/queue-worker/CHANGELOG.md index ccda9ae96e56..12271005af74 100644 --- a/ee/apps/queue-worker/CHANGELOG.md +++ b/ee/apps/queue-worker/CHANGELOG.md @@ -1,5 +1,122 @@ # @rocket.chat/queue-worker +## 0.4.3 + +### Patch Changes + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0 + - @rocket.chat/omnichannel-services@0.3.0 + - @rocket.chat/core-services@0.5.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/models@0.2.0 +
    + +## 0.4.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/omnichannel-services@0.3.0-rc.6 + - @rocket.chat/core-services@0.5.0-rc.6 + - @rocket.chat/model-typings@0.6.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 +
    + +## 0.4.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/omnichannel-services@0.3.0-rc.5 + - @rocket.chat/core-services@0.5.0-rc.5 + - @rocket.chat/model-typings@0.6.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 +
    + +## 0.4.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/omnichannel-services@0.3.0-rc.4 + - @rocket.chat/core-services@0.5.0-rc.4 + - @rocket.chat/model-typings@0.6.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 +
    + +## 0.4.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/omnichannel-services@0.3.0-rc.3 + - @rocket.chat/core-services@0.5.0-rc.3 + - @rocket.chat/model-typings@0.6.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 +
    + +## 0.4.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/omnichannel-services@0.3.0-rc.2 + - @rocket.chat/core-services@0.5.0-rc.2 + - @rocket.chat/model-typings@0.6.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 +
    + +## 0.4.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/omnichannel-services@0.3.0-rc.1 + - @rocket.chat/core-services@0.5.0-rc.1 + - @rocket.chat/model-typings@0.6.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 +
    + +## 0.4.3-rc.0 + +### Patch Changes + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0-rc.0 + - @rocket.chat/omnichannel-services@0.3.0-rc.0 + - @rocket.chat/core-services@0.5.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 +
    + +## 0.4.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-services@0.4.2 + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/omnichannel-services@0.2.2 + - @rocket.chat/model-typings@0.5.2 + - @rocket.chat/models@0.1.2 +
    + ## 0.4.1 ### Patch Changes diff --git a/ee/apps/queue-worker/package.json b/ee/apps/queue-worker/package.json index be7ac1376935..0a227cb271c0 100644 --- a/ee/apps/queue-worker/package.json +++ b/ee/apps/queue-worker/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/queue-worker", "private": true, - "version": "0.4.1", + "version": "0.4.3", "description": "Rocket.Chat service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/apps/stream-hub-service/CHANGELOG.md b/ee/apps/stream-hub-service/CHANGELOG.md index cf5790099785..3fbf664a0b30 100644 --- a/ee/apps/stream-hub-service/CHANGELOG.md +++ b/ee/apps/stream-hub-service/CHANGELOG.md @@ -1,5 +1,113 @@ # @rocket.chat/stream-hub-service +## 0.4.3 + +### Patch Changes + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0 + - @rocket.chat/core-services@0.5.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/models@0.2.0 +
    + +## 0.4.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/core-services@0.5.0-rc.6 + - @rocket.chat/model-typings@0.6.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 +
    + +## 0.4.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/core-services@0.5.0-rc.5 + - @rocket.chat/model-typings@0.6.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 +
    + +## 0.4.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/core-services@0.5.0-rc.4 + - @rocket.chat/model-typings@0.6.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 +
    + +## 0.4.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/core-services@0.5.0-rc.3 + - @rocket.chat/model-typings@0.6.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 +
    + +## 0.4.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/core-services@0.5.0-rc.2 + - @rocket.chat/model-typings@0.6.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 +
    + +## 0.4.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/core-services@0.5.0-rc.1 + - @rocket.chat/model-typings@0.6.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 +
    + +## 0.4.3-rc.0 + +### Patch Changes + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0-rc.0 + - @rocket.chat/core-services@0.5.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 +
    + +## 0.4.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-services@0.4.2 + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/model-typings@0.5.2 + - @rocket.chat/models@0.1.2 +
    + ## 0.4.1 ### Patch Changes diff --git a/ee/apps/stream-hub-service/package.json b/ee/apps/stream-hub-service/package.json index e75f32b27d43..812522a5f1d8 100644 --- a/ee/apps/stream-hub-service/package.json +++ b/ee/apps/stream-hub-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/stream-hub-service", "private": true, - "version": "0.4.1", + "version": "0.4.3", "description": "Rocket.Chat Stream Hub service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/packages/api-client/jest.config.ts b/ee/packages/api-client/jest.config.ts deleted file mode 100644 index 455fa3a054f2..000000000000 --- a/ee/packages/api-client/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -export default { - preset: 'ts-jest', - errorOnDeprecated: true, - testEnvironment: 'jsdom', - modulePathIgnorePatterns: ['/dist/'], - transform: { - '^.+\\.(t|j)sx?$': '@swc/jest', - }, - moduleNameMapper: { - '\\.css$': 'identity-obj-proxy', - }, - collectCoverage: true, -}; diff --git a/ee/packages/ddp-client/jest.config.ts b/ee/packages/ddp-client/jest.config.ts deleted file mode 100644 index eb3f38119a73..000000000000 --- a/ee/packages/ddp-client/jest.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -export default { - preset: 'ts-jest', - errorOnDeprecated: true, - testEnvironment: 'jsdom', - modulePathIgnorePatterns: ['/dist/'], - testMatch: ['**/**.spec.ts'], - transform: { - '^.+\\.(t|j)sx?$': '@swc/jest', - }, - moduleNameMapper: { - '\\.css$': 'identity-obj-proxy', - }, - collectCoverage: true, -}; diff --git a/ee/packages/ddp-client/src/index.ts b/ee/packages/ddp-client/src/index.ts deleted file mode 100644 index 2c0fec409180..000000000000 --- a/ee/packages/ddp-client/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './DDPSDK'; -export * from './legacy/RocketchatSDKLegacy'; -export * from './livechat/LivechatClientImpl'; diff --git a/ee/packages/license/CHANGELOG.md b/ee/packages/license/CHANGELOG.md index b4f56765a6bf..8cc9df0dd502 100644 --- a/ee/packages/license/CHANGELOG.md +++ b/ee/packages/license/CHANGELOG.md @@ -1,5 +1,86 @@ # @rocket.chat/license +## 0.2.3 + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 24f7df4894, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0 +
    + +## 0.2.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 +
    + +## 0.2.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 +
    + +## 0.2.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 +
    + +## 0.2.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 +
    + +## 0.2.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 +
    + +## 0.2.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 +
    + +## 0.2.3-rc.0 + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 24f7df4894, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0-rc.0 +
    + +## 0.2.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-typings@6.10.2 +
    + ## 0.2.1 ### Patch Changes diff --git a/ee/packages/license/jest.config.ts b/ee/packages/license/jest.config.ts index 21121603f6e0..a89df51443e5 100644 --- a/ee/packages/license/jest.config.ts +++ b/ee/packages/license/jest.config.ts @@ -1,16 +1,7 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', - errorOnDeprecated: true, - modulePathIgnorePatterns: ['/dist/'], - testMatch: ['**/**.spec.ts'], - transform: { - '^.+\\.(t|j)sx?$': '@swc/jest', - }, - // transformIgnorePatterns: ['!node_modules/jose'], - moduleNameMapper: { - '\\.css$': 'identity-obj-proxy', - '^jose$': require.resolve('jose'), - }, - collectCoverage: true, - collectCoverageFrom: ['src/**/*.{js,jsx,ts,tsx}'], -}; + preset: server.preset, + modulePathIgnorePatterns: ['/__tests__/MockedLicenseBuilder'], +} satisfies Config; diff --git a/ee/packages/license/package.json b/ee/packages/license/package.json index 9edae84c766d..1c746514d443 100644 --- a/ee/packages/license/package.json +++ b/ee/packages/license/package.json @@ -1,29 +1,24 @@ { "name": "@rocket.chat/license", - "version": "0.2.1", + "version": "0.2.3", "private": true, "devDependencies": { - "@swc/core": "^1.3.95", - "@swc/jest": "^0.2.29", + "@rocket.chat/jest-presets": "workspace:~", "@types/bcrypt": "^5.0.1", - "@types/jest": "~29.5.7", + "@types/jest": "~29.5.12", "@types/ws": "^8.5.8", "eslint": "~8.45.0", - "jest": "~29.6.4", - "jest-environment-jsdom": "~29.6.4", - "jest-websocket-mock": "^2.4.0", - "ts-jest": "~29.1.1", + "jest": "~29.7.0", + "jest-websocket-mock": "~2.5.0", "typescript": "~5.3.3" }, "scripts": { + "build": "tsc", + "dev": "tsc --watch --preserveWatchOutput", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", "test": "jest", - "testunit": "jest", - "build": "npm run build:types && npm run build:js", - "build:types": "tsc --emitDeclarationOnly", - "build:js": "rm -rf dist && tsc -p tsconfig.json", - "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" + "testunit": "jest" }, "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/ee/packages/omnichannel-services/CHANGELOG.md b/ee/packages/omnichannel-services/CHANGELOG.md index 2e6e007ee6da..a4a49de7aa30 100644 --- a/ee/packages/omnichannel-services/CHANGELOG.md +++ b/ee/packages/omnichannel-services/CHANGELOG.md @@ -1,5 +1,149 @@ # @rocket.chat/omnichannel-services +## 0.3.0 + +### Minor Changes + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +### Patch Changes + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Reduced time on generation of PDF transcripts. Earlier Rocket.Chat was fetching the required translations everytime a PDF transcript was requested, this process was async and was being unnecessarily being performed on every pdf transcript request. This PR improves this and now the translations are loaded at the start and kept in memory to process further pdf transcripts requests. This reduces the time of asynchronously fetching translations again and again. + +-
    Updated dependencies [8fc6ca8b4e, 439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/tools@0.2.2 + - @rocket.chat/model-typings@0.6.0 + - @rocket.chat/pdf-worker@0.2.0 + - @rocket.chat/core-services@0.5.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/models@0.2.0 + - @rocket.chat/rest-typings@6.11.0 +
    + +## 0.3.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/rest-typings@6.11.0-rc.6 + - @rocket.chat/pdf-worker@0.2.0-rc.6 + - @rocket.chat/core-services@0.5.0-rc.6 + - @rocket.chat/model-typings@0.6.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 +
    + +## 0.3.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/rest-typings@6.11.0-rc.5 + - @rocket.chat/pdf-worker@0.2.0-rc.5 + - @rocket.chat/core-services@0.5.0-rc.5 + - @rocket.chat/model-typings@0.6.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 +
    + +## 0.3.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/rest-typings@6.11.0-rc.4 + - @rocket.chat/pdf-worker@0.2.0-rc.4 + - @rocket.chat/core-services@0.5.0-rc.4 + - @rocket.chat/model-typings@0.6.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 +
    + +## 0.3.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/rest-typings@6.11.0-rc.3 + - @rocket.chat/pdf-worker@0.2.0-rc.3 + - @rocket.chat/core-services@0.5.0-rc.3 + - @rocket.chat/model-typings@0.6.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 +
    + +## 0.3.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/rest-typings@6.11.0-rc.2 + - @rocket.chat/pdf-worker@0.2.0-rc.2 + - @rocket.chat/core-services@0.5.0-rc.2 + - @rocket.chat/model-typings@0.6.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 +
    + +## 0.3.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/rest-typings@6.11.0-rc.1 + - @rocket.chat/pdf-worker@0.2.0-rc.1 + - @rocket.chat/core-services@0.5.0-rc.1 + - @rocket.chat/model-typings@0.6.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 +
    + +## 0.3.0-rc.0 + +### Minor Changes + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +### Patch Changes + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Reduced time on generation of PDF transcripts. Earlier Rocket.Chat was fetching the required translations everytime a PDF transcript was requested, this process was async and was being unnecessarily being performed on every pdf transcript request. This PR improves this and now the translations are loaded at the start and kept in memory to process further pdf transcripts requests. This reduces the time of asynchronously fetching translations again and again. + +-
    Updated dependencies [8fc6ca8b4e, 439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 03c8b066f9, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/tools@0.2.2-rc.0 + - @rocket.chat/model-typings@0.6.0-rc.0 + - @rocket.chat/pdf-worker@0.2.0-rc.0 + - @rocket.chat/core-services@0.5.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 + - @rocket.chat/rest-typings@6.11.0-rc.0 +
    + +## 0.2.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-services@0.4.2 + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/rest-typings@6.10.2 + - @rocket.chat/pdf-worker@0.1.2 + - @rocket.chat/model-typings@0.5.2 + - @rocket.chat/models@0.1.2 +
    + ## 0.2.1 ### Patch Changes diff --git a/ee/packages/omnichannel-services/jest.config.ts b/ee/packages/omnichannel-services/jest.config.ts index 4f4e7697b108..c18c8ae02465 100644 --- a/ee/packages/omnichannel-services/jest.config.ts +++ b/ee/packages/omnichannel-services/jest.config.ts @@ -1,9 +1,6 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', - errorOnDeprecated: true, - testEnvironment: 'jsdom', - modulePathIgnorePatterns: ['/dist/'], - moduleNameMapper: { - '\\.css$': 'identity-obj-proxy', - }, -}; + preset: server.preset, +} satisfies Config; diff --git a/ee/packages/omnichannel-services/package.json b/ee/packages/omnichannel-services/package.json index 77f06f3354a6..f520d82bd7d3 100644 --- a/ee/packages/omnichannel-services/package.json +++ b/ee/packages/omnichannel-services/package.json @@ -1,13 +1,13 @@ { "name": "@rocket.chat/omnichannel-services", - "version": "0.2.1", + "version": "0.3.0", "private": true, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", - "@types/jest": "~29.5.7", + "@rocket.chat/jest-presets": "workspace:~", + "@types/jest": "~29.5.12", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", + "jest": "~29.7.0", "typescript": "~5.3.3" }, "dependencies": { diff --git a/ee/packages/omnichannel-services/src/OmnichannelTranscript.spec.ts b/ee/packages/omnichannel-services/src/OmnichannelTranscript.spec.ts index 789cd9341690..569e0b4eefe5 100644 --- a/ee/packages/omnichannel-services/src/OmnichannelTranscript.spec.ts +++ b/ee/packages/omnichannel-services/src/OmnichannelTranscript.spec.ts @@ -1,4 +1,3 @@ -import '@testing-library/jest-dom'; import type { IMessage } from '@rocket.chat/core-typings'; import { Logger } from '@rocket.chat/logger'; diff --git a/ee/packages/pdf-worker/CHANGELOG.md b/ee/packages/pdf-worker/CHANGELOG.md index 303b1439c8ce..5ebe251216a7 100644 --- a/ee/packages/pdf-worker/CHANGELOG.md +++ b/ee/packages/pdf-worker/CHANGELOG.md @@ -1,5 +1,90 @@ # @rocket.chat/pdf-worker +## 0.2.0 + +### Minor Changes + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 24f7df4894, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0 +
    + +## 0.2.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 +
    + +## 0.2.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 +
    + +## 0.2.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 +
    + +## 0.2.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 +
    + +## 0.2.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 +
    + +## 0.2.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 +
    + +## 0.2.0-rc.0 + +### Minor Changes + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 24f7df4894, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0-rc.0 +
    +
    + ## 0.1.1 ### Patch Changes diff --git a/ee/packages/pdf-worker/jest.config.ts b/ee/packages/pdf-worker/jest.config.ts index acf158bdd7d8..b8f99e5482c0 100644 --- a/ee/packages/pdf-worker/jest.config.ts +++ b/ee/packages/pdf-worker/jest.config.ts @@ -1,9 +1,22 @@ +import client from '@rocket.chat/jest-presets/client'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', - errorOnDeprecated: true, - testEnvironment: 'jsdom', - modulePathIgnorePatterns: ['/dist/', '/src/worker.spec.ts'], - moduleNameMapper: { - '\\.css$': 'identity-obj-proxy', - }, -}; + projects: [ + { + displayName: 'client', + preset: client.preset, + setupFilesAfterEnv: [...client.setupFilesAfterEnv], + modulePathIgnorePatterns: ['/src/worker.spec.ts'], + }, + { + displayName: 'worker', + preset: client.preset, + setupFilesAfterEnv: [...client.setupFilesAfterEnv], + moduleNameMapper: { + '^fontkit($|/.+)': '/../../../node_modules/fontkit$1', // needed to a weird bug related to module resolution in SWC + }, + modulePathIgnorePatterns: ['/src/strategies/', '/src/templates/'], + }, + ], +} satisfies Config; diff --git a/ee/packages/pdf-worker/jest.worker.config.ts b/ee/packages/pdf-worker/jest.worker.config.ts deleted file mode 100644 index 83706fdd37ec..000000000000 --- a/ee/packages/pdf-worker/jest.worker.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default { - preset: 'ts-jest', - errorOnDeprecated: true, - modulePathIgnorePatterns: ['/dist/', '/src/strategies/', '/src/templates/'], -}; diff --git a/ee/packages/pdf-worker/package.json b/ee/packages/pdf-worker/package.json index a2232520921d..749d48ccc9c2 100644 --- a/ee/packages/pdf-worker/package.json +++ b/ee/packages/pdf-worker/package.json @@ -1,31 +1,29 @@ { "name": "@rocket.chat/pdf-worker", - "version": "0.1.1", + "version": "0.2.0", "private": true, "devDependencies": { + "@rocket.chat/jest-presets": "workspace:~", "@storybook/addon-essentials": "~6.5.16", "@storybook/react": "~6.5.16", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "~13.4.0", + "@testing-library/react": "~16.0.0", "@types/emojione": "^2.2.8", - "@types/jest": "~29.5.7", + "@types/jest": "~29.5.12", + "@types/react": "~17.0.69", "@types/react-dom": "~17.0.22", - "@types/testing-library__jest-dom": "~5.14.9", "eslint": "~8.45.0", - "jest": "~29.6.4", - "jest-environment-jsdom": "~29.6.4", - "react-dom": "^18.2.0", - "ts-jest": "~29.1.1", + "jest": "~29.7.0", + "react-dom": "~18.3.1", "typescript": "~5.3.3" }, "scripts": { + "build": "tsc -p tsconfig.build.json && cp -r src/public dist/public", + "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput", + "typecheck": "tsc --noEmit", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", "test": "jest", - "test:worker": "jest --config ./jest.worker.config.ts", - "testunit": "yarn run test && yarn run test:worker", - "build": "rm -rf dist && tsc -p tsconfig.json && cp -r src/public dist/public", - "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput", + "testunit": "jest", "storybook": "start-storybook -p 6006" }, "main": "./dist/index.js", @@ -37,12 +35,11 @@ "@react-pdf/renderer": "^3.1.14", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/fuselage-tokens": "^0.33.1", - "@types/react": "~17.0.69", "emoji-assets": "^7.0.1", "emoji-toolkit": "^7.0.1", "moment": "^2.29.4", "moment-timezone": "^0.5.43", - "react": "^18.2.0" + "react": "~18.3.1" }, "volta": { "extends": "../../../package.json" diff --git a/ee/packages/pdf-worker/src/strategies/ChatTranscript.spec.ts b/ee/packages/pdf-worker/src/strategies/ChatTranscript.spec.ts index 280c5e9de2f0..8e425c014ec7 100644 --- a/ee/packages/pdf-worker/src/strategies/ChatTranscript.spec.ts +++ b/ee/packages/pdf-worker/src/strategies/ChatTranscript.spec.ts @@ -1,6 +1,5 @@ import moment from 'moment-timezone'; -import '@testing-library/jest-dom'; import { invalidData, validData, newDayData, sameDayData, translationsData } from '../templates/ChatTranscript/ChatTranscript.fixtures'; import { ChatTranscript } from './ChatTranscript'; diff --git a/ee/packages/pdf-worker/src/templates/ChatTranscript/components/Files.spec.tsx b/ee/packages/pdf-worker/src/templates/ChatTranscript/components/Files.spec.tsx index 16b5b92c5de9..4a2273ac65e5 100644 --- a/ee/packages/pdf-worker/src/templates/ChatTranscript/components/Files.spec.tsx +++ b/ee/packages/pdf-worker/src/templates/ChatTranscript/components/Files.spec.tsx @@ -1,7 +1,6 @@ import { render } from '@testing-library/react'; import type { ReactNode } from 'react'; -import '@testing-library/jest-dom'; import { invalidFile, validFile } from '../ChatTranscript.fixtures'; import { Files } from './Files'; diff --git a/ee/packages/pdf-worker/src/templates/ChatTranscript/components/MessageList.spec.tsx b/ee/packages/pdf-worker/src/templates/ChatTranscript/components/MessageList.spec.tsx index 0fb01f87d6da..49994e1c69fe 100644 --- a/ee/packages/pdf-worker/src/templates/ChatTranscript/components/MessageList.spec.tsx +++ b/ee/packages/pdf-worker/src/templates/ChatTranscript/components/MessageList.spec.tsx @@ -1,6 +1,5 @@ import { render } from '@testing-library/react'; -import '@testing-library/jest-dom'; import { invalidFile, validFile, validMessage, validSystemMessage } from '../ChatTranscript.fixtures'; import { MessageList } from './MessageList'; diff --git a/ee/packages/pdf-worker/src/worker.spec.ts b/ee/packages/pdf-worker/src/worker.spec.ts index 8dc197d79588..d880700194be 100644 --- a/ee/packages/pdf-worker/src/worker.spec.ts +++ b/ee/packages/pdf-worker/src/worker.spec.ts @@ -1,4 +1,6 @@ -import fs from 'fs'; +import { mkdtemp, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; import { PdfWorker } from './index'; import { @@ -18,70 +20,71 @@ const streamToBuffer = async (stream: NodeJS.ReadableStream) => { return Buffer.concat(chunks as Buffer[]); }; -jest.mock('@rocket.chat/core-services', () => ({ - Translation: { - translateToServerLanguage: (e: string) => e, - }, -})); - const pdfWorker = new PdfWorker('chat-transcript'); -describe('PdfWorker', () => { - it('should fail to instantiate if no mode is provided', () => { - // @ts-expect-error - testing - expect(() => new PdfWorker('')).toThrow(); - }); - it('should fail to instantiate if mode is invalid', () => { - // @ts-expect-error - testing - expect(() => new PdfWorker('invalid')).toThrow(); - }); - it('should properly instantiate', () => { - const newWorker = new PdfWorker('chat-transcript'); +it('should fail to instantiate if no mode is provided', () => { + // @ts-expect-error - testing + expect(() => new PdfWorker('')).toThrow(); +}); - expect(newWorker).toBeInstanceOf(PdfWorker); - expect(newWorker.mode).toBe('chat-transcript'); - }); - it('should generate a pdf transcript for a big bunch of messages', async () => { - const stream = await pdfWorker.renderToStream({ data: bigConversationData }); - const buffer = await streamToBuffer(stream); +it('should fail to instantiate if mode is invalid', () => { + // @ts-expect-error - testing + expect(() => new PdfWorker('invalid')).toThrow(); +}); - expect(buffer).toBeTruthy(); - }); - it('should generate a pdf transcript for a single message, but a really long message', async () => { - const stream = await pdfWorker.renderToStream({ data: dataWithASingleMessageButAReallyLongMessage }); - const buffer = await streamToBuffer(stream); +it('should properly instantiate', () => { + const newWorker = new PdfWorker('chat-transcript'); - expect(buffer).toBeTruthy(); - }); + expect(newWorker).toBeInstanceOf(PdfWorker); + expect(newWorker.mode).toBe('chat-transcript'); +}); - it('should generate a pdf transcript of a single message with an image', async () => { - const stream = await pdfWorker.renderToStream({ data: dataWithASingleMessageAndAnImage }); - const buffer = await streamToBuffer(stream); +it('should generate a pdf transcript for a big bunch of messages', async () => { + const stream = await pdfWorker.renderToStream({ data: bigConversationData }); + const buffer = await streamToBuffer(stream); - fs.writeFileSync('test.pdf', buffer); - expect(buffer).toBeTruthy(); - }); + expect(buffer).toBeTruthy(); +}, 10000); - it('should generate a pdf transcript for multiple messages, one big message and 2 small messages', async () => { - const stream = await pdfWorker.renderToStream({ data: dataWithMultipleMessagesAndABigMessage }); - const buffer = await streamToBuffer(stream); +it('should generate a pdf transcript for a single message, but a really long message', async () => { + const stream = await pdfWorker.renderToStream({ data: dataWithASingleMessageButAReallyLongMessage }); + const buffer = await streamToBuffer(stream); - expect(buffer).toBeTruthy(); - }); + expect(buffer).toBeTruthy(); +}, 10000); + +it('should generate a pdf transcript of a single message with an image', async () => { + const stream = await pdfWorker.renderToStream({ data: dataWithASingleMessageAndAnImage }); + const buffer = await streamToBuffer(stream); + + expect(buffer).toBeTruthy(); + + const tempDir = await mkdtemp(join(tmpdir(), 'pdf-worker')); + const tempFile = join(tempDir, 'test.pdf'); + // console.log(tempFile); + await writeFile(tempFile, buffer); +}, 10000); - it('should generate a pdf transcript for a single system message', async () => { - const stream = await pdfWorker.renderToStream({ data: dataWithASingleSystemMessage }); - const buffer = await streamToBuffer(stream); +it('should generate a pdf transcript for multiple messages, one big message and 2 small messages', async () => { + const stream = await pdfWorker.renderToStream({ data: dataWithMultipleMessagesAndABigMessage }); + const buffer = await streamToBuffer(stream); + + expect(buffer).toBeTruthy(); +}, 10000); + +it('should generate a pdf transcript for a single system message', async () => { + const stream = await pdfWorker.renderToStream({ data: dataWithASingleSystemMessage }); + const buffer = await streamToBuffer(stream); + + expect(buffer).toBeTruthy(); +}); - expect(buffer).toBeTruthy(); +describe('isMimeTypeValid', () => { + it('should return true if mimeType is valid', () => { + expect(pdfWorker.isMimeTypeValid('image/png')).toBe(true); }); - describe('isMimeTypeValid', () => { - it('should return true if mimeType is valid', () => { - expect(pdfWorker.isMimeTypeValid('image/png')).toBe(true); - }); - it('should return false if mimeType is not valid', () => { - expect(pdfWorker.isMimeTypeValid('image/svg')).toBe(false); - }); + it('should return false if mimeType is not valid', () => { + expect(pdfWorker.isMimeTypeValid('image/svg')).toBe(false); }); }); diff --git a/ee/packages/pdf-worker/test.pdf b/ee/packages/pdf-worker/test.pdf new file mode 100644 index 000000000000..a4cb0d90fce4 Binary files /dev/null and b/ee/packages/pdf-worker/test.pdf differ diff --git a/ee/packages/pdf-worker/tsconfig.build.json b/ee/packages/pdf-worker/tsconfig.build.json new file mode 100644 index 000000000000..3c11f201b746 --- /dev/null +++ b/ee/packages/pdf-worker/tsconfig.build.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist", + "declaration": true, + "declarationMap": true + }, + "include": ["./src/**/*"], + "exclude": ["./src/**/*.spec.ts", "./src/**/*.spec.tsx"], +} diff --git a/ee/packages/pdf-worker/tsconfig.json b/ee/packages/pdf-worker/tsconfig.json index 64ec0d793b2f..a59de9bb7935 100644 --- a/ee/packages/pdf-worker/tsconfig.json +++ b/ee/packages/pdf-worker/tsconfig.json @@ -1,10 +1,6 @@ { "extends": "../../../tsconfig.base.server.json", "compilerOptions": { - "declaration": true, - "rootDir": "./src", - "outDir": "./dist", - "jsx": "react-jsx", - }, - "include": ["./src/**/*"] + "jsx": "react-jsx" + } } diff --git a/ee/packages/presence/CHANGELOG.md b/ee/packages/presence/CHANGELOG.md index 22ea508bd15c..3d1a7e35b705 100644 --- a/ee/packages/presence/CHANGELOG.md +++ b/ee/packages/presence/CHANGELOG.md @@ -1,5 +1,116 @@ # @rocket.chat/presence +## 0.2.3 + +### Patch Changes + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [03c8b066f9, 2d89a0c448, 24f7df4894, 03c8b066f9, b8e5887fb9]: + + - @rocket.chat/core-services@0.5.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/models@0.2.0 +
    + +## 0.2.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/core-services@0.5.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 +
    + +## 0.2.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/core-services@0.5.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 +
    + +## 0.2.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/core-services@0.5.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 +
    + +## 0.2.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/core-services@0.5.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 +
    + +## 0.2.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/core-services@0.5.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 +
    + +## 0.2.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/core-services@0.5.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 +
    + +## 0.2.3-rc.0 + +### Patch Changes + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [03c8b066f9, 2d89a0c448, 24f7df4894, 03c8b066f9, b8e5887fb9]: + + - @rocket.chat/core-services@0.5.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 +
    + +## 0.2.2 + +### Patch Changes + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from being updated or uninstalled in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from handling errors during execution in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Improved Apps-Engine installation to prevent start up errors on manual installation setups + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that caused the video conference button on rooms to not recognize a video conference provider app in some cases + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-services@0.4.2 + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/models@0.1.2 +
    + ## 0.2.1 ### Patch Changes diff --git a/ee/packages/presence/jest.config.ts b/ee/packages/presence/jest.config.ts new file mode 100644 index 000000000000..c18c8ae02465 --- /dev/null +++ b/ee/packages/presence/jest.config.ts @@ -0,0 +1,6 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + +export default { + preset: server.preset, +} satisfies Config; diff --git a/ee/packages/presence/package.json b/ee/packages/presence/package.json index 8f65fb638eaf..21f1883b6704 100644 --- a/ee/packages/presence/package.json +++ b/ee/packages/presence/package.json @@ -1,27 +1,27 @@ { "name": "@rocket.chat/presence", - "version": "0.2.1", + "version": "0.2.3", "private": true, "devDependencies": { "@babel/core": "~7.22.20", "@babel/preset-env": "~7.22.20", "@babel/preset-typescript": "~7.22.15", - "@rocket.chat/apps-engine": "alpha", + "@rocket.chat/apps-engine": "1.44.0", "@rocket.chat/eslint-config": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", "@types/node": "^14.18.63", "babel-jest": "^29.0.3", "eslint": "~8.45.0", - "jest": "~29.6.4", + "jest": "~29.7.0", "typescript": "~5.3.3" }, "scripts": { "lint": "eslint src", "lint:fix": "eslint src --fix", "test": "jest", - "build": "tsc -p tsconfig.json", - "testunit": "jest tests/**/*.test.ts", - "typecheck": "tsc --noEmit --skipLibCheck -p tsconfig.json" + "build": "tsc", + "testunit": "jest", + "typecheck": "tsc --noEmit --skipLibCheck" }, "main": "./dist/Presence.js", "typings": "./dist/Presence.d.ts", diff --git a/ee/packages/ui-theming/package.json b/ee/packages/ui-theming/package.json index 601d6307750a..d1929c8b93f0 100644 --- a/ee/packages/ui-theming/package.json +++ b/ee/packages/ui-theming/package.json @@ -4,37 +4,23 @@ "private": true, "devDependencies": { "@rocket.chat/css-in-js": "~0.31.25", - "@rocket.chat/fuselage": "^0.56.0", + "@rocket.chat/fuselage": "^0.57.0", "@rocket.chat/fuselage-hooks": "^0.33.1", "@rocket.chat/icons": "^0.36.0", "@rocket.chat/ui-contexts": "workspace:~", - "@storybook/addon-actions": "~6.5.16", - "@storybook/addon-docs": "~6.5.16", - "@storybook/addon-essentials": "~6.5.16", - "@storybook/addon-interactions": "~6.5.16", - "@storybook/addon-links": "~6.5.16", - "@storybook/addon-postcss": "~2.0.0", - "@storybook/builder-webpack4": "~6.5.16", - "@storybook/manager-webpack4": "~6.5.16", - "@storybook/react": "~6.5.16", - "@storybook/testing-library": "~0.0.13", - "@types/jest": "~29.5.7", "@types/react": "~17.0.69", "eslint": "~8.45.0", "eslint-plugin-anti-trojan-source": "~1.1.1", "eslint-plugin-react": "~7.32.2", "eslint-plugin-react-hooks": "~4.6.0", "eslint-plugin-testing-library": "^5.11.1", - "jest": "~29.6.4", "react": "~17.0.2", "react-docgen-typescript-plugin": "~1.0.5", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "build": "rm -rf dist && tsc -p tsconfig-build.json", "dev": "tsc -p tsconfig-build.json --watch --preserveWatchOutput" }, diff --git a/ee/packages/ui-theming/src/hooks/useCreateStyleContainer.ts b/ee/packages/ui-theming/src/hooks/useCreateStyleContainer.ts deleted file mode 100644 index aaa37df66ae6..000000000000 --- a/ee/packages/ui-theming/src/hooks/useCreateStyleContainer.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { useMemo } from 'react'; - -export const useCreateStyleContainer = (id: string) => { - return useMemo(() => { - const refElement = document.getElementById('rcx-styles') || document.head.lastChild; - - const el = document.getElementById(id); - - if (el) { - return el; - } - - const styleElement = document.createElement('style'); - styleElement.setAttribute('id', id); - - document.head.insertBefore(styleElement, refElement); - document.head.appendChild(document.createElement('style')); - return styleElement; - }, [id]); -}; diff --git a/ee/packages/ui-theming/src/hooks/useLayoutVariables.ts b/ee/packages/ui-theming/src/hooks/useLayoutVariables.ts deleted file mode 100644 index e0d8310c41e0..000000000000 --- a/ee/packages/ui-theming/src/hooks/useLayoutVariables.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { useSetting } from '@rocket.chat/ui-contexts'; - -export const useLayoutPalette = () => { - const setting = String(useSetting('Layout_Fuselage_Palette') || '{}'); - - return JSON.parse(setting); -}; diff --git a/ee/packages/ui-theming/src/hooks/useSetLayoutSetting.ts b/ee/packages/ui-theming/src/hooks/useSetLayoutSetting.ts deleted file mode 100644 index 1810273bbfe7..000000000000 --- a/ee/packages/ui-theming/src/hooks/useSetLayoutSetting.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { useEndpoint } from '@rocket.chat/ui-contexts'; - -export const useSetLayoutSetting = (): (({ value }: { value: string }) => void) => { - return useEndpoint('POST', '/v1/settings/:_id', { _id: 'Layout_Fuselage_Palette' }); -}; diff --git a/ee/packages/ui-theming/src/hooks/useThemeMode.ts b/ee/packages/ui-theming/src/hooks/useThemeMode.ts index 63cf01bf6eb2..ca60d7845d4a 100644 --- a/ee/packages/ui-theming/src/hooks/useThemeMode.ts +++ b/ee/packages/ui-theming/src/hooks/useThemeMode.ts @@ -1,6 +1,6 @@ +import type { ThemePreference as ThemeMode, Themes } from '@rocket.chat/core-typings'; import { useDarkMode } from '@rocket.chat/fuselage-hooks'; import { useEndpoint, useUserPreference } from '@rocket.chat/ui-contexts'; -import type { ThemePreference as ThemeMode, Themes } from '@rocket.chat/ui-theming/src/types/themes'; import { useCallback, useState } from 'react'; /** diff --git a/ee/packages/ui-theming/src/index.ts b/ee/packages/ui-theming/src/index.ts new file mode 100644 index 000000000000..a3c440cc2e49 --- /dev/null +++ b/ee/packages/ui-theming/src/index.ts @@ -0,0 +1 @@ +export * from './hooks/useThemeMode'; diff --git a/fuselage.sh b/fuselage.sh index 17c912745b9e..fdcd559a3b5b 100755 --- a/fuselage.sh +++ b/fuselage.sh @@ -94,11 +94,10 @@ echo "đŸ“Ļ @rocket.chat/emitter [UPDATING to $targetVersion version...] đŸ“Ļ @rocket.chat/message-parser [UPDATING to $targetVersion version...] đŸ“Ļ @rocket.chat/onboarding-ui [UPDATING to $targetVersion version...] đŸ“Ļ @rocket.chat/string-helpers [UPDATING to $targetVersion version...] -đŸ“Ļ @rocket.chat/ui-kit [UPDATING to $targetVersion version...] đŸ“Ļ @rocket.chat/layout [UPDATING to $targetVersion version...] đŸ“Ļ @rocket.chat/message-parser [UPDATING to $targetVersion version...]" - eval "yarn up @rocket.chat/emitter@$targetVersion @rocket.chat/fuselage-polyfills@$targetVersion @rocket.chat/fuselage-toastbar@$targetVersion @rocket.chat/fuselage-tokens@$targetVersion @rocket.chat/css-in-js@$targetVersion @rocket.chat/styled@$targetVersion @rocket.chat/fuselage@$targetVersion @rocket.chat/fuselage-hooks@$targetVersion @rocket.chat/icons@$targetVersion @rocket.chat/logo@$targetVersion @rocket.chat/memo@$targetVersion @rocket.chat/message-parser@$targetVersion @rocket.chat/onboarding-ui@$targetVersion @rocket.chat/string-helpers@$targetVersion @rocket.chat/ui-kit@$targetVersion @rocket.chat/layout@$targetVersion @rocket.chat/message-parser@$targetVersion" + eval "yarn up @rocket.chat/emitter@$targetVersion @rocket.chat/fuselage-polyfills@$targetVersion @rocket.chat/fuselage-toastbar@$targetVersion @rocket.chat/fuselage-tokens@$targetVersion @rocket.chat/css-in-js@$targetVersion @rocket.chat/styled@$targetVersion @rocket.chat/fuselage@$targetVersion @rocket.chat/fuselage-hooks@$targetVersion @rocket.chat/icons@$targetVersion @rocket.chat/logo@$targetVersion @rocket.chat/memo@$targetVersion @rocket.chat/message-parser@$targetVersion @rocket.chat/onboarding-ui@$targetVersion @rocket.chat/string-helpers@$targetVersion @rocket.chat/layout@$targetVersion @rocket.chat/message-parser@$targetVersion" exit 1 fi diff --git a/package.json b/package.json index f5a9cdcb9353..29de436373e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rocket.chat", - "version": "6.11.0-develop", + "version": "6.12.0-develop", "description": "Rocket.Chat Monorepo", "main": "index.js", "private": true, @@ -9,8 +9,8 @@ "build:services": "turbo run build --filter=rocketchat-services...", "build:ci": "turbo run build:ci", "testunit": "turbo run testunit", - "dev": "turbo run dev --parallel --filter=@rocket.chat/meteor...", - "dsv": "turbo run dsv --filter=@rocket.chat/meteor...", + "dev": "turbo run dev --env-mode=loose --parallel --filter=@rocket.chat/meteor...", + "dsv": "turbo run dsv --env-mode=loose --filter=@rocket.chat/meteor...", "lint": "turbo run lint", "storybook": "yarn workspace @rocket.chat/meteor run storybook", "fuselage": "./fuselage.sh", @@ -21,7 +21,7 @@ "@types/chart.js": "^2.9.39", "@types/js-yaml": "^4.0.8", "ts-node": "^10.9.2", - "turbo": "^1.12.4" + "turbo": "latest" }, "workspaces": [ "apps/*", diff --git a/packages/account-utils/package.json b/packages/account-utils/package.json index d6c8161f264c..e33876a02d28 100644 --- a/packages/account-utils/package.json +++ b/packages/account-utils/package.json @@ -3,16 +3,12 @@ "version": "0.0.2", "private": true, "devDependencies": { - "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "build": "rm -rf dist && tsc -p tsconfig.json", "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" }, diff --git a/packages/agenda/package.json b/packages/agenda/package.json index 7351f373c861..71b8b01bd6b0 100644 --- a/packages/agenda/package.json +++ b/packages/agenda/package.json @@ -13,16 +13,12 @@ }, "devDependencies": { "@types/debug": "^4.1.10", - "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "build": "rm -rf dist && tsc -p tsconfig.json" }, "main": "./dist/index.js", diff --git a/ee/packages/api-client/.eslintrc.json b/packages/api-client/.eslintrc.json similarity index 100% rename from ee/packages/api-client/.eslintrc.json rename to packages/api-client/.eslintrc.json diff --git a/ee/packages/api-client/CHANGELOG.md b/packages/api-client/CHANGELOG.md similarity index 90% rename from ee/packages/api-client/CHANGELOG.md rename to packages/api-client/CHANGELOG.md index d8c8b8a88e86..8fe130aeaf28 100644 --- a/ee/packages/api-client/CHANGELOG.md +++ b/packages/api-client/CHANGELOG.md @@ -1,5 +1,95 @@ # @rocket.chat/api-client +## 0.2.3 + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 24f7df4894, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/rest-typings@6.11.0 +
    + +## 0.2.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/rest-typings@6.11.0-rc.6 +
    + +## 0.2.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/rest-typings@6.11.0-rc.5 +
    + +## 0.2.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/rest-typings@6.11.0-rc.4 +
    + +## 0.2.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/rest-typings@6.11.0-rc.3 +
    + +## 0.2.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/rest-typings@6.11.0-rc.2 +
    + +## 0.2.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/rest-typings@6.11.0-rc.1 +
    + +## 0.2.3-rc.0 + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 24f7df4894, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/rest-typings@6.11.0-rc.0 +
    + +## 0.2.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/rest-typings@6.10.2 +
    + ## 0.2.1 ### Patch Changes diff --git a/ee/packages/api-client/LICENSE b/packages/api-client/LICENSE similarity index 100% rename from ee/packages/api-client/LICENSE rename to packages/api-client/LICENSE diff --git a/ee/packages/api-client/__tests__/2fahandling.spec.ts b/packages/api-client/__tests__/2fahandling.spec.ts similarity index 100% rename from ee/packages/api-client/__tests__/2fahandling.spec.ts rename to packages/api-client/__tests__/2fahandling.spec.ts diff --git a/packages/api-client/jest.config.ts b/packages/api-client/jest.config.ts new file mode 100644 index 000000000000..2905f298e766 --- /dev/null +++ b/packages/api-client/jest.config.ts @@ -0,0 +1,7 @@ +import client from '@rocket.chat/jest-presets/client'; +import type { Config } from 'jest'; + +export default { + preset: client.preset, + setupFilesAfterEnv: [...client.setupFilesAfterEnv], +} satisfies Config; diff --git a/ee/packages/api-client/package.json b/packages/api-client/package.json similarity index 69% rename from ee/packages/api-client/package.json rename to packages/api-client/package.json index 0e17632218e2..43de20583d47 100644 --- a/ee/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -1,23 +1,22 @@ { "name": "@rocket.chat/api-client", - "version": "0.2.1", + "version": "0.2.3", "devDependencies": { - "@swc/core": "^1.3.95", - "@swc/jest": "^0.2.29", - "@types/jest": "~29.5.7", + "@rocket.chat/jest-presets": "workspace:~", + "@types/jest": "~29.5.12", "@types/strict-uri-encode": "^2.0.1", "eslint": "~8.45.0", - "jest": "~29.6.4", + "jest": "~29.7.0", "jest-fetch-mock": "^3.0.3", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { + "build": "tsc", + "dev": "tsc --watch --preserveWatchOutput", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "testunit": "jest", - "build": "tsc -p tsconfig.json", - "dev": "tsc --watch --preserveWatchOutput -p tsconfig.json" + "test": "jest", + "testunit": "jest" }, "main": "./dist/index.js", "typings": "./dist/index.d.ts", @@ -31,5 +30,8 @@ "query-string": "^7.1.3", "split-on-first": "^3.0.0", "strict-uri-encode": "^2.0.0" + }, + "volta": { + "extends": "../../../package.json" } } diff --git a/ee/packages/api-client/src/Credentials.ts b/packages/api-client/src/Credentials.ts similarity index 100% rename from ee/packages/api-client/src/Credentials.ts rename to packages/api-client/src/Credentials.ts diff --git a/ee/packages/api-client/src/RestClientInterface.ts b/packages/api-client/src/RestClientInterface.ts similarity index 100% rename from ee/packages/api-client/src/RestClientInterface.ts rename to packages/api-client/src/RestClientInterface.ts diff --git a/ee/packages/api-client/src/errors.ts b/packages/api-client/src/errors.ts similarity index 100% rename from ee/packages/api-client/src/errors.ts rename to packages/api-client/src/errors.ts diff --git a/ee/packages/api-client/src/index.ts b/packages/api-client/src/index.ts similarity index 100% rename from ee/packages/api-client/src/index.ts rename to packages/api-client/src/index.ts diff --git a/ee/packages/api-client/tsconfig.json b/packages/api-client/tsconfig.json similarity index 71% rename from ee/packages/api-client/tsconfig.json rename to packages/api-client/tsconfig.json index b397e2c4421f..9d8ef0c3a373 100644 --- a/ee/packages/api-client/tsconfig.json +++ b/packages/api-client/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.client.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { "module": "commonjs", "rootDir": "./src", diff --git a/packages/apps/CHANGELOG.md b/packages/apps/CHANGELOG.md index 606c404b9dc7..07f4af49f31e 100644 --- a/packages/apps/CHANGELOG.md +++ b/packages/apps/CHANGELOG.md @@ -1,5 +1,107 @@ # @rocket.chat/apps +## 0.1.3 + +### Patch Changes + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0 + - @rocket.chat/core-typings@6.11.0 +
    + +## 0.1.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/model-typings@0.6.0-rc.6 +
    + +## 0.1.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/model-typings@0.6.0-rc.5 +
    + +## 0.1.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/model-typings@0.6.0-rc.4 +
    + +## 0.1.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/model-typings@0.6.0-rc.3 +
    + +## 0.1.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/model-typings@0.6.0-rc.2 +
    + +## 0.1.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/model-typings@0.6.0-rc.1 +
    + +## 0.1.3-rc.0 + +### Patch Changes + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 24f7df4894, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/model-typings@0.6.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 +
    + +## 0.1.2 + +### Patch Changes + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from being updated or uninstalled in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from handling errors during execution in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Improved Apps-Engine installation to prevent start up errors on manual installation setups + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that caused the video conference button on rooms to not recognize a video conference provider app in some cases + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/model-typings@0.5.2 +
    + ## 0.1.1 ### Patch Changes diff --git a/packages/apps/package.json b/packages/apps/package.json index a2f0e1c0c8d0..15289501be4c 100644 --- a/packages/apps/package.json +++ b/packages/apps/package.json @@ -1,18 +1,14 @@ { "name": "@rocket.chat/apps", - "version": "0.1.1", + "version": "0.1.3", "private": true, "devDependencies": { - "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "build": "rm -rf dist && tsc -p tsconfig.json", "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" }, @@ -22,7 +18,7 @@ "/dist" ], "dependencies": { - "@rocket.chat/apps-engine": "alpha", + "@rocket.chat/apps-engine": "1.44.0", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/model-typings": "workspace:^" } diff --git a/packages/base64/jest.config.ts b/packages/base64/jest.config.ts index 959a31a7c6bf..c18c8ae02465 100644 --- a/packages/base64/jest.config.ts +++ b/packages/base64/jest.config.ts @@ -1,3 +1,6 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', -}; + preset: server.preset, +} satisfies Config; diff --git a/packages/base64/package.json b/packages/base64/package.json index a7fd818270f1..c58a652877a3 100644 --- a/packages/base64/package.json +++ b/packages/base64/package.json @@ -16,11 +16,11 @@ "@babel/core": "~7.22.20", "@babel/preset-env": "~7.22.20", "@rocket.chat/eslint-config": "workspace:^", + "@rocket.chat/jest-presets": "workspace:~", "@typescript-eslint/eslint-plugin": "~5.60.1", "@typescript-eslint/parser": "~5.60.1", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", + "jest": "~29.7.0", "typescript": "~5.3.3" }, "volta": { diff --git a/packages/cas-validate/package.json b/packages/cas-validate/package.json index 8459c72ab4ea..769b74d38e56 100644 --- a/packages/cas-validate/package.json +++ b/packages/cas-validate/package.json @@ -4,16 +4,12 @@ "version": "0.0.2", "private": true, "devDependencies": { - "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "build": "rm -rf dist && tsc -p tsconfig.json", "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" }, diff --git a/packages/core-services/CHANGELOG.md b/packages/core-services/CHANGELOG.md index ae47a828656c..0c10b78c3bf4 100644 --- a/packages/core-services/CHANGELOG.md +++ b/packages/core-services/CHANGELOG.md @@ -1,5 +1,140 @@ # @rocket.chat/core-services +## 0.5.0 + +### Minor Changes + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Reduced time on generation of PDF transcripts. Earlier Rocket.Chat was fetching the required translations everytime a PDF transcript was requested, this process was async and was being unnecessarily being performed on every pdf transcript request. This PR improves this and now the translations are loaded at the start and kept in memory to process further pdf transcripts requests. This reduces the time of asynchronously fetching translations again and again. + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [2d89a0c448, 24f7df4894, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/models@0.2.0 + - @rocket.chat/ui-kit@0.36.0 + - @rocket.chat/rest-typings@6.11.0 +
    + +## 0.5.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/rest-typings@6.11.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 +
    + +## 0.5.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/rest-typings@6.11.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 +
    + +## 0.5.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/rest-typings@6.11.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 +
    + +## 0.5.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/rest-typings@6.11.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 +
    + +## 0.5.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/rest-typings@6.11.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 +
    + +## 0.5.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/rest-typings@6.11.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 +
    + +## 0.5.0-rc.0 + +### Minor Changes + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Reduced time on generation of PDF transcripts. Earlier Rocket.Chat was fetching the required translations everytime a PDF transcript was requested, this process was async and was being unnecessarily being performed on every pdf transcript request. This PR improves this and now the translations are loaded at the start and kept in memory to process further pdf transcripts requests. This reduces the time of asynchronously fetching translations again and again. + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [2d89a0c448, 24f7df4894, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 + - @rocket.chat/ui-kit@0.36.0-rc.0 + - @rocket.chat/rest-typings@6.11.0-rc.0 +
    + +## 0.4.2 + +### Patch Changes + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from being updated or uninstalled in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from handling errors during execution in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Improved Apps-Engine installation to prevent start up errors on manual installation setups + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that caused the video conference button on rooms to not recognize a video conference provider app in some cases + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/rest-typings@6.10.2 + - @rocket.chat/models@0.1.2 +
    + ## 0.4.1 ### Patch Changes diff --git a/packages/core-services/jest.config.ts b/packages/core-services/jest.config.ts new file mode 100644 index 000000000000..c18c8ae02465 --- /dev/null +++ b/packages/core-services/jest.config.ts @@ -0,0 +1,6 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + +export default { + preset: server.preset, +} satisfies Config; diff --git a/packages/core-services/package.json b/packages/core-services/package.json index 6ab8444cd5a7..d576f87bef27 100644 --- a/packages/core-services/package.json +++ b/packages/core-services/package.json @@ -1,18 +1,19 @@ { "name": "@rocket.chat/core-services", - "version": "0.4.1", + "version": "0.5.0", "private": true, "devDependencies": { "@babel/core": "~7.22.20", "@babel/preset-env": "~7.22.20", "@babel/preset-typescript": "~7.22.15", "@rocket.chat/eslint-config": "workspace:^", + "@rocket.chat/jest-presets": "workspace:~", "@types/babel__core": "^7.20.3", "@types/babel__preset-env": "^7.9.4", - "@types/jest": "~29.5.7", + "@types/jest": "~29.5.12", "babel-jest": "^29.5.0", "eslint": "~8.45.0", - "jest": "~29.6.4", + "jest": "~29.7.0", "mongodb": "^4.17.2", "prettier": "~2.8.8", "typescript": "~5.3.3" @@ -20,10 +21,9 @@ "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "jest": "jest", - "testunit": "jest --verbose tests/**/*.test.ts", - "dev": "tsc --watch --preserveWatchOutput -p tsconfig.json", - "build": "rm -rf dist && tsc -p tsconfig.json" + "testunit": "jest", + "dev": "tsc --watch --preserveWatchOutput", + "build": "rm -rf dist && tsc" }, "main": "./dist/index.js", "typings": "./dist/index.d.ts", @@ -34,7 +34,7 @@ "extends": "../../package.json" }, "dependencies": { - "@rocket.chat/apps-engine": "alpha", + "@rocket.chat/apps-engine": "1.44.0", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/icons": "^0.36.0", "@rocket.chat/message-parser": "workspace:^", diff --git a/packages/core-services/src/types/IFederationService.ts b/packages/core-services/src/types/IFederationService.ts index a30b03717822..5563bd60db40 100644 --- a/packages/core-services/src/types/IFederationService.ts +++ b/packages/core-services/src/types/IFederationService.ts @@ -4,6 +4,8 @@ export interface IFederationService { createDirectMessageRoomAndInviteUser(internalInviterId: string, internalRoomId: string, externalInviteeId: string): Promise; verifyMatrixIds(matrixIds: string[]): Promise>; + + deactivateRemoteUser(userId: string): Promise; } export interface IFederationJoinExternalPublicRoomInput { @@ -38,4 +40,6 @@ export interface IFederationServiceEE { joinExternalPublicRoom(input: IFederationJoinExternalPublicRoomInput): Promise; verifyMatrixIds(matrixIds: string[]): Promise>; + + deactivateRemoteUser(userId: string): Promise; } diff --git a/packages/core-services/src/types/IMessageService.ts b/packages/core-services/src/types/IMessageService.ts index b38d6a9559d6..0563fc6f148d 100644 --- a/packages/core-services/src/types/IMessageService.ts +++ b/packages/core-services/src/types/IMessageService.ts @@ -8,7 +8,14 @@ export interface IMessageService { message: string, user: Pick, extraData?: Partial, - ): Promise; + ): Promise; + saveSystemMessageAndNotifyUser( + type: MessageTypesValues, + rid: string, + message: string, + user: Pick, + extraData?: Partial, + ): Promise; beforeSave(param: { message: IMessage; room: IRoom; user: IUser }): Promise; sendMessageWithValidation(user: IUser, message: Partial, room: Partial, upsert?: boolean): Promise; deleteMessage(user: IUser, message: IMessage): Promise; diff --git a/packages/core-services/src/types/IRoomService.ts b/packages/core-services/src/types/IRoomService.ts index 3acb7edbfcbe..23186590af50 100644 --- a/packages/core-services/src/types/IRoomService.ts +++ b/packages/core-services/src/types/IRoomService.ts @@ -24,6 +24,7 @@ export interface ICreateRoomParams { readOnly?: boolean; extraData?: Partial; options?: ICreateRoomOptions; + sidepanel?: IRoom['sidepanel']; } export interface IRoomService { addMember(uid: string, rid: string): Promise; diff --git a/packages/core-services/src/types/ITeamService.ts b/packages/core-services/src/types/ITeamService.ts index 98747a385b59..2d67bf515fca 100644 --- a/packages/core-services/src/types/ITeamService.ts +++ b/packages/core-services/src/types/ITeamService.ts @@ -23,6 +23,7 @@ export interface ITeamCreateParams { room: ITeamCreateRoom; members?: Array | null; // list of user _ids owner?: string | null; // the team owner. If not present, owner = requester + sidepanel?: IRoom['sidepanel']; } export interface ITeamMemberParams { diff --git a/packages/core-typings/CHANGELOG.md b/packages/core-typings/CHANGELOG.md index 40578e341608..fb313a4d1320 100644 --- a/packages/core-typings/CHANGELOG.md +++ b/packages/core-typings/CHANGELOG.md @@ -1,5 +1,65 @@ # @rocket.chat/core-typings +## 6.11.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +- ([#32328](https://github.com/RocketChat/Rocket.Chat/pull/32328)) Allow customFields on livechat creation bridge + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [2d89a0c448]: + + - @rocket.chat/ui-kit@0.36.0 +
    + +## 6.11.0-rc.6 + +## 6.11.0-rc.5 + +## 6.11.0-rc.4 + +## 6.11.0-rc.3 + +## 6.11.0-rc.2 + +## 6.11.0-rc.1 + +## 6.11.0-rc.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +- ([#32328](https://github.com/RocketChat/Rocket.Chat/pull/32328)) Allow customFields on livechat creation bridge + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [2d89a0c448]: + + - @rocket.chat/ui-kit@0.36.0-rc.0 +
    + +## 6.10.2 + +### Patch Changes + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from being updated or uninstalled in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from handling errors during execution in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Improved Apps-Engine installation to prevent start up errors on manual installation setups + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that caused the video conference button on rooms to not recognize a video conference provider app in some cases + ## 6.10.1 ## 6.10.0 diff --git a/packages/core-typings/package.json b/packages/core-typings/package.json index 7932b00b7e5f..267e75e5c177 100644 --- a/packages/core-typings/package.json +++ b/packages/core-typings/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package", "name": "@rocket.chat/core-typings", - "version": "6.11.0-develop", + "version": "6.12.0-develop", "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", "eslint": "~8.45.0", @@ -22,7 +22,7 @@ "/dist" ], "dependencies": { - "@rocket.chat/apps-engine": "alpha", + "@rocket.chat/apps-engine": "1.44.0", "@rocket.chat/icons": "^0.36.0", "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/ui-kit": "workspace:~" diff --git a/packages/core-typings/src/ILivechatDepartmentAgents.ts b/packages/core-typings/src/ILivechatDepartmentAgents.ts index e33c80ff9245..7de0f01b258e 100644 --- a/packages/core-typings/src/ILivechatDepartmentAgents.ts +++ b/packages/core-typings/src/ILivechatDepartmentAgents.ts @@ -1,5 +1,6 @@ -export interface ILivechatDepartmentAgents { - _id: string; +import type { IRocketChatRecord } from './IRocketChatRecord'; + +export interface ILivechatDepartmentAgents extends IRocketChatRecord { departmentId: string; departmentEnabled: boolean; agentId: string; diff --git a/packages/core-typings/src/IRoom.ts b/packages/core-typings/src/IRoom.ts index ac31c2cc6a3a..4a2124e98b98 100644 --- a/packages/core-typings/src/IRoom.ts +++ b/packages/core-typings/src/IRoom.ts @@ -7,6 +7,8 @@ import type { IUser, Username } from './IUser'; import type { RoomType } from './RoomType'; type CallStatus = 'ringing' | 'ended' | 'declined' | 'ongoing'; +const sidepanelItemValues = ['channels', 'discussions'] as const; +export type SidepanelItem = (typeof sidepanelItemValues)[number]; export type RoomID = string; export type ChannelName = string; @@ -95,8 +97,28 @@ export interface IRoom extends IRocketChatRecord { customFields?: Record; usersWaitingForE2EKeys?: { userId: IUser['_id']; ts: Date }[]; + + sidepanel?: { + items: [SidepanelItem, SidepanelItem?]; + }; } +export const isSidepanelItem = (item: any): item is SidepanelItem => { + return sidepanelItemValues.includes(item); +}; + +export const isValidSidepanel = (sidepanel: IRoom['sidepanel']) => { + if (!sidepanel?.items) { + return false; + } + return ( + Array.isArray(sidepanel.items) && + sidepanel.items.length && + sidepanel.items.every(isSidepanelItem) && + sidepanel.items.length === new Set(sidepanel.items).size + ); +}; + export const isRoomWithJoinCode = (room: Partial): room is IRoomWithJoinCode => 'joinCodeRequired' in room && (room as any).joinCodeRequired === true; @@ -275,9 +297,12 @@ export interface IOmnichannelRoom extends IOmnichannelGenericRoom { total: number; avg: number; ft: number; + fd?: number; }; reaction?: { + tt: number; ft: number; + fd?: number; }; }; @@ -348,6 +373,7 @@ export type RoomAdminFieldsType = | 'cl' | 'u' | 'usernames' + | 'ts' | 'usersCount' | 'muted' | 'unmuted' diff --git a/packages/core-typings/src/IUser.ts b/packages/core-typings/src/IUser.ts index 136146e40a34..3c6d1c890d7b 100644 --- a/packages/core-typings/src/IUser.ts +++ b/packages/core-typings/src/IUser.ts @@ -231,5 +231,3 @@ export type AvatarServiceObject = { }; export type AvatarObject = AvatarReset | AvatarUrlObj | FormData | AvatarServiceObject; - -export type IAdminUserTabs = 'all' | 'active' | 'deactivated' | 'pending'; diff --git a/packages/core-typings/src/ee/IAuditLog.ts b/packages/core-typings/src/ee/IAuditLog.ts index de1c6ff5213f..4618400d8017 100644 --- a/packages/core-typings/src/ee/IAuditLog.ts +++ b/packages/core-typings/src/ee/IAuditLog.ts @@ -12,12 +12,13 @@ export interface IAuditLog extends IRocketChatRecord { fields: { type: string; msg: IMessage['msg']; - startDate: Date; - endDate: Date; + startDate?: Date; + endDate?: Date; rids?: IRoom['_id'][]; room: IRoom['name']; users?: IUser['username'][]; visitor?: ILivechatVisitor['_id']; agent?: ILivechatAgent['_id']; + filters?: string; }; } diff --git a/packages/core-typings/src/index.ts b/packages/core-typings/src/index.ts index 01bc90d2a6bc..c04ffa998d77 100644 --- a/packages/core-typings/src/index.ts +++ b/packages/core-typings/src/index.ts @@ -140,3 +140,4 @@ export * from './CustomFieldMetadata'; export * from './RoomRouteData'; export * as Cloud from './cloud'; +export * from './themes'; diff --git a/ee/packages/ui-theming/src/types/themes.ts b/packages/core-typings/src/themes.ts similarity index 100% rename from ee/packages/ui-theming/src/types/themes.ts rename to packages/core-typings/src/themes.ts diff --git a/packages/cron/CHANGELOG.md b/packages/cron/CHANGELOG.md index 1ec9a7497714..33c0c9872a60 100644 --- a/packages/cron/CHANGELOG.md +++ b/packages/cron/CHANGELOG.md @@ -1,5 +1,95 @@ # @rocket.chat/cron +## 0.1.3 + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 24f7df4894, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/models@0.2.0 +
    + +## 0.1.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/models@0.2.0-rc.6 +
    + +## 0.1.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/models@0.2.0-rc.5 +
    + +## 0.1.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/models@0.2.0-rc.4 +
    + +## 0.1.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/models@0.2.0-rc.3 +
    + +## 0.1.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/models@0.2.0-rc.2 +
    + +## 0.1.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/models@0.2.0-rc.1 +
    + +## 0.1.3-rc.0 + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 24f7df4894, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/models@0.2.0-rc.0 +
    + +## 0.1.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/models@0.1.2 +
    + ## 0.1.1 ### Patch Changes diff --git a/packages/cron/package.json b/packages/cron/package.json index 5f44c96d58a6..a6484224ded5 100644 --- a/packages/cron/package.json +++ b/packages/cron/package.json @@ -1,18 +1,14 @@ { "name": "@rocket.chat/cron", - "version": "0.1.1", + "version": "0.1.3", "private": true, "devDependencies": { - "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "build": "rm -rf dist && tsc -p tsconfig.json", "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" }, diff --git a/ee/packages/ddp-client/.eslintrc.json b/packages/ddp-client/.eslintrc.json similarity index 100% rename from ee/packages/ddp-client/.eslintrc.json rename to packages/ddp-client/.eslintrc.json diff --git a/ee/packages/ddp-client/CHANGELOG.md b/packages/ddp-client/CHANGELOG.md similarity index 91% rename from ee/packages/ddp-client/CHANGELOG.md rename to packages/ddp-client/CHANGELOG.md index 38a500223ce2..0f9b5f7f26b3 100644 --- a/ee/packages/ddp-client/CHANGELOG.md +++ b/packages/ddp-client/CHANGELOG.md @@ -1,5 +1,95 @@ # @rocket.chat/ddp-client +## 0.3.3 + +### Patch Changes + +-
    Updated dependencies [264d7d5496, b8e5887fb9]: + + - @rocket.chat/rest-typings@6.11.0 + - @rocket.chat/api-client@0.2.3 +
    + +## 0.3.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/rest-typings@6.11.0-rc.6 + - @rocket.chat/api-client@0.2.3-rc.6 +
    + +## 0.3.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/rest-typings@6.11.0-rc.5 + - @rocket.chat/api-client@0.2.3-rc.5 +
    + +## 0.3.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/rest-typings@6.11.0-rc.4 + - @rocket.chat/api-client@0.2.3-rc.4 +
    + +## 0.3.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/rest-typings@6.11.0-rc.3 + - @rocket.chat/api-client@0.2.3-rc.3 +
    + +## 0.3.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/rest-typings@6.11.0-rc.2 + - @rocket.chat/api-client@0.2.3-rc.2 +
    + +## 0.3.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/rest-typings@6.11.0-rc.1 + - @rocket.chat/api-client@0.2.2-rc.1 +
    + +## 0.3.3-rc.0 + +### Patch Changes + +-
    Updated dependencies [264d7d5496, b8e5887fb9]: + + - @rocket.chat/rest-typings@6.11.0-rc.0 + - @rocket.chat/api-client@0.2.2-rc.0 +
    + +## 0.3.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/rest-typings@6.10.2 + - @rocket.chat/api-client@0.2.2 +
    + ## 0.3.1 ### Patch Changes diff --git a/ee/packages/ddp-client/LICENSE b/packages/ddp-client/LICENSE similarity index 100% rename from ee/packages/ddp-client/LICENSE rename to packages/ddp-client/LICENSE diff --git a/ee/packages/ddp-client/README.md b/packages/ddp-client/README.md similarity index 100% rename from ee/packages/ddp-client/README.md rename to packages/ddp-client/README.md diff --git a/ee/packages/ddp-client/__examples__/simple.ts b/packages/ddp-client/__examples__/simple.ts similarity index 100% rename from ee/packages/ddp-client/__examples__/simple.ts rename to packages/ddp-client/__examples__/simple.ts diff --git a/ee/packages/ddp-client/__mocks__/ws.ts b/packages/ddp-client/__mocks__/ws.ts similarity index 100% rename from ee/packages/ddp-client/__mocks__/ws.ts rename to packages/ddp-client/__mocks__/ws.ts diff --git a/ee/packages/ddp-client/__tests__/Account.spec.ts b/packages/ddp-client/__tests__/Account.spec.ts similarity index 100% rename from ee/packages/ddp-client/__tests__/Account.spec.ts rename to packages/ddp-client/__tests__/Account.spec.ts diff --git a/ee/packages/ddp-client/__tests__/ClientStream.spec.ts b/packages/ddp-client/__tests__/ClientStream.spec.ts similarity index 100% rename from ee/packages/ddp-client/__tests__/ClientStream.spec.ts rename to packages/ddp-client/__tests__/ClientStream.spec.ts diff --git a/ee/packages/ddp-client/__tests__/Connection.spec.ts b/packages/ddp-client/__tests__/Connection.spec.ts similarity index 100% rename from ee/packages/ddp-client/__tests__/Connection.spec.ts rename to packages/ddp-client/__tests__/Connection.spec.ts diff --git a/ee/packages/ddp-client/__tests__/DDPDispatcher.spec.ts b/packages/ddp-client/__tests__/DDPDispatcher.spec.ts similarity index 100% rename from ee/packages/ddp-client/__tests__/DDPDispatcher.spec.ts rename to packages/ddp-client/__tests__/DDPDispatcher.spec.ts diff --git a/ee/packages/ddp-client/__tests__/DDPSDK.spec.ts b/packages/ddp-client/__tests__/DDPSDK.spec.ts similarity index 100% rename from ee/packages/ddp-client/__tests__/DDPSDK.spec.ts rename to packages/ddp-client/__tests__/DDPSDK.spec.ts diff --git a/ee/packages/ddp-client/__tests__/MinimalDDPClient.spec.ts b/packages/ddp-client/__tests__/MinimalDDPClient.spec.ts similarity index 100% rename from ee/packages/ddp-client/__tests__/MinimalDDPClient.spec.ts rename to packages/ddp-client/__tests__/MinimalDDPClient.spec.ts diff --git a/ee/packages/ddp-client/__tests__/Timeout.spec.ts b/packages/ddp-client/__tests__/Timeout.spec.ts similarity index 100% rename from ee/packages/ddp-client/__tests__/Timeout.spec.ts rename to packages/ddp-client/__tests__/Timeout.spec.ts diff --git a/ee/packages/ddp-client/__tests__/helpers/index.ts b/packages/ddp-client/__tests__/helpers/index.ts similarity index 100% rename from ee/packages/ddp-client/__tests__/helpers/index.ts rename to packages/ddp-client/__tests__/helpers/index.ts diff --git a/ee/packages/ddp-client/__tests__/wrapOnceEventIntoPromise.spec.ts b/packages/ddp-client/__tests__/wrapOnceEventIntoPromise.spec.ts similarity index 100% rename from ee/packages/ddp-client/__tests__/wrapOnceEventIntoPromise.spec.ts rename to packages/ddp-client/__tests__/wrapOnceEventIntoPromise.spec.ts diff --git a/packages/ddp-client/jest.config.ts b/packages/ddp-client/jest.config.ts new file mode 100644 index 000000000000..513d37db1e9c --- /dev/null +++ b/packages/ddp-client/jest.config.ts @@ -0,0 +1,7 @@ +import client from '@rocket.chat/jest-presets/client'; +import type { Config } from 'jest'; + +export default { + preset: client.preset, + modulePathIgnorePatterns: ['/__tests__/helpers'], +} satisfies Config; diff --git a/ee/packages/ddp-client/package.json b/packages/ddp-client/package.json similarity index 61% rename from ee/packages/ddp-client/package.json rename to packages/ddp-client/package.json index 9daeb0414ffe..9e4fdfd85910 100644 --- a/ee/packages/ddp-client/package.json +++ b/packages/ddp-client/package.json @@ -1,16 +1,13 @@ { "name": "@rocket.chat/ddp-client", - "version": "0.3.1", + "version": "0.3.3", "devDependencies": { - "@swc/core": "^1.3.95", - "@swc/jest": "^0.2.29", - "@types/jest": "^29.5.12", + "@rocket.chat/jest-presets": "workspace:~", + "@types/jest": "~29.5.12", "@types/ws": "^8.5.8", "eslint": "~8.45.0", - "jest": "~29.6.4", - "jest-environment-jsdom": "~29.6.4", - "jest-websocket-mock": "^2.4.0", - "ts-jest": "^29.1.2", + "jest": "~29.7.0", + "jest-websocket-mock": "~2.5.0", "typescript": "~5.3.3", "ws": "^8.13.0" }, @@ -18,12 +15,12 @@ "@rocket.chat/emitter": "*" }, "scripts": { + "build": "tsc", + "dev": "tsc --watch --preserveWatchOutput", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "unit": "jest", - "testunit": "jest", - "build": "rm -rf dist && tsc -p tsconfig.json", - "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" + "test": "jest", + "testunit": "jest" }, "main": "./dist/index.js", "typings": "./dist/index.d.ts", @@ -35,6 +32,7 @@ }, "dependencies": { "@rocket.chat/api-client": "workspace:^", + "@rocket.chat/core-typings": "workspace:~", "@rocket.chat/rest-typings": "workspace:^" } } diff --git a/ee/packages/ddp-client/src/ClientStream.ts b/packages/ddp-client/src/ClientStream.ts similarity index 100% rename from ee/packages/ddp-client/src/ClientStream.ts rename to packages/ddp-client/src/ClientStream.ts diff --git a/ee/packages/ddp-client/src/Connection.ts b/packages/ddp-client/src/Connection.ts similarity index 100% rename from ee/packages/ddp-client/src/Connection.ts rename to packages/ddp-client/src/Connection.ts diff --git a/ee/packages/ddp-client/src/DDPDispatcher.ts b/packages/ddp-client/src/DDPDispatcher.ts similarity index 100% rename from ee/packages/ddp-client/src/DDPDispatcher.ts rename to packages/ddp-client/src/DDPDispatcher.ts diff --git a/ee/packages/ddp-client/src/DDPSDK.ts b/packages/ddp-client/src/DDPSDK.ts similarity index 100% rename from ee/packages/ddp-client/src/DDPSDK.ts rename to packages/ddp-client/src/DDPSDK.ts diff --git a/ee/packages/ddp-client/src/MinimalDDPClient.ts b/packages/ddp-client/src/MinimalDDPClient.ts similarity index 100% rename from ee/packages/ddp-client/src/MinimalDDPClient.ts rename to packages/ddp-client/src/MinimalDDPClient.ts diff --git a/ee/packages/ddp-client/src/TimeoutControl.ts b/packages/ddp-client/src/TimeoutControl.ts similarity index 100% rename from ee/packages/ddp-client/src/TimeoutControl.ts rename to packages/ddp-client/src/TimeoutControl.ts diff --git a/packages/ddp-client/src/index.ts b/packages/ddp-client/src/index.ts new file mode 100644 index 000000000000..15f13add5a3a --- /dev/null +++ b/packages/ddp-client/src/index.ts @@ -0,0 +1,8 @@ +export * from './DDPSDK'; +export * from './legacy/RocketchatSDKLegacy'; +export * from './livechat/LivechatClientImpl'; +export * from './livechat/types/LivechatSDK'; +export * from './types/ClientStream'; +export * from './types/methods'; +export * from './types/streams'; +export type { SDK } from './types/SDK'; diff --git a/ee/packages/ddp-client/src/legacy/RocketchatSDKLegacy.ts b/packages/ddp-client/src/legacy/RocketchatSDKLegacy.ts similarity index 100% rename from ee/packages/ddp-client/src/legacy/RocketchatSDKLegacy.ts rename to packages/ddp-client/src/legacy/RocketchatSDKLegacy.ts diff --git a/ee/packages/ddp-client/src/legacy/types/SDKLegacy.ts b/packages/ddp-client/src/legacy/types/SDKLegacy.ts similarity index 100% rename from ee/packages/ddp-client/src/legacy/types/SDKLegacy.ts rename to packages/ddp-client/src/legacy/types/SDKLegacy.ts diff --git a/ee/packages/ddp-client/src/livechat/LivechatClientImpl.ts b/packages/ddp-client/src/livechat/LivechatClientImpl.ts similarity index 100% rename from ee/packages/ddp-client/src/livechat/LivechatClientImpl.ts rename to packages/ddp-client/src/livechat/LivechatClientImpl.ts diff --git a/ee/packages/ddp-client/src/livechat/types/LivechatSDK.ts b/packages/ddp-client/src/livechat/types/LivechatSDK.ts similarity index 100% rename from ee/packages/ddp-client/src/livechat/types/LivechatSDK.ts rename to packages/ddp-client/src/livechat/types/LivechatSDK.ts diff --git a/ee/packages/ddp-client/src/types/Account.ts b/packages/ddp-client/src/types/Account.ts similarity index 100% rename from ee/packages/ddp-client/src/types/Account.ts rename to packages/ddp-client/src/types/Account.ts diff --git a/ee/packages/ddp-client/src/types/ClientStream.ts b/packages/ddp-client/src/types/ClientStream.ts similarity index 100% rename from ee/packages/ddp-client/src/types/ClientStream.ts rename to packages/ddp-client/src/types/ClientStream.ts diff --git a/ee/packages/ddp-client/src/types/DDPClient.ts b/packages/ddp-client/src/types/DDPClient.ts similarity index 100% rename from ee/packages/ddp-client/src/types/DDPClient.ts rename to packages/ddp-client/src/types/DDPClient.ts diff --git a/ee/packages/ddp-client/src/types/IncomingPayload.ts b/packages/ddp-client/src/types/IncomingPayload.ts similarity index 100% rename from ee/packages/ddp-client/src/types/IncomingPayload.ts rename to packages/ddp-client/src/types/IncomingPayload.ts diff --git a/ee/packages/ddp-client/src/types/OutgoingPayload.ts b/packages/ddp-client/src/types/OutgoingPayload.ts similarity index 100% rename from ee/packages/ddp-client/src/types/OutgoingPayload.ts rename to packages/ddp-client/src/types/OutgoingPayload.ts diff --git a/ee/packages/ddp-client/src/types/RemoveListener.ts b/packages/ddp-client/src/types/RemoveListener.ts similarity index 100% rename from ee/packages/ddp-client/src/types/RemoveListener.ts rename to packages/ddp-client/src/types/RemoveListener.ts diff --git a/ee/packages/ddp-client/src/types/SDK.ts b/packages/ddp-client/src/types/SDK.ts similarity index 100% rename from ee/packages/ddp-client/src/types/SDK.ts rename to packages/ddp-client/src/types/SDK.ts diff --git a/ee/packages/ddp-client/src/types/Subscription.ts b/packages/ddp-client/src/types/Subscription.ts similarity index 100% rename from ee/packages/ddp-client/src/types/Subscription.ts rename to packages/ddp-client/src/types/Subscription.ts diff --git a/ee/packages/ddp-client/src/types/connectionPayloads.ts b/packages/ddp-client/src/types/connectionPayloads.ts similarity index 100% rename from ee/packages/ddp-client/src/types/connectionPayloads.ts rename to packages/ddp-client/src/types/connectionPayloads.ts diff --git a/ee/packages/ddp-client/src/types/heartbeatsPayloads.ts b/packages/ddp-client/src/types/heartbeatsPayloads.ts similarity index 100% rename from ee/packages/ddp-client/src/types/heartbeatsPayloads.ts rename to packages/ddp-client/src/types/heartbeatsPayloads.ts diff --git a/ee/packages/ddp-client/src/types/methods.ts b/packages/ddp-client/src/types/methods.ts similarity index 78% rename from ee/packages/ddp-client/src/types/methods.ts rename to packages/ddp-client/src/types/methods.ts index 711f5dd79343..f8a7052c3266 100644 --- a/ee/packages/ddp-client/src/types/methods.ts +++ b/packages/ddp-client/src/types/methods.ts @@ -11,7 +11,3 @@ export type ServerMethodName = keyof ServerMethods; export type ServerMethodParameters = Parameters; export type ServerMethodReturn = Awaited>; - -export type ServerMethodFunction = ( - ...args: ServerMethodParameters -) => Promise>; diff --git a/ee/packages/ddp-client/src/types/methodsPayloads.ts b/packages/ddp-client/src/types/methodsPayloads.ts similarity index 100% rename from ee/packages/ddp-client/src/types/methodsPayloads.ts rename to packages/ddp-client/src/types/methodsPayloads.ts diff --git a/ee/packages/ddp-client/src/types/publicationPayloads.ts b/packages/ddp-client/src/types/publicationPayloads.ts similarity index 100% rename from ee/packages/ddp-client/src/types/publicationPayloads.ts rename to packages/ddp-client/src/types/publicationPayloads.ts diff --git a/ee/packages/ddp-client/src/types/streams.ts b/packages/ddp-client/src/types/streams.ts similarity index 100% rename from ee/packages/ddp-client/src/types/streams.ts rename to packages/ddp-client/src/types/streams.ts diff --git a/ee/packages/ddp-client/src/wrapOnceEventIntoPromise.ts b/packages/ddp-client/src/wrapOnceEventIntoPromise.ts similarity index 100% rename from ee/packages/ddp-client/src/wrapOnceEventIntoPromise.ts rename to packages/ddp-client/src/wrapOnceEventIntoPromise.ts diff --git a/ee/packages/ddp-client/tsconfig.json b/packages/ddp-client/tsconfig.json similarity index 81% rename from ee/packages/ddp-client/tsconfig.json rename to packages/ddp-client/tsconfig.json index 29b8cb051fe3..b98ff74ba385 100644 --- a/ee/packages/ddp-client/tsconfig.json +++ b/packages/ddp-client/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.client.json", + "extends": "../../tsconfig.base.client.json", "compilerOptions": { "rootDir": "./src", "outDir": "./dist", diff --git a/packages/fuselage-ui-kit/CHANGELOG.md b/packages/fuselage-ui-kit/CHANGELOG.md index d96d8d2bc1ee..e8fe73f6d549 100644 --- a/packages/fuselage-ui-kit/CHANGELOG.md +++ b/packages/fuselage-ui-kit/CHANGELOG.md @@ -1,5 +1,140 @@ # Change Log +## 9.0.0 + +### Patch Changes + +- ([#32679](https://github.com/RocketChat/Rocket.Chat/pull/32679)) Fix validations from "UiKit" modal component + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [2d89a0c448, 24f7df4894, 4e8aa575a6, b8e5887fb9]: + + - @rocket.chat/ui-video-conf@9.0.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/ui-contexts@9.0.0 + - @rocket.chat/ui-kit@0.36.0 + - @rocket.chat/gazzodown@9.0.0 + - @rocket.chat/ui-avatar@5.0.0 +
    + +## 9.0.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/gazzodown@9.0.0-rc.6 + - @rocket.chat/ui-contexts@9.0.0-rc.6 + - @rocket.chat/ui-avatar@5.0.0-rc.6 + - @rocket.chat/ui-video-conf@9.0.0-rc.6 +
    + +## 9.0.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/gazzodown@9.0.0-rc.5 + - @rocket.chat/ui-contexts@9.0.0-rc.5 + - @rocket.chat/ui-avatar@5.0.0-rc.5 + - @rocket.chat/ui-video-conf@9.0.0-rc.5 +
    + +## 9.0.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/gazzodown@9.0.0-rc.4 + - @rocket.chat/ui-contexts@9.0.0-rc.4 + - @rocket.chat/ui-avatar@5.0.0-rc.4 + - @rocket.chat/ui-video-conf@9.0.0-rc.4 +
    + +## 9.0.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/gazzodown@9.0.0-rc.3 + - @rocket.chat/ui-contexts@9.0.0-rc.3 + - @rocket.chat/ui-avatar@5.0.0-rc.3 + - @rocket.chat/ui-video-conf@9.0.0-rc.3 +
    + +## 9.0.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/gazzodown@9.0.0-rc.2 + - @rocket.chat/ui-contexts@9.0.0-rc.2 + - @rocket.chat/ui-avatar@5.0.0-rc.2 + - @rocket.chat/ui-video-conf@9.0.0-rc.2 +
    + +## 9.0.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/gazzodown@9.0.0-rc.1 + - @rocket.chat/ui-contexts@9.0.0-rc.1 + - @rocket.chat/ui-avatar@5.0.0-rc.1 + - @rocket.chat/ui-video-conf@9.0.0-rc.1 +
    + +## 9.0.0-rc.0 + +### Patch Changes + +- ([#32679](https://github.com/RocketChat/Rocket.Chat/pull/32679)) Fix validations from "UiKit" modal component + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [2d89a0c448, 24f7df4894, 4e8aa575a6, b8e5887fb9]: + + - @rocket.chat/ui-video-conf@9.0.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/ui-contexts@9.0.0-rc.0 + - @rocket.chat/ui-kit@0.36.0-rc.0 + - @rocket.chat/gazzodown@9.0.0-rc.0 + - @rocket.chat/ui-avatar@5.0.0-rc.0 +
    + +## 8.0.2 + +### Patch Changes + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from being updated or uninstalled in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from handling errors during execution in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Improved Apps-Engine installation to prevent start up errors on manual installation setups + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that caused the video conference button on rooms to not recognize a video conference provider app in some cases + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/gazzodown@8.0.2 + - @rocket.chat/ui-contexts@8.0.2 + - @rocket.chat/ui-avatar@4.0.2 + - @rocket.chat/ui-video-conf@8.0.2 +
    + ## 8.0.1 ### Patch Changes diff --git a/packages/fuselage-ui-kit/jest.config.ts b/packages/fuselage-ui-kit/jest.config.ts index 070e217dc457..5c3180dfe83f 100644 --- a/packages/fuselage-ui-kit/jest.config.ts +++ b/packages/fuselage-ui-kit/jest.config.ts @@ -1,35 +1,13 @@ +import client from '@rocket.chat/jest-presets/client'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', - errorOnDeprecated: true, - testEnvironment: 'jsdom', - modulePathIgnorePatterns: ['/dist/'], - transform: { - '^.+\\.(t|j)sx?$': [ - '@swc/jest', - { - sourceMaps: true, - jsc: { - parser: { - syntax: 'typescript', - tsx: true, - decorators: false, - dynamicImport: true, - }, - transform: { - react: { - runtime: 'automatic', - }, - }, - }, - }, - ], - }, + preset: client.preset, + setupFilesAfterEnv: [...client.setupFilesAfterEnv], moduleNameMapper: { - '\\.css$': 'identity-obj-proxy', '^react($|/.+)': '/../../node_modules/react$1', + '^react-dom/client$': '/../../node_modules/react-dom$1', + '^react-dom($|/.+)': '/../../node_modules/react-dom$1', + '^react-i18next($|/.+)': '/../../node_modules/react-i18next$1', }, - setupFilesAfterEnv: [ - '@testing-library/jest-dom/extend-expect', - '/jest.setup.ts', - ], -}; +} satisfies Config; diff --git a/packages/fuselage-ui-kit/jest.setup.ts b/packages/fuselage-ui-kit/jest.setup.ts deleted file mode 100644 index 657e42bbdea1..000000000000 --- a/packages/fuselage-ui-kit/jest.setup.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { TextEncoder, TextDecoder } from 'util'; - -global.TextEncoder = TextEncoder; -// @ts-ignore -global.TextDecoder = TextDecoder; - -global.ResizeObserver = jest.fn().mockImplementation(() => ({ - observe: jest.fn(), - unobserve: jest.fn(), - disconnect: jest.fn(), -})); diff --git a/packages/fuselage-ui-kit/package.json b/packages/fuselage-ui-kit/package.json index 61a0a9a93fba..6d6b882c89d2 100644 --- a/packages/fuselage-ui-kit/package.json +++ b/packages/fuselage-ui-kit/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/fuselage-ui-kit", "private": true, - "version": "8.0.1", + "version": "9.0.0", "description": "UiKit elements for Rocket.Chat Apps built under Fuselage design system", "homepage": "https://rocketchat.github.io/Rocket.Chat.Fuselage/", "author": { @@ -30,8 +30,8 @@ "dev": "tsc --watch --preserveWatchOutput -p tsconfig-esm.json", "build": "run-s .:build:clean .:build:esm .:build:cjs", ".:build:clean": "rimraf dist", - ".:build:esm": "tsc -p tsconfig-esm.json", - ".:build:cjs": "tsc -p tsconfig-cjs.json", + ".:build:esm": "tsc -p tsconfig.esm.json", + ".:build:cjs": "tsc -p tsconfig.cjs.json", "test": "jest", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "testunit": "jest", @@ -50,10 +50,10 @@ "@rocket.chat/icons": "*", "@rocket.chat/prettier-config": "*", "@rocket.chat/styled": "*", - "@rocket.chat/ui-avatar": "4.0.1", - "@rocket.chat/ui-contexts": "8.0.1", - "@rocket.chat/ui-kit": "0.35.0", - "@rocket.chat/ui-video-conf": "8.0.1", + "@rocket.chat/ui-avatar": "5.0.0", + "@rocket.chat/ui-contexts": "9.0.0", + "@rocket.chat/ui-kit": "0.36.0", + "@rocket.chat/ui-video-conf": "9.0.0", "@tanstack/react-query": "*", "react": "*", "react-dom": "*" @@ -63,13 +63,14 @@ "@babel/preset-env": "~7.22.20", "@babel/preset-react": "~7.22.15", "@babel/preset-typescript": "~7.22.15", - "@rocket.chat/apps-engine": "alpha", + "@rocket.chat/apps-engine": "1.44.0", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/eslint-config": "workspace:^", - "@rocket.chat/fuselage": "^0.56.0", + "@rocket.chat/fuselage": "^0.57.0", "@rocket.chat/fuselage-hooks": "^0.33.1", "@rocket.chat/fuselage-polyfills": "~0.31.25", "@rocket.chat/icons": "^0.36.0", + "@rocket.chat/jest-presets": "workspace:~", "@rocket.chat/mock-providers": "workspace:^", "@rocket.chat/prettier-config": "~0.31.25", "@rocket.chat/styled": "~0.31.25", @@ -85,9 +86,8 @@ "@storybook/source-loader": "~6.5.16", "@storybook/theming": "~6.5.16", "@tanstack/react-query": "^4.16.1", - "@testing-library/react": "^12.1.4", - "@testing-library/react-hooks": "^8.0.1", - "@testing-library/user-event": "^14.5.2", + "@testing-library/react": "~16.0.0", + "@testing-library/user-event": "~14.5.2", "@types/babel__core": "^7.20.3", "@types/babel__preset-env": "^7.9.4", "@types/react": "~17.0.69", @@ -96,7 +96,7 @@ "cross-env": "^7.0.3", "eslint": "~8.45.0", "i18next": "^23.10.1", - "jest": "^29.7.0", + "jest": "~29.7.0", "normalize.css": "^8.0.1", "npm-run-all": "^4.1.5", "prettier": "~2.8.8", @@ -105,7 +105,6 @@ "react-i18next": "^14.1.0", "rimraf": "^3.0.2", "storybook-dark-mode": "~3.0.1", - "ts-jest": "^29.1.2", "tslib": "^2.5.3", "typescript": "~5.3.3" }, diff --git a/packages/fuselage-ui-kit/src/blocks/InputBlock.tsx b/packages/fuselage-ui-kit/src/blocks/InputBlock.tsx index 979e04e808c7..9844372a3060 100644 --- a/packages/fuselage-ui-kit/src/blocks/InputBlock.tsx +++ b/packages/fuselage-ui-kit/src/blocks/InputBlock.tsx @@ -46,7 +46,15 @@ const InputBlock = ({ {surfaceRenderer.renderInputBlockElement(inputElement, 0)} {error && {error}} - {block.hint && {block.hint}} + {block.hint && ( + + {surfaceRenderer.renderTextObject( + block.hint, + 0, + UiKit.BlockContext.NONE + )} + + )} ); }; diff --git a/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/ChannelsSelectElement.spec.tsx b/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/ChannelsSelectElement.spec.tsx index 6af59dba4f63..a1a1f93dd1cd 100644 --- a/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/ChannelsSelectElement.spec.tsx +++ b/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/ChannelsSelectElement.spec.tsx @@ -66,7 +66,10 @@ describe('UiKit ChannelsSelect Element', () => { context={BlockContext.FORM} surfaceRenderer={contextualBarParser} /> - + , + { + legacyRoot: true, + } ); }); diff --git a/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/ChannelsSelectElement.tsx b/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/ChannelsSelectElement.tsx index 51d25f7ae0d5..a26037373aa7 100644 --- a/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/ChannelsSelectElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/ChannelsSelectElement.tsx @@ -1,10 +1,4 @@ -import { - AutoComplete, - Option, - Box, - Options, - Chip, -} from '@rocket.chat/fuselage'; +import { AutoComplete, Option, Box, Chip } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; import { RoomAvatar } from '@rocket.chat/ui-avatar'; import type * as UiKit from '@rocket.chat/ui-kit'; @@ -28,8 +22,8 @@ const ChannelsSelectElement = ({ const options = useChannelsData({ filter: filterDebounced }); const handleChange = useCallback( - (value) => { - action({ target: { value } }); + (value: string | string[]) => { + if (!Array.isArray(value)) action({ target: { value } }); }, [action] ); @@ -59,7 +53,7 @@ const ChannelsSelectElement = ({ label={label.name} avatar={ { context={BlockContext.FORM} surfaceRenderer={contextualBarParser} /> - + , + { legacyRoot: true } ); }); diff --git a/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/MultiChannelsSelectElement.tsx b/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/MultiChannelsSelectElement.tsx index 78bf07bbf599..b050a137860d 100644 --- a/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/MultiChannelsSelectElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/ChannelsSelectElement/MultiChannelsSelectElement.tsx @@ -22,8 +22,8 @@ const MultiChannelsSelectElement = ({ const options = useChannelsData({ filter: filterDebounced }); const handleChange = useCallback( - (value) => { - action({ target: { value } }); + (value: string | string[]) => { + if (Array.isArray(value)) action({ target: { value } }); }, [action] ); diff --git a/packages/fuselage-ui-kit/src/elements/MultiStaticSelectElement.tsx b/packages/fuselage-ui-kit/src/elements/MultiStaticSelectElement.tsx index a1948a921f49..9bb5746f7ef0 100644 --- a/packages/fuselage-ui-kit/src/elements/MultiStaticSelectElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/MultiStaticSelectElement.tsx @@ -27,7 +27,7 @@ const MultiStaticSelectElement = ({ ); const handleChange = useCallback( - (value) => { + (value: string[]) => { action({ target: { value } }); }, [action] diff --git a/packages/fuselage-ui-kit/src/elements/StaticSelectElement.tsx b/packages/fuselage-ui-kit/src/elements/StaticSelectElement.tsx index c68a7f067a8d..549ef2d8bd6e 100644 --- a/packages/fuselage-ui-kit/src/elements/StaticSelectElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/StaticSelectElement.tsx @@ -26,7 +26,7 @@ const StaticSelectElement = ({ ); const handleChange = useCallback( - (value) => { + (value: string) => { action({ target: { value } }); }, [action] diff --git a/packages/fuselage-ui-kit/src/elements/UsersSelectElement/MultiUsersSelectElement.spec.tsx b/packages/fuselage-ui-kit/src/elements/UsersSelectElement/MultiUsersSelectElement.spec.tsx index 1a6afad6c614..eea4f509fed0 100644 --- a/packages/fuselage-ui-kit/src/elements/UsersSelectElement/MultiUsersSelectElement.spec.tsx +++ b/packages/fuselage-ui-kit/src/elements/UsersSelectElement/MultiUsersSelectElement.spec.tsx @@ -53,7 +53,8 @@ describe('UiKit MultiUsersSelect Element', () => { context={BlockContext.FORM} surfaceRenderer={contextualBarParser} /> - + , + { legacyRoot: true } ); }); diff --git a/packages/fuselage-ui-kit/src/elements/UsersSelectElement/MultiUsersSelectElement.tsx b/packages/fuselage-ui-kit/src/elements/UsersSelectElement/MultiUsersSelectElement.tsx index bdf7bfef4a31..3fd3351c2bb6 100644 --- a/packages/fuselage-ui-kit/src/elements/UsersSelectElement/MultiUsersSelectElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/UsersSelectElement/MultiUsersSelectElement.tsx @@ -31,8 +31,8 @@ const MultiUsersSelectElement = ({ const data = useUsersData({ filter: debouncedFilter }); const handleChange = useCallback( - (value) => { - action({ target: { value } }); + (value: string | string[]) => { + if (Array.isArray(value)) action({ target: { value } }); }, [action] ); diff --git a/packages/fuselage-ui-kit/src/elements/UsersSelectElement/UserSelectElement.spec.tsx b/packages/fuselage-ui-kit/src/elements/UsersSelectElement/UserSelectElement.spec.tsx index 02f11d50951b..6e92a85d1656 100644 --- a/packages/fuselage-ui-kit/src/elements/UsersSelectElement/UserSelectElement.spec.tsx +++ b/packages/fuselage-ui-kit/src/elements/UsersSelectElement/UserSelectElement.spec.tsx @@ -53,7 +53,8 @@ describe('UiKit UserSelect Element', () => { context={BlockContext.FORM} surfaceRenderer={contextualBarParser} /> - + , + { legacyRoot: true } ); }); diff --git a/packages/fuselage-ui-kit/src/elements/UsersSelectElement/UsersSelectElement.tsx b/packages/fuselage-ui-kit/src/elements/UsersSelectElement/UsersSelectElement.tsx index 39e71bd4fce8..03306a36905c 100644 --- a/packages/fuselage-ui-kit/src/elements/UsersSelectElement/UsersSelectElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/UsersSelectElement/UsersSelectElement.tsx @@ -24,8 +24,8 @@ const UsersSelectElement = ({ block, context }: UsersSelectElementProps) => { const data = useUsersData({ filter: debouncedFilter }); const handleChange = useCallback( - (value) => { - action({ target: { value } }); + (value: string | string[]) => { + if (!Array.isArray(value)) action({ target: { value } }); }, [action] ); diff --git a/packages/fuselage-ui-kit/src/hooks/useAppTranslation.spec.tsx b/packages/fuselage-ui-kit/src/hooks/useAppTranslation.spec.tsx index e32dff123c1a..46314982aed8 100644 --- a/packages/fuselage-ui-kit/src/hooks/useAppTranslation.spec.tsx +++ b/packages/fuselage-ui-kit/src/hooks/useAppTranslation.spec.tsx @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook, waitFor } from '@testing-library/react'; import * as i18next from 'i18next'; +import { Suspense } from 'react'; import { I18nextProvider, initReactI18next } from 'react-i18next'; import { AppIdProvider } from '../contexts/AppIdContext'; @@ -30,6 +31,7 @@ beforeEach(async () => { it('should work with normal app ID (`test`)', async () => { const { result } = renderHook(() => useAppTranslation().t('test'), { + legacyRoot: true, wrapper: ({ children }) => ( {children} @@ -42,6 +44,7 @@ it('should work with normal app ID (`test`)', async () => { it('should work with core app ID (`test-core`)', async () => { const { result } = renderHook(() => useAppTranslation().t('test'), { + legacyRoot: true, wrapper: ({ children }) => ( {children} @@ -57,7 +60,14 @@ describe('with suspense', () => { beforeEach(async () => { i18n = i18next - .createInstance() + .createInstance({ + lng: 'en', + defaultNS: 'core', + partialBundledLanguages: true, + react: { + useSuspense: true, + }, + }) .use({ type: 'backend', init: () => undefined, @@ -81,27 +91,20 @@ describe('with suspense', () => { } satisfies i18next.BackendModule) .use(initReactI18next); - await i18n.init({ - lng: 'en', - defaultNS: 'core', - partialBundledLanguages: true, - react: { - useSuspense: true, - }, - }); + await i18n.init(); }); it('should work with normal app ID (`test`)', async () => { - const { result, waitFor } = renderHook( - () => useAppTranslation().t('test'), - { - wrapper: ({ children }) => ( - - {children} - - ), - } - ); + const { result } = renderHook(() => useAppTranslation().t('test'), { + legacyRoot: true, + wrapper: ({ children }) => ( + + + {children} + + + ), + }); await waitFor(() => expect(result.current).toBe('jumped over the lazy dog') @@ -109,16 +112,16 @@ describe('with suspense', () => { }); it('should work with core app ID (`test-core`)', async () => { - const { result, waitFor } = renderHook( - () => useAppTranslation().t('test'), - { - wrapper: ({ children }) => ( - - {children} - - ), - } - ); + const { result } = renderHook(() => useAppTranslation().t('test'), { + legacyRoot: true, + wrapper: ({ children }) => ( + + + {children} + + + ), + }); await waitFor(() => expect(result.current).toBe('a quick brown fox')); }); diff --git a/packages/fuselage-ui-kit/src/surfaces/createSurfaceRenderer.tsx b/packages/fuselage-ui-kit/src/surfaces/createSurfaceRenderer.tsx index 2f6115f8ca66..0208198f0268 100644 --- a/packages/fuselage-ui-kit/src/surfaces/createSurfaceRenderer.tsx +++ b/packages/fuselage-ui-kit/src/surfaces/createSurfaceRenderer.tsx @@ -1,11 +1,11 @@ import type * as UiKit from '@rocket.chat/ui-kit'; -import type { ComponentType, ReactElement } from 'react'; +import type { ComponentType, ReactElement, ReactNode } from 'react'; export const createSurfaceRenderer = < S extends UiKit.SurfaceRenderer >( // eslint-disable-next-line @typescript-eslint/naming-convention - SurfaceComponent: ComponentType, + SurfaceComponent: ComponentType<{ children: ReactNode }>, surfaceRenderer: S ) => function Surface( diff --git a/packages/fuselage-ui-kit/tsconfig-cjs.json b/packages/fuselage-ui-kit/tsconfig.cjs.json similarity index 78% rename from packages/fuselage-ui-kit/tsconfig-cjs.json rename to packages/fuselage-ui-kit/tsconfig.cjs.json index d4ac04a4fbc0..baae5231fec4 100644 --- a/packages/fuselage-ui-kit/tsconfig-cjs.json +++ b/packages/fuselage-ui-kit/tsconfig.cjs.json @@ -6,5 +6,5 @@ "outDir": "./dist/cjs" }, "include": ["src"], - "exclude": ["node_modules", "dist", "src/**/*.stories.tsx", ".storybook/**/*"] + "exclude": ["node_modules", "dist", "src/**/*.stories.tsx", ".storybook/**/*", "./src/**/*.spec.ts", "./src/**/*.spec.tsx"] } diff --git a/packages/fuselage-ui-kit/tsconfig-esm.json b/packages/fuselage-ui-kit/tsconfig.esm.json similarity index 78% rename from packages/fuselage-ui-kit/tsconfig-esm.json rename to packages/fuselage-ui-kit/tsconfig.esm.json index e7628b7b0174..017766f03607 100644 --- a/packages/fuselage-ui-kit/tsconfig-esm.json +++ b/packages/fuselage-ui-kit/tsconfig.esm.json @@ -6,5 +6,5 @@ "outDir": "./dist/esm" }, "include": ["src"], - "exclude": ["node_modules", "dist", "src/**/*.stories.tsx", ".storybook/**/*"] + "exclude": ["node_modules", "dist", "src/**/*.stories.tsx", ".storybook/**/*", "./src/**/*.spec.ts", "./src/**/*.spec.tsx"] } diff --git a/packages/fuselage-ui-kit/tsconfig.json b/packages/fuselage-ui-kit/tsconfig.json index 59d360dca033..bad1623ca4d9 100644 --- a/packages/fuselage-ui-kit/tsconfig.json +++ b/packages/fuselage-ui-kit/tsconfig.json @@ -1,14 +1,9 @@ { "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "module": "CommonJS", - "rootDirs": ["./src", "./.storybook"], - "outDir": "./dist", - "allowJs": false, "noImplicitReturns": true, "noImplicitThis": true, - "jsx": "react-jsx" }, "include": ["src", ".storybook/**/*"], - "exclude": ["node_modules", "dist", "src/**/*.stories.tsx"] + "exclude": ["node_modules", "src/**/*.stories.tsx", "src/**/*.spec.ts", "src/**/*.spec.tsx"] } diff --git a/packages/gazzodown/CHANGELOG.md b/packages/gazzodown/CHANGELOG.md index 44d587ce6b5a..4febdb0f54b2 100644 --- a/packages/gazzodown/CHANGELOG.md +++ b/packages/gazzodown/CHANGELOG.md @@ -1,5 +1,104 @@ # @rocket.chat/gazzodown +## 9.0.0 + +### Patch Changes + +-
    Updated dependencies [1b7b1161cf, 2d89a0c448, 24f7df4894, 3ffe4a2944, 4e8aa575a6, b8e5887fb9]: + + - @rocket.chat/ui-client@9.0.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/ui-contexts@9.0.0 +
    + +## 9.0.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/ui-contexts@9.0.0-rc.6 + - @rocket.chat/ui-client@9.0.0-rc.6 +
    + +## 9.0.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/ui-contexts@9.0.0-rc.5 + - @rocket.chat/ui-client@9.0.0-rc.5 +
    + +## 9.0.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/ui-contexts@9.0.0-rc.4 + - @rocket.chat/ui-client@9.0.0-rc.4 +
    + +## 9.0.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/ui-contexts@9.0.0-rc.3 + - @rocket.chat/ui-client@9.0.0-rc.3 +
    + +## 9.0.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/ui-contexts@9.0.0-rc.2 + - @rocket.chat/ui-client@9.0.0-rc.2 +
    + +## 9.0.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/ui-contexts@9.0.0-rc.1 + - @rocket.chat/ui-client@9.0.0-rc.1 +
    + +## 9.0.0-rc.0 + +### Patch Changes + +-
    Updated dependencies [1b7b1161cf, 2d89a0c448, 24f7df4894, 3ffe4a2944, 4e8aa575a6, b8e5887fb9]: + + - @rocket.chat/ui-client@9.0.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/ui-contexts@9.0.0-rc.0 +
    + +## 8.0.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/ui-contexts@8.0.2 + - @rocket.chat/ui-client@8.0.2 +
    + ## 8.0.1 ### Patch Changes diff --git a/packages/gazzodown/jest.config.ts b/packages/gazzodown/jest.config.ts index 578c2920c79e..597fbebb687b 100644 --- a/packages/gazzodown/jest.config.ts +++ b/packages/gazzodown/jest.config.ts @@ -1,30 +1,12 @@ +import client from '@rocket.chat/jest-presets/client'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', - errorOnDeprecated: true, - testEnvironment: 'jsdom', - modulePathIgnorePatterns: ['/dist/'], - transform: { - '^.+\\.(t|j)sx?$': [ - '@swc/jest', - { - sourceMaps: true, - jsc: { - parser: { - syntax: 'typescript', - tsx: true, - decorators: false, - dynamicImport: true, - }, - transform: { - react: { - runtime: 'automatic', - }, - }, - }, - }, - ], - }, + preset: client.preset, + setupFilesAfterEnv: [...client.setupFilesAfterEnv], moduleNameMapper: { - '\\.css$': 'identity-obj-proxy', + '^react($|/.+)': '/../../node_modules/react$1', + '^react-dom/client$': '/../../node_modules/react-dom$1', + '^react-dom($|/.+)': '/../../node_modules/react-dom$1', }, -}; +} satisfies Config; diff --git a/packages/gazzodown/package.json b/packages/gazzodown/package.json index c90bc13b6367..6ecb49fa9544 100644 --- a/packages/gazzodown/package.json +++ b/packages/gazzodown/package.json @@ -1,13 +1,14 @@ { "name": "@rocket.chat/gazzodown", - "version": "8.0.1", + "version": "9.0.0", "private": true, "devDependencies": { "@babel/core": "~7.22.20", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/css-in-js": "~0.31.25", - "@rocket.chat/fuselage": "^0.56.0", + "@rocket.chat/fuselage": "^0.57.0", "@rocket.chat/fuselage-tokens": "^0.33.1", + "@rocket.chat/jest-presets": "workspace:~", "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/styled": "~0.31.25", "@rocket.chat/ui-client": "workspace:^", @@ -21,15 +22,11 @@ "@storybook/manager-webpack4": "~6.5.16", "@storybook/react": "~6.5.16", "@storybook/testing-library": "~0.0.13", - "@swc/core": "^1.3.95", - "@swc/jest": "^0.2.29", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "~12.1.5", - "@types/jest": "~29.5.7", + "@testing-library/react": "~16.0.0", + "@types/jest": "~29.5.12", "@types/katex": "~0.16.5", "@types/react": "~17.0.69", "@types/react-dom": "~17.0.22", - "@types/testing-library__jest-dom": "~5.14.9", "@typescript-eslint/eslint-plugin": "~5.60.1", "@typescript-eslint/parser": "~5.60.1", "babel-loader": "^8.3.0", @@ -39,23 +36,21 @@ "eslint-plugin-react-hooks": "~4.6.0", "eslint-plugin-storybook": "~0.6.15", "identity-obj-proxy": "^3.0.0", - "jest": "~29.6.4", - "jest-environment-jsdom": "~29.6.4", + "jest": "~29.7.0", "katex": "~0.16.9", "outdent": "^0.8.0", "react-docgen-typescript-plugin": "~1.0.5", "react-dom": "~17.0.2", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { + "build": "rm -rf dist && tsc -p tsconfig.build.json", + "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput", + "typecheck": "tsc --noEmit", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "testunit": "jest --runInBand", - "test": "jest --runInBand", - "build": "rm -rf dist && tsc -p tsconfig.json", - "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput", - "typecheck": "tsc -p tsconfig.json --noEmit", + "testunit": "jest", + "test": "jest", "storybook": "start-storybook -p 6006", "build-storybook": "build-storybook" }, @@ -71,8 +66,8 @@ "@rocket.chat/fuselage-tokens": "*", "@rocket.chat/message-parser": "0.31.29", "@rocket.chat/styled": "*", - "@rocket.chat/ui-client": "8.0.1", - "@rocket.chat/ui-contexts": "8.0.1", + "@rocket.chat/ui-client": "9.0.0", + "@rocket.chat/ui-contexts": "9.0.0", "katex": "*", "react": "*" }, diff --git a/packages/gazzodown/src/Markup.spec.tsx b/packages/gazzodown/src/Markup.spec.tsx index 29ff8cda0fb0..a773ca73b919 100644 --- a/packages/gazzodown/src/Markup.spec.tsx +++ b/packages/gazzodown/src/Markup.spec.tsx @@ -1,20 +1,15 @@ -import { render, screen, cleanup, waitFor } from '@testing-library/react'; +import { render, screen, waitFor } from '@testing-library/react'; import { Suspense } from 'react'; -import '@testing-library/jest-dom'; import { MarkupInteractionContext } from '.'; import Markup from './Markup'; -afterEach(cleanup); - -beforeAll(() => { - jest.mock('highlight.js', () => ({ - highlightElement: (): void => undefined, - })); -}); +jest.mock('highlight.js', () => ({ + highlightElement: (): void => undefined, +})); it('renders empty', () => { - const { container } = render(); + const { container } = render(, { legacyRoot: true }); expect(container).toBeEmptyDOMElement(); }); @@ -39,6 +34,7 @@ it('renders a big emoji block', () => { ]} /> , + { legacyRoot: true }, ); expect(screen.getByRole('presentation')).toHaveTextContent(':smile:😀:smile:'); @@ -67,6 +63,7 @@ it('renders a big emoji block with ASCII emoji', () => { ]} /> , + { legacyRoot: true }, ); expect(screen.getByRole('presentation')).toHaveTextContent(':slight_smile:🙂:)'); @@ -84,6 +81,7 @@ it('renders a paragraph', () => { }, ]} />, + { legacyRoot: true }, ); expect(screen.getByText('Hello')).toBeInTheDocument(); @@ -100,6 +98,7 @@ it('renders a heading', () => { }, ]} />, + { legacyRoot: true }, ); expect(screen.getByRole('heading', { name: 'Hello' })).toBeInTheDocument(); @@ -119,6 +118,7 @@ it('renders a unordered list', () => { }, ]} />, + { legacyRoot: true }, ); expect(screen.getByRole('list')).toBeInTheDocument(); @@ -145,6 +145,7 @@ it('renders an ordered list', () => { }, ]} />, + { legacyRoot: true }, ); expect(screen.getByRole('list')).toBeInTheDocument(); @@ -171,6 +172,7 @@ it('renders a task list', () => { }, ]} />, + { legacyRoot: true }, ); expect(screen.getByRole('list')).toBeInTheDocument(); @@ -213,6 +215,7 @@ it('renders a blockquote', () => { }, ]} />, + { legacyRoot: true }, ); expect(screen.getByText('Cogito ergo sum.')).toBeInTheDocument(); @@ -233,6 +236,7 @@ it('renders a code block', async () => { ]} /> , + { legacyRoot: true }, ); await waitFor(() => expect(screen.getByRole('region')).toBeInTheDocument()); @@ -253,6 +257,7 @@ it('renders a code block with language', async () => { ]} /> , + { legacyRoot: true }, ); await waitFor(() => expect(screen.getByRole('region')).toBeInTheDocument()); @@ -273,6 +278,7 @@ it('renders a Katex block', async () => { ]} /> , + { legacyRoot: true }, ); // workaround for jest-dom's inability to handle MathML @@ -292,6 +298,7 @@ it('renders a line break', () => { }, ]} />, + { legacyRoot: true }, ); expect(container).toContainHTML('
    '); @@ -319,6 +326,7 @@ it('renders plain text instead of emojis based on preference', () => { ]} /> , + { legacyRoot: true }, ); expect(screen.getByText('Hey! :smile: :)')).toBeInTheDocument(); @@ -346,6 +354,7 @@ it('renders plain text instead of ASCII emojis based on useEmojis preference', ( ]} /> , + { legacyRoot: true }, ); expect(screen.getByText('Hey! :smile: :)')).toBeInTheDocument(); diff --git a/packages/gazzodown/src/elements/Timestamp/ErrorBoundary.tsx b/packages/gazzodown/src/elements/Timestamp/ErrorBoundary.tsx index 453853275f8a..a659adec2aa7 100644 --- a/packages/gazzodown/src/elements/Timestamp/ErrorBoundary.tsx +++ b/packages/gazzodown/src/elements/Timestamp/ErrorBoundary.tsx @@ -1,7 +1,12 @@ -import React, { Component, ReactNode } from 'react'; +import { Component, ReactNode } from 'react'; -export class ErrorBoundary extends Component<{ fallback: React.ReactNode }, { hasError: boolean }> { - constructor(props: { fallback: React.ReactNode }) { +interface ErrorBoundaryProps { + fallback: ReactNode; + children: ReactNode; +} + +export class ErrorBoundary extends Component { + constructor(props: ErrorBoundaryProps) { super(props); this.state = { hasError: false }; } diff --git a/packages/gazzodown/tsconfig.build.json b/packages/gazzodown/tsconfig.build.json new file mode 100644 index 000000000000..9bab40e0b3d8 --- /dev/null +++ b/packages/gazzodown/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["./src/**/*"], + "exclude": ["./src/**/*.spec.ts", "./src/**/*.spec.tsx"] +} diff --git a/packages/gazzodown/tsconfig.json b/packages/gazzodown/tsconfig.json index e2be47cf5499..a144b6f02aa0 100644 --- a/packages/gazzodown/tsconfig.json +++ b/packages/gazzodown/tsconfig.json @@ -1,8 +1,3 @@ { - "extends": "../../tsconfig.base.client.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./dist" - }, - "include": ["./src/**/*"] + "extends": "../../tsconfig.base.client.json" } diff --git a/packages/i18n/CHANGELOG.md b/packages/i18n/CHANGELOG.md index 0b2df52c6042..8c46d5736706 100644 --- a/packages/i18n/CHANGELOG.md +++ b/packages/i18n/CHANGELOG.md @@ -1,5 +1,49 @@ # @rocket.chat/i18n +## 0.6.0 + +### Minor Changes + +- ([#32792](https://github.com/RocketChat/Rocket.Chat/pull/32792)) Allows admins to customize the `Subject` field of Omnichannel email transcripts via setting. By passing a value to the setting `Custom email subject for transcript`, system will use it as the `Subject` field, unless a custom subject is passed when requesting a transcript. If there's no custom subject and setting value is empty, the current default value will be used + +- ([#32517](https://github.com/RocketChat/Rocket.Chat/pull/32517)) Feature Preview: New Navigation - `Header` and `Contextualbar` size improvements consistent with the new global `NavBar` + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. +- ([#32744](https://github.com/RocketChat/Rocket.Chat/pull/32744)) Added account setting `Accounts_Default_User_Preferences_sidebarSectionsOrder` to allow users to reorganize sidebar sections + +### Patch Changes + +- ([#32788](https://github.com/RocketChat/Rocket.Chat/pull/32788)) Fixed wrong wording on a federation setting + +- ([#32024](https://github.com/RocketChat/Rocket.Chat/pull/32024)) Implemented a new tab to the users page called 'Active', this tab lists all users who have logged in for the first time and are active. + +## 0.6.0-rc.0 + +### Minor Changes + +- ([#32792](https://github.com/RocketChat/Rocket.Chat/pull/32792)) Allows admins to customize the `Subject` field of Omnichannel email transcripts via setting. By passing a value to the setting `Custom email subject for transcript`, system will use it as the `Subject` field, unless a custom subject is passed when requesting a transcript. If there's no custom subject and setting value is empty, the current default value will be used + +- ([#32517](https://github.com/RocketChat/Rocket.Chat/pull/32517)) Feature Preview: New Navigation - `Header` and `Contextualbar` size improvements consistent with the new global `NavBar` + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. +- ([#32744](https://github.com/RocketChat/Rocket.Chat/pull/32744)) Added account setting `Accounts_Default_User_Preferences_sidebarSectionsOrder` to allow users to reorganize sidebar sections + +### Patch Changes + +- ([#32788](https://github.com/RocketChat/Rocket.Chat/pull/32788)) Fixed wrong wording on a federation setting + +- ([#32024](https://github.com/RocketChat/Rocket.Chat/pull/32024)) Implemented a new tab to the users page called 'Active', this tab lists all users who have logged in for the first time and are active. + ## 0.5.0 ### Minor Changes diff --git a/packages/i18n/babel.config.cjs b/packages/i18n/babel.config.cjs deleted file mode 100644 index ab413e04e571..000000000000 --- a/packages/i18n/babel.config.cjs +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [['@babel/preset-env', { bugfixes: true }]], -}; diff --git a/packages/i18n/jest.config.mjs b/packages/i18n/jest.config.mjs deleted file mode 100644 index ab3eeabeabfb..000000000000 --- a/packages/i18n/jest.config.mjs +++ /dev/null @@ -1,6 +0,0 @@ -export default { - testEnvironment: 'node', - transform: {}, - moduleFileExtensions: ['js', 'mjs'], - testMatch: ['**/?(*.)+(spec|test).(m)js'], -}; diff --git a/packages/i18n/jest.config.ts b/packages/i18n/jest.config.ts new file mode 100644 index 000000000000..eb3d5fd797e5 --- /dev/null +++ b/packages/i18n/jest.config.ts @@ -0,0 +1,9 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + +export default { + preset: server.preset, + testMatch: ['/src/**/*.spec.(ts|js|mjs)'], + transformIgnorePatterns: ['/node_modules/@babel', '/node_modules/@jest', 'signal-exit'], + collectCoverage: false, +} satisfies Config; diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 91b74ef36cfa..6927aae08d1c 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,14 +1,11 @@ { "name": "@rocket.chat/i18n", - "version": "0.5.0", + "version": "0.6.0", "private": true, "devDependencies": { - "@babel/core": "~7.22.20", - "@babel/preset-env": "~7.22.20", - "babel-jest": "^29.5.0", + "@rocket.chat/jest-presets": "workspace:~", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", + "jest": "~29.7.0", "tsup": "^6.7.0", "typescript": "~5.3.3" }, @@ -16,7 +13,8 @@ "build": "node ./src/index.mjs", "lint": "eslint --ext .mjs,.js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .mjs,.js,.jsx,.ts,.tsx . --fix", - "test": "NODE_OPTIONS=--experimental-vm-modules jest" + "test": "jest", + "testunit": "jest" }, "main": "./dist/index.js", "module": "./dist/index.mjs", diff --git a/packages/i18n/src/index.spec.mjs b/packages/i18n/src/index.spec.mjs index 5941bf8fa579..b3efdaa10175 100644 --- a/packages/i18n/src/index.spec.mjs +++ b/packages/i18n/src/index.spec.mjs @@ -9,6 +9,8 @@ describe('i18n', () => { jest.spyOn(fs, 'readdirSync').mockReturnValue(['en.i18n.json']); jest.spyOn(fs, 'writeFileSync').mockImplementation(() => {}); jest.spyOn(fs, 'readFileSync').mockImplementation(() => JSON.stringify({})); + jest.spyOn(fs, 'existsSync').mockReturnValue(true); + jest.spyOn(fs, 'rmdirSync').mockImplementation(() => {}); }); afterEach(() => { diff --git a/packages/i18n/src/locales/af.i18n.json b/packages/i18n/src/locales/af.i18n.json index 0dc39dbae650..40ab367489b6 100644 --- a/packages/i18n/src/locales/af.i18n.json +++ b/packages/i18n/src/locales/af.i18n.json @@ -2060,12 +2060,19 @@ "Retail": "Kleinhandel", "Retention_setting_changed_successfully": "Behoudingsbeleidinstelling is suksesvol verander", "RetentionPolicy": "Retensiebeleid", + "RetentionPolicy_AppliesToChannels": "Van toepassing op kanale", + "RetentionPolicy_AppliesToDMs": "Van toepassing op direkte boodskappe", + "RetentionPolicy_AppliesToGroups": "Van toepassing op privaat groepe", "RetentionPolicy_Description": "Snoei ou boodskappe outomaties oor jou Rocket.Chat-voorbeeld.", "RetentionPolicy_Enabled": "enabled", "RetentionPolicy_ExcludePinned": "Sluit uitgespelde boodskappe uit", "RetentionPolicy_FilesOnly": "Net verwyder lÃĒers", "RetentionPolicy_FilesOnly_Description": "Slegs lÃĒers sal uitgevee word, die boodskappe self sal in plek bly.", "RetentionPolicy_MaxAge": "Maksimum boodskap ouderdom", + "RetentionPolicy_MaxAge_Channels": "Maksimum boodskap ouderdom in kanale", + "RetentionPolicy_MaxAge_Description": "Snoei alle boodskappe ouer as hierdie waarde, in dae", + "RetentionPolicy_MaxAge_DMs": "Maksimum boodskap ouderdom in direkte boodskappe", + "RetentionPolicy_MaxAge_Groups": "Maksimum boodskap ouderdom in privaat groepe", "RetentionPolicy_Precision": "Timer Precision", "RetentionPolicy_Precision_Description": "Hoe gereeld moet die snoei-timer hardloop. Om dit tot 'n meer presiese waarde te stel, maak kanale met vinnige retentietydperke beter, maar kan ekstra verwerkingskrag op groot gemeenskappe kos.", "RetentionPolicyRoom_Enabled": "Snoei ou boodskappe outomaties", @@ -2758,4 +2765,4 @@ "registration.component.form.sendConfirmationEmail": "Stuur bevestiging e-pos", "Enterprise": "onderneming", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/ar.i18n.json b/packages/i18n/src/locales/ar.i18n.json index 72c53f59612b..d3a86879f716 100644 --- a/packages/i18n/src/locales/ar.i18n.json +++ b/packages/i18n/src/locales/ar.i18n.json @@ -232,6 +232,7 @@ "Accounts_ShowFormLogin": "ØšØąØļ Ų†Ų…ŲˆØ°ØŦ ØĒØŗØŦŲŠŲ„ اŲ„د؎ŲˆŲ„ اŲ„اŲØĒØąØ§ØļŲŠ", "Accounts_TwoFactorAuthentication_By_TOTP_Enabled": "ØĒŲ…ŲƒŲŠŲ† اŲ„Ų…ØĩادŲ‚ØŠ اŲ„ØĢŲ†Ø§ØĻŲŠØŠ ØšØ¨Øą TOTP", "Accounts_TwoFactorAuthentication_By_TOTP_Enabled_Description": "ŲŠŲ…ŲƒŲ† Ų„Ų„Ų…ØŗØĒ؎دŲ…ŲŠŲ† ØĨؚداد اŲ„Ų…ØĩادŲ‚ØŠ اŲ„ØĢŲ†Ø§ØĻŲŠØŠ باØŗØĒ؎داŲ… ØŖŲŠ ØĒØˇØ¨ŲŠŲ‚ TOTP، Ų…ØĢŲ„ Google Authenticator ØŖŲˆ Authy.", + "Calls_in_queue_many": "{{count}} Ų…Ų† اŲ„Ų…ŲƒØ§Ų„Ų…اØĒ اŲ„اŲ†ØĒØ¸Ø§Øą", "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In": "اŲ„ا؎ØĒŲŠØ§Øą اŲ„ØĒŲ„Ų‚اØĻŲŠ Ų„دŲ‰ اŲ„Ų…ØŗØĒ؎دŲ…ŲŠŲ† اŲ„ØŦدد Ų„Ų„Ų…ØĩادŲ‚ØŠ اŲ„ØĢŲ†Ø§ØĻŲŠØŠ ØšØ¨Øą اŲ„Ø¨ØąŲŠØ¯ اŲ„ØĨŲ„ŲƒØĒØąŲˆŲ†ŲŠ", "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In_Description": "ØŗŲŠØĒŲ… ØĒŲ…ŲƒŲŠŲ† اŲ„Ų…ØĩادŲ‚ØŠ اŲ„ØĢŲ†Ø§ØĻŲŠØŠ Ų„دŲ‰ اŲ„Ų…ØŗØĒ؎دŲ…ŲŠŲ† اŲ„ØŦدد ØšØ¨Øą اŲ„Ø¨ØąŲŠØ¯ اŲ„ØĨŲ„ŲƒØĒØąŲˆŲ†ŲŠ اŲØĒØąØ§ØļŲŠŲ‹Ø§. ŲˆØŗŲŠØĒŲ…ŲƒŲ†ŲˆŲ† Ų…Ų† ØĒØšØˇŲŠŲ„Ų‡Ø§ ŲŲŠ ØĩŲØ­ØŠ Ų…Ų„ŲŲ‡Ų… اŲ„Ø´ØŽØĩŲŠ.", "Accounts_TwoFactorAuthentication_By_Email_Code_Expiration": "اŲ„ŲˆŲ‚ØĒ اŲ„Ų…حدد Ų„اŲ†ØĒŲ‡Ø§ØĄ ØĩŲ„احŲŠØŠ اŲ„ØąŲ…Ø˛ اŲ„Ų…ØąØŗŲ„ ØšØ¨Øą اŲ„Ø¨ØąŲŠØ¯ اŲ„ØĨŲ„ŲƒØĒØąŲˆŲ†ŲŠ باŲ„ØĢŲˆØ§Ų†ŲŠ", @@ -250,6 +251,7 @@ "API_EmbedDisabledFor": "ØĒØšØˇŲŠŲ„ اŲ„ØĒØļŲ…ŲŠŲ† Ų„Ų„Ų…ØŗØĒ؎دŲ…ŲŠŲ†", "Accounts_UserAddedEmail_Default": "

    Ų…ØąØ­Ø¨Ų‹Ø§ بŲƒŲ… ŲŲŠ [Site_Name]

    اŲ†ØĒŲ‚Ų„ ØĨŲ„Ų‰ [Site_URL] ŲˆØŦØąØ¨ ØŖŲØļŲ„ Ø­Ų„ Ų„Ų„Ø¯ØąØ¯Ø´ØŠ Ų…ŲØĒŲˆØ­ØŠ اŲ„Ų…ØĩØ¯Øą Ų…ØĒاح اŲ„ŲŠŲˆŲ…!

    ŲŠŲ…ŲƒŲ†Ųƒ ØĒØŗØŦŲŠŲ„ اŲ„د؎ŲˆŲ„ باØŗØĒ؎داŲ… Ø¨ØąŲŠØ¯Ųƒ اŲ„ØĨŲ„ŲƒØĒØąŲˆŲ†ŲŠ: [email] ŲˆŲƒŲ„Ų…ØŠ اŲ„Ų…ØąŲˆØą: [password]. Ų‚د ŲŠŲØˇŲ„ب Ų…Ų†Ųƒ ØĒØēŲŠŲŠØąŲ‡Ø§ بؚد ØĒØŗØŦŲŠŲ„ اŲ„د؎ŲˆŲ„ ŲŲŠ اŲ„Ų…ØąØŠ اŲ„ØŖŲˆŲ„Ų‰.", "Accounts_UserAddedEmail_Description": "ŲŠŲ…ŲƒŲ†Ųƒ اØŗØĒ؎داŲ… اŲ„ØšŲ†Ø§ØĩØą اŲ„Ų†Ø§ØĻب؊ اŲ„ØĒاŲ„ŲŠØŠ: \n - [name]، [fname]، [lname] Ų„اØŗŲ… اŲ„Ų…ØŗØĒ؎دŲ… اŲ„ŲƒØ§Ų…Ų„ ØŖŲˆ اŲ„اØŗŲ… اŲ„ØŖŲˆŲ„ ØŖŲˆ اØŗŲ… اŲ„ؚاØĻŲ„ØŠØŒ ØšŲ„Ų‰ اŲ„ØĒŲˆØ§Ų„ŲŠ. \n - `[email]` Ų„Ų„Ø¨ØąŲŠØ¯ اŲ„ØĨŲ„ŲƒØĒØąŲˆŲ†ŲŠ Ų„Ų„Ų…ØŗØĒ؎دŲ…. \n - `[password]` Ų„ŲƒŲ„Ų…ØŠ Ų…ØąŲˆØą اŲ„Ų…ØŗØĒ؎دŲ…. \n - `[Site_Name]` Ųˆ[Site_URL] Ų„اØŗŲ… اŲ„ØĒØˇØ¨ŲŠŲ‚ ŲˆØšŲ†ŲˆØ§Ų† URL اŲ„؎اØĩ بŲ‡ ØšŲ„Ų‰ اŲ„ØĒŲˆØ§Ų„ŲŠ. ", + "Calls_in_queue_few": "{{count}} Ų…Ų† اŲ„Ų…ŲƒØ§Ų„Ų…اØĒ اŲ„اŲ†ØĒØ¸Ø§Øą", "API_EmbedDisabledFor_Description": "Ų‚اØĻŲ…ØŠ ØŖØŗŲ…Ø§ØĄ اŲ„Ų…ØŗØĒ؎دŲ…ŲŠŲ† Ų…ŲØĩŲˆŲ„ØŠ بŲŲˆØ§ØĩŲ„ Ų„ØĒØšØˇŲŠŲ„ Ų…ؚاŲŠŲ†Ø§ØĒ اŲ„ØąØ§Ø¨Øˇ اŲ„Ų…ØļŲ…Ų†.", "Accounts_UserAddedEmailSubject_Default": "Ų„Ų‚د ØĒŲ…ØĒ ØĨØļاŲØĒŲƒ ØĨŲ„Ų‰ [Site_Name]", "Action": "اŲ„ØĨØŦØąØ§ØĄ", @@ -277,7 +279,6 @@ "add-livechat-department-agents_description": "ØĨØ°Ų† Ų„ØĨØļاŲØŠ ŲˆŲƒŲ„Ø§ØĄ Ų„Ų„Ų‚Ų†ŲˆØ§ØĒ Ų…ØĒؚدد؊ اŲ„اØĒØŦاŲ‡Ø§ØĒ ØĨŲ„Ų‰ اŲ„ØŖŲ‚ØŗاŲ…", "add-oauth-service": "ØĨØļاŲØŠ ؎دŲ…ØŠ Oauth", "add-oauth-service_description": "ØĨØ°Ų† Ų„ØĨØļاŲØŠ ؎دŲ…ØŠ Oauth ØŦدŲŠØ¯ØŠ", - "Calls_in_queue_many": "{{count}} Ų…Ų† اŲ„Ų…ŲƒØ§Ų„Ų…اØĒ اŲ„اŲ†ØĒØ¸Ø§Øą", "add-user": "ØĨØļاŲØŠ Ų…ØŗØĒ؎دŲ…", "add-user_description": "ØĨØ°Ų† Ų„ØĨØļاŲØŠ Ų…ØŗØĒ؎دŲ…ŲŠŲ† ØŦدد ØĨŲ„Ų‰ اŲ„؎ادŲ… ØšØ¨Øą شاش؊ اŲ„Ų…ØŗØĒ؎دŲ…ŲŠŲ†", "add-user-to-any-c-room": "ØĨØļاŲØŠ Ų…ØŗØĒ؎دŲ… ØĨŲ„Ų‰ ØŖŲŠ Channel ؚاŲ…ØŠ", @@ -297,7 +298,6 @@ "additional_integrations_Bots": "ØĨذا ŲƒŲ†ØĒ ØĒبحØĢ ØšŲ† ŲƒŲŠŲŲŠØŠ دŲ…ØŦ اŲ„ØąŲˆØ¨ŲˆØĒ اŲ„؎اØĩ بŲƒØŒ ŲŲ„Ų† ØĒØŦد ØŖŲØļŲ„ Ų…Ų† Ų…Ø­ŲˆŲ„ Hubot اŲ„؎اØĩ بŲ†Ø§. https://github.com/RocketChat/hubot-rocketchat", "Admin_disabled_encryption": "Ų„Ų… ŲŠŲ‚ŲˆŲ… اŲ„Ų…ØŗؤŲˆŲ„ Ų„دŲŠŲƒ بØĒŲ…ŲƒŲŠŲ† اŲ„ØĒØ´ŲŲŠØą بŲŠŲ† اŲ„ŲˆØ­Ø¯Ø§ØĒ اŲ„ØˇØąŲŲŠØŠ.", "Admin_Info": "Ų…ØšŲ„ŲˆŲ…اØĒ اŲ„Ų…ØŗؤŲˆŲ„", - "Calls_in_queue_few": "{{count}} Ų…Ų† اŲ„Ų…ŲƒØ§Ų„Ų…اØĒ اŲ„اŲ†ØĒØ¸Ø§Øą", "Administration": "اŲ„ØĨØ¯Ø§ØąØŠ", "Adult_images_are_not_allowed": "ØēŲŠØą Ų…ØŗŲ…ŲˆØ­ باŲ„ØĩŲˆØą اŲ„؎اØĩØŠ باŲ„ŲƒØ¨Ø§Øą", "Aerospace_and_Defense": "اŲ„ŲØļØ§ØĄ ŲˆØ§Ų„دŲØ§Øš", @@ -748,6 +748,7 @@ "CAS_enabled": "ØĒŲ… اŲ„ØĒŲ…ŲƒŲŠŲ†", "CAS_Login_Layout": "ØĒØŽØˇŲŠØˇ ØĒØŗØŦŲŠŲ„ د؎ŲˆŲ„ CAS", "CAS_login_url": "ØšŲ†ŲˆØ§Ų† URL Ų„ØĒØŗØŦŲŠŲ„ اŲ„د؎ŲˆŲ„ ØĨŲ„Ų‰ SSO", + "message_counter_many": "{{count}} ØąØŗاØĻŲ„", "CAS_login_url_Description": "ØšŲ†ŲˆØ§Ų† URL Ų„ØĒØŗØŦŲŠŲ„ اŲ„د؎ŲˆŲ„ اŲ„؎اØĩ ب؎دŲ…ØŠ SSO اŲ„ØŽØ§ØąØŦŲŠØŠØŒ Ų…ØĢŲ„: `https://sso.example.undef/sso/login`", "CAS_popup_height": "Ø§ØąØĒŲØ§Øš اŲ„Ų†Ø§ŲØ°ØŠ اŲ„Ų…Ų†Ø¨ØĢŲ‚ØŠ Ų„ØĒØŗØŦŲŠŲ„ اŲ„د؎ŲˆŲ„", "CAS_popup_width": "ØšØąØļ اŲ„Ų†Ø§ŲØ°ØŠ اŲ„Ų…Ų†Ø¨ØĢŲ‚ØŠ Ų„ØĒØŗØŦŲŠŲ„ اŲ„د؎ŲˆŲ„", @@ -763,6 +764,7 @@ "Categories*": "اŲ„ŲØĻاØĒ*", "CDN_JSCSS_PREFIX": "بادØĻØŠ CDN Ų„Ų€ JS/CSS", "CDN_PREFIX": "بادØĻØŠ CDN", + "meteor_status_reconnect_in_many": "اŲ„Ų…حاŲˆŲ„ØŠ Ų…ØąØŠ ØŖØŽØąŲ‰ ØŽŲ„اŲ„ {{count}} Ų…Ų† اŲ„ØĢŲˆØ§Ų†ŲŠ...", "CDN_PREFIX_ALL": "اØŗØĒ؎دŲ… بادØĻØŠ CDN Ų„ØŦŲ…ŲŠØš اŲ„ØŖØĩŲˆŲ„", "Certificates_and_Keys": "اŲ„Ø´Ų‡Ø§Ø¯Ø§ØĒ ŲˆØ§Ų„Ų…ŲØ§ØĒŲŠØ­", "change-livechat-room-visitor": "ØĒØēŲŠŲŠØą Ø˛ŲˆØ§Øą Livechat Room‎", @@ -831,6 +833,7 @@ "Click_here": "اŲ†Ų‚Øą Ų‡Ų†Ø§", "Click_here_for_more_details_or_contact_sales_for_a_new_license": "اŲ†Ų‚Øą Ų‡Ų†Ø§Ų„Ų…Ø˛ŲŠØ¯ Ų…Ų† اŲ„ØĒŲØ§ØĩŲŠŲ„ ØŖŲˆ اØĒØĩŲ„ بŲ€ {{email}} Ų„Ų„Ø­ØĩŲˆŲ„ ØšŲ„Ų‰ ØĒØąØŽŲŠØĩ ØŦدŲŠØ¯.", "Click_here_for_more_info": "اŲ†Ų‚Øą Ų‡Ų†Ø§ Ų„Ų„Ų…Ø˛ŲŠØ¯ Ų…Ų† اŲ„Ų…ØšŲ„ŲˆŲ…اØĒ", + "message_counter_few": "{{count}} ØąØŗاØĻŲ„", "Click_here_to_clear_the_selection": "اŲ†Ų‚Øą Ų‡Ų†Ø§ Ų„Ų…ØŗØ­ اŲ„ØĒحدŲŠØ¯", "Click_here_to_enter_your_encryption_password": "اŲ†Ų‚Øą Ų‡Ų†Ø§ Ų„ØĨد؎اŲ„ ŲƒŲ„Ų…ØŠ Ų…ØąŲˆØą اŲ„ØĒØ´ŲŲŠØą اŲ„؎اØĩØŠ بŲƒ", "Click_here_to_view_and_copy_your_password": "اŲ†Ų‚Øą Ų‡Ų†Ø§ Ų„ØšØąØļ ŲƒŲ„Ų…ØŠ اŲ„Ų…ØąŲˆØą ŲˆŲ†ØŗØŽŲ‡Ø§.", @@ -862,6 +865,7 @@ "Cloud_Invalid_license": "ØĒØąØŽŲŠØĩ ØēŲŠØą ØĩاŲ„Ø­!", "Cloud_Apply_license": "ØĒØˇØ¨ŲŠŲ‚ اŲ„ØĒØąØŽŲŠØĩ", "Cloud_connectivity": "اŲ„اØĒØĩاŲ„ اŲ„ØŗحابŲŠ", + "meteor_status_reconnect_in_few": "اŲ„Ų…حاŲˆŲ„ØŠ Ų…ØąØŠ ØŖØŽØąŲ‰ ØŽŲ„اŲ„ {{count}} Ų…Ų† اŲ„ØĢŲˆØ§Ų†ŲŠ...", "Cloud_address_to_send_registration_to": "اŲ„ØšŲ†ŲˆØ§Ų† اŲ„Ų…Ų‚ØąØą ØĨØąØŗاŲ„ اŲ„Ø¨ØąŲŠØ¯ اŲ„ØĨŲ„ŲƒØĒØąŲˆŲ†ŲŠ Ų„Ų„ØĒØŗØŦŲŠŲ„ اŲ„ØŗحابŲŠ اŲ„؎اØĩ بŲƒ ØĨŲ„ŲŠŲ‡.", "Cloud_click_here": "بؚد Ų†ØŗØŽ اŲ„Ų†Øĩ، اŲ†ØĒŲ‚Ų„ ØĨŲ„Ų‰ [ŲˆØ­Ø¯ØŠ اŲ„ØĒØ­ŲƒŲ… اŲ„ØŗحابŲŠØŠ (اŲ†Ų‚Øą Ų‡Ų†Ø§)] ({{cloudConsoleUrl}}).", "Cloud_console": "ŲˆØ­Ø¯ØŠ اŲ„ØĒØ­ŲƒŲ… اŲ„ØŗحابŲŠØŠ", @@ -942,7 +946,6 @@ "Contact_not_found": "Ų„Ų… ŲŠØĒŲ… اŲ„ØšØĢŲˆØą ØšŲ„Ų‰ ØŦŲ‡ØŠ اŲ„اØĒØĩاŲ„", "Contact_Profile": "اŲ„Ų…Ų„Ų اŲ„Ø´ØŽØĩŲŠ Ų„ØŦŲ‡ØŠ اŲ„اØĒØĩاŲ„", "Contact_Info": "Ų…ØšŲ„ŲˆŲ…اØĒ ØŦŲ‡ØŠ اŲ„اØĒØĩاŲ„", - "message_counter_many": "{{count}} ØąØŗاØĻŲ„", "Content": "اŲ„Ų…Ø­ØĒŲˆŲ‰", "Continue": "Ų…ØĒابؚ؊", "Continuous_sound_notifications_for_new_livechat_room": "ØĨØ´ØšØ§ØąØ§ØĒ ØĩŲˆØĒŲŠØŠ Ų…ØŗØĒŲ…ØąØŠ Ų„ØēØąŲØŠ اŲ„Ų‚Ų†Ø§ØŠ Ų…ØĒؚدد؊ اŲ„اØĒØŦاŲ‡Ø§Ų‡ØĒ اŲ„ØŦدŲŠØ¯ØŠ", @@ -957,7 +960,6 @@ "Conversations": "اŲ„Ų…حادØĢاØĒ", "Conversations_per_day": "اŲ„Ų…حادØĢاØĒ Ų„ŲƒŲ„ ŲŠŲˆŲ…", "Convert": "ØĒØ­ŲˆŲŠŲ„", - "meteor_status_reconnect_in_many": "اŲ„Ų…حاŲˆŲ„ØŠ Ų…ØąØŠ ØŖØŽØąŲ‰ ØŽŲ„اŲ„ {{count}} Ų…Ų† اŲ„ØĢŲˆØ§Ų†ŲŠ...", "Convert_Ascii_Emojis": "ØĒØ­ŲˆŲŠŲ„ ASCII ØĨŲ„Ų‰ ØąŲ…Ø˛ ØĒؚبŲŠØąŲŠ", "Convert_to_channel": "اŲ„ØĒØ­ŲˆŲŠŲ„ ØĨŲ„Ų‰ Channel", "Converting_channel_to_a_team": "ØŖŲ†ØĒ ØĒŲ‚ŲˆŲ… بØĒØ­ŲˆŲŠŲ„ Channel Ų‡Ø°Ų‡ ØĨŲ„Ų‰ ŲØąŲŠŲ‚. ØŗŲŠØĒŲ… اŲ„احØĒŲØ§Ø¸ بØŦŲ…ŲŠØš اŲ„ØŖØšØļØ§ØĄ.", @@ -1033,7 +1035,6 @@ "Country_Denmark": "اŲ„دŲ†Ų…Ø§ØąŲƒ", "Country_Djibouti": "ØŦŲŠØ¨ŲˆØĒŲŠ", "Country_Dominica": "دŲˆŲ…ŲŠŲ†ŲŠŲƒØ§", - "message_counter_few": "{{count}} ØąØŗاØĻŲ„", "Country_Dominican_Republic": "ØŦŲ…Ų‡ŲˆØąŲŠØŠ اŲ„دŲˆŲ…Ų†ŲŠŲƒØ§Ų†", "Country_Ecuador": "اŲ„ØĨŲƒŲˆØ§Ø¯ŲˆØą", "Country_Egypt": "Ų…ØĩØą", @@ -1069,7 +1070,6 @@ "Country_Heard_Island_and_Mcdonald_Islands": "ØŦØ˛ŲŠØąØŠ Ų‡ŲŠØąØ¯ ŲˆØŦØ˛Øą Ų…اŲƒØ¯ŲˆŲ†Ø§Ų„د", "Country_Holy_See_Vatican_City_State": "اŲ„ŲƒØąØŗŲŠ اŲ„ØąØŗŲˆŲ„ŲŠ (دŲˆŲ„ØŠ اŲ„ŲØ§ØĒŲŠŲƒØ§Ų†)", "Country_Honduras": "Ų‡Ų†Ø¯ŲˆØąØ§Øŗ", - "meteor_status_reconnect_in_few": "اŲ„Ų…حاŲˆŲ„ØŠ Ų…ØąØŠ ØŖØŽØąŲ‰ ØŽŲ„اŲ„ {{count}} Ų…Ų† اŲ„ØĢŲˆØ§Ų†ŲŠ...", "Country_Hong_Kong": "Ų‡ŲˆŲ†Øē ŲƒŲˆŲ†Øē", "Country_Hungary": "Ų‡Ų†ØēØ§ØąŲŠØ§", "Country_Iceland": "ØŖŲŠØŗŲ„Ų†Ø¯Ø§", @@ -1353,8 +1353,10 @@ "delete-message_description": "ØĨØ°Ų† Ų„حذŲ ØąØŗاŲ„ØŠ ŲŲŠ ØēØąŲØŠ", "delete-own-message": "حذŲ ØąØŗاŲ„ØŠ Ø´ØŽØĩŲŠØŠ", "delete-own-message_description": "ØĨØ°Ų† Ų„حذŲ ØąØŗاŲ„ØŠ Ø´ØŽØĩŲŠØŠ", + "message_counter_two": "{{count}} ØąØŗاØĻŲ„", "delete-p": "حذŲ Channel اŲ„؎اØĩØŠ", "delete-p_description": "ØĨØ°Ų† Ų„حذŲ اŲ„Ų‚Ų†ŲˆØ§ØĒ اŲ„؎اØĩØŠ", + "message_counter_zero": "{{count}} ØąØŗاØĻŲ„", "delete-user": "حذŲ Ų…ØŗØĒ؎دŲ…", "delete-user_description": "ØĨØ°Ų† Ų„حذŲ اŲ„Ų…ØŗØĒ؎دŲ…ŲŠŲ†", "Deleted": "ØĒŲ… اŲ„حذŲ!", @@ -1379,6 +1381,8 @@ "Details": "اŲ„ØĒŲØ§ØĩŲŠŲ„", "line": "اŲ„ØŗØˇØą", "Device_Management_IP": " ØšŲ†ŲˆØ§Ų† IP", + "meteor_status_reconnect_in_two": "اŲ„Ų…حاŲˆŲ„ØŠ Ų…ØąØŠ ØŖØŽØąŲ‰ ØŽŲ„اŲ„ {{count}} Ų…Ų† اŲ„ØĢŲˆØ§Ų†ŲŠ...", + "meteor_status_reconnect_in_zero": "اŲ„Ų…حاŲˆŲ„ØŠ Ų…ØąØŠ ØŖØŽØąŲ‰ ØŽŲ„اŲ„ {{count}} Ų…Ų† اŲ„ØĢŲˆØ§Ų†ŲŠ...", "Different_Style_For_User_Mentions": "Ų†Ų…Øˇ Ų…ØŽØĒŲ„Ų Ų„ØĨØ´Ø§ØąØ§ØĒ اŲ„Ų…ØŗØĒ؎دŲ…", "Livechat_Facebook_API_Key": "Ų…ŲØĒاح ŲˆØ§ØŦŲ‡ØŠ Ø¨ØąŲ…ØŦØŠ ØĒØˇØ¨ŲŠŲ‚اØĒ Channel Ų…ØĒؚدد؊ اŲ„اØĒØŦاŲ‡Ø§ØĒ", "Direct": "Ų…Ø¨Ø§Ø´Øą", @@ -1607,10 +1611,8 @@ "EncryptionKey_Change_Disabled": "Ų„ا ŲŠŲ…ŲƒŲ†Ųƒ ØĒØšŲŠŲŠŲ† ŲƒŲ„Ų…ØŠ Ų…ØąŲˆØą Ų„Ų…ŲØĒاح اŲ„ØĒØ´ŲŲŠØą اŲ„؎اØĩ بŲƒ Ų„ØŖŲ† Ų…ŲØĒاحŲƒ اŲ„؎اØĩ ØēŲŠØą Ų…ŲˆØŦŲˆØ¯ ØšŲ„Ų‰ Ų‡Ø°Ø§ اŲ„ØšŲ…ŲŠŲ„. Ų„ØĒØšŲŠŲŠŲ† ŲƒŲ„Ų…ØŠ Ų…ØąŲˆØą ØŦدŲŠØ¯ØŠØŒ ŲŠŲ„Ø˛Ų…Ųƒ ØĒØ­Ų…ŲŠŲ„ Ų…ŲØĒاحŲƒ اŲ„؎اØĩ باØŗØĒ؎داŲ… ŲƒŲ„Ų…ØŠ Ų…ØąŲˆØąŲƒ اŲ„حاŲ„ŲŠØŠ ØŖŲˆ اØŗØĒ؎داŲ… ŲˆŲƒŲŠŲ„ ØŗبŲ‚ ØąŲØš اŲ„Ų…ŲØĒاح Ų„دŲŠŲ‡.", "End": "ØĨŲ†Ų‡Ø§ØĄ", "End_call": "ØĨŲ†Ų‡Ø§ØĄ Ų…ŲƒØ§Ų„Ų…ØŠ", - "message_counter_two": "{{count}} ØąØŗاØĻŲ„", "Expand_view": "ØĒŲˆØŗŲŠØš اŲ„ØšØąØļ", "Explore_marketplace": "اØŗØĒŲƒØ´Ø§Ų اŲ„ØŗŲˆŲ‚", - "message_counter_zero": "{{count}} ØąØŗاØĻŲ„", "Explore_the_marketplace_to_find_awesome_apps": "اØŗØĒŲƒØ´Ų اŲ„ØŗŲˆŲ‚ Ų„Ų„ØšØĢŲˆØą ØšŲ„Ų‰ ØĒØˇØ¨ŲŠŲ‚اØĒ ØąØ§ØĻؚ؊ Ų„Ų€ Rocket.Chat", "Export": "ØĒØĩدŲŠØą", "End_Call": "ØĨŲ†Ų‡Ø§ØĄ Ų…ŲƒØ§Ų„Ų…ØŠ", @@ -1659,9 +1661,7 @@ "error-canned-response-not-found": "Ų„Ų… ŲŠØĒŲ… اŲ„ØšØĢŲˆØą ØšŲ„Ų‰ ØąØ¯ŲˆØ¯ Ų…ØŗØŦŲ„ØŠ", "error-cannot-delete-app-user": "ØēŲŠØą Ų…ØŗŲ…ŲˆØ­ بحذŲ Ų…ØŗØĒ؎دŲ… اŲ„ØĒØˇØ¨ŲŠŲ‚ØŒ Ų‚Ų… بØĨŲ„ØēØ§ØĄ ØĒØĢبŲŠØĒ اŲ„ØĒØˇØ¨ŲŠŲ‚ اŲ„Ų…Ų‚ابŲ„ Ų„ØĨØ˛Ø§Ų„ØĒŲ‡.", "error-cant-invite-for-direct-room": "Ų„ا ŲŠŲ…ŲƒŲ† دؚŲˆØŠ اŲ„Ų…ØŗØĒ؎دŲ… ŲŲŠ اŲ„ØēØąŲØŠ اŲ„Ų…Ø¨Ø§Ø´ØąØŠ", - "meteor_status_reconnect_in_two": "اŲ„Ų…حاŲˆŲ„ØŠ Ų…ØąØŠ ØŖØŽØąŲ‰ ØŽŲ„اŲ„ {{count}} Ų…Ų† اŲ„ØĢŲˆØ§Ų†ŲŠ...", "error-channels-setdefault-is-same": "اŲ„ØĨؚداد اŲ„اŲØĒØąØ§ØļŲŠ Ų„Ų„Ų‚Ų†Ø§ØŠ Ų‡Ųˆ Ų†ŲØŗŲ‡ اŲ„Ø°ŲŠ ØŗŲŠØĒŲ… ØĒØēŲŠŲŠØąŲ‡ ØĨŲ„ŲŠŲ‡.", - "meteor_status_reconnect_in_zero": "اŲ„Ų…حاŲˆŲ„ØŠ Ų…ØąØŠ ØŖØŽØąŲ‰ ØŽŲ„اŲ„ {{count}} Ų…Ų† اŲ„ØĢŲˆØ§Ų†ŲŠ...", "error-channels-setdefault-missing-default-param": "ŲŠŲ„Ø˛Ų… ØĒŲˆŲŲŠØą bodyParam \"اŲ„اŲØĒØąØ§ØļŲŠØŠ\"", "error-could-not-change-email": "ØĒØšØ°Øą ØĒØēŲŠŲŠØą اŲ„Ø¨ØąŲŠØ¯ اŲ„ØĨŲ„ŲƒØĒØąŲˆŲ†ŲŠ", "error-could-not-change-name": "ØĒØšØ°Øą ØĒØēŲŠŲŠØą اŲ„اØŗŲ…", @@ -3546,6 +3546,9 @@ "RetentionPolicy_Advanced_Precision": "اØŗØĒ؎داŲ… ØĒŲƒŲˆŲŠŲ† Ų†Ų‡ØŦ اŲ„اØŗØĒبŲ‚Ø§ØĄ اŲ„Ų…ØĒŲ‚دŲ…", "RetentionPolicy_Advanced_Precision_Cron": "اØŗØĒ؎داŲ… Cron Ų„Ų†Ų‡ØŦ اŲ„اØŗØĒبŲ‚Ø§ØĄ اŲ„Ų…ØĒŲ‚دŲ…", "RetentionPolicy_Advanced_Precision_Cron_Description": "ؚدد اŲ„Ų…ØąØ§ØĒ اŲ„ØĒŲŠ ŲŠØŦب ŲŲŠŲ‡Ø§ ØĒØ´ØēŲŠŲ„ Ų…ؤŲ‚ØĒ اŲ„ØĒŲ†Ų‚ŲŠØ­ اŲ„Ų…حدد بŲˆØ§ØŗØˇØŠ ØĒؚبŲŠØą ŲˆØ¸ŲŠŲØŠ cron. ŲŠØ¤Ø¯ŲŠ ØĒØšŲŠŲŠŲ† Ų‡Ø°Ø§ ØĨŲ„Ų‰ Ų‚ŲŠŲ…ØŠ ØŖŲƒØĢØą دŲ‚ØŠ ØĨŲ„Ų‰ ØŦØšŲ„ اŲ„Ų‚Ų†ŲˆØ§ØĒ ذاØĒ Ų…ؤŲ‚ØĒاØĒ اŲ„اØŗØĒبŲ‚Ø§ØĄ اŲ„ØŗØąŲŠØšØŠ ØĒØšŲ…Ų„ بشŲƒŲ„ ØŖŲØļŲ„ØŒ ŲˆŲ„ŲƒŲ†Ų‡Ø§ Ų‚د ØĒŲƒŲ„Ų Ų‚ŲˆØŠ Ų…ؚاŲ„ØŦØŠ ØĨØļاŲŲŠØŠ ØšŲ„Ų‰ اŲ„Ų…ØŦØĒŲ…ؚاØĒ اŲ„ŲƒØ¨ŲŠØąØŠ.", + "RetentionPolicy_AppliesToChannels": "ŲŠŲ†ØˇØ¨Ų‚ ØšŲ„Ų‰ اŲ„Ų‚Ų†ŲˆØ§ØĒ", + "RetentionPolicy_AppliesToDMs": "ŲŠŲ†ØˇØ¨Ų‚ ØšŲ„Ų‰ اŲ„ØąØŗاØĻŲ„ اŲ„Ų…Ø¨Ø§Ø´ØąØŠ", + "RetentionPolicy_AppliesToGroups": "ŲŠŲ†ØˇØ¨Ų‚ ØšŲ„Ų‰ اŲ„Ų…ØŦŲ…ŲˆØšØ§ØĒ اŲ„؎اØĩØŠ", "RetentionPolicy_Description": "ŲŠŲ‚ŲˆŲ… ØĒŲ„Ų‚اØĻŲŠŲ‹Ø§ بØĒŲ†Ų‚ŲŠØ­ اŲ„ØąØŗاØĻŲ„ اŲ„Ų‚دŲŠŲ…ØŠ ØšØ¨Øą Ų…ØĢŲŠŲ„ Rocket.Chat اŲ„؎اØĩ بŲƒ.", "RetentionPolicy_DoNotPruneDiscussion": "Ų„ا ØĒŲ‚Ų… بØĒŲ†Ų‚ŲŠØ­ ØąØŗاØĻŲ„ اŲ„Ų…Ų†Ø§Ų‚ش؊", "RetentionPolicy_DoNotPrunePinned": "Ų„ا ØĒŲ‚Ų… بØĒŲ†Ų‚ŲŠØ­ اŲ„ØąØŗاØĻŲ„ اŲ„Ų…ØĢبØĒØŠ", @@ -3555,6 +3558,10 @@ "RetentionPolicy_FilesOnly": "حذŲ اŲ„Ų…Ų„ŲØ§ØĒ ŲŲ‚Øˇ", "RetentionPolicy_FilesOnly_Description": "ØŗŲŠØĒŲ… حذŲ اŲ„Ų…Ų„ŲØ§ØĒ ŲŲ‚ØˇØŒ ŲˆØŗØĒظŲ„ اŲ„ØąØŗاØĻŲ„ Ų†ŲØŗŲ‡Ø§ ŲŲŠ Ų…ŲƒØ§Ų†Ų‡Ø§.", "RetentionPolicy_MaxAge": "اŲ„حد اŲ„ØŖŲ‚ØĩŲ‰ Ų„ØšŲ…Øą اŲ„ØąØŗاØĻŲ„", + "RetentionPolicy_MaxAge_Channels": "اŲ„حد اŲ„ØŖŲ‚ØĩŲ‰ Ų„ØšŲ…Øą اŲ„ØąØŗاØĻŲ„ ŲŲŠ اŲ„Ų‚Ų†ŲˆØ§ØĒ", + "RetentionPolicy_MaxAge_Description": "ØĒŲ†Ų‚ŲŠØ­ ŲƒŲ„ اŲ„ØąØŗاØĻŲ„ اŲ„ØŖŲ‚دŲ… Ų…Ų† Ų‡Ø°Ų‡ اŲ„Ų‚ŲŠŲ…ØŠØŒ باŲ„ØŖŲŠØ§Ų…", + "RetentionPolicy_MaxAge_DMs": "اŲ„حد اŲ„ØŖŲ‚ØĩŲ‰ Ų„ØšŲ…Øą اŲ„ØąØŗاØĻŲ„ ŲŲŠ اŲ„ØąØŗاØĻŲ„ اŲ„Ų…Ø¨Ø§Ø´ØąØŠ", + "RetentionPolicy_MaxAge_Groups": "اŲ„حد اŲ„ØŖŲ‚ØĩŲ‰ Ų„ØšŲ…Øą اŲ„ØąØŗاØĻŲ„ ŲŲŠ اŲ„Ų…ØŦŲ…ŲˆØšØ§ØĒ اŲ„؎اØĩØŠ", "RetentionPolicy_Precision": "دŲ‚ØŠ اŲ„Ų…ؤŲ‚ØĒ", "RetentionPolicy_Precision_Description": "ؚدد اŲ„Ų…ØąØ§ØĒ اŲ„ØĒŲŠ ŲŠØŦب ŲŲŠŲ‡Ø§ ØĒØ´ØēŲŠŲ„ Ų…ؤŲ‚ØĒ اŲ„ØĒŲ†Ų‚ŲŠØ­. ŲŠØ¤Ø¯ŲŠ ØĒØšŲŠŲŠŲ† Ų‡Ø°Ø§ ØĨŲ„Ų‰ Ų‚ŲŠŲ…ØŠ ØŖŲƒØĢØą دŲ‚ØŠ ØĨŲ„Ų‰ ØŦØšŲ„ اŲ„Ų‚Ų†ŲˆØ§ØĒ ذاØĒ Ų…ؤŲ‚ØĒاØĒ اŲ„اØŗØĒبŲ‚Ø§ØĄ اŲ„ØŗØąŲŠØšØŠ ØĒØšŲ…Ų„ بشŲƒŲ„ ØŖŲØļŲ„ØŒ ŲˆŲ„ŲƒŲ†Ų‡Ø§ Ų‚د ØĒŲƒŲ„Ų Ų‚ŲˆØŠ Ų…ؚاŲ„ØŦØŠ ØĨØļاŲŲŠØŠ ØšŲ„Ų‰ اŲ„Ų…ØŦØĒŲ…ؚاØĒ اŲ„ŲƒØ¨ŲŠØąØŠ.", "RetentionPolicyRoom_Enabled": "ØĒŲ†Ų‚ŲŠØ­ اŲ„ØąØŗاØĻŲ„ اŲ„Ų‚دŲŠŲ…ØŠ ØĒŲ„Ų‚اØĻŲŠŲ‹Ø§", @@ -4885,4 +4892,4 @@ "Enterprise": "Ų…ؤØŗØŗØŠ", "UpgradeToGetMore_engagement-dashboard_Title": "اŲ„ØĒØ­Ų„ŲŠŲ„اØĒ", "UpgradeToGetMore_auditing_Title": "ØĒدŲ‚ŲŠŲ‚ اŲ„ØąØŗاØĻŲ„" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/az.i18n.json b/packages/i18n/src/locales/az.i18n.json index 93d83cd373a8..118be4b37920 100644 --- a/packages/i18n/src/locales/az.i18n.json +++ b/packages/i18n/src/locales/az.i18n.json @@ -2060,12 +2060,19 @@ "Retail": "Pərakəndə", "Retention_setting_changed_successfully": "Saxlama siyasəti parametrləri uğurla dəyişdirildi", "RetentionPolicy": "Saklama siyasəti", + "RetentionPolicy_AppliesToChannels": "Kanallara tətbiq edilir", + "RetentionPolicy_AppliesToDMs": "Birbaşa mesajlar ÃŧçÃŧn tətbiq edilir", + "RetentionPolicy_AppliesToGroups": "Şəxsi qruplara tətbiq edilir", "RetentionPolicy_Description": "Sizin Rocket.Chat nizamÄąnda avtomatik olaraq kÃļhnə mesajlarÄą kəsdirir.", "RetentionPolicy_Enabled": "Etkin", "RetentionPolicy_ExcludePinned": "Səslənən mesajlarÄą həddindən kənarlaşdÄąrÄąn", "RetentionPolicy_FilesOnly": "YalnÄąz fayllarÄą silin", "RetentionPolicy_FilesOnly_Description": "YalnÄąz fayllar silinəcək, mesajlar Ãļzləri yerində qalacaqlar.", "RetentionPolicy_MaxAge": "Maksimum mesaj yaÅŸÄą", + "RetentionPolicy_MaxAge_Channels": "Kanallarda maksimum mesaj yaÅŸÄą", + "RetentionPolicy_MaxAge_Description": "Bu dəyərdən daha eski olan bÃŧtÃŧn mesajlarÄą bir neçə gÃŧndə kəsin", + "RetentionPolicy_MaxAge_DMs": "Birbaşa mesajlarda maksimum mesaj yaÅŸÄą", + "RetentionPolicy_MaxAge_Groups": "Şəxsi qruplarda maksimum mesaj yaÅŸÄą", "RetentionPolicy_Precision": "Timer dəqiqliyi", "RetentionPolicy_Precision_Description": "Hədəf çəkicinin necə tez-tez istifadə etməsi lazÄąmdÄąr. Bunu daha dəqiq bir dəyərə təyin etmək, sÃŧrətli saxlama sayğaclarÄą olan kanallarÄą daha yaxÅŸÄą işlədir, lakin bÃļyÃŧk icmalarda əlavə işləmə gÃŧcÃŧnə səbəb ola bilər.", "RetentionPolicyRoom_Enabled": "Avtomatik olaraq kÃļhnə mesajlar budayÄąn", @@ -2758,4 +2765,4 @@ "registration.component.form.sendConfirmationEmail": "Təsdiq e-poçt gÃļndər", "Enterprise": "MÃŧəssisə", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/be-BY.i18n.json b/packages/i18n/src/locales/be-BY.i18n.json index 829759366886..858688468755 100644 --- a/packages/i18n/src/locales/be-BY.i18n.json +++ b/packages/i18n/src/locales/be-BY.i18n.json @@ -2077,12 +2077,19 @@ "Retail": "Ņ€ĐžĐˇĐŊŅ–Ņ‡ĐŊŅ‹", "Retention_setting_changed_successfully": "НаŅŅ‚Ņ€ĐžĐšĐēĐ° ĐŋĐ°ĐģŅ–Ņ‚Ņ‹ĐēŅ– ŅžŅ‚Ņ€Ņ‹ĐŧĐ°ĐŊĐŊŅ ĐŋĐ°ŅĐŋŅŅ…Ова СĐŧĐĩĐŊĐĩĐŊŅ‹", "RetentionPolicy": "ĐŋĐ°ĐģŅ–Ņ‚Ņ‹ĐēĐ° ŅžŅ‚Ņ€Ņ‹ĐŧĐ°ĐŊĐŊŅ", + "RetentionPolicy_AppliesToChannels": "ĐĄŅ‚авŅ–Ņ†Ņ†Đ° Đ´Đ° ĐēĐ°ĐŊĐ°ĐģĐ°Ņ…", + "RetentionPolicy_AppliesToDMs": "ЎĐļŅ‹Đ˛Đ°ĐĩŅ†Ņ†Đ° Đ´ĐģŅ ĐŊĐ°ĐēŅ–Ņ€Đ°Đ˛Đ°ĐŊĐŊŅ ĐŋавĐĩĐ´Đ°ĐŧĐģĐĩĐŊĐŊŅŅž", + "RetentionPolicy_AppliesToGroups": "ĐĄŅ‚авŅ–Ņ†Ņ†Đ° Đ´Đ° ĐŋŅ€Ņ‹Đ˛Đ°Ņ‚ĐŊŅ‹Ņ… ĐŗŅ€ŅƒĐŋĐ°Đŧ", "RetentionPolicy_Description": "АŅžŅ‚Đ°ĐŧĐ°Ņ‚Ņ‹Ņ‡ĐŊĐ° Đ°Ņ‡Ņ‹ŅˆŅ‡Đ°Đĩ ŅŅ‚Đ°Ņ€Ņ‹Ņ ĐŋавĐĩĐ´Đ°ĐŧĐģĐĩĐŊĐŊŅ– ĐŋŅ€Đ°Đˇ ваŅˆ Rocket.Chat Đ°ŅĐžĐąĐŊŅ–Đē.", "RetentionPolicy_Enabled": "ĐŖĐēĐģŅŽŅ‡Đ°ĐŊĐ°", "RetentionPolicy_ExcludePinned": "ВŅ‹ĐēĐģŅŽŅ‡Ņ‹Ņ†ŅŒ ŅžŅĐēĐģĐ°Đ´Đ°ĐģŅ– ĐŋавĐĩĐ´Đ°ĐŧĐģĐĩĐŊĐŊŅ", "RetentionPolicy_FilesOnly": "ĐĸĐžĐģŅŒĐēŅ– вŅ‹Đ´Đ°ĐģŅŅ†ŅŒ Ņ„Đ°ĐšĐģŅ‹", "RetentionPolicy_FilesOnly_Description": "ĐĸĐžĐģŅŒĐēŅ– Ņ„Đ°ĐšĐģŅ‹ ĐąŅƒĐ´ŅƒŅ†ŅŒ вŅ‹Đ´Đ°ĐģĐĩĐŊŅ‹Ņ, ĐŋавĐĩĐ´Đ°ĐŧĐģĐĩĐŊĐŊŅ– ĐąŅƒĐ´ŅƒŅ†ŅŒ ŅĐ°ĐŧŅ– СаŅŅ‚Đ°ŅŽŅ†Ņ†Đ° ĐŊĐ° ĐŧĐĩŅŅ†Ņ‹.", "RetentionPolicy_MaxAge": "МаĐēŅŅ–ĐŧĐ°ĐģŅŒĐŊŅ‹ ŅžĐˇŅ€ĐžŅŅ‚ ĐŋавĐĩĐ´Đ°ĐŧĐģĐĩĐŊĐŊŅ", + "RetentionPolicy_MaxAge_Channels": "МаĐēŅŅ–ĐŧĐ°ĐģŅŒĐŊŅ‹ ŅžĐˇŅ€ĐžŅŅ‚ ĐŋавĐĩĐ´Đ°ĐŧĐģĐĩĐŊĐŊŅ– Ņž ĐēĐ°ĐŊĐ°ĐģĐ°Ņ…", + "RetentionPolicy_MaxAge_Description": "ВŅ‹Đ´Đ°ĐģŅŅ†ŅŒ ŅžŅĐĩ ĐŋавĐĩĐ´Đ°ĐŧĐģĐĩĐŊĐŊŅ– ŅŅ‚Đ°Ņ€ŅĐš, Ņ‡Ņ‹Đŧ ĐŗŅŅ‚Đ° СĐŊĐ°Ņ‡ŅĐŊĐŊĐĩ, Ņƒ Đ´ĐŊŅŅ…", + "RetentionPolicy_MaxAge_DMs": "МаĐēŅŅ–ĐŧĐ°ĐģŅŒĐŊŅ‹ ŅžĐˇŅ€ĐžŅŅ‚ ĐŋавĐĩĐ´Đ°ĐŧĐģĐĩĐŊĐŊŅ– Ņž ĐŋŅ€Đ°ĐŧŅ‹Ņ… ĐŋавĐĩĐ´Đ°ĐŧĐģĐĩĐŊĐŊŅŅž", + "RetentionPolicy_MaxAge_Groups": "МаĐēŅŅ–ĐŧĐ°ĐģŅŒĐŊŅ‹ ŅžĐˇŅ€ĐžŅŅ‚ ĐŋавĐĩĐ´Đ°ĐŧĐģĐĩĐŊĐŊŅ– Ņž ĐŋŅ€Ņ‹Đ˛Đ°Ņ‚ĐŊŅ‹Ņ… ĐŗŅ€ŅƒĐŋĐ°Ņ…", "RetentionPolicy_Precision": "Ņ‚Đ°ĐšĐŧĐĩŅ€ Precision", "RetentionPolicy_Precision_Description": "Đ¯Đē Ņ‡Đ°ŅŅ‚Đ° Ņ‚Đ°ĐšĐŧĐĩŅ€ Ņ‡Đ°Ņ€ĐŊĐ°ŅĐģŅ–Ņž ĐŋавŅ–ĐŊĐĩĐŊ ĐŋŅ€Đ°Ņ†Đ°Đ˛Đ°Ņ†ŅŒ. ЎŅŅ‚Đ°ĐŊĐžŅžĐēĐ° ĐŗŅŅ‚Đ°ĐŗĐ° йОĐģŅŒŅˆ Đ´Đ°ĐēĐģĐ°Đ´ĐŊĐ°ĐŗĐ° СĐŊĐ°Ņ‡ŅĐŊĐŊĐĩ Ņ€ĐžĐąŅ–Ņ†ŅŒ ĐēĐ°ĐŊĐ°ĐģŅ‹ С Ņ…ŅƒŅ‚ĐēŅ–ĐŧŅ– Ņ‚Đ°ĐšĐŧĐĩŅ€Đ°ĐŧŅ– СаŅ…ĐžŅžĐ˛Đ°ĐŊĐŊŅ ĐģĐĩĐŋŅˆ ĐŋŅ€Đ°Ņ†Đ°Đ˛Đ°Ņ†ŅŒ, Đ°ĐģĐĩ ĐŧĐžĐŗŅƒŅ†ŅŒ ĐēĐ°ŅˆŅ‚аваŅ†ŅŒ Đ´Đ°Đ´Đ°Ņ‚ĐēОвŅ‹Ņ… вŅ‹ĐģŅ–Ņ‡Đ°ĐģŅŒĐŊŅ‹Ņ… ĐŧĐ°ĐŗŅƒŅ‚ĐŊĐ°ŅŅ†ŅŅž ĐŊĐ° вŅĐģŅ–ĐēŅ–Ņ… ŅŅƒĐŋĐžĐģŅŒĐŊĐ°ŅŅ†ŅŅ….", "RetentionPolicyRoom_Enabled": "АŅžŅ‚Đ°ĐŧĐ°Ņ‚Ņ‹Ņ‡ĐŊĐ° Đ°ĐąŅ€ŅĐˇĐ°Ņ†ŅŒ ŅŅ‚Đ°Ņ€Ņ‹Ņ ĐŋавĐĩĐ´Đ°ĐŧĐģĐĩĐŊĐŊŅ–", @@ -2776,4 +2783,4 @@ "registration.component.form.sendConfirmationEmail": "АдĐŋŅ€Đ°Đ˛Ņ–Ņ†ŅŒ ĐŋĐ° ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊĐ°Đš ĐŋĐžŅˆŅ†Đĩ ĐŋĐ°Ņ†Đ˛ŅŅ€Đ´ĐļŅĐŊĐŊĐĩ", "Enterprise": "ĐŋŅ€Đ°Đ´ĐŋŅ€Ņ‹ĐĩĐŧŅŅ‚ва", "UpgradeToGetMore_engagement-dashboard_Title": "Đ°ĐŊĐ°ĐģŅ–Ņ‚Ņ‹ĐēĐ°" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/bg.i18n.json b/packages/i18n/src/locales/bg.i18n.json index 3c786eaea50b..ac7c8ddcd000 100644 --- a/packages/i18n/src/locales/bg.i18n.json +++ b/packages/i18n/src/locales/bg.i18n.json @@ -2057,12 +2057,19 @@ "Retail": "На Đ´Ņ€ĐĩĐąĐŊĐž", "Retention_setting_changed_successfully": "НаŅŅ‚Ņ€ĐžĐšĐēĐ°Ņ‚Đ° ĐŊĐ° ĐŋŅ€Đ°Đ˛Đ¸ĐģĐ°Ņ‚Đ° Са СадŅŠŅ€ĐļĐ°ĐŊĐĩ ĐąĐĩ ĐŋŅ€ĐžĐŧĐĩĐŊĐĩĐŊĐ° ŅƒŅĐŋĐĩŅˆĐŊĐž", "RetentionPolicy": "ПŅ€Đ°Đ˛Đ¸ĐģĐ° Са СаĐŋаСваĐŊĐĩ", + "RetentionPolicy_AppliesToChannels": "ПŅ€Đ¸ĐģĐ°ĐŗĐ° ŅĐĩ Са ĐēĐ°ĐŊĐ°Đģи", + "RetentionPolicy_AppliesToDMs": "ПŅ€Đ¸ĐģĐ°ĐŗĐ° ŅĐĩ Са диŅ€ĐĩĐēŅ‚ĐŊи ŅŅŠĐžĐąŅ‰ĐĩĐŊиŅ", + "RetentionPolicy_AppliesToGroups": "ОŅ‚ĐŊĐ°ŅŅ ŅĐĩ Са Ņ‡Đ°ŅŅ‚ĐŊи ĐŗŅ€ŅƒĐŋи", "RetentionPolicy_Description": "АвŅ‚ĐžĐŧĐ°Ņ‚иŅ‡ĐŊĐž ĐŋОдŅ€ŅĐˇĐ˛Đ° ŅŅ‚Đ°Ņ€Đ¸Ņ‚Đĩ ŅŅŠĐžĐąŅ‰ĐĩĐŊиŅ в иСĐŗĐģĐĩĐ´Đ° Ви Rocket.Chat.", "RetentionPolicy_Enabled": "Enabled", "RetentionPolicy_ExcludePinned": "ИСĐēĐģŅŽŅ‡ĐĩŅ‚Đĩ СаĐēĐ°Ņ‡ĐĩĐŊиŅ‚Đĩ ŅŅŠĐžĐąŅ‰ĐĩĐŊиŅ", "RetentionPolicy_FilesOnly": "ИСŅ‚Ņ€Đ¸Đ˛Đ°ĐšŅ‚Đĩ ŅĐ°ĐŧĐž Ņ„Đ°ĐšĐģОвĐĩ", "RetentionPolicy_FilesOnly_Description": "ĐĄĐ°ĐŧĐž Ņ„Đ°ĐšĐģОвĐĩŅ‚Đĩ Ņ‰Đĩ ĐąŅŠĐ´Đ°Ņ‚ иСŅ‚Ņ€Đ¸Ņ‚и, ŅĐ°ĐŧиŅ‚Đĩ ŅŅŠĐžĐąŅ‰ĐĩĐŊиŅ Ņ‰Đĩ ĐžŅŅ‚Đ°ĐŊĐ°Ņ‚ ĐŊĐ° ĐŧŅŅŅ‚ĐžŅ‚Đž ŅĐ¸.", "RetentionPolicy_MaxAge": "МаĐēŅĐ¸ĐŧĐ°ĐģĐŊĐ° вŅŠĐˇŅ€Đ°ŅŅ‚ ĐŊĐ° ŅŅŠĐžĐąŅ‰ĐĩĐŊиŅŅ‚Đ°", + "RetentionPolicy_MaxAge_Channels": "МаĐēŅĐ¸ĐŧĐ°ĐģĐŊĐ° вŅŠĐˇŅ€Đ°ŅŅ‚ ĐŊĐ° ŅŅŠĐžĐąŅ‰ĐĩĐŊиŅŅ‚Đ° в ĐēĐ°ĐŊĐ°ĐģиŅ‚Đĩ", + "RetentionPolicy_MaxAge_Description": "ПŅ€ĐĩĐŧĐ°Ņ…ваĐŊĐĩ ĐŊĐ° вŅĐ¸Ņ‡Đēи ŅŅŠĐžĐąŅ‰ĐĩĐŊиŅ, ĐŋĐž-ŅŅ‚Đ°Ņ€Đ¸ ĐžŅ‚ Ņ‚аСи ŅŅ‚ОКĐŊĐžŅŅ‚, в Đ´ĐŊи", + "RetentionPolicy_MaxAge_DMs": "МаĐēŅĐ¸ĐŧĐ°ĐģĐŊĐ° вŅŠĐˇŅ€Đ°ŅŅ‚ ĐŊĐ° ŅŅŠĐžĐąŅ‰ĐĩĐŊиŅŅ‚Đ° в диŅ€ĐĩĐēŅ‚ĐŊиŅ‚Đĩ ŅŅŠĐžĐąŅ‰ĐĩĐŊиŅ", + "RetentionPolicy_MaxAge_Groups": "МаĐēŅĐ¸ĐŧĐ°ĐģĐŊĐ° вŅŠĐˇŅ€Đ°ŅŅ‚ ĐŊĐ° ŅŅŠĐžĐąŅ‰ĐĩĐŊиŅŅ‚Đ° в Ņ‡Đ°ŅŅ‚ĐŊи ĐŗŅ€ŅƒĐŋи", "RetentionPolicy_Precision": "ĐĸĐžŅ‡ĐŊĐžŅŅ‚ ĐŊĐ° Ņ‚Đ°ĐšĐŧĐĩŅ€Đ°", "RetentionPolicy_Precision_Description": "КоĐģĐēĐž Ņ‡ĐĩŅŅ‚Đž Ņ‚Ņ€ŅĐąĐ˛Đ° Đ´Đ° ŅĐĩ иСĐŋŅŠĐģĐŊŅĐ˛Đ° Ņ‚Đ°ĐšĐŧĐĩŅ€ŅŠŅ‚ Са ĐŋОдŅ€ŅĐˇĐ˛Đ°ĐŊĐĩ. ЗадаваĐŊĐĩŅ‚Đž ĐŊĐ° Ņ‚Ова Ņ ĐŋĐž-Ņ‚ĐžŅ‡ĐŊĐ° ŅŅ‚ОКĐŊĐžŅŅ‚ ĐŋŅ€Đ°Đ˛Đ¸ ĐēĐ°ĐŊĐ°ĐģиŅ‚Đĩ Ņ ĐąŅŠŅ€ĐˇĐ¸ Ņ‚Đ°ĐšĐŧĐĩŅ€Đ¸ Са СадŅŠŅ€ĐļĐ°ĐŊĐĩ Đ´Đ° Ņ€Đ°ĐąĐžŅ‚ŅŅ‚ ĐŋĐž-дОйŅ€Đĩ, ĐŊĐž ĐŧĐžĐļĐĩ Đ´Đ° ŅŅ‚Ņ€ŅƒĐ˛Đ° Đ´ĐžĐŋŅŠĐģĐŊиŅ‚ĐĩĐģĐŊĐ° ĐŧĐžŅ‰ĐŊĐžŅŅ‚ Са ОйŅ€Đ°ĐąĐžŅ‚ĐēĐ° ĐŊĐ° ĐŗĐžĐģĐĩĐŧи ОйŅ‰ĐŊĐžŅŅ‚и.", "RetentionPolicyRoom_Enabled": "АвŅ‚ĐžĐŧĐ°Ņ‚иŅ‡ĐŊĐž ĐŋŅ€ĐĩŅ€ŅĐˇĐ˛Đ°ĐŊĐĩ ĐŊĐ° ŅŅ‚Đ°Ņ€Đ¸Ņ‚Đĩ ŅŅŠĐžĐąŅ‰ĐĩĐŊиŅ", @@ -2751,4 +2758,4 @@ "registration.component.form.sendConfirmationEmail": "ИСĐŋŅ€Đ°Ņ‚ĐĩŅ‚Đĩ иĐŧĐĩĐšĐģ Са ĐŋĐžŅ‚вŅŠŅ€ĐļĐ´ĐĩĐŊиĐĩ", "Enterprise": "ĐŊĐ°Ņ‡Đ¸ĐŊĐ°ĐŊиĐĩ", "UpgradeToGetMore_engagement-dashboard_Title": "Đ°ĐŊĐ°ĐģиС" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/bs.i18n.json b/packages/i18n/src/locales/bs.i18n.json index 6ce6a2959e5e..ebe0b045c418 100644 --- a/packages/i18n/src/locales/bs.i18n.json +++ b/packages/i18n/src/locales/bs.i18n.json @@ -2054,12 +2054,19 @@ "Retail": "Maloprodaja", "Retention_setting_changed_successfully": "Postavka pravila zadrÅžavanja uspjeÅĄno je promijenjena", "RetentionPolicy": "Pravila zadrÅžavanja", + "RetentionPolicy_AppliesToChannels": "Odnosi se na kanale", + "RetentionPolicy_AppliesToDMs": "Odnosi se na izravne poruke", + "RetentionPolicy_AppliesToGroups": "Odnosi se na privatne grupe", "RetentionPolicy_Description": "Automatski prunes stare poruke preko vaÅĄeg Rocket.Chat instanca.", "RetentionPolicy_Enabled": "Omogućeno", "RetentionPolicy_ExcludePinned": "Izuzmite prikvačene poruke", "RetentionPolicy_FilesOnly": "Samo izbriÅĄite datoteke", "RetentionPolicy_FilesOnly_Description": "Samo će se datoteke izbrisati, poruke će ostati na mjestu.", "RetentionPolicy_MaxAge": "Maksimalna dob poruka", + "RetentionPolicy_MaxAge_Channels": "Maksimalna dob poruka u kanalima", + "RetentionPolicy_MaxAge_Description": "Prune sve poruke starijima od ove vrijednosti, u danima", + "RetentionPolicy_MaxAge_DMs": "Maksimalna dob poruka u izravnim porukama", + "RetentionPolicy_MaxAge_Groups": "Maksimalna dob poruka u privatnim skupinama", "RetentionPolicy_Precision": "Preciznost mjerača", "RetentionPolicy_Precision_Description": "Koliko često bi trebao trajati mjerač vremena. Postavljanje na precizniju vrijednost čini kanale s brzim retencijskim vremenskim razmacima bolji, ali mogu koÅĄtati dodatnu snagu obrade u velikim zajednicama.", "RetentionPolicyRoom_Enabled": "Automatski obriÅĄite stare poruke", @@ -2748,4 +2755,4 @@ "registration.component.form.sendConfirmationEmail": "PoÅĄalji potvrdni email", "Enterprise": "Poduzeće", "UpgradeToGetMore_engagement-dashboard_Title": "Analitika" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/ca.i18n.json b/packages/i18n/src/locales/ca.i18n.json index 9785de70e432..3f74fc967416 100644 --- a/packages/i18n/src/locales/ca.i18n.json +++ b/packages/i18n/src/locales/ca.i18n.json @@ -3484,6 +3484,9 @@ "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": "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", @@ -3493,6 +3496,10 @@ "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 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.", "RetentionPolicyRoom_Enabled": "Esborrar missatges antics automàticament", @@ -4684,4 +4691,4 @@ "Enterprise": "Empresa", "UpgradeToGetMore_engagement-dashboard_Title": "Analítiques", "UpgradeToGetMore_auditing_Title": "Auditoria de missatges" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/cs.i18n.json b/packages/i18n/src/locales/cs.i18n.json index a5a6fb99bbd4..914d6c35d485 100644 --- a/packages/i18n/src/locales/cs.i18n.json +++ b/packages/i18n/src/locales/cs.i18n.json @@ -613,6 +613,7 @@ "CAS_enabled": "Povoleno", "CAS_Login_Layout": "RozloÅžení CAS přihlÃĄÅĄení", "CAS_login_url": "SSO přihlaÅĄovací URL", + "message_counter_many": "{{count}} zprÃĄv(y)", "CAS_login_url_Description": "Adresa přihlÃĄÅĄení vaÅĄÃ­ externí SSO sluÅžby např: https://sso.priklad.cz/sso/login", "CAS_popup_height": "VÃŊÅĄka přihlaÅĄovacího popupu", "CAS_popup_width": "Šířka přihlaÅĄovacího popupu", @@ -627,6 +628,7 @@ "Categories": "Kategorie", "CDN_JSCSS_PREFIX": "Prefix CDN pro JS/CSS", "CDN_PREFIX": "CDN Prefix", + "meteor_status_reconnect_in_many": "zkusím znovu za {{count}} sekund...", "CDN_PREFIX_ALL": "PouÅžijte prefix CDN pro vÅĄechny prvky", "Certificates_and_Keys": "CertifikÃĄty a klíče", "Change_Room_Type": "Změna typu místnosti", @@ -677,6 +679,7 @@ "Click_here": "Klikněte zde", "Click_here_for_more_details_or_contact_sales_for_a_new_license": "Kliknutím sem zobrazíte podrobnosti, případně kontaktujte {{email}} pro novou licenci.", "Click_here_for_more_info": "Klikněte pro více infomací", + "message_counter_few": "{{count}} zprÃĄv(y)", "Click_here_to_enter_your_encryption_password": "Klikněte zde pro zadÃĄní svÊho ÅĄifrovacího hesla", "Click_here_to_view_and_copy_your_password": "Klikněte zde pro zobrazení a zkopírovÃĄní svÊho hesla.", "Click_the_messages_you_would_like_to_send_by_email": "Kikněte na zprÃĄvy, kterÊ chcete odeslat e-mailem", @@ -699,6 +702,7 @@ "Closing_chat": "Uzavření místnosti", "Closing_chat_message": "ZprÃĄva uzavření", "Cloud": "Cloud", + "meteor_status_reconnect_in_few": "zkusím znovu za {{count}} sekund...", "Cloud_address_to_send_registration_to": "Adresa, na kterou chcete poslat svůj registrační e-mail do Cloudu.", "Cloud_click_here": "Po zkopírovÃĄní textu přejděte do cloudovÊ konzole - [Klikněte zde]({{cloudConsoleUrl}})", "Cloud_console": "Cloud přehled", @@ -759,7 +763,6 @@ "Contact": "Kontakt", "Contact_Chat_History": "Historie kontaktu", "Contains_Security_Fixes": "Obsahuje opravy zabezpečení", - "message_counter_many": "{{count}} zprÃĄv(y)", "Content": "Obsah", "Continue": "Pokračovat", "Continuous_sound_notifications_for_new_livechat_room": "TrvalÊ zvukovÊ oznÃĄmení pro novou Omnichannel místnost", @@ -773,7 +776,6 @@ "conversation_with_s": "konverzace s %s", "Conversations": "Konverzace", "Conversations_per_day": "Konverzace za den", - "meteor_status_reconnect_in_many": "zkusím znovu za {{count}} sekund...", "Convert_Ascii_Emojis": "Převod ASCII na Emoji", "Copied": "ZkopírovÃĄno", "Copy": "Kopírovat", @@ -844,7 +846,6 @@ "Country_Denmark": "DÃĄnsko", "Country_Djibouti": "DÅžibutsko", "Country_Dominica": "Dominika", - "message_counter_few": "{{count}} zprÃĄv(y)", "Country_Dominican_Republic": "DominikÃĄnskÃĄ republika", "Country_Ecuador": "EkvÃĄdor", "Country_Egypt": "Egypt", @@ -880,7 +881,6 @@ "Country_Heard_Island_and_Mcdonald_Islands": "Heardův ostrov a McDonaldovy ostrovy", "Country_Holy_See_Vatican_City_State": "SvatÃŊ stolec (VatikÃĄnskÃŊ městskÃŊ stÃĄt)", "Country_Honduras": "Honduras", - "meteor_status_reconnect_in_few": "zkusím znovu za {{count}} sekund...", "Country_Hong_Kong": "Hongkong", "Country_Hungary": "Maďarsko", "Country_Iceland": "Island", @@ -2972,6 +2972,9 @@ "Retail": "Obchod", "Retention_setting_changed_successfully": "Nastavení zÃĄsady uchovÃĄní bylo ÃēspÄ›ÅĄně změněno", "RetentionPolicy": "ZÃĄsady uchovÃĄvÃĄní", + "RetentionPolicy_AppliesToChannels": "Platí pro místnosti", + "RetentionPolicy_AppliesToDMs": "Platí pro přímÊ zprÃĄvy", + "RetentionPolicy_AppliesToGroups": "Platí pro soukromÊ skupiny", "RetentionPolicy_Description": "Automaticky omezí starÊ zprÃĄvy napříč vaÅĄÃ­ Rocket.Chat instancí.", "RetentionPolicy_DoNotPruneDiscussion": "NepročiÅĄÅĨovat zprÃĄvy v diskuzi", "RetentionPolicy_DoNotPrunePinned": "NepročiÅĄÅĨovat připnutÊ zprÃĄvy", @@ -2981,6 +2984,10 @@ "RetentionPolicy_FilesOnly": "Smazat pouze soubory", "RetentionPolicy_FilesOnly_Description": "Pouze soubory budou smazÃĄny, samotnÊ zprÃĄvy zůstanou na místě.", "RetentionPolicy_MaxAge": "MaximÃĄlní stÃĄÅ™Ã­ zprÃĄvy", + "RetentionPolicy_MaxAge_Channels": "MaximÃĄlní stÃĄÅ™Ã­ zprÃĄvy v místnostech", + "RetentionPolicy_MaxAge_Description": "Pročistit vÅĄechny zprÃĄvy starÅĄÃ­, neÅž X dní", + "RetentionPolicy_MaxAge_DMs": "MaximÃĄlní stÃĄÅ™Ã­ zprÃĄvy v přímÃŊch zprÃĄvÃĄch", + "RetentionPolicy_MaxAge_Groups": "MaximÃĄlní stÃĄÅ™Ã­ zprÃĄv v soukromÃŊch skupinÃĄch", "RetentionPolicy_Precision": "Přesnost časovače", "RetentionPolicy_Precision_Description": "Jak často by měl časovač pročiÅĄtění spustit. Nastavením tÊto hodnoty na přesnějÅĄÃ­ hodnotu pracují kanÃĄly s rychlejÅĄÃ­mi retenčními časovači lÊpe, ale v případě velkÃŊch komunit by to mohlo stÃĄt dalÅĄÃ­ procesní vÃŊkon.", "RetentionPolicyRoom_Enabled": "Automaticky pročiÅĄÅĨovat starÊ zprÃĄvy", @@ -3970,4 +3977,4 @@ "Enterprise": "Korporace", "UpgradeToGetMore_engagement-dashboard_Title": "Analytika", "UpgradeToGetMore_auditing_Title": "Audit zprÃĄv" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/cy.i18n.json b/packages/i18n/src/locales/cy.i18n.json index 58749ee5445b..f9c7b4d7ec87 100644 --- a/packages/i18n/src/locales/cy.i18n.json +++ b/packages/i18n/src/locales/cy.i18n.json @@ -2055,12 +2055,19 @@ "Retail": "Manwerthu", "Retention_setting_changed_successfully": "Mae lleoliad polisi cadwraeth wedi newid yn llwyddiannus", "RetentionPolicy": "Polisi Cadw", + "RetentionPolicy_AppliesToChannels": "Yn berthnasol i sianeli", + "RetentionPolicy_AppliesToDMs": "Mae'n berthnasol i negeseuon uniongyrchol", + "RetentionPolicy_AppliesToGroups": "Yn berthnasol i grwpiau preifat", "RetentionPolicy_Description": "Rhowch negeseuon o hen negeseuon yn awtomatig ar draws eich enghraifft Rocket.Chat.", "RetentionPolicy_Enabled": "Wedi'i alluogi", "RetentionPolicy_ExcludePinned": "Eithrio negeseuon wedi'u pinnio", "RetentionPolicy_FilesOnly": "Dileu ffeiliau yn unig", "RetentionPolicy_FilesOnly_Description": "Dim ond ffeiliau fydd yn cael eu dileu, bydd y negeseuon eu hunain yn aros yn eu lle.", "RetentionPolicy_MaxAge": "Uchafswm oedran neges", + "RetentionPolicy_MaxAge_Channels": "Uchafswm oedran neges mewn sianeli", + "RetentionPolicy_MaxAge_Description": "Torrwch bob neges yn hÅˇn na'r gwerth hwn, mewn dyddiau", + "RetentionPolicy_MaxAge_DMs": "Uchafswm oed neges mewn negeseuon uniongyrchol", + "RetentionPolicy_MaxAge_Groups": "Uchafswm oedran neges mewn grwpiau preifat", "RetentionPolicy_Precision": "Precision Timer", "RetentionPolicy_Precision_Description": "Pa mor aml y dylai'r amserydd prÃŽn redeg. Mae gosod hyn i werth mwy manwl yn gwneud sianelau gydag amseryddion cadw cyflym yn gweithio'n well, ond gallant gostio pÅĩer prosesu ychwanegol ar gymunedau mawr.", "RetentionPolicyRoom_Enabled": "Gwthio hen negeseuon yn awtomatig", @@ -2750,4 +2757,4 @@ "registration.component.form.sendConfirmationEmail": "Anfon ebost cadarnhad", "Enterprise": "Menter", "UpgradeToGetMore_engagement-dashboard_Title": "Dadansoddiadau" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/da.i18n.json b/packages/i18n/src/locales/da.i18n.json index 83aa42bf65ee..a675ab4843c0 100644 --- a/packages/i18n/src/locales/da.i18n.json +++ b/packages/i18n/src/locales/da.i18n.json @@ -3072,6 +3072,9 @@ "RetentionPolicy_Advanced_Precision": "Brug konfigurationen til avanceret opbevaringspolitik", "RetentionPolicy_Advanced_Precision_Cron": "Brug avanceret opbevaringspolitik vha. Cron", "RetentionPolicy_Advanced_Precision_Cron_Description": "Hvor ofte sletnings-timeren skal køre. Indstilling af dette til en mere prÃĻcis vÃĻrdi gør kanaler med hurtige opbevarings-timere bedre, men kan koste ekstra procestid pÃĨ store communities.", + "RetentionPolicy_AppliesToChannels": "GÃĻlder for kanaler", + "RetentionPolicy_AppliesToDMs": "GÃĻlder for direkte meddelelser", + "RetentionPolicy_AppliesToGroups": "GÃĻlder for private grupper", "RetentionPolicy_Description": "Beskytter automatisk gamle meddelelser over din Rocket.Chat-forekomst.", "RetentionPolicy_DoNotPruneDiscussion": "Slet ikke diskussionsmeddelelser", "RetentionPolicy_DoNotPrunePinned": "Slet ikke fastgjorte beskeder", @@ -3081,6 +3084,10 @@ "RetentionPolicy_FilesOnly": "Slet kun filer", "RetentionPolicy_FilesOnly_Description": "Kun filer slettes, meddelelserne selv forbliver pÃĨ plads.", "RetentionPolicy_MaxAge": "Maksimal meddelelsesalder", + "RetentionPolicy_MaxAge_Channels": "Maksimal meddelelsesalder i kanaler", + "RetentionPolicy_MaxAge_Description": "BeskÃĻr alle meddelelser, der er ÃĻldre end denne vÃĻrdi, om dage", + "RetentionPolicy_MaxAge_DMs": "Maksimal meddelelsesalder i direkte beskeder", + "RetentionPolicy_MaxAge_Groups": "Maksimal meddelelsesalder i private grupper", "RetentionPolicy_Precision": "Timer Precision", "RetentionPolicy_Precision_Description": "Hvor ofte sletnings-timeren skal køre. Indstilling af dette til en mere prÃĻcis vÃĻrdi gør kanaler med hurtige opbevarings-timere bedre, men kan koste ekstra procestid pÃĨ store communities.", "RetentionPolicyRoom_Enabled": "BeskÃĻr automatisk gamle beskeder", @@ -4085,4 +4092,4 @@ "Enterprise": "Firma", "UpgradeToGetMore_engagement-dashboard_Title": "Analyse", "UpgradeToGetMore_auditing_Title": "MeddelelsesovervÃĨgning" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/de-AT.i18n.json b/packages/i18n/src/locales/de-AT.i18n.json index a3ea142396ea..0be8030f5738 100644 --- a/packages/i18n/src/locales/de-AT.i18n.json +++ b/packages/i18n/src/locales/de-AT.i18n.json @@ -2063,12 +2063,19 @@ "Retail": "Verkauf", "Retention_setting_changed_successfully": "Die Einstellung fÃŧr die Aufbewahrungsrichtlinie wurde erfolgreich geändert", "RetentionPolicy": "Aufbewahrungsrichtlinie", + "RetentionPolicy_AppliesToChannels": "Gilt fÃŧr Kanäle", + "RetentionPolicy_AppliesToDMs": "Gilt fÃŧr direkte Nachrichten", + "RetentionPolicy_AppliesToGroups": "Gilt fÃŧr private Gruppen", "RetentionPolicy_Description": "LÃļscht automatisch alte Nachrichten in Ihrer Rocket.Chat-Instanz.", "RetentionPolicy_Enabled": "aktiviert", "RetentionPolicy_ExcludePinned": "Pinned-Nachrichten ausschließen", "RetentionPolicy_FilesOnly": "LÃļschen Sie nur Dateien", "RetentionPolicy_FilesOnly_Description": "Nur Dateien werden gelÃļscht, die Nachrichten selbst bleiben bestehen.", "RetentionPolicy_MaxAge": "Maximales Nachrichtenalter", + "RetentionPolicy_MaxAge_Channels": "Maximales Nachrichtenalter in Kanälen", + "RetentionPolicy_MaxAge_Description": "Bereinigen Sie alle Nachrichten, die älter als dieser Wert sind, in Tagen", + "RetentionPolicy_MaxAge_DMs": "Maximales Nachrichtenalter in direkten Nachrichten", + "RetentionPolicy_MaxAge_Groups": "Maximales Nachrichtenalter in privaten Gruppen", "RetentionPolicy_Precision": "Timer-Präzision", "RetentionPolicy_Precision_Description": "Wie oft sollte der Prune Timer laufen? Wenn Sie dies auf einen präziseren Wert setzen, werden Kanäle mit schnellen Retention-Timern zwar besser, in großen Communities jedoch mÃļglicherweise zusätzliche Verarbeitungsleistung.", "RetentionPolicyRoom_Enabled": "Alte Nachrichten automatisch lÃļschen", @@ -2758,4 +2765,4 @@ "registration.component.form.sendConfirmationEmail": "Bestätigungsmail versenden", "Enterprise": "Unternehmen", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/de.i18n.json b/packages/i18n/src/locales/de.i18n.json index a463a07318cb..72963c308e67 100644 --- a/packages/i18n/src/locales/de.i18n.json +++ b/packages/i18n/src/locales/de.i18n.json @@ -31,6 +31,8 @@ "A_secure_and_highly_private_self-managed_solution_for_conference_calls": "Eine sichere und private, selbstverwaltete LÃļsung fÃŧr Telefonkonferenzen.", "A_workspace_admin_needs_to_install_and_configure_a_conference_call_app": "Ein Arbeitsbereich-Administrator muss eine Telefonkonferenz-App installieren und konfigurieren.", "An_app_needs_to_be_installed_and_configured": "Eine App muss installiert und konfiguriert werden.", + "Accessibility_and_Appearance": "Barrierefreiheit & Erscheinungsbild", + "Accessibility_activation": "Hier kÃļnnen Sie eine Vielzahl von Funktionen aktivieren, um Ihr Browser-Erlebnis zu verbessern.", "Accept_Call": "Anruf annehmen", "Accept": "Akzeptieren", "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Akzeptiere eingehende Omnichannel-Anfragen auch wenn kein Agent online ist", @@ -322,6 +324,7 @@ "Added__username__to_this_team": "@{{user_added}} zu diesem Team hinzugefÃŧgt", "Adding_OAuth_Services": "HinzufÃŧgen von OAuth-Services", "Adding_permission": "Berechtigung hinzufÃŧgen", + "Adjustable_layout": "Anpassbares Layout", "Adding_user": "Benutzer hinzufÃŧgen", "Additional_emails": "Zusätzliche E-Mails", "Additional_Feedback": "Zusätzliches Feedback", @@ -333,6 +336,7 @@ "admin-no-videoconf-provider-app": "**Conference call not enabled**: Apps fÃŧr Telefonkonferenzen sind auf dem Rocket.Chat-Marktplatz erhältlich.", "Administration": "Administration", "Address": "Adresse", + "Adjustable_font_size_description": "Entwickelt fÃŧr diejenigen, die grÃļßere oder kleinere Texte fÃŧr eine verbesserte Lesbarkeit bevorzugen. Diese Flexibilität fÃļrdert die Inklusivität, indem sie den Benutzern ermÃļglicht, die Softwareoberfläche an ihre spezifischen BedÃŧrfnisse anzupassen.", "Adult_images_are_not_allowed": "Nicht-jugendfreie Bilder sind nicht erlaubt", "Aerospace_and_Defense": "Luft- und Raumfahrt sowie Verteidigung", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Nach der OAuth2-Authentifizierung werden Benutzer auf diese URL weitergeleitet. Sie kÃļnnen eine URL pro Zeile hinzufÃŧgen.", @@ -2224,6 +2228,7 @@ "Force_visitor_to_accept_data_processing_consent_enabled_alert": "Die Zustimmung zur Datenverarbeitung muss auf einem einfach nachvollziehbaren Grund fÃŧr die Verarbeitung der Daten beruhen. Aus diesem Deshalb muss das Feld unten ausgefÃŧllt werden. Das Feld muss Informationen enthalten, die dem Benutzer auf einfache Art und Weise erklären, warum seine personenbezogenen Daten verarbeitet werden mÃŧssen.", "force-delete-message": "LÃļschen der Nachricht erzwingen", "force-delete-message_description": "Berechtigung, eine Nachricht ohne weitere PrÃŧfungen zu lÃļschen", + "Font_size": "SchriftgrÃļße", "Forgot_password": "Passwort vergessen?", "Forgot_Password_Description": "Sie kÃļnnen die folgenden Platzhalter verwenden: \n - `[Forgot_Password_Url]` fÃŧr die Passwort-Wiederherstellungs-URL. \n - `[name]`, `[fname]`, `[lname]` fÃŧr den vollständigen Namen, Vornamen oder Nachnamen des Benutzers. \n - `[email]` fÃŧr die E-Mail-Adresse des Benutzers. \n - .", "Forgot_Password_Email": "Hier klicken, um das Passwort zurÃŧckzusetzen.", @@ -2848,6 +2853,7 @@ "Lead_capture_email_regex": "Lead Capture E-Mail Regex", "Lead_capture_phone_regex": "Lead Capture Telefon Regex", "Learn_more": "Mehr erfahren", + "Learn_more_about_accessibility": "Erfahren Sie hier mehr Ãŧber unser Engagement fÃŧr Barrierefreiheit:", "Least_recent_updated": "Zuletzt aktualisiert", "Learn_how_to_unlock_the_myriad_possibilities_of_rocket_chat": "Erfahren Sie, wie Sie die zahllosen MÃļglichkeiten von Rocket.Chat nutzen kÃļnnen.", "Leave": "Verlassen", @@ -3147,6 +3153,8 @@ "Mentions": "Erwähnungen", "Mentions_default": "Erwähnungen (Standard)", "Mentions_only": "Nur Erwähnungen", + "Mentions_with_@_symbol": "Erwähnungen mit @-Symbol", + "Mentions_with_@_symbol_description": "Erwähnungen benachrichtigen und heben Nachrichten fÃŧr Gruppen oder bestimmte Benutzer hervor, was eine gezielte Kommunikation erleichtert.\n\nDie Bildschirmleserfunktion wird optimiert, wenn das \"@\"-Symbol in der Erwähnungsfunktion verwendet wird. Dies stellt sicher, dass Benutzer, die auf Bildschirmleser angewiesen sind, diese Erwähnungen leicht interpretieren und darauf zugreifen kÃļnnen.", "Merge_Channels": "Channels zusammenfÃŧhren", "message": "Nachricht", "Message": "Nachricht", @@ -3981,6 +3989,9 @@ "RetentionPolicy_Advanced_Precision": "Konfiguration der erweiterten Aufbewahrungsregelung verwenden", "RetentionPolicy_Advanced_Precision_Cron": "Erweiterte Aufbewahrungsregelung Cron verwenden", "RetentionPolicy_Advanced_Precision_Cron_Description": "Der Cron-Job-Ausdruck definiert, wie oft der Bereinigungs-Timer ausgefÃŧhrt werden soll. Wenn dieser auf einen genaueren Wert gesetzt wird, funktionieren Kanäle mit schnellen Aufbewahrungs-Timern besser, verlieren allerdings mÃļglicherweise in großen Communities zusätzliche Rechenleistung.", + "RetentionPolicy_AppliesToChannels": "Gilt fÃŧr Channels", + "RetentionPolicy_AppliesToDMs": "Gilt fÃŧr Direktnachrichten", + "RetentionPolicy_AppliesToGroups": "Gilt fÃŧr private Gruppen", "RetentionPolicy_Description": "LÃļscht automatisch alte Nachrichten in Ihrer Rocket.Chat-Instanz.", "RetentionPolicy_DoNotPruneDiscussion": "Nachrichten in der Diskussion nicht bereinigen", "RetentionPolicy_DoNotPrunePinned": "Keine angehefteten Nachrichten bereinigen", @@ -3990,6 +4001,10 @@ "RetentionPolicy_FilesOnly": "LÃļschen Sie nur Dateien", "RetentionPolicy_FilesOnly_Description": "Nur Dateien werden gelÃļscht, die Nachrichten selbst bleiben bestehen.", "RetentionPolicy_MaxAge": "Maximales Nachrichtenalter", + "RetentionPolicy_MaxAge_Channels": "Maximales Nachrichtenalter in Kanälen", + "RetentionPolicy_MaxAge_Description": "Alle Nachrichten bereinigen, die älter als dieser Wert sind, in Tagen", + "RetentionPolicy_MaxAge_DMs": "Maximales Nachrichtenalter in direkten Nachrichten", + "RetentionPolicy_MaxAge_Groups": "Maximales Nachrichtenalter in privaten Gruppen", "RetentionPolicy_Precision": "Timer-Präzision", "RetentionPolicy_Precision_Description": "Wie oft sollte der Bereinigungs-Timer laufen? Wenn Sie dies auf einen präziseren Wert setzen, werden Kanäle mit schnellen Aufbewahrungs-Timern zwar besser, in großen Communitys jedoch mÃļglicherweise zusätzliche Verarbeitungsleistung.", "RetentionPolicyRoom_Enabled": "Alte Nachrichten automatisch lÃļschen", @@ -4355,6 +4370,10 @@ "Showing_online_users": "Anzeigen von: {{total_showing}}, Online: {{online}}, Gesamt: {{total}} Benutzer", "Showing_results": "

    %s Ergebnisse

    ", "Showing_results_of": "Anzeigen von %s - %s von %s Ergebnissen", + "Show_usernames": "Benutzernamen anzeigen", + "Show_roles": "Rollen anzeigen", + "Show_or_hide_the_user_roles_of_message_authors": "Die Benutzerrollen der Nachrichtenautoren anzeigen oder ausblenden.", + "Show_or_hide_the_username_of_message_authors": "Den Benutzernamen der Nachrichtenautoren anzeigen oder ausblenden.", "Sidebar": "Seitenleiste", "Sidebar_list_mode": "Seitenleisten-Channel-Listen-Modus", "Sign_in_to_start_talking": "Anmelden, um mit dem Chatten zu beginnen", @@ -5413,7 +5432,7 @@ "onboarding.component.form.action.confirm": "Bestätigen", "onboarding.component.form.action.pasteHere": "Hier einfÃŧgen...", "onboarding.component.form.termsAndConditions": "Ich bin mit den Nutzungsvereinbarung und den Datenschutzbestimmungen einverstanden", - "onboarding.component.emailCodeFallback": "Keine E-Mail erhalten? Noch einemal versenden oder E-Mailadresse ändern", + "onboarding.component.emailCodeFallback": "Keine E-Mail erhalten? <1>Noch einmal versenden oder <3>E-Mailadresse ändern", "onboarding.page.form.title": "Starten wir Ihren Arbeitsbereich", "onboarding.page.emailConfirmed.title": "E-Mail bestätigt", "onboarding.page.emailConfirmed.subtitle": "Sie kÃļnnen zu Ihrer Rocket.Chat-Anwendung zurÃŧckkehren - wir haben Ihren Arbeitsbereich bereits gestartet.", @@ -5479,7 +5498,13 @@ "Something_Went_Wrong": "Etwas ist schief gelaufen", "Toolbox_room_actions": "Primäre Room-Aktionen", "Theme_light": "Hell", + "Theme_light_description": "Zugänglicher fÃŧr Menschen mit Sehbehinderungen und eine gute Wahl fÃŧr gut beleuchtete Umgebungen.", "Theme_dark": "Dunkel", + "Theme_dark_description": "Reduzieren Sie die Augenbelastung und ErmÃŧdung bei schlechten Lichtverhältnissen, indem Sie die vom Bildschirm abgegebene Lichtmenge minimieren.", + "Theme_match_system": "System anpassen", + "Theme_match_system_description": "Das Erscheinungsbild Ihres Systems automatisch anpassen.", + "Theme_high_contrast": "Hoher Kontrast", + "Theme_high_contrast_description": "Maximale Tonunterschiede mit kräftigen Farben und scharfen Kontrasten bieten eine verbesserte Zugänglichkeit.", "Create_an_account": "Ein Konto erstellen", "Undo_request": "Anfrage rÃŧckgängig machen", "No_permission": "Keine Berechtigung", diff --git a/packages/i18n/src/locales/el.i18n.json b/packages/i18n/src/locales/el.i18n.json index 00b8967dfa90..731a56695f7a 100644 --- a/packages/i18n/src/locales/el.i18n.json +++ b/packages/i18n/src/locales/el.i18n.json @@ -2068,12 +2068,19 @@ "Retail": "ΛιαÎŊÎĩÎŧĪ€ÎŋĪÎšÎŋ", "Retention_setting_changed_successfully": "Η ĪĪÎ¸ÎŧΚĪƒÎˇ Ī€ÎŋÎģΚĪ„ΚÎēÎŽĪ‚ δΚιĪ„ÎŽĪÎˇĪƒÎˇĪ‚ ÎŦÎģÎģιΞÎĩ ÎŧÎĩ ÎĩĪ€ÎšĪ„Ī…Ī‡Î¯Îą", "RetentionPolicy": "ΠÎŋÎģΚĪ„ΚÎēÎŽ δΚιĪ„ÎŽĪÎˇĪƒÎˇĪ‚", + "RetentionPolicy_AppliesToChannels": "ΙĪƒĪ‡ĪÎĩΚ ÎŗΚι ÎēÎąÎŊÎŦÎģΚι", + "RetentionPolicy_AppliesToDMs": "ΙĪƒĪ‡ĪÎĩΚ ÎŗΚι ÎąĪ€ÎĩĪ…θÎĩÎ¯ÎąĪ‚ ÎŧΡÎŊĪÎŧÎąĪ„Îą", + "RetentionPolicy_AppliesToGroups": "ΙĪƒĪ‡ĪÎĩΚ ÎŗΚι ΚδΚĪ‰Ī„ΚÎēέĪ‚ ÎŋÎŧÎŦδÎĩĪ‚", "RetentionPolicy_Description": "ΑĪ…Ī„ĪŒÎŧÎąĪ„Îą ÎēÎģιδÎĩĪÎĩΚ Ī„Îą Ī€ÎąÎģΚÎŦ ÎŧΡÎŊĪÎŧÎąĪ„Îą ĪƒÎĩ ĪŒÎģÎĩĪ‚ Ī„ΚĪ‚ Ī€ÎĩĪÎšĪ€Ī„ĪŽĪƒÎĩΚĪ‚ Rocket.Chat.", "RetentionPolicy_Enabled": "ΕÎŊÎĩĪÎŗÎŋĪ€ÎŋΚΡÎŧέÎŊÎŋ", "RetentionPolicy_ExcludePinned": "ΕξαιĪÎŋĪÎŊĪ„ιΚ Ī„Îą ÎēÎąĪĪ†ÎšĪ„ĪƒĪ‰ÎŧέÎŊÎą ÎŧΡÎŊĪÎŧÎąĪ„Îą", "RetentionPolicy_FilesOnly": "ΔιαÎŗĪÎŦĪˆĪ„Îĩ ÎŧĪŒÎŊÎŋ Ī„Îą ÎąĪĪ‡ÎĩÎ¯Îą", "RetentionPolicy_FilesOnly_Description": "ΜĪŒÎŊÎŋ Ī„Îą ÎąĪĪ‡ÎĩÎ¯Îą θι δΚιÎŗĪÎąĪ†ÎŋĪÎŊ, Ī„Îą Î¯Î´ÎšÎą Ī„Îą ÎŧΡÎŊĪÎŧÎąĪ„Îą θι Ī€ÎąĪÎąÎŧÎĩίÎŊÎŋĪ…ÎŊ ĪƒĪ„Ρ θέĪƒÎˇ Ī„ÎŋĪ…Ī‚.", "RetentionPolicy_MaxAge": "ΜέÎŗΚĪƒĪ„Ρ ΡÎģΚÎēÎ¯Îą ÎŧΡÎŊĪÎŧÎąĪ„ÎŋĪ‚", + "RetentionPolicy_MaxAge_Channels": "ΜέÎŗΚĪƒĪ„Ρ ΡÎģΚÎēÎ¯Îą ÎŧΡÎŊĪÎŧÎąĪ„ÎŋĪ‚ ĪƒĪ„Îą ÎēÎąÎŊÎŦÎģΚι", + "RetentionPolicy_MaxAge_Description": "ΚÎģιδέĪˆĪ„Îĩ ĪŒÎģÎą Ī„Îą ÎŧΡÎŊĪÎŧÎąĪ„Îą Ī€ÎŋĪ… ÎĩίÎŊιΚ Ī€ÎąÎģιΚĪŒĪ„ÎĩĪÎą ÎąĪ€ĪŒ ÎąĪ…Ī„ÎŽÎŊ Ī„ΡÎŊ Ī„ΚÎŧÎŽ, ĪƒÎĩ ΡÎŧέĪÎĩĪ‚", + "RetentionPolicy_MaxAge_DMs": "ΜέÎŗΚĪƒĪ„Ρ ΡÎģΚÎēÎ¯Îą ÎŧΡÎŊĪÎŧÎąĪ„ÎŋĪ‚ ĪƒĪ„Îą ÎŦÎŧÎĩĪƒÎą ÎŧΡÎŊĪÎŧÎąĪ„Îą", + "RetentionPolicy_MaxAge_Groups": "ΜέÎŗΚĪƒĪ„Ρ ΡÎģΚÎēÎ¯Îą ÎŧΡÎŊĪÎŧÎąĪ„ÎŋĪ‚ ĪƒÎĩ ΚδΚĪ‰Ī„ΚÎēέĪ‚ ÎŋÎŧÎŦδÎĩĪ‚", "RetentionPolicy_Precision": "ΧĪÎŋÎŊĪŒÎŧÎĩĪ„ĪÎŋ ÎąÎēĪÎ¯Î˛ÎĩΚιĪ‚", "RetentionPolicy_Precision_Description": "ΠĪŒĪƒÎŋ ĪƒĪ…Ī‡ÎŊÎŦ Ī€ĪÎ­Ī€ÎĩΚ ÎŊÎą Ī„ĪÎ­Ī‡ÎĩΚ Îŋ Ī‡ĪÎŋÎŊÎŋÎŧÎĩĪ„ĪÎˇĪ„ÎŽĪ‚. Η ĪĪÎ¸ÎŧΚĪƒÎˇ ÎąĪ…Ī„ÎŽ ĪƒÎĩ ÎŧΚι Ī€ÎšÎŋ ÎąÎēĪÎšÎ˛ÎŽ Ī„ΚÎŧÎŽ ÎēιθΚĪƒĪ„ÎŦ Ī„Îą ÎēÎąÎŊÎŦÎģΚι ÎŧÎĩ Ī‡ĪÎŋÎŊÎŋδΚιÎēĪŒĪ€Ī„ÎĩĪ‚ ÎŗĪÎŽÎŗÎŋĪÎˇĪ‚ ĪƒĪ…ÎŗÎēĪÎŦĪ„ΡĪƒÎˇĪ‚ ÎŊÎą ÎģÎĩΚĪ„ÎŋĪ…ĪÎŗÎŋĪÎŊ ÎēÎąÎģĪĪ„ÎĩĪÎą, ÎąÎģÎģÎŦ ÎŧĪ€ÎŋĪÎĩί ÎŊÎą ÎēÎŋĪƒĪ„ίÎļÎŋĪ…ÎŊ ÎĩĪ€ÎšĪ€ÎģέÎŋÎŊ ΚĪƒĪ‡Ī ÎĩĪ€ÎĩΞÎĩĪÎŗÎąĪƒÎ¯ÎąĪ‚ ĪƒÎĩ ÎŧÎĩÎŗÎŦÎģÎĩĪ‚ ÎēÎŋΚÎŊĪŒĪ„ΡĪ„ÎĩĪ‚.", "RetentionPolicyRoom_Enabled": "ΑĪ…Ī„ĪŒÎŧÎąĪ„Ρ Ī€ÎĩĪÎšÎēÎŋĪ€ÎŽ Ī€ÎąÎģΚĪŽÎŊ ÎŧΡÎŊĪ…ÎŧÎŦĪ„Ī‰ÎŊ", @@ -2765,4 +2772,4 @@ "registration.component.form.sendConfirmationEmail": "ΑĪ€ÎŋĪƒĪ„ÎŋÎģÎŽ email ÎĩĪ€ÎšÎ˛ÎĩÎ˛ÎąÎ¯Ī‰ĪƒÎˇĪ‚", "Enterprise": "ΕĪ€ÎšĪ‡ÎĩίĪÎˇĪƒÎˇ", "UpgradeToGetMore_engagement-dashboard_Title": "ΑÎŊÎąÎģĪ…Ī„ΚÎēÎŦ ĪƒĪ„ÎŋΚĪ‡ÎĩÎ¯Îą" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/en.i18n.json b/packages/i18n/src/locales/en.i18n.json index 523888f0912a..c270bb9bffb1 100644 --- a/packages/i18n/src/locales/en.i18n.json +++ b/packages/i18n/src/locales/en.i18n.json @@ -1929,7 +1929,7 @@ "Extra_CSP_Domains": "Extra CSP Domains", "Extra_CSP_Domains_Description": "Extra domains to add to the Content-Security-Policy", "Enable_Desktop_Notifications": "Enable Desktop Notifications", - "Enable_encryption" : "Enable encryption", + "Enable_encryption": "Enable encryption", "Enable_inquiry_fetch_by_stream": "Enable inquiry data fetch from server using a stream", "Enable_omnichannel_auto_close_abandoned_rooms": "Enable automatic closing of rooms abandoned by the visitor", "Enable_Password_History": "Enable Password History", @@ -3964,7 +3964,6 @@ "OAuth": "OAuth", "OAuth_Description": "Configure authentication methods beyond just username and password.", "OAuth_Application": "OAuth Application", - "OAuth_button_colors_alert": "Changing the color may result in non-compliance with WCAG (Web Content Accessibility Guidelines) requirements. Please ensure that the new colors meet the recommended contrast and readability standards to maintain accessibility for all users.", "Objects": "Objects", "Off": "Off", "Off_the_record_conversation": "Off-the-Record Conversation", @@ -5792,6 +5791,9 @@ "view-all-teams_description": "Permission to view all teams", "view-all-team-channels": "View All Team Channels", "view-all-team-channels_description": "Permission to view all team's channels", + "view-members-list-all-rooms": "Can view members in all rooms", + "view-members-list-all-rooms_description": "Gives the ability to see the members list in all rooms, even those the user is not part of", + "Room_members_list": "Members list", "view-broadcast-member-list": "View Members List in Broadcast Room", "view-broadcast-member-list_description": "Permission to view list of users in broadcast channel", "view-c-room": "View Public Channel", @@ -6498,5 +6500,7 @@ "Workspace_and_user_settings": "Workspace and user settings", "Sidebar_Sections_Order": "Sidebar sections order", "Sidebar_Sections_Order_Description": "Select the categories in your preferred order", - "Incoming_Calls": "Incoming calls" + "Incoming_Calls": "Incoming calls", + "Advanced_settings": "Advanced settings", + "Security_and_permissions": "Security and permissions" } diff --git a/packages/i18n/src/locales/eo.i18n.json b/packages/i18n/src/locales/eo.i18n.json index 42f8d33688e5..1558424c9445 100644 --- a/packages/i18n/src/locales/eo.i18n.json +++ b/packages/i18n/src/locales/eo.i18n.json @@ -2060,12 +2060,19 @@ "Retail": "Retail", "Retention_setting_changed_successfully": "Rezerva politika agordo ŝanĝiĝis sukcese", "RetentionPolicy": "Politika Retenado", + "RetentionPolicy_AppliesToChannels": "Aplikas al kanaloj", + "RetentionPolicy_AppliesToDMs": "Aplikas direkti mesaĝojn", + "RetentionPolicy_AppliesToGroups": "Aplikas al privataj grupoj", "RetentionPolicy_Description": "AÅ­tomate prunas malnovajn mesaĝojn tra via raketo.", "RetentionPolicy_Enabled": "Enabled", "RetentionPolicy_ExcludePinned": "Ekskludi kovritajn mesaĝojn", "RetentionPolicy_FilesOnly": "Nur forigi dosierojn", "RetentionPolicy_FilesOnly_Description": "Nur dosieroj estos forigitaj, la mesaĝoj mem restos en loko.", "RetentionPolicy_MaxAge": "Maksimuma mesaĝo", + "RetentionPolicy_MaxAge_Channels": "Maksimuma mesaĝo en kanaloj", + "RetentionPolicy_MaxAge_Description": "Pritondu ĉiujn mesaĝojn pli malnovajn ol ĉi tiu valoro, en tagoj", + "RetentionPolicy_MaxAge_DMs": "Maksimuma mesaĝo en rektaj mesaĝoj", + "RetentionPolicy_MaxAge_Groups": "Maksimuma mesaĝo en privataj grupoj", "RetentionPolicy_Precision": "Timer Precizeco", "RetentionPolicy_Precision_Description": "Kiom ofte la pruntempa temporilo devus kuri. Fiksante ĉi tion al pli preciza valoro faras kanalojn kun rapidaj retencaj tempoj pli bone funkcii, sed povus kosti ekstra prilabor-potencon en grandaj komunumoj.", "RetentionPolicyRoom_Enabled": "AÅ­tomate prunti malnovajn mesaĝojn", @@ -2759,4 +2766,4 @@ "registration.component.form.sendConfirmationEmail": "Sendu konfirman retpoŝton", "Enterprise": "Entrepreno", "UpgradeToGetMore_engagement-dashboard_Title": "Analitiko" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/es.i18n.json b/packages/i18n/src/locales/es.i18n.json index c556b470a372..a276a3c51690 100644 --- a/packages/i18n/src/locales/es.i18n.json +++ b/packages/i18n/src/locales/es.i18n.json @@ -756,6 +756,7 @@ "CAS_enabled": "Habilitada", "CAS_Login_Layout": "DiseÃąo de inicio de sesiÃŗn de CAS", "CAS_login_url": "URL de inicio de sesiÃŗn SSO", + "message_counter_many": "{{count}} mensajes", "CAS_login_url_Description": "URL de inicio de sesiÃŗn de tu servicio SSO externo; por ejemplo, `https://sso.example.undef/sso/login`", "CAS_popup_height": "Altura de la ventana emergente de inicio de sesiÃŗn", "CAS_popup_width": "Anchura de la ventana emergente de inicio de sesiÃŗn", @@ -771,6 +772,7 @@ "Categories*": "Categorías*", "CDN_JSCSS_PREFIX": "Prefijo de CDN para JS/CSS", "CDN_PREFIX": "Prefijo de CDN", + "meteor_status_reconnect_in_many": "intentando de nuevo dentro de {{count}} segundos...", "CDN_PREFIX_ALL": "Usar prefijo de CDN para todos los activos", "Certificates_and_Keys": "Certificados y claves", "change-livechat-room-visitor": "Cambiar visitantes de Room de Livechat", @@ -947,7 +949,6 @@ "Contact_not_found": "Contacto no encontrado", "Contact_Profile": "Perfil de contacto", "Contact_Info": "InformaciÃŗn de contacto", - "message_counter_many": "{{count}} mensajes", "Content": "Contenido", "Continue": "Continuar", "Continuous_sound_notifications_for_new_livechat_room": "Notificaciones de sonido continuas para nueva sala de Omnichannel", @@ -962,7 +963,6 @@ "Conversations": "Conversaciones", "Conversations_per_day": "Conversaciones por día", "Convert": "Convertir", - "meteor_status_reconnect_in_many": "intentando de nuevo dentro de {{count}} segundos...", "Convert_Ascii_Emojis": "Convierte ASCII a emoji", "Convert_to_channel": "Convertir en Channel", "Converting_channel_to_a_team": "Vas a convertir este Channel en un equipo. Se conservarÃĄn todos los miembros.", @@ -1495,11 +1495,14 @@ "E2E_Enabled": "E2E habilitado", "E2E_Enabled_Default_DirectRooms": "Habilitar cifrado de Rooms directas por defecto", "E2E_Enabled_Default_PrivateRooms": "Habilitar cifrado de Rooms privadas por defecto", + "mentions_counter_many": "{{count}} menciones", "E2E_Encryption_Password_Change": "Cambiar contraseÃąa de cifrado", "E2E_Encryption_Password_Explanation": "Ahora puedes crear grupos privados cifrados y mensajes directos. TambiÊn puedes cambiar los grupos privados o los mensajes directos existentes para cifrarlos.

    Este es un cifrado de extremo a extremo, por lo que la clave para codifica/decodificar tus mensajes no se guardarÃĄ en el servidor. Por esa razÃŗn, debes guardar tu contraseÃąa en un lugar seguro. Se te pedirÃĄ que la introduzcas en otros dispositivos en los que quieras usar el cifrado E2E.", "E2E_key_reset_email": "NotificaciÃŗn de restablecimiento de clave E2E", "E2E_password_request_text": "Para acceder a tus grupos privados y mensajes directos cifrados, introduce tu contraseÃąa de cifrado.
    Necesitas introducir esta contraseÃąa para codificar/decodificar tus mensajes en cada cliente que uses, ya que la clave no se almacena en el servidor.", "E2E_password_reveal_text": "Ahora puedes crear grupos privados y mensajes directos cifrados. TambiÊn puedes cambiar los grupos privados o los mensajes directos existentes para cifrarlos.

    Este es un cifrado de extremo a extremo, por lo que la clave para codifica/decodificar tus mensajes no se guardarÃĄ en el servidor. Por esa razÃŗn, debes guardar tu contraseÃąa en un lugar seguro. Se te pedirÃĄ que la introduzcas en otros dispositivos en los que quieras usar el cifrado E2E.Consulta mÃĄs informaciÃŗn aquí.

    Tu contraseÃąa: %s

    Esta es una contraseÃąa generada automÃĄticamente. 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 solo se almacena en este navegador hasta que la guardes y descartes este mensaje.", + "threads_counter_many": "{{count}} mensajes en hilo sin leer", + "unread_messages_counter_many": "{{count}} mensajes sin leer", "E2E_Reset_Email_Content": "Tu sesiÃŗn se ha cerrado automÃĄticamente. Cuando vuelvas a iniciar sesiÃŗn, Rocket.Chat generarÃĄ una nueva clave y restaurarÃĄ tu 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ÃĄ tu clave E2E actual y cerrarÃĄ tu sesiÃŗn.
    Cuando vuelvas a iniciar sesiÃŗn, Rocket.Chat generarÃĄ una nueva clave y restaurarÃĄ tu 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 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.", @@ -1742,8 +1745,10 @@ "error-no-tokens-for-this-user": "No hay ningÃēn token para este usuario", "error-no-agents-online-in-department": "No hay agentes en línea en el departamento", "error-no-message-for-unread": "No hay mensajes para marcar como no leídos", + "subscription.callout.description.limitsExceeded_many": "Su espacio de trabajo ha superado los límites <1> {{val, list}} . <3> Administre su suscripciÃŗn para incrementar los límites.", "error-not-allowed": "No permitido", "error-not-authorized": "No autorizado", + "subscription.callout.description.limitsReached_many": "Su espacio de trabajo ha alcanzado los límites <1> {{val, list}} . <3> Administre su suscripciÃŗn para incrementar los límites.", "error-office-hours-are-closed": "El horario de oficina ha finalizado.", "Estimated_due_time": "Tiempo estimado de vencimiento", "error-password-in-history": "La contraseÃąa introducida se ha usado anteriormente", @@ -1798,14 +1803,11 @@ "every_5_minutes": "Una vez cada 5 minutos", "every_10_seconds": "Una vez cada 10 segundos", "every_30_minutes": "Una vez cada 30 minutos", - "mentions_counter_many": "{{count}} menciones", "every_day": "Una vez cada día", "every_hour": "Una vez cada hora", "every_minute": "Una vez cada minuto", "every_second": "Una vez cada segundo", "every_six_hours": "Una vez cada seis horas", - "threads_counter_many": "{{count}} mensajes en hilo sin leer", - "unread_messages_counter_many": "{{count}} mensajes sin leer", "Everyone_can_access_this_channel": "Todos pueden acceder a este canal", "Exact": "Exacto", "Example_payload": "Carga Ãētil de ejemplo", @@ -2124,9 +2126,7 @@ "Impersonate_user_description": "Cuando esta opciÃŗn estÊ habilitada, la integraciÃŗn publicarÃĄ como el usuario que activÃŗ la integraciÃŗn", "Import": "Importar", "Import_New_File": "Importar archivo nuevo", - "subscription.callout.description.limitsExceeded_many": "Su espacio de trabajo ha superado los límites <1> {{val, list}} . <3> Administre su suscripciÃŗn para incrementar los límites.", "Import_requested_successfully": "ImportaciÃŗn solicitada correctamente", - "subscription.callout.description.limitsReached_many": "Su espacio de trabajo ha alcanzado los límites <1> {{val, list}} . <3> Administre su suscripciÃŗn para incrementar los límites.", "Import_Type": "Tipo de importaciÃŗn", "Importer_Archived": "Archivado", "Importer_CSV_Information": "El importador de CSV requiere un formato específico; lee la documentaciÃŗn sobre cÃŗmo estructurar tu archivo zip:", @@ -3534,6 +3534,9 @@ "RetentionPolicy_Advanced_Precision": "Usar la configuraciÃŗn avanzada de la política de retenciÃŗn", "RetentionPolicy_Advanced_Precision_Cron": "Usar CRON de política de retenciÃŗn avanzada", "RetentionPolicy_Advanced_Precision_Cron_Description": "Frecuencia con la que debe ejecutarse el temporizador de retirada 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 exigir 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": "Retira automÃĄticamente los mensajes antiguos en tu instancia de Rocket.Chat.", "RetentionPolicy_DoNotPruneDiscussion": "No retirar mensajes de discusiÃŗn", "RetentionPolicy_DoNotPrunePinned": "No retirar mensajes fijados", @@ -3543,6 +3546,10 @@ "RetentionPolicy_FilesOnly": "Eliminar solo archivos", "RetentionPolicy_FilesOnly_Description": "Solo se eliminarÃĄn los archivos, los mensajes en sí se conservarÃĄn.", "RetentionPolicy_MaxAge": "AntigÃŧedad mÃĄxima de mensaje", + "RetentionPolicy_MaxAge_Channels": "AntigÃŧedad mÃĄxima de mensajes en canales", + "RetentionPolicy_MaxAge_Description": "Retirar todos los mensajes anteriores a este valor (en días)", + "RetentionPolicy_MaxAge_DMs": "AntigÃŧedad mÃĄxima de mensajes directos", + "RetentionPolicy_MaxAge_Groups": "AntigÃŧedad mÃĄxima de mensaje en grupos privados", "RetentionPolicy_Precision": "PrecisiÃŗn del temporizador", "RetentionPolicy_Precision_Description": "Frecuencia con la que debe ejecutarse el temporizador de retirada. Establecer esto en un valor mÃĄs preciso hace que los canales con temporizadores de retenciÃŗn rÃĄpidos funcionen mejor, pero podría exigir potencia de procesamiento adicional en comunidades grandes.", "RetentionPolicyRoom_Enabled": "Retirar mensajes antiguos automÃĄticamente", @@ -5083,4 +5090,4 @@ "Unlimited_seats": "Puestos ilimitados", "Unlimited_MACs": "Contactos Activos por Mes (MAC) ilimitados", "Unlimited_seats_MACs": "Puestos y Contactos Activos por Mes (MAC) ilimitados" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/fa.i18n.json b/packages/i18n/src/locales/fa.i18n.json index 12a187b29050..c4850a7d30eb 100644 --- a/packages/i18n/src/locales/fa.i18n.json +++ b/packages/i18n/src/locales/fa.i18n.json @@ -2372,16 +2372,21 @@ "Retail": "ØŦØ˛ØĻی", "Retention_setting_changed_successfully": "ØĒŲ†Ø¸ÛŒŲ… ØŗیاØŗØĒ Ø­ŲØ¸ Ø­ŲØ¸ شدŲ‡ با Ų…ŲˆŲŲ‚ÛŒØĒ ØĒØēÛŒÛŒØą ÚŠØąØ¯", "RetentionPolicy": "ØŗیاØŗØĒ Ų†Ú¯Ų‡Ø¯Ø§ØąÛŒ", + "RetentionPolicy_AppliesToChannels": "بŲ‡ ڊاŲ†Ø§Ų„ Ų‡Ø§ اؚŲ…اŲ„ Ų…ÛŒ Ø´ŲˆØ¯", + "RetentionPolicy_AppliesToDMs": "بŲ‡ ŲžÛŒØ§Ų… Ų‡Ø§ÛŒ Ų…ØŗØĒŲ‚ÛŒŲ… اؚŲ…اŲ„ Ų…ÛŒ Ø´ŲˆØ¯", + "RetentionPolicy_AppliesToGroups": "اؚŲ…اŲ„ بŲ‡ Ú¯ØąŲˆŲ‡ Ų‡Ø§ÛŒ ØŽØĩŲˆØĩی", "RetentionPolicy_Description": "بŲ‡ ØˇŲˆØą ØŽŲˆØ¯ÚŠØ§Øą ŲžÛŒØ§Ų… Ų‡Ø§ÛŒ Ų‚دیŲ…ÛŒ ØąØ§ Ø¯Øą ØŗØąØ§ØŗØą Ų†Ų…ŲˆŲ†Ų‡ Rocket.Chat ØŽŲˆØ¯ Ų‚ØąØ§Øą دŲ‡ÛŒØ¯.", "RetentionPolicy_Enabled": "ŲØšØ§Ų„", "RetentionPolicy_ExcludePinned": "ŲžÛŒØ§Ų… Ų‡Ø§ÛŒ ŲžÛŒŲ† شدŲ‡ ØąØ§ حذŲ ÚŠŲ†ÛŒØ¯", "RetentionPolicy_FilesOnly": "ŲŲ‚Øˇ ŲØ§ÛŒŲ„Ų‡Ø§ ØąØ§ حذŲ ÚŠŲ†ÛŒØ¯", "RetentionPolicy_FilesOnly_Description": "ŲŲ‚Øˇ ŲØ§ÛŒŲ„ Ų‡Ø§ حذŲ ØŽŲˆØ§Ų‡Ų†Ø¯ شد، ŲžÛŒØ§Ų… Ų‡Ø§ÛŒ ØŽŲˆØ¯ ØąØ§ Ø¯Øą ØŦای ØŽŲˆØ¯ Ų‚ØąØ§Øą Ų…ÛŒ دŲ‡Ų†Ø¯.", "RetentionPolicy_MaxAge": "حداڊØĢØą ØŗŲ† ŲžÛŒØ§Ų…", + "RetentionPolicy_MaxAge_Channels": "حداڊØĢØą ØŗŲ† ŲžÛŒØ§Ų… Ø¯Øą ڊاŲ†Ø§Ų„ Ų‡Ø§", + "RetentionPolicy_MaxAge_Description": "ØĒŲ…اŲ… ŲžÛŒØ§Ų… Ų‡Ø§ÛŒ Ų‚دیŲ…ÛŒ ØĒØą Ø§Ø˛ ایŲ† Ų…Ų‚Ø¯Ø§Øą ØąØ§ Ø¯Øą ØąŲˆØ˛Ų‡Ø§ ŲØąŲˆ ÚŠŲ†", + "RetentionPolicy_MaxAge_DMs": "حداڊØĢØą ØŗŲ† ŲžÛŒØ§Ų… Ø¯Øą ŲžÛŒØ§Ų… Ų‡Ø§ÛŒ Ų…ØŗØĒŲ‚ÛŒŲ…", + "RetentionPolicy_MaxAge_Groups": "حداڊØĢØą ØŗŲ† ŲžÛŒØ§Ų… Ø¯Øą Ú¯ØąŲˆŲ‡ Ų‡Ø§ÛŒ ØŽØĩŲˆØĩی", "RetentionPolicy_Precision": "ØĒایŲ…Øą دŲ‚ÛŒŲ‚", "RetentionPolicy_Precision_Description": "Ų‡Øą چŲ†Ø¯ ŲˆŲ‚ØĒ ÛŒÚŠØ¨Ø§Øą ØĒایŲ…Øą Ø¨ØąŲ‡ باید اØŦØąØ§ Ø´ŲˆØ¯ ØĒŲ†Ø¸ÛŒŲ… ایŲ† بŲ‡ یڊ Ų…Ų‚Ø¯Ø§Øą دŲ‚ÛŒŲ‚ ØĒØą باؚØĢ Ų…ÛŒ Ø´ŲˆØ¯ ڊاŲ†Ø§Ų„ Ų‡Ø§ÛŒ با ØĒایŲ…Øą Ų†Ú¯Ų‡Ø¯Ø§ØąÛŒ ØŗØąÛŒØš ÚŠØ§Øą بŲ‡ØĒØąØŒ اŲ…ا Ų…Ų…ÚŠŲ† اØŗØĒ ŲžØąØ¯Ø§Ø˛Ø´ Ų‚Ø¯ØąØĒ اØļاŲÛŒ Ø¯Øą ØŦŲˆØ§Ų…Øš Ø¨Ø˛ØąÚ¯ Ų‡Ø˛ÛŒŲ†Ų‡.", - - "RetentionPolicyRoom_Enabled": "ŲžÛŒØ§Ų… Ų‡Ø§ÛŒ Ų‚دیŲ…ÛŒ ØąØ§ بŲ‡ ØˇŲˆØą ØŽŲˆØ¯ÚŠØ§Øą ØŽØąØ¯ ÚŠŲ†ÛŒØ¯", "RetentionPolicyRoom_ExcludePinned": "ŲžÛŒØ§Ų… Ų‡Ø§ÛŒ ŲžÛŒŲ† شدŲ‡ ØąØ§ حذŲ ÚŠŲ†ÛŒØ¯", "RetentionPolicyRoom_FilesOnly": "ŲŲ‚Øˇ ŲžØąŲˆŲ†Ø¯Ų‡ Ų‡Ø§ ØąØ§ ببŲ†Ø¯ÛŒØ¯ØŒ ŲžÛŒØ§Ų… Ų‡Ø§ ØąØ§ Ų†Ú¯Ų‡ Ø¯Ø§ØąÛŒØ¯", @@ -3109,4 +3114,4 @@ "RegisterWorkspace_Features_Omnichannel_Title": "ڊاŲ†Ø§Ų„ Ų‡Ų…Ų‡â€ŒÚŠØ§ØąŲ‡", "Enterprise": "Ø´ØąÚŠØĒ، ŲžØąŲˆÚ˜Ų‡", "UpgradeToGetMore_engagement-dashboard_Title": "ØĒØŦØ˛ÛŒŲ‡ Ųˆ ØĒØ­Ų„ÛŒŲ„ ØĒØąØ§ŲÛŒÚŠ" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/fi.i18n.json b/packages/i18n/src/locales/fi.i18n.json index fcc101ca57f7..17b5f65eab31 100644 --- a/packages/i18n/src/locales/fi.i18n.json +++ b/packages/i18n/src/locales/fi.i18n.json @@ -4060,6 +4060,9 @@ "RetentionPolicy_Advanced_Precision": "Käytä laajennettua säilytyskäytäntÃļä", "RetentionPolicy_Advanced_Precision_Cron": "Käytä laajennetun säilytyskäytännÃļn Cron -käytäntÃļä", "RetentionPolicy_Advanced_Precision_Cron_Description": "Kuinka usein karsinta-ajastimen tulisi toimia, määritellään cron-tyÃļn lausekkeella. Jos tämä asetetaan tarkempaan arvoon, kanavat, joissa on nopeat säilytysajastimet, toimivat paremmin, mutta se saattaa vaatia ylimääräistä laskentatehoa suurissa yhteisÃļissä.", + "RetentionPolicy_AppliesToChannels": "Koskee kanavia", + "RetentionPolicy_AppliesToDMs": "Koskee suoria viestejä", + "RetentionPolicy_AppliesToGroups": "Koskee yksityisiä ryhmiä", "RetentionPolicy_Description": "Karsii vanhat viestit ja tiedostot automaattisesti koko tyÃļtilassa.", "RetentionPolicy_DoNotPruneDiscussion": "Älä karsi keskusteluviestejä", "RetentionPolicy_DoNotPrunePinned": "Älä karsi kiinnitettyjä viestejä", @@ -4069,6 +4072,10 @@ "RetentionPolicy_FilesOnly": "Poista vain tiedostot", "RetentionPolicy_FilesOnly_Description": "Vain tiedostot poistetaan, itse viestit säilyvät.", "RetentionPolicy_MaxAge": "Viestin maksimi-ikä", + "RetentionPolicy_MaxAge_Channels": "Viestin maksimi-ikä kanavilla", + "RetentionPolicy_MaxAge_Description": "Karsi kaikki viestit, jotka ovat vanhempia kuin tämä arvo (päiviä)", + "RetentionPolicy_MaxAge_DMs": "Viestin maksimi-ikä yksityisviesteissä", + "RetentionPolicy_MaxAge_Groups": "Viestin maksimi-ikä yksityisissä ryhmissä", "RetentionPolicy_Precision": "Ajastimen tarkkuus", "RetentionPolicy_Precision_Description": "Karsinta-ajastimen suoritustiheys. Tarkan arvon määritys toimii paremmin kanavilla, joilla on nopeat säilytysajastimet, mutta käsittelyteho saattaa kärsiä suurissa yhteisÃļissä.", "RetentionPolicyRoom_Enabled": "Karsi vanhat viestit automaattisesti", @@ -5660,6 +5667,7 @@ "Always_send_the_transcript_to_contacts_at_the_end_of_the_conversations": "Lähetä tekstitallenne aina yhteyshenkilÃļille keskustelujen lopuksi.", "Export_conversation_transcript_as_PDF": "Vie keskustelun tekstitallenne PDF-muotoon", "Omnichannel_transcript_email": "Lähetä keskustelun tekstitallenne sähkÃļpostitse.", + "Accounts_Default_User_Preferences_omnichannelTranscriptEmail_Description": "Lähetä tekstitallenne aina yhteyshenkilÃļille keskustelujen lopuksi.", "Omnichannel_transcript_pdf": "Vie keskustelun tekstitallenne PDF-muotoon.", "Accounts_Default_User_Preferences_omnichannelTranscriptPDF_Description": "Vie tekstitallenne aina PDF-muotoon keskustelujen lopuksi.", "Contact_email": "YhteyshenkilÃļn sähkÃļpostiosoite", @@ -5742,4 +5750,4 @@ "Theme_Appearence": "Teeman ulkoasu", "Enterprise": "Yritys", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/fr.i18n.json b/packages/i18n/src/locales/fr.i18n.json index c20361ae9329..84d33eaf5330 100644 --- a/packages/i18n/src/locales/fr.i18n.json +++ b/packages/i18n/src/locales/fr.i18n.json @@ -232,6 +232,7 @@ "Accounts_ShowFormLogin": "Afficher le formulaire de connexion par dÊfaut", "Accounts_TwoFactorAuthentication_By_TOTP_Enabled": "Activer l'authentification à deux facteurs via TOTP", "Accounts_TwoFactorAuthentication_By_TOTP_Enabled_Description": "Les utilisateurs peuvent configurer l'authentification à deux facteurs via n'importe quelle application TOTP, comme Google Authenticateur ou Authy.", + "Calls_in_queue_many": "{{count}} appels en file d'attente", "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In": "Activer automatiquement l'authentification à deux facteurs par e-mail pour les nouveaux utilisateurs", "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 la dÊsactiver dans leur page de profil.", "Accounts_TwoFactorAuthentication_By_Email_Code_Expiration": "DÊlai d'expiration du code envoyÊ par e-mail (en secondes)", @@ -277,7 +278,6 @@ "add-livechat-department-agents_description": "Autorisation d'ajouter des agents omnicanaux aux dÊpartements", "add-oauth-service": "Ajouter un service Oauth", "add-oauth-service_description": "Autorisation d'ajouter un nouveau service Oauth", - "Calls_in_queue_many": "{{count}} appels en file d'attente", "add-user": "Ajouter un utilisateur", "add-user_description": "Autorisation d'ajouter de nouveaux utilisateurs au serveur via l'Êcran des utilisateurs", "add-user-to-any-c-room": "Ajouter un utilisateur à un canal public", @@ -751,6 +751,7 @@ "CAS_enabled": "ActivÊ", "CAS_Login_Layout": "PrÊsentation de la connexion CAS", "CAS_login_url": "URL de connexion SSO", + "message_counter_many": "{{count}} messages", "CAS_login_url_Description": "URL de connexion de votre service SSO externe, par exemple : `https://sso.example.undef/sso/login`", "CAS_popup_height": "Hauteur de la fenÃĒtre contextuelle de connexion", "CAS_popup_width": "Largeur de la fenÃĒtre contextuelle de connexion", @@ -766,6 +767,7 @@ "Categories*": "CatÊgories*", "CDN_JSCSS_PREFIX": "PrÊfixe CDN pour JS/CSS", "CDN_PREFIX": "PrÊfixe CDN", + "meteor_status_reconnect_in_many": "nouvelle tentative dans {{count}} secondes...", "CDN_PREFIX_ALL": "Utiliser le prÊfixe CDN pour toutes les ressources", "Certificates_and_Keys": "Certificats et clÊs", "change-livechat-room-visitor": "Modifier les visiteurs des salons Livechat", @@ -944,7 +946,6 @@ "Contact_not_found": "Contact introuvable", "Contact_Profile": "Profil de contact", "Contact_Info": "Informations de contact", - "message_counter_many": "{{count}} messages", "Content": "Contenu", "Continue": "Continuer", "Continuous_sound_notifications_for_new_livechat_room": "Notifications sonores continues pour le nouveau salon omnicanal", @@ -959,7 +960,6 @@ "Conversations": "Conversations", "Conversations_per_day": "Conversations par jour", "Convert": "Convertir", - "meteor_status_reconnect_in_many": "nouvelle tentative dans {{count}} secondes...", "Convert_Ascii_Emojis": "Convertir le code ASCII en emoji", "Convert_to_channel": "Convertir en canal", "Converting_channel_to_a_team": "Vous convertissez ce canal en Êquipe. Tous les membres seront conservÊs.", @@ -3535,6 +3535,9 @@ "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": "FrÊquence d'exÊcution du temporisateur d'Êlagage dÊfinie par l'expression de la tÃĸche cron. Une valeur plus prÊcise amÊliore le fonctionnement des canaux avec des temporisateurs de rÊtention rapides, mais le coÃģt en termes de puissance de traitement peut ÃĒtre ÊlevÊ pour les grandes communautÊs.", + "RetentionPolicy_AppliesToChannels": "S'applique aux canaux", + "RetentionPolicy_AppliesToDMs": "S'applique aux messages directs", + "RetentionPolicy_AppliesToGroups": "S'applique aux groupes privÊs", "RetentionPolicy_Description": "Élague automatiquement les anciens messages de votre instance Rocket.Chat.", "RetentionPolicy_DoNotPruneDiscussion": "Ne pas Êlaguer les messages de discussion", "RetentionPolicy_DoNotPrunePinned": "Ne pas Êlaguer les messages ÊpinglÊs", @@ -3544,6 +3547,10 @@ "RetentionPolicy_FilesOnly": "Supprimer uniquement les fichiers", "RetentionPolicy_FilesOnly_Description": "Seuls les fichiers seront supprimÊs, les messages eux-mÃĒmes seront conservÊs.", "RetentionPolicy_MaxAge": "Âge maximal des messages", + "RetentionPolicy_MaxAge_Channels": "Âge maximal des messages dans les canaux", + "RetentionPolicy_MaxAge_Description": "Élaguer 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_Precision": "PrÊcision du temporisateur", "RetentionPolicy_Precision_Description": "FrÊquence d'exÊcution du temporisateur d'Êlagage. Une valeur plus prÊcise amÊliore le fonctionnement des canaux avec des temporisateurs de rÊtention rapides, mais le coÃģt en termes de puissance de traitement peut ÃĒtre ÊlevÊ pour les grandes communautÊs.", "RetentionPolicyRoom_Enabled": "Élaguer automatiquement les anciens messages", @@ -4880,4 +4887,4 @@ "Enterprise": "Entreprise", "UpgradeToGetMore_engagement-dashboard_Title": "Analyses", "UpgradeToGetMore_auditing_Title": "Audit des messages" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/hi-IN.i18n.json b/packages/i18n/src/locales/hi-IN.i18n.json index d68f9e2d8d08..1049d8495d86 100644 --- a/packages/i18n/src/locales/hi-IN.i18n.json +++ b/packages/i18n/src/locales/hi-IN.i18n.json @@ -1,9 +1,29 @@ { "500": "ā¤†ā¤‚ā¤¤ā¤°ā¤ŋā¤• ā¤¸ā¤°āĨā¤ĩā¤° ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "__agents__agents_and__count__conversations__period__": "{{agents}} ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤”ā¤° {{count}} ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤, {{period}}", + "__count__empty_rooms_will_be_removed_automatically": "{{count}} ā¤–ā¤žā¤˛āĨ€ ā¤•ā¤Žā¤°āĨ‡ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "__count__empty_rooms_will_be_removed_automatically__rooms__": "{{count}} ā¤–ā¤žā¤˛āĨ€ ā¤•ā¤Žā¤°āĨ‡ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡:
    {{rooms}}āĨ¤", + "__count__message_pruned": "{{count}} ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•ā¤žā¤Ÿ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "__count__conversations__period__": "{{count}} ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤, {{period}}", + "__count__tags__and__count__conversations__period__": "{{count}} ā¤ŸāĨˆā¤— ā¤”ā¤° {{conversations}} ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤, {{period}}", + "__departments__departments_and__count__conversations__period__": "{{departments}} ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤”ā¤° {{count}} ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤, {{period}}", + "__usersCount__member_joined": "+ {{usersCount}} ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨā¤", + "__usersCount__people_will_be_invited": "{{usersCount}} ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤•āĨ‹ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž", "__username__is_no_longer__role__defined_by__user_by_": "{{username}} is no longer {{role}} by {{user_by}}", "__username__was_set__role__by__user_by_": "{{username}} was set {{role}} by {{user_by}}", + "__count__without__department__": "ā¤Ŧā¤ŋā¤¨ā¤ž ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•āĨ‡ {{count}}", + "__count__without__tags__": "ā¤Ŧā¤ŋā¤¨ā¤ž ā¤ŸāĨˆā¤— ā¤•āĨ‡ {{count}}", + "__count__without__assignee__": "{{count}} ā¤Ŧā¤ŋā¤¨ā¤ž ā¤…ā¤¸ā¤žā¤‡ā¤¨āĨ€ ā¤•āĨ‡", + "removed__username__as__role_": "{{username}} ā¤•āĨ‹ {{role}} ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "set__username__as__role_": "{{username}} ā¤•āĨ‹ {{role}} ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "This_room_encryption_has_been_enabled_by__username_": "ā¤‡ā¤¸ ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ {{username}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "This_room_encryption_has_been_disabled_by__username_": "ā¤‡ā¤¸ ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ {{username}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Third_party_login": "ā¤¤āĨƒā¤¤āĨ€ā¤¯-ā¤Ēā¤•āĨā¤ˇ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨", + "Enabled_E2E_Encryption_for_this_room": "ā¤‡ā¤¸ ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ E2E ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "disabled": "ā¤…ā¤•āĨā¤ˇā¤Ž", + "Disabled_E2E_Encryption_for_this_room": "ā¤‡ā¤¸ ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤•āĨā¤ˇā¤Ž E2E ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨", "@username": "@ā¤¯āĨ‚āĨ›ā¤°ā¤¨āĨ‡ā¤Ž", - "@username_message": "@ā¤¯āĨ‚āĨ›ā¤°ā¤¨āĨ‡ā¤Ž ", + "@username_message": "@ā¤¯āĨ‚āĨ›ā¤°ā¤¨āĨ‡ā¤Ž ", "#channel": "#ā¤šāĨˆā¤¨ā¤˛", "%_of_conversations": "% ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", "0_Errors_Only": "0 - ā¤¤āĨā¤°āĨā¤Ÿā¤ŋā¤¯ā¤žā¤‚ ā¤•āĨ‡ā¤ĩā¤˛", @@ -11,18 +31,38 @@ "2_Erros_Information_and_Debug": "2 - ā¤¤āĨā¤°āĨā¤Ÿā¤ŋā¤¯ā¤žā¤‚, ā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤”ā¤° ā¤Ąā¤ŋā¤Ŧā¤—", "12_Hour": "12-ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤•āĨ€ ā¤˜ā¤Ąā¤ŧāĨ€", "24_Hour": "24-ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤•āĨ€ ā¤˜ā¤Ąā¤ŧāĨ€", + "A_cloud-based_platform_for_those_needing_a_plug-and-play_app": "ā¤ĒāĨā¤˛ā¤—-ā¤ā¤‚ā¤Ą-ā¤ĒāĨā¤˛āĨ‡ ā¤ā¤Ē ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤ĩā¤žā¤˛āĨ‡ ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą-ā¤†ā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤ĒāĨā¤˛āĨ‡ā¤Ÿā¤Ģā¤ŧāĨ‰ā¤°āĨā¤ŽāĨ¤", + "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}}āĨ¤", + "A_secure_and_highly_private_self-managed_solution_for_conference_calls": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤”ā¤° ā¤…ā¤¤āĨā¤¯ā¤§ā¤ŋā¤• ā¤¨ā¤ŋā¤œāĨ€ ā¤¸āĨā¤ĩ-ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤¸ā¤Žā¤žā¤§ā¤žā¤¨āĨ¤", + "A_workspace_admin_needs_to_install_and_configure_a_conference_call_app": "ā¤ā¤• ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤•āĨ‹ ā¤ā¤• ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤ā¤Ē ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤”ā¤° ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "An_app_needs_to_be_installed_and_configured": "ā¤ā¤• ā¤ā¤Ē ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤”ā¤° ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž.", + "Accessibility": "ā¤¸ā¤°ā¤˛ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—", + "Accessibility_and_Appearance": "ā¤Ēā¤šāĨā¤‚ā¤š ā¤ā¤ĩā¤‚ ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "Accessibility_activation": "ā¤¯ā¤šā¤žā¤‚ ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤ŋā¤‚ā¤— ā¤…ā¤¨āĨā¤­ā¤ĩ ā¤•āĨ‹ ā¤ŦāĨ‡ā¤šā¤¤ā¤° ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ˆ ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤•āĨ€ ā¤¸āĨā¤ĩā¤ŋā¤§ā¤žā¤ā¤‚ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Accept_Call": "ā¤•āĨ‰ā¤˛ ā¤˛āĨ‡ā¤¨ā¤ž", "Accept": "ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚", "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "ā¤¯ā¤Ļā¤ŋ ā¤•āĨ‹ā¤ˆ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤­āĨ€ ā¤‡ā¤¨ā¤•ā¤Žā¤ŋā¤‚ā¤— ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Accept_new_livechats_when_agent_is_idle": "ā¤œā¤Ŧ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤šāĨ‹ ā¤¤āĨ‹ ā¤¨ā¤ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚", "Accept_with_no_online_agents": "ā¤•āĨ‹ā¤ˆ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚", "Access_not_authorized": "ā¤ĒāĨā¤°ā¤ĩāĨ‡ā¤ļ ā¤…ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", "Access_Token_URL": "ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤ŸāĨ‹ā¤•ā¤¨ URL", + "Access_Your_Account": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤–ā¤žā¤¤āĨ‡ ā¤Ēā¤° ā¤Ēā¤šāĨā¤‚ā¤š", + "access_your_basic_information": "ā¤…ā¤Ēā¤¨āĨ€ ā¤ŦāĨā¤¨ā¤ŋā¤¯ā¤žā¤ĻāĨ€ ā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤•ā¤ž ā¤†ā¤‚ā¤•ā¤˛ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", "access-mailer": "ā¤ŽāĨ‡ā¤˛ā¤° ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤•ā¤°āĨ‡ā¤‚", "access-mailer_description": "ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤Ŧā¤Ąā¤ŧāĨ‡ ā¤ĒāĨˆā¤Žā¤žā¤¨āĨ‡ ā¤Ēā¤° ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋāĨ¤", + "access-marketplace": "ā¤Ŧā¤žā¤œā¤ŧā¤žā¤° ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤šāĨ‡ā¤‚", + "access-marketplace_description": "ā¤Ŧā¤žā¤œā¤ŧā¤žā¤° ā¤¸āĨ‡ ā¤ā¤ĒāĨā¤¸ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧ ā¤•ā¤°ā¤¨āĨ‡ ā¤”ā¤° ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", "access-permissions": "ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯ā¤žā¤ ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤•ā¤°āĨ‡ā¤‚", "access-permissions_description": "ā¤ĩā¤ŋā¤­ā¤ŋā¤¨āĨā¤¨ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "access-setting-permissions": "ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—-ā¤†ā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯ā¤žā¤ ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "access-setting-permissions_description": "ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—-ā¤†ā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", "Accessing_permissions": "ā¤…ā¤•āĨā¤¸āĨ‡ā¤¸āĨā¤¸ā¤ŋā¤‚ā¤— ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", "Account_SID": "ā¤–ā¤žā¤¤ā¤ž ā¤ā¤¸ā¤†ā¤ˆā¤ĄāĨ€", + "Account": "ā¤–ā¤žā¤¤ā¤ž", "Accounts": "ā¤–ā¤žā¤¤ā¤ž", + "Accounts_Description": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤–ā¤žā¤¤ā¤ž ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚.", "Accounts_Admin_Email_Approval_Needed_Default": "

    The user [name] ([email]) has been registered.

    Please check \"Administration -> Users\" to activate or delete it.

    ", "Accounts_Admin_Email_Approval_Needed_Subject_Default": "ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤šāĨˆ ā¤”ā¤° ā¤‰ā¤¸āĨ‡ ā¤…ā¤¨āĨā¤ŽāĨ‹ā¤Ļā¤¨ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", "Accounts_Admin_Email_Approval_Needed_With_Reason_Default": "

    The user [name] ([email]) has been registered.

    Reason: [reason]

    Please check \"Administration -> Users\" to activate or delete it.

    ", @@ -31,12 +71,17 @@ "Accounts_AllowDeleteOwnAccount": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", "Accounts_AllowedDomainsList": "ā¤…ā¤¨āĨā¤Žā¤¤ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤¸āĨ‚ā¤šāĨ€", "Accounts_AllowedDomainsList_Description": "ā¤…ā¤¨āĨā¤Žā¤¤ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤•āĨ€ ā¤•āĨ‹ā¤Žā¤ž-ā¤ĒāĨƒā¤Ĩā¤• ā¤¸āĨ‚ā¤šāĨ€", + "Accounts_AllowInvisibleStatusOption": "ā¤…ā¤ĻāĨƒā¤ļāĨā¤¯ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", "Accounts_AllowEmailChange": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Accounts_AllowEmailNotifications": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Accounts_AllowFeaturePreview": "ā¤Ģā¤ŧāĨ€ā¤šā¤° ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", "Accounts_AllowPasswordChange": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Accounts_AllowPasswordChangeForOAuthUsers": "OAuth ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", "Accounts_AllowRealNameChange": "ā¤¨ā¤žā¤Ž ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", "Accounts_AllowUserAvatarChange": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", "Accounts_AllowUsernameChange": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", "Accounts_AllowUserProfileChange": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Accounts_AllowUserStatusMessageChange": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", "Accounts_AvatarBlockUnauthenticatedAccess": "ā¤…ā¤ĒāĨā¤ˇāĨā¤Ÿ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤•āĨ‹ ā¤…ā¤ĩā¤¤ā¤žā¤°āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", "Accounts_AvatarCacheTime": "ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤•āĨˆā¤ļ ā¤¸ā¤Žā¤¯", "Accounts_AvatarCacheTime_description": "HTTP ā¤ĒāĨā¤°āĨ‹ā¤ŸāĨ‹ā¤•āĨ‰ā¤˛ ā¤•āĨ‹ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤›ā¤ĩā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤•āĨˆā¤ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤Ŧā¤¤ā¤žā¤ˆ ā¤—ā¤ˆ ā¤šāĨˆāĨ¤", @@ -52,11 +97,14 @@ "Accounts_CustomFieldsToShowInUserInfo": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤ŋā¤–ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤", "Accounts_Default_User_Preferences": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤ā¤‚", "Accounts_Default_User_Preferences_audioNotifications": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€", + "Accounts_Default_User_Preferences_alsoSendThreadToChannel_Description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤­āĨ€ ā¤­āĨ‡ā¤œāĨ‡ā¤‚ ā¤ĩāĨā¤¯ā¤ĩā¤šā¤žā¤° ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", "Accounts_Default_User_Preferences_desktopNotifications": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€", "Accounts_Default_User_Preferences_pushNotifications": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€", "Accounts_Default_User_Preferences_not_available": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤ā¤ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤ŋā¤Ģā¤˛, ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤ĩāĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤¸āĨ‡ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤šāĨˆā¤‚", + "Accounts_Default_User_Preferences_showThreadsInMainChannel_Description": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, ā¤ĨāĨā¤°āĨ‡ā¤Ą ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ā¤°āĨā¤—ā¤¤ ā¤¸ā¤­āĨ€ ā¤‰ā¤¤āĨā¤¤ā¤° ā¤­āĨ€ ā¤¸āĨ€ā¤§āĨ‡ ā¤ŽāĨā¤–āĨā¤¯ ā¤•ā¤•āĨā¤ˇ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤ŋā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, ā¤ĒāĨā¤°āĨ‡ā¤ˇā¤• ā¤•āĨ€ ā¤Ēā¤¸ā¤‚ā¤Ļ ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤ĨāĨā¤°āĨ‡ā¤Ą ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤ŋā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", "Accounts_DefaultUsernamePrefixSuggestion": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤‰ā¤Ēā¤¸ā¤°āĨā¤— ā¤¸āĨā¤ā¤žā¤ĩ", "Accounts_denyUnverifiedEmail": "ā¤…ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_Directory_DefaultView": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤•ā¤ž ā¤¸āĨ‚ā¤šāĨ€", "Accounts_Email_Activated": "[name]

    ā¤†ā¤Ēā¤•ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž ā¤Ĩā¤žāĨ¤

    ", "Accounts_Email_Activated_Subject": "ā¤–ā¤žā¤¤ā¤ž ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", "Accounts_Email_Approved": "[name]

    ā¤†ā¤Ēā¤•ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤žāĨ¤

    ", @@ -76,18 +124,36 @@ "Accounts_iframe_url": "Iframe URL", "Accounts_LoginExpiration": "ā¤Ļā¤ŋā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤ĩāĨ‡ā¤ļ ā¤•āĨ€ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ā¤ŋ", "Accounts_ManuallyApproveNewUsers": "ā¤¨ā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤¨āĨā¤ŽāĨ‹ā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_OAuth_Apple": "Apple ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸ā¤žā¤‡ā¤¨ ā¤‡ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_OAuth_Apple_Description": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤•ā¤ŋ 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": "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_Identity_Token_Sent_Via": "ā¤•āĨ‡ ā¤œā¤°ā¤ŋā¤ ā¤Ēā¤šā¤šā¤žā¤¨ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž", + "Accounts_OAuth_Custom_Key_Field": "ā¤•āĨā¤‚ā¤œāĨ€ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", "Accounts_OAuth_Custom_Login_Style": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ļāĨˆā¤˛āĨ€", + "Accounts_OAuth_Custom_Map_Channels": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤“ā¤‚/ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤•āĨ‹ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤Ēā¤° ā¤ŽāĨˆā¤Ē ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_OAuth_Custom_Merge_Roles": "SSO ā¤¸āĨ‡ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤Žā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", "Accounts_OAuth_Custom_Merge_Users": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤Žā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_OAuth_Custom_Merge_Users_Distinct_Services": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤…ā¤˛ā¤—-ā¤…ā¤˛ā¤— ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤¸āĨ‡ ā¤Žā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_OAuth_Custom_Merge_Users_Distinct_Services_Description": "ā¤œā¤Ŧ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤•āĨā¤‚ā¤œāĨ€ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•ā¤ŋā¤¸āĨ€ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨ‡ ā¤ŽāĨ‡ā¤˛ ā¤–ā¤žā¤¤ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤‡ā¤¸ OAuth ā¤¸āĨ‡ā¤ĩā¤ž ā¤•āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤‰ā¤¨ā¤•āĨ€ ā¤ŽāĨ‚ā¤˛ ā¤¸āĨ‡ā¤ĩā¤ž ā¤•āĨ€ ā¤Ēā¤°ā¤ĩā¤žā¤š ā¤•ā¤ŋā¤ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤ŋā¤˛ā¤¯ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚āĨ¤", + "Accounts_OAuth_Custom_Name_Field": "ā¤¨ā¤žā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą", + "Accounts_OAuth_Custom_Roles_Claim": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤/ā¤¸ā¤ŽāĨ‚ā¤š ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤¨ā¤žā¤Ž", + "Accounts_OAuth_Custom_Roles_To_Sync": "ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤", + "Accounts_OAuth_Custom_Roles_To_Sync_Description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤”ā¤° ā¤¨ā¤ŋā¤°āĨā¤Žā¤žā¤Ŗ ā¤Ēā¤° ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ OAuth ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ (ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤—)āĨ¤", "Accounts_OAuth_Custom_Scope": "ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", "Accounts_OAuth_Custom_Secret": "ā¤—āĨā¤ĒāĨā¤¤", + "Accounts_OAuth_Custom_Show_Button_On_Login_Page": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨ‡ā¤œ ā¤Ēā¤° ā¤Ŧā¤Ÿā¤¨ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", "Accounts_OAuth_Custom_Token_Path": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤Ēā¤Ĩ", "Accounts_OAuth_Custom_Token_Sent_Via": "ā¤•āĨ‡ ā¤œā¤°ā¤ŋā¤ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž", "Accounts_OAuth_Custom_Username_Field": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą", @@ -111,6 +177,7 @@ "Accounts_OAuth_Gitlab_callback_url": "GitLab ā¤•āĨ‰ā¤˛ā¤ŦāĨˆā¤• URL", "Accounts_OAuth_Gitlab_id": "Gitlab Id", "Accounts_OAuth_Gitlab_identity_path": "ā¤Ēā¤šā¤šā¤žā¤¨ ā¤Ēā¤Ĩ", + "Accounts_OAuth_Gitlab_merge_users": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤Žā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", "Accounts_OAuth_Gitlab_secret": "ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ Secret", "Accounts_OAuth_Google": "Google ā¤˛āĨ‰ā¤—ā¤ŋā¤¨", "Accounts_OAuth_Google_callback_url": "Google ā¤•āĨ‰ā¤˛ā¤ŦāĨˆā¤• URL", @@ -125,7 +192,10 @@ "Accounts_OAuth_Meteor_id": "Meteor Id", "Accounts_OAuth_Meteor_secret": "Meteor Secret", "Accounts_OAuth_Nextcloud": "OAuth ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Accounts_OAuth_Nextcloud_callback_url": "ā¤¨āĨ‡ā¤•āĨā¤¸āĨā¤Ÿā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•āĨ‰ā¤˛ā¤ŦāĨˆā¤• ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Accounts_OAuth_Nextcloud_id": "ā¤¨āĨ‡ā¤•āĨā¤¸āĨā¤Ÿā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤†ā¤ˆā¤ĄāĨ€", "Accounts_OAuth_Nextcloud_secret": "ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ Secret", + "Accounts_OAuth_Nextcloud_URL": "ā¤¨āĨ‡ā¤•āĨā¤¸āĨā¤Ÿā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸ā¤°āĨā¤ĩā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", "Accounts_OAuth_Proxy_host": "ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤šāĨ‹ā¤¸āĨā¤Ÿ", "Accounts_OAuth_Proxy_services": "ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤¸āĨ‡ā¤ĩā¤žā¤ā¤", "Accounts_OAuth_Tokenpass": "Tokenpass ā¤˛āĨ‰ā¤—ā¤‡ā¤¨", @@ -152,65 +222,5918 @@ "Accounts_Password_Policy_AtLeastOneLowercase_Description": "ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤˛āĨ‹ā¤…ā¤°ā¤•āĨ‡ā¤¸ ā¤ĩā¤°āĨā¤Ŗ ā¤šāĨ‹āĨ¤", "Accounts_Password_Policy_AtLeastOneNumber": "ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤¨ā¤‚ā¤Ŧā¤°", "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_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_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_Enabled": "ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ", + "Accounts_Registration_Users_Default_Roles": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤", + "Accounts_Registration_Users_Default_Roles_Description": "ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ (ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤¸ā¤šā¤ŋā¤¤) ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤‚ (ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤—) ā¤ĻāĨ€ ā¤œā¤žā¤ā¤‚ā¤—āĨ€", + "Accounts_Registration_Users_Default_Roles_Enabled": "ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_Registration_InviteUrlType": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ URL ā¤ĒāĨā¤°ā¤•ā¤žā¤°", "Accounts_Registration_InviteUrlType_Direct": "ā¤¸āĨ€ā¤§ā¤ž", + "Accounts_Registration_InviteUrlType_Proxy": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤¨ā¤ŋā¤§ā¤ŋ", "Accounts_RegistrationForm": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤Ēā¤¤āĨā¤°", "Accounts_RegistrationForm_Disabled": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Accounts_RegistrationForm_LinkReplacementText": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĢāĨ‰ā¤°āĨā¤Ž ā¤˛ā¤ŋā¤‚ā¤• ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤¸āĨā¤Ĩā¤žā¤Ēā¤¨ ā¤Ēā¤žā¤ ", "Accounts_RegistrationForm_Public": "ā¤œā¤¨ā¤¤ā¤ž", + "Accounts_RegistrationForm_Secret_URL": "ā¤—āĨā¤ĒāĨā¤¤ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Accounts_RegistrationForm_SecretURL": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĒāĨā¤°ā¤Ēā¤¤āĨā¤° ā¤—āĨā¤ĒāĨā¤¤ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Accounts_RegistrationForm_SecretURL_Description": "ā¤†ā¤Ēā¤•āĨ‹ ā¤ā¤• ā¤¯ā¤žā¤ĻāĨƒā¤šāĨā¤›ā¤ŋā¤• ā¤¸āĨā¤ŸāĨā¤°ā¤ŋā¤‚ā¤— ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤°ā¤¨āĨ€ ā¤šāĨ‹ā¤—āĨ€ ā¤œāĨ‹ ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ URL ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧāĨ€ ā¤œā¤žā¤ā¤—āĨ€āĨ¤ ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: `https://open.rocket.chat/register/[secret_hash]`", + "Accounts_RequireNameForSignUp": "ā¤¸ā¤žā¤‡ā¤¨ā¤…ā¤Ē ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¨ā¤žā¤Ž ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Accounts_RequirePasswordConfirmation": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋā¤•ā¤°ā¤Ŗ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Accounts_RoomAvatarExternalProviderUrl": "ā¤•ā¤•āĨā¤ˇ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "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": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€, ā¤“ā¤ā¤Ĩ ā¤†ā¤Ļā¤ŋ ā¤œāĨˆā¤¸āĨ€ ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤¸āĨ‡ ā¤Ŧā¤¨ā¤žā¤ ā¤—ā¤ ā¤–ā¤žā¤¤āĨ‹ā¤‚ ā¤•āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤šāĨ‹ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡", + "Accounts_SetDefaultAvatar": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_SetDefaultAvatar_Description": "OAuth ā¤–ā¤žā¤¤āĨ‡ ā¤¯ā¤ž Gravatar ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "Accounts_ShowFormLogin": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĢāĨ‰ā¤°āĨā¤Ž ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Accounts_TwoFactorAuthentication_By_TOTP_Enabled": "ā¤ŸāĨ€ā¤“ā¤ŸāĨ€ā¤ĒāĨ€ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĻāĨ‹ ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_TwoFactorAuthentication_By_TOTP_Enabled_Description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž Google Authenticator ā¤¯ā¤ž Authy ā¤œāĨˆā¤¸āĨ‡ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ TOTP ā¤ā¤Ē ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤…ā¤Ēā¤¨ā¤ž ā¤ŸāĨ‚ ā¤ĢāĨˆā¤•āĨā¤Ÿā¤° ā¤‘ā¤ĨāĨ‡ā¤‚ā¤Ÿā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "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": "ā¤ĻāĨ‹ ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_TwoFactorAuthentication_Enabled_Description": "ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, ā¤¯ā¤š ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤¸ā¤­āĨ€ ā¤ĻāĨ‹ ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‹ ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤° ā¤ĻāĨ‡ā¤—āĨ€āĨ¤\nā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‹ ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ŧā¤žā¤§āĨā¤¯ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤•āĨ‹ ā¤‡ā¤¸āĨ‡ ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ 'ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž' ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤•āĨ‹ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ģā¤ŧāĨ‰ā¤˛ā¤ŦāĨˆā¤• ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_TwoFactorAuthentication_Enforce_Password_Fallback_Description": "ā¤¯ā¤Ļā¤ŋ ā¤‰ā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‹ā¤ˆ ā¤…ā¤¨āĨā¤¯ ā¤ĻāĨ‹ ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĩā¤ŋā¤§ā¤ŋ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ ā¤”ā¤° ā¤‰ā¤¸ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤Žā¤šā¤¤āĨā¤ĩā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤•ā¤žā¤°āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ļā¤°āĨā¤œ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Žā¤œā¤ŦāĨ‚ā¤° ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", "Accounts_TwoFactorAuthentication_MaxDelta": "soochna", + "Accounts_TwoFactorAuthentication_MaxDelta_Description": "ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤ĄāĨ‡ā¤˛āĨā¤Ÿā¤ž ā¤¯ā¤š ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤¸ā¤Žā¤¯ ā¤•ā¤ŋā¤¤ā¤¨āĨ‡ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤ĩāĨˆā¤§ ā¤šāĨˆā¤‚āĨ¤ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤šā¤° 30 ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤šāĨ‹ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤”ā¤° (30 * ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤ĄāĨ‡ā¤˛āĨā¤Ÿā¤ž) ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩāĨˆā¤§ ā¤šāĨ‹ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤\nā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤ĄāĨ‡ā¤˛āĨā¤Ÿā¤ž 10 ā¤Ēā¤° ā¤¸āĨ‡ā¤Ÿ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤‰ā¤¸ā¤•āĨ‡ ā¤Ÿā¤žā¤‡ā¤Žā¤¸āĨā¤ŸāĨˆā¤ŽāĨā¤Ē ā¤¸āĨ‡ 300 ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤Ēā¤šā¤˛āĨ‡ ā¤¯ā¤ž ā¤Ŧā¤žā¤Ļ ā¤¤ā¤• ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤¯ā¤š ā¤¤ā¤Ŧ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—āĨ€ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ ā¤œā¤Ŧ ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ ā¤•āĨ€ ā¤˜ā¤Ąā¤ŧāĨ€ ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ āĨ€ā¤• ā¤¸āĨ‡ ā¤¸ā¤Žā¤¨āĨā¤ĩā¤¯ā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "Accounts_TwoFactorAuthentication_RememberFor": "(ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą) ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĻāĨ‹ ā¤•ā¤žā¤°ā¤• ā¤¯ā¤žā¤Ļ ā¤°ā¤–āĨ‡ā¤‚", + "Accounts_TwoFactorAuthentication_RememberFor_Description": "ā¤¯ā¤Ļā¤ŋ ā¤ĻāĨ‹ ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤žā¤§ā¤ŋā¤•ā¤°ā¤Ŗ ā¤•āĨ‹ā¤Ą ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤Žā¤¯ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨ‹ ā¤¤āĨ‹ ā¤‰ā¤¸ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¨ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Accounts_UseDefaultBlockedDomainsList": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤¸āĨ‚ā¤šāĨ€ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_UseDNSDomainCheck": "DNS ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤œā¤žā¤ā¤š ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "API_EmbedDisabledFor": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤‚ā¤ŦāĨ‡ā¤Ą ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Accounts_UserAddedEmail_Default": "

    [ā¤¸ā¤žā¤‡ā¤Ÿ_ā¤¨ā¤žā¤Ž] ā¤ŽāĨ‡ā¤‚ ā¤†ā¤Ēā¤•ā¤ž ā¤¸āĨā¤ĩā¤žā¤—ā¤¤ ā¤šāĨˆ

    [Site_URL] ā¤Ēā¤° ā¤œā¤žā¤ā¤ ā¤”ā¤° ā¤†ā¤œ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¸ā¤°āĨā¤ĩāĨ‹ā¤¤āĨā¤¤ā¤Ž ā¤“ā¤Ēā¤¨ ā¤¸āĨ‹ā¤°āĨā¤¸ ā¤šāĨˆā¤Ÿ ā¤¸ā¤Žā¤žā¤§ā¤žā¤¨ ā¤†ā¤œā¤ŧā¤Žā¤žā¤ā¤!

    ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛: [ā¤ˆā¤ŽāĨ‡ā¤˛] ā¤”ā¤° ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą: [ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą] ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤‡ā¤¸āĨ‡ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "Accounts_UserAddedEmail_Description": "ā¤†ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚:\n - `[ā¤¨ā¤žā¤Ž]`, `[fname]`, `[lname]` ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤¨ā¤žā¤Ž, ā¤ĒāĨā¤°ā¤Ĩā¤Ž ā¤¨ā¤žā¤Ž ā¤¯ā¤ž ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¨ā¤žā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤\n - `[ā¤ˆā¤ŽāĨ‡ā¤˛]` ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤\n - ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `[ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą]`āĨ¤\n - ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ `[Site_Name]` ā¤”ā¤° `[Site_URL]`āĨ¤", + "API_EmbedDisabledFor_Description": "ā¤ā¤ŽāĨā¤ŦāĨ‡ā¤ĄāĨ‡ā¤Ą ā¤˛ā¤ŋā¤‚ā¤• ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤ŽāĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€āĨ¤", + "Accounts_UserAddedEmailSubject_Default": "ā¤†ā¤Ēā¤•āĨ‹ [Site_Name] ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Accounts_Verify_Email_For_External_Accounts": "ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤–ā¤žā¤¤āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Action": "ā¤•ā¤žā¤°āĨā¤°ā¤ĩā¤žā¤ˆ", + "Action_required": "ā¤•ā¤žā¤°āĨā¤°ā¤ĩā¤žā¤ˆ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ", + "Action_Available_After_Custom_Content_Added": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ ā¤œā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤¯ā¤š ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—āĨ€", + "Action_Available_After_Custom_Content_Added_And_Visible": "ā¤¯ā¤š ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ ā¤œā¤žā¤¨āĨ‡ ā¤”ā¤° ā¤¸ā¤­āĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĻāĨƒā¤ļāĨā¤¯ā¤Žā¤žā¤¨ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—āĨ€", + "Activate": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯", + "Active": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯", + "Active_users": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Activity": "ā¤—ā¤¤ā¤ŋā¤ĩā¤ŋā¤§ā¤ŋ", + "Add": "ā¤œāĨ‹ā¤Ąā¤ŧā¤¨ā¤ž", + "Add_a_Message": "ā¤•āĨ‹ā¤ˆ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_agent": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_custom_oauth": "ā¤•ā¤¸āĨā¤Ÿā¤Ž OAuth ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_Domain": "ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_emoji": "ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_files_from": "ā¤¸āĨ‡ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_manager": "ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤• ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_monitor": "ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤° ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_Reaction": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_Role": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_Sender_To_ReplyTo": "ā¤ĒāĨā¤°āĨ‡ā¤ˇā¤• ā¤•āĨ‹ ā¤‰ā¤¤āĨā¤¤ā¤°-ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_Server": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡", + "Add_URL": "ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_User": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_users": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Add_members": "ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "add-all-to-room": "ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ā¤• ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "add-all-to-room_description": "ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ā¤• ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "add-livechat-department-agents": "ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "add-livechat-department-agents_description": "ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚ ā¤•āĨ‹ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "add-oauth-service": "OAuth ā¤¸āĨ‡ā¤ĩā¤ž ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "add-oauth-service_description": "ā¤¨ā¤ˆ OAuth ā¤¸āĨ‡ā¤ĩā¤ž ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "bypass-time-limit-edit-and-delete": "ā¤¸ā¤Žā¤¯ ā¤¸āĨ€ā¤Žā¤ž ā¤•āĨ‹ ā¤Ŧā¤žā¤¯ā¤Ēā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "bypass-time-limit-edit-and-delete_description": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤”ā¤° ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤Žā¤¯ ā¤¸āĨ€ā¤Žā¤ž ā¤•āĨ‹ ā¤Ŧā¤žā¤¯ā¤Ēā¤žā¤¸ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "add-team-channel": "ā¤ŸāĨ€ā¤Ž ā¤šāĨˆā¤¨ā¤˛ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "add-team-channel_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆā¤¨ā¤˛ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "add-team-member": "ā¤ŸāĨ€ā¤Ž ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "add-team-member_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "add-user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "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": "ā¤•ā¤ŋā¤¸āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "added__roomName__to_team": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ #{{roomName}} ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž", + "Added__username__to_team": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ @{{user_added}} ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž", + "added__roomName__to_this_team": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ #{{roomName}} ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž", + "Apps_Framework_enabled": "ā¤ā¤Ē ā¤Ģā¤ŧāĨā¤°āĨ‡ā¤Žā¤ĩā¤°āĨā¤• ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Added__username__to_this_team": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ @{{user_added}} ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž", + "Adding_OAuth_Services": "OAuth ā¤¸āĨ‡ā¤ĩā¤žā¤ā¤ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨ā¤ž", + "Adding_permission": "ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤œāĨ‹ā¤Ąā¤ŧāĨ€ ā¤œā¤ž ā¤°ā¤šāĨ€ ā¤šāĨˆ", + "Adjustable_layout": "ā¤¸ā¤Žā¤žā¤¯āĨ‹ā¤œāĨā¤¯ ā¤˛āĨ‡ā¤†ā¤‰ā¤Ÿ", + "Adding_user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Additional_emails": "ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤ˆā¤ŽāĨ‡ā¤˛", "Additional_Feedback": "ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž", + "additional_integrations_Bots": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤¯ā¤š ā¤–āĨ‹ā¤œ ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚ ā¤•ā¤ŋ ā¤…ā¤Ēā¤¨āĨ‡ ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•āĨ‡ ā¤ŦāĨ‰ā¤Ÿ ā¤•āĨ‹ ā¤•āĨˆā¤¸āĨ‡ ā¤ā¤•āĨ€ā¤•āĨƒā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤, ā¤¤āĨ‹ ā¤šā¤Žā¤žā¤°āĨ‡ ā¤šā¤ŦāĨ‹ā¤Ÿ ā¤ā¤ĄāĨ‰ā¤ĒāĨā¤Ÿā¤° ā¤•āĨ‡ ā¤…ā¤˛ā¤žā¤ĩā¤ž ā¤•ā¤šāĨ€ā¤‚ ā¤”ā¤° ā¤¨ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚āĨ¤ https://github.com/RocketChat/hubot-rocketchat", + "Admin_disabled_encryption": "ā¤†ā¤Ēā¤•āĨ‡ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¨āĨ‡ E2E ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ.", + "Admin_Info": "ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "admin-no-active-video-conf-provider": "**ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ**: ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤Ēā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤•ā¤°ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "admin-video-conf-provider-not-configured": "**ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ**: ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤Ēā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤•ā¤°ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "admin-no-videoconf-provider-app": "**ā¤•āĨ‰ā¤¨āĨā¤ĢāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚**: ā¤•āĨ‰ā¤¨āĨā¤ĢāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤ā¤ĒāĨā¤¸ ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆā¤‚āĨ¤", + "Administration": "ā¤ĒāĨā¤°ā¤ļā¤žā¤¸ā¤¨", + "Address": "ā¤Ēā¤¤ā¤ž", + "Adjustable_font_size": "ā¤¸ā¤Žā¤žā¤¯āĨ‹ā¤œāĨā¤¯ ā¤Ģā¤ŧāĨ‰ā¤¨āĨā¤Ÿ ā¤†ā¤•ā¤žā¤°", + "Adjustable_font_size_description": "ā¤‰ā¤¨ ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤œā¤ŧā¤žā¤‡ā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ ā¤œāĨ‹ ā¤ŦāĨ‡ā¤šā¤¤ā¤° ā¤Ēā¤ ā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ŧā¤Ąā¤ŧāĨ‡ ā¤¯ā¤ž ā¤›āĨ‹ā¤ŸāĨ‡ ā¤Ēā¤žā¤  ā¤•āĨ‹ ā¤Ēā¤¸ā¤‚ā¤Ļ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤¯ā¤š ā¤˛ā¤šāĨ€ā¤˛ā¤žā¤Ēā¤¨ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸āĨ‰ā¤Ģā¤ŧāĨā¤Ÿā¤ĩāĨ‡ā¤¯ā¤° ā¤‡ā¤‚ā¤Ÿā¤°ā¤Ģā¤ŧāĨ‡ā¤¸ ā¤•āĨ‹ ā¤‰ā¤¨ā¤•āĨ€ ā¤ĩā¤ŋā¤ļā¤ŋā¤ˇāĨā¤Ÿ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤…ā¤¨āĨā¤°āĨ‚ā¤Ē ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤ļā¤•āĨā¤¤ ā¤Ŧā¤¨ā¤žā¤•ā¤° ā¤¸ā¤Žā¤žā¤ĩāĨ‡ā¤ļā¤ŋā¤¤ā¤ž ā¤•āĨ‹ ā¤Ŧā¤ĸā¤ŧā¤žā¤ĩā¤ž ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Adult_images_are_not_allowed": "ā¤ĩā¤¯ā¤¸āĨā¤• ā¤›ā¤ĩā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Aerospace_and_Defense": "ā¤ĩā¤ŋā¤Žā¤žā¤¨ā¤¨ ā¤ĩ ā¤°ā¤•āĨā¤ˇā¤ž", + "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "OAuth2 ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ, ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤‡ā¤¸ ā¤¸āĨ‚ā¤šāĨ€ ā¤•āĨ‡ ā¤ā¤• URL ā¤Ēā¤° ā¤ĒāĨā¤¨ā¤ƒ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤†ā¤Ē ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤Ēā¤‚ā¤•āĨā¤¤ā¤ŋ ā¤ā¤• URL ā¤œāĨ‹ā¤Ąā¤ŧ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚.", + "After_guest_registration": "ā¤…ā¤¤ā¤ŋā¤Ĩā¤ŋ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ", + "Agent": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤¨ā¤ŋā¤§ā¤ŋ", + "Agent_added": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž", + "Agent_Info": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Agent_messages": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Agent_Name": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Agent_Name_Placeholder": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚...", + "Agent_removed": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Agent_deactivated": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Agent_Without_Extensions": "ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤•āĨ‡ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ", + "Agents": "ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚", + "Agree": "ā¤¸ā¤šā¤Žā¤¤", + "Alerts": "ā¤…ā¤˛ā¤°āĨā¤Ÿ", + "Alias": "ā¤‰ā¤Ēā¤¨ā¤žā¤Ž", + "Alias_Format": "ā¤…ā¤¨āĨā¤¯ ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē", + "Alias_Format_Description": "ā¤‰ā¤Ēā¤¨ā¤žā¤Ž ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸āĨā¤˛āĨˆā¤• ā¤¸āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚; %s ā¤•āĨ‹ ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤¸āĨ‡ ā¤Ŧā¤Ļā¤˛ ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤–ā¤žā¤˛āĨ€ ā¤šāĨˆ, ā¤¤āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤‰ā¤Ēā¤¨ā¤žā¤Ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Alias_Set": "ā¤‰ā¤Ēā¤¨ā¤žā¤Ž ā¤¸āĨ‡ā¤Ÿ", + "AutoLinker_Email": "ā¤‘ā¤ŸāĨ‹ā¤˛ā¤ŋā¤‚ā¤•ā¤° ā¤ˆā¤ŽāĨ‡ā¤˛", + "Aliases": "ā¤‰ā¤Ēā¤¨ā¤žā¤Ž", + "AutoLinker_Phone": "ā¤‘ā¤ŸāĨ‹ā¤˛ā¤ŋā¤‚ā¤•ā¤° ā¤Ģā¤ŧāĨ‹ā¤¨", + "AutoLinker_Phone_Description": "ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤¨ā¤‚ā¤Ŧā¤°āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤˛ā¤ŋā¤‚ā¤• ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž. ā¤œāĨˆā¤¸āĨ‡ `(123)456-7890`", + "All": "ā¤¸ā¤­āĨ€", + "AutoLinker_StripPrefix": "ā¤‘ā¤ŸāĨ‹ā¤˛ā¤ŋā¤‚ā¤•ā¤° ā¤¸āĨā¤ŸāĨā¤°ā¤ŋā¤Ē ā¤‰ā¤Ēā¤¸ā¤°āĨā¤—", + "All_Apps": "ā¤¸ā¤­āĨ€ ā¤ā¤ĒāĨā¤˛āĨ€ā¤•āĨ‡ā¤ļā¤¨", + "AutoLinker_StripPrefix_Description": "ā¤˛ā¤˜āĨ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤¨. ā¤œāĨˆā¤¸āĨ‡ https://rocket.chat => ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ", + "All_added_tokens_will_be_required_by_the_user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤¸ā¤­āĨ€ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ ā¤—ā¤ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨ‹ā¤—āĨ€", + "All_categories": "ā¤¸ā¤Ŧ ā¤ĩā¤°āĨā¤—", + "AutoLinker_Urls_Scheme": "ā¤‘ā¤ŸāĨ‹ā¤˛ā¤ŋā¤‚ā¤•ā¤° ā¤¯āĨ‹ā¤œā¤¨ā¤ž: // ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "All_channels": "ā¤¸ā¤­āĨ€ ā¤šāĨˆā¤¨ā¤˛", + "AutoLinker_Urls_TLD": "ā¤‘ā¤ŸāĨ‹ā¤˛ā¤ŋā¤‚ā¤•ā¤° ā¤ŸāĨ€ā¤ā¤˛ā¤ĄāĨ€ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "All_closed_chats_have_been_removed": "ā¤¸ā¤­āĨ€ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨˆā¤Ÿ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤šāĨˆā¤‚", + "AutoLinker_Urls_www": "ā¤‘ā¤ŸāĨ‹ā¤˛ā¤ŋā¤‚ā¤• 'www' ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "All_logs": "ā¤¸ā¤­āĨ€ ā¤˛āĨ‰ā¤—", + "AutoLinker_UrlsRegExp": "ā¤‘ā¤ŸāĨ‹ā¤˛ā¤ŋā¤‚ā¤•ā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¨ā¤ŋā¤¯ā¤Žā¤ŋā¤¤ ā¤…ā¤­ā¤ŋā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋ", + "All_messages": "ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "All_Prices": "ā¤¸ā¤­āĨ€ ā¤•āĨ€ā¤Žā¤¤āĨ‡ā¤‚", + "All_status": "ā¤¸ā¤­āĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "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 ā¤šāĨ‡ā¤Ąā¤° ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¸āĨ‡ ā¤ā¤•ā¤¤āĨā¤° ā¤•āĨ€ ā¤—ā¤ˆ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€, ā¤œāĨˆā¤¸āĨ‡ ā¤†ā¤ˆā¤ĒāĨ€ ā¤Ēā¤¤ā¤ž, ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž-ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ, ā¤†ā¤Ļā¤ŋ ā¤•āĨ‹ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤šāĨˆāĨ¤", + "Allow_Invalid_SelfSigned_Certs": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤¸āĨā¤ĩ-ā¤šā¤¸āĨā¤¤ā¤žā¤•āĨā¤ˇā¤°ā¤ŋā¤¤ ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤Ēā¤¤āĨā¤° ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Allow_Invalid_SelfSigned_Certs_Description": "ā¤˛ā¤ŋā¤‚ā¤• ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨ ā¤”ā¤° ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤”ā¤° ā¤¸āĨā¤ĩ-ā¤šā¤¸āĨā¤¤ā¤žā¤•āĨā¤ˇā¤°ā¤ŋā¤¤ ā¤ā¤¸ā¤ā¤¸ā¤ā¤˛ ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤Ēā¤¤āĨā¤° ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚āĨ¤", + "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": "ā¤ĩā¤°āĨā¤Ŗā¤Žā¤žā¤˛ā¤ž", + "bold": "ā¤ŦāĨ‹ā¤˛āĨā¤Ą", + "Also_send_thread_message_to_channel_behavior": "ā¤šāĨˆā¤¨ā¤˛ ā¤ĩāĨā¤¯ā¤ĩā¤šā¤žā¤° ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĨāĨā¤°āĨ‡ā¤Ą ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ€ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Also_send_to_channel": "ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤­āĨ€ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Always_open_in_new_window": "ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤¨ā¤ˆ ā¤ĩā¤ŋā¤‚ā¤ĄāĨ‹ ā¤ŽāĨ‡ā¤‚ ā¤–āĨ‹ā¤˛āĨ‡ā¤‚", + "Always_show_thread_replies_in_main_channel": "ā¤ĨāĨā¤°āĨ‡ā¤Ą ā¤‰ā¤¤āĨā¤¤ā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤ŽāĨā¤–āĨā¤¯ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Analytic_reports": "ā¤ĩā¤ŋā¤ļāĨā¤˛āĨ‡ā¤ˇā¤Ŗā¤žā¤¤āĨā¤Žā¤• ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ", + "Analytics": "ā¤ā¤¨ā¤žā¤˛ā¤ŋā¤Ÿā¤ŋā¤•āĨā¤¸", + "Analytics_Description": "ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤†ā¤Ēā¤•āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤•āĨˆā¤¸āĨ‡ ā¤‡ā¤‚ā¤Ÿā¤°āĨˆā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Analytics_features_enabled": "ā¤¸āĨā¤ĩā¤ŋā¤§ā¤žā¤ā¤ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Analytics_features_messages_Description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤Ēā¤° ā¤•āĨ€ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤•ā¤žā¤°āĨā¤°ā¤ĩā¤žā¤‡ā¤¯āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ˆā¤ĩāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤ŸāĨā¤°āĨˆā¤• ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Analytics_features_rooms_Description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤¯ā¤ž ā¤¸ā¤ŽāĨ‚ā¤š ā¤Ēā¤° ā¤—ā¤¤ā¤ŋā¤ĩā¤ŋā¤§ā¤ŋā¤¯āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ˆā¤ĩāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤ŸāĨā¤°āĨˆā¤• ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ (ā¤Ŧā¤¨ā¤žā¤ā¤‚, ā¤›āĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚, ā¤šā¤Ÿā¤žā¤ā¤‚)āĨ¤", + "Analytics_features_users_Description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤žā¤°āĨā¤¯āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ˆā¤ĩāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤ŸāĨā¤°āĨˆā¤• ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ (ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤¸ā¤Žā¤¯, ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤šā¤ŋā¤¤āĨā¤° ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨, ā¤†ā¤Ļā¤ŋ)āĨ¤", + "Analytics_Google": "ā¤—āĨ‚ā¤—ā¤˛ ā¤ĩā¤ŋā¤ļāĨā¤˛āĨ‡ā¤ˇā¤ŋā¤•āĨ€", + "Analytics_Google_id": "ā¤ŸāĨā¤°āĨˆā¤•ā¤ŋā¤‚ā¤— ā¤†ā¤ˆā¤ĄāĨ€", + "Analytics_page_briefing_first_paragraph": "Rocket.Chat ā¤¸ā¤­āĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤¤āĨā¤Ēā¤žā¤Ļ ā¤•āĨ‹ ā¤ŦāĨ‡ā¤šā¤¤ā¤° ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤¨ā¤žā¤Ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤ĄāĨ‡ā¤Ÿā¤ž, ā¤œāĨˆā¤¸āĨ‡ ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤”ā¤° ā¤¸ā¤¤āĨā¤° ā¤•āĨ€ ā¤˛ā¤‚ā¤Ŧā¤žā¤ˆ, ā¤ā¤•ā¤¤āĨā¤° ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Analytics_page_briefing_second_paragraph": "ā¤šā¤Ž ā¤•ā¤­āĨ€ ā¤­āĨ€ ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤¯ā¤ž ā¤¸ā¤‚ā¤ĩāĨ‡ā¤Ļā¤¨ā¤ļāĨ€ā¤˛ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ā¤•ā¤¤āĨā¤° ā¤¨ ā¤•ā¤°ā¤•āĨ‡ ā¤†ā¤Ēā¤•āĨ€ ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤•āĨ€ ā¤°ā¤•āĨā¤ˇā¤ž ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤¯ā¤š ā¤…ā¤¨āĨā¤­ā¤žā¤— ā¤Ļā¤ŋā¤–ā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤•āĨā¤¯ā¤ž ā¤ā¤•ā¤¤āĨā¤° ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ, ā¤œāĨ‹ ā¤Ēā¤žā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ā¤ž ā¤”ā¤° ā¤ĩā¤ŋā¤ļāĨā¤ĩā¤žā¤¸ ā¤•āĨ‡ ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤šā¤Žā¤žā¤°āĨ€ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤Ŧā¤ĻāĨā¤§ā¤¤ā¤ž ā¤•āĨ‹ ā¤Žā¤œā¤ŦāĨ‚ā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Analyze_practical_usage": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚, ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤”ā¤° ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĩāĨā¤¯ā¤žā¤ĩā¤šā¤žā¤°ā¤ŋā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ‡ ā¤†ā¤ā¤•ā¤Ąā¤ŧāĨ‹ā¤‚ ā¤•ā¤ž ā¤ĩā¤ŋā¤ļāĨā¤˛āĨ‡ā¤ˇā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "and": "ā¤”ā¤°", + "And_more": "ā¤”ā¤° {{length}} ā¤”ā¤° ā¤­āĨ€", + "Animals_and_Nature": "ā¤Ēā¤ļāĨ ā¤”ā¤° ā¤ĒāĨā¤°ā¤•āĨƒā¤¤ā¤ŋ", + "Announcement": "ā¤˜āĨ‹ā¤ˇā¤Ŗā¤ž", + "Anonymous": "ā¤—āĨā¤Žā¤¨ā¤žā¤Ž", + "Answer_call": "ā¤•āĨ‰ā¤˛ ā¤•ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĻāĨ‡ā¤‚", + "API": "ā¤ā¤ĒāĨ€ā¤†ā¤ˆ", + "API_Add_Personal_Access_Token": "ā¤¨ā¤¯ā¤ž ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "API_Allow_Infinite_Count": "ā¤¸ā¤Ŧ ā¤•āĨā¤› ā¤Ēā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "API_Allow_Infinite_Count_Description": "ā¤•āĨā¤¯ā¤ž REST API ā¤Ēā¤° ā¤•āĨ‰ā¤˛ ā¤•āĨ‹ ā¤ā¤• ā¤•āĨ‰ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤Ŧ ā¤•āĨā¤› ā¤ĩā¤žā¤Ēā¤¸ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ€ ā¤œā¤žā¤¨āĨ€ ā¤šā¤žā¤šā¤ŋā¤?", + "API_Analytics": "ā¤ā¤¨ā¤žā¤˛ā¤ŋā¤Ÿā¤ŋā¤•āĨā¤¸", + "API_CORS_Origin": "ā¤•āĨ‰ā¤°āĨā¤¸ ā¤‰ā¤¤āĨā¤Ēā¤¤āĨā¤¤ā¤ŋ", + "API_Apply_permission_view-outside-room_on_users-list": "ā¤ā¤ĒāĨ€ā¤†ā¤ˆ `users.list` ā¤Ēā¤° `view-outside-room` ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤°āĨ‡ā¤‚", + "API_Apply_permission_view-outside-room_on_users-list_Description": "ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—. ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤•āĨ‹ ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ā¤°āĨā¤—ā¤¤ ā¤…ā¤—ā¤˛āĨ€ ā¤ĒāĨā¤°ā¤ŽāĨā¤– ā¤°ā¤ŋā¤˛āĨ€ā¤œā¤ŧ ā¤Ēā¤° ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž", + "API_Default_Count": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ count", + "API_Default_Count_Description": "ā¤¯ā¤Ļā¤ŋ ā¤‰ā¤Ēā¤­āĨ‹ā¤•āĨā¤¤ā¤ž ā¤¨āĨ‡ ā¤•āĨ‹ā¤ˆ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ REST API ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤ŽāĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤—ā¤Ŗā¤¨ā¤žāĨ¤", + "API_Drupal_URL": "ā¤ĄāĨā¤°āĨ‚ā¤Ēā¤˛ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "API_Drupal_URL_Description": "ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: `https://domain.com` (ā¤…ā¤¨āĨā¤—ā¤žā¤ŽāĨ€ ā¤¸āĨā¤˛āĨˆā¤ļ ā¤•āĨ‹ ā¤›āĨ‹ā¤Ąā¤ŧā¤•ā¤°)", + "API_Embed": "ā¤˛ā¤ŋā¤‚ā¤• ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤ā¤ŽāĨā¤ŦāĨ‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "API_Embed_Description": "ā¤œā¤Ŧ ā¤•āĨ‹ā¤ˆ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ŋā¤¸āĨ€ ā¤ĩāĨ‡ā¤Ŧā¤¸ā¤žā¤‡ā¤Ÿ ā¤Ēā¤° ā¤˛ā¤ŋā¤‚ā¤• ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤ā¤ŽāĨā¤ŦāĨ‡ā¤ĄāĨ‡ā¤Ą ā¤˛ā¤ŋā¤‚ā¤• ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚āĨ¤", + "API_EmbedIgnoredHosts": "ā¤‰ā¤ĒāĨ‡ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤šāĨ‹ā¤¸āĨā¤Ÿ ā¤ā¤ŽāĨā¤ŦāĨ‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "API_EmbedIgnoredHosts_Description": "ā¤šāĨ‹ā¤¸āĨā¤Ÿ ā¤¯ā¤ž ā¤¸āĨ€ā¤†ā¤ˆā¤ĄāĨ€ā¤†ā¤° ā¤Ēā¤¤āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€, ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤ ā¤˛āĨ‹ā¤•ā¤˛ā¤šāĨ‹ā¤¸āĨā¤Ÿ, 127.0.0.1, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16", + "API_EmbedSafePorts": "ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤Ŧā¤‚ā¤Ļā¤°ā¤—ā¤žā¤š", + "API_EmbedSafePorts_Description": "ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤Ŧā¤‚ā¤Ļā¤°ā¤—ā¤žā¤šāĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€āĨ¤", + "API_Embed_UserAgent": "ā¤ā¤‚ā¤ŦāĨ‡ā¤Ą ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ", + "API_EmbedCacheExpirationDays": "ā¤ā¤‚ā¤ŦāĨ‡ā¤Ą ā¤•āĨˆā¤ļ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ā¤ŋ ā¤Ļā¤ŋā¤ĩā¤¸", + "API_Enable_CORS": "CORS ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "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": "ā¤Ļā¤° ā¤¸āĨ€ā¤Žā¤• ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "API_Enable_Rate_Limiter_Dev": "ā¤ĩā¤ŋā¤•ā¤žā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤° ā¤¸āĨ€ā¤Žā¤• ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "API_Enable_Rate_Limiter_Dev_Description": "ā¤•āĨā¤¯ā¤ž ā¤ĩā¤ŋā¤•ā¤žā¤¸ ā¤Ēā¤°ā¤ŋā¤ĩāĨ‡ā¤ļ ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‰ā¤˛ ā¤•āĨ€ ā¤Žā¤žā¤¤āĨā¤°ā¤ž ā¤•āĨ‹ ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤Ŧā¤ŋā¤‚ā¤ĻāĨā¤“ā¤‚ ā¤¤ā¤• ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤?", + "API_Enable_Rate_Limiter_Limit_Calls_Default": "ā¤°āĨ‡ā¤Ÿ ā¤˛ā¤ŋā¤Žā¤ŋā¤Ÿā¤° ā¤Ēā¤° ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤¨ā¤‚ā¤Ŧā¤° ā¤•āĨ‰ā¤˛", + "API_Enable_Rate_Limiter_Limit_Calls_Default_Description": "REST API ā¤•āĨ‡ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤¸ā¤Žā¤žā¤Ēā¤¨ ā¤Ŧā¤ŋā¤‚ā¤ĻāĨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤•āĨ‰ā¤˛ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž, ā¤¨āĨ€ā¤šāĨ‡ ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤¸ā¤Žā¤¯ ā¤¸āĨ€ā¤Žā¤ž ā¤•āĨ‡ ā¤­āĨ€ā¤¤ā¤° ā¤…ā¤¨āĨā¤Žā¤¤ ā¤šāĨˆ", + "API_Enable_Rate_Limiter_Limit_Time_Default": "ā¤Ļā¤° ā¤¸āĨ€ā¤Žā¤• ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤¸ā¤Žā¤¯ ā¤¸āĨ€ā¤Žā¤ž (ā¤ā¤Žā¤ā¤¸ ā¤ŽāĨ‡ā¤‚)", + "API_Enable_Rate_Limiter_Limit_Time_Default_Description": "REST API ā¤•āĨ‡ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤¸ā¤Žā¤žā¤Ēā¤¨ ā¤Ŧā¤ŋā¤‚ā¤ĻāĨ ā¤Ēā¤° ā¤•āĨ‰ā¤˛ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤Ÿā¤žā¤‡ā¤Žā¤†ā¤‰ā¤Ÿ (ā¤ā¤Žā¤ā¤¸ ā¤ŽāĨ‡ā¤‚)", + "API_Enable_Shields": "ā¤ļāĨ€ā¤˛āĨā¤ĄāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "API_Enable_Shields_Description": "`/api/v1/shield.svg` ā¤Ēā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤ļāĨ€ā¤˛āĨā¤Ą ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "API_GitHub_Enterprise_URL": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "API_GitHub_Enterprise_URL_Description": "ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: `https://domain.com` (ā¤…ā¤¨āĨā¤—ā¤žā¤ŽāĨ€ ā¤¸āĨā¤˛āĨˆā¤ļ ā¤•āĨ‹ ā¤›āĨ‹ā¤Ąā¤ŧā¤•ā¤°)", + "API_Gitlab_URL": "ā¤—ā¤ŋā¤Ÿā¤˛āĨˆā¤Ŧ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "API_Personal_Access_Token_Generated": "ā¤Ēā¤°āĨā¤¸ā¤¨ā¤˛ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤œā¤¨ā¤°āĨ‡ā¤Ÿ ā¤šāĨā¤†", + "API_Personal_Access_Token_Generated_Text_Token_s_UserId_s": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨ā¤ž ā¤ŸāĨ‹ā¤•ā¤¨ ā¤¸ā¤žā¤ĩā¤§ā¤žā¤¨āĨ€ ā¤¸āĨ‡ ā¤¸ā¤šāĨ‡ā¤œāĨ‡ā¤‚ ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤‡ā¤¸ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤†ā¤Ē ā¤‡ā¤¸āĨ‡ ā¤¨ā¤šāĨ€ā¤‚ ā¤ĻāĨ‡ā¤– ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤
    ā¤ŸāĨ‹ā¤•ā¤¨: {{token}}
    ā¤†ā¤Ēā¤•āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤†ā¤ˆā¤ĄāĨ€: {{userId}}", + "API_Personal_Access_Token_Name": "ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤Ēā¤šāĨā¤ā¤š ā¤ŸāĨ‹ā¤•ā¤¨ ā¤¨ā¤žā¤Ž", + "API_Personal_Access_Tokens_Regenerate_It": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤ĒāĨā¤¨: ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "API_Personal_Access_Tokens_Regenerate_Modal": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤¨āĨ‡ ā¤…ā¤Ēā¤¨ā¤ž ā¤ŸāĨ‹ā¤•ā¤¨ ā¤–āĨ‹ ā¤Ļā¤ŋā¤¯ā¤ž ā¤šāĨˆ ā¤¯ā¤ž ā¤­āĨ‚ā¤˛ ā¤—ā¤ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤†ā¤Ē ā¤‡ā¤¸āĨ‡ ā¤ĒāĨā¤¨: ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤¯ā¤žā¤Ļ ā¤°ā¤–āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤‡ā¤¸ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤¸ā¤­āĨ€ ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤•āĨ‹ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤", + "API_Personal_Access_Tokens_Remove_Modal": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤‡ā¤¸ ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "API_Personal_Access_Tokens_To_REST_API": "REST API ā¤¤ā¤• ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤Ēā¤šāĨā¤‚ā¤š ā¤ŸāĨ‹ā¤•ā¤¨", + "API_Rate_Limiter": "ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤Ļā¤° ā¤¸āĨ€ā¤Žā¤•", + "API_Shield_Types": "ā¤ĸā¤žā¤˛ ā¤•āĨ‡ ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "API_Shield_Types_Description": "ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ļāĨ€ā¤˛āĨā¤Ą ā¤•āĨ‡ ā¤ĒāĨā¤°ā¤•ā¤žā¤°, ā¤¸ā¤­āĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨`, `ā¤šāĨˆā¤¨ā¤˛` ā¤¯ā¤ž `*` ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ ā¤šāĨā¤¨āĨ‡ā¤‚", + "Apps_Framework_Development_Mode": "ā¤ĩā¤ŋā¤•ā¤žā¤¸ ā¤ŽāĨ‹ā¤Ą ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "API_Shield_user_require_auth": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ļāĨ€ā¤˛āĨā¤Ą ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "API_Token": "ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤ŸāĨ‹ā¤•ā¤¨", + "Apps_Framework_Development_Mode_Description": "ā¤ĄāĨ‡ā¤ĩā¤˛ā¤Ēā¤ŽāĨ‡ā¤‚ā¤Ÿ ā¤ŽāĨ‹ā¤Ą ā¤‰ā¤¨ ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‹ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆ ā¤œāĨ‹ Rocket.Chat ā¤•āĨ‡ ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤¸āĨ‡ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚āĨ¤", + "API_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": "ā¤‰ā¤˛āĨā¤•ā¤ž ā¤•āĨ‰ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩāĨ‡ā¤Ŧā¤¸āĨ‹ā¤•āĨ‡ā¤Ÿ ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ REST ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "API_User_Limit": "ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨ€ā¤Žā¤ž", + "API_Wordpress_URL": "ā¤ĩā¤°āĨā¤Ąā¤ĒāĨā¤°āĨ‡ā¤¸ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "api-bypass-rate-limit": "REST API ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ŧā¤žā¤ˆā¤Ēā¤žā¤¸ ā¤Ļā¤° ā¤¸āĨ€ā¤Žā¤ž", + "api-bypass-rate-limit_description": "ā¤Ļā¤° ā¤¸āĨ€ā¤Žā¤ž ā¤•āĨ‡ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤•āĨ‰ā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Apiai_Key": "ā¤ā¤ĒāĨ€ā¤†ā¤ˆ.ā¤ā¤†ā¤ˆ ā¤•āĨā¤‚ā¤œāĨ€", + "Apiai_Language": "ā¤ā¤ĒāĨ€ā¤†ā¤ˆ.ā¤ā¤†ā¤ˆ ā¤­ā¤žā¤ˇā¤ž", + "APIs": "ā¤ļā¤šā¤Ļ ā¤•āĨ€ ā¤Žā¤•āĨā¤–āĨ€", + "App_author_homepage": "ā¤˛āĨ‡ā¤–ā¤• ā¤ŽāĨā¤–ā¤ĒāĨƒā¤ˇāĨā¤ ", + "App_Details": "ā¤ā¤Ē ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ", + "App_Info": "ā¤…ā¤¨āĨā¤ĒāĨā¤°ā¤¯āĨ‹ā¤— ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "App_Information": "ā¤ā¤Ē ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "App_Installation": "ā¤ā¤Ē ā¤‡ā¤‚ā¤¸āĨā¤Ÿā¤žā¤˛āĨ‡ā¤ļā¤¨", + "App_not_enabled": "ā¤ā¤Ē ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "App_not_found": "ā¤ā¤Ē ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", "App_status_auto_enabled": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯", + "App_status_constructed": "ā¤¨ā¤ŋā¤°āĨā¤Žā¤žā¤Ŗ", "App_status_disabled": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "App_status_error_disabled": "ā¤…ā¤•āĨā¤ˇā¤Ž: ā¤§āĨā¤¯ā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤¨ ā¤†ā¤ˆ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "App_status_initialized": "ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­", + "App_status_invalid_license_disabled": "ā¤ĩā¤ŋā¤•ā¤˛ā¤žā¤‚ā¤—: ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸", + "App_status_invalid_settings_disabled": "ā¤…ā¤•āĨā¤ˇā¤Ž: ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "App_status_manually_disabled": "ā¤…ā¤•āĨā¤ˇā¤Ž: ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡", "App_status_manually_enabled": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯", + "App_status_unknown": "ā¤…ā¤œāĨā¤žā¤žā¤¤", + "App_Store": "ā¤ā¤Ē ā¤¸āĨā¤ŸāĨ‹ā¤°", + "App_support_url": "ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•ā¤ž ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "App_Url_to_Install_From": "ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¸āĨ‡ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚", + "App_Url_to_Install_From_File": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸āĨ‡ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚", + "App_user_not_allowed_to_login": "ā¤ā¤Ē ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸āĨ€ā¤§āĨ‡ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤", "Appearance": "ā¤Ļā¤ŋā¤–ā¤žā¤ĩā¤Ÿ", + "Application_added": "ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž", + "Application_delete_warning": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤•āĨ‹ ā¤ĒāĨā¤¨ā¤°āĨā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡!", + "Application_Name": "ā¤†ā¤ĩāĨ‡ā¤Ļā¤¨ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Application_updated": "ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Apply": "ā¤†ā¤ĩāĨ‡ā¤Ļā¤¨ ā¤•ā¤°ā¤¨ā¤ž", + "Apply_and_refresh_all_clients": "ā¤¸ā¤­āĨ€ ā¤—āĨā¤°ā¤žā¤šā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤¤ā¤žā¤œā¤ŧā¤ž ā¤•ā¤°āĨ‡ā¤‚", + "Apps": "ā¤ā¤ĒāĨā¤¸", + "Apps_context_explore": "ā¤…ā¤¨āĨā¤ĩāĨ‡ā¤ˇā¤Ŗ ā¤•ā¤°ā¤¨ā¤ž", + "Apps_context_installed": "ā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤", + "Apps_context_requested": "ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž", + "Apps_context_private": "ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸", + "Apps_context_premium": "ā¤…ā¤§ā¤ŋā¤ŽāĨ‚ā¤˛āĨā¤¯", + "Apps_Count_Enabled": "{{count}} ā¤ā¤Ē ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Private_Apps_Count_Enabled": "{{count}} ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤Ē ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Apps_Count_Enabled_tooltip": "ā¤¸ā¤žā¤ŽāĨā¤Ļā¤žā¤¯ā¤ŋā¤• ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž {{number}} {{context}} ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Apps_disabled_when_Premium_trial_ended": "ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤ā¤ĒāĨā¤¸ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ ā¤—ā¤", + "Apps_disabled_when_Premium_trial_ended_description": "ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ ā¤Ēā¤° ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž 5 ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤ā¤ĒāĨā¤¸ ā¤”ā¤° 3 ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¸āĨ‡ ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‹ ā¤ĒāĨā¤¨ā¤ƒ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤šāĨ‡ā¤‚āĨ¤", + "Apps_disabled_when_Premium_trial_ended_description_admin": "ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ ā¤Ēā¤° ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž 5 ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤ā¤ĒāĨā¤¸ ā¤”ā¤° 3 ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤†ā¤Ēā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‹ ā¤ĒāĨā¤¨ā¤ƒ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚.", + "Apps_Engine_Version": "ā¤ā¤ĒāĨā¤¸ ā¤‡ā¤‚ā¤œā¤¨ ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ", + "Apps_Error_private_app_install_disabled": "ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤Ē ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛āĨ‡ā¤ļā¤¨ ā¤”ā¤° ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆā¤‚", + "Apps_Essential_Alert": "ā¤¯ā¤š ā¤ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤˜ā¤Ÿā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ:", + "Apps_Essential_Disclaimer": "ā¤¯ā¤Ļā¤ŋ ā¤¯ā¤š ā¤ā¤Ē ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤Šā¤Ēā¤° ā¤¸āĨ‚ā¤šāĨ€ā¤Ŧā¤ĻāĨā¤§ ā¤ˆā¤ĩāĨ‡ā¤‚ā¤Ÿ ā¤Ŧā¤žā¤§ā¤ŋā¤¤ ā¤šāĨ‹ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤•ā¤ŋ Rocket.Chat ā¤‡ā¤¸ ā¤ā¤Ē ā¤•āĨ€ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇā¤Žā¤¤ā¤ž ā¤•āĨ‡ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤•ā¤žā¤Ž ā¤•ā¤°āĨ‡, ā¤¤āĨ‹ ā¤†ā¤Ēā¤•āĨ‹ ā¤‡ā¤¸āĨ‡ ā¤…ā¤¨ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž", + "Apps_Framework_Source_Package_Storage_Type": "ā¤ā¤ĒāĨā¤¸ ā¤•ā¤ž ā¤¸āĨā¤°āĨ‹ā¤¤ ā¤ĒāĨˆā¤•āĨ‡ā¤œ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šā¤Ŗ ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "Apps_Framework_Source_Package_Storage_Type_Description": "ā¤šāĨā¤¨āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤¸ā¤­āĨ€ ā¤ā¤ĒāĨā¤¸ ā¤•ā¤ž ā¤¸āĨā¤°āĨ‹ā¤¤ ā¤•āĨ‹ā¤Ą ā¤•ā¤šā¤žā¤ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤ā¤Ē ā¤•ā¤ž ā¤†ā¤•ā¤žā¤° ā¤•ā¤ˆ ā¤ŽāĨ‡ā¤—ā¤žā¤Ŧā¤žā¤‡ā¤Ÿ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Apps_Framework_Source_Package_Storage_Type_Alert": "ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‹ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤ĩā¤šā¤žā¤‚ ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤ā¤ĒāĨā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¸āĨā¤Ĩā¤ŋā¤°ā¤¤ā¤ž ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆ", + "Apps_Framework_Source_Package_Storage_FileSystem_Path": "ā¤ā¤ĒāĨā¤¸ ā¤¸āĨā¤°āĨ‹ā¤¤ ā¤ĒāĨˆā¤•āĨ‡ā¤œ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤•ā¤ž", + "Apps_Framework_Source_Package_Storage_FileSystem_Path_Description": "ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‡ ā¤¸āĨā¤°āĨ‹ā¤¤ ā¤•āĨ‹ā¤Ą ā¤•āĨ‹ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤Ēā¤Ĩ (ā¤œā¤ŧā¤ŋā¤Ē ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚)", + "Apps_Framework_Source_Package_Storage_FileSystem_Alert": "ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤šāĨā¤¨āĨ€ ā¤—ā¤ˆ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤•ā¤ž ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ ā¤”ā¤° Rocket.Chat ā¤‰ā¤¸ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ (ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡/ā¤˛ā¤ŋā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ)", + "Apps_Game_Center": "ā¤–āĨ‡ā¤˛ ā¤•āĨ‡ā¤‚ā¤ĻāĨā¤°", + "Apps_Game_Center_Back": "ā¤—āĨ‡ā¤Ž ā¤¸āĨ‡ā¤‚ā¤Ÿā¤° ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤", + "Apps_Game_Center_Invite_Friends": "ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨āĨ‡ ā¤ĻāĨ‹ā¤¸āĨā¤¤āĨ‹ā¤‚ ā¤•āĨ‹ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•āĨ€ā¤œā¤ŋā¤", + "Apps_Game_Center_Play_Game_Together": "@ā¤¯ā¤šā¤žā¤ ā¤†ā¤‡ā¤ ā¤ā¤• ā¤¸ā¤žā¤Ĩ {{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_License_Message_appId": "ā¤‡ā¤¸ ā¤ā¤Ē ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤œā¤žā¤°āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Apps_License_Message_bundle": "ā¤ā¤¸āĨ‡ ā¤Ŧā¤‚ā¤Ąā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤œā¤žā¤°āĨ€ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤ā¤Ē ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Apps_License_Message_expire": "ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤…ā¤Ŧ ā¤ĩāĨˆā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ ā¤”ā¤° ā¤‡ā¤¸āĨ‡ ā¤¨ā¤ĩāĨ€ā¤¨āĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Apps_License_Message_maxSeats": "ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤•āĨ‹ ā¤¸ā¤Žā¤žā¤¯āĨ‹ā¤œā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¸āĨ€ā¤ŸāĨ‹ā¤‚ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤Ŧā¤ĸā¤ŧā¤žā¤ā¤", + "Apps_License_Message_publicKey": "ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤•āĨ‹ ā¤Ąā¤ŋā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤ā¤• ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤šāĨā¤ˆ ā¤šāĨˆāĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿā¤ŋā¤ĩā¤ŋā¤ŸāĨ€ ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "Apps_License_Message_renewal": "ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤¨ā¤ĩāĨ€ā¤¨āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Apps_License_Message_seats": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤•āĨ‹ ā¤¸ā¤Žā¤žā¤¯āĨ‹ā¤œā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°āĨā¤¯ā¤žā¤ĒāĨā¤¤ ā¤¸āĨ€ā¤ŸāĨ‡ā¤‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚āĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¸āĨ€ā¤ŸāĨ‹ā¤‚ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤Ŧā¤ĸā¤ŧā¤žā¤ā¤", + "Apps_Logs_TTL": "ā¤ā¤ĒāĨā¤¸ ā¤¸āĨ‡ ā¤˛āĨ‰ā¤— ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤°ā¤–ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ļā¤ŋā¤¨āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž", + "Apps_Logs_TTL_7days": "7 ā¤Ļā¤ŋā¤¨", + "Apps_Logs_TTL_14days": "14 ā¤Ļā¤ŋā¤¨", + "Apps_Logs_TTL_30days": "ā¤¤āĨ€ā¤¸ ā¤Ļā¤ŋā¤¨", + "Apps_Logs_TTL_Alert": "ā¤˛āĨ‰ā¤— ā¤¸ā¤‚ā¤—āĨā¤°ā¤š ā¤•āĨ‡ ā¤†ā¤•ā¤žā¤° ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤°, ā¤‡ā¤¸ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‹ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤•āĨā¤› ā¤•āĨā¤ˇā¤ŖāĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤§āĨ€ā¤Žā¤žā¤Ēā¤¨ ā¤† ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "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_monthly_trialDays": "{{price}} / ā¤Žā¤žā¤š-{{trialDays}}-ā¤Ļā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ", + "Apps_Marketplace_pricingPlan_monthly_perUser_trialDays": "{{price}}/ā¤Žā¤žā¤š ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž-{{trialDays}}-ā¤Ļā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ", + "Apps_Marketplace_pricingPlan_+*_monthly": " {{price}}+* /ā¤Žā¤žā¤š", + "Apps_Marketplace_pricingPlan_+*_monthly_trialDays": " {{price}}+* / ā¤Žā¤žā¤š-{{trialDays}}-ā¤Ļā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ", + "Apps_Marketplace_pricingPlan_+*_monthly_perUser": " {{price}}+* / ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Žā¤žā¤š", + "Apps_Marketplace_pricingPlan_+*_monthly_perUser_trialDays": " {{price}}+* / ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Žā¤žā¤š-{{trialDays}}-ā¤Ļā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ", + "Apps_Marketplace_pricingPlan_+*_yearly": " {{price}}+* / ā¤ĩā¤°āĨā¤ˇ", + "Apps_Marketplace_pricingPlan_+*_yearly_trialDays": " {{price}}+* / ā¤ĩā¤°āĨā¤ˇ-{{trialDays}}-ā¤Ļā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ", + "Apps_Marketplace_pricingPlan_+*_yearly_perUser": " {{price}}+* / ā¤ĩā¤°āĨā¤ˇ ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Apps_Marketplace_pricingPlan_+*_yearly_perUser_trialDays": " {{price}}+* / ā¤ĩā¤°āĨā¤ˇ ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž-{{trialDays}}-ā¤Ļā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ", + "Apps_Marketplace_pricingPlan_yearly_trialDays": "{{price}} / ā¤ĩā¤°āĨā¤ˇ-{{trialDays}}-ā¤Ļā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ", + "Apps_Marketplace_pricingPlan_yearly_perUser_trialDays": "{{price}} / ā¤ĩā¤°āĨā¤ˇ ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž-{{trialDays}}-ā¤Ļā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ", + "Apps_Marketplace_Uninstall_App_Prompt": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤‡ā¤¸ ā¤ā¤Ē ā¤•āĨ‹ ā¤…ā¤¨ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "ā¤Ģā¤ŋā¤° ā¤­āĨ€ ā¤‡ā¤¸āĨ‡ ā¤…ā¤¨ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚", + "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "ā¤‡ā¤¸ ā¤ā¤Ē ā¤•āĨ€ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤…ā¤¨ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤¯ā¤š ā¤°ā¤ĻāĨā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤—āĨ€āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤ā¤¸ā¤ž ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤¨ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤…ā¤Ēā¤¨āĨ€ ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Apps_Permissions_Review_Modal_Title": "ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯ā¤žā¤", + "Apps_Permissions_Review_Modal_Subtitle": "ā¤¯ā¤š ā¤ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯āĨ‹ā¤‚ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤šā¤žā¤šā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤¸ā¤šā¤Žā¤¤ ā¤šāĨˆā¤‚?", + "Apps_Permissions_No_Permissions_Required": "ā¤ā¤Ē ā¤•āĨ‹ ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Apps_Permissions_cloud_workspace-token": "ā¤‡ā¤¸ ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ€ ā¤“ā¤° ā¤¸āĨ‡ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "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_Permissions_livechat-status_read": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤šāĨ‡ā¤‚", + "Apps_Permissions_livechat-custom-fields_write": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤•āĨ‹ ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Apps_Permissions_livechat-visitor_read": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤šāĨ‡ā¤‚", + "Apps_Permissions_livechat-visitor_write": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Apps_Permissions_livechat-message_read": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤šāĨ‡ā¤‚", + "Apps_Permissions_livechat-message_write": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Apps_Permissions_livechat-room_read": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤°āĨ‚ā¤Ž ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤šāĨ‡ā¤‚", + "Apps_Permissions_livechat-room_write": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤°āĨ‚ā¤Ž ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Apps_Permissions_livechat-department_read": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤šāĨ‡ā¤‚", + "Apps_Permissions_livechat-department_multiple": "ā¤•ā¤ˆ ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š", + "Apps_Permissions_livechat-department_write": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Apps_Permissions_slashcommand": "ā¤¨ā¤ ā¤¸āĨā¤˛āĨˆā¤ļ ā¤•ā¤Žā¤žā¤‚ā¤Ą ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Apps_Permissions_api": "ā¤¨ā¤ HTTP ā¤¸ā¤Žā¤žā¤Ēā¤¨ā¤Ŧā¤ŋā¤‚ā¤ĻāĨ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Apps_Permissions_env_read": "ā¤‡ā¤¸ ā¤¸ā¤°āĨā¤ĩā¤° ā¤ĩā¤žā¤¤ā¤žā¤ĩā¤°ā¤Ŗ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¨āĨā¤¯āĨ‚ā¤¨ā¤¤ā¤Ž ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¤ā¤• ā¤Ēā¤šāĨā¤ā¤šāĨ‡ā¤‚", + "Apps_Permissions_networking": "ā¤‡ā¤¸ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¨āĨ‡ā¤Ÿā¤ĩā¤°āĨā¤• ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š", + "Apps_Permissions_persistence": "ā¤ĄāĨ‡ā¤Ÿā¤žā¤ŦāĨ‡ā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤†ā¤‚ā¤¤ā¤°ā¤ŋā¤• ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Apps_Permissions_scheduler": "ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤¨āĨŒā¤•ā¤°ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤Ŧā¤¨ā¤žā¤ ā¤°ā¤–āĨ‡ā¤‚", + "Apps_Permissions_ui_interact": "ā¤¯āĨ‚ā¤†ā¤ˆ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤‡ā¤‚ā¤Ÿā¤°āĨˆā¤•āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Apps_Settings": "ā¤ā¤Ē ā¤•āĨ€ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸", + "Apps_Manual_Update_Modal_Title": "ā¤¯ā¤š ā¤ā¤Ē ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤šāĨˆ", + "Apps_Manual_Update_Modal_Body": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤‡ā¤¸āĨ‡ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Apps_User_Already_Exists": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž \"{{username}}\" ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆāĨ¤ ā¤‡ā¤¸ ā¤ā¤Ē ā¤•āĨ‹ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚ ā¤¯ā¤ž ā¤‰ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤ĻāĨ‡ā¤‚", + "AutoLinker": "ā¤‘ā¤ŸāĨ‹ā¤˛ā¤ŋā¤‚ā¤•ā¤°", + "Apps_WhatIsIt": "ā¤ā¤ĒāĨā¤¸: ā¤ĩāĨ‡ ā¤•āĨā¤¯ā¤ž ā¤šāĨˆā¤‚?", + "Apps_WhatIsIt_paragraph1": "ā¤ĒāĨā¤°ā¤ļā¤žā¤¸ā¤¨ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤†ā¤‡ā¤•ā¤¨! ā¤‡ā¤¸ā¤•ā¤ž ā¤•āĨā¤¯ā¤ž ā¤Žā¤¤ā¤˛ā¤Ŧ ā¤šāĨˆ ā¤”ā¤° ā¤ā¤ĒāĨā¤¸ ā¤•āĨā¤¯ā¤ž ā¤šāĨˆā¤‚?", + "Apps_WhatIsIt_paragraph2": "ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡, ā¤‡ā¤¸ ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­ ā¤ŽāĨ‡ā¤‚ ā¤ā¤ĒāĨā¤¸ ā¤•ā¤ž ā¤¤ā¤žā¤¤āĨā¤Ēā¤°āĨā¤¯ ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¸āĨ‡ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤ ā¤ĩā¤žā¤¸āĨā¤¤ā¤ĩ ā¤ŽāĨ‡ā¤‚, ā¤ĒāĨā¤˛ā¤—ā¤‡ā¤¨āĨā¤¸ ā¤¯ā¤ž ā¤‰ā¤¨āĨā¤¨ā¤¤ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­ ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤¨ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‹ā¤šā¤¨ā¤ž ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤…ā¤šāĨā¤›ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "Apps_WhatIsIt_paragraph3": "ā¤ĻāĨ‚ā¤¸ā¤°āĨ‡, ā¤ĩāĨ‡ ā¤—ā¤¤ā¤ŋā¤ļāĨ€ā¤˛ ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤¯ā¤ž ā¤ĒāĨˆā¤•āĨ‡ā¤œ ā¤šāĨˆā¤‚ ā¤œāĨ‹ ā¤†ā¤Ēā¤•āĨ‹ ā¤•āĨ‹ā¤Ąā¤ŦāĨ‡ā¤¸ ā¤•āĨ‹ ā¤ĢāĨ‹ā¤°āĨā¤• ā¤•ā¤ŋā¤ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤…ā¤Ēā¤¨āĨ‡ ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‡ā¤‚ā¤¸ ā¤•āĨ‹ ā¤…ā¤¨āĨā¤•āĨ‚ā¤˛ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚ā¤—āĨ‡āĨ¤ ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤§āĨā¤¯ā¤žā¤¨ ā¤°ā¤–āĨ‡ā¤‚, ā¤¯ā¤š ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤ĢāĨ€ā¤šā¤° ā¤¸āĨ‡ā¤Ÿ ā¤šāĨˆ ā¤”ā¤° ā¤‡ā¤¸ā¤•āĨ‡ ā¤•ā¤žā¤°ā¤Ŗ ā¤¯ā¤š 100% ā¤¸āĨā¤Ĩā¤ŋā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤¸ā¤žā¤Ĩ ā¤šāĨ€, ā¤šā¤Ž ā¤…ā¤­āĨ€ ā¤­āĨ€ ā¤ĢāĨ€ā¤šā¤° ā¤¸āĨ‡ā¤Ÿ ā¤ĩā¤ŋā¤•ā¤¸ā¤ŋā¤¤ ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚ ā¤‡ā¤¸ā¤˛ā¤ŋā¤ ā¤‡ā¤¸ ā¤¸ā¤Žā¤¯ ā¤šā¤° ā¤šāĨ€ā¤œ ā¤•āĨ‹ ā¤…ā¤¨āĨā¤•āĨ‚ā¤˛ā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤•ā¤ŋā¤¸āĨ€ ā¤ā¤Ē ā¤•āĨ‹ ā¤ĩā¤ŋā¤•ā¤¸ā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤¯ā¤šā¤žā¤‚ ā¤œā¤žā¤•ā¤° ā¤Ēā¤ĸā¤ŧāĨ‡ā¤‚:", + "Apps_WhatIsIt_paragraph4": "ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤‡ā¤¸ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤šāĨ€, ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤‡ā¤¸ ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤”ā¤° ā¤‡ā¤¸āĨ‡ ā¤†ā¤œā¤ŧā¤Žā¤žā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤°āĨā¤šā¤ŋ ā¤°ā¤–ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤¤āĨ‹ ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤šā¤žā¤‚ ā¤‡ā¤¸ ā¤Ŧā¤Ÿā¤¨ ā¤Ēā¤° ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Archive": "ā¤ĒāĨā¤°ā¤žā¤˛āĨ‡ā¤–", + "Archived": "ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤", + "archive-room": "ā¤ĒāĨā¤°ā¤žā¤˛āĨ‡ā¤– ā¤•ā¤•āĨā¤ˇ", + "archive-room_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "are_typing": "ā¤Ÿā¤žā¤‡ā¤Ē ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚", + "are_playing": "ā¤–āĨ‡ā¤˛ ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚", + "is_playing": "ā¤–āĨ‡ā¤˛ ā¤°ā¤šāĨ‡ ā¤šāĨˆ", + "are_uploading": "ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚", + "are_recording": "ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ąā¤ŋā¤‚ā¤— ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚", + "is_uploading": "ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤° ā¤°ā¤šā¤ž ā¤šāĨˆ", + "is_recording": "ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ąā¤ŋā¤‚ā¤— ā¤•ā¤° ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Are_you_sure": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ēā¤•āĨ‹ ā¤¯ā¤•āĨ€ā¤¨ ā¤šāĨˆ?", + "Are_you_sure_delete_department": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤‡ā¤¸ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚? ā¤‡ā¤¸ ā¤ā¤•āĨā¤ļā¤¨ ā¤•āĨ‹ ā¤ĩā¤žā¤Ēā¤¸ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤žāĨ¤ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Are_you_sure_you_want_to_clear_all_unread_messages": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤¸ā¤­āĨ€ ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Are_you_sure_you_want_to_close_this_chat": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤‡ā¤¸ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Are_you_sure_you_want_to_delete_this_record": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤¯ā¤š ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Are_you_sure_you_want_to_delete_your_account": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤‡ā¤¸ ā¤–ā¤žā¤¤āĨ‡ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤šāĨˆā¤‚?", + "Are_you_sure_you_want_to_disable_Facebook_integration": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤ĢāĨ‡ā¤¸ā¤ŦāĨā¤• ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Are_you_sure_you_want_to_reset_the_name_of_all_priorities": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤¸ā¤­āĨ€ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Assets": "ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋ", + "Assets_Description": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•ā¤ž ā¤˛āĨ‹ā¤—āĨ‹, ā¤†ā¤‡ā¤•ā¤¨, ā¤Ģā¤ŧāĨ‡ā¤ĩā¤ŋā¤•āĨ‰ā¤¨ ā¤”ā¤° ā¤Ŧā¤šāĨā¤¤ ā¤•āĨā¤› ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Asset_preview": "ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋ ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨", + "Assign_admin": "ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¨ā¤ŋā¤¯āĨā¤•āĨā¤¤ ā¤•ā¤°ā¤¨ā¤ž", + "Assign_new_conversations_to_bot_agent": "ā¤ŦāĨ‰ā¤Ÿ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤¨ā¤ˆ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤¸āĨŒā¤‚ā¤ĒāĨ‡ā¤‚", + "Assign_new_conversations_to_bot_agent_description": "ā¤°āĨ‚ā¤Ÿā¤ŋā¤‚ā¤— ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤•ā¤ŋā¤¸āĨ€ ā¤Žā¤žā¤¨ā¤ĩ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤¨ā¤ˆ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ‹ ā¤¸ā¤‚ā¤ŦāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤ā¤• ā¤ŦāĨ‰ā¤Ÿ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤–āĨ‹ā¤œā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤—ā¤žāĨ¤", + "assign-admin-role": "ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "assign-admin-role_description": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤¸āĨŒā¤‚ā¤Ēā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "assign-roles": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤¸āĨŒā¤‚ā¤ĒāĨ‡ā¤‚", + "assign-roles_description": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤†ā¤ĩā¤‚ā¤Ÿā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Associate": "ā¤¸ā¤‚ā¤Ŧā¤‚ā¤ĻāĨā¤§ ā¤•ā¤°ā¤¨ā¤ž", + "Associate_Agent": "ā¤¸ā¤šā¤¯āĨ‹ā¤—āĨ€ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ", + "Associate_Agent_to_Extension": "ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤¸āĨ‹ā¤¸ā¤ŋā¤ā¤Ÿ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ", + "at": "ā¤Ēā¤°", + "At_least_one_added_token_is_required_by_the_user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "AtlassianCrowd": "ā¤ā¤Ÿā¤˛ā¤¸ā¤ŋā¤¯ā¤¨ ā¤­āĨ€ā¤Ąā¤ŧ", + "AtlassianCrowd_Description": "ā¤ā¤Ÿā¤˛ā¤¸ā¤ŋā¤¯ā¤¨ ā¤­āĨ€ā¤Ąā¤ŧ ā¤•āĨ‹ ā¤ā¤•āĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Attachment_File_Uploaded": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ", + "Attribute_handling": "ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨", + "Audio": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹", + "Audio_message": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Audio_Notification_Value_Description": "ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤§āĨā¤ĩā¤¨ā¤ŋ ā¤¯ā¤ž ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤§āĨā¤ĩā¤¨ā¤ŋ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆ: ā¤ŦāĨ€ā¤Ē, ā¤šāĨ‡ā¤˛āĨ‡, ā¤Ąā¤ŋā¤‚ā¤—, ā¤ĄāĨā¤°āĨ‰ā¤Ēā¤˛āĨ‡ā¤Ÿ, ā¤šā¤žā¤ˆā¤ŦāĨ‡ā¤˛, ā¤¸āĨ€ā¤œā¤ŧā¤¨", "Audio_Notifications_Default_Alert": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€", + "Audio_Notifications_Value": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹", + "Audio_record": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą", + "Audios": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹", + "Audit": "ā¤…ā¤‚ā¤•āĨ‡ā¤•āĨā¤ˇā¤Ŗ", + "Auditing": "ā¤˛āĨ‡ā¤–ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤ž", + "Auth": "ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ", + "Auth_Token": "ā¤ĒāĨā¤°ā¤žā¤Žā¤žā¤Ŗā¤ŋā¤• ā¤ŸāĨ‹ā¤•ā¤¨", + "Authentication": "ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ", + "Author": "ā¤˛āĨ‡ā¤–ā¤•", + "Author_Information": "ā¤˛āĨ‡ā¤–ā¤• ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Author_Site": "ā¤˛āĨ‡ā¤–ā¤• ā¤¸ā¤žā¤‡ā¤Ÿ", + "Authorization_URL": "ā¤ĒāĨā¤°ā¤žā¤§ā¤ŋā¤•ā¤°ā¤Ŗ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Authorize": "ā¤…ā¤§ā¤ŋā¤•āĨƒā¤¤", + "Authorize_access_to_your_account": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤–ā¤žā¤¤āĨ‡ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤…ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Automatic_translation_not_available": "ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Automatic_translation_not_available_info": "ā¤‡ā¤¸ ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ E2E ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ, ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤•ā¤žā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Auto_Load_Images": "ā¤›ā¤ĩā¤ŋā¤¯ā¤žā¤ ā¤¸āĨā¤ĩā¤¤ā¤ƒ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Auto_Selection": "ā¤¸āĨā¤ĩā¤¤ā¤ƒ ā¤šā¤¯ā¤¨", + "Auto_Translate": "ā¤‘ā¤ŸāĨ‹ ā¤•ā¤ž ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ", + "auto-translate": "ā¤¸āĨā¤ĩā¤¤ā¤ƒ ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ", + "auto-translate_description": "ā¤‘ā¤ŸāĨ‹ ā¤ŸāĨā¤°ā¤žā¤‚ā¤¸ā¤˛āĨ‡ā¤ļā¤¨ ā¤ŸāĨ‚ā¤˛ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Automatic_Translation": "ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ", + "AutoTranslate": "ā¤‘ā¤ŸāĨ‹ ā¤•ā¤ž ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ", + "AutoTranslate_APIKey": "ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤•āĨā¤‚ā¤œāĨ€", + "AutoTranslate_Change_Language_Description": "ā¤‘ā¤ŸāĨ‹-ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ ā¤­ā¤žā¤ˇā¤ž ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•ā¤ž ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "AutoTranslate_DeepL": "ā¤ĄāĨ€ā¤Ēā¤ā¤˛", + "AutoTranslate_Disabled_for_room": "#{{roomName}} ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤ĩā¤¤ā¤ƒ-ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "AutoTranslate_Enabled": "ā¤¸āĨā¤ĩā¤¤ā¤ƒ-ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "AutoTranslate_Enabled_Description": "ā¤‘ā¤ŸāĨ‹-ā¤ŸāĨā¤°ā¤žā¤‚ā¤¸ā¤˛āĨ‡ā¤ļā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ 'ā¤‘ā¤ŸāĨ‹-ā¤ŸāĨā¤°ā¤žā¤‚ā¤¸ā¤˛āĨ‡ā¤Ÿ' ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĩā¤žā¤˛āĨ‡ ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤‰ā¤¨ā¤•āĨ€ ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤­ā¤žā¤ˇā¤ž ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤Žā¤ŋā¤˛ ā¤œā¤žā¤ā¤—āĨ€āĨ¤ ā¤ļāĨā¤˛āĨā¤• ā¤˛ā¤žā¤—āĨ‚ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ.", + "AutoTranslate_Enabled_for_room": "#{{roomName}} ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤ĩā¤¤ā¤ƒ-ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "AutoTranslate_AutoEnableOnJoinRoom": "ā¤—āĨˆā¤°-ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤­ā¤žā¤ˇā¤ž ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ", + "AutoTranslate_AutoEnableOnJoinRoom_Description": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, ā¤œā¤Ŧ ā¤­āĨ€ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤¸āĨ‡ ā¤­ā¤ŋā¤¨āĨā¤¨ ā¤­ā¤žā¤ˇā¤ž ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤ĩā¤žā¤˛ā¤ž ā¤•āĨ‹ā¤ˆ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ŋā¤¸āĨ€ ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤¯ā¤š ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤‰ā¤¨ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļā¤ŋā¤¤ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "AutoTranslate_Google": "ā¤—āĨ‚ā¤—ā¤˛", + "AutoTranslate_language_set_to": "ā¤¸āĨā¤ĩā¤¤ā¤ƒ-ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ ā¤­ā¤žā¤ˇā¤ž ā¤•āĨ‹ {{language}} ā¤Ēā¤° ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "AutoTranslate_Microsoft": "ā¤Žā¤žā¤‡ā¤•āĨā¤°āĨ‹ā¤¸āĨ‰ā¤ĢāĨā¤Ÿ", + "AutoTranslate_Microsoft_API_Key": "Ocp-ā¤ā¤Ēā¤ŋā¤Ž-ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž-ā¤•āĨā¤‚ā¤œāĨ€", + "AutoTranslate_ServiceProvider": "ā¤¸āĨ‡ā¤ĩā¤ž ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž", + "Available": "ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§", + "Available_agents": "ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ", + "Available_departments": "ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤ĩā¤ŋā¤­ā¤žā¤—", + "Avatar": "ā¤…ā¤ĩā¤¤ā¤žā¤°", + "Avatars": "ā¤…ā¤ĩā¤¤ā¤žā¤°āĨ‹ā¤‚", + "Avatar_changed_successfully": "ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "Avatar_URL": "ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Avatar_format_invalid": "ā¤…ā¤ĩāĨˆā¤§ ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤ĒāĨ¤ ā¤•āĨ‡ā¤ĩā¤˛ ā¤›ā¤ĩā¤ŋ ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤šāĨˆ", + "Avatar_url_invalid_or_error": "ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤šāĨˆ ā¤¯ā¤ž ā¤Ēā¤šāĨā¤‚ā¤š ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤ā¤• ā¤…ā¤˛ā¤— ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‡ ā¤¸ā¤žā¤ĨāĨ¤", + "Avg_chat_duration": "ā¤šāĨˆā¤Ÿ period ā¤•ā¤ž ā¤”ā¤¸ā¤¤", + "Avg_first_response_time": "ā¤ĒāĨā¤°ā¤Ĩā¤Ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤Žā¤¯ ā¤•ā¤ž ā¤”ā¤¸ā¤¤", + "Avg_of_abandoned_chats": "ā¤›āĨ‹ā¤Ąā¤ŧāĨ€ ā¤—ā¤ˆ ā¤šāĨˆā¤Ÿ ā¤•ā¤ž ā¤”ā¤¸ā¤¤", + "Avg_of_available_service_time": "ā¤¸āĨ‡ā¤ĩā¤ž ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¸ā¤Žā¤¯ ā¤•ā¤ž ā¤”ā¤¸ā¤¤", + "Avg_of_chat_duration_time": "ā¤šāĨˆā¤Ÿ period ā¤•ā¤ž ā¤”ā¤¸ā¤¤ ā¤¸ā¤Žā¤¯", + "Avg_of_service_time": "ā¤¸āĨ‡ā¤ĩā¤ž ā¤¸ā¤Žā¤¯ ā¤•ā¤ž ā¤”ā¤¸ā¤¤", + "Avg_of_waiting_time": "ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤¸ā¤Žā¤¯ ā¤•ā¤ž ā¤”ā¤¸ā¤¤", + "Avg_reaction_time": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤Žā¤¯ ā¤•ā¤ž ā¤”ā¤¸ā¤¤", + "Avg_response_time": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤Žā¤¯ ā¤•ā¤ž ā¤”ā¤¸ā¤¤", + "away": "ā¤ĻāĨ‚ā¤°", + "Away": "ā¤ĻāĨ‚ā¤°", + "Back": "ā¤ĒāĨ€ā¤›āĨ‡", + "Back_to_applications": "ā¤…ā¤¨āĨā¤ĒāĨā¤°ā¤¯āĨ‹ā¤—āĨ‹ā¤‚ ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤", + "Back_to_calendar": "ā¤•āĨˆā¤˛āĨ‡ā¤‚ā¤Ąā¤° ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤", + "Back_to_chat": "ā¤šāĨˆā¤Ÿ ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤", + "Back_to_imports": "ā¤†ā¤¯ā¤žā¤¤ ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤", + "Back_to_integration_detail": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤", + "Back_to_integrations": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤", + "Back_to_login": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤‚", + "Back_to_Manage_Apps": "ā¤ā¤ĒāĨā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤‚", + "Back_to_permissions": "ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯āĨ‹ā¤‚ ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤", + "Back_to_room": "ā¤•ā¤•āĨā¤ˇ ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤žā¤Ēā¤¸", + "Back_to_threads": "ā¤§ā¤žā¤—āĨ‹ā¤‚ ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤", + "Backup_codes": "ā¤ŦāĨˆā¤•ā¤…ā¤Ē ā¤•āĨ‹ā¤Ą", + "ban-user": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤Ŧā¤‚ā¤§ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "ban-user_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "BBB_End_Meeting": "ā¤ŦāĨˆā¤ ā¤• ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤", + "BBB_Enable_Teams": "ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "BBB_Join_Meeting": "ā¤ŦāĨˆā¤ ā¤• ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛", + "BBB_Start_Meeting": "ā¤ŽāĨ€ā¤Ÿā¤ŋā¤‚ā¤— ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "BBB_Video_Call": "ā¤ŦāĨ€ā¤ŦāĨ€ā¤ŦāĨ€ ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛", + "BBB_You_have_no_permission_to_start_a_call": "ā¤†ā¤Ēā¤•āĨ‹ ā¤•āĨ‰ā¤˛ ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤•āĨ‹ā¤ˆ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Be_the_first_to_join": "ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋ ā¤Ŧā¤¨āĨ‡ā¤‚", + "Belongs_To": "ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤", + "Best_first_response_time": "ā¤¸ā¤°āĨā¤ĩāĨ‹ā¤¤āĨā¤¤ā¤Ž ā¤ĒāĨā¤°ā¤Ĩā¤Ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤Žā¤¯", + "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "ā¤ŦāĨ€ā¤Ÿā¤ž ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž. ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤Ēā¤° ā¤¨ā¤ŋā¤°āĨā¤­ā¤° ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Better": "ā¤ŦāĨ‡ā¤šā¤¤ā¤°", + "Bio": "ā¤ĩā¤š ā¤Ĩā¤ž", + "Bio_Placeholder": "ā¤Ŧā¤žā¤¯āĨ‹ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°", + "Block": "ā¤…ā¤ĩā¤°āĨ‹ā¤§ ā¤ĒāĨˆā¤Ļā¤ž ā¤•ā¤°ā¤¨ā¤ž", + "Block_Multiple_Failed_Logins_Attempts_Until_Block_By_Ip": "ā¤†ā¤ˆā¤ĒāĨ€ ā¤ā¤ĄāĨā¤°āĨ‡ā¤¸ ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤…ā¤¸ā¤Ģā¤˛ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸āĨ‹ā¤‚ ā¤•āĨ€ ā¤Žā¤žā¤¤āĨā¤°ā¤ž", + "Block_Multiple_Failed_Logins_Attempts_Until_Block_by_User": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤ĩā¤ŋā¤Ģā¤˛ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸āĨ‹ā¤‚ ā¤•āĨ€ ā¤Žā¤žā¤¤āĨā¤°ā¤ž", + "Block_Multiple_Failed_Logins_By_Ip": "ā¤†ā¤ˆā¤ĒāĨ€ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ĩā¤ŋā¤Ģā¤˛ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Block_Multiple_Failed_Logins_By_User": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ĩā¤ŋā¤Ģā¤˛ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Block_Multiple_Failed_Logins_Enable_Collect_Login_data_Description": "ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤˛āĨ‡ā¤•ā¤° ā¤ĄāĨ‡ā¤Ÿā¤žā¤ŦāĨ‡ā¤¸ ā¤Ēā¤° ā¤¸ā¤‚ā¤—āĨā¤°ā¤š ā¤¤ā¤• ā¤†ā¤ˆā¤ĒāĨ€ ā¤”ā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "Block_Multiple_Failed_Logins_Enabled": "ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ā¤•ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Block_Multiple_Failed_Logins_Ip_Whitelist": "ā¤†ā¤ˆā¤ĒāĨ€ ā¤ļāĨā¤ĩāĨ‡ā¤¤ā¤¸āĨ‚ā¤šāĨ€", + "Block_Multiple_Failed_Logins_Ip_Whitelist_Description": "ā¤ļāĨā¤ĩāĨ‡ā¤¤ā¤¸āĨ‚ā¤šāĨ€ā¤Ŧā¤ĻāĨā¤§ ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_Ip_In_Minutes": "ā¤†ā¤ˆā¤ĒāĨ€ ā¤ā¤ĄāĨā¤°āĨ‡ā¤¸ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•āĨ€ period (ā¤Žā¤ŋā¤¨ā¤ŸāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚)", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_Ip_In_Minutes_Description": "ā¤¯ā¤š ā¤ĩā¤š ā¤¸ā¤Žā¤¯ ā¤šāĨˆ ā¤œā¤Ŧ ā¤†ā¤ˆā¤ĒāĨ€ ā¤ā¤ĄāĨā¤°āĨ‡ā¤¸ ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ, ā¤”ā¤° ā¤ĩā¤š ā¤¸ā¤Žā¤¯ ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤•ā¤žā¤‰ā¤‚ā¤Ÿā¤° ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤šāĨ‹ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤…ā¤¸ā¤Ģā¤˛ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_User_In_Minutes": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•āĨ€ period (ā¤Žā¤ŋā¤¨ā¤ŸāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚)", + "Block_Multiple_Failed_Logins_Time_To_Unblock_By_User_In_Minutes_Description": "ā¤¯ā¤š ā¤ĩā¤š ā¤¸ā¤Žā¤¯ ā¤šāĨˆ ā¤œā¤Ŧ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ, ā¤”ā¤° ā¤ĩā¤š ā¤¸ā¤Žā¤¯ ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤•ā¤žā¤‰ā¤‚ā¤Ÿā¤° ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤šāĨ‹ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤ĩā¤ŋā¤Ģā¤˛ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Block_Multiple_Failed_Logins_Notify_Failed": "ā¤ĩā¤ŋā¤Ģā¤˛ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤ĻāĨ‡ā¤‚", + "Block_Multiple_Failed_Logins_Notify_Failed_Channel": "ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šāĨˆā¤¨ā¤˛", + "Block_Multiple_Failed_Logins_Notify_Failed_Channel_Desc": "ā¤¯ā¤šāĨ€ā¤‚ ā¤Ēā¤° ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ā¤‚ā¤—āĨ€. ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ. ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤¨ā¤žā¤Ž ā¤ŽāĨ‡ā¤‚ # ā¤šā¤ŋā¤¨āĨā¤š ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤", + "Block_User": "ā¤–ā¤‚ā¤Ą ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Blockchain": "ā¤ŦāĨā¤˛āĨ‰ā¤•ā¤šāĨ‡ā¤¨", + "block-ip-device-management": "ā¤†ā¤ˆā¤ĒāĨ€ ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "block-ip-device-management_description": "ā¤†ā¤ˆā¤ĒāĨ€ ā¤ā¤ĄāĨā¤°āĨ‡ā¤¸ ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Block_IP_Address": "ā¤†ā¤ˆā¤ĒāĨ€ ā¤ā¤ĄāĨā¤°āĨ‡ā¤¸ ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Blocked_IP_Addresses": "ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤†ā¤ˆā¤ĒāĨ€ ā¤Ēā¤¤āĨ‡", + "Blockstack": "ā¤ŦāĨā¤˛āĨ‰ā¤•ā¤¸āĨā¤ŸāĨˆā¤•", + "Blockstack_Description": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤¤āĨ€ā¤¸ā¤°āĨ‡ ā¤Ēā¤•āĨā¤ˇ ā¤¯ā¤ž ā¤ĻāĨ‚ā¤°ā¤¸āĨā¤Ĩ ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤° ā¤­ā¤°āĨ‹ā¤¸ā¤ž ā¤•ā¤ŋā¤ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤¸ā¤žā¤‡ā¤¨ ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤•āĨā¤ˇā¤Žā¤¤ā¤ž ā¤ĻāĨ‡ā¤‚āĨ¤", + "Blockstack_Auth_Description": "ā¤ĒāĨā¤°ā¤žā¤Žā¤žā¤Ŗā¤ŋā¤• ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ", + "Blockstack_ButtonLabelText": "ā¤Ŧā¤Ÿā¤¨ ā¤˛āĨ‡ā¤Ŧā¤˛ ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ", + "Blockstack_Generate_Username": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Body": "ā¤ļā¤°āĨ€ā¤°", + "Bold": "ā¤ŦāĨ‹ā¤˛āĨā¤Ą", + "bot_request": "ā¤ŦāĨ‰ā¤Ÿ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§", + "BotHelpers_userFields": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą", + "BotHelpers_userFields_Description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•ā¤ž CSV ā¤œā¤ŋā¤¸āĨ‡ ā¤ŦāĨ‰ā¤ŸāĨā¤¸ ā¤¸ā¤šā¤žā¤¯ā¤• ā¤ĩā¤ŋā¤§ā¤ŋā¤¯āĨ‹ā¤‚ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Bot": "ā¤ŦāĨ€ā¤“ā¤ŸāĨ€", + "Bots": "ā¤ŦāĨ‰ā¤Ÿ", + "Bots_Description": "ā¤ĩāĨ‡ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ ā¤œā¤ŋā¤¨āĨā¤šāĨ‡ā¤‚ ā¤ŦāĨ‰ā¤Ÿ ā¤ĩā¤ŋā¤•ā¤¸ā¤ŋā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­ā¤ŋā¤¤ ā¤”ā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Branch": "ā¤ļā¤žā¤–ā¤ž", + "Broadcast": "ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ", + "Broadcast_channel": "ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤šāĨˆā¤¨ā¤˛", + "Broadcast_channel_Description": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤…ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤šāĨ€ ā¤¨ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤˛ā¤ŋā¤– ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĻāĨ‡ ā¤¸ā¤•āĨ‡ā¤‚ā¤—āĨ‡", + "Broadcast_Connected_Instances": "ā¤•ā¤¨āĨ‡ā¤•āĨā¤ŸāĨ‡ā¤Ą ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‡ā¤‚ā¤¸ ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Broadcasting_api_key": "ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤•āĨā¤‚ā¤œāĨ€", + "Broadcasting_client_id": "ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ ā¤†ā¤ˆā¤ĄāĨ€", + "Broadcasting_client_secret": "ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤—āĨā¤°ā¤žā¤šā¤• ā¤°ā¤šā¤¸āĨā¤¯", + "Broadcasting_enabled": "ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Broadcasting_media_server_url": "ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤¸ā¤°āĨā¤ĩā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Browse_Files": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧ ā¤•ā¤°āĨ‡ā¤‚", + "Browser_does_not_support_audio_element": "ā¤†ā¤Ēā¤•ā¤ž ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤° ā¤ŽāĨ‡ā¤‚ ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤¤ā¤¤āĨā¤ĩ ā¤¸ā¤Žā¤°āĨā¤Ĩā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤", + "Browser_does_not_support_video_element": "ā¤†ā¤Ēā¤•ā¤ž ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤¤ā¤¤āĨā¤ĩ ā¤•ā¤ž ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤ā¤ž.", + "Browser_does_not_support_recording_video": "ā¤†ā¤Ēā¤•ā¤ž ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤ā¤ž", + "Bugsnag_api_key": "ā¤Ŧā¤—ā¤¸āĨā¤¨ā¤žā¤— ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤•āĨā¤‚ā¤œāĨ€", + "Build_Environment": "ā¤Ēā¤°āĨā¤¯ā¤žā¤ĩā¤°ā¤Ŗ ā¤•ā¤ž ā¤¨ā¤ŋā¤°āĨā¤Žā¤žā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "bulk-register-user": "ā¤ĨāĨ‹ā¤• ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ŧā¤¨ā¤žā¤ā¤", + "bulk-register-user_description": "ā¤Ŧā¤Ąā¤ŧāĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Bundles": "ā¤Ŧā¤‚ā¤Ąā¤˛", + "Busiest_day": "ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤ĩāĨā¤¯ā¤¸āĨā¤¤ ā¤Ļā¤ŋā¤¨", + "Busiest_time": "ā¤ĩāĨā¤¯ā¤¸āĨā¤¤ā¤¤ā¤Ž ā¤¸ā¤Žā¤¯", + "Business_Hour": "ā¤ĩāĨā¤¯ā¤ĩā¤¸ā¤žā¤¯ ā¤•ā¤ž ā¤¸ā¤Žā¤¯", + "Business_Hour_Removed": "ā¤ĩāĨā¤¯ā¤žā¤ĩā¤¸ā¤žā¤¯ā¤ŋā¤• ā¤¸ā¤Žā¤¯ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Business_Hours": "ā¤•ā¤žā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˜ā¤‚ā¤ŸāĨ‡", + "Business_hours_enabled": "ā¤ĩāĨā¤¯ā¤žā¤ĩā¤¸ā¤žā¤¯ā¤ŋā¤• ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Business_hours_updated": "ā¤ĩāĨā¤¯ā¤žā¤ĩā¤¸ā¤žā¤¯ā¤ŋā¤• ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤", + "busy": "ā¤ĩāĨā¤¯ā¤¸āĨā¤¤", + "Busy": "ā¤ĩāĨā¤¯ā¤¸āĨā¤¤", + "Buy": "ā¤–ā¤°āĨ€ā¤Ļā¤¨ā¤ž", + "By": "ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž", + "by": "ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž", + "cache_cleared": "ā¤•āĨˆā¤ļ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Calendar_MeetingUrl_Regex": "ā¤ŽāĨ€ā¤Ÿā¤ŋā¤‚ā¤— ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤°āĨ‡ā¤—āĨā¤˛ā¤° ā¤ā¤•āĨā¤¸ā¤ĒāĨā¤°āĨ‡ā¤ļā¤¨", + "Calendar_MeetingUrl_Regex_Description": "ā¤˜ā¤Ÿā¤¨ā¤ž ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ ā¤ŽāĨ‡ā¤‚ ā¤ŽāĨ€ā¤Ÿā¤ŋā¤‚ā¤— ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•ā¤ž ā¤Ēā¤¤ā¤ž ā¤˛ā¤—ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤­ā¤ŋā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤ĩāĨˆā¤§ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤ĩā¤žā¤˛āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤Žā¤ŋā¤˛ā¤žā¤¨ ā¤¸ā¤ŽāĨ‚ā¤š ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ HTML ā¤ā¤¨āĨā¤•āĨ‹ā¤ĄāĨ‡ā¤Ą ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤ĄāĨ€ā¤•āĨ‹ā¤Ą ā¤šāĨ‹ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "Calendar_settings": "ā¤•āĨˆā¤˛āĨ‡ā¤‚ā¤Ąā¤° ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—", + "Call": "ā¤ĒāĨā¤•ā¤žā¤°ā¤¨ā¤ž", + "Call_again": "ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤ĢāĨ‹ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Call_back": "ā¤ĩā¤žā¤Ēā¤¸ ā¤ŦāĨā¤˛ā¤žā¤“", + "Call_not_found": "ā¤•āĨ‰ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛āĨ€", + "Call_not_found_error": "ā¤ā¤¸ā¤ž ā¤¤ā¤Ŧ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ ā¤œā¤Ŧ ā¤•āĨ‰ā¤˛ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤Žā¤žā¤¨āĨā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ, ā¤¯ā¤ž ā¤†ā¤Ēā¤•āĨ‹ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§āĨ€ ā¤¸ā¤Žā¤¸āĨā¤¯ā¤žā¤ā¤‚ ā¤† ā¤°ā¤šāĨ€ ā¤šāĨˆā¤‚āĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤•āĨ‰ā¤˛ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‡ ā¤¸āĨā¤°āĨ‹ā¤¤ ā¤•āĨ€ ā¤œā¤žā¤‚ā¤š ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚, ā¤¯ā¤ž ā¤¯ā¤Ļā¤ŋ ā¤¸ā¤Žā¤¸āĨā¤¯ā¤ž ā¤Ŧā¤¨āĨ€ ā¤°ā¤šā¤¤āĨ€ ā¤šāĨˆ ā¤¤āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¸āĨ‡ ā¤Ŧā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Calling": "ā¤•āĨ‰ā¤˛ā¤ŋā¤‚ā¤—", + "Call_Center": "ā¤†ā¤ĩā¤žā¤œ ā¤šāĨˆā¤¨ā¤˛", + "Call_Center_Description": "ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤•āĨ‡ ā¤ĩāĨ‰ā¤¯ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Call_ended": "ā¤•āĨ‰ā¤˛ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤", + "Calls": "ā¤•āĨ‰ā¤˛", + "Calls_in_queue": "{{calls}} ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚", + "Call_declined": "ā¤•āĨ‰ā¤˛ ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤!", + "Call_history_provides_a_record_of_when_calls_took_place_and_who_joined": "ā¤•āĨ‰ā¤˛ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤‡ā¤¸ ā¤Ŧā¤žā¤¤ ā¤•ā¤ž ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤•āĨ‰ā¤˛ ā¤•ā¤Ŧ ā¤šāĨā¤ˆ ā¤”ā¤° ā¤•āĨŒā¤¨ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨā¤†āĨ¤", + "Call_Information": "ā¤•āĨ‰ā¤˛ ā¤¸āĨ‚ā¤šā¤¨ā¤ž", + "Call_provider": "ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž", + "Call_Already_Ended": "ā¤•āĨ‰ā¤˛ ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤šāĨā¤•āĨ€ ā¤šāĨˆ", + "Call_number": "ā¤•āĨ‰ā¤˛ ā¤¨ā¤‚ā¤Ŧā¤°", + "Call_number_premium_only": "ā¤•āĨ‰ā¤˛ ā¤¨ā¤‚ā¤Ŧā¤° (ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤ĒāĨā¤˛ā¤žā¤¨)", + "call-management": "ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨", + "call-management_description": "ā¤ŦāĨˆā¤ ā¤• ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Call_ongoing": "ā¤•āĨ‰ā¤˛ ā¤œā¤žā¤°āĨ€ ā¤šāĨˆ", + "Call_started": "ā¤•āĨ‰ā¤˛ ā¤ļāĨā¤°āĨ‚ ā¤šāĨā¤ˆ", + "Call_unavailable_for_federation": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤°āĨ‚ā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‰ā¤˛ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Call_was_not_answered": "ā¤•āĨ‰ā¤˛ ā¤•ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Caller": "ā¤•āĨ‹ā¤˛ā¤°", + "Caller_Id": "ā¤•āĨ‰ā¤˛ā¤° ā¤†ā¤ˆā¤ĄāĨ€", + "Camera_access_not_allowed": "ā¤•āĨˆā¤Žā¤°ā¤ž ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤ĨāĨ€, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ€ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤œā¤žā¤‚ā¤šāĨ‡ā¤‚āĨ¤", + "Cam_on": "ā¤•āĨˆā¤Ž ā¤‘ā¤¨", + "Cam_off": "ā¤•āĨˆā¤Ž ā¤Ŧā¤‚ā¤Ļ", + "can-audit": "ā¤‘ā¤Ąā¤ŋā¤Ÿ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "can-audit_description": "ā¤‘ā¤Ąā¤ŋā¤Ÿ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤šā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "can-audit-log": "ā¤‘ā¤Ąā¤ŋā¤Ÿ ā¤˛āĨ‰ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "can-audit-log_description": "ā¤‘ā¤Ąā¤ŋā¤Ÿ ā¤˛āĨ‰ā¤— ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤šā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", "Cancel": "ā¤°ā¤ĻāĨā¤Ļ ā¤•ā¤°ā¤¨ā¤ž", "Cancel_message_input": "ā¤°ā¤ĻāĨā¤Ļ ā¤•ā¤°ā¤¨ā¤ž", + "Canceled": "ā¤°ā¤ĻāĨā¤Ļ", + "Canned_Response_Created": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤Ŧā¤¨ā¤žā¤ˆ ā¤—ā¤ˆ", + "Canned_Response_Updated": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨ ā¤•āĨ€ ā¤—ā¤ˆ", + "Canned_Response_Delete_Warning": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤ĩā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤žāĨ¤", + "Canned_Response_Removed": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤—ā¤ˆ", + "Canned_Response_Sharing_Department_Description": "ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤‡ā¤¸ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Canned_Response_Sharing_Private_Description": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤†ā¤Ē ā¤”ā¤° ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤• ā¤šāĨ€ ā¤‡ā¤¸ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Canned_Response_Sharing_Public_Description": "ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤‡ā¤¸ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Canned_Responses": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤‚", + "Canned_Responses_Enable": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨā¤¤āĨā¤¤ā¤° ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Create_department": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_direct_message": "ā¤¸āĨ€ā¤§ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_tag": "ā¤ŸāĨˆā¤— ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_trigger": "ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_SLA_policy": "SLA ā¤¨āĨ€ā¤¤ā¤ŋ ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Cannot_invite_users_to_direct_rooms": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸āĨ€ā¤§āĨ‡ ā¤°āĨ‚ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž", + "Cannot_open_conversation_with_yourself": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤†ā¤Ē ā¤¸āĨ‡ ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤­āĨ‡ā¤œā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž", + "Cannot_share_your_location": "ā¤†ā¤Ēā¤•ā¤ž ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸ā¤žā¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž...", + "Cannot_disable_while_on_call": "ā¤•āĨ‰ā¤˛ ā¤•āĨ‡ ā¤ĻāĨŒā¤°ā¤žā¤¨ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤Ŧā¤Ļā¤˛ ā¤¸ā¤•ā¤¤āĨ‡", + "Cant_join": "ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡", + "CAS": "ā¤•āĨˆā¤¸", + "CAS_Description": "ā¤•āĨ‡ā¤‚ā¤ĻāĨā¤°āĨ€ā¤¯ ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸āĨ‡ā¤ĩā¤ž ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤ˆ ā¤ĒāĨā¤°āĨ‹ā¤ŸāĨ‹ā¤•āĨ‰ā¤˛ ā¤Ēā¤° ā¤•ā¤ˆ ā¤¸ā¤žā¤‡ā¤ŸāĨ‹ā¤‚ ā¤Ēā¤° ā¤¸ā¤žā¤‡ā¤¨ ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤°āĨ‡ā¤ĄāĨ‡ā¤‚ā¤ļā¤ŋā¤¯ā¤˛āĨā¤¸ ā¤•āĨ‡ ā¤ā¤• ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "CAS_autoclose": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨ‰ā¤Ēā¤…ā¤Ē ā¤¸āĨā¤ĩā¤¤ā¤ƒ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "CAS_base_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": "ā¤ā¤¸ā¤ā¤¸ā¤“ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "CAS_login_url_Description": "ā¤†ā¤Ēā¤•āĨ€ ā¤Ŧā¤žā¤šā¤°āĨ€ SSO ā¤¸āĨ‡ā¤ĩā¤ž ā¤•ā¤ž ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ URL ā¤œāĨˆā¤¸āĨ‡: `https://sso.example.undef/sso/login`", + "CAS_popup_height": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨ‰ā¤Ēā¤…ā¤Ē ā¤Šā¤‚ā¤šā¤žā¤ˆ", + "CAS_popup_width": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨ‰ā¤Ēā¤…ā¤Ē ā¤šāĨŒā¤Ąā¤ŧā¤žā¤ˆ", + "CAS_Sync_User_Data_Enabled": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤•āĨ‹ ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "CAS_Sync_User_Data_Enabled_Description": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ēā¤° ā¤Ŧā¤žā¤šā¤°āĨ€ CAS ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤•āĨ‹ ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤žā¤“ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤ŋā¤‚ā¤•āĨā¤°ā¤¨ā¤žā¤‡ā¤œā¤ŧ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤§āĨā¤¯ā¤žā¤¨ ā¤ĻāĨ‡ā¤‚: ā¤–ā¤žā¤¤ā¤ž ā¤Ŧā¤¨ā¤žā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤žā¤ā¤ ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤¸ā¤Žā¤¨āĨā¤ĩā¤¯ā¤ŋā¤¤ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆā¤‚āĨ¤", + "CAS_Sync_User_Data_FieldMap": "ā¤—āĨā¤Ŗ ā¤Žā¤žā¤¨ā¤šā¤ŋā¤¤āĨā¤°", + "CAS_Sync_User_Data_FieldMap_Description": "ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤žā¤“ā¤‚ (ā¤Žā¤žā¤¨) ā¤¸āĨ‡ ā¤†ā¤‚ā¤¤ā¤°ā¤ŋā¤• ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤žā¤ā¤ (ā¤•āĨā¤‚ā¤œāĨ€) ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸ JSON ā¤‡ā¤¨ā¤ĒāĨā¤Ÿ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚āĨ¤ '%' ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸ā¤‚ā¤˛ā¤—āĨā¤¨ ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤ŽāĨ‚ā¤˛āĨā¤¯ ā¤¸āĨā¤ŸāĨā¤°ā¤ŋā¤‚ā¤— ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤•āĨā¤ˇāĨ‡ā¤Ēā¤ŋā¤¤ ā¤šāĨ‹ā¤‚ā¤—āĨ‡āĨ¤\nā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ, `{\"ā¤ˆā¤ŽāĨ‡ā¤˛\":\"%ā¤ˆā¤ŽāĨ‡ā¤˛%\", \"ā¤¨ā¤žā¤Ž\":\"%ā¤Ēā¤šā¤˛ā¤ž ā¤¨ā¤žā¤Ž%, %ā¤…ā¤‚ā¤¤ā¤ŋā¤Žā¤¨ā¤žā¤Ž%\"}`\n \nā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤Žā¤žā¤¨ā¤šā¤ŋā¤¤āĨā¤° ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤ĒāĨā¤°ā¤•āĨā¤ˇāĨ‡ā¤Ēā¤ŋā¤¤ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆāĨ¤ CAS 1.0 ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‡ā¤ĩā¤˛ `ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž` ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆāĨ¤ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤†ā¤‚ā¤¤ā¤°ā¤ŋā¤• ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤žā¤ā¤ ā¤šāĨˆā¤‚: ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž, ā¤¨ā¤žā¤Ž, ā¤ˆā¤ŽāĨ‡ā¤˛, ā¤•ā¤Žā¤°āĨ‡; ā¤°āĨ‚ā¤Ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤¨ā¤ŋā¤°āĨā¤Žā¤žā¤Ŗ ā¤Ēā¤° ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ€ ā¤ā¤• ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€ ā¤šāĨˆ, ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤: `{\"rooms\": \"%team%,%department%\"}` ā¤¨ā¤ŋā¤°āĨā¤Žā¤žā¤Ŗ ā¤Ēā¤° CAS ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤‰ā¤¨ā¤•āĨ€ ā¤ŸāĨ€ā¤Ž ā¤”ā¤° ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤•ā¤°āĨ‡ā¤—ā¤žāĨ¤", + "CAS_trust_username": "CAS ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤Ēā¤° ā¤­ā¤°āĨ‹ā¤¸ā¤ž ā¤•ā¤°āĨ‡ā¤‚", + "CAS_trust_username_description": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, Rocket.Chat ā¤•āĨ‹ ā¤­ā¤°āĨ‹ā¤¸ā¤ž ā¤šāĨ‹ā¤—ā¤ž ā¤•ā¤ŋ CAS ā¤•ā¤ž ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž Rocket.Chat ā¤Ēā¤° ā¤‰ā¤¸āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤šāĨˆāĨ¤\nā¤¯ā¤Ļā¤ŋ ā¤•ā¤ŋā¤¸āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž CAS ā¤Ēā¤° ā¤Ŧā¤Ļā¤˛ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤‡ā¤¸ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆ, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤¯ā¤š ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ CAS ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ŧā¤Ļā¤˛ā¤•ā¤° Rocket.Chat ā¤–ā¤žā¤¤āĨ‹ā¤‚ ā¤Ēā¤° ā¤¨ā¤ŋā¤¯ā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤˛āĨ‡ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤­āĨ€ ā¤ĻāĨ‡ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "CAS_version": "ā¤•āĨˆā¤¸ ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ", + "CAS_version_Description": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤†ā¤Ēā¤•āĨ€ CAS SSO ā¤¸āĨ‡ā¤ĩā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤Žā¤°āĨā¤Ĩā¤ŋā¤¤ CAS ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Categories": "ā¤ļāĨā¤°āĨ‡ā¤Ŗā¤ŋā¤¯ā¤žā¤", + "Categories*": "ā¤ļāĨā¤°āĨ‡ā¤Ŗā¤ŋā¤¯ā¤žā¤*", + "CDN_JSCSS_PREFIX": "ā¤œāĨ‡ā¤ā¤¸/ā¤¸āĨ€ā¤ā¤¸ā¤ā¤¸ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨ€ā¤ĄāĨ€ā¤ā¤¨ ā¤‰ā¤Ēā¤¸ā¤°āĨā¤—", + "CDN_PREFIX": "ā¤¸āĨ€ā¤ĄāĨ€ā¤ā¤¨ ā¤‰ā¤Ēā¤¸ā¤°āĨā¤—", + "CDN_PREFIX_ALL": "ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨ€ā¤ĄāĨ€ā¤ā¤¨ ā¤‰ā¤Ēā¤¸ā¤°āĨā¤— ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "Certificates_and_Keys": "ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤Ēā¤¤āĨā¤° ā¤”ā¤° ā¤šā¤žā¤Ŧā¤ŋā¤¯ā¤žā¤", + "changed_room_announcement_to__room_announcement_": "ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ€ ā¤˜āĨ‹ā¤ˇā¤Ŗā¤ž ā¤•āĨ‹ ā¤‡ā¤¸ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž: {{room_announcement}}", + "changed_room_description_to__room_description_": "ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ‡ ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ ā¤•āĨ‹ ā¤‡ā¤¸ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž: {{room_description}}", + "change-livechat-room-visitor": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤°āĨ‚ā¤Ž ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚", + "change-livechat-room-visitor_description": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤°āĨ‚ā¤Ž ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Change_Room_Type": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤Ŧā¤Ļā¤˛ā¤¨ā¤ž", + "Changing_email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ŧā¤Ļā¤˛ā¤¨ā¤ž", + "channel": "ā¤šāĨˆā¤¨ā¤˛", + "Channel": "ā¤šāĨˆā¤¨ā¤˛", + "Channel_already_exist": "ā¤šāĨˆā¤¨ā¤˛ `#%s` ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆāĨ¤", + "Channel_already_exist_static": "ā¤šāĨˆā¤¨ā¤˛ ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ.", + "Channel_already_Unarchived": "`#%s` ā¤¨ā¤žā¤Ž ā¤ĩā¤žā¤˛ā¤ž ā¤šāĨˆā¤¨ā¤˛ ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤…ā¤¨ā¤žā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ", + "Channel_Archived": "`#%s` ā¤¨ā¤žā¤Ž ā¤ĩā¤žā¤˛ā¤ž ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Channel_created": "ā¤šāĨˆā¤¨ā¤˛ `#%s` ā¤Ŧā¤¨ā¤žā¤¯ā¤ž ā¤—ā¤¯ā¤ž.", + "Channel_doesnt_exist": "ā¤šāĨˆā¤¨ā¤˛ `#%s` ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤", + "Channel_Export": "ā¤šāĨˆā¤¨ā¤˛ ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤", + "Channel_name": "ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Channel_Name_Placeholder": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚...", + "Channel_to_listen_on": "ā¤¸āĨā¤¨ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šāĨˆā¤¨ā¤˛", + "Channel_Unarchived": "`#%s` ā¤¨ā¤žā¤Ž ā¤ĩā¤žā¤˛ā¤ž ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤…ā¤¨ā¤žā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Channels": "ā¤šāĨˆā¤¨ā¤˛", + "Channels_added": "ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ ā¤—ā¤", + "Channels_are_where_your_team_communicate": "ā¤šāĨˆā¤¨ā¤˛ ā¤ĩāĨ‡ ā¤šāĨˆā¤‚ ā¤œā¤šā¤žā¤‚ ā¤†ā¤Ēā¤•āĨ€ ā¤ŸāĨ€ā¤Ž ā¤¸ā¤‚ā¤ĩā¤žā¤Ļ ā¤•ā¤°ā¤¤āĨ€ ā¤šāĨˆ", + "Channels_list": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€", + "Channel_what_is_this_channel_about": "ā¤¯ā¤š ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ŋā¤¸ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ?", + "Chart": "ā¤šā¤žā¤°āĨā¤Ÿ", + "Chat_button": "ā¤šāĨˆā¤Ÿ ā¤Ŧā¤Ÿā¤¨", + "Chat_close": "ā¤šāĨˆā¤Ÿ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Chat_closed": "ā¤šāĨˆā¤Ÿ ā¤Ŧā¤‚ā¤Ļ", + "Chat_closed_by_agent": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤šāĨˆā¤Ÿ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤° ā¤ĻāĨ€ ā¤—ā¤ˆ", + "Chat_closed_successfully": "ā¤šāĨˆā¤Ÿ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤‚ā¤Ļ ā¤šāĨā¤ˆ", + "Chat_History": "ā¤šāĨˆā¤Ÿ ā¤•ā¤ž ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸", + "Chat_Now": "ā¤…ā¤­āĨ€ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "chat_on_hold_due_to_inactivity": "ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ā¤¤ā¤ž ā¤•āĨ‡ ā¤•ā¤žā¤°ā¤Ŗ ā¤¯ā¤š ā¤šāĨˆā¤Ÿ ā¤°āĨā¤•āĨ€ ā¤šāĨā¤ˆ ā¤šāĨˆ", + "Chat_On_Hold": "ā¤šāĨˆā¤Ÿ ā¤‘ā¤¨-ā¤šāĨ‹ā¤˛āĨā¤Ą", + "Chat_On_Hold_Successfully": "ā¤‡ā¤¸ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤‘ā¤¨-ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤°ā¤–ā¤ž ā¤—ā¤¯ā¤ž ā¤Ĩā¤ž", + "Chat_queued": "ā¤šāĨˆā¤Ÿ ā¤Ēā¤‚ā¤•āĨā¤¤ā¤ŋā¤Ŧā¤ĻāĨā¤§", + "Chat_removed": "ā¤šāĨˆā¤Ÿ ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤—ā¤ˆ", + "Chat_resumed": "ā¤šāĨˆā¤Ÿ ā¤Ģā¤ŋā¤° ā¤¸āĨ‡ ā¤ļāĨā¤°āĨ‚ ā¤šāĨā¤ˆ", + "Chat_start": "ā¤šāĨˆā¤Ÿ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­", + "Chat_started": "ā¤šāĨˆā¤Ÿ ā¤ļāĨā¤°āĨ‚ ā¤šāĨā¤ˆ", + "Chat_taken": "ā¤šāĨˆā¤Ÿ ā¤˛ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Chat_window": "ā¤šāĨˆā¤Ÿ ā¤ĩā¤ŋā¤‚ā¤ĄāĨ‹", + "Chatops_Enabled": "ā¤šāĨˆā¤ŸāĨ‰ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Chatops_Title": "ā¤šāĨˆā¤ŸāĨ‰ā¤ĒāĨā¤¸ ā¤ĒāĨˆā¤¨ā¤˛", + "Chatops_Username": "ā¤šāĨˆā¤ŸāĨ‰ā¤ĒāĨā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "Chat_Duration": "ā¤šāĨˆā¤Ÿ ā¤•āĨ€ period", + "Chats_removed": "ā¤šāĨˆā¤Ÿ ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤—ā¤ˆā¤‚", + "Check_All": "ā¤¸ā¤­āĨ€ ā¤šāĨ‡ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Check_if_the_spelling_is_correct": "ā¤œā¤žā¤‚ā¤šāĨ‡ā¤‚ ā¤•ā¤ŋ ā¤•āĨā¤¯ā¤ž ā¤ĩā¤°āĨā¤¤ā¤¨āĨ€ ā¤¸ā¤šāĨ€ ā¤šāĨˆ", + "Check_Progress": "ā¤ĒāĨā¤°ā¤—ā¤¤ā¤ŋ ā¤•āĨ€ ā¤œā¤žā¤ā¤š ā¤•ā¤°āĨ‡ā¤‚", + "Check_device_activity": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤—ā¤¤ā¤ŋā¤ĩā¤ŋā¤§ā¤ŋ ā¤•āĨ€ ā¤œā¤žā¤ā¤š ā¤•ā¤°āĨ‡ā¤‚", + "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_History_unavailable_for_federation": "ā¤Žā¤šā¤žā¤¸ā¤‚ā¤˜ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤ĩā¤šāĨā¤› ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤…ā¤¨āĨā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆ", + "Clean_Usernames": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°āĨ‡ā¤‚", + "clean-channel-history": "ā¤¸āĨā¤ĩā¤šāĨā¤› ā¤šāĨˆā¤¨ā¤˛ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸", + "clean-channel-history_description": "ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "clear": "ā¤¸āĨā¤Ēā¤ˇāĨā¤Ÿ", + "Clear_all_unreads_question": "ā¤¸ā¤­āĨ€ ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°āĨ‡ā¤‚?", + "clear_cache_now": "ā¤…ā¤­āĨ€ ā¤•āĨˆā¤ļ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°āĨ‡ā¤‚", + "Clear_filters": "ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°āĨ‡ā¤‚", + "clear_history": "ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤Žā¤ŋā¤Ÿā¤ž ā¤ĻāĨ‡ā¤‚", + "Clear_livechat_session_when_chat_ended": "ā¤šāĨˆā¤Ÿ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤…ā¤¤ā¤ŋā¤Ĩā¤ŋ ā¤¸ā¤¤āĨā¤° ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°āĨ‡ā¤‚", + "clear-oembed-cache": "OEmbed ā¤•āĨˆā¤ļ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°āĨ‡ā¤‚", + "clear-oembed-cache_description": "OEmbed ā¤•āĨˆā¤ļ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Click_here": "ā¤¯ā¤šā¤žā¤ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Click_here_for_more_details_or_contact_sales_for_a_new_license": "ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚ ā¤¯ā¤ž ā¤¨ā¤ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ {{email}} ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Click_here_for_more_info": "ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Click_here_to_clear_the_selection": "ā¤šā¤¯ā¤¨ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚", + "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", + "Client": "ā¤—āĨā¤°ā¤žā¤šā¤•", + "Clients_will_refresh_in_a_few_seconds": "ā¤—āĨā¤°ā¤žā¤šā¤• ā¤•āĨā¤› ā¤šāĨ€ ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤¤ā¤žā¤œā¤ŧā¤ž ā¤šāĨ‹ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡", + "close": "ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨ā¤ž", + "Close": "ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨ā¤ž", + "Close_chat": "ā¤šāĨˆā¤Ÿ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Close_room_description": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤šāĨˆā¤‚. ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤œā¤žā¤°āĨ€ ā¤°ā¤–ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "close-livechat-room": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "close-livechat-room_description": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇ ā¤•āĨ‹ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "close-others-livechat-room": "ā¤…ā¤¨āĨā¤¯ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "close-others-livechat-room_description": "ā¤…ā¤¨āĨā¤¯ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Close_Window": "ā¤ĩā¤ŋā¤‚ā¤ĄāĨ‹ ā¤Ŧā¤‚ā¤Ļ", + "Closed": "ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨā¤†", + "Closed_At": "ā¤Ēā¤° ā¤Ŧā¤‚ā¤Ļ ā¤šāĨā¤†", + "Closed_automatically": "ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Closed_automatically_because_chat_was_onhold_for_seconds": "ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤šāĨˆā¤Ÿ {{onHoldTime}} ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤ĨāĨ€", + "Closed_automatically_chat_queued_too_long": "ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ŧā¤‚ā¤Ļ (ā¤•ā¤¤ā¤žā¤° ā¤•ā¤ž ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤Žā¤¯ ā¤Ēā¤žā¤° ā¤šāĨ‹ ā¤—ā¤¯ā¤ž)", + "Closed_by_visitor": "ā¤†ā¤—ā¤‚ā¤¤āĨā¤• ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Wrap_up_conversation": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "These_options_affect_this_conversation_only_To_set_default_selections_go_to_My_Account_Omnichannel": "ā¤¯āĨ‡ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤•āĨ‡ā¤ĩā¤˛ ā¤‡ā¤¸ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩā¤ŋā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚. ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤šā¤¯ā¤¨ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤ŽāĨ‡ā¤°ā¤ž ā¤–ā¤žā¤¤ā¤ž > ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤Ēā¤° ā¤œā¤žā¤ā¤āĨ¤", + "This_option_affect_this_conversation_only_To_set_default_selection_go_to_My_Account_Omnichannel": "ā¤¯ā¤š ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤•āĨ‡ā¤ĩā¤˛ ā¤‡ā¤¸ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ. ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤šā¤¯ā¤¨ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤ŽāĨ‡ā¤°ā¤ž ā¤–ā¤žā¤¤ā¤ž > ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤Ēā¤° ā¤œā¤žā¤ā¤āĨ¤", + "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": "ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•ā¤‚ā¤¸āĨ‹ā¤˛", + "Cloud_error_code": "ā¤•āĨ‹ā¤Ą: {{errorCode}}", + "Cloud_error_in_authenticating": "ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤šāĨā¤ˆ", + "Cloud_Info": "ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Cloud_login_to_cloud": "Rocket.Chat ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Cloud_logout": "ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Cloud_manually_input_token": "ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Cloud_register_error": "ā¤†ā¤Ēā¤•āĨ‡ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•āĨ‹ ā¤¸ā¤‚ā¤¸ā¤žā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤ā¤• ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤šāĨā¤ˆ ā¤šāĨˆāĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤Ŧā¤žā¤Ļ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤¨: ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Cloud_Register_manually": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "Cloud_register_offline_finish_helper": "ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĒāĨā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĒāĨ‚ā¤°āĨ€ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤†ā¤Ēā¤•āĨ‹ ā¤•āĨā¤› ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ ā¤ĒāĨā¤°ā¤¸āĨā¤¤āĨā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤‡ā¤¸āĨ‡ ā¤¯ā¤šā¤žā¤‚ ā¤ĒāĨ‡ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Cloud_register_offline_helper": "ā¤¯ā¤Ļā¤ŋ ā¤ā¤¯ā¤°ā¤—āĨˆā¤Ē ā¤¯ā¤ž ā¤¨āĨ‡ā¤Ÿā¤ĩā¤°āĨā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤šāĨˆ ā¤¤āĨ‹ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤ĒāĨā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•āĨ‹ ā¤ĒāĨ‚ā¤°ā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¨āĨ€ā¤šāĨ‡ ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ ā¤•āĨ‹ ā¤•āĨ‰ā¤ĒāĨ€ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤šā¤Žā¤žā¤°āĨ‡ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤Ēā¤° ā¤œā¤žā¤ā¤‚āĨ¤", + "Cloud_register_success": "ā¤†ā¤Ēā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž ā¤šāĨˆ!", + "Cloud_registration_required": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•", + "Cloud_registration_required_description": "ā¤ā¤¸ā¤ž ā¤˛ā¤—ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤•āĨ‡ ā¤ĻāĨŒā¤°ā¤žā¤¨ ā¤†ā¤Ēā¤¨āĨ‡ ā¤…ā¤Ēā¤¨ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨā¤¨ā¤žāĨ¤", + "Cloud_registration_required_link_text": "ā¤…ā¤Ēā¤¨ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Cloud_resend_email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĻāĨā¤Ŧā¤žā¤°ā¤ž ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Cloud_Service_Agree_PrivacyTerms": "ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ā¤ĩā¤ž ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤ļā¤°āĨā¤¤āĨ‡ā¤‚ ā¤…ā¤¨āĨā¤Ŧā¤‚ā¤§", + "Cloud_Service_Agree_PrivacyTerms_Description": "ā¤ŽāĨˆā¤‚ [ā¤ļā¤°āĨā¤¤āĨ‡ā¤‚](https://rocket.chat/terms) ā¤”ā¤° [ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¨āĨ€ā¤¤ā¤ŋ](https://rocket.chat/privacy) ā¤¸āĨ‡ ā¤¸ā¤šā¤Žā¤¤ ā¤šāĨ‚ā¤‚", + "Cloud_Service_Agree_PrivacyTerms_Login_Disabled_Warning": "ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤ļā¤°āĨā¤¤āĨ‹ā¤‚ (ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤ĩā¤ŋā¤œā¤ŧā¤žā¤°āĨā¤Ą > ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ > ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ā¤ĩā¤ž ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤ļā¤°āĨā¤¤āĨ‡ā¤‚ ā¤…ā¤¨āĨā¤Ŧā¤‚ā¤§) ā¤•āĨ‹ ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤", + "Cloud_status_page_description": "ā¤¯ā¤Ļā¤ŋ ā¤•ā¤ŋā¤¸āĨ€ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ā¤ĩā¤ž ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤Žā¤¸āĨā¤¯ā¤ž ā¤† ā¤°ā¤šāĨ€ ā¤šāĨˆ ā¤¤āĨ‹ ā¤†ā¤Ē ā¤šā¤Žā¤žā¤°āĨ‡ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ĒāĨƒā¤ˇāĨā¤  ā¤Ēā¤° ā¤œāĨā¤žā¤žā¤¤ ā¤¸ā¤Žā¤¸āĨā¤¯ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤œā¤žā¤‚ā¤š ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Cloud_token_instructions": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤Ēā¤° ā¤œā¤žā¤ā¤‚āĨ¤ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°āĨ‡ā¤‚ ā¤¯ā¤ž ā¤ā¤• ā¤–ā¤žā¤¤ā¤ž ā¤Ŧā¤¨ā¤žā¤ā¤‚ ā¤”ā¤° ā¤¸āĨā¤ĩ-ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤°ā¤œā¤ŋā¤¸āĨā¤Ÿā¤° ā¤Ēā¤° ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤¨āĨ€ā¤šāĨ‡ ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•āĨ‹ ā¤šā¤ŋā¤Ēā¤•ā¤žā¤ā¤", + "Cloud_troubleshooting": "ā¤¸ā¤Žā¤¸āĨā¤¯ā¤ž ā¤¨ā¤ŋā¤ĩā¤žā¤°ā¤Ŗ", + "Cloud_update_email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Cloud_what_is_it": "ā¤¯ā¤š ā¤•āĨā¤¯ā¤ž ā¤šāĨˆ?", + "Copy_Link": "ā¤˛ā¤ŋā¤‚ā¤• ā¤•āĨ€ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛ā¤ŋā¤Ēā¤ŋ ā¤•ā¤°āĨ‡ā¤‚", + "Copy_password": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ‰ā¤ĒāĨ€ ā¤•ā¤°āĨ‡ā¤‚", + "Cloud_what_is_it_additional": "ā¤‡ā¤¸ā¤•āĨ‡ ā¤…ā¤˛ā¤žā¤ĩā¤ž ā¤†ā¤Ē Rocket.Chat ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤¸āĨ‡ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸, ā¤Ŧā¤ŋā¤˛ā¤ŋā¤‚ā¤— ā¤”ā¤° ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤‚ā¤—āĨ‡āĨ¤", + "Cloud_what_is_it_description": "Rocket.Chat ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤¸āĨā¤ĩ-ā¤šāĨ‹ā¤¸āĨā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤ Rocket.Chat ā¤ĩā¤°āĨā¤•ā¤¸āĨā¤ĒāĨ‡ā¤¸ ā¤•āĨ‹ ā¤šā¤Žā¤žā¤°āĨ‡ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•āĨ€ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤¸āĨ‡ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Cloud_what_is_it_services_like": "ā¤¸āĨ‡ā¤ĩā¤žā¤ā¤ ā¤œāĨˆā¤¸āĨ‡:", + "Cloud_workspace_connected": "ā¤†ā¤Ēā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° Rocket.Chat Cloud ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤ž ā¤šāĨˆāĨ¤ ā¤¯ā¤šā¤žā¤‚ ā¤…ā¤Ēā¤¨āĨ‡ Rocket.Chat ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤–ā¤žā¤¤āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤†ā¤Ē ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤œāĨˆā¤¸āĨ€ ā¤•āĨā¤› ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•ā¤° ā¤¸ā¤•āĨ‡ā¤‚ā¤—āĨ‡āĨ¤", + "Cloud_workspace_connected_plus_account": "ā¤†ā¤Ēā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤…ā¤Ŧ Rocket.Chat ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤ā¤• ā¤–ā¤žā¤¤ā¤ž ā¤¸ā¤‚ā¤Ŧā¤ĻāĨā¤§ ā¤šāĨˆāĨ¤", + "Cloud_workspace_connected_without_account": "ā¤†ā¤Ēā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤…ā¤Ŧ Rocket.Chat ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤šā¤žā¤šāĨ‡ā¤‚, ā¤¤āĨ‹ ā¤†ā¤Ē Rocket.Chat ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤–ā¤žā¤¤āĨ‡ ā¤¸āĨ‡ ā¤œāĨ‹ā¤Ąā¤ŧ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Cloud_workspace_disconnect": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤…ā¤Ŧ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤¤āĨ‹ ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ Rocket.Chat Cloud ā¤¸āĨ‡ ā¤Ąā¤ŋā¤¸āĨā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Cloud_workspace_support": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤•āĨ‹ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ā¤ĩā¤ž ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°āĨ‡ā¤ļā¤žā¤¨āĨ€ ā¤šāĨ‹ ā¤°ā¤šāĨ€ ā¤šāĨˆ, ā¤¤āĨ‹ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤¸ā¤Žā¤¸āĨā¤¯ā¤ž ā¤Ŧā¤¨āĨ€ ā¤°ā¤šā¤¤āĨ€ ā¤šāĨˆ, ā¤¤āĨ‹ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤¸ā¤šā¤žā¤¯ā¤¤ā¤ž ā¤Ÿā¤ŋā¤•ā¤Ÿ ā¤–āĨ‹ā¤˛āĨ‡ā¤‚āĨ¤", + "Collaborative": "ā¤¸ā¤šā¤¯āĨ‹ā¤—ā¤žā¤¤āĨā¤Žā¤•", + "Collapse": "ā¤—ā¤ŋā¤° ā¤œā¤žā¤¨ā¤ž", + "Collapse_Embedded_Media_By_Default": "ā¤ā¤‚ā¤ŦāĨ‡ā¤ĄāĨ‡ā¤Ą ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤•āĨ‹ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤¸ā¤‚ā¤•āĨā¤ˇā¤ŋā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "color": "ā¤°ā¤‚ā¤—", + "Color": "ā¤°ā¤‚ā¤—", + "Colors": "ā¤°ā¤‚ā¤— ā¤•āĨ€", + "Commands": "ā¤†ā¤ĻāĨ‡ā¤ļ", + "Comment_to_leave_on_closing_session": "ā¤¸ā¤Žā¤žā¤Ēā¤¨ ā¤¸ā¤¤āĨā¤° ā¤Ēā¤° ā¤œā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€ ā¤•ā¤°āĨ‡ā¤‚", + "Comment": "ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€", + "Common_Access": "ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯ ā¤Ēā¤šāĨā¤‚ā¤š", + "Commit": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤Ŧā¤ĻāĨā¤§", + "Community": "ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯", + "Free_Edition": "ā¤¨ā¤ŋā¤ļāĨā¤˛āĨā¤• ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ", + "Composer_not_available_phone_calls": "ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤•āĨ‰ā¤˛ ā¤Ēā¤° ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "Condensed": "ā¤¸ā¤‚ā¤˜ā¤¨ā¤ŋā¤¤", + "Condition": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "Commit_details": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤Ŧā¤ĻāĨā¤§ ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ", + "Completed": "ā¤ĒāĨā¤°ā¤ž ā¤šāĨ‹ā¤¨ā¤žāĨ¤", + "Computer": "ā¤•ā¤‚ā¤ĒāĨā¤¯āĨ‚ā¤Ÿā¤°", + "Conference_call_apps": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤ā¤ĒāĨā¤¸", + "Conference_call_has_ended": "_ā¤•āĨ‰ā¤˛ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž ā¤šāĨˆ._", + "Conference_name": "ā¤¸ā¤ŽāĨā¤ŽāĨ‡ā¤˛ā¤¨ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Configure_Incoming_Mail_IMAP": "ā¤‡ā¤¨ā¤•ā¤Žā¤ŋā¤‚ā¤— ā¤ŽāĨ‡ā¤˛ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚ (IMAP)", + "Configure_Outgoing_Mail_SMTP": "ā¤†ā¤‰ā¤Ÿā¤—āĨ‹ā¤‡ā¤‚ā¤— ā¤ŽāĨ‡ā¤˛ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚ (ā¤ā¤¸ā¤ā¤Žā¤ŸāĨ€ā¤ĒāĨ€)", + "Configure_video_conference_to_make_it_available_on_this_workspace": "ā¤‡ā¤¸āĨ‡ ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤•ā¤°ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Confirm": "ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°ā¤¨ā¤ž", + "Confirm_new_encryption_password": "ā¤¨ā¤¯āĨ‡ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°āĨ‡ā¤‚", + "Confirm_new_password": "ā¤¨ā¤ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°āĨ‡ā¤‚", + "Confirm_New_Password_Placeholder": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¨ā¤¯ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚...", + "Confirm_password": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•āĨ€ā¤œā¤ŋā¤¯āĨ‡", + "Confirm_your_password": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°āĨ‡ā¤‚", + "Confirm_configuration_update_description": "ā¤Ēā¤šā¤šā¤žā¤¨ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤”ā¤° ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ŧā¤°ā¤•ā¤°ā¤žā¤° ā¤°ā¤–ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤

    ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ : ā¤¯ā¤Ļā¤ŋ ā¤¯ā¤š ā¤ĩā¤žā¤¸āĨā¤¤ā¤ĩ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤šāĨˆ, ā¤¤āĨ‹ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤‚ ā¤”ā¤° ā¤¸ā¤‚ā¤šā¤žā¤° ā¤ĩā¤ŋā¤ĩā¤žā¤ĻāĨ‹ā¤‚ ā¤¸āĨ‡ ā¤Ŧā¤šā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¨ā¤ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Confirm_configuration_update": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨ ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°āĨ‡ā¤‚", + "Confirm_new_workspace_description": "ā¤Ēā¤šā¤šā¤žā¤¨ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤”ā¤° ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤

    ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ : ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤Ēā¤° ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩā¤ŋā¤¤ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Confirm_new_workspace": "ā¤¨ā¤ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°āĨ‡ā¤‚", + "Confirmation": "ā¤ĒāĨā¤ˇāĨā¤ŸāĨ€ā¤•ā¤°ā¤Ŗ", + "Configure_video_conference": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Configuration_update_confirmed": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨ ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•āĨ€ ā¤—ā¤ˆ", + "Configuration_update": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨", + "Connect": "ā¤œāĨ‹ā¤Ąā¤ŧā¤¨ā¤ž", + "Connected": "ā¤œāĨā¤Ąā¤ŧāĨ‡ ā¤šāĨā¤", + "Connect_SSL_TLS": "ā¤ā¤¸ā¤ā¤¸ā¤ā¤˛/ā¤ŸāĨ€ā¤ā¤˛ā¤ā¤¸ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧāĨ‡ā¤‚", + "Connection_Closed": "ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤Ŧā¤‚ā¤Ļ", + "Connection_Reset": "ā¤¸ā¤ŽāĨā¤Ŧā¤¨āĨā¤§ ā¤Ģā¤ŋā¤°ā¤¸āĨ‡ ā¤Ŧā¤¨ā¤žā¤¨ā¤ž", + "Connection_error": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "Connection_failed": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤ĩā¤ŋā¤Ģā¤˛", + "Connectivity_Services": "ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿā¤ŋā¤ĩā¤ŋā¤ŸāĨ€ ā¤¸āĨ‡ā¤ĩā¤žā¤ā¤", + "Consulting": "CONSULTING", + "Consumer_Packaged_Goods": "ā¤‰ā¤Ēā¤­āĨ‹ā¤•āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨˆā¤• ā¤•āĨ€ ā¤—ā¤ˆ ā¤ĩā¤¸āĨā¤¤āĨā¤ā¤‚", + "Contact": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤•", + "Contacts": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤•", + "Contact_Name": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤¨ā¤žā¤Ž", + "Contact_Center": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•āĨ‡ā¤‚ā¤ĻāĨā¤°", + "Contact_Chat_History": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤šāĨˆā¤Ÿ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸", + "Contains_Security_Fixes": "ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤¸āĨā¤§ā¤žā¤° ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨˆā¤‚", + "Contact_Manager": "ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤• ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Contact_not_found": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "Contact_Profile": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Contact_Info": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Content": "ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€", + "Continue": "ā¤œā¤žā¤°āĨ€ ā¤°ā¤–ā¤¨ā¤ž", + "Continuous_sound_notifications_for_new_livechat_room": "ā¤¨ā¤ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¨ā¤ŋā¤°ā¤‚ā¤¤ā¤° ā¤§āĨā¤ĩā¤¨ā¤ŋ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚", + "convert-team": "ā¤ŸāĨ€ā¤Ž ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "convert-team_description": "ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Conversation": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", + "Conversation_closed": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤Ŧā¤‚ā¤Ļ: {{comment}}.", + "Conversation_closed_without_comment": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤Ŧā¤‚ā¤Ļ", + "Conversation_closing_tags": "ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤¸ā¤Žā¤žā¤Ēā¤¨ ā¤ŸāĨˆā¤—", + "Conversation_closing_tags_description": "ā¤¸ā¤Žā¤žā¤Ēā¤¨ ā¤ŸāĨˆā¤— ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤¸ā¤Žā¤žā¤Ēā¤¨ ā¤Ēā¤° ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤ĒāĨ‹ā¤‚ ā¤•āĨ‹ ā¤…ā¤¸ā¤žā¤‡ā¤¨ ā¤•ā¤ŋā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "Conversation_finished": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤–ā¤ŧā¤¤āĨā¤Ž", + "Conversation_finished_message": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Conversation_finished_text": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤Ēā¤žā¤ ", + "conversation_with_s": "%s ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", + "Conversations": "ā¤Ŧā¤žā¤¤ ā¤šā¤ŋā¤Ÿ", + "Conversations_per_day": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤Ļā¤ŋā¤¨ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", + "Convert": "ā¤Ŧā¤Ļā¤˛ā¤¨ā¤ž", + "Convert_Ascii_Emojis": "ASCII ā¤•āĨ‹ ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚", + "Convert_to_channel": "ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤•ā¤¨ā¤ĩā¤°āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Converting_channel_to_a_team": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤ā¤• ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤¸ā¤­āĨ€ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤°ā¤–ā¤ž ā¤œā¤žā¤ā¤—ā¤ž.", + "Converted__roomName__to_team": "#{{roomName}} ā¤•āĨ‹ ā¤ā¤• ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Converted__roomName__to_channel": "#{{roomName}} ā¤•āĨ‹ ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Converted__roomName__to_a_team": "#{{roomName}} ā¤•āĨ‹ ā¤ā¤• ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Converted__roomName__to_a_channel": "#{{roomName}} ā¤•āĨ‹ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Converting_team_to_channel": "ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž", + "Copied": "ā¤•āĨ‰ā¤ĒāĨ€ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Copy": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛ā¤ŋā¤Ēā¤ŋ", + "Copy_text": "ā¤Ēā¤žā¤  ā¤•āĨ‰ā¤ĒāĨ€ ā¤•ā¤°āĨ‡ā¤‚", + "Copy_to_clipboard": "ā¤•āĨā¤˛ā¤ŋā¤Ēā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤Ēā¤° ā¤•āĨ‰ā¤ĒāĨ€ ā¤•ā¤°āĨ‡ā¤‚", + "COPY_TO_CLIPBOARD": "ā¤•āĨā¤˛ā¤ŋā¤Ēā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤Ēā¤° ā¤•āĨ‰ā¤ĒāĨ€ ā¤•ā¤°āĨ‡ā¤‚", + "could-not-access-webdav": "WebDAV ā¤¤ā¤• ā¤¨ā¤šāĨ€ā¤‚ ā¤Ēā¤šāĨā¤‚ā¤š ā¤¸ā¤•ā¤ž", + "Count": "count ā¤•ā¤°ā¤¨ā¤ž", + "Counters": "ā¤•ā¤žā¤‰ā¤‚ā¤Ÿā¤°", + "Country": "ā¤ĻāĨ‡ā¤ļ", + "Country_Afghanistan": "ā¤…ā¤Ģā¤ŧā¤—ā¤ŧā¤žā¤¨ā¤ŋā¤¸āĨā¤¤ā¤žā¤¨", + "Country_Albania": "ā¤…ā¤˛āĨā¤Ŧā¤žā¤¨ā¤ŋā¤¯ā¤ž", + "Country_Algeria": "ā¤ā¤˛ā¤œāĨ€ā¤°ā¤ŋā¤¯ā¤ž", + "Country_American_Samoa": "ā¤…ā¤ŽāĨ‡ā¤°ā¤ŋā¤•āĨ€ ā¤¸ā¤ŽāĨ‹ā¤†", + "Country_Andorra": "ā¤ā¤‚ā¤ĄāĨ‹ā¤°ā¤ž", + "Country_Angola": "ā¤…ā¤‚ā¤—āĨ‹ā¤˛ā¤ž", + "Country_Anguilla": "ā¤ā¤‚ā¤—āĨā¤‡ā¤˛ā¤ž", + "Country_Antarctica": "ā¤…ā¤‚ā¤Ÿā¤žā¤°āĨā¤•ā¤Ÿā¤ŋā¤•ā¤ž", + "Country_Antigua_and_Barbuda": "ā¤…ā¤ŖāĨā¤ŸāĨ€ā¤—āĨā¤† ā¤”ā¤° ā¤Ŧā¤žā¤°ā¤ŦāĨ‚ā¤Ąā¤ž", + "Country_Argentina": "ā¤…ā¤°āĨā¤œāĨ‡ā¤‚ā¤ŸāĨ€ā¤¨ā¤ž", + "Country_Armenia": "ā¤†ā¤°āĨā¤ŽāĨ€ā¤¨ā¤ŋā¤¯ā¤ž", + "Country_Aruba": "ā¤…ā¤°āĨ‚ā¤Ŧā¤ž", + "Country_Australia": "ā¤‘ā¤¸āĨā¤ŸāĨā¤°āĨ‡ā¤˛ā¤ŋā¤¯ā¤ž", + "Country_Austria": "ā¤‘ā¤¸āĨā¤ŸāĨā¤°ā¤ŋā¤¯ā¤ž", + "Country_Azerbaijan": "ā¤†ā¤œā¤ŧā¤°ā¤Ŧā¤žā¤‡ā¤œā¤žā¤¨", + "Country_Bahamas": "ā¤Ŧā¤šā¤žā¤Žā¤ž", + "Country_Bahrain": "ā¤Ŧā¤šā¤°āĨ€ā¤¨", + "Country_Bangladesh": "ā¤Ŧā¤žā¤‚ā¤—āĨā¤˛ā¤žā¤ĻāĨ‡ā¤ļ", + "Country_Barbados": "ā¤Ŧā¤žā¤°ā¤Ŧā¤žā¤ĄāĨ‹ā¤¸", + "Country_Belarus": "ā¤ŦāĨ‡ā¤˛āĨ‹ā¤°āĨ‚ā¤¸", + "Country_Belgium": "ā¤ŦāĨ‡ā¤˛āĨā¤œā¤ŋā¤¯ā¤Ž", + "Country_Belize": "ā¤ŦāĨ‡ā¤˛āĨ€ā¤œā¤ŧ", + "Country_Benin": "ā¤ŦāĨ‡ā¤¨ā¤ŋā¤¨", + "Country_Bermuda": "ā¤Ŧā¤°ā¤ŽāĨ‚ā¤Ąā¤ž", + "Country_Bhutan": "ā¤­āĨ‚ā¤Ÿā¤žā¤¨", + "Country_Bolivia": "ā¤ŦāĨ‹ā¤˛āĨ€ā¤ĩā¤ŋā¤¯ā¤ž", + "Country_Bosnia_and_Herzegovina": "ā¤ŦāĨ‹ā¤¸āĨā¤¨ā¤ŋā¤¯ā¤ž ā¤”ā¤° ā¤šā¤°āĨā¤œāĨ‡ā¤—āĨ‹ā¤ĩā¤ŋā¤¨ā¤ž", + "Country_Botswana": "ā¤ŦāĨ‹ā¤¤āĨā¤¸ā¤ĩā¤žā¤¨ā¤ž", + "Country_Bouvet_Island": "ā¤Ŧā¤žā¤‰ā¤ĩāĨ‡ā¤Ÿ ā¤ĻāĨā¤ĩāĨ€ā¤Ē", + "Country_Brazil": "ā¤ŦāĨā¤°ā¤žā¤œā¤ŧā¤ŋā¤˛", + "Country_British_Indian_Ocean_Territory": "ā¤ŦāĨā¤°ā¤ŋā¤ŸāĨ‡ā¤¨ ā¤”ā¤° ā¤­ā¤žā¤°ā¤¤āĨ€ā¤¯ ā¤¸ā¤ŽāĨā¤ĻāĨā¤°āĨ€ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Country_Brunei_Darussalam": "ā¤ŦāĨā¤°āĨ‚ā¤¨āĨ‡ā¤‡āĨā¤° ā¤Ļā¤žā¤°ā¤ā¤¸āĨā¤¸ā¤˛ā¤žā¤Ž", + "Country_Bulgaria": "ā¤ŦāĨā¤˛āĨā¤—ā¤žā¤°ā¤ŋā¤¯ā¤ž", + "Country_Burkina_Faso": "ā¤ŦāĨā¤°āĨā¤•ā¤ŋā¤¨ā¤ž ā¤Ģā¤žā¤¸āĨ‹", + "Country_Burundi": "ā¤ŦāĨā¤¸āĨā¤°āĨā¤¨āĨā¤ĻāĨ€", + "Country_Cambodia": "ā¤•ā¤‚ā¤ŦāĨ‹ā¤Ąā¤ŋā¤¯ā¤ž", + "Country_Cameroon": "ā¤•āĨˆā¤Žā¤°āĨ‚ā¤¨", + "Country_Canada": "ā¤•ā¤¨ā¤žā¤Ąā¤ž", + "Country_Cape_Verde": "ā¤•āĨ‡ā¤Ē ā¤ĩā¤°āĨā¤Ą", + "Country_Cayman_Islands": "ā¤•āĨ‡ā¤Žā¤¨ ā¤ĻāĨā¤ĩāĨ€ā¤Ēā¤¸ā¤ŽāĨ‚ā¤š", + "Country_Central_African_Republic": "ā¤•āĨ‡ā¤¨āĨā¤ĻāĨā¤°āĨ€ā¤¯ ā¤…ā¤Ģā¤ŧāĨā¤°āĨ€ā¤•āĨ€ ā¤—ā¤Ŗā¤°ā¤žā¤œāĨā¤¯", + "Country_Chad": "ā¤•ā¤žā¤—ā¤ŧā¤œā¤ŧ ā¤•ā¤ž ā¤ŸāĨā¤•ā¤Ąā¤ŧā¤ž", + "Country_Chile": "ā¤šā¤ŋā¤˛āĨ€", + "Country_China": "ā¤šāĨ€ā¤¨", + "Country_Christmas_Island": "ā¤•āĨā¤°ā¤ŋā¤¸ā¤Žā¤¸ ā¤ĻāĨā¤ĩāĨ€ā¤Ē", + "Country_Cocos_Keeling_Islands": "ā¤•āĨ‹ā¤•āĨ‹ā¤¸ (ā¤•āĨ€ā¤˛ā¤ŋā¤‚ā¤—) ā¤ĻāĨā¤ĩāĨ€ā¤Ē ā¤¸ā¤ŽāĨ‚ā¤š", + "Country_Colombia": "ā¤•āĨ‹ā¤˛ā¤‚ā¤Ŧā¤ŋā¤¯ā¤ž", + "Country_Comoros": "ā¤•āĨ‹ā¤ŽāĨ‹ā¤°āĨ‹ā¤¸", + "Country_Congo": "ā¤•ā¤žā¤‚ā¤—āĨ‹", + "Country_Congo_The_Democratic_Republic_of_The": "ā¤•ā¤žā¤‚ā¤—āĨ‹, ā¤˛āĨ‹ā¤•ā¤¤ā¤žā¤‚ā¤¤āĨā¤°ā¤ŋā¤• ā¤—ā¤Ŗā¤°ā¤žā¤œāĨā¤¯", + "Country_Cook_Islands": "ā¤•āĨā¤• ā¤ĻāĨā¤ĩāĨ€ā¤Ēā¤¸ā¤ŽāĨ‚ā¤š", + "Country_Costa_Rica": "ā¤•āĨ‹ā¤¸āĨā¤Ÿā¤ž ā¤°ā¤ŋā¤•ā¤ž", + "Country_Cote_Divoire": "ā¤šā¤žā¤ĨāĨ€ā¤Ļā¤žā¤‚ā¤¤ ā¤•ā¤ž ā¤•ā¤ŋā¤¨ā¤žā¤°ā¤ž", + "Country_Croatia": "ā¤•āĨā¤°āĨ‹ā¤ā¤ļā¤ŋā¤¯ā¤ž", + "Country_Cuba": "ā¤•āĨā¤¯āĨ‚ā¤Ŧā¤ž", + "Country_Cyprus": "ā¤¸ā¤žā¤‡ā¤ĒāĨā¤°ā¤¸", + "Country_Czech_Republic": "ā¤šāĨ‡ā¤• ā¤°ā¤ŋā¤Ēā¤ŦāĨā¤˛ā¤ŋā¤•", + "Country_Denmark": "ā¤ĄāĨ‡ā¤¨ā¤Žā¤žā¤°āĨā¤•", + "Country_Djibouti": "ā¤œā¤ŧā¤ŋā¤ŦāĨ‚ā¤ŸāĨ€", + "Country_Dominica": "ā¤ĄāĨ‹ā¤Žā¤ŋā¤¨ā¤ŋā¤•ā¤ž", + "Country_Dominican_Republic": "ā¤ĄāĨ‹ā¤Žā¤ŋā¤¨ā¤ŋā¤•ā¤¨ ā¤—ā¤Ŗā¤°ā¤žā¤œāĨā¤¯", + "Country_Ecuador": "ā¤‡ā¤•āĨā¤ĩāĨ‡ā¤ĄāĨ‹ā¤°", + "Country_Egypt": "ā¤Žā¤ŋā¤¸āĨā¤°", + "Country_El_Salvador": "ā¤…ā¤˛ ā¤¸ā¤žā¤˛āĨā¤ĩā¤žā¤ĄāĨ‹ā¤°", + "Country_Equatorial_Guinea": "ā¤­āĨ‚ā¤Žā¤§āĨā¤¯ā¤ĩā¤°āĨā¤¤āĨ€ ā¤—ā¤ŋā¤¨āĨ€", + "Country_Eritrea": "ā¤‡ā¤°ā¤ŋā¤ŸāĨā¤°ā¤ŋā¤¯ā¤ž", + "Country_Estonia": "ā¤ā¤¸āĨā¤¤āĨ‹ā¤¨ā¤ŋā¤¯ā¤ž", + "Country_Ethiopia": "ā¤‡ā¤Ĩā¤ŋā¤¯āĨ‹ā¤Ēā¤ŋā¤¯ā¤ž", + "Country_Falkland_Islands_Malvinas": "ā¤Ģā¤ŧāĨ‰ā¤•ā¤˛āĨˆā¤‚ā¤Ą ā¤ĻāĨā¤ĩāĨ€ā¤Ē ā¤¸ā¤ŽāĨ‚ā¤š (ā¤Žā¤žā¤˛āĨā¤ĩā¤ŋā¤¨ā¤žā¤¸)", + "Country_Faroe_Islands": "ā¤Ģā¤ŧāĨˆā¤°āĨ‹ ā¤ĻāĨā¤ĩāĨ€ā¤Ē", + "Country_Fiji": "ā¤Ģā¤ŧā¤ŋā¤œāĨ€", + "Country_Finland": "ā¤Ģā¤ŋā¤¨ā¤˛āĨˆā¤‚ā¤Ą", + "Country_France": "ā¤ĢāĨā¤°ā¤žā¤‚ā¤¸", + "Country_French_Guiana": "ā¤ĢāĨā¤°āĨ‡ā¤‚ā¤š ā¤—ā¤¯ā¤žā¤¨ā¤ž", + "Country_French_Polynesia": "ā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤š ā¤ĒāĨ‹ā¤˛ā¤ŋā¤¨āĨ‡ā¤ļā¤ŋā¤¯ā¤ž", + "Country_French_Southern_Territories": "ā¤Ļā¤•āĨā¤ˇā¤ŋā¤ŖāĨ€ ā¤ĢāĨā¤°ā¤žā¤ā¤¸ā¤ŋā¤¸āĨ€ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Country_Gabon": "ā¤—āĨˆā¤ŦāĨ‰ā¤¨", + "Country_Gambia": "ā¤—ā¤žā¤ŽāĨā¤Ŧā¤ŋā¤¯ā¤ž", + "Country_Georgia": "ā¤œāĨ‰ā¤°āĨā¤œā¤ŋā¤¯ā¤ž", + "Country_Germany": "ā¤œā¤°āĨā¤Žā¤¨āĨ€", + "Country_Ghana": "ā¤˜ā¤žā¤¨ā¤ž", + "Country_Gibraltar": "ā¤œā¤ŋā¤ŦāĨā¤°ā¤žā¤˛āĨā¤Ÿā¤°", + "Country_Greece": "ā¤¯āĨ‚ā¤¨ā¤žā¤¨", + "Country_Greenland": "ā¤—āĨā¤°āĨ€ā¤¨ā¤˛āĨˆā¤‚ā¤Ą", + "Country_Grenada": "ā¤—āĨā¤°āĨ‡ā¤¨āĨ‡ā¤Ąā¤ž", + "Country_Guadeloupe": "ā¤—āĨā¤ĩā¤žā¤ĄāĨ‡ā¤˛āĨ‹ā¤Ē", + "Country_Guam": "ā¤—āĨā¤†ā¤Ž", + "Country_Guatemala": "ā¤—āĨā¤ĩā¤žā¤ŸāĨ‡ā¤Žā¤žā¤˛ā¤ž", + "Country_Guinea": "ā¤—ā¤ŋā¤¨āĨ€", + "Country_Guinea_bissau": "ā¤—ā¤ŋā¤¨āĨ€-ā¤Ŧā¤ŋā¤¸ā¤žā¤Š", + "Country_Guyana": "ā¤—āĨā¤¯ā¤žā¤¨ā¤ž", + "Country_Haiti": "ā¤šāĨˆā¤¤āĨ€", + "Country_Heard_Island_and_Mcdonald_Islands": "ā¤šā¤°āĨā¤Ą ā¤ĻāĨā¤ĩāĨ€ā¤Ē ā¤”ā¤° ā¤ŽāĨˆā¤•ā¤ĄāĨ‹ā¤¨ā¤žā¤˛āĨā¤Ą ā¤ĻāĨā¤ĩāĨ€ā¤Ē ā¤¸ā¤ŽāĨ‚ā¤š", + "Country_Holy_See_Vatican_City_State": "ā¤šāĨ‹ā¤˛āĨ€ ā¤¸āĨ€ (ā¤ĩāĨ‡ā¤Ÿā¤ŋā¤•ā¤¨ ā¤¸ā¤ŋā¤ŸāĨ€ ā¤°ā¤žā¤œāĨā¤¯)", + "Country_Honduras": "ā¤šāĨ‹ā¤‚ā¤ĄāĨā¤°ā¤¸", + "Country_Hong_Kong": "ā¤šā¤žā¤‚ā¤—ā¤•ā¤žā¤‚ā¤—", + "Country_Hungary": "ā¤šā¤‚ā¤—ā¤°āĨ€", + "Country_Iceland": "ā¤†ā¤‡ā¤¸ā¤˛āĨˆā¤‚ā¤Ą", + "Country_India": "ā¤­ā¤žā¤°ā¤¤", + "Country_Indonesia": "ā¤‡ā¤‚ā¤ĄāĨ‹ā¤¨āĨ‡ā¤ļā¤ŋā¤¯ā¤ž", + "Country_Iran_Islamic_Republic_of": "ā¤ˆā¤°ā¤žā¤¨ (ā¤‡ā¤¸āĨā¤˛ā¤žā¤Žā¤ŋā¤• ā¤°ā¤ŋā¤Ēā¤ŦāĨā¤˛ā¤ŋā¤• ā¤‘ā¤Ģ", + "Country_Iraq": "ā¤‡ā¤°ā¤žā¤•", + "Country_Ireland": "ā¤†ā¤¯ā¤°ā¤˛āĨˆā¤‚ā¤Ą", + "Country_Israel": "ā¤‡ā¤œā¤°ā¤žā¤‡ā¤˛", + "Country_Italy": "ā¤‡ā¤Ÿā¤˛āĨ€", + "Country_Jamaica": "ā¤œā¤ŽāĨˆā¤•ā¤ž", + "Country_Japan": "ā¤œā¤žā¤Ēā¤žā¤¨", + "Country_Jordan": "ā¤œāĨ‰ā¤°āĨā¤Ąā¤¨", + "Country_Kazakhstan": "ā¤•ā¤œā¤žā¤–ā¤¸āĨā¤¤ā¤žā¤¨", + "Country_Kenya": "ā¤•āĨ‡ā¤¨āĨā¤¯ā¤ž", + "Country_Kiribati": "ā¤•ā¤ŋā¤°ā¤ŋā¤Ŧā¤žā¤¤āĨ€", + "Country_Korea_Democratic_Peoples_Republic_of": "ā¤•āĨ‹ā¤°ā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤œā¤žā¤¤ā¤žā¤¤āĨā¤°ā¤ŋā¤• ā¤œā¤¨ā¤ĩā¤žā¤ĻāĨ€ ā¤—ā¤Ŗā¤¤ā¤‚ā¤¤āĨā¤°", + "Country_Korea_Republic_of": "ā¤•āĨ‹ā¤°ā¤ŋā¤¯ā¤ž ā¤—ā¤Ŗā¤°ā¤žā¤œāĨā¤¯", + "Country_Kuwait": "ā¤•āĨā¤ĩāĨˆā¤Ÿ", + "Country_Kyrgyzstan": "ā¤•ā¤ŋā¤°āĨā¤—ā¤ŋā¤œā¤ŧā¤¸āĨā¤¤ā¤žā¤¨", + "Country_Lao_Peoples_Democratic_Republic": "ā¤˛ā¤žā¤“ ā¤ĒāĨ€ā¤ĒāĨā¤˛āĨā¤¸ ā¤ĄāĨ‡ā¤ŽāĨ‹ā¤•āĨā¤°āĨ‡ā¤Ÿā¤ŋā¤• ā¤°ā¤ŋā¤Ēā¤ŦāĨā¤˛ā¤ŋā¤•", + "Country_Latvia": "ā¤˛ā¤žā¤¤ā¤ĩā¤ŋā¤¯ā¤ž", + "Country_Lebanon": "ā¤˛āĨ‡ā¤Ŧā¤¨ā¤žā¤¨", + "Country_Lesotho": "ā¤˛ā¤ŋā¤¸āĨ‹ā¤ŸāĨ‹", + "Country_Liberia": "ā¤˛ā¤žā¤‡ā¤ŦāĨ‡ā¤°ā¤ŋā¤¯ā¤ž", + "Country_Libyan_Arab_Jamahiriya": "ā¤˛āĨ€ā¤Ŧā¤ŋā¤¯ā¤ž ā¤•ā¤ž ā¤…ā¤°ā¤Ŧ ā¤œā¤Žā¤šā¤ŋā¤°ā¤ŋā¤¯ā¤ž", + "Country_Liechtenstein": "ā¤˛ā¤ŋā¤•ā¤ŸāĨ‡ā¤‚ā¤¸āĨā¤Ÿā¤žā¤‡ā¤¨", + "Country_Lithuania": "ā¤˛ā¤ŋā¤ĨāĨā¤†ā¤¨ā¤ŋā¤¯ā¤ž", + "Country_Luxembourg": "ā¤˛ā¤•āĨā¤¸ā¤Žā¤Ŧā¤°āĨā¤—", + "Country_Macao": "ā¤Žā¤•ā¤žā¤“", + "Country_Macedonia_The_Former_Yugoslav_Republic_of": "ā¤ŽāĨˆā¤¸āĨ‡ā¤ĄāĨ‹ā¤¨ā¤ŋā¤¯ā¤ž, ā¤ĒāĨ‚ā¤°āĨā¤ĩ ā¤¯āĨ‚ā¤—āĨ‹ā¤¸āĨā¤˛ā¤žā¤ĩ ā¤—ā¤Ŗā¤°ā¤žā¤œāĨā¤¯", + "Country_Madagascar": "ā¤ŽāĨ‡ā¤Ąā¤žā¤—ā¤žā¤¸āĨā¤•ā¤°", + "Country_Malawi": "ā¤Žā¤˛ā¤žā¤ĩāĨ€", + "Country_Malaysia": "ā¤Žā¤˛āĨ‡ā¤ļā¤ŋā¤¯ā¤ž", + "Country_Maldives": "ā¤Žā¤žā¤˛ā¤ĻāĨ€ā¤ĩ", + "Country_Mali": "ā¤ĩāĨ‡ ā¤ĨāĨ‡", + "Country_Malta": "ā¤Žā¤žā¤˛āĨā¤Ÿā¤ž", + "Country_Marshall_Islands": "ā¤Žā¤žā¤°āĨā¤ļā¤˛ ā¤ĻāĨā¤ĩāĨ€ā¤Ēā¤¸ā¤ŽāĨ‚ā¤š", + "Country_Martinique": "ā¤Žā¤žā¤°āĨā¤ŸāĨ€ā¤¨ā¤ŋā¤•", + "Country_Mauritania": "ā¤ŽāĨ‰ā¤°ā¤ŋā¤Ÿā¤žā¤¨ā¤ŋā¤¯ā¤ž", + "Country_Mauritius": "ā¤ŽāĨ‰ā¤°āĨ€ā¤ļā¤¸", + "Country_Mayotte": "ā¤ŽāĨˆā¤¯ā¤Ÿ", + "Country_Mexico": "ā¤ŽāĨ‡ā¤•āĨā¤¸ā¤ŋā¤•āĨ‹", + "Country_Micronesia_Federated_States_of": "ā¤Žā¤žā¤‡ā¤•āĨā¤°āĨ‹ā¤¨āĨ‡ā¤ļā¤ŋā¤¯ā¤ž, ā¤¸ā¤‚ā¤˜āĨ€ā¤¯ ā¤°ā¤žā¤œāĨā¤¯", + "Country_Moldova_Republic_of": "ā¤ŽāĨ‹ā¤˛āĨā¤ĻāĨ‹ā¤ĩā¤ž, ā¤—ā¤Ŗā¤°ā¤žā¤œāĨā¤¯", + "Country_Monaco": "ā¤ŽāĨ‹ā¤¨ā¤žā¤•āĨ‹", + "Country_Mongolia": "ā¤Žā¤‚ā¤—āĨ‹ā¤˛ā¤ŋā¤¯ā¤ž", + "Country_Montserrat": "ā¤ŽāĨ‹ā¤‚ā¤ŸāĨ‡ā¤¸āĨ‡ā¤°ā¤žā¤Ÿ", + "Country_Morocco": "ā¤ŽāĨ‹ā¤°ā¤•āĨā¤•āĨ‹", + "Country_Mozambique": "ā¤ŽāĨ‹ā¤œā¤ŧā¤žā¤ŽāĨā¤Ŧā¤ŋā¤•", + "Country_Myanmar": "ā¤ŽāĨā¤¯ā¤žā¤‚ā¤Žā¤žā¤°", + "Country_Namibia": "ā¤¨ā¤žā¤Žā¤ŋā¤Ŧā¤ŋā¤¯ā¤ž", + "Country_Nauru": "ā¤¨ā¤žā¤‰ā¤°āĨ‚", + "Country_Nepal": "ā¤¨āĨ‡ā¤Ēā¤žā¤˛", + "Country_Netherlands": "ā¤¨āĨ€ā¤Ļā¤°ā¤˛āĨˆā¤‚ā¤Ą", + "Country_Netherlands_Antilles": "ā¤¨āĨ€ā¤Ļā¤°ā¤˛āĨˆā¤‚ā¤ĄāĨā¤¸ ā¤ā¤‚ā¤Ÿā¤žā¤‡ā¤˛āĨā¤¸", + "If_you_dont_have_one_send_an_email_to_omni_rocketchat_to_get_yours": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤•āĨ‹ā¤ˆ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ ā¤¤āĨ‹ ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ [omni@rocket.chat](mailto:omni@rocket.chat) ā¤Ēā¤° ā¤ā¤• ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œāĨ‡ā¤‚āĨ¤", + "Country_New_Caledonia": "ā¤¨ā¤¯ā¤ž ā¤•āĨ‡ā¤˛ā¤ĄāĨ‹ā¤¨ā¤ŋā¤¯ā¤ž", + "Country_New_Zealand": "ā¤¨āĨā¤¯āĨ‚ā¤œā¤ŧāĨ€ā¤˛āĨˆā¤‚ā¤Ą", + "Country_Nicaragua": "ā¤¨ā¤ŋā¤•ā¤žā¤°ā¤žā¤—āĨā¤†", + "Country_Niger": "ā¤¨ā¤žā¤‡ā¤œā¤°", + "Country_Nigeria": "ā¤¨ā¤žā¤‡ā¤œāĨ€ā¤°ā¤ŋā¤¯ā¤ž", + "Country_Niue": "ā¤¨ā¤ŋā¤¯āĨ‚", + "Country_Norfolk_Island": "ā¤¨āĨ‰ā¤°ā¤Ģā¤ŧāĨ‰ā¤• ā¤ĻāĨā¤ĩāĨ€ā¤Ē", + "Country_Northern_Mariana_Islands": "ā¤‰ā¤¤āĨā¤¤ā¤°āĨ€ ā¤Žā¤°āĨ€ā¤¯ā¤žā¤¨ā¤ž ā¤ĻāĨā¤ĩāĨ€ā¤Ē ā¤¸ā¤ŽāĨ‚ā¤š", + "Country_Norway": "ā¤¨āĨ‰ā¤°āĨā¤ĩāĨ‡", + "Country_Oman": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤Žā¤¨", + "Country_Pakistan": "ā¤Ēā¤žā¤•ā¤ŋā¤¸āĨā¤¤ā¤žā¤¨", + "Country_Palau": "ā¤Ēā¤˛ā¤žā¤‰", + "Country_Palestinian_Territory_Occupied": "ā¤…ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤Ģā¤ŧā¤ŋā¤˛ā¤ŋā¤¸āĨā¤¤āĨ€ā¤¨ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Country_Panama": "ā¤Ēā¤¨ā¤žā¤Žā¤ž", + "Country_Papua_New_Guinea": "ā¤Ēā¤žā¤ĒāĨā¤† ā¤¨āĨā¤¯āĨ‚ ā¤—ā¤ŋā¤¨āĨ€", + "Country_Paraguay": "ā¤Ēā¤°ā¤žā¤—āĨā¤†", + "Country_Peru": "ā¤ĒāĨ‡ā¤°āĨ‚", + "Country_Philippines": "ā¤Ģā¤ŋā¤˛ā¤ŋā¤ĒāĨ€ā¤‚ā¤¸", + "Country_Pitcairn": "ā¤Ēā¤ŋā¤Ÿā¤•āĨ‡ā¤°āĨā¤¨", + "Country_Poland": "ā¤ĒāĨ‹ā¤˛āĨˆā¤‚ā¤Ą", + "Country_Portugal": "ā¤ĒāĨā¤°āĨā¤¤ā¤—ā¤žā¤˛", + "Country_Puerto_Rico": "ā¤ĒāĨā¤¯āĨ‚ā¤°āĨā¤ŸāĨ‹ ā¤°ā¤ŋā¤•āĨ‹", + "Country_Qatar": "ā¤•ā¤¤ā¤°", + "Country_Reunion": "ā¤°āĨ€ā¤¯āĨ‚ā¤¨ā¤ŋā¤¯ā¤¨", + "Country_Romania": "ā¤°āĨ‹ā¤Žā¤žā¤¨ā¤ŋā¤¯ā¤ž", + "Country_Russian_Federation": "ā¤°āĨ‚ā¤¸āĨ€ ā¤¸ā¤‚ā¤˜", + "Country_Rwanda": "ā¤°ā¤ĩā¤žā¤‚ā¤Ąā¤ž", + "Country_Saint_Helena": "Saint Helena", + "Country_Saint_Kitts_and_Nevis": "ā¤¸ā¤‚ā¤¤ ā¤•ā¤ŋā¤ŸāĨā¤ŸāĨā¤¸ ā¤”ā¤° ā¤¨āĨ‡ā¤ĩā¤ŋā¤¸", + "Country_Saint_Lucia": "ā¤¸āĨ‡ā¤‚ā¤Ÿ ā¤˛āĨ‚ā¤¸ā¤ŋā¤¯ā¤ž", + "Country_Saint_Pierre_and_Miquelon": "ā¤¸āĨ‡ā¤‚ā¤Ÿ ā¤Ēā¤ŋā¤¯ā¤°āĨ‡ ā¤”ā¤° ā¤Žā¤ŋā¤•āĨ‡ā¤˛āĨ‰ā¤¨", + "Country_Saint_Vincent_and_The_Grenadines": "ā¤¸ā¤‚ā¤¤ ā¤ĩā¤ŋā¤‚ā¤¸āĨ‡ā¤‚ā¤Ÿ ā¤…ā¤ā¤Ą ā¤ĨāĨ‡ ā¤—āĨā¤°āĨ‡ā¤¨ā¤ĄāĨ€ā¤¨āĨ‡ā¤¸", + "Country_Samoa": "ā¤¸ā¤ŽāĨ‹ā¤†", + "Country_San_Marino": "ā¤¸āĨˆā¤¨ ā¤Žā¤žā¤°ā¤ŋā¤¨āĨ‹", + "Country_Sao_Tome_and_Principe": "ā¤¸ā¤žā¤“ ā¤ŸāĨ‹ā¤ŽāĨ‡ ā¤”ā¤° ā¤ĒāĨā¤°ā¤ŋā¤‚ā¤¸ā¤ŋā¤ĒāĨ‡", + "Country_Saudi_Arabia": "ā¤¸ā¤Šā¤ĻāĨ€ ā¤…ā¤°ā¤Ŧ", + "Country_Senegal": "ā¤¸āĨ‡ā¤¨āĨ‡ā¤—ā¤˛", + "Country_Serbia_and_Montenegro": "ā¤¸ā¤°āĨā¤Ŧā¤ŋā¤¯ā¤ž ā¤”ā¤° ā¤ŽāĨ‹ā¤‚ā¤ŸāĨ‡ā¤¨āĨ‡ā¤—āĨā¤°āĨ‹", + "inline_code": "ā¤‡ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤•āĨ‹ā¤Ą", + "Country_Seychelles": "ā¤¸āĨ‡ā¤ļā¤˛āĨā¤¸", + "Country_Sierra_Leone": "ā¤¸āĨ‡ā¤°ā¤ž ā¤˛ā¤ŋā¤“ā¤¨", + "Country_Singapore": "ā¤¸ā¤ŋā¤‚ā¤—ā¤žā¤ĒāĨā¤°", + "Country_Slovakia": "ā¤¸āĨā¤˛āĨ‹ā¤ĩā¤žā¤•ā¤ŋā¤¯ā¤ž", + "Country_Slovenia": "ā¤¸āĨā¤˛āĨ‹ā¤ĩāĨ‡ā¤¨ā¤ŋā¤¯ā¤ž", + "Country_Solomon_Islands": "ā¤¸āĨ‹ā¤˛āĨ‹ā¤Žā¤¨ ā¤‡ā¤¸āĨā¤˛āĨˆā¤‚ā¤Ąā¤¸", + "Country_Somalia": "ā¤¸āĨ‹ā¤Žā¤žā¤˛ā¤ŋā¤¯ā¤ž", + "Country_South_Africa": "ā¤Ļā¤•āĨā¤ˇā¤ŋā¤Ŗ ā¤…ā¤ĢāĨā¤°āĨ€ā¤•ā¤ž", + "Country_South_Georgia_and_The_South_Sandwich_Islands": "ā¤Ļā¤•āĨā¤ˇā¤ŋā¤Ŗ ā¤œāĨ‰ā¤°āĨā¤œā¤ŋā¤¯ā¤ž ā¤”ā¤° ā¤Ļā¤•āĨā¤ˇā¤ŋā¤Ŗ ā¤¸āĨˆā¤‚ā¤Ąā¤ĩā¤ŋā¤š ā¤ĻāĨā¤ĩāĨ€ā¤Ē ā¤¸ā¤ŽāĨ‚ā¤š", + "Country_Spain": "ā¤¸āĨā¤ĒāĨ‡ā¤¨", + "Country_Sri_Lanka": "ā¤ļāĨā¤°āĨ€ā¤˛ā¤‚ā¤•ā¤ž", + "Country_Sudan": "ā¤¸āĨ‚ā¤Ąā¤žā¤¨", + "Country_Suriname": "ā¤¸āĨ‚ā¤°āĨ€ā¤¨ā¤žā¤Ž", + "Country_Svalbard_and_Jan_Mayen": "ā¤¸āĨā¤ĩā¤žā¤˛ā¤Ŧā¤žā¤°āĨā¤Ą ā¤”ā¤° ā¤œā¤žā¤¨ ā¤Žā¤žā¤¯āĨ‡ā¤¨", + "Country_Swaziland": "ā¤¸āĨā¤ĩā¤žā¤œāĨ€ā¤˛āĨˆā¤‚ā¤Ą", + "Country_Sweden": "ā¤¸āĨā¤ĩāĨ€ā¤Ąā¤¨", + "Country_Switzerland": "ā¤¸āĨā¤ĩā¤ŋā¤ŸāĨā¤œā¤ŧā¤°ā¤˛āĨˆā¤‚ā¤Ą", + "Country_Syrian_Arab_Republic": "ā¤¸āĨ€ā¤°ā¤ŋā¤¯ā¤žā¤ˆ ā¤…ā¤°ā¤Ŧ ā¤—ā¤Ŗā¤°ā¤žā¤œāĨā¤¯", + "Country_Taiwan_Province_of_China": "ā¤¤ā¤žā¤‡ā¤ĩā¤žā¤¨, ā¤šāĨ€ā¤¨ ā¤ĒāĨā¤°ā¤žā¤‚ā¤¤", + "Country_Tajikistan": "ā¤¤ā¤œā¤žā¤•ā¤ŋā¤¸āĨā¤¤ā¤žā¤¨", + "Country_Tanzania_United_Republic_of": "ā¤¤ā¤‚ā¤œā¤žā¤¨ā¤ŋā¤¯ā¤ž, ā¤¸ā¤‚ā¤¯āĨā¤•āĨā¤¤ ā¤—ā¤Ŗā¤°ā¤žā¤œāĨā¤¯", + "Country_Thailand": "ā¤Ĩā¤žā¤ˆā¤˛āĨˆā¤‚ā¤Ą", + "Country_Timor_leste": "ā¤¤ā¤ŋā¤ŽāĨ‹ā¤° ā¤¨āĨ‡ ā¤Ēā¤ĸā¤ŧā¤ž", + "Country_Togo": "ā¤šā¤˛ ā¤ĻāĨ‡ā¤¨ā¤ž", + "Country_Tokelau": "ā¤ŸāĨ‹ā¤•āĨ‡ā¤˛ā¤žā¤Š", + "Country_Tonga": "ā¤Ēā¤šāĨā¤ā¤šā¤ž", + "Country_Trinidad_and_Tobago": "ā¤¤āĨā¤°ā¤ŋā¤¨ā¤ŋā¤Ļā¤žā¤Ļ ā¤”ā¤° ā¤ŸāĨ‹ā¤ŦāĨˆā¤—āĨ‹", + "Country_Tunisia": "ā¤ŸāĨā¤¯āĨ‚ā¤¨āĨ€ā¤ļā¤ŋā¤¯ā¤ž", + "Country_Turkey": "ā¤Ÿā¤°āĨā¤•āĨ€", + "Country_Turkmenistan": "ā¤¤āĨā¤°āĨā¤•ā¤ŽāĨ‡ā¤¨ā¤ŋā¤¸āĨā¤¤ā¤žā¤¨", + "Country_Turks_and_Caicos_Islands": "ā¤¤āĨā¤°āĨā¤• ā¤”ā¤° ā¤•āĨˆā¤•āĨ‹ā¤¸ ā¤ĻāĨā¤ĩāĨ€ā¤Ē ā¤¸ā¤ŽāĨ‚ā¤š", + "Country_Tuvalu": "ā¤¤āĨā¤ĩā¤žā¤˛āĨ‚", + "Country_Uganda": "ā¤¯āĨā¤—ā¤žā¤‚ā¤Ąā¤ž", + "Country_Ukraine": "ā¤¯āĨ‚ā¤•āĨā¤°āĨ‡ā¤¨", + "Country_United_Arab_Emirates": "ā¤¸ā¤‚ā¤¯āĨā¤•āĨā¤¤ ā¤…ā¤°ā¤Ŧ ā¤…ā¤ŽāĨ€ā¤°ā¤žā¤¤", + "Country_United_Kingdom": "ā¤¯āĨ‚ā¤¨ā¤žā¤‡ā¤ŸāĨ‡ā¤Ą ā¤•ā¤ŋā¤‚ā¤—ā¤Ąā¤Ž", + "Country_United_States": "ā¤¸ā¤‚ā¤¯āĨā¤•āĨā¤¤ ā¤°ā¤žā¤œāĨā¤¯ ā¤…ā¤ŽāĨ‡ā¤°ā¤ŋā¤•ā¤ž", + "Country_United_States_Minor_Outlying_Islands": "ā¤¸ā¤‚ā¤¯āĨā¤•āĨā¤¤ ā¤°ā¤žā¤œāĨā¤¯ ā¤…ā¤ŽāĨ‡ā¤°ā¤ŋā¤•ā¤ž ā¤•āĨ‡ ā¤›āĨ‹ā¤ŸāĨ‡ ā¤ĻāĨ‚ā¤°ā¤¸āĨā¤Ĩ ā¤ĻāĨā¤ĩāĨ€ā¤Ēā¤¸ā¤ŽāĨ‚ā¤š", + "Country_Uruguay": "ā¤‰ā¤°āĨā¤—āĨā¤ĩāĨ‡", + "Country_Uzbekistan": "ā¤‰ā¤œā¤ŧāĨā¤ŦāĨ‡ā¤•ā¤ŋā¤¸āĨā¤¤ā¤žā¤¨", + "Country_Vanuatu": "ā¤ĩā¤žā¤¨āĨā¤…ā¤¤āĨ", + "Country_Venezuela": "ā¤ĩāĨ‡ā¤¨āĨ‡ā¤œā¤ŧāĨā¤ā¤˛ā¤ž", + "Country_Viet_Nam": "ā¤ĩā¤ŋā¤¯ā¤¤ā¤¨ā¤žā¤Ž", + "Country_Virgin_Islands_British": "ā¤ĩā¤°āĨā¤œā¤ŋā¤¨ ā¤ĻāĨā¤ĩāĨ€ā¤Ē ā¤¸ā¤ŽāĨ‚ā¤š, ā¤ŦāĨā¤°ā¤ŋā¤Ÿā¤ŋā¤ļ", + "Country_Virgin_Islands_US": "ā¤ĩā¤°āĨā¤œā¤ŋā¤¨ ā¤ĻāĨā¤ĩāĨ€ā¤Ē ā¤¸ā¤ŽāĨ‚ā¤š, ā¤¯āĨ‚.ā¤ā¤¸.", + "Country_Wallis_and_Futuna": "ā¤ĩā¤žā¤˛āĨ€ ā¤”ā¤° ā¤Ģā¤ŧāĨā¤¯āĨā¤ŸāĨā¤¨ā¤ž", + "Country_Western_Sahara": "ā¤Ēā¤ļāĨā¤šā¤ŋā¤ŽāĨ€ ā¤¸ā¤šā¤žā¤°ā¤ž", + "Country_Yemen": "ā¤¯ā¤Žā¤¨", + "Country_Zambia": "ā¤œā¤žā¤ŽāĨā¤Ŧā¤ŋā¤¯ā¤ž", + "Country_Zimbabwe": "ā¤œā¤ŧā¤ŋā¤ŽāĨā¤Ŧā¤žā¤ŦāĨā¤ĩāĨ‡", + "Create": "ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_canned_response": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤Ŧā¤¨ā¤žā¤ā¤", + "Create_custom_field": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_channel": "ā¤šāĨˆā¤¨ā¤˛ ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_channels": "ā¤šāĨˆā¤¨ā¤˛ ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_a_public_channel_that_new_workspace_members_can_join": "ā¤ā¤• ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤Ŧā¤¨ā¤žā¤ā¤‚ ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ ā¤¸ā¤•āĨ‡ā¤‚āĨ¤", + "Create_A_New_Channel": "ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤šāĨˆā¤¨ā¤˛ ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_new": "ā¤¨ā¤¯ā¤ž ā¤¨ā¤ŋā¤°āĨā¤Žā¤žā¤Ŗ", + "Create_new_members": "ā¤¨ā¤ ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_unique_rules_for_this_channel": "ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ ā¤¨ā¤ŋā¤¯ā¤Ž ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_unit": "ā¤‡ā¤•ā¤žā¤ˆ ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "create-c": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "create-c_description": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "create-d": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "create-d_description": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "create-invite-links": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤˛ā¤ŋā¤‚ā¤• ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "create-invite-links_description": "ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤˛ā¤ŋā¤‚ā¤• ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "create-p": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "create-p_description": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "create-personal-access-tokens": "ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "create-personal-access-tokens_description": "ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "create-team": "ā¤ŸāĨ€ā¤Ž ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "create-team_description": "ā¤ŸāĨ€ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "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_by": "ā¤•āĨ‡ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤¨ā¤žā¤ˆ ā¤—ā¤ˆ", + "CRM_Integration": "ā¤¸āĨ€ā¤†ā¤°ā¤ā¤Ž ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ", + "CROWD_Allow_Custom_Username": "Rocket.Chat ā¤ŽāĨ‡ā¤‚ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "CROWD_Reject_Unauthorized": "ā¤…ā¤¨ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Crowd_Remove_Orphaned_Users": "ā¤…ā¤¨ā¤žā¤Ĩ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤ā¤", + "Crowd_sync_interval_Description": "ā¤¤āĨā¤˛āĨā¤¯ā¤•ā¤žā¤˛ā¤¨ ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤•ā¤ž ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛. ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ `ā¤šā¤° 24 ā¤˜ā¤‚ā¤ŸāĨ‡` ā¤¯ā¤ž `ā¤¸ā¤ĒāĨā¤¤ā¤žā¤š ā¤•āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤Ļā¤ŋā¤¨`, ā¤…ā¤§ā¤ŋā¤• ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ [ā¤•āĨā¤°āĨ‹ā¤¨ ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ ā¤Ēā¤žā¤°āĨā¤¸ā¤°](http://bunkat.github.io/later/parsers.html#text) ā¤Ēā¤°", + "Current_Chats": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤šāĨˆā¤Ÿ", + "Current_File": "ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤Ģā¤ŧā¤žā¤‡ā¤˛", + "Current_Import_Operation": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤†ā¤¯ā¤žā¤¤ ā¤Ēā¤°ā¤ŋā¤šā¤žā¤˛ā¤¨", + "Current_Status": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "Currently_we_dont_support_joining_servers_with_this_many_people": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤šā¤Ž ā¤‡ā¤¤ā¤¨āĨ‡ ā¤¸ā¤žā¤°āĨ‡ ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤¨āĨ‡ ā¤•ā¤ž ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚", "Custom": "ā¤•ā¤¸āĨā¤Ÿā¤Ž", + "Custom CSS": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨ€ā¤ā¤¸ā¤ā¤¸", + "Custom_agent": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ", + "Custom_dates": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¤ā¤ŋā¤Ĩā¤ŋā¤¯ā¤žā¤", + "Custom_Emoji": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‡ā¤ŽāĨ‹ā¤œāĨ€", + "Custom_Emoji_Add": "ā¤¨ā¤¯ā¤ž ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Custom_Emoji_Added_Successfully": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž", + "Custom_Emoji_Delete_Warning": "ā¤•ā¤ŋā¤¸āĨ€ ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤ĩā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž.", + "Custom_Emoji_Error_Invalid_Emoji": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤‡ā¤ŽāĨ‹ā¤œāĨ€", + "Custom_Emoji_Error_Name_Or_Alias_Already_In_Use": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤¯ā¤ž ā¤‰ā¤¸ā¤•ā¤ž ā¤•āĨ‹ā¤ˆ ā¤‰ā¤Ēā¤¨ā¤žā¤Ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆāĨ¤", + "Custom_Emoji_Error_Same_Name_And_Alias": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤‰ā¤¨ā¤•āĨ‡ ā¤‰ā¤Ēā¤¨ā¤žā¤Ž ā¤…ā¤˛ā¤—-ā¤…ā¤˛ā¤— ā¤šāĨ‹ā¤¨āĨ‡ ā¤šā¤žā¤šā¤ŋā¤.", + "Custom_Emoji_Has_Been_Deleted": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ.", + "Custom_Emoji_Info": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Custom_Emoji_Updated_Successfully": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Custom_Fields": "ā¤¤ā¤Ÿā¤•ā¤° ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Custom_Field_Removed": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤—ā¤ˆ", + "Custom_Field_Not_Found": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "Custom_Integration": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ", + "Custom_OAuth_has_been_added": "ā¤•ā¤¸āĨā¤Ÿā¤Ž OAuth ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Custom_OAuth_has_been_removed": "ā¤•ā¤¸āĨā¤Ÿā¤Ž OAuth ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Custom_oauth_helper": "ā¤…ā¤Ēā¤¨ā¤ž OAuth ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯, ā¤†ā¤Ēā¤•āĨ‹ ā¤ā¤• ā¤•āĨ‰ā¤˛ā¤ŦāĨˆā¤• URL ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—

     %ā¤ā¤¸
    .", + "Custom_oauth_unique_name": "ā¤•ā¤¸āĨā¤Ÿā¤Ž OAuth ā¤…ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ ā¤¨ā¤žā¤Ž", + "Custom_roles": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤", + "Custom_roles_upsell_add_custom_roles_workspace": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤…ā¤¨āĨā¤°āĨ‚ā¤Ē ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Custom_roles_upsell_add_custom_roles_workspace_description": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯ā¤žā¤ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤āĨ€ ā¤šāĨˆā¤‚āĨ¤ ā¤¯ā¤š ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋ ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤žā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤ĩā¤žā¤¤ā¤žā¤ĩā¤°ā¤Ŗ ā¤Žā¤ŋā¤˛āĨ‡, ā¤¸ā¤­āĨ€ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Custom_Script_Logged_In": "ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ", + "Custom_Script_Logged_In_Description": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤œāĨ‹ ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤”ā¤° ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ēā¤° ā¤šā¤˛āĨ‡ā¤—āĨ€āĨ¤ (ā¤œā¤Ŧ ā¤­āĨ€ ā¤†ā¤Ē ā¤šāĨˆā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤ĩāĨ‡ā¤ļ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤†ā¤Ē ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤šāĨ‹ā¤¤āĨ‡ ā¤šāĨˆā¤‚)", + "Custom_Script_Logged_Out": "ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ", + "Custom_Script_Logged_Out_Description": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤œāĨ‹ ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤šā¤˛āĨ‡ā¤—āĨ€ ā¤”ā¤° ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤œāĨ‹ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤ (ā¤œā¤Ŧ ā¤­āĨ€ ā¤†ā¤Ē ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨ‡ā¤œ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚)", + "Custom_Script_On_Logout": "ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤Ģā¤ŧāĨā¤˛āĨ‹ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ", + "Custom_Script_On_Logout_Description": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤œāĨ‹ ā¤•āĨ‡ā¤ĩā¤˛ ā¤¨ā¤ŋā¤ˇāĨā¤Ēā¤žā¤Ļā¤¨ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤ĒāĨā¤°ā¤ĩā¤žā¤š ā¤Ēā¤° ā¤šā¤˛āĨ‡ā¤—āĨ€", + "Custom_Scripts": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ", + "Custom_Sound_Add": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤§āĨā¤ĩā¤¨ā¤ŋ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Custom_Sound_Delete_Warning": "ā¤•ā¤ŋā¤¸āĨ€ ā¤§āĨā¤ĩā¤¨ā¤ŋ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤ĩā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž.", + "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_Status": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "Custom_Translations": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ", + "Custom_Translations_Description": "ā¤ā¤• ā¤ĩāĨˆā¤§ JSON ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤ ā¤œā¤šā¤žā¤‚ ā¤•āĨā¤‚ā¤œāĨ€ ā¤ā¤¸āĨ€ ā¤­ā¤žā¤ˇā¤žā¤ā¤‚ ā¤šāĨˆā¤‚ ā¤œā¤ŋā¤¨ā¤ŽāĨ‡ā¤‚ ā¤•āĨā¤‚ā¤œāĨ€ ā¤”ā¤° ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ ā¤•ā¤ž ā¤ļā¤ŦāĨā¤Ļā¤•āĨ‹ā¤ļ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: `{\"en\": {\"ā¤šāĨˆā¤¨ā¤˛\": \"ā¤•ā¤Žā¤°āĨ‡\"},\"pt\": {\"ā¤šāĨˆā¤¨ā¤˛\": \"ā¤¸ā¤˛ā¤žā¤¸\"}}`", + "Custom_User_Status": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "Custom_User_Status_Add": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Custom_User_Status_Added_Successfully": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤œāĨ‹ā¤Ąā¤ŧāĨ€ ā¤—ā¤ˆ", + "Custom_User_Status_Delete_Warning": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤ĩā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤žāĨ¤", + "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": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•āĨ€ ā¤—ā¤ˆ", + "Customer_without_registered_email": "ā¤—āĨā¤°ā¤žā¤šā¤• ā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Customize": "ā¤…ā¤¨āĨā¤•āĨ‚ā¤˛ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Customize_Content": "ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤•āĨ‹ ā¤…ā¤¨āĨā¤•āĨ‚ā¤˛ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "CustomSoundsFilesystem": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤§āĨā¤ĩā¤¨ā¤ŋ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž", + "CustomSoundsFilesystem_Description": "ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤§āĨā¤ĩā¤¨ā¤ŋā¤¯ā¤žā¤ ā¤•āĨˆā¤¸āĨ‡ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•āĨ€ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆā¤‚āĨ¤", + "Daily_Active_Users": "ā¤ĻāĨˆā¤¨ā¤ŋā¤• ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Dashboard": "ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą", + "Data_modified": "ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤", + "Data_processing_consent_text": "ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ĒāĨā¤°āĨ‹ā¤¸āĨ‡ā¤¸ā¤ŋā¤‚ā¤— ā¤¸ā¤šā¤Žā¤¤ā¤ŋ ā¤Ēā¤žā¤ ", + "Data_processing_consent_text_description": "ā¤‡ā¤¸ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¯ā¤š ā¤¸ā¤Žā¤ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤†ā¤Ē ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ‡ ā¤ĻāĨŒā¤°ā¤žā¤¨ ā¤—āĨā¤°ā¤žā¤šā¤• ā¤•āĨ€ ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤ā¤•ā¤¤āĨā¤°, ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤”ā¤° ā¤¸ā¤‚ā¤¸ā¤žā¤§ā¤ŋā¤¤ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Date": "ā¤¤ā¤žā¤°āĨ€ā¤–", + "Date_From": "ā¤¸āĨ‡", + "Date_to": "ā¤•āĨ‹", + "DAU_value": "ā¤ĄāĨ€ā¤ā¤¯āĨ‚ {{price}}", + "days": "ā¤Ļā¤ŋā¤¨", + "Days": "ā¤Ļā¤ŋā¤¨", + "DB_Migration": "ā¤ĄāĨ‡ā¤Ÿā¤žā¤ŦāĨ‡ā¤¸ ā¤Žā¤žā¤‡ā¤—āĨā¤°āĨ‡ā¤ļā¤¨", + "DB_Migration_Date": "ā¤ĄāĨ‡ā¤Ÿā¤žā¤ŦāĨ‡ā¤¸ ā¤Žā¤žā¤‡ā¤—āĨā¤°āĨ‡ā¤ļā¤¨ ā¤¤ā¤ŋā¤Ĩā¤ŋ", + "DDP_Rate_Limiter": "ā¤ĄāĨ€ā¤ĄāĨ€ā¤ĒāĨ€ ā¤Ļā¤° ā¤¸āĨ€ā¤Žā¤ž", + "DDP_Rate_Limit_Connection_By_Method_Enabled": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤ĩā¤ŋā¤§ā¤ŋ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤¸ā¤•āĨā¤ˇā¤Ž", + "DDP_Rate_Limit_Connection_By_Method_Interval_Time": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤ĩā¤ŋā¤§ā¤ŋ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛ ā¤¸ā¤Žā¤¯", + "DDP_Rate_Limit_Connection_By_Method_Requests_Allowed": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤ĩā¤ŋā¤§ā¤ŋ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤…ā¤¨āĨā¤°āĨ‹ā¤§āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤šāĨˆ", + "DDP_Rate_Limit_Connection_Enabled": "ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤¸ā¤•āĨā¤ˇā¤Ž", + "DDP_Rate_Limit_Connection_Interval_Time": "ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛ ā¤¸ā¤Žā¤¯", + "DDP_Rate_Limit_Connection_Requests_Allowed": "ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤…ā¤¨āĨā¤°āĨ‹ā¤§āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤šāĨˆ", + "DDP_Rate_Limit_IP_Enabled": "ā¤†ā¤ˆā¤ĒāĨ€ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤¸ā¤•āĨā¤ˇā¤Ž", + "DDP_Rate_Limit_IP_Interval_Time": "ā¤†ā¤ˆā¤ĒāĨ€ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛ ā¤¸ā¤Žā¤¯", + "DDP_Rate_Limit_IP_Requests_Allowed": "ā¤†ā¤ˆā¤ĒāĨ€ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤…ā¤¨āĨā¤°āĨ‹ā¤§āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤šāĨˆ", + "DDP_Rate_Limit_User_By_Method_Enabled": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤ĩā¤ŋā¤§ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤¸ā¤•āĨā¤ˇā¤Ž", + "DDP_Rate_Limit_User_By_Method_Interval_Time": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤ĩā¤ŋā¤§ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛ ā¤¸ā¤Žā¤¯", + "DDP_Rate_Limit_User_By_Method_Requests_Allowed": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤ĩā¤ŋā¤§ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤…ā¤¨āĨā¤°āĨ‹ā¤§āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤šāĨˆ", + "DDP_Rate_Limit_User_Enabled": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤¸ā¤•āĨā¤ˇā¤Ž", + "DDP_Rate_Limit_User_Interval_Time": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛ ā¤¸ā¤Žā¤¯", + "DDP_Rate_Limit_User_Requests_Allowed": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ€ā¤Žā¤ž: ā¤…ā¤¨āĨā¤°āĨ‹ā¤§āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤šāĨˆ", + "Deactivate": "ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤°āĨ‡ā¤‚", + "Decline": "ā¤—ā¤ŋā¤°ā¤žā¤ĩā¤Ÿ", + "default": "ā¤—ā¤˛ā¤¤āĨ€ ā¤•ā¤°ā¤¨ā¤ž", + "Default": "ā¤—ā¤˛ā¤¤āĨ€ ā¤•ā¤°ā¤¨ā¤ž", + "Default_provider": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž", + "Default_value": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤Žā¤žā¤¨", + "Delete": "ā¤Žā¤ŋā¤Ÿā¤žā¤¨ā¤ž", + "Deleting": "ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Delete_account": "ā¤–ā¤žā¤¤ā¤ž ā¤šā¤Ÿā¤ž ā¤ĻāĨ‹", + "Delete_account?": "ā¤–ā¤žā¤¤ā¤ž ā¤šā¤Ÿā¤ž ā¤ĻāĨ‹?", + "Delete_all_closed_chats": "ā¤¸ā¤­āĨ€ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨˆā¤Ÿ ā¤šā¤Ÿā¤žā¤ā¤‚", + "Delete_Department?": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤šā¤Ÿā¤žā¤ā¤‚?", + "Delete_File_Warning": "ā¤•ā¤ŋā¤¸āĨ€ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤¸āĨ‡ ā¤ĩā¤š ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šā¤Ÿ ā¤œā¤žā¤ā¤—āĨ€. ā¤‡ā¤¸āĨ‡ ā¤…ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Delete_message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤ā¤‚", + "Delete_my_account": "ā¤ŽāĨ‡ā¤°ā¤ž ā¤ā¤•ā¤žā¤‰ā¤‚ā¤Ÿ ā¤šā¤Ÿā¤ž ā¤ĻāĨ‹", + "Delete_Role_Warning": "ā¤‡ā¤¸āĨ‡ ā¤…ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Delete_Room_Warning": "ā¤•ā¤ŋā¤¸āĨ€ ā¤°āĨ‚ā¤Ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤¸āĨ‡ ā¤°āĨ‚ā¤Ž ā¤•āĨ‡ ā¤­āĨ€ā¤¤ā¤° ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤ ā¤‡ā¤¸āĨ‡ ā¤…ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Delete_User_Warning": "ā¤•ā¤ŋā¤¸āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤¸āĨ‡ ā¤‰ā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ€ ā¤šā¤Ÿ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤ ā¤‡ā¤¸āĨ‡ ā¤…ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Delete_User_Warning_Delete": "ā¤•ā¤ŋā¤¸āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤¸āĨ‡ ā¤‰ā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ€ ā¤šā¤Ÿ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤ ā¤‡ā¤¸āĨ‡ ā¤…ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Delete_User_Warning_Keep": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤‰ā¤¨ā¤•āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĻāĨƒā¤ļāĨā¤¯ā¤Žā¤žā¤¨ ā¤°ā¤šāĨ‡ā¤‚ā¤—āĨ‡. ā¤‡ā¤¸āĨ‡ ā¤…ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Delete_User_Warning_Unlink": "ā¤•ā¤ŋā¤¸āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤¸āĨ‡ ā¤‰ā¤¨ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤‡ā¤¸āĨ‡ ā¤…ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "delete-c": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤šā¤Ÿā¤žā¤ā¤", + "delete-c_description": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "delete-d": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤žā¤ā¤", + "delete-d_description": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "delete-message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤ā¤‚", + "delete-message_description": "ā¤ā¤• ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ‡ ā¤­āĨ€ā¤¤ā¤° ā¤ā¤• ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "delete-own-message": "ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤žā¤ā¤", + "delete-own-message_description": "ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "delete-p": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤šā¤Ÿā¤žā¤ā¤", + "delete-p_description": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "delete-team": "ā¤ŸāĨ€ā¤Ž ā¤šā¤Ÿā¤žā¤ā¤", + "delete-team_description": "ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "delete-user": "ā¤‰ā¤Ēā¤­āĨ‹ā¤•āĨā¤¤ā¤ž ā¤Žā¤ŋā¤Ÿā¤žā¤¯āĨ‡ā¤‚", + "delete-user_description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Deleted": "ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž!", + "Deleted_user": "ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤šāĨā¤† ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Deleted__roomName__": "#{{roomName}} ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Deleted__roomName__room": "#{{roomName}} ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Department": "ā¤ĩā¤ŋā¤­ā¤žā¤—", + "Department_archived": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤", + "Department_name": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Department_not_found": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "Department_removed": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Department_Removal_Disabled": "ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤šā¤Ÿā¤žā¤ā¤‚ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Department_unarchived": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤…ā¤¨ā¤žā¤°ā¤•āĨā¤ˇā¤ŋā¤¤", + "Departments": "ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚", + "Deployment_ID": "ā¤Ēā¤°ā¤ŋā¤¨ā¤ŋā¤¯āĨ‹ā¤œā¤¨ ā¤†ā¤ˆā¤ĄāĨ€", + "Deployment": "ā¤¤āĨˆā¤¨ā¤žā¤¤āĨ€", + "Description": "ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ", + "Desktop": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē", + "Desktop_apps": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤ā¤ĒāĨā¤¸", + "Desktop_Notification_Test": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ", + "Desktop_Notifications": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚", "Desktop_Notifications_Default_Alert": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€", + "Desktop_Notifications_Disabled": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆā¤‚. ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤•āĨ‹ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤…ā¤Ēā¤¨āĨ€ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤ā¤‚ ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚āĨ¤", + "Desktop_Notifications_Duration": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž period", + "Desktop_Notifications_Duration_Description": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨ‡ā¤•ā¤‚ā¤ĄāĨ¤ ā¤¯ā¤š OS X ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤•āĨ‡ā¤‚ā¤ĻāĨā¤° ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩā¤ŋā¤¤ ā¤•ā¤° ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤”ā¤° ā¤“ā¤ā¤¸ ā¤ā¤•āĨā¤¸ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤•āĨ‡ā¤‚ā¤ĻāĨā¤° ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩā¤ŋā¤¤ ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ 0 ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Desktop_Notifications_Enabled": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆā¤‚", + "Desktop_Notifications_Not_Enabled": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "Unselected_by_default": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤šā¤¯ā¤¨ā¤ŋā¤¤", + "Unseen_features": "ā¤…ā¤¨ā¤ĻāĨ‡ā¤–āĨ€ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤žā¤ā¤‚", + "Details": "ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ", + "Device_Changes_Not_Available": "ā¤‡ā¤¸ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤ŽāĨ‡ā¤‚ ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚. ā¤—ā¤žā¤°ā¤‚ā¤ŸāĨ€ā¤•āĨƒā¤¤ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤•āĨƒā¤Ēā¤¯ā¤ž Rocket.Chat ā¤•āĨ‡ ā¤†ā¤§ā¤ŋā¤•ā¤žā¤°ā¤ŋā¤• ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤ā¤Ē ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Device_Changes_Not_Available_Insecure_Context": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤•āĨ‡ā¤ĩā¤˛ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­āĨ‹ā¤‚ ā¤Ēā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆā¤‚ (ā¤œāĨˆā¤¸āĨ‡ https://)", + "Device_Management": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨", + "Device_Management_Allow_Login_Email_preference": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ēā¤šā¤šā¤žā¤¨ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Device_Management_Allow_Login_Email_preference_Description": "ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤…ā¤Ēā¤¨āĨ€ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤¤ā¤Ŧ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—āĨ€ ā¤œā¤Ŧ ā¤Ŧā¤žā¤°-ā¤Ŧā¤žā¤° ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ā¤ŋ ā¤¤ā¤ŋā¤Ĩā¤ŋ ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•āĨ€ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆ ā¤œā¤ŋā¤¸ā¤¸āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ŧā¤žā¤°-ā¤Ŧā¤žā¤° ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°ā¤¨ā¤ž ā¤Ēā¤Ąā¤ŧā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Device_Management_Client": "ā¤—āĨā¤°ā¤žā¤šā¤•", + "Device_Management_Description": "ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤”ā¤° ā¤Ēā¤šāĨā¤‚ā¤š ā¤¨ā¤ŋā¤¯ā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤¨āĨ€ā¤¤ā¤ŋā¤¯ā¤žā¤‚ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚.", + "Device_Management_Device": "ā¤‰ā¤Ēā¤•ā¤°ā¤Ŗ", + "line": "ā¤°āĨ‡ā¤–ā¤ž", + "Device_Management_Device_Unknown": "ā¤…ā¤œāĨā¤žā¤žā¤¤", + "Device_Management_Email_Subject": "[ā¤¸ā¤žā¤‡ā¤Ÿ_ā¤¨ā¤žā¤Ž] - ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤¤ā¤ž ā¤šā¤˛ā¤ž", + "Device_Management_Email_Body": "ā¤†ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚: `

    {ā¤˛āĨ‰ā¤—ā¤ŋā¤¨_ā¤Ąā¤ŋā¤ŸāĨ‡ā¤•āĨā¤ŸāĨ‡ā¤Ą}

    [ā¤¨ā¤žā¤Ž] ([ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž]) {Logged_In_Via}

    {ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸_ā¤ŽāĨˆā¤¨āĨ‡ā¤œā¤ŽāĨ‡ā¤‚ā¤Ÿ_ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ}: [ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤°ā¤‡ā¤¨āĨā¤ĢāĨ‹]
    {ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸_ā¤ŽāĨˆā¤¨āĨ‡ā¤œā¤ŽāĨ‡ā¤‚ā¤Ÿ_ā¤“ā¤ā¤¸}: [osInfo]
    {ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸_ā¤ŽāĨˆā¤¨āĨ‡ā¤œā¤ŽāĨ‡ā¤‚ā¤Ÿ_ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸}: [ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ā¤‡ā¤¨āĨā¤ĢāĨ‹]
    {ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸_ā¤ŽāĨˆā¤¨āĨ‡ā¤œā¤ŽāĨ‡ā¤‚ā¤Ÿ_ā¤†ā¤ˆā¤ĒāĨ€}: [ā¤†ā¤ˆā¤ĒāĨ€ā¤‡ā¤¨āĨā¤ĢāĨ‹]

    [ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ]

    {ā¤…ā¤Ēā¤¨āĨ‡ ā¤–ā¤žā¤¤āĨ‡ ā¤Ēā¤° ā¤Ēā¤šāĨā¤‚ā¤š}

    {Or_Copy_And_Paste_This_URL_Into_A_Tab_Of_Your_Browser}
    [ā¤¸ā¤žā¤‡ā¤Ÿ URL]

    {Thank_You_For_Choosing_RocketChat}

    `", + "Device_Management_Enable_Login_Emails": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ēā¤šā¤šā¤žā¤¨ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Device_Management_Enable_Login_Emails_Description": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤šā¤° ā¤Ŧā¤žā¤° ā¤‰ā¤¨ā¤•āĨ‡ ā¤–ā¤žā¤¤āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤¤ā¤ž ā¤šā¤˛ā¤¨āĨ‡ ā¤Ēā¤° ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œāĨ‡ ā¤œā¤žā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Device_Management_IP": "ā¤†ā¤ˆ ā¤ĒāĨ€", + "Device_Management_OS": "ā¤†ā¤Ē", + "Device_ID": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤†ā¤ˆā¤ĄāĨ€", + "Device_Info": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Device_Logged_Out": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž", + "Device_Logout_Text": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¸āĨ‡ ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤ž ā¤”ā¤° ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤¸ā¤¤āĨā¤° ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤‰ā¤¸āĨ€ ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤¸āĨ‡ ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤° ā¤¸ā¤•āĨ‡ā¤—ā¤žāĨ¤", + "Devices": "ā¤‰ā¤Ēā¤•ā¤°ā¤Ŗ", + "Devices_Set": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤¸āĨ‡ā¤Ÿ", + "Device_settings": "ā¤‰ā¤Ēā¤•ā¤°ā¤Ŗ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸", + "Dialed_number_doesnt_exist": "ā¤Ąā¤žā¤¯ā¤˛ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤¨ā¤‚ā¤Ŧā¤° ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Dialed_number_is_incomplete": "ā¤Ąā¤žā¤¯ā¤˛ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤¨ā¤‚ā¤Ŧā¤° ā¤ĒāĨ‚ā¤°ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Different_Style_For_User_Mentions": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤–āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤˛ā¤— ā¤ļāĨˆā¤˛āĨ€", + "Livechat_Facebook_API_Key": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤•āĨā¤‚ā¤œāĨ€", + "Direct": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯ā¤•āĨā¤ˇ", + "Direction": "ā¤Ļā¤ŋā¤ļā¤ž", + "Livechat_Facebook_API_Secret": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤°ā¤šā¤¸āĨā¤¯", + "Direct_Message": "ā¤¸āĨ€ā¤§ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Livechat_Facebook_Enabled": "ā¤ĢāĨ‡ā¤¸ā¤ŦāĨā¤• ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Direct_message_creation_description": "ā¤†ā¤Ē ā¤ā¤•ā¤žā¤§ā¤ŋā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤šāĨˆā¤Ÿ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤šāĨˆā¤‚. ā¤œā¤ŋā¤¨ ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤†ā¤Ē ā¤Ŧā¤žā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤‰ā¤¨ ā¤¸ā¤­āĨ€ ā¤•āĨ‹ ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤ā¤• ā¤šāĨ€ ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤Ēā¤° ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚āĨ¤", + "Direct_message_someone": "ā¤•ā¤ŋā¤¸āĨ€ ā¤•āĨ‹ ā¤¸āĨ€ā¤§ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Direct_message_you_have_joined": "ā¤†ā¤Ē ā¤ā¤• ā¤¨ā¤ ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤ŽāĨˆā¤¸āĨ‡ā¤œ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧāĨ‡ ā¤šāĨˆā¤‚", + "Direct_Messages": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Direct_Reply": "ā¤¸āĨ€ā¤§ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤°", + "Direct_Reply_Advice": "ā¤†ā¤Ē ā¤¸āĨ€ā¤§āĨ‡ ā¤‡ā¤¸ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĻāĨ‡ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚. ā¤ĨāĨā¤°āĨ‡ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‹ ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤¨ ā¤•ā¤°āĨ‡ā¤‚.", + "Direct_Reply_Debug": "ā¤¸āĨ€ā¤§ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤Ąā¤ŋā¤Ŧā¤— ā¤•ā¤°āĨ‡ā¤‚", + "Direct_Reply_Debug_Description": "[ā¤¸ā¤žā¤ĩā¤§ā¤žā¤¨] ā¤Ąā¤ŋā¤Ŧā¤— ā¤ŽāĨ‹ā¤Ą ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤†ā¤Ēā¤•ā¤ž 'ā¤ĒāĨā¤˛āĨ‡ā¤¨ ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą' ā¤ā¤Ąā¤Žā¤ŋā¤¨ ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "Direct_Reply_Delete": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤šā¤Ÿā¤žā¤ā¤", + "Direct_Reply_Delete_Description": "[ā¤§āĨā¤¯ā¤žā¤¨ ā¤ĻāĨ‡ā¤‚!] ā¤¯ā¤Ļā¤ŋ ā¤¯ā¤š ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤šāĨˆ, ā¤¤āĨ‹ ā¤¸ā¤­āĨ€ ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨āĨ€ā¤¯ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤ ā¤œā¤žā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¯ā¤šā¤žā¤‚ ā¤¤ā¤• ā¤•ā¤ŋ ā¤ĩāĨ‡ ā¤­āĨ€ ā¤œāĨ‹ ā¤¸āĨ€ā¤§āĨ‡ ā¤‰ā¤¤āĨā¤¤ā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚āĨ¤ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤ˆ-ā¤ŽāĨ‡ā¤˛ ā¤ŽāĨ‡ā¤˛ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤–ā¤žā¤˛āĨ€ ā¤°ā¤šā¤¤ā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤‡ā¤¸āĨ‡ ā¤Žā¤¨āĨā¤ˇāĨā¤¯āĨ‹ā¤‚ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž \"ā¤¸ā¤Žā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°\" ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤‚ā¤¸ā¤žā¤§ā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Direct_Reply_Enable": "ā¤¸āĨ€ā¤§ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Direct_Reply_Enable_Description": "[ā¤§āĨā¤¯ā¤žā¤¨ ā¤ĻāĨ‡ā¤‚!] ā¤¯ā¤Ļā¤ŋ \"ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤°ā¤ŋā¤ĒāĨā¤˛ā¤žā¤ˆ\" ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ, ā¤¤āĨ‹ Rocket.Chat ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ŽāĨ‡ā¤˛ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤•āĨ‹ ā¤¨ā¤ŋā¤¯ā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤—ā¤žāĨ¤ ā¤¸ā¤­āĨ€ ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤ˆ-ā¤ŽāĨ‡ā¤˛ ā¤ĒāĨā¤¨ā¤°āĨā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤ŋā¤ ā¤œā¤žā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤Ēā¤ĸā¤ŧāĨ‡ ā¤—ā¤ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤•ā¤ŋā¤ ā¤œā¤žā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤¸ā¤‚ā¤¸ā¤žā¤§ā¤ŋā¤¤ ā¤•ā¤ŋā¤ ā¤œā¤žā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ \"ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤°ā¤ŋā¤ĒāĨā¤˛ā¤žā¤ˆ\" ā¤•āĨ‡ā¤ĩā¤˛ ā¤¤ā¤­āĨ€ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤ ā¤œā¤Ŧ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤ŽāĨ‡ā¤˛ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ Rocket.Chat ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šāĨˆ ā¤”ā¤° ā¤Žā¤¨āĨā¤ˇāĨā¤¯āĨ‹ā¤‚ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž \"ā¤¸ā¤Žā¤žā¤¨ā¤žā¤‚ā¤¤ā¤° ā¤ŽāĨ‡ā¤‚\" ā¤Ēā¤ĸā¤ŧā¤ž/ā¤¸ā¤‚ā¤¸ā¤žā¤§ā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤", + "Direct_Reply_Frequency": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤œā¤žā¤ā¤š ā¤†ā¤ĩāĨƒā¤¤āĨā¤¤ā¤ŋ", + "Direct_Reply_Frequency_Description": "(ā¤Žā¤ŋā¤¨ā¤ŸāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚, ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ/ā¤¨āĨā¤¯āĨ‚ā¤¨ā¤¤ā¤Ž 2)", + "Direct_Reply_Host": "ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤°ā¤ŋā¤ĒāĨā¤˛ā¤žā¤ˆ ā¤šāĨ‹ā¤¸āĨā¤Ÿ", + "Direct_Reply_IgnoreTLS": "ā¤ŸāĨ€ā¤ā¤˛ā¤ā¤¸ ā¤Ēā¤° ā¤§āĨā¤¯ā¤žā¤¨ ā¤¨ ā¤ĻāĨ‡ā¤‚", + "Direct_Reply_Password": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "Direct_Reply_Port": "ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ_ā¤°ā¤ŋā¤ĒāĨā¤˛ā¤žā¤ˆ_ā¤ĒāĨ‹ā¤°āĨā¤Ÿ", + "Direct_Reply_Protocol": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯ā¤•āĨā¤ˇ ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĒāĨā¤°āĨ‹ā¤ŸāĨ‹ā¤•āĨ‰ā¤˛", + "Direct_Reply_Separator": "ā¤¸āĨ‡ā¤Ēā¤°āĨ‡ā¤Ÿā¤°", + "Direct_Reply_Separator_Description": "[ā¤•āĨ‡ā¤ĩā¤˛ ā¤¤ā¤­āĨ€ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤•ā¤°āĨ‡ā¤‚ ā¤œā¤Ŧ ā¤†ā¤Ē ā¤ āĨ€ā¤•-ā¤ āĨ€ā¤• ā¤œā¤žā¤¨ā¤¤āĨ‡ ā¤šāĨ‹ā¤‚ ā¤•ā¤ŋ ā¤†ā¤Ē ā¤•āĨā¤¯ā¤ž ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚, ā¤Ļā¤¸āĨā¤¤ā¤žā¤ĩāĨ‡ā¤œā¤ŧ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚]\nā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤”ā¤° ā¤ŸāĨˆā¤— ā¤­ā¤žā¤— ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤ĩā¤ŋā¤­ā¤žā¤œā¤•", + "Direct_Reply_Username": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "Direct_Reply_Username_Description": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¸ā¤‚ā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚, ā¤ŸāĨˆā¤—ā¤ŋā¤‚ā¤— ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ, ā¤‡ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤˛ā¤ŋā¤–ā¤ž ā¤œā¤žā¤ā¤—ā¤ž", + "Directory": "ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤•ā¤ž", + "Disable": "ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨ā¤ž", + "Disable_Facebook_integration": "ā¤ĢāĨ‡ā¤¸ā¤ŦāĨā¤• ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Disable_Notifications": "ā¤¨āĨ‹ā¤ŸāĨ€ā¤Ģā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Disable_two-factor_authentication": "TOTP ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĻāĨ‹-ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Disable_two-factor_authentication_email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĻāĨ‹-ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", "Disabled": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Disallow_reacting": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ ā¤ĻāĨ‡ā¤‚", + "Disallow_reacting_Description": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤ĻāĨ‡ā¤¤ā¤ž", + "Discard": "ā¤–ā¤žā¤°ā¤ŋā¤œ ā¤•ā¤°ā¤¨ā¤ž", + "Disconnect": "ā¤Ąā¤ŋā¤¸āĨā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ", + "Discover_public_channels_and_teams_in_the_workspace_directory": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤•ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤”ā¤° ā¤ŸāĨ€ā¤ŽāĨ‡ā¤‚ ā¤–āĨ‹ā¤œāĨ‡ā¤‚āĨ¤", + "Discussion": "ā¤Ŧā¤šā¤¸", + "Discussion_Description": "ā¤šā¤°āĨā¤šā¤žā¤ā¤ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤ĒāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ā¤• ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤¤ā¤°āĨ€ā¤•ā¤ž ā¤šāĨˆ ā¤œāĨ‹ ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ĩā¤ŋā¤ļā¤ŋā¤ˇāĨā¤Ÿ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤ĒāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤­ā¤žā¤— ā¤˛āĨ‡ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Discussion_description": "ā¤•āĨā¤¯ā¤ž ā¤šāĨ‹ ā¤°ā¤šā¤ž ā¤šāĨˆ ā¤‡ā¤¸ā¤•ā¤ž ā¤…ā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤°ā¤–ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤šā¤žā¤¯ā¤¤ā¤ž ā¤•ā¤°āĨ‡ā¤‚! ā¤ā¤• ā¤šā¤°āĨā¤šā¤ž ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤¸āĨ‡, ā¤†ā¤Ēā¤•āĨ‡ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤šāĨā¤¨āĨ‡ ā¤—ā¤ ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤ā¤• ā¤‰ā¤Ē-ā¤šāĨˆā¤¨ā¤˛ ā¤Ŧā¤¨ā¤žā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤ĻāĨ‹ā¤¨āĨ‹ā¤‚ ā¤˛ā¤ŋā¤‚ā¤• ā¤šāĨ‹ ā¤œā¤žā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Discussion_first_message_disabled_due_to_e2e": "ā¤†ā¤Ē ā¤‡ā¤¸ā¤•āĨ‡ ā¤¨ā¤ŋā¤°āĨā¤Žā¤žā¤Ŗ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤‡ā¤¸ ā¤šā¤°āĨā¤šā¤ž ā¤ŽāĨ‡ā¤‚ ā¤ā¤‚ā¤Ą-ā¤ŸāĨ‚-ā¤ā¤‚ā¤Ą ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤¨ā¤ž ā¤ļāĨā¤°āĨ‚ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Discussion_first_message_title": "ā¤†ā¤Ēā¤•ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Discussion_name": "ā¤šā¤°āĨā¤šā¤ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Discussion_start": "ā¤šā¤°āĨā¤šā¤ž ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "Discussion_target_channel": "ā¤ŽāĨ‚ā¤˛ ā¤šāĨˆā¤¨ā¤˛ ā¤¯ā¤ž ā¤¸ā¤ŽāĨ‚ā¤š", + "Discussion_target_channel_description": "ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤šāĨā¤¨āĨ‡ā¤‚ ā¤œāĨ‹ ā¤†ā¤Ē ā¤œāĨ‹ ā¤ĒāĨ‚ā¤›ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤‰ā¤¸ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤šāĨ‹", + "Discussion_target_channel_prefix": "ā¤†ā¤Ē ā¤ā¤• ā¤šā¤°āĨā¤šā¤ž ā¤Ŧā¤¨ā¤ž ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚", + "Discussion_title": "ā¤šā¤°āĨā¤šā¤ž ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Discussions_unavailable_for_federation": "ā¤ĢāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤°āĨ‚ā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šā¤°āĨā¤šā¤žā¤ā¤ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "discussion-created": "{{message}}", + "Discussions": "ā¤šā¤°āĨā¤šā¤žā¤ā¤", + "Display": "ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤¨", + "Display_avatars": "ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Display_Avatars_Sidebar": "ā¤¸ā¤žā¤‡ā¤Ąā¤Ŧā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Display_chat_permissions": "ā¤šāĨˆā¤Ÿ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯ā¤žā¤ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Display_mentions_counter": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°ā¤¤āĨā¤¯ā¤•āĨā¤ˇ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ŦāĨˆā¤œ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Display_offline_form": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤ĢāĨ‰ā¤°āĨā¤Ž ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Display_setting_permissions": "ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯ā¤žā¤ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Display_unread_counter": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤°āĨ‚ā¤Ž ā¤•āĨ‹ ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Displays_action_text": "ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤Ēā¤žā¤  ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "Do_It_Later": "ā¤‡ā¤¸āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤ŽāĨ‡ā¤‚ ā¤•ā¤°āĨ‡ā¤‚", + "Do_not_display_unread_counter": "ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤•ā¤žā¤‰ā¤‚ā¤Ÿā¤° ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Do_not_provide_this_code_to_anyone": "ā¤¯ā¤š ā¤•āĨ‹ā¤Ą ā¤•ā¤ŋā¤¸āĨ€ ā¤•āĨ‹ ā¤¨ ā¤ĻāĨ‡ā¤‚.", + "Do_Nothing": "ā¤•āĨā¤› ā¤­āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Do_you_have_any_notes_for_this_conversation": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤‡ā¤¸ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‹ā¤ˆ ā¤¨āĨ‹ā¤ŸāĨā¤¸ ā¤šāĨˆā¤‚?", + "Do_you_want_to_accept": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Do_you_want_to_change_to_s_question": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē %s ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Documentation": "ā¤ĒāĨā¤°ā¤˛āĨ‡ā¤–ā¤¨", + "Document_Domain": "ā¤Ļā¤¸āĨā¤¤ā¤žā¤ĩāĨ‡ā¤œā¤ŧ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "Domain": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Domain_added": "ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž", + "Domain_removed": "ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Domains": "ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "Domains_allowed_to_embed_the_livechat_widget": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ĩā¤ŋā¤œāĨ‡ā¤Ÿ ā¤•āĨ‹ ā¤ā¤ŽāĨā¤ŦāĨ‡ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĩā¤žā¤˛āĨ‡ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€āĨ¤ ā¤¸ā¤­āĨ€ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤•āĨ‹ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤–ā¤žā¤˛āĨ€ ā¤›āĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚āĨ¤", + "Done": "ā¤šāĨ‹ ā¤—ā¤¯ā¤ž", + "Dont_ask_me_again": "ā¤ŽāĨā¤ā¤¸āĨ‡ ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤Žā¤¤ ā¤ĒāĨ‚ā¤›āĨ‹!", + "Dont_ask_me_again_list": "ā¤ŽāĨā¤ā¤¸āĨ‡ ā¤ĻāĨā¤Ŧā¤žā¤°ā¤ž ā¤¸āĨ‚ā¤šāĨ€ ā¤Žā¤¤ ā¤ĒāĨ‚ā¤›āĨ‹", + "Download": "ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨ā¤ž", + "Download_Destkop_App": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤ā¤Ē ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Download_Info": "ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Download_My_Data": "ā¤ŽāĨ‡ā¤°ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚ (HTML)", + "Download_Pending_Avatars": "ā¤˛ā¤‚ā¤Ŧā¤ŋā¤¤ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Download_Pending_Files": "ā¤˛ā¤‚ā¤Ŧā¤ŋā¤¤ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Download_Snippet": "ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨ā¤ž", + "Downloading_file_from_external_URL": "ā¤Ŧā¤žā¤šā¤°āĨ€ URL ā¤¸āĨ‡ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤šāĨ‹ ā¤°ā¤šāĨ€ ā¤šāĨˆ", + "Drop_to_upload_file": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤›āĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Dry_run": "ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤­āĨā¤¯ā¤žā¤¸", + "Dry_run_description": "ā¤ĒāĨā¤°āĨ‡ā¤ˇā¤• ā¤•āĨ‡ ā¤¸ā¤Žā¤žā¤¨ ā¤Ēā¤¤āĨ‡ ā¤Ēā¤° ā¤•āĨ‡ā¤ĩā¤˛ ā¤ā¤• ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•ā¤ŋā¤¸āĨ€ ā¤ĩāĨˆā¤§ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤.", + "Duplicate_archived_channel_name": "`#%s` ā¤¨ā¤žā¤Ž ā¤¸āĨ‡ ā¤ā¤• ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "Markdown_Headers": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤Žā¤žā¤°āĨā¤•ā¤Ąā¤žā¤‰ā¤¨ ā¤šāĨ‡ā¤Ąā¤° ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Markdown_Marked_Breaks": "ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤ŦāĨā¤°āĨ‡ā¤• ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Duplicate_archived_private_group_name": "'%s' ā¤¨ā¤žā¤Ž ā¤¸āĨ‡ ā¤ā¤• ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "Duplicate_channel_name": "'%s' ā¤¨ā¤žā¤Ž ā¤•ā¤ž ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "Markdown_Marked_GFM": "ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤œāĨ€ā¤ā¤Ģā¤ā¤Ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Duplicate_file_name_found": "ā¤ĄāĨā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤Ÿ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¨ā¤žā¤Ž ā¤Žā¤ŋā¤˛ā¤ž.", + "Markdown_Marked_Pedantic": "ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤ĒāĨ‡ā¤ĄāĨ‡ā¤‚ā¤Ÿā¤ŋā¤• ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Markdown_Marked_SmartLists": "ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤¸āĨā¤Žā¤žā¤°āĨā¤Ÿ ā¤¸āĨ‚ā¤šā¤ŋā¤¯ā¤žā¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Duplicate_private_group_name": "'%s' ā¤¨ā¤žā¤Ž ā¤¸āĨ‡ ā¤ā¤• ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "Markdown_Marked_Smartypants": "ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤¸āĨā¤Žā¤žā¤°āĨā¤Ÿā¤ĒāĨˆā¤‚ā¤Ÿ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Duplicated_Email_address_will_be_ignored": "ā¤ĄāĨā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤Ÿ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤āĨ‡ ā¤Ēā¤° ā¤§āĨā¤¯ā¤žā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž.", + "Markdown_Marked_Tables": "ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤¤ā¤žā¤˛ā¤ŋā¤•ā¤žā¤ā¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "duplicated-account": "ā¤ĄāĨā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤Ÿ ā¤–ā¤žā¤¤ā¤ž", + "E2E Encryption": "E2E ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨", + "E2E_Encryption_enabled_for_room": "#{{roomName}} ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤‚ā¤Ą-ā¤ŸāĨ‚-ā¤ā¤‚ā¤Ą ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "E2E_Encryption_disabled_for_room": "#{{roomName}} ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤‚ā¤Ą-ā¤ŸāĨ‚-ā¤ā¤‚ā¤Ą ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Markdown_Parser": "ā¤Žā¤žā¤°āĨā¤•ā¤Ąā¤žā¤‰ā¤¨ ā¤Ēā¤žā¤°āĨā¤¸ā¤°", + "Markdown_SupportSchemesForLink": "ā¤˛ā¤ŋā¤‚ā¤• ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Žā¤žā¤°āĨā¤•ā¤Ąā¤žā¤‰ā¤¨ ā¤¸ā¤šā¤žā¤¯ā¤¤ā¤ž ā¤¯āĨ‹ā¤œā¤¨ā¤žā¤ā¤", + "E2E Encryption_Description": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ‹ ā¤¨ā¤ŋā¤œāĨ€ ā¤°ā¤–āĨ‡ā¤‚, ā¤¯ā¤š ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨā¤ ā¤•ā¤ŋ ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°āĨ‡ā¤ˇā¤• ā¤”ā¤° ā¤‡ā¤šāĨā¤›ā¤ŋā¤¤ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ā¤•ā¤°āĨā¤¤ā¤ž ā¤šāĨ€ ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤Ēā¤ĸā¤ŧ ā¤¸ā¤•āĨ‡ā¤‚āĨ¤", + "Markdown_SupportSchemesForLink_Description": "ā¤…ā¤¨āĨā¤Žā¤¤ ā¤¯āĨ‹ā¤œā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€", + "E2E_enable": "E2E ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "E2E_disable": "E2E ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "E2E_Enable_alert": "ā¤¯ā¤š ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤…ā¤­āĨ€ ā¤ŦāĨ€ā¤Ÿā¤ž ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ! ā¤•āĨƒā¤Ēā¤¯ā¤ž github.com/RocketChat/Rocket.Chat/issues ā¤Ēā¤° ā¤Ŧā¤— ā¤•āĨ€ ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤‡ā¤¨ā¤¸āĨ‡ ā¤…ā¤ĩā¤—ā¤¤ ā¤°ā¤šāĨ‡ā¤‚:
    - ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤°āĨ‚ā¤Ž ā¤•āĨ‡ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤°āĨā¤š ā¤‘ā¤Ēā¤°āĨ‡ā¤ļā¤¨ ā¤¸āĨ‡ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛āĨ‡ā¤‚ā¤—āĨ‡āĨ¤
    - ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤ā¤ĒāĨā¤¸ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•ā¤ž ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ (ā¤ĩāĨ‡ ā¤‡ā¤¸āĨ‡ ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚)āĨ¤
    - ā¤ŦāĨ‰ā¤Ÿ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¤ā¤Ŧ ā¤¤ā¤• ā¤¨ā¤šāĨ€ā¤‚ ā¤ĻāĨ‡ā¤– ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡ ā¤œā¤Ŧ ā¤¤ā¤• ā¤ĩāĨ‡ ā¤‡ā¤¸ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤˛ā¤žā¤—āĨ‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤āĨ‡āĨ¤
    - ā¤‡ā¤¸ ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤‚ā¤—āĨ‡.", + "E2E_Enable_description": "ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¸ā¤ŽāĨ‚ā¤š ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•ā¤ž ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤”ā¤° ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤•ā¤ŋā¤ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤‚", + "E2E_Enabled": "E2E ā¤¸ā¤•āĨā¤ˇā¤Ž", + "E2E_Enabled_Default_DirectRooms": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤°āĨ‚ā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "E2E_Enabled_Default_PrivateRooms": "ā¤¨ā¤ŋā¤œāĨ€ ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "E2E_Encryption_Password_Change": "ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚", + "E2E_Encryption_Password_Explanation": "ā¤…ā¤Ŧ ā¤†ā¤Ē ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤”ā¤° ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ŧā¤¨ā¤ž ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤†ā¤Ē ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤¯ā¤ž ā¤ĄāĨ€ā¤ā¤Ž ā¤•āĨ‹ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤­āĨ€ ā¤Ŧā¤Ļā¤˛ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤

    ā¤¯ā¤š ā¤ā¤‚ā¤Ą-ā¤ŸāĨ‚-ā¤ā¤‚ā¤Ą ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤šāĨˆ ā¤‡ā¤¸ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ā¤¨ā¤•āĨ‹ā¤Ą/ā¤ĄāĨ€ā¤•āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤•āĨā¤‚ā¤œāĨ€ ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤° ā¤¸ā¤šāĨ‡ā¤œāĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤œā¤žā¤ā¤—āĨ€āĨ¤ ā¤‡ā¤¸ ā¤•ā¤žā¤°ā¤Ŗ ā¤¸āĨ‡ ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•ā¤ŋā¤¸āĨ€ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤Ēā¤° ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤‡ā¤¸āĨ‡ ā¤…ā¤¨āĨā¤¯ ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸āĨ‹ā¤‚ ā¤Ēā¤° ā¤Ļā¤°āĨā¤œ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž ā¤œā¤ŋā¤¨ ā¤Ēā¤° ā¤†ā¤Ē e2e ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "E2E_key_reset_email": "E2E ā¤•āĨā¤‚ā¤œāĨ€ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž", + "E2E_message_encrypted_placeholder": "ā¤¯ā¤š ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ā¤‚ā¤Ą-ā¤ŸāĨ‚-ā¤ā¤‚ā¤Ą ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤šāĨˆ. ā¤‡ā¤¸āĨ‡ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ€ ā¤–ā¤žā¤¤ā¤ž ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤¨āĨ€ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•āĨā¤‚ā¤œāĨ€ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°ā¤¨āĨ€ ā¤šāĨ‹ā¤—āĨ€āĨ¤", + "E2E_password_request_text": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤”ā¤° ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤šā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤…ā¤Ēā¤¨ā¤ž ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚āĨ¤
    ā¤†ā¤Ēā¤•āĨ‡ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ ā¤Ēā¤° ā¤…ā¤Ēā¤¨āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ā¤¨ā¤•āĨ‹ā¤Ą/ā¤ĄāĨ€ā¤•āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤¯ā¤š ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ļā¤°āĨā¤œ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž, ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤•āĨā¤‚ā¤œāĨ€ ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤° ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤", + "E2E_password_reveal_text": "ā¤ā¤‚ā¤Ą-ā¤ŸāĨ‚-ā¤ā¤‚ā¤Ą ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤¨ā¤ŋā¤œāĨ€ ā¤•ā¤Žā¤°āĨ‡ ā¤”ā¤° ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ŧā¤¨ā¤žā¤ā¤‚āĨ¤

    ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤¸ā¤šāĨ‡ā¤œāĨ‡ā¤‚, ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ā¤¨āĨā¤•āĨ‹ā¤Ą/ā¤ĄāĨ€ā¤•āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤•āĨā¤‚ā¤œāĨ€ ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤° ā¤¸ā¤šāĨ‡ā¤œāĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤œā¤žā¤ā¤—āĨ€āĨ¤ e2e ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤‡ā¤¸āĨ‡ ā¤…ā¤¨āĨā¤¯ ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤Ēā¤° ā¤Ļā¤°āĨā¤œ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤ ā¤”ā¤° ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨āĨ‡ā¤‚

    ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤¸āĨ‡, ā¤œā¤ŋā¤¸ ā¤Ēā¤° ā¤†ā¤Ēā¤¨āĨ‡ ā¤Ļā¤°āĨā¤œ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ, ā¤•ā¤­āĨ€ ā¤­āĨ€ ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚āĨ¤ ā¤‡ā¤¸ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤–ā¤ŧā¤žā¤°ā¤ŋā¤œ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤¯ā¤žā¤Ļ ā¤°ā¤–āĨ‡ā¤‚āĨ¤

    ā¤†ā¤Ēā¤•ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤šāĨˆ: {{randomPassword}}", + "E2E_Reset_Email_Content": "ā¤†ā¤Ē ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤šāĨ‹ ā¤—ā¤ ā¤šāĨˆā¤‚. ā¤œā¤Ŧ ā¤†ā¤Ē ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ Rocket.Chat ā¤ā¤• ā¤¨ā¤ˆ ā¤•āĨā¤‚ā¤œāĨ€ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤•ā¤°āĨ‡ā¤—ā¤ž ā¤”ā¤° ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤•ā¤Žā¤°āĨ‡ ā¤¤ā¤• ā¤†ā¤Ēā¤•āĨ€ ā¤Ēā¤šāĨā¤‚ā¤š ā¤Ŧā¤šā¤žā¤˛ ā¤•ā¤°āĨ‡ā¤—ā¤ž ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤¯ā¤ž ā¤…ā¤§ā¤ŋā¤• ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤šāĨˆā¤‚āĨ¤ E2E ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•āĨ€ ā¤ĒāĨā¤°ā¤•āĨƒā¤¤ā¤ŋ ā¤•āĨ‡ ā¤•ā¤žā¤°ā¤Ŗ, Rocket.Chat ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤•ā¤Žā¤°āĨ‡ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤Ŧā¤šā¤žā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤—ā¤ž ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤", + "E2E_Reset_Key_Explanation": "ā¤¯ā¤š ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤†ā¤Ēā¤•āĨ€ ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ E2E ā¤•āĨā¤‚ā¤œāĨ€ ā¤•āĨ‹ ā¤šā¤Ÿā¤ž ā¤ĻāĨ‡ā¤—ā¤ž ā¤”ā¤° ā¤†ā¤Ēā¤•āĨ‹ ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤•ā¤° ā¤ĻāĨ‡ā¤—ā¤žāĨ¤
    ā¤œā¤Ŧ ā¤†ā¤Ē ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ Rocket.Chat ā¤†ā¤Ēā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤¨ā¤ˆ ā¤•āĨā¤‚ā¤œāĨ€ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤•ā¤°āĨ‡ā¤—ā¤ž ā¤”ā¤° ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤•ā¤Žā¤°āĨ‡ ā¤¤ā¤• ā¤†ā¤Ēā¤•āĨ€ ā¤Ēā¤šāĨā¤‚ā¤š ā¤Ŧā¤šā¤žā¤˛ ā¤•ā¤°āĨ‡ā¤—ā¤ž ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤¯ā¤ž ā¤…ā¤§ā¤ŋā¤• ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤šāĨˆā¤‚āĨ¤
    E2E ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•āĨ€ ā¤ĒāĨā¤°ā¤•āĨƒā¤¤ā¤ŋ ā¤•āĨ‡ ā¤•ā¤žā¤°ā¤Ŗ, Rocket.Chat ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤•ā¤Žā¤°āĨ‡ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤Ŧā¤šā¤žā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤—ā¤ž ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤", + "E2E_Reset_Other_Key_Warning": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ E2E ā¤•āĨā¤‚ā¤œāĨ€ ā¤•āĨ‹ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤œā¤Ŧ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°āĨ‡ā¤—ā¤ž, ā¤¤āĨ‹ Rocket.Chat ā¤ā¤• ā¤¨ā¤ˆ ā¤•āĨā¤‚ā¤œāĨ€ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤•ā¤°āĨ‡ā¤—ā¤ž ā¤”ā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤•ā¤Žā¤°āĨ‡ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤Ŧā¤šā¤žā¤˛ ā¤•ā¤°āĨ‡ā¤—ā¤ž ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤¯ā¤ž ā¤…ā¤§ā¤ŋā¤• ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤šāĨ‹ā¤‚ā¤—āĨ‡āĨ¤ E2E ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•āĨ€ ā¤ĒāĨā¤°ā¤•āĨƒā¤¤ā¤ŋ ā¤•āĨ‡ ā¤•ā¤žā¤°ā¤Ŗ, Rocket.Chat ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤•ā¤Žā¤°āĨ‡ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤Ŧā¤šā¤žā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤—ā¤ž ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤", + "E2E_unavailable_for_federation": "E2E ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "ECDH_Enabled": "ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ēā¤°ā¤ŋā¤ĩā¤šā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĻāĨ‚ā¤¸ā¤°āĨ€ ā¤Ēā¤°ā¤¤ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Edit": "ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨ ā¤•ā¤°ā¤¨ā¤ž", + "Edit_Business_Hour": "ā¤ĩāĨā¤¯ā¤žā¤ĩā¤¸ā¤žā¤¯ā¤ŋā¤• ā¤¸ā¤Žā¤¯ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Edit_Canned_Response": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Edit_Canned_Responses": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Edit_Custom_Field": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Edit_Department": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Edit_Federated_User_Not_Allowed": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤¸ā¤‚ā¤­ā¤ĩ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Message_AllowSnippeting": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸āĨā¤¨ā¤ŋā¤ĒāĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Edit_Invite": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Edit_previous_message": "`%s` - ā¤Ēā¤ŋā¤›ā¤˛ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Edit_Priority": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Edit_SLA_Policy": "SLA ā¤¨āĨ€ā¤¤ā¤ŋ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", "Edit_Status": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Edit_Tag": "ā¤ŸāĨˆā¤— ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Edit_Trigger": "ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Edit_Unit": "ā¤‡ā¤•ā¤žā¤ˆ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Message_Attachments_GroupAttach": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤…ā¤¨āĨā¤˛ā¤—āĨā¤¨ā¤• ā¤Ŧā¤Ÿā¤¨", + "Message_Attachments_GroupAttachDescription": "ā¤¯ā¤š ā¤†ā¤‡ā¤•ā¤¨āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ā¤• ā¤ĩā¤ŋā¤¸āĨā¤¤ā¤žā¤° ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤ŽāĨ‡ā¤¨āĨ‚ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ā¤°āĨā¤—ā¤¤ ā¤¸ā¤ŽāĨ‚ā¤šā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤•ā¤Ž ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤¸āĨā¤ĒāĨ‡ā¤¸ ā¤˛āĨ‡ā¤¤ā¤ž ā¤šāĨˆ.", + "Edit_User": "ā¤¯āĨ‚ā¤œā¤° ā¤•āĨ‹ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‹", + "edit-livechat-room-customfields": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤°āĨ‚ā¤Ž ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-livechat-room-customfields_description": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤°āĨ‚ā¤Ž ā¤•āĨ‡ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•āĨ‹ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "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": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž E2E ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-other-user-e2ee_description": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ E2E ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•āĨ‹ ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋāĨ¤", + "edit-other-user-info": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-other-user-info_description": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž, ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤¯ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋāĨ¤", + "edit-other-user-password": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-other-user-password_description": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ‹ ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋāĨ¤ ā¤…ā¤¨āĨā¤¯-ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž-ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "edit-other-user-totp": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨ‹ ā¤•ā¤žā¤°ā¤• TOTP ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-other-user-totp_description": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ŸāĨ‚ ā¤ĢāĨˆā¤•āĨā¤Ÿā¤° ā¤ŸāĨ€ā¤“ā¤ŸāĨ€ā¤ĒāĨ€ ā¤•āĨ‹ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "edit-privileged-setting": "ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤žā¤§ā¤ŋā¤•ā¤žā¤° ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-privileged-setting_description": "ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "edit-team": "ā¤ŸāĨ€ā¤Ž ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-team_description": "ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "edit-team-channel": "ā¤ŸāĨ€ā¤Ž ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-team-channel_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "edit-team-member": "ā¤ŸāĨ€ā¤Ž ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-team-member_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "edit-room": "ā¤•ā¤•āĨā¤ˇ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-room_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤¨ā¤žā¤Ž, ā¤ĩā¤ŋā¤ˇā¤¯, ā¤ĒāĨā¤°ā¤•ā¤žā¤° (ā¤¨ā¤ŋā¤œāĨ€ ā¤¯ā¤ž ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ) ā¤”ā¤° ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ (ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¯ā¤ž ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤) ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "edit-room-avatar": "ā¤•ā¤•āĨā¤ˇ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-room-avatar_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ.", + "edit-room-retention-policy": "ā¤•ā¤•āĨā¤ˇ ā¤•āĨ€ ā¤…ā¤ĩā¤§ā¤žā¤°ā¤Ŗ ā¤¨āĨ€ā¤¤ā¤ŋ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edit-room-retention-policy_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ€ ā¤…ā¤ĩā¤§ā¤žā¤°ā¤Ŗ ā¤¨āĨ€ā¤¤ā¤ŋ ā¤•āĨ‹ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡, ā¤‰ā¤¸ā¤ŽāĨ‡ā¤‚ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "edit-omnichannel-contact": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Use_Legacy_Message_Template": "ā¤˛āĨ€ā¤—āĨ‡ā¤¸āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ŸāĨ‡ā¤ŽāĨā¤Ēā¤˛āĨ‡ā¤Ÿ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "multi_line": "ā¤Žā¤˛āĨā¤ŸāĨ€ ā¤˛ā¤žā¤‡ā¤¨", + "edit-omnichannel-contact_description": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•āĨ‹ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Edit_Contact_Profile": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "edited": "ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤", + "Editing_room": "ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨ ā¤•ā¤•āĨā¤ˇ", + "Editing_user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨", + "Editor": "ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤•", + "Message_ShowEditedStatus": "ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Education": "ā¤ļā¤ŋā¤•āĨā¤ˇā¤ž", + "Message_ShowFormattingTips": "ā¤Ģā¤ŧāĨ‰ā¤°āĨā¤ŽāĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤¯āĨā¤•āĨā¤¤ā¤ŋā¤¯ā¤žā¤ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Email": "ā¤ˆā¤ŽāĨ‡ā¤˛", + "Email_Description": "Rocket.Chat ā¤•āĨ‡ ā¤…ā¤‚ā¤Ļā¤° ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨āĨ¤", + "Email_address_to_send_offline_messages": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž", + "Email_already_exists": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "Email_body": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ŦāĨ‰ā¤ĄāĨ€", + "Email_Change_Disabled": "ā¤†ā¤Ēā¤•āĨ‡ Rocket.Chat ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¨āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ŧā¤Ļā¤˛ā¤¨ā¤ž ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤šāĨˆ", + "Email_Changed_Description": "ā¤†ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚:\n - `[ā¤ˆā¤ŽāĨ‡ā¤˛]` ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤\n- ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ `[Site_Name]` ā¤”ā¤° `[Site_URL]`āĨ¤", + "Email_Changed_Email_Subject": "[ā¤¸ā¤žā¤‡ā¤Ÿ_ā¤¨ā¤žā¤Ž] - ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž ā¤Ŧā¤Ļā¤˛ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Email_changed_section": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž ā¤Ŧā¤Ļā¤˛ ā¤—ā¤¯ā¤ž", + "Email_Footer_Description": "ā¤†ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚:\n - ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ `[Site_Name]` ā¤”ā¤° `[Site_URL]`āĨ¤", + "Email_from": "ā¤¸āĨ‡", + "Email_Header_Description": "ā¤†ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚:\n - ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ `[Site_Name]` ā¤”ā¤° `[Site_URL]`āĨ¤", + "Email_Inbox": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸", + "Email_Inboxes": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸", + "Email_Inbox_has_been_added": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Email_Inbox_has_been_removed": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Email_Notification_Mode": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚", + "Email_Notification_Mode_All": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤–/ā¤ĄāĨ€ā¤ā¤Ž", "Email_Notification_Mode_Disabled": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Email_notification_show_message": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "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_verified": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤šāĨā¤†", + "Email_sent": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤ž", + "Emoji": "ā¤‡ā¤ŽāĨ‹ā¤œāĨ€", + "Emoji_picker": "ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤Ēā¤ŋā¤•ā¤°", + "EmojiCustomFilesystem": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž", + "EmojiCustomFilesystem_Description": "ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤•āĨˆā¤¸āĨ‡ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤ŋā¤ ā¤œā¤žā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Empty_no_agent_selected": "ā¤–ā¤žā¤˛āĨ€, ā¤•āĨ‹ā¤ˆ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚", + "Empty_title": "ā¤–ā¤ŧā¤žā¤˛āĨ€ ā¤ļāĨ€ā¤°āĨā¤ˇā¤•", "Enable": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Enable_Auto_Away": "ā¤‘ā¤ŸāĨ‹ ā¤…ā¤ĩāĨ‡ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Enable_CSP": "ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€-ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž-ā¤¨āĨ€ā¤¤ā¤ŋ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Enable_CSP_Description": "ā¤‡ā¤¸ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤•āĨ‹ ā¤¤ā¤Ŧ ā¤¤ā¤• ā¤…ā¤•āĨā¤ˇā¤Ž ā¤¨ ā¤•ā¤°āĨ‡ā¤‚ ā¤œā¤Ŧ ā¤¤ā¤• ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤•āĨ‹ā¤ˆ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ŧā¤ŋā¤˛āĨā¤Ą ā¤¨ ā¤šāĨ‹ ā¤”ā¤° ā¤‡ā¤¨ā¤˛ā¤žā¤‡ā¤¨-ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤•āĨ‡ ā¤•ā¤žā¤°ā¤Ŗ ā¤¸ā¤Žā¤¸āĨā¤¯ā¤žā¤ā¤ ā¤¨ ā¤† ā¤°ā¤šāĨ€ ā¤šāĨ‹ā¤‚", + "Extra_CSP_Domains": "ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤¸āĨ€ā¤ā¤¸ā¤ĒāĨ€ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "Extra_CSP_Domains_Description": "ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€-ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž-ā¤¨āĨ€ā¤¤ā¤ŋ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "Enable_Desktop_Notifications": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Enable_inquiry_fetch_by_stream": "ā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ ā¤ĒāĨ‚ā¤›ā¤¤ā¤žā¤› ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤˛ā¤žā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Enable_omnichannel_auto_close_abandoned_rooms": "ā¤†ā¤—ā¤‚ā¤¤āĨā¤• ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤›āĨ‹ā¤Ąā¤ŧāĨ‡ ā¤—ā¤ ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Enable_Password_History": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Enable_Password_History_Description": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤Ēā¤¨āĨ‡ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤šā¤žā¤˛ ā¤šāĨ€ ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤•āĨā¤› ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤ĄāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "Enable_Svg_Favicon": "ā¤ā¤¸ā¤ĩāĨ€ā¤œāĨ€ ā¤Ģā¤ŧāĨ‡ā¤ĩā¤ŋā¤•āĨ‰ā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Enable_two-factor_authentication": "TOTP ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĻāĨ‹-ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Enable_two-factor_authentication_email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĻāĨ‹-ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Enable_unlimited_apps": "ā¤…ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", "Enabled": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯", + "Encrypted": "ā¤•āĨ‚ā¤Ÿ ā¤°āĨ‚ā¤Ē ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Encrypted_channel_Description": "ā¤ā¤‚ā¤Ą-ā¤ŸāĨ‚-ā¤ā¤‚ā¤Ą ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤šāĨˆā¤¨ā¤˛āĨ¤ ā¤–āĨ‹ā¤œ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤•ā¤žā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°āĨ‡ā¤—āĨ€ ā¤”ā¤° ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤Ļā¤ŋā¤–ā¤ž ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆā¤‚āĨ¤", + "Encrypted_key_title": "ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤‚ā¤Ą-ā¤ŸāĨ‚-ā¤ā¤‚ā¤Ą ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚ (e2ee-ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ)", + "Encrypted_message": "ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Encrypted_setting_changed_successfully": "ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ ā¤ĻāĨ€ ā¤—ā¤ˆ", + "Encrypted_not_available": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Encryption_key_saved_successfully": "ā¤†ā¤Ēā¤•āĨ€ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•āĨā¤‚ā¤œāĨ€ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤¸ā¤šāĨ‡ā¤œāĨ€ ā¤—ā¤ˆ ā¤ĨāĨ€.", + "EncryptionKey_Change_Disabled": "ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ€ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•āĨā¤‚ā¤œāĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸āĨ‡ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤†ā¤Ēā¤•āĨ€ ā¤¨ā¤ŋā¤œāĨ€ ā¤•āĨā¤‚ā¤œāĨ€ ā¤‡ā¤¸ ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ ā¤Ēā¤° ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤ ā¤¨ā¤¯ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤…ā¤Ēā¤¨āĨ€ ā¤¨ā¤ŋā¤œāĨ€ ā¤•āĨā¤‚ā¤œāĨ€ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ€ ā¤šāĨ‹ā¤—āĨ€ ā¤¯ā¤ž ā¤•ā¤ŋā¤¸āĨ€ ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž ā¤œā¤šā¤žā¤‚ ā¤•āĨā¤‚ā¤œāĨ€ ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤˛āĨ‹ā¤Ą ā¤šāĨˆāĨ¤", + "End": "ā¤…ā¤‚ā¤¤", + "End_suspicious_sessions": "ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤¸ā¤‚ā¤Ļā¤ŋā¤—āĨā¤§ ā¤¸ā¤¤āĨā¤° ā¤•āĨ‹ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "End_call": "ā¤•āĨ‰ā¤˛ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "End_conversation": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Expand_view": "ā¤ĻāĨƒā¤ļāĨā¤¯ ā¤•ā¤ž ā¤ĩā¤ŋā¤¸āĨā¤¤ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Explore": "ā¤…ā¤¨āĨā¤ĩāĨ‡ā¤ˇā¤Ŗ ā¤•ā¤°ā¤¨ā¤ž", + "Explore_marketplace": "ā¤Ŧā¤žā¤œā¤ŧā¤žā¤° ā¤•ā¤ž ā¤…ā¤¨āĨā¤ĩāĨ‡ā¤ˇā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "Explore_the_marketplace_to_find_awesome_apps": "Rocket.Chat ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ļā¤žā¤¨ā¤Ļā¤žā¤° ā¤ā¤ĒāĨā¤¸ ā¤ĸāĨ‚ā¤‚ā¤ĸā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ŧā¤žā¤œā¤ŧā¤žā¤° ā¤•ā¤ž ā¤…ā¤¨āĨā¤ĩāĨ‡ā¤ˇā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "Export": "ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤", + "End_Call": "ā¤•āĨ‰ā¤˛ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "End_OTR": "ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Engagement": "ā¤¸ā¤—ā¤žā¤ˆ", + "Engagement_Dashboard": "ā¤¸ā¤—ā¤žā¤ˆ ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą", + "Enrich_your_workspace": "ā¤¸ā¤šā¤­ā¤žā¤—ā¤ŋā¤¤ā¤ž ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤°ā¤ŋā¤ĒāĨā¤°āĨ‡ā¤•āĨā¤ˇāĨā¤¯ ā¤•āĨ‹ ā¤¸ā¤ŽāĨƒā¤ĻāĨā¤§ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤…ā¤Ēā¤¨āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚, ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤”ā¤° ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĩāĨā¤¯ā¤žā¤ĩā¤šā¤žā¤°ā¤ŋā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤†ā¤‚ā¤•ā¤Ąā¤ŧāĨ‹ā¤‚ ā¤•ā¤ž ā¤ĩā¤ŋā¤ļāĨā¤˛āĨ‡ā¤ˇā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¯āĨ‹ā¤œā¤¨ā¤žā¤“ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛.", + "Ensure_secure_workspace_access": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤¤ā¤• ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤Ēā¤šāĨā¤‚ā¤š ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Enter": "ā¤ĒāĨā¤°ā¤ĩāĨ‡ā¤ļ ā¤•ā¤°ā¤¨ā¤ž", + "Enter_a_custom_message": "ā¤ā¤• ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Enter_a_department_name": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Enter_a_name": "ā¤¨ā¤žā¤Ž ā¤Ąā¤žā¤˛āĨ‡ā¤‚", + "Enter_a_regex": "ā¤°āĨ‡ā¤—āĨ‡ā¤•āĨā¤¸ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Enter_a_room_name": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Enter_a_tag": "ā¤ā¤• ā¤ŸāĨˆā¤— ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Enter_a_username": "ā¤ā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Enter_Alternative": "ā¤ĩāĨˆā¤•ā¤˛āĨā¤Ēā¤ŋā¤• ā¤ŽāĨ‹ā¤Ą (ā¤ā¤‚ā¤Ÿā¤° + Ctrl/Alt/Shift/CMD ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤­āĨ‡ā¤œāĨ‡ā¤‚)", + "Enter_authentication_code": "ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‹ā¤Ą ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Enter_Behaviour": "ā¤•āĨā¤‚ā¤œāĨ€ ā¤ĩāĨā¤¯ā¤ĩā¤šā¤žā¤° ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Enter_Behaviour_Description": "ā¤¯ā¤Ļā¤ŋ ā¤ā¤‚ā¤Ÿā¤° ā¤•āĨā¤‚ā¤œāĨ€ ā¤ā¤• ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œāĨ‡ā¤—āĨ€ ā¤¯ā¤ž ā¤˛ā¤žā¤‡ā¤¨ ā¤ŦāĨā¤°āĨ‡ā¤• ā¤•ā¤°āĨ‡ā¤—āĨ€ ā¤¤āĨ‹ ā¤¯ā¤š ā¤Ŧā¤Ļā¤˛ ā¤œā¤žā¤ā¤—ā¤ž", + "Enter_E2E_password": "E2E ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Enter_name_here": "ā¤¯ā¤šā¤žā¤‚ ā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Enter_Normal": "ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯ ā¤ŽāĨ‹ā¤Ą (ā¤ā¤‚ā¤Ÿā¤° ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤­āĨ‡ā¤œāĨ‡ā¤‚)", + "Enter_to": "ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤°āĨā¤œ", + "Enter_your_E2E_password": "ā¤…ā¤Ēā¤¨ā¤ž E2E ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Enter_your_password_to_delete_your_account": "ā¤…ā¤Ēā¤¨ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤‡ā¤¸āĨ‡ ā¤…ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Enter_your_username_to_delete_your_account": "ā¤…ā¤Ēā¤¨ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤‡ā¤¸āĨ‡ ā¤…ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Premium_capabilities": "ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤•āĨā¤ˇā¤Žā¤¤ā¤žā¤ā¤‚", + "Premium_Departments_title": "ā¤—āĨā¤°ā¤žā¤šā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛ā¤—ā¤žā¤ā¤‚ ā¤”ā¤° ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤‰ā¤¤āĨā¤Ēā¤žā¤Ļā¤•ā¤¤ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤§ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Premium_Departments_description_upgrade": "ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ ā¤Ēā¤° ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤•āĨ‡ā¤ĩā¤˛ ā¤ā¤• ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤Ŧā¤¨ā¤ž ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤¸āĨ€ā¤Žā¤žā¤ā¤‚ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤”ā¤° ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤¸āĨā¤Ēā¤°ā¤šā¤žā¤°āĨā¤œ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Premium_Departments_description_free_trial": "ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ ā¤Ēā¤° ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤ā¤• ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤Ŧā¤¨ā¤ž ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤…ā¤¨āĨ‡ā¤• ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤œ ā¤šāĨ€ ā¤¨ā¤ŋā¤ƒā¤ļāĨā¤˛āĨā¤• ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚!", + "Premium_License": "ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸", + "Premium_only": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž", + "Entertainment": "ā¤Žā¤¨āĨ‹ā¤°ā¤‚ā¤œā¤¨", + "Error": "ā¤—ā¤˛ā¤¤āĨ€", + "Error_something_went_wrong": "ā¤‰ā¤Ģā¤ŧ! ā¤•āĨā¤› ā¤—ā¤˛ā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤žāĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĒāĨƒā¤ˇāĨā¤  ā¤ĒāĨā¤¨ā¤ƒ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚ ā¤¯ā¤ž ā¤•ā¤ŋā¤¸āĨ€ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Error_404": "ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ 404", + "Error_changing_password": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "Error_loading_pages": "ā¤ĒāĨ‡ā¤œ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "Error_login_blocked_for_ip": "ā¤‡ā¤¸ ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤…ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Error_login_blocked_for_user": "ā¤‡ā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤…ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ: ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤•ā¤ˆ ā¤‰ā¤Ļā¤žā¤šā¤°ā¤ŖāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤šā¤˛ā¤žā¤¨āĨ‡ ā¤Ēā¤° ā¤“ā¤ĒāĨā¤˛āĨ‰ā¤— ā¤ŸāĨ‡ā¤˛ā¤ŋā¤‚ā¤— ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆ", + "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤†ā¤Ēā¤•ā¤ž MongoDB ā¤°āĨ‡ā¤ĒāĨā¤˛ā¤ŋā¤•ā¤žā¤¸āĨ‡ā¤Ÿ ā¤ŽāĨ‹ā¤Ą ā¤Ēā¤° ā¤šāĨˆ ā¤”ā¤° MONGO_OPLOG_URL ā¤Ēā¤°āĨā¤¯ā¤žā¤ĩā¤°ā¤Ŗ ā¤šā¤° ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤° ā¤¸ā¤šāĨ€ ā¤ĸā¤‚ā¤— ā¤¸āĨ‡ ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤šāĨˆ", + "Error_sending_livechat_offline_message": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "Error_sending_livechat_transcript": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "Error_Site_URL": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤¸ā¤žā¤‡ā¤Ÿ_ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Error_Site_URL_description": "ā¤•āĨƒā¤Ēā¤¯ā¤ž, ā¤…ā¤Ēā¤¨āĨ€ \"ā¤¸ā¤žā¤‡ā¤Ÿ_ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛\" ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤Ēā¤žā¤ā¤‚ [ā¤¯ā¤šā¤žā¤‚](https://go.rocket.chat/i/invalid-site-url)", + "error-action-not-allowed": "{{action}} ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-agent-offline": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤šāĨˆ", + "error-agent-status-service-offline": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤šāĨˆ ā¤¯ā¤ž ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ā¤ĩā¤ž ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-application-not-found": "ā¤…ā¤¨āĨā¤ĒāĨā¤°ā¤¯āĨ‹ā¤— ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "error-archived-duplicate-name": "'{{room_name}}' ā¤¨ā¤žā¤Ž ā¤¸āĨ‡ ā¤ā¤• ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤šāĨˆā¤¨ā¤˛ ā¤šāĨˆ", + "error-avatar-invalid-url": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤…ā¤ĩā¤¤ā¤žā¤° URL: {{url}}", + "error-avatar-url-handling": "{{username}} ā¤•āĨ‡ ā¤˛ā¤ŋā¤ URL ({{url}}) ā¤¸āĨ‡ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‹ ā¤¸ā¤‚ā¤­ā¤žā¤˛ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "error-business-hours-are-closed": "ā¤ĩāĨā¤¯ā¤žā¤ĩā¤¸ā¤žā¤¯ā¤ŋā¤• ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨˆā¤‚", + "error-business-hour-finish-time-before-start-time": "ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ā¤ŋ ā¤•ā¤ž ā¤¸ā¤Žā¤¯ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤¸ā¤Žā¤¯ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤•ā¤ž ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤", + "error-business-hour-finish-time-equals-start-time": "ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤”ā¤° ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ā¤ŋ ā¤•ā¤ž ā¤¸ā¤Žā¤¯ ā¤ā¤• ā¤¸ā¤Žā¤žā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž", + "error-blocked-username": "{{field}} ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤šāĨˆ ā¤”ā¤° ā¤‡ā¤¸ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž!", + "error-canned-response-not-found": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛āĨ€", + "error-cannot-delete-app-user": "ā¤ā¤Ē ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ, ā¤‡ā¤¸āĨ‡ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤ā¤Ē ā¤•āĨ‹ ā¤…ā¤¨ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "error-cant-add-federated-users": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤—āĨˆā¤°-ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤°āĨ‚ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž", + "error-cant-invite-for-direct-room": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤¸āĨ€ā¤§āĨ‡ ā¤°āĨ‚ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž", + "error-channels-setdefault-is-same": "ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ€ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤ĩā¤šāĨ€ ā¤šāĨˆ ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤‡ā¤¸āĨ‡ ā¤Ŧā¤Ļā¤˛ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "error-channels-setdefault-missing-default-param": "ā¤ŦāĨ‰ā¤ĄāĨ€ā¤Ēā¤°ā¤Ž 'ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ' ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ", + "error-could-not-change-email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤Ŧā¤Ļā¤˛ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤ž", + "error-could-not-change-name": "ā¤¨ā¤žā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤Ŧā¤Ļā¤˛ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤ž", + "error-could-not-change-username": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤Ŧā¤Ļā¤˛ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤ž", + "error-comment-is-required": "ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ", + "error-custom-field-name-already-exists": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤¨ā¤žā¤Ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "error-delete-protected-role": "ā¤¸ā¤‚ā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž", + "error-department-not-found": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "error-department-removal-disabled": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤¨ā¤ŋā¤ˇāĨā¤•ā¤žā¤¸ā¤¨ ā¤ĒāĨā¤°ā¤ļā¤žā¤¸ā¤¨ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ‡ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚", + "error-direct-message-file-upload-not-allowed": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤žā¤ā¤žā¤•ā¤°ā¤Ŗ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-duplicate-channel-name": "'{{channel_name}}' ā¤¨ā¤žā¤Ž ā¤¸āĨ‡ ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "error-duplicate-priority-name": "ā¤¸ā¤Žā¤žā¤¨ ā¤¨ā¤žā¤Ž ā¤ĩā¤žā¤˛āĨ€ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "error-edit-permissions-not-allowed": "ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-email-domain-blacklisted": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤ŦāĨā¤˛āĨˆā¤•ā¤˛ā¤ŋā¤¸āĨā¤ŸāĨ‡ā¤Ą ā¤šāĨˆ", + "error-email-body-not-initialized": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•ā¤ž ā¤ŽāĨā¤–āĨā¤¯ ā¤­ā¤žā¤— ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž. ā¤°ā¤ŋā¤š ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤Ēā¤° ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤šāĨ‡ā¤Ąā¤° ā¤”ā¤° ā¤ĢāĨā¤Ÿā¤° ā¤•āĨ‹ ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤•ā¤°āĨ‡ā¤‚", + "error-email-send-failed": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ: {{message}}", + "error-essential-app-disabled": "ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ: ā¤ā¤• Rocket.Chat ā¤ā¤Ē ā¤œāĨ‹ ā¤‡ā¤¸ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ, ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆāĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ‡ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚", + "error-failed-to-delete-department": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤ŋā¤Ģā¤˛", + "error-field-unavailable": "{{field}} ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ :(", + "error-file-too-large": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ŧā¤šāĨā¤¤ ā¤Ŧā¤Ąā¤ŧāĨ€ ā¤šāĨˆ", + "error-forwarding-chat": "ā¤šāĨˆā¤Ÿ ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤•āĨā¤› ā¤—ā¤˛ā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤Ŧā¤žā¤Ļ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "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-insufficient-permission": "ā¤—ā¤˛ā¤¤āĨ€! ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤‡ā¤¸ ā¤‘ā¤Ēā¤°āĨ‡ā¤ļā¤¨ ā¤•āĨ‹ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• '{{permission}}' ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-inquiry-taken": "ā¤ĒāĨ‚ā¤›ā¤¤ā¤žā¤› ā¤šāĨ‹ ā¤šāĨā¤•āĨ€ ā¤šāĨˆ", + "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-dates": "ā¤Ļā¤ŋā¤¨ā¤žā¤‚ā¤• ā¤¸āĨ‡ ā¤Ļā¤ŋā¤¨ā¤žā¤‚ā¤• ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž", + "error-invalid-description": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ", + "error-invalid-domain": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "error-invalid-email": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤ˆā¤ŽāĨ‡ā¤˛ {{email}}", + "error-invalid-email-address": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž", + "error-invalid-email-inbox": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸", + "error-email-inbox-not-found": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "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-password": "ā¤…ā¤ĩāĨˆā¤§ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "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-user": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "error-invalid-username": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "error-invalid-value": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤ŽāĨ‚ā¤˛āĨā¤¯", + "error-invalid-webhook-response": "ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¨āĨ‡ 200 ā¤•āĨ‡ ā¤…ā¤˛ā¤žā¤ĩā¤ž ā¤•ā¤ŋā¤¸āĨ€ ā¤…ā¤¨āĨā¤¯ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĻāĨ€", + "error-license-user-limit-reached": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤¤ā¤• ā¤Ēā¤šāĨā¤ā¤š ā¤—ā¤¯ā¤ž ā¤šāĨˆ.", + "error-logged-user-not-in-room": "ā¤†ā¤Ē `%s` ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "error-max-departments-number-reached": "ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤¨āĨā¤Žā¤¤ ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤¤ā¤• ā¤Ēā¤šāĨā¤ā¤š ā¤—ā¤āĨ¤ ā¤¨ā¤ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ sales@rocket.chat ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "error-max-guests-number-reached": "ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤¨āĨā¤Žā¤¤ ā¤…ā¤¤ā¤ŋā¤Ĩā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤¤ā¤• ā¤Ēā¤šāĨā¤ā¤š ā¤—ā¤ ā¤šāĨˆā¤‚āĨ¤ ā¤¨ā¤ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ sales@rocket.chat ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "error-max-number-simultaneous-chats-reached": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ā¤• ā¤¸ā¤žā¤Ĩ ā¤šāĨˆā¤Ÿ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤—ā¤ˆ ā¤šāĨˆāĨ¤", + "error-max-rooms-per-guest-reached": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤…ā¤¤ā¤ŋā¤Ĩā¤ŋ ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤¤ā¤• ā¤Ēā¤šāĨā¤ā¤š ā¤—ā¤ˆ ā¤šāĨˆāĨ¤", + "error-mac-limit-reached": "ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Žā¤žā¤¸ā¤ŋā¤• ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤•āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤—ā¤ˆ ā¤šāĨˆāĨ¤", + "error-message-deleting-blocked": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤šāĨˆ", + "error-message-editing-blocked": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨ ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤šāĨˆ", + "error-message-size-exceeded": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•ā¤ž ā¤†ā¤•ā¤žā¤° Message_MaxAllowedSize ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤šāĨˆ", + "error-missing-unsubscribe-link": "ā¤†ā¤Ēā¤•āĨ‹ [ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚] ā¤˛ā¤ŋā¤‚ā¤• ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "error-no-tokens-for-this-user": "ā¤‡ā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‹ā¤ˆ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "error-no-agents-online-in-department": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‹ā¤ˆ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-no-message-for-unread": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‹ā¤ˆ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "error-not-allowed": "ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚", + "error-not-authorized": "ā¤…ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "error-office-hours-are-closed": "ā¤•ā¤žā¤°āĨā¤¯ā¤žā¤˛ā¤¯ ā¤¸ā¤Žā¤¯ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨˆ.", + "Estimated_due_time": "ā¤…ā¤¨āĨā¤Žā¤žā¤¨ā¤ŋā¤¤ ā¤¨ā¤ŋā¤¯ā¤¤ ā¤¸ā¤Žā¤¯", + "error-password-in-history": "ā¤Ļā¤°āĨā¤œ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ēā¤šā¤˛āĨ‡ ā¤‡ā¤¸āĨā¤¤āĨ‡ā¤Žā¤žā¤˛ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤šāĨā¤•ā¤ž ā¤šāĨˆ", + "error-password-policy-not-met": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ€ ā¤¨āĨ€ā¤¤ā¤ŋ ā¤•āĨ‡ ā¤…ā¤¨āĨā¤°āĨ‚ā¤Ē ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Estimated_due_time_in_minutes": "ā¤…ā¤¨āĨā¤Žā¤žā¤¨ā¤ŋā¤¤ ā¤¨ā¤ŋā¤¯ā¤¤ ā¤¸ā¤Žā¤¯ (ā¤Žā¤ŋā¤¨ā¤ŸāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤Žā¤¯)", + "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": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ€ ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇ ā¤ĩā¤°āĨā¤Ŗ ā¤•āĨ€ ā¤¨āĨ€ā¤¤ā¤ŋ ā¤•āĨ‹ ā¤ĒāĨ‚ā¤°ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "Please_go_to_the_Administration_page_then_Livechat_Facebook": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĒāĨā¤°ā¤ļā¤žā¤¸ā¤¨ ā¤ĒāĨƒā¤ˇāĨā¤  ā¤Ēā¤° ā¤œā¤žā¤ā¤‚, ā¤Ģā¤ŋā¤° ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ > ā¤ĢāĨ‡ā¤¸ā¤ŦāĨā¤• ā¤Ēā¤° ā¤œā¤žā¤ā¤‚", + "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-returning-inquiry": "ā¤ĒāĨ‚ā¤›ā¤¤ā¤žā¤› ā¤•āĨ‹ ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛āĨŒā¤Ÿā¤žā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "error-role-in-use": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤¯ā¤š ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ", + "error-role-name-required": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ", + "error-room-does-not-exist": "ā¤¯ā¤š ā¤•ā¤Žā¤°ā¤ž ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-role-already-present": "ā¤‡ā¤¸ ā¤¨ā¤žā¤Ž ā¤•āĨ€ ā¤ā¤• ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "error-room-already-closed": "ā¤•ā¤Žā¤°ā¤ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨˆ", + "error-room-is-not-closed": "ā¤•ā¤Žā¤°ā¤ž ā¤Ŧā¤‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-room-onHold": "ā¤—ā¤˛ā¤¤āĨ€! ā¤•ā¤Žā¤°ā¤ž ā¤°āĨā¤•ā¤ž ā¤šāĨā¤† ā¤šāĨˆ", + "error-room-is-already-on-hold": "ā¤—ā¤˛ā¤¤āĨ€! ā¤•ā¤Žā¤°ā¤ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤šāĨˆ", + "error-room-not-on-hold": "ā¤—ā¤˛ā¤¤āĨ€! ā¤•ā¤Žā¤°ā¤ž ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "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-a-premium-feature": "ā¤¯ā¤š ā¤ā¤• ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤ĢāĨ€ā¤šā¤° ā¤¸āĨ‡ ā¤šāĨˆ", + "error-token-already-exists": "ā¤‡ā¤¸ ā¤¨ā¤žā¤Ž ā¤•ā¤ž ā¤ā¤• ā¤ŸāĨ‹ā¤•ā¤¨ ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "error-token-does-not-exists": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-too-many-requests": "ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ, ā¤Ŧā¤šāĨā¤¤ ā¤¸ā¤žā¤°āĨ‡ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§. ā¤•āĨƒā¤ĒāĨā¤¯ā¤ž ā¤§āĨ€ā¤°āĨ‡ā¤‚ ā¤•ā¤°āĨ‹āĨ¤ ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤†ā¤Ēā¤•āĨ‹ {{seconds}} ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤¤ā¤• ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤°ā¤¨āĨ€ ā¤šāĨ‹ā¤—āĨ€āĨ¤", + "error-transcript-already-requested": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛ā¤ŋā¤Ēā¤ŋ ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤šāĨā¤•ā¤ž ā¤šāĨˆ", + "error-unpinning-message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤¨ā¤Ēā¤ŋā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤ž", + "error-user-deactivated": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-user-has-no-roles": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ€ ā¤•āĨ‹ā¤ˆ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-user-is-not-activated": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-user-is-not-agent": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ā¤• ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "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-no-permission-team-channel": "ā¤†ā¤Ēā¤•āĨ‹ ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "error-no-owner-channel": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Žā¤žā¤˛ā¤ŋā¤• ā¤šāĨ€ ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "error-unable-to-update-priority": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¸ā¤Žā¤°āĨā¤Ĩ", + "error-you-are-last-owner": "ā¤†ā¤Ē ā¤†ā¤–ā¤ŋā¤°āĨ€ ā¤Žā¤žā¤˛ā¤ŋā¤• ā¤šāĨˆā¤‚. ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤•ā¤Žā¤°ā¤ž ā¤›āĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤¨ā¤ ā¤Žā¤žā¤˛ā¤ŋā¤• ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "error-saving-sla": "SLA ā¤¸ā¤šāĨ‡ā¤œā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤ā¤• ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤šāĨā¤ˆ", + "error-duplicated-sla": "ā¤¸ā¤Žā¤žā¤¨ ā¤¨ā¤žā¤Ž ā¤¯ā¤ž ā¤¨ā¤ŋā¤¯ā¤¤ ā¤¸ā¤Žā¤¯ ā¤ĩā¤žā¤˛ā¤ž ā¤ā¤• SLA ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "error-cannot-place-chat-on-hold": "ā¤†ā¤Ē ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤°ā¤– ā¤¸ā¤•ā¤¤āĨ‡", + "error-contact-sent-last-message-so-cannot-place-on-hold": "ā¤œā¤Ŧ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤¨āĨ‡ ā¤†ā¤–ā¤ŋā¤°āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œ ā¤Ļā¤ŋā¤¯ā¤ž ā¤šāĨ‹ ā¤¤āĨ‹ ā¤†ā¤Ē ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤°ā¤– ā¤¸ā¤•ā¤¤āĨ‡", + "error-unserved-rooms-cannot-be-placed-onhold": "ā¤Ēā¤°āĨ‹ā¤¸āĨ‡ ā¤œā¤žā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ‹ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤°ā¤–ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž", + "Workspace_exceeded_MAC_limit_disclaimer": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤•āĨ‹ā¤‚ ā¤•āĨ€ ā¤Žā¤žā¤¸ā¤ŋā¤• ā¤¸āĨ€ā¤Žā¤ž ā¤•āĨ‹ ā¤Ēā¤žā¤° ā¤•ā¤° ā¤—ā¤¯ā¤ž ā¤šāĨˆ. ā¤‡ā¤¸ ā¤¸ā¤Žā¤¸āĨā¤¯ā¤ž ā¤•āĨ‡ ā¤¸ā¤Žā¤žā¤§ā¤žā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¸āĨ‡ ā¤Ŧā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "You_do_not_have_permission_to_do_this": "ā¤¤āĨā¤Žā¤•āĨ‹ ā¤¯ā¤š ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤‡ā¤œā¤žā¤œā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "You_do_not_have_permission_to_execute_this_command": "ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤•ā¤Žā¤žā¤‚ā¤Ą ā¤¨ā¤ŋā¤ˇāĨā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ēā¤°āĨā¤¯ā¤žā¤ĒāĨā¤¤ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯ā¤žā¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚: `/{{command}}`", + "You_have_reached_the_limit_active_costumers_this_month": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤Žā¤šāĨ€ā¤¨āĨ‡ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤—āĨā¤°ā¤žā¤šā¤•āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨ€ā¤Žā¤ž ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤—ā¤ ā¤šāĨˆā¤‚", + "Errors_and_Warnings": "ā¤¤āĨā¤°āĨā¤Ÿā¤ŋā¤¯ā¤žā¤ ā¤”ā¤° ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨ā¤ŋā¤¯ā¤žā¤", + "Esc_to": "Esc ā¤•āĨ‹", + "Estimated_wait_time": "ā¤…ā¤¨āĨā¤Žā¤žā¤¨ā¤ŋā¤¤ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤¸ā¤Žā¤¯", + "Estimated_wait_time_in_minutes": "ā¤…ā¤¨āĨā¤Žā¤žā¤¨ā¤ŋā¤¤ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤¸ā¤Žā¤¯ (ā¤Žā¤ŋā¤¨ā¤ŸāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤Žā¤¯)", + "Event_notifications": "ā¤˜ā¤Ÿā¤¨ā¤ž ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚", + "Event_notifications_description": "ā¤‡ā¤¸ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤•āĨ‡ ā¤†ā¤Ē ā¤ā¤Ē ā¤•āĨ‹ ā¤†ā¤—ā¤žā¤ŽāĨ€ ā¤˜ā¤Ÿā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤°āĨ‹ā¤•āĨ‡ā¤‚ā¤—āĨ‡āĨ¤", + "Event_Trigger": "ā¤‡ā¤ĩāĨ‡ā¤‚ā¤Ÿ ā¤ŸāĨā¤°ā¤ŋā¤—ā¤°", + "Event_Trigger_Description": "ā¤šāĨā¤¨āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤•ā¤ŋā¤¸ ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤•ā¤ž ā¤ˆā¤ĩāĨ‡ā¤‚ā¤Ÿ ā¤‡ā¤¸ ā¤†ā¤‰ā¤Ÿā¤—āĨ‹ā¤‡ā¤‚ā¤— ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤‡ā¤‚ā¤ŸāĨ€ā¤—āĨā¤°āĨ‡ā¤ļā¤¨ ā¤•āĨ‹ ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤—ā¤ž", + "every_5_minutes": "ā¤šā¤° 5 ā¤Žā¤ŋā¤¨ā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_10_seconds": "ā¤šā¤° 10 ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_30_seconds": "ā¤šā¤° 30 ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_10_minutes": "ā¤šā¤° 10 ā¤Žā¤ŋā¤¨ā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_30_minutes": "ā¤šā¤° 30 ā¤Žā¤ŋā¤¨ā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_day": "ā¤šā¤° ā¤Ļā¤ŋā¤¨ ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_hour": "ā¤šā¤° ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_minute": "ā¤šā¤° ā¤Žā¤ŋā¤¨ā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_second": "ā¤šā¤° ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_six_hours": "ā¤šā¤° ā¤›ā¤š ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_12_hours": "ā¤šā¤° 12 ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_24_hours": "ā¤šā¤° 24 ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤°", + "every_48_hours": "ā¤šā¤° 48 ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤°", + "Everyone_can_access_this_channel": "ā¤šā¤° ā¤•āĨ‹ā¤ˆ ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Exact": "ā¤ā¤•ā¤Ļā¤Ž ā¤¸ā¤šāĨ€", + "Example_payload": "ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤ĒāĨ‡ā¤˛āĨ‹ā¤Ą", + "Example_s": "ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: %s", + "except_pinned": "(ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤›āĨ‹ā¤Ąā¤ŧā¤•ā¤° ā¤œā¤ŋā¤¨āĨā¤šāĨ‡ā¤‚ ā¤Ēā¤ŋā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ)", + "Exclude_Botnames": "ā¤ŦāĨ‰ā¤ŸāĨā¤¸ ā¤•āĨ‹ ā¤Ŧā¤žā¤šā¤° ā¤¨ā¤ŋā¤•ā¤žā¤˛āĨ‡ā¤‚", + "Exclude_Botnames_Description": "ā¤‰ā¤¨ ā¤ŦāĨ‰ā¤ŸāĨā¤¸ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤šā¤žā¤°-ā¤ĒāĨā¤°ā¤¸ā¤žā¤° ā¤¨ ā¤•ā¤°āĨ‡ā¤‚ ā¤œā¤ŋā¤¨ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤‰ā¤Ēā¤°āĨ‹ā¤•āĨā¤¤ ā¤°āĨ‡ā¤—āĨā¤˛ā¤° ā¤ā¤•āĨā¤¸ā¤ĒāĨā¤°āĨ‡ā¤ļā¤¨ ā¤¸āĨ‡ ā¤ŽāĨ‡ā¤˛ ā¤–ā¤žā¤¤ā¤ž ā¤šāĨ‹āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤–ā¤žā¤˛āĨ€ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤, ā¤¤āĨ‹ ā¤ŦāĨ‰ā¤ŸāĨā¤¸ ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤ŋā¤¤ ā¤šāĨ‹ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "Exclude_pinned": "ā¤Ēā¤ŋā¤¨ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ŧā¤žā¤šā¤° ā¤¨ā¤ŋā¤•ā¤žā¤˛āĨ‡ā¤‚", + "Execute_Synchronization_Now": "ā¤…ā¤­āĨ€ ā¤¸ā¤ŋā¤‚ā¤•āĨā¤°āĨ‹ā¤¨ā¤žā¤‡ā¤œā¤ŧāĨ‡ā¤ļā¤¨ ā¤¨ā¤ŋā¤ˇāĨā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Exit_Full_Screen": "ā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤¸āĨ‡ ā¤Ŧā¤žā¤šā¤° ā¤¨ā¤ŋā¤•ā¤˛āĨ‡ā¤‚", + "Expand": "ā¤Ŧā¤ĸā¤ŧā¤žā¤¨ā¤ž", + "Experimental_Feature_Alert": "ā¤¯ā¤š ā¤ā¤• ā¤ĒāĨā¤°ā¤žā¤¯āĨ‹ā¤—ā¤ŋā¤• ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤šāĨˆ! ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤§āĨā¤¯ā¤žā¤¨ ā¤°ā¤–āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤¯ā¤š ā¤­ā¤ĩā¤ŋā¤ˇāĨā¤¯ ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤•ā¤ŋā¤¸āĨ€ ā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤•āĨ‡ ā¤Ŧā¤Ļā¤˛ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ, ā¤ŸāĨ‚ā¤Ÿ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ ā¤¯ā¤ž ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤­āĨ€ ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Expired": "ā¤–ā¤¤āĨā¤Ž ā¤šāĨ‹ ā¤šāĨā¤•ā¤ž", + "Expiration": "ā¤¸ā¤Žā¤¯ ā¤¸āĨ€ā¤Žā¤ž ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ā¤ŋ", + "Expiration_(Days)": "ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ā¤ŋ (ā¤Ļā¤ŋā¤¨)", + "Export_as_file": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Export_Messages": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Export_My_Data": "ā¤ŽāĨ‡ā¤°ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚ (JSON)", + "expression": "ā¤…ā¤­ā¤ŋā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋ", + "Extended": "ā¤ĩā¤ŋā¤¸āĨā¤¤ā¤žā¤°ā¤ŋā¤¤", + "Extensions": "ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨", + "Extension_Number": "ā¤ĩā¤ŋā¤¸āĨā¤¤ā¤žā¤°ā¤Ŗ ā¤•āĨā¤°ā¤Žā¤žā¤‚ā¤•", + "Extension_Status": "ā¤ĩā¤ŋā¤¸āĨā¤¤ā¤žā¤° ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "External": "ā¤Ŧā¤žā¤šā¤°āĨ€", + "External_Domains": "ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "External_Queue_Service_URL": "ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤•ā¤¤ā¤žā¤° ā¤¸āĨ‡ā¤ĩā¤ž ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "External_Service": "ā¤Ŧā¤žā¤šāĨā¤¯ ā¤¸āĨ‡ā¤ĩā¤ž", + "External_Users": "ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚", + "Extremely_likely": "ā¤Ŧā¤šāĨā¤¤ ā¤œāĨā¤¯ā¤žā¤Ļā¤ž ā¤¸ā¤‚ā¤­ā¤žā¤ĩā¤¨ā¤ž", + "Facebook": "ā¤ĢāĨ‡ā¤¸ā¤ŦāĨā¤•", + "Facebook_Page": "ā¤ĢāĨ‡ā¤¸ā¤ŦāĨā¤• ā¤ĒāĨ‡ā¤œ", + "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": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤ŋā¤Ģā¤˛", + "Failure": "ā¤…ā¤¸ā¤Ģā¤˛ā¤¤ā¤ž", + "False": "ā¤…ā¤¸ā¤¤āĨā¤¯", + "Fallback_forward_department": "ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ģā¤ŧāĨ‰ā¤˛ā¤ŦāĨˆā¤• ā¤ĩā¤ŋā¤­ā¤žā¤—", + "Fallback_forward_department_description": "ā¤†ā¤Ēā¤•āĨ‹ ā¤ā¤• ā¤Ģā¤ŧāĨ‰ā¤˛ā¤ŦāĨˆā¤• ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•āĨ‹ ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆ ā¤œāĨ‹ ā¤‡ā¤¸ ā¤¸ā¤Žā¤¯ ā¤•āĨ‹ā¤ˆ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤¨ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ŽāĨ‡ā¤‚ ā¤‡ā¤¸ ā¤Ēā¤° ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤šāĨˆā¤Ÿ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤—ā¤ž", + "Favorite": "ā¤Ēā¤¸ā¤‚ā¤ĻāĨ€ā¤Ļā¤ž", + "Favorite_Rooms": "ā¤Ēā¤¸ā¤‚ā¤ĻāĨ€ā¤Ļā¤ž ā¤•ā¤Žā¤°āĨ‡ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Favorites": "ā¤Ēā¤¸ā¤‚ā¤ĻāĨ€ā¤Ļā¤ž", + "Feature_preview": "ā¤Ģā¤ŧāĨ€ā¤šā¤° ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨", + "Feature_preview_page_description": "ā¤ĢāĨ€ā¤šā¤° ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤ĒāĨƒā¤ˇāĨā¤  ā¤Ēā¤° ā¤†ā¤Ēā¤•ā¤ž ā¤¸āĨā¤ĩā¤žā¤—ā¤¤ ā¤šāĨˆ! ā¤¯ā¤šā¤žā¤‚, ā¤†ā¤Ē ā¤¨ā¤ĩāĨ€ā¤¨ā¤¤ā¤Ž ā¤…ā¤¤āĨā¤¯ā¤žā¤§āĨā¤¨ā¤ŋā¤• ā¤¸āĨā¤ĩā¤ŋā¤§ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤œāĨ‹ ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤ŋā¤•ā¤žā¤¸ ā¤•āĨ‡ ā¤…ā¤§āĨ€ā¤¨ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤†ā¤§ā¤ŋā¤•ā¤žā¤°ā¤ŋā¤• ā¤¤āĨŒā¤° ā¤Ēā¤° ā¤œā¤žā¤°āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤•āĨ€ ā¤—ā¤ˆ ā¤šāĨˆā¤‚āĨ¤\n\nā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤§āĨā¤¯ā¤žā¤¨ ā¤ĻāĨ‡ā¤‚ ā¤•ā¤ŋ ā¤¯āĨ‡ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤…ā¤­āĨ€ ā¤­āĨ€ ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤šā¤°ā¤Ŗ ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤¸āĨā¤Ĩā¤ŋā¤° ā¤¯ā¤ž ā¤ĒāĨ‚ā¤°āĨ€ ā¤¤ā¤°ā¤š ā¤•ā¤žā¤°āĨā¤¯ā¤žā¤¤āĨā¤Žā¤• ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "featured": "ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤", + "Featured": "ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤", + "Feature_depends_on_selected_call_provider_to_be_enabled_from_administration_settings": "ā¤¯ā¤š ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤ĒāĨā¤°ā¤ļā¤žā¤¸ā¤¨ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ (ā¤ā¤Ąā¤Žā¤ŋā¤¨ -> ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤¨āĨā¤ĢāĨā¤°āĨ‡ā¤‚ā¤¸) ā¤¸āĨ‡ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤°āĨ‹ā¤•āĨā¤¤ ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž ā¤Ēā¤° ā¤¨ā¤ŋā¤°āĨā¤­ā¤° ā¤•ā¤°ā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "ā¤¯ā¤š ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ \"ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤¨āĨ‡ā¤ĩā¤ŋā¤—āĨ‡ā¤ļā¤¨ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤•āĨ‹ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤­āĨ‡ā¤œāĨ‡ā¤‚\" ā¤Ēā¤° ā¤¨ā¤ŋā¤°āĨā¤­ā¤° ā¤•ā¤°ā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "Feature_Limiting": "ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž", + "Features": "ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤žā¤ā¤", + "Federation": "ā¤ĢāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨", + "Federation_Description": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤…ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ā¤•-ā¤ĻāĨ‚ā¤¸ā¤°āĨ‡ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸ā¤‚ā¤šā¤žā¤° ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Federation_Enable": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Federation_Example_matrix_server": "ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: ā¤ŽāĨˆā¤ŸāĨā¤°ā¤ŋā¤•āĨā¤¸.ā¤‘ā¤°āĨā¤—", + "Federation_Federated_room_search": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ€ ā¤–āĨ‹ā¤œ", + "Federation_Public_key": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤•āĨā¤‚ā¤œāĨ€", + "Federation_Search_federated_rooms": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤•ā¤Žā¤°āĨ‡ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Federation_slash_commands": "ā¤ĢāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤•ā¤ž ā¤†ā¤ĻāĨ‡ā¤ļ", + "FEDERATION_Discovery_Method": "ā¤–āĨ‹ā¤œ ā¤ĩā¤ŋā¤§ā¤ŋ", + "FEDERATION_Discovery_Method_Description": "ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ DNS ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą ā¤Ēā¤° ā¤šā¤Ŧ ā¤¯ā¤ž SRV ā¤”ā¤° TXT ā¤ĒāĨā¤°ā¤ĩā¤ŋā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "FEDERATION_Domain": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "FEDERATION_Domain_Alert": "ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤‡ā¤¸āĨ‡ ā¤¨ ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚, ā¤šā¤Ž ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤‚ā¤­ā¤žā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "FEDERATION_Domain_Description": "ā¤ĩā¤š ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚ ā¤œā¤ŋā¤¸ā¤¸āĨ‡ ā¤¯ā¤š ā¤¸ā¤°āĨā¤ĩā¤° ā¤˛ā¤ŋā¤‚ā¤• ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤ - ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤: @rocket.chat.", + "FEDERATION_Enabled": "ā¤ĢāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤•āĨ‹ ā¤ā¤•āĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸āĨ¤", + "FEDERATION_Enabled_Alert": "ā¤ĢāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤¸ā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ ā¤ĒāĨā¤°ā¤—ā¤¤ā¤ŋ ā¤Ēā¤° ā¤šāĨˆāĨ¤ ā¤‡ā¤¸ ā¤¸ā¤Žā¤¯ ā¤‰ā¤¤āĨā¤Ēā¤žā¤Ļā¤¨ ā¤ĒāĨā¤°ā¤Ŗā¤žā¤˛āĨ€ ā¤Ēā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ€ ā¤…ā¤¨āĨā¤ļā¤‚ā¤¸ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•āĨ€ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "FEDERATION_Public_Key": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤•āĨā¤‚ā¤œāĨ€", + "FEDERATION_Public_Key_Description": "ā¤¯ā¤š ā¤ĩā¤š ā¤•āĨā¤‚ā¤œāĨ€ ā¤šāĨˆ ā¤œā¤ŋā¤¸āĨ‡ ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤¸ā¤žā¤Ĩā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸ā¤žā¤ā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "FEDERATION_Status": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "FEDERATION_Test_Setup": "ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤ž", + "FEDERATION_Test_Setup_Error": "ā¤†ā¤Ēā¤•āĨ‡ ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤†ā¤Ēā¤•ā¤ž ā¤¸ā¤°āĨā¤ĩā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ ā¤¸ā¤•ā¤ž, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ€ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•āĨ€ ā¤¸ā¤ŽāĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "FEDERATION_Test_Setup_Success": "ā¤†ā¤Ēā¤•ā¤ž ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤•ā¤žā¤Ž ā¤•ā¤° ā¤°ā¤šā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤…ā¤¨āĨā¤¯ ā¤¸ā¤°āĨā¤ĩā¤° ā¤†ā¤Ēā¤•āĨ‹ ā¤ĸāĨ‚ā¤‚ā¤ĸ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚!", + "Retry_Count": "count ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "Federation_Matrix": "ā¤ĢāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ V2", "Federation_Matrix_enabled": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯", + "Federation_Matrix_Enabled_Alert": "ā¤ŽāĨˆā¤ŸāĨā¤°ā¤ŋā¤•āĨā¤¸ ā¤ĢāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¯ā¤šā¤žā¤‚ ā¤Ēā¤žā¤ˆ ā¤œā¤ž ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆ (ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ, ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩāĨ€ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤¨ā¤ƒ ā¤†ā¤°ā¤‚ā¤­ ā¤•ā¤°ā¤¨ā¤ž ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ)", + "Federation_Matrix_Federated": "ā¤¸ā¤‚ā¤˜āĨ€ā¤¯", + "Federation_Matrix_Federated_Description": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤°āĨ‚ā¤Ž ā¤Ŧā¤¨ā¤žā¤•ā¤° ā¤†ā¤Ē ā¤¨ ā¤¤āĨ‹ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡ ā¤”ā¤° ā¤¨ ā¤šāĨ€ ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ", + "Federation_Matrix_Federated_Description_disabled": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ.", + "Federation_Matrix_id": "ā¤ā¤Ēā¤¸āĨ‡ā¤ĩā¤ž ā¤†ā¤ˆā¤ĄāĨ€", + "Federation_Matrix_hs_token": "ā¤šāĨ‹ā¤Žā¤¸ā¤°āĨā¤ĩā¤° ā¤ŸāĨ‹ā¤•ā¤¨", + "Federation_Matrix_as_token": "ā¤ā¤Ēā¤¸ā¤°āĨā¤ĩā¤ŋā¤¸ ā¤ŸāĨ‹ā¤•ā¤¨", + "Federation_Matrix_homeserver_url": "ā¤šāĨ‹ā¤Žā¤¸ā¤°āĨā¤ĩā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Federation_Matrix_homeserver_url_alert": "ā¤šā¤Ž ā¤…ā¤Ēā¤¨āĨ‡ ā¤ĢāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤¨ā¤, ā¤–ā¤žā¤˛āĨ€ ā¤šāĨ‹ā¤Žā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ€ ā¤…ā¤¨āĨā¤ļā¤‚ā¤¸ā¤ž ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Federation_Matrix_homeserver_domain": "ā¤šāĨ‹ā¤Žā¤¸ā¤°āĨā¤ĩā¤° ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "Federation_Matrix_homeserver_domain_alert": "ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤•āĨ‡ā¤ĩā¤˛ ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤•āĨ‡ ā¤…ā¤˛ā¤žā¤ĩā¤ž ā¤¤āĨ€ā¤¸ā¤°āĨ‡ ā¤Ēā¤•āĨā¤ˇ ā¤•āĨ‡ ā¤—āĨā¤°ā¤žā¤šā¤•āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤šāĨ‹ā¤Žā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ ā¤¨ā¤šāĨ€ā¤‚ ā¤œāĨā¤Ąā¤ŧā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤", + "Federation_Matrix_bridge_url": "ā¤ŦāĨā¤°ā¤ŋā¤œ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Federation_Matrix_bridge_localpart": "ā¤ā¤Ēā¤¸ā¤°āĨā¤ĩā¤ŋā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤˛āĨ‹ā¤•ā¤˛ā¤Ēā¤žā¤°āĨā¤Ÿ", + "Federation_Matrix_registration_file": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤Ģā¤ŧā¤žā¤‡ā¤˛", + "Federation_Matrix_registration_file_Alert": "ā¤Žā¤šā¤¤āĨā¤ĩā¤ĒāĨ‚ā¤°āĨā¤Ŗ: ā¤…ā¤˛āĨā¤Ēā¤•ā¤žā¤˛ā¤ŋā¤• ā¤˜ā¤Ÿā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤‰ā¤¨ ā¤¸ā¤­āĨ€ ā¤¸ā¤°āĨā¤ĩā¤°āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤Ÿā¤žā¤‡ā¤Ēā¤ŋā¤‚ā¤— ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤° ā¤˛āĨ‡ā¤—ā¤ž ā¤œā¤ŋā¤¨ā¤¸āĨ‡ ā¤†ā¤Ē ā¤œāĨā¤Ąā¤ŧāĨ‡ ā¤šāĨā¤ ā¤šāĨˆā¤‚āĨ¤ ā¤‡ā¤¸āĨ‡ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ€ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ (.yaml ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤œā¤ŋā¤¸āĨ‡ ā¤†ā¤Ē Rocket.Chat ā¤•āĨ‹ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚) ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤…ā¤Ēā¤¨āĨ‡ ā¤šāĨ‹ā¤Ž ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤°), ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚:
    de.sorunome.msc2409.push_epheral: true", + "Federation_Matrix_error_applying_room_roles": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤¨āĨ‡ā¤Ÿā¤ĩā¤°āĨā¤• ā¤Ēā¤° ā¤°āĨ‚ā¤Ž ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤•āĨā¤› ā¤—ā¤˛ā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž", + "Federation_Matrix_giving_same_permission_warning": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤œāĨˆā¤¸āĨ‡ ā¤šāĨ€ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤žā¤§ā¤ŋā¤•ā¤žā¤° ā¤ĻāĨ‡ ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚, ā¤†ā¤Ē ā¤‡ā¤¸ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤•āĨ‹ ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤ĩā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤ ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ēā¤•āĨ€ ā¤†ā¤—āĨ‡ ā¤Ŧā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤‡ā¤šāĨā¤›ā¤ž ā¤šāĨˆ?", + "Federation_Matrix_losing_privileges": "ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤žā¤§ā¤ŋā¤•ā¤žā¤° ā¤–āĨ‹ā¤¨ā¤ž", + "Federation_Matrix_losing_privileges_warning": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤°ā¤ĩā¤žā¤ˆ ā¤•āĨ‹ ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤ĩā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡, ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤†ā¤Ē ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•āĨ‹ ā¤Ēā¤Ļā¤žā¤ĩā¤¨ā¤¤ ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤žā¤§ā¤ŋā¤•ā¤žā¤° ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤šāĨˆā¤‚ ā¤¤āĨ‹ ā¤†ā¤Ē ā¤¯ā¤š ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤žā¤§ā¤ŋā¤•ā¤žā¤° ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤ ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤…ā¤Ŧ ā¤­āĨ€ ā¤†ā¤—āĨ‡ ā¤Ŧā¤ĸā¤ŧā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Federation_Matrix_not_allowed_to_change_moderator": "ā¤†ā¤Ēā¤•āĨ‹ ā¤ŽāĨ‰ā¤Ąā¤°āĨ‡ā¤Ÿā¤° ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Federation_Matrix_not_allowed_to_change_owner": "ā¤†ā¤Ēā¤•āĨ‹ ā¤¸āĨā¤ĩā¤žā¤ŽāĨ€ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Federation_Matrix_join_public_rooms_is_premium": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤°āĨ‚ā¤Ž ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧāĨ‡ā¤‚ ā¤ā¤• ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤šāĨˆ", + "Federation_Matrix_max_size_of_public_rooms_users": "ā¤•ā¤ŋā¤¸āĨ€ ā¤ĻāĨ‚ā¤°ā¤¸āĨā¤Ĩ ā¤¸ā¤°āĨā¤ĩā¤° ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤•ā¤•āĨā¤ˇ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤¨āĨ‡ ā¤Ēā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž", + "Federation_Matrix_max_size_of_public_rooms_users_desc": "ā¤•ā¤ŋā¤¸āĨ€ ā¤ĻāĨ‚ā¤°ā¤¸āĨā¤Ĩ ā¤¸ā¤°āĨā¤ĩā¤° ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤•ā¤•āĨā¤ˇ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤¨āĨ‡ ā¤Ēā¤° ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤žāĨ¤ ā¤…ā¤§ā¤ŋā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤ĩā¤žā¤˛āĨ‡ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€ ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤œā¤°ā¤…ā¤‚ā¤Ļā¤žā¤œ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Federation_Matrix_max_size_of_public_rooms_users_Alert": "ā¤§āĨā¤¯ā¤žā¤¨ ā¤°ā¤–āĨ‡ā¤‚, ā¤†ā¤Ē ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤œā¤ŋā¤¤ā¤¨ā¤ž ā¤Ŧā¤Ąā¤ŧā¤ž ā¤•ā¤Žā¤°ā¤ž ā¤ĻāĨ‡ā¤‚ā¤—āĨ‡, ā¤‰ā¤¸ ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤¤ā¤¨ā¤ž ā¤šāĨ€ ā¤…ā¤§ā¤ŋā¤• ā¤¸ā¤Žā¤¯ ā¤˛ā¤—āĨ‡ā¤—ā¤ž, ā¤¸ā¤žā¤Ĩ ā¤šāĨ€ ā¤‡ā¤¸ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤‚ā¤¸ā¤žā¤§ā¤¨ ā¤•āĨ€ ā¤Žā¤žā¤¤āĨā¤°ā¤ž ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤šāĨ‹ā¤—āĨ€āĨ¤ ā¤”ā¤° ā¤Ēā¤ĸā¤ŧāĨ‡ā¤‚", + "Field": "ā¤ŽāĨˆā¤Ļā¤žā¤¨", + "Field_removed": "ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Field_required": "ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "File": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛", + "File_Downloads_Started": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤šāĨ‹ ā¤—ā¤", + "File_exceeds_allowed_size_of_bytes": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤†ā¤•ā¤žā¤° {{size}} ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤šāĨˆāĨ¤", + "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_Upload_Disabled": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "File_uploaded_successfully": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ", + "File_URL": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "FileType": "ā¤Ģā¤žā¤‡ā¤˛ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "files": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚", + "Files": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚", + "Files_only": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤¸ā¤‚ā¤˛ā¤—āĨā¤¨ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤šā¤Ÿā¤žā¤ā¤, ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤°ā¤–āĨ‡ā¤‚", + "FileSize_Bytes": "{{fileSize}} ā¤Ŧā¤žā¤‡ā¤ŸāĨā¤¸", + "FileSize_KB": "{{fileSize}} ā¤•āĨ‡ā¤ŦāĨ€", + "FileSize_MB": "{{fileSize}} ā¤ā¤Žā¤ŦāĨ€", + "FileUpload": "ā¤Ģā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą", + "FileUpload_Description": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤”ā¤° ā¤­ā¤‚ā¤Ąā¤žā¤°ā¤Ŗ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚.", + "FileUpload_Cannot_preview_file": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤•ā¤ž ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž", + "FileUpload_Disabled": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆā¤‚.", + "FileUpload_Enable_json_web_token_for_files": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ Json ā¤ĩāĨ‡ā¤Ŧ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "FileUpload_Enable_json_web_token_for_files_description": "ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• JWT ā¤œāĨ‹ā¤Ąā¤ŧā¤¤ā¤ž ā¤šāĨˆ", + "FileUpload_Restrict_to_room_members": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤¤ā¤• ā¤šāĨ€ ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤°ā¤–āĨ‡ā¤‚", + "FileUpload_Restrict_to_room_members_Description": "ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤Ēā¤° ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤•āĨ€ ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ‡ā¤ĩā¤˛ ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤¤ā¤• ā¤šāĨ€ ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤°ā¤–āĨ‡ā¤‚", + "FileUpload_Enabled": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤¸ā¤•āĨā¤ˇā¤Ž", + "FileUpload_Enabled_Direct": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤¸ā¤•āĨā¤ˇā¤Ž", + "FileUpload_Error": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "FileUpload_File_Empty": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤–ā¤žā¤˛āĨ€", + "FileUpload_FileSystemPath": "ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤Ēā¤Ĩ", + "FileUpload_GoogleStorage_AccessId": "Google ā¤¸ā¤‚ā¤—āĨā¤°ā¤šā¤Ŗ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤†ā¤ˆā¤ĄāĨ€", + "FileUpload_GoogleStorage_AccessId_Description": "ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤†ā¤ˆā¤ĄāĨ€ ā¤†ā¤Ž ā¤¤āĨŒā¤° ā¤Ēā¤° ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆ, ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤: \"`example-test@example.iam.gserviceaccount.com`\"", + "FileUpload_GoogleStorage_Bucket": "Google ā¤¸ā¤‚ā¤—āĨā¤°ā¤šā¤Ŗ ā¤Ŧā¤•āĨ‡ā¤Ÿ ā¤¨ā¤žā¤Ž", + "FileUpload_GoogleStorage_Bucket_Description": "ā¤Ŧā¤•āĨ‡ā¤Ÿ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤œā¤ŋā¤¸ ā¤Ēā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤œā¤žā¤¨āĨ€ ā¤šā¤žā¤šā¤ŋā¤.", + "FileUpload_GoogleStorage_ProjectId": "ā¤ĒāĨā¤°āĨ‹ā¤œāĨ‡ā¤•āĨā¤Ÿ ā¤†ā¤ˆā¤ĄāĨ€", + "FileUpload_GoogleStorage_ProjectId_Description": "Google ā¤ĄāĨ‡ā¤ĩā¤˛ā¤Ēā¤° ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤¸āĨ‡ ā¤ĒāĨā¤°āĨ‹ā¤œāĨ‡ā¤•āĨā¤Ÿ ā¤†ā¤ˆā¤ĄāĨ€", + "FileUpload_GoogleStorage_Proxy_Avatars": "ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤ĩā¤¤ā¤žā¤°", + "FileUpload_GoogleStorage_Proxy_Avatars_Description": "ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋ ā¤•āĨ‡ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¤ā¤• ā¤¸āĨ€ā¤§āĨ€ ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤ŋā¤¤ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆ", + "FileUpload_GoogleStorage_Proxy_Uploads": "ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą", + "FileUpload_GoogleStorage_Proxy_Uploads_Description": "ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋ ā¤•āĨ‡ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¤ā¤• ā¤¸āĨ€ā¤§āĨ€ ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ŸāĨā¤°ā¤žā¤‚ā¤¸ā¤Žā¤ŋā¤ļā¤¨", + "FileUpload_GoogleStorage_Secret": "ā¤—āĨ‚ā¤—ā¤˛ ā¤¸āĨā¤ŸāĨ‹ā¤°āĨ‡ā¤œ ā¤¸āĨ€ā¤•āĨā¤°āĨ‡ā¤Ÿ", + "FileUpload_GoogleStorage_Secret_Description": "ā¤•āĨƒā¤Ēā¤¯ā¤ž [ā¤‡ā¤¨ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚](https://github.com/CulturalMe/meteor-slingshot#google-cloud) ā¤•ā¤ž ā¤Ēā¤žā¤˛ā¤¨ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤Ž ā¤¯ā¤šā¤žā¤‚ ā¤ĒāĨ‡ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "FileUpload_json_web_token_secret_for_files": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą JSON ā¤ĩāĨ‡ā¤Ŧ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤°ā¤šā¤¸āĨā¤¯", + "FileUpload_json_web_token_secret_for_files_description": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą JSON ā¤ĩāĨ‡ā¤Ŧ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤¸āĨ€ā¤•āĨā¤°āĨ‡ā¤Ÿ (ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤¤ā¤• ā¤Ēā¤šāĨā¤ā¤šā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ)", + "FileUpload_MaxFileSize": "ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤†ā¤•ā¤žā¤° (ā¤Ŧā¤žā¤‡ā¤ŸāĨā¤¸ ā¤ŽāĨ‡ā¤‚)", + "FileUpload_MaxFileSizeDescription": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤†ā¤•ā¤žā¤° ā¤•āĨ€ ā¤¸āĨ€ā¤Žā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸āĨ‡ -1 ā¤Ēā¤° ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "FileUpload_MediaType_NotAccepted__type__": "ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤¨ā¤šāĨ€ā¤‚: {{type}}", + "FileUpload_MediaType_NotAccepted": "ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤¨ā¤šāĨ€ā¤‚", + "FileUpload_MediaTypeBlackList": "ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "FileUpload_MediaTypeBlackListDescription": "ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤°āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€āĨ¤ ā¤‡ā¤¸ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‹ ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤°āĨ‹ā¤‚ ā¤Ēā¤° ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "FileUpload_MediaTypeWhiteList": "ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "FileUpload_MediaTypeWhiteListDescription": "ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤°āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€āĨ¤ ā¤¸ā¤­āĨ€ ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸āĨ‡ ā¤–ā¤žā¤˛āĨ€ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤ĻāĨ‡ā¤‚āĨ¤", + "FileUpload_ProtectFiles": "ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤°ā¤–āĨ‡ā¤‚", + "FileUpload_ProtectFilesDescription": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤ŋā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤šāĨ€ ā¤Ēā¤šāĨā¤‚ā¤š ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ā¤—āĨ€", + "FileUpload_ProtectFilesEnabled_JWTNotSet": "ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤šāĨˆā¤‚, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ JWT ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ, ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ŸāĨā¤ĩā¤ŋā¤˛ā¤ŋā¤¯āĨ‹ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤š ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆāĨ¤ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē -> ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "FileUpload_RotateImages": "ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤Ēā¤° ā¤›ā¤ĩā¤ŋā¤¯ā¤žā¤ ā¤˜āĨā¤Žā¤žā¤ā¤", + "FileUpload_RotateImages_Description": "ā¤‡ā¤¸ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤›ā¤ĩā¤ŋ ā¤—āĨā¤Ŗā¤ĩā¤¤āĨā¤¤ā¤ž ā¤šā¤žā¤¨ā¤ŋ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆ", + "FileUpload_S3_Acl": "ā¤ā¤¸āĨ€ā¤ā¤˛", + "FileUpload_S3_AWSAccessKeyId": "ā¤ĒāĨā¤°ā¤ĩāĨ‡ā¤ļ ā¤•āĨ€ ā¤šā¤žā¤ŦāĨ€", + "FileUpload_S3_AWSSecretAccessKey": "ā¤—āĨā¤ĒāĨā¤¤ ā¤•āĨā¤‚ā¤œāĨ€", + "FileUpload_S3_Bucket": "ā¤Ŧā¤žā¤˛āĨā¤ŸāĨ€ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "FileUpload_S3_BucketURL": "ā¤Ŧā¤•āĨ‡ā¤Ÿ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "FileUpload_S3_CDN": "ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨ€ā¤ĄāĨ€ā¤ā¤¨ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "FileUpload_S3_ForcePathStyle": "ā¤Ŧā¤˛ ā¤Ēā¤Ĩ ā¤ļāĨˆā¤˛āĨ€", + "FileUpload_S3_Proxy_Avatars": "ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤ĩā¤¤ā¤žā¤°", + "FileUpload_S3_Proxy_Avatars_Description": "ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋ ā¤•āĨ‡ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¤ā¤• ā¤¸āĨ€ā¤§āĨ€ ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤ŋā¤¤ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆ", + "FileUpload_S3_Proxy_Uploads": "ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą", + "FileUpload_S3_Proxy_Uploads_Description": "ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋ ā¤•āĨ‡ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¤ā¤• ā¤¸āĨ€ā¤§āĨ€ ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ŸāĨā¤°ā¤žā¤‚ā¤¸ā¤Žā¤ŋā¤ļā¤¨", + "FileUpload_S3_Region": "ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "FileUpload_S3_SignatureVersion": "ā¤šā¤¸āĨā¤¤ā¤žā¤•āĨā¤ˇā¤° ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ", + "FileUpload_S3_URLExpiryTimeSpan": "ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ā¤ŋ ā¤¸ā¤Žā¤¯ period", + "FileUpload_S3_URLExpiryTimeSpan_Description": "ā¤ĩā¤š ā¤¸ā¤Žā¤¯ ā¤œā¤ŋā¤¸ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ Amazon S3 ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤œāĨ‡ā¤¨ā¤°āĨ‡ā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤ URL ā¤Žā¤žā¤¨āĨā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤‚ā¤—āĨ‡ (ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚)āĨ¤ ā¤¯ā¤Ļā¤ŋ 5 ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤¸āĨ‡ ā¤•ā¤Ž ā¤Ēā¤° ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤‡ā¤¸ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•āĨ‹ ā¤…ā¤¨ā¤ĻāĨ‡ā¤–ā¤ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "FileUpload_Storage_Type": "ā¤­ā¤ŖāĨā¤Ąā¤žā¤°ā¤Ŗ ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "FileUpload_Webdav_Password": "ā¤ĩāĨ‡ā¤Ŧā¤ĄāĨ€ā¤ā¤ĩāĨ€ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "FileUpload_Webdav_Proxy_Avatars": "ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤ĩā¤¤ā¤žā¤°", + "FileUpload_Webdav_Proxy_Avatars_Description": "ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋ ā¤•āĨ‡ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¤ā¤• ā¤¸āĨ€ā¤§āĨ€ ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤ŋā¤¤ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆ", + "FileUpload_Webdav_Proxy_Uploads": "ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą", + "FileUpload_Webdav_Proxy_Uploads_Description": "ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋ ā¤•āĨ‡ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¤ā¤• ā¤¸āĨ€ā¤§āĨ€ ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ŸāĨā¤°ā¤žā¤‚ā¤¸ā¤Žā¤ŋā¤ļā¤¨", + "FileUpload_Webdav_Server_URL": "WebDAV ā¤¸ā¤°āĨā¤ĩā¤° ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "FileUpload_Webdav_Upload_Folder_Path": "ā¤Ģā¤ŧāĨ‹ā¤˛āĨā¤Ąā¤° ā¤Ēā¤Ĩ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "FileUpload_Webdav_Upload_Folder_Path_Description": "WebDAV ā¤Ģā¤ŧāĨ‹ā¤˛āĨā¤Ąā¤° ā¤Ēā¤Ĩ ā¤œā¤ŋā¤¸ ā¤Ēā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤œā¤žā¤¨āĨ€ ā¤šā¤žā¤šā¤ŋā¤", + "FileUpload_Webdav_Username": "ā¤ĩāĨ‡ā¤Ŧā¤ĄāĨ€ā¤ā¤ĩāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "Filter": "ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤°", + "Filter_by_category": "ā¤ļāĨā¤°āĨ‡ā¤ŖāĨ€ ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Filter_by_Custom_Fields": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Filter_By_Price": "ā¤•āĨ€ā¤Žā¤¤ ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Filter_By_Status": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•ā¤°āĨ‡ā¤‚", "Filters": "ā¤Ģā¤ŋā¤˛āĨā¤Ÿā¤°", + "Filters_applied": "ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤ŋā¤ ā¤—ā¤", + "Financial_Services": "ā¤ĩā¤ŋā¤¤āĨā¤¤āĨ€ā¤¯ ā¤¸āĨ‡ā¤ĩā¤žā¤ā¤‚", + "Finish": "ā¤–ā¤¤āĨā¤Ž ā¤•ā¤°ā¤¨ā¤ž", + "Finish_Registration": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "First_Channel_After_Login": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤Ēā¤šā¤˛ā¤ž ā¤šāĨˆā¤¨ā¤˛", + "First_response_time": "ā¤ĒāĨā¤°ā¤Ĩā¤Ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤Žā¤¯", + "Flags": "ā¤ā¤‚ā¤ĄāĨ‡", + "Follow_message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•ā¤ž ā¤Ēā¤žā¤˛ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Follow_social_profiles": "ā¤šā¤Žā¤žā¤°āĨ‡ ā¤¸ā¤žā¤Žā¤žā¤œā¤ŋā¤• ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤žā¤‡ā¤˛ ā¤•ā¤ž ā¤…ā¤¨āĨā¤¸ā¤°ā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚, ā¤šā¤ŽāĨ‡ā¤‚ ā¤œāĨ€ā¤Ĩā¤Ŧ ā¤Ēā¤° ā¤ĢāĨ‹ā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤šā¤Žā¤žā¤°āĨ‡ ā¤ŸāĨā¤°āĨ‡ā¤˛āĨ‹ ā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤Ēā¤° ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤ā¤Ē ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤¨āĨ‡ ā¤ĩā¤ŋā¤šā¤žā¤° ā¤¸ā¤žā¤ā¤ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Following": "ā¤…ā¤—ā¤˛āĨ‡", + "Fonts": "ā¤ĢāĨ‹ā¤‚ā¤ŸāĨā¤¸", + "Food_and_Drink": "ā¤­āĨ‹ā¤œā¤¨ ā¤ĒāĨ‡ā¤¯", + "Footer": "ā¤Ģā¤ŧāĨā¤Ÿā¤Ŧā¤žā¤˛", + "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": "ā¤•āĨˆā¤ļ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤“ā¤Ēā¤˛āĨ‰ā¤— ā¤•āĨ‹ ā¤Ŧā¤˛ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Force_Disable_OpLog_For_Cache_Description": "ā¤•āĨˆā¤ļ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤­āĨ€ ā¤‰ā¤¸āĨ‡ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ OpLog ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž", + "Force_Screen_Lock": "ā¤Ŧā¤˛ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Force_Screen_Lock_After": "ā¤‡ā¤¸ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤ĢāĨ‹ā¤°āĨā¤¸ ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Force_Screen_Lock_After_description": "ā¤¨ā¤ĩāĨ€ā¤¨ā¤¤ā¤Ž ā¤¸ā¤¤āĨā¤° ā¤•āĨ€ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ā¤ŋ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤¸ā¤Žā¤¯, ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚āĨ¤", + "Force_Screen_Lock_description": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ā¤Ē ā¤•āĨ‹ ā¤…ā¤¨ā¤˛āĨ‰ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ēā¤ŋā¤¨/ā¤Ŧā¤žā¤¯āĨ‹ā¤ŽāĨ‡ā¤ŸāĨā¤°āĨ€/ā¤ĢāĨ‡ā¤¸ā¤†ā¤ˆā¤ĄāĨ€ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ŧā¤žā¤§āĨā¤¯ ā¤•ā¤°āĨ‡ā¤‚ā¤—āĨ‡āĨ¤", + "Force_SSL": "ā¤ā¤¸ā¤ā¤¸ā¤ā¤˛ ā¤•āĨ‹ ā¤Ŧā¤žā¤§āĨā¤¯ ā¤•ā¤°āĨ‡ā¤‚", + "Force_SSL_Description": "*ā¤¸ā¤žā¤ĩā¤§ā¤žā¤¨!* _Force SSL_ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤­āĨ€ ā¤­āĨ€ ā¤°ā¤ŋā¤ĩā¤°āĨā¤¸ ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤°ā¤ŋā¤ĩā¤°āĨā¤¸ ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤šāĨˆ, ā¤¤āĨ‹ ā¤†ā¤Ēā¤•āĨ‹ ā¤ĩā¤šā¤žā¤‚ ā¤°āĨ€ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤ ā¤¯ā¤š ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤šāĨ‡ā¤°āĨ‹ā¤•āĨ‚ ā¤œāĨˆā¤¸āĨ‡ ā¤Ēā¤°ā¤ŋā¤¨ā¤ŋā¤¯āĨ‹ā¤œā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ, ā¤œāĨ‹ ā¤°ā¤ŋā¤ĩā¤°āĨā¤¸ ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤Ēā¤° ā¤°āĨ€ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Force_visitor_to_accept_data_processing_consent": "ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤•āĨ‹ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ĒāĨā¤°āĨ‹ā¤¸āĨ‡ā¤¸ā¤ŋā¤‚ā¤— ā¤¸ā¤šā¤Žā¤¤ā¤ŋ ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ŧā¤žā¤§āĨā¤¯ ā¤•ā¤°āĨ‡ā¤‚", + "Force_visitor_to_accept_data_processing_consent_description": "ā¤†ā¤—ā¤‚ā¤¤āĨā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤šā¤Žā¤¤ā¤ŋ ā¤•āĨ‡ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤šāĨˆā¤Ÿā¤ŋā¤‚ā¤— ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤", + "Force_visitor_to_accept_data_processing_consent_enabled_alert": "ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ĒāĨā¤°āĨ‹ā¤¸āĨ‡ā¤¸ā¤ŋā¤‚ā¤— ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸ā¤Žā¤āĨŒā¤¤ā¤ž ā¤ĒāĨā¤°āĨ‹ā¤¸āĨ‡ā¤¸ā¤ŋā¤‚ā¤— ā¤•āĨ‡ ā¤•ā¤žā¤°ā¤Ŗ ā¤•āĨ€ ā¤Ēā¤žā¤°ā¤Ļā¤°āĨā¤ļāĨ€ ā¤¸ā¤Žā¤ ā¤Ēā¤° ā¤†ā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤ ā¤‡ā¤¸ ā¤ĩā¤œā¤š ā¤¸āĨ‡, ā¤†ā¤Ēā¤•āĨ‹ ā¤¨āĨ€ā¤šāĨ‡ ā¤ĻāĨ€ ā¤—ā¤ˆ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤­ā¤°ā¤¨āĨ€ ā¤šāĨ‹ā¤—āĨ€ ā¤œāĨ‹ ā¤†ā¤Ēā¤•āĨ€ ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤ā¤•ā¤¤āĨā¤° ā¤•ā¤°ā¤¨āĨ‡ ā¤”ā¤° ā¤¸ā¤‚ā¤¸ā¤žā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤•ā¤žā¤°ā¤Ŗ ā¤Ŧā¤¤ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•āĨ€ ā¤œā¤žā¤ā¤—āĨ€āĨ¤", + "force-delete-message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤Ŧā¤˛ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤šā¤Ÿā¤žā¤ā¤‚", + "force-delete-message_description": "ā¤¸ā¤­āĨ€ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤Ŧā¤‚ā¤§āĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ļā¤°ā¤•ā¤ŋā¤¨ā¤žā¤° ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨā¤ ā¤•ā¤ŋā¤¸āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Font_size": "ā¤Ģā¤ŧāĨ‰ā¤¨āĨā¤Ÿ ā¤†ā¤•ā¤žā¤°", + "Forgot_password": "ā¤…ā¤Ēā¤¨ā¤ž ā¤•āĨ‚ā¤Ÿ ā¤ļā¤ŦāĨā¤Ļ ā¤­āĨ‚ā¤˛ ā¤—ā¤?", + "Forgot_Password_Description": "ā¤†ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚:\n - ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤ĒāĨā¤¨ā¤°āĨā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ā¤ŋ URL ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `[Forgot_Password_Url]`āĨ¤\n - `[ā¤¨ā¤žā¤Ž]`, `[fname]`, `[lname]` ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤¨ā¤žā¤Ž, ā¤ĒāĨā¤°ā¤Ĩā¤Ž ā¤¨ā¤žā¤Ž ā¤¯ā¤ž ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¨ā¤žā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤\n - `[ā¤ˆā¤ŽāĨ‡ā¤˛]` ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤\n - ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ `[Site_Name]` ā¤”ā¤° `[Site_URL]`āĨ¤", + "Forgot_Password_Email": "ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Forgot_Password_Email_Subject": "[ā¤¸ā¤žā¤‡ā¤Ÿ_ā¤¨ā¤žā¤Ž] - ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤ĒāĨā¤¨ā¤°āĨā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ā¤ŋ", + "Forgot_password_section": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤­āĨ‚ā¤˛ ā¤—ā¤", + "Format": "ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē", + "Forward": "ā¤†ā¤—āĨ‡", + "Forward_chat": "ā¤šāĨˆā¤Ÿ ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Forward_message": "ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Forward_to_department": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•āĨ‹ ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Forward_to_user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Forwarding": "ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž", + "Free": "ā¤ŽāĨā¤•āĨā¤¤", + "Free_Extension_Numbers": "ā¤¨ā¤ŋā¤ƒā¤ļāĨā¤˛āĨā¤• ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤¨ā¤‚ā¤Ŧā¤°", + "Free_Apps": "ā¤ŽāĨā¤•āĨā¤¤ ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨āĨā¤¸", + "Frequently_Used": "ā¤Ŧā¤šāĨā¤§ā¤ž ā¤ĒāĨā¤°ā¤¯āĨā¤•āĨā¤¤", + "Friday": "ā¤ļāĨā¤•āĨā¤°ā¤ĩā¤žā¤°", + "From": "ā¤¸āĨ‡", + "From_Email": "ā¤ˆ - ā¤ŽāĨ‡ā¤˛ ā¤¸āĨ‡", + "From_email_warning": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ : ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤†ā¤Ēā¤•āĨ€ ā¤ŽāĨ‡ā¤˛ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•āĨ‡ ā¤…ā¤§āĨ€ā¤¨ ā¤šāĨˆāĨ¤", + "Full_Name": "ā¤ĒāĨ‚ā¤°ā¤ž ā¤¨ā¤žā¤Ž", + "Full_Screen": "ā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨", + "Gaming": "ā¤œāĨā¤†", + "General": "ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯", + "General_Description": "ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚.", + "General_Settings": "ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸", + "Generate_new_key": "ā¤ā¤• ā¤¨ā¤ˆ ā¤•āĨā¤‚ā¤œāĨ€ ā¤œā¤¨ā¤°āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Generate_New_Link": "ā¤¨ā¤¯ā¤ž ā¤˛ā¤ŋā¤‚ā¤• ā¤œā¤¨ā¤°āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Generating_key": "ā¤•āĨā¤‚ā¤œāĨ€ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤•ā¤°ā¤¨ā¤ž", + "Copy_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": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤Ŧā¤Ąā¤ŧā¤ž ā¤…ā¤•āĨā¤ˇā¤° ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤", + "get-password-policy-minLength-label": "ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž {{limit}} ā¤…ā¤•āĨā¤ˇā¤°", + "get-password-policy-maxLength-label": "ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž {{limit}} ā¤…ā¤•āĨā¤ˇā¤°", + "get-password-policy-forbidRepeatingCharactersCount-label": "ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž. {{limit}} ā¤ĻāĨ‹ā¤šā¤°ā¤žā¤ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤…ā¤•āĨā¤ˇā¤°", + "get-password-policy-mustContainAtLeastOneLowercase-label": "ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤›āĨ‹ā¤Ÿā¤ž ā¤…ā¤•āĨā¤ˇā¤°", + "get-password-policy-mustContainAtLeastOneUppercase-label": "ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤Ŧā¤Ąā¤ŧā¤ž ā¤…ā¤•āĨā¤ˇā¤°", + "get-password-policy-mustContainAtLeastOneNumber-label": "ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤¨ā¤‚ā¤Ŧā¤°", + "get-password-policy-mustContainAtLeastOneSpecialCharacter-label": "ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•", + "get-server-info": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "get-server-info_description": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "github_no_public_email": "ā¤†ā¤Ēā¤•āĨ‡ GitHub ā¤–ā¤žā¤¤āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‹ā¤ˆ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "github_HEAD": "ā¤¸ā¤ŋā¤°", + "Give_a_unique_name_for_the_custom_oauth": "ā¤•ā¤¸āĨā¤Ÿā¤Ž OAuth ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤…ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ ā¤¨ā¤žā¤Ž ā¤ĻāĨ‡ā¤‚", + "strike": "ā¤šā¤Ąā¤ŧā¤¤ā¤žā¤˛", + "Give_the_application_a_name_This_will_be_seen_by_your_users": "ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤•āĨ‹ ā¤ā¤• ā¤¨ā¤žā¤Ž ā¤ĻāĨ‡ā¤‚. ā¤¯ā¤š ā¤†ā¤Ēā¤•āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ‡ā¤—ā¤ž.", + "Global": "ā¤ĩāĨˆā¤ļāĨā¤ĩā¤ŋā¤•", + "Global Policy": "ā¤ĩāĨˆā¤ļāĨā¤ĩā¤ŋā¤• ā¤¨āĨ€ā¤¤ā¤ŋ", + "Global_purge_override_warning": "ā¤ā¤• ā¤ĩāĨˆā¤ļāĨā¤ĩā¤ŋā¤• ā¤…ā¤ĩā¤§ā¤žā¤°ā¤Ŗ ā¤¨āĨ€ā¤¤ā¤ŋ ā¤˛ā¤žā¤—āĨ‚ ā¤šāĨˆāĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē \"ā¤“ā¤ĩā¤°ā¤°ā¤žā¤‡ā¤Ą ā¤—āĨā¤˛āĨ‹ā¤Ŧā¤˛ ā¤°ā¤ŋā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤ĒāĨ‰ā¤˛ā¤ŋā¤¸āĨ€\" ā¤•āĨ‹ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤° ā¤ĻāĨ‡ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤†ā¤Ē ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĩā¤šāĨ€ ā¤ĒāĨ‰ā¤˛ā¤ŋā¤¸āĨ€ ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤œāĨ‹ ā¤—āĨā¤˛āĨ‹ā¤Ŧā¤˛ ā¤ĒāĨ‰ā¤˛ā¤ŋā¤¸āĨ€ ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤¸ā¤–āĨā¤¤ ā¤šāĨˆāĨ¤", + "Global_Search": "ā¤ĩāĨˆā¤ļāĨā¤ĩā¤ŋā¤• ā¤–āĨ‹ā¤œ", + "Go_to_your_workspace": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤Ēā¤° ā¤œā¤žā¤ā¤", + "Go_to_accessibility_and_appearance": "ā¤Ēā¤šāĨā¤‚ā¤š ā¤”ā¤° ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤Ēā¤° ā¤œā¤žā¤ā¤‚", + "Google_Meet_Premium_only": "Google ā¤ŽāĨ€ā¤Ÿ (ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž)", + "Google_Play": "ā¤—āĨ‚ā¤—ā¤˛ ā¤ĒāĨā¤˛āĨ‡", + "Hold_Call": "ā¤•āĨ‰ā¤˛ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Hold_Call_Premium_only": "ā¤•āĨ‰ā¤˛ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤•ā¤°āĨ‡ā¤‚ (ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤ĒāĨā¤˛ā¤žā¤¨)", + "GoogleCloudStorage": "ā¤—āĨ‚ā¤—ā¤˛ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨā¤ŸāĨ‹ā¤°āĨ‡ā¤œ", + "GoogleNaturalLanguage_ServiceAccount_Description": "ā¤¸āĨ‡ā¤ĩā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤•āĨā¤‚ā¤œāĨ€ JSON ā¤Ģā¤ŧā¤žā¤‡ā¤˛. ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ [ā¤¯ā¤šā¤žā¤‚] (https://cloud.google.com/ā¤ĒāĨā¤°ā¤žā¤•āĨƒā¤¤ā¤ŋā¤•-ā¤­ā¤žā¤ˇā¤ž/docs/common/auth#set_up_a_service_account) ā¤Ēā¤žā¤ˆ ā¤œā¤ž ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆ", + "GoogleTagManager_id": "Google ā¤ŸāĨˆā¤— ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤• ā¤†ā¤ˆā¤ĄāĨ€", + "Got_it": "ā¤¸ā¤Žā¤ ā¤—ā¤¯ā¤ž", + "Government": "ā¤¸ā¤°ā¤•ā¤žā¤°", + "Grandfathered_app": "ā¤Ļā¤žā¤Ļā¤žā¤œāĨ€ ā¤ā¤Ē - ā¤ā¤Ē ā¤¸āĨ€ā¤Žā¤ž ā¤ŽāĨ‡ā¤‚ ā¤—ā¤ŋā¤¨ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤‡ā¤¸ ā¤ā¤Ē ā¤Ēā¤° ā¤¸āĨ€ā¤Žā¤ž ā¤˛ā¤žā¤—āĨ‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆ", + "Graphql_CORS": "ā¤—āĨā¤°ā¤žā¤Ģā¤•āĨā¤¯āĨ‚ā¤ā¤˛ ā¤•āĨ‰ā¤°āĨā¤¸", + "Graphql_Enabled": "ā¤—āĨā¤°ā¤žā¤Ģā¤•āĨā¤¯āĨ‚ā¤ā¤˛ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Graphql_Subscription_Port": "ā¤—āĨā¤°ā¤žā¤Ģā¤•āĨā¤¯āĨ‚ā¤ā¤˛ ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž ā¤ĒāĨ‹ā¤°āĨā¤Ÿ", + "Grid_view": "ā¤œā¤žā¤˛ā¤• ā¤ĻāĨƒā¤ļāĨā¤¯", + "Snippet_Messages": "ā¤¸āĨā¤¨ā¤ŋā¤ĒāĨ‡ā¤Ÿ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Group": "ā¤¸ā¤ŽāĨ‚ā¤š", + "Group_by": "ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤ŽāĨ‚ā¤š ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Group_by_Type": "ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤¸ā¤ŽāĨ‚ā¤š ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "snippet-message": "ā¤¸āĨā¤¨ā¤ŋā¤ĒāĨ‡ā¤Ÿ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "snippet-message_description": "ā¤¸āĨā¤¨ā¤ŋā¤ĒāĨ‡ā¤Ÿ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Group_discussions": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤šā¤°āĨā¤šā¤ž", + "Group_favorites": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤Ēā¤¸ā¤‚ā¤ĻāĨ€ā¤Ļā¤ž", + "Group_mentions_disabled_x_members": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤šāĨˆ ā¤•ā¤ŋ `@all` ā¤”ā¤° `@here` ā¤•āĨ‹ ā¤‰ā¤¨ ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ ā¤œā¤ŋā¤¨ā¤ŽāĨ‡ā¤‚ {{total}} ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤šāĨˆā¤‚āĨ¤", + "Group_mentions_only": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤•ā¤ž ā¤•āĨ‡ā¤ĩā¤˛ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤šāĨˆ", + "Grouping": "ā¤¸ā¤ŽāĨ‚ā¤šā¤¨", + "Guest": "ā¤…ā¤¤ā¤ŋā¤Ĩā¤ŋ", + "Hash": "ā¤šāĨˆā¤ļ", + "Header": "ā¤šāĨˆā¤Ąā¤°", + "Header_and_Footer": "ā¤ļāĨ€ā¤°āĨā¤ˇā¤• ā¤”ā¤° ā¤ĒāĨƒā¤ˇāĨā¤ ā¤žā¤‚ā¤•", + "Pharmaceutical": "ā¤Ģā¤žā¤°āĨā¤Žā¤žā¤¸āĨā¤¯āĨā¤Ÿā¤ŋā¤•ā¤˛", + "Healthcare": "ā¤¸āĨā¤ĩā¤žā¤¸āĨā¤ĨāĨā¤¯ ā¤ĻāĨ‡ā¤–ā¤­ā¤žā¤˛", + "Helpers": "ā¤¸ā¤šā¤žā¤¯ā¤•āĨ‹ā¤‚", + "Here_is_your_authentication_code": "ā¤¯ā¤šā¤žā¤‚ ā¤†ā¤Ēā¤•ā¤ž ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‹ā¤Ą ā¤šāĨˆ:", + "Hex_Color_Preview": "ā¤šāĨ‡ā¤•āĨā¤¸ ā¤°ā¤‚ā¤— ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨", + "Hi": "ā¤¨ā¤Žā¤¸āĨā¤¤āĨ‡", + "Hi_username": "ā¤¨ā¤Žā¤¸āĨā¤¤āĨ‡ [ā¤¨ā¤žā¤Ž]", + "Hidden": "ā¤›ā¤ŋā¤Ēā¤ž ā¤šāĨā¤†", + "Hide": "ā¤›ā¤ŋā¤Ēā¤žā¤¨ā¤ž", + "Hide_counter": "ā¤•ā¤žā¤‰ā¤‚ā¤Ÿā¤° ā¤›āĨā¤Ēā¤žā¤ā¤‚", + "Hide_flextab": "ā¤ĒāĨā¤°ā¤žā¤¸ā¤‚ā¤—ā¤ŋā¤• ā¤Ŧā¤žā¤° ā¤•āĨ‡ ā¤Ŧā¤žā¤šā¤° ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°ā¤•āĨ‡ ā¤‰ā¤¸āĨ‡ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Hide_Group_Warning": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤¸ā¤ŽāĨ‚ā¤š \"%s\" ā¤•āĨ‹ ā¤›ā¤ŋā¤Ēā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Hide_Livechat_Warning": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ \"%s\" ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤šāĨˆā¤Ÿ ā¤›ā¤ŋā¤Ēā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Hide_On_Workspace": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤Ēā¤° ā¤›āĨā¤ĒāĨ‡ā¤‚", + "Hide_Private_Warning": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ \"%s\" ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤šā¤°āĨā¤šā¤ž ā¤›ā¤ŋā¤Ēā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Hide_roles": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Hide_room": "ā¤›ā¤ŋā¤Ēā¤žā¤¨ā¤ž", + "Hide_Room_Warning": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤šāĨˆā¤¨ā¤˛ \"%s\" ā¤•āĨ‹ ā¤›ā¤ŋā¤Ēā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Hide_System_Messages": "ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Hide_Unread_Room_Status": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤•ā¤•āĨā¤ˇ ā¤•āĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Hide_usernames": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Hide_video": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "High": "ā¤‰ā¤šāĨā¤š", + "Highest": "ā¤‰ā¤šāĨā¤šā¤¤ā¤Ž", + "Highlights": "ā¤šā¤žā¤‡ā¤˛ā¤žā¤‡ā¤Ÿ", + "Highlights_How_To": "ā¤œā¤Ŧ ā¤•āĨ‹ā¤ˆ ā¤•ā¤ŋā¤¸āĨ€ ā¤ļā¤ŦāĨā¤Ļ ā¤¯ā¤ž ā¤ĩā¤žā¤•āĨā¤¯ā¤žā¤‚ā¤ļ ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤‰ā¤¸āĨ‡ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤¸āĨ‡ ā¤¯ā¤šā¤žā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚āĨ¤ ā¤†ā¤Ē ā¤ļā¤ŦāĨā¤ĻāĨ‹ā¤‚ ā¤¯ā¤ž ā¤ĩā¤žā¤•āĨā¤¯ā¤žā¤‚ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤šā¤žā¤‡ā¤˛ā¤žā¤‡ā¤Ÿ ā¤ļā¤ŦāĨā¤Ļ ā¤•āĨ‡ā¤¸ ā¤¸ā¤‚ā¤ĩāĨ‡ā¤ĻāĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤āĨ‡.", + "Highlights_List": "ā¤ļā¤ŦāĨā¤ĻāĨ‹ā¤‚ ā¤•āĨ‹ ā¤šā¤žā¤‡ā¤˛ā¤žā¤‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "History": "ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸", + "Hold_Time": "ā¤¸ā¤Žā¤¯ ā¤Ēā¤•ā¤Ąā¤ŧ", + "Hold": "ā¤Ēā¤•ā¤Ąā¤ŧā¤¨ā¤ž", + "Hold_Premium_only": "ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤•ā¤°āĨ‡ā¤‚ (ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¯āĨ‹ā¤œā¤¨ā¤žā¤ā¤‚)", "Home": "ā¤šāĨ‹ā¤Ž", + "Homepage": "ā¤ŽāĨā¤–ā¤ĒāĨƒā¤ˇāĨā¤ ", + "Homepage_Custom_Content_Default_Message": "ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤‡ā¤¸ ā¤¸ā¤Ģā¤ŧāĨ‡ā¤Ļ ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤¸āĨā¤¤āĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ html ā¤¸ā¤ŽāĨā¤Žā¤ŋā¤˛ā¤ŋā¤¤ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Host": "ā¤ŽāĨ‡ā¤œā¤ŧā¤Ŧā¤žā¤¨", + "Hospitality_Businness": "ā¤–ā¤žā¤¤ā¤ŋā¤°ā¤Ļā¤žā¤°āĨ€ ā¤•ā¤ž ā¤ĩāĨā¤¯ā¤ĩā¤¸ā¤žā¤¯", + "hours": "ā¤˜ā¤‚ā¤ŸāĨ‡", + "Hours": "ā¤˜ā¤‚ā¤ŸāĨ‡", + "How_and_why_we_collect_usage_data": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤•āĨˆā¤¸āĨ‡ ā¤”ā¤° ā¤•āĨā¤¯āĨ‹ā¤‚ ā¤ā¤•ā¤¤āĨā¤° ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ", "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_responsive_was_the_chat_agent": "ā¤šāĨˆā¤Ÿ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•ā¤ŋā¤¤ā¤¨ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤°ā¤Ļā¤žā¤¯āĨ€ ā¤Ĩā¤ž?", "How_satisfied_were_you_with_this_chat": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤šāĨˆā¤Ÿ ā¤¸āĨ‡ ā¤•ā¤ŋā¤¤ā¤¨āĨ‡ ā¤¸ā¤‚ā¤¤āĨā¤ˇāĨā¤Ÿ ā¤ĨāĨ‡?", + "How_to_handle_open_sessions_when_agent_goes_offline": "ā¤œā¤Ŧ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤šāĨ‹ ā¤œā¤žā¤ ā¤¤āĨ‹ ā¤–āĨā¤˛āĨ‡ ā¤¸ā¤¤āĨā¤° ā¤•āĨ‹ ā¤•āĨˆā¤¸āĨ‡ ā¤¸ā¤‚ā¤­ā¤žā¤˛āĨ‡ā¤‚", + "Http_timeout": "HTTP ā¤Ÿā¤žā¤‡ā¤Žā¤†ā¤‰ā¤Ÿ (ā¤Žā¤ŋā¤˛āĨ€ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚)", + "Http_timeout_value": "5000", + "HTML": "ā¤ā¤šā¤ŸāĨ€ā¤ā¤Žā¤ā¤˛", + "Icon": "ā¤†ā¤‡ā¤•ā¤¨", + "I_Saved_My_Password": "ā¤ŽāĨˆā¤‚ā¤¨āĨ‡ ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸ā¤šāĨ‡ā¤œ ā¤˛ā¤ŋā¤¯ā¤ž", + "Idle_Time_Limit": "ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤¸ā¤Žā¤¯ ā¤¸āĨ€ā¤Žā¤ž", + "Idle_Time_Limit_Description": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤¤ā¤• ā¤•āĨ€ ā¤¸ā¤Žā¤¯ā¤žā¤ĩā¤§ā¤ŋāĨ¤ ā¤Žā¤žā¤¨ ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤.", + "if_they_are_from": "(ā¤¯ā¤Ļā¤ŋ ā¤ĩāĨ‡ %s ā¤¸āĨ‡ ā¤šāĨˆā¤‚)", + "If_this_email_is_registered": "ā¤¯ā¤Ļā¤ŋ ā¤¯ā¤š ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤šāĨˆ, ā¤¤āĨ‹ ā¤šā¤Ž ā¤†ā¤Ēā¤•ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤¤ā¤°āĨ€ā¤•āĨ‡ ā¤Ēā¤° ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œāĨ‡ā¤‚ā¤—āĨ‡āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤•āĨ‹ ā¤ļāĨ€ā¤˜āĨā¤° ā¤šāĨ€ ā¤•āĨ‹ā¤ˆ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĩā¤žā¤Ēā¤¸ ā¤†ā¤ā¤‚ ā¤”ā¤° ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "If_you_didnt_ask_for_reset_ignore_this_email": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤¨āĨ‡ ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤šā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤†ā¤Ē ā¤‡ā¤¸ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‹ ā¤…ā¤¨ā¤ĻāĨ‡ā¤–ā¤ž ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "If_you_didnt_try_to_login_in_your_account_please_ignore_this_email": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤¨āĨ‡ ā¤…ā¤Ēā¤¨āĨ‡ ā¤–ā¤žā¤¤āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤‡ā¤¸ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‹ ā¤…ā¤¨ā¤ĻāĨ‡ā¤–ā¤ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Iframe_Integration": "ā¤†ā¤ˆā¤ĢāĨā¤°āĨ‡ā¤Ž ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ", + "Iframe_Integration_receive_enable": "ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Iframe_Integration_receive_enable_Description": "ā¤ŽāĨ‚ā¤˛ ā¤ĩā¤ŋā¤‚ā¤ĄāĨ‹ ā¤•āĨ‹ Rocket.Chat ā¤Ēā¤° ā¤†ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚āĨ¤", + "Iframe_Integration_receive_origin": "ā¤ŽāĨ‚ā¤˛ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Iframe_Integration_receive_origin_Description": "ā¤ĒāĨā¤°āĨ‹ā¤ŸāĨ‹ā¤•āĨ‰ā¤˛ ā¤‰ā¤Ēā¤¸ā¤°āĨā¤— ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ŽāĨ‚ā¤˛, ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤˛ā¤— ā¤•ā¤ŋā¤ ā¤—ā¤, ā¤œā¤ŋā¤¨āĨā¤šāĨ‡ā¤‚ ā¤†ā¤ĻāĨ‡ā¤ļ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤šāĨˆ ā¤œāĨˆā¤¸āĨ‡āĨ¤ ā¤•ā¤šāĨ€ā¤‚ ā¤¸āĨ‡ ā¤­āĨ€ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `https://localhost, http://localhost`, ā¤¯ā¤ž *āĨ¤", + "Iframe_Integration_send_enable": "ā¤­āĨ‡ā¤œāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "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_X_Frame_Options": "ā¤ā¤•āĨā¤¸-ā¤Ģā¤ŧāĨā¤°āĨ‡ā¤Ž-ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤•āĨ‡ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē", + "Iframe_X_Frame_Options_Description": "ā¤ā¤•āĨā¤¸-ā¤Ģā¤ŧāĨā¤°āĨ‡ā¤Ž-ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤•āĨ‡ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤ĒāĨ¤ [ā¤†ā¤Ē ā¤¯ā¤šā¤žā¤‚ ā¤¸ā¤­āĨ€ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤ĻāĨ‡ā¤– ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options#Syntax)", + "Ignore": "ā¤…ā¤¨ā¤ĻāĨ‡ā¤–ā¤ž ā¤•ā¤°ā¤¨ā¤ž", + "Ignored": "ā¤…ā¤ĩā¤šāĨ‡ā¤˛ā¤¨ā¤ž ā¤•ā¤°ā¤¨ā¤ž", + "Ignore_Two_Factor_Authentication": "ā¤ŸāĨ‚ ā¤ĢāĨˆā¤•āĨā¤Ÿā¤° ā¤‘ā¤ĨāĨ‡ā¤‚ā¤Ÿā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤•āĨ‹ ā¤¨ā¤œā¤°ā¤…ā¤‚ā¤Ļā¤žā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Images": "ā¤‡ā¤ŽāĨ‡ā¤œā¤ŋā¤¸", + "IMAP_intercepter_already_running": "IMAP ā¤‡ā¤‚ā¤Ÿā¤°ā¤¸āĨ‡ā¤ĒāĨā¤Ÿā¤° ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤šā¤˛ ā¤°ā¤šā¤ž ā¤šāĨˆ", + "IMAP_intercepter_Not_running": "IMAP ā¤‡ā¤‚ā¤Ÿā¤°ā¤¸āĨ‡ā¤ĒāĨā¤Ÿā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤šā¤˛ ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Impersonate_next_agent_from_queue": "ā¤•ā¤¤ā¤žā¤° ā¤¸āĨ‡ ā¤…ā¤—ā¤˛āĨ‡ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤°āĨ‚ā¤Ēā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "Impersonate_user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤°āĨ‚ā¤Ēā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "Impersonate_user_description": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤‰ā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ ā¤œā¤ŋā¤¸ā¤¨āĨ‡ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‹ ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ", + "Import": "ā¤†ā¤¯ā¤žā¤¤", + "Import_New_File": "ā¤¨ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Import_requested_successfully": "ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤ž ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Import_Type": "ā¤†ā¤¯ā¤žā¤¤ ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "Importer_Archived": "ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤", + "Importer_CSV_Information": "CSV ā¤†ā¤¯ā¤žā¤¤ā¤• ā¤•āĨ‹ ā¤ā¤• ā¤ĩā¤ŋā¤ļā¤ŋā¤ˇāĨā¤Ÿ ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆ, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ€ ā¤œā¤ŧā¤ŋā¤Ē ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤•āĨ€ ā¤¸ā¤‚ā¤°ā¤šā¤¨ā¤ž ā¤•āĨˆā¤¸āĨ‡ ā¤•ā¤°āĨ‡ā¤‚, ā¤‡ā¤¸ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ļā¤¸āĨā¤¤ā¤žā¤ĩāĨ‡ā¤œā¤ŧ ā¤Ēā¤ĸā¤ŧāĨ‡ā¤‚:", + "Importer_done": "ā¤†ā¤¯ā¤žā¤¤ ā¤ĒāĨ‚ā¤°ā¤ž ā¤šāĨ‹ ā¤—ā¤¯ā¤ž!", + "Importer_ExternalUrl_Description": "ā¤†ā¤Ē ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ēā¤šāĨā¤‚ā¤š ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ URL ā¤•ā¤ž ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚:", + "Importer_finishing": "ā¤†ā¤¯ā¤žā¤¤ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨ā¤ž.", + "Importer_From_Description": "Rocket.Chat ā¤ŽāĨ‡ā¤‚ {{from}} ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Importer_From_Description_CSV": "Rocket.Chat ā¤ŽāĨ‡ā¤‚ CSV ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ā¤• ā¤œā¤ŧā¤ŋā¤Ē ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤šāĨ‹ā¤¨āĨ€ ā¤šā¤žā¤šā¤ŋā¤.", + "Importer_HipChatEnterprise_BetaWarning": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤§āĨā¤¯ā¤žā¤¨ ā¤°ā¤–āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤‡ā¤¸ ā¤†ā¤¯ā¤žā¤¤ ā¤Ēā¤° ā¤…ā¤­āĨ€ ā¤­āĨ€ ā¤•ā¤žā¤Ž ā¤šā¤˛ ā¤°ā¤šā¤ž ā¤šāĨˆ, ā¤•āĨƒā¤Ēā¤¯ā¤ž GitHub ā¤ŽāĨ‡ā¤‚ ā¤šāĨ‹ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤•āĨ€ ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚:", + "Importer_HipChatEnterprise_Information": "ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ąā¤ŋā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą tar.gz ā¤šāĨ‹ā¤¨āĨ€ ā¤šā¤žā¤šā¤ŋā¤, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ļā¤¸āĨā¤¤ā¤žā¤ĩāĨ‡ā¤œā¤ŧ ā¤Ēā¤ĸā¤ŧāĨ‡ā¤‚:", + "Importer_import_cancelled": "ā¤†ā¤¯ā¤žā¤¤ ā¤°ā¤ĻāĨā¤Ļ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž.", + "Importer_import_failed": "ā¤†ā¤¯ā¤žā¤¤ ā¤šā¤˛ā¤žā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤ā¤• ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤šāĨā¤ˆ.", + "Importer_importing_channels": "ā¤šāĨˆā¤¨ā¤˛ ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°ā¤¨ā¤ž.", + "Importer_importing_files": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°ā¤¨ā¤ž.", + "Importer_importing_messages": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°ā¤¨ā¤ž.", + "Importer_importing_started": "ā¤†ā¤¯ā¤žā¤¤ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°ā¤¨ā¤ž.", + "Importer_importing_users": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°ā¤¨ā¤ž.", + "Importer_not_in_progress": "ā¤†ā¤¯ā¤žā¤¤ā¤• ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤šā¤˛ ā¤°ā¤šā¤ž ā¤šāĨˆ.", + "Importer_not_setup": "ā¤†ā¤¯ā¤žā¤¤ā¤• ā¤¸ā¤šāĨ€ ā¤ĸā¤‚ā¤— ā¤¸āĨ‡ ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ, ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤‰ā¤¸ā¤¨āĨ‡ ā¤•āĨ‹ā¤ˆ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤˛āĨŒā¤Ÿā¤žā¤¯ā¤žāĨ¤", + "Importer_Prepare_Restart_Import": "ā¤†ā¤¯ā¤žā¤¤ ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "Importer_Prepare_Start_Import": "ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "Importer_Prepare_Uncheck_Archived_Channels": "ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤šāĨˆā¤¨ā¤˛ ā¤…ā¤¨ā¤šāĨ‡ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Importer_Prepare_Uncheck_Deleted_Users": "ā¤šā¤Ÿā¤žā¤ ā¤—ā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤…ā¤¨ā¤šāĨ‡ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Importer_progress_error": "ā¤†ā¤¯ā¤žā¤¤ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤°ā¤—ā¤¤ā¤ŋ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤ŋā¤Ģā¤˛.", + "Importer_setup_error": "ā¤†ā¤¯ā¤žā¤¤ā¤• ā¤•āĨ‹ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤ā¤• ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤šāĨā¤ˆ.", + "Importer_Slack_Users_CSV_Information": "ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸āĨā¤˛āĨˆā¤• ā¤•āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤šāĨ‹ā¤¨āĨ€ ā¤šā¤žā¤šā¤ŋā¤, ā¤œāĨ‹ ā¤ā¤• 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": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°ā¤¨ā¤ž", + "Inactivity_Time": "ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ā¤¤ā¤ž ā¤•ā¤ž ā¤¸ā¤Žā¤¯", + "In_progress": "ā¤ĒāĨā¤°ā¤—ā¤¤ā¤ŋ ā¤Ēā¤° ā¤šāĨˆ", + "inbound-voip-calls": "ā¤‡ā¤¨ā¤Ŧā¤žā¤‰ā¤‚ā¤Ą ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ‰ā¤˛", + "inbound-voip-calls_description": "ā¤‡ā¤¨ā¤Ŧā¤žā¤‰ā¤‚ā¤Ą ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ‰ā¤˛ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Inbox_Info": "ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Include_Offline_Agents": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤•ā¤°āĨ‡ā¤‚", + "Inclusive": "ā¤¸ā¤šā¤ŋā¤¤", + "Incoming": "ā¤†ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€", + "Incoming_call_from": "ā¤¸āĨ‡ ā¤†ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤•āĨ‰ā¤˛", + "Incoming_Livechats": "ā¤Ēā¤‚ā¤•āĨā¤¤ā¤ŋā¤Ŧā¤ĻāĨā¤§ ā¤šāĨˆā¤Ÿ", + "Incoming_WebHook": "ā¤†ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤•", + "Industry": "ā¤‰ā¤ĻāĨā¤¯āĨ‹ā¤—", + "Info": "ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "initials_avatar": "ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ā¤ŋā¤• ā¤…ā¤ĩā¤¤ā¤žā¤°", + "Inline_code": "ā¤‡ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤•āĨ‹ā¤Ą", + "Install": "ā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž", + "Install_anyway": "ā¤Ģā¤ŋā¤° ā¤­āĨ€ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚", + "Install_Extension": "ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚", + "Install_FxOs": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤Ģā¤ŧā¤žā¤¯ā¤°ā¤Ģā¤ŧāĨ‰ā¤•āĨā¤¸ ā¤Ēā¤° Rocket.Chat ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚", + "Install_FxOs_done": "ā¤Žā¤šā¤žā¤¨! ā¤…ā¤Ŧ ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ ā¤šāĨ‹ā¤Žā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤Ēā¤° ā¤†ā¤‡ā¤•ā¤¨ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ Rocket.Chat ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤†ā¤¨ā¤‚ā¤Ļ ā¤˛āĨ‡ā¤‚!", + "Install_FxOs_error": "ā¤•āĨā¤ˇā¤Žā¤ž ā¤•ā¤°āĨ‡ā¤‚, ā¤¯ā¤š ā¤‡ā¤šāĨā¤›ā¤žā¤¨āĨā¤¸ā¤žā¤° ā¤•ā¤žā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž! ā¤¨ā¤ŋā¤ŽāĨā¤¨ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ€:", + "Install_FxOs_follow_instructions": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ‡ ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤Ēā¤° ā¤ā¤Ē ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛āĨ‡ā¤ļā¤¨ ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°āĨ‡ā¤‚ (ā¤¸ā¤‚ā¤•āĨ‡ā¤¤ ā¤Žā¤ŋā¤˛ā¤¨āĨ‡ ā¤Ēā¤° \"ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚\" ā¤Ļā¤Ŧā¤žā¤ā¤‚)āĨ¤", + "Installing": "ā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤° ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Install_package": "ā¤ĒāĨˆā¤•āĨ‡ā¤œ ā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°āĨ‡", "Installation": "ā¤¸āĨā¤Ĩā¤žā¤Ēā¤¨ā¤ž", + "Installed": "ā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤", + "Installed_at": "ā¤Ēā¤° ā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Instance": "ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ", + "Instances": "ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ", + "Instances_health": "ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤¸āĨā¤ĩā¤žā¤¸āĨā¤ĨāĨā¤¯", + "Instance_Record": "ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤°ā¤ŋā¤•ā¤žā¤°āĨā¤Ą", + "Instructions": "ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļ", + "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤•āĨ‹ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ģā¤ŧāĨ‰ā¤°āĨā¤Ž ā¤­ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļ", + "Insert_Contact_Name": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤¨ā¤žā¤Ž ā¤Ąā¤žā¤˛āĨ‡ā¤‚", + "Insert_Placeholder": "ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤° ā¤Ąā¤žā¤˛āĨ‡ā¤‚", + "Install_rocket_chat_on_your_preferred_desktop_platform": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤Ēā¤¸ā¤‚ā¤ĻāĨ€ā¤Ļā¤ž ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤ĒāĨā¤˛āĨ‡ā¤Ÿā¤Ģā¤ŧāĨ‰ā¤°āĨā¤Ž ā¤Ēā¤° Rocket.Chat ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Insurance": "ā¤ŦāĨ€ā¤Žā¤ž", + "Integration_added": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Integration_Advanced_Settings": "ā¤ā¤Ąā¤ĩā¤žā¤‚ā¤¸ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—", + "Integration_Delete_Warning": "ā¤•ā¤ŋā¤¸āĨ€ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤ĩā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž.", + "Integration_disabled": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Integration_History_Cleared": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Integration_Incoming_WebHook": "ā¤†ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ", + "Integration_New": "ā¤¨ā¤¯ā¤ž ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ", + "integration-scripts-disabled": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆā¤‚", + "integration-scripts-isolated-vm-disabled": "\"ā¤¸ā¤ŋā¤•āĨā¤¯āĨ‹ā¤° ā¤¸āĨˆā¤‚ā¤Ąā¤ŦāĨ‰ā¤•āĨā¤¸\" ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¨ā¤ˆ ā¤¯ā¤ž ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤Ēā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "integration-scripts-vm2-disabled": "\"ā¤¸ā¤‚ā¤—ā¤¤ ā¤¸āĨˆā¤‚ā¤Ąā¤ŦāĨ‰ā¤•āĨā¤¸\" ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¨ā¤ˆ ā¤¯ā¤ž ā¤¸ā¤‚ā¤ļāĨ‹ā¤§ā¤ŋā¤¤ ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤Ēā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Integration_Outgoing_WebHook": "ā¤†ā¤‰ā¤Ÿā¤—āĨ‹ā¤‡ā¤‚ā¤— ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ", + "Integration_Outgoing_WebHook_History": "ā¤†ā¤‰ā¤Ÿā¤—āĨ‹ā¤‡ā¤‚ā¤— ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸", + "Integration_Outgoing_WebHook_History_Data_Passed_To_Trigger": "ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ēā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Integration_Outgoing_WebHook_History_Data_Passed_To_URL": "ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‹ ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž", + "Integration_Outgoing_WebHook_History_Error_Stacktrace": "ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤¸āĨā¤ŸāĨˆā¤•ā¤ŸāĨā¤°āĨ‡ā¤¸", + "Integration_Outgoing_WebHook_History_Http_Response": "HTTP ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž", + "Integration_Outgoing_WebHook_History_Http_Response_Error": "HTTP ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "Integration_Outgoing_WebHook_History_Messages_Sent_From_Prepare_Script": "ā¤¤āĨˆā¤¯ā¤žā¤°āĨ€ ā¤šā¤°ā¤Ŗ ā¤¸āĨ‡ ā¤­āĨ‡ā¤œāĨ‡ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Integration_Outgoing_WebHook_History_Messages_Sent_From_Process_Script": "ā¤ĒāĨā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤šā¤°ā¤Ŗ ā¤¸āĨ‡ ā¤­āĨ‡ā¤œāĨ‡ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Integration_Outgoing_WebHook_History_Time_Ended_Or_Error": "ā¤‡ā¤¸ā¤•āĨ‡ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ā¤¨āĨ‡ ā¤¯ā¤ž ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•ā¤ž ā¤¸ā¤Žā¤¯", + "Integration_Outgoing_WebHook_History_Time_Triggered": "ā¤¸ā¤Žā¤¯ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤šāĨā¤†", + "Integration_Outgoing_WebHook_History_Trigger_Step": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤šā¤°ā¤Ŗ", + "Integration_Outgoing_WebHook_No_History": "ā¤‡ā¤¸ ā¤¨ā¤ŋā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤ž ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤Ļā¤°āĨā¤œ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤", + "Integration_Retry_Count": "count ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "Integration_Retry_Count_Description": "ā¤¯ā¤Ļā¤ŋ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤Ēā¤° ā¤•āĨ‰ā¤˛ ā¤ĩā¤ŋā¤Ģā¤˛ ā¤šāĨ‹ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆ ā¤¤āĨ‹ ā¤•ā¤ŋā¤¤ā¤¨āĨ€ ā¤Ŧā¤žā¤° ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤?", + "Integration_Retry_Delay": "ā¤ĩā¤ŋā¤˛ā¤‚ā¤Ŧ ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "Integration_Retry_Delay_Description": "ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤ŋā¤¸ ā¤ĩā¤ŋā¤˛ā¤‚ā¤Ŧ ā¤ā¤˛āĨā¤—āĨ‹ā¤°ā¤ŋā¤Ļā¤Ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤? 10 ^ x ā¤¯ā¤ž 2 ^ x ā¤¯ā¤ž x * 2", + "Integration_Retry_Failed_Url_Calls": "ā¤ĩā¤ŋā¤Ģā¤˛ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "Integration_Retry_Failed_Url_Calls_Description": "ā¤¯ā¤Ļā¤ŋ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤Ēā¤° ā¤•āĨ‰ā¤˛ ā¤†ā¤‰ā¤Ÿ ā¤ĩā¤ŋā¤Ģā¤˛ ā¤°ā¤šā¤¤ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤•āĨā¤¯ā¤ž ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‹ ā¤‰ā¤šā¤ŋā¤¤ ā¤¸ā¤Žā¤¯ ā¤¤ā¤• ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤?", + "Integration_Run_When_Message_Is_Edited": "ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨āĨ‹ā¤‚ ā¤Ēā¤° ā¤šā¤˛ā¤žā¤ā¤", + "Integration_Run_When_Message_Is_Edited_Description": "ā¤•āĨā¤¯ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤šā¤˛ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤? ā¤‡ā¤¸āĨ‡ ā¤—ā¤˛ā¤¤ ā¤Ēā¤° ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‡ā¤ĩā¤˛ **ā¤¨ā¤** ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤Ēā¤° ā¤šā¤˛āĨ‡ā¤—ā¤žāĨ¤", + "Integration_updated": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ.", + "Integration_Word_Trigger_Placement": "ā¤•ā¤šāĨ€ā¤‚ ā¤­āĨ€ ā¤ļā¤ŦāĨā¤Ļ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤ŽāĨ‡ā¤‚ā¤Ÿ", + "Integration_Word_Trigger_Placement_Description": "ā¤•āĨā¤¯ā¤ž ā¤ļāĨā¤°āĨā¤†ā¤¤ ā¤•āĨ‡ ā¤…ā¤˛ā¤žā¤ĩā¤ž ā¤ĩā¤žā¤•āĨā¤¯ ā¤ŽāĨ‡ā¤‚ ā¤•ā¤šāĨ€ā¤‚ ā¤­āĨ€ ā¤°ā¤–āĨ‡ ā¤œā¤žā¤¨āĨ‡ ā¤Ēā¤° ā¤ļā¤ŦāĨā¤Ļ ā¤•āĨ‹ ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤?", + "Integrations": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ", + "Integrations_for_all_channels": "ā¤¸ā¤­āĨ€ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤Ēā¤° ā¤¸āĨā¤¨ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ all_public_channels , ā¤¸ā¤­āĨ€ ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤Ēā¤° ā¤¸āĨā¤¨ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ all_private_groups , ā¤”ā¤° ā¤¸ā¤­āĨ€ ā¤ĒāĨā¤°ā¤¤āĨā¤¯ā¤•āĨā¤ˇ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤¨ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ all_direct_messages ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Integrations_Outgoing_Type_FileUploaded": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ", + "Integrations_Outgoing_Type_RoomArchived": "ā¤•ā¤•āĨā¤ˇ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤", + "Integrations_Outgoing_Type_RoomCreated": "ā¤•ā¤•āĨā¤ˇ ā¤Ŧā¤¨ā¤žā¤¯ā¤ž ā¤—ā¤¯ā¤ž (ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤”ā¤° ā¤¨ā¤ŋā¤œāĨ€)", + "Integrations_Outgoing_Type_RoomJoined": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤ž ā¤•ā¤•āĨā¤ˇ", + "Integrations_Outgoing_Type_RoomLeft": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ŧā¤žā¤¯ā¤žā¤‚ ā¤•ā¤Žā¤°ā¤ž", + "Integrations_Outgoing_Type_SendMessage": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž", + "Integrations_Outgoing_Type_UserCreated": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ŧā¤¨ā¤žā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "InternalHubot": "ā¤†ā¤‚ā¤¤ā¤°ā¤ŋā¤• ā¤§ā¤žā¤°āĨ€ā¤Ļā¤žā¤°", + "InternalHubot_EnableForChannels": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "InternalHubot_EnableForDirectMessages": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "InternalHubot_EnableForPrivateGroups": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "InternalHubot_PathToLoadCustomScripts": "ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ģā¤ŧāĨ‹ā¤˛āĨā¤Ąā¤°", + "InternalHubot_reload": "ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤ĒāĨā¤¨ā¤ƒ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "InternalHubot_ScriptsToLoad": "ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ", + "InternalHubot_ScriptsToLoad_Description": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ‹ā¤˛āĨā¤Ąā¤° ā¤¸āĨ‡ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "InternalHubot_Username_Description": "ā¤¯ā¤š ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤ŦāĨ‰ā¤Ÿ ā¤•ā¤ž ā¤ĩāĨˆā¤§ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤", + "Invalid Canned Response": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž", + "Invalid_confirm_pass": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋā¤•ā¤°ā¤Ŗ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸āĨ‡ ā¤ŽāĨ‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤–ā¤žā¤¤ā¤ž", + "Invalid_Department": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤ĩā¤ŋā¤­ā¤žā¤—", + "Invalid_email": "ā¤Ļā¤°āĨā¤œ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤šāĨˆ", + "Invalid_Export_File": "ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ĩāĨˆā¤§ %s ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ.", + "Invalid_field": "ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤–ā¤ŧā¤žā¤˛āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¨āĨ€ ā¤šā¤žā¤šā¤ŋā¤", + "Invalid_Import_File_Type": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤†ā¤¯ā¤žā¤¤ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ĒāĨā¤°ā¤•ā¤žā¤°.", + "Invalid_name": "ā¤¨ā¤žā¤Ž ā¤–ā¤žā¤˛āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤", + "Invalid_notification_setting_s": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—: %s", + "Invalid_OAuth_client": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ OAuth ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ", + "Invalid_or_expired_invite_token": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤¯ā¤ž ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤ŸāĨ‹ā¤•ā¤¨", + "Invalid_pass": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤–ā¤žā¤˛āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤", + "Invalid_password": "ā¤…ā¤ĩāĨˆā¤§ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "Invalid_reason": "ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•ā¤ž ā¤•ā¤žā¤°ā¤Ŗ ā¤–ā¤žā¤˛āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤", + "Invalid_room_name": "%s ā¤Žā¤žā¤¨āĨā¤¯ ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Invalid_secret_URL_message": "ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤šāĨˆ.", + "Invalid_setting_s": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—: %s", + "Invalid_two_factor_code": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤ĻāĨ‹ ā¤•ā¤žā¤°ā¤• ā¤•āĨ‹ā¤Ą", + "Invalid_username": "ā¤Ļā¤°āĨā¤œ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤šāĨˆ", + "invisible": "ā¤…ā¤ĻāĨƒā¤ļāĨā¤¯", + "Invisible": "ā¤…ā¤ĻāĨƒā¤ļāĨā¤¯", + "Invitation": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ", + "Invitation_Email_Description": "ā¤†ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚:\n - ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ā¤•ā¤°āĨā¤¤ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `[ā¤ˆā¤ŽāĨ‡ā¤˛]`āĨ¤\n - ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ `[Site_Name]` ā¤”ā¤° `[Site_URL]`āĨ¤", + "Invitation_HTML": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ HTML", + "Invitation_HTML_Default": "

    ā¤†ā¤Ēā¤•āĨ‹ [Site_Name] ā¤Ēā¤° ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ

    [Site_URL] ā¤Ēā¤° ā¤œā¤žā¤ā¤ ā¤”ā¤° ā¤†ā¤œ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¸ā¤°āĨā¤ĩāĨ‹ā¤¤āĨā¤¤ā¤Ž ā¤“ā¤Ēā¤¨ ā¤¸āĨ‹ā¤°āĨā¤¸ ā¤šāĨˆā¤Ÿ ā¤¸ā¤Žā¤žā¤§ā¤žā¤¨ ā¤†ā¤œā¤ŧā¤Žā¤žā¤ā¤!

    ", + "Invitation_Subject": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤ĩā¤ŋā¤ˇā¤¯", + "Invitation_Subject_Default": "ā¤†ā¤Ēā¤•āĨ‹ [Site_Name] ā¤Ēā¤° ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Invite": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž", + "Invites": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ", + "Invite_and_add_members_to_this_workspace_to_start_communicating": "ā¤¸ā¤‚ā¤šā¤žā¤° ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚āĨ¤", + "Invite_Link": "ā¤˛ā¤ŋā¤‚ā¤• ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "link": "ā¤œāĨ‹ā¤Ąā¤ŧā¤¨ā¤ž", + "Invite_link_generated": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤˛ā¤ŋā¤‚ā¤• ā¤œā¤¨ā¤°āĨ‡ā¤Ÿ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Invite_removed": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Invite_user_to_join_channel": "ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Invite_user_to_join_channel_all_from": "ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ [#ā¤šāĨˆā¤¨ā¤˛] ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Invite_user_to_join_channel_all_to": "ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ [#ā¤šāĨˆā¤¨ā¤˛] ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Invite_Users": "ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‹", + "IP": "ā¤†ā¤ˆ ā¤ĒāĨ€", + "IP_Address": "ā¤†ā¤ˆā¤ĒāĨ€ ā¤Ēā¤¤ā¤ž", + "IRC_Channel_Join": "JOIN ā¤•ā¤Žā¤žā¤‚ā¤Ą ā¤•ā¤ž ā¤†ā¤‰ā¤Ÿā¤ĒāĨā¤ŸāĨ¤", + "IRC_Channel_Leave": "ā¤Ēā¤žā¤°āĨā¤Ÿ ā¤•ā¤Žā¤žā¤‚ā¤Ą ā¤•ā¤ž ā¤†ā¤‰ā¤Ÿā¤ĒāĨā¤ŸāĨ¤", + "IRC_Channel_Users": "NAMES ā¤•ā¤Žā¤žā¤‚ā¤Ą ā¤•ā¤ž ā¤†ā¤‰ā¤Ÿā¤ĒāĨā¤ŸāĨ¤", + "IRC_Channel_Users_End": "NAMES ā¤•ā¤Žā¤žā¤‚ā¤Ą ā¤•āĨ‡ ā¤†ā¤‰ā¤Ÿā¤ĒāĨā¤Ÿ ā¤•ā¤ž ā¤…ā¤‚ā¤¤āĨ¤", + "IRC_Description": "ā¤‡ā¤‚ā¤Ÿā¤°ā¤¨āĨ‡ā¤Ÿ ā¤°ā¤ŋā¤˛āĨ‡ ā¤šāĨˆā¤Ÿ (ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€) ā¤ā¤• ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ-ā¤†ā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤¸ā¤ŽāĨ‚ā¤š ā¤¸ā¤‚ā¤šā¤žā¤° ā¤‰ā¤Ēā¤•ā¤°ā¤Ŗ ā¤šāĨˆāĨ¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤–āĨā¤˛āĨ€ ā¤šā¤°āĨā¤šā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩā¤ŋā¤ļā¤ŋā¤ˇāĨā¤Ÿ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤¨ā¤žā¤Žā¤ŋā¤¤ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤¯ā¤ž ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€ ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤”ā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤žā¤ā¤žā¤•ā¤°ā¤Ŗ ā¤•āĨā¤ˇā¤Žā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•ā¤ž ā¤­āĨ€ ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤¯ā¤š ā¤ĒāĨˆā¤•āĨ‡ā¤œ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇā¤Žā¤¤ā¤ž ā¤•āĨ€ ā¤‡ā¤¨ ā¤Ēā¤°ā¤¤āĨ‹ā¤‚ ā¤•āĨ‹ Rocket.Chat ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ā¤•āĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "IRC_Enabled": "ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€ ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤•āĨ‹ ā¤ā¤•āĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸āĨ¤ ā¤‡ā¤¸ ā¤Žā¤žā¤¨ ā¤•āĨ‹ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ Rocket.Chat ā¤•āĨ‹ ā¤ĒāĨā¤¨ā¤ƒ ā¤†ā¤°ā¤‚ā¤­ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "IRC_Enabled_Alert": "ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€ ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ ā¤ĒāĨā¤°ā¤—ā¤¤ā¤ŋ ā¤Ēā¤° ā¤šāĨˆāĨ¤ ā¤‡ā¤¸ ā¤¸ā¤Žā¤¯ ā¤‰ā¤¤āĨā¤Ēā¤žā¤Ļā¤¨ ā¤ĒāĨā¤°ā¤Ŗā¤žā¤˛āĨ€ ā¤Ēā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ€ ā¤…ā¤¨āĨā¤ļā¤‚ā¤¸ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•āĨ€ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "IRC_Federation": "ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€ ā¤ĢāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨", + "IRC_Federation_Description": "ā¤…ā¤¨āĨā¤¯ ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "IRC_Federation_Disabled": "ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€ ā¤ĢāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ.", + "IRC_Hostname": "ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€ ā¤šāĨ‹ā¤¸āĨā¤Ÿ ā¤¸ā¤°āĨā¤ĩā¤°āĨ¤", + "IRC_Login_Fail": "ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤ĩā¤ŋā¤Ģā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤†ā¤‰ā¤Ÿā¤ĒāĨā¤ŸāĨ¤", + "IRC_Login_Success": "ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ ā¤¸ā¤Ģā¤˛ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤Ēā¤° ā¤†ā¤‰ā¤Ÿā¤ĒāĨā¤ŸāĨ¤", + "IRC_Message_Cache_Size": "ā¤†ā¤‰ā¤Ÿā¤Ŧā¤žā¤‰ā¤‚ā¤Ą ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨˆā¤ļ ā¤¸āĨ€ā¤Žā¤žāĨ¤", + "IRC_Port": "ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€ ā¤šāĨ‹ā¤¸āĨā¤Ÿ ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤° ā¤Ŧā¤žā¤‡ā¤‚ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨ‹ā¤°āĨā¤ŸāĨ¤", + "IRC_Private_Message": "PRIVMSG ā¤•ā¤Žā¤žā¤‚ā¤Ą ā¤•ā¤ž ā¤†ā¤‰ā¤Ÿā¤ĒāĨā¤ŸāĨ¤", + "IRC_Quit": "ā¤†ā¤ˆā¤†ā¤°ā¤¸āĨ€ ā¤¸ā¤¤āĨā¤° ā¤›āĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤Ēā¤° ā¤†ā¤‰ā¤Ÿā¤ĒāĨā¤ŸāĨ¤", + "is_typing": "ā¤Ÿā¤žā¤‡ā¤Ē ā¤•ā¤° ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Issue_Links": "ā¤ŸāĨā¤°āĨˆā¤•ā¤° ā¤˛ā¤ŋā¤‚ā¤• ā¤œā¤žā¤°āĨ€ ā¤•ā¤°āĨ‡ā¤‚", + "IssueLinks_Incompatible": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€: ā¤‡ā¤¸āĨ‡ ā¤”ā¤° 'ā¤šāĨ‡ā¤•āĨā¤¸ ā¤•ā¤˛ā¤° ā¤ĒāĨā¤°āĨ€ā¤ĩāĨā¤¯āĨ‚' ā¤•āĨ‹ ā¤ā¤• ā¤šāĨ€ ā¤¸ā¤Žā¤¯ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "IssueLinks_LinkTemplate": "ā¤¸ā¤Žā¤¸āĨā¤¯ā¤ž ā¤˛ā¤ŋā¤‚ā¤• ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ŸāĨ‡ā¤ŽāĨā¤Ēā¤˛āĨ‡ā¤Ÿ", + "IssueLinks_LinkTemplate_Description": "ā¤¸ā¤Žā¤¸āĨā¤¯ā¤ž ā¤˛ā¤ŋā¤‚ā¤• ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ŸāĨ‡ā¤ŽāĨā¤Ēā¤˛āĨ‡ā¤Ÿ; %s ā¤•āĨ‹ ā¤‡ā¤ļāĨā¤¯āĨ‚ ā¤¨ā¤‚ā¤Ŧā¤° ā¤¸āĨ‡ ā¤Ŧā¤Ļā¤˛ ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž.", + "It_Will_Hide_All_Other_Content_Blocks_In_The_Homepage": "ā¤¯ā¤š ā¤ŽāĨā¤–ā¤ĒāĨƒā¤ˇāĨā¤  ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¨āĨā¤¯ ā¤¸ā¤­āĨ€ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤›ā¤ŋā¤Ēā¤ž ā¤ĻāĨ‡ā¤—ā¤ž", + "It_Will_Show_All_Other_Content_Blocks_In_The_Homepage": "ā¤¯ā¤š ā¤ŽāĨā¤–ā¤ĒāĨƒā¤ˇāĨā¤  ā¤Ēā¤° ā¤…ā¤¨āĨā¤¯ ā¤¸ā¤­āĨ€ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤Ļā¤ŋā¤–ā¤žā¤ā¤—ā¤ž", + "It_works": "ā¤¯ā¤š ā¤•ā¤žā¤Ž ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "It_Security": "ā¤†ā¤ˆā¤ŸāĨ€ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž", + "Italic": "ā¤¤ā¤ŋā¤°ā¤›ā¤ž", + "italics": "ā¤¤ā¤ŋā¤°āĨā¤›ā¤ž", + "Items_per_page:": "ā¤†ā¤‡ā¤Ÿā¤Ž ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤ĒāĨ‡ā¤œ:", + "Jitsi_included_with_Community": "ā¤œā¤ŋā¤¤āĨā¤¸āĨ€, ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ļā¤žā¤Žā¤ŋā¤˛", + "Job_Title": "ā¤¨āĨŒā¤•ā¤°āĨ€ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Join": "ā¤œāĨ‹ā¤Ąā¤ŧā¤¨ā¤ž", + "Join_with_password": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤œāĨā¤Ąā¤ŧāĨ‡ā¤‚", + "Join_audio_call": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤‚", + "Join_call": "ā¤•āĨ‰ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤‚", + "Join_Chat": "ā¤šāĨˆā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤‚", + "Join_conference": "ā¤¸ā¤ŽāĨā¤ŽāĨ‡ā¤˛ā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤‚", + "Join_default_channels": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧāĨ‡ā¤‚", + "Join_the_Community": "ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤‚", + "Join_the_given_channel": "ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧāĨ‡ā¤‚", + "Join_rooms": "ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧāĨ‡ā¤‚", + "Join_video_call": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤‚", + "Join_my_room_to_start_the_video_call": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ŽāĨ‡ā¤°āĨ‡ ā¤•ā¤Žā¤°āĨ‡ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧāĨ‡ā¤‚", + "join-without-join-code": "ā¤Ŧā¤ŋā¤¨ā¤ž ā¤œāĨ‰ā¤‡ā¤¨ ā¤•āĨ‹ā¤Ą ā¤•āĨ‡ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤‚", + "join-without-join-code_description": "ā¤œāĨ‰ā¤‡ā¤¨ ā¤•āĨ‹ā¤Ą ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤ĩā¤žā¤˛āĨ‡ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‰ā¤‡ā¤¨ ā¤•āĨ‹ā¤Ą ā¤•āĨ‹ ā¤Ŧā¤žā¤¯ā¤Ēā¤žā¤¸ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Joined": "ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ ā¤—ā¤", + "joined": "ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ ā¤—ā¤", + "Joined_at": "ā¤Ēā¤° ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨā¤", + "JSON": "JSON", + "Jump": "ā¤•āĨ‚ā¤Ļā¤¨ā¤ž", + "Jump_to_first_unread": "ā¤Ēā¤šā¤˛āĨ‡ ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤Ēā¤° ā¤œā¤žā¤ā¤", + "Jump_to_message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤° ā¤œā¤žā¤ā¤‚", + "Jump_to_recent_messages": "ā¤šā¤žā¤˛ ā¤•āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤Ēā¤° ā¤œā¤žā¤ā¤", + "Just_invited_people_can_access_this_channel": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤˛āĨ‹ā¤— ā¤šāĨ€ ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤¤ā¤• ā¤Ēā¤šāĨā¤ā¤š ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "kick-user-from-any-c-room": "ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤˛ā¤žā¤¤ ā¤Žā¤žā¤°āĨ‹", + "kick-user-from-any-c-room_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤Ŧā¤žā¤šā¤° ā¤¨ā¤ŋā¤•ā¤žā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "kick-user-from-any-p-room": "ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤˛ā¤žā¤¤ ā¤Žā¤žā¤°āĨ‹", + "kick-user-from-any-p-room_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤Ŧā¤žā¤šā¤° ā¤¨ā¤ŋā¤•ā¤žā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Katex_Dollar_Syntax": "ā¤ĄāĨ‰ā¤˛ā¤° ā¤¸ā¤ŋā¤‚ā¤ŸāĨˆā¤•āĨā¤¸ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Katex_Dollar_Syntax_Description": "$$katex ā¤ŦāĨā¤˛āĨ‰ā¤•$$ ā¤”ā¤° $inline katex$ ā¤¸ā¤ŋā¤‚ā¤ŸāĨˆā¤•āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Katex_Enabled": "ā¤•āĨ‡ā¤ŸāĨ‡ā¤•āĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Katex_Enabled_Description": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤—ā¤Ŗā¤ŋā¤¤ ā¤Ÿā¤žā¤‡ā¤Ēā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‡ ā¤˛ā¤ŋā¤ [katex](http://ā¤–ā¤žā¤¨.github.io/KaTeX/) ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Katex_Parenthesis_Syntax": "ā¤•āĨ‹ā¤ˇāĨā¤ ā¤• ā¤¸ā¤ŋā¤‚ā¤ŸāĨˆā¤•āĨā¤¸ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Katex_Parenthesis_Syntax_Description": "\\[katex ā¤ŦāĨā¤˛āĨ‰ā¤•\\] ā¤”ā¤° \\(ā¤‡ā¤¨ā¤˛ā¤žā¤‡ā¤¨ katex\\) ā¤¸ā¤ŋā¤‚ā¤ŸāĨˆā¤•āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Keep_default_user_settings": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤°ā¤–āĨ‡ā¤‚", + "Keyboard_Shortcuts_Edit_Previous_Message": "ā¤Ēā¤ŋā¤›ā¤˛ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Keyboard_Shortcuts_Keys_1": "ā¤•ā¤Žā¤žā¤‚ā¤Ą (ā¤¯ā¤ž Ctrl) + p ā¤¯ā¤ž ā¤•ā¤Žā¤žā¤‚ā¤Ą (ā¤¯ā¤ž Ctrl) + k", + "Keyboard_Shortcuts_Keys_2": "ā¤Šā¤Ēā¤° ā¤•āĨ€ ā¤“ā¤° ā¤¤āĨ€ā¤°", + "Keyboard_Shortcuts_Keys_3": "ā¤•ā¤Žā¤žā¤‚ā¤Ą (ā¤¯ā¤ž Alt) + ā¤Ŧā¤žā¤¯ā¤žā¤ ā¤¤āĨ€ā¤°", + "Keyboard_Shortcuts_Keys_4": "ā¤•ā¤Žā¤žā¤‚ā¤Ą (ā¤¯ā¤ž Alt) + ā¤Šā¤Ēā¤° ā¤¤āĨ€ā¤°", + "Keyboard_Shortcuts_Keys_5": "ā¤•ā¤Žā¤žā¤‚ā¤Ą (ā¤¯ā¤ž Alt) + ā¤Ļā¤žā¤¯ā¤žā¤‚ ā¤¤āĨ€ā¤°", + "Keyboard_Shortcuts_Keys_6": "ā¤•ā¤Žā¤žā¤‚ā¤Ą (ā¤¯ā¤ž Alt) + ā¤Ąā¤žā¤‰ā¤¨ ā¤ā¤°āĨ‹", + "Keyboard_Shortcuts_Keys_7": "ā¤ļā¤ŋā¤ĢāĨā¤Ÿ + ā¤ā¤‚ā¤Ÿā¤°", + "Keyboard_Shortcuts_Keys_8": "ā¤ļā¤ŋā¤ĢāĨā¤Ÿ (ā¤¯ā¤ž Ctrl) + ESC", + "Keyboard_Shortcuts_Mark_all_as_read": "ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ (ā¤¸ā¤­āĨ€ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚) ā¤Ēā¤ ā¤ŋā¤¤ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Keyboard_Shortcuts_Move_To_Beginning_Of_Message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ€ ā¤ļāĨā¤°āĨā¤†ā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤ā¤", + "Keyboard_Shortcuts_Move_To_End_Of_Message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤ā¤", + "Keyboard_Shortcuts_New_Line_In_Message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤˛ā¤ŋā¤–āĨ‡ā¤‚ ā¤‡ā¤¨ā¤ĒāĨā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ˆ ā¤Ēā¤‚ā¤•āĨā¤¤ā¤ŋ", + "Keyboard_Shortcuts_Open_Channel_Slash_User_Search": "ā¤šāĨˆā¤¨ā¤˛/ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤–āĨ‹ā¤œ ā¤–āĨ‹ā¤˛āĨ‡ā¤‚", + "Keyboard_Shortcuts_Title": "ā¤•āĨā¤‚ā¤œāĨ€ā¤Ēā¤Ÿā¤˛ ā¤…ā¤˛āĨā¤Ē ā¤Žā¤žā¤°āĨā¤—", + "Knowledge_Base": "ā¤œāĨā¤žā¤žā¤¨ā¤§ā¤žā¤°", + "Label": "ā¤˛āĨ‡ā¤Ŧā¤˛", + "Language": "ā¤­ā¤žā¤ˇā¤ž", + "Language_Bulgarian": "ā¤Ŧā¤˛āĨā¤—āĨ‡ā¤°ā¤ŋā¤¯ā¤žā¤ˆ", + "Language_Chinese": "ā¤šāĨ€ā¤¨āĨ€", + "Language_Czech": "ā¤šāĨ‡ā¤•", + "Language_Danish": "ā¤Ļā¤žā¤¨ā¤ŋā¤ļ", + "Language_Dutch": "ā¤Ąā¤š", + "Language_English": "ā¤…ā¤‚ā¤—āĨā¤°āĨ‡ā¤œā¤ŧāĨ€", + "Language_Estonian": "ā¤ā¤¸āĨā¤¤āĨ‹ā¤¨ā¤ŋā¤¯ā¤žā¤ĩā¤žā¤¸āĨ€", + "Language_Finnish": "ā¤Ģā¤ŋā¤¨ā¤ŋā¤ļ", + "Language_French": "ā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤š", + "Language_German": "ā¤œā¤°āĨā¤Žā¤¨", + "Language_Greek": "ā¤¯āĨ‚ā¤¨ā¤žā¤¨āĨ€", + "Language_Hungarian": "ā¤šā¤‚ā¤—āĨ‡ā¤°āĨ€", + "Language_Italian": "ā¤‡ā¤¤ā¤žā¤˛ā¤ĩāĨ€", + "Language_Japanese": "ā¤œā¤žā¤Ēā¤žā¤¨āĨ€", + "Language_Latvian": "ā¤˛ā¤žā¤¤āĨā¤ĩāĨ€ā¤¯ā¤žā¤ĩā¤žā¤¸āĨ€", + "Language_Lithuanian": "ā¤˛ā¤ŋā¤ĨāĨā¤†ā¤¨ā¤ŋā¤¯ā¤žā¤ˆ", + "Language_Not_set": "ā¤•āĨ‹ā¤ˆ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇ ā¤¨ā¤šāĨ€ā¤‚", + "Language_Polish": "ā¤ĒāĨ‹ā¤˛ā¤ŋā¤ļ", + "Language_Portuguese": "ā¤ĒāĨā¤°āĨā¤¤ā¤—ā¤žā¤˛āĨ€", + "Language_Romanian": "ā¤°āĨ‹ā¤Žā¤žā¤¨ā¤ŋā¤¯ā¤žā¤ˆ", + "Language_Russian": "ā¤°āĨ‚ā¤¸āĨ€", + "Language_Slovak": "ā¤¸āĨā¤˛āĨ‹ā¤ĩā¤žā¤•", + "Language_Slovenian": "ā¤¸āĨā¤˛āĨ‹ā¤ĩāĨ‡ā¤¨ā¤ŋā¤¯ā¤žā¤ˆ", + "Language_Spanish": "ā¤¸āĨā¤ĒāĨˆā¤¨ā¤ŋā¤ļ", + "Language_Swedish": "ā¤¸āĨā¤ĩāĨ€ā¤Ąā¤ŋā¤ļ", + "Language_Version": "ā¤…ā¤‚ā¤—āĨā¤°āĨ‡ā¤œāĨ€ ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ", + "Last_7_days": "ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ 7 ā¤Ļā¤ŋā¤¨", + "Last_15_days": "ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ 15 ā¤Ļā¤ŋā¤¨", + "Last_30_days": "ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ 30 ā¤Ļā¤ŋā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚", + "Last_90_days": "ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ 90 ā¤Ļā¤ŋā¤¨", + "Last_6_months": "ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ 6 ā¤Žā¤šāĨ€ā¤¨āĨ‡", + "Last_year": "ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ ā¤¸ā¤žā¤˛", + "Last_active": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯", + "Last_Call": "ā¤†ā¤–ā¤ŋā¤°āĨ€ ā¤•āĨ‰ā¤˛", + "Last_Chat": "ā¤†ā¤–ā¤ŋā¤°āĨ€ ā¤šāĨˆā¤Ÿ", + "Last_Heartbeat_Time": "ā¤†ā¤–ā¤ŋā¤°āĨ€ ā¤Ļā¤ŋā¤˛ ā¤•āĨ€ ā¤§ā¤Ąā¤ŧā¤•ā¤¨ ā¤•ā¤ž ā¤¸ā¤Žā¤¯", + "Last_login": "ā¤†ā¤–ā¤°āĨ€ ā¤˛āĨ‰ā¤—ā¤‡ā¤¨", + "Last_Message": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Last_Message_At": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤°", + "Last_seen": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤Ŧā¤žā¤° ā¤ĻāĨ‡ā¤–ā¤ž ā¤—ā¤¯ā¤ž", + "Last_Status": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "Last_token_part": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¸ā¤žā¤‚ā¤•āĨ‡ā¤¤ā¤ŋā¤• ā¤­ā¤žā¤—", + "Last_Updated": "ā¤†ā¤–ā¤°āĨ€ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ", + "Launched_successfully": "ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤˛āĨ‰ā¤¨āĨā¤š ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Layout": "ā¤˛āĨ‡ā¤†ā¤‰ā¤Ÿ", + "Layout_Login_Hide_Logo": "ā¤˛āĨ‹ā¤—āĨ‹ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Layout_Login_Hide_Logo_Description": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨ‡ā¤œ ā¤Ēā¤° ā¤˛āĨ‹ā¤—āĨ‹ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤.", + "Layout_Login_Hide_Title": "ā¤ļāĨ€ā¤°āĨā¤ˇā¤• ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Layout_Login_Hide_Title_Description": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨ‡ā¤œ ā¤Ēā¤° ā¤ļāĨ€ā¤°āĨā¤ˇā¤• ā¤›ā¤ŋā¤Ēā¤žā¤ā¤.", + "Layout_Login_Hide_Powered_By": "\"ā¤‡ā¤¸ā¤•āĨ‡ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤‚ā¤šā¤žā¤˛ā¤ŋā¤¤\" ā¤›āĨā¤Ēā¤žā¤ā¤‚", + "Layout_Login_Hide_Powered_By_Description": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨ‡ā¤œ ā¤Ēā¤° \"ā¤¸ā¤‚ā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž\" ā¤›āĨā¤Ēā¤žā¤ā¤‚āĨ¤", + "Layout_Login_Template": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ŸāĨ‡ā¤ŽāĨā¤ĒāĨā¤˛āĨ‡ā¤Ÿ", + "Layout_Login_Template_Description": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨ‡ā¤œ ā¤•ā¤ž ā¤¸āĨā¤ĩā¤°āĨ‚ā¤Ē ā¤…ā¤¨āĨā¤•āĨ‚ā¤˛ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚.", + "Layout_Login_Template_Vertical": "ā¤–ā¤Ąā¤ŧā¤ž", + "Layout_Login_Template_Horizontal": "ā¤•āĨā¤ˇāĨˆā¤¤ā¤ŋā¤œ", + "Layout_Description": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•ā¤ž ā¤¸āĨā¤ĩā¤°āĨ‚ā¤Ē ā¤…ā¤¨āĨā¤•āĨ‚ā¤˛ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚.", + "Layout_Home_Body": "ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤ŦāĨā¤˛āĨ‰ā¤•", + "Layout_Home_Page_Content": "ā¤˛āĨ‡ā¤†ā¤‰ā¤Ÿ/ā¤šāĨ‹ā¤Ž ā¤ĒāĨ‡ā¤œ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€", + "Layout_Home_Page_Content_Title": "ā¤ŽāĨā¤– ā¤ĒāĨƒā¤ˇāĨā¤  ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€", + "Layout_Home_Title": "ā¤—āĨƒā¤š ā¤ļāĨ€ā¤°āĨā¤ˇā¤•", + "Layout_Legal_Notice": "ā¤•ā¤žā¤¨āĨ‚ā¤¨āĨ€ ā¤¨āĨ‹ā¤Ÿā¤ŋā¤¸", + "Layout_Login_Terms": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ļā¤°āĨā¤¤āĨ‡ā¤‚", + "Layout_Login_Terms_Content": "ā¤†ā¤—āĨ‡ ā¤Ŧā¤ĸā¤ŧā¤•ā¤° ā¤†ā¤Ē ā¤šā¤Žā¤žā¤°āĨ€ ā¤¸āĨ‡ā¤ĩā¤ž ā¤•āĨ€ ā¤ļā¤°āĨā¤¤āĨ‹ā¤‚ , ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¨āĨ€ā¤¤ā¤ŋ ā¤”ā¤° ā¤•ā¤žā¤¨āĨ‚ā¤¨āĨ€ ā¤¨āĨ‹ā¤Ÿā¤ŋā¤¸ ā¤¸āĨ‡ ā¤¸ā¤šā¤Žā¤¤ ā¤šāĨˆā¤‚āĨ¤", + "Layout_Privacy_Policy": "ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¨āĨ€ā¤¤ā¤ŋ", + "Layout_Show_Home_Button": "ā¤¸ā¤žā¤‡ā¤Ąā¤Ŧā¤žā¤° ā¤šāĨ‡ā¤Ąā¤° ā¤Ēā¤° ā¤šāĨ‹ā¤Ž ā¤ĒāĨ‡ā¤œ ā¤Ŧā¤Ÿā¤¨ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Layout_Custom_Content_Description": "ā¤¯ā¤šā¤žā¤‚ ā¤†ā¤Ēā¤•āĨ€ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤šāĨˆāĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤Ēā¤° ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤‡ā¤¸āĨ‡ ā¤ā¤• ā¤¸ā¤ĢāĨ‡ā¤Ļ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•āĨ‡ ā¤…ā¤‚ā¤Ļā¤° ā¤°ā¤–ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ ā¤¯ā¤ž ā¤šāĨ‹ā¤Žā¤ĒāĨ‡ā¤œ ā¤Ēā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¸ā¤­āĨ€ ā¤œā¤—ā¤š ā¤˛āĨ‡ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Layout_Home_Custom_Block_Visible": "ā¤ŽāĨā¤–ā¤ĒāĨƒā¤ˇāĨā¤  ā¤Ēā¤° ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Layout_Custom_Body_Only": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Layout_Custom_Body_Only_Description": "ā¤¯ā¤š ā¤ŽāĨā¤–ā¤ĒāĨƒā¤ˇāĨā¤  ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¨āĨā¤¯ ā¤¸ā¤­āĨ€ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤›ā¤ŋā¤Ēā¤ž ā¤ĻāĨ‡ā¤—ā¤žāĨ¤", + "Layout_Sidenav_Footer": "ā¤¸ā¤žā¤‡ā¤Ą ā¤¨āĨ‡ā¤ĩā¤ŋā¤—āĨ‡ā¤ļā¤¨ ā¤Ģā¤ŧāĨā¤Ÿā¤°", + "Layout_Sidenav_Footer_Dark": "ā¤¸ā¤žā¤‡ā¤Ą ā¤¨āĨ‡ā¤ĩā¤ŋā¤—āĨ‡ā¤ļā¤¨ ā¤Ģā¤ŧāĨā¤Ÿā¤° - ā¤Ąā¤žā¤°āĨā¤• ā¤ĨāĨ€ā¤Ž", + "Layout_Sidenav_Footer_description": "ā¤Ģā¤ŧāĨā¤Ÿā¤° ā¤•ā¤ž ā¤†ā¤•ā¤žā¤° 260 x 70px ā¤šāĨˆ", + "Layout_Sidenav_Footer_Dark_description": "ā¤Ģā¤ŧāĨā¤Ÿā¤° ā¤•ā¤ž ā¤†ā¤•ā¤žā¤° 260 x 70px ā¤šāĨˆ", + "Layout_Terms_of_Service": "ā¤¸āĨ‡ā¤ĩā¤ž ā¤•āĨ€ ā¤ļā¤°āĨā¤¤āĨ‡ā¤‚", + "LDAP": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€", + "LDAP_Description": "ā¤˛ā¤žā¤‡ā¤Ÿā¤ĩāĨ‡ā¤Ÿ ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤ŸāĨā¤°āĨ€ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤ĒāĨā¤°āĨ‹ā¤ŸāĨ‹ā¤•āĨ‰ā¤˛ ā¤•ā¤ŋā¤¸āĨ€ ā¤•āĨ‹ ā¤­āĨ€ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¯ā¤ž ā¤•ā¤‚ā¤Ēā¤¨āĨ€ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤•ā¤ž ā¤Ēā¤¤ā¤ž ā¤˛ā¤—ā¤žā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤Ŧā¤¨ā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "LDAP_Documentation": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤Ļā¤¸āĨā¤¤ā¤žā¤ĩāĨ‡ā¤œā¤ŧāĨ€ā¤•ā¤°ā¤Ŗ", + "LDAP_Connection": "ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§", + "LDAP_Connection_Authentication": "ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ", + "LDAP_Connection_Encryption": "ā¤•āĨ‚ā¤Ÿā¤˛āĨ‡ā¤–ā¤¨", + "LDAP_Connection_Timeouts": "ā¤¸ā¤Žā¤¯ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ā¤ŋ", + "LDAP_UserSearch": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤–āĨ‹ā¤œ", + "LDAP_UserSearch_Filter": "ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "LDAP_UserSearch_GroupFilter": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤°", + "LDAP_DataSync": "ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¸ā¤ŋā¤‚ā¤•", + "LDAP_DataSync_DataMap": "ā¤Žā¤žā¤¨ā¤šā¤ŋā¤¤āĨā¤°ā¤Ŗ", + "LDAP_DataSync_Avatar": "ā¤…ā¤ĩā¤¤ā¤žā¤°", + "LDAP_DataSync_Advanced": "ā¤‰ā¤¨āĨā¤¨ā¤¤ ā¤¸ā¤ŋā¤‚ā¤•", + "LDAP_DataSync_CustomFields": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_DataSync_Roles": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_DataSync_Channels": "ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_DataSync_Teams": "ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_DataSync_BackgroundSync": "ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤¸ā¤Žā¤¨āĨā¤ĩā¤¯ā¤¨", + "LDAP_Server_Type": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "LDAP_Server_Type_AD": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤•ā¤ž", + "LDAP_Server_Type_Other": "ā¤…ā¤¨āĨā¤¯", + "LDAP_Name_Field": "ā¤¨ā¤žā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą", + "LDAP_Email_Field": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą", + "LDAP_Update_Data_On_Login": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ēā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Update_Data_On_OAuth_Login": "OAuth ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ēā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Advanced_Sync": "ā¤‰ā¤¨āĨā¤¨ā¤¤ ā¤¸ā¤ŋā¤‚ā¤•", "LDAP_Authentication": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Authentication_Password": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "LDAP_Authentication_UserDN": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĄāĨ€.ā¤ā¤¨", + "LDAP_Authentication_UserDN_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤œāĨ‹ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤‡ā¤¨ ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤Ēā¤° ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤˛āĨā¤•ā¤…ā¤Ē ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤\n ā¤¯ā¤š ā¤†ā¤Žā¤¤āĨŒā¤° ā¤Ēā¤° ā¤¤āĨƒā¤¤āĨ€ā¤¯-ā¤Ēā¤•āĨā¤ˇ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ŧā¤¨ā¤žā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤ā¤• ā¤¸āĨ‡ā¤ĩā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤ĒāĨ‚ā¤°āĨā¤Ŗā¤¤ā¤ƒ ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤¨ā¤žā¤Ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚, ā¤œāĨˆā¤¸āĨ‡ `cn=Administrator,cn=Users,dc=Example,dc=com`.", + "LDAP_Avatar_Field": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą", + "You_have_to_set_an_API_token_first_in_order_to_use_the_integration": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤Ēā¤šā¤˛āĨ‡ ā¤ā¤• ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "LDAP_Avatar_Field_Description": " ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¸ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•āĨ‹ *ā¤…ā¤ĩā¤¤ā¤žā¤°* ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤Ēā¤šā¤˛āĨ‡ `ā¤Ĩā¤‚ā¤Ŧā¤¨āĨ‡ā¤˛ā¤ĢāĨ‹ā¤ŸāĨ‹` ā¤”ā¤° `ā¤œāĨ‡ā¤ĒāĨ€ā¤ˆā¤œāĨ€ā¤ĢāĨ‹ā¤ŸāĨ‹` ā¤•āĨ‹ ā¤Ģā¤ŧāĨ‰ā¤˛ā¤ŦāĨˆā¤• ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤–ā¤žā¤˛āĨ€ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤ĻāĨ‡ā¤‚āĨ¤", + "LDAP_Background_Sync": "ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤¸ā¤Žā¤¨āĨā¤ĩā¤¯ā¤¨", + "LDAP_Background_Sync_Avatars": "ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤¸ā¤ŋā¤‚ā¤•", + "LDAP_Background_Sync_Avatars_Description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤ĩā¤¤ā¤žā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤…ā¤˛ā¤— ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤ĒāĨā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "LDAP_Background_Sync_Avatars_Interval": "ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤¸ā¤ŋā¤‚ā¤• ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛", + "LDAP_Background_Sync_Import_New_Users": "ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤¸ā¤ŋā¤‚ā¤• ā¤¨ā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Background_Sync_Import_New_Users_Description": "ā¤‰ā¤¨ ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤—ā¤ž (ā¤†ā¤Ēā¤•āĨ‡ ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤Žā¤žā¤¨ā¤Ļā¤‚ā¤Ą ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤°) ā¤œāĨ‹ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤ŽāĨ‡ā¤‚ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "LDAP_Background_Sync_Interval": "ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤¸ā¤ŋā¤‚ā¤• ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛", + "LDAP_Background_Sync_Interval_Description": "ā¤¤āĨā¤˛āĨā¤¯ā¤•ā¤žā¤˛ā¤¨ ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤•ā¤ž ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛. ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ `ā¤šā¤° 24 ā¤˜ā¤‚ā¤ŸāĨ‡` ā¤¯ā¤ž `ā¤¸ā¤ĒāĨā¤¤ā¤žā¤š ā¤•āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤Ļā¤ŋā¤¨`, ā¤…ā¤§ā¤ŋā¤• ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ [ā¤•āĨā¤°āĨ‹ā¤¨ ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ ā¤Ēā¤žā¤°āĨā¤¸ā¤°](http://bunkat.github.io/later/parsers.html#text) ā¤Ēā¤°", + "LDAP_Background_Sync_Keep_Existant_Users_Updated": "ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤ŦāĨˆā¤•ā¤—āĨā¤°ā¤žā¤‰ā¤‚ā¤Ą ā¤¸ā¤ŋā¤‚ā¤• ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Background_Sync_Keep_Existant_Users_Updated_Description": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• **ā¤¸ā¤ŋā¤‚ā¤• ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛** ā¤Ēā¤° ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸āĨ‡ ā¤†ā¤¯ā¤žā¤¤ā¤ŋā¤¤ ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤…ā¤ĩā¤¤ā¤žā¤°, ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą, ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤‡ā¤¤āĨā¤¯ā¤žā¤Ļā¤ŋ (ā¤†ā¤Ēā¤•āĨ‡ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤°) ā¤•āĨ‹ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤—ā¤žāĨ¤", + "LDAP_Background_Sync_Merge_Existent_Users": "ā¤ŦāĨˆā¤•ā¤—āĨā¤°ā¤žā¤‰ā¤‚ā¤Ą ā¤¸ā¤ŋā¤‚ā¤• ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤Žā¤°āĨā¤œ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "LDAP_Background_Sync_Merge_Existent_Users_Description": "ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ (ā¤†ā¤Ēā¤•āĨ‡ ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤Žā¤žā¤¨ā¤Ļā¤‚ā¤Ą ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤°) ā¤•āĨ‹ ā¤Žā¤°āĨā¤œ ā¤•ā¤° ā¤ĻāĨ‡ā¤—ā¤ž ā¤œāĨ‹ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤ŽāĨ‡ā¤‚ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤­āĨ€ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆā¤‚āĨ¤ ā¤‡ā¤¸āĨ‡ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¸ā¤ŋā¤‚ā¤• ā¤ŸāĨˆā¤Ŧ ā¤ŽāĨ‡ā¤‚ 'ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤Žā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚' ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "LDAP_BaseDN": "ā¤ŦāĨ‡ā¤¸ ā¤ĄāĨ€.ā¤ā¤¨", + "LDAP_BaseDN_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸ā¤Ŧā¤ŸāĨā¤°āĨ€ ā¤•ā¤ž ā¤ĒāĨ‚ā¤°āĨā¤Ŗā¤¤ā¤ƒ ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤ĩā¤ŋā¤ļā¤ŋā¤ˇāĨā¤Ÿ ā¤¨ā¤žā¤Ž (ā¤ĄāĨ€ā¤ā¤¨) ā¤œā¤ŋā¤¸āĨ‡ ā¤†ā¤Ē ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤”ā¤° ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤–āĨ‹ā¤œā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤†ā¤Ē ā¤œā¤ŋā¤¤ā¤¨āĨ‡ ā¤šā¤žā¤šāĨ‡ā¤‚ ā¤‰ā¤¤ā¤¨āĨ‡ ā¤œāĨ‹ā¤Ąā¤ŧ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚; ā¤šā¤žā¤˛ā¤žā¤ā¤•ā¤ŋ, ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤¸ā¤ŽāĨ‚ā¤š ā¤•āĨ‹ ā¤‰ā¤¸āĨ€ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤†ā¤§ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤ ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤¸ā¤•āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨˆā¤‚āĨ¤ ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: `ou=ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž+ou=ā¤ĒāĨā¤°āĨ‹ā¤œāĨ‡ā¤•āĨā¤ŸāĨā¤¸,dc=ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ,dc=com`āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤ŽāĨ‚ā¤š ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤•āĨ‡ā¤ĩā¤˛ ā¤‰ā¤¨ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤šāĨ€ ā¤Ļā¤žā¤¯ā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤šāĨ‹ā¤‚ā¤—āĨ‡āĨ¤ ā¤šā¤Ž ā¤…ā¤¨āĨā¤ļā¤‚ā¤¸ā¤ž ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤•ā¤ŋ ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤•ā¤ž ā¤ŸāĨā¤°āĨ€ ā¤•āĨ‡ ā¤ļāĨ€ā¤°āĨā¤ˇ ā¤¸āĨā¤¤ā¤° ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤†ā¤§ā¤žā¤° ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ‹ ā¤¨ā¤ŋā¤¯ā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤–āĨ‹ā¤œ ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "LDAP_CA_Cert": "ā¤¸āĨ€ā¤ ā¤¸ā¤°āĨā¤Ÿā¤ŋā¤Ģā¤ŋā¤•āĨ‡ā¤Ÿ", + "LDAP_Connect_Timeout": "ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤Ÿā¤žā¤‡ā¤Žā¤†ā¤‰ā¤Ÿ (ā¤ā¤Žā¤ā¤¸)", + "LDAP_DataSync_AutoLogout": "ā¤‘ā¤ŸāĨ‹ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "LDAP_Default_Domain": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "LDAP_Default_Domain_Description": "ā¤¯ā¤Ļā¤ŋ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤‰ā¤¨ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤…ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž ā¤œā¤šā¤žā¤‚ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸āĨ‡ ā¤†ā¤¯ā¤žā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤Ĩā¤žāĨ¤ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‹ `username@default_domain` ā¤¯ā¤ž `unique_id@default_domain` ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤Žā¤žā¤‰ā¤‚ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤\n ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: `ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ`", "LDAP_Enable": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Enable_Description": "ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "LDAP_Enable_LDAP_Groups_To_RC_Teams": "LDAP ā¤¸āĨ‡ Rocket.Chat ā¤¤ā¤• ā¤ŸāĨ€ā¤Ž ā¤ŽāĨˆā¤Ēā¤ŋā¤‚ā¤— ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Encryption": "ā¤•āĨ‚ā¤Ÿā¤˛āĨ‡ā¤–ā¤¨", + "LDAP_Encryption_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤° ā¤¸ā¤‚ā¤šā¤žā¤° ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤ĩā¤ŋā¤§ā¤ŋ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤‰ā¤Ļā¤žā¤šā¤°ā¤ŖāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ `ā¤ĒāĨā¤˛āĨ‡ā¤¨` (ā¤•āĨ‹ā¤ˆ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¨ā¤šāĨ€ā¤‚), `ā¤ā¤¸ā¤ā¤¸ā¤ā¤˛/ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ā¤ā¤¸` (ā¤ļāĨā¤°āĨā¤†ā¤¤ ā¤¸āĨ‡ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą), ā¤”ā¤° `ā¤¸āĨā¤Ÿā¤žā¤°āĨā¤Ÿā¤ŸāĨ€ā¤ā¤˛ā¤ā¤¸` (ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤¸ā¤‚ā¤šā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą) ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨˆā¤‚āĨ¤", + "LDAP_Find_User_After_Login": "ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĸāĨ‚ā¤‚ā¤ĸāĨ‡ā¤‚", + "LDAP_Find_User_After_Login_Description": "ā¤Ŧā¤žā¤‡ā¤‚ā¤Ą ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ĄāĨ€ā¤ā¤¨ ā¤•āĨ€ ā¤–āĨ‹ā¤œ ā¤•ā¤°āĨ‡ā¤—ā¤ž ā¤¤ā¤žā¤•ā¤ŋ ā¤¯ā¤š ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•āĨ‡ ā¤•ā¤ŋ ā¤ā¤ĄāĨ€ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤Ļā¤ŋā¤ ā¤œā¤žā¤¨āĨ‡ ā¤Ēā¤° ā¤Ŧā¤žā¤‡ā¤‚ā¤Ą ā¤–ā¤žā¤˛āĨ€ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•āĨ‹ ā¤°āĨ‹ā¤•ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤Ģā¤˛ ā¤°ā¤šā¤žāĨ¤", + "LDAP_Group_Filter_Enable": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤ŽāĨ‚ā¤š ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Group_Filter_Enable_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚\n ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ *memberOf* ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•āĨ‡ ā¤Ŧā¤ŋā¤¨ā¤ž OpenLDAP ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‹ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—āĨ€", + "LDAP_Group_Filter_Group_Id_Attribute": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤†ā¤ˆā¤ĄāĨ€ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž", + "LDAP_Group_Filter_Group_Id_Attribute_Description": "ā¤œāĨˆā¤¸āĨ‡ **ā¤“ā¤Ēā¤¨ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€:** `ā¤¸āĨ€ā¤ā¤¨`", + "LDAP_Group_Filter_Group_Member_Attribute": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž", + "LDAP_Group_Filter_Group_Member_Attribute_Description": "ā¤œāĨˆā¤¸āĨ‡ **ā¤“ā¤Ēā¤¨ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€:** `ā¤¯āĨ‚ā¤¨āĨ€ā¤•ā¤ŽāĨ‡ā¤ŽāĨā¤Ŧā¤°`", + "LDAP_Group_Filter_Group_Member_Format": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē", + "LDAP_Group_Filter_Group_Member_Format_Description": "ā¤œāĨˆā¤¸āĨ‡ **OpenLDAP:** `uid=#{username},ou=users,o=Company,c=com`", + "LDAP_Group_Filter_Group_Name": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤¨ā¤žā¤Ž", + "LDAP_Group_Filter_Group_Name_Description": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤œā¤ŋā¤¸ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤šāĨˆ", + "LDAP_Group_Filter_ObjectClass": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤‘ā¤ŦāĨā¤œāĨ‡ā¤•āĨā¤Ÿā¤•āĨā¤˛ā¤žā¤¸", + "LDAP_Group_Filter_ObjectClass_Description": "*ā¤‘ā¤ŦāĨā¤œāĨ‡ā¤•āĨā¤Ÿā¤•āĨā¤˛ā¤žā¤¸* ā¤œāĨ‹ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤•āĨ€ ā¤Ēā¤šā¤šā¤žā¤¨ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤\n ā¤œāĨˆā¤¸āĨ‡ **OpenLDAP:** `groupOfUniqueNames`", + "LDAP_Groups_To_Rocket_Chat_Teams": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸āĨ‡ ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤¤ā¤• ā¤ŸāĨ€ā¤Ž ā¤ŽāĨˆā¤Ēā¤ŋā¤‚ā¤—āĨ¤", + "LDAP_Host": "ā¤ŽāĨ‡ā¤œā¤ŧā¤Ŧā¤žā¤¨", + "LDAP_Host_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤šāĨ‹ā¤¸āĨā¤Ÿ, ā¤‰ā¤Ļā¤ž. `ldap.example.com` ā¤¯ā¤ž `10.0.0.30`.", + "LDAP_Idle_Timeout": "ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤¸ā¤Žā¤¯ā¤Ŧā¤žā¤šāĨā¤¯ (ā¤ā¤Žā¤ā¤¸)", + "LDAP_Idle_Timeout_Description": "ā¤¨ā¤ĩāĨ€ā¤¨ā¤¤ā¤Ž ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤‘ā¤Ēā¤°āĨ‡ā¤ļā¤¨ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨ‹ā¤¨āĨ‡ ā¤¤ā¤• ā¤•ā¤ŋā¤¤ā¤¨āĨ‡ ā¤Žā¤ŋā¤˛āĨ€ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤ (ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤‘ā¤Ēā¤°āĨ‡ā¤ļā¤¨ ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤–āĨ‹ā¤˛āĨ‡ā¤—ā¤ž)", + "LDAP_Import_Users_Description": "ā¤¯ā¤š ā¤ŸāĨā¤°āĨ‚ ā¤¸ā¤ŋā¤‚ā¤• ā¤ĒāĨā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤­āĨ€ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤—āĨ€\n *ā¤¸ā¤žā¤ĩā¤§ā¤žā¤¨!* ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤†ā¤¯ā¤žā¤¤ ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤–āĨ‹ā¤œ ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "LDAP_Internal_Log_Level": "ā¤†ā¤‚ā¤¤ā¤°ā¤ŋā¤• ā¤˛āĨ‰ā¤— ā¤¸āĨā¤¤ā¤°", + "LDAP_Login_Fallback": "ā¤Ģā¤ŧāĨ‰ā¤˛ā¤ŦāĨˆā¤• ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Login_Fallback_Description": "ā¤¯ā¤Ļā¤ŋ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤Ēā¤° ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤¸ā¤Ģā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ/ā¤¸āĨā¤Ĩā¤žā¤¨āĨ€ā¤¯ ā¤–ā¤žā¤¤ā¤ž ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤•ā¤ŋā¤¸āĨ€ ā¤•ā¤žā¤°ā¤Ŗ ā¤¸āĨ‡ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤Ąā¤žā¤‰ā¤¨ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤Žā¤Ļā¤Ļ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "LDAP_Merge_Existing_Users": "ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤Žā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Merge_Existing_Users_Description": "*ā¤¸ā¤žā¤ĩā¤§ā¤žā¤¨!* ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸āĨ‡ ā¤ā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤”ā¤° ā¤¸ā¤Žā¤žā¤¨ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤ĩā¤žā¤˛ā¤ž ā¤ā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ ā¤¤āĨ‹ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤”ā¤° ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "LDAP_Port": "ā¤Ēā¤¤āĨā¤¤ā¤¨", + "LDAP_Port_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤šā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨ‹ā¤°āĨā¤ŸāĨ¤ ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤: ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ā¤ā¤¸ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `389` ā¤¯ā¤ž `636`", + "LDAP_Prevent_Username_Changes": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤…ā¤Ēā¤¨ā¤ž Rocket.Chat ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤°āĨ‹ā¤•āĨ‡ā¤‚", + "LDAP_Query_To_Get_User_Teams": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤ŽāĨ‚ā¤š ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤•āĨā¤ĩāĨ‡ā¤°āĨ€", + "LDAP_Reconnect": "ā¤°ā¤ŋā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ", + "LDAP_Reconnect_Description": "ā¤¸ā¤‚ā¤šā¤žā¤˛ā¤¨ ā¤¨ā¤ŋā¤ˇāĨā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤•ā¤ŋā¤¸āĨ€ ā¤•ā¤žā¤°ā¤Ŗ ā¤¸āĨ‡ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤Ŧā¤žā¤§ā¤ŋā¤¤ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤ĒāĨā¤¨: ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Reject_Unauthorized": "ā¤…ā¤¨ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Reject_Unauthorized_Description": "ā¤œā¤ŋā¤¨ ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤Ēā¤¤āĨā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž, ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤†ā¤Žā¤¤āĨŒā¤° ā¤Ēā¤° ā¤¸āĨā¤ĩ-ā¤šā¤¸āĨā¤¤ā¤žā¤•āĨā¤ˇā¤°ā¤ŋā¤¤ ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤Ēā¤¤āĨā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤žā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž", + "LDAP_Search_Page_Size": "ā¤ĒāĨƒā¤ˇāĨā¤  ā¤†ā¤•ā¤žā¤° ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "LDAP_Search_Page_Size_Description": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤Ž ā¤ĒāĨƒā¤ˇāĨā¤  ā¤Ēā¤° ā¤¸ā¤‚ā¤¸ā¤žā¤§ā¤ŋā¤¤ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤°ā¤ĩā¤ŋā¤ˇāĨā¤Ÿā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤ĩā¤žā¤Ēā¤¸ ā¤†ā¤ā¤—āĨ€", + "LDAP_Search_Size_Limit": "ā¤–āĨ‹ā¤œ ā¤†ā¤•ā¤žā¤° ā¤¸āĨ€ā¤Žā¤ž", + "LDAP_Search_Size_Limit_Description": "ā¤ĩā¤žā¤Ēā¤¸ ā¤†ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤ĒāĨā¤°ā¤ĩā¤ŋā¤ˇāĨā¤Ÿā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž.\n **ā¤§āĨā¤¯ā¤žā¤¨ ā¤ĻāĨ‡ā¤‚** ā¤¯ā¤š ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž **ā¤–āĨ‹ā¤œ ā¤ĒāĨƒā¤ˇāĨā¤  ā¤†ā¤•ā¤žā¤°** ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤šāĨ‹ā¤¨āĨ€ ā¤šā¤žā¤šā¤ŋā¤", + "LDAP_Sync_Custom_Fields": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_CustomFieldMap": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤ŽāĨˆā¤Ēā¤ŋā¤‚ā¤—", + "LDAP_Sync_AutoLogout_Enabled": "ā¤‘ā¤ŸāĨ‹ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Sync_AutoLogout_Interval": "ā¤‘ā¤ŸāĨ‹ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛", + "LDAP_Sync_Now": "ā¤…ā¤­āĨ€ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Sync_Now_Description": "ā¤¯ā¤š ā¤…ā¤—ā¤˛āĨ‡ ā¤ļāĨ‡ā¤ĄāĨā¤¯āĨ‚ā¤˛ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤ŋā¤‚ā¤• ā¤•āĨ€ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤ŋā¤ ā¤Ŧā¤ŋā¤¨ā¤ž, ā¤…ā¤Ŧ **ā¤ŦāĨˆā¤•ā¤—āĨā¤°ā¤žā¤‰ā¤‚ā¤Ą ā¤¸ā¤ŋā¤‚ā¤•** ā¤‘ā¤Ēā¤°āĨ‡ā¤ļā¤¨ ā¤ļāĨā¤°āĨ‚ ā¤•ā¤° ā¤ĻāĨ‡ā¤—ā¤žāĨ¤\nā¤¯ā¤š ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤…ā¤¤āĨā¤˛āĨā¤¯ā¤•ā¤žā¤˛ā¤ŋā¤• ā¤šāĨˆ, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛āĨ‰ā¤— ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚āĨ¤", + "LDAP_Sync_User_Active_State": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Sync_User_Active_State_Both": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤”ā¤° ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Sync_User_Active_State_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ Rocket.Chat ā¤Ēā¤° ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¯ā¤ž ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤ ā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚āĨ¤ 'pwdAccountLockedTime' ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¯ā¤š ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž ā¤•ā¤ŋ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ ā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚āĨ¤", + "LDAP_Sync_User_Active_State_Disable": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Sync_User_Active_State_Nothing": "ā¤•āĨā¤› ā¤­āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "LDAP_Sync_User_Avatar": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Sync_User_Data_Roles": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Sync_User_Data_Channels": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤•āĨ‹ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤‘ā¤ŸāĨ‹ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Sync_User_Data_Channels_Admin": "ā¤šāĨˆā¤¨ā¤˛ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤•", + "LDAP_Sync_User_Data_Channels_Admin_Description": "ā¤œā¤Ŧ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨā¤ĩā¤¤ā¤ƒ ā¤¨ā¤ŋā¤°āĨā¤Žā¤ŋā¤¤ ā¤šāĨ‹ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤œāĨ‹ ā¤¸ā¤ŋā¤‚ā¤• ā¤•āĨ‡ ā¤ĻāĨŒā¤°ā¤žā¤¨ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤¯ā¤š ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤Ŧā¤¨ ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "LDAP_Sync_User_Data_Channels_BaseDN": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤—āĨā¤°āĨā¤Ē ā¤ŦāĨ‡ā¤¸ā¤ĄāĨ€ā¤ā¤¨", + "LDAP_Sync_User_Data_Channels_Description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤‰ā¤¨ā¤•āĨ‡ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸ ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤­āĨ€ ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤ĩā¤¤: ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¨āĨ€ā¤šāĨ‡ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚āĨ¤", + "LDAP_Sync_User_Data_Channels_Enforce_AutoChannels": "ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤ĩā¤¤ā¤ƒ ā¤šā¤Ÿā¤žā¤ā¤", + "LDAP_Sync_User_Data_Channels_Enforce_AutoChannels_Description": "**ā¤§āĨā¤¯ā¤žā¤¨ ā¤ĻāĨ‡ā¤‚**: ā¤‡ā¤¸āĨ‡ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž ā¤œā¤ŋā¤¸ā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ! ā¤‡ā¤¸āĨ‡ ā¤•āĨ‡ā¤ĩā¤˛ ā¤¤ā¤­āĨ€ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤œā¤žā¤¨ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤•ā¤ŋ ā¤†ā¤Ē ā¤•āĨā¤¯ā¤ž ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "LDAP_Sync_User_Data_Channels_Filter": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤ŽāĨ‚ā¤š ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤°", + "LDAP_Sync_User_Data_Channels_Filter_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤–āĨ‹ā¤œ ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¯ā¤š ā¤œā¤žā¤ā¤šā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤•āĨ‹ā¤ˆ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ŋā¤¸āĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ ā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚āĨ¤", + "LDAP_Sync_User_Data_ChannelsMap": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤šāĨˆā¤¨ā¤˛ ā¤Žā¤žā¤¨ā¤šā¤ŋā¤¤āĨā¤°", + "LDAP_Sync_User_Data_ChannelsMap_Default": "// ā¤‰ā¤Ēā¤°āĨ‹ā¤•āĨā¤¤ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤•āĨ‹ ā¤‘ā¤ŸāĨ‹ ā¤¸ā¤ŋā¤‚ā¤• ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Sync_User_Data_ChannelsMap_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤•āĨ‹ ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤Ēā¤° ā¤ŽāĨˆā¤Ē ā¤•ā¤°āĨ‡ā¤‚āĨ¤\n ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤¤āĨŒā¤° ā¤Ēā¤°, `{\"ā¤•ā¤°āĨā¤Žā¤šā¤žā¤°āĨ€\":\"ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯\"}` ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤•ā¤°āĨā¤Žā¤šā¤žā¤°āĨ€ ā¤ŽāĨ‡ā¤‚ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧ ā¤ĻāĨ‡ā¤—ā¤žāĨ¤", + "LDAP_Sync_User_Data_Roles_AutoRemove": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤¸āĨā¤ĩā¤¤ā¤ƒ ā¤šā¤Ÿā¤žā¤ā¤", + "LDAP_Sync_User_Data_Roles_AutoRemove_Description": "**ā¤§āĨā¤¯ā¤žā¤¨ ā¤ĻāĨ‡ā¤‚**: ā¤‡ā¤¸āĨ‡ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡ ā¤¯ā¤Ļā¤ŋ ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¸ā¤žā¤‡ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ! ā¤¯ā¤š ā¤•āĨ‡ā¤ĩā¤˛ ā¤‰ā¤¨ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤ĻāĨ‡ā¤—ā¤ž ā¤œāĨ‹ ā¤¨āĨ€ā¤šāĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¸ā¤ŽāĨ‚ā¤š ā¤Žā¤žā¤¨ā¤šā¤ŋā¤¤āĨā¤° ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ā¤°āĨā¤—ā¤¤ ā¤¸āĨ‡ā¤Ÿ ā¤•āĨ€ ā¤—ā¤ˆ ā¤šāĨˆā¤‚āĨ¤", + "LDAP_Sync_User_Data_Roles_BaseDN": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤—āĨā¤°āĨā¤Ē ā¤ŦāĨ‡ā¤¸ā¤ĄāĨ€ā¤ā¤¨", + "LDAP_Sync_User_Data_Roles_BaseDN_Description": "LDAP BaseDN ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤–āĨ‹ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "LDAP_Sync_User_Data_Roles_Filter": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤ŽāĨ‚ā¤š ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤°", + "LDAP_Sync_User_Data_Roles_Filter_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤–āĨ‹ā¤œ ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¯ā¤š ā¤œā¤žā¤ā¤šā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤•āĨ‹ā¤ˆ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ŋā¤¸āĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ ā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚āĨ¤", + "LDAP_Sync_User_Data_RolesMap": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¸ā¤ŽāĨ‚ā¤š ā¤Žā¤žā¤¨ā¤šā¤ŋā¤¤āĨā¤°", + "LDAP_Sync_User_Data_RolesMap_Description": "LDAP ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤•āĨ‹ Rocket.Chat ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤“ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤ŽāĨˆā¤Ē ā¤•ā¤°āĨ‡ā¤‚\n ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤¤āĨŒā¤° ā¤Ēā¤°, `{\"ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ-ā¤ā¤Ąā¤Žā¤ŋā¤¨\":\"ā¤ā¤Ąā¤Žā¤ŋā¤¨\", \"ā¤ŸāĨ‡ā¤•-ā¤¸ā¤ĒāĨ‹ā¤°āĨā¤Ÿ\":\"ā¤¸ā¤ĒāĨ‹ā¤°āĨā¤Ÿ\", \"ā¤ŽāĨˆā¤¨āĨ‡ā¤œā¤°\":[\"ā¤˛āĨ€ā¤Ąā¤°\", \"ā¤ŽāĨ‰ā¤Ąā¤°āĨ‡ā¤Ÿā¤°\"]}` ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ-ā¤ā¤Ąā¤Žā¤ŋā¤¨ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤—āĨā¤°āĨā¤Ē ā¤•āĨ‹ ā¤ŽāĨˆā¤Ē ā¤•ā¤°āĨ‡ā¤—ā¤ž ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ ā¤•āĨ€ \"ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤•\" ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž.", + "LDAP_Teams_BaseDN": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤ŸāĨ€ā¤ŽāĨ‡ā¤‚ ā¤ŦāĨ‡ā¤¸ā¤ĄāĨ€ā¤ā¤¨", + "LDAP_Teams_BaseDN_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤ŦāĨ‡ā¤¸ā¤ĄāĨ€ā¤ā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "LDAP_Teams_Name_Field": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤ŸāĨ€ā¤Ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž", + "LDAP_Teams_Name_Field_Description": "LDAP ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤œā¤ŋā¤¸ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— Rocket.Chat ā¤•āĨ‹ ā¤ŸāĨ€ā¤Ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤¤āĨ‹ ā¤†ā¤Ē ā¤ā¤• ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤¸ā¤‚ā¤­ā¤žā¤ĩā¤ŋā¤¤ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "LDAP_Timeout": "ā¤Ÿā¤žā¤‡ā¤Žā¤†ā¤‰ā¤Ÿ (ā¤ā¤Žā¤ā¤¸)", + "LDAP_Timeout_Description": "ā¤•āĨ‹ā¤ˆ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤˛āĨŒā¤Ÿā¤žā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤–āĨ‹ā¤œ ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¤ā¤¨āĨ‡ ā¤ŽāĨ€ā¤˛ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "LDAP_Unique_Identifier_Field": "ā¤…ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ ā¤Ēā¤šā¤šā¤žā¤¨ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą", + "LDAP_Unique_Identifier_Field_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤”ā¤° ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤˛ā¤ŋā¤‚ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¸ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤†ā¤Ē ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą ā¤¸āĨ‡ ā¤ŽāĨ‚ā¤˛āĨā¤¯ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤•ā¤ˆ ā¤Žā¤žā¤¨āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤\n ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤Žā¤žā¤¨ `ā¤‘ā¤ŦāĨā¤œāĨ‡ā¤•āĨā¤ŸGUID,ibm-entryUUID,GUID,dominoUNID,nsuniqueId,uidNumber` ā¤šāĨˆ", + "LDAP_User_Found": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Žā¤ŋā¤˛ā¤ž", + "LDAP_User_Search_AttributesToQuery": "ā¤•āĨā¤ĩāĨ‡ā¤°āĨ€ ā¤•āĨ‡ ā¤—āĨā¤Ŗ", + "LDAP_User_Search_AttributesToQuery_Description": "ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤ĒāĨā¤°ā¤ļāĨā¤¨āĨ‹ā¤‚ ā¤Ēā¤° ā¤•āĨŒā¤¨ ā¤¸āĨ€ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤žā¤ā¤ ā¤˛āĨŒā¤Ÿā¤žā¤ˆ ā¤œā¤žā¤¨āĨ€ ā¤šā¤žā¤šā¤ŋā¤, ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤šā¤° ā¤šāĨ€ā¤œā¤ŧ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ. `*` ā¤¸ā¤­āĨ€ ā¤¨ā¤ŋā¤¯ā¤Žā¤ŋā¤¤ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤¨ā¤ŋā¤§ā¤ŋā¤¤āĨā¤ĩ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤”ā¤° `+` ā¤¸ā¤­āĨ€ ā¤Ēā¤°ā¤ŋā¤šā¤žā¤˛ā¤¨ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤¨ā¤ŋā¤§ā¤ŋā¤¤āĨā¤ĩ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• Rocket.Chat ā¤¸ā¤ŋā¤‚ā¤• ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ€ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤•āĨ‹ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤•ā¤°ā¤¨ā¤ž ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "LDAP_User_Search_Field": "ā¤–āĨ‹ā¤œ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "LDAP_User_Search_Field_Description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤œāĨ‹ ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ€ ā¤Ēā¤šā¤šā¤žā¤¨ ā¤•ā¤°ā¤¤āĨ€ ā¤šāĨˆāĨ¤ ā¤…ā¤§ā¤ŋā¤•ā¤žā¤‚ā¤ļ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤•ā¤ž ā¤¸āĨā¤Ĩā¤žā¤Ēā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤š ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą `sAMAccountName` ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤¯ā¤š ā¤…ā¤¨āĨā¤¯ LDAP ā¤¸ā¤Žā¤žā¤§ā¤žā¤¨āĨ‹ā¤‚, ā¤œāĨˆā¤¸āĨ‡ OpenLDAP, ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `uid` ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤†ā¤Ē ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ€ ā¤‡ā¤šāĨā¤›ā¤ŋā¤¤ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤Ēā¤šā¤šā¤žā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `ā¤ŽāĨ‡ā¤˛` ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤\n ā¤†ā¤Ē ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤¯ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤œāĨˆā¤¸āĨ‡ ā¤•ā¤ˆ ā¤Ēā¤šā¤šā¤žā¤¨ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤•ā¤ˆ ā¤Žā¤žā¤¨āĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "LDAP_User_Search_Filter": "ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤°", + "LDAP_User_Search_Filter_Description": "ā¤¯ā¤Ļā¤ŋ ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤•āĨ‡ā¤ĩā¤˛ ā¤‡ā¤¸ ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤¸āĨ‡ ā¤ŽāĨ‡ā¤˛ ā¤–ā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤šāĨ€ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ€ ā¤œā¤žā¤ā¤—āĨ€āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤•āĨ‹ā¤ˆ ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ, ā¤¤āĨ‹ ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤†ā¤§ā¤žā¤° ā¤•āĨ‡ ā¤Ļā¤žā¤¯ā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤žā¤‡ā¤¨ ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤‚ā¤—āĨ‡āĨ¤\n ā¤œāĨˆā¤¸āĨ‡ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤•ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `memberOf=cn=ROCKET_CHAT,ou=ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯ ā¤¸ā¤ŽāĨ‚ā¤š`āĨ¤\n ā¤œāĨˆā¤¸āĨ‡ OpenLDAP (ā¤ā¤•āĨā¤¸āĨā¤ŸāĨ‡ā¤‚ā¤¸ā¤ŋā¤Ŧā¤˛ ā¤ŽāĨˆā¤š ā¤¸ā¤°āĨā¤š) ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `ou:dn:=ROCKET_CHAT`āĨ¤", "LDAP_User_Search_Scope": "ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "LDAP_Username_Field": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą", + "LDAP_Username_Field_Description": "ā¤¨ā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¸ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— *ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž* ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž. ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨ‡ā¤œ ā¤Ēā¤° ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤–ā¤žā¤˛āĨ€ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤ĻāĨ‡ā¤‚āĨ¤\n ā¤†ā¤Ē ā¤ŸāĨ‡ā¤ŽāĨā¤ĒāĨā¤˛āĨ‡ā¤Ÿ ā¤ŸāĨˆā¤— ā¤•ā¤ž ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤œāĨˆā¤¸āĨ‡ `#{givenName}.#{sn}`.\n ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤Žā¤žā¤¨ `sAMAccountName` ā¤šāĨˆāĨ¤", + "LDAP_Username_To_Search": "ā¤–āĨ‹ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "LDAP_Validate_Teams_For_Each_Login": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ŽāĨˆā¤Ēā¤ŋā¤‚ā¤— ā¤Žā¤žā¤¨āĨā¤¯ ā¤•ā¤°āĨ‡ā¤‚", + "LDAP_Validate_Teams_For_Each_Login_Description": "ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤•āĨā¤¯ā¤ž ā¤šā¤° ā¤Ŧā¤žā¤° Rocket.Chat ā¤Ēā¤° ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤Ēā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤•āĨ‹ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤‡ā¤¸āĨ‡ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤•āĨ‡ā¤ĩā¤˛ ā¤‰ā¤¨ā¤•āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ēā¤° ā¤šāĨ€ ā¤˛āĨ‹ā¤Ą ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Lead_capture_email_regex": "ā¤˛āĨ€ā¤Ą ā¤•āĨˆā¤ĒāĨā¤šā¤° ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤°āĨ‡ā¤—āĨ‡ā¤•āĨā¤¸", + "Lead_capture_phone_regex": "ā¤˛āĨ€ā¤Ą ā¤•āĨˆā¤ĒāĨā¤šā¤° ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤°āĨ‡ā¤—āĨ‡ā¤•āĨā¤¸", + "Learn_more": "ā¤”ā¤° ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_agents": "ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_canned_responses": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_contacts": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤•āĨ‹ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_current_chats": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤šāĨˆā¤Ÿ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_custom_fields": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_conversations": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_departments": "ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_managers": "ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤•āĨ‹ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_monitors": "ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤° ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_SLA_policies": "SLA ā¤¨āĨ€ā¤¤ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_tags": "ā¤ŸāĨˆā¤— ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_triggers": "ā¤ŸāĨā¤°ā¤ŋā¤—ā¤°āĨā¤¸ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_units": "ā¤‡ā¤•ā¤žā¤‡ā¤¯āĨ‹ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Learn_more_about_voice_channel": "ā¤ĩāĨ‰ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Least_recent_updated": "ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤šā¤žā¤˛ ā¤šāĨ€ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Learn_how_to_unlock_the_myriad_possibilities_of_rocket_chat": "ā¤œā¤žā¤¨āĨ‡ā¤‚ ā¤•ā¤ŋ Rocket.Chat ā¤•āĨ€ ā¤…ā¤¸ā¤‚ā¤–āĨā¤¯ ā¤¸ā¤‚ā¤­ā¤žā¤ĩā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤•āĨˆā¤¸āĨ‡ ā¤…ā¤¨ā¤˛āĨ‰ā¤• ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤āĨ¤", + "Leave": "ā¤›āĨā¤ŸāĨā¤ŸāĨ€", + "Leave_a_comment": "ā¤ā¤• ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€ ā¤›āĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Leave_Group_Warning": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ ā¤¸ā¤ŽāĨ‚ā¤š \"%s\" ā¤›āĨ‹ā¤Ąā¤ŧā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Leave_Livechat_Warning": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ \"%s\" ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤›āĨ‹ā¤Ąā¤ŧā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Leave_Private_Warning": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĩā¤žā¤•ā¤ˆ \"%s\" ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤šā¤°āĨā¤šā¤ž ā¤›āĨ‹ā¤Ąā¤ŧā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "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-c_description": "ā¤šāĨˆā¤¨ā¤˛ ā¤›āĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "leave-p": "ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤›āĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "leave-p_description": "ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤›āĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Lets_get_you_new_one_": "ā¤†ā¤‡ā¤ ā¤†ā¤Ēā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤˛āĨ‡ā¤•ā¤° ā¤†ā¤ā¤‚!", + "License": "ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸", + "Line": "ā¤°āĨ‡ā¤–ā¤ž", + "Link": "ā¤œāĨ‹ā¤Ąā¤ŧā¤¨ā¤ž", + "Link_Preview": "ā¤˛ā¤ŋā¤‚ā¤• ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨", + "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": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€", + "List_view": "ā¤˛ā¤ŋā¤¸āĨā¤Ÿ ā¤ĩāĨā¤¯āĨ‚", + "Livechat": "ā¤¸āĨ€ā¤§āĨ€ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", + "Livechat_abandoned_rooms_action": "ā¤†ā¤—ā¤‚ā¤¤āĨā¤• ā¤Ēā¤°ā¤ŋā¤¤āĨā¤¯ā¤žā¤— ā¤•āĨ‹ ā¤•āĨˆā¤¸āĨ‡ ā¤¸ā¤‚ā¤­ā¤žā¤˛āĨ‡ā¤‚", + "Livechat_abandoned_rooms_closed_custom_message": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤œā¤Ŧ ā¤†ā¤—ā¤‚ā¤¤āĨā¤• ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ā¤¤ā¤ž ā¤•āĨ‡ ā¤•ā¤žā¤°ā¤Ŗ ā¤•ā¤Žā¤°ā¤ž ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨ‹ ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ", + "Livechat_agents": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ", + "Livechat_Agents": "ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚", + "Livechat_allow_manual_on_hold": "ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚ ā¤•āĨ‹ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤°ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Livechat_allow_manual_on_hold_Description": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤°ā¤–ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤Žā¤ŋā¤˛āĨ‡ā¤—ā¤ž", + "Livechat_allow_manual_on_hold_upon_agent_engagement_only": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤¸ā¤‚ā¤˛ā¤—āĨā¤¨ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤šāĨ€ ā¤šāĨˆā¤Ÿ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤°ā¤šā¤¤āĨ€ ā¤šāĨˆ", + "Livechat_allow_manual_on_hold_upon_agent_engagement_only_Description": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤¤ā¤­āĨ€ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤°ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚ ā¤¯ā¤Ļā¤ŋ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ĩā¤šāĨ€ ā¤šāĨˆ ā¤œā¤ŋā¤¸ā¤¨āĨ‡ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤ž ā¤šāĨˆāĨ¤", + "Livechat_AllowedDomainsList": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤…ā¤¨āĨā¤Žā¤¤ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "Livechat_Appearance": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "Livechat_auto_close_on_hold_chats_custom_message": "ā¤‘ā¤¨ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨˆā¤Ÿ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Livechat_auto_close_on_hold_chats_custom_message_Description": "ā¤œā¤Ŧ ā¤‘ā¤¨-ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‹ā¤ˆ ā¤•ā¤Žā¤°ā¤ž ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨ‹ ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ", + "Livechat_auto_close_on_hold_chats_timeout": "ā¤‘ā¤¨ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤•āĨā¤¯āĨ‚ ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆā¤Ÿ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤•ā¤ŋā¤¤ā¤¨āĨ€ ā¤ĻāĨ‡ā¤° ā¤¤ā¤• ā¤‡ā¤‚ā¤¤ā¤œā¤žā¤° ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž?", + "Livechat_auto_close_on_hold_chats_timeout_Description": "ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤šāĨˆā¤Ÿ ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨ‹ā¤¨āĨ‡ ā¤¤ā¤• ā¤‘ā¤¨ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤•ā¤ŋā¤¤ā¤¨āĨ€ ā¤ĻāĨ‡ā¤° ā¤¤ā¤• ā¤°ā¤šāĨ‡ā¤—āĨ€āĨ¤ ā¤¸ā¤Žā¤¯ ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚", + "Livechat_auto_transfer_chat_timeout": "ā¤•ā¤ŋā¤¸āĨ€ ā¤…ā¤¨āĨā¤¯ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤…ā¤¨āĨā¤¤āĨā¤¤ā¤°ā¤ŋā¤¤ ā¤šāĨˆā¤Ÿ ā¤•āĨ‡ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ÿā¤žā¤‡ā¤Žā¤†ā¤‰ā¤Ÿ (ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚)āĨ¤", + "Livechat_auto_transfer_chat_timeout_Description": "ā¤¯ā¤š ā¤‡ā¤ĩāĨ‡ā¤‚ā¤Ÿ ā¤¤ā¤­āĨ€ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ ā¤œā¤Ŧ ā¤šāĨˆā¤Ÿ ā¤…ā¤­āĨ€ ā¤ļāĨā¤°āĨ‚ ā¤šāĨā¤ˆ ā¤šāĨ‹. ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ēā¤šā¤˛āĨ€ ā¤Ŧā¤žā¤° ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ, ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ€ ā¤¨ā¤ŋā¤—ā¤°ā¤žā¤¨āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤•āĨ€ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "Livechat_business_hour_type": "ā¤ĩāĨā¤¯ā¤žā¤ĩā¤¸ā¤žā¤¯ā¤ŋā¤• ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤° (ā¤ā¤•ā¤˛ ā¤¯ā¤ž ā¤ā¤•ā¤žā¤§ā¤ŋā¤•)", + "Livechat_chat_transcript_sent": "ā¤šāĨˆā¤Ÿ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž: {{transcript}}", + "Livechat_close_chat": "ā¤šāĨˆā¤Ÿ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Livechat_custom_fields_options_placeholder": "ā¤ĒāĨ‚ā¤°āĨā¤ĩ-ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤Žā¤žā¤¨ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤¤ā¤¤āĨā¤ĩāĨ‹ā¤‚ ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤°ā¤ŋā¤•āĨā¤¤ ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Livechat_custom_fields_public_description": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤…ā¤¨āĨā¤ĒāĨā¤°ā¤¯āĨ‹ā¤—āĨ‹ā¤‚, ā¤œāĨˆā¤¸āĨ‡ ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ, ā¤†ā¤Ļā¤ŋ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤ŋā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "Livechat_Dashboard": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą", + "Livechat_DepartmentOfflineMessageToChannel": "ā¤‡ā¤¸ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•āĨ‡ ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤Ēā¤° ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Livechat_enable_message_character_limit": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĩā¤°āĨā¤Ŗ ā¤¸āĨ€ā¤Žā¤ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Livechat_enabled": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Livechat_forward_open_chats": "ā¤–āĨā¤˛āĨ€ ā¤šāĨā¤ˆ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Livechat_forward_open_chats_timeout": "ā¤šāĨˆā¤Ÿ ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ÿā¤žā¤‡ā¤Žā¤†ā¤‰ā¤Ÿ (ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚)āĨ¤", + "Livechat_guest_count": "ā¤…ā¤¤ā¤ŋā¤Ĩā¤ŋ ā¤•ā¤žā¤‰ā¤‚ā¤Ÿā¤°", + "Livechat_Inquiry_Already_Taken": "ā¤“ā¤ŽāĨā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨ‚ā¤›ā¤¤ā¤žā¤› ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤˛āĨ‡ ā¤˛āĨ€ ā¤—ā¤ˆ ā¤šāĨˆ", + "Livechat_Installation": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤‡ā¤‚ā¤¸āĨā¤Ÿā¤žā¤˛āĨ‡ā¤ļā¤¨", + "Livechat_last_chatted_agent_routing": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤Ŧā¤žā¤° ā¤šāĨˆā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž", + "Livechat_last_chatted_agent_routing_Description": "ā¤¯ā¤Ļā¤ŋ ā¤šāĨˆā¤Ÿ ā¤ļāĨā¤°āĨ‚ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆ ā¤¤āĨ‹ ā¤˛ā¤žā¤¸āĨā¤Ÿ-ā¤šāĨˆā¤Ÿ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤‰ā¤¸ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤šāĨˆā¤Ÿ ā¤†ā¤ĩā¤‚ā¤Ÿā¤ŋā¤¤ ā¤•ā¤°ā¤¤āĨ€ ā¤šāĨˆ ā¤œā¤ŋā¤¸ā¤¨āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤‰ā¤¸āĨ€ ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ€ ā¤ĨāĨ€āĨ¤", + "Livechat_managers": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤•", + "Livechat_Managers": "ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤•āĨ‹ā¤‚", + "Livechat_max_queue_wait_time_action": "ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤¸ā¤Žā¤¯ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤šā¤¨āĨ‡ ā¤Ēā¤° ā¤•ā¤¤ā¤žā¤°ā¤Ŧā¤ĻāĨā¤§ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤•āĨˆā¤¸āĨ‡ ā¤¸ā¤‚ā¤­ā¤žā¤˛āĨ‡ā¤‚", + "Livechat_maximum_queue_wait_time": "ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤¸ā¤Žā¤¯", + "Livechat_maximum_queue_wait_time_description": "ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤°ā¤–ā¤¨āĨ‡ ā¤•ā¤ž ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤Žā¤¯ (ā¤Žā¤ŋā¤¨ā¤ŸāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚)āĨ¤ -1 ā¤•ā¤ž ā¤Žā¤¤ā¤˛ā¤Ŧ ā¤…ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤šāĨˆ", + "Livechat_message_character_limit": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĩā¤°āĨā¤Ŗ ā¤¸āĨ€ā¤Žā¤ž", + "Livechat_monitors": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤°", + "Livechat_Monitors": "ā¤Ēā¤° ā¤¨ā¤œā¤ŧā¤° ā¤°ā¤–ā¤¤ā¤ž ā¤šāĨˆ", + "Livechat_offline": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨", + "Livechat_offline_message_sent": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž", + "Livechat_OfflineMessageToChannel_enabled": "ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤Ēā¤° ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Omnichannel_chat_closed_due_to_inactivity": "ā¤šāĨˆā¤Ÿ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨ‹ ā¤—ā¤ˆ ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤šā¤ŽāĨ‡ā¤‚ {{timeout}} ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚ {{guest}} ā¤¸āĨ‡ ā¤•āĨ‹ā¤ˆ ā¤‰ā¤¤āĨā¤¤ā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "Omnichannel_on_hold_chat_resumed": "ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤šāĨˆā¤Ÿ ā¤Ģā¤ŋā¤° ā¤¸āĨ‡ ā¤ļāĨā¤°āĨ‚: {{comment}}", + "Omnichannel_on_hold_chat_automatically": "{{guest}} ā¤¸āĨ‡ ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤šāĨˆā¤Ÿ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤‘ā¤¨ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤¸āĨ‡ ā¤Ģā¤ŋā¤° ā¤¸āĨ‡ ā¤ļāĨā¤°āĨ‚ ā¤šāĨ‹ ā¤—ā¤ˆ ā¤ĨāĨ€", + "Omnichannel_on_hold_chat_resumed_manually": "ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤‘ā¤¨ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤¸āĨ‡ {{user}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ģā¤ŋā¤° ā¤¸āĨ‡ ā¤ļāĨā¤°āĨ‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤Ĩā¤ž", + "Omnichannel_On_Hold_due_to_inactivity": "ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤°ā¤–ā¤ž ā¤—ā¤¯ā¤ž ā¤Ĩā¤ž ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤šā¤ŽāĨ‡ā¤‚ {{timeout}} ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚ {{guest}} ā¤¸āĨ‡ ā¤•āĨ‹ā¤ˆ ā¤‰ā¤¤āĨā¤¤ā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž ā¤Ĩā¤ž", + "Omnichannel_On_Hold_manually": "ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ {{user}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤°ā¤–ā¤ž ā¤—ā¤¯ā¤ž ā¤Ĩā¤ž", + "Omnichannel_onHold_Chat": "ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤°ā¤–āĨ‡ā¤‚", + "Omnichannel_quick_actions": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¤āĨā¤ĩā¤°ā¤ŋā¤¤ ā¤•ā¤žā¤°āĨā¤¯ā¤ĩā¤žā¤šāĨ€", + "Omnichannel_sorting_disclaimer": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤ĒāĨ‹ā¤‚ ā¤•āĨ‹ {{sortingMechanism}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤•āĨā¤°ā¤Žā¤Ŧā¤ĻāĨā¤§ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ, ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤•ā¤•āĨā¤ˇ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Livechat_online": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤‘ā¤¨-ā¤˛ā¤žā¤‡ā¤¨", + "Omnichannel_placed_chat_on_hold": "ā¤šāĨˆā¤Ÿ ā¤‘ā¤¨ ā¤šāĨ‹ā¤˛āĨā¤Ą: {{comment}}", + "Omnichannel_hide_conversation_after_closing": "ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Omnichannel_hide_conversation_after_closing_description": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤†ā¤Ēā¤•āĨ‹ ā¤šāĨ‹ā¤Ž ā¤Ēā¤° ā¤°āĨ€ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Livechat_Queue": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤¤ā¤žā¤°", "Livechat_registration_form": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ", + "Livechat_registration_form_message": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĒāĨā¤°ā¤Ēā¤¤āĨā¤° ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Livechat_room_count": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž", + "Livechat_Routing_Method": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤°āĨ‚ā¤Ÿā¤ŋā¤‚ā¤— ā¤ĩā¤ŋā¤§ā¤ŋ", + "Livechat_status": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "Livechat_Take_Confirm": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤‡ā¤¸ ā¤—āĨā¤°ā¤žā¤šā¤• ā¤•āĨ‹ ā¤˛āĨ‡ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Livechat_title": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ļāĨ€ā¤°āĨā¤ˇā¤•", + "Livechat_title_color": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ļāĨ€ā¤°āĨā¤ˇā¤• ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤°ā¤‚ā¤—", + "Livechat_transcript_already_requested_warning": "ā¤‡ā¤¸ ā¤šāĨˆā¤Ÿ ā¤•āĨ€ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤šāĨā¤•ā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ā¤¤āĨ‡ ā¤šāĨ€ ā¤­āĨ‡ā¤œ ā¤ĻāĨ€ ā¤œā¤žā¤ā¤—āĨ€āĨ¤", + "Livechat_transcript_has_been_requested": "ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž. ā¤‡ā¤¸ā¤ŽāĨ‡ā¤‚ ā¤•āĨā¤› ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤˛ā¤— ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚.", + "Livechat_email_transcript_has_been_requested": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ. ā¤‡ā¤¸ā¤ŽāĨ‡ā¤‚ ā¤•āĨā¤› ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤˛ā¤— ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚.", + "Livechat_transcript_request_has_been_canceled": "ā¤šāĨˆā¤Ÿ ā¤ŸāĨā¤°ā¤žā¤‚ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤°ā¤ĻāĨā¤Ļ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ.", + "Livechat_transcript_sent": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž", + "Livechat_transfer_return_to_the_queue": "{{from}} ā¤¨āĨ‡ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛āĨŒā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž", + "Livechat_transfer_return_to_the_queue_with_a_comment": "{{from}} ā¤¨āĨ‡ ā¤ā¤• ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛āĨŒā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž: {{comment}}", + "Livechat_transfer_return_to_the_queue_auto_transfer_unanswered_chat": "{{from}} ā¤¨āĨ‡ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤žā¤Ēā¤¸ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤¯ā¤š {{period}} ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤¤ā¤• ā¤…ā¤¨āĨā¤¤āĨā¤¤ā¤°ā¤ŋā¤¤ ā¤ĨāĨ€", + "Livechat_transfer_to_agent": "{{from}} ā¤¨āĨ‡ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ {{to}} ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž", + "Livechat_transfer_to_agent_with_a_comment": "{{from}} ā¤¨āĨ‡ ā¤ā¤• ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ {{to}} ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž: {{comment}}", + "Livechat_transfer_to_agent_auto_transfer_unanswered_chat": "{{from}} ā¤¨āĨ‡ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ {{to}} ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤¯ā¤š {{period}} ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤¤ā¤• ā¤…ā¤¨āĨā¤¤āĨā¤¤ā¤°ā¤ŋā¤¤ ā¤ĨāĨ€", + "Livechat_transfer_to_department": "{{to}} ā¤¨āĨ‡ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž {{to}}", + "Livechat_transfer_to_department_with_a_comment": "{{to}} ā¤¨āĨ‡ ā¤ā¤• ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤žāĨ¤", + "Livechat_transfer_failed_fallback": "ā¤ŽāĨ‚ā¤˛ ā¤ĩā¤ŋā¤­ā¤žā¤— ({{from}} ) ā¤ŽāĨ‡ā¤‚ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚āĨ¤ ā¤šāĨˆā¤Ÿ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• {{to}} ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤ŋā¤¤ ā¤šāĨ‹ ā¤—ā¤ˆ", + "Livechat_Triggers": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ŸāĨā¤°ā¤ŋā¤—ā¤°", + "Livechat_user_sent_chat_transcript_to_visitor": "{{agent}} ā¤¨āĨ‡ ā¤šāĨˆā¤Ÿ ā¤ŸāĨā¤°ā¤žā¤‚ā¤¸ā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤•āĨ‹ {{guest}} ā¤•āĨ‹ ā¤­āĨ‡ā¤œā¤ž", + "Livechat_Users": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Livechat_Calls": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤•āĨ‰ā¤˛", + "Livechat_visitor_email_and_transcript_email_do_not_match": "ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤•ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤”ā¤° ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ŽāĨ‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤–ā¤žā¤¤āĨ‡", + "Livechat_visitor_transcript_request": "{{guest}} ā¤¨āĨ‡ ā¤šāĨˆā¤Ÿ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž", + "LiveStream & Broadcasting": "ā¤˛ā¤žā¤‡ā¤ĩā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤”ā¤° ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ", + "LiveStream & Broadcasting_Description": "Rocket.Chat ā¤”ā¤° YouTube ā¤˛ā¤žā¤‡ā¤ĩ ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤¯ā¤š ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤šāĨˆā¤¨ā¤˛ ā¤Žā¤žā¤˛ā¤ŋā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤…ā¤‚ā¤Ļā¤° ā¤˛ā¤žā¤‡ā¤ĩā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•āĨˆā¤Žā¤°ā¤ž ā¤Ģā¤ŧāĨ€ā¤Ą ā¤•āĨ‹ ā¤˛ā¤žā¤‡ā¤ĩ ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Livestream": "ā¤˛ā¤žā¤‡ā¤ĩ ā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž", + "Livestream_close": "ā¤˛ā¤žā¤‡ā¤ĩā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Livestream_enable_audio_only": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤ŽāĨ‹ā¤Ą ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Livestream_enabled": "ā¤˛ā¤žā¤‡ā¤ĩā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Livestream_not_found": "ā¤˛ā¤žā¤‡ā¤ĩā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Livestream_unavailable_for_federation": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛ā¤ŋā¤ĩāĨ‡ā¤¸āĨā¤ŸāĨā¤°ā¤Ž ā¤…ā¤¨āĨā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆ", + "Livestream_popout": "ā¤˛ā¤žā¤‡ā¤ĩā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤–āĨ‹ā¤˛āĨ‡ā¤‚", + "Livestream_source_changed_succesfully": "ā¤˛ā¤žā¤‡ā¤ĩā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤¸āĨā¤°āĨ‹ā¤¤ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "Livestream_switch_to_room": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ€ ā¤˛ā¤žā¤‡ā¤ĩā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤Ēā¤° ā¤¸āĨā¤ĩā¤ŋā¤š ā¤•ā¤°āĨ‡ā¤‚", + "Livestream_url": "ā¤˛ā¤žā¤‡ā¤ĩā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤¸āĨā¤°āĨ‹ā¤¤ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Livestream_url_incorrect": "ā¤˛ā¤žā¤‡ā¤ĩā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤—ā¤ŧā¤˛ā¤¤ ā¤šāĨˆ", + "Livestream_live_now": "ā¤…ā¤Ŧ ā¤¸āĨ€ā¤§ā¤ž ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤šāĨ‹ ā¤°ā¤šā¤ž ā¤šāĨˆ!", + "Load_Balancing": "ā¤­ā¤žā¤° ā¤•ā¤ž ā¤¸ā¤‚ā¤¤āĨā¤˛ā¤¨", + "Load_more": "ā¤”ā¤° ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Load_Rotation": "ā¤˛āĨ‹ā¤Ą ā¤°āĨ‹ā¤ŸāĨ‡ā¤ļā¤¨", + "Loading": "ā¤˛āĨ‹ā¤Ą ā¤šāĨ‹ ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Loading_more_from_history": "ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤¸āĨ‡ ā¤”ā¤° ā¤…ā¤§ā¤ŋā¤• ā¤˛āĨ‹ā¤Ą ā¤šāĨ‹ ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Loading_suggestion": "ā¤¸āĨā¤ā¤žā¤ĩ ā¤˛āĨ‹ā¤Ą ā¤šāĨ‹ ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚", + "Loading...": "ā¤˛āĨ‹ā¤Ą ā¤šāĨ‹ ā¤°ā¤šā¤ž ā¤šāĨˆ...", + "Local": "ā¤¸āĨā¤Ĩā¤žā¤¨āĨ€ā¤¯", + "Local_Domains": "ā¤¸āĨā¤Ĩā¤žā¤¨āĨ€ā¤¯ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "Local_Password": "ā¤¸āĨā¤Ĩā¤žā¤¨āĨ€ā¤¯ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "Local_Time": "ā¤¸āĨā¤Ĩā¤žā¤¨āĨ€ā¤¯ ā¤¸ā¤Žā¤¯", + "Local_Timezone": "ā¤¸āĨā¤Ĩā¤žā¤¨āĨ€ā¤¯ ā¤¸ā¤Žā¤¯ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Local_Time_time": "ā¤¸āĨā¤Ĩā¤žā¤¨āĨ€ā¤¯ ā¤¸ā¤Žā¤¯: {{time}}", + "Localization": "ā¤¸āĨā¤Ĩā¤žā¤¨āĨ€ā¤¯ā¤•ā¤°ā¤Ŗ", + "Location": "ā¤œā¤—ā¤š", + "Log_Exceptions_to_Channel": "ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤ĩā¤žā¤Ļ ā¤˛āĨ‰ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "Log_Exceptions_to_Channel_Description": "ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤œāĨ‹ ā¤¸ā¤­āĨ€ ā¤•āĨˆā¤ĒāĨā¤šā¤° ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤…ā¤Ēā¤ĩā¤žā¤Ļ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤—ā¤žāĨ¤ ā¤…ā¤Ēā¤ĩā¤žā¤ĻāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¨ā¤œā¤ŧā¤°ā¤…ā¤‚ā¤Ļā¤žā¤œ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤–ā¤žā¤˛āĨ€ ā¤›āĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚āĨ¤", + "Log_File": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤”ā¤° ā¤˛ā¤žā¤‡ā¤¨ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Log_Level": "ā¤›ā¤žā¤‚ā¤Ÿā¤¨āĨ‡ ā¤•ā¤ž ā¤¸āĨā¤¤ā¤°", + "Log_Package": "ā¤ĒāĨˆā¤•āĨ‡ā¤œ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Log_Trace_Methods": "ā¤ŸāĨā¤°āĨ‡ā¤¸ ā¤ĩā¤ŋā¤§ā¤ŋ ā¤•āĨ‰ā¤˛", + "Log_Trace_Methods_Filter": "ā¤ŸāĨā¤°āĨ‡ā¤¸ ā¤ĩā¤ŋā¤§ā¤ŋ ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤°", + "Log_Trace_Methods_Filter_Description": "ā¤¯ā¤šā¤žā¤‚ ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ ā¤•ā¤ž ā¤ŽāĨ‚ā¤˛āĨā¤¯ā¤žā¤‚ā¤•ā¤¨ ā¤°āĨ‡ā¤—ā¤ā¤•āĨā¤¸ā¤ĒāĨ€ (`ā¤¨ā¤¯ā¤ž ā¤°āĨ‡ā¤—ā¤ā¤•āĨā¤¸ā¤ĒāĨ€('ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ')`) ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤•āĨ‰ā¤˛ ā¤•ā¤ž ā¤ŸāĨā¤°āĨ‡ā¤¸ ā¤Ļā¤ŋā¤–ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸āĨ‡ ā¤–ā¤žā¤˛āĨ€ ā¤°ā¤–āĨ‡ā¤‚āĨ¤", + "Log_Trace_Subscriptions": "ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž ā¤•āĨ‰ā¤˛ ā¤ŸāĨā¤°āĨ‡ā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "Log_Trace_Subscriptions_Filter": "ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤ŸāĨā¤°āĨ‡ā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "Log_Trace_Subscriptions_Filter_Description": "ā¤¯ā¤šā¤žā¤‚ ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ ā¤•ā¤ž ā¤ŽāĨ‚ā¤˛āĨā¤¯ā¤žā¤‚ā¤•ā¤¨ ā¤°āĨ‡ā¤—ā¤ā¤•āĨā¤¸ā¤ĒāĨ€ (`ā¤¨ā¤¯ā¤ž ā¤°āĨ‡ā¤—ā¤ā¤•āĨā¤¸ā¤ĒāĨ€('ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ')`) ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤•āĨ‰ā¤˛ ā¤•ā¤ž ā¤ŸāĨā¤°āĨ‡ā¤¸ ā¤Ļā¤ŋā¤–ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸āĨ‡ ā¤–ā¤žā¤˛āĨ€ ā¤°ā¤–āĨ‡ā¤‚āĨ¤", + "Log_View_Limit": "ā¤˛āĨ‰ā¤— ā¤ĻāĨƒā¤ļāĨā¤¯ ā¤¸āĨ€ā¤Žā¤ž", + "Logged_Out_Banner_Text": "ā¤†ā¤Ēā¤•āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¨āĨ‡ ā¤‡ā¤¸ ā¤‰ā¤Ēā¤•ā¤°ā¤Ŗ ā¤Ēā¤° ā¤†ā¤Ēā¤•ā¤ž ā¤¸ā¤¤āĨā¤° ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤žāĨ¤ ā¤œā¤žā¤°āĨ€ ā¤°ā¤–ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Logged_out_of_other_clients_successfully": "ā¤…ā¤¨āĨā¤¯ ā¤—āĨā¤°ā¤žā¤šā¤•āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž", + "Login": "ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Log_in_to_sync": "ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Login_Attempts": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤ĩā¤ŋā¤Ģā¤˛", + "Login_Detected": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤¤ā¤ž ā¤šā¤˛ā¤ž", + "Logged_In_Via": "ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Login_Logs": "ā¤˛āĨ‰ā¤—ā¤‡ā¤¨ ā¤˛āĨ‰ā¤—āĨā¤¸", + "Login_Logs_ClientIp": "ā¤ĩā¤ŋā¤Ģā¤˛ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤˛āĨ‰ā¤— ā¤Ēā¤° ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ ā¤†ā¤ˆā¤ĒāĨ€ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Login_Logs_Enabled": "ā¤˛āĨ‰ā¤— (ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤Ēā¤°) ā¤ĩā¤ŋā¤Ģā¤˛ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸", + "Login_Logs_ForwardedForIp": "ā¤ĩā¤ŋā¤Ģā¤˛ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤˛āĨ‰ā¤— ā¤Ēā¤° ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤†ā¤ˆā¤ĒāĨ€ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Login_Logs_UserAgent": "ā¤ĩā¤ŋā¤Ģā¤˛ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤˛āĨ‰ā¤— ā¤Ēā¤° UserAgent ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Login_Logs_Username": "ā¤ĩā¤ŋā¤Ģā¤˛ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤˛āĨ‰ā¤— ā¤Ēā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Login_with": "%s ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Logistics": "ā¤°ā¤¸ā¤Ļ", + "Logout": "ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ", + "Logout_Others": "ā¤…ā¤¨āĨā¤¯ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Logout_Device": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Log_out_devices_remotely": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‚ā¤°ā¤¸āĨā¤Ĩ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "logout-device-management": "ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨", + "logout-device-management_description": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤¸āĨ‡ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "logout-other-user": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "logout-other-user_description": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Logs": "ā¤˛āĨ‰ā¤—āĨā¤¸", + "Logs_Description": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤¸ā¤°āĨā¤ĩā¤° ā¤˛āĨ‰ā¤— ā¤•āĨˆā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Longest_chat_duration": "ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤˛ā¤‚ā¤ŦāĨ€ ā¤šāĨˆā¤Ÿ period", + "Longest_reaction_time": "ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤˛ā¤‚ā¤Ŧā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤Žā¤¯", + "Longest_response_time": "ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤˛ā¤‚ā¤Ŧā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤Žā¤¯", + "Looked_for": "ā¤ĸā¤ŧāĨ‚ā¤ĸā¤ŧā¤ž", + "Low": "ā¤•ā¤Ž", + "Lowest": "ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤¤ā¤Ž", + "Mail_Message_Invalid_emails": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤ā¤• ā¤¯ā¤ž ā¤…ā¤§ā¤ŋā¤• ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤ŋā¤ ā¤šāĨˆā¤‚: %s", + "Mail_Message_Missing_subject": "ā¤†ā¤Ēā¤•āĨ‹ ā¤ā¤• ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĩā¤ŋā¤ˇā¤¯ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž.", + "Mail_Message_Missing_to": "ā¤†ā¤Ēā¤•āĨ‹ ā¤ā¤• ā¤¯ā¤ž ā¤…ā¤§ā¤ŋā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž ā¤¯ā¤ž ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤ā¤• ā¤¯ā¤ž ā¤…ā¤§ā¤ŋā¤• ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤āĨ‡ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤šāĨ‹ā¤‚ā¤—āĨ‡āĨ¤", + "Mail_Message_No_messages_selected_select_all": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤•āĨ‹ā¤ˆ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨā¤¨ā¤ž ā¤šāĨˆ", + "Mail_Messages": "ā¤ŽāĨ‡ā¤˛ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Mail_Messages_Instructions": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤Ēā¤° ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°ā¤•āĨ‡ ā¤šāĨā¤¨āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤†ā¤Ē ā¤•āĨŒā¤¨ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤­āĨ‡ā¤œā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Mail_Messages_Subject": "ā¤¯ā¤šā¤žā¤‚ %s ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•ā¤ž ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤­ā¤žā¤— ā¤šāĨˆ", + "mail-messages": "ā¤ŽāĨ‡ā¤˛ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "mail-messages_description": "ā¤ŽāĨ‡ā¤˛ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Mailer": "ā¤ŽāĨ‡ā¤˛ā¤°", + "Mailer_body_tags": "ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤¨ā¤¸ā¤ŦāĨā¤¸ā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤˛ā¤ŋā¤‚ā¤• ā¤•āĨ‡ ā¤˛ā¤ŋā¤ [ā¤…ā¤¨ā¤¸ā¤ŦāĨā¤¸ā¤•āĨā¤°ā¤žā¤‡ā¤Ŧ] ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž āĨ¤
    ā¤†ā¤Ē ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤¨ā¤žā¤Ž, ā¤ĒāĨā¤°ā¤Ĩā¤Ž ā¤¨ā¤žā¤Ž ā¤¯ā¤ž ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¨ā¤žā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ `[name]`, `[fname]`, `[lname]` ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤
    ā¤†ā¤Ē ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ [ā¤ˆā¤ŽāĨ‡ā¤˛] ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Mailing": "ā¤Ąā¤žā¤•", + "Make_Admin": "ā¤ā¤Ąā¤Žā¤ŋā¤¨ ā¤Ŧā¤¨ā¤žā¤“", + "Make_sure_you_have_a_copy_of_your_codes_1": "ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•āĨ‹ā¤Ą ā¤•āĨ€ ā¤ā¤• ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤šāĨˆ:", + "Make_sure_you_have_a_copy_of_your_codes_2": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤• ā¤ā¤Ē ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤–āĨ‹ ā¤ĻāĨ‡ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤†ā¤Ē ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¨ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ ā¤•ā¤ŋā¤¸āĨ€ ā¤ā¤• ā¤•āĨ‹ā¤Ą ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Manage": "ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž", + "manage-agent-extension-association": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤ā¤¸āĨ‹ā¤¸ā¤ŋā¤ā¤ļā¤¨ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "manage-agent-extension-association_description": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤ā¤¸āĨ‹ā¤¸ā¤ŋā¤ā¤ļā¤¨ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-apps": "ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤", + "manage-apps_description": "ā¤¸ā¤­āĨ€ ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-assets": "ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "manage-assets_description": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-cloud": "ā¤Ŧā¤žā¤Ļā¤˛ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-cloud_description": "ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Manage_Devices": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-email-inbox": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-email-inbox_description": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-emoji": "ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-emoji_description": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "messages_pruned": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ€ ā¤•ā¤žā¤Ÿ-ā¤›ā¤žā¤ā¤Ÿ ā¤•āĨ€ ā¤—ā¤ˆ", + "manage-incoming-integrations": "ā¤†ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤ā¤•āĨ€ā¤•ā¤°ā¤ŖāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-incoming-integrations_description": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤†ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤ā¤•āĨ€ā¤•ā¤°ā¤ŖāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-integrations": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-integrations_description": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-livechat-agents": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-livechat-agents_description": "ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-livechat-canned-responses": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-livechat-canned-responses_description": "ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-livechat-departments": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "manage-livechat-departments_description": "ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-livechat-managers": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-livechat-managers_description": "ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-livechat-monitors": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤°āĨā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-livechat-monitors_description": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤° ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-livechat-priorities": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤ā¤ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-livechat-priorities_description": "ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-livechat-sla": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ SLA ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-livechat-sla_description": "ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤ā¤¸ā¤ā¤˛ā¤ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-livechat-tags": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ŸāĨˆā¤— ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-livechat-tags_description": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ŸāĨˆā¤— ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-livechat-units": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤‡ā¤•ā¤žā¤‡ā¤¯āĨ‹ā¤‚ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "manage-livechat-units_description": "ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤‡ā¤•ā¤žā¤‡ā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "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": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•āĨ‡ ā¤†ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤¯ā¤ž ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤”ā¤° ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-own-integrations": "ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•āĨ‡ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-own-integrations_description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤…ā¤Ēā¤¨ā¤ž ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•ā¤ž ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤¯ā¤ž ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤”ā¤° ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-own-outgoing-integrations": "ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•āĨ‡ ā¤†ā¤‰ā¤Ÿā¤—āĨ‹ā¤‡ā¤‚ā¤— ā¤ā¤•āĨ€ā¤•ā¤°ā¤ŖāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-own-outgoing-integrations_description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•āĨ‡ ā¤†ā¤‰ā¤Ÿā¤—āĨ‹ā¤‡ā¤‚ā¤— ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤¯ā¤ž ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤”ā¤° ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-selected-settings": "ā¤•āĨā¤› ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚", + "manage-selected-settings_description": "ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•āĨ‹ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤œāĨ‹ ā¤¸āĨā¤Ēā¤ˇāĨā¤Ÿ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĻāĨ€ ā¤—ā¤ˆ ā¤šāĨˆ", + "manage-sounds": "ā¤§āĨā¤ĩā¤¨ā¤ŋā¤¯ā¤žā¤ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-sounds_description": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤§āĨā¤ĩā¤¨ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-the-app": "ā¤ā¤Ē ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-user-status": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-user-status_description": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-voip-call-settings": "ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ‰ā¤˛ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-voip-call-settings_description": "ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ‰ā¤˛ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-voip-contact-center-settings": "ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•āĨ‡ā¤‚ā¤ĻāĨā¤° ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-voip-contact-center-settings_description": "ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•āĨ‡ā¤‚ā¤ĻāĨā¤° ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Manage_Omnichannel": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Manage_workspace": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Manager_added": "ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤• ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž", + "Manager_removed": "ā¤ŽāĨˆā¤¨āĨ‡ā¤œā¤° ā¤•āĨ‹ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Managers": "ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤•āĨ‹ā¤‚", + "Manage_server_list": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‚ā¤šāĨ€ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Manage_servers": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Manage_which_devices": "ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤šā¤žā¤¯ā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤•āĨŒā¤¨ ā¤¸āĨ‡ ā¤‰ā¤Ēā¤•ā¤°ā¤Ŗ ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¸āĨ‡ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤šāĨ‹ ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤†ā¤ˆā¤ĄāĨ€, ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤œāĨˆā¤¸āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨˆ ā¤”ā¤° ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤•āĨ‹ ā¤ĻāĨ‚ā¤°ā¤¸āĨā¤Ĩ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤•āĨā¤ˇā¤Žā¤¤ā¤ž ā¤­āĨ€ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨˆāĨ¤", + "Management_Server": "ā¤¤ā¤žā¤°ā¤žā¤‚ā¤•ā¤¨ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤• ā¤‡ā¤‚ā¤Ÿā¤°ā¤Ģā¤ŧāĨ‡ā¤¸ (ā¤ā¤ā¤Žā¤†ā¤ˆ)", + "Managing_assets": "ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨", + "Managing_integrations": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨", + "Manual_Selection": "ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤šā¤¯ā¤¨", + "Manufacturing": "ā¤‰ā¤¤āĨā¤Ēā¤žā¤Ļā¤¨", + "MapView_Enabled": "ā¤ŽāĨˆā¤Ēā¤ĩāĨā¤¯āĨ‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "MapView_Enabled_Description": "ā¤ŽāĨˆā¤Ēā¤ĩāĨā¤¯āĨ‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤šāĨˆā¤Ÿ ā¤‡ā¤¨ā¤ĒāĨā¤Ÿ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•āĨ‡ ā¤Ļā¤žā¤ˆā¤‚ ā¤“ā¤° ā¤ā¤• ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸ā¤žā¤ā¤ž ā¤Ŧā¤Ÿā¤¨ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "MapView_GMapsAPIKey": "ā¤—āĨ‚ā¤—ā¤˛ ā¤¸āĨā¤ŸāĨ‡ā¤Ÿā¤ŋā¤• ā¤ŽāĨˆā¤ĒāĨā¤¸ ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤•āĨā¤‚ā¤œāĨ€", + "MapView_GMapsAPIKey_Description": "ā¤‡ā¤¸āĨ‡ Google ā¤ĄāĨ‡ā¤ĩā¤˛ā¤Ēā¤°āĨā¤¸ ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤¸āĨ‡ ā¤¨ā¤ŋā¤ƒā¤ļāĨā¤˛āĨā¤• ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Mark_all_as_read": "`%s` - ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ (ā¤¸ā¤­āĨ€ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚) ā¤Ēā¤ĸā¤ŧāĨ‡ ā¤—ā¤ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Mark_as_read": "ā¤Ēā¤ĸā¤ŧāĨ‡ ā¤šāĨā¤ ā¤•ā¤ž ā¤šā¤ŋā¤šāĨā¤¨", + "Mark_as_unread": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Mark_read": "ā¤Ēā¤ĸā¤ŧā¤ž ā¤šāĨā¤† ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Mark_unread": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤šā¤ŋā¤¨āĨā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‹", + "Marketplace": "ā¤Ŧā¤žā¤œā¤žā¤°", + "Marketplace_app_last_updated": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤Ŧā¤žā¤° ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž {{lastUpdated}}", + "Marketplace_view_marketplace": "ā¤Ŧā¤žā¤œā¤ŧā¤žā¤° ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "Marketplace_error": "ā¤‡ā¤‚ā¤Ÿā¤°ā¤¨āĨ‡ā¤Ÿ ā¤¸āĨ‡ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤¯ā¤ž ā¤†ā¤Ēā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "MAU_value": "ā¤šā¤ŽāĨ‡ā¤ļā¤ž {{price}}", + "Max_length_is": "ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤˛ā¤‚ā¤Ŧā¤žā¤ˆ %s ā¤šāĨˆ", + "Max_number_incoming_livechats_displayed": "ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤ĩā¤¸āĨā¤¤āĨā¤“ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž", + "Max_number_incoming_livechats_displayed_description": "(ā¤ĩāĨˆā¤•ā¤˛āĨā¤Ēā¤ŋā¤•) ā¤†ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤†ā¤‡ā¤Ÿā¤ŽāĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤žāĨ¤", + "Max_number_of_chats_per_agent": "ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž. ā¤ā¤• ā¤¸ā¤žā¤Ĩ ā¤šāĨˆā¤Ÿ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž", + "Max_number_of_chats_per_agent_description": "ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž. ā¤ā¤• ā¤¸ā¤žā¤Ĩ ā¤šāĨ‹ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤šāĨˆā¤Ÿ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤­ā¤žā¤— ā¤˛āĨ‡ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Max_number_of_uses": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž", + "Max_Retry": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ ā¤ĒāĨā¤¨ā¤ƒ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸", + "Maximum": "ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž", + "Maximum_number_of_guests_reached": "ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤œāĨā¤¯ā¤žā¤Ļā¤ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤ŽāĨ‡ā¤šā¤Žā¤žā¤¨ ā¤Ēā¤šāĨā¤‚ā¤šāĨ‡", + "Me": "ā¤ŽāĨā¤āĨ‡", + "Media": "ā¤Žā¤ŋā¤Ąā¤ŋā¤¯ā¤ž", + "Medium": "ā¤Žā¤§āĨā¤¯ā¤Ž", + "Members": "ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚", + "Members_List": "ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€", + "mention-all": "ā¤¸ā¤­āĨ€ ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤°āĨ‡ā¤‚", + "mention-all_description": "@all ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Mentions_all_room_members": "ā¤•ā¤•āĨā¤ˇ ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "Mentions_online_room_members": "ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤°āĨ‚ā¤Ž ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "Mentions_user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "Mentions_channel": "ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤šāĨˆ", + "Mentions_you": "ā¤†ā¤Ēā¤•ā¤ž ā¤œā¤ŋā¤•āĨā¤° ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨ‚ā¤‚", + "mention-here": "ā¤¯ā¤šā¤žā¤‚ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤°āĨ‡ā¤‚", + "mention-here_description": "@ā¤¯ā¤šā¤žā¤ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Mentions": "ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤šāĨˆ", + "Mentions_default": "ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– (ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ)", + "Mentions_only": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤šāĨˆ", + "Mentions_with_@_symbol": "@ ā¤šā¤ŋā¤¨āĨā¤š ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤–", + "Mentions_with_@_symbol_description": "ā¤˛ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤¸ā¤‚ā¤šā¤žā¤° ā¤•āĨ€ ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨā¤, ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤¯ā¤ž ā¤ĩā¤ŋā¤ļā¤ŋā¤ˇāĨā¤Ÿ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤”ā¤° ā¤šā¤žā¤‡ā¤˛ā¤žā¤‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤\n\nā¤œā¤Ŧ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤ŽāĨ‡ā¤‚ \"@\" ā¤ĒāĨā¤°ā¤¤āĨ€ā¤• ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤°āĨ€ā¤Ąā¤° ā¤•āĨ€ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇā¤Žā¤¤ā¤ž ā¤…ā¤¨āĨā¤•āĨ‚ā¤˛ā¤ŋā¤¤ ā¤šāĨ‹ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆāĨ¤ ā¤¯ā¤š ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤°āĨ€ā¤Ąā¤° ā¤Ēā¤° ā¤­ā¤°āĨ‹ā¤¸ā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤‡ā¤¨ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤–āĨ‹ā¤‚ ā¤•āĨ€ ā¤†ā¤¸ā¤žā¤¨āĨ€ ā¤¸āĨ‡ ā¤ĩāĨā¤¯ā¤žā¤–āĨā¤¯ā¤ž ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤‰ā¤¨ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Merge_Channels": "ā¤šāĨˆā¤¨ā¤˛ ā¤Žā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Message_Description": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚.", + "Message_AllowBadWordsFilter": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤ŦāĨā¤°āĨ‡ ā¤ļā¤ŦāĨā¤ĻāĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Message_AllowConvertLongMessagesToAttachment": "ā¤˛ā¤‚ā¤ŦāĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤…ā¤¨āĨā¤˛ā¤—āĨā¤¨ā¤• ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Message_AllowDeleting": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Message_AllowDeleting_BlockDeleteInMinutes": "(ā¤ā¤¨) ā¤Žā¤ŋā¤¨ā¤Ÿ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Message_AllowDeleting_BlockDeleteInMinutes_Description": "ā¤…ā¤ĩā¤°āĨ‹ā¤§ā¤¨ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ 0 ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚.", + "Message_AllowDirectMessagesToYourself": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Message_AllowEditing": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Message_AllowEditing_BlockEditInMinutes": "(n) ā¤Žā¤ŋā¤¨ā¤Ÿ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨ ā¤•āĨ‹ ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Message_AllowEditing_BlockEditInMinutesDescription": "ā¤…ā¤ĩā¤°āĨ‹ā¤§ā¤¨ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ 0 ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚.", + "Message_AllowPinning": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤ŋā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Message_AllowPinning_Description": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤Ēā¤° ā¤Ēā¤ŋā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚āĨ¤", + "Message_AllowStarring": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤¤ā¤žā¤°ā¤žā¤‚ā¤•ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Message_AllowUnrecognizedSlashCommand": "ā¤…ā¤œāĨā¤žā¤žā¤¤ ā¤¸āĨā¤˛āĨˆā¤ļ ā¤•ā¤Žā¤žā¤‚ā¤Ą ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Message_Already_Sent": "ā¤¯ā¤š ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤­āĨ‡ā¤œā¤ž ā¤œā¤ž ā¤šāĨā¤•ā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤¸ā¤°āĨā¤ĩā¤° ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤‚ā¤¸ā¤žā¤§ā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Message_AlwaysSearchRegExp": "ā¤šā¤ŽāĨ‡ā¤ļā¤ž RegExp ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Message_AlwaysSearchRegExp_Description": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤•āĨ€ ā¤­ā¤žā¤ˇā¤ž [MongoDB ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ ā¤¸ā¤°āĨā¤š](https://docs.mongodb.org/manual/reference/text-search-ā¤­ā¤žā¤ˇā¤žā¤“ā¤‚/#text-search-ā¤­ā¤žā¤ˇā¤žā¤“ā¤‚) ā¤Ēā¤° ā¤¸ā¤Žā¤°āĨā¤Ĩā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ, ā¤¤āĨ‹ ā¤šā¤Ž `True` ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤ļā¤‚ā¤¸ā¤ž ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Message_Attachments": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤¨āĨā¤˛ā¤—āĨā¤¨ā¤•", + "Message_Attachments_Thumbnails_Enabled": "ā¤ŦāĨˆā¤‚ā¤Ąā¤ĩā¤ŋā¤Ĩ ā¤•āĨ‹ ā¤Ŧā¤šā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤›ā¤ĩā¤ŋ ā¤Ĩā¤‚ā¤Ŧā¤¨āĨ‡ā¤˛ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Message_Attachments_Thumbnails_Width": "ā¤Ĩā¤‚ā¤Ŧā¤¨āĨ‡ā¤˛ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤šāĨŒā¤Ąā¤ŧā¤žā¤ˆ (ā¤Ēā¤ŋā¤•āĨā¤¸āĨ‡ā¤˛ ā¤ŽāĨ‡ā¤‚)", + "Message_Attachments_Thumbnails_Height": "ā¤Ĩā¤‚ā¤Ŧā¤¨āĨ‡ā¤˛ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤Šā¤‚ā¤šā¤žā¤ˆ (ā¤Ēā¤ŋā¤•āĨā¤¸āĨ‡ā¤˛ ā¤ŽāĨ‡ā¤‚)", + "Message_with_attachment": "ā¤…ā¤¨āĨā¤˛ā¤—āĨā¤¨ā¤• ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Report_sent": "ā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤­āĨ‡ā¤œāĨ€ ā¤—ā¤ˆ", + "Message_Attachments_Thumbnails_EnabledDesc": "ā¤ŦāĨˆā¤‚ā¤Ąā¤ĩā¤ŋā¤Ĩ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ‹ ā¤•ā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ŽāĨ‚ā¤˛ ā¤›ā¤ĩā¤ŋ ā¤•āĨ‡ ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤Ēā¤° ā¤Ĩā¤‚ā¤Ŧā¤¨āĨ‡ā¤˛ ā¤ĒāĨā¤°ā¤¸āĨā¤¤āĨā¤¤ ā¤•ā¤ŋā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤ ā¤…ā¤¨āĨā¤˛ā¤—āĨā¤¨ā¤• ā¤•āĨ‡ ā¤¨ā¤žā¤Ž ā¤•āĨ‡ ā¤†ā¤—āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤†ā¤‡ā¤•ā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤ŽāĨ‚ā¤˛ ā¤°ā¤ŋā¤œā¤ŧāĨ‰ā¤˛āĨā¤¯āĨ‚ā¤ļā¤¨ ā¤ĩā¤žā¤˛āĨ€ ā¤›ā¤ĩā¤ŋā¤¯ā¤žā¤‚ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤œā¤ž ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆā¤‚āĨ¤", + "Message_Attachments_Strip_Exif": "ā¤¸ā¤Žā¤°āĨā¤Ĩā¤ŋā¤¤ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤¸āĨ‡ EXIF ā¤ŽāĨ‡ā¤Ÿā¤žā¤ĄāĨ‡ā¤Ÿā¤ž ā¤šā¤Ÿā¤žā¤ā¤", + "Message_Attachments_Strip_ExifDescription": "ā¤›ā¤ĩā¤ŋ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ (jpeg, tiff, ā¤†ā¤Ļā¤ŋ) ā¤¸āĨ‡ EXIF ā¤ŽāĨ‡ā¤Ÿā¤žā¤ĄāĨ‡ā¤Ÿā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤ž ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤¯ā¤š ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤ĩāĨā¤¯ā¤žā¤ĒāĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ, ā¤‡ā¤¸ā¤˛ā¤ŋā¤ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ EXIF ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤šāĨ‹ā¤—ā¤ž", + "Message_Audio": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Message_Audio_bitRate": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ŧā¤ŋā¤Ÿ ā¤Ļā¤°", + "Message_AudioRecorderEnabled": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ąā¤° ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Message_AudioRecorderEnabled_Description": "'ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą' ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ā¤°āĨā¤—ā¤¤ 'ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹/ā¤ā¤Žā¤ĒāĨ€3' ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ā¤• ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤šāĨ‹ā¤¨ā¤ž ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆāĨ¤", + "Message_Audio_Recording_Disabled": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ąā¤ŋā¤‚ā¤— ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•āĨ€ ā¤—ā¤ˆ", + "Message_auditing": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•ā¤ž ā¤‘ā¤Ąā¤ŋā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Message_auditing_log": "ā¤‘ā¤Ąā¤ŋā¤Ÿ ā¤˛āĨ‰ā¤—", + "Message_BadWordsFilterList": "ā¤ŦāĨā¤°āĨ‡ ā¤ļā¤ŦāĨā¤ĻāĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤žā¤˛āĨ€ ā¤¸āĨ‚ā¤šāĨ€ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Message_BadWordsFilterListDescription": "ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ŦāĨā¤°āĨ‡ ā¤ļā¤ŦāĨā¤ĻāĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Message_BadWordsWhitelist": "ā¤ŦāĨā¤˛āĨˆā¤•ā¤˛ā¤ŋā¤¸āĨā¤Ÿ ā¤¸āĨ‡ ā¤ļā¤ŦāĨā¤Ļ ā¤šā¤Ÿā¤žā¤ā¤", + "Message_BadWordsWhitelistDescription": "ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤¸āĨ‡ ā¤šā¤Ÿā¤žā¤ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤ļā¤ŦāĨā¤ĻāĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Message_Characther_Limit": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĩā¤°āĨā¤Ŗ ā¤¸āĨ€ā¤Žā¤ž", + "Message_Code_highlight": "ā¤•āĨ‹ā¤Ą ā¤šā¤žā¤‡ā¤˛ā¤žā¤‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤­ā¤žā¤ˇā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€", + "Message_Code_highlight_Description": "ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤­ā¤žā¤ˇā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€ (ā¤¸ā¤­āĨ€ ā¤¸ā¤Žā¤°āĨā¤Ĩā¤ŋā¤¤ ā¤­ā¤žā¤ˇā¤žā¤ā¤‚ [highlight.js](https://github.com/highlightjs/highlight.js/tree/11.6.0#supported-ā¤­ā¤žā¤ˇā¤žā¤ā¤‚) ā¤Ēā¤°) ā¤œā¤ŋā¤¨ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ‹ā¤Ą ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•āĨ‹ ā¤šā¤žā¤‡ā¤˛ā¤žā¤‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž", + "Message_CustomDomain_AutoLink": "ā¤‘ā¤ŸāĨ‹ ā¤˛ā¤ŋā¤‚ā¤• ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤ļāĨā¤ĩāĨ‡ā¤¤ā¤¸āĨ‚ā¤šāĨ€", + "Message_CustomDomain_AutoLink_Description": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē `https://internaltool.intranet` ā¤¯ā¤ž `internaltool.intranet` ā¤œāĨˆā¤¸āĨ‡ ā¤†ā¤‚ā¤¤ā¤°ā¤ŋā¤• ā¤˛ā¤ŋā¤‚ā¤• ā¤•āĨ‹ ā¤‘ā¤ŸāĨ‹ ā¤˛ā¤ŋā¤‚ā¤• ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤†ā¤Ēā¤•āĨ‹ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤ŽāĨ‡ā¤‚ `ā¤‡ā¤‚ā¤ŸāĨā¤°ā¤žā¤¨āĨ‡ā¤Ÿ` ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž, ā¤•ā¤ˆ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤•āĨ‹ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "message_counter": "{{counter}} ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Message_DateFormat": "ā¤¤ā¤žā¤°ā¤ŋā¤– ā¤•ā¤ž ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē", + "Message_DateFormat_Description": "ā¤¯ā¤š ā¤­āĨ€ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚: [Moment.js](http://momentjs.com/docs/#/displaying/format/)", + "Message_deleting_blocked": "ā¤¯ā¤š ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤Ŧ ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž", + "Message_editing": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨", + "Message_ErasureType": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Žā¤ŋā¤Ÿā¤žā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "Message_ErasureType_Delete": "ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤žā¤ā¤", + "Message_ErasureType_Description": "ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤‰ā¤¨ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•ā¤ž ā¤•āĨā¤¯ā¤ž ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨˆ ā¤œāĨ‹ ā¤…ā¤Ēā¤¨ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤šā¤Ÿā¤žā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤\n - **ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤”ā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤°ā¤–āĨ‡ā¤‚:** ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤”ā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤…ā¤¨āĨā¤¯ ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤°ā¤–ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤\n - **ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤žā¤ā¤‚:** ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤”ā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤ĄāĨ‡ā¤Ÿā¤žā¤ŦāĨ‡ā¤¸ ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤œā¤žā¤ā¤‚ā¤—āĨ€ ā¤”ā¤° ā¤…ā¤Ŧ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤Ēā¤¤ā¤ž ā¤˛ā¤—ā¤žā¤¨ā¤ž ā¤¸ā¤‚ā¤­ā¤ĩ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤—ā¤žāĨ¤\n - **ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤”ā¤° ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤˛ā¤ŋā¤‚ā¤• ā¤šā¤Ÿā¤žā¤ā¤‚:** ā¤¯ā¤š ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤”ā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤•āĨ‹ Rocket.Cat ā¤ŦāĨ‰ā¤Ÿ ā¤•āĨ‹ ā¤¸āĨŒā¤‚ā¤Ē ā¤ĻāĨ‡ā¤—ā¤ž ā¤”ā¤° ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "Message_ErasureType_Keep": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤”ā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤°ā¤–āĨ‡ā¤‚", + "Message_ErasureType_Unlink": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤”ā¤° ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤˛ā¤ŋā¤‚ā¤• ā¤šā¤Ÿā¤žā¤ā¤", + "Message_GlobalSearch": "ā¤ĩāĨˆā¤ļāĨā¤ĩā¤ŋā¤• ā¤–āĨ‹ā¤œ", + "Message_GroupingPeriod": "ā¤¸ā¤ŽāĨ‚ā¤šāĨ€ā¤•ā¤°ā¤Ŗ period (ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚)", + "Message_GroupingPeriodDescription": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸ā¤ŽāĨ‚ā¤šāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž ā¤¯ā¤Ļā¤ŋ ā¤ĻāĨ‹ā¤¨āĨ‹ā¤‚ ā¤ā¤• ā¤šāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤ŦāĨ€ā¤¤ā¤ž ā¤šāĨā¤† ā¤¸ā¤Žā¤¯ ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤¸ā¤Žā¤¯ ā¤¸āĨ‡ ā¤•ā¤Ž ā¤Ĩā¤žāĨ¤", + "Message_has_been_edited": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Message_has_been_edited_at": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ {{date}} ā¤Ēā¤° ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Message_has_been_edited_by": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ {{username}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Message_has_been_edited_by_at": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ {{username}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž {{date}} ā¤Ēā¤° ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Message_has_been_forwarded": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Message_has_been_pinned": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤ŋā¤¨ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Message_has_been_starred": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¤ā¤žā¤°ā¤žā¤‚ā¤•ā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Message_has_been_unpinned": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤¨ā¤Ēā¤ŋā¤¨ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Message_has_been_unstarred": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤¤ā¤žā¤°ā¤žā¤‚ā¤•ā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Message_HideType_au": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ ā¤—ā¤\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_added_user_to_team": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_mute_unmute": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ/ā¤…ā¤¨ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤›āĨā¤Ēā¤žā¤ā¤‚", + "Message_HideType_r": "\"ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_rm": "\"ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤—ā¤¯ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_room_allowed_reacting": "\"ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĻāĨ‡ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤šāĨˆ\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_room_archived": "\"ā¤•ā¤•āĨā¤ˇ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_room_changed_avatar": "\"ā¤•ā¤•āĨā¤ˇ ā¤•ā¤ž ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤Ŧā¤Ļā¤˛ ā¤—ā¤¯ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_room_changed_privacy": "\"ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤Ŧā¤Ļā¤˛ ā¤—ā¤¯ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_room_changed_topic": "\"ā¤•ā¤•āĨā¤ˇ ā¤•ā¤ž ā¤ĩā¤ŋā¤ˇā¤¯ ā¤Ŧā¤Ļā¤˛ ā¤—ā¤¯ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_room_disallowed_reacting": "\"ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_room_enabled_encryption": "\"ā¤•ā¤•āĨā¤ˇ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_room_disabled_encryption": "\"ā¤•ā¤•āĨā¤ˇ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤…ā¤•āĨā¤ˇā¤Ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_room_set_read_only": "\"ā¤°āĨ‚ā¤Ž ā¤¸āĨ‡ā¤Ÿ ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_room_removed_read_only": "\"ā¤•ā¤Žā¤°ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž ā¤˛āĨ‡ā¤–ā¤¨ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_room_unarchived": "\"ā¤•ā¤•āĨā¤ˇ ā¤…ā¤¨ā¤žā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_ru": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¨ā¤ŋā¤•ā¤žā¤˛āĨ‡ ā¤—ā¤\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_removed_user_from_team": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‡ ā¤¨ā¤ŋā¤•ā¤žā¤˛ā¤ž ā¤—ā¤¯ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_subscription_role_added": "\"ā¤•āĨā¤¯ā¤ž ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤ĨāĨ€\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_subscription_role_removed": "\"ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤…ā¤Ŧ ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_uj": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤œāĨā¤Ąā¤ŧāĨ‡ā¤‚\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_ujt": "\"ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_ul": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤›āĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›āĨā¤Ēā¤žā¤ā¤‚", + "Message_HideType_ult": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ŧā¤žā¤ā¤ ā¤ŸāĨ€ā¤Ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_user_added_room_to_team": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž ā¤•ā¤Žā¤°ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_user_converted_to_channel": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤ŸāĨ€ā¤Ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤›āĨā¤Ēā¤žā¤ā¤‚", + "Message_HideType_user_converted_to_team": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤šāĨˆā¤¨ā¤˛\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤›āĨā¤Ēā¤žā¤ā¤‚", + "Message_HideType_user_deleted_room_from_team": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‡ ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤•ā¤Žā¤°ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_user_removed_room_from_team": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨āĨ‡ ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Žā¤°ā¤ž ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›āĨā¤Ēā¤žā¤ā¤‚", + "Message_HideType_changed_description": "\"ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ ā¤Ŧā¤Ļā¤˛ ā¤—ā¤¯ā¤ž\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_changed_announcement": "\"ā¤•ā¤•āĨā¤ˇ ā¤˜āĨ‹ā¤ˇā¤Ŗā¤ž ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤ŽāĨ‡ā¤‚\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_ut": "\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤ŽāĨā¤Žā¤ŋā¤˛ā¤ŋā¤¤ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_HideType_wm": "\"ā¤¸āĨā¤ĩā¤žā¤—ā¤¤\" ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Message_Id": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤ˆā¤ĄāĨ€", + "Message_Ignored": "ā¤‡ā¤¸ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤¨ā¤œā¤°ā¤…ā¤‚ā¤Ļā¤žā¤œ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "message-impersonate": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤°āĨ‚ā¤Ēā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "message-impersonate_description": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤‰ā¤Ēā¤¨ā¤žā¤Ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤°āĨ‚ā¤Ēā¤Ŗ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Message_info": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Message_KeepHistory": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤°ā¤–āĨ‡ā¤‚", + "Message_MaxAll": "ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤šāĨˆā¤¨ā¤˛ ā¤†ā¤•ā¤žā¤°", + "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_is_removed": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Message_sent_by_email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Message_ShowDeletedStatus": "ā¤šā¤Ÿā¤žā¤ˆ ā¤—ā¤ˆ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Message_Formatting_Toolbox": "ā¤Ģā¤ŧāĨ‰ā¤°āĨā¤ŽāĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤ŸāĨ‚ā¤˛ā¤ŦāĨ‰ā¤•āĨā¤¸", + "Message_composer_toolbox_primary_actions": "ā¤¸ā¤‚ā¤—āĨ€ā¤¤ā¤•ā¤žā¤° ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤• ā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤", + "Message_composer_toolbox_secondary_actions": "ā¤¸ā¤‚ā¤—āĨ€ā¤¤ā¤•ā¤žā¤° ā¤Žā¤žā¤§āĨā¤¯ā¤Žā¤ŋā¤• ā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤", + "Message_starring": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤­ā¤ŋā¤¨āĨ€ā¤¤", + "Message_Time": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•ā¤ž ā¤¸ā¤Žā¤¯", + "Message_TimeAndDateFormat": "ā¤¸ā¤Žā¤¯ ā¤”ā¤° ā¤Ļā¤ŋā¤¨ā¤žā¤‚ā¤• ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē", + "Message_TimeAndDateFormat_Description": "ā¤¯ā¤š ā¤­āĨ€ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚: [Moment.js](http://momentjs.com/docs/#/displaying/format/)", + "Message_TimeFormat": "ā¤¸ā¤Žā¤¯ ā¤¸āĨā¤ĩā¤°āĨ‚ā¤Ē", + "Message_TimeFormat_Description": "ā¤¯ā¤š ā¤­āĨ€ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚: [Moment.js](http://momentjs.com/docs/#/displaying/format/)", + "Message_too_long": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ŧā¤šāĨā¤¤ ā¤˛ā¤‚ā¤Ŧā¤ž ā¤šāĨˆ", + "Message_UserId": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ēā¤šā¤šā¤žā¤¨", + "Message_view_mode_info": "ā¤‡ā¤¸ā¤¸āĨ‡ ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤Ēā¤° ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤˛āĨ€ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤œā¤—ā¤š ā¤•āĨ€ ā¤Žā¤žā¤¤āĨā¤°ā¤ž ā¤Ŧā¤Ļā¤˛ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "Message_VideoRecorderEnabled": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ąā¤° ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Message_Video_Recording_Disabled": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ąā¤ŋā¤‚ā¤— ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•āĨ€ ā¤—ā¤ˆ", + "MessageBox_view_mode": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤ĻāĨƒā¤ļāĨā¤¯ ā¤ŽāĨ‹ā¤Ą", + "Message_VideoRecorderEnabledDescription": "'ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą' ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ā¤°āĨā¤—ā¤¤ 'ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹/ā¤ĩāĨ‡ā¤Ŧā¤ā¤Ž' ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ā¤• ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤šāĨ‹ā¤¨ā¤ž ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆāĨ¤", + "messages": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚", + "Messages": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚", + "Messages_selected": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤¯ā¤¨ā¤ŋā¤¤", + "Messages_sent": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œāĨ‡ ā¤—ā¤", + "Messages_that_are_sent_to_the_Incoming_WebHook_will_be_posted_here": "ā¤‡ā¤¨ā¤•ā¤Žā¤ŋā¤‚ā¤— ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤Ēā¤° ā¤­āĨ‡ā¤œāĨ‡ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¯ā¤šā¤žā¤‚ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•ā¤ŋā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "Meta": "ā¤ŽāĨ‡ā¤Ÿā¤ž", + "Meta_Description": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ŽāĨ‡ā¤Ÿā¤ž ā¤—āĨā¤Ŗ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚.", + "Meta_custom": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ŽāĨ‡ā¤Ÿā¤ž ā¤ŸāĨˆā¤—", + "Meta_fb_app_id": "ā¤ĢāĨ‡ā¤¸ā¤ŦāĨā¤• ā¤ā¤Ē ā¤†ā¤ˆā¤ĄāĨ€", + "Meta_google-site-verification": "Google ā¤¸ā¤žā¤‡ā¤Ÿ ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨", + "Meta_language": "ā¤­ā¤žā¤ˇā¤ž", + "Meta_msvalidate01": "MSValidate.01", + "Meta_robots": "ā¤°āĨ‹ā¤ŦāĨ‹ā¤ŸāĨ‹ā¤‚", + "meteor_status_connected": "ā¤œāĨā¤Ąā¤ŧāĨ‡ ā¤šāĨā¤", + "meteor_status_connecting": "ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤šāĨ‹ ā¤°ā¤šā¤ž ā¤šāĨˆ...", + "meteor_status_failed": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤ĩā¤ŋā¤Ģā¤˛ ā¤°ā¤šā¤ž", + "meteor_status_offline": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤ŽāĨ‹ā¤ĄāĨ¤", + "meteor_status_reconnect_in": "ā¤ā¤• ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤° ā¤°ā¤šā¤ž ā¤šāĨ‚ā¤...", + "meteor_status_try_now_offline": "ā¤ĒāĨā¤¨ā¤ƒ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "meteor_status_try_now_waiting": "ā¤…ā¤Ŧ ā¤•āĨ‹ā¤ļā¤ŋā¤ļ ā¤•ā¤°āĨ‹", + "meteor_status_waiting": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤•āĨ€ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤ŽāĨ‡ā¤‚,", + "Method": "ā¤¤ā¤°āĨ€ā¤•ā¤ž", + "Mic_on": "ā¤Žā¤žā¤‡ā¤• ā¤‘ā¤¨", + "Microphone": "ā¤Žā¤žā¤‡ā¤•āĨā¤°āĨ‹ā¤Ģā¤ŧāĨ‹ā¤¨", + "Microphone_access_not_allowed": "ā¤Žā¤žā¤‡ā¤•āĨā¤°āĨ‹ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤ĨāĨ€, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ€ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤œā¤žā¤‚ā¤šāĨ‡ā¤‚āĨ¤", + "Mic_off": "ā¤Žā¤žā¤‡ā¤• ā¤Ŧā¤‚ā¤Ļ", + "Min_length_is": "ā¤¨āĨā¤¯āĨ‚ā¤¨ā¤¤ā¤Ž ā¤˛ā¤‚ā¤Ŧā¤žā¤ˆ %s ā¤šāĨˆ", + "Minimum": "ā¤¨āĨā¤¯āĨ‚ā¤¨ā¤¤ā¤Ž", + "Minimum_balance": "ā¤¨āĨā¤¯āĨ‚ā¤¨ā¤¤ā¤Ž ā¤ļāĨ‡ā¤ˇ", + "minute": "ā¤Žā¤ŋā¤¨ā¤Ÿ", + "minutes": "ā¤Žā¤ŋā¤¨ā¤Ÿ", + "Missing_configuration": "ā¤…ā¤¨āĨā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨", + "Mobex_sms_gateway_address": "ā¤ŽāĨ‹ā¤ŦāĨ‡ā¤•āĨā¤¸ ā¤ā¤¸ā¤ā¤Žā¤ā¤¸ ā¤—āĨ‡ā¤Ÿā¤ĩāĨ‡ ā¤Ēā¤¤ā¤ž", + "Mobex_sms_gateway_address_desc": "ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤†ā¤Ēā¤•āĨ€ ā¤ŽāĨ‹ā¤ŦāĨ‡ā¤•āĨā¤¸ ā¤¸āĨ‡ā¤ĩā¤ž ā¤•ā¤ž ā¤†ā¤ˆā¤ĒāĨ€ ā¤¯ā¤ž ā¤šāĨ‹ā¤¸āĨā¤ŸāĨ¤ ā¤œāĨˆā¤¸āĨ‡ `http://192.168.1.1:1401` ā¤¯ā¤ž `https://www.example.com:1401`", + "Mobex_sms_gateway_from_number": "ā¤¸āĨ‡", + "Mobex_sms_gateway_from_number_desc": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤¨ā¤¯ā¤ž ā¤ā¤¸ā¤ā¤Žā¤ā¤¸ ā¤­āĨ‡ā¤œā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤ŽāĨ‚ā¤˛ ā¤Ēā¤¤ā¤ž/ā¤ĢāĨ‹ā¤¨ ā¤¨ā¤‚ā¤Ŧā¤°", + "Mobex_sms_gateway_from_numbers_list": "ā¤ā¤¸ā¤ā¤Žā¤ā¤¸ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¨ā¤‚ā¤Ŧā¤°āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€", + "Mobex_sms_gateway_from_numbers_list_desc": "ā¤Ŧā¤ŋā¤˛āĨā¤•āĨā¤˛ ā¤¨ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‚ā¤šāĨ€, ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤ 123456789, 123456788, 123456888", + "Mobex_sms_gateway_password": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "Mobex_sms_gateway_restful_address": "ā¤ŽāĨ‹ā¤ŦāĨ‡ā¤•āĨā¤¸ ā¤ā¤¸ā¤ā¤Žā¤ā¤¸ ā¤°āĨ‡ā¤¸āĨā¤Ÿ ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤Ēā¤¤ā¤ž", + "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_apps": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤•āĨā¤ˇāĨā¤§ā¤ž", + "Mobile_Description": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤‰ā¤Ēā¤•ā¤°ā¤ŖāĨ‹ā¤‚ ā¤¸āĨ‡ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩāĨā¤¯ā¤ĩā¤šā¤žā¤° ā¤•āĨ‹ ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "mobile-upload-file": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤‰ā¤Ēā¤•ā¤°ā¤ŖāĨ‹ā¤‚ ā¤Ēā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "mobile-upload-file_description": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤‰ā¤Ēā¤•ā¤°ā¤ŖāĨ‹ā¤‚ ā¤Ēā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", "Mobile_Push_Notifications_Default_Alert": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€", + "Moderation": "ā¤¸ā¤‚ā¤¯ā¤Ž", + "Moderation_Show_reports": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Moderation_Go_to_message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤° ā¤œā¤žā¤ā¤", + "Moderation_Delete_message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤ā¤‚", + "Moderation_Dismiss_and_delete": "ā¤–ā¤ŧā¤žā¤°ā¤ŋā¤œ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤šā¤Ÿā¤žā¤ā¤‚", + "Moderation_Delete_this_message": "ā¤‡ā¤¸ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤šā¤Ÿā¤ž ā¤ĻāĨ‡ā¤‚", + "Moderation_Message_context_header": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Moderation_Message_deleted": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤”ā¤° ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤–ā¤žā¤°ā¤ŋā¤œ ā¤•ā¤° ā¤ĻāĨ€ ā¤—ā¤ˆā¤‚", + "Moderation_Messages_deleted": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤”ā¤° ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤–ā¤žā¤°ā¤ŋā¤œ ā¤•ā¤° ā¤ĻāĨ€ ā¤—ā¤ˆā¤‚", + "Moderation_Action_View_reports": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "Moderation_Hide_reports": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤›āĨā¤Ēā¤žā¤ā¤‚", + "Moderation_Dismiss_all_reports": "ā¤¸ā¤­āĨ€ ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤–ā¤žā¤°ā¤ŋā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Moderation_Deactivate_User": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤°āĨ‡ā¤‚", + "Moderation_User_deactivated": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Moderation_Delete_all_messages": "ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šā¤Ÿā¤žā¤ā¤", + "Moderation_Dismiss_reports": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤–ā¤žā¤°ā¤ŋā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Moderation_Duplicate_messages": "ā¤ĄāĨā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Moderation_Duplicate_messages_warning": "ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤•ā¤ˆ ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤­āĨ‡ā¤œāĨ‡ ā¤—ā¤ ā¤¸ā¤Žā¤žā¤¨ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Moderation_Report_date": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤¤ā¤ŋā¤Ĩā¤ŋ", + "Moderation_Reported_message": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Moderation_Reports_dismissed": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤–ā¤žā¤°ā¤ŋā¤œ ā¤•ā¤° ā¤ĻāĨ€ ā¤—ā¤ˆā¤‚", + "Moderation_Message_already_deleted": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Moderation_Reset_user_avatar": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Moderation_See_messages": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "Moderation_Avatar_reset_success": "ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ", + "Moderation_Dismiss_reports_confirm": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤ŸāĨ‡ā¤‚ ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤œā¤žā¤ā¤‚ā¤—āĨ€ ā¤”ā¤° ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤—ā¤ž.", + "Moderation_Dismiss_all_reports_confirm": "ā¤¸ā¤­āĨ€ ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤ŸāĨ‡ā¤‚ ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤œā¤žā¤ā¤‚ā¤—āĨ€ ā¤”ā¤° ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤‚ā¤—āĨ‡.", + "Moderation_Are_you_sure_you_want_to_delete_this_message": "ā¤¯ā¤š ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤‰ā¤¸ā¤•āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤•āĨā¤ˇ ā¤¸āĨ‡ ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž ā¤”ā¤° ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤–ā¤žā¤°ā¤ŋā¤œ ā¤•ā¤° ā¤ĻāĨ€ ā¤œā¤žā¤ā¤—āĨ€āĨ¤", + "Moderation_Are_you_sure_you_want_to_reset_the_avatar": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤•āĨ‹ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤‰ā¤¨ā¤•ā¤ž ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šā¤Ÿ ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Moderation_Are_you_sure_you_want_to_deactivate_this_user": "ā¤ĒāĨā¤¨ā¤ƒ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤šāĨ‹ā¤¨āĨ‡ ā¤¤ā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤—ā¤žāĨ¤ ā¤¸ā¤­āĨ€ ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤‰ā¤¨ā¤•āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤Žā¤°āĨ‡ ā¤¸āĨ‡ ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Moderation_Are_you_sure_you_want_to_delete_all_reported_messages_from_this_user": "ā¤‡ā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤‰ā¤¨ā¤•āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤Žā¤°āĨ‡ ā¤¸āĨ‡ ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž ā¤”ā¤° ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤–ā¤žā¤°ā¤ŋā¤œ ā¤•ā¤° ā¤ĻāĨ€ ā¤œā¤žā¤ā¤—āĨ€āĨ¤", + "Moderation_User_deleted_warning": "ā¤œā¤ŋā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤ž ā¤Ĩā¤ž ā¤ĩā¤š ā¤…ā¤Ŧ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ ā¤¯ā¤ž ā¤‰ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤", + "Monday": "ā¤¸āĨ‹ā¤Žā¤ĩā¤žā¤°", + "Mongo_storageEngine": "ā¤ŽāĨ‹ā¤‚ā¤—āĨ‹ ā¤¸āĨā¤ŸāĨ‹ā¤°āĨ‡ā¤œ ā¤‡ā¤‚ā¤œā¤¨", + "Mongo_version": "ā¤Žā¤žā¤¨ā¤—āĨ‹ ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ", + "MongoDB": "MongoDB", + "MongoDB_Deprecated": "MongoDB ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤", + "MongoDB_version_s_is_deprecated_please_upgrade_your_installation": "MongoDB ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ %s ā¤…ā¤ĒāĨā¤°ā¤šā¤˛ā¤ŋā¤¤ ā¤šāĨˆ, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨ā¤ž ā¤‡ā¤‚ā¤¸āĨā¤Ÿā¤žā¤˛āĨ‡ā¤ļā¤¨ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Monitor_added": "ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤° ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž", + "Monitor_new_and_suspicious_logins": "ā¤¨ā¤ ā¤”ā¤° ā¤¸ā¤‚ā¤Ļā¤ŋā¤—āĨā¤§ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•āĨ€ ā¤¨ā¤ŋā¤—ā¤°ā¤žā¤¨āĨ€ ā¤•ā¤°āĨ‡ā¤‚", + "Monitor_history_for_changes_on": "ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤•āĨ€ ā¤¨ā¤ŋā¤—ā¤°ā¤žā¤¨āĨ€ ā¤•ā¤°āĨ‡ā¤‚", + "Monitor_removed": "ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤° ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Monitors": "ā¤Ēā¤° ā¤¨ā¤œā¤ŧā¤° ā¤°ā¤–ā¤¤ā¤ž ā¤šāĨˆ", + "Monthly_Active_Users": "ā¤Žā¤žā¤¸ā¤ŋā¤• ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "More": "ā¤…ā¤§ā¤ŋā¤•", + "More_channels": "ā¤…ā¤§ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛", + "More_direct_messages": "ā¤…ā¤§ā¤ŋā¤• ā¤ĒāĨā¤°ā¤¤āĨā¤¯ā¤•āĨā¤ˇ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "More_groups": "ā¤…ā¤§ā¤ŋā¤• ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š", + "More_unreads": "ā¤…ā¤§ā¤ŋā¤• ā¤…ā¤Ēā¤ ā¤ŋā¤¤", + "More_options": "ā¤…ā¤§ā¤ŋā¤• ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē", + "Most_popular_channels_top_5": "ā¤¸ā¤°āĨā¤ĩā¤žā¤§ā¤ŋā¤• ā¤˛āĨ‹ā¤•ā¤ĒāĨā¤°ā¤ŋā¤¯ ā¤šāĨˆā¤¨ā¤˛ (ā¤ļāĨ€ā¤°āĨā¤ˇ 5)", + "Most_recent_updated": "ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤¤ā¤žā¤œā¤ŧā¤ž ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Most_recent_requested": "ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤šā¤žā¤˛ ā¤šāĨ€ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Move_beginning_message": "`%s` - ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ€ ā¤ļāĨā¤°āĨā¤†ā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤ā¤", + "Move_end_message": "`%s` - ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤ā¤", + "Move_queue": "ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤ā¤", + "Msgs": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "multi": "ā¤Ŧā¤šāĨ", + "Multi_line": "ā¤Žā¤˛āĨā¤ŸāĨ€ ā¤˛ā¤žā¤‡ā¤¨", + "Multiple_monolith_instances_alert": "ā¤†ā¤Ē ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤•āĨ‡ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤•ā¤ˆ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‡ā¤‚ā¤¸āĨ‡ā¤¸ ā¤•ā¤ž ā¤¸ā¤‚ā¤šā¤žā¤˛ā¤¨ ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚ - ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤•āĨā¤› ā¤¸āĨā¤ĩā¤ŋā¤§ā¤žā¤ā¤ ā¤Ąā¤ŋā¤œā¤ŧā¤žā¤‡ā¤¨ ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤ĩāĨā¤¯ā¤ĩā¤šā¤žā¤° ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Mute": "ā¤†ā¤ĩā¤žā¤œā¤ŧ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨ā¤ž", + "Mute_and_dismiss": "ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤–ā¤ŧā¤žā¤°ā¤ŋā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Mute_all_notifications": "ā¤¸ā¤­āĨ€ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Mute_Focused_Conversations": "ā¤•āĨ‡ā¤‚ā¤ĻāĨā¤°ā¤ŋā¤¤ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤ĒāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Mute_Group_Mentions": "@ā¤¸ā¤­āĨ€ ā¤”ā¤° @ā¤¯ā¤šā¤žā¤‚ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤–āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Mute_someone_in_room": "ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤•ā¤ŋā¤¸āĨ€ ā¤•āĨ‹ ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Mute_user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Mute_microphone": "ā¤Žā¤žā¤‡ā¤•āĨā¤°āĨ‹ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "mute-user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "mute-user_description": "ā¤‰ā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Muted": "ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤", + "My Data": "ā¤ŽāĨ‡ā¤°āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "My_Account": "ā¤ŽāĨ‡ā¤°ā¤ž ā¤–ā¤žā¤¤ā¤ž", + "My_location": "ā¤ŽāĨ‡ā¤°ā¤ž ā¤¸āĨā¤Ĩā¤žā¤¨", + "n_messages": "%s ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "N_new_messages": "%s ā¤¨ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Name": "ā¤¨ā¤žā¤Ž", + "Name_cant_be_empty": "ā¤¨ā¤žā¤Ž ā¤–ā¤žā¤˛āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž", + "Name_of_agent": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Name_optional": "ā¤¨ā¤žā¤Ž: (ā¤ĩāĨˆā¤•ā¤˛āĨā¤Ēā¤ŋā¤•)", + "Name_Placeholder": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨ā¤ž ā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚...", + "Navigation": "ā¤Žā¤žā¤°āĨā¤—ā¤Ļā¤°āĨā¤ļā¤¨", + "Navigation_bar": "ā¤¨āĨ‡ā¤ĩā¤ŋā¤—āĨ‡ā¤ļā¤¨ ā¤Ēā¤ŸāĨā¤ŸāĨ€", + "Navigation_bar_description": "ā¤¨āĨ‡ā¤ĩā¤ŋā¤—āĨ‡ā¤ļā¤¨ ā¤Ŧā¤žā¤° ā¤•ā¤ž ā¤Ēā¤°ā¤ŋā¤šā¤¯ - ā¤ā¤• ā¤‰ā¤šāĨā¤š-ā¤¸āĨā¤¤ā¤°āĨ€ā¤¯ ā¤¨āĨ‡ā¤ĩā¤ŋā¤—āĨ‡ā¤ļā¤¨ ā¤œāĨ‹ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤‰ā¤¨ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤ļāĨ€ā¤˜āĨā¤°ā¤¤ā¤ž ā¤¸āĨ‡ ā¤ĸāĨ‚ā¤‚ā¤ĸā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤Žā¤Ļā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤œā¤ŧā¤žā¤‡ā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•āĨ‰ā¤ŽāĨā¤ĒāĨˆā¤•āĨā¤Ÿ ā¤Ąā¤ŋā¤œā¤ŧā¤žā¤‡ā¤¨ ā¤”ā¤° ā¤¸ā¤šā¤œ ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ, ā¤¯ā¤š ā¤¸āĨā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤ŋā¤¤ ā¤¸ā¤žā¤‡ā¤Ąā¤Ŧā¤žā¤° ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤¸āĨ‰ā¤Ģā¤ŧāĨā¤Ÿā¤ĩāĨ‡ā¤¯ā¤° ā¤¸āĨā¤ĩā¤ŋā¤§ā¤žā¤“ā¤‚ ā¤”ā¤° ā¤…ā¤¨āĨā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤¤ā¤• ā¤†ā¤¸ā¤žā¤¨ ā¤Ēā¤šāĨā¤ā¤š ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨā¤ ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤•āĨ‹ ā¤…ā¤¨āĨā¤•āĨ‚ā¤˛ā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Navigation_History": "ā¤¨āĨ‡ā¤ĩā¤ŋā¤—āĨ‡ā¤ļā¤¨ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸", + "Next": "ā¤…ā¤—ā¤˛ā¤ž", + "Never": "ā¤•ā¤­āĨ€ ā¤¨ā¤šāĨ€ā¤‚", + "New": "ā¤¨ā¤¯ā¤ž", + "New_Application": "ā¤¨ā¤ ā¤†ā¤ĩāĨ‡ā¤Ļā¤¨", + "New_Business_Hour": "ā¤¨ā¤¯ā¤ž ā¤ĩāĨā¤¯ā¤žā¤ĩā¤¸ā¤žā¤¯ā¤ŋā¤• ā¤˜ā¤‚ā¤Ÿā¤ž", + "New_Call": "ā¤¨ā¤ˆ ā¤•āĨ‰ā¤˛", + "New_Call_Premium_Only": "ā¤¨ā¤ˆ ā¤•āĨ‰ā¤˛ (ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¯āĨ‹ā¤œā¤¨ā¤žā¤ā¤‚)", + "New_chat_in_queue": "ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ˆ ā¤šāĨˆā¤Ÿ", + "New_chat_priority": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤Ŧā¤Ļā¤˛āĨ€ ā¤—ā¤ˆ: {{user}} ā¤¨āĨ‡ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤•āĨ‹ {{priority}} ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛ ā¤Ļā¤ŋā¤¯ā¤ž", + "New_chat_transfer": "ā¤¨ā¤¯ā¤ž ā¤šāĨˆā¤Ÿ ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤Ŗ: {{transfer}}", + "New_chat_transfer_fallback": "ā¤Ģā¤ŧāĨ‰ā¤˛ā¤ŦāĨˆā¤• ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤ŋā¤¤: {{fallback}}", + "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": "ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "New_logs": "ā¤¨ā¤¯āĨ‡ ā¤˛āĨ‰ā¤—", + "New_Message_Notification": "ā¤¨ā¤¯ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž", "New_messages": "ā¤¨ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "New_OTR_Chat": "ā¤¨ā¤ˆ ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤šāĨˆā¤Ÿ", + "New_password": "ā¤¨ā¤¯ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "New_Password_Placeholder": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¨ā¤¯ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚...", + "New_Priority": "ā¤¨ā¤ˆ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž", + "New_SLA_Policy": "ā¤¨ā¤ˆ ā¤ā¤¸ā¤ā¤˛ā¤ ā¤¨āĨ€ā¤¤ā¤ŋ", + "New_role": "ā¤¨ā¤¯āĨ€ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž", + "New_Room_Notification": "ā¤¨ā¤¯āĨ‡ ā¤•ā¤•āĨā¤ˇ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž", + "New_Tag": "ā¤¨ā¤¯ā¤ž ā¤ŸāĨˆā¤—", + "New_Trigger": "ā¤¨ā¤¯ā¤ž ā¤ŸāĨā¤°ā¤ŋā¤—ā¤°", + "New_Unit": "ā¤¨ā¤ˆ ā¤‡ā¤•ā¤žā¤ˆ", + "New_users": "ā¤¨ā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "New_version_available_(s)": "ā¤¨ā¤¯ā¤ž ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆ (%s)", + "New_videocall_request": "ā¤¨ā¤¯ā¤ž ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§", + "New_visitor_navigation": "ā¤¨ā¤¯ā¤ž ā¤¨āĨ‡ā¤ĩā¤ŋā¤—āĨ‡ā¤ļā¤¨: {{history}}", + "New_workspace_confirmed": "ā¤¨ā¤ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•āĨ€ ā¤—ā¤ˆ", + "New_workspace": "ā¤¨ā¤¯ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Newer_than": "ā¤¸āĨ‡ ā¤¨ā¤¯ā¤ž", + "Newer_than_may_not_exceed_Older_than": "\"ā¤‡ā¤¸ā¤¸āĨ‡ ā¤¨ā¤¯ā¤ž\" \"ā¤‡ā¤¸ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤žā¤¨ā¤ž\" ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž", + "Nickname": "ā¤‰ā¤Ēā¤¨ā¤žā¤Ž", + "Nickname_Placeholder": "ā¤…ā¤Ēā¤¨ā¤ž ā¤‰ā¤Ēā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚...", "No": "ā¤¨ā¤šāĨ€ā¤‚", + "no-active-video-conf-provider": "**ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ**: ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤•āĨ‹ ā¤Ēā¤šā¤˛āĨ‡ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "No_available_agents_to_transfer": "ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‹ā¤ˆ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "No_app_matches": "ā¤•āĨ‹ā¤ˆ ā¤ā¤Ē ā¤ŽāĨ‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤–ā¤žā¤¤ā¤ž", + "No_app_matches_for": "ā¤•āĨ‹ā¤ˆ ā¤ā¤Ē ā¤‡ā¤¸ā¤¸āĨ‡ ā¤ŽāĨ‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤–ā¤žā¤¤ā¤ž", + "No_apps_installed": "ā¤•āĨ‹ā¤ˆ ā¤ā¤ĒāĨā¤¸ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤¨ā¤šāĨ€ā¤‚", + "No_Canned_Responses": "ā¤•āĨ‹ā¤ˆ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚", + "No_Canned_Responses_Yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚", + "No_Canned_Responses_Yet-description": "ā¤…ā¤•āĨā¤¸ā¤° ā¤ĒāĨ‚ā¤›āĨ‡ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤ĒāĨā¤°ā¤ļāĨā¤¨āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¤āĨā¤ĩā¤°ā¤ŋā¤¤ ā¤”ā¤° ā¤¸āĨā¤¸ā¤‚ā¤—ā¤¤ ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "No_channels_in_team": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‹ā¤ˆ ā¤šāĨˆā¤¨ā¤˛ ā¤¨ā¤šāĨ€ā¤‚", + "No_agents_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚", + "No_agents_yet_description": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤Ļā¤°āĨā¤ļā¤•āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧā¤¨āĨ‡ ā¤”ā¤° ā¤…ā¤¨āĨā¤•āĨ‚ā¤˛ā¤ŋā¤¤ ā¤—āĨā¤°ā¤žā¤šā¤• ā¤¸āĨ‡ā¤ĩā¤ž ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚āĨ¤", + "No_channels_yet": "ā¤†ā¤Ē ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤šā¤ŋā¤¸āĨā¤¸ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "No_chats_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤šāĨˆā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚", + "No_chats_yet_description": "ā¤†ā¤Ēā¤•āĨ€ ā¤¸ā¤­āĨ€ ā¤šāĨˆā¤Ÿ ā¤¯ā¤šā¤žā¤‚ ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ‡ā¤‚ā¤—āĨ€.", + "No_calls_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤•āĨ‰ā¤˛ ā¤¨ā¤šāĨ€ā¤‚", + "No_calls_yet_description": "ā¤†ā¤Ēā¤•āĨ€ ā¤¸ā¤­āĨ€ ā¤•āĨ‰ā¤˛āĨ‡ā¤‚ ā¤¯ā¤šā¤žā¤‚ ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ‡ā¤‚ā¤—āĨ€.", + "No_contacts_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤¨ā¤šāĨ€ā¤‚", + "No_contacts_yet_description": "ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤¯ā¤šā¤žā¤‚ ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ‡ā¤‚ā¤—āĨ‡.", + "No_custom_fields_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤¨ā¤šāĨ€ā¤‚", + "No_custom_fields_yet_description": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤¯ā¤ž ā¤Ÿā¤ŋā¤•ā¤Ÿ ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ ā¤ŽāĨ‡ā¤‚ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚ ā¤¯ā¤ž ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤¨ā¤ ā¤†ā¤—ā¤‚ā¤¤āĨā¤•āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛ā¤žā¤‡ā¤ĩ ā¤šāĨˆā¤Ÿ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĢāĨ‰ā¤°āĨā¤Ž ā¤Ēā¤° ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "No_departments_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤¨ā¤šāĨ€ā¤‚", + "No_departments_yet_description": "ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚, ā¤Ÿā¤ŋā¤•ā¤Ÿ ā¤•āĨˆā¤¸āĨ‡ ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤•ā¤ŋā¤ ā¤œā¤žā¤ā¤‚ ā¤¯ā¤š ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤‰ā¤¨ā¤•āĨ‡ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤¨ ā¤•āĨ€ ā¤¨ā¤ŋā¤—ā¤°ā¤žā¤¨āĨ€ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "No_managers_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤• ā¤¨ā¤šāĨ€ā¤‚", + "No_managers_yet_description": "ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤•āĨ‹ā¤‚ ā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤¸ā¤­āĨ€ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¨ā¤ŋā¤¯ā¤‚ā¤¤āĨā¤°ā¤ŖāĨ‹ā¤‚ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆ, ā¤ĩāĨ‡ ā¤¨ā¤ŋā¤—ā¤°ā¤žā¤¨āĨ€ ā¤•ā¤°ā¤¨āĨ‡ ā¤”ā¤° ā¤•ā¤žā¤°āĨā¤°ā¤ĩā¤žā¤ˆ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "No_content_was_provided": "ā¤•āĨ‹ā¤ˆ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤žā¤¯āĨ€ ā¤—ā¤¯āĨ€", + "No_data_found": "ā¤Ąā¤žā¤Ÿā¤ž ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨā¤†", + "No_data_available_for_the_selected_period": "ā¤šā¤¯ā¤¨ā¤ŋā¤¤ period ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‹ā¤ˆ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "No_direct_messages_yet": "ā¤•āĨ‹ā¤ˆ ā¤¸āĨ€ā¤§ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¨ā¤šāĨ€ā¤‚.", + "No_Discussions_found": "ā¤•āĨ‹ā¤ˆ ā¤šā¤°āĨā¤šā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛āĨ€", + "No_discussions_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤šā¤°āĨā¤šā¤ž ā¤¨ā¤šāĨ€ā¤‚", + "No_emojis_found": "ā¤•āĨ‹ā¤ˆ ā¤‡ā¤ŽāĨ‹ā¤œāĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "No_Encryption": "ā¤•āĨ‹ā¤ˆ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤¨ā¤šāĨ€ā¤‚", + "No_files_found": "ā¤•āĨ‹ā¤ˆ ā¤Ģā¤žā¤ˆā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛āĨ€", + "No_files_left_to_download": "ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‹ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤Ŧā¤šāĨ€", + "No_groups_yet": "ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ.", + "No_history": "ā¤•āĨ‹ā¤ˆ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤¨ā¤šāĨ€ā¤‚", + "No_installed_app_matches": "ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤ā¤Ē ā¤ŽāĨ‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤–ā¤žā¤¤ā¤ž", + "No_integration_found": "ā¤ĒāĨā¤°ā¤Ļā¤¤āĨā¤¤ ā¤†ā¤ˆā¤ĄāĨ€ ā¤¸āĨ‡ ā¤•āĨ‹ā¤ˆ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤žāĨ¤", + "No_Limit": "ā¤•āĨ‹ā¤ˆ ā¤¸āĨ€ā¤Žā¤ž ā¤¨ā¤šāĨ€ā¤‚", + "No_livechats": "ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤•āĨ‹ā¤ˆ ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "No_marketplace_matches_for": "ā¤‡ā¤¸ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‹ā¤ˆ ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤ŽāĨ‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤–ā¤žā¤¤ā¤ž", + "No_members_found": "ā¤•āĨ‹ā¤ˆ ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "No_mentions_found": "ā¤•āĨ‹ā¤ˆ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "No_messages_found_to_prune": "ā¤•ā¤žā¤Ÿ-ā¤›ā¤žā¤ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‹ā¤ˆ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "No_messages_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¨ā¤šāĨ€ā¤‚", + "No_monitors_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "No_monitors_yet_description": "ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤°āĨā¤¸ ā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤†ā¤‚ā¤ļā¤ŋā¤• ā¤¨ā¤ŋā¤¯ā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤ĩāĨ‡ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•āĨ‡ ā¤ĩā¤ŋā¤ļāĨā¤˛āĨ‡ā¤ˇā¤Ŗ ā¤”ā¤° ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤¸āĨŒā¤‚ā¤ĒāĨ€ ā¤—ā¤ˆ ā¤ĩāĨā¤¯ā¤žā¤ĩā¤¸ā¤žā¤¯ā¤ŋā¤• ā¤‡ā¤•ā¤žā¤‡ā¤¯āĨ‹ā¤‚ ā¤•āĨ€ ā¤—ā¤¤ā¤ŋā¤ĩā¤ŋā¤§ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤– ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "No_tags_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤ŸāĨˆā¤— ā¤¨ā¤šāĨ€ā¤‚", + "No_tags_yet_description": "ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤ĒāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤”ā¤° ā¤ĸāĨ‚ā¤‚ā¤ĸā¤¨ā¤ž ā¤†ā¤¸ā¤žā¤¨ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ÿā¤ŋā¤•ā¤ŸāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤ŸāĨˆā¤— ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚āĨ¤", + "No_triggers_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤¨ā¤šāĨ€ā¤‚", + "No_triggers_yet_description": "ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤ā¤¸āĨ€ ā¤˜ā¤Ÿā¤¨ā¤žā¤ā¤ ā¤šāĨˆā¤‚ ā¤œāĨ‹ ā¤˛ā¤žā¤‡ā¤ĩ ā¤šāĨˆā¤Ÿ ā¤ĩā¤ŋā¤œāĨ‡ā¤Ÿ ā¤•āĨ‹ ā¤–āĨ‹ā¤˛ā¤¨āĨ‡ ā¤”ā¤° ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•ā¤ž ā¤•ā¤žā¤°ā¤Ŗ ā¤Ŧā¤¨ā¤¤āĨ€ ā¤šāĨˆā¤‚āĨ¤", + "No_units_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤‡ā¤•ā¤žā¤ˆ ā¤¨ā¤šāĨ€ā¤‚", + "No_units_yet_description": "ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤ŽāĨ‚ā¤šāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤”ā¤° ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤ŦāĨ‡ā¤šā¤¤ā¤° ā¤ĸā¤‚ā¤— ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤•ā¤žā¤‡ā¤¯āĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "No_pages_yet_Try_hitting_Reload_Pages_button": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ ā¤ĒāĨ‡ā¤œ ā¤¨ā¤šāĨ€ā¤‚. \"ā¤°āĨ€ā¤˛āĨ‹ā¤Ą ā¤ĒāĨ‡ā¤œ\" ā¤Ŧā¤Ÿā¤¨ ā¤Ļā¤Ŧā¤žā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "No_pinned_messages": "ā¤•āĨ‹ā¤ˆ ā¤Ēā¤ŋā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨā¤† ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¨ā¤šāĨ€ā¤‚", + "No_previous_chat_found": "ā¤•āĨ‹ā¤ˆ ā¤Ēā¤ŋā¤›ā¤˛āĨ€ ā¤šāĨˆā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛āĨ€", + "No_release_information_provided": "ā¤•āĨ‹ā¤ˆ ā¤°ā¤ŋā¤˛āĨ€ā¤œā¤ŧ ā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤ĻāĨ€ ā¤—ā¤ˆ", + "No_requested_apps": "ā¤•āĨ‹ā¤ˆ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ā¤ŋā¤¤ ā¤ā¤ĒāĨā¤¸ ā¤¨ā¤šāĨ€ā¤‚", + "No_requests": "ā¤•āĨ‹ā¤ˆ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¨ā¤šāĨ€ā¤‚", + "No_results_found": "ā¤•āĨ‹ā¤ˆ ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "No_results_found_for": "ā¤‡ā¤¸ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‹ā¤ˆ ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž:", + "No_SLA_policies_yet": "ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‹ā¤ˆ SLA ā¤¨āĨ€ā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚", + "No_SLA_policies_yet_description": "ā¤…ā¤¨āĨā¤Žā¤žā¤¨ā¤ŋā¤¤ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤¸ā¤Žā¤¯ ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤¤ā¤žā¤°āĨ‹ā¤‚ ā¤•ā¤ž ā¤•āĨā¤°ā¤Ž ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ SLA ā¤¨āĨ€ā¤¤ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "No_snippet_messages": "ā¤•āĨ‹ā¤ˆ ā¤¸āĨā¤¨ā¤ŋā¤ĒāĨ‡ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚", + "No_starred_messages": "ā¤•āĨ‹ā¤ˆ ā¤¤ā¤žā¤°ā¤žā¤‚ā¤•ā¤ŋā¤¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¨ā¤šāĨ€ā¤‚", + "No_such_command": "ā¤ā¤¸ā¤ž ā¤•āĨ‹ā¤ˆ ā¤†ā¤ĻāĨ‡ā¤ļ ā¤¨ā¤šāĨ€ā¤‚: `/{{command}}`", + "No_Threads": "ā¤•āĨ‹ā¤ˆ ā¤¸āĨ‚ā¤¤āĨā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "no-videoconf-provider-app": "**ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ**: ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‹ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Nobody_available": "ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Node_version": "ā¤¨āĨ‹ā¤Ą ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ", + "None": "ā¤•āĨ‹ā¤ˆ ā¤¨ā¤šāĨ€ā¤‚", + "Nonprofit": "ā¤—ā¤ŧāĨˆā¤°-ā¤˛ā¤žā¤­ā¤•ā¤žā¤°āĨ€", + "Not_authorized": "ā¤…ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "Normal": "ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯", + "Not_Available": "ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Not_assigned": "ā¤¸āĨŒā¤‚ā¤Ēā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Not_enough_data": "ā¤Ēā¤°āĨā¤¯ā¤žā¤ĒāĨā¤¤ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¨ā¤šāĨ€ā¤‚", + "Not_following": "ā¤Ēā¤žā¤˛ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨā¤", + "Not_Following": "ā¤Ēā¤žā¤˛ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨā¤", + "Not_found_or_not_allowed": "ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž ā¤¯ā¤ž ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Not_Imported_Messages_Title": "ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤†ā¤¯ā¤žā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤ ā¤—ā¤", + "Not_in_channel": "ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤šāĨ€ā¤‚", + "Not_likely": "ā¤¸ā¤‚ā¤­ā¤žā¤ĩā¤¨ā¤ž ā¤¨ā¤šāĨ€ā¤‚", + "Not_started": "ā¤ļāĨā¤°āĨ‚ ā¤¨ā¤šāĨ€ā¤‚", + "Not_verified": "ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Not_Visible_To_Workspace": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤Ēā¤° ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤¨ā¤šāĨ€ā¤‚ ā¤ĻāĨ‡ā¤¤ā¤ž", + "Nothing": "ā¤•āĨā¤› ā¤¨ā¤šāĨ€ā¤‚", + "Nothing_found": "ā¤•āĨā¤› ā¤­āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "Notice_that_public_channels_will_be_public_and_visible_to_everyone": "ā¤§āĨā¤¯ā¤žā¤¨ ā¤ĻāĨ‡ā¤‚ ā¤•ā¤ŋ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨ‹ā¤‚ā¤—āĨ‡ ā¤”ā¤° ā¤¸ā¤­āĨ€ ā¤•āĨ‹ ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ‡ā¤‚ā¤—āĨ‡āĨ¤", + "Notification_Desktop_Default_For": "ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Notification_Push_Default_For": "ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Notification_RequireInteraction": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤•āĨ‹ ā¤–ā¤ŧā¤žā¤°ā¤ŋā¤œ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤šā¤­ā¤žā¤—ā¤ŋā¤¤ā¤ž ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Notification_RequireInteraction_Description": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤•āĨā¤°āĨ‹ā¤Ž ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ> 50 ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤•ā¤žā¤Ž ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤œā¤Ŧ ā¤¤ā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤‡ā¤¸ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤‡ā¤‚ā¤Ÿā¤°āĨˆā¤•āĨā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤ā¤ž ā¤¤ā¤Ŧ ā¤¤ā¤• ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤•āĨ‹ ā¤…ā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤žā¤˛ ā¤¤ā¤• ā¤Ļā¤ŋā¤–ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ *requireInteraction* ā¤ĒāĨˆā¤°ā¤žā¤ŽāĨ€ā¤Ÿā¤° ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Notifications": "ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚", + "Notifications_Max_Room_Members": "ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤ŽāĨˆā¤•āĨā¤¸ ā¤°āĨ‚ā¤Ž ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯", + "Notifications_Max_Room_Members_Description": "ā¤œā¤Ŧ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆā¤‚ ā¤¤āĨ‹ ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤žāĨ¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤¸ā¤­āĨ€ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤­āĨ€ ā¤­āĨ€ ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤•ā¤Žā¤°ā¤ž ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤Ŧā¤Ļā¤˛ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ (0 ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤)", + "Notifications_Muted_Description": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤¸ā¤Ŧ ā¤•āĨā¤› ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨā¤¨ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤–āĨ‹ā¤‚ ā¤•āĨ‹ ā¤›āĨ‹ā¤Ąā¤ŧā¤•ā¤°, ā¤¨ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤¨āĨ‡ ā¤Ēā¤° ā¤†ā¤Ēā¤•āĨ‹ ā¤¸āĨ‚ā¤šāĨ€ ā¤ŽāĨ‡ā¤‚ ā¤°āĨ‚ā¤Ž ā¤šā¤žā¤‡ā¤˛ā¤žā¤‡ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ‡ā¤—ā¤žāĨ¤ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤“ā¤ĩā¤°ā¤°ā¤žā¤‡ā¤Ą ā¤šāĨ‹ ā¤œā¤žā¤ā¤‚ā¤—āĨ€.", + "Notifications_Preferences": "ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤ā¤", + "Notifications_Sound_Volume": "ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤§āĨā¤ĩā¤¨ā¤ŋ ā¤•āĨ€ ā¤Žā¤žā¤¤āĨā¤°ā¤ž", + "Notify_active_in_this_room": "ā¤‡ā¤¸ ā¤•ā¤•āĨā¤ˇ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Notify_all_in_this_room": "ā¤‡ā¤¸ ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤­āĨ€ ā¤•āĨ‹ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Notify_Calendar_Events": "ā¤•āĨˆā¤˛āĨ‡ā¤‚ā¤Ąā¤° ā¤˜ā¤Ÿā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Now_Its_Visible_For_Everyone": "ā¤…ā¤Ŧ ā¤¯ā¤š ā¤¸ā¤Ŧā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĻāĨƒā¤ļāĨā¤¯ā¤Žā¤žā¤¨ ā¤šāĨˆ", + "Now_Its_Visible_Only_For_Admins": "ā¤…ā¤Ŧ ā¤¯ā¤š ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤•āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĻāĨƒā¤ļāĨā¤¯ā¤Žā¤žā¤¨ ā¤šāĨˆ", + "NPS_survey_enabled": "ā¤ā¤¨ā¤ĒāĨ€ā¤ā¤¸ ā¤¸ā¤°āĨā¤ĩāĨ‡ā¤•āĨā¤ˇā¤Ŗ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "NPS_survey_enabled_Description": "ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤¨ā¤ĒāĨ€ā¤ā¤¸ ā¤¸ā¤°āĨā¤ĩāĨ‡ā¤•āĨā¤ˇā¤Ŗ ā¤šā¤˛ā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚āĨ¤ ā¤¸ā¤°āĨā¤ĩāĨ‡ā¤•āĨā¤ˇā¤Ŗ ā¤ļāĨā¤°āĨ‚ ā¤šāĨ‹ā¤¨āĨ‡ ā¤¸āĨ‡ 2 ā¤Žā¤šāĨ€ā¤¨āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ā¤• ā¤…ā¤˛ā¤°āĨā¤Ÿ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ā¤—ā¤ž", + "NPS_survey_is_scheduled_to-run-at__date__for_all_users": "ā¤ā¤¨ā¤ĒāĨ€ā¤ā¤¸ ā¤¸ā¤°āĨā¤ĩāĨ‡ā¤•āĨā¤ˇā¤Ŗ ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ {{date}} ā¤Ēā¤° ā¤šā¤˛ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤šāĨˆāĨ¤ 'ā¤ā¤Ąā¤Žā¤ŋā¤¨ > ā¤œā¤¨ā¤°ā¤˛ > ā¤ā¤¨ā¤ĒāĨ€ā¤ā¤¸' ā¤Ēā¤° ā¤¸ā¤°āĨā¤ĩāĨ‡ā¤•āĨā¤ˇā¤Ŗ ā¤•āĨ‹ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨ā¤ž ā¤¸ā¤‚ā¤­ā¤ĩ ā¤šāĨˆ", + "Default_Timezone_For_Reporting": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤¸ā¤Žā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Default_Timezone_For_Reporting_Description": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤¸ā¤Žā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤œā¤ŋā¤¸ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤Ļā¤ŋā¤–ā¤žā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤¯ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž", + "Default_Server_Timezone": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸ā¤Žā¤¯ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Default_Custom_Timezone": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤Žā¤¯ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Default_User_Timezone": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤¸ā¤Žā¤¯ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Num_Agents": "#ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ", + "Number_in_seconds": "ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤‚ā¤Ŧā¤°", + "Number_of_events": "ā¤˜ā¤Ÿā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž", + "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": "OAuth", + "OAuth_Description": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸āĨ‡ ā¤Ēā¤°āĨ‡ ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĩā¤ŋā¤§ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "OAuth_Application": "OAuth ā¤†ā¤ĩāĨ‡ā¤Ļā¤¨", + "Objects": "ā¤ĩā¤¸āĨā¤¤āĨā¤“ā¤‚", + "Off": "ā¤Ŧā¤‚ā¤Ļ", + "Off_the_record_conversation": "ā¤‘ā¤Ģ-ā¤Ļ-ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", + "Off_the_record_conversation_is_not_available_for_your_browser_or_device": "ā¤‘ā¤Ģ-ā¤Ļ-ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤†ā¤Ēā¤•āĨ‡ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤¯ā¤ž ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤", + "Office_Hours": "ā¤•ā¤žā¤°āĨā¤¯ā¤žā¤˛ā¤¯ period", + "Office_hours_enabled": "ā¤•ā¤žā¤°āĨā¤¯ā¤žā¤˛ā¤¯ ā¤¸ā¤Žā¤¯ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Office_hours_updated": "ā¤•ā¤žā¤°āĨā¤¯ā¤žā¤˛ā¤¯ ā¤¸ā¤Žā¤¯ ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "offline": "ā¤‘ā¤Ģā¤˛ā¤žā¤‡ā¤¨", + "Offline": "ā¤‘ā¤Ģā¤˛ā¤žā¤‡ā¤¨", + "Offline_DM_Email": "ā¤¸āĨ€ā¤§ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĩā¤ŋā¤ˇā¤¯", + "Offline_Email_Subject_Description": "ā¤†ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚:\n - ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¨ā¤žā¤Ž, ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛, ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤°āĨ‚ā¤Žā¤¨ā¤žā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ `[ā¤¸ā¤žā¤‡ā¤Ÿ_ā¤¨ā¤žā¤Ž]`, `[ā¤¸ā¤žā¤‡ā¤Ÿ_ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛]`, `[ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž]` ā¤”ā¤° `[ā¤•ā¤•āĨā¤ˇ]`āĨ¤", + "Offline_form": "ā¤‘ā¤Ģā¤˛ā¤žā¤‡ā¤¨ ā¤ĢāĨ‰ā¤°āĨā¤Ž", + "Offline_form_unavailable_message": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤ĢāĨ‰ā¤°āĨā¤Ž ā¤…ā¤¨āĨā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Offline_Link_Message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤° ā¤œā¤žā¤ā¤", + "Offline_Mention_All_Email": "ā¤¸ā¤­āĨ€ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĩā¤ŋā¤ˇā¤¯ ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤°āĨ‡ā¤‚", + "Offline_Mention_Email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĩā¤ŋā¤ˇā¤¯ ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤°āĨ‡ā¤‚", + "Offline_message": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Offline_Message": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Offline_Message_Use_DeepLink": "ā¤ĄāĨ€ā¤Ē ā¤˛ā¤ŋā¤‚ā¤• ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤Ģā¤ŧāĨ‰ā¤°āĨā¤ŽāĨ‡ā¤Ÿ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "Offline_messages": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Offline_success_message": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤¸ā¤Ģā¤˛ā¤¤ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Offline_unavailable": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤…ā¤¨āĨā¤Ēā¤˛ā¤ŦāĨā¤§", + "Ok": "ā¤ āĨ€ā¤• ā¤šāĨˆ", + "Old Colors": "ā¤ĒāĨā¤°ā¤žā¤¨āĨ‡ ā¤°ā¤‚ā¤—", + "Old Colors (minor)": "ā¤ĒāĨā¤°ā¤žā¤¨āĨ‡ ā¤°ā¤‚ā¤— (ā¤Žā¤žā¤ŽāĨ‚ā¤˛āĨ€)", + "Older_than": "ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤ĒāĨā¤°ā¤žā¤¨ā¤ž", + "Omnichannel": "ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛", + "Omnichannel_Description": "ā¤—āĨā¤°ā¤žā¤šā¤•āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ā¤• ā¤šāĨ€ ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤ĩā¤žā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚, ā¤­ā¤˛āĨ‡ ā¤šāĨ€ ā¤ĩāĨ‡ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤•āĨˆā¤¸āĨ‡ ā¤­āĨ€ ā¤œāĨā¤Ąā¤ŧāĨ‡ ā¤šāĨ‹ā¤‚āĨ¤", + "Omnichannel_Directory": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤•ā¤ž", + "Omnichannel_appearance": "ā¤“ā¤ŽāĨā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "Omnichannel_calculate_dispatch_service_queue_statistics": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤¤ā¤žā¤° ā¤†ā¤ā¤•ā¤Ąā¤ŧāĨ‹ā¤‚ ā¤•āĨ€ ā¤—ā¤Ŗā¤¨ā¤ž ā¤”ā¤° ā¤ĒāĨā¤°āĨ‡ā¤ˇā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "Omnichannel_calculate_dispatch_service_queue_statistics_Description": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤”ā¤° ā¤…ā¤¨āĨā¤Žā¤žā¤¨ā¤ŋā¤¤ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤¸ā¤Žā¤¯ ā¤œāĨˆā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤¤ā¤žā¤° ā¤†ā¤ā¤•ā¤Ąā¤ŧāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤‚ā¤¸ā¤žā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤”ā¤° ā¤­āĨ‡ā¤œā¤¨ā¤žāĨ¤ ā¤¯ā¤Ļā¤ŋ *ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤šāĨˆā¤¨ā¤˛* ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ, ā¤¤āĨ‹ ā¤‡ā¤¸ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤”ā¤° ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‹ ā¤…ā¤¨ā¤žā¤ĩā¤ļāĨā¤¯ā¤• ā¤ĒāĨā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤°āĨ‹ā¤•ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤ļā¤‚ā¤¸ā¤ž ā¤•āĨ€ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "Omnichannel_Contact_Center": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•āĨ‡ā¤‚ā¤ĻāĨā¤°", + "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": "ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤Ģā¤ŧāĨā¤°āĨ‡ā¤Ž ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "omnichannel_priority_change_history": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤Ŧā¤Ļā¤˛āĨ€ ā¤—ā¤ˆ: {{user}} ā¤¨āĨ‡ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤•āĨ‹ {{priority}} ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛ ā¤Ļā¤ŋā¤¯ā¤ž", + "omnichannel_sla_change_history": "SLA ā¤¨āĨ€ā¤¤ā¤ŋ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤: {{user}} ā¤¨āĨ‡ SLA ā¤¨āĨ€ā¤¤ā¤ŋ ā¤•āĨ‹ {{sla}} ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛ ā¤Ļā¤ŋā¤¯ā¤ž", + "Omnichannel_enable_department_removal": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤¨ā¤ŋā¤ˇāĨā¤•ā¤žā¤¸ā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Omnichannel_enable_department_removal_alert": "ā¤šā¤Ÿā¤žā¤ ā¤—ā¤ ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤¨ā¤°āĨā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž, ā¤šā¤Ž ā¤‡ā¤¸ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•āĨ‹ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤ļā¤‚ā¤¸ā¤ž ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Omnichannel_Reports_Status_Open": "ā¤–āĨā¤˛ā¤ž", + "Omnichannel_Reports_Status_Closed": "ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨā¤†", + "Omnichannel_Reports_Channels_Empty_Subtitle": "ā¤¯ā¤š ā¤šā¤žā¤°āĨā¤Ÿ ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤Ļā¤ŋā¤–ā¤žā¤¤ā¤ž ā¤šāĨˆ.", + "Omnichannel_Reports_Departments_Empty_Subtitle": "ā¤¯ā¤š ā¤šā¤žā¤°āĨā¤Ÿ ā¤‰ā¤¨ ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤œāĨ‹ ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Omnichannel_Reports_Status_Empty_Subtitle": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤ļāĨā¤°āĨ‚ ā¤šāĨ‹ā¤¤āĨ‡ ā¤šāĨ€ ā¤¯ā¤š ā¤šā¤žā¤°āĨā¤Ÿ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤ž.", + "Omnichannel_Reports_Tags_Empty_Subtitle": "ā¤¯ā¤š ā¤šā¤žā¤°āĨā¤Ÿ ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯āĨ‡ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤ŸāĨˆā¤— ā¤Ļā¤ŋā¤–ā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Omnichannel_Reports_Agents_Empty_Subtitle": "ā¤¯ā¤š ā¤šā¤žā¤°āĨā¤Ÿ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤•āĨŒā¤¨ ā¤¸āĨ‡ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤Žā¤žā¤¤āĨā¤°ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Omnichannel_Reports_Summary": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤‘ā¤Ēā¤°āĨ‡ā¤ļā¤¨ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤šā¤žā¤¸ā¤ŋā¤˛ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤…ā¤Ēā¤¨āĨ‡ ā¤ŽāĨ‡ā¤ŸāĨā¤°ā¤ŋā¤•āĨā¤¸ ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "On": "ā¤Ēā¤°", + "on-hold-livechat-room": "ā¤‘ā¤¨ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤°āĨ‚ā¤Ž", + "on-hold-livechat-room_description": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤°āĨ‚ā¤Ž ā¤•āĨ‹ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤°ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "on-hold-others-livechat-room": "ā¤…ā¤¨āĨā¤¯ ā¤“ā¤ŽāĨā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇ ā¤•āĨ‹ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤°ā¤–āĨ‡ā¤‚", + "on-hold-others-livechat-room_description": "ā¤…ā¤¨āĨā¤¯ ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇ ā¤•āĨ‹ ā¤°āĨ‹ā¤•ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "On_Hold": "ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤°", + "On_Hold_Chats": "ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤°", + "On_Hold_conversations": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤°āĨā¤•āĨ€ ā¤šāĨā¤ˆ ā¤šāĨˆ", + "online": "ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨", + "Online": "ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨", + "Only_authorized_users_can_write_new_messages": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤…ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤šāĨ€ ā¤¨ā¤¯āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤˛ā¤ŋā¤– ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Only_authorized_users_can_react_to_messages": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤…ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤šāĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤Ēā¤° ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĻāĨ‡ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Only_from_users": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤‡ā¤¨ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤•āĨ‹ ā¤›ā¤žā¤ā¤ŸāĨ‡ā¤‚ (ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤•āĨ€ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤•āĨ‹ ā¤›ā¤žā¤ā¤Ÿā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤–ā¤žā¤˛āĨ€ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤ĻāĨ‡ā¤‚)", + "Only_Members_Selected_Department_Can_View_Channel": "ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤Ēā¤° ā¤•āĨ‡ā¤ĩā¤˛ ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤šāĨ€ ā¤šāĨˆā¤Ÿ ā¤ĻāĨ‡ā¤– ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Only_On_Desktop": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤ŽāĨ‹ā¤Ą (ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤Ēā¤° ā¤ā¤‚ā¤Ÿā¤° ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤­āĨ‡ā¤œā¤¤ā¤ž ā¤šāĨˆ)", + "Only_works_with_chrome_version_greater_50": "ā¤•āĨ‡ā¤ĩā¤˛ Chrome ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ > 50 ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤•ā¤žā¤Ž ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "Only_you_can_see_this_message": "ā¤¯ā¤š ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‡ā¤ĩā¤˛ ā¤†ā¤Ē ā¤šāĨ€ ā¤ĻāĨ‡ā¤– ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Only_invited_users_can_acess_this_channel": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤šāĨ€ ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Oops_page_not_found": "ā¤‰ā¤Ģā¤ŧ, ā¤ĒāĨ‡ā¤œ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "Oops!": "ā¤‰ā¤Ģā¤ŧ", + "Person_Or_Channel": "ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋ ā¤¯ā¤ž ā¤šāĨˆā¤¨ā¤˛", + "Open": "ā¤–āĨā¤˛ā¤ž", + "Open_call": "ā¤–āĨā¤˛ā¤ž ā¤†ā¤ĩā¤žā¤šā¤¨", + "Open_call_in_new_tab": "ā¤¨ā¤ ā¤ŸāĨˆā¤Ŧ ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‰ā¤˛ ā¤–āĨ‹ā¤˛āĨ‡ā¤‚", + "Open_channel_user_search": "`%s` - ā¤šāĨˆā¤¨ā¤˛/ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤–āĨ‹ā¤œ ā¤–āĨ‹ā¤˛āĨ‡ā¤‚", + "Open_conversations": "ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤–āĨ‹ā¤˛āĨ‡ā¤‚", + "Open_Days": "ā¤–āĨā¤˛āĨ‡ ā¤Ļā¤ŋā¤¨", + "Open_days_of_the_week": "ā¤¸ā¤ĒāĨā¤¤ā¤žā¤š ā¤•āĨ‡ ā¤–āĨā¤˛āĨ‡ ā¤Ļā¤ŋā¤¨", + "Open_Dialpad": "ā¤Ąā¤žā¤¯ā¤˛ā¤ĒāĨˆā¤Ą ā¤–āĨ‹ā¤˛āĨ‡ā¤‚", + "Open_directory": "ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤•ā¤ž ā¤–āĨ‹ā¤˛āĨ‡ā¤‚", + "Open_Livechats": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤ĒāĨā¤°ā¤—ā¤¤ā¤ŋ ā¤Ēā¤° ā¤šāĨˆ", + "Open_Outlook": "ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤–āĨ‹ā¤˛āĨ‡ā¤‚", + "Open_settings": "ā¤–āĨā¤˛āĨ€ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—", + "Open-source_conference_call_solution": "ā¤“ā¤Ēā¤¨-ā¤¸āĨ‹ā¤°āĨā¤¸ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤¸ā¤Žā¤žā¤§ā¤žā¤¨āĨ¤", + "Open_thread": "ā¤ĨāĨā¤°āĨ‡ā¤Ą ā¤–āĨ‹ā¤˛āĨ‡ā¤‚", + "Opened": "ā¤–āĨā¤˛ ā¤—ā¤¯ā¤ž", + "Opened_in_a_new_window": "ā¤ā¤• ā¤¨ā¤ˆ ā¤ĩā¤ŋā¤‚ā¤ĄāĨ‹ ā¤ŽāĨ‡ā¤‚ ā¤–āĨ‹ā¤˛ā¤ž ā¤—ā¤¯ā¤ž.", + "Opens_a_channel_group_or_direct_message": "ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛, ā¤¸ā¤ŽāĨ‚ā¤š ā¤¯ā¤ž ā¤¸āĨ€ā¤§ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤–āĨ‹ā¤˛ā¤¤ā¤ž ā¤šāĨˆ", + "Optional": "ā¤ĩāĨˆā¤•ā¤˛āĨā¤Ēā¤ŋā¤•", + "optional": "ā¤ĩāĨˆā¤•ā¤˛āĨā¤Ēā¤ŋā¤•", "Options": "ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē", + "or": "ā¤¯ā¤ž", + "Or_Copy_And_Paste_This_URL_Into_A_Tab_Of_Your_Browser": "ā¤¯ā¤ž ā¤‡ā¤¸ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‹ ā¤•āĨ‰ā¤ĒāĨ€ ā¤•ā¤°ā¤•āĨ‡ ā¤…ā¤Ēā¤¨āĨ‡ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤•āĨ‡ ā¤ā¤• ā¤ŸāĨˆā¤Ŧ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨ‡ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Or_talk_as_anonymous": "ā¤¯ā¤ž ā¤—āĨā¤Žā¤¨ā¤žā¤Ž ā¤Ŧā¤¨ā¤•ā¤° ā¤Ŧā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Order": "ā¤†ā¤ĻāĨ‡ā¤ļ", + "Organization_Email": "ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤ˆā¤ŽāĨ‡ā¤˛", + "Organization_Info": "ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Organization_Name": "ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Organization_Type": "ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "Original": "ā¤ŽāĨ‚ā¤˛", + "OS": "ā¤†ā¤Ē", + "OS_Arch": "ā¤“ā¤ā¤¸ ā¤†ā¤°āĨā¤•", + "OS_Cpus": "ā¤“ā¤ā¤¸ ā¤¸āĨ€ā¤ĒāĨ€ā¤¯āĨ‚ ā¤—ā¤Ŗā¤¨ā¤ž", + "OS_Freemem": "ā¤“ā¤ā¤¸ ā¤ĢāĨā¤°āĨ€ ā¤ŽāĨ‡ā¤ŽāĨ‹ā¤°āĨ€", + "OS_Loadavg": "ā¤“ā¤ā¤¸ ā¤˛āĨ‹ā¤Ą ā¤”ā¤¸ā¤¤", + "OS_Platform": "ā¤“ā¤ā¤¸ ā¤ĒāĨā¤˛āĨ‡ā¤Ÿā¤Ģā¤žā¤°āĨā¤Ž", + "OS_Release": "ā¤“ā¤ā¤¸ ā¤°ā¤ŋā¤˛āĨ€ā¤œ", + "OS_Totalmem": "ā¤“ā¤ā¤¸ ā¤•āĨā¤˛ ā¤ŽāĨ‡ā¤ŽāĨ‹ā¤°āĨ€", + "OS_Type": "ā¤“ā¤ā¤¸ ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "OS_Uptime": "ā¤“ā¤ā¤¸ ā¤…ā¤Ēā¤Ÿā¤žā¤‡ā¤Ž", + "Other": "ā¤…ā¤¨āĨā¤¯", + "others": "ā¤…ā¤¨āĨā¤¯", + "Others": "ā¤…ā¤¨āĨā¤¯", + "OTR": "ā¤“ā¤ŸāĨ€ā¤†ā¤°", + "OTR_unavailable_for_federation": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "OTR_Description": "ā¤‘ā¤Ģ-ā¤Ļ-ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą ā¤šāĨˆā¤Ÿ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤, ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤—ā¤žā¤¯ā¤Ŧ ā¤šāĨ‹ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆā¤‚āĨ¤", + "OTR_Chat_Declined_Title": "ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤šāĨˆā¤Ÿ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤", + "OTR_Chat_Declined_Description": "%s ā¤¨āĨ‡ OTR ā¤šāĨˆā¤Ÿ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž. ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤¸ā¤šā¤ŋā¤¤ ā¤¸āĨā¤Ĩā¤žā¤¨āĨ€ā¤¯ ā¤•āĨˆā¤ļ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤Ĩā¤žāĨ¤", + "OTR_Chat_Error_Title": "ā¤•āĨā¤‚ā¤œāĨ€ ā¤°āĨ€ā¤Ģā¤ŧāĨā¤°āĨ‡ā¤ļ ā¤ĩā¤ŋā¤Ģā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤•ā¤žā¤°ā¤Ŗ ā¤šāĨˆā¤Ÿ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤—ā¤ˆ", + "OTR_Chat_Error_Description": "ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤¸ā¤šā¤ŋā¤¤ ā¤¸āĨā¤Ĩā¤žā¤¨āĨ€ā¤¯ ā¤•āĨˆā¤ļ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤Ĩā¤žāĨ¤", + "OTR_Chat_Timeout_Title": "ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤šāĨˆā¤Ÿ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž", + "OTR_Chat_Timeout_Description": "%s ā¤¸ā¤Žā¤¯ ā¤Ēā¤° ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤šāĨˆā¤Ÿ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤ŋā¤Ģā¤˛ ā¤°ā¤šā¤žāĨ¤ ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤¸ā¤šā¤ŋā¤¤ ā¤¸āĨā¤Ĩā¤žā¤¨āĨ€ā¤¯ ā¤•āĨˆā¤ļ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤Ĩā¤žāĨ¤", + "OTR_Enable_Description": "2 ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤‘ā¤Ģ-ā¤Ļ-ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą (ā¤“ā¤ŸāĨ€ā¤†ā¤°) ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤° ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤ĻāĨ‹ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤¸āĨ€ā¤§āĨ‡ ā¤†ā¤Ļā¤žā¤¨-ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤”ā¤° ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "OTR_message": "ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "OTR_is_only_available_when_both_users_are_online": "ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤•āĨ‡ā¤ĩā¤˛ ā¤¤ā¤­āĨ€ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ ā¤œā¤Ŧ ā¤ĻāĨ‹ā¤¨āĨ‹ā¤‚ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤šāĨ‹ā¤‚", + "outbound-voip-calls": "ā¤†ā¤‰ā¤Ÿā¤Ŧā¤žā¤‰ā¤‚ā¤Ą ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ‰ā¤˛", + "outbound-voip-calls_description": "ā¤†ā¤‰ā¤Ÿā¤Ŧā¤žā¤‰ā¤‚ā¤Ą ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ‰ā¤˛ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Out_of_seats": "ā¤¸āĨ€ā¤ŸāĨ‹ā¤‚ ā¤¸āĨ‡ ā¤Ŧā¤žā¤šā¤°", + "Outgoing": "ā¤œā¤žā¤ĩā¤•", + "Outgoing_WebHook": "ā¤¨ā¤ŋā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤•", + "Outgoing_WebHook_Description": "ā¤ĩā¤žā¤¸āĨā¤¤ā¤ĩā¤ŋā¤• ā¤¸ā¤Žā¤¯ ā¤ŽāĨ‡ā¤‚ Rocket.Chat ā¤¸āĨ‡ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Outlook_authentication": "ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ", + "Outlook_authentication_disabled": "ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Outlook_authentication_description": "ā¤‡ā¤¸ ā¤Žā¤ļāĨ€ā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤•āĨā¤°āĨ‡ā¤ĄāĨ‡ā¤‚ā¤ļā¤ŋā¤¯ā¤˛ ā¤•āĨ‹ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸āĨ‡ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Outlook_calendar": "ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤•āĨˆā¤˛āĨ‡ā¤‚ā¤Ąā¤°", + "Outlook_calendar_event": "ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤•āĨˆā¤˛āĨ‡ā¤‚ā¤Ąā¤° ā¤‡ā¤ĩāĨ‡ā¤‚ā¤Ÿ", + "Outlook_calendar_settings": "ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤•āĨˆā¤˛āĨ‡ā¤‚ā¤Ąā¤° ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸", + "Outlook_Calendar": "ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤•āĨˆā¤˛āĨ‡ā¤‚ā¤Ąā¤°", "Outlook_Calendar_Enabled": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯", + "Outlook_Calendar_Exchange_Url": "ā¤ā¤•āĨā¤¸ā¤šāĨ‡ā¤‚ā¤œ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Outlook_Calendar_Exchange_Url_Description": "ā¤ˆā¤Ąā¤ŦāĨā¤˛āĨā¤¯āĨ‚ā¤ā¤¸ ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šāĨ‹ā¤¸āĨā¤Ÿ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛āĨ¤", + "Outlook_Calendar_Outlook_Url": "ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Outlook_Calendar_Outlook_Url_Description": "ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤ĩāĨ‡ā¤Ŧ ā¤ā¤Ē ā¤˛āĨ‰ā¤¨āĨā¤š ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Output_format": "ā¤†ā¤‰ā¤Ÿā¤ĒāĨā¤Ÿ ā¤¸āĨā¤ĩā¤°āĨ‚ā¤Ē", + "Outlook_Sync_Failed": "ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤‡ā¤ĩāĨ‡ā¤‚ā¤Ÿ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤ŋā¤Ģā¤˛.", + "Outlook_Sync_Success": "ā¤†ā¤‰ā¤Ÿā¤˛āĨā¤• ā¤‡ā¤ĩāĨ‡ā¤‚ā¤Ÿ ā¤¸ā¤ŋā¤‚ā¤•āĨā¤°ā¤¨ā¤žā¤‡ā¤œā¤ŧāĨ¤", + "Override_URL_to_which_files_are_uploaded_This_url_also_used_for_downloads_unless_a_CDN_is_given": "ā¤œā¤ŋā¤¸ URL ā¤Ēā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ ā¤šāĨˆā¤‚ ā¤‰ā¤¸āĨ‡ ā¤“ā¤ĩā¤°ā¤°ā¤žā¤‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤‡ā¤¸ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤­āĨ€ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤œā¤Ŧ ā¤¤ā¤• ā¤•ā¤ŋ ā¤¸āĨ€ā¤ĄāĨ€ā¤ā¤¨ ā¤¨ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨ‹", + "Override_Destination_Channel": "ā¤ŽāĨā¤–āĨā¤¯ ā¤ĒāĨˆā¤°ā¤žā¤ŽāĨ€ā¤Ÿā¤° ā¤ŽāĨ‡ā¤‚ ā¤—ā¤‚ā¤¤ā¤ĩāĨā¤¯ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤…ā¤§ā¤ŋā¤˛āĨ‡ā¤–ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Owner": "ā¤Žā¤žā¤˛ā¤ŋā¤•", + "Play": "ā¤–āĨ‡ā¤˛", + "Page_not_exist_or_not_permission": "ā¤ĒāĨ‡ā¤œ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ ā¤¯ā¤ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ ā¤šāĨ‹", + "Page_not_found": "ā¤ĒāĨƒā¤ˇāĨā¤  ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "Page_title": "ā¤ĒāĨƒā¤ˇāĨā¤  ā¤•ā¤ž ā¤ļāĨ€ā¤°āĨā¤ˇā¤•", + "Page_URL": "ā¤ĒāĨ‡ā¤œ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Pages": "ā¤ĒāĨƒā¤ˇāĨā¤ āĨ‹ā¤‚", + "Parent_channel_doesnt_exist": "ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ.", + "Participants": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤­ā¤žā¤—ā¤ŋā¤¯āĨ‹ā¤‚", + "Password": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "Password_Change_Disabled": "ā¤†ā¤Ēā¤•āĨ‡ Rocket.Chat ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¨āĨ‡ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ŧā¤Ļā¤˛ā¤¨ā¤ž ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤šāĨˆ", + "Password_Changed_Description": "ā¤†ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚:\n - ā¤…ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `[ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą]`āĨ¤\n - `[ā¤¨ā¤žā¤Ž]`, `[fname]`, `[lname]` ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤¨ā¤žā¤Ž, ā¤ĒāĨā¤°ā¤Ĩā¤Ž ā¤¨ā¤žā¤Ž ā¤¯ā¤ž ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¨ā¤žā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤\n - `[ā¤ˆā¤ŽāĨ‡ā¤˛]` ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤\n - ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ `[Site_Name]` ā¤”ā¤° `[Site_URL]`āĨ¤", + "Password_Changed_Email_Subject": "[ā¤¸ā¤žā¤‡ā¤Ÿ_ā¤¨ā¤žā¤Ž] - ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "Password_changed_section": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "Password_changed_successfully": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "Password_History": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸", + "Password_History_Amount": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤•āĨ€ ā¤˛ā¤‚ā¤Ŧā¤žā¤ˆ", + "Password_History_Amount_Description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤¨: ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤°āĨ‹ā¤•ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šā¤žā¤˛ ā¤šāĨ€ ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ€ ā¤Žā¤žā¤¤āĨā¤°ā¤žāĨ¤", + "Password_must_have": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤:", + "Password_Policy": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¨āĨ€ā¤¤ā¤ŋ", + "Password_Policy_Aria_Description": "ā¤‡ā¤¸ā¤•āĨ‡ ā¤¨āĨ€ā¤šāĨ‡ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨ ā¤¸āĨ‚ā¤šāĨ€ā¤Ŧā¤ĻāĨā¤§ ā¤šāĨˆ", + "Password_must_meet_the_complexity_requirements": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ‹ ā¤œā¤Ÿā¤ŋā¤˛ā¤¤ā¤ž ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ĒāĨ‚ā¤°ā¤ž ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "Password_to_access": "ā¤ĒāĨā¤°ā¤ĩāĨ‡ā¤ļ ā¤šāĨ‡ā¤¤āĨ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "Passwords_do_not_match": "ā¤¸ā¤žā¤‚ā¤•āĨ‡ā¤¤ā¤ŋā¤• ā¤ļā¤ŦāĨā¤Ļ ā¤ŽāĨ‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤–ā¤žā¤¤āĨ‡", + "Past_Chats": "ā¤Ēā¤ŋā¤›ā¤˛āĨ€ ā¤šāĨˆā¤Ÿ", + "Paste_here": "ā¤¯ā¤šā¤žā¤‚ ā¤šā¤ŋā¤Ēā¤•ā¤žā¤ā¤‚...", + "Paste": "ā¤ĒāĨ‡ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Pause": "ā¤ĩā¤ŋā¤°ā¤žā¤Ž", + "Paste_error": "ā¤•āĨā¤˛ā¤ŋā¤Ēā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤¸āĨ‡ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "Paid_Apps": "ā¤¸ā¤ļāĨā¤˛āĨā¤• ā¤ā¤ĒāĨā¤¸", + "Payload": "ā¤ĒāĨ‡ā¤˛āĨ‹ā¤Ą", + "PDF": "ā¤ĒāĨ€ā¤ĄāĨ€ā¤ā¤Ģ", + "pdf_success_message": "ā¤ĒāĨ€ā¤ĄāĨ€ā¤ā¤Ģ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤¤āĨˆā¤¯ā¤žā¤° ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "pdf_error_message": "ā¤ĒāĨ€ā¤ĄāĨ€ā¤ā¤Ģ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ", + "Peer_Password": "ā¤¸ā¤šā¤•ā¤°āĨā¤ŽāĨ€ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "People": "ā¤˛āĨ‹ā¤—", + "Permalink": "ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤˛ā¤ŋā¤‚ā¤•", + "Permissions": "ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯ā¤žā¤‚", + "Personal_Access_Tokens": "ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤—ā¤¤ ā¤Ēā¤šāĨā¤ā¤š ā¤ŸāĨ‹ā¤•ā¤¨", + "Pexip_Premium_only": "ā¤ĒāĨ‡ā¤•āĨā¤¸ā¤ŋā¤Ē (ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž)", + "Phone": "ā¤Ģā¤ŧāĨ‹ā¤¨", + "Phone_call": "ā¤ĢāĨ‹ā¤¨ ā¤•āĨ‰ā¤˛", + "Phone_Number": "ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤¨ā¤‚ā¤Ŧā¤°", + "Thank_you_exclamation_mark": "ā¤§ā¤¨āĨā¤¯ā¤ĩā¤žā¤Ļ!", + "Thank_You_For_Choosing_RocketChat": "ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤šāĨā¤¨ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤§ā¤¨āĨā¤¯ā¤ĩā¤žā¤Ļ!", + "Phone_already_exists": "ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "Phone_number": "ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤¨ā¤‚ā¤Ŧā¤°", + "PID": "ā¤ĒāĨ€ā¤†ā¤ˆā¤ĄāĨ€", + "Pin": "ā¤¨ā¤¤āĨā¤ĨāĨ€ ā¤•ā¤°ā¤¨ā¤ž", + "Pin_Message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤ŋā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "pin-message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤ŋā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "pin-message_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤ŋā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Pinned_a_message": "ā¤ā¤• ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤ŋā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž:", + "Pinned_Messages": "ā¤Ēā¤ŋā¤¨ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Pinned_messages_unavailable_for_federation": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤°āĨ‚ā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ēā¤ŋā¤¨ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚āĨ¤", + "pinning-not-allowed": "ā¤Ēā¤ŋā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "PiwikAdditionalTrackers": "ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤Ēā¤ŋā¤ĩā¤ŋā¤• ā¤¸ā¤žā¤‡ā¤ŸāĨ‡ā¤‚", + "PiwikAdditionalTrackers_Description": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤ā¤• ā¤šāĨ€ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤•āĨ‹ ā¤ĩā¤ŋā¤­ā¤ŋā¤¨āĨā¤¨ ā¤ĩāĨ‡ā¤Ŧā¤¸ā¤žā¤‡ā¤ŸāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤ŸāĨā¤°āĨˆā¤• ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤Ēā¤ŋā¤ĩā¤ŋā¤• ā¤ĩāĨ‡ā¤Ŧā¤¸ā¤žā¤‡ā¤Ÿ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤”ā¤° ā¤¸ā¤žā¤‡ā¤Ÿā¤†ā¤ˆā¤ĄāĨ€ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚: `[ { \"ā¤ŸāĨā¤°āĨˆā¤•ā¤°ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛\": \"https://my.piwik.domain2/\", \"ā¤¸ā¤žā¤‡ā¤Ÿā¤†ā¤ˆā¤ĄāĨ€\": 42 } , { \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 } ]`", + "PiwikAnalytics_cookieDomain": "ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨", + "PiwikAnalytics_cookieDomain_Description": "ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤Ēā¤° ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤ŸāĨā¤°āĨˆā¤• ā¤•ā¤°āĨ‡ā¤‚", + "PiwikAnalytics_domains": "ā¤†ā¤‰ā¤Ÿā¤—āĨ‹ā¤‡ā¤‚ā¤— ā¤˛ā¤ŋā¤‚ā¤• ā¤›āĨā¤Ēā¤žā¤ā¤‚", + "PiwikAnalytics_domains_Description": "'ā¤†ā¤‰ā¤Ÿā¤˛ā¤ŋā¤‚ā¤•āĨā¤¸' ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤ŽāĨ‡ā¤‚, ā¤œāĨā¤žā¤žā¤¤ ā¤‰ā¤Ēā¤¨ā¤žā¤Ž ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤Ēā¤° ā¤•āĨā¤˛ā¤ŋā¤• ā¤›āĨā¤Ēā¤žā¤ā¤‚āĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤Ēā¤‚ā¤•āĨā¤¤ā¤ŋ ā¤ā¤• ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤Ąā¤žā¤˛āĨ‡ā¤‚ ā¤”ā¤° ā¤•ā¤ŋā¤¸āĨ€ ā¤ĩā¤ŋā¤­ā¤žā¤œā¤• ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¨ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "PiwikAnalytics_prependDomain": "ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤•āĨ‹ ā¤ĒāĨā¤°āĨ€ā¤ĒāĨ‡ā¤¨āĨā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "PiwikAnalytics_prependDomain_Description": "ā¤ŸāĨā¤°āĨˆā¤•ā¤ŋā¤‚ā¤— ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤¸ā¤žā¤‡ā¤Ÿ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤•āĨ‹ ā¤ĒāĨƒā¤ˇāĨā¤  ā¤ļāĨ€ā¤°āĨā¤ˇā¤• ā¤¸āĨ‡ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "PiwikAnalytics_siteId_Description": "ā¤‡ā¤¸ ā¤¸ā¤žā¤‡ā¤Ÿ ā¤•āĨ€ ā¤Ēā¤šā¤šā¤žā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ€ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤¸ā¤žā¤‡ā¤Ÿ ā¤†ā¤ˆā¤ĄāĨ€āĨ¤ ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: 17", + "PiwikAnalytics_url_Description": "ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤œā¤šā¤žā¤‚ ā¤Ēā¤ŋā¤ĩā¤ŋā¤• ā¤¸āĨā¤Ĩā¤ŋā¤¤ ā¤šāĨˆ, ā¤‰ā¤¸ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤ŋā¤›ā¤˛ā¤ž ā¤¸āĨā¤˛āĨˆā¤ļ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤•ā¤°ā¤¨ā¤ž ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: `https://piwik.rocket.chat/`", + "Placeholder_for_email_or_username_login_field": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¯ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°", + "Placeholder_for_password_login_confirm_field": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤° ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°āĨ‡ā¤‚", + "Placeholder_for_password_login_field": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°", + "Platform_Windows": "ā¤–ā¤ŋā¤Ąā¤ŧā¤•ā¤ŋā¤¯ā¤žā¤", + "Platform_Linux": "ā¤˛ā¤ŋā¤¨ā¤•āĨā¤¸", + "Platform_Mac": "ā¤ŽāĨˆā¤•", + "Please_add_a_comment": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ā¤• ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Please_add_a_comment_to_close_the_room": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤•ā¤Žā¤°ā¤ž ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", "Please_answer_survey": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤‡ā¤¸ ā¤šāĨˆā¤Ÿ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤ĩā¤°ā¤ŋā¤¤ ā¤¸ā¤°āĨā¤ĩāĨ‡ā¤•āĨā¤ˇā¤Ŗ ā¤•ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĻāĨ‡ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤•āĨā¤ˇā¤Ŗ ā¤˛āĨ‡ā¤‚", + "Please_enter_usernames": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚...", + "please_enter_valid_domain": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ā¤• ā¤Žā¤žā¤¨āĨā¤¯ ā¤ĄāĨ‹ā¤ŽāĨ‡ā¤¨ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Please_enter_value_for_url": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ‡ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤•āĨ‡ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤Žā¤žā¤¨ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Please_enter_your_new_password_below": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¨āĨ€ā¤šāĨ‡ ā¤Ąā¤žā¤˛āĨ‡ā¤‚:", + "Please_enter_your_password": "ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "Please_fill_a_label": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ā¤• ā¤˛āĨ‡ā¤Ŧā¤˛ ā¤­ā¤°āĨ‡ā¤‚", + "Please_fill_a_name": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ā¤• ā¤¨ā¤žā¤Ž ā¤­ā¤°āĨ‡ā¤‚", + "Please_fill_a_token_name": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ā¤• ā¤ĩāĨˆā¤§ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤¨ā¤žā¤Ž ā¤­ā¤°āĨ‡ā¤‚", + "Please_fill_a_username": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤­ā¤°āĨ‡ā¤‚", + "Please_fill_all_the_information": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¸ā¤žā¤°āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤­ā¤°āĨ‡ā¤‚", + "Please_fill_an_email": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ā¤• ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­ā¤°āĨ‡ā¤‚", "Please_fill_name_and_email": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­ā¤°āĨ‡ā¤‚", + "Please_fill_out_reason_for_report": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤ž ā¤•ā¤žā¤°ā¤Ŗ ā¤­ā¤°āĨ‡ā¤‚", + "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": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤ ā¤šāĨ‹ā¤¨āĨ‡ ā¤¤ā¤• ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤°āĨ‡ā¤‚", + "Please_wait_while_your_account_is_being_deleted": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¤ā¤Ŧ ā¤¤ā¤• ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤°āĨ‡ā¤‚ ā¤œā¤Ŧ ā¤¤ā¤• ā¤†ā¤Ēā¤•ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨ‹...", + "Please_wait_while_your_profile_is_being_saved": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¤ā¤Ŧ ā¤¤ā¤• ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤°āĨ‡ā¤‚ ā¤œā¤Ŧ ā¤¤ā¤• ā¤†ā¤Ēā¤•āĨ€ ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤šāĨ‡ā¤œāĨ€ ā¤œā¤ž ā¤°ā¤šāĨ€ ā¤šāĨ‹...", + "Policies": "ā¤¨āĨ€ā¤¤ā¤ŋā¤¯āĨ‹ā¤‚", + "Pool": "ā¤ĒāĨ‚ā¤˛", + "Port": "ā¤Ēā¤¤āĨā¤¤ā¤¨", + "Post_as": "ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Post_to": "ā¤•āĨ‹ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ", + "Post_to_Channel": "ā¤šāĨˆā¤¨ā¤˛ ā¤Ēā¤° ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Post_to_s_as_s": "%s ā¤•āĨ‹ %s ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "post-readonly": "ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤", + "post-readonly_description": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Powered_by_JoyPixels": "ā¤œāĨ‰ā¤¯ā¤Ēā¤ŋā¤•āĨā¤¸ā¤˛āĨā¤¸ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤‚ā¤šā¤žā¤˛ā¤ŋā¤¤", + "Powered_by_RocketChat": "ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤‚ā¤šā¤žā¤˛ā¤ŋā¤¤", + "powers-of-ten": "ā¤Ļā¤¸ ā¤•āĨ€ ā¤ļā¤•āĨā¤¤ā¤ŋā¤¯ā¤žā¤", + "powers-of-two": "ā¤ĻāĨ‹ ā¤•āĨ€ ā¤ļā¤•āĨā¤¤ā¤ŋā¤¯ā¤žā¤", + "increments-of-two": "ā¤ĻāĨ‹ ā¤•āĨ€ ā¤ĩāĨƒā¤ĻāĨā¤§ā¤ŋ", + "Preferences": "ā¤Ēā¤¸ā¤‚ā¤Ļ", + "Preferences_saved": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤ā¤ ā¤¸ā¤šāĨ‡ā¤œāĨ€ ā¤—ā¤ˆā¤‚", + "Preparing_data_for_import_process": "ā¤†ā¤¯ā¤žā¤¤ ā¤ĒāĨā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¤āĨˆā¤¯ā¤žā¤° ā¤•ā¤°ā¤¨ā¤ž", + "Preparing_list_of_channels": "ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€ ā¤¤āĨˆā¤¯ā¤žā¤° ā¤•āĨ€ ā¤œā¤ž ā¤°ā¤šāĨ€ ā¤šāĨˆ", + "Preparing_list_of_messages": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€ ā¤¤āĨˆā¤¯ā¤žā¤° ā¤•āĨ€ ā¤œā¤ž ā¤°ā¤šāĨ€ ā¤šāĨˆ", + "Preparing_list_of_users": "ā¤‰ā¤Ēā¤­āĨ‹ā¤•āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€ ā¤¤āĨˆā¤¯ā¤žā¤° ā¤•āĨ€ ā¤œā¤ž ā¤°ā¤šāĨ€ ā¤šāĨˆ", + "Presence": "ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "Preview": "ā¤ĒāĨ‚ā¤°āĨā¤ĩ ā¤Ļā¤°āĨā¤ļā¤¨", + "preview-c-room": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "preview-c-room_description": "ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤•ā¤ŋā¤¸āĨ€ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ€ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Previous_month": "ā¤Ēā¤ŋā¤›ā¤˛ā¤ž ā¤Žā¤šāĨ€ā¤¨ā¤ž", + "Previous_week": "ā¤Ēā¤ŋā¤›ā¤˛ā¤ž ā¤¸ā¤ĒāĨā¤¤ā¤žā¤š", + "Price": "ā¤•āĨ€ā¤Žā¤¤", + "Priorities": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤“ā¤‚", + "Priority": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž", + "Priority_saved": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤¸ā¤šāĨ‡ā¤œāĨ€ ā¤—ā¤ˆ", + "Priority_removed": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤—ā¤ˆ", + "Priorities_restored": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤ā¤ ā¤Ŧā¤šā¤žā¤˛ ā¤•āĨ€ ā¤—ā¤ˆā¤‚", + "Privacy": "ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž", + "Privacy_Policy": "ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¨āĨ€ā¤¤ā¤ŋ", + "Privacy_policy": "ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¨āĨ€ā¤¤ā¤ŋ", + "Privacy_summary": "ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¸ā¤žā¤°ā¤žā¤‚ā¤ļ", + "Private": "ā¤¨ā¤ŋā¤œāĨ€", + "private": "ā¤¨ā¤ŋā¤œāĨ€", + "Private_channels": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛", + "Private_Apps": "ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸", + "Private_Channel": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛", + "Private_Channels": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛", + "Private_Chats": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤Ÿ", + "Private_Group": "ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š", + "Private_Groups": "ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š", + "Private_Groups_list": "ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€", + "Private_Team": "ā¤¨ā¤ŋā¤œāĨ€ ā¤ŸāĨ€ā¤Ž", + "Productivity": "ā¤‰ā¤¤āĨā¤Ēā¤žā¤Ļā¤•ā¤¤ā¤ž", + "Profile": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛", + "Profile_details": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ", + "Profile_picture": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ĢāĨ‹ā¤ŸāĨ‹", + "Profile_saved_successfully": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤¸ā¤šāĨ‡ā¤œāĨ€ ā¤—ā¤ˆ", + "Prometheus": "ā¤ĒāĨā¤°āĨ‹ā¤ŽāĨ‡ā¤Ĩā¤ŋā¤¯ā¤¸", + "Prometheus_API_User_Agent": "ā¤ā¤ĒāĨ€ā¤†ā¤ˆ: ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤ŸāĨā¤°āĨˆā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Prometheus_Garbage_Collector": "ā¤¨āĨ‹ā¤Ąā¤œāĨ‡ā¤ā¤¸ ā¤œāĨ€ā¤¸āĨ€ ā¤˛āĨ€ā¤œā¤ŋā¤", + "Prometheus_Garbage_Collector_Alert": "ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤¨ā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°ā¤¨ā¤ž ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ", + "Prometheus_Reset_Interval": "ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ (ā¤ā¤Žā¤ā¤¸)", + "Protocol": "ā¤ļā¤ŋā¤ˇāĨā¤Ÿā¤žā¤šā¤žā¤°", + "Prune": "ā¤•ā¤žā¤‚ā¤Ÿ - ā¤›ā¤žā¤‚ā¤Ÿ", + "Prune_finished": "ā¤ĒāĨā¤°āĨ‚ā¤¨ ā¤–ā¤ŧā¤¤āĨā¤Ž", + "Prune_Messages": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ€ ā¤›ā¤ā¤Ÿā¤žā¤ˆ ā¤•ā¤°āĨ‡ā¤‚", + "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 ā¤•āĨ‹ ā¤šā¤Ÿā¤ž ā¤ĻāĨ‡ā¤—ā¤žāĨ¤", + "Pruning_files": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤•ā¤žā¤Ÿ-ā¤›ā¤žā¤ā¤Ÿ ā¤•āĨ€ ā¤œā¤ž ā¤°ā¤šāĨ€ ā¤šāĨˆā¤‚...", + "Pruning_messages": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤•ā¤žā¤Ÿ-ā¤›ā¤žā¤ā¤Ÿ ā¤•āĨ€ ā¤œā¤ž ā¤°ā¤šāĨ€ ā¤šāĨˆ...", "Public": "ā¤œā¤¨ā¤¤ā¤ž", + "public": "ā¤œā¤¨ā¤¤ā¤ž", + "Public_Channel": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛", + "Public_Channels": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛", + "Public_Community": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯", + "Public_URL": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Purchase_for_free": "ā¤ŽāĨā¤Ģā¤ŧāĨā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤–ā¤°āĨ€ā¤Ļā¤žā¤°āĨ€ ā¤•ā¤°āĨ‡ā¤‚", + "Purchase_for_price": "$%s ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤–ā¤°āĨ€ā¤Ļā¤žā¤°āĨ€", + "Purchased": "ā¤–ā¤°āĨ€ā¤ĻāĨ€", + "Push": "ā¤§ā¤•āĨ‡ā¤˛ā¤¨ā¤ž", + "Push_Description": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤‰ā¤Ēā¤•ā¤°ā¤ŖāĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤”ā¤° ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Push_Notifications": "ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤§ā¤•āĨā¤•ā¤ž", + "Push_apn_cert": "APN Cert", + "Push_apn_dev_cert": "APN Dev Cert", + "Push_apn_dev_key": "ā¤ā¤ĒāĨ€ā¤ā¤¨ ā¤ĻāĨ‡ā¤ĩ ā¤•āĨā¤‚ā¤œāĨ€", + "Push_apn_dev_passphrase": "ā¤ā¤ĒāĨ€ā¤ā¤¨ ā¤ĻāĨ‡ā¤ĩ ā¤Ēā¤žā¤¸ā¤Ģā¤ŧāĨā¤°āĨ‡ā¤œā¤ŧ", + "Push_apn_key": "ā¤ā¤ĒāĨ€ā¤ā¤¨ ā¤•āĨā¤‚ā¤œāĨ€", + "Push_apn_passphrase": "ā¤ā¤ĒāĨ€ā¤ā¤¨ ā¤Ēā¤žā¤¸ā¤Ģā¤ŧāĨā¤°āĨ‡ā¤œā¤ŧ", "Push_enable": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Push_enable_gateway": "ā¤—āĨ‡ā¤Ÿā¤ĩāĨ‡ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Push_enable_gateway_Description": "**ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€:** ā¤†ā¤Ēā¤•āĨ‹ ā¤‡ā¤¸ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤”ā¤° ā¤šā¤Žā¤žā¤°āĨ‡ ā¤—āĨ‡ā¤Ÿā¤ĩāĨ‡ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° (ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤ĩā¤ŋā¤œā¤ŧā¤žā¤°āĨā¤Ą> ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€> ā¤°ā¤œā¤ŋā¤¸āĨā¤Ÿā¤° ā¤¸ā¤°āĨā¤ĩā¤°) ā¤”ā¤° ā¤šā¤Žā¤žā¤°āĨ€ ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤ļā¤°āĨā¤¤āĨ‹ā¤‚ (ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤ĩā¤ŋā¤œā¤ŧā¤žā¤°āĨā¤Ą> ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€> ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ā¤ĩā¤ž ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤ļā¤°āĨā¤¤āĨ‡ā¤‚ ā¤…ā¤¨āĨā¤Ŧā¤‚ā¤§) ā¤•āĨ‹ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤­ā¤˛āĨ‡ ā¤šāĨ€ ā¤¯ā¤š ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤‰ā¤¸ ā¤Ēā¤° ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨ‹, ā¤¯ā¤Ļā¤ŋ ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ ā¤¤āĨ‹ **ā¤¨ā¤šāĨ€ā¤‚** ā¤•ā¤žā¤Ž ā¤•ā¤°āĨ‡ā¤—ā¤žāĨ¤", + "Push_gateway": "ā¤ĻāĨā¤ĩā¤žā¤°", + "Push_gateway_description": "ā¤ā¤•ā¤žā¤§ā¤ŋā¤• ā¤—āĨ‡ā¤Ÿā¤ĩāĨ‡ ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤•ā¤žā¤§ā¤ŋā¤• ā¤˛ā¤žā¤‡ā¤¨āĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Push_gcm_api_key": "ā¤œāĨ€ā¤¸āĨ€ā¤ā¤Ž ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤•āĨā¤‚ā¤œāĨ€", + "Push_gcm_project_number": "ā¤œāĨ€ā¤¸āĨ€ā¤ā¤Ž ā¤Ēā¤°ā¤ŋā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž", + "Push_production": "ā¤‰ā¤¤āĨā¤Ēā¤žā¤Ļā¤¨", + "Push_request_content_from_server": "Apple ā¤”ā¤° Google (ā¤”ā¤° ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤—āĨ‡ā¤Ÿā¤ĩāĨ‡) ā¤¸āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤›ā¤ŋā¤Ēā¤žā¤ā¤", + "Push_request_content_from_server_Description": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤•āĨ‹ ā¤ĒāĨā¤ļ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤•ā¤°ā¤•āĨ‡ Apple/Google ā¤•āĨ‡ ā¤¸ā¤žā¤Žā¤¨āĨ‡ ā¤‰ā¤œā¤žā¤—ā¤° ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯, ā¤•āĨ‡ā¤ĩā¤˛ ā¤ā¤• ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤ˆā¤ĄāĨ€ ā¤ĒāĨā¤ļ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ ā¤—ā¤¤ā¤ŋā¤ļāĨ€ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤˛ā¤žā¤ā¤—ā¤ž ā¤”ā¤° ā¤‡ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤•āĨ‹ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤—ā¤žāĨ¤ ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤•āĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ŽāĨ‡ā¤‚, ā¤¯ā¤š \"ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šāĨˆ\" ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤—ā¤žāĨ¤ ā¤¯ā¤š ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤Ēā¤° ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩāĨ€ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "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": "ā¤•ā¤¤ā¤žā¤°", + "Queued": "ā¤•ā¤¤ā¤žā¤°ā¤Ŧā¤ĻāĨā¤§", + "Queues": "ā¤ĒāĨ‚ā¤‚ā¤›", + "Queue_delay_timeout": "ā¤•ā¤¤ā¤žā¤° ā¤ĒāĨā¤°ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤ĩā¤ŋā¤˛ā¤‚ā¤Ŧ ā¤¸ā¤Žā¤¯ā¤Ŧā¤žā¤šāĨā¤¯", + "Queue_Time": "ā¤•ā¤¤ā¤žā¤° ā¤¸ā¤Žā¤¯", + "Queue_management": "ā¤•ā¤¤ā¤žā¤° ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨", + "Quick_reactions": "ā¤¤āĨā¤ĩā¤°ā¤ŋā¤¤ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤", + "Quick_reactions_description": "ā¤œā¤Ŧ ā¤†ā¤Ēā¤•ā¤ž ā¤Žā¤žā¤‰ā¤¸ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤° ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ€ ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤¤āĨ€ā¤¨ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤“ā¤‚ ā¤¤ā¤• ā¤†ā¤¸ā¤žā¤¨ ā¤Ēā¤šāĨā¤‚ā¤š ā¤Žā¤ŋā¤˛ā¤¤āĨ€ ā¤šāĨˆ", + "quote": "ā¤‰ā¤ĻāĨā¤§ā¤°ā¤Ŗ", + "Quote": "ā¤‰ā¤ĻāĨā¤§ā¤°ā¤Ŗ", + "Random": "Random", + "Rate Limiter": "ā¤Ļā¤° ā¤¸āĨ€ā¤Žā¤•", + "Rate Limiter_Description": "ā¤¸ā¤žā¤‡ā¤Ŧā¤° ā¤šā¤Žā¤˛āĨ‹ā¤‚ ā¤”ā¤° ā¤¸āĨā¤•āĨā¤°āĨˆā¤Ēā¤ŋā¤‚ā¤— ā¤•āĨ‹ ā¤°āĨ‹ā¤•ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤­āĨ‡ā¤œāĨ‡ ā¤—ā¤ ā¤¯ā¤ž ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§āĨ‹ā¤‚ ā¤•āĨ€ ā¤Ļā¤° ā¤•āĨ‹ ā¤¨ā¤ŋā¤¯ā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Rate_Limiter_Limit_RegisterUser": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤¨ā¤‚ā¤Ŧā¤° ā¤Ļā¤° ā¤¸āĨ€ā¤Žā¤• ā¤Ēā¤° ā¤•āĨ‰ā¤˛ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "Rate_Limiter_Limit_RegisterUser_Description": "ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤°āĨ‡ā¤Ÿ ā¤˛ā¤ŋā¤Žā¤ŋā¤Ÿā¤° ā¤…ā¤¨āĨā¤­ā¤žā¤— ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤¸ā¤Žā¤¯ ā¤¸āĨ€ā¤Žā¤ž ā¤•āĨ‡ ā¤­āĨ€ā¤¤ā¤° ā¤…ā¤¨āĨā¤Žā¤¤ ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤Ŧā¤ŋā¤‚ā¤ĻāĨā¤“ā¤‚ (ā¤†ā¤°ā¤ˆā¤ā¤¸ā¤ŸāĨ€ ā¤”ā¤° ā¤°āĨ€ā¤¯ā¤˛-ā¤Ÿā¤žā¤‡ā¤Ž ā¤ā¤ĒāĨ€ā¤†ā¤ˆ) ā¤•āĨ‹ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤•āĨ‰ā¤˛ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤žāĨ¤", + "React_when_read_only": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "React_when_read_only_changed_successfully": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "Reacted_with": "ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĩāĨā¤¯ā¤•āĨā¤¤ ā¤•āĨ€", + "Reactions": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤“ā¤‚", + "Read_by": "ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ēā¤ĸā¤ŧāĨ‡ā¤‚", + "Read_only": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤", + "Read_Receipts": "ā¤°ā¤¸āĨ€ā¤ĻāĨ‡ā¤‚ ā¤Ēā¤ĸā¤ŧāĨ‡ā¤‚", + "Readability": "ā¤Ēā¤ ā¤¨āĨ€ā¤¯ā¤¤ā¤ž", + "This_room_is_read_only": "ā¤¯ā¤š ā¤•ā¤Žā¤°ā¤ž ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šāĨˆ", + "Only_people_with_permission_can_send_messages_here": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤˛āĨ‹ā¤— ā¤šāĨ€ ā¤¯ā¤šā¤žā¤‚ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Read_only_changed_successfully": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "Read_only_channel": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šāĨˆā¤¨ā¤˛", + "Read_only_group": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤¸ā¤ŽāĨ‚ā¤š", + "Real_Estate": "ā¤°ā¤ŋā¤¯ā¤˛ ā¤ā¤¸āĨā¤ŸāĨ‡ā¤Ÿ", + "Real_Time_Monitoring": "ā¤ĩā¤žā¤¸āĨā¤¤ā¤ĩā¤ŋā¤• ā¤¸ā¤Žā¤¯ ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ŋā¤—ā¤°ā¤žā¤¨āĨ€", + "RealName_Change_Disabled": "ā¤†ā¤Ēā¤•āĨ‡ Rocket.Chat ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¨āĨ‡ ā¤¨ā¤žā¤Ž ā¤Ŧā¤Ļā¤˛ā¤¨ā¤ž ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤šāĨˆ", + "Reason_To_Join": "ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•ā¤ž ā¤•ā¤žā¤°ā¤Ŗ", + "Receive_alerts": "ā¤…ā¤˛ā¤°āĨā¤Ÿ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Receive_Group_Mentions": "@ā¤¸ā¤­āĨ€ ā¤”ā¤° @ā¤¯ā¤šā¤žā¤ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Receive_login_notifications": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Receive_Login_Detection_Emails": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ēā¤šā¤šā¤žā¤¨ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Receive_Login_Detection_Emails_Description": "ā¤šā¤° ā¤Ŧā¤žā¤° ā¤†ā¤Ēā¤•āĨ‡ ā¤–ā¤žā¤¤āĨ‡ ā¤Ēā¤° ā¤¨ā¤ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤ž ā¤Ēā¤¤ā¤ž ā¤šā¤˛ā¤¨āĨ‡ ā¤Ēā¤° ā¤ā¤• ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Recent_Import_History": "ā¤šā¤žā¤˛ ā¤•ā¤ž ā¤†ā¤¯ā¤žā¤¤ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸", + "Record": "ā¤…ā¤­ā¤ŋā¤˛āĨ‡ā¤–", + "Records": "ā¤…ā¤­ā¤ŋā¤˛āĨ‡ā¤–", + "recording": "ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ąā¤ŋā¤‚ā¤—", + "Redirect_URI": "ā¤¯āĨ‚ā¤†ā¤°ā¤†ā¤ˆ ā¤•āĨ‹ ā¤ĒāĨā¤¨ā¤°āĨā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Redirect_URL_does_not_match": "ā¤°āĨ€ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤ŽāĨ‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤–ā¤žā¤¤ā¤ž", + "Refresh": "ā¤¤ā¤žā¤œā¤ŧā¤ž ā¤•ā¤°ā¤¨ā¤ž", + "Refresh_keys": "ā¤•āĨā¤‚ā¤œā¤ŋā¤¯ā¤žā¤ ā¤¤ā¤žā¤œā¤ŧā¤ž ā¤•ā¤°āĨ‡ā¤‚", + "Refresh_oauth_services": "OAuth ā¤¸āĨ‡ā¤ĩā¤žā¤ā¤ ā¤¤ā¤žā¤œā¤ŧā¤ž ā¤•ā¤°āĨ‡ā¤‚", + "Refresh_your_page_after_install_to_enable_screen_sharing": "ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤ļāĨ‡ā¤¯ā¤°ā¤ŋā¤‚ā¤— ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤…ā¤Ēā¤¨āĨ‡ ā¤ĒāĨ‡ā¤œ ā¤•āĨ‹ ā¤°āĨ€ā¤ĢāĨā¤°āĨ‡ā¤ļ ā¤•ā¤°āĨ‡ā¤‚", + "Refreshing": "ā¤°ā¤ŋā¤ĢāĨā¤°āĨ‡ā¤ļā¤ŋā¤‚ā¤—", + "Regenerate_codes": "ā¤•āĨ‹ā¤Ą ā¤ĒāĨā¤¨: ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Regexp_validation": "ā¤¨ā¤ŋā¤¯ā¤Žā¤ŋā¤¤ ā¤…ā¤­ā¤ŋā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨", + "Register": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°ā¤ĩā¤žā¤¨ā¤ž", + "Register_new_account": "ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤°ā¤œā¤ŋā¤¸āĨā¤Ÿā¤° ā¤•ā¤°āĨ‡", + "Register_Server": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Register_Server_Info": "Rocket.Chat Technologies Corp. ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤•ā¤°ā¤žā¤ ā¤—ā¤ ā¤ĒāĨ‚ā¤°āĨā¤ĩ-ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤—āĨ‡ā¤Ÿā¤ĩāĨ‡ ā¤”ā¤° ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Register_Server_Opt_In": "ā¤‰ā¤¤āĨā¤Ēā¤žā¤Ļ ā¤”ā¤° ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨", + "Register_Server_Registered": "ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "Register_Server_Registered_I_Agree": "ā¤ŽāĨˆā¤‚ ā¤‡ā¤¸ā¤¸āĨ‡ ā¤¸ā¤šā¤Žā¤¤ ā¤šāĨ‚ā¤‚", + "Register_Server_Registered_Livechat": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€", + "Register_Server_Registered_Marketplace": "ā¤ā¤ĒāĨā¤¸ ā¤Ŧā¤žā¤œā¤ŧā¤žā¤°", + "Register_Server_Registered_OAuth": "ā¤¸ā¤žā¤Žā¤žā¤œā¤ŋā¤• ā¤¨āĨ‡ā¤Ÿā¤ĩā¤°āĨā¤• ā¤•āĨ‡ ā¤˛ā¤ŋā¤ OAuth ā¤ĒāĨā¤°āĨ‰ā¤•āĨā¤¸āĨ€", + "Register_Server_Registered_Push_Notifications": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤ĒāĨā¤ļ ā¤¨āĨ‹ā¤Ÿā¤ŋā¤Ģā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤—āĨ‡ā¤Ÿā¤ĩāĨ‡", + "Register_Server_Standalone": "ā¤¸āĨā¤ŸāĨˆā¤‚ā¤Ąā¤…ā¤˛āĨ‹ā¤¨ ā¤°ā¤–āĨ‡ā¤‚, ā¤†ā¤Ēā¤•āĨ‹ ā¤‡ā¤¸ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨ‹ā¤—āĨ€", + "Register_Server_Standalone_Own_Certificates": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•āĨ‡ ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤Ēā¤¤āĨā¤°āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‹ ā¤ĒāĨā¤¨ā¤ƒ ā¤¸ā¤‚ā¤•ā¤˛ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Register_Server_Standalone_Service_Providers": "ā¤¸āĨ‡ā¤ĩā¤ž ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤–ā¤žā¤¤āĨ‡ ā¤Ŧā¤¨ā¤žā¤ā¤", + "Register_Server_Standalone_Update_Settings": "ā¤ĒāĨ‚ā¤°āĨā¤ĩ-ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•āĨ‹ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Register_Server_Terms_Alert": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĒāĨ‚ā¤°ā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤ļā¤°āĨā¤¤āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤¸ā¤šā¤Žā¤¤ ā¤šāĨ‹ā¤‚", + "register-on-cloud": "ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤Ēā¤° ā¤°ā¤œā¤ŋā¤¸āĨā¤Ÿā¤° ā¤•ā¤°āĨ‡ā¤‚", + "register-on-cloud_description": "ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤Ēā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Registration": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ", + "Registration_Succeeded": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸ā¤Ģā¤˛ ā¤šāĨā¤†", + "Registration_via_Admin": "ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ", + "Regular_Expressions": "ā¤¨ā¤ŋā¤¯ā¤Žā¤ŋā¤¤ ā¤…ā¤­ā¤ŋā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋ", + "Reject_call": "ā¤•āĨ‰ā¤˛ ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Release": "ā¤ŽāĨā¤•āĨā¤¤ ā¤•ā¤°ā¤¨ā¤ž", + "Releases": "ā¤ĩā¤ŋā¤œāĨā¤žā¤ĒāĨā¤¤ā¤ŋ", + "Religious": "ā¤§ā¤žā¤°āĨā¤Žā¤ŋā¤•", + "Reload": "ā¤ĒāĨā¤¨ā¤ƒ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Reload_page": "ā¤ĒāĨƒā¤ˇāĨā¤  ā¤ĒāĨā¤¨ā¤ƒ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Reload_Pages": "ā¤ĒāĨ‡ā¤œ ā¤ĒāĨā¤¨ā¤ƒ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Remember_my_credentials": "ā¤ŽāĨ‡ā¤°āĨ€ ā¤¸ā¤žā¤– ā¤¯ā¤žā¤Ļ ā¤°ā¤–āĨ‡ā¤‚", + "Remove": "ā¤¨ā¤ŋā¤•ā¤žā¤˛ā¤¨ā¤ž", + "Remove_Admin": "ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤šā¤Ÿā¤žā¤ā¤", + "Remove_Association": "ā¤ā¤¸āĨ‹ā¤¸ā¤ŋā¤ā¤ļā¤¨ ā¤šā¤Ÿā¤žā¤ā¤", + "Remove_as_leader": "ā¤¨āĨ‡ā¤¤ā¤ž ā¤Ēā¤Ļ ā¤¸āĨ‡ ā¤šā¤Ÿā¤žā¤“", + "Remove_as_moderator": "ā¤ŽāĨ‰ā¤Ąā¤°āĨ‡ā¤Ÿā¤° ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤šā¤Ÿā¤žā¤ā¤", + "Remove_as_owner": "ā¤¸āĨā¤ĩā¤žā¤ŽāĨ€ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤šā¤Ÿā¤žā¤ā¤", + "remove-canned-responses": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨā¤¤āĨā¤¤ā¤° ā¤šā¤Ÿā¤žā¤ā¤", + "remove-canned-responses_description": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨā¤¤āĨā¤¤ā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Remove_Channel_Links": "ā¤šāĨˆā¤¨ā¤˛ ā¤˛ā¤ŋā¤‚ā¤• ā¤šā¤Ÿā¤žā¤ā¤", + "Remove_custom_oauth": "ā¤•ā¤¸āĨā¤Ÿā¤Ž OAuth ā¤šā¤Ÿā¤žā¤ā¤", + "Remove_from_room": "ā¤•ā¤Žā¤°āĨ‡ ā¤¸āĨ‡ ā¤¨ā¤ŋā¤•ā¤žā¤˛āĨ‹", + "Remove_from_team": "ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‡ ā¤šā¤Ÿā¤žā¤“", + "Remove_last_admin": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Remove_someone_from_room": "ā¤•ā¤ŋā¤¸āĨ€ ā¤•āĨ‹ ā¤•ā¤Žā¤°āĨ‡ ā¤¸āĨ‡ ā¤Ŧā¤žā¤šā¤° ā¤¨ā¤ŋā¤•ā¤žā¤˛āĨ‡ā¤‚", + "remove-closed-livechat-room": "ā¤Ŧā¤‚ā¤Ļ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇ ā¤šā¤Ÿā¤žā¤ā¤", + "remove-closed-livechat-room_description": "ā¤Ŧā¤‚ā¤Ļ ā¤‘ā¤ŽāĨā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤°āĨ‚ā¤Ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "remove-closed-livechat-rooms": "ā¤¸ā¤­āĨ€ ā¤Ŧā¤‚ā¤Ļ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤Žā¤°āĨ‡ ā¤šā¤Ÿā¤žā¤ā¤", + "remove-closed-livechat-rooms_description": "ā¤¸ā¤­āĨ€ ā¤Ŧā¤‚ā¤Ļ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "remove-livechat-department": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤šā¤Ÿā¤žā¤ā¤", + "remove-livechat-department_description": "ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "remove-slackbridge-links": "ā¤¸āĨā¤˛āĨˆā¤•ā¤ŦāĨā¤°ā¤ŋā¤œ ā¤˛ā¤ŋā¤‚ā¤• ā¤šā¤Ÿā¤žā¤ā¤", + "remove-slackbridge-links_description": "ā¤¸āĨā¤˛āĨˆā¤•ā¤ŦāĨā¤°ā¤ŋā¤œ ā¤˛ā¤ŋā¤‚ā¤• ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "remove-team-channel": "ā¤ŸāĨ€ā¤Ž ā¤šāĨˆā¤¨ā¤˛ ā¤šā¤Ÿā¤žā¤ā¤", + "remove-team-channel_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "remove-user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤ā¤", + "remove-user_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤•ā¤Žā¤°āĨ‡ ā¤¸āĨ‡ ā¤¨ā¤ŋā¤•ā¤žā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Removed": "ā¤¨ā¤ŋā¤•ā¤žā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "Removed_User": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Removed__roomName__from_this_team": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‡ #{{roomName}} ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Removed__username__from_team": "@{{user_removed}} ā¤•āĨ‹ ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Removed__roomName__from_the_team": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‡ #{{roomName}} ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Removed__username__from_the_team": "@{{user_removed}} ā¤•āĨ‹ ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Replay": "REPLAY", + "Replied_on": "ā¤Ēā¤° ā¤‰ā¤¤āĨā¤¤ā¤° ā¤Ļā¤ŋā¤¯ā¤ž", + "Replies": "ā¤œā¤ĩā¤žā¤Ŧ", + "Reply": "ā¤œā¤ĩā¤žā¤Ŧ", + "Reply_in_direct_message": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĻāĨ‡ā¤‚", + "Reply_in_thread": "ā¤ĨāĨā¤°āĨ‡ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĻāĨ‡ā¤‚", + "Reply_via_Email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĻāĨ‡ā¤‚", + "ReplyTo": "ā¤•āĨ‹ ā¤‰ā¤¤āĨā¤¤ā¤°", + "Report": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤ĩāĨ‡ā¤Ļā¤¨", + "Reports": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤ŸāĨ‹ā¤‚", + "Report_Abuse": "ā¤ĻāĨā¤°āĨā¤Ēā¤¯āĨ‹ā¤— ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ€ ā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤ĻāĨ‡ā¤‚", + "Report_exclamation_mark": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤ĩāĨ‡ā¤Ļā¤¨!", + "Report_has_been_sent": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤­āĨ‡ā¤œ ā¤ĻāĨ€ ā¤—ā¤ˆ ā¤šāĨˆ", + "Report_Number": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž", + "Report_this_message_question_mark": "ā¤‡ā¤¸ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ€ ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚?", + "Report_User": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Reporting": "ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿā¤ŋā¤‚ā¤—", + "Request": "ā¤…ā¤¨āĨā¤°āĨ‹ā¤§", + "Request_comment_when_closing_conversation": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€ ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤°āĨ‡ā¤‚", + "Request_comment_when_closing_conversation_description": "ā¤¯ā¤Ļā¤ŋ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ‹ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨ‹ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤ā¤• ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ€ ā¤šāĨ‹ā¤—āĨ€āĨ¤", + "Request_tag_before_closing_chat": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤ŸāĨˆā¤— ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤°āĨ‡ā¤‚", + "request": "ā¤…ā¤¨āĨā¤°āĨ‹ā¤§", + "requests": "ā¤…ā¤¨āĨā¤°āĨ‹ā¤§", + "Requests": "ā¤…ā¤¨āĨā¤°āĨ‹ā¤§", + "Requested": "ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž", + "Requested_apps_will_appear_here": "ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ā¤ŋā¤¤ ā¤ā¤ĒāĨā¤¸ ā¤¯ā¤šā¤žā¤‚ ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ‡ā¤‚ā¤—āĨ‡", + "request-pdf-transcript": "ā¤ĒāĨ€ā¤ĄāĨ€ā¤ā¤Ģ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤°āĨ‡ā¤‚", + "request-pdf-transcript_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨ€ā¤ĄāĨ€ā¤ā¤Ģ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Requested_At": "ā¤Ēā¤° ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Requested_By": "ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Require": "ā¤œā¤ŧā¤°āĨ‚ā¤°ā¤¤ ā¤šāĨ‹ā¤¨ā¤ž", + "Required": "ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•", + "required": "ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•", + "Require_all_tokens": "ā¤¸ā¤­āĨ€ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Require_any_token": "ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Require_password_change": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Resend_verification_email": "ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĒāĨā¤¨ā¤ƒ ā¤­āĨ‡ā¤œāĨ‡", + "Reset": "ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ", + "Reset_priorities": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤ā¤ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Reset_Connection": "ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Reset_E2E_Key": "E2E ā¤•āĨā¤‚ā¤œāĨ€ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Reset_password": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ", + "Reset_section_settings": "ā¤Ąā¤ŋā¤ĢāĨ‰ā¤˛āĨā¤ŸāĨā¤¸ ā¤•ā¤ž ā¤ĒāĨā¤¨ā¤ƒā¤¸āĨā¤Ĩā¤žā¤Ēā¤¨", + "Reset_TOTP": "ā¤ŸāĨ€ā¤“ā¤ŸāĨ€ā¤ĒāĨ€ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "reset-other-user-e2e-key": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž E2E ā¤•āĨā¤‚ā¤œāĨ€ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Responding": "ā¤œā¤ĩā¤žā¤Ŧ", + "Response_description_post": "ā¤–ā¤žā¤˛āĨ€ ā¤ŦāĨ‰ā¤ĄāĨ€ ā¤¯ā¤ž ā¤–ā¤žā¤˛āĨ€ ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ ā¤ĒāĨā¤°āĨ‰ā¤Ēā¤°āĨā¤ŸāĨ€ ā¤ĩā¤žā¤˛āĨ‡ ā¤ŦāĨ‰ā¤ĄāĨ€ ā¤•āĨ‹ ā¤†ā¤¸ā¤žā¤¨āĨ€ ā¤¸āĨ‡ ā¤¨ā¤œā¤°ā¤…ā¤‚ā¤Ļā¤žā¤œ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤—āĨˆā¤°-200 ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤‰ā¤šā¤ŋā¤¤ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤Šā¤Ēā¤° ā¤¨ā¤ŋā¤°āĨā¤Ļā¤ŋā¤ˇāĨā¤Ÿ ā¤‰ā¤Ēā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤ā¤• ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•āĨ€ ā¤œā¤žā¤ā¤—āĨ€āĨ¤ ā¤†ā¤Ē ā¤‰ā¤Ēā¤°āĨ‹ā¤•āĨā¤¤ ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤‡ā¤¨ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤“ā¤ĩā¤°ā¤°ā¤žā¤‡ā¤Ą ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Response_description_pre": "ā¤¯ā¤Ļā¤ŋ ā¤šāĨˆā¤‚ā¤Ąā¤˛ā¤° ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĩā¤žā¤Ēā¤¸ ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ JSON ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•āĨ‡ ā¤ŽāĨā¤–āĨā¤¯ ā¤­ā¤žā¤— ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤žā¤Ēā¤¸ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤:", + "Restart": "ā¤ĒāĨā¤¨ā¤ƒ ā¤†ā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "Restart_the_server": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "restart-server": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "restart-server_description": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‹ ā¤ĒāĨā¤¨ā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Results": "ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤Ž", + "Resume": "ā¤Ģā¤ŋā¤° ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨ā¤ž", + "Retail": "ā¤–āĨā¤Ļā¤°ā¤ž", + "Retention_setting_changed_successfully": "ā¤…ā¤ĩā¤§ā¤žā¤°ā¤Ŗ ā¤¨āĨ€ā¤¤ā¤ŋ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ ā¤ĻāĨ€ ā¤—ā¤ˆ", + "RetentionPolicy": "ā¤…ā¤ĩā¤§ā¤žā¤°ā¤Ŗ ā¤¨āĨ€ā¤¤ā¤ŋ", + "RetentionPolicy_Advanced_Precision": "ā¤‰ā¤¨āĨā¤¨ā¤¤ ā¤…ā¤ĩā¤§ā¤žā¤°ā¤Ŗ ā¤¨āĨ€ā¤¤ā¤ŋ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "RetentionPolicy_Advanced_Precision_Cron": "ā¤‰ā¤¨āĨā¤¨ā¤¤ ā¤…ā¤ĩā¤§ā¤žā¤°ā¤Ŗ ā¤¨āĨ€ā¤¤ā¤ŋ ā¤•āĨā¤°āĨ‰ā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "RetentionPolicy_Advanced_Precision_Cron_Description": "ā¤•āĨā¤°āĨ‰ā¤¨ ā¤œāĨ‰ā¤Ŧ ā¤ā¤•āĨā¤¸ā¤ĒāĨā¤°āĨ‡ā¤ļā¤¨ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤ĒāĨā¤°āĨ‚ā¤¨ ā¤Ÿā¤žā¤‡ā¤Žā¤° ā¤•āĨ‹ ā¤•ā¤ŋā¤¤ā¤¨āĨ€ ā¤Ŧā¤žā¤° ā¤šā¤˛ā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤ ā¤‡ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤¸ā¤ŸāĨ€ā¤• ā¤Žā¤žā¤¨ ā¤Ēā¤° ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤¤āĨ‡ā¤œā¤ŧ ā¤°ā¤ŋā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤Ÿā¤žā¤‡ā¤Žā¤° ā¤ĩā¤žā¤˛āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤ŦāĨ‡ā¤šā¤¤ā¤° ā¤•ā¤žā¤Ž ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤Ŧā¤Ąā¤ŧāĨ‡ ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯āĨ‹ā¤‚ ā¤Ēā¤° ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤ĒāĨā¤°ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤ļā¤•āĨā¤¤ā¤ŋ ā¤–ā¤°āĨā¤š ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "RetentionPolicy_AppliesToChannels": "ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤Ēā¤° ā¤˛ā¤žā¤—āĨ‚ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ", + "RetentionPolicy_AppliesToDMs": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤Ēā¤° ā¤˛ā¤žā¤—āĨ‚ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ", + "RetentionPolicy_AppliesToGroups": "ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤Ēā¤° ā¤˛ā¤žā¤—āĨ‚ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ", + "RetentionPolicy_Description": "ā¤†ā¤Ēā¤•āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤žā¤¨āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤”ā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤›ā¤‚ā¤Ÿā¤žā¤ˆ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "RetentionPolicy_DoNotPruneDiscussion": "ā¤šā¤°āĨā¤šā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ€ ā¤•ā¤žā¤Ÿ-ā¤›ā¤žā¤ā¤Ÿ ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "RetentionPolicy_DoNotPrunePinned": "ā¤Ēā¤ŋā¤¨ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ€ ā¤•ā¤žā¤Ÿ-ā¤›ā¤žā¤‚ā¤Ÿ ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "RetentionPolicy_DoNotPruneThreads": "ā¤§ā¤žā¤—āĨ‹ā¤‚ ā¤•āĨ€ ā¤•ā¤žā¤Ÿ-ā¤›ā¤žā¤ā¤Ÿ ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "RetentionPolicy_Enabled": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯", + "RetentionPolicy_ExcludePinned": "ā¤Ēā¤ŋā¤¨ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ŧā¤žā¤šā¤° ā¤¨ā¤ŋā¤•ā¤žā¤˛āĨ‡ā¤‚", + "RetentionPolicy_FilesOnly": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤šā¤Ÿā¤žā¤ā¤", + "RetentionPolicy_FilesOnly_Description": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤šā¤Ÿā¤žā¤ˆ ā¤œā¤žā¤ā¤‚ā¤—āĨ€, ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤¯ā¤Ĩā¤žā¤ĩā¤¤ ā¤°ā¤šāĨ‡ā¤‚ā¤—āĨ‡āĨ¤", + "RetentionPolicy_MaxAge": "ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤¯āĨ", + "RetentionPolicy_MaxAge_Channels": "ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤¯āĨ", + "RetentionPolicy_MaxAge_Description": "ā¤‡ā¤¸ ā¤Žā¤žā¤¨ ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤žā¤¨āĨ‡ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ļā¤ŋā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤›ā¤žā¤ā¤ŸāĨ‡ā¤‚", + "RetentionPolicy_MaxAge_DMs": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯ā¤•āĨā¤ˇ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤¯āĨ", + "RetentionPolicy_MaxAge_Groups": "ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤¯āĨ", + "RetentionPolicy_Precision": "ā¤Ÿā¤žā¤‡ā¤Žā¤° ā¤Ēā¤°ā¤ŋā¤ļāĨā¤ĻāĨā¤§ā¤¤ā¤ž", + "RetentionPolicy_Precision_Description": "ā¤ĒāĨā¤°āĨ‚ā¤¨ ā¤Ÿā¤žā¤‡ā¤Žā¤° ā¤•ā¤ŋā¤¤ā¤¨āĨ€ ā¤Ŧā¤žā¤° ā¤šā¤˛ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤. ā¤‡ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤¸ā¤ŸāĨ€ā¤• ā¤Žā¤žā¤¨ ā¤Ēā¤° ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤¤āĨ‡ā¤œā¤ŧ ā¤°ā¤ŋā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤Ÿā¤žā¤‡ā¤Žā¤° ā¤ĩā¤žā¤˛āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤ŦāĨ‡ā¤šā¤¤ā¤° ā¤•ā¤žā¤Ž ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤Ŧā¤Ąā¤ŧāĨ‡ ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯āĨ‹ā¤‚ ā¤Ēā¤° ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤ĒāĨā¤°ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤ļā¤•āĨā¤¤ā¤ŋ ā¤–ā¤°āĨā¤š ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "RetentionPolicyRoom_Enabled": "ā¤ĒāĨā¤°ā¤žā¤¨āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤›ā¤žā¤ā¤ŸāĨ‡ā¤‚", + "RetentionPolicyRoom_ExcludePinned": "ā¤Ēā¤ŋā¤¨ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ŧā¤žā¤šā¤° ā¤¨ā¤ŋā¤•ā¤žā¤˛āĨ‡ā¤‚", + "RetentionPolicyRoom_FilesOnly": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ģā¤žā¤‡ā¤˛āĨ‹ā¤‚ ā¤•āĨ€ ā¤›ā¤ā¤Ÿā¤žā¤ˆ ā¤•ā¤°āĨ‡ā¤‚, ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤°ā¤–āĨ‡ā¤‚", + "RetentionPolicyRoom_MaxAge": "ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤¯āĨ ā¤Ļā¤ŋā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ (ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ: {{max}})", + "RetentionPolicyRoom_OverrideGlobal": "ā¤ĩāĨˆā¤ļāĨā¤ĩā¤ŋā¤• ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤§ā¤žā¤°ā¤Ŗ ā¤¨āĨ€ā¤¤ā¤ŋ ā¤•āĨ‹ ā¤“ā¤ĩā¤°ā¤°ā¤žā¤‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "RetentionPolicyRoom_ReadTheDocs": "ā¤§āĨā¤¯ā¤žā¤¨ ā¤°ā¤šāĨ‡ā¤‚! ā¤…ā¤¤āĨā¤¯ā¤§ā¤ŋā¤• ā¤¸ā¤žā¤ĩā¤§ā¤žā¤¨āĨ€ ā¤•āĨ‡ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤‡ā¤¨ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛ā¤žā¤ĩ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤¨ā¤ˇāĨā¤Ÿ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¯ā¤šā¤žā¤‚ ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤šā¤žā¤˛āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤Ļā¤¸āĨā¤¤ā¤žā¤ĩāĨ‡ā¤œā¤ŧ ā¤Ēā¤ĸā¤ŧāĨ‡ā¤‚āĨ¤", + "Retry": "ā¤ĒāĨā¤¨: ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "Return_to_home": "ā¤˜ā¤° ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸", + "Return_to_previous_page": "ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ ā¤ĒāĨ‡ā¤œ ā¤Ēā¤° ā¤˛āĨŒā¤ŸāĨ‡ā¤‚", + "Return_to_the_queue": "ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤žā¤Ēā¤¸ ā¤˛āĨŒā¤ŸāĨ‡ā¤‚", + "Review_devices": "ā¤¸ā¤ŽāĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤•ā¤Ŧ ā¤”ā¤° ā¤•ā¤šā¤žā¤ ā¤¸āĨ‡ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤šāĨ‹ ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚", + "Ringing": "ā¤Ŧā¤œ", + "Ringtones_and_visual_indicators_notify_people_of_incoming_calls": "ā¤°ā¤ŋā¤‚ā¤—ā¤ŸāĨ‹ā¤¨ ā¤”ā¤° ā¤ĻāĨƒā¤ļāĨā¤¯ ā¤¸ā¤‚ā¤•āĨ‡ā¤¤ā¤• ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤•āĨ‹ ā¤†ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤•āĨ‰ā¤˛ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Robot_Instructions_File_Content": "robots.txt ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€", + "Root": "ā¤œā¤Ąā¤ŧ", + "Required_action": "ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž", + "Default_Referrer_Policy": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤°āĨ‡ā¤Ģā¤ŧā¤°ā¤° ā¤¨āĨ€ā¤¤ā¤ŋ", + "Default_Referrer_Policy_Description": "ā¤¯ā¤š 'ā¤°āĨ‡ā¤Ģā¤ŧā¤°ā¤°' ā¤šāĨ‡ā¤Ąā¤° ā¤•āĨ‹ ā¤¨ā¤ŋā¤¯ā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤œāĨ‹ ā¤…ā¤¨āĨā¤¯ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ ā¤ā¤ŽāĨā¤ŦāĨ‡ā¤ĄāĨ‡ā¤Ą ā¤ŽāĨ€ā¤Ąā¤ŋā¤¯ā¤ž ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤­āĨ‡ā¤œā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, [ā¤ā¤Žā¤ĄāĨ€ā¤ā¤¨ ā¤¸āĨ‡ ā¤¯ā¤š ā¤˛ā¤ŋā¤‚ā¤•](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚āĨ¤ ā¤¯ā¤žā¤Ļ ā¤°ā¤–āĨ‡ā¤‚, ā¤‡ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩāĨ€ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨ‚ā¤°āĨ‡ ā¤ĒāĨƒā¤ˇāĨā¤  ā¤•āĨ‹ ā¤¤ā¤žā¤œā¤ŧā¤ž ā¤•ā¤°ā¤¨ā¤ž ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ", + "No_feature_to_preview": "ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤•āĨ‹ā¤ˆ ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤¨ā¤šāĨ€ā¤‚", + "No_Referrer": "ā¤°āĨ‡ā¤Ģā¤° ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "No_Referrer_When_Downgrade": "ā¤Ąā¤žā¤‰ā¤¨ā¤—āĨā¤°āĨ‡ā¤Ą ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤•āĨ‹ā¤ˆ ā¤°āĨ‡ā¤Ģā¤°ā¤° ā¤¨ā¤šāĨ€ā¤‚", + "Notes": "ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤Ŗā¤ŋā¤¯ā¤žā¤", + "Origin": "ā¤ŽāĨ‚ā¤˛", + "Origin_When_Cross_Origin": "ā¤‰ā¤¤āĨā¤Ēā¤¤āĨā¤¤ā¤ŋ ā¤œā¤Ŧ ā¤•āĨā¤°āĨ‰ā¤¸ ā¤‰ā¤¤āĨā¤Ēā¤¤āĨā¤¤ā¤ŋ", + "Same_Origin": "ā¤ĩā¤šāĨ€ ā¤ŽāĨ‚ā¤˛", + "Strict_Origin": "ā¤¸ā¤–āĨā¤¤ ā¤‰ā¤¤āĨā¤Ēā¤¤āĨā¤¤ā¤ŋ", + "Strict_Origin_When_Cross_Origin": "ā¤•āĨā¤°āĨ‰ā¤¸ ā¤ŽāĨ‚ā¤˛ ā¤œā¤Ŧ ā¤¸ā¤–āĨā¤¤ ā¤ŽāĨ‚ā¤˛", + "UIKit_Interaction_Timeout": "ā¤ā¤Ē ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĻāĨ‡ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤ŋā¤Ģā¤˛ ā¤°ā¤šā¤ž ā¤šāĨˆ. ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚ ā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ‡ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Unsafe_Url": "ā¤…ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Rocket_Chat_Alert": "ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤…ā¤˛ā¤°āĨā¤Ÿ", + "Role": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž", + "Roles": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤", + "Role_Editing": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤¨", + "Role_Mapping": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤Žā¤žā¤¨ā¤šā¤ŋā¤¤āĨā¤°ā¤Ŗ", + "Role_removed": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤—ā¤ˆ", + "Room": "ā¤•ā¤Žā¤°ā¤ž", + "room_allowed_reacting": "{{user_by}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨā¤ ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ€ ā¤—ā¤ˆ", + "room_allowed_reactions": "ā¤…ā¤¨āĨā¤Žā¤¤ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤", + "Room_announcement_changed_successfully": "ā¤•ā¤•āĨā¤ˇ ā¤•āĨ€ ā¤˜āĨ‹ā¤ˇā¤Ŗā¤ž ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ ā¤ĻāĨ€ ā¤—ā¤ˆ", + "Room_archivation_state": "ā¤°ā¤žā¤œāĨā¤¯", + "Room_archivation_state_false": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯", + "Room_archivation_state_true": "ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤", + "Room_archived": "ā¤•ā¤•āĨā¤ˇ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤", + "room_changed_announcement": "ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ€ ā¤˜āĨ‹ā¤ˇā¤Ŗā¤ž ā¤•āĨ‹ ā¤Ŧā¤Ļā¤˛ā¤•ā¤°: {{room_announcement}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž {{user_by}} ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤", + "room_changed_avatar": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤…ā¤ĩā¤¤ā¤žā¤° {{user_by}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "room_avatar_changed": "ā¤Ŧā¤Ļā¤˛ā¤ž ā¤šāĨā¤† ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤…ā¤ĩā¤¤ā¤žā¤°", + "room_changed_description": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ ā¤‡ā¤¸ ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž: {{room_description}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž {{user_by}}", + "room_changed_privacy": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤Ŧā¤Ļā¤˛ā¤•ā¤°: {{room_type}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž {{user_by}} ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤", + "room_changed_topic": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤ĩā¤ŋā¤ˇā¤¯ ā¤‡ā¤¸ ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž: {{room_topic}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž {{user_by}}", + "room_changed_type": "ā¤•ā¤Žā¤°ā¤ž ā¤Ŧā¤Ļā¤˛ā¤•ā¤° {{room_type}} ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "room_changed_topic_to": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤ĩā¤ŋā¤ˇā¤¯ ā¤Ŧā¤Ļā¤˛ā¤•ā¤° {{room_topic}} ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Room_default_change_to_private_will_be_default_no_more": "ā¤¯ā¤š ā¤ā¤• ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤šāĨˆā¤¨ā¤˛ ā¤šāĨˆ ā¤”ā¤° ā¤‡ā¤¸āĨ‡ ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤¯ā¤š ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤šāĨˆā¤¨ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤°ā¤šāĨ‡ā¤—ā¤žāĨ¤ ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ēā¤•āĨ€ ā¤†ā¤—āĨ‡ ā¤Ŧā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤‡ā¤šāĨā¤›ā¤ž ā¤šāĨˆ?", + "Room_description_changed_successfully": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "room_disallowed_reacting": "{{user_by}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĩāĨā¤¯ā¤•āĨā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨā¤ ā¤•ā¤Žā¤°ā¤ž ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "room_disallowed_reactions": "ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤", + "Room_Edit": "ā¤•ā¤•āĨā¤ˇ ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Room_has_been_archived": "ā¤•ā¤Žā¤°ā¤ž ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤° ā¤˛ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Room_has_been_converted": "ā¤•ā¤Žā¤°ā¤ž ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Room_has_been_created": "ā¤•ā¤•āĨā¤ˇ ā¤Ŧā¤¨ā¤žā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Room_has_been_removed": "ā¤•ā¤Žā¤°ā¤ž ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Room_has_been_unarchived": "ā¤•ā¤Žā¤°ā¤ž ā¤…ā¤¨ā¤žā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Room_Info": "ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "room_is_blocked": "ā¤¯ā¤š ā¤•ā¤Žā¤°ā¤ž ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤šāĨˆ", + "room_account_deactivated": "ā¤¯ā¤š ā¤–ā¤žā¤¤ā¤ž ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "room_is_read_only": "ā¤¯ā¤š ā¤•ā¤Žā¤°ā¤ž ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šāĨˆ", + "room_name": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Room_name_changed": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ŧā¤Ļā¤˛ā¤•ā¤°: {{room_name}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž {{user_by}} ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Room_name_changed_to": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ŧā¤Ļā¤˛ā¤•ā¤° {{room_name}} ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Room_name_changed_successfully": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "Room_not_exist_or_not_permission": "ā¤•ā¤Žā¤°ā¤ž ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ ā¤¯ā¤ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤ĒāĨā¤°ā¤ĩāĨ‡ā¤ļ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ ā¤šāĨ‹", + "Room_not_found": "ā¤•ā¤Žā¤°ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "Room_password_changed_successfully": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "room_removed_read_only": "ā¤•ā¤•āĨā¤ˇ ā¤•āĨ‹ ā¤˛ā¤ŋā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ {{user_by}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧāĨ€ ā¤—ā¤ˆ", + "room_set_read_only": "{{user_by}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ‹ ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "room_removed_read_only_permission": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤—ā¤ˆ", + "room_set_read_only_permission": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤Žā¤°ā¤ž ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Room_topic_changed_successfully": "ā¤•ā¤•āĨā¤ˇ ā¤•ā¤ž ā¤ĩā¤ŋā¤ˇā¤¯ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "Room_type_changed_successfully": "ā¤•ā¤Žā¤°āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "Room_type_of_default_rooms_cant_be_changed": "ā¤¯ā¤š ā¤ā¤• ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤•ā¤Žā¤°ā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤‡ā¤¸ā¤•ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤Ŧā¤Ļā¤˛ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨āĨ‡ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¸āĨ‡ ā¤Ēā¤°ā¤žā¤Žā¤°āĨā¤ļ ā¤˛āĨ‡ā¤‚āĨ¤", + "Room_unarchived": "ā¤•ā¤Žā¤°ā¤ž ā¤…ā¤¨ā¤žā¤°ā¤•āĨā¤ˇā¤ŋā¤¤", + "Room_updated_successfully": "ā¤•ā¤Žā¤°ā¤ž ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž!", + "Room_uploaded_file_list": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚ ā¤¸āĨ‚ā¤šāĨ€", + "Room_uploaded_file_list_empty": "ā¤•āĨ‹ā¤ˆ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚.", + "Rooms": "ā¤•ā¤Žā¤°ā¤ž", + "Rooms_added_successfully": "ā¤•ā¤Žā¤°āĨ‡ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ ā¤—ā¤", + "Routing": "ā¤Žā¤žā¤°āĨā¤—", + "Run_only_once_for_each_visitor": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤†ā¤—ā¤‚ā¤¤āĨā¤• ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‡ā¤ĩā¤˛ ā¤ā¤• ā¤Ŧā¤žā¤° ā¤šā¤˛ā¤žā¤ā¤", + "run-import": "ā¤†ā¤¯ā¤žā¤¤ ā¤šā¤˛ā¤žā¤ā¤", + "run-import_description": "ā¤†ā¤¯ā¤žā¤¤ā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤šā¤˛ā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "run-migration": "ā¤Žā¤žā¤‡ā¤—āĨā¤°āĨ‡ā¤ļā¤¨ ā¤šā¤˛ā¤žā¤ā¤", + "run-migration_description": "ā¤Žā¤žā¤‡ā¤—āĨā¤°āĨ‡ā¤ļā¤¨ ā¤šā¤˛ā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Running_Instances": "ā¤šā¤˛ ā¤°ā¤šāĨ‡ ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ", + "Runtime_Environment": "ā¤•āĨā¤°ā¤Ž ā¤Ēā¤°āĨā¤¯ā¤žā¤ĩā¤°ā¤Ŗ", + "S_new_messages_since_s": "%s ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤¸āĨ‡ %s ā¤¨ā¤¯āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Same_As_Token_Sent_Via": "\"ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž\" ā¤•āĨ‡ ā¤¸ā¤Žā¤žā¤¨", + "Same_Style_For_Mentions": "ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩā¤šāĨ€ ā¤ļāĨˆā¤˛āĨ€", + "SAML": "ā¤ā¤¸ā¤ā¤ā¤Žā¤ā¤˛", + "SAML_Description": "ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤”ā¤° ā¤ĒāĨā¤°ā¤žā¤§ā¤ŋā¤•ā¤°ā¤Ŗ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤•āĨ‡ ā¤†ā¤Ļā¤žā¤¨-ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤…ā¤­ā¤ŋā¤•ā¤Ĩā¤¨ ā¤Žā¤žā¤°āĨā¤•ā¤…ā¤Ē ā¤­ā¤žā¤ˇā¤ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "SAML_Allowed_Clock_Drift": "ā¤Ēā¤šā¤šā¤žā¤¨ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž ā¤¸āĨ‡ ā¤…ā¤¨āĨā¤Žā¤¤ ā¤•āĨā¤˛āĨ‰ā¤• ā¤ĄāĨā¤°ā¤ŋā¤ĢāĨā¤Ÿ", + "SAML_Allowed_Clock_Drift_Description": "ā¤Ēā¤šā¤šā¤žā¤¨ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž ā¤•āĨ€ ā¤˜ā¤Ąā¤ŧāĨ€ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤˜ā¤Ąā¤ŧā¤ŋā¤¯āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤ĨāĨ‹ā¤Ąā¤ŧāĨ€ ā¤†ā¤—āĨ‡ ā¤Ŧā¤ĸā¤ŧ ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆāĨ¤ ā¤†ā¤Ē ā¤ĨāĨ‹ā¤Ąā¤ŧāĨ€ ā¤Žā¤žā¤¤āĨā¤°ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤˜ā¤Ąā¤ŧāĨ€ ā¤•āĨ‡ ā¤Ŧā¤šā¤žā¤ĩ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤‡ā¤¸ā¤•ā¤ž ā¤Žā¤žā¤¨ ā¤•ā¤ˆ ā¤Žā¤ŋā¤˛āĨ€ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą (ā¤ā¤Žā¤ā¤¸) ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤Žā¤žā¤¨ ā¤‰ā¤¸ ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤¸ā¤Žā¤¯ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤œā¤ŋā¤¸ ā¤Ēā¤° ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤•āĨ€ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "SAML_AuthnContext_Template": "AuthnContext ā¤ŸāĨ‡ā¤ŽāĨā¤Ēā¤˛āĨ‡ā¤Ÿ", + "SAML_AuthnContext_Template_Description": "ā¤†ā¤Ē ā¤¯ā¤šā¤žā¤‚ AuthnRequest ā¤ŸāĨ‡ā¤ŽāĨā¤Ēā¤˛āĨ‡ā¤Ÿ ā¤¸āĨ‡ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤ĩāĨ‡ā¤°ā¤ŋā¤ā¤Ŧā¤˛ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤\n \n ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤‘ā¤ĨāĨā¤¨ ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, {{AuthnContextClassRef}} ā¤ŸāĨˆā¤— ā¤•āĨ‹ ā¤ĄāĨā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° {{\\_\\_authnContext\\_\\}} ā¤ĩāĨ‡ā¤°ā¤ŋā¤ā¤Ŧā¤˛ ā¤•āĨ‹ ā¤¨ā¤ ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­ ā¤¸āĨ‡ ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚āĨ¤", + "SAML_AuthnRequest_Template": "AuthnRequest ā¤ŸāĨ‡ā¤ŽāĨā¤Ēā¤˛āĨ‡ā¤Ÿ", + "SAML_AuthnRequest_Template_Description": "ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤šā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆā¤‚:\n- **\\_\\_newId\\_\\_**: ā¤¯ā¤žā¤ĻāĨƒā¤šāĨā¤›ā¤ŋā¤• ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤†ā¤ˆā¤ĄāĨ€ ā¤¸āĨā¤ŸāĨā¤°ā¤ŋā¤‚ā¤—\n- **\\_\\_ā¤¤ā¤¤āĨā¤•ā¤žā¤˛\\_\\_**: ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤Ÿā¤žā¤‡ā¤Žā¤¸āĨā¤ŸāĨˆā¤ŽāĨā¤Ē\n- **\\_\\_ā¤•āĨ‰ā¤˛ā¤ŦāĨˆā¤•ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛\\_\\_**: ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤•āĨ‰ā¤˛ā¤ŦāĨˆā¤• ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛āĨ¤\n- **\\_\\_entryPoint\\_\\_**: {{Custom Entry Point}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤Žā¤žā¤¨āĨ¤\n- **\\_\\_ā¤œā¤žā¤°āĨ€ā¤•ā¤°āĨā¤¤ā¤ž\\_\\_**: {{Custom Issuer}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤Žā¤žā¤¨āĨ¤\n- **\\_\\_identifierFormatTag\\_\\_**: ā¤¯ā¤Ļā¤ŋ ā¤ĩāĨˆā¤§ {{Identifier Format}} ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ ā¤¤āĨ‹ {{NameID Policy Template}} ā¤•āĨ€ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•āĨ€ ā¤—ā¤ˆ ā¤šāĨˆāĨ¤\n- **\\_\\_identifierFormat\\_\\_**: {{Identifier Format}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤Žā¤žā¤¨āĨ¤\n- **\\_\\_authnContextTag\\_\\_**: ā¤¯ā¤Ļā¤ŋ ā¤ĩāĨˆā¤§ {{Custom Authn Context}} ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ {{AuthnContext Template}} ā¤•āĨ€ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•āĨ€ ā¤—ā¤ˆ ā¤šāĨˆāĨ¤\n- **\\_\\_authnContextComparison\\_\\_**: {{Authn Context Compare}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤Žā¤žā¤¨āĨ¤\n- **\\_\\_authnContext\\_\\_**: {{Custom Authn Context}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤Žā¤žā¤¨.", + "SAML_Connection": "ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§", + "SAML_General": "ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯", + "SAML_Custom_Authn_Context": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­", + "SAML_Custom_Authn_Context_Comparison": "ā¤ĒāĨā¤°ā¤žā¤Žā¤žā¤Ŗā¤ŋā¤• ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­ ā¤¤āĨā¤˛ā¤¨ā¤ž", + "SAML_Custom_Authn_Context_description": "ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤žā¤Žā¤žā¤Ŗā¤ŋā¤• ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸āĨ‡ ā¤–ā¤žā¤˛āĨ€ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤ĻāĨ‡ā¤‚āĨ¤\n \n ā¤ā¤•ā¤žā¤§ā¤ŋā¤• ā¤ĒāĨā¤°ā¤žā¤Žā¤žā¤Ŗā¤ŋā¤• ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨ€ā¤§āĨ‡ {{AuthnContext Template}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚āĨ¤", + "SAML_Custom_Cert": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤Ēā¤¤āĨā¤°", + "SAML_Custom_Debug": "ā¤Ąā¤ŋā¤Ŧā¤— ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "SAML_Custom_EMail_Field": "ā¤ˆ-ā¤ŽāĨ‡ā¤˛ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "SAML_Custom_Entry_point": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ĒāĨā¤°ā¤ĩāĨ‡ā¤ļ ā¤Ŧā¤ŋā¤‚ā¤ĻāĨ", + "SAML_Custom_Generate_Username": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "SAML_Custom_IDP_SLO_Redirect_URL": "ā¤†ā¤ˆā¤ĄāĨ€ā¤ĒāĨ€ ā¤ā¤¸ā¤ā¤˛ā¤“ ā¤°āĨ€ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "SAML_Custom_Immutable_Property": "ā¤…ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨āĨ€ā¤¯ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤¨ā¤žā¤Ž", + "SAML_Custom_Immutable_Property_EMail": "ā¤ˆā¤ŽāĨ‡ā¤˛", + "SAML_Custom_Immutable_Property_Username": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "SAML_Custom_Issuer": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤œā¤žā¤°āĨ€ā¤•ā¤°āĨā¤¤ā¤ž", + "SAML_Custom_Logout_Behaviour": "ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤ĩāĨā¤¯ā¤ĩā¤šā¤žā¤°", + "SAML_Custom_Logout_Behaviour_End_Only_RocketChat": "ā¤•āĨ‡ā¤ĩā¤˛ Rocket.Chat ā¤¸āĨ‡ ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "SAML_Custom_Logout_Behaviour_Terminate_SAML_Session": "SAML-ā¤¸ā¤¤āĨā¤° ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "SAML_Custom_mail_overwrite": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ŽāĨ‡ā¤˛ ā¤•āĨ‹ ā¤…ā¤§ā¤ŋā¤˛āĨ‡ā¤–ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ (ā¤†ā¤ˆā¤ĄāĨ€ā¤ĒāĨ€ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚)", + "SAML_Custom_name_overwrite": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤ĒāĨ‚ā¤°ā¤ž ā¤¨ā¤žā¤Ž ā¤…ā¤§ā¤ŋā¤˛āĨ‡ā¤–ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ (ā¤†ā¤ˆā¤ĄāĨ€ā¤ĒāĨ€ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚)", + "SAML_Custom_Private_Key": "ā¤¨ā¤ŋā¤œāĨ€ ā¤•āĨā¤‚ā¤œāĨ€ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€", + "SAML_Custom_Provider": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž", + "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": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤ā¤¸ā¤ā¤ā¤Žā¤ā¤˛ (ā¤ā¤• ā¤Ŧā¤žā¤° ā¤Žā¤ŋā¤˛ ā¤œā¤žā¤¨āĨ‡ ā¤Ēā¤°) ā¤ŽāĨ‡ā¤‚ ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą (ā¤œāĨˆā¤¸āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛) ā¤•āĨˆā¤¸āĨ‡ ā¤ĒāĨ‰ā¤ĒāĨā¤¯āĨā¤˛āĨ‡ā¤Ÿ ā¤•ā¤ŋā¤ ā¤œā¤žā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤\nā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤¤āĨŒā¤° ā¤Ēā¤°, `{\"name\":\"cn\", \"email\":\"mail\"}` cn ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤¸āĨ‡ ā¤•ā¤ŋā¤¸āĨ€ ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋ ā¤•ā¤ž ā¤Žā¤žā¤¨ā¤ĩ ā¤Ēā¤ ā¤¨āĨ€ā¤¯ ā¤¨ā¤žā¤Ž ā¤šāĨā¤¨āĨ‡ā¤—ā¤ž, ā¤”ā¤° ā¤ŽāĨ‡ā¤˛ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤¤ā¤ž ā¤¸āĨ‡ ā¤‰ā¤¨ā¤•ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤šāĨā¤¨āĨ‡ā¤—ā¤žāĨ¤\nRocket.Chat ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą: `ā¤¨ā¤žā¤Ž`, `ā¤ˆā¤ŽāĨ‡ā¤˛` ā¤”ā¤° `ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž`, ā¤Ŧā¤žā¤•āĨ€ ā¤¸ā¤Ŧ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤\n`{\"ā¤ˆā¤ŽāĨ‡ā¤˛\": \"ā¤ŽāĨ‡ā¤˛\",\"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž\": {\"ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ąā¤¨ā¤žā¤Ž\": \"ā¤ŽāĨ‡ā¤˛\",\"ā¤°āĨ‡ā¤—āĨ‡ā¤•āĨā¤¸\": \"(.*)@.+$\",\"ā¤ŸāĨ‡ā¤ŽāĨā¤Ēā¤˛āĨ‡ā¤Ÿ\": \"ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž-ā¤°āĨ‡ā¤—āĨ‡ā¤•āĨā¤¸\"}, \" ā¤¨ā¤žā¤Ž\": { \"ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ąā¤¨ā¤žā¤Ž\": [\"ā¤Ēā¤šā¤˛ā¤ž ā¤¨ā¤žā¤Ž\", \"ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¨ā¤žā¤Ž\"], \"ā¤ŸāĨ‡ā¤ŽāĨā¤Ēā¤˛āĨ‡ā¤Ÿ\": \"{{firstName}} {{lastName}}\"}, \"{{identifier}}\": \"uid\"}`", + "SAML_Custom_user_data_custom_fieldmap": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤Žā¤žā¤¨ā¤šā¤ŋā¤¤āĨā¤°", + "SAML_Custom_user_data_custom_fieldmap_description": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ SAML ā¤ŽāĨ‡ā¤‚ ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ą ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤•āĨˆā¤¸āĨ‡ ā¤ĒāĨ‰ā¤ĒāĨā¤¯āĨā¤˛āĨ‡ā¤Ÿ ā¤•ā¤ŋā¤ ā¤œā¤žā¤¤āĨ‡ ā¤šāĨˆā¤‚ (ā¤ā¤• ā¤Ŧā¤žā¤° ā¤Žā¤ŋā¤˛ ā¤œā¤žā¤¨āĨ‡ ā¤Ēā¤°)āĨ¤", + "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_Identifier_Format": "ā¤Ēā¤šā¤šā¤žā¤¨ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē", + "SAML_Identifier_Format_Description": "ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¸āĨ‡ NameID ā¤¨āĨ€ā¤¤ā¤ŋ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸āĨ‡ ā¤–ā¤žā¤˛āĨ€ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤ĻāĨ‡ā¤‚āĨ¤", + "SAML_LogoutRequest_Template": "ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤ŸāĨ‡ā¤ŽāĨā¤Ēā¤˛āĨ‡ā¤Ÿ", + "SAML_LogoutRequest_Template_Description": "ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤šā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆā¤‚:\n- **\\_\\_newId\\_\\_**: ā¤¯ā¤žā¤ĻāĨƒā¤šāĨā¤›ā¤ŋā¤• ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤†ā¤ˆā¤ĄāĨ€ ā¤¸āĨā¤ŸāĨā¤°ā¤ŋā¤‚ā¤—\n- **\\_\\_ā¤¤ā¤¤āĨā¤•ā¤žā¤˛\\_\\_**: ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤Ÿā¤žā¤‡ā¤Žā¤¸āĨā¤ŸāĨˆā¤ŽāĨā¤Ē\n- **\\_\\_idpSLORedirectURL\\_\\_**: ā¤°āĨ€ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤ˆā¤ĄāĨ€ā¤ĒāĨ€ ā¤¸ā¤ŋā¤‚ā¤—ā¤˛ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛āĨ¤\n- **\\_\\_ā¤œā¤žā¤°āĨ€ā¤•ā¤°āĨā¤¤ā¤ž\\_\\_**: {{Custom Issuer}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤Žā¤žā¤¨āĨ¤\n- **\\_\\_identifierFormat\\_\\_**: {{Identifier Format}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤Žā¤žā¤¨āĨ¤\n- **\\_\\_nameID\\_\\_**: ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤Ēā¤° ā¤†ā¤ˆā¤ĄāĨ€ā¤ĒāĨ€ ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ NameIDāĨ¤\n- **\\_\\_sessionIndex\\_\\_**: ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤Ēā¤° ā¤†ā¤ˆā¤ĄāĨ€ā¤ĒāĨ€ ā¤¸āĨ‡ ā¤¸āĨ‡ā¤ļā¤¨ ā¤‡ā¤‚ā¤ĄāĨ‡ā¤•āĨā¤¸ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "SAML_LogoutResponse_Template": "ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ŸāĨ‡ā¤ŽāĨā¤Ēā¤˛āĨ‡ā¤Ÿ", + "SAML_LogoutResponse_Template_Description": "ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤šā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆā¤‚:\n- **\\_\\_newId\\_\\_**: ā¤¯ā¤žā¤ĻāĨƒā¤šāĨā¤›ā¤ŋā¤• ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤†ā¤ˆā¤ĄāĨ€ ā¤¸āĨā¤ŸāĨā¤°ā¤ŋā¤‚ā¤—\n- **\\_\\_inResponseToId\\_\\_**: ā¤†ā¤ˆā¤ĄāĨ€ā¤ĒāĨ€ ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•āĨ€ ā¤†ā¤ˆā¤ĄāĨ€\n- **\\_\\_ā¤¤ā¤¤āĨā¤•ā¤žā¤˛\\_\\_**: ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤Ÿā¤žā¤‡ā¤Žā¤¸āĨā¤ŸāĨˆā¤ŽāĨā¤Ē\n- **\\_\\_idpSLORedirectURL\\_\\_**: ā¤°āĨ€ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤ˆā¤ĄāĨ€ā¤ĒāĨ€ ā¤¸ā¤ŋā¤‚ā¤—ā¤˛ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛āĨ¤\n- **\\_\\_ā¤œā¤žā¤°āĨ€ā¤•ā¤°āĨā¤¤ā¤ž\\_\\_**: {{Custom Issuer}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤Žā¤žā¤¨āĨ¤\n- **\\_\\_identifierFormat\\_\\_**: {{Identifier Format}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤Žā¤žā¤¨āĨ¤\n- **\\_\\_nameID\\_\\_**: IdP ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ NameIDāĨ¤\n- **\\_\\_sessionIndex\\_\\_**: IdP ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ sessionIndexāĨ¤", + "SAML_Metadata_Certificate_Template_Description": "ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤šā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆā¤‚:\n- **\\_\\_ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤Ēā¤¤āĨā¤°\\_\\_**: ā¤Ļā¤žā¤ĩā¤ž ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¨ā¤ŋā¤œāĨ€ ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤Ēā¤¤āĨā¤°āĨ¤", + "SAML_Metadata_Template": "ā¤ŽāĨ‡ā¤Ÿā¤žā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ŸāĨ‡ā¤ŽāĨā¤Ēā¤˛āĨ‡ā¤Ÿ", + "SAML_Metadata_Template_Description": "ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤šā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆā¤‚:\n- **\\_\\_sloLocation\\_\\_**: ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤¸ā¤ŋā¤‚ā¤—ā¤˛ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛āĨ¤\n- **\\_\\_ā¤œā¤žā¤°āĨ€ā¤•ā¤°āĨā¤¤ā¤ž\\_\\_**: {{Custom Issuer}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤Žā¤žā¤¨āĨ¤\n- **\\_\\_identifierFormat\\_\\_**: {{Identifier Format}} ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•ā¤ž ā¤Žā¤žā¤¨āĨ¤\n- **\\_\\_certificateTag\\_\\_**: ā¤¯ā¤Ļā¤ŋ ā¤•āĨ‹ā¤ˆ ā¤¨ā¤ŋā¤œāĨ€ ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤Ēā¤¤āĨā¤° ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤‡ā¤¸ā¤ŽāĨ‡ā¤‚ {{Metadata Certificate Template}} ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤—ā¤ž, ā¤…ā¤¨āĨā¤¯ā¤Ĩā¤ž ā¤‡ā¤¸āĨ‡ ā¤…ā¤¨ā¤ĻāĨ‡ā¤–ā¤ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤\n- **\\_\\_ā¤•āĨ‰ā¤˛ā¤ŦāĨˆā¤•ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛\\_\\_**: ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤•āĨ‰ā¤˛ā¤ŦāĨˆā¤• ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛āĨ¤", + "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": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ SAML ā¤Ļā¤žā¤ĩāĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤¨ā¤ŋā¤œāĨ€ ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Saturday": "ā¤ļā¤¨ā¤ŋā¤ĩā¤žā¤°", + "Save": "ā¤Ŧā¤šā¤žā¤¨ā¤ž", + "Save_changes": "ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Save_Mobile_Bandwidth": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤ŦāĨˆā¤‚ā¤Ąā¤ĩā¤ŋā¤ĄāĨā¤Ĩ ā¤¸ā¤šāĨ‡ā¤œāĨ‡ā¤‚", + "Save_to_enable_this_action": "ā¤‡ā¤¸ ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤šāĨ‡ā¤œāĨ‡ā¤‚", + "Save_To_Webdav": "WebDAV ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤šāĨ‡ā¤œāĨ‡ā¤‚", + "Save_your_encryption_password": "ā¤…ā¤Ēā¤¨ā¤ž ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸ā¤šāĨ‡ā¤œāĨ‡ā¤‚", + "save-all-canned-responses": "ā¤¸ā¤­āĨ€ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤ ā¤¸ā¤šāĨ‡ā¤œāĨ‡ā¤‚", + "save-all-canned-responses_description": "ā¤¸ā¤­āĨ€ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸ā¤šāĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "save-canned-responses": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤ ā¤¸ā¤šāĨ‡ā¤œāĨ‡ā¤‚", + "save-canned-responses_description": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨā¤¤āĨā¤¤ā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤šāĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "save-department-canned-responses": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤ ā¤¸ā¤šāĨ‡ā¤œāĨ‡ā¤‚", + "save-department-canned-responses_description": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨā¤¤āĨā¤¤ā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤šāĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "save-others-livechat-room-info": "ā¤…ā¤¨āĨā¤¯ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¸ā¤šāĨ‡ā¤œāĨ‡ā¤‚", + "save-others-livechat-room-info_description": "ā¤…ā¤¨āĨā¤¯ ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇāĨ‹ā¤‚ ā¤¸āĨ‡ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤¸ā¤šāĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Saved": "ā¤Ŧā¤šā¤žā¤¯ā¤ž", + "Saving": "ā¤¸ā¤šāĨ‡ā¤œā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Scan_QR_code": "Google Authenticator, Authy ā¤¯ā¤ž Duo ā¤œāĨˆā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤Žā¤žā¤Ŗā¤• ā¤ā¤Ē ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ QR ā¤•āĨ‹ā¤Ą ā¤•āĨ‹ ā¤¸āĨā¤•āĨˆā¤¨ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤¯ā¤š 6 ā¤…ā¤‚ā¤•āĨ‹ā¤‚ ā¤•ā¤ž ā¤•āĨ‹ā¤Ą ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤—ā¤ž ā¤œā¤ŋā¤¸āĨ‡ ā¤†ā¤Ēā¤•āĨ‹ ā¤¨āĨ€ā¤šāĨ‡ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "Scan_QR_code_alternative_s": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤•āĨā¤¯āĨ‚ā¤†ā¤° ā¤•āĨ‹ā¤Ą ā¤•āĨ‹ ā¤¸āĨā¤•āĨˆā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤†ā¤Ē ā¤‡ā¤¸ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤•āĨ‹ā¤Ą ā¤Ļā¤°āĨā¤œ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚:", "Scope": "ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Score": "ā¤…ā¤‚ā¤•", + "Screen_Lock": "ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤˛āĨ‰ā¤• ā¤šāĨˆ", + "Screen_Share": "ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤ļāĨ‡ā¤¯ā¤°", + "Script": "ā¤˛ā¤ŋā¤–āĨ€ ā¤šāĨā¤ˆ ā¤•ā¤šā¤žā¤¨āĨ€", + "Script_Enabled": "ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Script_Engine": "ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤¸āĨˆā¤‚ā¤Ąā¤ŦāĨ‰ā¤•āĨā¤¸", + "Script_Engine_Description": "ā¤ĒāĨā¤°ā¤žā¤¨āĨ€ ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤•āĨ‹ ā¤ āĨ€ā¤• ā¤¸āĨ‡ ā¤šā¤˛ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤‚ā¤—ā¤¤ ā¤¸āĨˆā¤‚ā¤Ąā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆ, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤¸ā¤­āĨ€ ā¤¨ā¤ˆ ā¤¸āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤Ÿ ā¤•āĨ‹ ā¤‡ā¤¸ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤¸āĨˆā¤‚ā¤Ąā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤", + "Script_Engine_vm2": "ā¤¸ā¤‚ā¤—ā¤¤ ā¤¸āĨˆā¤‚ā¤Ąā¤ŦāĨ‰ā¤•āĨā¤¸ (ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤)", + "Script_Engine_isolated_vm": "ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤¸āĨˆā¤‚ā¤Ąā¤ŦāĨ‰ā¤•āĨā¤¸", + "Search": "ā¤–āĨ‹ā¤œ", + "Searchable": "ā¤–āĨ‹ā¤œ ā¤¸ā¤•ā¤¨āĨ‡", + "Search_Apps": "ā¤ā¤ĒāĨā¤¸ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Installed_Apps": "ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤ā¤ĒāĨā¤¸ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Private_apps": "ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Requested_Apps": "ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ā¤ŋā¤¤ ā¤ā¤ĒāĨā¤¸ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Premium_Apps": "ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤ā¤ĒāĨā¤¸ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_by_file_name": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¨ā¤žā¤Ž ā¤¸āĨ‡ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_by_username": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤¸āĨ‡ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_by_category": "ā¤ļāĨā¤°āĨ‡ā¤ŖāĨ€ ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Channels": "ā¤šāĨˆā¤¨ā¤˛ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Chat_History": "ā¤šāĨˆā¤Ÿ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_current_provider_not_active": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤–āĨ‹ā¤œ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Search_Description": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤–āĨ‹ā¤œ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤–āĨ‹ā¤œ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§āĨ€ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Search_Devices_Users": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤¯ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Files": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ĸāĨ‚ā¤‚ā¤ĸāĨ‹", + "Search_for_a_more_general_term": "ā¤…ā¤§ā¤ŋā¤• ā¤¸ā¤žā¤Žā¤žā¤¨āĨā¤¯ ā¤ļā¤ŦāĨā¤Ļ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_for_a_more_specific_term": "ā¤…ā¤§ā¤ŋā¤• ā¤ĩā¤ŋā¤ļā¤ŋā¤ˇāĨā¤Ÿ ā¤ļā¤ŦāĨā¤Ļ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Integrations": "ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_message_search_failed": "ā¤–āĨ‹ā¤œ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤ĩā¤ŋā¤Ģā¤˛ ā¤°ā¤šā¤ž", + "Search_Messages": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_on_marketplace": "ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤Ēā¤° ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Page_Size": "ā¤ĒāĨƒā¤ˇāĨā¤  ā¤†ā¤•ā¤žā¤°", + "Search_Private_Groups": "ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Provider": "ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_rooms": "ā¤•ā¤Žā¤°āĨ‡ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Rooms": "ā¤•ā¤Žā¤°āĨ‡ ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Search_Users": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤–āĨ‹ā¤œāĨ‡ā¤‚", + "Seats_Available": "{{seatsLeft}} ā¤¸āĨ€ā¤ŸāĨ‡ā¤‚ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆā¤‚", + "Seats_usage": "ā¤¸āĨ€ā¤ŸāĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—", + "seconds": "ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą", + "Secret_token": "ā¤—āĨā¤ĒāĨā¤¤ ā¤ŸāĨ‹ā¤•ā¤¨", + "Secure_SaaS_solution": "ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ SaaS ā¤¸ā¤Žā¤žā¤§ā¤žā¤¨.", + "Security": "ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž", + "See_all_themes": "ā¤¸ā¤­āĨ€ ā¤ĨāĨ€ā¤Ž ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "See_documentation": "ā¤Ļā¤¸āĨā¤¤ā¤žā¤ĩāĨ‡ā¤œā¤ŧ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "See_Paid_Plan": "ā¤¸ā¤ļāĨā¤˛āĨā¤• ā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "See_Pricing": "ā¤ŽāĨ‚ā¤˛āĨā¤¯ ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤Ŗ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "See_full_profile": "ā¤ĒāĨ‚ā¤°āĨ€ ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "See_history": "ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "See_on_Engagement_Dashboard": "ā¤ā¤‚ā¤—āĨ‡ā¤œā¤ŽāĨ‡ā¤‚ā¤Ÿ ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤Ēā¤° ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", "Select_a_department": "ā¤ā¤• ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Select_a_room": "ā¤ā¤• ā¤•ā¤Žā¤°ā¤ž ā¤šāĨā¤¨āĨ‡ā¤‚", + "Select_a_user": "ā¤ā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤šāĨā¤¨āĨ‡ā¤‚", + "Select_a_webdav_server": "ā¤ā¤• WebDAV ā¤¸ā¤°āĨā¤ĩā¤° ā¤šāĨā¤¨āĨ‡ā¤‚", + "Select_an_avatar": "ā¤ā¤• ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤šāĨā¤¨āĨ‡ā¤‚", + "Select_an_option": "ā¤•āĨ‹ā¤ˆ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤šāĨā¤¨āĨ‡ā¤‚", + "Select_at_least_one_user": "ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Select_at_least_two_users": "ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ĻāĨ‹ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤šāĨā¤¨āĨ‡ā¤‚", "Select_department": "ā¤ā¤• ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Select_file": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Select_role": "ā¤ā¤• ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤šāĨā¤¨āĨ‡ā¤‚", + "Select_service_to_login": "ā¤…ā¤Ēā¤¨āĨ€ ā¤¤ā¤¸āĨā¤ĩāĨ€ā¤° ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤¯ā¤ž ā¤¸āĨ€ā¤§āĨ‡ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤‚ā¤ĒāĨā¤¯āĨ‚ā¤Ÿā¤° ā¤¸āĨ‡ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤¸āĨ‡ā¤ĩā¤ž ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Select_tag": "ā¤ā¤• ā¤ŸāĨˆā¤— ā¤šāĨā¤¨āĨ‡ā¤‚", + "Select_the_channels_you_want_the_user_to_be_removed_from": "ā¤‰ā¤¨ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚ ā¤œā¤ŋā¤¨ā¤¸āĨ‡ ā¤†ā¤Ē ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Select_the_teams_channels_you_would_like_to_delete": "ā¤‰ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚ ā¤œā¤ŋā¤¸āĨ‡ ā¤†ā¤Ē ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤œā¤ŋā¤¨āĨā¤šāĨ‡ā¤‚ ā¤†ā¤Ē ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨā¤¨āĨ‡ā¤‚ā¤—āĨ‡ ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‡ ā¤œā¤žā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Select_atleast_one_channel_to_forward_the_messsage_to": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤—āĨā¤°āĨ‡ā¤ˇā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤šāĨā¤¨āĨ‡ā¤‚", + "Select_user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Select_users": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Selected_agents": "ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ", + "Selected_by_default": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šā¤¯ā¤¨ā¤ŋā¤¤", + "Selected_departments": "ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤ĩā¤ŋā¤­ā¤žā¤—", + "Selected_first_reply_unselected_following_replies": "ā¤Ēā¤šā¤˛āĨ‡ ā¤‰ā¤¤āĨā¤¤ā¤° ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šā¤¯ā¤¨ā¤ŋā¤¤, ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤‰ā¤¤āĨā¤¤ā¤°āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤šā¤¯ā¤¨ā¤ŋā¤¤", + "Selected_monitors": "ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤°āĨā¤¸", + "Selecting_users": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°ā¤¨ā¤ž", "Send": "ā¤­āĨ‡ā¤œā¤¨ā¤ž", + "Send_a_message": "ā¤ā¤• ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œāĨ‹", + "Send_a_test_mail_to_my_user": "ā¤ŽāĨ‡ā¤°āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤ā¤• ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Send_a_test_push_to_my_user": "ā¤ŽāĨ‡ā¤°āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤ā¤• ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤ĒāĨā¤ļ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Send_confirmation_email": "ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋā¤•ā¤°ā¤Ŗ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Send_data_into_RocketChat_in_realtime": "ā¤ĩā¤žā¤¸āĨā¤¤ā¤ĩā¤ŋā¤• ā¤¸ā¤Žā¤¯ ā¤ŽāĨ‡ā¤‚ Rocket.Chat ā¤ŽāĨ‡ā¤‚ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤­āĨ‡ā¤œāĨ‡ā¤‚āĨ¤", + "Send_email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Send_Email_SMTP_Warning": "ā¤‡ā¤¸ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‹ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ SMTP ā¤ˆā¤ŽāĨ‡ā¤˛ā¤ŋā¤‚ā¤— ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž", + "Send_invitation_email": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Send_invitation_email_error": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤•āĨ‹ā¤ˆ ā¤ĩāĨˆā¤§ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ.", + "Send_invitation_email_info": "ā¤†ā¤Ē ā¤ā¤• ā¤¸ā¤žā¤Ĩ ā¤…ā¤¨āĨ‡ā¤• ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤­āĨ‡ā¤œ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚.", + "Send_invitation_email_success": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤Ēā¤¤āĨ‡ ā¤Ēā¤° ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œ ā¤Ļā¤ŋā¤¯ā¤ž ā¤šāĨˆ:", + "Send_it_as_attachment_instead_question": "ā¤‡ā¤¸ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤‡ā¤¸āĨ‡ ā¤…ā¤¨āĨā¤˛ā¤—āĨā¤¨ā¤• ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤­āĨ‡ā¤œāĨ‡ā¤‚?", + "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": "ā¤…ā¤¨āĨā¤˛ā¤—āĨā¤¨ā¤• ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Export_as_PDF": "ā¤ĒāĨ€ā¤ĄāĨ€ā¤ā¤Ģ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Export_enabled_at_the_end_of_the_conversation": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "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-mail": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œāĨ‹", + "send-mail_description": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "send-many-messages": "ā¤…ā¤¨āĨ‡ā¤• ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "send-many-messages_description": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą 5 ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ€ ā¤Ļā¤° ā¤¸āĨ€ā¤Žā¤ž ā¤•āĨ‹ ā¤Ŧā¤žā¤¯ā¤Ēā¤žā¤¸ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "send-omnichannel-chat-transcript": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "send-omnichannel-chat-transcript_description": "ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Sender_Info": "ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Sending": "ā¤­āĨ‡ā¤œā¤¨ā¤ž...", + "Sending_Invitations": "ā¤¨ā¤ŋā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤­āĨ‡ā¤œā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Sending_your_mail_to_s": "ā¤†ā¤Ēā¤•ā¤ž ā¤ŽāĨ‡ā¤˛ %s ā¤Ēā¤° ā¤­āĨ‡ā¤œā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Sent_an_attachment": "ā¤ā¤• ā¤…ā¤¨āĨā¤˛ā¤—āĨā¤¨ā¤• ā¤­āĨ‡ā¤œā¤ž", + "Sent_from": "ā¤ĒāĨā¤°āĨ‡ā¤ˇā¤•", + "Separate_multiple_words_with_commas": "ā¤ā¤•ā¤žā¤§ā¤ŋā¤• ā¤ļā¤ŦāĨā¤ĻāĨ‹ā¤‚ ā¤•āĨ‹ ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤¸āĨ‡ ā¤…ā¤˛ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "Served_By": "ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸āĨ‡ā¤ĩā¤ž", + "Server": "ā¤¸ā¤°āĨā¤ĩā¤°", + "Server_already_added": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤œā¤ž ā¤šāĨā¤•ā¤ž ā¤šāĨˆ", + "Server_doesnt_exist": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Servers": "ā¤¸ā¤°āĨā¤ĩā¤°", + "Server_Configuration": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨", + "Server_File_Path": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ēā¤Ĩ", + "Server_Folder_Path": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ģā¤ŧāĨ‹ā¤˛āĨā¤Ąā¤° ā¤Ēā¤Ĩ", + "Server_Info": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Server_name": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Server_Type": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "Service": "ā¤¸āĨ‡ā¤ĩā¤ž", + "Service_account_key": "ā¤¸āĨ‡ā¤ĩā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤•āĨā¤‚ā¤œāĨ€", + "Set_as_favorite": "ā¤Ēā¤¸ā¤‚ā¤ĻāĨ€ā¤Ļā¤ž ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Set_as_leader": "ā¤¨āĨ‡ā¤¤ā¤ž ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Set_as_moderator": "ā¤ŽāĨ‰ā¤Ąā¤°āĨ‡ā¤Ÿā¤° ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Set_as_owner": "ā¤¸āĨā¤ĩā¤žā¤ŽāĨ€ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Upload_app": "ā¤ā¤Ē ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Set_random_password_and_send_by_email": "ā¤¯ā¤žā¤ĻāĨƒā¤šāĨā¤›ā¤ŋā¤• ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "set-leader": "ā¤¨āĨ‡ā¤¤ā¤ž ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "set-leader_description": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤˛āĨ€ā¤Ąā¤° ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "set-moderator": "ā¤ŽāĨ‰ā¤Ąā¤°āĨ‡ā¤Ÿā¤° ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "set-moderator_description": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤ŽāĨ‰ā¤Ąā¤°āĨ‡ā¤Ÿā¤° ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "set-owner": "ā¤¸āĨā¤ĩā¤žā¤ŽāĨ€ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "set-owner_description": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤¸āĨā¤ĩā¤žā¤ŽāĨ€ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "set-react-when-readonly": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "set-react-when-readonly_description": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤Ēā¤° ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤•āĨā¤ˇā¤Žā¤¤ā¤ž ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "set-readonly": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "set-readonly_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Settings": "ā¤¸ā¤Žā¤žā¤¯āĨ‹ā¤œā¤¨", + "Settings_updated": "ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‹ ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Setup_SMTP": "ā¤ā¤¸ā¤ā¤Žā¤ŸāĨ€ā¤ĒāĨ€ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Setup_Wizard": "ā¤¸āĨā¤Ĩā¤žā¤Ēā¤¨ā¤ž ā¤ĩā¤ŋā¤œā¤ŧā¤žā¤°āĨā¤Ą", + "Setup_Wizard_Description": "ā¤†ā¤Ēā¤•āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ŦāĨā¤¨ā¤ŋā¤¯ā¤žā¤ĻāĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤œāĨˆā¤¸āĨ‡ ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤ĻāĨ‡ā¤ļāĨ¤", + "Setup_Wizard_Info": "ā¤šā¤Ž ā¤†ā¤Ēā¤•ā¤ž ā¤Ēā¤šā¤˛ā¤ž ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡, ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤•āĨ‹ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°ā¤¨āĨ‡ ā¤”ā¤° ā¤¨ā¤ŋā¤ƒā¤ļāĨā¤˛āĨā¤• ā¤ĒāĨā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‹ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤†ā¤Ļā¤ŋ ā¤ŽāĨ‡ā¤‚ ā¤†ā¤Ēā¤•ā¤ž ā¤Žā¤žā¤°āĨā¤—ā¤Ļā¤°āĨā¤ļā¤¨ ā¤•ā¤°āĨ‡ā¤‚ā¤—āĨ‡āĨ¤", + "Share": "ā¤ļāĨ‡ā¤¯ā¤° ā¤•ā¤°ā¤¨ā¤ž", + "Share_Location_Title": "ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸ā¤žā¤ā¤ž ā¤•ā¤°āĨ‡ā¤‚?", + "Share_screen": "ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤¸ā¤žā¤ā¤ž ā¤•ā¤°ā¤¨ā¤ž", + "New_CannedResponse": "ā¤¨ā¤ˆ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž", + "Edit_CannedResponse": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤¸ā¤‚ā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Sharing": "ā¤ļāĨ‡ā¤¯ā¤°ā¤ŋā¤‚ā¤—", + "Shared_Location": "ā¤¸ā¤žā¤ā¤ž ā¤¸āĨā¤Ĩā¤žā¤¨", + "Shared_Secret": "ā¤¸ā¤žā¤ā¤ž ā¤°ā¤šā¤¸āĨā¤¯", + "Shortcut": "ā¤›āĨ‹ā¤Ÿā¤ž ā¤°ā¤žā¤¸āĨā¤¤ā¤ž", + "shortcut_name": "ā¤ļāĨ‰ā¤°āĨā¤Ÿā¤•ā¤Ÿ ā¤¨ā¤žā¤Ž", + "Should_be_a_URL_of_an_image": "ā¤•ā¤ŋā¤¸āĨ€ ā¤›ā¤ĩā¤ŋ ā¤•ā¤ž URL ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤.", + "Should_exists_a_user_with_this_username": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤.", + "Show_agent_email": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_agent_info": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_all": "ā¤¸ā¤Ŧ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Show_Avatars": "ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_counter": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤šā¤ŋā¤šāĨā¤¨ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Show_default_content": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_email_field": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_mentions": "ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ŦāĨˆā¤œ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_more": "ā¤”ā¤° ā¤Ļā¤ŋā¤–ā¤žā¤“", + "Show_name_field": "ā¤¨ā¤žā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "show_offline_users": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Show_on_offline_page": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤ĒāĨ‡ā¤œ ā¤Ēā¤° ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Show_on_registration_page": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĒāĨƒā¤ˇāĨā¤  ā¤Ēā¤° ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_only_online": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_Only_This_Content": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤¯ā¤šāĨ€ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_preregistration_form": "ā¤ĒāĨā¤°āĨ€-ā¤°ā¤œā¤ŋā¤¸āĨā¤ŸāĨā¤°āĨ‡ā¤ļā¤¨ ā¤ĢāĨ‰ā¤°āĨā¤Ž ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_queue_list_to_all_agents": "ā¤¸ā¤­āĨ€ ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤¤ā¤žā¤° ā¤¸āĨ‚ā¤šāĨ€ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "Show_room_counter_on_sidebar": "ā¤¸ā¤žā¤‡ā¤Ąā¤Ŧā¤žā¤° ā¤Ēā¤° ā¤ļāĨ‹ ā¤°āĨ‚ā¤Ž ā¤•ā¤žā¤‰ā¤‚ā¤Ÿā¤°", + "Show_Setup_Wizard": "ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤ĩā¤ŋā¤œā¤ŧā¤žā¤°āĨā¤Ą ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_the_keyboard_shortcut_list": "ā¤•āĨā¤‚ā¤œāĨ€ā¤Ēā¤Ÿā¤˛ ā¤ļāĨ‰ā¤°āĨā¤Ÿā¤•ā¤Ÿ ā¤¸āĨ‚ā¤šāĨ€ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_To_Workspace": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤Ēā¤° ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_video": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤Ļā¤ŋā¤–ā¤žā¤“", + "Showing": "ā¤Ļā¤ŋā¤–ā¤ž", + "Showing_archived_results": "

    %s ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤Ž ā¤Ļā¤ŋā¤–ā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ

    ", + "Showing_current_of_total": "{{total}} ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ {{current}} ā¤Ļā¤ŋā¤–ā¤žā¤¯ā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Showing_online_users": "ā¤Ļā¤ŋā¤–ā¤žā¤¯ā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ: {{total_showing}} , ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨: {{online}}, ā¤•āĨā¤˛: {{total}} ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Showing_results": "

    %s ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤Ž ā¤Ļā¤ŋā¤–ā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ

    ", + "Showing_results_of": "%s - %s ā¤•āĨ‡ %s ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤Ž ā¤Ļā¤ŋā¤–ā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Show_usernames": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_roles": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤", + "Show_or_hide_the_user_roles_of_message_authors": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤˛āĨ‡ā¤–ā¤•āĨ‹ā¤‚ ā¤•āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤Ļā¤ŋā¤–ā¤žā¤ā¤ ā¤¯ā¤ž ā¤›ā¤ŋā¤Ēā¤žā¤ā¤āĨ¤", + "Show_or_hide_the_username_of_message_authors": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤˛āĨ‡ā¤–ā¤•āĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤Ļā¤ŋā¤–ā¤žā¤ā¤ ā¤¯ā¤ž ā¤›ā¤ŋā¤Ēā¤žā¤ā¤āĨ¤", + "Sidebar": "ā¤¸ā¤žā¤‡ā¤Ą ā¤Ŧā¤žā¤°", + "Sidebar_list_mode": "ā¤¸ā¤žā¤‡ā¤Ąā¤Ŧā¤žā¤° ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‚ā¤šāĨ€ ā¤ŽāĨ‹ā¤Ą", + "Sign_in_to_start_talking": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤žā¤‡ā¤¨ ā¤‡ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Sign_in_with__provider__": "{{provider}} ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸ā¤žā¤‡ā¤¨ ā¤‡ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "since_creation": "%s ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤¸āĨ‡", + "Site_Name": "ā¤œā¤—ā¤š ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Site_Url": "ā¤¸ā¤žā¤‡ā¤Ÿ URL", + "Site_Url_Description": "ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ: `https://chat.domain.com/`", + "Size": "ā¤†ā¤•ā¤žā¤°", + "Skin_tone": "ā¤¤āĨā¤ĩā¤šā¤ž ā¤•ā¤ž ā¤°ā¤‚ā¤—", "Skip": "ā¤›āĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "SLA_Policy": "ā¤ā¤¸ā¤ā¤˛ā¤ ā¤¨āĨ€ā¤¤ā¤ŋ", + "SLA_Policies": "ā¤ā¤¸ā¤ā¤˛ā¤ ā¤¨āĨ€ā¤¤ā¤ŋā¤¯ā¤žā¤‚", + "SLA_removed": "ā¤ā¤¸ā¤ā¤˛ā¤ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Slack_Users": "ā¤¸āĨā¤˛āĨˆā¤• ā¤•āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨ€ā¤ā¤¸ā¤ĩāĨ€", + "SlackBridge_APIToken": "ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤ŸāĨ‹ā¤•ā¤¨ (ā¤ĩā¤ŋā¤°ā¤žā¤¸ā¤¤)", + "SlackBridge_UseLegacy": "ā¤˛āĨ€ā¤—āĨ‡ā¤¸āĨ€ ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "SlackBridge_APIToken_Description": "ā¤†ā¤Ē ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤Ēā¤‚ā¤•āĨā¤¤ā¤ŋ ā¤ā¤• ā¤ā¤ĒāĨ€ā¤†ā¤ˆ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤œāĨ‹ā¤Ąā¤ŧā¤•ā¤° ā¤ā¤•ā¤žā¤§ā¤ŋā¤• ā¤¸āĨā¤˛āĨˆā¤• ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "SlackBridge_BotToken": "ā¤ŦāĨ‰ā¤Ÿ ā¤ŸāĨ‹ā¤•ā¤¨", + "SlackBridge_BotToken_Description": "ā¤†ā¤Ē ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤Ēā¤‚ā¤•āĨā¤¤ā¤ŋ ā¤ā¤• ā¤ŦāĨ‰ā¤Ÿ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤œāĨ‹ā¤Ąā¤ŧā¤•ā¤° ā¤ā¤•ā¤žā¤§ā¤ŋā¤• ā¤¸āĨā¤˛āĨˆā¤• ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "SlackBridge_AppToken": "ā¤ā¤Ē ā¤ŸāĨ‹ā¤•ā¤¨", + "SlackBridge_AppToken_Description": "ā¤†ā¤Ē ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤Ēā¤‚ā¤•āĨā¤¤ā¤ŋ ā¤ā¤• ā¤ā¤Ē ā¤ŸāĨ‹ā¤•ā¤¨ ā¤œāĨ‹ā¤Ąā¤ŧā¤•ā¤° ā¤ā¤•ā¤žā¤§ā¤ŋā¤• ā¤¸āĨā¤˛āĨˆā¤• ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "SlackBridge_SigningSecret": "ā¤šā¤¸āĨā¤¤ā¤žā¤•āĨā¤ˇā¤° ā¤—āĨā¤ĒāĨā¤¤", + "SlackBridge_SigningSecret_Description": "ā¤†ā¤Ē ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤Ēā¤‚ā¤•āĨā¤¤ā¤ŋ ā¤ā¤• ā¤šā¤¸āĨā¤¤ā¤žā¤•āĨā¤ˇā¤° ā¤°ā¤šā¤¸āĨā¤¯ ā¤œāĨ‹ā¤Ąā¤ŧā¤•ā¤° ā¤ā¤•ā¤žā¤§ā¤ŋā¤• ā¤¸āĨā¤˛āĨˆā¤• ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Slackbridge_channel_links_removed_successfully": "ā¤¸āĨā¤˛āĨˆā¤•ā¤ŦāĨā¤°ā¤ŋā¤œ ā¤šāĨˆā¤¨ā¤˛ ā¤˛ā¤ŋā¤‚ā¤• ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤šāĨˆā¤‚āĨ¤", + "SlackBridge_Description": "ā¤¸āĨā¤˛āĨˆā¤• ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĩā¤žā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ Rocket.Chat ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "SlackBridge_error": "ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ %s ā¤Ēā¤° ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤¸āĨā¤˛āĨˆā¤•ā¤ŦāĨā¤°ā¤ŋā¤œ ā¤•āĨ‹ ā¤ā¤• ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤Žā¤ŋā¤˛āĨ€: %s", + "SlackBridge_finish": "ā¤¸āĨā¤˛āĨˆā¤•ā¤ŦāĨā¤°ā¤ŋā¤œ ā¤¨āĨ‡ %s ā¤Ēā¤° ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•ā¤ž ā¤†ā¤¯ā¤žā¤¤ ā¤ĒāĨ‚ā¤°ā¤ž ā¤•ā¤° ā¤˛ā¤ŋā¤¯ā¤ž ā¤šāĨˆāĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¸ā¤­āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤¨ā¤ƒ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "SlackBridge_Out_All": "ā¤¸āĨā¤˛āĨˆā¤•ā¤ŦāĨā¤°ā¤ŋā¤œ ā¤†ā¤‰ā¤Ÿ ā¤‘ā¤˛", + "SlackBridge_Out_All_Description": "ā¤‰ā¤¨ ā¤¸ā¤­āĨ€ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œāĨ‡ā¤‚ ā¤œāĨ‹ ā¤¸āĨā¤˛āĨˆā¤• ā¤ŽāĨ‡ā¤‚ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤ŦāĨ‰ā¤Ÿ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "SlackBridge_Out_Channels": "ā¤¸āĨā¤˛āĨˆā¤•ā¤ŦāĨā¤°ā¤ŋā¤œ ā¤†ā¤‰ā¤Ÿ ā¤šāĨˆā¤¨ā¤˛", + "SlackBridge_Out_Channels_Description": "ā¤šāĨā¤¨āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤•āĨŒā¤¨ ā¤¸āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨā¤˛āĨˆā¤• ā¤•āĨ‹ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĩā¤žā¤Ēā¤¸ ā¤­āĨ‡ā¤œāĨ‡ā¤‚ā¤—āĨ‡", + "SlackBridge_Out_Enabled": "ā¤¸āĨā¤˛āĨˆā¤•ā¤ŦāĨā¤°ā¤ŋā¤œ ā¤†ā¤‰ā¤Ÿ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "SlackBridge_Out_Enabled_Description": "ā¤šāĨā¤¨āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤•āĨā¤¯ā¤ž ā¤¸āĨā¤˛āĨˆā¤•ā¤ŦāĨā¤°ā¤ŋā¤œ ā¤•āĨ‹ ā¤­āĨ€ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸āĨā¤˛āĨˆā¤• ā¤•āĨ‹ ā¤ĩā¤žā¤Ēā¤¸ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤šā¤žā¤šā¤ŋā¤", + "SlackBridge_Remove_Channel_Links_Description": "ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤”ā¤° ā¤¸āĨā¤˛āĨˆā¤• ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤†ā¤‚ā¤¤ā¤°ā¤ŋā¤• ā¤˛ā¤ŋā¤‚ā¤• ā¤šā¤Ÿā¤žā¤ā¤‚āĨ¤ ā¤Ŧā¤žā¤Ļ ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆā¤¨ā¤˛ ā¤¨ā¤žā¤ŽāĨ‹ā¤‚ ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤˛ā¤ŋā¤‚ā¤• ā¤Ģā¤ŋā¤° ā¤¸āĨ‡ ā¤Ŧā¤¨ā¤žā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "SlackBridge_start": "@%s ā¤¨āĨ‡ `#%s` ā¤Ēā¤° ā¤¸āĨā¤˛āĨˆā¤•ā¤ŦāĨā¤°ā¤ŋā¤œ ā¤†ā¤¯ā¤žā¤¤ ā¤ļāĨā¤°āĨ‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆāĨ¤ ā¤œā¤Ŧ ā¤¯ā¤š ā¤ĒāĨ‚ā¤°ā¤ž ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤ž ā¤¤āĨ‹ ā¤šā¤Ž ā¤†ā¤Ēā¤•āĨ‹ ā¤Ŧā¤¤ā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "Slash_Gimme_Description": "ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ āŧŧツ ◕_◕ āŧŊツ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "Slash_LennyFace_Description": "ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ( ͥ° ͜ʖ ͥ°) ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ", + "Slash_Shrug_Description": "ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ¯\\_(ツ)_/¯ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "Slash_Status_Description": "ā¤…ā¤Ēā¤¨ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Slash_Status_Params": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Slash_Tableflip_Description": "ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ (â•¯Â°â–ĄÂ°īŧ‰â•¯ī¸ĩ â”ģ━â”ģ", + "Slash_TableUnflip_Description": "ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ â”Ŧ─â”Ŧīģŋ ノ( ゜-゜ノ)", + "Slash_Topic_Description": "ā¤ĩā¤ŋā¤ˇā¤¯ ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Slash_Topic_Params": "ā¤ĩā¤ŋā¤ˇā¤¯ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Smarsh": "Smarsh", + "Smarsh_Description": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸ā¤‚ā¤šā¤žā¤° ā¤•āĨ‹ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤°ā¤–ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨.", + "Smarsh_Email": "ā¤¸āĨā¤Žā¤°āĨā¤ļ ā¤ˆā¤ŽāĨ‡ā¤˛", + "Smarsh_Email_Description": ".eml ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤Žā¤°āĨā¤ļ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤žāĨ¤", + "Smarsh_Enabled": "ā¤¸āĨā¤Žā¤°āĨā¤ļ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Smarsh_Enabled_Description": "ā¤•āĨā¤¯ā¤ž ā¤¸āĨā¤Žā¤°āĨā¤ļ ā¤ˆā¤ā¤Žā¤ā¤˛ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿā¤° ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ ā¤¯ā¤ž ā¤¨ā¤šāĨ€ā¤‚ (ā¤ˆā¤ŽāĨ‡ā¤˛ -> ā¤ā¤¸ā¤ā¤Žā¤ŸāĨ€ā¤ĒāĨ€ ā¤•āĨ‡ ā¤¤ā¤šā¤¤ 'ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸āĨ‡' ā¤­ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤œā¤°āĨ‚ā¤°ā¤¤ ā¤šāĨˆ)āĨ¤", + "Smarsh_Interval": "ā¤¸āĨā¤Žā¤°āĨā¤ļ ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛", + "Smarsh_Interval_Description": "ā¤šāĨˆā¤Ÿ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤Žā¤žā¤¤āĨā¤°ā¤ž (ā¤ˆā¤ŽāĨ‡ā¤˛ -> ā¤ā¤¸ā¤ā¤Žā¤ŸāĨ€ā¤ĒāĨ€ ā¤•āĨ‡ ā¤¤ā¤šā¤¤ 'ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸āĨ‡' ā¤­ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ)āĨ¤", + "Smarsh_MissingEmail_Email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤—āĨā¤Ž ā¤šāĨˆ", + "Smarsh_MissingEmail_Email_Description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤–ā¤žā¤¤āĨ‡ ā¤•ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž ā¤—ā¤žā¤¯ā¤Ŧ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤‰ā¤¸āĨ‡ ā¤Ļā¤ŋā¤–ā¤žā¤¯ā¤ž ā¤œā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤†ā¤Ž ā¤¤āĨŒā¤° ā¤Ēā¤° ā¤ŦāĨ‰ā¤Ÿ ā¤–ā¤žā¤¤āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Smarsh_Timezone": "ā¤¸āĨā¤Žā¤°āĨā¤ļ ā¤Ÿā¤žā¤‡ā¤Žā¤œā¤ŧāĨ‹ā¤¨", + "Smileys_and_People": "ā¤¸āĨā¤Žā¤žā¤‡ā¤˛āĨ€ā¤œā¤ŧ ā¤”ā¤° ā¤˛āĨ‹ā¤—", + "SMS": "ā¤ā¤¸ā¤ā¤Žā¤ā¤¸", + "SMS_Description": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤° ā¤ā¤¸ā¤ā¤Žā¤ā¤¸ ā¤—āĨ‡ā¤Ÿā¤ĩāĨ‡ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤”ā¤° ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "SMS_Default_Omnichannel_Department": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĩā¤ŋā¤­ā¤žā¤— (ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ)", + "SMS_Default_Omnichannel_Department_Description": "ā¤¯ā¤Ļā¤ŋ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤‡ā¤¸ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ļāĨā¤°āĨ‚ ā¤•āĨ€ ā¤—ā¤ˆ ā¤¸ā¤­āĨ€ ā¤¨ā¤ˆ ā¤†ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤šāĨˆā¤Ÿ ā¤‡ā¤¸ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤ŽāĨ‡ā¤‚ ā¤­āĨ‡ā¤œ ā¤ĻāĨ€ ā¤œā¤žā¤ā¤‚ā¤—āĨ€āĨ¤\nā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤•āĨā¤ĩāĨ‡ā¤°āĨ€ ā¤ĒāĨˆā¤°ā¤žā¤ŽāĨ€ā¤Ÿā¤° ā¤Ēā¤žā¤¸ ā¤•ā¤°ā¤•āĨ‡ ā¤‡ā¤¸ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤•āĨ‹ ā¤“ā¤ĩā¤°ā¤°ā¤žā¤‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤\nā¤œāĨˆā¤¸āĨ‡ `https://{{SERVER_URL}}/api/v1/livechat/sms-incoming/twilio?department={{Department Id or Name}}`āĨ¤\nā¤¨āĨ‹ā¤Ÿ: ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ē ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤¨ā¤žā¤Ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤¯ā¤š ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤", + "SMS_Enabled": "ā¤ā¤¸ā¤ā¤Žā¤ā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "SMS_Twilio_NotConfigured": "ā¤ŸāĨā¤ĩā¤ŋā¤˛ā¤ŋā¤¯āĨ‹ ā¤ā¤¸ā¤ā¤Žā¤ā¤¸ ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤ ā¤‡ā¤¸āĨ‡ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ -> ā¤ā¤¸ā¤ā¤Žā¤ā¤¸ ā¤Ēā¤° ā¤œā¤žā¤ā¤‚", + "SMS_Twilio_InvalidCredentials": "ā¤ŸāĨā¤ĩā¤ŋā¤˛ā¤ŋā¤¯āĨ‹ ā¤ā¤¸ā¤ā¤Žā¤ā¤¸ ā¤•āĨā¤°āĨ‡ā¤ĄāĨ‡ā¤‚ā¤ļā¤ŋā¤¯ā¤˛ ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤šāĨˆā¤‚, ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤­āĨ‡ā¤œ ā¤¸ā¤•ā¤¤āĨ‡", + "SMTP": "ā¤ā¤¸ā¤ā¤Žā¤ŸāĨ€ā¤ĒāĨ€", + "SMTP_Host": "ā¤ā¤¸ā¤ā¤Žā¤ŸāĨ€ā¤ĒāĨ€ ā¤šāĨ‹ā¤¸āĨā¤Ÿ", + "SMTP_Password": "ā¤ā¤¸ā¤ā¤Žā¤ŸāĨ€ā¤ĒāĨ€ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "SMTP_Port": "ā¤ā¤¸ā¤ā¤Žā¤ŸāĨ€ā¤ĒāĨ€ ā¤ĒāĨ‹ā¤°āĨā¤Ÿ", + "SMTP_Server_Not_Setup_Title": "SMTP ā¤¸ā¤°āĨā¤ĩā¤° ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨā¤† ā¤šāĨˆ", + "SMTP_Server_Not_Setup_Description": "ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤­āĨ‡ā¤œā¤¨ā¤ž ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤¯ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤œāĨ‹ā¤Ąā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨ā¤ž ā¤ā¤¸ā¤ā¤Žā¤ŸāĨ€ā¤ĒāĨ€ ā¤ˆā¤ŽāĨ‡ā¤˛ā¤ŋā¤‚ā¤— ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "SMTP_Test_Button": "ā¤ā¤¸ā¤ā¤Žā¤ŸāĨ€ā¤ĒāĨ€ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "SMTP_Username": "ā¤ā¤¸ā¤ā¤Žā¤ŸāĨ€ā¤ĒāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "Snippet_Added": "%s ā¤Ēā¤° ā¤Ŧā¤¨ā¤žā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Snippet_name": "ā¤¸āĨā¤¨ā¤ŋā¤ĒāĨ‡ā¤Ÿ ā¤¨ā¤žā¤Ž", + "Snippeted_a_message": "ā¤ā¤• ā¤¸āĨā¤¨ā¤ŋā¤ĒāĨ‡ā¤Ÿ {{snippetLink}} ā¤Ŧā¤¨ā¤žā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Social_Network": "ā¤¸ā¤žā¤Žā¤žā¤œā¤ŋā¤• ā¤¨āĨ‡ā¤Ÿā¤ĩā¤°āĨā¤•", + "Some_ideas_to_get_you_started": "ā¤†ā¤Ēā¤•āĨ‹ ā¤†ā¤°ā¤‚ā¤­ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤› ā¤ĩā¤ŋā¤šā¤žā¤°", + "Something_went_wrong": "ā¤•āĨā¤› ā¤—ā¤˛ā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž", + "Something_went_wrong_try_again_later": "ā¤•āĨā¤› ā¤—ā¤˛ā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž, ā¤Ŧā¤žā¤Ļ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Something_went_wrong_while_executing_command": "ā¤•ā¤Žā¤žā¤‚ā¤Ą ā¤¨ā¤ŋā¤ˇāĨā¤Ēā¤žā¤Ļā¤ŋā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤•āĨā¤› ā¤—ā¤˛ā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž: `/{{command}}`", + "Sorry_page_you_requested_does_not_exist_or_was_deleted": "ā¤•āĨā¤ˇā¤Žā¤ž ā¤•ā¤°āĨ‡ā¤‚, ā¤†ā¤Ēā¤•āĨ‡ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ā¤ŋā¤¤ ā¤ĒāĨƒā¤ˇāĨā¤  ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ ā¤¯ā¤ž ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ!", + "Sort": "ā¤•āĨā¤°ā¤Ž ā¤¸āĨ‡ ā¤˛ā¤—ā¤žā¤¨ā¤ž", + "Sort_By": "ā¤‡ā¤¸ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤•āĨā¤°ā¤Žā¤Ŧā¤ĻāĨā¤§ ā¤•ā¤°āĨ‡ā¤‚", + "Sorting_mechanism": "ā¤›ā¤ā¤Ÿā¤žā¤ˆ ā¤¤ā¤‚ā¤¤āĨā¤°", + "Service_level_agreements": "ā¤¸āĨ‡ā¤ĩā¤ž ā¤¸āĨā¤¤ā¤° ā¤…ā¤¨āĨā¤Ŧā¤‚ā¤§", + "Sort_by_activity": "ā¤—ā¤¤ā¤ŋā¤ĩā¤ŋā¤§ā¤ŋ ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤•āĨā¤°ā¤Žā¤Ŧā¤ĻāĨā¤§ ā¤•ā¤°āĨ‡ā¤‚", + "Sound": "ā¤†ā¤ĩā¤žā¤œā¤ŧ", + "Sounds": "ā¤§āĨā¤ĩā¤¨ā¤ŋ", + "Sound_File_mp3": "ā¤§āĨā¤ĩā¤¨ā¤ŋ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ (ā¤ā¤Žā¤ĒāĨ€3)", + "Sound File": "ā¤§āĨā¤ĩā¤¨ā¤ŋ ā¤Ģā¤ŧā¤žā¤‡ā¤˛", + "Source": "ā¤¸āĨā¤°āĨ‹ā¤¤", + "Speakers": "ā¤ĩā¤•āĨā¤¤ā¤žā¤“ā¤‚", + "spy-voip-calls": "ā¤œā¤žā¤¸āĨ‚ā¤¸ ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ‰ā¤˛", + "spy-voip-calls_description": "ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ‰ā¤˛ ā¤•āĨ€ ā¤œā¤žā¤¸āĨ‚ā¤¸āĨ€ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "SSL": "ā¤ā¤¸ā¤ā¤¸ā¤ā¤˛", + "Star": "ā¤¤ā¤žā¤°ā¤ž", + "Star_Message": "ā¤¸ā¤ŋā¤¤ā¤žā¤°ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Starred_Messages": "ā¤¤ā¤žā¤°ā¤žā¤‚ā¤•ā¤ŋā¤¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Start": "ā¤ļāĨā¤°āĨ‚", + "Start_a_call": "ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "Start_a_free_trial": "ā¤¨ā¤ŋā¤ƒā¤ļāĨā¤˛āĨā¤• ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "Start_audio_call": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "Start_call": "ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", "Start_Chat": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤ļāĨā¤°āĨ‚ ", + "Start_conference_call": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "Start_free_trial": "ā¤¨ā¤ŋā¤ļāĨā¤˛āĨā¤• ā¤†ā¤œā¤Žā¤žā¤‡ā¤ļ ā¤ļāĨā¤°āĨ ā¤•ā¤°āĨ‡ā¤‚", + "Start_of_conversation": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ€ ā¤ļāĨā¤°āĨā¤†ā¤¤", + "Start_OTR": "ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "Start_video_call": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚", + "Start_video_conference": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚?", + "Start_with_s_for_user_or_s_for_channel_Eg_s_or_s": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ %s ā¤¯ā¤ž ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ %s ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤œāĨˆā¤¸āĨ‡: %s ā¤¯ā¤ž %s", + "start-discussion": "ā¤šā¤°āĨā¤šā¤ž ā¤šā¤˛ā¤žā¤¨ā¤ž", + "start-discussion_description": "ā¤šā¤°āĨā¤šā¤ž ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "start-discussion-other-user": "ā¤šā¤°āĨā¤šā¤ž ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°āĨ‡ā¤‚ (ā¤…ā¤¨āĨā¤¯-ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž)", + "start-discussion-other-user_description": "ā¤šā¤°āĨā¤šā¤ž ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ, ā¤œāĨ‹ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤•ā¤ŋā¤¸āĨ€ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤­āĨ‡ā¤œāĨ‡ ā¤—ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸āĨ‡ ā¤­āĨ€ ā¤šā¤°āĨā¤šā¤ž ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤āĨ€ ā¤šāĨˆ", + "Started": "ā¤ļāĨā¤°āĨ‚ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž", + "Started_a_video_call": "ā¤ā¤• ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤ļāĨā¤°āĨ‚ ā¤•āĨ€", + "Started_At": "ā¤‡ā¤¸ ā¤¸ā¤Žā¤¯ ā¤Ēā¤° ā¤ļāĨā¤°āĨ‚ ā¤•ā¤ŋā¤¯ā¤ž", + "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_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_Messages_Discussions": "ā¤šā¤°āĨā¤šā¤žā¤“ā¤‚ ā¤ŽāĨ‡ā¤‚", + "Stats_Total_Outgoing_Integrations": "ā¤•āĨā¤˛ ā¤†ā¤‰ā¤Ÿā¤—āĨ‹ā¤‡ā¤‚ā¤— ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ", + "Stats_Total_Private_Groups": "ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤š", + "Stats_Total_Rooms": "ā¤•ā¤Žā¤°ā¤ž", + "Stats_Total_Uploads": "ā¤•āĨā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą", + "Stats_Total_Uploads_Size": "ā¤•āĨā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤†ā¤•ā¤žā¤°", + "Stats_Total_Users": "ā¤•āĨā¤˛ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Status": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "StatusMessage": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "StatusMessage_Change_Disabled": "ā¤†ā¤Ēā¤•āĨ‡ Rocket.Chat ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¨āĨ‡ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ŧā¤Ļā¤˛ā¤¨ā¤ž ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤šāĨˆ", + "StatusMessage_Changed_Successfully": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤Ļā¤˛ā¤ž ā¤—ā¤¯ā¤ž.", + "StatusMessage_Placeholder": "ā¤†ā¤Ē ā¤…ā¤­āĨ€ ā¤•āĨā¤¯ā¤ž ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚?", + "StatusMessage_Too_Long": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ 120 ā¤…ā¤•āĨā¤ˇā¤°āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤›āĨ‹ā¤Ÿā¤ž ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤.", + "Step": "ā¤•ā¤Ļā¤Ž", + "Stop_call": "ā¤•āĨ‰ā¤˛ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‹", + "Stop_Recording": "ā¤°ā¤ŋā¤•āĨ‰ā¤°āĨā¤Ąā¤ŋā¤‚ā¤— ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Store_Last_Message": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Store_Last_Message_Sent_per_Room": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤•ā¤Žā¤°āĨ‡ ā¤Ēā¤° ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Stream_Cast": "ā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤•ā¤žā¤¸āĨā¤Ÿ", + "Stream_Cast_Address": "ā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤•ā¤žā¤¸āĨā¤Ÿ ā¤Ēā¤¤ā¤ž", + "Stream_Cast_Address_Description": "ā¤†ā¤Ēā¤•āĨ‡ ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤¸āĨ‡ā¤‚ā¤ŸāĨā¤°ā¤˛ ā¤¸āĨā¤ŸāĨā¤°āĨ€ā¤Ž ā¤•ā¤žā¤¸āĨā¤Ÿ ā¤•ā¤ž ā¤†ā¤ˆā¤ĒāĨ€ ā¤¯ā¤ž ā¤šāĨ‹ā¤¸āĨā¤ŸāĨ¤ ā¤œāĨˆā¤¸āĨ‡ `192.168.1.1:3000` ā¤¯ā¤ž `ā¤˛āĨ‹ā¤•ā¤˛ā¤šāĨ‹ā¤¸āĨā¤Ÿ:4000`", + "Strike": "ā¤šā¤Ąā¤ŧā¤¤ā¤žā¤˛", + "Style": "ā¤ļāĨˆā¤˛āĨ€", + "Subject": "ā¤ĩā¤ŋā¤ˇā¤¯", + "Submit": "ā¤œā¤Žā¤ž ā¤•ā¤°ā¤¨ā¤ž", + "Subscribe": "ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž ā¤˛āĨ‡ā¤‚", + "Success": "ā¤¸ā¤Ģā¤˛ā¤¤ā¤ž", + "Success_message": "ā¤¸ā¤Ģā¤˛ā¤¤ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Successfully_downloaded_file_from_external_URL_should_start_preparing_soon": "ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¸āĨ‡ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤šāĨ‹ ā¤—ā¤ˆ ā¤šāĨˆ, ā¤œā¤˛āĨā¤Ļ ā¤šāĨ€ ā¤¤āĨˆā¤¯ā¤žā¤°āĨ€ ā¤ļāĨā¤°āĨ‚ ā¤•ā¤° ā¤ĻāĨ‡ā¤¨āĨ€ ā¤šā¤žā¤šā¤ŋā¤", + "Suggestion_from_recent_messages": "ā¤šā¤žā¤˛ ā¤•āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤¸āĨ‡ ā¤¸āĨā¤ā¤žā¤ĩ", + "Sunday": "ā¤°ā¤ĩā¤ŋā¤ĩā¤žā¤°", + "Support": "ā¤¸ā¤šā¤žā¤¯ā¤¤ā¤ž", "Survey": "ā¤¸ā¤°āĨā¤ĩāĨ‡ā¤•āĨā¤ˇā¤Ŗ", "Survey_instructions": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤ĒāĨā¤°ā¤ļāĨā¤¨ ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ€ ā¤¸ā¤‚ā¤¤āĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤°āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚, 1 ā¤Žā¤¤ā¤˛ā¤Ŧ ā¤•ā¤ŋ ā¤†ā¤Ē ā¤ĒāĨ‚ā¤°āĨ€ ā¤¤ā¤°ā¤š ā¤¸āĨ‡ ā¤…ā¤¸ā¤‚ā¤¤āĨā¤ˇāĨā¤Ÿ ā¤šāĨˆā¤‚ ā¤”ā¤° 5 ā¤•ā¤ž ā¤…ā¤°āĨā¤Ĩ ā¤šāĨˆ ā¤•ā¤ŋ ā¤†ā¤Ē ā¤ĒāĨ‚ā¤°āĨ€ ā¤¤ā¤°ā¤š ā¤¸āĨ‡ ā¤¸ā¤‚ā¤¤āĨā¤ˇāĨā¤Ÿ ā¤šāĨˆā¤‚āĨ¤", + "Symbols": "ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•", + "Sync": "ā¤¸ā¤žā¤Ĩ-ā¤¸ā¤žā¤Ĩ ā¤•ā¤°ā¤¨ā¤ž", + "Sync / Import": "ā¤¸ā¤ŋā¤‚ā¤•/ā¤†ā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Sync_in_progress": "ā¤¤āĨā¤˛āĨā¤¯ā¤•ā¤žā¤˛ā¤¨ ā¤ĒāĨā¤°ā¤—ā¤¤ā¤ŋ ā¤Ēā¤° ā¤šāĨˆ", + "Sync_Interval": "ā¤…ā¤‚ā¤¤ā¤°ā¤žā¤˛ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°ā¤¨ā¤ž", + "Sync_success": "ā¤¸ā¤Žā¤¨āĨā¤ĩā¤¯ā¤¨ ā¤¸ā¤Ģā¤˛", + "Sync_Users": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "sync-auth-services-users": "ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "sync-auth-services-users_description": "ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "System_messages": "ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Tag": "ā¤ŸāĨˆā¤—", + "Tags": "ā¤ŸāĨˆā¤—", + "Tag_removed": "ā¤ŸāĨˆā¤— ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Tag_already_exists": "ā¤ŸāĨˆā¤— ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "Take_it": "ā¤‡ā¤¸āĨ‡ ā¤˛āĨ‡ā¤‚!", + "Take_rocket_chat_with_you_with_mobile_applications": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ Rocket.Chat ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤˛āĨ‡ ā¤œā¤žā¤ā¤‚āĨ¤", + "Taken_at": "ā¤Ēā¤° ā¤˛ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Talk_Time": "ā¤Ŧā¤žā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤¸ā¤Žā¤¯", + "Talk_to_an_expert": "ā¤•ā¤ŋā¤¸āĨ€ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤œāĨā¤ž ā¤¸āĨ‡ ā¤Ŧā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Talk_to_sales": "ā¤Ŧā¤ŋā¤•āĨā¤°āĨ€ ā¤¸āĨ‡ ā¤Ŧā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Talk_to_your_workspace_administrator_about_enabling_video_conferencing": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤¨āĨā¤ĢāĨā¤°āĨ‡ā¤‚ā¤¸ā¤ŋā¤‚ā¤— ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¸āĨ‡ ā¤Ŧā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Talk_to_your_workspace_admin_to_address_this_issue": "ā¤‡ā¤¸ ā¤¸ā¤Žā¤¸āĨā¤¯ā¤ž ā¤•āĨ‡ ā¤¸ā¤Žā¤žā¤§ā¤žā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¸āĨ‡ ā¤Ŧā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Target user not allowed to receive messages": "ā¤˛ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "TargetRoom": "ā¤˛ā¤•āĨā¤ˇāĨā¤¯ ā¤•ā¤•āĨā¤ˇ", + "TargetRoom_Description": "ā¤ĩā¤š ā¤•ā¤Žā¤°ā¤ž ā¤œā¤šā¤žā¤‚ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œāĨ‡ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡ ā¤œāĨ‹ ā¤‡ā¤¸ ā¤˜ā¤Ÿā¤¨ā¤ž ā¤•āĨ‡ ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤Žā¤¸āĨā¤ĩā¤°āĨ‚ā¤Ē ā¤¨ā¤ŋā¤•ā¤žā¤˛ ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤šāĨˆā¤‚āĨ¤ ā¤•āĨ‡ā¤ĩā¤˛ ā¤ā¤• ā¤˛ā¤•āĨā¤ˇāĨā¤¯ ā¤•ā¤•āĨā¤ˇ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤šāĨˆ ā¤”ā¤° ā¤ĩā¤š ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤°ā¤šā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤", + "Team": "ā¤ŸāĨ€ā¤Ž", + "Team_Add_existing_channels": "ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤šāĨˆā¤¨ā¤˛ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Team_Add_existing": "ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Team_Auto-join": "ā¤‘ā¤ŸāĨ‹ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤‚", + "Team_Channels": "ā¤ŸāĨ€ā¤Ž ā¤šāĨˆā¤¨ā¤˛", + "Team_Delete_Channel_modal_content_danger": "ā¤‡ā¤¸āĨ‡ ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤ĩā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž.", + "Team_Delete_Channel_modal_content": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤šā¤žā¤šāĨ‡ā¤‚ā¤—āĨ‡?", + "Team_has_been_created": "ā¤ŸāĨ€ā¤Ž ā¤Ŧā¤¨ā¤žā¤ˆ ā¤—ā¤ˆ ā¤šāĨˆ", + "Team_has_been_deleted": "ā¤ŸāĨ€ā¤Ž ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤—ā¤ˆ ā¤šāĨˆ", + "Team_Info": "ā¤ŸāĨ€ā¤Ž ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Team_Mapping": "ā¤ŸāĨ€ā¤Ž ā¤ŽāĨˆā¤Ēā¤ŋā¤‚ā¤—", + "Team_Name": "ā¤ŸāĨ€ā¤Ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "Team_Remove_from_team_modal_content": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ {{teamName}} ā¤¸āĨ‡ ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤šā¤žā¤šāĨ‡ā¤‚ā¤—āĨ‡? ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤ĩā¤žā¤Ēā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‡ ā¤œā¤žā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž.", + "Team_Remove_from_team": "ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‡ ā¤šā¤Ÿā¤žā¤“", + "Team_what_is_this_team_about": "ā¤¯ā¤š ā¤ŸāĨ€ā¤Ž ā¤•ā¤ŋā¤¸ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ", + "Teams": "ā¤ŸāĨ€ā¤ŽāĨ‡ā¤‚", + "Teams_about_the_channels": "ā¤”ā¤° ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚?", + "Teams_channels_didnt_leave": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ ā¤‡ā¤¸ā¤˛ā¤ŋā¤ ā¤†ā¤Ē ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚:", + "Teams_channels_last_owner_delete_channel_warning": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤Žā¤žā¤˛ā¤ŋā¤• ā¤šāĨˆā¤‚. ā¤ā¤• ā¤Ŧā¤žā¤° ā¤œā¤Ŧ ā¤†ā¤Ē ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛ ā¤ĻāĨ‡ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‡ ā¤œā¤žā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Teams_channels_last_owner_leave_channel_warning": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤Žā¤žā¤˛ā¤ŋā¤• ā¤šāĨˆā¤‚. ā¤ā¤• ā¤Ŧā¤žā¤° ā¤œā¤Ŧ ā¤†ā¤Ē ā¤ŸāĨ€ā¤Ž ā¤›āĨ‹ā¤Ąā¤ŧ ā¤ĻāĨ‡ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤šāĨˆā¤¨ā¤˛ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤…ā¤‚ā¤Ļā¤° ā¤°ā¤–ā¤ž ā¤œā¤žā¤ā¤—ā¤ž ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤†ā¤Ē ā¤‡ā¤¸āĨ‡ ā¤Ŧā¤žā¤šā¤° ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ā¤—āĨ‡āĨ¤", + "Teams_leaving_team": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚.", + "Teams_channels": "ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤šāĨˆā¤¨ā¤˛", + "Teams_convert_channel_to_team": "ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤•ā¤¨ā¤ĩā¤°āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Teams_delete_team_choose_channels": "ā¤ĩāĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤šāĨā¤¨āĨ‡ā¤‚ ā¤œā¤ŋā¤¨āĨā¤šāĨ‡ā¤‚ ā¤†ā¤Ē ā¤šā¤Ÿā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤œā¤ŋā¤¨āĨā¤šāĨ‡ā¤‚ ā¤†ā¤Ē ā¤°ā¤–ā¤¨āĨ‡ ā¤•ā¤ž ā¤¨ā¤ŋā¤°āĨā¤Ŗā¤¯ ā¤˛āĨ‡ā¤‚ā¤—āĨ‡, ā¤ĩāĨ‡ ā¤†ā¤Ēā¤•āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤°ā¤šāĨ‡ā¤‚ā¤—āĨ‡āĨ¤", + "Teams_delete_team_public_notice": "ā¤§āĨā¤¯ā¤žā¤¨ ā¤ĻāĨ‡ā¤‚ ā¤•ā¤ŋ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤…ā¤­āĨ€ ā¤­āĨ€ ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤°ā¤šāĨ‡ā¤‚ā¤—āĨ‡ ā¤”ā¤° ā¤¸ā¤­āĨ€ ā¤•āĨ‹ ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ‡ā¤‚ā¤—āĨ‡āĨ¤", + "Teams_delete_team_Warning": "ā¤ā¤• ā¤Ŧā¤žā¤° ā¤œā¤Ŧ ā¤†ā¤Ē ā¤•ā¤ŋā¤¸āĨ€ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤šā¤Ÿā¤ž ā¤ĻāĨ‡ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤¸ā¤­āĨ€ ā¤šāĨˆā¤Ÿ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤”ā¤° ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤ ā¤œā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "Teams_delete_team": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤šāĨˆā¤‚.", + "Teams_deleted_channels": "ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤šāĨˆā¤¨ā¤˛ ā¤šā¤Ÿā¤žā¤ ā¤œā¤ž ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚:", + "Teams_Errors_Already_exists": "ā¤ŸāĨ€ā¤Ž `{{name}}` ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆāĨ¤", + "Teams_Errors_team_name": "ā¤†ā¤Ē ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤¨ā¤žā¤Ž ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ \"{{name}}\" ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡āĨ¤", + "Teams_move_channel_to_team": "ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤ā¤", + "Teams_move_channel_to_team_description_first": "ā¤•ā¤ŋā¤¸āĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤…ā¤‚ā¤Ļā¤° ā¤˛āĨ‡ ā¤œā¤žā¤¨āĨ‡ ā¤•ā¤ž ā¤Žā¤¤ā¤˛ā¤Ŧ ā¤šāĨˆ ā¤•ā¤ŋ ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‹ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤¸ā¤‚ā¤Ļā¤°āĨā¤­ ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤œā¤žā¤ā¤—ā¤ž, ā¤šā¤žā¤˛ā¤žā¤‚ā¤•ā¤ŋ, ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤¸ā¤Ļā¤¸āĨā¤¯, ā¤œāĨ‹ ā¤¸ā¤‚ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚, ā¤‰ā¤¨ā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤…ā¤­āĨ€ ā¤­āĨ€ ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤šāĨ‹ā¤—āĨ€, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Teams_move_channel_to_team_description_second": "ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤¸ā¤žā¤°ā¤ž ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤…ā¤­āĨ€ ā¤­āĨ€ ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤Žā¤žā¤˛ā¤ŋā¤•āĨ‹ā¤‚ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Teams_move_channel_to_team_description_third": "ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤”ā¤° ā¤¯ā¤šā¤žā¤‚ ā¤¤ā¤• ā¤•ā¤ŋ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤Žā¤žā¤˛ā¤ŋā¤•, ā¤¯ā¤Ļā¤ŋ ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ€ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤¨ā¤šāĨ€ā¤‚ ā¤Ēā¤ž ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Teams_move_channel_to_team_description_fourth": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤§āĨā¤¯ā¤žā¤¨ ā¤ĻāĨ‡ā¤‚ ā¤•ā¤ŋ ā¤ŸāĨ€ā¤Ž ā¤•ā¤ž ā¤Žā¤žā¤˛ā¤ŋā¤• ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤¸ā¤•āĨ‡ā¤—ā¤žāĨ¤", + "Teams_move_channel_to_team_confirm_description": "ā¤‡ā¤¸ ā¤ĩāĨā¤¯ā¤ĩā¤šā¤žā¤° ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‹ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ, ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤°ā¤ĩā¤žā¤ˆ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤†ā¤—āĨ‡ ā¤Ŧā¤ĸā¤ŧā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Teams_New_Title": "ā¤ŸāĨ€ā¤Ž ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Teams_New_Name_Label": "ā¤¨ā¤žā¤Ž", + "Teams_Info": "ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‚ā¤šā¤¨ā¤ž", + "Teams_kept_channels": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ ā¤‡ā¤¸ā¤˛ā¤ŋā¤ ā¤‰ā¤¨āĨā¤šāĨ‡ā¤‚ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‡ ā¤œā¤žā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž:", + "Teams_kept__username__channels": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ ā¤‡ā¤¸ā¤˛ā¤ŋā¤ ā¤‰ā¤¨ ā¤Ēā¤° {{username}} ā¤°ā¤–ā¤ž ā¤œā¤žā¤ā¤—ā¤ž:", + "Teams_leave_channels": "ā¤‰ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤šā¤¯ā¤¨ ā¤•ā¤°āĨ‡ā¤‚ ā¤œā¤ŋā¤¸āĨ‡ ā¤†ā¤Ē ā¤›āĨ‹ā¤Ąā¤ŧā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Teams_leave": "ā¤ŸāĨ€ā¤Ž ā¤›āĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Teams_left_team_successfully": "ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤›āĨ‹ā¤Ąā¤ŧ ā¤Ļā¤ŋā¤¯ā¤ž", + "Teams_members": "ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯", + "Teams_New_Add_members_Label": "ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Teams_New_Broadcast_Description": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤…ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤šāĨ€ ā¤¨ā¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤˛ā¤ŋā¤– ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĻāĨ‡ ā¤¸ā¤•āĨ‡ā¤‚ā¤—āĨ‡", + "Teams_New_Broadcast_Label": "ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ", + "Teams_New_Description_Label": "ā¤ĩā¤ŋā¤ˇā¤¯", + "Teams_New_Description_Placeholder": "ā¤¯ā¤š ā¤ŸāĨ€ā¤Ž ā¤•ā¤ŋā¤¸ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ", + "Teams_New_Encrypted_Description_Disabled": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤¨ā¤ŋā¤œāĨ€ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆ", + "Teams_New_Encrypted_Description_Enabled": "ā¤ā¤‚ā¤Ą-ā¤ŸāĨ‚-ā¤ā¤‚ā¤Ą ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤ŸāĨ€ā¤ŽāĨ¤ ā¤–āĨ‹ā¤œ ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ŸāĨ‡ā¤Ą ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤•ā¤žā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°āĨ‡ā¤—āĨ€ ā¤”ā¤° ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤Ļā¤ŋā¤–ā¤ž ā¤¸ā¤•ā¤¤āĨ€ ā¤šāĨˆā¤‚āĨ¤", + "Teams_New_Encrypted_Label": "ā¤•āĨ‚ā¤Ÿ ā¤°āĨ‚ā¤Ē ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Teams_New_Private_Description_Disabled": "ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Teams_New_Private_Description_Enabled": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤˛āĨ‹ā¤— ā¤šāĨ€ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Teams_New_Private_Label": "ā¤¨ā¤ŋā¤œāĨ€", + "Teams_New_Read_only_Description": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤˛ā¤ŋā¤– ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Teams_Public_Team": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤ŸāĨ€ā¤Ž", + "Teams_Private_Team": "ā¤¨ā¤ŋā¤œāĨ€ ā¤ŸāĨ€ā¤Ž", + "Teams_removing_member": "ā¤¸ā¤Ļā¤¸āĨā¤¯ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¯ā¤ž ā¤œā¤ž ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Teams_removing__username__from_team": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‡ {{username}} ā¤šā¤Ÿā¤ž ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚", + "Teams_removing__username__from_team_and_channels": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤”ā¤° ā¤‡ā¤¸ā¤•āĨ‡ ā¤¸ā¤­āĨ€ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤¸āĨ‡ {{username}} ā¤šā¤Ÿā¤ž ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Teams_Select_a_team": "ā¤ā¤• ā¤ŸāĨ€ā¤Ž ā¤šāĨā¤¨āĨ‡ā¤‚", + "Teams_Search_teams": "ā¤–āĨ‹ā¤œ ā¤Ļā¤˛", + "Teams_New_Read_only_Label": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤", + "Technology_Services": "ā¤ĒāĨā¤°āĨŒā¤ĻāĨā¤¯āĨ‹ā¤—ā¤ŋā¤•āĨ€ ā¤¸āĨ‡ā¤ĩā¤žā¤ā¤", + "Terms": "ā¤ļā¤°āĨā¤¤āĨ‡ā¤‚", + "Terms_of_use": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ€ ā¤ļā¤°āĨā¤¤āĨ‡ā¤‚", + "Test_Connection": "ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨", + "Test_Desktop_Notifications": "ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "Test_LDAP_Search": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤–āĨ‹ā¤œ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "test-admin-options": "ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤ĒāĨˆā¤¨ā¤˛ ā¤Ēā¤° ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē", + "test-admin-options_description": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤œāĨˆā¤¸āĨ‡ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤ĒāĨˆā¤¨ā¤˛ ā¤Ēā¤° ā¤ĩā¤ŋā¤•ā¤˛āĨā¤ĒāĨ‹ā¤‚ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋāĨ¤", + "test-push-notifications": "ā¤ĒāĨā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "test-push-notifications_description": "ā¤ĒāĨā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Texts": "ā¤—āĨā¤°ā¤‚ā¤ĨāĨ‹ā¤‚", "Thank_you_for_your_feedback": "ā¤†ā¤Ēā¤•āĨ€ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•ā¤ž ā¤§ā¤¨āĨā¤¯ā¤ĩā¤žā¤Ļ", + "The_application_name_is_required": "ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ", + "The_application_will_be_able_to": "<1>{{appName}} ā¤¯ā¤š ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤—ā¤ž:", + "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 ā¤¯ā¤ž ā¤—āĨā¤°ā¤žā¤Ģā¤ŧā¤ŋā¤•āĨā¤¸Magick ā¤•ā¤ž ā¤Ēā¤¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤˛ā¤—ā¤ž ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "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": "ā¤°āĨ€ā¤Ąā¤žā¤¯ā¤°āĨ‡ā¤•āĨā¤Ÿā¤¯āĨ‚ā¤°āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ", + "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_wont_be_able_to_type_in_s": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž %s ā¤Ÿā¤žā¤‡ā¤Ē ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤—ā¤ž", + "The_workspace_has_exceeded_the_monthly_limit_of_active_contacts": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤•āĨ‹ā¤‚ ā¤•āĨ€ ā¤Žā¤žā¤¸ā¤ŋā¤• ā¤¸āĨ€ā¤Žā¤ž ā¤•āĨ‹ ā¤Ēā¤žā¤° ā¤•ā¤° ā¤—ā¤¯ā¤ž ā¤šāĨˆ.", + "Theme": "ā¤ĩā¤ŋā¤ˇā¤¯", + "Themes": "ā¤ĩā¤ŋā¤ˇā¤¯-ā¤ĩā¤¸āĨā¤¤āĨ", + "Choose_theme_description": "ā¤ĩā¤š ā¤‡ā¤‚ā¤Ÿā¤°ā¤Ģā¤ŧāĨ‡ā¤¸ ā¤¸āĨā¤ĩā¤°āĨ‚ā¤Ē ā¤šāĨā¤¨āĨ‡ā¤‚ ā¤œāĨ‹ ā¤†ā¤Ēā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨā¤•āĨā¤¤ ā¤šāĨ‹āĨ¤", + "theme-color-attention-color": "ā¤§āĨā¤¯ā¤žā¤¨ ā¤ĻāĨ‡ā¤‚ ā¤°ā¤‚ā¤—", + "theme-color-component-color": "ā¤˜ā¤Ÿā¤• ā¤°ā¤‚ā¤—", + "theme-color-content-background-color": "ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤°ā¤‚ā¤—", + "theme-color-custom-scrollbar-color": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨā¤•āĨā¤°āĨ‰ā¤˛ā¤Ŧā¤žā¤° ā¤°ā¤‚ā¤—", + "theme-color-error-color": "ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤°ā¤‚ā¤—", + "theme-color-info-font-color": "ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤Ģā¤ŧāĨ‰ā¤¨āĨā¤Ÿ ā¤°ā¤‚ā¤—", + "theme-color-link-font-color": "ā¤˛ā¤ŋā¤‚ā¤• ā¤Ģā¤ŧāĨ‰ā¤¨āĨā¤Ÿ ā¤°ā¤‚ā¤—", + "theme-color-pending-color": "ā¤˛ā¤‚ā¤Ŧā¤ŋā¤¤ ā¤°ā¤‚ā¤—", + "theme-color-primary-action-color": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤• ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤°ā¤‚ā¤—", + "theme-color-primary-background-color": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤• ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤°ā¤‚ā¤—", + "theme-color-primary-font-color": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤• ā¤Ģā¤ŧāĨ‰ā¤¨āĨā¤Ÿ ā¤°ā¤‚ā¤—", + "theme-color-rc-color-alert": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€", + "theme-color-rc-color-alert-light": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ ā¤ĒāĨā¤°ā¤•ā¤žā¤ļ", + "theme-color-rc-color-alert-message-primary": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•", + "theme-color-rc-color-alert-message-primary-background": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤• ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ", + "theme-color-rc-color-alert-message-secondary": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Žā¤žā¤§āĨā¤¯ā¤Žā¤ŋā¤•", + "theme-color-rc-color-alert-message-secondary-background": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ā¤• ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ", + "theme-color-rc-color-alert-message-warning": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€", + "theme-color-rc-color-alert-message-warning-background": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€ ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ", + "theme-color-rc-color-announcement-text": "ā¤˜āĨ‹ā¤ˇā¤Ŗā¤ž ā¤Ēā¤žā¤  ā¤•ā¤ž ā¤°ā¤‚ā¤—", + "theme-color-rc-color-announcement-background": "ā¤˜āĨ‹ā¤ˇā¤Ŗā¤ž ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤°ā¤‚ā¤—", + "theme-color-rc-color-announcement-text-hover": "ā¤˜āĨ‹ā¤ˇā¤Ŗā¤ž ā¤Ēā¤žā¤  ā¤°ā¤‚ā¤— ā¤šāĨ‹ā¤ĩā¤°", + "theme-color-rc-color-announcement-background-hover": "ā¤˜āĨ‹ā¤ˇā¤Ŗā¤ž ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤°ā¤‚ā¤— ā¤šāĨ‹ā¤ĩā¤°", + "theme-color-rc-color-button-primary": "ā¤Ŧā¤Ÿā¤¨ ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•", + "theme-color-rc-color-button-primary-light": "ā¤Ŧā¤Ÿā¤¨ ā¤ĒāĨā¤°ā¤žā¤‡ā¤Žā¤°āĨ€ ā¤˛ā¤žā¤‡ā¤Ÿ", + "theme-color-rc-color-content": "ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€", + "theme-color-rc-color-error": "ā¤—ā¤˛ā¤¤āĨ€", + "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": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤• ā¤ĒāĨā¤°ā¤•ā¤žā¤ļ", + "theme-color-rc-color-primary-light-medium": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤• ā¤ĒāĨā¤°ā¤•ā¤žā¤ļ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž", + "theme-color-rc-color-primary-lightest": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤• ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤šā¤˛āĨā¤•ā¤ž", + "theme-color-rc-color-success": "ā¤¸ā¤Ģā¤˛ā¤¤ā¤ž", + "theme-color-rc-color-success-light": "ā¤¸ā¤Ģā¤˛ā¤¤ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤ļ", + "theme-color-secondary-action-color": "ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ā¤• ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤°ā¤‚ā¤—", + "theme-color-secondary-background-color": "ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ā¤• ā¤ĒāĨƒā¤ˇāĨā¤ ā¤­āĨ‚ā¤Žā¤ŋ ā¤°ā¤‚ā¤—", + "theme-color-secondary-font-color": "ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ā¤• ā¤Ģā¤ŧāĨ‰ā¤¨āĨā¤Ÿ ā¤°ā¤‚ā¤—", + "theme-color-selection-color": "ā¤šā¤¯ā¤¨ ā¤°ā¤‚ā¤—", + "theme-color-status-away": "ā¤ĻāĨ‚ā¤° ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤°ā¤‚ā¤—", + "theme-color-status-busy": "ā¤ĩāĨā¤¯ā¤¸āĨā¤¤ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤°ā¤‚ā¤—", + "theme-color-status-offline": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤°ā¤‚ā¤—", + "theme-color-status-online": "ā¤‘ā¤¨ā¤˛ā¤žā¤‡ā¤¨ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤•ā¤ž ā¤°ā¤‚ā¤—", + "theme-color-success-color": "ā¤¸ā¤Ģā¤˛ā¤¤ā¤ž ā¤•ā¤ž ā¤°ā¤‚ā¤—", + "theme-color-transparent-dark": "ā¤Ēā¤žā¤°ā¤Ļā¤°āĨā¤ļāĨ€ ā¤…ā¤‚ā¤§āĨ‡ā¤°ā¤ž", + "theme-color-transparent-darker": "ā¤Ēā¤žā¤°ā¤Ļā¤°āĨā¤ļāĨ€ ā¤—ā¤šā¤°ā¤ž", + "theme-color-transparent-lightest": "ā¤Ēā¤žā¤°ā¤Ļā¤°āĨā¤ļāĨ€ ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤šā¤˛āĨā¤•ā¤ž", + "theme-color-unread-notification-color": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤°ā¤‚ā¤—", + "theme-custom-css": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨ€ā¤ā¤¸ā¤ā¤¸", + "theme-font-body-font-family": "ā¤ŦāĨ‰ā¤ĄāĨ€ ā¤Ģā¤ŧāĨ‰ā¤¨āĨā¤Ÿ ā¤Ēā¤°ā¤ŋā¤ĩā¤žā¤°", + "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_rooms_for_the_given_search_criteria": "ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤–āĨ‹ā¤œ ā¤Žā¤žā¤¨ā¤Ļā¤‚ā¤Ą ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‹ā¤ˆ ā¤œā¤—ā¤š ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "There_are_no_users_in_this_role": "ā¤‡ā¤¸ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‹ā¤ˆ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ.", + "There_is_no_video_conference_history_in_this_room": "ā¤‡ā¤¸ ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‹ā¤ˆ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "There_is_one_or_more_apps_in_an_invalid_state_Click_here_to_review": "ā¤ā¤• ā¤¯ā¤ž ā¤…ā¤§ā¤ŋā¤• ā¤ā¤ĒāĨā¤¸ ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆā¤‚. ā¤¸ā¤ŽāĨ€ā¤•āĨā¤ˇā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚.", + "There_has_been_an_error_installing_the_app": "ā¤ā¤Ē ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤šāĨā¤ˆ ā¤šāĨˆ", + "These_notes_will_be_available_in_the_call_summary": "ā¤¯āĨ‡ ā¤¨āĨ‹ā¤ŸāĨā¤¸ ā¤•āĨ‰ā¤˛ ā¤¸ā¤žā¤°ā¤žā¤‚ā¤ļ ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨ‹ā¤‚ā¤—āĨ‡", + "This_agent_was_already_selected": "ā¤¯ā¤š ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤šāĨ‹ ā¤šāĨā¤•ā¤ž ā¤Ĩā¤ž", + "this_app_is_included_with_subscription": "ā¤¯ā¤š ā¤ā¤Ē {{bundleName}} ā¤¯āĨ‹ā¤œā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨˆ", + "This_cant_be_undone": "ā¤‡ā¤¸āĨ‡ ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤ĩā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž.", + "This_conversation_is_already_closed": "ā¤¯ā¤š ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨ‹ ā¤šāĨā¤•āĨ€ ā¤šāĨˆ.", + "This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password": "ā¤¯ā¤š ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤šāĨā¤•ā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ. ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚.", + "This_feature_is_currently_in_alpha": "ā¤¯ā¤š ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤Ģā¤ŋā¤˛ā¤šā¤žā¤˛ ā¤…ā¤˛āĨā¤Ģā¤ŧā¤ž ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ!", + "This_is_a_desktop_notification": "ā¤¯ā¤š ā¤ā¤• ā¤ĄāĨ‡ā¤¸āĨā¤•ā¤ŸāĨ‰ā¤Ē ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤šāĨˆ", + "This_is_a_deprecated_feature_alert": "ā¤¯ā¤š ā¤ā¤• ā¤Ŧā¤šā¤ŋā¤ˇāĨā¤•āĨƒā¤¤ ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤šāĨˆ. ā¤¯ā¤š ā¤‰ā¤ŽāĨā¤ŽāĨ€ā¤Ļ ā¤•āĨ‡ ā¤ŽāĨā¤¤ā¤žā¤Ŧā¤ŋā¤• ā¤•ā¤žā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤—ā¤ž ā¤”ā¤° ā¤¨ā¤ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛āĨ‡ā¤‚ā¤—āĨ‡āĨ¤", + "Zapier_integration_has_been_deprecated": "ā¤œāĨˆā¤Ēā¤ŋā¤¯ā¤° ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ‹ ā¤…ā¤ĒāĨā¤°ā¤šā¤˛ā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ, ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤¯ā¤š ā¤…ā¤ĒāĨ‡ā¤•āĨā¤ˇā¤ž ā¤•āĨ‡ ā¤…ā¤¨āĨā¤°āĨ‚ā¤Ē ā¤•ā¤žā¤Ž ā¤¨ ā¤•ā¤°āĨ‡ ā¤”ā¤° ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¨ ā¤šāĨ‹", + "Install_Zapier_from_marketplace": "ā¤ĩāĨā¤¯ā¤ĩā¤§ā¤žā¤¨āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤Ŧā¤šā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤¸āĨ‡ ā¤œāĨˆā¤Ēā¤ŋā¤¯ā¤° ā¤ā¤Ē ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚", + "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}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "This_room_has_been_archived": "ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤•āĨā¤ˇ", + "This_room_has_been_unarchived": "ā¤…ā¤¨ā¤žā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤•ā¤Žā¤°ā¤ž", + "This_server_will_be_available_while_your_session_is_active": "ā¤¯ā¤š ā¤¸ā¤°āĨā¤ĩā¤° ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤¤āĨā¤° ā¤•āĨ‡ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤°ā¤šā¤¨āĨ‡ ā¤•āĨ‡ ā¤ĻāĨŒā¤°ā¤žā¤¨ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤°ā¤šāĨ‡ā¤—ā¤ž", + "This_week": "ā¤‡ā¤¸ ā¤¸ā¤ĒāĨā¤¤ā¤žā¤š", + "thread": "ā¤§ā¤žā¤—ā¤ž", + "Thread_message": "*{{username}} ā¤•āĨ‡* ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ēā¤° ā¤Ÿā¤ŋā¤ĒāĨā¤Ēā¤ŖāĨ€ ā¤•āĨ€ ā¤—ā¤ˆ: _ {{msg}} _", + "Threads": "ā¤§ā¤žā¤—āĨ‡", + "Threads_Description": "ā¤ĨāĨā¤°āĨ‡ā¤ĄāĨā¤¸ ā¤•ā¤ŋā¤¸āĨ€ ā¤ĩā¤ŋā¤ļā¤ŋā¤ˇāĨā¤Ÿ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‡ ā¤‡ā¤°āĨā¤Ļ-ā¤—ā¤ŋā¤°āĨā¤Ļ ā¤¸ā¤‚ā¤—ā¤ ā¤ŋā¤¤ ā¤šā¤°āĨā¤šā¤ž ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Threads_unavailable_for_federation": "ā¤ĢāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤°āĨ‚ā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĨāĨā¤°āĨ‡ā¤ĄāĨā¤¸ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "Thursday": "ā¤—āĨā¤°āĨā¤ĩā¤žā¤°", + "Time_in_minutes": "ā¤¸ā¤Žā¤¯ ā¤Žā¤ŋā¤¨ā¤ŸāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚", + "Time_in_seconds": "ā¤¸ā¤Žā¤¯ ā¤¸āĨ‡ā¤•ā¤‚ā¤Ą ā¤ŽāĨ‡ā¤‚", + "Timeout": "ā¤¸ā¤Žā¤¯ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤", + "Timeouts": "ā¤¸ā¤Žā¤¯ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ā¤ŋ", + "Timezone": "ā¤¸ā¤Žā¤¯ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Title": "ā¤ļāĨ€ā¤°āĨā¤ˇā¤•", + "Title_bar_color": "ā¤Ÿā¤žā¤‡ā¤Ÿā¤˛ ā¤Ŧā¤žā¤° ā¤•ā¤ž ā¤°ā¤‚ā¤—", + "Title_bar_color_offline": "ā¤Ÿā¤žā¤‡ā¤Ÿā¤˛ ā¤Ŧā¤žā¤° ā¤•ā¤ž ā¤°ā¤‚ā¤— ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨", + "Title_offline": "ā¤ļāĨ€ā¤°āĨā¤ˇā¤• ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨", + "To": "ā¤•āĨ‹", + "To_additional_emails": "ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤", + "To_install_RocketChat_Livechat_in_your_website_copy_paste_this_code_above_the_last_body_tag_on_your_site": "ā¤…ā¤Ēā¤¨āĨ€ ā¤ĩāĨ‡ā¤Ŧā¤¸ā¤žā¤‡ā¤Ÿ ā¤ŽāĨ‡ā¤‚ Rocket.Chat ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤¸āĨā¤Ĩā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤‡ā¤¸ ā¤•āĨ‹ā¤Ą ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ€ ā¤¸ā¤žā¤‡ā¤Ÿ ā¤Ēā¤° ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž </body> ā¤ŸāĨˆā¤— ā¤•āĨ‡ ā¤Šā¤Ēā¤° ā¤•āĨ‰ā¤ĒāĨ€ ā¤”ā¤° ā¤ĒāĨ‡ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "To_prevent_seeing_this_message_again_allow_popups_from_workspace_URL": "ā¤‡ā¤¸ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤°āĨ‹ā¤•ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤†ā¤Ēā¤•āĨ€ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ URL ā¤¸āĨ‡ ā¤ĒāĨ‰ā¤Ē-ā¤…ā¤Ē ā¤–āĨ‹ā¤˛ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤āĨ€ ā¤šāĨˆā¤‚:", + "to_see_more_details_on_how_to_integrate": "ā¤ā¤•āĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤¤ā¤°āĨ€ā¤•āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤• ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤", + "To_users": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤", + "Today": "ā¤†ā¤œ", + "Toggle_original_translated": "ā¤ŽāĨ‚ā¤˛/ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļā¤ŋā¤¤ ā¤ŸāĨ‰ā¤—ā¤˛ ā¤•ā¤°āĨ‡ā¤‚", + "toggle-room-e2e-encryption": "ā¤•ā¤•āĨā¤ˇ E2E ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤ŸāĨ‰ā¤—ā¤˛ ā¤•ā¤°āĨ‡ā¤‚", + "toggle-room-e2e-encryption_description": "e2e ā¤ā¤¨āĨā¤•āĨā¤°ā¤ŋā¤ĒāĨā¤ļā¤¨ ā¤•ā¤•āĨā¤ˇ ā¤•āĨ‹ ā¤ŸāĨ‰ā¤—ā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Token": "ā¤ŸāĨ‹ā¤•ā¤¨", + "Token_Access": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸", + "Token_Controlled_Access": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤¨ā¤ŋā¤¯ā¤‚ā¤¤āĨā¤°ā¤ŋā¤¤ ā¤Ēā¤šāĨā¤‚ā¤š", + "Token_has_been_removed": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Token_required": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ", + "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_Placeholder": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤¸ā¤‚ā¤Ēā¤¤āĨā¤¤ā¤ŋ ā¤•āĨ‡ ā¤¨ā¤žā¤Ž", + "Topic": "ā¤ĩā¤ŋā¤ˇā¤¯", + "Top_5_agents_with_the_most_conversations": "ā¤¸ā¤°āĨā¤ĩā¤žā¤§ā¤ŋā¤• ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤ĩā¤žā¤˛āĨ‡ ā¤ļāĨ€ā¤°āĨā¤ˇ 5 ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ", + "Total": "ā¤•āĨā¤˛", + "Total_abandoned_chats": "ā¤•āĨā¤˛ ā¤›āĨ‹ā¤Ąā¤ŧāĨ€ ā¤—ā¤ˆ ā¤šāĨˆā¤Ÿ", + "Total_conversations": "ā¤•āĨā¤˛ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", + "Total_Discussions": "ā¤šā¤°āĨā¤šā¤žā¤ā¤", + "Total_messages": "ā¤•āĨā¤˛ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Total_rooms": "ā¤•āĨā¤˛ ā¤•ā¤Žā¤°āĨ‡", + "Total_Threads": "ā¤§ā¤žā¤—āĨ‡", + "Total_visitors": "ā¤•āĨā¤˛ ā¤†ā¤—ā¤‚ā¤¤āĨā¤•", + "TOTP Invalid [totp-invalid]": "ā¤•āĨ‹ā¤Ą ā¤¯ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤…ā¤Žā¤žā¤¨āĨā¤¯", + "TOTP_reset_email": "ā¤ĻāĨ‹ ā¤•ā¤žā¤°ā¤• TOTP ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž", + "TOTP_Reset_Other_Key_Warning": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŸāĨ‚ ā¤ĢāĨˆā¤•āĨā¤Ÿā¤° TOTP ā¤•āĨ‹ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤¯āĨ‚ā¤œā¤° ā¤Ŧā¤žā¤Ļ ā¤ŽāĨ‡ā¤‚ ā¤ŸāĨ‚ ā¤ĢāĨˆā¤•āĨā¤Ÿā¤° ā¤•āĨ‹ ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤° ā¤¸ā¤•āĨ‡ā¤—ā¤žāĨ¤", + "totp-disabled": "ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤…ā¤Ēā¤¨āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ 2FA ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "totp-invalid": "ā¤•āĨ‹ā¤Ą ā¤¯ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤…ā¤Žā¤žā¤¨āĨā¤¯", + "totp-required": "ā¤ŸāĨ€ā¤“ā¤ŸāĨ€ā¤ĒāĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•", + "Transcript": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛ā¤ŋā¤Ēā¤ŋ", + "Transcript_Enabled": "ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤¸āĨ‡ ā¤ĒāĨ‚ā¤›āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤•āĨā¤¯ā¤ž ā¤ĩāĨ‡ ā¤šāĨˆā¤Ÿ ā¤Ŧā¤‚ā¤Ļ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤ā¤• ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤šā¤žā¤šāĨ‡ā¤‚ā¤—āĨ‡", + "Transcript_message": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨ‚ā¤›ā¤¨āĨ‡ ā¤Ēā¤° ā¤Ļā¤ŋā¤–ā¤žā¤¨āĨ‡ ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Transcript_of_your_livechat_conversation": "ā¤†ā¤Ēā¤•āĨ€ ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤–āĨ¤", + "Transcript_Request": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤…ā¤¨āĨā¤°āĨ‹ā¤§", + "onboarding.form.registeredServerForm.continueStandalone": "ā¤¸āĨā¤ŸāĨˆā¤‚ā¤Ąā¤…ā¤˛āĨ‹ā¤¨ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤°āĨ€ ā¤°ā¤–āĨ‡ā¤‚", + "transfer-livechat-guest": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ŽāĨ‡ā¤šā¤Žā¤žā¤¨āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "transfer-livechat-guest_description": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ŽāĨ‡ā¤šā¤Žā¤žā¤¨āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Transferred": "ā¤¤ā¤Ŧā¤žā¤Ļā¤˛ā¤ž", + "Translate": "ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ", + "Translated": "ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ", + "Translate_to": "ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤", + "Translations": "ā¤…ā¤¨āĨā¤ĩā¤žā¤Ļ", + "Travel_and_Places": "ā¤¯ā¤žā¤¤āĨā¤°ā¤ž ā¤ā¤ĩā¤‚ ā¤¸āĨā¤Ĩā¤žā¤¨", + "Trigger_removed": "ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Trigger_Words": "ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤ļā¤ŦāĨā¤Ļ", + "Trigger": "ā¤šā¤žā¤˛āĨ‚ ā¤•ā¤° ā¤ĻāĨ‡ā¤¨ā¤ž", + "Triggers": "ā¤šā¤˛ā¤žā¤¤ā¤ž ā¤šāĨˆ", + "Troubleshoot": "ā¤¸ā¤Žā¤¸āĨā¤¯ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤¨ā¤ŋā¤ĩā¤žā¤°ā¤Ŗ", + "Troubleshoot_Description": "ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤†ā¤Ēā¤•āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤° ā¤¸ā¤Žā¤¸āĨā¤¯ā¤ž ā¤¨ā¤ŋā¤ĩā¤žā¤°ā¤Ŗ ā¤•āĨˆā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "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": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤—ā¤¤ā¤ŋā¤ĩā¤ŋā¤§ā¤ŋ ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤° ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Troubleshoot_Disable_Livechat_Activity_Monitor_Alert": "ā¤¯ā¤š ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤¸ā¤¤āĨā¤°āĨ‹ā¤‚ ā¤•āĨ€ ā¤ĒāĨā¤°āĨ‹ā¤¸āĨ‡ā¤¸ā¤ŋā¤‚ā¤— ā¤•āĨ‹ ā¤°āĨ‹ā¤• ā¤ĻāĨ‡ā¤¤āĨ€ ā¤šāĨˆ ā¤œā¤ŋā¤¸ā¤¸āĨ‡ ā¤†ā¤ā¤•ā¤Ąā¤ŧāĨ‡ ā¤¸ā¤šāĨ€ ā¤ĸā¤‚ā¤— ā¤¸āĨ‡ ā¤•ā¤žā¤Ž ā¤•ā¤°ā¤¨ā¤ž ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤° ā¤ĻāĨ‡ā¤¤āĨ‡ ā¤šāĨˆā¤‚!", + "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_Teams_Mention": "ā¤…ā¤•āĨā¤ˇā¤Ž ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤–", + "Troubleshoot_Disable_Teams_Mention_Alert": "ā¤¯ā¤š ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤ŸāĨ€ā¤Ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤ĻāĨ‡ā¤¤āĨ€ ā¤šāĨˆ. ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ŋā¤¸āĨ€ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤žā¤Ž ā¤¸āĨ‡ ā¤•ā¤ŋā¤¸āĨ€ ā¤ŸāĨ€ā¤Ž ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡ ā¤”ā¤° ā¤‰ā¤¸ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡āĨ¤", + "Troubleshoot_Force_Caching_Version": "ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¨āĨ‡ā¤Ÿā¤ĩā¤°āĨā¤•ā¤ŋā¤‚ā¤— ā¤•āĨˆā¤ļ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ŧā¤žā¤§āĨā¤¯ ā¤•ā¤°āĨ‡ā¤‚", + "Troubleshoot_Force_Caching_Version_Alert": "ā¤¯ā¤Ļā¤ŋ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤Žā¤žā¤¨ ā¤–ā¤žā¤˛āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ ā¤”ā¤° ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ ā¤ĩā¤žā¤˛āĨ‡ ā¤¸āĨ‡ ā¤­ā¤ŋā¤¨āĨā¤¨ ā¤šāĨˆ ā¤¤āĨ‹ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤•āĨˆā¤ļ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚ā¤—āĨ‡āĨ¤ ā¤¯ā¤š ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤˛ā¤‚ā¤ŦāĨ‡ ā¤¸ā¤Žā¤¯ ā¤¤ā¤• ā¤¸āĨ‡ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤•āĨ€ ā¤œā¤žā¤¨āĨ€ ā¤šā¤žā¤šā¤ŋā¤ ā¤•āĨā¤¯āĨ‹ā¤‚ā¤•ā¤ŋ ā¤¯ā¤š ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤•āĨ‡ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤¨ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩā¤ŋā¤¤ ā¤•ā¤°ā¤¤āĨ€ ā¤šāĨˆ, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤‡ā¤¸āĨ‡ ā¤œā¤˛āĨā¤Ļ ā¤¸āĨ‡ ā¤œā¤˛āĨā¤Ļ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "True": "ā¤¸ā¤¤āĨā¤¯", + "Try_now": "ā¤…ā¤Ŧ ā¤•āĨ‹ā¤ļā¤ŋā¤ļ ā¤•ā¤°āĨ‹", + "Try_searching_in_the_marketplace_instead": "ā¤‡ā¤¸ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤–āĨ‹ā¤œā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "Tuesday": "ā¤Žā¤‚ā¤—ā¤˛ā¤ĩā¤žā¤°", + "Turn_OFF": "ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Turn_ON": "ā¤šā¤žā¤˛āĨ‚ ā¤•ā¤°āĨ‹", + "Turn_on_video": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤šā¤žā¤˛āĨ‚ ā¤•ā¤°āĨ‡ā¤‚", + "Turn_on_answer_chats": "ā¤‰ā¤¤āĨā¤¤ā¤° ā¤šāĨˆā¤Ÿ ā¤šā¤žā¤˛āĨ‚ ā¤•ā¤°āĨ‡ā¤‚", + "Turn_on_answer_calls": "ā¤•āĨ‰ā¤˛ ā¤•ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤ĻāĨ‡ā¤¨ā¤ž ā¤šā¤žā¤˛āĨ‚ ā¤•ā¤°āĨ‡ā¤‚", + "Turn_on_microphone": "ā¤Žā¤žā¤‡ā¤•āĨā¤°āĨ‹ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤šā¤žā¤˛āĨ‚ ā¤•ā¤°āĨ‡ā¤‚", + "Turn_off_microphone": "ā¤Žā¤žā¤‡ā¤•āĨā¤°āĨ‹ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Turn_off_answer_chats": "ā¤‰ā¤¤āĨā¤¤ā¤° ā¤šāĨˆā¤Ÿ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Turn_off_answer_calls": "ā¤‰ā¤¤āĨā¤¤ā¤° ā¤•āĨ‰ā¤˛ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Turn_off_video": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Two Factor Authentication": "ā¤ĻāĨ‹ ā¤¤ā¤°āĨ€ā¤•āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ", + "Two-factor_authentication": "ā¤ŸāĨ€ā¤“ā¤ŸāĨ€ā¤ĒāĨ€ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĻāĨ‹-ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ", + "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": "ā¤ŸāĨ€ā¤“ā¤ŸāĨ€ā¤ĒāĨ€ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĻāĨ‹-ā¤•ā¤žā¤°ā¤• ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ", + "Two-factor_authentication_native_mobile_app_warning": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€: ā¤ā¤• ā¤Ŧā¤žā¤° ā¤œā¤Ŧ ā¤†ā¤Ē ā¤‡ā¤¸āĨ‡ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤˛āĨ‡ā¤¤āĨ‡ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤ŽāĨ‚ā¤˛ ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤ā¤ĒāĨā¤¸ (ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ+) ā¤Ēā¤° ā¤¤ā¤Ŧ ā¤¤ā¤• ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤Ēā¤žā¤ā¤‚ā¤—āĨ‡ ā¤œā¤Ŧ ā¤¤ā¤• ā¤ĩāĨ‡ 2FA ā¤˛ā¤žā¤—āĨ‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤ĻāĨ‡ā¤¤āĨ‡āĨ¤", + "Type": "ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "typing": "ā¤Ÿā¤žā¤‡ā¤Ēā¤ŋā¤‚ā¤—", + "Types": "ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "Types_and_Distribution": "ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤”ā¤° ā¤ĩā¤ŋā¤¤ā¤°ā¤Ŗ", "Type_your_email": "ā¤…ā¤Ēā¤¨ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ÿā¤žā¤‡ā¤Ē ā¤•ā¤°āĨ‡ā¤‚", + "Type_your_job_title": "ā¤…ā¤Ēā¤¨āĨ€ ā¤¨āĨŒā¤•ā¤°āĨ€ ā¤•ā¤ž ā¤ļāĨ€ā¤°āĨā¤ˇā¤• ā¤Ÿā¤žā¤‡ā¤Ē ā¤•ā¤°āĨ‡ā¤‚", "Type_your_message": "ā¤…ā¤Ēā¤¨ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ÿā¤žā¤‡ā¤Ē ā¤•ā¤°āĨ‡ā¤‚", "Type_your_name": "ā¤…ā¤Ēā¤¨ā¤ž ā¤¨ā¤žā¤Ž ā¤˛ā¤ŋā¤–āĨ‡ā¤‚", + "Type_your_password": "ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ÿā¤žā¤‡ā¤Ē ā¤•ā¤°āĨ‡ā¤‚", + "Type_your_username": "ā¤…ā¤Ēā¤¨ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤Ÿā¤žā¤‡ā¤Ē ā¤•ā¤°āĨ‡ā¤‚", + "UI_Allow_room_names_with_special_chars": "ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ‡ ā¤¨ā¤žā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇ ā¤ĩā¤°āĨā¤ŖāĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤‚", + "UI_Click_Direct_Message": "ā¤¸āĨ€ā¤§ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚", + "UI_Click_Direct_Message_Description": "ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ŸāĨˆā¤Ŧ ā¤–āĨ‹ā¤˛ā¤¨ā¤ž ā¤›āĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚, ā¤‡ā¤¸ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ ā¤¸āĨ€ā¤§āĨ‡ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤Ēā¤° ā¤œā¤žā¤ā¤", + "UI_DisplayRoles": "ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "UI_Group_Channels_By_Type": "ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤¸ā¤ŽāĨ‚ā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "UI_Merge_Channels_Groups": "ā¤¨ā¤ŋā¤œāĨ€ ā¤¸ā¤ŽāĨ‚ā¤šāĨ‹ā¤‚ ā¤•āĨ‹ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤Žā¤ŋā¤˛ā¤žā¤ā¤‚", + "UI_Show_top_navbar_embedded_layout": "ā¤ā¤ŽāĨā¤ŦāĨ‡ā¤ĄāĨ‡ā¤Ą ā¤˛āĨ‡ā¤†ā¤‰ā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤ļāĨ€ā¤°āĨā¤ˇ ā¤¨āĨ‡ā¤ĩā¤Ŧā¤žā¤° ā¤Ļā¤ŋā¤–ā¤žā¤ā¤‚", + "UI_Unread_Counter_Style": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤•ā¤žā¤‰ā¤‚ā¤Ÿā¤° ā¤ļāĨˆā¤˛āĨ€", + "UI_Use_Name_Avatar": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨ‚ā¤°āĨ‡ ā¤¨ā¤žā¤Ž ā¤•āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤…ā¤•āĨā¤ˇā¤° ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "UI_Use_Real_Name": "ā¤ĩā¤žā¤¸āĨā¤¤ā¤ĩā¤ŋā¤• ā¤¨ā¤žā¤Ž ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "unable-to-get-file": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¸ā¤Žā¤°āĨā¤Ĩ", + "Unable_to_load_active_connections": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¸ā¤Žā¤°āĨā¤Ĩ", + "Unarchive": "ā¤¸ā¤‚ā¤—āĨā¤°ā¤š ā¤¸āĨ‡ ā¤¨ā¤ŋā¤•ā¤žā¤˛āĨ‡ā¤‚", + "unarchive-room": "ā¤•ā¤•āĨā¤ˇ ā¤•āĨ‹ ā¤…ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "unarchive-room_description": "ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‹ ā¤…ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Unassigned": "ā¤¸āĨŒā¤‚ā¤ĒāĨ‡ ā¤¨ā¤šāĨ€ā¤‚ ā¤—ā¤", + "unauthorized": "ā¤…ā¤§ā¤ŋā¤•āĨƒā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚", + "Unavailable": "ā¤…ā¤¨āĨā¤Ēā¤˛ā¤ŦāĨā¤§", + "Unblock": "ā¤…ā¤¨ā¤ŦāĨā¤˛āĨ‰ā¤•", + "Unblock_User": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤…ā¤¨ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Uncheck_All": "ā¤¸ā¤Ŧ ā¤•āĨ‹ ā¤…ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Uncollapse": "ā¤–āĨ‹ā¤˛ā¤¨ā¤ž", + "Undefined": "ā¤…ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤", + "Unfavorite": "ā¤¨ā¤žā¤Ēā¤¸ā¤‚ā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Unfollow_message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤…ā¤¨ā¤Ģā¤ŧāĨ‰ā¤˛āĨ‹ ā¤•ā¤°āĨ‡ā¤‚", + "Unignore": "ā¤…ā¤¨ā¤ĻāĨ‡ā¤–ā¤ž ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Uninstall": "ā¤¸āĨā¤Ĩā¤žā¤Ēā¤¨ā¤ž ā¤°ā¤ĻāĨā¤Ļ ā¤•ā¤°āĨ‡ā¤‚", + "Units": "ā¤‡ā¤•ā¤žā¤‡ā¤¯āĨ‹ā¤‚", + "Unit_removed": "ā¤‡ā¤•ā¤žā¤ˆ ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤—ā¤ˆ", + "Unique_ID_change_detected_description": "ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ€ ā¤Ēā¤šā¤šā¤žā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤Ŧā¤Ļā¤˛ ā¤—ā¤ˆ ā¤šāĨˆ. ā¤ā¤¸ā¤ž ā¤¤ā¤Ŧ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ ā¤œā¤Ŧ ā¤¸ā¤žā¤‡ā¤Ÿ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¯ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤žā¤ŦāĨ‡ā¤¸ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤¸āĨā¤ŸāĨā¤°ā¤ŋā¤‚ā¤— ā¤Ŧā¤Ļā¤˛ ā¤ĻāĨ€ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆ ā¤¯ā¤ž ā¤œā¤Ŧ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤ĄāĨ‡ā¤Ÿā¤žā¤ŦāĨ‡ā¤¸ ā¤•āĨ€ ā¤ā¤• ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤¸āĨ‡ ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ŧā¤¨ā¤žā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤

    ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤†ā¤—āĨ‡ ā¤Ŧā¤ĸā¤ŧā¤¨ā¤ž ā¤šā¤žā¤šāĨ‡ā¤‚ā¤—āĨ‡ ā¤¯ā¤ž ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤”ā¤° ā¤…ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ ā¤†ā¤ˆā¤ĄāĨ€ ā¤Ŧā¤¨ā¤žā¤¨ā¤ž ā¤šā¤žā¤šāĨ‡ā¤‚ā¤—āĨ‡?", + "Unique_ID_change_detected_learn_more_link": "ā¤”ā¤° ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨āĨ‡ā¤‚", + "Unique_ID_change_detected": "ā¤…ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ ā¤†ā¤ˆā¤ĄāĨ€ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤¨ ā¤•ā¤ž ā¤Ēā¤¤ā¤ž ā¤šā¤˛ā¤ž", + "Unknown_Import_State": "ā¤…ā¤œāĨā¤žā¤žā¤¤ ā¤†ā¤¯ā¤žā¤¤ ā¤°ā¤žā¤œāĨā¤¯", + "Unknown_User": "ā¤…ā¤œāĨā¤žā¤žā¤¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Unlimited": "ā¤…ā¤¸āĨ€ā¤Žā¤ŋā¤¤", + "Unmute": "ā¤…ā¤¨ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ", + "Unmute_someone_in_room": "ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤•ā¤ŋā¤¸āĨ€ ā¤•āĨ‹ ā¤…ā¤¨ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Unmute_user": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤…ā¤¨ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Unnamed": "ā¤…ā¤œāĨā¤žā¤žā¤¤", + "Unpin": "ā¤…ā¤¨ā¤Ēā¤ŋā¤¨", + "Unpin_Message": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤…ā¤¨ā¤Ēā¤ŋā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "unpinning-not-allowed": "ā¤…ā¤¨ā¤Ēā¤ŋā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Unprioritized": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤°ā¤šā¤ŋā¤¤", + "Unread": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤—", + "Unread_Count": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ count", + "Unread_Count_DM": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤—ā¤Ŗā¤¨ā¤ž", + "Unread_Count_Omni": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤šāĨˆā¤Ÿ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤—ā¤Ŗā¤¨ā¤ž", + "Unread_Messages": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Unread_on_top": "ā¤ļāĨ€ā¤°āĨā¤ˇ ā¤Ēā¤° ā¤…ā¤Ēā¤ ā¤ŋā¤¤", + "Unread_Rooms": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤•ā¤Žā¤°āĨ‡", + "Unread_Rooms_Mode": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‹ā¤Ą", + "Unread_Requested_First": "ā¤Ēā¤šā¤˛āĨ‡ ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Unread_Requested_Last": "ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤Ŧā¤žā¤° ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Unread_Tray_Icon_Alert": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤ŸāĨā¤°āĨ‡ ā¤šā¤ŋā¤šāĨā¤¨ ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€", + "Unstar_Message": "ā¤¤ā¤žā¤°ā¤ž ā¤šā¤Ÿā¤žā¤ā¤", + "Unmute_microphone": "ā¤Žā¤žā¤‡ā¤•āĨā¤°āĨ‹ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤…ā¤¨ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Update": "ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨", + "Update_EnableChecker": "ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤šāĨ‡ā¤•ā¤° ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Update_EnableChecker_Description": "Rocket.Chat ā¤ĄāĨ‡ā¤ĩā¤˛ā¤Ēā¤°āĨā¤¸ ā¤¸āĨ‡ ā¤¨ā¤ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ/ā¤Žā¤šā¤¤āĨā¤ĩā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤œā¤žā¤ā¤š ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤¨ā¤ ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤ŽāĨ‡ā¤‚ ā¤ā¤• ā¤Ŧā¤žā¤° ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤ŦāĨˆā¤¨ā¤° ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤”ā¤° ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤•āĨˆā¤Ÿ ā¤ŦāĨ‰ā¤Ÿ ā¤¸āĨ‡ ā¤ā¤• ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ‡ā¤¤āĨ€ ā¤šāĨˆ, ā¤ĻāĨ‹ā¤¨āĨ‹ā¤‚ ā¤šāĨ€ ā¤•āĨ‡ā¤ĩā¤˛ ā¤ĒāĨā¤°ā¤ļā¤žā¤¸ā¤•āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĻāĨƒā¤ļāĨā¤¯ā¤Žā¤žā¤¨ ā¤šāĨ‹ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Update_every": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤•āĨ‹ ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "Update_LatestAvailableVersion": "ā¤¨ā¤ĩāĨ€ā¤¨ā¤¤ā¤Ž ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Update_to_version": "{{version}} ā¤Ēā¤° ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Update_your_RocketChat": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Updated_at": "ā¤Ēā¤° ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Upgrade_tab_upgrade_your_plan": "ā¤…ā¤Ēā¤¨āĨ€ ā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤•āĨ‹ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Upload": "ā¤Ąā¤žā¤˛ā¤¨ā¤ž", + "Uploads": "ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą", + "Upload_private_app": "ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤Ē ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Upload_file_description": "ā¤Ģā¤žā¤‡ā¤˛ ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ", + "Upload_file_name": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", "Upload_file_question": "ā¤Ļā¤¸āĨā¤¤ā¤žā¤ĩāĨ‡ā¤œ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚?", + "Upload_Folder_Path": "ā¤Ģā¤ŧāĨ‹ā¤˛āĨā¤Ąā¤° ā¤Ēā¤Ĩ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Upload_From": "{{name}} ā¤¸āĨ‡ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Upload_user_avatar": "ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "Uploading_file": "ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤šāĨ‹ ā¤°ā¤šāĨ€ ā¤šāĨˆ...", + "Uptime": "ā¤…ā¤Ēā¤Ÿā¤žā¤‡ā¤Ž", + "URL": "ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "URLs": "ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Usage": "ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤—", + "Use": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—", + "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": "ā¤…ā¤ĩā¤¤ā¤žā¤° ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "Use_User_Preferences_or_Global_Settings": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤žā¤ā¤ ā¤¯ā¤ž ā¤ĩāĨˆā¤ļāĨā¤ĩā¤ŋā¤• ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "User": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "User_menu": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤¸āĨ‚ā¤šāĨ€", + "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_an_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_added}} ā¤•āĨ‹ {{user_by}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤žāĨ¤", + "User_added_to": "ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž {{user_added}}", + "User_added_successfully": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤œāĨ‹ā¤Ąā¤ŧā¤ž ā¤—ā¤¯ā¤ž", + "User_and_group_mentions_only": "ā¤•āĨ‡ā¤ĩā¤˛ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤”ā¤° ā¤¸ā¤ŽāĨ‚ā¤š ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤šāĨˆ", + "User_cant_be_empty": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤–ā¤žā¤˛āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž", + "User_created_successfully!": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤Ŧā¤¨ā¤ž!", + "User_default": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ", + "User_doesnt_exist": "`@%s` ā¤¨ā¤žā¤Ž ā¤¸āĨ‡ ā¤•āĨ‹ā¤ˆ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤", + "User_e2e_key_was_reset": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž E2E ā¤•āĨā¤‚ā¤œāĨ€ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤° ā¤ĻāĨ€ ā¤—ā¤ˆ ā¤ĨāĨ€āĨ¤", + "User_has_been_activated": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "User_has_been_deactivated": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "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_team": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤ŸāĨ€ā¤Ž ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "User_has_been_unignored": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤…ā¤Ŧ ā¤…ā¤¨ā¤ĻāĨ‡ā¤–ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž", + "User_Info": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "User_Interface": "ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤•āĨā¤¤ā¤ž ā¤‡ā¤‚ā¤Ÿā¤°ā¤Ģā¤ŧāĨ‡ā¤¸", + "User_is_blocked": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤šāĨˆ", + "User_is_no_longer_an_admin": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤Ŧ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "User_is_now_an_admin": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤…ā¤Ŧ ā¤ā¤• ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤šāĨˆ", + "User_is_unblocked": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤…ā¤¨ā¤ŦāĨā¤˛āĨ‰ā¤• ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "User_joined_channel": "ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧ ā¤—ā¤¯ā¤ž ā¤šāĨˆ.", + "User_joined_conversation": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ ā¤—ā¤ ā¤šāĨˆā¤‚", + "User_joined_team": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨā¤", + "User_joined_the_channel": "ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨ‡ ā¤œāĨā¤Ąā¤ŧāĨ‡", + "User_joined_the_conversation": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨā¤", + "User_joined_the_team": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨā¤", + "user_joined_otr": "ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤šāĨˆā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤", + "user_key_refreshed_successfully": "ā¤•āĨā¤‚ā¤œāĨ€ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤¤ā¤žā¤œā¤ŧā¤ž ā¤šāĨ‹ ā¤—ā¤ˆ", + "user_requested_otr_key_refresh": "ā¤•āĨā¤‚ā¤œāĨ€ ā¤¤ā¤žā¤œā¤ŧā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ.", "User_left": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤›āĨ‹ā¤Ąā¤ŧ ā¤Ļā¤ŋā¤¯ā¤ž", + "User_left_team": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤Ļā¤ŋā¤¯ā¤ž", + "User_left_this_channel": "ā¤šāĨˆā¤¨ā¤˛ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤Ļā¤ŋā¤¯ā¤ž", + "User_left_this_team": "ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤Ļā¤ŋā¤¯ā¤ž", + "User_logged_out": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤˛āĨ‰ā¤— ā¤†ā¤‰ā¤Ÿ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "User_management": "ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤•āĨā¤¤ā¤ž ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨", + "User_mentions_only": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ā¤ĩā¤˛ ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ", + "User_muted": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "User_muted_by": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž {{user_muted}} ā¤•āĨ‹ {{user_by}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤", + "User_has_been_muted": "ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž {{user_muted}}", + "User_not_found": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "User_not_found_or_incorrect_password": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž ā¤¯ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤—ā¤ŧā¤˛ā¤¤ ā¤šāĨˆ", + "User_or_channel_name": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¯ā¤ž ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "User_Presence": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ€ ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "User_removed": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "User_removed_by": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž {{user_removed}} ā¤•āĨ‹ {{user_by}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤žāĨ¤", + "User_has_been_removed": "ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž {{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_unmuted}} ā¤•āĨ‹ {{user_by}} ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤¨ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤žāĨ¤", + "User_has_been_unmuted": "ā¤…ā¤¨ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž {{user_unmuted}}", + "User_unmuted_in_room": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¨ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "User_updated_successfully": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "User_uploaded_a_file_on_channel": "{{username}} ā¤¨āĨ‡ {{channel}} ā¤Ēā¤° ā¤ā¤• ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€", + "User_uploaded_a_file_to_you": "{{username}} ā¤¨āĨ‡ ā¤†ā¤Ēā¤•āĨ‹ ā¤ā¤• ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤­āĨ‡ā¤œāĨ€ ā¤šāĨˆ", + "User_uploaded_file": "ā¤ā¤• ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ", + "User_uploaded_image": "ā¤ā¤• ā¤›ā¤ĩā¤ŋ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•āĨ€ ā¤—ā¤ˆ", + "user-generate-access-token": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤œā¤¨ā¤°āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "user-generate-access-token_description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤œā¤¨ā¤°āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "UserData_EnableDownload": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "UserData_FileSystemPath": "ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤Ēā¤Ĩ (ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤Ģā¤ŧā¤žā¤‡ā¤˛āĨ‡ā¤‚)", + "view-livechat-facebook": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĢāĨ‡ā¤¸ā¤ŦāĨā¤• ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "UserData_FileSystemZipPath": "ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤Ēā¤Ĩ (ā¤¸ā¤‚ā¤ĒāĨ€ā¤Ąā¤ŧā¤ŋā¤¤ ā¤Ģā¤ŧā¤žā¤‡ā¤˛)", + "view-livechat-facebook_description": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĢāĨ‡ā¤¸ā¤ŦāĨā¤• ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "UserData_MessageLimitPerRequest": "ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤¸āĨ€ā¤Žā¤ž", + "UserData_ProcessingFrequency": "ā¤ĒāĨā¤°ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤†ā¤ĩāĨƒā¤¤āĨā¤¤ā¤ŋ (ā¤Žā¤ŋā¤¨ā¤Ÿ)", + "UserDataDownload": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą", + "UserDataDownload_Description": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¨āĨ‡ ā¤¯ā¤ž ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤°āĨ‡ā¤ļā¤¨āĨ¤", + "UserDataDownload_CompletedRequestExisted_Text": "ā¤†ā¤Ēā¤•āĨ€ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤œā¤¨ā¤°āĨ‡ā¤Ÿ ā¤šāĨ‹ ā¤šāĨā¤•āĨ€ ā¤ĨāĨ€. ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤˛ā¤ŋā¤‚ā¤• ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤–ā¤žā¤¤ā¤ž ā¤œā¤žā¤‚ā¤šāĨ‡ā¤‚āĨ¤", + "UserDataDownload_CompletedRequestExistedWithLink_Text": "ā¤†ā¤Ēā¤•āĨ€ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤œā¤¨ā¤°āĨ‡ā¤Ÿ ā¤šāĨ‹ ā¤šāĨā¤•āĨ€ ā¤ĨāĨ€. ā¤‡ā¤¸āĨ‡ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "UserDataDownload_EmailBody": "ā¤†ā¤Ēā¤•āĨ€ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤…ā¤Ŧ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¤āĨˆā¤¯ā¤žā¤° ā¤šāĨˆāĨ¤ ā¤‡ā¤¸āĨ‡ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "UserDataDownload_EmailSubject": "ā¤†ā¤Ēā¤•āĨ€ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¤āĨˆā¤¯ā¤žā¤° ā¤šāĨˆ", + "UserDataDownload_Requested": "ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ā¤ŋā¤¤ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "UserDataDownload_Requested_Text": "ā¤†ā¤Ēā¤•āĨ€ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤¤āĨˆā¤¯ā¤žā¤° ā¤šāĨ‹ ā¤œā¤žā¤ā¤—āĨ€. ā¤¤āĨˆā¤¯ā¤žā¤° ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤‡ā¤¸āĨ‡ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ā¤• ā¤˛ā¤ŋā¤‚ā¤• ā¤†ā¤Ēā¤•āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤āĨ‡ ā¤Ēā¤° ā¤­āĨ‡ā¤œā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤žā¤Žā¤¨āĨ‡ ā¤šā¤˛ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤¤ā¤žā¤°ā¤Ŧā¤ĻāĨā¤§ {{pending_operations}} ā¤šāĨˆā¤‚āĨ¤", + "UserDataDownload_RequestExisted_Text": "ā¤†ā¤Ēā¤•āĨ€ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤œāĨ‡ā¤¨ā¤°āĨ‡ā¤Ÿ ā¤•āĨ€ ā¤œā¤ž ā¤°ā¤šāĨ€ ā¤šāĨˆ. ā¤¤āĨˆā¤¯ā¤žā¤° ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤‡ā¤¸āĨ‡ ā¤Ąā¤žā¤‰ā¤¨ā¤˛āĨ‹ā¤Ą ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ā¤• ā¤˛ā¤ŋā¤‚ā¤• ā¤†ā¤Ēā¤•āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤āĨ‡ ā¤Ēā¤° ā¤­āĨ‡ā¤œā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤žā¤Žā¤¨āĨ‡ ā¤šā¤˛ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤¤ā¤žā¤°ā¤Ŧā¤ĻāĨā¤§ {{pending_operations}} ā¤šāĨˆā¤‚āĨ¤", + "Username": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "Username_already_exist": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆāĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤•āĨ‹ā¤ˆ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤†ā¤œā¤ŧā¤Žā¤žā¤ā¤.", + "Username_and_message_must_not_be_empty": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤–ā¤žā¤˛āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤.", + "Username_cant_be_empty": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤–ā¤žā¤˛āĨ€ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž", + "Username_Change_Disabled": "ā¤†ā¤Ēā¤•āĨ‡ Rocket.Chat ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤¨āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤Ŧā¤Ļā¤˛ā¤¨ā¤ž ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤šāĨˆ", + "Username_denied_the_OTR_session": "{{username}} ā¤¨āĨ‡ ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤¸ā¤¤āĨā¤° ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž", + "Username_description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤ĻāĨ‚ā¤¸ā¤°āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤†ā¤Ēā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤– ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Username_doesnt_exist": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž `%s` ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ.", + "Username_ended_the_OTR_session": "{{username}} ā¤¨āĨ‡ ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤¸ā¤¤āĨā¤° ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž", + "Username_invalid": "%s ā¤ĩāĨˆā¤§ ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ,
    ā¤•āĨ‡ā¤ĩā¤˛ ā¤…ā¤•āĨā¤ˇā¤°āĨ‹ā¤‚, ā¤¸ā¤‚ā¤–āĨā¤¯ā¤žā¤“ā¤‚, ā¤Ŧā¤ŋā¤‚ā¤ĻāĨā¤“ā¤‚, ā¤šā¤žā¤‡ā¤Ģā¤ŧā¤¨ ā¤”ā¤° ā¤…ā¤‚ā¤Ąā¤°ā¤¸āĨā¤•āĨ‹ā¤° ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "Username_is_already_in_here": "`@%s` ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤¯ā¤šā¤žā¤‚ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆāĨ¤", + "Username_Placeholder": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚...", + "Username_title": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Username_has_been_updated": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Username_wants_to_start_otr_Do_you_want_to_accept": "{{username}} ā¤“ā¤ŸāĨ€ā¤†ā¤° ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤¸āĨā¤ĩāĨ€ā¤•ā¤žā¤° ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚?", + "Username_name_email": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž, ā¤¨ā¤žā¤Ž ā¤¯ā¤ž ā¤ˆ-ā¤ŽāĨ‡ā¤˛", + "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": "ā¤Ŧā¤žā¤ā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—", + "UTC_Timezone": "ā¤¯āĨ‚ā¤ŸāĨ€ā¤¸āĨ€ ā¤¸ā¤Žā¤¯ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤°", + "Utilities": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤ŋā¤¤ā¤žā¤“ā¤‚", + "UTF8_Names_Slugify": "UTF8 ā¤¨ā¤žā¤Ž Slugify", + "UTF8_User_Names_Validation": "UTF8 ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨", + "UTF8_User_Names_Validation_Description": "ā¤°āĨ‡ā¤—ā¤ā¤•āĨā¤¸ā¤ĒāĨ€ ā¤œā¤ŋā¤¸ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž", + "UTF8_Channel_Names_Validation": "UTF8 ā¤šāĨˆā¤¨ā¤˛ ā¤¨ā¤žā¤Ž ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨", + "UTF8_Channel_Names_Validation_Description": "ā¤°āĨ‡ā¤—ā¤ā¤•āĨā¤¸ā¤ĒāĨ€ ā¤œā¤ŋā¤¸ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤šāĨˆā¤¨ā¤˛ ā¤¨ā¤žā¤ŽāĨ‹ā¤‚ ā¤•āĨ‹ ā¤Žā¤žā¤¨āĨā¤¯ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž", + "Videocall_enabled": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "Validate_email_address": "ā¤ˆ - ā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°āĨ‡ā¤‚", + "Validation": "ā¤Žā¤žā¤¨āĨā¤¯ā¤•ā¤°ā¤Ŗ", + "Value_messages": "{{price}} ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Value_users": "{{price}} ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Verification": "ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨", + "Verification_Description": "ā¤†ā¤Ē ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤ĒāĨā¤˛āĨ‡ā¤¸ā¤šāĨ‹ā¤˛āĨā¤Ąā¤°āĨā¤¸ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚:\n - ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨ URL ā¤•āĨ‡ ā¤˛ā¤ŋā¤ `[Verification_Url]`āĨ¤\n - `[ā¤¨ā¤žā¤Ž]`, `[fname]`, `[lname]` ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤¨ā¤žā¤Ž, ā¤ĒāĨā¤°ā¤Ĩā¤Ž ā¤¨ā¤žā¤Ž ā¤¯ā¤ž ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤¨ā¤žā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤\n - `[ā¤ˆā¤ŽāĨ‡ā¤˛]` ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤\n - ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤¨ā¤žā¤Ž ā¤”ā¤° ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨā¤°ā¤Žā¤ļā¤ƒ `[Site_Name]` ā¤”ā¤° `[Site_URL]`āĨ¤", + "Verification_Email": "ā¤…ā¤Ēā¤¨ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Verification_email_body": "ā¤•āĨƒā¤Ēā¤¯ā¤ž, ā¤…ā¤Ēā¤¨āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤āĨ‡ ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¨āĨ€ā¤šāĨ‡ ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤Ŧā¤Ÿā¤¨ ā¤Ēā¤° ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Verification_email_sent": "ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨ ā¤ĩā¤ŋā¤ĻāĨā¤¯āĨā¤¤ā¤Ąā¤žā¤• ā¤­āĨ‡ā¤œ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "Verification_Email_Subject": "[ā¤¸ā¤žā¤‡ā¤Ÿ_ā¤¨ā¤žā¤Ž] - ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨", + "Verified": "ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤", + "Verify": "ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Verify_your_email": "ā¤…ā¤Ēā¤¨ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Version": "ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ", + "Version_version": "ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ {{version}}", + "App_Request_Admin_Message": "ā¤¨ā¤Žā¤¸āĨā¤¤āĨ‡ {{admin_name}}, {{user_name}} ā¤¨āĨ‡ ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤° {{app_name}} ā¤ā¤Ē ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¸ā¤Ŧā¤Žā¤ŋā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆāĨ¤\n \n ā¤¯ā¤š ā¤ĩā¤š ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤šāĨˆ ā¤œā¤ŋā¤¸ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤¨āĨā¤šāĨ‹ā¤‚ā¤¨āĨ‡ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤•ā¤ŋā¤¯ā¤ž:\n>{{message}}\n \n ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤¨āĨ‡ ā¤”ā¤° {{app_name}} ā¤ā¤Ē ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤, [ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚]({{learn_more}})āĨ¤", + "App_version_incompatible_tooltip": "ā¤ā¤Ē Rocket.Chat ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤…ā¤¸ā¤‚ā¤—ā¤¤ ā¤šāĨˆ", + "App_request_enduser_message": "ā¤†ā¤Ēā¤•āĨ‡ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ā¤ŋā¤¤ ā¤ā¤Ē, {{appName}}, ā¤…ā¤­āĨ€ ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤° ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤\n [ā¤¯ā¤šā¤žā¤‚ ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚]({{learnmore}}) ā¤ā¤Ē ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤¨ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤āĨ¤", + "App_requests_by_workspace": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤ā¤Ē ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¯ā¤šā¤žā¤‚ ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ‡ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "Video_Conference_Description": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨ‰ā¤¨āĨā¤ĢāĨā¤°āĨ‡ā¤‚ā¤¸ā¤ŋā¤‚ā¤— ā¤•āĨ‰ā¤˛ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧā¤ŋā¤—ā¤° ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Video_Chat_Window": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤šāĨˆā¤Ÿ", + "Video_Conference": "ā¤•ā¤žā¤‚ā¤ĢāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛", + "Video_Call_unavailable_for_this_type_of_room": "ā¤‡ā¤¸ ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤•āĨ‡ ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Video_Conferences": "ā¤¸ā¤ŽāĨā¤ŽāĨ‡ā¤˛ā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤ŦāĨā¤˛ā¤žā¤ĩā¤ž", + "Video_Conference_Info": "ā¤ŦāĨˆā¤ ā¤• ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Video_Conference_Url": "ā¤ŽāĨ€ā¤Ÿā¤ŋā¤‚ā¤— ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "video-conf-provider-not-configured": "**ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ**: ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤•āĨ‹ ā¤Ēā¤šā¤˛āĨ‡ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Video_message": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Videocall_declined": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤.", + "Video_and_Audio_Call": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤”ā¤° ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛", + "video_conference_started": "_ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤ŋā¤¯ā¤ž._", + "video_conference_started_by": "**{{username}}** _ā¤•āĨ‰ā¤˛ ā¤ļāĨā¤°āĨ‚ ā¤šāĨā¤ˆāĨ¤_", + "video_conference_ended": "_ā¤•āĨ‰ā¤˛ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž ā¤šāĨˆ._", + "video_conference_ended_by": "**{{username}}** _ā¤•āĨ‰ā¤˛ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨā¤ˆāĨ¤_", + "video_livechat_started": "_ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤ļāĨā¤°āĨ‚ ā¤•āĨ€._", + "video_livechat_missed": "_ā¤ā¤• ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤ļāĨā¤°āĨ‚ ā¤•āĨ€ ā¤œā¤ŋā¤¸ā¤•ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤žāĨ¤_", + "video_direct_calling": "_ā¤•āĨ‰ā¤˛ ā¤•ā¤° ā¤°ā¤šā¤ž ā¤šāĨˆāĨ¤_", + "video_direct_ended": "_ā¤•āĨ‰ā¤˛ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž ā¤šāĨˆ._", + "video_direct_ended_by": "**{{username}}** _ā¤•āĨ‰ā¤˛ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨā¤ˆāĨ¤_", + "video_direct_missed": "_ā¤ā¤• ā¤•āĨ‰ā¤˛ ā¤ļāĨā¤°āĨ‚ ā¤šāĨā¤ˆ ā¤œā¤ŋā¤¸ā¤•ā¤ž ā¤‰ā¤¤āĨā¤¤ā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤žāĨ¤_", + "video_direct_started": "_ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤žā¤°ā¤‚ā¤­ ā¤•ā¤ŋā¤¯ā¤ž._", + "VideoConf_Default_Provider": "ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž", + "VideoConf_Default_Provider_Description": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤ā¤•ā¤žā¤§ā¤ŋā¤• ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤ž ā¤ā¤ĒāĨā¤¸ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤šāĨˆā¤‚, ā¤¤āĨ‹ ā¤šāĨā¤¨āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤¨ā¤ ā¤•āĨ‰ā¤¨āĨā¤Ģā¤ŧāĨā¤°āĨ‡ā¤‚ā¤¸ ā¤•āĨ‰ā¤˛ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¸ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤", + "VideoConf_Enable_Channels": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "VideoConf_Enable_Groups": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "VideoConf_Enable_DMs": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "VideoConf_Enable_Teams": "ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "VideoConf_Mobile_Ringing": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤°ā¤ŋā¤‚ā¤—ā¤ŋā¤‚ā¤— ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "VideoConf_Mobile_Ringing_Description": "ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤°, ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸āĨ€ā¤§āĨ‡ ā¤•āĨ‰ā¤˛ ā¤‰ā¤¨ā¤•āĨ‡ ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤Ēā¤° ā¤Ģā¤ŧāĨ‹ā¤¨ ā¤•āĨ‰ā¤˛ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤¨ā¤žā¤ˆ ā¤ĻāĨ‡ā¤—āĨ€āĨ¤", + "VideoConf_Mobile_Ringing_Alert": "ā¤¯ā¤š ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤…ā¤­āĨ€ ā¤ĒāĨā¤°ā¤žā¤¯āĨ‹ā¤—ā¤ŋā¤• ā¤šā¤°ā¤Ŗ ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ ā¤”ā¤° ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤¯ā¤š ā¤…ā¤­āĨ€ ā¤¤ā¤• ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤ā¤Ē ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ĒāĨ‚ā¤°āĨ€ ā¤¤ā¤°ā¤š ā¤¸āĨ‡ ā¤¸ā¤Žā¤°āĨā¤Ĩā¤ŋā¤¤ ā¤¨ ā¤šāĨ‹āĨ¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤¯ā¤š ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤…ā¤¤ā¤ŋā¤°ā¤ŋā¤•āĨā¤¤ ā¤ĒāĨā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤­āĨ‡ā¤œāĨ‡ā¤—ā¤žāĨ¤", + "videoconf-ring-users": "ā¤•āĨ‰ā¤˛ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤°ā¤ŋā¤‚ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "videoconf-ring-users_description": "ā¤•āĨ‰ā¤˛ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤°ā¤ŋā¤‚ā¤— ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "Video_record": "ā¤šā¤˛ā¤šā¤ŋā¤¤āĨā¤° ā¤†ā¤˛āĨ‡ā¤–", + "Videos": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹", + "View_mode": "ā¤ĻāĨƒā¤ļāĨā¤¯ ā¤ŽāĨ‹ā¤Ą", + "View_All": "ā¤¸ā¤­āĨ€ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "View_channels": "ā¤šāĨˆā¤¨ā¤˛ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-agent-canned-responses": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ€ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-agent-canned-responses_description": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤•āĨ€ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-agent-extension-association": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤ā¤¸āĨ‹ā¤¸ā¤ŋā¤ā¤ļā¤¨ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-agent-extension-association_description": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤ā¤¸āĨ‹ā¤¸ā¤ŋā¤ā¤ļā¤¨ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-all-canned-responses": "ā¤¸ā¤­āĨ€ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-all-canned-responses_description": "ā¤¸ā¤­āĨ€ ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-import-operations": "ā¤†ā¤¯ā¤žā¤¤ ā¤Ēā¤°ā¤ŋā¤šā¤žā¤˛ā¤¨ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-import-operations_description": "ā¤†ā¤¯ā¤žā¤¤ ā¤Ēā¤°ā¤ŋā¤šā¤žā¤˛ā¤¨ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-omnichannel-contact-center": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•āĨ‡ā¤‚ā¤ĻāĨā¤° ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-omnichannel-contact-center_description": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•āĨ‡ā¤‚ā¤ĻāĨā¤° ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤”ā¤° ā¤‰ā¤¸ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "View_Logs": "ā¤˛āĨ‰ā¤—āĨā¤¸ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "View_original": "ā¤ŽāĨ‚ā¤˛ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "View_the_Logs_for": "ā¤‡ā¤¸ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛āĨ‰ā¤— ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚: \"{{name}}\"", + "view-all-teams": "ā¤¸ā¤­āĨ€ ā¤ŸāĨ€ā¤ŽāĨ‡ā¤‚ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-all-teams_description": "ā¤¸ā¤­āĨ€ ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-all-team-channels": "ā¤¸ā¤­āĨ€ ā¤ŸāĨ€ā¤Ž ā¤šāĨˆā¤¨ā¤˛ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-all-team-channels_description": "ā¤¸ā¤­āĨ€ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-broadcast-member-list": "ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤•ā¤•āĨā¤ˇ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-broadcast-member-list_description": "ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-c-room": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-c-room_description": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-canned-responses": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-canned-responses_description": "ā¤Ąā¤ŋā¤ŦāĨā¤Ŧā¤žā¤Ŧā¤‚ā¤Ļ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-d-room": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-d-room_description": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-device-management": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-device-management_description": "ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-engagement-dashboard": "ā¤¸ā¤šā¤­ā¤žā¤—ā¤ŋā¤¤ā¤ž ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-engagement-dashboard_description": "ā¤¸ā¤šā¤­ā¤žā¤—ā¤ŋā¤¤ā¤ž ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-federation-data": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-federation-data_description": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "View_full_conversation": "ā¤ĒāĨ‚ā¤°āĨ€ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-full-other-user-info": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ€ ā¤ĒāĨ‚ā¤°āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-full-other-user-info_description": "ā¤–ā¤žā¤¤ā¤ž ā¤¨ā¤ŋā¤°āĨā¤Žā¤žā¤Ŗ ā¤¤ā¤ŋā¤Ĩā¤ŋ, ā¤…ā¤‚ā¤¤ā¤ŋā¤Ž ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤†ā¤Ļā¤ŋ ā¤¸ā¤šā¤ŋā¤¤ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤ĒāĨ‚ā¤°āĨ€ ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋāĨ¤", + "view-history": "ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-history_description": "ā¤šāĨˆā¤¨ā¤˛ ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-join-code": "ā¤œāĨ‰ā¤‡ā¤¨ ā¤•āĨ‹ā¤Ą ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-join-code_description": "ā¤šāĨˆā¤¨ā¤˛ ā¤œāĨ‰ā¤‡ā¤¨ ā¤•āĨ‹ā¤Ą ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-joined-room": "ā¤¸ā¤ŽāĨā¤Žā¤ŋā¤˛ā¤ŋā¤¤ ā¤•ā¤•āĨā¤ˇ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-joined-room_description": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-l-room": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤Žā¤°āĨ‡ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-l-room_description": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤Žā¤°āĨ‡ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-analytics": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ā¤¨ā¤žā¤˛ā¤ŋā¤Ÿā¤ŋā¤•āĨā¤¸ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-analytics_description": "ā¤˛ā¤žā¤‡ā¤ĩ ā¤šāĨˆā¤Ÿ ā¤ĩā¤ŋā¤ļāĨā¤˛āĨ‡ā¤ˇā¤Ŗ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-appearance": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-appearance_description": "ā¤˛ā¤žā¤‡ā¤ĩ ā¤šāĨˆā¤Ÿ ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-business-hours": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĩāĨā¤¯ā¤žā¤ĩā¤¸ā¤žā¤¯ā¤ŋā¤• ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-business-hours_description": "ā¤˛ā¤žā¤‡ā¤ĩ ā¤šāĨˆā¤Ÿ ā¤ĩāĨā¤¯ā¤žā¤ĩā¤¸ā¤žā¤¯ā¤ŋā¤• ā¤˜ā¤‚ā¤ŸāĨ‡ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-current-chats": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤šāĨˆā¤Ÿ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-current-chats_description": "ā¤˛ā¤žā¤‡ā¤ĩ ā¤šāĨˆā¤Ÿ ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤šāĨˆā¤Ÿ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-customfields": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-customfields_description": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-departments": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-departments_description": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĩā¤ŋā¤­ā¤žā¤—āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-installation": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤‡ā¤‚ā¤¸āĨā¤Ÿā¤žā¤˛āĨ‡ā¤ļā¤¨ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-installation_description": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¸āĨā¤Ĩā¤žā¤Ēā¤¨ā¤ž ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-manager": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤• ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-manager_description": "ā¤…ā¤¨āĨā¤¯ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-monitor": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤°āĨā¤¸ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-queue": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤¤ā¤žā¤° ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-queue_description": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤¤ā¤žā¤° ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-real-time-monitoring": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤°āĨ€ā¤¯ā¤˛-ā¤Ÿā¤žā¤‡ā¤Ž ā¤ŽāĨ‰ā¤¨ā¤ŋā¤Ÿā¤°ā¤ŋā¤‚ā¤— ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-room-closed-by-another-agent": "ā¤•ā¤ŋā¤¸āĨ€ ā¤…ā¤¨āĨā¤¯ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤°āĨ‚ā¤Ž ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-room-closed-by-another-agent_description": "ā¤•ā¤ŋā¤¸āĨ€ ā¤…ā¤¨āĨā¤¯ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤˛ā¤žā¤‡ā¤ĩ ā¤šāĨˆā¤Ÿ ā¤°āĨ‚ā¤Ž ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-room-closed-same-department": "ā¤‰ā¤¸āĨ€ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤ŽāĨ‡ā¤‚ ā¤•ā¤ŋā¤¸āĨ€ ā¤…ā¤¨āĨā¤¯ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤°āĨ‚ā¤Ž ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-room-closed-same-department_description": "ā¤‰ā¤¸āĨ€ ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤ŽāĨ‡ā¤‚ ā¤•ā¤ŋā¤¸āĨ€ ā¤…ā¤¨āĨā¤¯ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤‚ā¤Ļ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤˛ā¤žā¤‡ā¤ĩ ā¤šāĨˆā¤Ÿ ā¤°āĨ‚ā¤Ž ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-room-customfields": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤•āĨā¤ˇ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-room-customfields_description": "ā¤˛ā¤žā¤‡ā¤ĩ ā¤šāĨˆā¤Ÿ ā¤°āĨ‚ā¤Ž ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-rooms": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤Žā¤°āĨ‡ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-rooms_description": "ā¤…ā¤¨āĨā¤¯ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•ā¤Žā¤°āĨ‡ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-triggers": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-triggers_description": "ā¤˛ā¤žā¤‡ā¤ĩ ā¤šāĨˆā¤Ÿ ā¤ŸāĨā¤°ā¤ŋā¤—ā¤° ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-webhooks": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-livechat-webhooks_description": "ā¤˛ā¤žā¤‡ā¤ĩ ā¤šāĨˆā¤Ÿ ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-livechat-unit": "ā¤˛ā¤žā¤‡ā¤ĩā¤šāĨˆā¤Ÿ ā¤‡ā¤•ā¤žā¤‡ā¤¯ā¤žā¤ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-logs": "ā¤˛āĨ‰ā¤—āĨā¤¸ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-logs_description": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤˛āĨ‰ā¤— ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-other-user-channels": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤šāĨˆā¤¨ā¤˛ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-other-user-channels_description": "ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸āĨā¤ĩā¤žā¤Žā¤ŋā¤¤āĨā¤ĩ ā¤ĩā¤žā¤˛āĨ‡ ā¤šāĨˆā¤¨ā¤˛ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-outside-room": "ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤•ā¤•āĨā¤ˇ ā¤•ā¤ž ā¤ĻāĨƒā¤ļāĨā¤¯", + "view-outside-room_description": "ā¤ŽāĨŒā¤œāĨ‚ā¤Ļā¤ž ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ‡ ā¤Ŧā¤žā¤šā¤° ā¤•āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-p-room": "ā¤¨ā¤ŋā¤œāĨ€ ā¤•ā¤•āĨā¤ˇ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-p-room_description": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-privileged-setting": "ā¤ĩā¤ŋā¤ļāĨ‡ā¤ˇā¤žā¤§ā¤ŋā¤•ā¤žā¤° ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-privileged-setting_description": "ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-moderation-console": "ā¤ŽāĨ‰ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-moderation-console_description": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤•ā¤ž ā¤ŽāĨ‰ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤•ā¤‚ā¤¸āĨ‹ā¤˛ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "manage-moderation-actions": "ā¤ŽāĨ‰ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "manage-moderation-actions_description": "ā¤ŽāĨ‰ā¤Ąā¤°āĨ‡ā¤ļā¤¨ ā¤•ā¤žā¤°āĨā¤°ā¤ĩā¤žā¤‡ā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡, ā¤°ā¤ŋā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤Ēā¤° ā¤•ā¤žā¤°āĨā¤°ā¤ĩā¤žā¤ˆ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ", + "view-room-administration": "ā¤•ā¤•āĨā¤ˇ ā¤ĒāĨā¤°ā¤ļā¤žā¤¸ā¤¨ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-room-administration_description": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤•, ā¤¨ā¤ŋā¤œāĨ€ ā¤”ā¤° ā¤ĒāĨā¤°ā¤¤āĨā¤¯ā¤•āĨā¤ˇ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤ā¤•ā¤Ąā¤ŧāĨ‡ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋāĨ¤ ā¤‡ā¤¸ā¤ŽāĨ‡ā¤‚ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤¯ā¤ž ā¤¸ā¤‚ā¤—āĨā¤°ā¤š ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤•āĨā¤ˇā¤Žā¤¤ā¤ž ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "view-statistics": "ā¤¸ā¤žā¤‚ā¤–āĨā¤¯ā¤ŋā¤•āĨ€ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-statistics_description": "ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤†ā¤ā¤•ā¤Ąā¤ŧāĨ‡ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤œāĨˆā¤¸āĨ‡ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤ŋā¤ ā¤—ā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž, ā¤•ā¤Žā¤°āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž, ā¤‘ā¤Ēā¤°āĨ‡ā¤Ÿā¤ŋā¤‚ā¤— ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "view-user-administration": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ĒāĨā¤°ā¤ļā¤žā¤¸ā¤¨ ā¤ĻāĨ‡ā¤–āĨ‡ā¤‚", + "view-user-administration_description": "ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤–ā¤žā¤¤āĨ‹ā¤‚ ā¤•āĨ‡ ā¤†ā¤‚ā¤ļā¤ŋā¤•, ā¤•āĨ‡ā¤ĩā¤˛ ā¤Ēā¤ĸā¤ŧā¤¨āĨ‡ ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤¸āĨ‚ā¤šāĨ€ ā¤ĻāĨƒā¤ļāĨā¤¯ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋāĨ¤ ā¤‡ā¤¸ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤Ēā¤šāĨā¤‚ā¤š ā¤¯āĨ‹ā¤—āĨā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Viewing_room_administration": "ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•ā¤ž ā¤•ā¤Žā¤°ā¤ž ā¤ĒāĨā¤°ā¤ļā¤žā¤¸ā¤¨", + "Visibility": "ā¤ĻāĨƒā¤ļāĨā¤¯ā¤¤ā¤ž", + "Visible": "ā¤ĻāĨƒā¤ļāĨā¤¯ā¤Žā¤žā¤¨", + "Visible_To_Workspace": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤Ēā¤° ā¤ĻāĨƒā¤ļāĨā¤¯ā¤Žā¤žā¤¨", + "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_not_found": "ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "Visitor_does_not_exist": "ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ!", + "Visitor_Navigation": "ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤¨āĨ‡ā¤ĩā¤ŋā¤—āĨ‡ā¤ļā¤¨", + "Visitor_page_URL": "ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤ĒāĨƒā¤ˇāĨā¤  URL", + "Visitor_time_on_site": "ā¤¸ā¤žā¤‡ā¤Ÿ ā¤Ēā¤° ā¤†ā¤—ā¤‚ā¤¤āĨā¤• ā¤•ā¤ž ā¤¸ā¤Žā¤¯", + "Voice_Call": "ā¤†ā¤ĩā¤žā¤œ ā¤•āĨ‰ā¤˛", + "VoIP_Enable_Keep_Alive_For_Unstable_Networks": "ā¤ā¤¸ā¤†ā¤ˆā¤ĒāĨ€ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤°ā¤–āĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "VoIP_Enable_Keep_Alive_For_Unstable_Networks_Description": "ā¤¸ā¤Žā¤¯-ā¤¸ā¤Žā¤¯ ā¤Ēā¤° ā¤ā¤¸ā¤†ā¤ˆā¤ĒāĨ€ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤•ā¤° ā¤•ā¤ˆ ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤ā¤¸ā¤†ā¤ˆā¤ĒāĨ€ ā¤—āĨ‡ā¤Ÿā¤ĩāĨ‡ ā¤•āĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤•āĨ€ ā¤¨ā¤ŋā¤—ā¤°ā¤žā¤¨āĨ€ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤…ā¤¸āĨā¤Ĩā¤ŋā¤° ā¤¨āĨ‡ā¤Ÿā¤ĩā¤°āĨā¤• ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ.", + "VoIP_Enabled": "ā¤§āĨā¤ĩā¤¨ā¤ŋ ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "VoIP_Enabled_Description": "ā¤†ā¤‰ā¤Ÿā¤Ŧā¤žā¤‰ā¤‚ā¤Ą ā¤”ā¤° ā¤‡ā¤¨ā¤•ā¤Žā¤ŋā¤‚ā¤— ā¤•āĨ‰ā¤˛ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚ ā¤•āĨ‹ ā¤—āĨā¤°ā¤žā¤šā¤•āĨ‹ā¤‚ ā¤¸āĨ‡ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "VoIP_Extension": "ā¤ĩāĨ€ā¤“ā¤†ā¤‡ā¤ĒāĨ€ ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨", + "Voip_Server_Configuration": "ā¤¤ā¤žā¤°ā¤žā¤‚ā¤•ā¤¨ ā¤ĩāĨ‡ā¤Ŧā¤¸āĨ‰ā¤•āĨ‡ā¤Ÿ ā¤¸ā¤°āĨā¤ĩā¤°", + "VoIP_Server_Websocket_Port": "ā¤ĩāĨ‡ā¤Ŧā¤¸āĨ‰ā¤•āĨ‡ā¤Ÿ ā¤ĒāĨ‹ā¤°āĨā¤Ÿ", + "VoIP_Server_Name": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "VoIP_Server_Websocket_Path": "ā¤ĩāĨ‡ā¤Ŧā¤¸āĨ‹ā¤•āĨ‡ā¤Ÿ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "VoIP_Retry_Count": "count ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚", + "VoIP_Retry_Count_Description": "ā¤¯ā¤š ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤–āĨ‹ ā¤œā¤žā¤¨āĨ‡ ā¤Ēā¤° ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ ā¤•ā¤ŋā¤¤ā¤¨āĨ€ ā¤Ŧā¤žā¤° ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤—ā¤žāĨ¤", + "VoIP_Management_Server": "ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤¸ā¤°āĨā¤ĩā¤°", + "VoIP_Management_Server_Host": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤šāĨ‹ā¤¸āĨā¤Ÿ", + "VoIP_Management_Server_Port": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤ĒāĨ‹ā¤°āĨā¤Ÿ", + "VoIP_Management_Server_Name": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "VoIP_Management_Server_Username": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "VoIP_Management_Server_Password": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "Voip_call_started": "ā¤Ēā¤° ā¤•āĨ‰ā¤˛ ā¤ļāĨā¤°āĨ‚ ā¤šāĨā¤ˆ", + "Voip_call_duration": "ā¤•āĨ‰ā¤˛ {{period}} ā¤¤ā¤• ā¤šā¤˛āĨ€", + "Voip_call_declined": "ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ĢāĨ‹ā¤¨ ā¤•ā¤žā¤Ÿ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Voip_call_on_hold": "ā¤•āĨ‰ā¤˛ ā¤•āĨ‹ ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤Ēā¤° ā¤°ā¤–ā¤ž ā¤—ā¤¯ā¤ž", + "Voip_call_unhold": "ā¤Ēā¤° ā¤•āĨ‰ā¤˛ ā¤Ģā¤ŋā¤° ā¤¸āĨ‡ ā¤ļāĨā¤°āĨ‚ ā¤šāĨā¤ˆ", + "Voip_call_ended": "ā¤•āĨ‰ā¤˛ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤—ā¤ˆ", + "Voip_call_ended_unexpectedly": "ā¤•āĨ‰ā¤˛ ā¤…ā¤ĒāĨā¤°ā¤¤āĨā¤¯ā¤žā¤ļā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨā¤ˆ: {{reason}}", + "Voip_call_wrapup": "ā¤•āĨ‰ā¤˛ ā¤°āĨˆā¤Ēā¤…ā¤Ē ā¤¨āĨ‹ā¤ŸāĨā¤¸ ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ ā¤—ā¤: {{comment}}", + "VoIP_JWT_Secret": "ā¤—āĨā¤ĒāĨā¤¤ ā¤•āĨā¤‚ā¤œāĨ€ (JWT)", + "VoIP_JWT_Secret_description": "ā¤¸ā¤žā¤ĻāĨ‡ ā¤Ēā¤žā¤  ā¤•āĨ‡ ā¤Ŧā¤œā¤žā¤¯ JWT ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤°āĨā¤ĩā¤° ā¤¸āĨ‡ ā¤•āĨā¤˛ā¤žā¤‡ā¤‚ā¤Ÿ ā¤¤ā¤• ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ ā¤¸ā¤žā¤ā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤—āĨā¤ĒāĨā¤¤ ā¤•āĨā¤‚ā¤œāĨ€ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤•āĨ‹ā¤ˆ ā¤—āĨā¤ĒāĨā¤¤ ā¤•āĨā¤‚ā¤œāĨ€ ā¤¸āĨ‡ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤•āĨ€ ā¤—ā¤ˆ ā¤šāĨˆ ā¤¤āĨ‹ ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ ā¤¸ā¤žā¤ĻāĨ‡ ā¤Ēā¤žā¤  ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤­āĨ‡ā¤œā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Voip_is_disabled": "ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ", + "Voip_is_disabled_description": "ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤•āĨ€ ā¤¸āĨ‚ā¤šāĨ€ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ‹ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤°ā¤¨ā¤ž ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ, ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤ŸāĨˆā¤Ŧ ā¤ŽāĨ‡ā¤‚ ā¤ā¤¸ā¤ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "VoIP_Toggle": "ā¤ĩāĨ€ā¤“ā¤†ā¤ˆā¤ĒāĨ€ ā¤¸ā¤•āĨā¤ˇā¤Ž/ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "Chat_opened_by_visitor": "ā¤ĩā¤ŋā¤œā¤ŧā¤ŋā¤Ÿā¤° ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤šāĨˆā¤Ÿ ā¤–āĨ‹ā¤˛āĨ€ ā¤—ā¤ˆ", + "Wait_activation_warning": "ā¤‡ā¤¸ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤•ā¤ŋ ā¤†ā¤Ē ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤° ā¤¸ā¤•āĨ‡ā¤‚, ā¤†ā¤Ēā¤•ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤•ā¤ŋā¤¸āĨ€ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤", + "Waiting_for_answer": "ā¤œā¤ĩā¤žā¤Ŧ ā¤•ā¤ž ā¤‡ā¤‚ā¤¤ā¤œā¤ŧā¤žā¤° ā¤°ā¤šā¤ž ā¤šāĨ‚ā¤", + "Waiting_queue": "ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤¤ā¤žā¤°", + "Waiting_queue_message": "ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•ā¤¤ā¤žā¤° ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "Waiting_queue_message_description": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤œāĨ‹ ā¤†ā¤—ā¤‚ā¤¤āĨā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛ā¤—ā¤¨āĨ‡ ā¤Ēā¤° ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤ŋā¤¤ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤ž", + "Waiting_Time": "ā¤‡ā¤‚ā¤¤ā¤œā¤ŧā¤žā¤° ā¤•ā¤ž ā¤¸ā¤Žā¤¯", + "Waiting_for_server_connection": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤•āĨ€ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž ā¤•āĨ€ ā¤œā¤ž ā¤°ā¤šāĨ€ ā¤šāĨˆ", + "Warning": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨āĨ€", + "Warnings": "ā¤šāĨ‡ā¤¤ā¤žā¤ĩā¤¨ā¤ŋā¤¯ā¤žā¤", + "WAU_value": "ā¤ŽāĨˆā¤‚ ā¤•ā¤ĻāĨā¤° ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨ‚ā¤‚ {{value}}", + "We_appreciate_your_feedback": "ā¤šā¤Ž ā¤†ā¤Ēā¤•āĨ‡ ā¤Ģā¤ŧāĨ€ā¤Ąā¤ŦāĨˆā¤• ā¤•āĨ€ ā¤¸ā¤°ā¤žā¤šā¤¨ā¤ž ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚", "We_are_offline_Sorry_for_the_inconvenience": "ā¤šā¤Ž ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤šāĨˆā¤‚āĨ¤ ā¤…ā¤¸āĨā¤ĩā¤ŋā¤§ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤–āĨ‡ā¤Ļ ā¤šāĨˆāĨ¤", + "We_Could_not_retrive_any_data": "ā¤šā¤Ž ā¤•āĨ‹ā¤ˆ ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤¸ā¤•āĨ‡", + "We_have_sent_password_email": "ā¤šā¤Žā¤¨āĨ‡ ā¤†ā¤Ēā¤•āĨ‹ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ā¤• ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤ž ā¤šāĨˆāĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤•āĨ‹ ā¤ļāĨ€ā¤˜āĨā¤° ā¤šāĨ€ ā¤•āĨ‹ā¤ˆ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĩā¤žā¤Ēā¤¸ ā¤†ā¤ā¤‚ ā¤”ā¤° ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "We_have_sent_registration_email": "ā¤šā¤Žā¤¨āĨ‡ ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤ā¤• ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤ž ā¤šāĨˆāĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤•āĨ‹ ā¤ļāĨ€ā¤˜āĨā¤° ā¤šāĨ€ ā¤•āĨ‹ā¤ˆ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĩā¤žā¤Ēā¤¸ ā¤†ā¤ā¤‚ ā¤”ā¤° ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Webdav Integration": "ā¤ĩāĨ‡ā¤Ŧā¤Ąā¤žā¤ĩ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ", + "Webdav Integration_Description": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤°āĨā¤ĩā¤° ā¤Ēā¤° ā¤Ļā¤¸āĨā¤¤ā¤žā¤ĩāĨ‡ā¤œā¤ŧ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡, ā¤Ŧā¤Ļā¤˛ā¤¨āĨ‡ ā¤”ā¤° ā¤¸āĨā¤Ĩā¤žā¤¨ā¤žā¤‚ā¤¤ā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤°āĨ‚ā¤Ēā¤°āĨ‡ā¤–ā¤žāĨ¤ Nextcloud ā¤œāĨˆā¤¸āĨ‡ WebDAV ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‹ ā¤˛ā¤ŋā¤‚ā¤• ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "WebDAV_Accounts": "ā¤ĩāĨ‡ā¤Ŧā¤ĄāĨ€ā¤ā¤ĩāĨ€ ā¤–ā¤žā¤¤āĨ‡", + "Webdav_add_new_account": "ā¤¨ā¤¯ā¤ž WebDAV ā¤–ā¤žā¤¤ā¤ž ā¤œāĨ‹ā¤Ąā¤ŧāĨ‡ā¤‚", + "Webdav_Integration_Enabled": "ā¤ĩāĨ‡ā¤Ŧā¤Ąā¤žā¤ĩ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤¸ā¤•āĨā¤ˇā¤Ž", + "WebDAV_Integration_Not_Allowed": "WebDAV ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Webdav_Password": "ā¤ĩāĨ‡ā¤Ŧā¤ĄāĨ€ā¤ā¤ĩāĨ€ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "Webdav_Server_URL": "WebDAV ā¤¸ā¤°āĨā¤ĩā¤° ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Webdav_Username": "ā¤ĩāĨ‡ā¤Ŧā¤ĄāĨ€ā¤ā¤ĩāĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "Webdav_account_removed": "WebDAV ā¤–ā¤žā¤¤ā¤ž ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "webdav-account-saved": "WebDAV ā¤–ā¤žā¤¤ā¤ž ā¤¸ā¤šāĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž", + "webdav-account-updated": "WebDAV ā¤–ā¤žā¤¤ā¤ž ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "webdav-server-not-found": "WebDAV ā¤¸ā¤°āĨā¤ĩā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "Webhook_Details": "ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤ĩā¤ŋā¤ĩā¤°ā¤Ŗ", + "Webhook_URL": "ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛", + "Webhook_URL_not_set": "ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤• ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤¸āĨ‡ā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Webhooks": "ā¤ĩāĨ‡ā¤Ŧā¤šāĨā¤•", + "WebRTC": "ā¤ĩāĨ‡ā¤Ŧā¤†ā¤°ā¤ŸāĨ€ā¤¸āĨ€", + "WebRTC_Description": "ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤”ā¤°/ā¤¯ā¤ž ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤¸ā¤žā¤Žā¤—āĨā¤°āĨ€ ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚, ā¤¸ā¤žā¤Ĩ ā¤šāĨ€ ā¤•ā¤ŋā¤¸āĨ€ ā¤Ŧā¤ŋā¤šāĨŒā¤˛ā¤ŋā¤ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤•āĨ‡ ā¤Ŧā¤ŋā¤¨ā¤ž ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤°āĨ‹ā¤‚ ā¤•āĨ‡ ā¤ŦāĨ€ā¤š ā¤Žā¤¨ā¤Žā¤žā¤¨ā¤ž ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "WebRTC_Call": "ā¤ĩāĨ‡ā¤Ŧā¤†ā¤°ā¤ŸāĨ€ā¤¸āĨ€ ā¤•āĨ‰ā¤˛", + "WebRTC_Call_unavailable_for_federation": "ā¤Ģā¤ŧāĨ‡ā¤Ąā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤°āĨ‚ā¤Ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ WebRTC ā¤•āĨ‰ā¤˛ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "WebRTC_direct_audio_call_from_%s": "%s ā¤¸āĨ‡ ā¤¸āĨ€ā¤§ā¤ž ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛", + "WebRTC_direct_video_call_from_%s": "%s ā¤¸āĨ‡ ā¤¸āĨ€ā¤§ā¤ž ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛", + "WebRTC_Enable_Channel": "ā¤¸ā¤žā¤°āĨā¤ĩā¤œā¤¨ā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "WebRTC_Enable_Direct": "ā¤¸āĨ€ā¤§āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļāĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "WebRTC_Enable_Private": "ā¤¨ā¤ŋā¤œāĨ€ ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚", + "WebRTC_group_audio_call_from_%s": "%s ā¤¸āĨ‡ ā¤¸ā¤ŽāĨ‚ā¤š ā¤‘ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛", + "WebRTC_group_video_call_from_%s": "%s ā¤¸āĨ‡ ā¤¸ā¤ŽāĨ‚ā¤š ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛", + "WebRTC_monitor_call_from_%s": "%s ā¤¸āĨ‡ ā¤•āĨ‰ā¤˛ ā¤•āĨ€ ā¤¨ā¤ŋā¤—ā¤°ā¤žā¤¨āĨ€ ā¤•ā¤°āĨ‡ā¤‚", + "WebRTC_Servers": "ā¤¸āĨā¤Ÿā¤¨/ā¤Ÿā¤°āĨā¤¨ ā¤¸ā¤°āĨā¤ĩā¤°", + "WebRTC_Servers_Description": "ā¤…ā¤˛āĨā¤Ēā¤ĩā¤ŋā¤°ā¤žā¤Ž ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤…ā¤˛ā¤— ā¤•ā¤ŋā¤ ā¤—ā¤ STUN ā¤”ā¤° TURN ā¤¸ā¤°āĨā¤ĩā¤°āĨ‹ā¤‚ ā¤•āĨ€ ā¤ā¤• ā¤¸āĨ‚ā¤šāĨ€āĨ¤\n ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž, ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤”ā¤° ā¤ĒāĨ‹ā¤°āĨā¤Ÿ ā¤•āĨ‹ `username:password@stun:host:port` ā¤¯ā¤ž `username:password@turn:host:port` ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ€ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "WebRTC_call_ended_message": "ā¤•āĨ‰ā¤˛ {{endTime}} ā¤Ēā¤° ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨā¤ˆ - {{callDuration}} ā¤¤ā¤• ā¤šā¤˛āĨ€", + "WebRTC_call_declined_message": "ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤•āĨ‰ā¤˛ ā¤…ā¤¸āĨā¤ĩāĨ€ā¤•āĨƒā¤¤.", + "Website": "ā¤ĩāĨ‡ā¤Ŧā¤¸ā¤žā¤‡ā¤Ÿ", + "Wednesday": "ā¤ŦāĨā¤§ā¤ĩā¤žā¤°", + "Weekly_Active_Users": "ā¤¸ā¤žā¤ĒāĨā¤¤ā¤žā¤šā¤ŋā¤• ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Welcome": "ā¤¸āĨā¤ĩā¤žā¤—ā¤¤ ā¤šāĨˆ %s .", + "Welcome_to": "[ā¤¸ā¤žā¤‡ā¤Ÿ_ā¤¨ā¤žā¤Ž] ā¤ŽāĨ‡ā¤‚ ā¤†ā¤Ēā¤•ā¤ž ā¤¸āĨā¤ĩā¤žā¤—ā¤¤ ā¤šāĨˆ", + "Welcome_to_workspace": "{{Site_Name}} ā¤ŽāĨ‡ā¤‚ ā¤†ā¤Ēā¤•ā¤ž ā¤¸āĨā¤ĩā¤žā¤—ā¤¤ ā¤šāĨˆ", + "Welcome_to_the": "ā¤†ā¤Ēā¤•ā¤ž ā¤¸āĨā¤ĩā¤žā¤—ā¤¤ ā¤šāĨˆ", + "When": "ā¤•ā¤Ŧ", + "When_a_line_starts_with_one_of_there_words_post_to_the_URLs_below": "ā¤œā¤Ŧ ā¤•āĨ‹ā¤ˆ ā¤Ēā¤‚ā¤•āĨā¤¤ā¤ŋ ā¤‡ā¤¨ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ ā¤•ā¤ŋā¤¸āĨ€ ā¤ā¤• ā¤ļā¤ŦāĨā¤Ļ ā¤¸āĨ‡ ā¤ļāĨā¤°āĨ‚ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆ, ā¤¤āĨ‹ ā¤¨āĨ€ā¤šāĨ‡ ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤Ēā¤° ā¤ĒāĨ‹ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "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": "ā¤Ŧā¤ŋā¤¨ā¤ž ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤•ā¤¤ā¤ž ā¤•āĨ‡", + "Without_SLA": "ā¤ā¤¸ā¤ā¤˛ā¤ ā¤•āĨ‡ ā¤Ŧā¤ŋā¤¨ā¤ž", + "Workspace_now_using_device_management": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤…ā¤Ŧ ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Worldwide": "ā¤ĻāĨā¤¨ā¤ŋā¤¯ā¤ž ā¤­ā¤°", + "Would_you_like_to_return_the_inquiry": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤ĒāĨ‚ā¤›ā¤¤ā¤žā¤› ā¤ĩā¤žā¤Ēā¤¸ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šāĨ‡ā¤‚ā¤—āĨ‡?", + "Would_you_like_to_return_the_queue": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤‡ā¤¸ ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ‹ ā¤ĩā¤žā¤Ēā¤¸ ā¤•ā¤¤ā¤žā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‡ ā¤œā¤žā¤¨ā¤ž ā¤šā¤žā¤šāĨ‡ā¤‚ā¤—āĨ‡? ā¤¸ā¤žā¤°āĨ€ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•ā¤ž ā¤‡ā¤¤ā¤ŋā¤šā¤žā¤¸ ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤°ā¤–ā¤ž ā¤œā¤žā¤ā¤—ā¤ž.", + "Would_you_like_to_place_chat_on_hold": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ē ā¤‡ā¤¸ ā¤šāĨˆā¤Ÿ ā¤•āĨ‹ ā¤‘ā¤¨-ā¤šāĨ‹ā¤˛āĨā¤Ą ā¤°ā¤–ā¤¨ā¤ž ā¤šā¤žā¤šāĨ‡ā¤‚ā¤—āĨ‡?", + "Wrap_up_the_call": "ā¤•āĨ‰ā¤˛ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Wrap_Up_Notes": "ā¤¸ā¤Žā¤žā¤Ēā¤¨ ā¤¨āĨ‹ā¤ŸāĨā¤¸", + "Workspace": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨", "Yes": "ā¤šā¤žā¤", - "You": "ā¤†ā¤Ē" + "Yes_archive_it": "ā¤šā¤žā¤, ā¤‡ā¤¸āĨ‡ ā¤¸ā¤‚ā¤—āĨā¤°ā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚!", + "Yes_clear_all": "ā¤šā¤žā¤, ā¤¸ā¤Ŧ ā¤¸ā¤žā¤Ģā¤ŧ ā¤•ā¤°āĨ‡ā¤‚!", + "Yes_continue": "ā¤šā¤žā¤, ā¤œā¤žā¤°āĨ€ ā¤°ā¤–āĨ‡ā¤‚!", + "Yes_deactivate_it": "ā¤šā¤žā¤, ā¤‡ā¤¸āĨ‡ ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤°āĨ‡ā¤‚!", + "Yes_delete_it": "ā¤šā¤žā¤, ā¤‡ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤ĻāĨ‡ā¤‚!", + "Yes_hide_it": "ā¤šā¤žā¤, ā¤›āĨā¤Ēā¤žā¤“!", + "Yes_leave_it": "ā¤šā¤žā¤, ā¤›āĨ‹ā¤Ąā¤ŧāĨ‹!", + "Yes_mute_user": "ā¤šā¤žā¤, ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤ŽāĨā¤¯āĨ‚ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚!", + "Yes_prune_them": "ā¤šā¤žā¤, ā¤‰ā¤¨ā¤•āĨ€ ā¤•ā¤žā¤Ÿ-ā¤›ā¤žā¤ā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚!", + "Yes_remove_user": "ā¤šā¤žā¤, ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‹ ā¤šā¤Ÿā¤ž ā¤ĻāĨ‡ā¤‚!", + "Yes_unarchive_it": "ā¤šā¤žā¤, ā¤‡ā¤¸āĨ‡ ā¤…ā¤¸ā¤‚ā¤—āĨā¤°ā¤šāĨ€ā¤¤ ā¤•ā¤°āĨ‡ā¤‚!", + "yesterday": "ā¤•ā¤˛", + "Yesterday": "ā¤•ā¤˛", + "You": "ā¤†ā¤Ē", + "You_reacted_with": "ā¤†ā¤Ēā¤¨āĨ‡ {{emoji}} ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĩāĨā¤¯ā¤•āĨā¤¤ ā¤•āĨ€", + "Users_reacted_with": "{{users}} ā¤¨āĨ‡ {{emoji}} ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĩāĨā¤¯ā¤•āĨā¤¤ ā¤•āĨ€", + "Users_and_more_reacted_with": "{{user}} ā¤”ā¤° {{counter}} ā¤”ā¤° ā¤…ā¤§ā¤ŋā¤• ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤¨āĨ‡ {{emoji}} ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĩāĨā¤¯ā¤•āĨā¤¤ ā¤•āĨ€", + "You_and_users_Reacted_with": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤”ā¤° {{users}} ā¤¨āĨ‡ {{emoji}} ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĩāĨā¤¯ā¤•āĨā¤¤ ā¤•āĨ€", + "You_users_and_more_Reacted_with": "ā¤†ā¤Ēā¤¨āĨ‡, {{user}} ā¤”ā¤° {{counter}} ā¤¨āĨ‡ {{emoji}} ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĩāĨā¤¯ā¤•āĨā¤¤ ā¤•āĨ€", + "You_are_converting_team_to_channel": "ā¤†ā¤Ē ā¤‡ā¤¸ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤ā¤• ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ēā¤°ā¤ŋā¤ĩā¤°āĨā¤¤ā¤ŋā¤¤ ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "you_are_in_preview_mode_of": "ā¤†ā¤Ē ā¤šāĨˆā¤¨ā¤˛ # {{room_name}} ā¤•āĨ‡ ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤ŽāĨ‹ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆā¤‚", + "you_are_in_preview": "ā¤†ā¤Ē ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤žā¤ĩā¤˛āĨ‹ā¤•ā¤¨ ā¤ŽāĨ‹ā¤Ą ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆā¤‚", + "you_are_in_preview_please_insert_the_password": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ąā¤žā¤˛āĨ‡ā¤‚", + "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": "ā¤†ā¤Ē ā¤°āĨ‡ā¤—āĨā¤˛ā¤° ā¤ā¤•āĨā¤¸ā¤ĒāĨā¤°āĨ‡ā¤ļā¤¨ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤–āĨ‹ā¤œ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤‰ā¤Ļā¤žā¤šā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ /^text$/i", + "You_can_try_to": "ā¤†ā¤Ē ā¤•āĨ‹ā¤ļā¤ŋā¤ļ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "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_followed_this_message": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤‡ā¤¸ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•ā¤ž ā¤…ā¤¨āĨā¤¸ā¤°ā¤Ŗ ā¤•ā¤ŋā¤¯ā¤ž.", + "You_have_a_new_message": "ā¤†ā¤Ēā¤•āĨ‹ ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤†ā¤¯ā¤ž ā¤šāĨˆ", + "You_have_been_muted": "ā¤†ā¤Ēā¤•āĨ‹ ā¤ŽāĨŒā¤¨ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ ā¤”ā¤° ā¤†ā¤Ē ā¤‡ā¤¸ ā¤•ā¤Žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤ŦāĨ‹ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤¸ā¤•ā¤¤āĨ‡", + "You_have_been_removed_from__roomName_": "ā¤†ā¤Ēā¤•āĨ‹ ā¤•ā¤Žā¤°āĨ‡ {{roomName}} ā¤¸āĨ‡ ā¤¨ā¤ŋā¤•ā¤žā¤˛ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "You_have_joined_a_new_call_with": "ā¤†ā¤Ē ā¤ā¤• ā¤¨ā¤ˆ ā¤•āĨ‰ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨā¤ ā¤šāĨˆā¤‚", + "You_have_n_codes_remaining": "ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ {{number}} ā¤•āĨ‹ā¤Ą ā¤ļāĨ‡ā¤ˇ ā¤šāĨˆā¤‚āĨ¤", + "You_have_not_verified_your_email": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤…ā¤Ēā¤¨ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ.", + "You_have_successfully_unsubscribed": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤šā¤Žā¤žā¤°āĨ€ ā¤ŽāĨ‡ā¤˛ā¤ŋā¤‚ā¤— ā¤¸āĨ‚ā¤šāĨ€ ā¤¸āĨ‡ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤° ā¤ĻāĨ€ ā¤šāĨˆāĨ¤", + "You_must_join_to_view_messages_in_this_channel": "ā¤‡ā¤¸ ā¤šāĨˆā¤¨ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤ĻāĨ‡ā¤–ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤ĩā¤ļāĨā¤¯ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤", + "You_need_confirm_email": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°ā¤¨āĨ€ ā¤šāĨ‹ā¤—āĨ€!", + "You_need_install_an_extension_to_allow_screen_sharing": "ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤ļāĨ‡ā¤¯ā¤°ā¤ŋā¤‚ā¤— ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤ā¤• ā¤ā¤•āĨā¤¸ā¤ŸāĨ‡ā¤‚ā¤ļā¤¨ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž", + "You_need_to_change_your_password": "ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ŧā¤Ļā¤˛ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž", + "You_need_to_type_in_your_password_in_order_to_do_this": "ā¤ā¤¸ā¤ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ÿā¤žā¤‡ā¤Ē ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž!", + "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": "ā¤†ā¤Ēā¤•āĨ‹ ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž ā¤ā¤• ā¤¯āĨ‚ā¤†ā¤°ā¤ā¤˛ ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤.", + "You_should_name_it_to_easily_manage_your_integrations": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤ā¤•āĨ€ā¤•ā¤°ā¤ŖāĨ‹ā¤‚ ā¤•āĨ‹ ā¤†ā¤¸ā¤žā¤¨āĨ€ ā¤¸āĨ‡ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤‡ā¤¸āĨ‡ ā¤¨ā¤žā¤Ž ā¤ĻāĨ‡ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤", + "You_unfollowed_this_message": "ā¤†ā¤Ēā¤¨āĨ‡ ā¤‡ā¤¸ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ ā¤…ā¤¨ā¤Ģā¤ŧāĨ‰ā¤˛āĨ‹ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤šāĨˆ.", + "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 ā¤•āĨā¤‚ā¤œāĨ€ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤° ā¤ĻāĨ€ ā¤—ā¤ˆ ā¤šāĨˆ.", + "Your_email_address_has_changed": "ā¤†ā¤Ēā¤•ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž ā¤Ŧā¤Ļā¤˛ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ.", + "Your_email_has_been_queued_for_sending": "ā¤†ā¤Ēā¤•ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤¤ā¤žā¤°ā¤Ŧā¤ĻāĨā¤§ ā¤šāĨˆ", + "Your_entry_has_been_deleted": "ā¤†ā¤Ēā¤•āĨ€ ā¤ĒāĨā¤°ā¤ĩā¤ŋā¤ˇāĨā¤Ÿā¤ŋ ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤—ā¤ˆ ā¤šāĨˆ.", + "Your_file_has_been_deleted": "ā¤†ā¤Ēā¤•āĨ€ ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤šā¤Ÿā¤ž ā¤ĻāĨ€ ā¤—ā¤ˆ ā¤šāĨˆ.", + "Your_invite_link_will_expire_after__usesLeft__uses": "ā¤†ā¤Ēā¤•ā¤ž ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤˛ā¤ŋā¤‚ā¤• {{usesLeft}} ā¤•āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Your_invite_link_will_expire_on__date__": "ā¤†ā¤Ēā¤•ā¤ž ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤˛ā¤ŋā¤‚ā¤• {{date}} ā¤•āĨ‹ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Your_invite_link_will_expire_on__date__or_after__usesLeft__uses": "ā¤†ā¤Ēā¤•ā¤ž ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤˛ā¤ŋā¤‚ā¤• {{date}} ā¤•āĨ‹ ā¤¯ā¤ž {{usesLeft}} ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ‡ ā¤Ŧā¤žā¤Ļ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Your_invite_link_will_never_expire": "ā¤†ā¤Ēā¤•ā¤ž ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤˛ā¤ŋā¤‚ā¤• ā¤•ā¤­āĨ€ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤—ā¤ž.", + "your_message": "ā¤†ā¤Ēā¤•ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "your_message_optional": "ā¤†ā¤Ēā¤•ā¤ž ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ (ā¤ĩāĨˆā¤•ā¤˛āĨā¤Ēā¤ŋā¤•)", + "Your_new_email_is_email": "ā¤†ā¤Ēā¤•ā¤ž ā¤¨ā¤¯ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤ā¤ž [ā¤ˆā¤ŽāĨ‡ā¤˛] ā¤šāĨˆāĨ¤", + "Your_password_is_wrong": "ā¤†ā¤Ēā¤•ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤—ā¤ŧā¤˛ā¤¤ ā¤šāĨˆ!", + "Your_password_was_changed_by_an_admin": "ā¤†ā¤Ēā¤•ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•ā¤ŋā¤¸āĨ€ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤Ļā¤˛ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤Ĩā¤ž.", + "Your_push_was_sent_to_s_devices": "ā¤†ā¤Ēā¤•ā¤ž ā¤ĒāĨā¤ļ %s ā¤Ąā¤ŋā¤ĩā¤žā¤‡ā¤¸ ā¤Ēā¤° ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž ā¤Ĩā¤ž", + "Your_request_to_join__roomName__has_been_made_it_could_take_up_to_15_minutes_to_be_processed": "{{roomName}} ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ, ā¤‡ā¤¸āĨ‡ ā¤¸ā¤‚ā¤¸ā¤žā¤§ā¤ŋā¤¤ ā¤šāĨ‹ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ 15 ā¤Žā¤ŋā¤¨ā¤Ÿ ā¤¤ā¤• ā¤•ā¤ž ā¤¸ā¤Žā¤¯ ā¤˛ā¤— ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤œā¤Ŧ ā¤¯ā¤š ā¤œā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¤āĨˆā¤¯ā¤žā¤° ā¤šāĨ‹ā¤—ā¤ž ā¤¤āĨ‹ ā¤†ā¤Ēā¤•āĨ‹ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "Your_question": "ā¤†ā¤Ēā¤•ā¤ž ā¤ĒāĨā¤°ā¤ļāĨā¤¨", + "Your_server_link": "ā¤†ā¤Ēā¤•ā¤ž ā¤¸ā¤°āĨā¤ĩā¤° ā¤˛ā¤ŋā¤‚ā¤•", + "Your_temporary_password_is_password": "ā¤†ā¤Ēā¤•ā¤ž ā¤…ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą [ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą] ā¤šāĨˆāĨ¤", + "Your_TOTP_has_been_reset": "ā¤†ā¤Ēā¤•ā¤ž ā¤ŸāĨ‚ ā¤ĢāĨˆā¤•āĨā¤Ÿā¤° ā¤ŸāĨ€ā¤“ā¤ŸāĨ€ā¤ĒāĨ€ ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤", + "Your_web_browser_blocked_Rocket_Chat_from_opening_tab": "ā¤†ā¤Ēā¤•āĨ‡ ā¤ĩāĨ‡ā¤Ŧ ā¤ŦāĨā¤°ā¤žā¤‰ā¤œā¤ŧā¤° ā¤¨āĨ‡ Rocket.Chat ā¤•āĨ‹ ā¤¨ā¤¯ā¤ž ā¤ŸāĨˆā¤Ŧ ā¤–āĨ‹ā¤˛ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤°āĨ‹ā¤• ā¤Ļā¤ŋā¤¯ā¤ž ā¤šāĨˆāĨ¤", + "Your_workspace_is_ready": "ā¤†ā¤Ēā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¤āĨˆā¤¯ā¤žā¤° ā¤šāĨˆ 🎉", + "Zapier": "Zapier", + "registration.page.login.errors.wrongCredentials": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž ā¤¯ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤—ā¤ŧā¤˛ā¤¤ ā¤šāĨˆ", + "registration.page.login.errors.invalidEmail": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤ˆā¤ŽāĨ‡ā¤˛", + "registration.page.login.errors.loginBlockedForIp": "ā¤‡ā¤¸ ā¤†ā¤ˆā¤ĒāĨ€ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤…ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "registration.page.login.errors.loginBlockedForUser": "ā¤‡ā¤¸ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤…ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤ĩā¤°āĨā¤ĻāĨā¤§ ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ", + "registration.page.login.errors.licenseUserLimitReached": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤¤ā¤• ā¤Ēā¤šāĨā¤ā¤š ā¤—ā¤¯ā¤ž ā¤šāĨˆ.", + "registration.page.login.errors.AppUserNotAllowedToLogin": "ā¤ā¤Ē ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤¸āĨ€ā¤§āĨ‡ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆāĨ¤", + "registration.page.registration.waitActivationWarning": "ā¤‡ā¤¸ā¤¸āĨ‡ ā¤Ēā¤šā¤˛āĨ‡ ā¤•ā¤ŋ ā¤†ā¤Ē ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤° ā¤¸ā¤•āĨ‡ā¤‚, ā¤†ā¤Ēā¤•ā¤ž ā¤–ā¤žā¤¤ā¤ž ā¤•ā¤ŋā¤¸āĨ€ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤ŋā¤āĨ¤", + "registration.page.login.register": "ā¤…ā¤Ŧ ā¤¯ā¤šā¤žā¤‚? <1>ā¤ā¤• ā¤–ā¤žā¤¤ā¤ž ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "registration.page.login.forgot": "ā¤…ā¤Ēā¤¨ā¤ž ā¤•āĨ‚ā¤Ÿ ā¤ļā¤ŦāĨā¤Ļ ā¤­āĨ‚ā¤˛ ā¤—ā¤?", + "registration.page.register.back": "ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤œā¤žā¤ā¤‚", + "registration.page.emailVerification.subTitle": "ā¤‡ā¤¸ ā¤¸ā¤°āĨā¤ĩā¤° ā¤•āĨ‹ ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤¤āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨ ā¤˛ā¤ŋā¤‚ā¤• ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤œā¤žā¤‚ā¤šāĨ‡ā¤‚āĨ¤", + "registration.page.emailVerification.sent": "ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤¨ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž, ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤…ā¤Ēā¤¨ā¤ž ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤œā¤žā¤‚ā¤šāĨ‡ā¤‚āĨ¤", + "registration.page.resetPassword.sent": "ā¤¯ā¤Ļā¤ŋ ā¤¯ā¤š ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤šāĨˆ, ā¤¤āĨ‹ ā¤šā¤Ž ā¤†ā¤Ēā¤•ā¤ž ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤¤ā¤°āĨ€ā¤•āĨ‡ ā¤Ēā¤° ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œāĨ‡ā¤‚ā¤—āĨ‡āĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤•āĨ‹ ā¤ļāĨ€ā¤˜āĨā¤° ā¤šāĨ€ ā¤•āĨ‹ā¤ˆ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤ĩā¤žā¤Ēā¤¸ ā¤†ā¤ā¤‚ ā¤”ā¤° ā¤ĒāĨā¤¨ā¤ƒ ā¤ĒāĨā¤°ā¤¯ā¤žā¤¸ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "registration.page.resetPassword.sendInstructions": "ā¤¨ā¤ŋā¤°āĨā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "registration.page.resetPassword.errors.invalidEmail": "ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤ˆā¤ŽāĨ‡ā¤˛", + "registration.page.poweredBy": "<1>Rocket.Chat ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤¸ā¤‚ā¤šā¤žā¤˛ā¤ŋā¤¤", + "registration.page.guest.chooseHowToJoin": "ā¤šāĨā¤¨āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤†ā¤Ē ā¤•āĨˆā¤¸āĨ‡ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨ā¤ž ā¤šā¤žā¤šā¤¤āĨ‡ ā¤šāĨˆā¤‚", + "registration.page.guest.loginWithRocketChat": "Rocket.Chat ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "registration.page.guest.continueAsGuest": "ā¤…ā¤¤ā¤ŋā¤Ĩā¤ŋ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤°āĨ€ ā¤°ā¤–āĨ‡ā¤‚", + "registration.component.welcome": "<1>Rocket.Chat ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤†ā¤Ēā¤•ā¤ž ā¤¸āĨā¤ĩā¤žā¤—ā¤¤ ā¤šāĨˆ", + "registration.component.login": "ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°āĨ‡ā¤‚", + "registration.component.login.userNotFound": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤Žā¤ŋā¤˛ā¤ž", + "registration.component.login.incorrectPassword": "ā¤—ā¤˛ā¤¤ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "registration.component.switchLanguage": "<1>{{name}} ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚", + "registration.component.resetPassword": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤°āĨ€ā¤¸āĨ‡ā¤Ÿ", + "registration.component.form.emailOrUsername": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¯ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "registration.component.form.username": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "registration.component.form.name": "ā¤¨ā¤žā¤Ž", + "registration.component.form.nameOptional": "ā¤¨ā¤žā¤Ž: (ā¤ĩāĨˆā¤•ā¤˛āĨā¤Ēā¤ŋā¤•", + "registration.component.form.createAnAccount": "ā¤–ā¤žā¤¤ā¤ž ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "registration.component.form.userAlreadyExist": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆāĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤•āĨ‹ā¤ˆ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤†ā¤œā¤ŧā¤Žā¤žā¤ā¤.", + "registration.component.form.emailAlreadyExists": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤šāĨ€ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ", + "registration.component.form.usernameAlreadyExists": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•ā¤ž ā¤¨ā¤žā¤Ž ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆāĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤•āĨ‹ā¤ˆ ā¤…ā¤¨āĨā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤•āĨā¤¤ā¤žā¤¨ā¤žā¤Ž ā¤†ā¤œā¤ŧā¤Žā¤žā¤ā¤.", + "registration.component.form.invalidEmail": "ā¤Ļā¤°āĨā¤œ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤…ā¤Žā¤žā¤¨āĨā¤¯ ā¤šāĨˆ", + "registration.component.form.email": "ā¤ˆā¤ŽāĨ‡ā¤˛", + "registration.component.form.emailPlaceholder": "example@example.com", + "registration.component.form.password": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "registration.component.form.divider": "ā¤¯ā¤ž", + "registration.component.form.submit": "ā¤œā¤Žā¤ž ā¤•ā¤°ā¤¨ā¤ž", + "registration.component.form.requiredField": "ā¤¯ā¤š ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ", + "registration.component.form.joinYourTeam": "ā¤…ā¤Ēā¤¨āĨ€ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤‚", + "registration.component.form.reasonToJoin": "ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•ā¤ž ā¤•ā¤žā¤°ā¤Ŗ", + "registration.component.form.invalidConfirmPass": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋā¤•ā¤°ā¤Ŗ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤¸āĨ‡ ā¤ŽāĨ‡ā¤˛ ā¤¨ā¤šāĨ€ā¤‚ ā¤–ā¤žā¤¤ā¤ž", + "registration.component.form.confirmPassword": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°āĨ‡ā¤‚", + "registration.component.form.confirmation": "ā¤ĒāĨā¤ˇāĨā¤ŸāĨ€ā¤•ā¤°ā¤Ŗ", + "registration.component.form.sendConfirmationEmail": "ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋā¤•ā¤°ā¤Ŗ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "registration.component.form.register": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°ā¤ĩā¤žā¤¨ā¤ž", + "onboarding.component.form.requiredField": "ā¤¯ā¤š ā¤Ģā¤ŧāĨ€ā¤˛āĨā¤Ą ā¤†ā¤ĩā¤ļāĨā¤¯ā¤• ā¤šāĨˆ", + "onboarding.component.form.steps": "{{stepCount}} ā¤•ā¤ž ā¤šā¤°ā¤Ŗ {{currentStep}}", + "onboarding.component.form.action.back": "ā¤ĒāĨ€ā¤›āĨ‡", + "onboarding.component.form.action.next": "ā¤…ā¤—ā¤˛ā¤ž", + "onboarding.component.form.action.skip": "ā¤‡ā¤¸ ā¤¸āĨā¤ŸāĨ‡ā¤Ē ā¤•āĨ‹ ā¤›āĨ‹ā¤Ąā¤ŧ ā¤ĻāĨ‡ā¤‚", + "onboarding.component.form.action.register": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°ā¤ĩā¤žā¤¨ā¤ž", + "onboarding.component.form.action.registerWorkspace": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.component.form.action.registerOffline": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.component.form.action.confirm": "ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤•ā¤°ā¤¨ā¤ž", + "onboarding.component.form.action.pasteHere": "ā¤¯ā¤šā¤žā¤‚ ā¤šā¤ŋā¤Ēā¤•ā¤žā¤ā¤‚...", + "onboarding.component.form.action.completeRegistration": "ā¤ĒāĨ‚ā¤°ā¤ž ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ", + "onboarding.component.form.termsAndConditions": "ā¤ŽāĨˆā¤‚ <1>ā¤¨ā¤ŋā¤¯ā¤Ž ā¤ā¤ĩā¤‚ ā¤ļā¤°āĨā¤¤āĨ‡ā¤‚ ā¤”ā¤° <3>ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¨āĨ€ā¤¤ā¤ŋ ā¤¸āĨ‡ ā¤¸ā¤šā¤Žā¤¤ ā¤šāĨ‚ā¤‚", + "onboarding.component.emailCodeFallback": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨā¤†? <1>ā¤ĒāĨā¤¨ā¤ƒ ā¤­āĨ‡ā¤œāĨ‡ā¤‚ ā¤¯ā¤ž <3>ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ŧā¤Ļā¤˛āĨ‡ā¤‚āĨ¤", + "onboarding.page.form.title": "ā¤†ā¤‡ā¤ ā¤†ā¤Ēā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤˛āĨ‰ā¤¨āĨā¤š ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.page.emailConfirmed.title": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ€ ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ!", + "onboarding.page.emailConfirmed.subtitle": "ā¤†ā¤Ē ā¤…ā¤Ēā¤¨āĨ‡ Rocket.Chat ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤Ēā¤° ā¤ĩā¤žā¤Ēā¤¸ ā¤˛āĨŒā¤Ÿ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚ - ā¤šā¤Žā¤¨āĨ‡ ā¤†ā¤Ēā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤˛āĨ‰ā¤¨āĨā¤š ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤šāĨˆāĨ¤", + "onboarding.page.checkYourEmail.title": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ€ ā¤œā¤žā¤ā¤š ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.page.checkYourEmail.subtitle": "ā¤†ā¤Ēā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤¸ā¤Ģā¤˛ā¤¤ā¤žā¤ĒāĨ‚ā¤°āĨā¤ĩā¤• ā¤­āĨ‡ā¤œ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤<1>ā¤…ā¤Ēā¤¨ā¤ž ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤‡ā¤¨ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤œā¤žā¤‚ā¤šāĨ‡ā¤‚āĨ¤<1>ā¤˛ā¤ŋā¤‚ā¤• 30 ā¤Žā¤ŋā¤¨ā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "onboarding.page.confirmationProcess.title": "ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋ ā¤ĒāĨā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤šāĨˆ", + "onboarding.page.cloudDescription.title": "ā¤†ā¤‡ā¤ ā¤†ā¤Ēā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤”ā¤° <1>14-ā¤Ļā¤ŋā¤ĩā¤¸āĨ€ā¤¯ ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤˛āĨ‰ā¤¨āĨā¤š ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.page.cloudDescription.tryGold": "14 ā¤Ļā¤ŋā¤¨āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šā¤Žā¤žā¤°ā¤ž ā¤¸ā¤°āĨā¤ĩāĨ‹ā¤¤āĨā¤¤ā¤Ž ā¤—āĨ‹ā¤˛āĨā¤Ą ā¤ĒāĨā¤˛ā¤žā¤¨ ā¤¨ā¤ŋā¤ƒā¤ļāĨā¤˛āĨā¤• ā¤†ā¤œā¤ŧā¤Žā¤žā¤ā¤", + "onboarding.page.cloudDescription.numberOfIntegrations": "1,000 ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ", + "onboarding.page.cloudDescription.availability": "ā¤‰ā¤šāĨā¤š ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ā¤¤ā¤ž", + "onboarding.page.cloudDescription.auditing": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤‘ā¤Ąā¤ŋā¤Ÿ ā¤ĒāĨˆā¤¨ā¤˛/ā¤‘ā¤Ąā¤ŋā¤Ÿ ā¤˛āĨ‰ā¤—", + "onboarding.page.cloudDescription.engagement": "ā¤¸ā¤—ā¤žā¤ˆ ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą", + "onboarding.page.cloudDescription.ldap": "ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€ ā¤‰ā¤¨āĨā¤¨ā¤¤ ā¤¸ā¤ŋā¤‚ā¤•", + "onboarding.page.cloudDescription.omnichannel": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž", + "onboarding.page.cloudDescription.sla": "ā¤ā¤¸ā¤ā¤˛ā¤: ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž", + "onboarding.page.cloudDescription.push": "ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤ĒāĨā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚", + "onboarding.page.cloudDescription.goldIncludes": "* ā¤—āĨ‹ā¤˛āĨā¤Ąā¤¨ ā¤ĒāĨā¤˛ā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤¨āĨā¤¯ ā¤ĒāĨā¤˛ā¤žā¤¨ ā¤•āĨ€ ā¤¸ā¤­āĨ€ ā¤¸āĨā¤ĩā¤ŋā¤§ā¤žā¤ā¤ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨˆā¤‚", + "onboarding.page.alreadyHaveAccount": "ā¤•āĨā¤¯ā¤ž ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤Ēā¤šā¤˛āĨ‡ ā¤¸āĨ‡ ā¤ā¤• ā¤–ā¤žā¤¤ā¤ž ā¤ŽāĨŒā¤œāĨ‚ā¤Ļ ā¤šāĨˆ? <1>ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "onboarding.page.invalidLink.title": "ā¤†ā¤Ēā¤•ā¤ž ā¤˛ā¤ŋā¤‚ā¤• ā¤…ā¤Ŧ ā¤Žā¤žā¤¨āĨā¤¯ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "onboarding.page.invalidLink.content": "ā¤ā¤¸ā¤ž ā¤˛ā¤—ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤†ā¤Ē ā¤Ēā¤šā¤˛āĨ‡ ā¤šāĨ€ ā¤†ā¤Žā¤‚ā¤¤āĨā¤°ā¤Ŗ ā¤˛ā¤ŋā¤‚ā¤• ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤° ā¤šāĨā¤•āĨ‡ ā¤šāĨˆā¤‚. ā¤¯ā¤š ā¤ā¤•ā¤˛ ā¤¸ā¤žā¤‡ā¤¨ ā¤‡ā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¤āĨˆā¤¯ā¤žā¤° ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤¨ā¤ ā¤¸ā¤žā¤‡ā¤¨ ā¤‡ā¤¨ ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "onboarding.page.invalidLink.button.text": "ā¤¨ā¤ ā¤˛ā¤ŋā¤‚ā¤• ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.page.requestTrial.title": "<1>30-ā¤Ļā¤ŋā¤ĩā¤¸āĨ€ā¤¯ ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤•ā¤ž ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.page.requestTrial.subtitle": "30 ā¤Ļā¤ŋā¤¨āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šā¤Žā¤žā¤°āĨ€ ā¤¸ā¤°āĨā¤ĩāĨ‹ā¤¤āĨā¤¤ā¤Ž ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤¨ā¤ŋā¤ƒā¤ļāĨā¤˛āĨā¤• ā¤†ā¤œā¤ŧā¤Žā¤žā¤ā¤", + "onboarding.page.magicLinkEmail.title": "ā¤šā¤Žā¤¨āĨ‡ ā¤†ā¤Ēā¤•āĨ‹ ā¤ā¤• ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤˛ā¤ŋā¤‚ā¤• ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•ā¤ŋā¤¯ā¤ž ā¤šāĨˆ", + "onboarding.page.magicLinkEmail.subtitle": "ā¤†ā¤Ēā¤•āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤žā¤‡ā¤¨ ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šā¤Žā¤¨āĨ‡ ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤­āĨ€ ā¤œāĨ‹ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤ž ā¤šāĨˆ ā¤‰ā¤¸ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤˛ā¤ŋā¤‚ā¤• ā¤Ēā¤° ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤ <1>ā¤˛ā¤ŋā¤‚ā¤• 30 ā¤Žā¤ŋā¤¨ā¤Ÿ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤šāĨ‹ ā¤œā¤žā¤ā¤—ā¤žāĨ¤", + "onboarding.form.adminInfoForm.title": "ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "onboarding.form.adminInfoForm.subtitle": "ā¤†ā¤Ēā¤•āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤ĒāĨā¤°āĨ‹ā¤Ģā¤ŧā¤žā¤‡ā¤˛ ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤šā¤ŽāĨ‡ā¤‚ ā¤‡ā¤¸ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "onboarding.form.adminInfoForm.fields.fullName.label": "ā¤ĒāĨ‚ā¤°ā¤ž ā¤¨ā¤žā¤Ž", + "onboarding.form.adminInfoForm.fields.fullName.placeholder": "ā¤Ēā¤šā¤˛ā¤ž ā¤”ā¤° ā¤†ā¤–ā¤ŋā¤°āĨ€ ā¤¨ā¤žā¤Ž", + "onboarding.form.adminInfoForm.fields.username.label": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "onboarding.form.adminInfoForm.fields.username.placeholder": "@ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¨ā¤žā¤Ž", + "onboarding.form.adminInfoForm.fields.email.label": "ā¤ˆā¤ŽāĨ‡ā¤˛", + "onboarding.form.adminInfoForm.fields.email.placeholder": "ā¤ˆā¤ŽāĨ‡ā¤˛", + "onboarding.form.adminInfoForm.fields.password.label": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą", + "onboarding.form.adminInfoForm.fields.password.placeholder": "ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "onboarding.form.adminInfoForm.fields.keepPosted.label": "ā¤ŽāĨā¤āĨ‡ Rocket.Chat ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤Ŧā¤¤ā¤žā¤¤āĨ‡ ā¤°ā¤šāĨ‡ā¤‚", + "onboarding.form.awaitConfirmationForm.title": "ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋā¤•ā¤°ā¤Ŗ ā¤•āĨ€ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž", + "onboarding.form.awaitConfirmationForm.content.securityCode": "ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤•āĨ‹ā¤Ą", + "onboarding.form.awaitConfirmationForm.content.sentEmail": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ā¤• ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋā¤•ā¤°ā¤Ŗ ā¤˛ā¤ŋā¤‚ā¤• ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ <1>{{emailAddress}} ā¤Ēā¤° ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤ ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤¨āĨ€ā¤šāĨ‡ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤•āĨ‹ā¤Ą ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤•āĨ‹ā¤Ą ā¤¸āĨ‡ ā¤ŽāĨ‡ā¤˛ ā¤–ā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "onboarding.form.organizationInfoForm.title": "ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤•āĨ€ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "onboarding.form.organizationInfoForm.subtitle": "ā¤šā¤ŽāĨ‡ā¤‚ ā¤¯ā¤š ā¤œā¤žā¤¨ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž ā¤•ā¤ŋ ā¤†ā¤Ē ā¤•āĨŒā¤¨ ā¤šāĨˆā¤‚.", + "onboarding.form.organizationInfoForm.fields.organizationName.label": "ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤•ā¤ž ā¤¨ā¤žā¤Ž", + "onboarding.form.organizationInfoForm.fields.organizationType.label": "ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤•ā¤žā¤°", + "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "ā¤šāĨā¤¨ā¤¨ā¤ž", + "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤‰ā¤ĻāĨā¤¯āĨ‹ā¤—", + "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "ā¤šāĨā¤¨ā¤¨ā¤ž", + "onboarding.form.organizationInfoForm.fields.organizationSize.label": "ā¤¸ā¤‚ā¤—ā¤ ā¤¨ ā¤•ā¤ž ā¤†ā¤•ā¤žā¤°", + "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "ā¤šāĨā¤¨ā¤¨ā¤ž", + "onboarding.form.organizationInfoForm.fields.country.label": "ā¤ĻāĨ‡ā¤ļ", + "onboarding.form.organizationInfoForm.fields.country.placeholder": "ā¤šāĨā¤¨ā¤¨ā¤ž", + "onboarding.form.registerOfflineForm.title": "ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.form.registerOfflineForm.copyStep.description": "ā¤¯ā¤Ļā¤ŋ ā¤•ā¤ŋā¤¸āĨ€ ā¤•ā¤žā¤°ā¤Ŗ ā¤¸āĨ‡ ā¤†ā¤Ēā¤•ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤‡ā¤‚ā¤Ÿā¤°ā¤¨āĨ‡ā¤Ÿ ā¤¸āĨ‡ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ ā¤Ēā¤žā¤¤ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤‡ā¤¨ ā¤šā¤°ā¤ŖāĨ‹ā¤‚ ā¤•ā¤ž ā¤Ēā¤žā¤˛ā¤¨ ā¤•ā¤°āĨ‡ā¤‚:<1>1. ā¤¯ā¤šā¤žā¤‚ ā¤œā¤žā¤ā¤‚: <2>cloud.rocket.chat > ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤”ā¤° \"<3>ā¤¸āĨā¤ĩā¤¯ā¤‚-ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚\"<4>2 ā¤Ēā¤° ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤ “<5>ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤œā¤žā¤°āĨ€ ā¤°ā¤–āĨ‡ā¤‚”<6>3 ā¤Ēā¤° ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤ Cloud.rocket.chat ā¤ŽāĨ‡ā¤‚ <7>ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤¸ā¤‚ā¤ĩā¤žā¤Ļ ā¤ŽāĨ‡ā¤‚, ā¤¨āĨ€ā¤šāĨ‡ ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤ŦāĨ‰ā¤•āĨā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤ŸāĨ‹ā¤•ā¤¨ ā¤ĒāĨ‡ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.form.registerOfflineForm.pasteStep.description": "1. <1>cloud.rocket.chat ā¤ŽāĨ‡ā¤‚ ā¤œāĨ‡ā¤¨ā¤°āĨ‡ā¤ŸāĨ‡ā¤Ą ā¤ŸāĨ‡ā¤•āĨā¤¸āĨā¤Ÿ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤…ā¤Ēā¤¨āĨ€ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤ĒāĨā¤°ā¤•āĨā¤°ā¤ŋā¤¯ā¤ž ā¤ĒāĨ‚ā¤°āĨ€ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¨āĨ€ā¤šāĨ‡ ā¤ĒāĨ‡ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.form.registerOfflineForm.fields.registrationToken.inputLabel": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤ŸāĨ‹ā¤•ā¤¨", + "onboarding.form.registeredServerForm.title": "ā¤…ā¤Ēā¤¨ā¤ž ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.form.registeredServerForm.included.push": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤ĒāĨā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤", + "onboarding.form.registeredServerForm.included.externalProviders": "ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤ĒāĨā¤°ā¤Ļā¤žā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ā¤•āĨ€ā¤•ā¤°ā¤Ŗ (ā¤ĩāĨā¤šā¤žā¤ŸāĨā¤¸ā¤ā¤Ē, ā¤ĢāĨ‡ā¤¸ā¤ŦāĨā¤•, ā¤ŸāĨ‡ā¤˛āĨ€ā¤—āĨā¤°ā¤žā¤Ž, ā¤ŸāĨā¤ĩā¤ŋā¤Ÿā¤°)", + "onboarding.form.registeredServerForm.included.apps": "ā¤Ŧā¤žā¤œā¤ŧā¤žā¤° ā¤ā¤ĒāĨā¤¸ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š", + "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤ˆā¤ŽāĨ‡ā¤˛", + "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "ā¤œā¤žā¤°āĨ€ ā¤°ā¤–ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ąā¤žā¤˛āĨ‡ā¤‚", + "onboarding.form.registeredServerForm.keepInformed": "ā¤ŽāĨā¤āĨ‡ ā¤¸ā¤Žā¤žā¤šā¤žā¤°āĨ‹ā¤‚ ā¤”ā¤° ā¤˜ā¤Ÿā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‚ā¤šā¤ŋā¤¤ ā¤°ā¤–āĨ‡ā¤‚", + "onboarding.form.registeredServerForm.registerLater": "ā¤Ŧā¤žā¤Ļ ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚", + "onboarding.form.registeredServerForm.notConnectedToInternet": "ā¤¸ā¤°āĨā¤ĩā¤° ā¤‡ā¤‚ā¤Ÿā¤°ā¤¨āĨ‡ā¤Ÿ ā¤¸āĨ‡ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ, ā¤‡ā¤¸ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‘ā¤Ģā¤ŧā¤˛ā¤žā¤‡ā¤¨ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "onboarding.form.registeredServerForm.registrationEngagement": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ, ā¤Žā¤šā¤¤āĨā¤ĩā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤•ā¤Žā¤œāĨ‹ā¤°ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤”ā¤° ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤•āĨ‹ā¤ˆ ā¤¸ā¤‚ā¤ĩāĨ‡ā¤Ļā¤¨ā¤ļāĨ€ā¤˛ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ĄāĨ‡ā¤Ÿā¤ž ā¤¸ā¤žā¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ; Rocket.Chat ā¤Ēā¤° ā¤­āĨ‡ā¤œāĨ‡ ā¤—ā¤ ā¤†ā¤ā¤•ā¤Ąā¤ŧāĨ‡ ā¤†ā¤Ēā¤•āĨ‹ ā¤ĒāĨā¤°ā¤ļā¤žā¤¸ā¤¨ ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤­āĨ€ā¤¤ā¤° ā¤Ļā¤ŋā¤–ā¤žā¤ˆ ā¤ĻāĨ‡ā¤‚ā¤—āĨ‡āĨ¤", + "onboarding.form.registeredServerForm.registrationKeepInformed": "ā¤‡ā¤¸ ā¤ĢāĨ‰ā¤°āĨā¤Ž ā¤•āĨ‹ ā¤¸ā¤Ŧā¤Žā¤ŋā¤Ÿ ā¤•ā¤°ā¤•āĨ‡ ā¤†ā¤Ē ā¤šā¤Žā¤žā¤°āĨ€ <1>ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¨āĨ€ā¤¤ā¤ŋ ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤°, Rocket.Chat ā¤‰ā¤¤āĨā¤Ēā¤žā¤ĻāĨ‹ā¤‚, ā¤˜ā¤Ÿā¤¨ā¤žā¤“ā¤‚ ā¤”ā¤° ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸ā¤šā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤†ā¤Ē ā¤•ā¤ŋā¤¸āĨ€ ā¤­āĨ€ ā¤¸ā¤Žā¤¯ ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž ā¤ĩā¤žā¤Ēā¤¸ ā¤˛āĨ‡ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "onboarding.form.standaloneServerForm.title": "ā¤¸āĨā¤ŸāĨˆā¤‚ā¤Ąā¤…ā¤˛āĨ‹ā¤¨ ā¤¸ā¤°āĨā¤ĩā¤° ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋā¤•ā¤°ā¤Ŗ", + "onboarding.form.standaloneServerForm.servicesUnavailable": "ā¤•āĨā¤› ā¤¸āĨ‡ā¤ĩā¤žā¤ā¤ ā¤…ā¤¨āĨā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨ‹ā¤‚ā¤—āĨ€ ā¤¯ā¤ž ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤¸āĨ‡ā¤Ÿā¤…ā¤Ē ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨ‹ā¤—āĨ€", + "onboarding.form.standaloneServerForm.publishOwnApp": "ā¤ĒāĨā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤…ā¤Ēā¤¨ā¤ž ā¤¸āĨā¤ĩā¤¯ā¤‚ ā¤•ā¤ž ā¤ā¤Ē Google Play ā¤”ā¤° App Store ā¤Ēā¤° ā¤¸ā¤‚ā¤•ā¤˛ā¤ŋā¤¤ ā¤”ā¤° ā¤ĒāĨā¤°ā¤•ā¤žā¤ļā¤ŋā¤¤ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž", + "onboarding.form.standaloneServerForm.manuallyIntegrate": "ā¤Ŧā¤žā¤šā¤°āĨ€ ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤ā¤•āĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Something_Went_Wrong": "ā¤•āĨā¤› ā¤—ā¤˛ā¤¤ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž", + "Toolbox_room_actions": "ā¤ĒāĨā¤°ā¤žā¤Ĩā¤Žā¤ŋā¤• ā¤•ā¤•āĨā¤ˇ ā¤•āĨā¤°ā¤ŋā¤¯ā¤žā¤ā¤", + "Theme_light": "ā¤°āĨ‹ā¤ļā¤¨āĨ€", + "Theme_light_description": "ā¤ĻāĨƒā¤ˇāĨā¤Ÿā¤ŋā¤Ŧā¤žā¤§ā¤ŋā¤¤ ā¤ĩāĨā¤¯ā¤•āĨā¤¤ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤§ā¤ŋā¤• ā¤¸āĨā¤˛ā¤­ ā¤”ā¤° ā¤…ā¤šāĨā¤›āĨ€ ā¤°āĨ‹ā¤ļā¤¨āĨ€ ā¤ĩā¤žā¤˛āĨ‡ ā¤ĩā¤žā¤¤ā¤žā¤ĩā¤°ā¤Ŗ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤• ā¤…ā¤šāĨā¤›ā¤ž ā¤ĩā¤ŋā¤•ā¤˛āĨā¤ĒāĨ¤", + "Theme_dark": "ā¤…ā¤ā¤§āĨ‡ā¤°ā¤ž", + "Theme_dark_description": "ā¤¸āĨā¤•āĨā¤°āĨ€ā¤¨ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤‰ā¤¤āĨā¤¸ā¤°āĨā¤œā¤ŋā¤¤ ā¤ĒāĨā¤°ā¤•ā¤žā¤ļ ā¤•āĨ€ ā¤Žā¤žā¤¤āĨā¤°ā¤ž ā¤•āĨ‹ ā¤•ā¤Ž ā¤•ā¤°ā¤•āĨ‡ ā¤•ā¤Ž ā¤°āĨ‹ā¤ļā¤¨āĨ€ ā¤•āĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ŽāĨ‡ā¤‚ ā¤†ā¤‚ā¤–āĨ‹ā¤‚ ā¤•ā¤ž ā¤¤ā¤¨ā¤žā¤ĩ ā¤”ā¤° ā¤Ĩā¤•ā¤žā¤¨ ā¤•ā¤Ž ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Enable_of_limit_apps_currently_enabled": "** ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ {{limit}} {{context}} ā¤ā¤ĒāĨā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ {{limit}} ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆā¤‚āĨ¤**\n \nā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ ā¤Ēā¤° ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž {{limit}} {{context}} ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤\n \n**{{appName}} ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤** ā¤‡ā¤¸ ā¤ā¤Ē ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¸āĨ€ ā¤…ā¤¨āĨā¤¯ {{context}} ā¤ā¤Ē ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚ ā¤¯ā¤ž ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Enable_of_limit_apps_currently_enabled_exceeded": "** ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ {{limit}} {{context}} ā¤ā¤ĒāĨā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ {{limit}} ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆā¤‚āĨ¤**\n \nā¤¸ā¤žā¤ŽāĨā¤Ļā¤žā¤¯ā¤ŋā¤• ā¤ā¤Ē ā¤•āĨ€ ā¤¸āĨ€ā¤Žā¤ž ā¤Ēā¤žā¤° ā¤šāĨ‹ ā¤—ā¤ˆ ā¤šāĨˆ.\n \nā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ ā¤Ēā¤° ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž {{limit}} {{context}} ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤\n \n**{{appName}} ā¤Ąā¤ŋā¤Ģā¤ŧāĨ‰ā¤˛āĨā¤Ÿ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤ā¤—ā¤žāĨ¤** ā¤‡ā¤¸ ā¤ā¤Ē ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž {{exceed}} ā¤…ā¤¨āĨā¤¯ {{context}} ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž ā¤¯ā¤ž ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤ĒāĨā¤˛ā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "Workspaces_on_Community_edition_install_app": "ā¤¸ā¤žā¤ŽāĨā¤Ļā¤žā¤¯ā¤ŋā¤• ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž {{limit}} {{context}} ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤…ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤ĒāĨā¤˛ā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Apps_Currently_Enabled": "{{limit}} {{context}} ā¤ŽāĨ‡ā¤‚ ā¤¸āĨ‡ {{limit}} ā¤ā¤ĒāĨā¤¸ ā¤ĩā¤°āĨā¤¤ā¤Žā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆā¤‚", + "Disable_another_app": "ā¤‡ā¤¸ ā¤ā¤Ē ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤•ā¤ŋā¤¸āĨ€ ā¤…ā¤¨āĨā¤¯ ā¤ā¤Ē ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°āĨ‡ā¤‚ ā¤¯ā¤ž ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤ĒāĨā¤˛ā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Upload_anyway": "ā¤Ģā¤ŋā¤° ā¤­āĨ€ ā¤…ā¤Ēā¤˛āĨ‹ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "App_limit_reached": "ā¤ā¤Ē ā¤•āĨ€ ā¤¸āĨ€ā¤Žā¤ž ā¤ĒāĨ‚ā¤°āĨ€ ā¤šāĨ‹ ā¤—ā¤ˆ", + "App_limit_exceeded": "ā¤ā¤Ē ā¤•āĨ€ ā¤¸āĨ€ā¤Žā¤ž ā¤Ēā¤žā¤° ā¤šāĨ‹ ā¤—ā¤ˆ", + "Private_apps_limit_reached": "ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸ ā¤•āĨ€ ā¤¸āĨ€ā¤Žā¤ž ā¤ĒāĨ‚ā¤°āĨ€ ā¤šāĨ‹ ā¤—ā¤ˆ", + "Private_apps_limit_exceeded": "ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸ ā¤•āĨ€ ā¤¸āĨ€ā¤Žā¤ž ā¤Ēā¤žā¤° ā¤šāĨ‹ ā¤—ā¤ˆ", + "Disable_at_least_more_apps": "ā¤‡ā¤¸ ā¤ā¤Ē ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ēā¤•āĨ‹ ā¤•ā¤Ž ā¤¸āĨ‡ ā¤•ā¤Ž {{numberOfExceededApps}} ā¤…ā¤¨āĨā¤¯ ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‹ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤ž ā¤¯ā¤ž ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤ĒāĨā¤˛ā¤žā¤¨ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "Community_Private_apps_limit_exceeded": "ā¤¸ā¤žā¤ŽāĨā¤Ļā¤žā¤¯ā¤ŋā¤• ā¤ā¤Ē ā¤•āĨ€ ā¤¸āĨ€ā¤Žā¤ž ā¤Ēā¤žā¤° ā¤šāĨ‹ ā¤—ā¤ˆ ā¤šāĨˆ.", + "Theme_match_system": "ā¤Žā¤ŋā¤˛ā¤žā¤¨ ā¤ĒāĨā¤°ā¤Ŗā¤žā¤˛āĨ€", + "Theme_match_system_description": "ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤†ā¤Ēā¤•āĨ‡ ā¤¸ā¤ŋā¤¸āĨā¤Ÿā¤Ž ā¤•āĨ‡ ā¤¸āĨā¤ĩā¤°āĨ‚ā¤Ē ā¤•ā¤ž ā¤Žā¤ŋā¤˛ā¤žā¤¨ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Theme_high_contrast": "ā¤šā¤žā¤ˆ ā¤•āĨ‰ā¤¨āĨā¤ŸāĨā¤°ā¤žā¤¸āĨā¤Ÿ", + "Theme_high_contrast_description": "ā¤ŦāĨ‹ā¤˛āĨā¤Ą ā¤°ā¤‚ā¤—āĨ‹ā¤‚ ā¤”ā¤° ā¤¤āĨ€ā¤ĩāĨā¤° ā¤ĩā¤ŋā¤°āĨ‹ā¤§ā¤žā¤­ā¤žā¤¸āĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž ā¤¤ā¤žā¤¨ā¤ĩā¤žā¤˛ā¤ž ā¤ĩā¤ŋā¤­āĨ‡ā¤Ļā¤¨ ā¤ŦāĨ‡ā¤šā¤¤ā¤° ā¤Ēā¤šāĨā¤‚ā¤š ā¤ĒāĨā¤°ā¤Ļā¤žā¤¨ ā¤•ā¤°ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Highlighted_chosen_word": "ā¤šā¤¯ā¤¨ā¤ŋā¤¤ ā¤ļā¤ŦāĨā¤Ļ ā¤Ēā¤° ā¤ĒāĨā¤°ā¤•ā¤žā¤ļ ā¤Ąā¤žā¤˛ā¤ž ā¤—ā¤¯ā¤ž", + "Join_your_team": "ā¤…ā¤Ēā¤¨āĨ€ ā¤ŸāĨ€ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤ļā¤žā¤Žā¤ŋā¤˛ ā¤šāĨ‹ā¤‚", + "Create_a_password": "ā¤ā¤• ā¤Ēā¤žā¤¸ā¤ĩā¤°āĨā¤Ą ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Create_an_account": "ā¤–ā¤žā¤¤ā¤ž ā¤Ŧā¤¨ā¤žā¤ā¤‚", + "Get_all_apps": "ā¤ĩāĨ‡ ā¤¸ā¤­āĨ€ ā¤ā¤ĒāĨā¤¸ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤œā¤ŋā¤¨ā¤•āĨ€ ā¤†ā¤Ēā¤•āĨ€ ā¤ŸāĨ€ā¤Ž ā¤•āĨ‹ ā¤†ā¤ĩā¤ļāĨā¤¯ā¤•ā¤¤ā¤ž ā¤šāĨˆ", + "Workspaces_on_community_edition_trial_on": "ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ ā¤Ēā¤° ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž 5 ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤ā¤ĒāĨā¤¸ ā¤”ā¤° 3 ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤‡ā¤¨ ā¤¸āĨ€ā¤Žā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤œ ā¤šāĨ€ ā¤¨ā¤ŋā¤ƒā¤ļāĨā¤˛āĨā¤• ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤ļāĨā¤°āĨ‚ ā¤•ā¤°āĨ‡ā¤‚!", + "Workspaces_on_community_edition_trial_off": "ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ ā¤Ēā¤° ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž 5 ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤ā¤ĒāĨā¤¸ ā¤”ā¤° 3 ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤¸āĨ€ā¤Žā¤žā¤ā¤‚ ā¤šā¤Ÿā¤žā¤¨āĨ‡ ā¤”ā¤° ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤¸āĨā¤Ēā¤°ā¤šā¤žā¤°āĨā¤œ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "No_private_apps_installed": "ā¤•āĨ‹ā¤ˆ ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤¨ā¤šāĨ€ā¤‚", + "Private_apps_are_side-loaded": "ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤žā¤‡ā¤Ą-ā¤˛āĨ‹ā¤ĄāĨ‡ā¤Ą ā¤šāĨˆā¤‚ ā¤”ā¤° ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤Ēā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆā¤‚āĨ¤", + "Chat_transcript": "ā¤šāĨˆā¤Ÿ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤–", + "Conversational_transcript": "ā¤¸ā¤‚ā¤ĩā¤žā¤ĻāĨ€ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤–", + "Conversations_by_agents": "ā¤ā¤œāĨ‡ā¤‚ā¤ŸāĨ‹ā¤‚ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", + "Conversations_by_channel": "ā¤šāĨˆā¤¨ā¤˛ ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", + "Conversations_by_department": "ā¤ĩā¤ŋā¤­ā¤žā¤— ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", + "Conversations_by_status": "ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", + "Conversations_by_tag": "ā¤ŸāĨˆā¤— ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤", + "Send_conversation_transcript_via_email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Always_send_the_transcript_to_contacts_at_the_end_of_the_conversations": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤¸ā¤‚ā¤Ēā¤°āĨā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤­āĨ‡ā¤œāĨ‡ā¤‚āĨ¤", + "Export_conversation_transcript_as_PDF": "ā¤ĩā¤žā¤°āĨā¤¤ā¤žā¤˛ā¤žā¤Ē ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤•āĨ‹ ā¤ĒāĨ€ā¤ĄāĨ€ā¤ā¤Ģ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Omnichannel_transcript_email": "ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤šāĨˆā¤Ÿ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤­āĨ‡ā¤œāĨ‡ā¤‚.", + "Accounts_Default_User_Preferences_omnichannelTranscriptEmail_Description": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤¸ā¤‚ā¤Ēā¤°āĨā¤•āĨ‹ā¤‚ ā¤•āĨ‹ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤­āĨ‡ā¤œāĨ‡ā¤‚āĨ¤", + "Omnichannel_transcript_pdf": "ā¤šāĨˆā¤Ÿ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤•āĨ‹ ā¤ĒāĨ€ā¤ĄāĨ€ā¤ā¤Ģ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Accounts_Default_User_Preferences_omnichannelTranscriptPDF_Description": "ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ‡ ā¤…ā¤‚ā¤¤ ā¤ŽāĨ‡ā¤‚ ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤•āĨ‹ ā¤šā¤ŽāĨ‡ā¤ļā¤ž ā¤ĒāĨ€ā¤ĄāĨ€ā¤ā¤Ģ ā¤•āĨ‡ ā¤°āĨ‚ā¤Ē ā¤ŽāĨ‡ā¤‚ ā¤¨ā¤ŋā¤°āĨā¤¯ā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Contact_email": "ā¤ˆ - ā¤ŽāĨ‡ā¤˛ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡", + "Customer": "ā¤—āĨā¤°ā¤žā¤šā¤•", + "Time": "ā¤¸ā¤Žā¤¯", + "Omnichannel_Agent": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤ā¤œāĨ‡ā¤‚ā¤Ÿ", + "This_attachment_is_not_supported": "ā¤…ā¤¨āĨā¤˛ā¤—āĨā¤¨ā¤• ā¤ĒāĨā¤°ā¤žā¤°āĨ‚ā¤Ē ā¤¸ā¤Žā¤°āĨā¤Ĩā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Send_transcript": "ā¤ĒāĨā¤°ā¤¤ā¤ŋā¤˛āĨ‡ā¤– ā¤­āĨ‡ā¤œāĨ‡ā¤‚", + "Undo_request": "ā¤…ā¤¨āĨā¤°āĨ‹ā¤§ ā¤ĒāĨ‚ā¤°āĨā¤ĩā¤ĩā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "No_permission": "ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤¨ā¤šāĨ€ā¤‚", + "Community_cap_description": "ā¤¸ā¤žā¤ŽāĨā¤Ļā¤žā¤¯ā¤ŋā¤• ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ 200 ā¤¸ā¤Žā¤ĩā¤°āĨā¤¤āĨ€ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤•āĨ€ ā¤¸āĨ€ā¤Žā¤ž ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆāĨ¤ ā¤¯ā¤Ļā¤ŋ ā¤¯ā¤š ā¤¸āĨ€ā¤Žā¤ž ā¤Ēā¤žā¤° ā¤šāĨ‹ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆ ā¤¤āĨ‹ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ā¤•-ā¤ĻāĨ‚ā¤¸ā¤°āĨ‡ ā¤•āĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤–ā¤¨ā¤ž ā¤¸ā¤‚ā¤­ā¤ĩ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤—ā¤žāĨ¤ ā¤‡ā¤¸ā¤¸āĨ‡ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤­āĨ‡ā¤œā¤¨āĨ‡ ā¤”ā¤° ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤Ēā¤° ā¤•āĨ‹ā¤ˆ ā¤ĒāĨā¤°ā¤­ā¤žā¤ĩ ā¤¨ā¤šāĨ€ā¤‚ ā¤Ēā¤Ąā¤ŧā¤¤ā¤ž ā¤šāĨˆ.", + "Premium_cap_description": "ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¯āĨ‹ā¤œā¤¨ā¤žā¤“ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸āĨ‡ā¤ĩā¤ž ā¤¸āĨ€ā¤Žā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "Service_status": "ā¤¸āĨ‡ā¤ĩā¤ž ā¤•āĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "More_about_Premium_plans": "ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¯āĨ‹ā¤œā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤• ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€", + "Presence_service_cap": "ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸āĨ‡ā¤ĩā¤ž ā¤•āĨˆā¤Ē", + "User_Status": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "User_status_menu": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ŽāĨ‡ā¤¨āĨ‚", + "Active_connections": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨", + "Presence_service": "ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸āĨ‡ā¤ĩā¤ž", + "Presence_broadcast_disabled": "ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤†ā¤‚ā¤¤ā¤°ā¤ŋā¤• ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ", + "Presence_broadcast_disabled_Description": "ā¤‡ā¤¸ā¤¸āĨ‡ ā¤Ēā¤¤ā¤ž ā¤šā¤˛ā¤¤ā¤ž ā¤šāĨˆ ā¤•ā¤ŋ ā¤•āĨā¤¯ā¤ž ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤ĒāĨā¤°ā¤¸ā¤žā¤°ā¤Ŗ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆāĨ¤ ā¤ā¤¸ā¤ž ā¤¤ā¤Ŧ ā¤šāĨ‹ ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆ ā¤œā¤Ŧ ā¤†ā¤Ēā¤•āĨ‡ ā¤Ēā¤žā¤¸ ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ ā¤”ā¤° 200 ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤¸ā¤Žā¤ĩā¤°āĨā¤¤āĨ€ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤šāĨˆā¤‚āĨ¤", + "New_custom_status": "ā¤¨ā¤ˆ ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "Service_disabled": "ā¤¸āĨ‡ā¤ĩā¤ž ā¤…ā¤Ŧ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ", + "Service_disabled_description": "ā¤œā¤Ŧ ā¤¤ā¤• ā¤ā¤• ā¤šāĨ€ ā¤¸ā¤Žā¤¯ ā¤ŽāĨ‡ā¤‚ 200 ā¤¸āĨ‡ ā¤•ā¤Ž ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤¨ ā¤šāĨ‹ā¤‚ ā¤¤ā¤Ŧ ā¤¤ā¤• ā¤†ā¤Ē ā¤‡ā¤¸āĨ‡ ā¤ĻāĨ‹ā¤Ŧā¤žā¤°ā¤ž ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡", + "User_status_disabled": "ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤¨ ā¤•āĨ‹ ā¤Ŧā¤¨ā¤žā¤ ā¤°ā¤–ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤…ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤ĻāĨ€ ā¤—ā¤ˆ ā¤šāĨˆāĨ¤", + "User_status_disabled_learn_more": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤…ā¤•āĨā¤ˇā¤Ž", + "User_status_disabled_learn_more_description": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤• ā¤Žā¤žā¤¤āĨā¤°ā¤ž ā¤•āĨ‡ ā¤•ā¤žā¤°ā¤Ŗ, ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤•āĨ€ ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤•āĨ‹ ā¤¸ā¤‚ā¤­ā¤žā¤˛ā¤¨āĨ‡ ā¤ĩā¤žā¤˛āĨ€ ā¤¸āĨ‡ā¤ĩā¤ž ā¤…ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆāĨ¤ ā¤ĩāĨā¤¯ā¤ĩā¤¸āĨā¤Ĩā¤žā¤Ēā¤• ā¤‡ā¤¸āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤ŽāĨ‡ā¤‚ ā¤ŽāĨˆā¤¨āĨā¤¯āĨā¤…ā¤˛ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤ĒāĨā¤¨ā¤ƒ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Go_to_workspace_settings": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸āĨ‡ā¤Ÿā¤ŋā¤‚ā¤—āĨā¤¸ ā¤Ēā¤° ā¤œā¤žā¤ā¤", + "User_status_temporarily_disabled": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤…ā¤¸āĨā¤Ĩā¤žā¤¯āĨ€ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆ", + "Use_token": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•ā¤ž ā¤ĒāĨā¤°ā¤¯āĨ‹ā¤— ā¤•ā¤°āĨ‡ā¤‚", + "Disconnected": "ā¤Ąā¤ŋā¤¸āĨā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž", + "Disconnect_workspace": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤•āĨ‹ ā¤Ąā¤ŋā¤¸āĨā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Awaiting_confirmation": "ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋā¤•ā¤°ā¤Ŗ ā¤•āĨ€ ā¤ĒāĨā¤°ā¤¤āĨ€ā¤•āĨā¤ˇā¤ž", + "Security_code": "ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤•āĨ‹ā¤Ą", + "Registration_Token": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤ŸāĨ‹ā¤•ā¤¨", + "RegisterWorkspace_Button": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "ConnectWorkspace_Button": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚", + "Workspace_registered": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤", + "Workspace_not_connected": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Token_Not_Recognized": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤Ēā¤šā¤šā¤žā¤¨ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤—ā¤¯ā¤ž", + "RegisterWorkspace_Registered_Description": "ā¤¯āĨ‡ ā¤¸āĨ‡ā¤ĩā¤žā¤ā¤ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆā¤‚", + "RegisterWorkspace_Registered_Subtitle": "ā¤šāĨ‚ā¤ā¤•ā¤ŋ ā¤¯ā¤š ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤šāĨˆ ā¤‡ā¤¸ā¤˛ā¤ŋā¤ ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆ", + "RegisterWorkspace_Registered_Benefits": "ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ, ā¤Žā¤šā¤¤āĨā¤ĩā¤ĒāĨ‚ā¤°āĨā¤Ŗ ā¤•ā¤Žā¤œāĨ‹ā¤°ā¤ŋā¤¯āĨ‹ā¤‚ ā¤•āĨ€ ā¤…ā¤§ā¤ŋā¤¸āĨ‚ā¤šā¤¨ā¤ž ā¤”ā¤° ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤¸āĨ‡ā¤ĩā¤žā¤“ā¤‚ ā¤¤ā¤• ā¤Ēā¤šāĨā¤‚ā¤š ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤•āĨ‹ā¤ˆ ā¤­āĨ€ ā¤¸ā¤‚ā¤ĩāĨ‡ā¤Ļā¤¨ā¤ļāĨ€ā¤˛ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ĄāĨ‡ā¤Ÿā¤ž Rocket.Chat ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸ā¤žā¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "RegisterWorkspace_NotRegistered_Title": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "RegisterWorkspace_NotRegistered_Subtitle": "ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "RegisterWorkspace_NotConnected_Title": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤Ąā¤ŋā¤¸āĨā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤šāĨ‹ ā¤—ā¤¯ā¤ž", + "RegisterWorkspace_NotConnected_Subtitle": "ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "RegisterWorkspace_NotRegistered_Description": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤žā¤­", + "RegisterWorkspace_Disconnect_Subtitle": "ā¤†ā¤Ēā¤•āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤Ąā¤ŋā¤¸āĨā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤¸āĨ‡ ā¤¨ā¤ŋā¤ŽāĨā¤¨ā¤˛ā¤ŋā¤–ā¤ŋā¤¤ ā¤•āĨ€ ā¤šā¤žā¤¨ā¤ŋ ā¤šāĨ‹ā¤—āĨ€", + "RegisterWorkspace_Disconnect_Error": "ā¤Ąā¤ŋā¤¸āĨā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤šāĨā¤ˆ", + "RegisterWorkspace_Features_MobileNotifications_Title": "ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤ĒāĨā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤", + "RegisterWorkspace_Features_MobileNotifications_Description": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤‰ā¤¨ā¤•āĨ‡ ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤‰ā¤Ēā¤•ā¤°ā¤ŖāĨ‹ā¤‚ ā¤Ēā¤° ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "RegisterWorkspace_Features_MobileNotifications_Disconnect": "ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‡ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤…ā¤Ŧ ā¤…ā¤Ēā¤¨āĨ‡ ā¤ŽāĨ‹ā¤Ŧā¤žā¤‡ā¤˛ ā¤‰ā¤Ēā¤•ā¤°ā¤ŖāĨ‹ā¤‚ ā¤Ēā¤° ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤‚ā¤—āĨ€āĨ¤", + "RegisterWorkspace_Features_Marketplace_Title": "ā¤Ŧā¤žā¤œā¤žā¤°", + "RegisterWorkspace_Features_Marketplace_Description": "ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤° Rocket.Chat ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤ā¤ĒāĨā¤¸ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "RegisterWorkspace_Features_Marketplace_Disconnect": "ā¤…ā¤Ŧ ā¤ā¤ĒāĨā¤¸ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°ā¤¨ā¤ž ā¤¸ā¤‚ā¤­ā¤ĩ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤—ā¤ž.", + "RegisterWorkspace_Features_Omnichannel_Title": "ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛", + "RegisterWorkspace_Features_Omnichannel_Description": "ā¤ĻāĨā¤¨ā¤ŋā¤¯ā¤ž ā¤•āĨ‡ ā¤¸ā¤Ŧā¤¸āĨ‡ ā¤˛āĨ‹ā¤•ā¤ĒāĨā¤°ā¤ŋā¤¯ ā¤¸ā¤žā¤Žā¤žā¤œā¤ŋā¤• ā¤šāĨˆā¤¨ā¤˛āĨ‹ā¤‚ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤…ā¤Ēā¤¨āĨ‡ ā¤Ļā¤°āĨā¤ļā¤•āĨ‹ā¤‚ ā¤¸āĨ‡, ā¤œā¤šā¤žā¤‚ ā¤ĩāĨ‡ ā¤šāĨˆā¤‚, ā¤Ŧā¤žā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "RegisterWorkspace_Features_Omnichannel_Disconnect": "ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨā¤ˇā¤Žā¤¤ā¤žā¤ā¤‚ ā¤…ā¤Ŧ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤‚ā¤—āĨ€.", + "RegisterWorkspace_Features_ThirdPartyLogin_Title": "ā¤¤āĨƒā¤¤āĨ€ā¤¯-ā¤Ēā¤•āĨā¤ˇ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨", + "RegisterWorkspace_Features_ThirdPartyLogin_Description": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤¸ā¤Ļā¤¸āĨā¤¯āĨ‹ā¤‚ ā¤•āĨ‹ ā¤¤āĨƒā¤¤āĨ€ā¤¯-ā¤Ēā¤•āĨā¤ˇ ā¤ā¤ĒāĨā¤˛ā¤ŋā¤•āĨ‡ā¤ļā¤¨ ā¤•āĨ‡ ā¤¸āĨ‡ā¤Ÿ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•ā¤°ā¤•āĨ‡ ā¤˛āĨ‰ā¤— ā¤‡ā¤¨ ā¤•ā¤°ā¤¨āĨ‡ ā¤ĻāĨ‡ā¤‚āĨ¤", + "RegisterWorkspace_Features_ThirdPartyLogin_Disconnect": "ā¤¤āĨƒā¤¤āĨ€ā¤¯-ā¤Ēā¤•āĨā¤ˇ ā¤˛āĨ‰ā¤—ā¤ŋā¤¨ ā¤ĩā¤ŋā¤•ā¤˛āĨā¤Ē ā¤…ā¤Ŧ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤‚ā¤—āĨ‡āĨ¤", + "RegisterWorkspace_Token_Title": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "RegisterWorkspace_Token_Step_Two": "ā¤ŸāĨ‹ā¤•ā¤¨ ā¤•āĨ‹ ā¤•āĨ‰ā¤ĒāĨ€ ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤¨āĨ€ā¤šāĨ‡ ā¤ĒāĨ‡ā¤¸āĨā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "RegisterWorkspace_with_email": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤•āĨ‹ ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤¸āĨ‡ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "RegisterWorkspace_Setup_Subtitle": "ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‡ā¤¸āĨ‡ Rocket.Chat ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤–ā¤žā¤¤āĨ‡ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤ĻāĨā¤§ ā¤•ā¤°ā¤¨ā¤ž ā¤šāĨ‹ā¤—ā¤žāĨ¤", + "RegisterWorkspace_Setup_Steps": "{{numberOfSteps}} ā¤•ā¤ž ā¤šā¤°ā¤Ŗ {{step}}", + "RegisterWorkspace_Setup_Label": "ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤–ā¤žā¤¤ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛", + "RegisterWorkspace_Setup_Have_Account_Title": "ā¤ā¤• ā¤–ā¤žā¤¤ā¤ž ā¤šāĨˆ?", + "RegisterWorkspace_Setup_Have_Account_Subtitle": "ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤…ā¤Ēā¤¨āĨ‡ ā¤–ā¤žā¤¤āĨ‡ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ŧā¤ĻāĨā¤§ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨ā¤ž ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤–ā¤žā¤¤ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "RegisterWorkspace_Setup_No_Account_Title": "ā¤•āĨ‹ā¤ˆ ā¤–ā¤žā¤¤ā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ?", + "RegisterWorkspace_Setup_No_Account_Subtitle": "ā¤ā¤• ā¤¨ā¤¯ā¤ž ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤–ā¤žā¤¤ā¤ž ā¤Ŧā¤¨ā¤žā¤¨āĨ‡ ā¤”ā¤° ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤¸ā¤‚ā¤Ŧā¤ĻāĨā¤§ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨ā¤ž ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ļā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "cloud.RegisterWorkspace_Setup_Email_Confirmation": "ā¤ĒāĨā¤ˇāĨā¤Ÿā¤ŋā¤•ā¤°ā¤Ŗ ā¤˛ā¤ŋā¤‚ā¤• ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ <1>ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤Ēā¤° ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤­āĨ‡ā¤œā¤ž ā¤—ā¤¯ā¤žāĨ¤", + "RegisterWorkspace_Setup_Email_Verification": "ā¤•āĨƒā¤Ēā¤¯ā¤ž ā¤¸ā¤¤āĨā¤¯ā¤žā¤Ēā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚ ā¤•ā¤ŋ ā¤¨āĨ€ā¤šāĨ‡ ā¤Ļā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤•āĨ‹ā¤Ą ā¤ˆā¤ŽāĨ‡ā¤˛ ā¤ŽāĨ‡ā¤‚ ā¤Ļā¤ŋā¤ ā¤—ā¤ ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ž ā¤•āĨ‹ā¤Ą ā¤¸āĨ‡ ā¤ŽāĨ‡ā¤˛ ā¤–ā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "RegisterWorkspace_Syncing_Error": "ā¤†ā¤Ēā¤•āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤•āĨ‹ ā¤¸ā¤Žā¤¨āĨā¤ĩā¤¯ā¤ŋā¤¤ ā¤•ā¤°ā¤¤āĨ‡ ā¤¸ā¤Žā¤¯ ā¤ā¤• ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤šāĨā¤ˆ", + "RegisterWorkspace_Syncing_Complete": "ā¤¸ā¤ŋā¤‚ā¤• ā¤ĒāĨ‚ā¤°āĨā¤Ŗ", + "RegisterWorkspace_Connection_Error": "ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤°ā¤¨āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤¤āĨā¤°āĨā¤Ÿā¤ŋ ā¤‰ā¤¤āĨā¤Ēā¤¨āĨā¤¨ ā¤šāĨā¤ˆ", + "cloud.RegisterWorkspace_Token_Step_One": "1. ā¤¯ā¤šā¤žā¤‚ ā¤œā¤žā¤ā¤‚: <1>cloud.rocket.chat > ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤”ā¤° <3>'ā¤¸āĨā¤ĩā¤¯ā¤‚-ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤Ēā¤‚ā¤œāĨ€ā¤•ā¤°ā¤Ŗ ā¤•ā¤°āĨ‡ā¤‚' ā¤Ēā¤° ā¤•āĨā¤˛ā¤ŋā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "cloud.RegisterWorkspace_Setup_Terms_Privacy": "ā¤ŽāĨˆā¤‚ <1>ā¤¨ā¤ŋā¤¯ā¤Ž ā¤ā¤ĩā¤‚ ā¤ļā¤°āĨā¤¤āĨ‡ā¤‚ ā¤”ā¤° <3>ā¤—āĨ‹ā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž ā¤¨āĨ€ā¤¤ā¤ŋ ā¤¸āĨ‡ ā¤¸ā¤šā¤Žā¤¤ ā¤šāĨ‚ā¤‚", + "Larger_amounts_of_active_connections": "ā¤Ŧā¤Ąā¤ŧāĨ€ ā¤Žā¤žā¤¤āĨā¤°ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤†ā¤Ē ā¤šā¤Žā¤žā¤°āĨ‡ <1>ā¤Žā¤˛āĨā¤ŸāĨ€ā¤Ēā¤˛ ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‡ā¤‚ā¤¸ ā¤¸ā¤Žā¤žā¤§ā¤žā¤¨ ā¤Ēā¤° ā¤ĩā¤ŋā¤šā¤žā¤° ā¤•ā¤° ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "Uninstall_grandfathered_app": "{{appName}} ā¤…ā¤¨ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‰ā¤˛ ā¤•ā¤°āĨ‡ā¤‚?", + "App_will_lose_grandfathered_status": "**ā¤¯ā¤š {{context}} ā¤ā¤Ē ā¤…ā¤Ēā¤¨ā¤ž ā¤Ļā¤žā¤Ļā¤ž ā¤Ļā¤°āĨā¤œā¤ž ā¤–āĨ‹ ā¤ĻāĨ‡ā¤—ā¤žāĨ¤**\n \nā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ ā¤Ēā¤° ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤žā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤§ā¤ŋā¤•ā¤¤ā¤Ž {{limit}} {{context}} ā¤ā¤ĒāĨā¤¸ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤šāĨ‹ ā¤¸ā¤•ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤Ļā¤žā¤Ļā¤žā¤œāĨ€ ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‹ ā¤¸āĨ€ā¤Žā¤ž ā¤ŽāĨ‡ā¤‚ ā¤—ā¤ŋā¤¨ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆ ā¤˛āĨ‡ā¤•ā¤ŋā¤¨ ā¤¸āĨ€ā¤Žā¤ž ā¤‰ā¤¨ ā¤Ēā¤° ā¤˛ā¤žā¤—āĨ‚ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨ‹ā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "All_rooms": "ā¤¸ā¤­āĨ€ ā¤•ā¤Žā¤°āĨ‡", + "All_visible": "ā¤¸ā¤Ŧ ā¤Ļā¤ŋā¤– ā¤°ā¤šā¤ž ā¤šāĨˆ", + "Filter_by_room": "ā¤•ā¤Žā¤°āĨ‡ ā¤•āĨ‡ ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤•āĨ‡ ā¤…ā¤¨āĨā¤¸ā¤žā¤° ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Filter_by_visibility": "ā¤ĻāĨƒā¤ļāĨā¤¯ā¤¤ā¤ž ā¤•āĨ‡ ā¤†ā¤§ā¤žā¤° ā¤Ēā¤° ā¤Ģā¤ŧā¤ŋā¤˛āĨā¤Ÿā¤° ā¤•ā¤°āĨ‡ā¤‚", + "Theme_Appearence": "ā¤ĨāĨ€ā¤Ž ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ", + "mentions_counter": "{{count}} ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤–", + "threads_counter": "{{count}} ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤ĨāĨā¤°āĨ‡ā¤ĄāĨ‡ā¤Ą ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ", + "group_mentions_counter": "{{count}} ā¤¸ā¤ŽāĨ‚ā¤š ā¤•ā¤ž ā¤‰ā¤˛āĨā¤˛āĨ‡ā¤–", + "unread_messages_counter": "ā¤…ā¤Ēā¤ ā¤ŋā¤¤ ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤•āĨ‹ {{count}}", + "Premium": "ā¤…ā¤§ā¤ŋā¤ŽāĨ‚ā¤˛āĨā¤¯", + "Premium_capability": "ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤•āĨā¤ˇā¤Žā¤¤ā¤ž", + "Operating_withing_plan_limits": "ā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤¸āĨ€ā¤Žā¤ž ā¤•āĨ‡ ā¤­āĨ€ā¤¤ā¤° ā¤¸ā¤‚ā¤šā¤žā¤˛ā¤¨", + "Plan_limits_reached": "ā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤•āĨ€ ā¤¸āĨ€ā¤Žā¤ž ā¤ĒāĨ‚ā¤°āĨ€ ā¤šāĨ‹ ā¤—ā¤ˆ", + "Workspace_not_registered": "ā¤•ā¤žā¤°āĨā¤¯ā¤¸āĨā¤Ĩā¤˛ ā¤Ēā¤‚ā¤œāĨ€ā¤•āĨƒā¤¤ ā¤¨ā¤šāĨ€ā¤‚ ā¤šāĨˆ", + "Users_Connected": "ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤œāĨā¤Ąā¤ŧāĨ‡", + "Solve_issues": "ā¤ŽāĨā¤ĻāĨā¤ĻāĨ‡ ā¤¸āĨā¤˛ā¤ā¤žā¤“", + "Update_version": "ā¤¨ā¤¯ā¤ž ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ", + "Version_not_supported": "ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ <1>ā¤¸ā¤Žā¤°āĨā¤Ĩā¤ŋā¤¤ ā¤¨ā¤šāĨ€ā¤‚", + "Version_supported_until": "ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ <1>ā¤¸ā¤Žā¤°āĨā¤Ĩā¤ŋā¤¤ {{date}} ā¤¤ā¤•", + "Check_support_availability": "<1>ā¤¸ā¤Žā¤°āĨā¤Ĩā¤¨ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ā¤¤ā¤ž ā¤•āĨ€ ā¤œā¤žā¤ā¤š ā¤•ā¤°āĨ‡ā¤‚", + "Outdated": "ā¤°ā¤—ā¤Ąā¤ŧā¤ž ā¤šāĨā¤†", + "Latest": "ā¤¨ā¤ĩāĨ€ā¤¨ā¤¤ā¤Ž", + "New_version_available": "ā¤¨ā¤¯ā¤ž ā¤¸ā¤‚ā¤¸āĨā¤•ā¤°ā¤Ŗ ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆ", + "trial": "ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ", + "Subscription": "ā¤…ā¤‚ā¤ļā¤Ļā¤žā¤¨", + "Manage_subscription": "ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "ActiveSessionsPeak": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¸ā¤¤āĨā¤° ā¤šā¤°ā¤Ž ā¤Ēā¤° ā¤šāĨˆā¤‚", + "ActiveSessionsPeak_InfoText": "ā¤Ēā¤ŋā¤›ā¤˛āĨ‡ 30 ā¤Ļā¤ŋā¤¨āĨ‹ā¤‚ ā¤ŽāĨ‡ā¤‚ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸ā¤°āĨā¤ĩā¤žā¤§ā¤ŋā¤• ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž", + "ActiveSessions": "ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¸ā¤¤āĨā¤°", + "ActiveSessions_available": "ā¤¸ā¤¤āĨā¤° ā¤‰ā¤Ēā¤˛ā¤ŦāĨā¤§ ā¤šāĨˆā¤‚", + "Monthly_active_contacts": "ā¤Žā¤žā¤¸ā¤ŋā¤• ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤•", + "Upgrade": "ā¤‰ā¤¨āĨā¤¨ā¤¤ ā¤•ā¤°ā¤¨ā¤ž", + "Seats": "ā¤¸āĨ€ā¤ŸāĨ‡ā¤‚", + "Marketplace_apps": "ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤ā¤ĒāĨā¤¸", + "Private_apps": "ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸", + "Finish_your_purchase_trial": "<1>ā¤Ąā¤žā¤‰ā¤¨ā¤—āĨā¤°āĨ‡ā¤Ą ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤ŽāĨ‹ā¤‚ ā¤¸āĨ‡ ā¤Ŧā¤šā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤¨āĨ€ ā¤–ā¤°āĨ€ā¤Ļā¤žā¤°āĨ€ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Contact_sales_trial": "ā¤…ā¤Ēā¤¨āĨ€ ā¤–ā¤°āĨ€ā¤Ļā¤žā¤°āĨ€ ā¤ĒāĨ‚ā¤°āĨ€ ā¤•ā¤°ā¤¨āĨ‡ ā¤”ā¤° <1>ā¤Ąā¤žā¤‰ā¤¨ā¤—āĨā¤°āĨ‡ā¤Ą ā¤Ēā¤°ā¤ŋā¤Ŗā¤žā¤ŽāĨ‹ā¤‚ ā¤¸āĨ‡ ā¤Ŧā¤šā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤¸āĨ‡ā¤˛āĨā¤¸ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Why_has_a_trial_been_applied_to_this_workspace": "<0>ā¤‡ā¤¸ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤Ēā¤° ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤•āĨā¤¯āĨ‹ā¤‚ ā¤˛ā¤žā¤—āĨ‚ ā¤•ā¤ŋā¤¯ā¤ž ā¤—ā¤¯ā¤ž ā¤šāĨˆ?", + "Compare_plans": "ā¤¯āĨ‹ā¤œā¤¨ā¤žā¤“ā¤‚ ā¤•āĨ€ ā¤¤āĨā¤˛ā¤¨ā¤ž ā¤•ā¤°āĨ‡ā¤‚", + "n_days_left": "{{n}} ā¤Ļā¤ŋā¤¨ ā¤Ŧā¤šāĨ‡ ā¤šāĨˆā¤‚", + "Contact_sales": "ā¤Ŧā¤ŋā¤•āĨā¤°āĨ€ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Finish_purchase": "ā¤–ā¤°āĨ€ā¤Ļā¤žā¤°āĨ€ ā¤¸ā¤Žā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚", + "Self_managed_hosting": "ā¤¸āĨā¤ĩ-ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤ŋā¤¤ ā¤šāĨ‹ā¤¸āĨā¤Ÿā¤ŋā¤‚ā¤—", + "Cloud_hosting": "ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤•āĨā¤˛ā¤žā¤‰ā¤Ą ā¤šāĨ‹ā¤¸āĨā¤Ÿā¤ŋā¤‚ā¤—", + "free_per_month_user": "$0 ā¤ĒāĨā¤°ā¤¤ā¤ŋ ā¤Žā¤žā¤š/ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž", + "Trial_active": "ā¤Ēā¤°āĨ€ā¤•āĨā¤ˇā¤Ŗ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯", + "Contact_sales_renew_date": "ā¤¯āĨ‹ā¤œā¤¨ā¤ž ā¤¨ā¤ĩāĨ€ā¤¨āĨ€ā¤•ā¤°ā¤Ŗ ā¤¤ā¤ŋā¤Ĩā¤ŋ ā¤•āĨ€ ā¤œā¤žā¤‚ā¤š ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ <0>ā¤Ŧā¤ŋā¤•āĨā¤°āĨ€ ā¤¸āĨ‡ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Renews_DATE": "ā¤¨ā¤ĩāĨ€ā¤¨āĨ€ā¤•ā¤°ā¤Ŗ {{date}}", + "UpgradeToGetMore_Headline": "ā¤…ā¤§ā¤ŋā¤• ā¤Ēā¤žā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą ā¤•ā¤°āĨ‡ā¤‚", + "UpgradeToGetMore_Subtitle": "ā¤‰ā¤¨āĨā¤¨ā¤¤ ā¤•āĨā¤ˇā¤Žā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤•āĨ‹ ā¤¸āĨā¤Ēā¤°ā¤šā¤žā¤°āĨā¤œ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "UpgradeToGetMore_scalability_Title": "ā¤‰ā¤šāĨā¤š ā¤Žā¤žā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž", + "UpgradeToGetMore_scalability_Body": "ā¤ŽāĨ‹ā¤¨āĨ‹ā¤˛ā¤ŋā¤Ĩā¤ŋā¤• ā¤¸āĨ‡ ā¤Žā¤žā¤‡ā¤•āĨā¤°āĨ‹ā¤¸ā¤°āĨā¤ĩā¤ŋā¤¸āĨ‡ā¤œ ā¤¯ā¤ž ā¤Žā¤˛āĨā¤ŸāĨ€-ā¤‡ā¤‚ā¤¸āĨā¤ŸāĨ‡ā¤‚ā¤¸ ā¤Ēā¤° ā¤¸āĨā¤ĩā¤ŋā¤š ā¤•ā¤°ā¤•āĨ‡ ā¤Ļā¤•āĨā¤ˇā¤¤ā¤ž ā¤ŽāĨ‡ā¤‚ ā¤¸āĨā¤§ā¤žā¤° ā¤•ā¤°āĨ‡ā¤‚, ā¤˛ā¤žā¤—ā¤¤ ā¤•ā¤Ž ā¤•ā¤°āĨ‡ā¤‚ ā¤”ā¤° ā¤¸ā¤Žā¤ĩā¤°āĨā¤¤āĨ€ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤•ā¤ž ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤Ŧā¤ĸā¤ŧā¤žā¤ā¤‚āĨ¤", + "UpgradeToGetMore_accessibility-certification_Title": "WCAG 2.1 ā¤”ā¤° BITV 2.0", + "UpgradeToGetMore_accessibility-certification_Body": "Rocket.Chat ā¤•āĨ‡ ā¤ā¤•āĨā¤¸āĨ‡ā¤¸ā¤ŋā¤Ŧā¤ŋā¤˛ā¤ŋā¤ŸāĨ€ ā¤ĒāĨā¤°āĨ‹ā¤—āĨā¤°ā¤žā¤Ž ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ WCAG ā¤”ā¤° BITV ā¤Žā¤žā¤¨ā¤•āĨ‹ā¤‚ ā¤•ā¤ž ā¤…ā¤¨āĨā¤Ēā¤žā¤˛ā¤¨ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "UpgradeToGetMore_engagement-dashboard_Title": "ā¤ā¤¨ā¤žā¤˛ā¤ŋā¤Ÿā¤ŋā¤•āĨā¤¸", + "UpgradeToGetMore_engagement-dashboard_Body": "ā¤¸ā¤šā¤­ā¤žā¤—ā¤ŋā¤¤ā¤ž ā¤ĄāĨˆā¤ļā¤ŦāĨ‹ā¤°āĨā¤Ą ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž, ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤”ā¤° ā¤šāĨˆā¤¨ā¤˛ ā¤•āĨ‡ ā¤‰ā¤Ēā¤¯āĨ‹ā¤— ā¤•āĨ‡ ā¤Ŧā¤žā¤°āĨ‡ ā¤ŽāĨ‡ā¤‚ ā¤œā¤žā¤¨ā¤•ā¤žā¤°āĨ€ ā¤ĒāĨā¤°ā¤žā¤ĒāĨā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "UpgradeToGetMore_oauth-enterprise_Title": "ā¤‰ā¤¨āĨā¤¨ā¤¤ ā¤ĒāĨā¤°ā¤Žā¤žā¤ŖāĨ€ā¤•ā¤°ā¤Ŗ", + "UpgradeToGetMore_oauth-enterprise_Body": "ā¤¸ā¤ŽāĨ‚ā¤š ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤ž ā¤ŽāĨˆā¤Ēā¤ŋā¤‚ā¤—, ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤Ļā¤¸āĨā¤¯ā¤¤ā¤ž, ā¤‘ā¤ŸāĨ‹ ā¤˛āĨ‰ā¤—ā¤†ā¤‰ā¤Ÿ ā¤”ā¤° ā¤Ŧā¤šāĨā¤¤ ā¤•āĨā¤› ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤ā¤˛ā¤ĄāĨ€ā¤ā¤ĒāĨ€/ā¤ā¤¸ā¤ā¤ā¤Žā¤ā¤˛/ā¤“ā¤Ĩ ā¤•āĨ‡ ā¤Žā¤žā¤§āĨā¤¯ā¤Ž ā¤¸āĨ‡ ā¤‰ā¤šā¤ŋā¤¤ ā¤Ēā¤šāĨā¤‚ā¤š ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯ā¤žā¤‚ ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "UpgradeToGetMore_custom-roles_Title": "ā¤•ā¤¸āĨā¤Ÿā¤Ž ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤", + "UpgradeToGetMore_custom-roles_Body": "ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤˛āĨ‹ā¤—āĨ‹ā¤‚ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤ĩā¤ŋā¤ļā¤ŋā¤ˇāĨā¤Ÿ ā¤­āĨ‚ā¤Žā¤ŋā¤•ā¤žā¤ā¤ ā¤”ā¤° ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋā¤¯ā¤žā¤ ā¤¨ā¤ŋā¤°āĨā¤§ā¤žā¤°ā¤ŋā¤¤ ā¤•ā¤°ā¤•āĨ‡ ā¤ā¤• ā¤¸āĨā¤°ā¤•āĨā¤ˇā¤ŋā¤¤ ā¤”ā¤° ā¤‰ā¤¤āĨā¤Ēā¤žā¤Ļā¤• ā¤•ā¤žā¤°āĨā¤¯ ā¤ĩā¤žā¤¤ā¤žā¤ĩā¤°ā¤Ŗ ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "UpgradeToGetMore_auditing_Title": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤‘ā¤Ąā¤ŋā¤Ÿā¤ŋā¤‚ā¤—", + "UpgradeToGetMore_auditing_Body": "ā¤—āĨā¤°ā¤žā¤šā¤•āĨ‹ā¤‚, ā¤†ā¤ĒāĨ‚ā¤°āĨā¤¤ā¤ŋā¤•ā¤°āĨā¤¤ā¤žā¤“ā¤‚ ā¤”ā¤° ā¤†ā¤‚ā¤¤ā¤°ā¤ŋā¤• ā¤ŸāĨ€ā¤ŽāĨ‹ā¤‚ ā¤•āĨ‡ ā¤¸ā¤žā¤Ĩ ā¤¸ā¤‚ā¤šā¤žā¤° ā¤—āĨā¤Ŗā¤ĩā¤¤āĨā¤¤ā¤ž ā¤¸āĨā¤¨ā¤ŋā¤ļāĨā¤šā¤ŋā¤¤ ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤Ŧā¤žā¤¤ā¤šāĨ€ā¤¤ ā¤•āĨ‹ ā¤ā¤• ā¤šāĨ€ ā¤¸āĨā¤Ĩā¤žā¤¨ ā¤Ēā¤° ā¤‘ā¤Ąā¤ŋā¤Ÿ ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Seats_InfoText": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤…ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ā¤• ā¤¸āĨ€ā¤Ÿ ā¤Ēā¤° ā¤°ā¤šā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨ€ā¤ŸāĨ‹ā¤‚ ā¤Ēā¤° ā¤•ā¤ŦāĨā¤œā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤ ā¤¸āĨ€ā¤ŸāĨ‹ā¤‚ ā¤•āĨ€ ā¤•āĨā¤˛ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤ž ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤ĒāĨā¤°ā¤•ā¤žā¤° ā¤ĻāĨā¤ĩā¤žā¤°ā¤ž ā¤Ēā¤°ā¤ŋā¤­ā¤žā¤ˇā¤ŋā¤¤ ā¤•āĨ€ ā¤œā¤žā¤¤āĨ€ ā¤šāĨˆāĨ¤", + "CountSeats_InfoText": "ā¤ĒāĨā¤°ā¤¤āĨā¤¯āĨ‡ā¤• ā¤…ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤ā¤• ā¤¸āĨ€ā¤Ÿ ā¤Ēā¤° ā¤°ā¤šā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤¨ā¤ŋā¤ˇāĨā¤•āĨā¤°ā¤ŋā¤¯ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤¸āĨ€ā¤ŸāĨ‹ā¤‚ ā¤Ēā¤° ā¤•ā¤ŦāĨā¤œā¤ž ā¤¨ā¤šāĨ€ā¤‚ ā¤•ā¤°ā¤¤āĨ‡ ā¤šāĨˆā¤‚āĨ¤", + "MAC_InfoText": "(ā¤ŽāĨˆā¤•) ā¤Ŧā¤ŋā¤˛ā¤ŋā¤‚ā¤— ā¤Žā¤žā¤š ā¤•āĨ‡ ā¤ĻāĨŒā¤°ā¤žā¤¨ ā¤œāĨā¤Ąā¤ŧāĨ‡ ā¤…ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤•āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤žāĨ¤", + "CountMAC_InfoText": "(ā¤ŽāĨˆā¤•) ā¤•āĨˆā¤˛āĨ‡ā¤‚ā¤Ąā¤° ā¤Žā¤žā¤š ā¤•āĨ‡ ā¤ĻāĨŒā¤°ā¤žā¤¨ ā¤œāĨā¤Ąā¤ŧāĨ‡ ā¤…ā¤ĻāĨā¤ĩā¤ŋā¤¤āĨ€ā¤¯ ā¤“ā¤Žā¤¨āĨ€ā¤šāĨˆā¤¨ā¤˛ ā¤¸ā¤‚ā¤Ēā¤°āĨā¤•āĨ‹ā¤‚ ā¤•āĨ€ ā¤¸ā¤‚ā¤–āĨā¤¯ā¤žāĨ¤", + "ActiveSessions_InfoText": "ā¤•āĨā¤˛ ā¤¸ā¤Žā¤ĩā¤°āĨā¤¤āĨ€ ā¤•ā¤¨āĨ‡ā¤•āĨā¤ļā¤¨. ā¤ā¤• ā¤šāĨ€ ā¤¯āĨ‚ā¤œā¤° ā¤•āĨ‹ ā¤•ā¤ˆ ā¤Ŧā¤žā¤° ā¤•ā¤¨āĨ‡ā¤•āĨā¤Ÿ ā¤•ā¤ŋā¤¯ā¤ž ā¤œā¤ž ā¤¸ā¤•ā¤¤ā¤ž ā¤šāĨˆāĨ¤ ā¤ĒāĨā¤°ā¤Ļā¤°āĨā¤ļā¤¨ ā¤¸ā¤Žā¤¸āĨā¤¯ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤°āĨ‹ā¤•ā¤¨āĨ‡ ā¤•āĨ‡ ā¤˛ā¤ŋā¤ ā¤‰ā¤Ēā¤¯āĨ‹ā¤—ā¤•ā¤°āĨā¤¤ā¤ž ā¤‰ā¤Ēā¤¸āĨā¤Ĩā¤ŋā¤¤ā¤ŋ ā¤¸āĨ‡ā¤ĩā¤ž 200 ā¤¯ā¤ž ā¤‰ā¤¸ā¤¸āĨ‡ ā¤…ā¤§ā¤ŋā¤• ā¤Ēā¤° ā¤…ā¤•āĨā¤ˇā¤Ž ā¤šāĨˆāĨ¤", + "Apps_InfoText": "ā¤¸ā¤ŽāĨā¤Ļā¤žā¤¯ 3 ā¤¨ā¤ŋā¤œāĨ€ ā¤ā¤ĒāĨā¤¸ ā¤”ā¤° 5 ā¤Žā¤žā¤°āĨā¤•āĨ‡ā¤Ÿā¤ĒāĨā¤˛āĨ‡ā¤¸ ā¤ā¤ĒāĨā¤¸ ā¤•āĨ‹ ā¤¸ā¤•āĨā¤ˇā¤Ž ā¤•ā¤°ā¤¨āĨ‡ ā¤•āĨ€ ā¤…ā¤¨āĨā¤Žā¤¤ā¤ŋ ā¤ĻāĨ‡ā¤¤ā¤ž ā¤šāĨˆ", + "Remove_RocketChat_Watermark_InfoText": "ā¤¸ā¤ļāĨā¤˛āĨā¤• ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤¸ā¤•āĨā¤°ā¤ŋā¤¯ ā¤šāĨ‹ā¤¨āĨ‡ ā¤Ēā¤° ā¤ĩāĨ‰ā¤Ÿā¤°ā¤Žā¤žā¤°āĨā¤• ā¤¸āĨā¤ĩā¤šā¤žā¤˛ā¤ŋā¤¤ ā¤°āĨ‚ā¤Ē ā¤¸āĨ‡ ā¤šā¤Ÿā¤ž ā¤Ļā¤ŋā¤¯ā¤ž ā¤œā¤žā¤¤ā¤ž ā¤šāĨˆāĨ¤", + "Remove_RocketChat_Watermark": "ā¤°āĨ‰ā¤•āĨ‡ā¤Ÿ.ā¤šāĨˆā¤Ÿ ā¤ĩāĨ‰ā¤Ÿā¤°ā¤Žā¤žā¤°āĨā¤• ā¤šā¤Ÿā¤žā¤ā¤", + "High_scalabaility": "ā¤‰ā¤šāĨā¤š ā¤Žā¤žā¤Ēā¤¨āĨ€ā¤¯ā¤¤ā¤ž", + "Premium_and_unlimited_apps": "ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤”ā¤° ā¤…ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤ā¤ĒāĨā¤¸", + "Message_audit": "ā¤¸ā¤‚ā¤ĻāĨ‡ā¤ļ ā¤‘ā¤Ąā¤ŋā¤Ÿā¤ŋā¤‚ā¤—", + "Premium_omnichannel_capabilities": "ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤¸ā¤°āĨā¤ĩā¤šāĨˆā¤¨ā¤˛ ā¤•āĨā¤ˇā¤Žā¤¤ā¤žā¤ā¤", + "Video_call_manager": "ā¤ĩāĨ€ā¤Ąā¤ŋā¤¯āĨ‹ ā¤•āĨ‰ā¤˛ ā¤ĒāĨā¤°ā¤Ŧā¤‚ā¤§ā¤•", + "Unlimited_push_notifications": "ā¤…ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤ĒāĨā¤ļ ā¤¸āĨ‚ā¤šā¤¨ā¤žā¤ā¤‚", + "Buy_more": "ā¤…ā¤§ā¤ŋā¤• ā¤–ā¤°āĨ€ā¤ĻāĨ‡ā¤‚", + "Upgrade_to_Pro": "ā¤ĒāĨā¤°āĨ‹ ā¤ŽāĨ‡ā¤‚ ā¤…ā¤Ēā¤—āĨā¤°āĨ‡ā¤Ą", + "Sync_license_update": "ā¤¸ā¤ŋā¤‚ā¤• ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤…ā¤ĻāĨā¤¯ā¤¤ā¤¨", + "Sync_license_update_Callout_Title": "ā¤šā¤Ž ā¤†ā¤Ēā¤•ā¤ž ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•ā¤° ā¤°ā¤šāĨ‡ ā¤šāĨˆā¤‚", + "Sync_license_update_Callout": "ā¤¯ā¤Ļā¤ŋ ā¤†ā¤Ēā¤•āĨ‹ ā¤•āĨā¤› ā¤Žā¤ŋā¤¨ā¤ŸāĨ‹ā¤‚ ā¤•āĨ‡ ā¤­āĨ€ā¤¤ā¤° ā¤…ā¤Ēā¤¨āĨ‡ ā¤•ā¤žā¤°āĨā¤¯ā¤•āĨā¤ˇāĨ‡ā¤¤āĨā¤° ā¤ŽāĨ‡ā¤‚ ā¤•āĨ‹ā¤ˆ ā¤Ŧā¤Ļā¤˛ā¤žā¤ĩ ā¤¨ā¤œā¤ŧā¤° ā¤¨ā¤šāĨ€ā¤‚ ā¤†ā¤¤ā¤ž ā¤šāĨˆ, ā¤¤āĨ‹ ā¤˛ā¤žā¤‡ā¤¸āĨ‡ā¤‚ā¤¸ ā¤…ā¤Ēā¤ĄāĨ‡ā¤Ÿ ā¤•āĨ‹ ā¤¸ā¤ŋā¤‚ā¤• ā¤•ā¤°āĨ‡ā¤‚āĨ¤", + "Includes": "ā¤ļā¤žā¤Žā¤ŋā¤˛", + "Unlock_premium_capabilities": "ā¤ĒāĨā¤°āĨ€ā¤Žā¤ŋā¤¯ā¤Ž ā¤•āĨā¤ˇā¤Žā¤¤ā¤žā¤“ā¤‚ ā¤•āĨ‹ ā¤…ā¤¨ā¤˛āĨ‰ā¤• ā¤•ā¤°āĨ‡ā¤‚", + "Unlimited_seats": "ā¤…ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤¸āĨ€ā¤ŸāĨ‡ā¤‚", + "Unlimited_MACs": "ā¤…ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤ā¤Žā¤ā¤¸āĨ€", + "Unlimited_seats_MACs": "ā¤…ā¤¸āĨ€ā¤Žā¤ŋā¤¤ ā¤¸āĨ€ā¤ŸāĨ‡ā¤‚ ā¤”ā¤° ā¤ā¤Žā¤ā¤¸āĨ€" } \ No newline at end of file diff --git a/packages/i18n/src/locales/hr.i18n.json b/packages/i18n/src/locales/hr.i18n.json index c6b44aac84e5..84c4295d5201 100644 --- a/packages/i18n/src/locales/hr.i18n.json +++ b/packages/i18n/src/locales/hr.i18n.json @@ -2192,12 +2192,19 @@ "Retail": "Maloprodaja", "Retention_setting_changed_successfully": "Postavka pravila zadrÅžavanja uspjeÅĄno je promijenjena", "RetentionPolicy": "Pravila zadrÅžavanja", + "RetentionPolicy_AppliesToChannels": "Odnosi se na kanale", + "RetentionPolicy_AppliesToDMs": "Odnosi se na izravne poruke", + "RetentionPolicy_AppliesToGroups": "Odnosi se na privatne grupe", "RetentionPolicy_Description": "Automatski prunes stare poruke preko vaÅĄeg Rocket.Chat instanca.", "RetentionPolicy_Enabled": "Omogućeno", "RetentionPolicy_ExcludePinned": "Izuzmite prikvačene poruke", "RetentionPolicy_FilesOnly": "Samo izbriÅĄite datoteke", "RetentionPolicy_FilesOnly_Description": "Samo će se datoteke izbrisati, poruke će ostati na mjestu.", "RetentionPolicy_MaxAge": "Maksimalna dob poruka", + "RetentionPolicy_MaxAge_Channels": "Maksimalna dob poruka u kanalima", + "RetentionPolicy_MaxAge_Description": "Prune sve poruke starijima od ove vrijednosti, u danima", + "RetentionPolicy_MaxAge_DMs": "Maksimalna dob poruka u izravnim porukama", + "RetentionPolicy_MaxAge_Groups": "Maksimalna dob poruka u privatnim skupinama", "RetentionPolicy_Precision": "Preciznost mjerača", "RetentionPolicy_Precision_Description": "Koliko često bi trebao trajati mjerač vremena. Postavljanje na precizniju vrijednost čini kanale s brzim retencijskim vremenskim razmacima bolji, ali mogu koÅĄtati dodatnu snagu obrade u velikim zajednicama.", "RetentionPolicyRoom_Enabled": "Automatski obriÅĄite stare poruke", @@ -2892,4 +2899,4 @@ "registration.component.form.sendConfirmationEmail": "PoÅĄalji potvrdni email", "Enterprise": "Poduzeće", "UpgradeToGetMore_engagement-dashboard_Title": "Analitika" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/hu.i18n.json b/packages/i18n/src/locales/hu.i18n.json index 6ac0e32cc1b8..f7f85536c183 100644 --- a/packages/i18n/src/locales/hu.i18n.json +++ b/packages/i18n/src/locales/hu.i18n.json @@ -3901,6 +3901,9 @@ "RetentionPolicy_Advanced_Precision": "SpeciÃĄlis megőrzÊsi hÃĄzirend beÃĄllítÃĄs hasznÃĄlata", "RetentionPolicy_Advanced_Precision_Cron": "SpeciÃĄlis megőrzÊsi hÃĄzirend cron-feladat hasznÃĄlata", "RetentionPolicy_Advanced_Precision_Cron_Description": "Milyen gyakran kell futnia a cron-feladat kifejezÊssel meghatÃĄrozott tÃļrlÊsi időzítőnek. Ennek egy pontosabb ÊrtÊkre ÃĄllítÃĄsa a gyors visszatartÃĄsi időzítőkkel rendelkező csatornÃĄkat jobban mÅąkÃļdővÊ teszi, de tovÃĄbbi feldolgozÃĄsi teljesítmÊnybe kerÃŧlhet nagy kÃļzÃļssÊgeknÊl.", + "RetentionPolicy_AppliesToChannels": "AlkalmazÃĄs a csatornÃĄkra", + "RetentionPolicy_AppliesToDMs": "AlkalmazÃĄs a kÃļzvetlen Ãŧzenetekre", + "RetentionPolicy_AppliesToGroups": "AlkalmazÃĄs a szemÊlyes csoportokra", "RetentionPolicy_Description": "A rÊgi Ãŧzenetek Ês fÃĄjlok automatikus tÃļrlÊse az egÊsz munkaterÃŧleten.", "RetentionPolicy_DoNotPruneDiscussion": "Ne tÃļrÃļlje a megbeszÊlÊs Ãŧzeneteit", "RetentionPolicy_DoNotPrunePinned": "Ne tÃļrÃļlje a kitÅązÃļtt Ãŧzeneteket", @@ -3910,6 +3913,10 @@ "RetentionPolicy_FilesOnly": "Csak fÃĄjlok tÃļrlÊse", "RetentionPolicy_FilesOnly_Description": "Csak a fÃĄjlok lesznek tÃļrÃļlve, maguk az Ãŧzenetek a helyÃŧkÃļn maradnak.", "RetentionPolicy_MaxAge": "Legnagyobb ÃŧzenetÊletkor", + "RetentionPolicy_MaxAge_Channels": "Legnagyobb ÃŧzenetÊletkor a csatornÃĄkban", + "RetentionPolicy_MaxAge_Description": "A napokban megadott ÊrtÊknÊl rÊgebbi Ãļsszes Ãŧzenet tÃļrlÊse", + "RetentionPolicy_MaxAge_DMs": "Legnagyobb ÃŧzenetÊletkor a kÃļzvetlen Ãŧzenetekben", + "RetentionPolicy_MaxAge_Groups": "Legnagyobb ÃŧzenetÊletkor a szemÊlyes csoportokban", "RetentionPolicy_Precision": "Időzítő pontossÃĄga", "RetentionPolicy_Precision_Description": "Milyen gyakran kell futnia a tÃļrlÊsi időzítőnek. Ennek egy pontosabb ÊrtÊkre ÃĄllítÃĄsa a gyors visszatartÃĄsi időzítőkkel rendelkező csatornÃĄkat jobban mÅąkÃļdővÊ teszi, de tovÃĄbbi feldolgozÃĄsi teljesítmÊnybe kerÃŧlhet nagy kÃļzÃļssÊgeknÊl.", "RetentionPolicyRoom_Enabled": "RÊgi Ãŧzenetek automatikus tÃļrlÊse", @@ -5420,4 +5427,4 @@ "Enterprise": "VÃĄllalati", "UpgradeToGetMore_engagement-dashboard_Title": "Analitika", "UpgradeToGetMore_auditing_Title": "Üzenet ellenőrzÊs" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/id.i18n.json b/packages/i18n/src/locales/id.i18n.json index e8201ffecc03..1abc2fadd68c 100644 --- a/packages/i18n/src/locales/id.i18n.json +++ b/packages/i18n/src/locales/id.i18n.json @@ -2068,12 +2068,19 @@ "Retail": "Eceran", "Retention_setting_changed_successfully": "Pengaturan kebijakan retensi berhasil diubah", "RetentionPolicy": "Kebijakan Penyimpanan", + "RetentionPolicy_AppliesToChannels": "Berlaku untuk saluran", + "RetentionPolicy_AppliesToDMs": "Berlaku untuk mengarahkan pesan", + "RetentionPolicy_AppliesToGroups": "Berlaku untuk grup pribadi", "RetentionPolicy_Description": "Secara otomatis memangkas pesan lama di seluruh Rocket Anda. Contohnya.", "RetentionPolicy_Enabled": "Diaktifkan", "RetentionPolicy_ExcludePinned": "Kecualikan pesan yang disematkan", "RetentionPolicy_FilesOnly": "Hanya hapus file", "RetentionPolicy_FilesOnly_Description": "Hanya file yang akan dihapus, pesan itu sendiri akan tetap di tempatnya.", "RetentionPolicy_MaxAge": "Umur pesan maksimum", + "RetentionPolicy_MaxAge_Channels": "Umur pesan maksimum di saluran", + "RetentionPolicy_MaxAge_Description": "Pangkas semua pesan yang lebih lama dari nilai ini, dalam hitungan hari", + "RetentionPolicy_MaxAge_DMs": "Umur pesan maksimum dalam pesan langsung", + "RetentionPolicy_MaxAge_Groups": "Umur pesan maksimum dalam grup pribadi", "RetentionPolicy_Precision": "Timer Presisi", "RetentionPolicy_Precision_Description": "Seberapa sering pewaktu pemangkas harus berjalan. Menyetel ini ke nilai yang lebih tepat membuat saluran dengan penghitung waktu cepat berfungsi lebih baik, tetapi mungkin memerlukan biaya daya pemrosesan tambahan pada komunitas besar.", "RetentionPolicyRoom_Enabled": "Secara otomatis memangkas pesan lama", @@ -2766,4 +2773,4 @@ "registration.component.form.sendConfirmationEmail": "Kirim email konfirmasi", "Enterprise": "Perusahaan", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/it.i18n.json b/packages/i18n/src/locales/it.i18n.json index a7d0658f6035..160dbe3cf40e 100644 --- a/packages/i18n/src/locales/it.i18n.json +++ b/packages/i18n/src/locales/it.i18n.json @@ -203,9 +203,11 @@ "Accounts_OAuth_Wordpress_token_path": "Percorso del token", "Accounts_Password_Policy_AtLeastOneLowercase": "Almeno una minuscola", "Accounts_Password_Policy_AtLeastOneLowercase_Description": "Imponi che una password contenga almeno un carattere minuscolo.", + "Apps_Count_Enabled_many": "{{count}} app abilitate", "Accounts_Password_Policy_AtLeastOneNumber": "Almeno un numero", "Accounts_Password_Policy_AtLeastOneNumber_Description": "Imponi che una password contenga almeno un carattere numerico.", "Accounts_Password_Policy_AtLeastOneSpecialCharacter": "Almeno un simbolo", + "Private_Apps_Count_Enabled_many": "{{count}} applicazioni private abilitate", "Accounts_Password_Policy_AtLeastOneSpecialCharacter_Description": "Imponi che una password contenga almeno un carattere speciale.", "Accounts_Password_Policy_AtLeastOneUppercase": "Almeno una maiuscola", "Accounts_Password_Policy_AtLeastOneUppercase_Description": "Imponi che una password contenga almeno un carattere minuscolo.", @@ -230,10 +232,8 @@ "Accounts_RegistrationForm_Secret_URL": "URL segreto", "Accounts_RegistrationForm_SecretURL": "URL segreto del modulo di registrazione ", "Accounts_RegistrationForm_SecretURL_Description": "È necessario fornire una stringa casuale che verrà aggiunta all'URL di registrazione. Esempio: `https://open.rocket.chat/register/[secret_hash]`", - "Apps_Count_Enabled_many": "{{count}} app abilitate", "Accounts_RequireNameForSignUp": "Richiedi il nome per la registrazione", "Accounts_RequirePasswordConfirmation": "Richiede conferma della password", - "Private_Apps_Count_Enabled_many": "{{count}} applicazioni private abilitate", "Accounts_SearchFields": "Campi da considerare nella ricerca", "Accounts_Send_Email_When_Activating": "Invia mail all'utente quando quando è attivato", "Accounts_Send_Email_When_Deactivating": "Invia mail all'utente quando quando è inattivato", @@ -593,6 +593,7 @@ "CAS_version": "Versione CAS", "CAS_version_Description": "Utilizza solo la versione CAS supportata dal tuo servizio CAS SSO.", "CDN_PREFIX": "Prefisso CDN", + "meteor_status_reconnect_in_many": "riprovo tra {{count}} secondi...", "Certificates_and_Keys": "Certificati e chiavi", "Change_Room_Type": "Cambia la tipologia di stanza", "Changing_email": "In fase di cambiamento dell'email", @@ -714,7 +715,6 @@ "Conversation_finished_message": "Messaggio di conversazione terminato", "conversation_with_s": "la conversazione con %s", "Conversations": "Conversazioni", - "meteor_status_reconnect_in_many": "riprovo tra {{count}} secondi...", "Convert_Ascii_Emojis": "Converti gli ASCII in Emoji", "Converted__roomName__to_team": "ha convertito #{{roomName}} in una squadra", "Converted__roomName__to_channel": "ha convertito #{{roomName}} in un Channel", @@ -2579,12 +2579,19 @@ "Retail": "Al dettaglio", "Retention_setting_changed_successfully": "Impostazione dei criteri di conservazione modificata correttamente", "RetentionPolicy": "Politica di conservazione", + "RetentionPolicy_AppliesToChannels": "Si applica ai canali", + "RetentionPolicy_AppliesToDMs": "Si applica per dirigere i messaggi", + "RetentionPolicy_AppliesToGroups": "Si applica a gruppi privati", "RetentionPolicy_Description": "Elimina automaticamente vecchi messaggi attraverso l'istanza di Rocket.Chat.", "RetentionPolicy_Enabled": "Abilitato", "RetentionPolicy_ExcludePinned": "Escludere i messaggi aggiunti", "RetentionPolicy_FilesOnly": "Elimina solo i file", "RetentionPolicy_FilesOnly_Description": "Verranno eliminati solo i file, i messaggi rimarranno al loro posto.", "RetentionPolicy_MaxAge": "Età massima del messaggio", + "RetentionPolicy_MaxAge_Channels": "Massima età dei messaggi nei canali", + "RetentionPolicy_MaxAge_Description": "Elimina tutti i messaggi piÚ vecchi di questo valore, in giorni", + "RetentionPolicy_MaxAge_DMs": "Età massima dei messaggi nei messaggi diretti", + "RetentionPolicy_MaxAge_Groups": "Età massima dei messaggi in gruppi privati", "RetentionPolicy_Precision": "Precisione del timer", "RetentionPolicy_Precision_Description": "Con quale frequenza deve essere eseguito il timer di sfoltimento. Impostando questo ad un valore piÚ preciso, i canali con timer di ritenzione veloce funzionano meglio, ma potrebbero costare una maggiore potenza di elaborazione su comunità di grandi dimensioni.", "RetentionPolicyRoom_Enabled": "Elimina automaticamente vecchi messaggi", @@ -3401,4 +3408,4 @@ "UpgradeToGetMore_custom-roles_Title": "Ruoli personalizzati", "Video_call_manager": "Gestore di videochiamate", "Sync_license_update_Callout_Title": "Stiamo aggiornando la vostra licenza" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/ja.i18n.json b/packages/i18n/src/locales/ja.i18n.json index d81bef5c47ad..982f9495d914 100644 --- a/packages/i18n/src/locales/ja.i18n.json +++ b/packages/i18n/src/locales/ja.i18n.json @@ -3497,6 +3497,9 @@ "RetentionPolicy_Advanced_Precision": "éĢ˜åēĻãĒäŋæŒãƒãƒĒã‚ˇãƒŧč¨­åŽšãŽäŊŋį”¨", "RetentionPolicy_Advanced_Precision_Cron": "éĢ˜åēĻãĒäŋæŒãƒãƒĒã‚ˇãƒŧクロãƒŗぎäŊŋį”¨", "RetentionPolicy_Advanced_Precision_Cron_Description": "整į†ã‚ŋイマãƒŧãŽåŽŸčĄŒé ģåēĻはcronジョブåŧã§åŽšįžŠã•ã‚Œãžã™ã€‚これをよりį˛žå¯†ãĒ値ãĢč¨­åŽšã™ã‚‹ã¨ã€äŋæŒã‚ŋイマãƒŧがéĢ˜é€ŸãĒチãƒŖネãƒĢぎ動äŊœãŒæ”šå–„されぞすが、大čĻæ¨Ąã‚ŗミãƒĨニテã‚ŖではčŋŊ加ぎå‡Ļį†čƒŊ力がåŋ…čĻãĢãĒる可čƒŊ性がありぞす。", + "RetentionPolicy_AppliesToChannels": "チãƒŖネãƒĢãĢ遊į”¨", + "RetentionPolicy_AppliesToDMs": "ダイãƒŦã‚¯ãƒˆãƒĄãƒƒã‚ģãƒŧジãĢ遊į”¨", + "RetentionPolicy_AppliesToGroups": "プナイベãƒŧトグãƒĢãƒŧプãĢ遊į”¨", "RetentionPolicy_Description": "Rocket.Chatイãƒŗã‚šã‚ŋãƒŗã‚šå…¨äŊ“ã§å¤ã„ãƒĄãƒƒã‚ģãƒŧジをč‡Ē動įš„ãĢ整į†ã—ぞす。", "RetentionPolicy_DoNotPruneDiscussion": "デã‚Ŗã‚šã‚Ģãƒƒã‚ˇãƒ§ãƒŗãƒĄãƒƒã‚ģãƒŧジを整į†ã—ãĒい", "RetentionPolicy_DoNotPrunePinned": "å›ēåŽšã•ã‚ŒãŸãƒĄãƒƒã‚ģãƒŧジを整į†ã—ãĒい", @@ -3506,6 +3509,10 @@ "RetentionPolicy_FilesOnly": "ãƒ•ã‚Ąã‚¤ãƒĢぎãŋを削除", "RetentionPolicy_FilesOnly_Description": "ãƒ•ã‚Ąã‚¤ãƒĢぎãŋãŒå‰Šé™¤ã•ã‚Œã€ãƒĄãƒƒã‚ģãƒŧジč‡ĒäŊ“はそぎぞぞ掋りぞす。", "RetentionPolicy_MaxAge": "ãƒĄãƒƒã‚ģãƒŧジäŋæŒæ—Ĩ数", + "RetentionPolicy_MaxAge_Channels": "チãƒŖネãƒĢã§ãŽãƒĄãƒƒã‚ģãƒŧジäŋæŒæœŸé–“", + "RetentionPolicy_MaxAge_Description": "こぎ値īŧˆæ—Ĩ数īŧ‰ã‚’įĩŒéŽã—たすずãĻãŽãƒĄãƒƒã‚ģãƒŧジを整į†ã—ぞす。", + "RetentionPolicy_MaxAge_DMs": "ダイãƒŦã‚¯ãƒˆãƒĄãƒƒã‚ģãƒŧã‚¸ãŽãƒĄãƒƒã‚ģãƒŧジäŋæŒæ—Ĩ数", + "RetentionPolicy_MaxAge_Groups": "プナイベãƒŧトグãƒĢãƒŧãƒ—ã§ãŽãƒĄãƒƒã‚ģãƒŧジäŋæŒæœŸé–“", "RetentionPolicy_Precision": "ã‚ŋイマãƒŧį˛žåēĻ", "RetentionPolicy_Precision_Description": "整į†ã‚ŋイマãƒŧãŽåŽŸčĄŒé ģåēĻ。これをよりį˛žå¯†ãĒ値ãĢč¨­åŽšã™ã‚‹ã¨ã€äŋæŒã‚ŋイマãƒŧがéĢ˜é€ŸãĒチãƒŖネãƒĢぎ動äŊœãŒæ”šå–„されぞすが、大čĻæ¨Ąã‚ŗミãƒĨニテã‚ŖではčŋŊ加ぎå‡Ļį†čƒŊ力がåŋ…čĻãĢãĒる可čƒŊ性がありぞす。", "RetentionPolicyRoom_Enabled": "å¤ã„ãƒĄãƒƒã‚ģãƒŧジをč‡Ē動įš„ãĢ整į†", @@ -4823,4 +4830,4 @@ "Enterprise": "エãƒŗã‚ŋãƒŧプナイã‚ē", "UpgradeToGetMore_engagement-dashboard_Title": "分析", "UpgradeToGetMore_auditing_Title": "ãƒĄãƒƒã‚ģãƒŧジį›ŖæŸģ" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/ka-GE.i18n.json b/packages/i18n/src/locales/ka-GE.i18n.json index fb656612893d..3c550632cc4c 100644 --- a/packages/i18n/src/locales/ka-GE.i18n.json +++ b/packages/i18n/src/locales/ka-GE.i18n.json @@ -2776,11 +2776,17 @@ "Retail": "ქაáƒĒალო", "Retention_setting_changed_successfully": "შენახვის áƒŦესები áƒŦარმაáƒĸებით შეიáƒĒვალა", "RetentionPolicy": "შენახვის áƒŦესები", + "RetentionPolicy_AppliesToChannels": "ვრáƒĒელდება არხებზე", + "RetentionPolicy_AppliesToDMs": "ვრáƒĒელდება პირდაპირ შეáƒĸყობინებებზე", + "RetentionPolicy_AppliesToGroups": "ვრáƒĒელდება კერáƒĢო ჯგáƒŖფებზე", "RetentionPolicy_Enabled": "ჩართáƒŖლი", "RetentionPolicy_ExcludePinned": "მიმაგრებáƒŖლი შეáƒĸყობინებების გამორიáƒĒხვა", "RetentionPolicy_FilesOnly": "მხოლოდ ფაილების áƒŦაშლა", "RetentionPolicy_FilesOnly_Description": "áƒŦაიშლება მხოლოდ ფაილები,შეáƒĸყობინებები დარჩება ადგილზე", "RetentionPolicy_MaxAge": "შეáƒĸყობინების მაáƒĨსიმალáƒŖრი ასაკი", + "RetentionPolicy_MaxAge_Channels": "არ჎ში შეáƒĸყობინების მაáƒĨსიმალáƒŖრი ასაკი", + "RetentionPolicy_MaxAge_DMs": "პირდაპირ შეáƒĸყობინებებში შეáƒĸყობინების მაáƒĨსიმალáƒŖრი ასაკი", + "RetentionPolicy_MaxAge_Groups": "პირად ჯგáƒŖფში შეáƒĸყობინების მაáƒĨსიმალáƒŖრი ასაკი", "RetentionPolicy_Precision": "áƒĸაიმერის სიზáƒŖქáƒĸე", "RetentionPolicyRoom_ExcludePinned": "მიმაგრებáƒŖლი შეáƒĸყობინებების გამორიáƒĒხვა", "RetentionPolicyRoom_MaxAge": "შეáƒĸყობინების მაáƒĨსიმალáƒŖრი ასაკი დáƒĻეებში(დეფაáƒŖლáƒĸი:{{_max}})", @@ -3672,4 +3678,4 @@ "onboarding.form.registerOfflineForm.title": "ხელით დარეგისáƒĸრირება", "UpgradeToGetMore_engagement-dashboard_Title": "ანალიáƒĸიკა", "UpgradeToGetMore_auditing_Title": "შეáƒĸყობინებების შემოáƒŦმება" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/km.i18n.json b/packages/i18n/src/locales/km.i18n.json index 698d7a72edf4..997ee66a00e7 100644 --- a/packages/i18n/src/locales/km.i18n.json +++ b/packages/i18n/src/locales/km.i18n.json @@ -2376,12 +2376,19 @@ "Retail": "លក់​រážļយ", "Retention_setting_changed_successfully": "កážļរកំណត់គោលនយោបážļយរក្សážļទážģកបážļនផ្លážļស់ប្ដážŧរដោយជោគជ័យ", "RetentionPolicy": "គោលនយោបážļយរក្សážļទážģក", + "RetentionPolicy_AppliesToChannels": "ážĸនážģវត្តទៅឆážļនែល", + "RetentionPolicy_AppliesToDMs": "ážĸនážģវត្តទៅសážļរដោយផ្ទážļល់", + "RetentionPolicy_AppliesToGroups": "ážĸនážģវត្តចំពោះក្រážģមឯកជន", "RetentionPolicy_Description": "លážģបសážļរចážļស់ៗដោយស្វ័យប្រវត្តិនៅលើ Rocket.Chat របស់ážĸ្នក។", "RetentionPolicy_Enabled": "បážļនបើក", "RetentionPolicy_ExcludePinned": "មិនរážļប់បញ្ចážŧលសážļរដែលបážļនបញ្ចážŧល", "RetentionPolicy_FilesOnly": "លážģបតែឯកសážļរ", "RetentionPolicy_FilesOnly_Description": "មážļនតែឯកសážļរប៉ážģណ្ណោះដែលនឹងត្រážŧវលážģបចោលសážļររបស់ពážŊកគេនឹងនៅតែបន្ត។", "RetentionPolicy_MaxAge": "ážĸážļយážģសážļរážĸតិបរមážļ", + "RetentionPolicy_MaxAge_Channels": "ážĸážļយážģសážļរážĸតិបរមážļនៅក្នážģងឆážļនែល", + "RetentionPolicy_MaxAge_Description": "កážļត់បន្ថយសážļរទážļំងážĸស់ដែលចážļស់ជážļងតម្លៃនេះជážļថ្ងៃ", + "RetentionPolicy_MaxAge_DMs": "ážĸážļយážģសážļរážĸតិបរមážļនៅក្នážģងសážļរដោយផ្ទážļល់", + "RetentionPolicy_MaxAge_Groups": "ážĸážļយážģសážļរážĸតិបរមážļក្នážģងក្រážģមឯកជន", "RetentionPolicy_Precision": "កážļរបញ្ជážļក់ពេលវេលážļ", "RetentionPolicy_Precision_Description": "រយៈពេលប៉ážģន្មážļនដែលážĸ្នកល្ពៅគážŊរតែដំណើរកážļរ។ កážļរកំណត់នេះទៅជážļតម្លៃច្បážļស់លážļស់បន្ថែមទៀតធ្វើឱ្យឆážļនែលដែលមážļនឧបករណ៍កំណត់ពេលរក្សážļទážģកយ៉ážļងឆážļប់រហ័សដំណើរកážļរបážļនល្ážĸប៉ážģន្តែវážļážĸážļចធ្វើážĸោយចំណážļយថážļមពលដំណើរកážļរបន្ថែមលើសហគមន៍ធំ ៗ ។", "RetentionPolicyRoom_Enabled": "លážģបសážļរចážļស់ដោយស្វ័យប្រវត្តិ", @@ -3116,4 +3123,4 @@ "Enterprise": "សហគ្រážļស", "UpgradeToGetMore_engagement-dashboard_Title": "វិភážļគ", "UpgradeToGetMore_auditing_Title": "សវនកម្មសážļរ" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/ko.i18n.json b/packages/i18n/src/locales/ko.i18n.json index 569245e7854a..ad5818ab9f85 100644 --- a/packages/i18n/src/locales/ko.i18n.json +++ b/packages/i18n/src/locales/ko.i18n.json @@ -3025,6 +3025,9 @@ "Retail": "ė†Œë§¤", "Retention_setting_changed_successfully": "ëŗ´ėĄ´ ė •ėą… ė„¤ė •ė´ ëŗ€ę˛Ŋ되ė—ˆėŠĩ니다.", "RetentionPolicy": "ëŗ´ėĄ´ ė •ėą…", + "RetentionPolicy_AppliesToChannels": "ėą„널ė— ė ėšŠ", + "RetentionPolicy_AppliesToDMs": "개ė¸ 대화방ė— ė ėšŠ", + "RetentionPolicy_AppliesToGroups": "비ęŗĩ개 ꡸ëŖšė— ė ėšŠ", "RetentionPolicy_Description": "Rocket.Chat ė¸ėŠ¤í„´ėŠ¤ė—ė„œ ė˜¤ëž˜ëœ 메ė‹œė§€ëĨŧ ėžë™ėœŧ로 ė •ëĻŦ합니다.", "RetentionPolicy_DoNotPruneDiscussion": "토론 메ė‹œė§€ëĨŧ ė •ëĻŦ하ė§€ 마ė‹­ė‹œė˜¤", "RetentionPolicy_DoNotPrunePinned": "ęŗ ė • 된 메ė‹œė§€ëĨŧ ė •ëĻŦ하ė§€ 마ė‹­ė‹œė˜¤", @@ -3034,6 +3037,10 @@ "RetentionPolicy_FilesOnly": "파ėŧ만 ė‚­ė œ", "RetentionPolicy_FilesOnly_Description": "파ėŧ만 ė‚­ė œë˜ëŠ° 메ė‹œė§€ ėžė˛´ëŠ” 그대로 ėœ ė§€ëŠë‹ˆë‹¤.", "RetentionPolicy_MaxAge": "ėĩœëŒ€ 메ė‹œė§€ ėˆ˜ëĒ…", + "RetentionPolicy_MaxAge_Channels": "ėą„널ė˜ ėĩœëŒ€ 메ė‹œė§€ ëŗ´ėĄ´ 기간", + "RetentionPolicy_MaxAge_Description": "ė´ 값ëŗ´ë‹¤ ė˜¤ëž˜ëœ 메ė‹œė§€ëĨŧ ėŧ 단ėœ„ëĄœ ė •ëĻŦ합니다.", + "RetentionPolicy_MaxAge_DMs": "1:1 대화방ė˜ ėĩœëŒ€ 메ė‹œė§€ ėˆ˜ëĒ…", + "RetentionPolicy_MaxAge_Groups": "비ęŗĩ개 ꡸ëŖšė˜ ėĩœëŒ€ 메ė‹œė§€ ėˆ˜ëĒ…", "RetentionPolicy_Precision": "타ė´ë¨¸ ė •ë°€ë„", "RetentionPolicy_Precision_Description": "ė •ëĻŦ 타ė´ë¨¸ę°€ ė‹¤í–‰ë˜ëŠ” 빈도. ė´ëĨŧ ëŗ´ë‹¤ ė •í™•í•œ 값ėœŧ로 ė„¤ė •í•˜ëŠ´ ëš ëĨ¸ ëŗ´ėĄ´ 타ė´ë¨¸ę°€ ėžˆëŠ” ėą„널ė´ 더 ėž˜ ėž‘동하ė§€ë§Œ, 대규ëĒ¨ ėģ¤ëŽ¤ë‹ˆí‹°ė—ė„œëŠ” ė˛˜ëĻŦ ëŠĨë Ĩė´ ėļ”ę°€ëĄœ 필ėš”í•  ėˆ˜ ėžˆėŠĩ니다.", "RetentionPolicyRoom_Enabled": "ė˜¤ëž˜ëœ 메ė‹œė§€ëĨŧ ėžë™ėœŧ로 ė •ëĻŦ합니다.", @@ -4028,4 +4035,4 @@ "Enterprise": "기ė—…", "UpgradeToGetMore_engagement-dashboard_Title": "ëļ„ė„(ė—ë„ëĻŦ틱ėŠ¤)", "UpgradeToGetMore_auditing_Title": "메ė‹œė§€ 감ė‚Ŧ" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/ku.i18n.json b/packages/i18n/src/locales/ku.i18n.json index 301679e681bf..9b4a4d1aaeb2 100644 --- a/packages/i18n/src/locales/ku.i18n.json +++ b/packages/i18n/src/locales/ku.i18n.json @@ -2055,12 +2055,19 @@ "Retail": "YektacirÃŽ", "Retention_setting_changed_successfully": "SÃŽstema polÃŽtÃŽkayÃĒn paşveçÃģn bi serkeftÃŽ guhertin", "RetentionPolicy": "PolÃŽtÃŽkaya ReparÃĒziyÃĒ", + "RetentionPolicy_AppliesToChannels": "Li ser kanalÃĒn xwe ye", + "RetentionPolicy_AppliesToDMs": "Li peyamÃĒn yekser peyda dike", + "RetentionPolicy_AppliesToGroups": "Li komÃĒn taybetÃŽ", "RetentionPolicy_Description": "Xweseriya xwe li ser Rocket.", "RetentionPolicy_Enabled": "VekirÃŽ", "RetentionPolicy_ExcludePinned": "PeyamÃĒn pinned", "RetentionPolicy_FilesOnly": "TenÃĒ pelan jÃĒbirin", "RetentionPolicy_FilesOnly_Description": "TenÃĒ pelÃĒn wÃĒ jÃĒbirin, peyamÃĒn xwe dÃĒ di cih de bimÃŽnin.", "RetentionPolicy_MaxAge": "MesajÃĒ herÃŽ mezintir", + "RetentionPolicy_MaxAge_Channels": "Zewaca herÃŽ mezintir di kanalÃĒn", + "RetentionPolicy_MaxAge_Description": "Di rojan de, hemÃŽ mesajÃĒn kevntir ji vÃĒ nirxÃĒ mezintir bide", + "RetentionPolicy_MaxAge_DMs": "MesajÃĒ herÃŽ mezintir di navnÃŽÅŸÃĒn peyamÃĒ de", + "RetentionPolicy_MaxAge_Groups": "Di nav komÃĒn taybet de herÃŽ mezintirÃŽn mesajÃĒ", "RetentionPolicy_Precision": "Timer Precision", "RetentionPolicy_Precision_Description": "Heya caran timer prune divÃĒ diçin. Sazkirina vÃĒ nirxÃĒ bÃĒtir rastÃŽn dike ku kanalÃĒn bi timÃĒn bÃĒdeng yÃĒn zÃģtir baş dixebite, lÃĒ dibe ku li ser civakÃĒn mezin.", "RetentionPolicyRoom_Enabled": "PeyamÃĒn kevnÃĒn xwe yÃĒn otomatÃŽk dihÃĒle", @@ -2748,4 +2755,4 @@ "registration.component.form.sendConfirmationEmail": "ØĻیŲ…Û•ÛŒÚĩی ŲžØ´ØĒڕاØŗØĒÚŠØąØ¯Ų†Û•ŲˆÛ• بŲ†ÛŽØąÛ•", "Enterprise": "Enterprise", "UpgradeToGetMore_engagement-dashboard_Title": "analytics" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/lo.i18n.json b/packages/i18n/src/locales/lo.i18n.json index 441e3c09cafe..d427b251e863 100644 --- a/packages/i18n/src/locales/lo.i18n.json +++ b/packages/i18n/src/locales/lo.i18n.json @@ -2098,12 +2098,19 @@ "Retail": "āē‚āē˛āēâ€‹āēāģˆāē­āē", "Retention_setting_changed_successfully": "āēāē˛āē™āē•āēąāģ‰āē‡āē„āģˆāē˛āē™āē°āģ‚āēāēšāē˛āēāēŽāēąāēāēĒāē˛āē„āē§āē˛āēĄāē›āē­āē”āģ„āēžāģ„āē”āģ‰āē›āģˆāēŊāē™āģāē›āē‡āēĸāģˆāē˛āē‡āēĒāģāē˛āģ€āēĨāēąāē”", "RetentionPolicy": "āē™āē°āģ‚āēāēšāē˛āēāēŽāēąāēāēĒāē˛", + "RetentionPolicy_AppliesToChannels": "āē™āģāē˛āģƒāēŠāģ‰āēāēąāēšāēŠāģˆāē­āē‡āē—āē˛āē‡", + "RetentionPolicy_AppliesToDMs": "āģƒāēŠāģ‰āēāēąāēšāē‚āģāģ‰āē„āē§āē˛āēĄāģ‚āē”āēāēāēģāē‡", + "RetentionPolicy_AppliesToGroups": "āē™āģāē˛āģƒāēŠāģ‰āēāēąāēšāēāē¸āģˆāēĄāģ€āē­āēāē°āēŠāēģāē™", "RetentionPolicy_Description": "āē­āēąāē”āē•āē°āģ‚āē™āēĄāēąāē” prunes āē‚āģāģ‰āē„āē§āē˛āēĄāģ€āēāēģāģˆāē˛āģƒāē™āē•āēģāē§āēĸāģˆāē˛āē‡ RocketChat āē‚āē­āē‡āē—āģˆāē˛āē™.", "RetentionPolicy_Enabled": "Enabled", "RetentionPolicy_ExcludePinned": "āēāēģāēāģ€āē§āēąāģ‰āē™āē‚āģāģ‰āē„āē§āē˛āēĄāē—āēĩāģˆāēĄāēĩ PINned", "RetentionPolicy_FilesOnly": "āēžāēŊāē‡āģāē•āģˆāēĨāēļāēšāģ„āēŸāēĨāģŒ", "RetentionPolicy_FilesOnly_Description": "āģ„āēŸāēĨāģŒāēžāēŊāē‡āģāē•āģˆāēˆāē°āē–āēˇāēāēĨāēļāēš, āē‚āģāģ‰āē„āē§āē˛āēĄāē‚āē­āē‡āģ€āē‚āēģāē˛āģ€āēˆāēģāģ‰āē˛āģ€āē­āē‡āēˆāē°āēĸāēšāģˆāģƒāē™āēĒāē°āē–āē˛āē™āē—āēĩāģˆ.", "RetentionPolicy_MaxAge": "Age message āēĒāēšāē‡āēĒāē¸āē”", + "RetentionPolicy_MaxAge_Channels": "āē­āē˛āēāē¸āēĒāēšāē‡āēĒāē¸āē”āē‚āē­āē‡āē‚āģāģ‰āē„āē§āē˛āēĄāģƒāē™āēŠāģˆāē­āē‡āē—āē˛āē‡", + "RetentionPolicy_MaxAge_Description": "āēāē˛āē™āģāēāģ‰āģ„āē‚āē‚āģāģ‰āē„āē§āē˛āēĄāģ€āēāēģāģˆāē˛āēāē§āģˆāē˛āēĄāēšāē™āē„āģˆāē˛āē™āēĩāģ‰, āģƒāē™āēĄāēˇāģ‰", + "RetentionPolicy_MaxAge_DMs": "āē­āē˛āēāē¸āēĒāēšāē‡āēĒāē¸āē”āē‚āē­āē‡āē‚āģāģ‰āē„āē§āē˛āēĄāģƒāē™āē‚āģāģ‰āē„āē§āē˛āēĄāģ‚āē”āēāēāēģāē‡", + "RetentionPolicy_MaxAge_Groups": "āē­āē˛āēāē¸āēĒāēšāē‡āēĒāē¸āē”āē‚āģāģ‰āē„āē§āē˛āēĄāģƒāē™āēāē¸āģˆāēĄāģ€āē­āēāē°āēŠāēģāē™", "RetentionPolicy_Precision": "Timer Precision", "RetentionPolicy_Precision_Description": "āģ€āē§āēĨāē˛āē—āēĩāģˆāģƒāēŠāģ‰āģ€āē§āēĨāē˛āēĄāēąāē™āē„āē§āē™āģƒāēŠāģ‰. āēāē˛āē™āē•āēąāģ‰āē‡āē„āģˆāē˛āē™āēĩāģ‰āģƒāēĢāģ‰āēĄāēĩāēĄāēšāē™āē„āģˆāē˛āē—āēĩāģˆāēŠāēąāē”āģ€āēˆāē™āēĢāēŧāē˛āēāģ€āēŽāēąāē”āģƒāēĢāģ‰āēŠāģˆāē­āē‡āē—āēĩāģˆāēĄāēĩāģ€āē§āēĨāē˛āģ€āēāēąāēšāēŽāēąāēāēĒāē˛āģ„āē§āē‚āēļāģ‰āē™āģ€āēŽāēąāē”āē§āēŊāēāē”āēĩāē‚āēļāģ‰āē™āģāē•āģˆāē­āē˛āē”āēˆāē°āēĄāēĩāē„āģˆāē˛āģƒāēŠāģ‰āēˆāģˆāē˛āēāģƒāē™āēāē˛āē™āē›āē°āēĄāē§āē™āēœāēģāē™āēžāē´āģ€āēĒāē”āģƒāē™āēŠāē¸āēĄāēŠāēģāē™āē‚āē°āēĢāē™āē˛āē”āģƒāēĢāēāģˆ.", "RetentionPolicyRoom_Enabled": "āēĨāēļāēšāē‚āģāģ‰āē„āē§āē˛āēĄāģ€āēāēģāģˆāē˛āē­āēąāē”āē•āē°āģ‚āē™āēĄāēąāē”", @@ -2795,4 +2802,4 @@ "registration.component.form.sendConfirmationEmail": "āēĒāēģāģˆāē‡āē­āēĩāģ€āēĄāē§āēāē˛āē™āēĸāēˇāē™āēĸāēąāē™", "Enterprise": "Enterprise", "UpgradeToGetMore_engagement-dashboard_Title": "āēāē˛āē™āē§āē´āģ€āē„āē˛āē°" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/lt.i18n.json b/packages/i18n/src/locales/lt.i18n.json index f2763da5288d..88fb66dc554f 100644 --- a/packages/i18n/src/locales/lt.i18n.json +++ b/packages/i18n/src/locales/lt.i18n.json @@ -2115,12 +2115,19 @@ "Retail": "MaÅžmeninė", "Retention_setting_changed_successfully": "Saugojimo politikos nustatymas sėkmingai pasikeitė", "RetentionPolicy": "Saugojimo politika", + "RetentionPolicy_AppliesToChannels": "Taikoma kanalams", + "RetentionPolicy_AppliesToDMs": "Taikoma tiesioginiams praneÅĄimams", + "RetentionPolicy_AppliesToGroups": "Taikoma privačioms grupėms", "RetentionPolicy_Description": "AutomatiÅĄkai sunaikina senus praneÅĄimus per savo \"Rocket.Chat\" egzemplioriÅŗ.", "RetentionPolicy_Enabled": "ÄŽjungtas", "RetentionPolicy_ExcludePinned": "IÅĄskirti prisegtus praneÅĄimus", "RetentionPolicy_FilesOnly": "IÅĄtrinti tik failus", "RetentionPolicy_FilesOnly_Description": "Tik failai bus iÅĄtrinti, o pačios Åžinutės iÅĄliks.", "RetentionPolicy_MaxAge": "Maksimalus praneÅĄimo amÅžius", + "RetentionPolicy_MaxAge_Channels": "DidÅžiausias praneÅĄimÅŗ amÅžius kanaluose", + "RetentionPolicy_MaxAge_Description": "Sulenkite visus praneÅĄimus, senesnes uÅž ÅĄią vertę, dienÅŗ", + "RetentionPolicy_MaxAge_DMs": "Maksimalus praneÅĄimÅŗ amÅžius tiesioginiuose praneÅĄimuose", + "RetentionPolicy_MaxAge_Groups": "Maksimalus praneÅĄimÅŗ amÅžius privačiose grupėse", "RetentionPolicy_Precision": "Laikmatis tikslumas", "RetentionPolicy_Precision_Description": "Kaip daÅžnai turi bÅĢti paleidÅžiamas kopÅĢstÅŗ laikrodis. Jei norite nustatyti tikslesnę reikÅĄmę, kanalai su greitojo saugojimo laikmačiais dirba geriau, bet didelėms bendruomenėms gali bÅĢti brangesta papildoma apdorojimo galia.", "RetentionPolicyRoom_Enabled": "AutomatiÅĄkai sunaikinti senus praneÅĄimus", @@ -2813,4 +2820,4 @@ "registration.component.form.sendConfirmationEmail": "SiÅŗsti patvirtinimo el. LaiÅĄką", "Enterprise": "ÄŽmonė", "UpgradeToGetMore_engagement-dashboard_Title": "\"Analytics\"" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/lv.i18n.json b/packages/i18n/src/locales/lv.i18n.json index 80115585d934..544eac3dbeb3 100644 --- a/packages/i18n/src/locales/lv.i18n.json +++ b/packages/i18n/src/locales/lv.i18n.json @@ -2073,12 +2073,19 @@ "Retail": "MazumtirdzniecÄĢba", "Retention_setting_changed_successfully": "SaglabÄÅĄanas politikas iestatÄĢjumi ir veiksmÄĢgi mainÄĢti", "RetentionPolicy": "SaglabÄÅĄanas politika", + "RetentionPolicy_AppliesToChannels": "Attiecas uz kanāliem", + "RetentionPolicy_AppliesToDMs": "Attiecas uz tieÅĄajiem ziņojumiem", + "RetentionPolicy_AppliesToGroups": "Attiecas uz privātām grupām", "RetentionPolicy_Description": "Automātiski apgrieÅž vecos ziņojumus visā jÅĢsu Rocket.Chat eksemplārā.", "RetentionPolicy_Enabled": "Iespējots", "RetentionPolicy_ExcludePinned": "Izslēgt piespraustos ziņojumus", "RetentionPolicy_FilesOnly": "Dzēst tikai failus", "RetentionPolicy_FilesOnly_Description": "Tiks dzēsti tikai faili, paÅĄi ziņojumi paliks.", "RetentionPolicy_MaxAge": "Maksimālais ziņojumu vecums", + "RetentionPolicy_MaxAge_Channels": "Maksimālais ziņojumu vecums kanālos", + "RetentionPolicy_MaxAge_Description": "Apgriezt visus ziņojumus, kas vecāki par ÅĄo vērtÄĢbu, dienās", + "RetentionPolicy_MaxAge_DMs": "Maksimālais ziņojumu vecums tieÅĄajos ziņojumos", + "RetentionPolicy_MaxAge_Groups": "Maksimālais ziņojumu vecums privātās grupās", "RetentionPolicy_Precision": "Taimera precizitāte", "RetentionPolicy_Precision_Description": "Cik bieÅži ir apgrieÅĄanas taimerim bÅĢtu jādarbojas? Iestatot to precÄĢzāku ar vērtÄĢbu, kanāli ar ātru saglabÄÅĄanas taimeri darbojas labāk, taču lielām grupām tas var prasÄĢt vairāk apstrādes jaudas.", "RetentionPolicyRoom_Enabled": "Automātiski apgrieÅž vecās ziņas", @@ -2754,4 +2761,4 @@ "registration.component.form.sendConfirmationEmail": "NosÅĢtÄĢt apstiprinājuma e-pastu", "Enterprise": "Uzņēmums", "UpgradeToGetMore_engagement-dashboard_Title": "AnalÄĢtika" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/mn.i18n.json b/packages/i18n/src/locales/mn.i18n.json index a0bc5c3f9da2..60e18063b49f 100644 --- a/packages/i18n/src/locales/mn.i18n.json +++ b/packages/i18n/src/locales/mn.i18n.json @@ -2055,12 +2055,19 @@ "Retail": "ЖиĐļиĐŗĐģŅĐŊ Ņ…ŅƒĐ´Đ°ĐģĐ´Đ°Đ°", "Retention_setting_changed_successfully": "ĐĨĐ°Đ´ĐŗĐ°ĐģĐ°ĐģŅ‚Ņ‹ĐŊ йОдĐģĐžĐŗŅ‹ĐŊ Ņ‚ĐžŅ…иŅ€ĐŗОО Đ°ĐŧĐļиĐģŅ‚Ņ‚Đ°Đš йОĐģŅĐžĐŊ", "RetentionPolicy": "БаŅ‚ĐģĐ°ĐŊ ​​Ņ…Đ°ĐŧĐŗĐ°Đ°ĐģĐ°Ņ… йОдĐģĐžĐŗĐž", + "RetentionPolicy_AppliesToChannels": "ĐĄŅƒĐ˛Đ°Đŗ Đ°ŅˆĐ¸ĐŗĐģĐ°Ņ…", + "RetentionPolicy_AppliesToDMs": "МĐĩŅŅĐĩĐļиКĐŗ Đ°ŅˆĐ¸ĐŗĐģĐ°Ņ…Đ°Đ´ Đ°ŅˆĐ¸ĐŗĐģĐ°Đ´Đ°Đŗ", + "RetentionPolicy_AppliesToGroups": "ĐĨŅƒĐ˛Đ¸ĐšĐŊ ĐąŌ¯ĐģĐŗŌ¯Ō¯Đ´ŅĐ´ Ņ…ŅŅ€ŅĐŗĐģŅĐŊŅ", "RetentionPolicy_Description": "Ķ¨ĶŠŅ€Đ¸ĐšĐŊ Rocket Đ´ŅŅŅ€ Ņ…ŅƒŅƒŅ‡Đ¸ĐŊ СŅƒŅ€Đ˛Đ°ŅŅƒŅƒĐ´Ņ‹Đŗ авŅ‚ĐžĐŧĐ°Ņ‚Đ°Đ°Ņ€ Đ´Đ°Ņ€Đļ СаŅĐŊĐ° ŅƒŅƒ.", "RetentionPolicy_Enabled": "ИдŅĐ˛Ņ…ĐļŌ¯Ō¯ĐģŅŅĐŊ", "RetentionPolicy_ExcludePinned": "ĐĸŅĐŧĐ´ŅĐŗĐģŅŅŅĐŊ СŅƒŅ€Đ˛Đ°ŅŅƒŅƒĐ´Ņ‹Đŗ Ņ…Đ°ŅĐŊĐ° ŅƒŅƒ", "RetentionPolicy_FilesOnly": "ЗĶŠĐ˛Ņ…ĶŠĐŊ Ņ„Đ°ĐšĐģŅƒŅƒĐ´Ņ‹Đŗ ŅƒŅŅ‚ĐŗĐ°Ņ…", "RetentionPolicy_FilesOnly_Description": "ЗĶŠĐ˛Ņ…ĶŠĐŊ Ņ„Đ°ĐšĐģŅƒŅƒĐ´ ŅƒŅŅ‚Đ°Ņ… йОĐģĐŊĐž, ĐŧŅĐ´ŅŅĐŊŌ¯Ō¯Đ´ ĐŊŅŒ ĶŠĶŠŅ€ĶŠĶŠ йиĐĩĐģŅĐŗĐ´ŅŅ… йОĐģĐŊĐž.", "RetentionPolicy_MaxAge": "МĐĩŅŅĐĩĐļĐŊиК Ņ…Đ°ĐŧĐŗиКĐŊ иŅ… ĐŊĐ°Ņ", + "RetentionPolicy_MaxAge_Channels": "ĐĄŅƒĐ˛ĐŗиКĐŊ Ņ…Đ°ĐŧĐŗиКĐŊ иŅ… СŅƒŅ€Đ˛Đ°ŅŅ‹ĐŊ ĐŊĐ°Ņ", + "RetentionPolicy_MaxAge_Description": "Đ­ĐŊŅ ŅƒŅ‚ĐŗŅ‹Đŗ ĶŠĐŧĐŊĶŠŅ… ĐąŌ¯Ņ… СŅƒŅ€Đ˛Đ°ŅŅƒŅƒĐ´ ĶŠĐ´Ņ€ĶŠĶŠŅ ĶŠĐ´ĶŠŅ€Ņ‚ Ņ‚Đ°ĐšĐģĐ°Ņ…", + "RetentionPolicy_MaxAge_DMs": "МĐĩŅŅĐĩĐļĐŊиК Ņ…Đ°ĐŧĐŗиКĐŊ иŅ… СŅƒŅ€Đ˛Đ°ŅŅ‹ĐŊ ĐŊĐ°Ņ", + "RetentionPolicy_MaxAge_Groups": "ĐĨŅƒĐ˛Đ¸ĐšĐŊ ĐąŌ¯ĐģĐŗŌ¯Ō¯Đ´Đ¸ĐšĐŊ Ņ…Đ°ĐŧĐŗиКĐŊ иŅ… СŅƒŅ€Đ˛Đ°ŅŅ‹ĐŊ ĐŊĐ°Ņ", "RetentionPolicy_Precision": "ĐĸĐ°ĐšĐŧĐĩŅ€ НаŅ€Đ¸ĐšĐ˛Ņ‡ĐģĐ°Đģ", "RetentionPolicy_Precision_Description": "ПŅ€ĐĩŅŅ Ņ…иКŅ… Ņ…ŅƒĐŗĐ°Ņ†Đ°Đ° Ņ…ŅŅ€ иŅ… йаКŅ… Ņ‘ŅŅ‚ОК. ŌŽŌ¯ĐŊиКĐŗ иĐģŌ¯Ō¯ ĐŊĐ°Ņ€Đ¸ĐšĐ˛Ņ‡ĐģĐ°ĐģŅ‚Đ°ĐšĐŗĐ°Đ°Ņ€ Ņ‚ĐžĐŗŅ‚ООŅ… ĐŊŅŒ Ņ‚Ō¯Ņ€ĐŗŅĐŊ Ņ…ŅƒĐŗĐ°Ņ†Đ°Đ°ĐŊĐ´ Ņ…Đ°Đ´ĐŗĐ°ĐģĐ°Ņ… ŅŅƒĐ˛ĐŗŅƒŅƒĐ´ ĐŊŅŒ иĐģŌ¯Ō¯ ŅĐ°ĐšĐŊ Đ°ĐļиĐģĐģĐ°ĐŊĐ°, ĐŗŅŅ…Đ´ŅŅ Ņ‚ĐžĐŧООŅ…ĐžĐŊ ĐąŌ¯ĐģĐŗŌ¯Ō¯Đ´ŅĐ´ иĐģŌ¯Ō¯ иŅ… йОĐģОвŅŅ€ŅƒŅƒĐģĐ°Ņ… Ņ…Ō¯Ņ‡Đ¸ĐŊ Ņ‡Đ°Đ´Đ°Đģ ŅˆĐ°Đ°Ņ€Đ´Đ´Đ°Đŗ.", "RetentionPolicyRoom_Enabled": "ĐĨŅƒŅƒŅ‡Đ¸ĐŊ СŅƒŅ€Đ˛Đ°ŅŅƒŅƒĐ´Ņ‹Đŗ авŅ‚ĐžĐŧĐ°Ņ‚Đ°Đ°Ņ€ йОĐģĐŗĐžĐŊĐž", @@ -2747,4 +2754,4 @@ "registration.component.form.sendConfirmationEmail": "БаŅ‚Đ°ĐģĐŗĐ°Đ°ĐļŅƒŅƒĐģĐ°Ņ… иĐŧŅĐšĐģ иĐģĐŗŅŅŅ…", "Enterprise": "АĐļ Đ°Ņ…ŅƒĐšĐŊ ĐŊŅĐŗĐļ", "UpgradeToGetMore_engagement-dashboard_Title": "АĐŊĐ°ĐģиŅ‚иĐē" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/ms-MY.i18n.json b/packages/i18n/src/locales/ms-MY.i18n.json index cbb3907b4b0f..524260560a3f 100644 --- a/packages/i18n/src/locales/ms-MY.i18n.json +++ b/packages/i18n/src/locales/ms-MY.i18n.json @@ -2067,12 +2067,19 @@ "Retail": "Runcit", "Retention_setting_changed_successfully": "Tetapan dasar retensi berjaya berubah", "RetentionPolicy": "Dasar Pengekalan", + "RetentionPolicy_AppliesToChannels": "Terpakai kepada saluran", + "RetentionPolicy_AppliesToDMs": "Terpakai untuk mengarahkan mesej", + "RetentionPolicy_AppliesToGroups": "Terpakai kepada kumpulan swasta", "RetentionPolicy_Description": "Prun secara automatik mesej lama di seberang contoh Rocket.Chat anda.", "RetentionPolicy_Enabled": "Dihidupkan", "RetentionPolicy_ExcludePinned": "Kecualikan mesej yang disematkan", "RetentionPolicy_FilesOnly": "Hanya padamkan fail", "RetentionPolicy_FilesOnly_Description": "Hanya fail yang akan dipadam, mesej itu sendiri akan kekal di tempat.", "RetentionPolicy_MaxAge": "Umur mesej maksimum", + "RetentionPolicy_MaxAge_Channels": "Umur mesej maksimum dalam saluran", + "RetentionPolicy_MaxAge_Description": "Potong semua mesej yang lebih tua daripada nilai ini, dalam beberapa hari", + "RetentionPolicy_MaxAge_DMs": "Umur mesej maksimum dalam mesej langsung", + "RetentionPolicy_MaxAge_Groups": "Umur mesej maksimum dalam kumpulan swasta", "RetentionPolicy_Precision": "Ketepatan pemasa", "RetentionPolicy_Precision_Description": "Berapa kerap pemasa prune perlu dijalankan. Menetapkan ini ke nilai yang lebih tepat menjadikan saluran dengan pemasa cepat pemasa berfungsi dengan lebih baik, tetapi mungkin memerlukan kuasa pemprosesan tambahan pada komuniti besar.", "RetentionPolicyRoom_Enabled": "Buang mesej lama secara automatik", @@ -2762,4 +2769,4 @@ "registration.component.form.sendConfirmationEmail": "Hantar e-mel pengesahan", "Enterprise": "Enterprise", "UpgradeToGetMore_engagement-dashboard_Title": "Analisis" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/nb-NO.i18n.json b/packages/i18n/src/locales/nb-NO.i18n.json new file mode 100644 index 000000000000..6f31cf5a2e62 --- /dev/null +++ b/packages/i18n/src/locales/nb-NO.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/i18n/src/locales/nl.i18n.json b/packages/i18n/src/locales/nl.i18n.json index 75609ebc3472..bf7f7ffb780c 100644 --- a/packages/i18n/src/locales/nl.i18n.json +++ b/packages/i18n/src/locales/nl.i18n.json @@ -3525,6 +3525,9 @@ "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", @@ -3534,6 +3537,10 @@ "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", + "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 instelt op een nauwkeurigere waarde, werken kanalen met snelle retentietimers beter, maar kan dit extra verwerkingskracht kosten voor grote gemeenschappen.", "RetentionPolicyRoom_Enabled": "Oude berichten automatisch snoeien", @@ -4865,4 +4872,4 @@ "Enterprise": "Onderneming", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics", "UpgradeToGetMore_auditing_Title": "Bericht auditing" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/nn.i18n.json b/packages/i18n/src/locales/nn.i18n.json new file mode 100644 index 000000000000..6f31cf5a2e62 --- /dev/null +++ b/packages/i18n/src/locales/nn.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/i18n/src/locales/no.i18n.json b/packages/i18n/src/locales/no.i18n.json index 8a3bbed273f4..5bdbf2fb89cc 100644 --- a/packages/i18n/src/locales/no.i18n.json +++ b/packages/i18n/src/locales/no.i18n.json @@ -3459,12 +3459,19 @@ "Retail": "Detaljhandel", "Retention_setting_changed_successfully": "Retenspolicyinnstillingen ble endret", "RetentionPolicy": "Retensjonspolitikk", + "RetentionPolicy_AppliesToChannels": "Gjelder kanaler", + "RetentionPolicy_AppliesToDMs": "Gjelder direkte meldinger", + "RetentionPolicy_AppliesToGroups": "Gjelder for private grupper", "RetentionPolicy_Description": "Beskytter automatisk gamle meldinger over Rocket.Chat-forekomsten din.", "RetentionPolicy_Enabled": "aktivert", "RetentionPolicy_ExcludePinned": "Ekskluder pinnede meldinger", "RetentionPolicy_FilesOnly": "Bare slett filer", "RetentionPolicy_FilesOnly_Description": "Bare filer vil bli slettet, meldingene selv vil forbli pÃĨ plass.", "RetentionPolicy_MaxAge": "Maksimal meldingsalder", + "RetentionPolicy_MaxAge_Channels": "Maksimal meldingsalder i kanaler", + "RetentionPolicy_MaxAge_Description": "BeskjÃĻr alle meldinger som er eldre enn denne verdien, i dager", + "RetentionPolicy_MaxAge_DMs": "Maksimal meldingsalder i direkte meldinger", + "RetentionPolicy_MaxAge_Groups": "Maksimal meldingsalder i private grupper", "RetentionPolicy_Precision": "Timer Precision", "RetentionPolicy_Precision_Description": "Hvor ofte prune timer skal løpe. Innstilling av dette til en mer presis verdi gjør at kanaler med raske retensjonstidtakere fungerer bedre, men kan koste ekstra prosessorkraft pÃĨ store lokalsamfunn.", "RetentionPolicyRoom_Enabled": "BeskjÃĻr automatisk gamle meldinger", @@ -4573,4 +4580,4 @@ "free_per_month_user": "$0 per mÃĨned per bruker", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics", "Buy_more": "Kjøp mer" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/pa-IN.i18n.json b/packages/i18n/src/locales/pa-IN.i18n.json index 18aa4d8eee0b..2a6903f9781c 100644 --- a/packages/i18n/src/locales/pa-IN.i18n.json +++ b/packages/i18n/src/locales/pa-IN.i18n.json @@ -1,5 +1,6 @@ { "500": "ā¨…āŠ°ā¨Ļā¨°āŠ‚ā¨¨āŠ€ ā¨¸ā¨°ā¨ĩā¨° ā¨—āŠœā¨ŦāŠœ", + "__count__empty_rooms_will_be_removed_automatically__rooms__": "{{count}} empty rooms will be removed automatically:
    {{rooms}}.", "set__username__as__role_": "set {{username}} ā¨¨āŠ‚āŠ° {{role}}", "away": "ā¨ĻāŠ‚ā¨°", "Away": "ā¨ĻāŠ‚ā¨°", diff --git a/packages/i18n/src/locales/pl.i18n.json b/packages/i18n/src/locales/pl.i18n.json index 08f0e9bcedcb..b7d60c54ee2c 100644 --- a/packages/i18n/src/locales/pl.i18n.json +++ b/packages/i18n/src/locales/pl.i18n.json @@ -1,21 +1,39 @@ { "500": "Wewnętrzny błąd serwera", "__count__message_pruned_few": "{{count}} wiadomość(i) usuniętych", + "__agents__agents_and__count__conversations__period__": "{{agents}} agentÃŗw i {{count}} rozmÃŗw, {{period}}", "__count__empty_rooms_will_be_removed_automatically": "Liczba pokojÃŗw do automatycznego usunięcia: {{count}}.", "__count__empty_rooms_will_be_removed_automatically__rooms__": "Puste pokoje ({{count}}) zostaną automatycznie usunięte:
    {{rooms}}.", "__count__message_pruned_one": "{{count}} wiadomość(i) usuniętych", "__count__message_pruned_other": "{{count}} wiadomość(i) usuniętych", "__count__message_pruned_many": "{{count}} wiadomość(i) usuniętych", + "__count__conversations__period__": "{{count}} rozmowy, {{period}}", "__usersCount__member_joined_few": "+ {{count}} członkÃŗw dołączyło", + "__count__tags__and__count__conversations__period__": "{{count}} tagÃŗw i {{conversations}} konwersacji, {{period}}", + "__departments__departments_and__count__conversations__period__": "{{departments}} działÃŗw i {{count}} rozmÃŗw, {{period}}", "__usersCount__member_joined_one": "+ {{count}} członek dołączył", "__usersCount__member_joined_other": "+ {{count}} członkÃŗw dołączyło", "__usersCount__people_will_be_invited": "{{usersCount}} ludzi zostanie zostanie zaproszonych", "__username__is_no_longer__role__defined_by__user_by_": "UÅŧytkownik {{username}} nie ma juÅŧ roli {{role}}; zmienił to uÅŧytkownik {{user_by}}", "__username__was_set__role__by__user_by_": "UÅŧytkownik {{username}} otrzymał rolę {{role}} od uÅŧytkownika {{user_by}}", + "__count__without__department__": "{{count}} bez działu", + "__count__without__tags__": "{{count}} bez tagÃŗw", + "__count__without__assignee__": "{{count}} bez przypisania", + "__roomName__was_added_to_favorites": "{{roomName}} został dodany do ulubionych", "__usersCount__member_joined_many": "+ {{count}} członkÃŗw dołączyło", + "__roomName__was_removed_from_favorites": "{{roomName}} został usunięty z ulubionych", + "__roomName__is_encrypted": "{{roomName}} jest szyfrowany", + "__roomName__encryption_keys_need_to_be_updated": "{{roomName}} klucze szyfrowania muszą zostać zaktualizowane, aby umoÅŧliwić dostęp. Aby tak się stało, inny członek pokoju musi być online.", + "removed__username__as__role_": "usunięto {{username}} jako {{role}}", + "set__username__as__role_": "ustaw {{username}} jako {{role}}", + "sequential_message": "komunikat sekwencyjny", "This_room_encryption_has_been_enabled_by__username_": "UÅŧytkownik {{username}} włączył szyfrowanie w tym pokoju", "This_room_encryption_has_been_disabled_by__username_": "UÅŧytkownik {{username}} wyłączył szyfrowanie w tym pokoju", + "Third_party_login": "Logowanie przez stronę trzecią", + "Enabled_E2E_Encryption_for_this_room": "włączone szyfrowanie E2E dla tego pokoju", + "Enable_business_hours": "Włącz godziny pracy", "disabled": "wyłączone", + "Disabled_E2E_Encryption_for_this_room": "wyłączone szyfrowanie E2E dla tego pokoju", "@username": "@nazwa_uÅŧytkownika", "@username_message": "@nazwa_uÅŧytkownika ", "#channel": "#kanał", @@ -25,9 +43,18 @@ "2_Erros_Information_and_Debug": "2 – Błędy, informacje i debugowanie", "12_Hour": "Zegar 12-godzinny", "24_Hour": "Zegar 24-godzinny", + "A_cloud-based_platform_for_those_needing_a_plug-and-play_app": "Oparta na chmurze platforma dla tych, ktÃŗrzy potrzebują aplikacji typu plug-and-play.", "A_new_owner_will_be_assigned_automatically_to__count__rooms": "Nowy właściciel zostanie automatycznie przypisany do {{count}} pokoi.", "A_new_owner_will_be_assigned_automatically_to_the__roomName__room": "Nowy właściciel zostanie automatycznie przypisany do pokoju o nazwie {{roomName}}", "A_new_owner_will_be_assigned_automatically_to_those__count__rooms__rooms__": "Nowy właściciel zostanie automatyczne przypisany do tych {{count}} pokoi:
    {{rooms}}.", + "A_secure_and_highly_private_self-managed_solution_for_conference_calls": "Bezpieczne i wysoce prywatne rozwiązanie do samodzielnego zarządzania połączeniami konferencyjnymi.", + "A_workspace_admin_needs_to_install_and_configure_a_conference_call_app": "Administrator obszaru roboczego musi zainstalować i skonfigurować aplikację do połączeń konferencyjnych.", + "An_app_needs_to_be_installed_and_configured": "Aplikacja musi zostać zainstalowana i skonfigurowana.", + "Accessibility": "Dostępność", + "Accessibility_and_Appearance": "Dostępność i wygląd", + "Accessibility_activation": "W tym miejscu moÅŧna aktywować szereg funkcji poprawiających komfort przeglądania.", + "Accessibility_statement": "Oświadczenie o dostępności", + "Accessibility_feature_documentation": "Dokumentacja funkcji dostępności", "Accept_Call": "Odbierz połączenie", "Accept": "Akceptuj", "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Akceptuj przychodzące Åŧądania wielokanałowe, nawet gdy brak agentÃŗw online", @@ -39,6 +66,8 @@ "access_your_basic_information": "dostęp do podstawowych informacji", "access-mailer": "Uzyskaj dostęp do ekranu Mailer", "access-mailer_description": "Uprawnienie do wysyłania masowych wiadomości e-mail do wszystkich uÅŧytkownikÃŗw.", + "access-marketplace": "Dostęp do marketplace", + "access-marketplace_description": "Zezwolenie na przeglądanie i pobieranie aplikacji z Marketplace", "access-permissions": "Ekran uprawnień dostępu", "access-permissions_description": "Zmodyfikuj uprawnienia dla rÃŗÅŧnych rÃŗl.", "access-setting-permissions": "Zmodyfikuj uprawnienia oparte na ustawieniach", @@ -85,6 +114,7 @@ "Accounts_Default_User_Preferences_desktopNotifications": "Domyślny alert powiadomień z pulpitu", "Accounts_Default_User_Preferences_pushNotifications": "Domyślny alert powiadomień push", "Accounts_Default_User_Preferences_not_available": "Nie udało się pobrać preferencji uÅŧytkownika, poniewaÅŧ nie zostały jeszcze skonfigurowane przez uÅŧytkownika", + "Accounts_Default_User_Preferences_showThreadsInMainChannel_Description": "Po włączeniu tej opcji wszystkie odpowiedzi w wątku będą rÃŗwnieÅŧ wyświetlane bezpośrednio w głÃŗwnym pokoju. Gdy opcja ta jest wyłączona, odpowiedzi w wątku będą wyświetlane zgodnie z wyborem nadawcy.", "Accounts_DefaultUsernamePrefixSuggestion": "Domyślna sugestia prefiksu uÅŧytkownika", "Accounts_denyUnverifiedEmail": "Odrzucaj niezweryfikowane wiadomości e-mail", "Accounts_Directory_DefaultView": "Domyślny wykaz katalogÃŗw", @@ -247,6 +277,7 @@ "Accounts_ShowFormLogin": "PokaÅŧ domyślny formularz logowania", "Accounts_TwoFactorAuthentication_By_TOTP_Enabled": "Włącz uwierzytelnianie dwuskładnikowe za pomocą TOTP", "Accounts_TwoFactorAuthentication_By_TOTP_Enabled_Description": "UÅŧytkownicy mogą skonfigurować uwierzytelnianie dwuskładnikowe za pomocą dowolnej aplikacji TOTP, takiej jak Google Authenticator lub Authy.", + "Calls_in_queue_many": "{{count}} połączeń w kolejce", "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In": "Uruchom automatycznie uwierzytelnianie dwuskładnikowe nowych uÅŧytkownikÃŗw za pomocą poczty e-mail", "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In_Description": "Nowi uÅŧytkownicy będą mieć domyślnie włączone uwierzytelnianie dwuskładnikowe za pomocą poczty e-mail. Mogą je wyłączyć na stronie swojego profilu.", "Accounts_TwoFactorAuthentication_By_Email_Code_Expiration": "Czas wygaśnięcia kodu wysłanego w wiadomości e-mail w sekundach", @@ -265,6 +296,7 @@ "API_EmbedDisabledFor": "Wyłącz osadzanie dla uÅŧytkownikÃŗw", "Accounts_UserAddedEmail_Default": "

    Witamy w [Site_Name]

    PrzejdÅē na stronę [Site_URL] i wyprÃŗbuj najlepsze dziś dostępne otwarte rozwiązanie czatu!

    MoÅŧesz zalogować się przy uÅŧyciu adresu e-mail: [email] i hasła: [password]. MoÅŧe wystąpić konieczność zmiany hasła po pierwszym logowaniu.", "Accounts_UserAddedEmail_Description": "MoÅŧesz uÅŧyć znacznikÃŗw: \n - `[name]`, `[fname]`, `[lname]`, aby wstawić odpowiednio pełną nazwę uÅŧytkownika, jego imię lub nazwisko. \n - `[email]`, aby wstawić adres e-mail uÅŧytkownika. \n - `[password]`, aby wstawić hasło uÅŧytkownika. \n - `[Site_Name]` i `[Site_URL]`, aby wstawić odpowiednio nazwę aplikacji i adres URL. ", + "Calls_in_queue_few": "{{count}} połączeń w kolejce", "API_EmbedDisabledFor_Description": "Rozdzielona przecinkami lista nazw uÅŧytkownikÃŗw, ktÃŗrym naleÅŧy wyłączyć podgląd osadzonych linkÃŗw.", "Accounts_UserAddedEmailSubject_Default": "Dodano Cię do [Site_Name]", "Accounts_Verify_Email_For_External_Accounts": "Oznaczaj Email dla kont zewnętrznych jako zweryfikowany", @@ -297,10 +329,10 @@ "add-oauth-service": "Dodaj usługę Oauth", "add-oauth-service_description": "Uprawnienie do dodawania nowej usługi Oauth", "add-team-channel": "Dodaj zespÃŗł Channel", - "Calls_in_queue_many": "{{count}} połączeń w kolejce", "add-team-channel_description": "Zezwolenie na dodanie kanału do zespołu", "add-team-member": "Dodaj członka zespołu", "add-team-member_description": "Uprawnienie do dodawania członkÃŗw do zespołu", + "Add_them": "Dodaj ich", "add-user": "Dodaj uÅŧytkownika", "add-user_description": "Uprawnienie do dodawania nowych uÅŧytkownikÃŗw do serwera na ekranie uÅŧytkownikÃŗw", "add-user-to-any-c-room": "Dodaj uÅŧytkownika do dowolnego publicznego kanału Channel", @@ -321,7 +353,6 @@ "Admin_disabled_encryption": "Administrator nie włączył szyfrowania E2E", "Admin_Info": "Informacje administracyjne", "admin-no-active-video-conf-provider": "**Połączenie konferencyjne nie jest włączone**: Skonfiguruj połączenia konferencyjne, aby były dostępne w tej przestrzeni roboczej.", - "Calls_in_queue_few": "{{count}} połączeń w kolejce", "admin-video-conf-provider-not-configured": "**Połączenie konferencyjne nie jest włączone**: Skonfiguruj połączenia konferencyjne, aby były dostępne w tej przestrzeni roboczej.", "admin-no-videoconf-provider-app": "**Połączenie konferencyjne nie jest włączone**: Aplikacje do połączeń konferencyjnych są dostępne w marketplace Rocket.Chat.", "Administration": "Administracja", @@ -382,6 +413,7 @@ "Also_send_thread_message_to_channel_behavior": "Wysyłaj wiadomości z wątku rÃŗwnieÅŧ do kanału", "Also_send_to_channel": "Wyślij takÅŧe do kanału", "Always_open_in_new_window": "Zawsze otwieraj w nowym oknie", + "Always_show_thread_replies_in_main_channel": "Zawsze wyświetlaj odpowiedzi na wątki w kanale głÃŗwnym", "Analytics": "Analityka", "Analytics_Description": "Zobacz, jak uÅŧytkownicy wchodzą w interakcję z Twoją przestrzenią roboczą.", "Analytics_features_enabled": "Funkcjonalność włączona", @@ -489,6 +521,8 @@ "Apps_context_explore": "Poznaj", "Apps_context_installed": "Zainstalowana", "Apps_context_premium": "Enterprise", + "Apps_disabled_when_Premium_trial_ended_description": "Przestrzenie robocze w wersji Community mogą mieć włączonych maksymalnie 5 aplikacji Marketplace i 3 aplikacje prywatne. Poproś administratora obszaru roboczego o ponowne włączenie aplikacji.", + "Apps_disabled_when_Premium_trial_ended_description_admin": "Przestrzenie robocze w wersji Community mogą mieć włączonych maksymalnie 5 aplikacji Marketplace i 3 aplikacje prywatne. Włącz ponownie wymagane aplikacje.", "Apps_Engine_Version": "Wersja silnika aplikacji", "Apps_Essential_Alert": "Ta aplikacja jest niezbędna dla następujących zdarzeń:", "Apps_Essential_Disclaimer": "Zdarzenia wymienione powyÅŧej zostaną zakłÃŗcone, jeśli ta aplikacja jest wyłączona. Jeśli chcesz, aby Rocket.Chat działał bez tej aplikacji, musisz ją odinstalować", @@ -536,7 +570,7 @@ "Apps_Logs_TTL_Alert": "W zaleÅŧności od wielkości kolekcji dziennikÃŗw zmiana tego ustawienia moÅŧe spowodować spowolnienie działania w niektÃŗrych momentach", "Apps_Marketplace_Deactivate_App_Prompt": "Czy na pewno chcesz wyłączyć tę aplikację?", "Apps_Marketplace_Login_Required_Description": "Kupowanie aplikacji z Rocket.Chat Marketplace wymaga zarejestrowania obszaru roboczego i zalogowania się.", - "Apps_Marketplace_Login_Required_Title": "Wymagane zalogowanie się do Marktetplace", + "Apps_Marketplace_Login_Required_Title": "Wymagane zalogowanie się do Marketplace", "Apps_Marketplace_Modify_App_Subscription": "Zmień subskrypcję", "Apps_Marketplace_pricingPlan_monthly": "{{price}} / miesiąc", "Apps_Marketplace_pricingPlan_monthly_perUser": "{{price}} / miesiąc od uÅŧytkownika", @@ -808,10 +842,15 @@ "Canned_Response_Sharing_Public_Description": "KaÅŧdy moÅŧe uzyskać dostęp do tej predefiniowanej odpowiedzi", "Canned_Responses": "Predefiniowane odpowiedzi", "Canned_Responses_Enable": "Włącz predefiniowane odpowiedzi", + "Create_direct_message": "Nowa wiadomość bezpośrednia", + "Create_tag": "UtwÃŗrz tag", + "Create_trigger": "UtwÃŗrz wyzwalacz", + "Create_SLA_policy": "Tworzenie zasad SLA", "Cannot_invite_users_to_direct_rooms": "Nie moÅŧna zaprosić uÅŧytkownikÃŗw do pokoi bezpośrednich", "Cannot_open_conversation_with_yourself": "Nie moÅŧna wysłać wiadomości bezpośredniej do siebie", "Cannot_share_your_location": "Nie moÅŧna udostępnić Twojej lokalizacjiâ€Ļ", "Cannot_disable_while_on_call": "Nie moÅŧna zmienić status w trakcie połączenia", + "Cant_join": "Nie mogę dołączyć", "CAS": "CAS", "CAS_Description": "Centralna usługa uwierzytelniania umoÅŧliwia członkom korzystanie z jednego zestawu poświadczeń do logowania się do wielu witryn za pośrednictwem wielu protokołÃŗw.", "CAS_autoclose": "Automatycznie zamykaj okienko logowania", @@ -825,6 +864,7 @@ "CAS_enabled": "Włączone", "CAS_Login_Layout": "Układ logowania CAS", "CAS_login_url": "Adres URL logowania SSO", + "message_counter_many": "{{count}} wiadomości", "CAS_login_url_Description": "Adres URL logowania zewnętrznej usługi SSO, np.: `https://sso.example.undef/sso/login`", "CAS_popup_height": "Wysokość okna logowania", "CAS_popup_width": "Szerokość okna logowania", @@ -840,14 +880,18 @@ "Categories*": "Kategorie*", "CDN_JSCSS_PREFIX": "Prefiks CDN dla JS/CSS", "CDN_PREFIX": "Prefiks CDN", + "meteor_status_reconnect_in_many": "sprÃŗbuj jeszcze raz za {{count}} sekund...", "CDN_PREFIX_ALL": "UÅŧywaj prefiksu CDN dla wszystkich zasobÃŗw", "Certificates_and_Keys": "Certyfikaty i klucze", + "changed_room_announcement_to__room_announcement_": "zmieniono ogłoszenie o pokoju na: {{room_announcement}}", + "changed_room_description_to__room_description_": "zmieniono opis pokoju na: {{room_description}}", "change-livechat-room-visitor": "Zmień gości w pokoju Livechat", "change-livechat-room-visitor_description": "Uprawnienie do dodawania dodatkowych informacji do gościa pokoju Livechat", "Change_Room_Type": "Zmiana typu pokoju", "Changing_email": "Zmiana adresu e-mail", "channel": "kanał", "Channel": "Kanał", + "Channel_info": "Informacje o kanale", "Channel_already_exist": "Kanał „#%s” juÅŧ istnieje.", "Channel_already_exist_static": "Kanał juÅŧ istnieje.", "Channel_already_Unarchived": "Kanał o nazwie „#%s” jest juÅŧ w stanie niezarchiwizowanym", @@ -859,6 +903,7 @@ "Channel_Name_Placeholder": "WprowadÅē nazwę kanałuâ€Ļ", "Channel_to_listen_on": "Kanał do słuchania", "Channel_Unarchived": "Kanał o nazwie „#%s” został przywrÃŗcony z archiwum", + "Channel__roomName__": "Kanał {{roomName}}.", "Channels": "Kanały", "Channels_added": "Kanały zostały dodane", "Channels_are_where_your_team_communicate": "Kanały są miejscem, w ktÃŗrym zespÃŗł się komunikuje", @@ -888,6 +933,7 @@ "Chat_Duration": "Czas trwania czatu", "Chats_removed": "Czaty usunięte", "Check_All": "Zaznacz wszystko", + "Check_back_later": "SprawdÅē pÃŗÅēniej", "Check_if_the_spelling_is_correct": "SprawdÅē, czy pisownia jest poprawna", "Check_Progress": "SprawdÅē postęp", "Check_device_activity": "SprawdÅē aktywność urządzenia", @@ -911,6 +957,7 @@ "Click_here": "Kliknij tutaj", "Click_here_for_more_details_or_contact_sales_for_a_new_license": "Kliknij tutaj, aby uzyskać więcej informacji, lub napisz na adres {{email}} w celu uzyskania nowej licencji.", "Click_here_for_more_info": "Kliknij tutaj, aby uzyskać więcej informacji", + "message_counter_few": "{{count}} wiadomości", "Click_here_to_clear_the_selection": "Kliknij tutaj aby wyczyścić wybÃŗr", "Click_here_to_enter_your_encryption_password": "Kliknij tutaj, aby wprowadzić hasło szyfrowania", "Click_here_to_view_and_copy_your_password": "Kliknij tutaj, aby wyświetlić i skopiować hasło.", @@ -929,6 +976,7 @@ "close-livechat-room_description": "Uprawnienie do zamykania bieÅŧącego pokoju Omnichannel", "close-others-livechat-room": "Zamknij inny pokÃŗj Omnichannel", "close-others-livechat-room_description": "Uprawnienie do zamykania innych pokoi Omnichannel", + "Close_Window": "Zamknij okno", "Closed": "Zamknięty", "Closed_At": "Zamknięty o", "Closed_automatically": "Zamknięty automatycznie przez system", @@ -943,6 +991,7 @@ "Cloud_Invalid_license": "Nieprawidłowa licencja!", "Cloud_Apply_license": "Zastosuj licencję", "Cloud_connectivity": "Łączność w chmurze", + "meteor_status_reconnect_in_few": "sprÃŗbuj jeszcze raz za {{count}} sekund...", "Cloud_address_to_send_registration_to": "Adres, na ktÃŗry naleÅŧy wysłać wiadomość e-mail z prośbą o rejestrację w chmurze.", "Cloud_click_here": "Po skopiowaniu tekstu przejdÅē do [konsola chmury (kliknij tutaj)]({{cloudConsoleUrl}}).", "Cloud_console": "Konsola chmury", @@ -969,6 +1018,8 @@ "Cloud_troubleshooting": "Rozwiązywanie problemÃŗw", "Cloud_update_email": "Zaktualizuj adres e-mail", "Cloud_what_is_it": "Co to jest?", + "Copy_Link": "Skopiuj link", + "Copy_password": "Skopiuj hasło", "Cloud_what_is_it_additional": "Ponadto będzie moÅŧna zarządzać licencjami, rozliczeniami i wsparciem z konsoli chmury Rocket.Chat Cloud.", "Cloud_what_is_it_description": "Połączenie z chmurą Rocket.Chat umoÅŧliwia połączenie hostowanego przez siebie obszaru roboczego Rocket.Chat z usługami, ktÃŗre świadczymy w naszej chmurze.", "Cloud_what_is_it_services_like": "Usługi takie jak:", @@ -1006,8 +1057,12 @@ "Confirm_New_Password_Placeholder": "WprowadÅē ponownie nowe hasłoâ€Ļ", "Confirm_password": "PotwierdÅē hasło", "Confirm_your_password": "PotwierdÅē hasło", + "Confirm_configuration_update": "PotwierdÅē aktualizację konfiguracji", + "Confirm_new_workspace": "PotwierdÅē nowy obszar roboczy", "Confirmation": "Potwierdzenie", "Configure_video_conference": "Konfiguracja połączenia konferencyjnego", + "Configuration_update_confirmed": "Aktualizacja konfiguracji potwierdzona", + "Configuration_update": "Aktualizacja konfiguracji", "Connect": "Połącz", "Connected": "Połączony", "Connect_SSL_TLS": "Połącz się za pomocą SSL/TLS", @@ -1028,9 +1083,9 @@ "Contact_not_found": "Nie znaleziono kontaktu", "Contact_Profile": "Profil kontaktu", "Contact_Info": "Informacje o kontakcie", - "message_counter_many": "{{count}} wiadomości", "Content": "Zawartość", "Continue": "Kontynuuj", + "Continue_Adding": "Kontynuować dodawanie?", "Continuous_sound_notifications_for_new_livechat_room": "Ciągłe powiadomienia dÅēwiękowe dla nowego pokoju omnichannel", "convert-team": "Konwertuj zespÃŗł", "convert-team_description": "Zezwolenie na przekształcenie zespołu w kanał", @@ -1045,7 +1100,6 @@ "Conversations": "Rozmowy", "Conversations_per_day": "Rozmowy na dzień", "Convert": "Konwertuj", - "meteor_status_reconnect_in_many": "sprÃŗbuj jeszcze raz za {{count}} sekund...", "Convert_Ascii_Emojis": "Konwertuj ASCII na emotikon", "Convert_to_channel": "Konwertuj na kanał", "Converting_channel_to_a_team": "Konwertujesz ten kanał na zespÃŗł. Wszyscy członkowie zostaną utrzymani.", @@ -1123,7 +1177,6 @@ "Country_Denmark": "Dania", "Country_Djibouti": "DÅŧibuti", "Country_Dominica": "Dominika", - "message_counter_few": "{{count}} wiadomości", "Country_Dominican_Republic": "Dominikana", "Country_Ecuador": "Ekwador", "Country_Egypt": "Egipt", @@ -1159,7 +1212,6 @@ "Country_Heard_Island_and_Mcdonald_Islands": "Wyspy Heard i McDonalda", "Country_Holy_See_Vatican_City_State": "Watykan", "Country_Honduras": "Honduras", - "meteor_status_reconnect_in_few": "sprÃŗbuj jeszcze raz za {{count}} sekund...", "Country_Hong_Kong": "Hongkong", "Country_Hungary": "Węgry", "Country_Iceland": "Islandia", @@ -1439,7 +1491,7 @@ "Delete_message": "Usuń wiadomość", "Delete_my_account": "Usuń konto", "Delete_Role_Warning": "Usunięcie roli usunie ją na zawsze. Nie moÅŧna tego cofnąć.", - "Delete_Room_Warning": "Usunięcie pokoju spowoduje usunięcie wszystkich wiadomości wysłanych w tym pokoju. Nie moÅŧna tego cofnąć.", + "Delete_Room_Warning": "Usunięcie pokoju {{roomType}} spowoduje usunięcie wszystkich wiadomości wysłanych w tym pokoju. Nie moÅŧna tego cofnąć.", "Delete_User_Warning": "Usunięcie uÅŧytkownika spowoduje rÃŗwnieÅŧ usunięcie wszystkich wiadomości od tego uÅŧytkownika. Nie moÅŧna tego cofnąć.", "Delete_User_Warning_Delete": "Usunięcie uÅŧytkownika spowoduje rÃŗwnieÅŧ usunięcie wszystkich wiadomości od tego uÅŧytkownika. Nie moÅŧna tego cofnąć.", "Delete_User_Warning_Keep": "UÅŧytkownik zostanie usunięty, ale jego wiadomości pozostaną widoczne. Nie moÅŧna tego cofnąć.", @@ -1566,9 +1618,11 @@ "Display_unread_counter": "Wyświetl liczbę nieprzeczytanych wiadomości", "Displays_action_text": "Wyświetla tekst akcji", "Do_It_Later": "ZrÃŗb to pÃŗÅēniej", + "Displayed_next_to_name": "Wyświetlane obok nazwy", "Do_not_display_unread_counter": "Nie wyświetlaj Åŧadnego licznika tego kanału", "Do_not_provide_this_code_to_anyone": "Nie udostępniaj nikomu tego kodu.", "Do_Nothing": "Nic nie rÃŗb", + "Do_nothing": "Nic nie rÃŗb", "Do_you_have_any_notes_for_this_conversation": "Czy masz jakieś notatki do tej rozmowy?", "Do_you_want_to_accept": "Czy chcesz zaakceptować?", "Do_you_want_to_change_to_s_question": "Czy chcesz zmienić na %s?", @@ -1623,13 +1677,14 @@ "E2E_Encryption_Password_Explanation": "MoÅŧesz teraz tworzyć zaszyfrowane grupy prywatne i wiadomości bezpośrednie. MoÅŧesz rÃŗwnieÅŧ zmienić istniejące prywatne grupy lub DM na zaszyfrowane.

    To jest szyfrowanie od końca do końca, więc klucz do kodowania / dekodowania wiadomości nie zostanie zapisany na serwerze. Z tego powodu musisz przechowywać swoje hasło w bezpiecznym miejscu. Będziesz musiał wprowadzić je na innych urządzeniach, na ktÃŗrych chcesz uÅŧywać szyfrowania e2e.", "E2E_key_reset_email": "Powiadomienie o resetowaniu klucza E2E", "E2E_message_encrypted_placeholder": "Ta wiadomość jest zaszyfrowana end-to-end. Aby ją wyświetlić, musisz wprowadzić swÃŗj klucz szyfrowania w ustawieniach konta.", - "E2E_password_request_text": "Aby uzyskać dostęp do zaszyfrowanych grup prywatnych i wiadomości bezpośrednich, wprowadÅē swoje hasło szyfrowania.
    Musisz wprowadzić to hasło, aby kodować / dekodować wiadomości na kaÅŧdym uÅŧywanym kliencie, poniewaÅŧ klucz nie jest przechowywany na serwerze.", + "E2E_password_request_text": "Aby uzyskać dostęp do zaszyfrowanych grup prywatnych i wiadomości bezpośrednich, wprowadÅē swoje hasło szyfrowania. Hasło nie jest przechowywane na serwerze, więc musisz wprowadzić je na kaÅŧdym urządzeniu.", "E2E_password_reveal_text": "MoÅŧesz teraz tworzyć zaszyfrowane grupy prywatne i wiadomości bezpośrednie. MoÅŧesz rÃŗwnieÅŧ zmienić istniejące prywatne grupy lub DM na zaszyfrowane.

    To jest szyfrowanie od końca do końca, więc klucz do kodowania / dekodowania wiadomości nie zostanie zapisany na serwerze. Z tego powodu musisz przechowywać to hasło w bezpiecznym miejscu. Będziesz musiał wprowadzić go na innych urządzeniach, na ktÃŗrych chcesz uÅŧywać szyfrowania e2e. Dowiedz się więcej tutaj

    Twoje hasło: {{randomPassword}}

    to jest automatycznie wygenerowane hasło, moÅŧesz ustawić nowe hasło do szyfrowania klucza w dowolnym momencie z dowolnej przeglądarki, do ktÃŗrej wprowadziłeś istniejące hasło.
    To hasło jest przechowywane tylko w tej przeglądarce, dopÃŗki nie zapiszesz hasła i nie usuniesz tej wiadomości.", "E2E_Reset_Email_Content": "Zostałeś automatycznie wylogowany. Kiedy zalogujesz się ponownie, Rocket.Chat wygeneruje nowy klucz i przywrÃŗci TwÃŗj dostęp do kaÅŧdego zaszyfrowanego pokoju, ktÃŗry ma jednego lub więcej członkÃŗw online. Ze względu na charakter szyfrowania E2E, Rocket.Chat nie będzie w stanie przywrÃŗcić dostępu do szyfrowanego pokoju, w ktÃŗrym nie ma Åŧadnego członka online.", "E2E_Reset_Key_Explanation": "Ta opcja usunie TwÃŗj obecny klucz E2E i wyloguje Cię.
    Po ponownym zalogowaniu się, Rocket.Chat wygeneruje nowy klucz i przywrÃŗci dostęp do szyfrowanego pokoju, ktÃŗry ma jednego lub więcej członkÃŗw online.
    Ze względu na charakter szyfrowania E2E, Rocket.Chat nie będzie w stanie przywrÃŗcić dostępu do szyfrowanego pokoju, ktÃŗry nie ma członkÃŗw online.", "E2E_Reset_Other_Key_Warning": "Zresetowanie aktualnego klucza E2E spowoduje wylogowanie uÅŧytkownika. Gdy uÅŧytkownik zaloguje się ponownie, Rocket.Chat wygeneruje nowy klucz i przywrÃŗci uÅŧytkownikowi dostęp do kaÅŧdego zaszyfrowanego pomieszczenia, ktÃŗre ma jednego lub więcej członkÃŗw online. Ze względu na charakter szyfrowania E2E, Rocket.Chat nie będzie w stanie przywrÃŗcić dostępu do szyfrowanego pokoju, w ktÃŗrym nie ma Åŧadnego członka online.", "ECDH_Enabled": "Włącz szyfrowanie drugiej warstwy dla transportu danych", "Edit": "Edycja", + "Edit_channel": "Edytuj kanał", "Edit_Business_Hour": "Edycja godzin pracy", "Edit_Canned_Response": "Edytowanie predefiniowanej odpowiedzi", "Edit_Canned_Responses": "Edycja predefiniowanej odpowiedzi", @@ -1733,7 +1788,7 @@ "Enable_inquiry_fetch_by_stream": "Włączanie pobierania danych zapytania z serwera za pomocą strumienia", "Enable_omnichannel_auto_close_abandoned_rooms": "Włącz automatyczne zamykanie pokoi opuszczonych przez odwiedzającego", "Enable_Password_History": "Włącz historię haseł", - "Enable_Password_History_Description": "Po włączeniu tej funkcji uÅŧytkownicy nie będą mogli aktualizować swoich haseł do ostatnio uÅŧywanych.", + "Enable_Password_History_Description": "Po włączeniu tej funkcji uÅŧytkownicy nie będą mogli zmieniać swoich haseł na uÅŧywane wcześniej.", "Enable_Svg_Favicon": "Włącz favicon SVG", "Enable_two-factor_authentication": "Włącz uwierzytelnianie dwuskładnikowe", "Enable_two-factor_authentication_email": "Włącz uwierzytelnienie dwuskładnikowe przez e-mail", @@ -1743,7 +1798,7 @@ "Encrypted_key_title": "Kliknij tutaj, aby wyłączyć szyfrowanie od końca do końca dla tego kanału (wymaga uprawnień e2ee-permission)", "Encrypted_message": "Zaszyfrowana wiadomość", "Encrypted_setting_changed_successfully": "Ustawienia szyfrowania zostały pomyślnie zmienione", - "Encrypted_not_available": "Niedostępne dla Channels publicznych", + "Encrypted_not_available": "Niedostępne dla publicznych {{roomType}}", "Encryption_key_saved_successfully": "TwÃŗj klucz szyfrowania został zapisany pomyślnie.", "EncryptionKey_Change_Disabled": "Nie moÅŧna ustawić hasła dla klucza szyfrowania, poniewaÅŧ klucz prywatny nie jest obecny na tym kliencie. Aby ustawić nowe hasło, musisz załadować swÃŗj klucz prywatny przy uÅŧyciu istniejącego hasła lub uÅŧyć klienta, w ktÃŗrym klucz jest juÅŧ załadowany.", "End": "Koniec", @@ -2205,6 +2260,7 @@ "Global_purge_override_warning": "Obowiązuje globalna polityka przechowywania. Jeśli zostawisz opcję \"Zastąp globalną zasadę przechowywania\", moÅŧesz zastosować tylko politykę bardziej rygorystyczną niÅŧ polityka globalna.", "Global_Search": "Wyszukiwanie globalne", "Go_to_your_workspace": "IdÅē do swojej przestrzeni roboczej", + "Go_to_accessibility_and_appearance": "PrzejdÅē do sekcji Dostępność i wygląd", "Google_Play": "Google Play", "Hold_Call": "Zawieś połączenie", "GoogleCloudStorage": "Google Cloud Storage", @@ -2301,7 +2357,7 @@ "IMAP_intercepter_Not_running": "Intercom protokołu IMAP Nie działa", "Impersonate_next_agent_from_queue": "Podszywaj się pod kolejnego agenta z kolejki", "Impersonate_user": "Podszywać się pod uÅŧytkownika", - "Impersonate_user_description": "Gdy ta opcja jest włączona, wpisy integracji są określane jako uÅŧytkownik, ktÃŗry uruchomił integrację", + "Impersonate_user_description": "Gdy ta opcja jest włączona, wpisy integracji są wyświetlane jako uÅŧytkownik, ktÃŗry uruchomił integrację", "Import": "Import", "Import_New_File": "Importuj nowy plik", "Import_requested_successfully": "Import Requested Successfully", @@ -2369,6 +2425,7 @@ "Incoming_WebHook": "Przychodzący WebHook", "Industry": "Typ działalności", "Info": "Informacje", + "Information_to_keep_top_of_mind": "Informacje, o ktÃŗrych warto pamiętać", "initials_avatar": "Początkowy Avatar", "Install": "Zainstaluj", "Install_Extension": "Zainstaluj rozszerzenie", @@ -2756,6 +2813,7 @@ "Lead_capture_email_regex": "Lead capture email regex", "Lead_capture_phone_regex": "Lead capture phone regex", "Learn_more": "Dowiedz się więcej", + "Learn_more_about_accessibility": "Dowiedz się więcej o naszym zaangaÅŧowaniu w dostępność tutaj:", "Least_recent_updated": "Najstarsza aktualizacja", "Learn_how_to_unlock_the_myriad_possibilities_of_rocket_chat": "Dowiedz się, jak odblokować niezliczone moÅŧliwości Rocket.Chat.", "Leave": "Opuść", @@ -2772,6 +2830,7 @@ "leave-p": "Opuść grupy prywatne", "leave-p_description": "Zezwolenie na opuszczenie grup prywatnych", "Lets_get_you_new_one_": "ZrÃŗbmy ci nową!", + "Let_them_know": "Daj im znać", "License": "Licencja", "Link_Preview": "Podgląd linkÃŗw", "List_of_Channels": "Lista kanałÃŗw", @@ -3322,7 +3381,7 @@ "No_integration_found": "Nie znaleziono integracji za pomocą podanego identyfikatora.", "No_Limit": "Brak limitu", "No_livechats": "Nie masz Åŧadnych livechatÃŗw.", - "No_marketplace_matches_for": "Brak dopasowania Marketplace dla", + "No_marketplace_matches_for": "Brak dopasowania w Marketplace dla", "No_members_found": "Nie znaleziono członkÃŗw", "No_mentions_found": "Nie znaleziono wzmianek", "No_messages_found_to_prune": "Nie znaleziono Åŧadnych wiadomości do usunięcia", @@ -3709,6 +3768,7 @@ "Reactions": "Reakcje", "Read_by": "Przeczytane przez", "Read_only": "Tylko do odczytu", + "Read_only_field_hint_disabled": "KaÅŧdy moÅŧe wysyłać nowe wiadomości", "Read_Receipts": "Potwierdzenia odczytania", "This_room_is_read_only": "Ten pokÃŗj jest tylko do odczytu", "Only_people_with_permission_can_send_messages_here": "Tylko osoby z uprawnieniami mogą wysyłać tutaj wiadomości", @@ -3741,7 +3801,7 @@ "Register_Server_Registered": "Zarejestruj się, aby uzyskać dostęp", "Register_Server_Registered_I_Agree": "Zgadzam się z", "Register_Server_Registered_Livechat": "Livechat omnichannel proxy", - "Register_Server_Registered_Marketplace": "Rynek aplikacji", + "Register_Server_Registered_Marketplace": "Marketplace", "Register_Server_Registered_OAuth": "Proxy OAuth dla sieci społecznościowej", "Register_Server_Registered_Push_Notifications": "Mobilna bramka powiadomień push", "Register_Server_Standalone": "Zachowaj samodzielność, musisz", @@ -3759,7 +3819,7 @@ "Release": "Wydanie", "Releases": "Wydania", "Religious": "Religijny", - "Reload": "Przeładować", + "Reload": "Przeładuj", "Reload_page": "Przeładuj stronę", "Reload_Pages": "Załaduj ponownie strony", "Remove": "Usuń", @@ -3825,6 +3885,7 @@ "Require_all_tokens": "Wymagaj wszystkich tokenÃŗw", "Require_any_token": "Wymagaj dowolnego tokena", "Require_password_change": "NakaÅŧ zmianę hasła", + "Require_Two_Factor_Authentication": "Wymagaj uwierzytelniania dwuskładnikowego", "Resend_verification_email": "Ponownie wyślij e-mail weryfikacyjny", "Reset": "Zresetuj", "Reset_Connection": "Zresetuj połączenie", @@ -3847,6 +3908,9 @@ "RetentionPolicy_Advanced_Precision": "UÅŧywaj zaawansowanej konfiguracji polityki retencji", "RetentionPolicy_Advanced_Precision_Cron": "UÅŧywaj zaawansowanej konfiguracji Cron dla polityki retencji", "RetentionPolicy_Advanced_Precision_Cron_Description": "Jak często powinien działać timer przycinania definowane przez ustawienie cron joba. Ustawienie tej wartości na bardziej precyzyjną powoduje, Åŧe kanały z szybkimi licznikami czasu przechowywania działają lepiej, ale mogą kosztować dodatkową moc obliczeniową w duÅŧych społecznościach.", + "RetentionPolicy_AppliesToChannels": "Dotyczy kanałÃŗw", + "RetentionPolicy_AppliesToDMs": "Dotyczy bezpośrednich wiadomości", + "RetentionPolicy_AppliesToGroups": "Dotyczy grup prywatnych", "RetentionPolicy_Description": "Automatycznie przycina stare wiadomości w instancji Rocket.Chat.", "RetentionPolicy_DoNotPruneDiscussion": "Nie usuwaj wiadomości z dyskusji", "RetentionPolicy_DoNotPrunePinned": "Nie usuwaj przypiętych wiadomości", @@ -3856,6 +3920,10 @@ "RetentionPolicy_FilesOnly": "Usuwaj tylko pliki", "RetentionPolicy_FilesOnly_Description": "Tylko pliki zostaną usunięte, same wiadomości pozostaną na swoim miejscu.", "RetentionPolicy_MaxAge": "Maksymalny wiek wiadomości", + "RetentionPolicy_MaxAge_Channels": "Maksymalny wiek wiadomości w kanałach", + "RetentionPolicy_MaxAge_Description": "Przycinaj wszystkie wiadomości starsze niÅŧ ta wartość, w dniach", + "RetentionPolicy_MaxAge_DMs": "Maksymalny wiek wiadomości w wiadomościach bezpośrednich", + "RetentionPolicy_MaxAge_Groups": "Maksymalny wiek wiadomości w grupach prywatnych", "RetentionPolicy_Precision": "Precyzja zegara", "RetentionPolicy_Precision_Description": "Jak często powinien działać timer przycinania. Ustawienie tej wartości na bardziej precyzyjną powoduje, Åŧe kanały z szybkimi licznikami czasu przechowywania działają lepiej, ale mogą kosztować dodatkową moc obliczeniową w duÅŧych społecznościach.", "RetentionPolicyRoom_Enabled": "Automatycznie usuwaj stare wiadomości", @@ -4072,7 +4140,7 @@ "Search_Provider": "Dostawca wyszukiwania", "Search_Rooms": "Szukaj pokoi", "Search_Users": "Wyszukaj uÅŧytkownikÃŗw", - "Seats_Available": "{{seatsLeft}} Dostępne miejsca", + "Seats_Available": "{{seatsLeft, number}} Dostępne miejsca", "Seats_usage": "Wykorzystanie miejsc", "seconds": "sekund", "Secret_token": "Sekret", @@ -4208,8 +4276,9 @@ "Show_Setup_Wizard": "PokaÅŧ Kreatora instalacji", "Show_the_keyboard_shortcut_list": "PokaÅŧ listę skrÃŗtÃŗw klawiaturowych", "Show_video": "PokaÅŧ wideo", - "Showing": "Pokazywanie", - "Showing_archived_results": "

    Pokazuje %s zarchiwizowanych wynikÃŗw

    ", + "Showing": "Wyświetlanie", + "Showing_archived_results": "

    Wyświetla %s zarchiwizowanych wynikÃŗw

    ", + "Showing_current_of_total": "Wyświetlanie {{current}} z {{total}}", "Showing_online_users": "Pokazywanie: {{total_showing}}, Online: {{online}}, OgÃŗłem: {{total}} users", "Showing_results": "

    Wyświetlono %s wynikÃŗw

    ", "Showing_results_of": "Wyświetlanie wynikÃŗw %s - %s z %s", @@ -4438,14 +4507,14 @@ "Teams_left_team_successfully": "Pomyślnie opuścił zespÃŗł", "Teams_members": "Członkowie zespołÃŗw", "Teams_New_Add_members_Label": "Dodaj członkÃŗw", - "Teams_New_Broadcast_Description": "Tylko autoryzowani uÅŧytkownicy mogą pisać nowe wiadomości, ale pozostali uÅŧytkownicy będą mogli odpowiadać", + "Teams_New_Broadcast_Description": "Tylko właściciele zespołÃŗw mogą pisać nowe wiadomości, ale wszyscy uÅŧytkownicy będą mogli odpowiadać", "Teams_New_Broadcast_Label": "Broadcast", "Teams_New_Description_Label": "Temat", "Teams_New_Description_Placeholder": "Co to jest za zespÃŗł", "Teams_New_Encrypted_Description_Disabled": "Dostępne tylko dla zespołÃŗw prywatnych", "Teams_New_Encrypted_Description_Enabled": "ZespÃŗł zaszyfrowany E2E. Wyszukiwanie nie będzie działać w zaszyfrowanych zespołach, a powiadomienia mogą nie pokazywać treści wiadomości.", "Teams_New_Encrypted_Label": "Szyfrowane", - "Teams_New_Private_Description_Disabled": "Po wyłączeniu, kaÅŧdy moÅŧe dołączyć do zespołu", + "Teams_New_Private_Description_Disabled": "KaÅŧdy moÅŧe uzyskać dostęp", "Teams_New_Private_Description_Enabled": "Tylko zaproszone osoby mogą dołączyć", "Teams_New_Private_Label": "Prywatny", "Teams_New_Read_only_Description": "Wszyscy uÅŧytkownicy w tym zespole mogą pisać wiadomości", @@ -4490,6 +4559,7 @@ "The_user_will_be_removed_from_s": "UÅŧytkownik zostanie usunięty z %s", "The_user_wont_be_able_to_type_in_s": "UÅŧytkownik nie będzie mÃŗgł wpisać w %s", "Theme": "Motyw", + "Choose_theme_description": "Wybierz wygląd interfejsu, ktÃŗry najlepiej odpowiada Twoim potrzebom.", "theme-color-attention-color": "Kolor uwagi", "theme-color-component-color": "Kolor komponentu", "theme-color-content-background-color": "Kolor tła zawartości", @@ -4565,6 +4635,7 @@ "This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password": "Ten e-mail został juÅŧ uÅŧyty i nie został zweryfikowany. Proszę zmienić swoje hasło.", "This_feature_is_currently_in_alpha": "Ta funkcja jest obecnie w fazie alfa!", "This_is_a_desktop_notification": "To jest powiadomienie na pulpicie", + "Install_Zapier_from_marketplace": "Zainstaluj aplikację Zapier z Marketplace, aby uniknąć zakłÃŗceń", "This_is_a_push_test_messsage": "To jest testowy push message", "This_message_was_rejected_by__peer__peer": "Ta wiadomość została odrzucona przez {{peer}}.", "This_monitor_was_already_selected": "Ten monitor został juÅŧ wybrany", @@ -4664,7 +4735,7 @@ "Turn_ON": "Włączyć", "Turn_on_video": "Włącz wideo", "Turn_off_video": "Wyłącz wideo", - "Two Factor Authentication": "Uwierzytelnianie dwuetapowe", + "Two Factor Authentication": "Uwierzytelnianie dwuskładnikowe", "Two-factor_authentication": "Uwierzytelnianie dwuskładnikowe", "Two-factor_authentication_via_TOTP": "Uwierzytelnianie dwuskładnikowe", "Two-factor_authentication_disabled": "Wyłączono uwierzytelnianie dwuskładnikowe", @@ -4726,7 +4797,7 @@ "Unread_on_top": "Nieprzeczytane na gÃŗrze", "Unread_Rooms": "Nieprzeczytane pokoje", "Unread_Rooms_Mode": "Tryb nieprzeczytanych pokoi", - "Unread_Tray_Icon_Alert": "Powiadomienie o nieprzeczytanych wiadomościach w Tray", + "Unread_Tray_Icon_Alert": "Powiadomienie o nieprzeczytanych wiadomościach w Ikonce zasobnika", "Unstar_Message": "Usuń oznaczenie", "Unmute_microphone": "Włącz mikrofon", "Update": "Aktualizacja", @@ -4871,7 +4942,7 @@ "Username_title": "UtwÃŗrz nazwę uÅŧytkownika", "Username_wants_to_start_otr_Do_you_want_to_accept": "{{username}} chce rozpocząć OTR. Czy chcesz zaakceptować?", "Users": "UÅŧytkownicy", - "Users must use Two Factor Authentication": "UÅŧytkownicy muszą korzystać z uwierzytelniania dwuetapowego", + "Users must use Two Factor Authentication": "UÅŧytkownicy muszą korzystać z uwierzytelniania dwuskładnikowego", "Users_added": "UÅŧytkownicy zostali dodani", "Users_and_rooms": "UÅŧytkownicy i Rooms", "Users_by_time_of_day": "UÅŧytkownicy według pory dnia", @@ -5181,6 +5252,9 @@ "You_have_not_verified_your_email": "Nie zweryfikowałeś e-maila.", "You_have_successfully_unsubscribed": "TwÃŗj email został usunięty z naszej listy powiadomień.", "You_must_join_to_view_messages_in_this_channel": "Musisz dołączyć aby widzieć wiadomości w tym kanale", + "You_mentioned___mentions__but_theyre_not_in_this_room": "Wspomniałeś o {{mentions}}, ale nie ma go/ich w tym pokoju.", + "You_mentioned___mentions__but_theyre_not_in_this_room_You_can_ask_a_room_admin_to_add_them": "Wspomniałeś o {{mentions}}, ale nie ma go/ich w tym pokoju. MoÅŧesz poprosić administratora pokoju o dodanie.", + "You_mentioned___mentions__but_theyre_not_in_this_room_You_let_them_know_via_dm": "Wspomniałeś o {{mentions}}, ale nie ma go/ich w tym pokoju. Poinformuj ich o tym za pośrednictwem bezpośredniej wiadomości.", "You_need_confirm_email": "Aby się zalogować musisz potwierdzić swÃŗj adres e-mail!", "You_need_install_an_extension_to_allow_screen_sharing": "Musisz zainstalować rozszerzenie, aby umoÅŧliwić dzielenie ekranu", "You_need_to_change_your_password": "Musisz zmienić swoje hasło", @@ -5218,6 +5292,7 @@ "Your_TOTP_has_been_reset": "Twoje dwuskładnikowe TOTP zostało zresetowane", "Your_web_browser_blocked_Rocket_Chat_from_opening_tab": "Twoja przeglądarka internetowa zablokowała Rocket.Chat przed otwarciem nowej karty.", "Your_workspace_is_ready": "TwÃŗj obszar roboczy jest gotowy do uÅŧycia 🎉", + "Youre_not_a_part_of__channel__and_I_mentioned_you_there": "Nie jesteś członkiem {{channel}}, a wspomniałem tam o Tobie", "Zapier": "Zapier", "registration.page.login.errors.wrongCredentials": "Nie znaleziono uÅŧytkownika lub nieprawidłowe hasło", "registration.page.login.errors.loginBlockedForIp": "Logowanie zostało tymczasowo zablokowane dla tego IP", @@ -5322,9 +5397,15 @@ "onboarding.form.standaloneServerForm.servicesUnavailable": "NiektÃŗre z usług będą niedostępne lub będą wymagały ręcznej konfiguracji", "onboarding.form.standaloneServerForm.publishOwnApp": "W celu wysyłania powiadomień push naleÅŧy skompilować i opublikować własną aplikację w Google Play i App Store", "onboarding.form.standaloneServerForm.manuallyIntegrate": "Konieczność ręcznej integracji z usługami zewnętrznymi", + "subscription.callout.marketplaceApps": "zainstalowane aplikacje marketplace", "Something_Went_Wrong": "Coś poszło nie tak", + "Theme_match_system_description": "Automatyczne dopasowanie wyglądu systemu.", + "Theme_high_contrast_description": "Maksymalne zrÃŗÅŧnicowanie tonalne z pogrubiony kolorami i ostrymi kontrastami zapewnia lepszą dostępność.", "Join_your_team": "Dołącz do swojego zespołu", "Create_an_account": "UtwÃŗrz konto", + "Workspaces_on_community_edition_trial_on": "Przestrzenie robocze w Społeczności mogą mieć włączonych maksymalnie 5 aplikacji Marketplace i 3 aplikacje prywatne. Rozpocznij bezpłatny okres prÃŗbny Premium, aby usunąć te ograniczenia juÅŧ dziś!", + "Workspaces_on_community_edition_trial_off": "Przestrzenie robocze w Community mogą mieć włączonych do 5 aplikacji marketplace i 3 aplikacje prywatne. Uaktualnij do wersji Premium, aby usunąć ograniczenia i wzmocnić swoją przestrzeń roboczą.", + "Private_apps_are_side-loaded": "Aplikacje prywatne są ładowane z boku i nie są dostępne w Marketplace.", "Service_status": "Stan usługi", "User_Status": "Status uÅŧytkownika", "Active_connections": "Aktywne połączenia", @@ -5334,11 +5415,20 @@ "Awaiting_confirmation": "Oczekuje na potwierdzenie", "RegisterWorkspace_Features_MobileNotifications_Title": "Powiadomienia mobilne push", "RegisterWorkspace_Features_Marketplace_Title": "Marketplace", + "RegisterWorkspace_Features_Marketplace_Description": "Zainstaluj aplikacje Rocket.Chat Marketplace na tym obszarze roboczym.", "RegisterWorkspace_Features_Omnichannel_Title": "Omnichannel", "RegisterWorkspace_Setup_Label": "E-mail konta w chmurze", "RegisterWorkspace_Syncing_Complete": "Synchronizacja zakończona", "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Zgadzam się z <1>zasadami i warunkami i <3>Polityką prywatności.", "Enterprise": "Enterprise", + "Marketplace_apps": "Aplikacje Marketplace", + "UpgradeToGetMore_accessibility-certification_Body": "Zgodność ze standardami WCAG i BITV dzięki programowi dostępności Rocket.Chat.", "UpgradeToGetMore_engagement-dashboard_Title": "Analityka", - "UpgradeToGetMore_auditing_Title": "Audyt wiadomości" -} + "UpgradeToGetMore_auditing_Title": "Audyt wiadomości", + "Apps_InfoText": "Wersja Community umoÅŧliwia włączenie do 3 aplikacji prywatnych i 5 aplikacji marketplace", + "Anyone_can_react_to_messages": "KaÅŧdy moÅŧe reagować na wiadomości", + "Anyone_can_access": "KaÅŧdy moÅŧe uzyskać dostęp", + "Broadcast_hint_enabled": "Tylko właściciele {{roomType}} mogą pisać nowe wiadomości, ale kaÅŧdy moÅŧe odpowiadać w wątku", + "Anyone_can_send_new_messages": "KaÅŧdy moÅŧe wysyłać nowe wiadomości", + "Select_messages_to_hide": "Wybierz wiadomości do ukrycia" +} \ No newline at end of file diff --git a/packages/i18n/src/locales/pt-BR.i18n.json b/packages/i18n/src/locales/pt-BR.i18n.json index 282feecbc42c..67c8f46888ad 100644 --- a/packages/i18n/src/locales/pt-BR.i18n.json +++ b/packages/i18n/src/locales/pt-BR.i18n.json @@ -253,6 +253,7 @@ "Accounts_ShowFormLogin": "Mostrar formulÃĄrio de login padrÃŖo", "Accounts_TwoFactorAuthentication_By_TOTP_Enabled": "Ativar autenticaçÃŖo de dois fatores por TOTP", "Accounts_TwoFactorAuthentication_By_TOTP_Enabled_Description": "Os usuÃĄrios podem configurar sua AutenticaçÃŖo de dois fatores usando qualquer aplicativo de TOTP, como o Google Authenticator ou o Authy.", + "Calls_in_queue_many": "{{count}} chamadas na fila", "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In": "Ativar automaticamente a autenticaçÃŖo de duas etapas via e-mail para novos usuÃĄrios", "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In_Description": "Novos usuÃĄrios terÃŖo a autenticaçÃŖo de duas etapas via e-mail ativada por padrÃŖo. Eles poderÃŖo desabilitÃĄ-la em sua pÃĄgina de perfil.", "Accounts_TwoFactorAuthentication_By_Email_Code_Expiration": "Tempo para expirar o cÃŗdigo enviado por e-mail (em segundos)", @@ -301,7 +302,6 @@ "add-oauth-service": "Adicionar Serviço OAuth", "add-oauth-service_description": "PermissÃŖo para adicionar um novo serviço OAuth", "add-team-channel": "Adicionar Time ao Canal", - "Calls_in_queue_many": "{{count}} chamadas na fila", "add-team-channel_description": "PermissÃŖo para adicionar um canal a um time", "add-team-member": "Adicionar membro ao Team", "add-team-member_description": "PermissÃŖo para adicionar membros ao time", @@ -791,6 +791,7 @@ "CAS_enabled": "Habilitado", "CAS_Login_Layout": "Layout de login CAS", "CAS_login_url": "URL de login SSO", + "message_counter_many": "{{count}} mensagens", "CAS_login_url_Description": "O URL de login de seu serviço SSO externo (exemplo: https://sso.exemplo.indef/sso/login)", "CAS_popup_height": "Altura do pop-up de login", "CAS_popup_width": "Largura do pop-up de login", @@ -806,6 +807,7 @@ "Categories*": "Categorias*", "CDN_JSCSS_PREFIX": "Prefixo CDN para JS/CSS", "CDN_PREFIX": "Prefixo CDN", + "meteor_status_reconnect_in_many": "tentando novamente em {{count}} segundos...", "CDN_PREFIX_ALL": "Use o prefixo da CDN para todos os recursos", "Certificates_and_Keys": "Certificados e chaves", "change-livechat-room-visitor": "Alterar visitantes da Sala Livechat", @@ -984,7 +986,6 @@ "Contact_not_found": "Contato nÃŖo encontrado", "Contact_Profile": "Perfil do contato", "Contact_Info": "InformaçÃĩes do contato", - "message_counter_many": "{{count}} mensagens", "Content": "ConteÃēdo", "Continue": "Continuar", "Continuous_sound_notifications_for_new_livechat_room": "NotificaçÃĩes sonoras contínuas para nova sala de omnichannel", @@ -1000,7 +1001,6 @@ "Conversations": "Conversas", "Conversations_per_day": "Conversas por dia", "Convert": "Converter", - "meteor_status_reconnect_in_many": "tentando novamente em {{count}} segundos...", "Convert_Ascii_Emojis": "Converter ASCII em emoji", "Convert_to_channel": "Converter em canal", "Converting_channel_to_a_team": "VocÃĒ estÃĄ convertendo este canal em uma equipe. Todos os membros serÃŖo mantidos.", @@ -1632,7 +1632,7 @@ "Enable_CSP": "Habilitar política de segurança de conteÃēdo", "Enable_CSP_Description": "NÃŖo desative esta opçÃŖo a nÃŖo ser que vocÃĒ tenha uma versÃŖo personalizada e esteja tendo problemas devido a scrips inline", "Enable_Desktop_Notifications": "Habilitar notificaçÃĩes da ÃĄrea de trabalho", - "Enable_encryption" : "Ativar criptografia", + "Enable_encryption": "Ativar criptografia", "Enable_inquiry_fetch_by_stream": "Habilitar carga de dados de novas pesquisas de omnichannel utilizando stream", "Enable_omnichannel_auto_close_abandoned_rooms": "Habilitar o fechamento automÃĄtico de salas abandonadas pelo visitante", "Enable_Password_History": "Habilitar histÃŗrico de senha", @@ -3629,6 +3629,9 @@ "RetentionPolicy_Advanced_Precision": "Usar configuraçÃŖo de política de retençÃŖo avançada", "RetentionPolicy_Advanced_Precision_Cron": "Usar cron de política de retençÃŖo avançada", "RetentionPolicy_Advanced_Precision_Cron_Description": "Com que frequÃĒncia o timer de remoçÃŖo deve ser executado definido pela expressÃŖo de jobs do cron. Definir para um valor mais preciso faz com que canais com timers de retençÃŖo rÃĄpida funcionem melhor, mas pode ter custo extra de processamento em comunidades grandes.", + "RetentionPolicy_AppliesToChannels": "Aplica-se a canais", + "RetentionPolicy_AppliesToDMs": "Aplica-se a mensagens diretas", + "RetentionPolicy_AppliesToGroups": "Aplica-se a grupos privados", "RetentionPolicy_Description": "Remove automaticamente as mensagens antigas da sua instÃĸncia do Rocket.Chat.", "RetentionPolicy_DoNotPruneDiscussion": "NÃŖo remover mensagens de discussÃŖo", "RetentionPolicy_DoNotPrunePinned": "NÃŖo remover mensagens fixadas", @@ -3638,6 +3641,10 @@ "RetentionPolicy_FilesOnly": "Apenas excluir arquivos", "RetentionPolicy_FilesOnly_Description": "Apenas arquivos serÃŖo excluídos, as mensagens permanecerÃŖo.", "RetentionPolicy_MaxAge": "A idade mÃĄxima da mensagem", + "RetentionPolicy_MaxAge_Channels": "A idade mÃĄxima da mensagem nos canais", + "RetentionPolicy_MaxAge_Description": "Remover todas as mensagens mais antigas que esse valor, em dias", + "RetentionPolicy_MaxAge_DMs": "DuraçÃŖo mÃĄxima da mensagem em mensagens diretas", + "RetentionPolicy_MaxAge_Groups": "DuraçÃŖo mÃĄxima da mensagem em grupos privados", "RetentionPolicy_Precision": "PrecisÃŖo do temporizador", "RetentionPolicy_Precision_Description": "Quantas vezes o temporizador de remoçÃŖo deve ser executado. Configurar um valor mais preciso faz com que os canais com temporizadores de retençÃŖo rÃĄpidos funcionem melhor, mas podem usar mais potÃĒncia de processamento em grandes comunidades.", "RetentionPolicyRoom_Enabled": "Remover automaticamente mensagens antigas", @@ -5007,4 +5014,4 @@ "Enterprise": "Enterprise", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics", "UpgradeToGetMore_auditing_Title": "Auditoria de mensagem" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/pt.i18n.json b/packages/i18n/src/locales/pt.i18n.json index 74cf2a3f9b08..8f4acc81dbdd 100644 --- a/packages/i18n/src/locales/pt.i18n.json +++ b/packages/i18n/src/locales/pt.i18n.json @@ -2396,12 +2396,19 @@ "Retail": "Retalho", "Retention_setting_changed_successfully": "A configuraçÃŖo da política de retençÃŖo foi alterada com sucesso", "RetentionPolicy": "Política de retençÃŖo", + "RetentionPolicy_AppliesToChannels": "Aplica-se a canais", + "RetentionPolicy_AppliesToDMs": "Aplica-se a direccionar mensagens", + "RetentionPolicy_AppliesToGroups": "Aplica-se a grupos privados", "RetentionPolicy_Description": "Remove automaticamente as mensagens antigas da sua instÃĸncia do Rocket.Chat.", "RetentionPolicy_Enabled": "Habilitado", "RetentionPolicy_ExcludePinned": "Excluir mensagens fixas", "RetentionPolicy_FilesOnly": "Apenas apagar arquivos", "RetentionPolicy_FilesOnly_Description": "Apenas arquivos serÃŖo excluídos, as mensagens permanecerÃŖo no lugar.", "RetentionPolicy_MaxAge": "A idade mÃĄxima da mensagem", + "RetentionPolicy_MaxAge_Channels": "A idade mÃĄxima da mensagem nos canais", + "RetentionPolicy_MaxAge_Description": "Remover todas as mensagens mais antigas que esse valor, em dias", + "RetentionPolicy_MaxAge_DMs": "DuraçÃŖo mÃĄxima da mensagem em mensagens directas", + "RetentionPolicy_MaxAge_Groups": "DuraçÃŖo mÃĄxima da mensagem em grupos privados", "RetentionPolicy_Precision": "PrecisÃŖo do temporizador", "RetentionPolicy_Precision_Description": "Quantas vezes o temporizador de remoçÃŖo deve ser executado. Configurar isso para um valor mais preciso faz com que os canais com temporizadores de retençÃŖo rÃĄpidos funcionem melhor, mas podem custar um poder de processamento extra em grandes comunidades.", "RetentionPolicyRoom_Enabled": "Remover automaticamente mensagens antigas", @@ -3176,4 +3183,4 @@ "registration.component.form.sendConfirmationEmail": "Enviar email de confirmaçÃŖo", "Enterprise": "Empreendimento", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/ro.i18n.json b/packages/i18n/src/locales/ro.i18n.json index afade0413dd1..aefc4d07065f 100644 --- a/packages/i18n/src/locales/ro.i18n.json +++ b/packages/i18n/src/locales/ro.i18n.json @@ -2059,12 +2059,19 @@ "Retail": "Cu amănuntul", "Retention_setting_changed_successfully": "Politica de păstrare a fost modificată cu succes", "RetentionPolicy": "Politica de păstrare", + "RetentionPolicy_AppliesToChannels": "Se aplică la canale", + "RetentionPolicy_AppliesToDMs": "Se aplică pentru mesaje directe", + "RetentionPolicy_AppliesToGroups": "Se aplică grupurilor private", "RetentionPolicy_Description": "Șterge automat vechile mesaje de-a lungul instanței Rocket.Chat.", "RetentionPolicy_Enabled": "Activat", "RetentionPolicy_ExcludePinned": "Excludeți mesajele fixate", "RetentionPolicy_FilesOnly": "Ștergeți numai fișierele", "RetentionPolicy_FilesOnly_Description": "Numai fișierele vor fi șterse, mesajele ÃŽn sine rămÃĸn ÃŽn vigoare.", "RetentionPolicy_MaxAge": "VÃĸrsta maximă a mesajului", + "RetentionPolicy_MaxAge_Channels": "VÃĸrsta maximă a mesajului ÃŽn canale", + "RetentionPolicy_MaxAge_Description": "Prelucrați toate mesajele mai vechi decÃĸt această valoare, ÃŽn zile", + "RetentionPolicy_MaxAge_DMs": "VÃĸrsta maximă a mesajului ÃŽn mesajele directe", + "RetentionPolicy_MaxAge_Groups": "VÃĸrsta maximă a mesajului ÃŽn grupuri private", "RetentionPolicy_Precision": "Timp de precizie", "RetentionPolicy_Precision_Description": "CÃĸt de des ar trebui să ruleze cronometrul pentru prune. Setarea acestei valori la o valoare mai precisă face ca canalele cu cronometre rapide să funcționeze mai bine, dar ar putea costa putere suplimentară de procesare pentru comunitățile mari.", "RetentionPolicyRoom_Enabled": "Trasați automat mesajele vechi", @@ -2752,4 +2759,4 @@ "registration.component.form.sendConfirmationEmail": "Trimite email de confirmare", "Enterprise": "Afacere", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/ru.i18n.json b/packages/i18n/src/locales/ru.i18n.json index 6f7b69447e29..1829f7f2eb08 100644 --- a/packages/i18n/src/locales/ru.i18n.json +++ b/packages/i18n/src/locales/ru.i18n.json @@ -206,9 +206,11 @@ "Accounts_OAuth_Wordpress_token_path": "Token Path", "Accounts_Password_Policy_AtLeastOneLowercase": "ĐĨĐžŅ‚Ņ ĐąŅ‹ ОдĐŊŅƒ ĐąŅƒĐēвŅƒ в ĐŊиĐļĐŊĐĩĐŧ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đĩ", "Accounts_Password_Policy_AtLeastOneLowercase_Description": "ĐŖĐąĐĩдиŅ‚ĐĩŅŅŒ, Ņ‡Ņ‚Đž ĐŋĐ°Ņ€ĐžĐģŅŒ ŅĐžĐ´ĐĩŅ€ĐļиŅ‚ Ņ…ĐžŅ‚Ņ ĐąŅ‹ ОдĐŊŅƒ ĐąŅƒĐēвŅƒ в ĐŊиĐļĐŊĐĩĐŧ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đĩ.", + "Apps_Count_Enabled_many": "{{count}} ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиК(-Ņ) вĐēĐģŅŽŅ‡ĐĩĐŊĐž", "Accounts_Password_Policy_AtLeastOneNumber": "ĐĨĐžŅ‚Ņ ĐąŅ‹ ОдĐŊŅƒ Ņ†Đ¸Ņ„Ņ€Ņƒ", "Accounts_Password_Policy_AtLeastOneNumber_Description": "ĐŖĐąĐĩдиŅ‚ĐĩŅŅŒ, Ņ‡Ņ‚Đž ĐŋĐ°Ņ€ĐžĐģŅŒ ŅĐžĐ´ĐĩŅ€ĐļиŅ‚ Ņ…ĐžŅ‚Ņ ĐąŅ‹ ОдиĐŊ Ņ†Đ¸Ņ„Ņ€ĐžĐ˛ĐžĐš ŅĐ¸ĐŧвОĐģ.", "Accounts_Password_Policy_AtLeastOneSpecialCharacter": "ĐĨĐžŅ‚Ņ ĐąŅ‹ ОдиĐŊ ŅĐŋĐĩŅ†Đ¸Đ°ĐģŅŒĐŊŅ‹Đš ŅĐ¸ĐŧвОĐģ", + "Private_Apps_Count_Enabled_many": "{{count}} ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊŅ‹Ņ… ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиК вĐēĐģŅŽŅ‡ĐĩĐŊĐž", "Accounts_Password_Policy_AtLeastOneSpecialCharacter_Description": "ĐŖĐąĐĩдиŅ‚ĐĩŅŅŒ, Ņ‡Ņ‚Đž ĐŋĐ°Ņ€ĐžĐģŅŒ ŅĐžĐ´ĐĩŅ€ĐļиŅ‚ Ņ…ĐžŅ‚Ņ ĐąŅ‹ ОдиĐŊ ŅĐŋĐĩŅ†Đ¸Đ°ĐģŅŒĐŊŅ‹Đš ŅĐ¸ĐŧвОĐģ.", "Accounts_Password_Policy_AtLeastOneUppercase": "ĐĨĐžŅ‚Ņ ĐąŅ‹ ОдĐŊŅƒ ĐąŅƒĐēвŅƒ в вĐĩŅ€Ņ…ĐŊĐĩĐŧ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đĩ", "Accounts_Password_Policy_AtLeastOneUppercase_Description": "ĐŖĐąĐĩдиŅ‚ĐĩŅŅŒ, Ņ‡Ņ‚Đž ĐŋĐ°Ņ€ĐžĐģŅŒ ŅĐžĐ´ĐĩŅ€ĐļиŅ‚ Ņ…ĐžŅ‚Ņ ĐąŅ‹ ОдĐŊŅƒ ĐąŅƒĐēвŅƒ в вĐĩŅ€Ņ…ĐŊĐĩĐŧ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đĩ.", @@ -239,10 +241,8 @@ "Accounts_RegistrationForm_Secret_URL": "ĐĄĐĩĐēŅ€ĐĩŅ‚ĐŊŅ‹Đš URL-Đ°Đ´Ņ€ĐĩŅ", "Accounts_RegistrationForm_SecretURL": "ĐĄĐĩĐēŅ€ĐĩŅ‚ĐŊŅ‹Đš URL-Đ°Đ´Ņ€ĐĩŅ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸ĐžĐŊĐŊОК Ņ„ĐžŅ€ĐŧŅ‹", "Accounts_RegistrationForm_SecretURL_Description": "ВŅ‹ Đ´ĐžĐģĐļĐŊŅ‹ ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авиŅ‚ŅŒ ŅĐģŅƒŅ‡Đ°ĐšĐŊŅƒŅŽ ŅŅ‚Ņ€ĐžĐēŅƒ, ĐēĐžŅ‚ĐžŅ€Đ°Ņ ĐąŅƒĐ´ĐĩŅ‚ дОйавĐģĐĩĐŊĐ° Đē ваŅˆĐĩĐŧŅƒ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸ĐžĐŊĐŊĐžĐŧŅƒ URL-Đ°Đ´Ņ€ĐĩŅŅƒ. НаĐŋŅ€Đ¸ĐŧĐĩŅ€: `https://open.rocket.chat/register/[secret_hash]`", - "Apps_Count_Enabled_many": "{{count}} ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиК(-Ņ) вĐēĐģŅŽŅ‡ĐĩĐŊĐž", "Accounts_RequireNameForSignUp": "ĐĸŅ€ĐĩĐąŅƒĐĩŅ‚ŅŅ иĐŧŅ Đ´ĐģŅ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Đ¸", "Accounts_RequirePasswordConfirmation": "ЗаĐŋŅ€Đ°ŅˆĐ¸Đ˛Đ°Ņ‚ŅŒ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ ĐŋĐ°Ņ€ĐžĐģŅ", - "Private_Apps_Count_Enabled_many": "{{count}} ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊŅ‹Ņ… ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиК вĐēĐģŅŽŅ‡ĐĩĐŊĐž", "Accounts_RoomAvatarExternalProviderUrl": "URL вĐŊĐĩŅˆĐŊĐĩĐŗĐž ĐŋĐžŅŅ‚авŅ‰Đ¸ĐēĐ° аваŅ‚Đ°Ņ€ĐžĐ˛", "Accounts_RoomAvatarExternalProviderUrl_Description": "ПŅ€Đ¸ĐŧĐĩŅ€: `https://acme.com/api/v1/{roomId}`", "Accounts_SearchFields": "ПоĐģŅ, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ŅĐģĐĩĐ´ŅƒĐĩŅ‚ ŅƒŅ‡Đ¸Ņ‚Ņ‹Đ˛Đ°Ņ‚ŅŒ ĐŋŅ€Đ¸ ĐŋОиŅĐēĐĩ", @@ -255,6 +255,7 @@ "Accounts_ShowFormLogin": "ПоĐēаСаŅ‚ŅŒ ĐģĐžĐŗиĐŊ ĐŊĐ° ĐžŅĐŊОвĐĩ Ņ„ĐžŅ€ĐŧŅ‹", "Accounts_TwoFactorAuthentication_By_TOTP_Enabled": "ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ двŅƒŅ…Ņ„Đ°ĐēŅ‚ĐžŅ€ĐŊŅƒŅŽ Đ°ŅƒŅ‚ĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸ŅŽ Ņ‡ĐĩŅ€ĐĩС TOTP", "Accounts_TwoFactorAuthentication_By_TOTP_Enabled_Description": "ПоĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģи ĐŧĐžĐŗŅƒŅ‚ ĐŊĐ°ŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ двŅƒŅ…Ņ„Đ°ĐēŅ‚ĐžŅ€ĐŊŅƒŅŽ Đ°ŅƒŅ‚ĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸ŅŽ Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ ĐģŅŽĐąĐžĐŗĐž ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ TOTP, ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€, Google Authenticator иĐģи Authy.", + "Calls_in_queue_many": "{{count}} ЗвоĐŊĐēОв в ĐžŅ‡ĐĩŅ€Đĩди", "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In": "АвŅ‚ĐžĐŧĐ°Ņ‚иŅ‡ĐĩŅĐēиК ĐŊĐ°ŅŅ‚Ņ€Đ°Đ¸Đ˛Đ°Ņ‚ŅŒ двŅƒŅ…Ņ„Đ°ĐēŅ‚ĐžŅ€ĐŊŅƒŅŽ Đ°ŅƒŅ‚ĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸ŅŽ ĐŋĐž ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Đĩ Đ´ĐģŅ ĐŊОвŅ‹Ņ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš", "Accounts_TwoFactorAuthentication_By_Email_Auto_Opt_In_Description": "ĐŖ ĐŊОвŅ‹Ņ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš ĐŋĐž ŅƒĐŧĐžĐģŅ‡Đ°ĐŊиŅŽ ĐąŅƒĐ´ĐĩŅ‚ вĐēĐģŅŽŅ‡ĐĩĐŊĐ° двŅƒŅ…Ņ„Đ°ĐēŅ‚ĐžŅ€ĐŊĐ°Ņ Đ°ŅƒŅ‚ĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Ņ ĐŋĐž ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Đĩ. ОĐŊи ŅĐŧĐžĐŗŅƒŅ‚ ĐžŅ‚ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ĐĩĐĩ ĐŊĐ° ŅŅ‚Ņ€Đ°ĐŊиŅ†Đĩ ŅĐ˛ĐžĐĩĐŗĐž ĐŋŅ€ĐžŅ„иĐģŅ.", "Accounts_TwoFactorAuthentication_By_Email_Code_Expiration": "ВŅ€ĐĩĐŧŅ Đ´Đž иŅŅ‚ĐĩŅ‡ĐĩĐŊиŅ ŅŅ€ĐžĐēĐ° Đ´ĐĩĐšŅŅ‚виŅ ĐēОда, ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐŊĐžĐŗĐž ĐŋĐž ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Đĩ, в ŅĐĩĐēŅƒĐŊĐ´Đ°Ņ…", @@ -273,6 +274,7 @@ "API_EmbedDisabledFor": "ОŅ‚ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ вŅŅ‚авĐēŅƒ Đ´ĐģŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš", "Accounts_UserAddedEmail_Default": "

    ДобŅ€Đž ĐŋĐžĐļĐ°ĐģОваŅ‚ŅŒ в [Site_Name]

    ПоŅĐĩŅ‚иŅ‚Đĩ [Site_URL] и ĐŋĐžĐŋŅ€ĐžĐąŅƒĐšŅ‚Đĩ ĐģŅƒŅ‡ŅˆĐĩĐĩ Ņ€ĐĩŅˆĐĩĐŊиĐĩ Đ´ĐģŅ Ņ‡Đ°Ņ‚Ов Ņ ĐžŅ‚ĐēŅ€Ņ‹Ņ‚Ņ‹Đŧ иŅŅ…ОдĐŊŅ‹Đŧ ĐēОдОĐŧ ĐŊĐ° ŅĐĩĐŗОдĐŊŅŅˆĐŊиК Đ´ĐĩĐŊŅŒ!

    ВŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ вОКŅ‚и в ŅĐ¸ŅŅ‚ĐĩĐŧŅƒ, иŅĐŋĐžĐģŅŒĐˇŅƒŅ Đ°Đ´Ņ€ĐĩŅ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹: [email] и ĐŋĐ°Ņ€ĐžĐģŅŒ: [password]. ВозĐŧĐžĐļĐŊĐž, ваĐŧ ĐŋĐžŅ‚Ņ€ĐĩĐąŅƒĐĩŅ‚ŅŅ ŅĐŧĐĩĐŊиŅ‚ŅŒ ĐĩĐŗĐž ĐŋĐžŅĐģĐĩ ĐŋĐĩŅ€Đ˛ĐžĐŗĐž вŅ…Ода в ŅĐ¸ŅŅ‚ĐĩĐŧŅƒ.", "Accounts_UserAddedEmail_Description": "ВŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ŅĐģĐĩĐ´ŅƒŅŽŅ‰Đ¸Đĩ ОйОСĐŊĐ°Ņ‡ĐĩĐŊиŅ: \n - `[name]`, `[fname]`, `[lname]` Đ´ĐģŅ ĐŋĐžĐģĐŊĐžĐŗĐž иĐŧĐĩĐŊи ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ, Ņ‚ĐžĐģŅŒĐēĐž иĐŧĐĩĐŊи иĐģи Ņ‚ĐžĐģŅŒĐēĐž Ņ„Đ°ĐŧиĐģии ŅĐžĐžŅ‚вĐĩŅ‚ŅŅ‚вĐĩĐŊĐŊĐž). \n - [email] - Đ´ĐģŅ email Đ°Đ´Ņ€ĐĩŅĐ° ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ. \n - [password] - Đ´ĐģŅ ĐŋĐ°Ņ€ĐžĐģŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ. \n - `[Site_Name]` и `[Site_URL]` - ĐŊаСваĐŊиĐĩ ваŅˆĐĩĐŗĐž ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ и ĐĩĐŗĐž URL. ", + "Calls_in_queue_few": "{{count}} ЗвоĐŊĐēОв в ĐžŅ‡ĐĩŅ€Đĩди", "API_EmbedDisabledFor_Description": "ĐĄĐŋиŅĐžĐē ĐģĐžĐŗиĐŊОв, Ņ€Đ°ĐˇĐ´ĐĩĐģĐĩĐŊĐŊŅ‹Ņ… СаĐŋŅŅ‚Ņ‹Đŧи, Đ´ĐģŅ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊиŅ ĐŋŅ€ĐĩдваŅ€Đ¸Ņ‚ĐĩĐģŅŒĐŊĐžĐŗĐž ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€Đ° ŅŅŅ‹ĐģĐžĐē.", "Accounts_UserAddedEmailSubject_Default": "ВŅ‹ ĐąŅ‹Đģи дОйавĐģĐĩĐŊŅ‹ в [Site_Name]", "Accounts_Verify_Email_For_External_Accounts": "ОŅ‚ĐŧĐĩŅ‚иŅ‚ŅŒ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊŅƒŅŽ ĐŋĐžŅ‡Ņ‚Ņƒ Đ´ĐģŅ вĐŊĐĩŅˆĐŊиŅ… ŅƒŅ‡ĐĩŅ‚ĐŊŅ‹Ņ… СаĐŋиŅĐĩĐš ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐĩĐŊĐŊОК", @@ -311,7 +313,6 @@ "bypass-time-limit-edit-and-delete": "ОбŅ…Од ĐžĐŗŅ€Đ°ĐŊиŅ‡ĐĩĐŊиŅ ĐŋĐž вŅ€ĐĩĐŧĐĩĐŊи", "bypass-time-limit-edit-and-delete_description": "РаСŅ€ĐĩŅˆĐĩĐŊиĐĩ ĐŊĐ° ОйŅ…Од ĐžĐŗŅ€Đ°ĐŊиŅ‡ĐĩĐŊиŅ ĐŋĐž вŅ€ĐĩĐŧĐĩĐŊи Đ´ĐģŅ Ņ€ĐĩĐ´Đ°ĐēŅ‚иŅ€ĐžĐ˛Đ°ĐŊиŅ и ŅƒĐ´Đ°ĐģĐĩĐŊиŅ ŅĐžĐžĐąŅ‰ĐĩĐŊиК", "add-team-channel": "ДобавиŅ‚ŅŒ Channel КоĐŧĐ°ĐŊĐ´Ņ‹", - "Calls_in_queue_many": "{{count}} ЗвоĐŊĐēОв в ĐžŅ‡ĐĩŅ€Đĩди", "add-team-channel_description": "РаСŅ€ĐĩŅˆĐĩĐŊиĐĩ ĐŊĐ° дОйавĐģĐĩĐŊиĐĩ ĐēĐ°ĐŊĐ°ĐģĐ° в КоĐŧĐ°ĐŊĐ´Ņƒ", "add-team-member": "ДобавиŅ‚ŅŒ ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēĐ° КоĐŧĐ°ĐŊĐ´Ņ‹", "add-team-member_description": "РаСŅ€ĐĩŅˆĐĩĐŊиĐĩ ĐŊĐ° дОйавĐģĐĩĐŊиĐĩ ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēОв в КоĐŧĐ°ĐŊĐ´Ņƒ", @@ -335,13 +336,14 @@ "Additional_Feedback": "ДоĐŋĐžĐģĐŊиŅ‚ĐĩĐģŅŒĐŊĐ°Ņ ОйŅ€Đ°Ņ‚ĐŊĐ°Ņ ŅĐ˛ŅĐˇŅŒ", "additional_integrations_Bots": "ЕŅĐģи вŅ‹ иŅ‰ĐĩŅ‚Đĩ, ĐēĐ°Đē иĐŊŅ‚ĐĩĐŗŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐžĐąŅŅ‚вĐĩĐŊĐŊĐžĐŗĐž йОŅ‚Đ°, ĐŋĐžŅĐŧĐžŅ‚Ņ€Đ¸Ņ‚Đĩ ĐŊĐ°Ņˆ Đ°Đ´Đ°ĐŋŅ‚ĐĩŅ€ Hubot. https://github.com/RocketChat/hubot-rocketchat", "Admin_disabled_encryption": "ВаŅˆ Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ ĐŊĐĩ вĐēĐģŅŽŅ‡Đ¸Đģ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ E2E.", + "Apps_Count_Enabled_few": "{{count}} ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиК(-Ņ) вĐēĐģŅŽŅ‡ĐĩĐŊĐž", "Admin_Info": "ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ АдĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€Đ°", "admin-no-active-video-conf-provider": "**ФŅƒĐŊĐēŅ†Đ¸Ņ СвОĐŊĐēОв ĐŊĐĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐ°**: НаŅŅ‚Ņ€ĐžĐšŅ‚Đĩ СвОĐŊĐēи, Ņ‡Ņ‚ОйŅ‹ ŅĐ´ĐĩĐģĐ°Ņ‚ŅŒ иŅ… Đ´ĐžŅŅ‚ŅƒĐŋĐŊŅ‹Đŧи Đ´ĐģŅ ваŅˆĐĩĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ°.", - "Calls_in_queue_few": "{{count}} ЗвоĐŊĐēОв в ĐžŅ‡ĐĩŅ€Đĩди", "admin-video-conf-provider-not-configured": "**ФŅƒĐŊĐēŅ†Đ¸Ņ СвОĐŊĐēОв ĐŊĐĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐ°**: НаŅŅ‚Ņ€ĐžĐšŅ‚Đĩ СвОĐŊĐēи, Ņ‡Ņ‚ОйŅ‹ ŅĐ´ĐĩĐģĐ°Ņ‚ŅŒ иŅ… Đ´ĐžŅŅ‚ŅƒĐŋĐŊŅ‹Đŧи Đ´ĐģŅ ваŅˆĐĩĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ°.", "admin-no-videoconf-provider-app": "**ФŅƒĐŊĐēŅ†Đ¸Ņ СвОĐŊĐēОв ĐŊĐĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐ°**: ПŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ Đ´ĐģŅ СвОĐŊĐēОв ĐŧĐžĐŗŅƒŅ‚ ĐąŅ‹Ņ‚ŅŒ ŅƒŅŅ‚Đ°ĐŊОвĐģĐĩĐŊŅ‹ иС ĐŧĐ°ĐŗаСиĐŊĐ° ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиК Rocket.Chat Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ĐžĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đ°.", "Administration": "АдĐŧиĐŊиŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ", "Address": "АдŅ€ĐĩŅ", + "Private_Apps_Count_Enabled_few": "{{count}} ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊŅ‹Ņ… ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиК вĐēĐģŅŽŅ‡ĐĩĐŊĐž", "Adult_images_are_not_allowed": "ИСОйŅ€Đ°ĐļĐĩĐŊиŅ Đ´ĐģŅ вСŅ€ĐžŅĐģŅ‹Ņ… СаĐŋŅ€ĐĩŅ‰ĐĩĐŊŅ‹", "Aerospace_and_Defense": "АŅŅ€ĐžĐēĐžŅĐŧиŅ‡ĐĩŅĐēĐ°Ņ ĐŋŅ€ĐžĐŧŅ‹ŅˆĐģĐĩĐŊĐŊĐžŅŅ‚ŅŒ и ОйОŅ€ĐžĐŊĐ°", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "ПоŅĐģĐĩ Đ°ŅƒŅ‚ĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ OAuth2, ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģи ĐąŅƒĐ´ŅƒŅ‚ ĐŋĐĩŅ€ĐĩĐŊĐ°ĐŋŅ€Đ°Đ˛ĐģŅŅ‚ŅŒŅŅ ĐŊĐ° ŅŅ‚ĐžŅ‚ URL-Đ°Đ´Ņ€ĐĩŅ", @@ -363,14 +365,12 @@ "Alias_Set": "НаŅŅ‚Ņ€ĐžĐšĐēи ĐŋŅĐĩвдОĐŊиĐŧĐ°", "AutoLinker_Email": "AutoLinker Email", "Aliases": "ПŅĐĩвдОĐŊиĐŧŅ‹", - "Apps_Count_Enabled_few": "{{count}} ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиК(-Ņ) вĐēĐģŅŽŅ‡ĐĩĐŊĐž", "AutoLinker_Phone": "ПодŅĐ˛ĐĩŅ‡Đ¸Đ˛Đ°Ņ‚ŅŒ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊŅ‹", "AutoLinker_Phone_Description": "АвŅ‚ĐžĐŧĐ°Ņ‚иŅ‡ĐĩŅĐēи вŅ‹Đ´ĐĩĐģŅŅ‚ŅŒ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐŊŅ‹Đĩ ĐŊĐžĐŧĐĩŅ€Đ°, ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€ `(123)456-7890`", "All": "ВŅĐĩ", "AutoLinker_StripPrefix": "ĐŖĐ´Đ°ĐģĐĩĐŊиĐĩ ĐŋŅ€ĐĩŅ„иĐēŅĐžĐ˛", "All_Apps": "ВŅĐĩ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ", "AutoLinker_StripPrefix_Description": "ĐĄĐžĐēŅ€Đ°Ņ‰Đ°Ņ‚ŅŒ Ņ„ĐžŅ€ĐŧĐ°Ņ‚, ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€: https://rocket.chat => rocket.chat", - "Private_Apps_Count_Enabled_few": "{{count}} ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊŅ‹Ņ… ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиК вĐēĐģŅŽŅ‡ĐĩĐŊĐž", "All_added_tokens_will_be_required_by_the_user": "ВŅĐĩ дОйавĐģĐĩĐŊĐŊŅ‹Đĩ Ņ‚ĐžĐēĐĩĐŊŅ‹ ĐŋĐžŅ‚Ņ€ĐĩĐąŅƒŅŽŅ‚ŅŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐŧ", "All_categories": "ВŅĐĩ ĐēĐ°Ņ‚ĐĩĐŗĐžŅ€Đ¸Đ¸", "AutoLinker_Urls_Scheme": "AutoLinker Scheme:// URLs", @@ -854,6 +854,7 @@ "CAS_enabled": "ВĐēĐģŅŽŅ‡ĐĩĐŊĐž", "CAS_Login_Layout": "ĐĄŅ‚иĐģŅŒ ĐžĐēĐŊĐ° CAS авŅ‚ĐžŅ€Đ¸ĐˇĐ°Ņ†Đ¸Đ¸", "CAS_login_url": "SSO ĐģĐžĐŗиĐŊ URL", + "message_counter_many": "{{count}} ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ", "CAS_login_url_Description": "ЛоĐŗиĐŊ URL ваŅˆĐĩĐŗĐž вĐŊĐĩŅˆĐŊĐĩĐŗĐž ŅĐĩŅ€Đ˛Đ¸ŅĐ° SSO. НаĐŋŅ€Đ¸ĐŧĐĩŅ€: `https://sso.example.undef/sso/login`", "CAS_popup_height": "ВŅ‹ŅĐžŅ‚Đ° вŅĐŋĐģŅ‹Đ˛Đ°ŅŽŅ‰ĐĩĐŗĐž ĐžĐēĐŊĐ° вŅ…Ода", "CAS_popup_width": "ШиŅ€Đ¸ĐŊĐ° вŅĐŋĐģŅ‹Đ˛Đ°ŅŽŅ‰ĐĩĐŗĐž ĐžĐēĐŊĐ° вŅ…Ода", @@ -869,6 +870,7 @@ "Categories*": "КаŅ‚ĐĩĐŗĐžŅ€Đ¸Đ¸*", "CDN_JSCSS_PREFIX": "ПŅ€ĐĩŅ„иĐēŅ CDN Đ´ĐģŅ JS/CSS", "CDN_PREFIX": "CDN ĐŋŅ€ĐĩŅ„иĐēŅ", + "meteor_status_reconnect_in_many": "ĐŋŅ‹Ņ‚Đ°ĐĩŅ‚ŅŅ ŅĐŊОва Ņ‡ĐĩŅ€ĐĩС {{count}} ŅĐĩĐēŅƒĐŊĐ´ ...", "CDN_PREFIX_ALL": "ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ПŅ€ĐĩŅ„иĐēŅ CDN Đ´ĐģŅ вŅĐĩŅ… Đ°ĐēŅ‚ивОв", "Certificates_and_Keys": "КĐģŅŽŅ‡Đ¸ и ŅĐĩŅ€Ņ‚иŅ„иĐēĐ°Ņ‚Ņ‹", "change-livechat-room-visitor": "ИСĐŧĐĩĐŊиŅ‚ŅŒ ĐŋĐžŅĐĩŅ‚иŅ‚ĐĩĐģĐĩĐš Ņ‡Đ°Ņ‚Đ° Livechat", @@ -938,6 +940,7 @@ "Click_here": "ĐēĐģиĐēĐŊиŅ‚Đĩ ŅŅŽĐ´Đ°", "Click_here_for_more_details_or_contact_sales_for_a_new_license": "НаĐļĐŧиŅ‚Đĩ ŅŅŽĐ´Đ° Đ´ĐģŅ ĐŋĐžĐģŅƒŅ‡ĐĩĐŊиŅ ĐŋОдŅ€ĐžĐąĐŊОК иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Đ¸ иĐģи ŅĐ˛ŅĐļиŅ‚ĐĩŅŅŒ {{email}} Đ´ĐģŅ ĐŋĐžĐģŅƒŅ‡ĐĩĐŊиŅ ĐŊОвОК ĐģиŅ†ĐĩĐŊСии.", "Click_here_for_more_info": "БоĐģŅŒŅˆĐĩ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Đ¸ СдĐĩŅŅŒ", + "message_counter_few": "{{count}} ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ", "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": "ВŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ вŅ‹ Ņ…ĐžŅ‚иŅ‚Đĩ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ĐŋĐž email.", @@ -969,6 +972,7 @@ "Cloud_Invalid_license": "НĐĩĐ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģŅŒĐŊĐ°Ņ ĐģиŅ†ĐĩĐŊСиŅ!", "Cloud_Apply_license": "ПŅ€Đ¸ĐŧĐĩĐŊиŅ‚ŅŒ ĐģиŅ†ĐĩĐŊСиŅŽ", "Cloud_connectivity": "ОбĐģĐ°Ņ‡ĐŊĐ°Ņ ŅĐ˛ŅĐˇŅŒ", + "meteor_status_reconnect_in_few": "ĐŋŅ‹Ņ‚Đ°ĐĩŅ‚ŅŅ ŅĐŊОва Ņ‡ĐĩŅ€ĐĩС {{count}} ŅĐĩĐēŅƒĐŊĐ´ ...", "Cloud_address_to_send_registration_to": "АдŅ€ĐĩŅ Đ´ĐģŅ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đēи ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊĐžĐŗĐž ĐŋиŅŅŒĐŧĐ° Ņ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸ĐĩĐš в ОйĐģĐ°ĐēĐĩ.", "Cloud_click_here": "ПоŅĐģĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиŅ Ņ‚ĐĩĐēŅŅ‚Đ° ĐŋĐĩŅ€ĐĩКдиŅ‚Đĩ ĐŊĐ° Cloud Console. [ĐŠĐĩĐģĐēĐŊиŅ‚Đĩ СдĐĩŅŅŒ]({{cloudConsoleUrl}})", "Cloud_console": "ОбĐģĐ°Ņ‡ĐŊĐ°Ņ КоĐŊŅĐžĐģŅŒ", @@ -1053,7 +1057,6 @@ "Contact_not_found": "КоĐŊŅ‚Đ°ĐēŅ‚ ĐŊĐĩ ĐŊаКдĐĩĐŊ", "Contact_Profile": "ПŅ€ĐžŅ„иĐģŅŒ ĐēĐžĐŊŅ‚Đ°ĐēŅ‚Đ°", "Contact_Info": "КоĐŊŅ‚Đ°ĐēŅ‚ĐŊĐ°Ņ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ", - "message_counter_many": "{{count}} ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ", "Content": "ХОдĐĩŅ€ĐļиĐŧĐžĐĩ", "Continue": "ПŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ", "Continuous_sound_notifications_for_new_livechat_room": "НĐĩĐŋŅ€ĐĩŅ€Ņ‹Đ˛ĐŊŅ‹Đĩ СвŅƒĐēОвŅ‹Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ Đ´ĐģŅ ĐŊОвОК ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ livechat", @@ -1068,7 +1071,6 @@ "Conversations": "ĐĄĐĩĐ°ĐŊŅŅ‹ Ņ‡Đ°Ņ‚Đ°", "Conversations_per_day": "ĐĄĐĩĐ°ĐŊŅŅ‹ Ņ‡Đ°Ņ‚Đ° Са Đ´ĐĩĐŊŅŒ", "Convert": "КоĐŊвĐĩŅ€Ņ‚иŅ€ĐžĐ˛Đ°Ņ‚ŅŒ", - "meteor_status_reconnect_in_many": "ĐŋŅ‹Ņ‚Đ°ĐĩŅ‚ŅŅ ŅĐŊОва Ņ‡ĐĩŅ€ĐĩС {{count}} ŅĐĩĐēŅƒĐŊĐ´ ...", "Convert_Ascii_Emojis": "КоĐŊвĐĩŅ€Ņ‚иŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ASCII в ŅĐŧОдСи", "Convert_to_channel": "КоĐŊвĐĩŅ€Ņ‚иŅ€ĐžĐ˛Đ°Ņ‚ŅŒ в Ņ‡Đ°Ņ‚", "Converting_channel_to_a_team": "ВŅ‹ ĐŋŅ€ĐĩОйŅ€Đ°ĐˇŅƒĐĩŅ‚Đĩ ŅŅ‚ĐžŅ‚ Ņ‡Đ°Ņ‚ в КоĐŧĐ°ĐŊĐ´Ņƒ. ВŅĐĩ ĐĩĐŗĐž ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēи ĐąŅƒĐ´ŅƒŅ‚ ŅĐžŅ…Ņ€Đ°ĐŊĐĩĐŊŅ‹.", @@ -1144,7 +1146,6 @@ "Country_Denmark": "ДаĐŊиŅ", "Country_Djibouti": "ДĐļийŅƒŅ‚и", "Country_Dominica": "ДоĐŧиĐŊиĐēĐ°", - "message_counter_few": "{{count}} ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ", "Country_Dominican_Republic": "ДоĐŧиĐŊиĐēĐ°ĐŊŅĐēĐ°Ņ Đ ĐĩŅĐŋŅƒĐąĐģиĐēĐ°", "Country_Ecuador": "Đ­ĐēвадОŅ€", "Country_Egypt": "ЕĐŗиĐŋĐĩŅ‚", @@ -1180,7 +1181,6 @@ "Country_Heard_Island_and_Mcdonald_Islands": "ОŅŅ‚Ņ€ĐžĐ˛Đ° ĐĨĐĩŅ€Đ´ и МаĐēĐ´ĐžĐŊĐ°ĐģŅŒĐ´", "Country_Holy_See_Vatican_City_State": "ХвŅŅ‚ĐĩĐšŅˆĐ¸Đš ПŅ€ĐĩŅŅ‚ĐžĐģ (ГоŅŅƒĐ´Đ°Ņ€ŅŅ‚вО ВаŅ‚иĐēĐ°ĐŊ)", "Country_Honduras": "ГоĐŊĐ´ŅƒŅ€Đ°Ņ", - "meteor_status_reconnect_in_few": "ĐŋŅ‹Ņ‚Đ°ĐĩŅ‚ŅŅ ŅĐŊОва Ņ‡ĐĩŅ€ĐĩС {{count}} ŅĐĩĐēŅƒĐŊĐ´ ...", "Country_Hong_Kong": "ГоĐŊĐēĐžĐŊĐŗ", "Country_Hungary": "ВĐĩĐŊĐŗŅ€Đ¸Ņ", "Country_Iceland": "ИŅĐģĐ°ĐŊдиŅ", @@ -3700,6 +3700,9 @@ "RetentionPolicy_Advanced_Precision": "ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ Ņ€Đ°ŅŅˆĐ¸Ņ€ĐĩĐŊĐŊŅƒŅŽ ĐēĐžĐŊŅ„иĐŗŅƒŅ€Đ°Ņ†Đ¸ŅŽ ĐŋĐžĐģиŅ‚иĐēи ĐžŅ‡Đ¸ŅŅ‚Đēи ŅĐžĐžĐąŅ‰ĐĩĐŊиК", "RetentionPolicy_Advanced_Precision_Cron": "ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ Ņ€Đ°ŅŅˆĐ¸Ņ€ĐĩĐŊĐŊŅ‹Đš ĐŋĐģĐ°ĐŊиŅ€ĐžĐ˛Ņ‰Đ¸Đē Đ´ĐģŅ ĐŋĐžĐģиŅ‚иĐēи ĐžŅ‡Đ¸ŅŅ‚Đēи ŅĐžĐžĐąŅ‰ĐĩĐŊиК", "RetentionPolicy_Advanced_Precision_Cron_Description": "КаĐē Ņ‡Đ°ŅŅ‚Đž Đ´ĐžĐģĐļĐĩĐŊ СаĐŋŅƒŅĐēĐ°Ņ‚ŅŒŅŅ Ņ‚Đ°ĐšĐŧĐĩŅ€ ĐžŅ‡Đ¸ŅŅ‚Đēи ŅĐžĐžĐąŅ‰ĐĩĐŊиК ĐžĐŋŅ€ĐĩĐ´ĐĩĐģŅĐĩŅ‚ŅŅ ĐŋŅ€Đ°Đ˛Đ¸ĐģĐžĐŧ СадаŅ‡Đ¸ ĐŋĐģĐ°ĐŊиŅ€ĐžĐ˛Ņ‰Đ¸ĐēĐ°. ĐŖŅŅ‚Đ°ĐŊОвĐēĐ° ŅŅ‚иŅ… СĐŊĐ°Ņ‡ĐĩĐŊиК ĐŋОСвОĐģŅĐĩŅ‚ ĐēĐ°ĐŊĐ°ĐģĐ°Đŧ Ņ йОĐģĐĩĐĩ Ņ‡Đ°ŅŅ‚Ņ‹Đŧи Ņ‚Đ°ĐšĐŧĐĩŅ€Đ°Đŧи ĐžŅ‡Đ¸ŅŅ‚Đēи ŅĐžĐžĐąŅ‰ĐĩĐŊиК Ņ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ ĐģŅƒŅ‡ŅˆĐĩ, ĐŊĐž ĐŧĐžĐļĐĩŅ‚ ŅŅ‚ОиŅ‚ŅŒ Đ´ĐžĐŋĐžĐģĐŊиŅ‚ĐĩĐģŅŒĐŊŅ‹Ņ… вŅ‹Ņ‡Đ¸ŅĐģиŅ‚ĐĩĐģŅŒĐŊŅ‹Ņ… ĐŧĐžŅ‰ĐŊĐžŅŅ‚ĐĩĐš ĐŊĐ° йОĐģŅŒŅˆĐ¸Ņ… ŅĐžĐžĐąŅ‰ĐĩŅŅ‚ваŅ….", + "RetentionPolicy_AppliesToChannels": "ПŅ€Đ¸ĐŧĐĩĐŊŅĐĩŅ‚ŅŅ Đē ĐžŅ‚ĐēŅ€Ņ‹Ņ‚Ņ‹Đŧ ĐēĐ°ĐŊĐ°ĐģĐ°Đŧ", + "RetentionPolicy_AppliesToDMs": "ПŅ€Đ¸ĐŧĐĩĐŊŅĐĩŅ‚ŅŅ Đē ĐģиŅ‡ĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ", + "RetentionPolicy_AppliesToGroups": "ПŅ€Đ¸ĐŧĐĩĐŊŅĐĩŅ‚ŅŅ Đē СаĐēŅ€Ņ‹Ņ‚Ņ‹Đŧ ĐēĐ°ĐŊĐ°ĐģĐ°Đŧ", "RetentionPolicy_Description": "АвŅ‚ĐžĐŧĐ°Ņ‚иŅ‡ĐĩŅĐēи ŅƒĐ´Đ°ĐģŅĐĩŅ‚ ŅŅ‚Đ°Ņ€Ņ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐŊĐ° ваŅˆĐĩĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ Rocket.Chat.", "RetentionPolicy_DoNotPruneDiscussion": "НĐĩ ŅƒĐ´Đ°ĐģŅŅ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ОйŅŅƒĐļĐ´ĐĩĐŊиК", "RetentionPolicy_DoNotPrunePinned": "НĐĩ ŅƒĐ´Đ°ĐģŅŅ‚ŅŒ ĐŋŅ€Đ¸ĐēŅ€ĐĩĐŋĐģĐĩĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ", @@ -3709,6 +3712,10 @@ "RetentionPolicy_FilesOnly": "ĐŖĐ´Đ°ĐģиŅ‚ŅŒ Ņ‚ĐžĐģŅŒĐēĐž Ņ„Đ°ĐšĐģŅ‹", "RetentionPolicy_FilesOnly_Description": "ĐŖĐ´Đ°ĐģŅŅŽŅ‚ŅŅ Ņ‚ĐžĐģŅŒĐēĐž Ņ„Đ°ĐšĐģŅ‹, ŅĐ°Đŧи ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐžŅŅ‚Đ°ŅŽŅ‚ŅŅ ĐŊĐ° ĐŧĐĩŅŅ‚Đĩ.", "RetentionPolicy_MaxAge": "МаĐēŅĐ¸ĐŧĐ°ĐģŅŒĐŊĐžĐĩ вŅ€ĐĩĐŧŅ ĐļиСĐŊи ŅĐžĐžĐąŅ‰ĐĩĐŊиК", + "RetentionPolicy_MaxAge_Channels": "МаĐēŅĐ¸ĐŧĐ°ĐģŅŒĐŊĐžĐĩ вŅ€ĐĩĐŧŅ ĐļиСĐŊи ŅĐžĐžĐąŅ‰ĐĩĐŊиК в ĐžŅ‚ĐēŅ€Ņ‹Ņ‚Ņ‹Ņ… ĐēĐ°ĐŊĐ°ĐģĐ°Ņ…", + "RetentionPolicy_MaxAge_Description": "ĐŖĐ´Đ°ĐģŅŅ‚ŅŒ вŅĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ŅŅ‚Đ°Ņ€ŅˆĐĩ ŅŅ‚ĐžĐŗĐž СĐŊĐ°Ņ‡ĐĩĐŊиŅ, в Đ´ĐŊŅŅ…", + "RetentionPolicy_MaxAge_DMs": "МаĐēŅĐ¸ĐŧĐ°ĐģŅŒĐŊĐžĐĩ вŅ€ĐĩĐŧŅ ĐļиСĐŊи ĐģиŅ‡ĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК", + "RetentionPolicy_MaxAge_Groups": "МаĐēŅĐ¸ĐŧĐ°ĐģŅŒĐŊĐžĐĩ вŅ€ĐĩĐŧŅ ĐļиСĐŊи ŅĐžĐžĐąŅ‰ĐĩĐŊиК в СаĐēŅ€Ņ‹Ņ‚Ņ‹Ņ… ĐēĐ°ĐŊĐ°ĐģĐ°Ņ…", "RetentionPolicy_Precision": "ĐĸĐžŅ‡ĐŊĐžŅŅ‚ŅŒ Ņ‚Đ°ĐšĐŧĐĩŅ€Đ°", "RetentionPolicy_Precision_Description": "КаĐē Ņ‡Đ°ŅŅ‚Đž Đ´ĐžĐģĐļĐĩĐŊ СаĐŋŅƒŅĐēĐ°Ņ‚ŅŒŅŅ Ņ‚Đ°ĐšĐŧĐĩŅ€ ĐžŅ‡Đ¸ŅŅ‚Đēи. ĐŖŅŅ‚Đ°ĐŊОвĐēĐ° ŅŅ‚иŅ… СĐŊĐ°Ņ‡ĐĩĐŊиК ĐŋОСвОĐģŅĐĩŅ‚ ĐēĐ°ĐŊĐ°ĐģĐ°Đŧ Ņ йОĐģĐĩĐĩ Ņ‡Đ°ŅŅ‚Ņ‹Đŧи Ņ‚Đ°ĐšĐŧĐĩŅ€Đ°Đŧи ĐžŅ‡Đ¸ŅŅ‚Đēи ŅĐžĐžĐąŅ‰ĐĩĐŊиК Ņ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ ĐģŅƒŅ‡ŅˆĐĩ, ĐŊĐž ĐŧĐžĐļĐĩŅ‚ ŅŅ‚ОиŅ‚ŅŒ Đ´ĐžĐŋĐžĐģĐŊиŅ‚ĐĩĐģŅŒĐŊŅ‹Ņ… вŅ‹Ņ‡Đ¸ŅĐģиŅ‚ĐĩĐģŅŒĐŊŅ‹Ņ… ĐŧĐžŅ‰ĐŊĐžŅŅ‚ĐĩĐš ĐŊĐ° йОĐģŅŒŅˆĐ¸Ņ… ŅĐžĐžĐąŅ‰ĐĩŅŅ‚ваŅ….", "RetentionPolicyRoom_Enabled": "АвŅ‚ĐžĐŧĐ°Ņ‚иŅ‡ĐĩŅĐēи ŅƒĐ´Đ°ĐģŅŅ‚ŅŒ ŅŅ‚Đ°Ņ€Ņ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ", @@ -5073,6 +5080,7 @@ "Conversational_transcript": "Đ­ĐēŅĐŋĐžŅ€Ņ‚ ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐŗĐž диаĐģĐžĐŗĐ°", "Always_send_the_transcript_to_contacts_at_the_end_of_the_conversations": "ВŅĐĩĐŗĐ´Đ° ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģŅŅ‚ŅŒ ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐĩ Ņ‡Đ°Ņ‚Đ° ĐēĐžĐŊŅ‚Đ°ĐēŅ‚Đ°Đŧ ĐŋĐž ĐžĐēĐžĐŊŅ‡Đ°ĐŊиŅŽ диаĐģĐžĐŗĐ°.", "Omnichannel_transcript_email": "ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐĩ диаĐģĐžĐŗĐ° ĐŋĐž ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Đĩ.", + "Accounts_Default_User_Preferences_omnichannelTranscriptEmail_Description": "ВŅĐĩĐŗĐ´Đ° ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģŅŅ‚ŅŒ ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐĩ Ņ‡Đ°Ņ‚Đ° ĐēĐžĐŊŅ‚Đ°ĐēŅ‚Đ°Đŧ ĐŋĐž ĐžĐēĐžĐŊŅ‡Đ°ĐŊиŅŽ диаĐģĐžĐŗĐ°.", "Omnichannel_transcript_pdf": "Đ­ĐēŅĐŋĐžŅ€Ņ‚ ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐŗĐž Ņ‡Đ°Ņ‚Đ° в PDF.", "Accounts_Default_User_Preferences_omnichannelTranscriptPDF_Description": "ВŅĐĩĐŗĐ´Đ° ŅĐēŅĐŋĐžŅ€Ņ‚иŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐĩ Ņ‡Đ°Ņ‚Đ° ĐŋĐž ĐžĐēĐžĐŊŅ‡Đ°ĐŊиŅŽ диаĐģĐžĐŗĐ°.", "User_Status": "ПоĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒŅĐēиК ŅŅ‚Đ°Ņ‚ŅƒŅ", @@ -5091,4 +5099,4 @@ "Enterprise": "КоŅ€ĐŋĐžŅ€Đ°Ņ†Đ¸Ņ", "UpgradeToGetMore_engagement-dashboard_Title": "АĐŊĐ°ĐģиŅ‚иĐēĐ°", "UpgradeToGetMore_auditing_Title": "АŅƒĐ´Đ¸Ņ‚ ŅĐžĐžĐąŅ‰ĐĩĐŊиК" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/sk-SK.i18n.json b/packages/i18n/src/locales/sk-SK.i18n.json index c3e650063e09..f5bc7bfcbc58 100644 --- a/packages/i18n/src/locales/sk-SK.i18n.json +++ b/packages/i18n/src/locales/sk-SK.i18n.json @@ -2069,12 +2069,19 @@ "Retail": "Maloobchod", "Retention_setting_changed_successfully": "Nastavenie politiky uchovÃĄvania sa ÃēspeÅĄne zmenilo", "RetentionPolicy": "Politika uchovÃĄvania", + "RetentionPolicy_AppliesToChannels": "Platí pre kanÃĄly", + "RetentionPolicy_AppliesToDMs": "Platí pre priame sprÃĄvy", + "RetentionPolicy_AppliesToGroups": "Platí pre sÃēkromnÊ ​​skupiny", "RetentionPolicy_Description": "Automaticky prerezÃĄva starÊ sprÃĄvy v rÃĄmci vaÅĄej inÅĄtancie Rocket.Chat.", "RetentionPolicy_Enabled": "PovolenÊ", "RetentionPolicy_ExcludePinned": "VylÃēčte pripnutÊ sprÃĄvy", "RetentionPolicy_FilesOnly": "OdstrÃĄÅˆte iba sÃēbory", "RetentionPolicy_FilesOnly_Description": "Iba sÃēbory budÃē vymazanÊ, samotnÊ sprÃĄvy zostanÃē na mieste.", "RetentionPolicy_MaxAge": "MaximÃĄlny vek sprÃĄvy", + "RetentionPolicy_MaxAge_Channels": "MaximÃĄlny vek sprÃĄv v kanÃĄloch", + "RetentionPolicy_MaxAge_Description": "NakrÃĄjajte vÅĄetky sprÃĄvy starÅĄie ako tÃĄto hodnota v dňoch", + "RetentionPolicy_MaxAge_DMs": "MaximÃĄlny vek sprÃĄv v priamych sprÃĄvach", + "RetentionPolicy_MaxAge_Groups": "MaximÃĄlny vek sprÃĄv v sÃēkromnÃŊch skupinÃĄch", "RetentionPolicy_Precision": "Timer Precision", "RetentionPolicy_Precision_Description": "Ako často by mal spustiÅĨ časovač prerezÃĄvanie. Nastavenie tejto hodnoty na presnejÅĄiu hodnotu umoŞňuje, aby kanÃĄly s rÃŊchlymi retenčnÃŊmi časovačmi fungovali lepÅĄie, ale mohlo by to zapríčiniÅĨ mimoriadny vÃŊkon spracovania veÄžkÃŊch spoločenstiev.", "RetentionPolicyRoom_Enabled": "Automaticky prerezÃĄvaÅĨ starÊ sprÃĄvy", @@ -2764,4 +2771,4 @@ "registration.component.form.sendConfirmationEmail": "PoÅĄlite potvrdzovací e-mail", "Enterprise": "podnik", "UpgradeToGetMore_engagement-dashboard_Title": "Analytika" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/sl-SI.i18n.json b/packages/i18n/src/locales/sl-SI.i18n.json index 07ba5f608dd9..668bb94dc2c5 100644 --- a/packages/i18n/src/locales/sl-SI.i18n.json +++ b/packages/i18n/src/locales/sl-SI.i18n.json @@ -2049,12 +2049,19 @@ "Retail": "Maloprodaja", "Retention_setting_changed_successfully": "Nastavitev pravilnika o zadrÅžanju je bila uspeÅĄno spremenjena", "RetentionPolicy": "Politika zadrÅževanja", + "RetentionPolicy_AppliesToChannels": "Velja za kanale", + "RetentionPolicy_AppliesToDMs": "Velja za neposredna sporočila", + "RetentionPolicy_AppliesToGroups": "Velja za zasebne skupine", "RetentionPolicy_Description": "Samodejno osemenjevanje starih sporočil prek vaÅĄega Rocket.Chat primera.", "RetentionPolicy_Enabled": "Omogočeno", "RetentionPolicy_ExcludePinned": "Izključi prepovedana sporočila", "RetentionPolicy_FilesOnly": "IzbriÅĄite le datoteke", "RetentionPolicy_FilesOnly_Description": "Samo datoteke bodo izbrisane, sporočila bodo ostala na mestu.", "RetentionPolicy_MaxAge": "NajviÅĄja starost sporočila", + "RetentionPolicy_MaxAge_Channels": "NajviÅĄja starost sporočil v kanalih", + "RetentionPolicy_MaxAge_Description": "Preglejte vsa sporočila, starejÅĄa od te vrednosti, v dnevih", + "RetentionPolicy_MaxAge_DMs": "NajviÅĄja starost sporočil v neposrednih sporočilih", + "RetentionPolicy_MaxAge_Groups": "Največja starost sporočil v zasebnih skupinah", "RetentionPolicy_Precision": "Časovna natančnost", "RetentionPolicy_Precision_Description": "Kako pogosto naj se izvaja časovni rezalnik. Če nastavite to na natančnejÅĄo vrednost, postanejo kanali z hitrimi časovnimi časi boljÅĄi, vendar pa lahko pri večjih skupnostih stanejo dodatna procesna moč.", "RetentionPolicyRoom_Enabled": "Samodejno obrezovanje starih sporočil", @@ -2744,4 +2751,4 @@ "registration.component.form.sendConfirmationEmail": "PoÅĄlji potrditveno e-poÅĄtno sporočilo", "Enterprise": "Podjetje", "UpgradeToGetMore_engagement-dashboard_Title": "Analiza" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/sq.i18n.json b/packages/i18n/src/locales/sq.i18n.json index ce59a0e3af89..312494da2e8d 100644 --- a/packages/i18n/src/locales/sq.i18n.json +++ b/packages/i18n/src/locales/sq.i18n.json @@ -2059,12 +2059,19 @@ "Retail": "me pakicÃĢ", "Retention_setting_changed_successfully": "Rregullimi i politikÃĢs sÃĢ ruajtjes ndryshoi me sukses", "RetentionPolicy": "Politika e Ruajtjes", + "RetentionPolicy_AppliesToChannels": "Zbatohet tek kanalet", + "RetentionPolicy_AppliesToDMs": "Zbatohet nÃĢ mesazhet direkte", + "RetentionPolicy_AppliesToGroups": "Zbatohet pÃĢr grupe private", "RetentionPolicy_Description": "Prunes automatikisht mesazhet e vjetra nÃĢ tÃĢ gjithÃĢ shkallÃĢn Rocket.Chat.", "RetentionPolicy_Enabled": "enabled", "RetentionPolicy_ExcludePinned": "PÃĢrjashto mesazhet e mbÃĢshtetura", "RetentionPolicy_FilesOnly": "VetÃĢm fshini skedarÃĢt", "RetentionPolicy_FilesOnly_Description": "VetÃĢm skedarÃĢt do tÃĢ fshihen, vetÃĢ mesazhet do tÃĢ qÃĢndrojnÃĢ nÃĢ vend.", "RetentionPolicy_MaxAge": "Mosha maksimale e mesazhit", + "RetentionPolicy_MaxAge_Channels": "Mosha maksimale e mesazhit nÃĢ kanale", + "RetentionPolicy_MaxAge_Description": "Prune tÃĢ gjitha mesazhet mÃĢ tÃĢ vjetÃĢr se kjo vlerÃĢ, nÃĢ ditÃĢ", + "RetentionPolicy_MaxAge_DMs": "Mosha Maksimale e mesazhit nÃĢ mesazhet direkte", + "RetentionPolicy_MaxAge_Groups": "Mosha maksimale e mesazhit nÃĢ grupe private", "RetentionPolicy_Precision": "Timer Precision", "RetentionPolicy_Precision_Description": "Sa shpesh koha duhet tÃĢ funksionojÃĢ. Vendosja e kÃĢsaj me njÃĢ vlerÃĢ mÃĢ tÃĢ saktÃĢ bÃĢn qÃĢ kanalet me kohÃĢmatÃĢsi tÃĢ mbajtjes sÃĢ shpejtÃĢ tÃĢ funksionojnÃĢ mÃĢ mirÃĢ, por mund tÃĢ kushtojnÃĢ energji shtesÃĢ pÃĢr pÃĢrpunim nÃĢ komunitetet e mÃĢdha.", "RetentionPolicyRoom_Enabled": "Automatikisht prishi mesazhet e vjetra", @@ -2753,4 +2760,4 @@ "registration.component.form.sendConfirmationEmail": "DÃĢrgo email konfirmimi", "Enterprise": "NdÃĢrmarrje", "UpgradeToGetMore_engagement-dashboard_Title": "AnalitikÃĢ" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/sr.i18n.json b/packages/i18n/src/locales/sr.i18n.json index f02efa3acd54..e26e8bd3862f 100644 --- a/packages/i18n/src/locales/sr.i18n.json +++ b/packages/i18n/src/locales/sr.i18n.json @@ -46,7 +46,7 @@ "Accounts_Email_Deactivated_Subject": "НаĐģĐžĐŗ Đ´ĐĩĐ°ĐēŅ‚ивиŅ€Đ°ĐŊ", "Accounts_EmailVerification": "ДозвоĐģи ĐŋŅ€Đ¸Ņ˜Đ°Đ˛Ņƒ ŅĐ°ĐŧĐž ĐŋĐžŅ‚вŅ€Ņ’ĐĩĐŊиĐŧ ĐēĐžŅ€Đ¸ŅĐŊиŅ†Đ¸ĐŧĐ°", "Accounts_EmailVerification_Description": "ПоŅ‚вŅ€Đ´Đ¸Ņ‚Đĩ Đ´Đ° иĐŧĐ°Ņ‚Đĩ иŅĐŋŅ€Đ°Đ˛ĐŊĐĩ SMTP ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Đĩ Đ´Đ° йи ŅŅ‚Đĩ ĐēĐžŅ€Đ¸ŅŅ‚иĐģи ОвŅƒ ĐŧĐžĐŗŅƒŅ›ĐŊĐžŅŅ‚", - "Accounts_Enrollment_Email": "ĐŖĐŋиŅ Đĩ-ĐŧаиĐģ", + "Accounts_Enrollment_Email": "ĐŖĐŋиŅ иĐŧĐĩŅ˜ĐģĐ°", "Accounts_Enrollment_Email_Default": "

    ДобŅ€ĐžĐ´ĐžŅˆĐģи ĐŊĐ°[Site_Name]

    Иди ĐŊĐ° [Site_URL] и иŅĐŋŅ€ĐžĐąĐ°Ņ˜ ĐŊĐ°Ņ˜ĐąĐžŅ™Đĩ Ņ€ĐĩŅˆĐĩŅšĐĩ Са Ņ›Đ°ŅĐēĐ°ŅšĐĩ ĐžŅ‚вОŅ€ĐĩĐŊĐžĐŗ ĐēОда ĐēĐžŅ˜Đĩ Ņ˜Đĩ Ņ‚Ņ€ĐĩĐŊŅƒŅ‚ĐŊĐž Đ´ĐžŅŅ‚ŅƒĐŋĐŊĐž!

    ", "Accounts_Enrollment_Email_Description": "МоĐļĐĩŅ‚Đĩ ĐēĐžŅ€Đ¸ŅŅ‚иŅ‚и `[name]`, `[fname]`, `[lname]` Са ĐŋŅƒĐŊĐž иĐŧĐĩ ĐēĐžŅ€Đ¸ŅĐŊиĐēĐ°, иĐŧĐĩĐŊŅƒ иĐģи ĐŋŅ€ĐĩСиĐŧĐĩĐŊŅƒ, Ņ€ĐĩŅĐŋĐĩĐēŅ‚ивĐŊĐž.
    МоĐļĐĩŅ‚Đĩ ĐēĐžŅ€Đ¸ŅŅ‚иŅ‚и [email] Đĩ-ĐŋĐžŅˆŅ‚Đĩ ĐēĐžŅ€Đ¸ŅĐŊиĐēĐ°.", "Accounts_Enrollment_Email_Subject_Default": "ДобŅ€ĐžĐ´ĐžŅˆĐģи ĐŊĐ° [Site_Name]", @@ -72,53 +72,30 @@ "Accounts_OAuth_Custom_Token_Path": "ПŅƒŅ‚Đ°ŅšĐ° Ņ‚ĐžĐēĐĩĐŊĐ°", "Accounts_OAuth_Custom_Token_Sent_Via": "ĐĸĐžĐēĐĩĐŊ ĐŋĐžŅĐģĐ°Ņ‚ ĐŋŅƒŅ‚ĐĩĐŧ", "Accounts_OAuth_Custom_Username_Field": "ПоŅ™Đĩ ĐēĐžŅ€Đ¸ŅĐŊиŅ‡ĐēĐžĐŗ иĐŧĐĩĐŊĐ°", - "Accounts_OAuth_Drupal_id": "ДŅ€ŅƒĐŋĐ°Đģ ОАŅƒŅ‚Ņ…2 КĐģиŅ˜ĐĩĐŊŅ‚ ИД", - "Accounts_OAuth_Facebook": "ФаŅ†ĐĩйООĐē ĐģĐžĐŗиĐŊ", - "Accounts_OAuth_Facebook_secret": "Ņ„Đ°Ņ†ĐĩйООĐē ĐĸĐ°Ņ˜ĐŊĐ°", - "Accounts_OAuth_Github_callback_url": "ГиŅ‚Ņ…ŅƒĐą ĐŖРЛ Са ĐŋОвŅ€Đ°Ņ‚ĐŊи ĐŋОСив", "Accounts_OAuth_GitHub_Enterprise": "ОАŅƒŅ‚Ņ… ОĐŧĐžĐŗŅƒŅ›ĐĩĐŊĐž", - "Accounts_OAuth_GitHub_Enterprise_callback_url": "ГиŅ‚ĐĨŅƒĐą ĐŋŅ€ĐĩĐ´ŅƒĐˇĐĩŅ›Đ° ĐŖРЛ Са ĐŋОвŅ€Đ°Ņ‚ĐŊи ĐŋОСив", "Accounts_OAuth_GitHub_Enterprise_id": "Ид ĐēĐģиŅ˜ĐĩĐŊŅ‚Đ°", "Accounts_OAuth_GitHub_Enterprise_secret": "ĐĸĐ°Ņ˜ĐŊĐ° ĐēĐģиŅ˜ĐĩĐŊŅ‚Đ°", "Accounts_OAuth_Github_id": "Ид ĐēĐģиŅ˜ĐĩĐŊŅ‚Đ°", "Accounts_OAuth_Github_secret": "ĐĸĐ°Ņ˜ĐŊĐ° ĐēĐģиŅ˜ĐĩĐŊŅ‚Đ°", - "Accounts_OAuth_Gitlab": "ОАŅƒŅ‚Ņ… ОĐŧĐžĐŗŅƒŅ›ĐĩĐŊĐž", + "Accounts_OAuth_Gitlab": "OAuth ĐžĐŧĐžĐŗŅƒŅ›ĐĩĐŊ", "Accounts_OAuth_Gitlab_identity_path": "ПŅƒŅ‚Đ°ŅšĐ° Đ´Đž идĐĩĐŊŅ‚иŅ‚ĐĩŅ‚Đ°", "Accounts_OAuth_Gitlab_secret": "ĐĸĐ°Ņ˜ĐŊĐ° ĐēĐģиŅ˜ĐĩĐŊŅ‚Đ°", - "Accounts_OAuth_Google_callback_url": "ГооĐŗĐģĐĩ ĐŖРЛ Са ĐŋОвŅ€Đ°Ņ‚ĐŊи ĐŋОСив", - "Accounts_OAuth_Google_secret": "ĐŗООĐŗĐģĐĩ ĐĸĐ°Ņ˜ĐŊĐ°", - "Accounts_OAuth_Linkedin": "ЛиĐŊĐēĐĩдИĐŊ ПŅ€Đ¸Ņ˜Đ°Đ˛Đ°", - "Accounts_OAuth_Linkedin_callback_url": "ЛиĐŊĐēĐĩдИĐŊ ĐŖРЛ Са ĐŋОвŅ€Đ°Ņ‚ĐŊи ĐŋОСив", - "Accounts_OAuth_Linkedin_id": "ЛиĐŊĐēĐĩдИĐŊ ИД", - "Accounts_OAuth_Linkedin_secret": "ЛиĐŊĐēĐĩдИĐŊ ĐĸĐ°Ņ˜ĐŊĐ°", - "Accounts_OAuth_Meteor": "ĐŧĐĩŅ‚ĐĩĐžŅ€ ПŅ€Đ¸Ņ˜Đ°Đ˛Đ°", - "Accounts_OAuth_Meteor_id": "ĐŧĐĩŅ‚ĐĩĐžŅ€ ИД", - "Accounts_OAuth_Meteor_secret": "ĐŧĐĩŅ‚ĐĩĐžŅ€ ĐĸĐ°Ņ˜ĐŊĐ°", "Accounts_OAuth_Nextcloud_secret": "ĐĸĐ°Ņ˜ĐŊĐ° ĐēĐģиŅ˜ĐĩĐŊŅ‚Đ°", - "Accounts_OAuth_Proxy_host": "ПŅ€ĐžĐēи ĐĨĐžŅŅ‚", - "Accounts_OAuth_Tokenpass_callback_url": "ĐĸĐžĐēĐĩĐŊĐŋĐ°ŅŅ ĐĻĐ°ĐģĐģйаŅ†Đē ĐŖРЛ", - "Accounts_OAuth_Tokenpass_secret": "ĐĸĐžĐēĐĩĐŊĐŋĐ°ŅŅ ĐĄĐĩŅ†Ņ€ĐĩŅ‚", - "Accounts_OAuth_Twitter": "Ņ‚виŅ‚Ņ‚ĐĩŅ€ ПŅ€Đ¸Ņ˜Đ°Đ˛Đ°", - "Accounts_OAuth_Twitter_callback_url": "ĐĸвиŅ‚Ņ‚ĐĩŅ€ ĐŖРЛ Са ĐŋОвŅ€Đ°Ņ‚ĐŊи ĐŋОСив", - "Accounts_OAuth_Twitter_id": "ĐĸвиŅ‚Ņ‚ĐĩŅ€ БŅ€ĐžŅ˜", - "Accounts_OAuth_Twitter_secret": "Ņ‚виŅ‚Ņ‚ĐĩŅ€ ĐĸĐ°Ņ˜ĐŊĐ°", - "Accounts_OAuth_Wordpress": "ĐŖĐžŅ€Đ´ĐŸŅ€ĐĩŅŅ ПŅ€Đ¸Ņ˜Đ°Đ˛Đ°", + "Accounts_OAuth_Proxy_host": "ПŅ€ĐžĐēŅĐ¸ Ņ…ĐžŅŅ‚", "Accounts_OAuth_Wordpress_authorize_path": "ПŅƒŅ‚Đ°ŅšĐ° Đ´Đž Đ°ŅƒŅ‚ĐžŅ€Đ¸ĐˇĐ°Ņ†Đ¸Ņ˜Đĩ", - "Accounts_OAuth_Wordpress_callback_url": "ВоŅ€Đ´ĐŋŅ€ĐĩŅŅ ĐŖРЛ Са ĐŋОвŅ€Đ°Ņ‚ĐŊи ĐŋОСив", "Accounts_OAuth_Wordpress_identity_path": "ПŅƒŅ‚Đ°ŅšĐ° Đ´Đž идĐĩĐŊŅ‚иŅ‚ĐĩŅ‚Đ°", "Accounts_OAuth_Wordpress_scope": "ОĐŋŅĐĩĐŗ", - "Accounts_OAuth_Wordpress_secret": "ĐŖĐžŅ€Đ´ĐŸŅ€ĐĩŅŅ ĐĸĐ°Ņ˜ĐŊĐ°", "Accounts_OAuth_Wordpress_server_type_custom": "ПŅ€Đ¸ĐģĐ°ĐŗĐžŅ’ĐĩĐŊĐž", "Accounts_OAuth_Wordpress_server_type_wordpress_com": "Wordpress.com", "Accounts_OAuth_Wordpress_token_path": "ПŅƒŅ‚Đ°ŅšĐ° Đ´Đž Ņ‚ĐžĐēĐĩĐŊĐ°", "Accounts_Password_Policy_AtLeastOneLowercase": "НаŅ˜ĐŧĐ°ŅšĐĩ Ņ˜ĐĩĐ´ĐŊĐž ĐŧĐ°ĐģĐž ŅĐģОвО", - "Accounts_Password_Policy_AtLeastOneLowercase_Description": "ПŅ€Đ¸ĐŧĐžŅ€Đ°Đ˛Đ° Đ´Đ° ĐģОСиĐŊĐēĐ° ŅĐ°Đ´Ņ€Đļи ĐŊĐ°Ņ˜ĐŧĐ°ŅšĐĩ Ņ˜ĐĩĐ´ĐŊĐž ĐŧĐ°ĐģĐž ŅĐģОвО.", + "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_AtLeastOneSpecialCharacter_Description": "ЗаŅ…Ņ‚Đĩва Đ´Đ° ĐģОСиĐŊĐēĐ° ŅĐ°Đ´Ņ€Đļи йаŅ€ Ņ˜ĐĩĐ´Đ°ĐŊ ĐŋĐžŅĐĩйаĐŊ ĐēĐ°Ņ€Đ°ĐēŅ‚ĐĩŅ€.", "Accounts_Password_Policy_AtLeastOneUppercase": "НаŅ˜ĐŧĐ°ŅšĐĩ Ņ˜ĐĩĐ´ĐŊĐž вĐĩĐģиĐēĐž ŅĐģОвО", - "Accounts_Password_Policy_AtLeastOneUppercase_Description": "ПŅ€Đ¸ĐŧĐžŅ€Đ°Đ˛Đ° Đ´Đ° ĐģОСиĐŊĐēĐ° ŅĐ°Đ´Ņ€Đļи ĐŊĐ°Ņ˜ĐŧĐ°ŅšĐĩ Ņ˜ĐĩĐ´ĐŊĐž ĐŧĐ°ĐģĐž ŅĐģОвО.", + "Accounts_Password_Policy_AtLeastOneUppercase_Description": "ЗаŅ…Ņ‚Đĩва Đ´Đ° ĐģОСиĐŊĐēĐ° ŅĐ°Đ´Ņ€Đļи ĐŊĐ°Ņ˜ĐŧĐ°ŅšĐĩ Ņ˜ĐĩĐ´ĐŊĐž ĐŧĐ°ĐģĐž ŅĐģОвО.", "Accounts_Password_Policy_Enabled": "ОĐŧĐžĐŗŅƒŅ›Đ¸ ŅĐŧĐĩŅ€ĐŊиŅ†Ņƒ Са ĐģОСиĐŊĐēŅƒ", "Accounts_Password_Policy_Enabled_Description": "Када Ņ˜Đĩ ĐžĐŧĐžĐŗŅƒŅ›ĐĩĐŊĐž, ĐēĐžŅ€Đ¸ŅĐŊиŅ‡ĐēĐĩ ĐģОСиĐŊĐēĐĩ ĐŧĐžŅ€Đ°Ņ˜Ņƒ Đ´Đ° ŅĐĩ ĐŋŅ€Đ¸Đ´Ņ€ĐļаваŅ˜Ņƒ ĐŋĐžŅŅ‚авŅ™ĐĩĐŊиŅ… ŅĐŧĐĩŅ€ĐŊиŅ†Đ°. НаĐŋĐžĐŧĐĩĐŊĐ°: ОвО ŅĐĩ ОдĐŊĐžŅĐ¸ ŅĐ°ĐŧĐž ĐŊĐ° ĐŊОвĐĩ ĐģОСиĐŊĐēĐĩ, Đ° ĐŊĐĩ ĐŋĐžŅŅ‚ĐžŅ˜ĐĩŅ›Đĩ ĐģОСиĐŊĐēĐĩ.", "Accounts_Password_Policy_ForbidRepeatingCharacters": "ЗабŅ€Đ°ĐŊиŅ‚и ĐŋĐžĐŊавŅ™Đ°Ņ˜ŅƒŅ›Đĩ ĐēĐ°Ņ€Đ°ĐēŅ‚ĐĩŅ€Đĩ", @@ -130,20 +107,23 @@ "Accounts_Password_Policy_MinLength": "МиĐŊиĐŧĐ°ĐģĐŊĐ° Đ´ŅƒĐļиĐŊĐ°", "Accounts_Password_Policy_MinLength_Description": "ОŅĐ¸ĐŗŅƒŅ€Đ°Đ˛Đ° Đ´Đ° ĐģОСиĐŊĐēĐĩ ĐŧĐžŅ€Đ°Ņ˜Ņƒ иĐŧĐ°Ņ‚и йаŅ€ ОвŅƒ ĐēĐžĐģиŅ‡Đ¸ĐŊŅƒ СĐŊĐ°ĐēОва. КоŅ€Đ¸ŅŅ‚иŅ‚Đĩ `-1` Đ´Đ° йиŅŅ‚Đĩ ĐžĐŊĐĩĐŧĐžĐŗŅƒŅ›Đ¸Đģи.", "Accounts_PasswordReset": "Đ ĐĩŅĐĩŅ‚ОваŅšĐĩ ĐģОСиĐŊĐēĐĩ", - "Accounts_Registration_AuthenticationServices_Default_Roles": "ĐŖОйиŅ‡Đ°Ņ˜ĐĩĐŊĐĩ ŅƒĐģĐžĐŗĐĩ Са ŅƒŅĐģŅƒĐŗĐĩ ĐŋŅ€ĐžĐ˛Ņ˜ĐĩŅ€Đĩ Đ°ŅƒŅ‚ĐĩĐŊŅ‚иŅ‡ĐŊĐžŅŅ‚и", + "Accounts_Registration_AuthenticationServices_Default_Roles": "ĐŖОйиŅ‡Đ°Ņ˜ĐĩĐŊĐĩ ŅƒĐģĐžĐŗĐĩ Са ŅƒŅĐģŅƒĐŗĐĩ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đĩ Đ°ŅƒŅ‚ĐĩĐŊŅ‚иŅ‡ĐŊĐžŅŅ‚и", "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "ПодŅ€Đ°ĐˇŅƒĐŧĐĩваĐŊи ĐēĐžŅ€Đ¸ŅĐŊиŅ†Đ¸ ŅƒĐģĐžĐŗĐ° (ОдвОŅ˜ĐĩĐŊи ŅĐ° СаŅ€ĐĩСОĐŧ) Ņ›Đĩ йиŅ‚и Đ´Đ°Ņ‚и ĐēĐ°Đ´Đ° ŅĐĩ Ņ€ĐĩĐŗиŅŅ‚Ņ€ŅƒŅ˜Ņƒ ĐŋŅ€ĐĩĐēĐž ŅƒŅĐģŅƒĐŗĐ° Са ĐŋĐžŅ‚вŅ€Ņ’иваŅšĐĩ идĐĩĐŊŅ‚иŅ‚ĐĩŅ‚Đ°", "Accounts_Registration_AuthenticationServices_Enabled": "Đ ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Ņ˜Đ° ĐŋŅƒŅ‚ĐĩĐŧ ŅĐĩŅ€Đ˛Đ¸ŅĐ° Са Đ°ŅƒŅ‚ĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Ņ˜Ņƒ", + "Accounts_Registration_InviteUrlType_Direct": "ДиŅ€ĐĩĐēŅ‚Đ°ĐŊ", + "Accounts_Registration_InviteUrlType_Proxy": "ПŅ€ĐžĐēŅĐ¸", "Accounts_RegistrationForm": "ОбŅ€Đ°ĐˇĐ°Ņ† Са Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Ņ˜Ņƒ", "Accounts_RegistrationForm_Disabled": "ОĐŊĐĩĐŧĐžĐŗŅƒŅ›ĐĩĐŊ", - "Accounts_RegistrationForm_LinkReplacementText": "ОбŅ€Đ°ĐˇĐ°Ņ† Са Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Ņ˜Ņƒ ЛиĐŊĐē ЗаĐŧĐĩĐŊĐ° ĐĸĐĩĐēŅŅ‚", "Accounts_RegistrationForm_Public": "ЈавĐŊи", "Accounts_RegistrationForm_Secret_URL": "ĐĸĐ°Ņ˜ĐŊĐ° ĐŖРЛ Đ°Đ´Ņ€ĐĩŅĐ°", "Accounts_RegistrationForm_SecretURL": "ĐĸĐ°Ņ˜ĐŊĐ° ĐŖРЛ Đ°Đ´Ņ€ĐĩŅĐ° ОйŅ€Đ°ŅŅ†Đ° Са Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Ņ˜Ņƒ", - "Accounts_RegistrationForm_SecretURL_Description": "МоŅ€Đ°Ņ‚Đĩ ОйĐĩСйĐĩдиŅ‚и ŅĐģŅƒŅ‡Đ°Ņ˜ĐŊи ĐŊиС ĐēĐžŅ˜Đ¸ Ņ›Đĩ йиŅ‚и дОдаŅ‚ ĐŊĐ° ваŅˆ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Ņ˜Đĩ ĐŖРЛ. ПŅ€Đ¸ĐŧĐĩŅ€: Ņ…Ņ‚Ņ‚ĐŋŅ://Đ´ĐĩĐŧĐž.Ņ€ĐžŅ†ĐēĐĩŅ‚.Ņ†Ņ…Đ°Ņ‚/Ņ€ĐĩĐŗиŅŅ‚ĐĩŅ€/[secret_hash]", + "Accounts_RegistrationForm_SecretURL_Description": "МоŅ€Đ°Ņ‚Đĩ ОйĐĩСйĐĩдиŅ‚и ŅĐģŅƒŅ‡Đ°Ņ˜ĐŊи ĐŊиС ĐēĐžŅ˜Đ¸ Ņ›Đĩ йиŅ‚и дОдаŅ‚ ĐŊĐ° ваŅˆ ĐŖРЛ Са Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Ņ˜Ņƒ. ПŅ€Đ¸ĐŧĐĩŅ€: `https://open.rocket.chat/register/[secret_hash]`", "Accounts_RequireNameForSignUp": "ЗаŅ…Ņ‚Đĩва иĐŧĐĩ Са Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Ņ˜Ņƒ", "Accounts_RequirePasswordConfirmation": "ЗаŅ…Ņ‚ĐĩваŅ˜ ĐŋĐžŅ‚вŅ€Đ´Ņƒ ĐģОСиĐŊĐēĐĩ", - "Accounts_SearchFields": "ПоŅ™Đ° Са Ņ€Đ°ĐˇĐŧиŅˆŅ™Đ°ŅšĐĩ Ņƒ ĐŋĐžŅ‚Ņ€Đ°ĐˇĐ¸", - "Accounts_SetDefaultAvatar": "ПодĐĩŅĐ¸ ĐŋОдŅ€Đ°ĐˇŅƒĐŧĐĩваĐŊи АваŅ‚Đ°Ņ€", + "Accounts_SearchFields": "ПоŅ™Đ° Са Ņ€Đ°ĐˇĐŧĐ°Ņ‚Ņ€Đ°ŅšĐĩ Ņƒ ĐŋĐžŅ‚Ņ€Đ°ĐˇĐ¸", + "Accounts_Send_Email_When_Activating": "ПоŅˆĐ°Ņ™Đ¸ иĐŧĐĩŅ˜Đģ ĐēĐžŅ€Đ¸ŅĐŊиĐēŅƒ ĐēĐ°Đ´Đ° Ņ˜Đĩ ĐēĐžŅ€Đ¸ŅĐŊиĐē Đ°ĐēŅ‚ивиŅ€Đ°ĐŊ", + "Accounts_Send_Email_When_Deactivating": "ПоŅˆĐ°Ņ™Đ¸ иĐŧĐĩŅ˜Đģ ĐēĐžŅ€Đ¸ŅĐŊиĐēŅƒ ĐēĐ°Đ´Đ° Ņ˜Đĩ ĐēĐžŅ€Đ¸ŅĐŊиĐē Đ´ĐĩĐ°ĐēŅ‚ивиŅ€Đ°ĐŊ", + "Accounts_SetDefaultAvatar": "ПодĐĩŅĐ¸ ĐŋОдŅ€Đ°ĐˇŅƒĐŧĐĩваĐŊи аваŅ‚Đ°Ņ€", "Accounts_SetDefaultAvatar_Description": "ПоĐēŅƒŅˆĐ°Đ˛Đ° Đ´Đ° ОдŅ€Đĩди ĐŋОдŅ€Đ°ĐˇŅƒĐŧĐĩваĐŊи аваŅ‚Đ°Ņ€ ĐŊĐ° ĐžŅĐŊОвŅƒ ОАŅƒŅ‚Ņ… ĐŊĐ°ĐģĐžĐŗĐ° иĐģи ГŅ€Đ°Đ˛Đ°Ņ‚Đ°Ņ€", "Accounts_ShowFormLogin": "ПŅ€Đ¸ĐēĐ°Đļи ĐŋŅ€ĐĩĐ´ĐĩŅ„иĐŊиŅĐ°ĐŊи ОйŅ€Đ°ĐˇĐ°Ņ† ĐŋŅ€Đ¸Ņ˜Đ°Đ˛Đĩ", "Accounts_TwoFactorAuthentication_Enabled": "ОĐŧĐžĐŗŅƒŅ›Đ¸ двОŅŅ‚Ņ€ŅƒĐēŅƒ вĐĩŅ€Đ¸Ņ„иĐēĐ°Ņ†Đ¸Ņ˜Ņƒ ŅĐ° TOTP", @@ -1893,12 +1873,19 @@ "Retail": "МаĐģĐžĐŋŅ€ĐžĐ´Đ°Ņ˜Đ°", "Retention_setting_changed_successfully": "ПоŅŅ‚авĐēĐ° ĐŋĐžĐģиŅĐĩ Са СадŅ€ĐļаваŅšĐĩ ŅƒŅĐŋĐĩŅˆĐŊĐž ŅĐĩ ĐŋŅ€ĐžĐŧĐĩĐŊиĐģĐ°", "RetentionPolicy": "ПоĐģиŅ‚иĐēĐ° СадŅ€ĐļаваŅšĐ°", + "RetentionPolicy_AppliesToChannels": "ПŅ€Đ¸ĐŧĐĩŅšŅƒŅ˜Đĩ ŅĐĩ ĐŊĐ° ĐēĐ°ĐŊĐ°ĐģĐĩ", + "RetentionPolicy_AppliesToDMs": "ПŅ€Đ¸ĐŧĐĩŅšŅƒŅ˜Đĩ ŅĐĩ ĐŊĐ° диŅ€ĐĩĐēŅ‚ĐŊĐĩ ĐŋĐžŅ€ŅƒĐēĐĩ", + "RetentionPolicy_AppliesToGroups": "ПŅ€Đ¸ĐŧŅ˜ĐĩŅšŅƒŅ˜Đĩ ŅĐĩ ĐŊĐ° ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊĐĩ ĐŗŅ€ŅƒĐŋĐĩ", "RetentionPolicy_Description": "АŅƒŅ‚ĐžĐŧĐ°Ņ‚ŅĐēи иСйŅ€Đ¸ŅˆĐĩ ŅŅ‚Đ°Ņ€Đĩ ĐŋĐžŅ€ŅƒĐēĐĩ ĐŋŅ€ĐĩĐēĐž ваŅˆĐĩĐŗ Đ ĐžŅ†ĐēĐĩŅ‚.ĐĻŅ…Đ°Ņ‚ иĐŊŅŅ‚Đ°ĐŊŅ†Đ°.", "RetentionPolicy_Enabled": "ОĐŧĐžĐŗŅƒŅ›ĐĩĐŊĐž", "RetentionPolicy_ExcludePinned": "ИŅĐēŅ™ŅƒŅ‡Đ¸Ņ‚Đĩ СаĐēĐ°Ņ‡ĐĩĐŊĐĩ ĐŋĐžŅ€ŅƒĐēĐĩ", "RetentionPolicy_FilesOnly": "ИСйŅ€Đ¸ŅˆĐ¸Ņ‚Đĩ ŅĐ°ĐŧĐž Đ´Đ°Ņ‚ĐžŅ‚ĐĩĐēĐĩ", "RetentionPolicy_FilesOnly_Description": "ĐĄĐ°ĐŧĐž Đ´Đ°Ņ‚ĐžŅ‚ĐĩĐēĐĩ Ņ›Đĩ йиŅ‚и иСйŅ€Đ¸ŅĐ°ĐŊĐĩ, ŅĐ°ĐŧĐĩ ĐŋĐžŅ€ŅƒĐēĐĩ Ņ›Đĩ ĐžŅŅ‚Đ°Ņ‚и ĐŊĐ° ĐŧĐĩŅŅ‚Ņƒ.", "RetentionPolicy_MaxAge": "МаĐēŅĐ¸ĐŧĐ°ĐģĐŊĐ° ŅŅ‚Đ°Ņ€ĐžŅŅ‚ ĐŋĐžŅ€ŅƒĐēĐĩ", + "RetentionPolicy_MaxAge_Channels": "МаĐēŅĐ¸ĐŧĐ°ĐģĐŊĐ° ŅŅ‚Đ°Ņ€ĐžŅŅ‚ ĐŋĐžŅ€ŅƒĐēĐĩ Ņƒ ĐēĐ°ĐŊĐ°ĐģиĐŧĐ°", + "RetentionPolicy_MaxAge_Description": "ОбŅ€Đ¸ŅˆĐ¸Ņ‚Đĩ ŅĐ˛Đĩ ĐŋĐžŅ€ŅƒĐēĐĩ ŅŅ‚Đ°Ņ€Đ¸Ņ˜Đĩ Од ОвĐĩ вŅ€ĐĩĐ´ĐŊĐžŅŅ‚и, Ņƒ Đ´Đ°ĐŊиĐŧĐ°", + "RetentionPolicy_MaxAge_DMs": "МаĐēŅĐ¸ĐŧĐ°ĐģĐŊĐ° ŅŅ‚Đ°Ņ€ĐžŅŅ‚ ĐŋĐžŅ€ŅƒĐēĐĩ Ņƒ диŅ€ĐĩĐēŅ‚ĐŊиĐŧ ĐŋĐžŅ€ŅƒĐēĐ°ĐŧĐ°", + "RetentionPolicy_MaxAge_Groups": "МаĐēŅĐ¸ĐŧĐ°ĐģĐŊĐ° ŅŅ‚Đ°Ņ€ĐžŅŅ‚ ĐŋĐžŅ€ŅƒĐēĐĩ Ņƒ ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊиĐŧ ĐŗŅ€ŅƒĐŋĐ°ĐŧĐ°", "RetentionPolicy_Precision": "ĐĸиĐŧĐĩŅ€ ПŅ€ĐĩŅ†Đ¸ŅĐ¸ĐžĐŊ", "RetentionPolicy_Precision_Description": "КоĐģиĐēĐž Ņ‡ĐĩŅŅ‚Đž йи Ņ‚Ņ€ĐĩйаĐģĐž Đ´Đ° ŅĐĩ ĐŋĐžĐēŅ€ĐĩĐŊĐĩ Ņ‚иĐŧĐĩŅ€ Са Ņ€ĐĩСаŅšĐĩ. ПоŅŅ‚авŅ™Đ°ŅšĐĩĐŧ ОвĐĩ ĐŊĐ° ĐŋŅ€ĐĩŅ†Đ¸ĐˇĐŊŅƒ вŅ€Đ¸Ņ˜ĐĩĐ´ĐŊĐžŅŅ‚ Ņ‡Đ¸ĐŊи ĐēĐ°ĐŊĐ°ĐģĐĩ ŅĐ° ĐąŅ€ĐˇĐ¸Đŧ вŅ€ĐĩĐŧĐĩĐŊŅĐēиĐŧ СадŅ€ĐļаваŅšĐĩĐŧ йОŅ™Đĩ Ņ„ŅƒĐŊĐēŅ†Đ¸ĐžĐŊиŅ€Đ°Ņ‚и, Đ°Đģи йи ĐŧĐžĐŗĐģĐ° Đ´Đ° ĐēĐžŅˆŅ‚Đ°Ņ˜Ņƒ дОдаŅ‚ĐŊŅƒ ĐŧĐžŅ› ĐŋŅ€ĐžŅ†ĐĩŅĐ¸Ņ€Đ°ŅšĐ° ĐŊĐ° вĐĩĐģиĐēиĐŧ СаŅ˜ĐĩĐ´ĐŊиŅ†Đ°ĐŧĐ°.", "RetentionPolicyRoom_Enabled": "АŅƒŅ‚ĐžĐŧĐ°Ņ‚ŅĐēи ĐŋŅ€ĐĩĐąŅ€Đ¸ŅĐ°Ņ‚и ŅŅ‚Đ°Ņ€Đĩ ĐŋĐžŅ€ŅƒĐēĐĩ", @@ -2566,4 +2553,4 @@ "registration.component.form.sendConfirmationEmail": "ПоŅˆĐ°Ņ™Đ¸ ĐŋĐžŅ‚вŅ€Đ´ĐŊŅƒ ĐŋĐžŅ€ŅƒĐēŅƒ", "Enterprise": "ПŅ€ĐĩĐ´ŅƒĐˇĐĩŅ›Đĩ", "UpgradeToGetMore_engagement-dashboard_Title": "АĐŊĐ°ĐģиŅ‚иĐēĐ°" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/sv.i18n.json b/packages/i18n/src/locales/sv.i18n.json index 3436669c7e65..4e436fe6c538 100644 --- a/packages/i18n/src/locales/sv.i18n.json +++ b/packages/i18n/src/locales/sv.i18n.json @@ -4071,6 +4071,9 @@ "RetentionPolicy_Advanced_Precision": "Använd inställningar fÃļr avancerad lagringspolicy", "RetentionPolicy_Advanced_Precision_Cron": "Använd cron fÃļr avancerad lagringspolicy", "RetentionPolicy_Advanced_Precision_Cron_Description": "Hur ofta gallringstimern ska kÃļras anges av uttrycket fÃļr cron-jobb. Om du anger ett mer exakt värde fÃļr den fungerar kanaler med korta lagringstider bättre, men det kan kräva extra bearbetningskraft fÃļr stÃļrre communityn.", + "RetentionPolicy_AppliesToChannels": "Gäller kanaler", + "RetentionPolicy_AppliesToDMs": "Gäller direktmeddelanden", + "RetentionPolicy_AppliesToGroups": "Gäller privata grupper", "RetentionPolicy_Description": "Gallra automatiskt gamla meddelanden Ãļver din Rocket.Chat-instans.", "RetentionPolicy_DoNotPruneDiscussion": "Gallra inte diskussionsmeddelanden", "RetentionPolicy_DoNotPrunePinned": "Gallra inte pinnade meddelanden", @@ -4080,6 +4083,10 @@ "RetentionPolicy_FilesOnly": "Ta bara bort filer", "RetentionPolicy_FilesOnly_Description": "Endast filer kommer att raderas, meddelandena kommer att stanna kvar.", "RetentionPolicy_MaxAge": "Maximal meddelandeÃĨlder", + "RetentionPolicy_MaxAge_Channels": "Maximal meddelandeÃĨlder i kanaler", + "RetentionPolicy_MaxAge_Description": "Gallra alla meddelanden som är äldre än det här värdet, i dagar", + "RetentionPolicy_MaxAge_DMs": "Maximal meddelandeÃĨlder i direktmeddelanden", + "RetentionPolicy_MaxAge_Groups": "Maximal meddelandeÃĨlder i privata grupper", "RetentionPolicy_Precision": "Precision fÃļr timer", "RetentionPolicy_Precision_Description": "Hur ofta timern fÃļr gallring ska kÃļras. Om du ställer in det här pÃĨ ett mer exakt värde fungerar kanaler med snabba timers bättre, men det kan kosta extra processorkraft i stora communities.", "RetentionPolicyRoom_Enabled": "Gallra automatiskt gamla meddelanden", @@ -5664,6 +5671,7 @@ "Always_send_the_transcript_to_contacts_at_the_end_of_the_conversations": "Skicka alltid utskriften till kontakterna i slutet av samtalen.", "Export_conversation_transcript_as_PDF": "Exportera samtalsutskrift som PDF", "Omnichannel_transcript_email": "Skicka utskrift av chatten via e-post.", + "Accounts_Default_User_Preferences_omnichannelTranscriptEmail_Description": "Skicka alltid utskriften till kontakterna i slutet av samtalen.", "Omnichannel_transcript_pdf": "Exportera chattutskrift som PDF.", "Accounts_Default_User_Preferences_omnichannelTranscriptPDF_Description": "Exportera alltid utskriften som PDF-fil i slutet av samtalen.", "Contact_email": "Kontakt e-post", @@ -5746,4 +5754,4 @@ "Theme_Appearence": "Utseende fÃļr tema", "Enterprise": "Enterprise", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/ta-IN.i18n.json b/packages/i18n/src/locales/ta-IN.i18n.json index 9e37a50bd883..7a2c562d4fff 100644 --- a/packages/i18n/src/locales/ta-IN.i18n.json +++ b/packages/i18n/src/locales/ta-IN.i18n.json @@ -2060,12 +2060,19 @@ "Retail": "āŽšāŽŋāŽ˛ā¯āŽ˛āŽąā¯ˆ", "Retention_setting_changed_successfully": "āŽ¤āŽ•ā¯āŽ•āŽĩā¯ˆāŽĒā¯āŽĒā¯ āŽ•ā¯ŠāŽŗā¯āŽ•ā¯ˆ āŽ…āŽŽā¯ˆāŽĒā¯āŽĒā¯ āŽĩā¯†āŽąā¯āŽąāŽŋāŽ•āŽ°āŽŽāŽžāŽ• āŽŽāŽžāŽąā¯āŽąāŽĒā¯āŽĒāŽŸā¯āŽŸāŽ¤ā¯", "RetentionPolicy": "Retention āŽ•ā¯ŠāŽŗā¯āŽ•ā¯ˆ", + "RetentionPolicy_AppliesToChannels": "āŽšā¯‡āŽŠāŽ˛ā¯āŽ•āŽŗā¯āŽ•ā¯āŽ•ā¯ āŽĒā¯ŠāŽ°ā¯āŽ¨ā¯āŽ¤ā¯āŽŽā¯", + "RetentionPolicy_AppliesToDMs": "āŽ¨ā¯‡āŽ°āŽŸāŽŋ āŽšā¯†āŽ¯ā¯āŽ¤āŽŋāŽ•āŽŗā¯āŽ•ā¯āŽ•ā¯ āŽĒā¯ŠāŽ°ā¯āŽ¨ā¯āŽ¤ā¯āŽŽā¯", + "RetentionPolicy_AppliesToGroups": "āŽ¤āŽŠāŽŋāŽ¯āŽžāŽ°ā¯ āŽ•ā¯āŽ´ā¯āŽ•ā¯āŽ•āŽŗā¯āŽ•ā¯āŽ•ā¯ āŽĒā¯ŠāŽ°ā¯āŽ¨ā¯āŽ¤ā¯āŽŽā¯", "RetentionPolicy_Description": "āŽ‰āŽ™ā¯āŽ•āŽŗā¯ āŽ°āŽžāŽ•ā¯āŽ•ā¯†āŽŸā¯ āŽŽā¯āŽ´ā¯āŽĩāŽ¤ā¯āŽŽā¯ āŽĒāŽ´ā¯ˆāŽ¯ āŽšā¯†āŽ¯ā¯āŽ¤āŽŋāŽ•āŽŗā¯ˆ āŽ¤āŽžāŽŠāŽžāŽ•āŽĩā¯‡ āŽĒā¯āŽ°āŽŸā¯āŽŸā¯āŽ•āŽŋāŽąāŽ¤ā¯.", "RetentionPolicy_Enabled": "āŽ‡āŽ¯āŽ•ā¯āŽ•āŽĒā¯āŽĒāŽŸā¯āŽŸāŽ¤ā¯", "RetentionPolicy_ExcludePinned": "āŽĒāŽŋāŽŠā¯ āŽšā¯†āŽ¯ā¯āŽ¤āŽŋāŽ•āŽŗā¯ˆ āŽĩāŽŋāŽ˛āŽ•ā¯āŽ•āŽĩā¯āŽŽā¯", "RetentionPolicy_FilesOnly": "āŽ•ā¯‹āŽĒā¯āŽĒā¯āŽ•āŽŗā¯ˆ āŽŽāŽŸā¯āŽŸā¯āŽŽā¯ āŽ¨ā¯€āŽ•ā¯āŽ•ā¯", "RetentionPolicy_FilesOnly_Description": "āŽ•ā¯‹āŽĒā¯āŽĒā¯āŽ•āŽŗā¯ āŽŽāŽŸā¯āŽŸā¯āŽŽā¯‡ āŽ¨ā¯€āŽ•ā¯āŽ•āŽĒā¯āŽĒāŽŸā¯āŽŽā¯, āŽšā¯†āŽ¯ā¯āŽ¤āŽŋāŽ•āŽŗā¯āŽŽā¯ āŽ¤āŽ™ā¯āŽ•ā¯āŽ¤āŽ˛ā¯āŽŸāŽŠā¯ āŽ‡āŽ°ā¯āŽ•ā¯āŽ•ā¯āŽŽā¯.", "RetentionPolicy_MaxAge": "āŽ…āŽ¤āŽŋāŽ•āŽĒāŽŸā¯āŽš āŽšā¯†āŽ¯ā¯āŽ¤āŽŋ āŽĩāŽ¯āŽ¤ā¯", + "RetentionPolicy_MaxAge_Channels": "āŽšā¯‡āŽŠāŽ˛ā¯āŽ•āŽŗāŽŋāŽ˛ā¯ āŽ…āŽ¤āŽŋāŽ•āŽĒāŽŸā¯āŽš āŽšā¯†āŽ¯ā¯āŽ¤āŽŋ āŽĩāŽ¯āŽ¤ā¯", + "RetentionPolicy_MaxAge_Description": "āŽ¨āŽžāŽŸā¯āŽ•āŽŗāŽŋāŽ˛ā¯ āŽ‡āŽ¨ā¯āŽ¤ āŽŽāŽ¤āŽŋāŽĒā¯āŽĒā¯ˆ āŽĩāŽŋāŽŸ āŽĒāŽ´ā¯ˆāŽ¯ āŽŽāŽ˛ā¯āŽ˛āŽž āŽšā¯†āŽ¯ā¯āŽ¤āŽŋāŽ•āŽŗā¯ˆāŽ¯ā¯āŽŽā¯ āŽĒā¯āŽ°ā¯ˆāŽ¯ā¯āŽ™ā¯āŽ•āŽŗā¯", + "RetentionPolicy_MaxAge_DMs": "āŽ¨ā¯‡āŽ°āŽŸāŽŋāŽ¯āŽžāŽŠ āŽšā¯†āŽ¯ā¯āŽ¤āŽŋāŽ•āŽŗāŽŋāŽ˛ā¯ āŽ…āŽ¤āŽŋāŽ•āŽĒāŽŸā¯āŽš āŽšā¯†āŽ¯ā¯āŽ¤āŽŋ āŽĩāŽ¯āŽ¤ā¯", + "RetentionPolicy_MaxAge_Groups": "āŽ¤āŽŠāŽŋāŽĒā¯āŽĒāŽŸā¯āŽŸ āŽ•ā¯āŽ´ā¯āŽ•ā¯āŽ•āŽŗāŽŋāŽ˛ā¯ āŽ…āŽ¤āŽŋāŽ•āŽĒāŽŸā¯āŽš āŽšā¯†āŽ¯ā¯āŽ¤āŽŋ āŽĩāŽ¯āŽ¤ā¯", "RetentionPolicy_Precision": "āŽŸā¯ˆāŽŽāŽ°ā¯ āŽ¤ā¯āŽ˛ā¯āŽ˛āŽŋāŽ¯āŽŽā¯", "RetentionPolicy_Precision_Description": "āŽŽāŽĒā¯āŽĒāŽŸāŽŋ āŽ…āŽŸāŽŋāŽ•ā¯āŽ•āŽŸāŽŋ āŽ•āŽŋāŽŗā¯āŽŗā¯āŽ¤āŽ˛ā¯ āŽŸā¯ˆāŽŽāŽ°ā¯ āŽ‡āŽ¯āŽ•ā¯āŽ• āŽĩā¯‡āŽŖā¯āŽŸā¯āŽŽā¯. āŽ‡āŽ¤ā¯ āŽŽāŽŋāŽ•āŽĩā¯āŽŽā¯ āŽ¤ā¯āŽ˛ā¯āŽ˛āŽŋāŽ¯āŽŽāŽžāŽŠ āŽŽāŽ¤āŽŋāŽĒā¯āŽĒā¯ˆ āŽ…āŽŽā¯ˆāŽĒā¯āŽĒāŽ¤āŽŠā¯ āŽŽā¯‚āŽ˛āŽŽā¯ āŽĩā¯‡āŽ•āŽŽāŽžāŽ• āŽ¤āŽ•ā¯āŽ•āŽĩā¯ˆāŽ¤ā¯āŽ¤ā¯āŽ•ā¯āŽ•ā¯ŠāŽŗā¯āŽŗā¯āŽŽā¯ āŽ¨ā¯‡āŽ°āŽ¤ā¯āŽ¤ā¯ˆ āŽ•ā¯ŠāŽŖā¯āŽŸ āŽšā¯‡āŽŠāŽ˛ā¯āŽ•āŽŗā¯ āŽšāŽŋāŽąāŽĒā¯āŽĒāŽžāŽ• āŽšā¯†āŽ¯āŽ˛ā¯āŽĒāŽŸā¯āŽ•āŽŋāŽŠā¯āŽąāŽŠ, āŽ†āŽŠāŽžāŽ˛ā¯ āŽĒā¯†āŽ°āŽŋāŽ¯ āŽšāŽŽā¯‚āŽ•āŽ™ā¯āŽ•āŽŗāŽŋāŽ˛ā¯ āŽ•ā¯‚āŽŸā¯āŽ¤āŽ˛ā¯ āŽšā¯†āŽ¯āŽ˛āŽžāŽ•ā¯āŽ• āŽšāŽ•ā¯āŽ¤āŽŋ āŽšā¯†āŽ˛āŽĩāŽžāŽ•ā¯āŽŽā¯.", "RetentionPolicyRoom_Enabled": "āŽĒāŽ´ā¯ˆāŽ¯ āŽšā¯†āŽ¯ā¯āŽ¤āŽŋāŽ•āŽŗā¯ˆ āŽ¤āŽžāŽŠāŽžāŽ• āŽ•āŽŋāŽŗā¯āŽŗā¯āŽ•āŽŋāŽąā¯‡āŽŠā¯", @@ -2756,4 +2763,4 @@ "registration.component.form.sendConfirmationEmail": "āŽ‰āŽąā¯āŽ¤āŽŋāŽĒā¯āŽĒāŽŸā¯āŽ¤ā¯āŽ¤ā¯āŽŽā¯ āŽŽāŽŋāŽŠā¯āŽŠāŽžā¯āŽšāŽ˛ā¯ āŽ…āŽŠā¯āŽĒā¯āŽĒāŽĩā¯āŽŽā¯", "Enterprise": "āŽ¨āŽŋāŽąā¯āŽĩāŽŠ", "UpgradeToGetMore_engagement-dashboard_Title": "āŽ…āŽŠāŽ˛āŽŋāŽŸā¯āŽŸāŽŋāŽ•ā¯āŽ¸ā¯" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/th-TH.i18n.json b/packages/i18n/src/locales/th-TH.i18n.json index 2f2bb357256d..7d393a3034fb 100644 --- a/packages/i18n/src/locales/th-TH.i18n.json +++ b/packages/i18n/src/locales/th-TH.i18n.json @@ -2053,12 +2053,19 @@ "Retail": "ā¸‚ā¸˛ā¸ĸā¸›ā¸Ĩā¸ĩā¸", "Retention_setting_changed_successfully": "āš€ā¸›ā¸Ĩā¸ĩāšˆā¸ĸā¸™ā¸ā¸˛ā¸Ŗā¸•ā¸ąāš‰ā¸‡ā¸„āšˆā¸˛ā¸™āš‚ā¸ĸā¸šā¸˛ā¸ĸā¸ā¸˛ā¸Ŗāš€ā¸āš‡ā¸šā¸Ŗā¸ąā¸ā¸Šā¸˛ā¸Ēā¸ŗāš€ā¸Ŗāš‡ā¸ˆāšā¸Ĩāš‰ā¸§", "RetentionPolicy": "ā¸™āš‚ā¸ĸā¸šā¸˛ā¸ĸā¸ā¸˛ā¸Ŗāš€ā¸āš‡ā¸šā¸Ŗā¸ąā¸ā¸Šā¸˛", + "RetentionPolicy_AppliesToChannels": "āšƒā¸Šāš‰ā¸ā¸ąā¸šā¸Šāšˆā¸­ā¸‡", + "RetentionPolicy_AppliesToDMs": "āšƒā¸Šāš‰ā¸ā¸ąā¸šā¸‚āš‰ā¸­ā¸„ā¸§ā¸˛ā¸Ąāš‚ā¸”ā¸ĸā¸•ā¸Ŗā¸‡", + "RetentionPolicy_AppliesToGroups": "āšƒā¸Šāš‰ā¸ā¸ąā¸šā¸ā¸Ĩā¸¸āšˆā¸Ąā¸Ēāšˆā¸§ā¸™ā¸•ā¸ąā¸§", "RetentionPolicy_Description": "ā¸Ĩā¸šā¸‚āš‰ā¸­ā¸„ā¸§ā¸˛ā¸Ąāš€ā¸āšˆā¸˛ āš† āšƒā¸™ā¸•ā¸ąā¸§ā¸­ā¸ĸāšˆā¸˛ā¸‡ Rocket.Chat ā¸‚ā¸­ā¸‡ā¸„ā¸¸ā¸“āš‚ā¸”ā¸ĸā¸­ā¸ąā¸•āš‚ā¸™ā¸Ąā¸ąā¸•ā¸´", "RetentionPolicy_Enabled": "āš€ā¸›ā¸´ā¸”ā¸ā¸˛ā¸Ŗāšƒā¸Šāš‰ā¸‡ā¸˛ā¸™", "RetentionPolicy_ExcludePinned": "āš„ā¸Ąāšˆā¸Ŗā¸§ā¸Ąā¸‚āš‰ā¸­ā¸„ā¸§ā¸˛ā¸Ąā¸•ā¸Ŗā¸ļā¸‡", "RetentionPolicy_FilesOnly": "ā¸Ĩā¸šāš€ā¸‰ā¸žā¸˛ā¸°āš„ā¸Ÿā¸ĨāšŒāš€ā¸—āšˆā¸˛ā¸™ā¸ąāš‰ā¸™", "RetentionPolicy_FilesOnly_Description": "ā¸Ŗā¸°ā¸šā¸šā¸ˆā¸°ā¸Ĩā¸šāš€ā¸‰ā¸žā¸˛ā¸°āš„ā¸Ÿā¸ĨāšŒāš€ā¸—āšˆā¸˛ā¸™ā¸ąāš‰ā¸™ā¸‚āš‰ā¸­ā¸„ā¸§ā¸˛ā¸Ąā¸ˆā¸°ā¸­ā¸ĸā¸šāšˆāšƒā¸™ā¸Ēā¸–ā¸˛ā¸™ā¸—ā¸ĩāšˆ", "RetentionPolicy_MaxAge": "ā¸­ā¸˛ā¸ĸā¸¸ā¸‚āš‰ā¸­ā¸„ā¸§ā¸˛ā¸Ąā¸Ēā¸šā¸‡ā¸Ēā¸¸ā¸”", + "RetentionPolicy_MaxAge_Channels": "ā¸­ā¸˛ā¸ĸā¸¸ā¸‚āš‰ā¸­ā¸„ā¸§ā¸˛ā¸Ąā¸Ēā¸šā¸‡ā¸Ēā¸¸ā¸”āšƒā¸™ā¸Šāšˆā¸­ā¸‡", + "RetentionPolicy_MaxAge_Description": "ā¸Ĩā¸šā¸‚āš‰ā¸­ā¸„ā¸§ā¸˛ā¸Ąā¸—ā¸ąāš‰ā¸‡ā¸Ģā¸Ąā¸”ā¸—ā¸ĩāšˆāš€ā¸āšˆā¸˛ā¸ā¸§āšˆā¸˛ā¸„āšˆā¸˛ā¸™ā¸ĩāš‰āš€ā¸›āš‡ā¸™ā¸§ā¸ąā¸™", + "RetentionPolicy_MaxAge_DMs": "ā¸­ā¸˛ā¸ĸā¸¸ā¸‚āš‰ā¸­ā¸„ā¸§ā¸˛ā¸Ąā¸Ēā¸šā¸‡ā¸Ēā¸¸ā¸”āšƒā¸™ā¸‚āš‰ā¸­ā¸„ā¸§ā¸˛ā¸Ąāš‚ā¸”ā¸ĸā¸•ā¸Ŗā¸‡", + "RetentionPolicy_MaxAge_Groups": "ā¸­ā¸˛ā¸ĸā¸¸ā¸‚āš‰ā¸­ā¸„ā¸§ā¸˛ā¸Ąā¸Ēā¸šā¸‡ā¸Ēā¸¸ā¸”āšƒā¸™ā¸ā¸Ĩā¸¸āšˆā¸Ąā¸Ēāšˆā¸§ā¸™ā¸•ā¸ąā¸§", "RetentionPolicy_Precision": "ā¸ˆā¸ąā¸šāš€ā¸§ā¸Ĩā¸˛āšā¸Ąāšˆā¸™ā¸ĸā¸ŗ", "RetentionPolicy_Precision_Description": "ā¸„ā¸§ā¸Ŗā¸ˆā¸ąā¸šāš€ā¸§ā¸Ĩā¸˛ā¸Ĩā¸šā¸ā¸žā¸Ŗā¸¸ā¸™ā¸šāšˆā¸­ā¸ĸāšā¸„āšˆāš„ā¸Ģā¸™ ā¸ā¸˛ā¸Ŗā¸•ā¸ąāš‰ā¸‡ā¸„āšˆā¸˛ā¸™ā¸ĩāš‰āš€ā¸›āš‡ā¸™ā¸„āšˆā¸˛ā¸—ā¸ĩāšˆāšā¸Ąāšˆā¸™ā¸ĸā¸ŗā¸ĸā¸´āšˆā¸‡ā¸‚ā¸ļāš‰ā¸™ā¸—ā¸ŗāšƒā¸Ģāš‰ā¸Šāšˆā¸­ā¸‡ā¸—ā¸ĩāšˆā¸Ąā¸ĩā¸•ā¸ąā¸§ā¸ˆā¸ąā¸šāš€ā¸§ā¸Ĩā¸˛ā¸ā¸˛ā¸Ŗāš€ā¸āš‡ā¸šā¸Ŗā¸ąā¸ā¸Šā¸˛ā¸­ā¸ĸāšˆā¸˛ā¸‡ā¸Ŗā¸§ā¸”āš€ā¸Ŗāš‡ā¸§ā¸—ā¸ŗā¸‡ā¸˛ā¸™āš„ā¸”āš‰ā¸”ā¸ĩā¸‚ā¸ļāš‰ā¸™ āšā¸•āšˆā¸­ā¸˛ā¸ˆā¸Ąā¸ĩā¸„āšˆā¸˛āšƒā¸Šāš‰ā¸ˆāšˆā¸˛ā¸ĸāš€ā¸žā¸´āšˆā¸Ąā¸‚ā¸ļāš‰ā¸™āšƒā¸™ā¸Šā¸¸ā¸Ąā¸Šā¸™ā¸‚ā¸™ā¸˛ā¸”āšƒā¸Ģā¸āšˆ", "RetentionPolicyRoom_Enabled": "ā¸•ā¸ąā¸”ā¸„āšˆā¸˛ā¸‚āš‰ā¸­ā¸„ā¸§ā¸˛ā¸Ąāš€ā¸āšˆā¸˛āš‚ā¸”ā¸ĸā¸­ā¸ąā¸•āš‚ā¸™ā¸Ąā¸ąā¸•ā¸´", @@ -2742,4 +2749,4 @@ "registration.component.form.sendConfirmationEmail": "ā¸Ēāšˆā¸‡ā¸­ā¸ĩāš€ā¸Ąā¸Ĩā¸ĸā¸ˇā¸™ā¸ĸā¸ąā¸™", "Enterprise": "ā¸­ā¸‡ā¸„āšŒā¸ā¸Ŗ", "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/tr.i18n.json b/packages/i18n/src/locales/tr.i18n.json index ce2e75ee13b1..59b0c8927e23 100644 --- a/packages/i18n/src/locales/tr.i18n.json +++ b/packages/i18n/src/locales/tr.i18n.json @@ -2458,12 +2458,19 @@ "Retail": "Perakende", "Retention_setting_changed_successfully": "Saklama politikasÄą ayarÄą başarÄąyla değiştirildi", "RetentionPolicy": "AlÄąkoyma politikasÄą", + "RetentionPolicy_AppliesToChannels": "Kanallara uygulanÄąr", + "RetentionPolicy_AppliesToDMs": "Doğrudan iletilere uygulanÄąr", + "RetentionPolicy_AppliesToGroups": "Özel gruplara uygulanÄąr", "RetentionPolicy_Description": "Eski iletileri otomatik olarak Rocket.Chat Ãļrneğinizde yayÄąnlar.", "RetentionPolicy_Enabled": "Etkin", "RetentionPolicy_ExcludePinned": "Sabitlenmiş iletileri dÄąÅŸÄąnda tut", "RetentionPolicy_FilesOnly": "Sadece dosyalarÄą sil", "RetentionPolicy_FilesOnly_Description": "Sadece dosyalar silinecek, mesajlarÄąn kendisi yerinde kalacaktÄąr.", "RetentionPolicy_MaxAge": "Maksimum ileti yaÅŸÄą", + "RetentionPolicy_MaxAge_Channels": "Kanallarda maksimum ileti yaÅŸÄą", + "RetentionPolicy_MaxAge_Description": "Bu değerde gÃŧnden daha eski olan tÃŧm iletileri buda ", + "RetentionPolicy_MaxAge_DMs": "Doğrudan iletilerde maksimum ileti yaÅŸÄą", + "RetentionPolicy_MaxAge_Groups": "Özel gruplarda maksimum ileti yaÅŸÄą", "RetentionPolicy_Precision": "ZamanlayÄącÄą Hassasiyeti", "RetentionPolicy_Precision_Description": "Budama zamanlayÄącÄą kaç kez çalÄąÅŸtÄąrÄąlmalÄądÄąr. Bunu daha hassas bir değere ayarlamak, hÄązlÄą saklama zamanlayÄącÄąlarÄąna sahip kanallarÄąn daha iyi çalÄąÅŸmasÄąnÄą sağlar, ancak bÃŧyÃŧk topluluklarda ekstra işlem gÃŧcÃŧne mal olabilir.", "RetentionPolicyRoom_Enabled": "Eski iletileri otomatik olarak buda", @@ -3264,4 +3271,4 @@ "RegisterWorkspace_Features_Omnichannel_Title": "Çoklu Kanal", "Enterprise": "Kuruluş", "UpgradeToGetMore_engagement-dashboard_Title": "MantÄąksal Analiz" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/uk.i18n.json b/packages/i18n/src/locales/uk.i18n.json index 55e9381c12c0..b8e27a4f8c34 100644 --- a/packages/i18n/src/locales/uk.i18n.json +++ b/packages/i18n/src/locales/uk.i18n.json @@ -568,6 +568,7 @@ "CAS_enabled": "ĐŖвŅ–ĐŧĐēĐŊĐĩĐŊĐž", "CAS_Login_Layout": "ĐĄŅ‚иĐģŅŒ вŅ…ОдŅƒ в CAS", "CAS_login_url": "URL-Đ°Đ´Ņ€ĐĩŅĐ° вŅ…ОдŅƒ в SSO", + "message_counter_many": "{{count}} ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊŅŒ", "CAS_login_url_Description": "URL-Đ°Đ´Ņ€ĐĩŅĐ° Đ´ĐģŅ вŅ…ОдŅƒ СОвĐŊŅ–ŅˆĐŊŅŒĐžŅ— ŅĐģŅƒĐļйи SSO, ĐŊĐ°ĐŋŅ€Đ¸ĐēĐģĐ°Đ´: https: //sso.example.undef/sso/login", "CAS_popup_height": "ВиŅĐžŅ‚Đ° виŅ€Đ¸ĐŊĐ°ŅŽŅ‡ĐžĐŗĐž вŅ–ĐēĐŊĐ° вŅ…ОдŅƒ", "CAS_popup_width": "ШиŅ€Đ¸ĐŊĐ° ŅĐŋĐģиваŅŽŅ‡ĐžĐŗĐž вŅ–ĐēĐŊĐ° вŅ…ОдŅƒ", @@ -625,6 +626,7 @@ "clear_history": "ОŅ‡Đ¸ŅŅ‚иŅ‚и Ņ–ŅŅ‚ĐžŅ€Ņ–ŅŽ", "Click_here": "НаŅ‚иŅĐŊŅ–Ņ‚ŅŒ Ņ‚ŅƒŅ‚", "Click_here_for_more_info": "НаŅ‚иŅĐŊŅ–Ņ‚ŅŒ Ņ‚ŅƒŅ‚, Ņ‰ĐžĐą ĐžŅ‚Ņ€Đ¸ĐŧĐ°Ņ‚и дОдаŅ‚ĐēОвŅƒ Ņ–ĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Ņ–ŅŽ", + "message_counter_few": "{{count}} ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊŅŒ", "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": "НаŅ‚иŅĐŊŅ–Ņ‚ŅŒ ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ, ŅĐēŅ– ви Ņ…ĐžŅ‡ĐĩŅ‚Đĩ ĐŊĐ°Đ´Ņ–ŅĐģĐ°Ņ‚и ĐĩĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊĐžŅŽ ĐŋĐžŅˆŅ‚ĐžŅŽ", @@ -700,7 +702,6 @@ "Consulting": "КоĐŊŅĐ°ĐģŅ‚иĐŊĐŗ", "Contact": "КоĐŊŅ‚Đ°ĐēŅ‚и", "Contains_Security_Fixes": "МŅ–ŅŅ‚ŅŅ‚ŅŒ виĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐŊŅ ĐąĐĩСĐŋĐĩĐēи", - "message_counter_many": "{{count}} ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊŅŒ", "Content": "ВĐŧŅ–ŅŅ‚", "Continue": "ПŅ€ĐžĐ´ĐžĐ˛ĐļиŅ‚и", "Continuous_sound_notifications_for_new_livechat_room": "ПоŅŅ‚Ņ–ĐšĐŊŅ– СвŅƒĐēОвŅ– ŅĐŋОвŅ–Ņ‰ĐĩĐŊĐŊŅ Đ´ĐģŅ ĐŊОвОŅ— livechat ĐēŅ–ĐŧĐŊĐ°Ņ‚и", @@ -782,7 +783,6 @@ "Country_Denmark": "ДаĐŊŅ–Ņ", "Country_Djibouti": "ДĐļийŅƒŅ‚Ņ–", "Country_Dominica": "ДоĐŧŅ–ĐŊŅ–ĐēĐ°", - "message_counter_few": "{{count}} ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊŅŒ", "Country_Dominican_Republic": "ДоĐŧŅ–ĐŊŅ–ĐēĐ°ĐŊŅŅŒĐēĐ° Ņ€ĐĩŅĐŋŅƒĐąĐģŅ–ĐēĐ°", "Country_Ecuador": "ЕĐēвадОŅ€", "Country_Egypt": "ЄĐŗиĐŋĐĩŅ‚", @@ -2596,12 +2596,19 @@ "Retail": "РОСдŅ€Ņ–ĐąĐŊĐ° Ņ‚ĐžŅ€ĐŗŅ–вĐģŅ", "Retention_setting_changed_successfully": "НаĐģĐ°ŅˆŅ‚ŅƒĐ˛Đ°ĐŊĐŊŅ ĐŋĐžĐģŅ–Ņ‚иĐēи СйĐĩŅ€ĐĩĐļĐĩĐŊĐŊŅ ŅƒŅĐŋŅ–ŅˆĐŊĐž СĐŧŅ–ĐŊĐĩĐŊĐž", "RetentionPolicy": "ПоĐģŅ–Ņ‚иĐēĐ° СйĐĩŅ€ĐĩĐļĐĩĐŊĐŊŅ", + "RetentionPolicy_AppliesToChannels": "ЗаŅŅ‚ĐžŅĐžĐ˛ŅƒŅ”Ņ‚ŅŒŅŅ Đ´Đž ĐēĐ°ĐŊĐ°ĐģŅ–в", + "RetentionPolicy_AppliesToDMs": "ЗаŅŅ‚ĐžŅĐžĐ˛ŅƒŅ”Ņ‚ŅŒŅŅ Đ´Đž ĐŋŅ€ŅĐŧиŅ… ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊŅŒ", + "RetentionPolicy_AppliesToGroups": "ЗаŅŅ‚ĐžŅĐžĐ˛ŅƒŅ”Ņ‚ŅŒŅŅ Đ´Đž ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊиŅ… ĐŗŅ€ŅƒĐŋ", "RetentionPolicy_Description": "АвŅ‚ĐžĐŧĐ°Ņ‚иŅ‡ĐŊĐž ŅĐēĐ°ŅĐžĐ˛ŅƒŅ” ŅŅ‚Đ°Ņ€Ņ– ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ Ņ‡ĐĩŅ€ĐĩС ĐĩĐēСĐĩĐŧĐŋĐģŅŅ€ Rocket.Chat.", "RetentionPolicy_Enabled": "ĐŖвŅ–ĐŧĐēĐŊĐĩĐŊĐž", "RetentionPolicy_ExcludePinned": "ВиĐēĐģŅŽŅ‡Đ¸Ņ‚и СаĐēŅ€Ņ–ĐŋĐģĐĩĐŊŅ– ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ", "RetentionPolicy_FilesOnly": "ВидаĐģŅŅ‚и ĐģиŅˆĐĩ Ņ„Đ°ĐšĐģи", "RetentionPolicy_FilesOnly_Description": "ĐĸŅ–ĐģŅŒĐēи Ņ„Đ°ĐšĐģи ĐąŅƒĐ´ŅƒŅ‚ŅŒ видаĐģĐĩĐŊŅ–, ŅĐ°ĐŧŅ– ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ СаĐģиŅˆĐ¸Ņ‚ŅŒŅŅ ĐŊĐ° ĐŧŅ–ŅŅ†Ņ–.", "RetentionPolicy_MaxAge": "МаĐēŅĐ¸ĐŧĐ°ĐģŅŒĐŊиК вŅ–Đē ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ", + "RetentionPolicy_MaxAge_Channels": "МаĐēŅĐ¸ĐŧĐ°ĐģŅŒĐŊиК вŅ–Đē ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ в ĐēĐ°ĐŊĐ°ĐģĐ°Ņ…", + "RetentionPolicy_MaxAge_Description": "ОбŅ€Ņ–СаŅ‚и вŅŅ– ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ ŅŅ‚Đ°Ņ€ŅˆĐĩ Ņ†ŅŒĐžĐŗĐž СĐŊĐ°Ņ‡ĐĩĐŊĐŊŅ в Đ´ĐŊŅŅ…", + "RetentionPolicy_MaxAge_DMs": "МаĐēŅĐ¸ĐŧĐ°ĐģŅŒĐŊиК вŅ–Đē ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ в ĐŋŅ€ŅĐŧĐžĐŧŅƒ ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ–", + "RetentionPolicy_MaxAge_Groups": "МаĐēŅĐ¸ĐŧĐ°ĐģŅŒĐŊиК вŅ–Đē ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ в ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊиŅ… ĐŗŅ€ŅƒĐŋĐ°Ņ…", "RetentionPolicy_Precision": "ĐĸĐ°ĐšĐŧĐĩŅ€ Ņ‚ĐžŅ‡ĐŊĐžŅŅ‚Ņ–", "RetentionPolicy_Precision_Description": "Đ¯Đē Ņ‡Đ°ŅŅ‚Đž ŅĐģŅ–Đ´ СаĐŋŅƒŅĐēĐ°Ņ‚и Ņ‚Đ°ĐšĐŧĐĩŅ€ ŅˆĐēŅƒŅ€Đ¸. Đ¯ĐēŅ‰Đž вŅŅ‚Đ°ĐŊОвиŅ‚и Ņ†Đĩ СĐŊĐ°Ņ‡ĐĩĐŊĐŊŅ ĐŊĐ° ĐąŅ–ĐģŅŒŅˆ Ņ‚ĐžŅ‡ĐŊĐĩ СĐŊĐ°Ņ‡ĐĩĐŊĐŊŅ, ĐēĐ°ĐŊĐ°Đģи С Ņ‚Đ°ĐšĐŧĐĩŅ€Đ°Đŧи ŅˆĐ˛Đ¸Đ´ĐēĐžĐŗĐž ŅƒŅ‚Ņ€Đ¸ĐŧĐ°ĐŊĐŊŅ ĐŋŅ€Đ°Ņ†ŅŽĐ˛Đ°Ņ‚иĐŧŅƒŅ‚ŅŒ ĐēŅ€Đ°Ņ‰Đĩ, ОдĐŊĐ°Đē вОĐŊи ĐŧĐžĐļŅƒŅ‚ŅŒ ĐŋŅ€Đ¸ĐˇĐ˛ĐĩŅŅ‚и Đ´Đž дОдаŅ‚ĐēОвОŅ— ĐŋĐžŅ‚ŅƒĐļĐŊĐžŅŅ‚Ņ– ОйŅ€ĐžĐąĐēи вĐĩĐģиĐēиŅ… ŅĐŋŅ–ĐģŅŒĐŊĐžŅ‚.", "RetentionPolicyRoom_Enabled": "АвŅ‚ĐžĐŧĐ°Ņ‚иŅ‡ĐŊĐž ОйŅ€Ņ–СаŅ‚и ŅŅ‚Đ°Ņ€Ņ– ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ", @@ -3351,4 +3358,4 @@ "Enterprise": "ПŅ–Đ´ĐŋŅ€Đ¸Ņ”ĐŧŅŅ‚вО", "UpgradeToGetMore_engagement-dashboard_Title": "АĐŊĐ°ĐģŅ–Ņ‚иĐēĐ°", "UpgradeToGetMore_auditing_Title": "АŅƒĐ´Đ¸Ņ‚ ĐŋОвŅ–Đ´ĐžĐŧĐģĐĩĐŊŅŒ" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/vi-VN.i18n.json b/packages/i18n/src/locales/vi-VN.i18n.json index 2c53f8e3fed7..bf073e9c6aee 100644 --- a/packages/i18n/src/locales/vi-VN.i18n.json +++ b/packages/i18n/src/locales/vi-VN.i18n.json @@ -2160,12 +2160,19 @@ "Retail": "NgÆ°áģi bÃĄn láēģ", "Retention_setting_changed_successfully": "ĐÃŖ thay đáģ•i cài đáēˇt chính sÃĄch lÆ°u giáģ¯ thành công", "RetentionPolicy": "Duy trÃŦ chính sÃĄch", + "RetentionPolicy_AppliesToChannels": "Áp dáģĨng cho kÃĒnh", + "RetentionPolicy_AppliesToDMs": "Áp dáģĨng cho tin nháē¯n tráģąc tiáēŋp", + "RetentionPolicy_AppliesToGroups": "Áp dáģĨng cho nhÃŗm riÃĒng tÆ°", "RetentionPolicy_Description": "Táģą đáģ™ng prunes tin nháē¯n cÅŠ trÃĒn trÆ°áģng háģŖp Rocket.Chat cáģ§a báēĄn.", "RetentionPolicy_Enabled": "ĐÃŖ báē­t", "RetentionPolicy_ExcludePinned": "LoáēĄi tráģĢ cÃĄc thÆ° đÃŖ ghim", "RetentionPolicy_FilesOnly": "Cháģ‰ xÃŗa táģ‡p", "RetentionPolicy_FilesOnly_Description": "Cháģ‰ cÃĄc táģ‡p sáēŊ báģ‹ xÃŗa, báēŖn thÃĸn thÆ° sáēŊ váēĢn đưáģŖc giáģ¯ nguyÃĒn.", "RetentionPolicy_MaxAge": "Đáģ™ tuáģ•i tin nháē¯n táģ‘i đa", + "RetentionPolicy_MaxAge_Channels": "Đáģ™ tuáģ•i tin nháē¯n táģ‘i đa trong cÃĄc kÃĒnh", + "RetentionPolicy_MaxAge_Description": "Cáē¯t báģ›t táēĨt cáēŖ cÃĄc thÆ° cÅŠ hÆĄn giÃĄ tráģ‹ này, trong ngày", + "RetentionPolicy_MaxAge_DMs": "Đáģ™ tuáģ•i tin nháē¯n táģ‘i đa trong cÃĄc tin nháē¯n tráģąc tiáēŋp", + "RetentionPolicy_MaxAge_Groups": "Đáģ™ tuáģ•i tin nháē¯n táģ‘i đa trong cÃĄc nhÃŗm riÃĒng tÆ°", "RetentionPolicy_Precision": "Háēšn giáģ chính xÃĄc", "RetentionPolicy_Precision_Description": "Táē§n suáēĨt báģ™ đáēŋm tháģi gian prune sáēŊ cháēĄy. Đáēˇt giÃĄ tráģ‹ này thành giÃĄ tráģ‹ chính xÃĄc hÆĄn giÃēp kÃĒnh cÃŗ báģ™ háēšn giáģ lÆ°u tráģ¯ nhanh hoáēĄt đáģ™ng táģ‘t hÆĄn, nhÆ°ng cÃŗ tháģƒ táģ‘n thÃĒm sáģŠc máēĄnh xáģ­ lÃŊ trÃĒn cÃĄc cáģ™ng đáģ“ng láģ›n.", "RetentionPolicyRoom_Enabled": "Táģą đáģ™ng cáē¯t báģ›t cÃĄc tin nháē¯n cÅŠ", @@ -2853,4 +2860,4 @@ "registration.component.form.sendConfirmationEmail": "Gáģ­i email xÃĄc nháē­n", "Enterprise": "Doanh nghiáģ‡p", "UpgradeToGetMore_engagement-dashboard_Title": "phÃĸn tích" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/zh-HK.i18n.json b/packages/i18n/src/locales/zh-HK.i18n.json index bd9fd451a2a5..e9821173dc0c 100644 --- a/packages/i18n/src/locales/zh-HK.i18n.json +++ b/packages/i18n/src/locales/zh-HK.i18n.json @@ -2084,15 +2084,21 @@ "Retail": "é›ļ唎", "Retention_setting_changed_successfully": "äŋį•™į­–į•Ĩ莞įŊŽåˇ˛æˆåŠŸæ›´æ”š", "RetentionPolicy": "äŋį•™æ”ŋį­–", + "RetentionPolicy_AppliesToChannels": "适į”¨äēŽéĸ‘道", + "RetentionPolicy_AppliesToDMs": "适į”¨äēŽį›´æŽĨæļˆæ¯", + "RetentionPolicy_AppliesToGroups": "适į”¨äēŽį§äēēå›ĸäŊ“", "RetentionPolicy_Description": "č‡Ē动äŋŽå‰ĒRocket.Chat厞䞋中įš„æ—§æļˆæ¯ã€‚", "RetentionPolicy_Enabled": "启į”¨", "RetentionPolicy_ExcludePinned": "排除å›ē厚æļˆæ¯", "RetentionPolicy_FilesOnly": "åĒ删除文äģļ", "RetentionPolicy_FilesOnly_Description": "åĒ删除文äģļīŧŒé‚ŽäģļæœŦčēĢ将äŋį•™åœ¨åŽŸäŊã€‚", "RetentionPolicy_MaxAge": "最大邎äģļåš´éž„", + "RetentionPolicy_MaxAge_Channels": "éĸ‘道中įš„最大æļˆæ¯æ—ļ限", + "RetentionPolicy_MaxAge_Description": "äŋŽå‰Ē所有旊äēŽæ­¤å€ŧįš„é‚ŽäģļīŧŒäģĨ夊ä¸ē单äŊ", + "RetentionPolicy_MaxAge_DMs": "į›´æŽĨæļˆæ¯ä¸­įš„最大æļˆæ¯æ—ļ间", + "RetentionPolicy_MaxAge_Groups": "į§äēēįģ„中įš„最é•ŋ邮äģļåš´éž„", "RetentionPolicy_Precision": "厚æ—ļį˛žåēĻ", "RetentionPolicy_Precision_Description": "äŋŽå‰Ē莥æ—ļ器åē”č¯Ĩ多䚅čŋčĄŒä¸€æŦĄã€‚å°†æ­¤čŽžįŊŽä¸ē更į˛žįĄŽįš„å€ŧäŧšäŊŋå…ˇæœ‰åŋĢ速äŋį•™čŽĄæ—ļ器įš„通道更åĨŊ地åˇĨäŊœīŧŒäŊ†å¯čƒŊäŧšå¯šå¤§åž‹į¤žåŒē造成éĸå¤–įš„处į†čƒŊ力。", - "RetentionPolicyRoom_Enabled": "č‡Ē动äŋŽå‰Ē旧邎äģļ", "RetentionPolicyRoom_ExcludePinned": "排除å›ē厚æļˆæ¯", "RetentionPolicyRoom_FilesOnly": "äģ…äŋŽå‰Ē文äģļīŧŒäŋį•™æļˆæ¯", @@ -2778,4 +2784,4 @@ "registration.component.form.sendConfirmationEmail": "åˇ˛å‘é€įĄŽčŽ¤į”ĩ子邎äģļ", "Enterprise": "äŧä¸š", "UpgradeToGetMore_engagement-dashboard_Title": "分析" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/zh-TW.i18n.json b/packages/i18n/src/locales/zh-TW.i18n.json index cc9ec4dae7d4..741132996be6 100644 --- a/packages/i18n/src/locales/zh-TW.i18n.json +++ b/packages/i18n/src/locales/zh-TW.i18n.json @@ -3413,6 +3413,9 @@ "RetentionPolicy_Advanced_Precision": "äŊŋį”¨é€˛éšŽäŋį•™į­–į•Ĩ設įŊŽ", "RetentionPolicy_Advanced_Precision_Cron": "äŊŋį”¨é€˛éšŽäŋį•™æ”ŋį­–č¨ˆåŠƒ", "RetentionPolicy_Advanced_Precision_Cron_Description": "cron åˇĨäŊœčĄ¨į¤ēæŗ•åŽšįžŠäē†äŋŽå‰Ēč¨ˆæ™‚å™¨æ‡‰åŸˇčĄŒįš„é ģįŽ‡ã€‚將此å€ŧ設įŊŽį‚ē更į˛žįĸēįš„å€ŧ可äŊŋå…ˇæœ‰åŋĢ速äŋį•™č¨ˆæ™‚器įš„é ģ道做įš„æ›´åĨŊīŧŒäŊ†å¯čƒŊ會įĩĻ大型į¤žįž¤å¸ļ䞆更重įš„處į†čƒŊ力。", + "RetentionPolicy_AppliesToChannels": "遊į”¨æ–ŧé ģ道", + "RetentionPolicy_AppliesToDMs": "遊į”¨æ–ŧį›´æŽĨæļˆæ¯", + "RetentionPolicy_AppliesToGroups": "遊į”¨æ–ŧį§äēē團éĢ”", "RetentionPolicy_Description": "č‡Ē動äŋŽå‰ĒRocket.Chatå¯Ļ例中įš„čˆŠæļˆæ¯ã€‚", "RetentionPolicy_DoNotPruneDiscussion": "不äŋŽå‰ĒčĢ–åŖ‡č¨Šæ¯", "RetentionPolicy_DoNotPrunePinned": "不äŋŽå‰Ē釘選įš„č¨Šæ¯", @@ -3422,6 +3425,10 @@ "RetentionPolicy_FilesOnly": "åĒåˆĒ除æĒ”æĄˆ", "RetentionPolicy_FilesOnly_Description": "åĒåˆĒ除æĒ”æĄˆīŧŒéƒĩäģļæœŦčēĢ將äŋį•™åœ¨åŽŸäŊã€‚", "RetentionPolicy_MaxAge": "最大éƒĩäģļåš´éŊĄ", + "RetentionPolicy_MaxAge_Channels": "é ģ道中įš„æœ€å¤§č¨Šæ¯æ™‚é™", + "RetentionPolicy_MaxAge_Description": "äŋŽå‰Ē所有旊æ–ŧæ­¤å€ŧįš„éƒĩäģļīŧŒäģĨ夊į‚ēå–ŽäŊ", + "RetentionPolicy_MaxAge_DMs": "į›´æŽĨč¨Šæ¯ä¸­įš„æœ€å¤§č¨Šæ¯æ™‚é–“", + "RetentionPolicy_MaxAge_Groups": "į§äēēįž¤įĩ„中įš„æœ€é•ˇč¨Šæ¯åš´éŊĄ", "RetentionPolicy_Precision": "厚時į˛žåēĻ", "RetentionPolicy_Precision_Description": "äŋŽå‰Ēč¨ˆæ™‚å™¨æ‡‰čŠ˛å¤šäš…é‹čĄŒä¸€æŦĄã€‚å°‡æ­¤č¨­įŊŽį‚ē更į˛žįĸēįš„å€ŧ會äŊŋå…ˇæœ‰åŋĢ速äŋį•™č¨ˆæ™‚器įš„通道更åĨŊ地åˇĨäŊœīŧŒäŊ†å¯čƒŊ會對大型į¤žå€é€ æˆéĄå¤–įš„處į†čƒŊ力。", "RetentionPolicyRoom_Enabled": "č‡Ē動äŋŽå‰Ē舊éƒĩäģļ", @@ -4578,4 +4585,4 @@ "Enterprise": "äŧæĨ­", "UpgradeToGetMore_engagement-dashboard_Title": "分析", "UpgradeToGetMore_auditing_Title": "č¨Šæ¯į¨Ŋæ ¸" -} +} \ No newline at end of file diff --git a/packages/i18n/src/locales/zh.i18n.json b/packages/i18n/src/locales/zh.i18n.json index 75568dd3c5d8..323da5954332 100644 --- a/packages/i18n/src/locales/zh.i18n.json +++ b/packages/i18n/src/locales/zh.i18n.json @@ -3097,6 +3097,9 @@ "RetentionPolicy_Advanced_Precision": "äŊŋį”¨éĢ˜įē§äŋį•™į­–į•Ĩ配įŊŽ", "RetentionPolicy_Advanced_Precision_Cron": "äŊŋį”¨éĢ˜įē§äŋį•™į­–į•ĨäģģåŠĄčŽĄåˆ’", "RetentionPolicy_Advanced_Precision_Cron_Description": "äŊŋį”¨ cron äģģåŠĄčĄ¨čžžåŧåŽšäš‰äŋŽå‰Ē厚æ—ļ器čŋčĄŒéĸ‘åēĻīŧŒå°†æ­¤čŽžįŊŽä¸ē更į˛žįĄŽįš„å€ŧäŧšäŊŋå…ˇæœ‰åŋĢ速äŋį•™čŽĄæ—ļ器įš„éĸ‘道更åĨŊ地åˇĨäŊœīŧŒäŊ†å¯šå¤§åž‹į¤žåŒē可čƒŊäŧšæļˆč€—éĸå¤–įš„处į†čƒŊ力。", + "RetentionPolicy_AppliesToChannels": "适į”¨äēŽéĸ‘道", + "RetentionPolicy_AppliesToDMs": "适į”¨äēŽį§čŠæļˆæ¯", + "RetentionPolicy_AppliesToGroups": "适į”¨äēŽį§äēēįģ„", "RetentionPolicy_Description": "č‡Ē动äŋŽå‰Ē Rocket.Chat 厞䞋中įš„æ—§æļˆæ¯ã€‚", "RetentionPolicy_DoNotPruneDiscussion": "不äŋŽå‰Ē莨čŽēæļˆæ¯", "RetentionPolicy_DoNotPrunePinned": "不äŋŽå‰Ēåˇ˛å›ē厚įš„æļˆæ¯", @@ -3106,6 +3109,10 @@ "RetentionPolicy_FilesOnly": "åĒ删除文äģļ", "RetentionPolicy_FilesOnly_Description": "åĒ有文äģļäŧščĸĢ删除īŧŒæļˆæ¯æœŦčēĢ将äŋį•™åœ¨åŽŸäŊã€‚", "RetentionPolicy_MaxAge": "æļˆæ¯äŋæŒæ—ļ限", + "RetentionPolicy_MaxAge_Channels": "éĸ‘道中įš„æļˆæ¯äŋæŒæ—ļ限", + "RetentionPolicy_MaxAge_Description": "äŋŽå‰Ē所有旊äēŽæ­¤å€ŧįš„æļˆæ¯īŧŒäģĨ夊ä¸ē单äŊ", + "RetentionPolicy_MaxAge_DMs": "į§čŠæļˆæ¯æœ€å¤§åš´éž„", + "RetentionPolicy_MaxAge_Groups": "į§äēēįģ„中įš„æļˆæ¯æœ€å¤§åš´éž„", "RetentionPolicy_Precision": "厚æ—ļį˛žåēĻ", "RetentionPolicy_Precision_Description": "äŋŽå‰Ē莥æ—ļ器åē”č¯Ĩ多䚅čŋčĄŒä¸€æŦĄã€‚å°†æ­¤čŽžįŊŽä¸ē更į˛žįĄŽįš„å€ŧäŧšäŊŋå…ˇæœ‰åŋĢ速äŋį•™čŽĄæ—ļ器įš„éĸ‘道更åĨŊ地åˇĨäŊœīŧŒäŊ†å¯šå¤§åž‹į¤žåŒē可čƒŊäŧšæļˆč€—éĸå¤–įš„处į†čƒŊ力。", "RetentionPolicyRoom_Enabled": "č‡Ē动äŋŽå‰Ē旧æļˆæ¯", @@ -4135,4 +4142,4 @@ "Enterprise": "äŧä¸š", "UpgradeToGetMore_engagement-dashboard_Title": "分析", "UpgradeToGetMore_auditing_Title": "æļˆæ¯åŽĄčŽĄ" -} +} \ No newline at end of file diff --git a/packages/i18n/tsconfig.json b/packages/i18n/tsconfig.json new file mode 100644 index 000000000000..d3ff0b8bdc07 --- /dev/null +++ b/packages/i18n/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDirs": ["./src", "./"], + "outDir": "./dist", + "declaration": true + }, + "include": ["./src/**/*", "./jest.config.ts"] +} diff --git a/packages/instance-status/CHANGELOG.md b/packages/instance-status/CHANGELOG.md index 094ad838096a..849ccf591d08 100644 --- a/packages/instance-status/CHANGELOG.md +++ b/packages/instance-status/CHANGELOG.md @@ -1,5 +1,86 @@ # @rocket.chat/instance-status +## 0.1.3 + +### Patch Changes + +-
    Updated dependencies [2d89a0c448]: + + - @rocket.chat/models@0.2.0 +
    + +## 0.1.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/models@0.2.0-rc.6 +
    + +## 0.1.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/models@0.2.0-rc.5 +
    + +## 0.1.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/models@0.2.0-rc.4 +
    + +## 0.1.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/models@0.2.0-rc.3 +
    + +## 0.1.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/models@0.2.0-rc.2 +
    + +## 0.1.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + +## 0.1.2 + +### Patch Changes + +-
    Updated dependencies []: +- @rocket.chat/models@0.1.2 +
    + + - @rocket.chat/models@0.2.0-rc.1 +
    + +## 0.1.3-rc.0 + +### Patch Changes + +-
    Updated dependencies [2d89a0c448]: + + - @rocket.chat/models@0.2.0-rc.0 + - @rocket.chat/models@0.1.2 +
    + ## 0.1.1 ### Patch Changes diff --git a/packages/instance-status/package.json b/packages/instance-status/package.json index 1da979b011a1..088cba613d8e 100644 --- a/packages/instance-status/package.json +++ b/packages/instance-status/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/instance-status", - "version": "0.1.1", + "version": "0.1.3", "private": true, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", diff --git a/packages/jest-presets/.eslintrc.json b/packages/jest-presets/.eslintrc.json new file mode 100644 index 000000000000..7250665ca644 --- /dev/null +++ b/packages/jest-presets/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://json.schemastore.org/eslintrc", + "extends": ["@rocket.chat/eslint-config"], + "ignorePatterns": ["/dist/**", "/client/**", "/server/**"] +} diff --git a/packages/jest-presets/client b/packages/jest-presets/client new file mode 120000 index 000000000000..8f76ef0d8625 --- /dev/null +++ b/packages/jest-presets/client @@ -0,0 +1 @@ +dist/client \ No newline at end of file diff --git a/packages/jest-presets/package.json b/packages/jest-presets/package.json new file mode 100644 index 000000000000..e6c0c9197bce --- /dev/null +++ b/packages/jest-presets/package.json @@ -0,0 +1,38 @@ +{ + "name": "@rocket.chat/jest-presets", + "version": "0.0.1", + "private": true, + "scripts": { + "clean": "rm -rf ./dist", + "build": "tsc", + "lint": "eslint ." + }, + "files": [ + "/dist", + "/client", + "/server" + ], + "dependencies": { + "@swc/core": "~1.7.4", + "@swc/jest": "~0.2.36", + "@testing-library/jest-dom": "~6.4.8", + "@types/jest-axe": "~3.5.9", + "identity-obj-proxy": "~3.0.0", + "jest-axe": "~9.0.0", + "jest-environment-jsdom": "~29.7.0", + "jest-environment-node": "~29.7.0", + "uuid": "~9.0.1" + }, + "devDependencies": { + "@rocket.chat/eslint-config": "workspace:~", + "@types/identity-obj-proxy": "^3", + "@types/jest": "~29.5.12", + "@types/uuid": "^9", + "eslint": "~8.45.0", + "jest": "~29.7.0", + "typescript": "~5.4.5" + }, + "volta": { + "extends": "../../package.json" + } +} diff --git a/packages/jest-presets/server b/packages/jest-presets/server new file mode 120000 index 000000000000..5abc362c5511 --- /dev/null +++ b/packages/jest-presets/server @@ -0,0 +1 @@ +dist/server \ No newline at end of file diff --git a/packages/jest-presets/src/client/index.ts b/packages/jest-presets/src/client/index.ts new file mode 100644 index 000000000000..4194d7ebc206 --- /dev/null +++ b/packages/jest-presets/src/client/index.ts @@ -0,0 +1,10 @@ +import type { Config } from 'jest'; + +export type {} from '@testing-library/jest-dom'; // trick to cascade global types for Jest matchers + +const preset = '@rocket.chat/jest-presets/client'; + +export default { + preset, + setupFilesAfterEnv: [`${preset}/jest-setup.js`], +} satisfies Config; diff --git a/packages/jest-presets/src/client/jest-preset.ts b/packages/jest-presets/src/client/jest-preset.ts new file mode 100644 index 000000000000..fbba554c5a1c --- /dev/null +++ b/packages/jest-presets/src/client/jest-preset.ts @@ -0,0 +1,38 @@ +import type * as SWC from '@swc/core'; +import type { Config } from 'jest'; + +export default { + testEnvironment: 'jsdom', + errorOnDeprecated: true, + + transform: { + '^.+\\.m?(t|j)sx?$': [ + '@swc/jest', + { + sourceMaps: true, + jsc: { + target: 'es2015', + transform: { + react: { + runtime: 'automatic', + }, + }, + parser: { + syntax: 'typescript', + tsx: true, + decorators: false, + dynamicImport: true, + }, + }, + } satisfies SWC.Config, + ], + }, + transformIgnorePatterns: ['/node_modules/@babel', '/node_modules/@jest', '/node_modules/(?!@testing-library/)'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node', 'mjs'], + + moduleNameMapper: { + '\\.css$': 'identity-obj-proxy', + }, + + collectCoverage: true, +} satisfies Config; diff --git a/packages/jest-presets/src/client/jest-setup.ts b/packages/jest-presets/src/client/jest-setup.ts new file mode 100644 index 000000000000..87fe139acb29 --- /dev/null +++ b/packages/jest-presets/src/client/jest-setup.ts @@ -0,0 +1,69 @@ +import { TextEncoder, TextDecoder } from 'node:util'; + +import { toHaveNoViolations } from 'jest-axe'; +import * as uuid from 'uuid'; + +import '@testing-library/jest-dom'; + +expect.extend(toHaveNoViolations); + +const urlByBlob = new WeakMap(); +const blobByUrl = new Map(); + +globalThis.URL.createObjectURL = (blob: Blob): string => { + const url = urlByBlob.get(blob) ?? `blob://${uuid.v4()}`; + urlByBlob.set(blob, url); + blobByUrl.set(url, blob); + return url; +}; + +globalThis.URL.revokeObjectURL = (url: string): void => { + const blob = blobByUrl.get(url); + if (!blob) { + return; + } + + urlByBlob.delete(blob); + blobByUrl.delete(url); +}; + +globalThis.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn(), +})); + +Object.defineProperty(global.navigator, 'serviceWorker', { + value: { + register: jest.fn(), + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + }, +}); + +globalThis.IntersectionObserver = class IntersectionObserver { + root = null; + + rootMargin = ''; + + thresholds = []; + + disconnect() { + return null; + } + + observe() { + return null; + } + + takeRecords() { + return []; + } + + unobserve() { + return null; + } +}; + +globalThis.TextEncoder = TextEncoder; +globalThis.TextDecoder = TextDecoder as any; diff --git a/packages/jest-presets/src/server/index.ts b/packages/jest-presets/src/server/index.ts new file mode 100644 index 000000000000..1600435cecbd --- /dev/null +++ b/packages/jest-presets/src/server/index.ts @@ -0,0 +1,7 @@ +import type { Config } from 'jest'; + +const preset = '@rocket.chat/jest-presets/server'; + +export default { + preset, +} satisfies Config; diff --git a/packages/jest-presets/src/server/jest-preset.ts b/packages/jest-presets/src/server/jest-preset.ts new file mode 100644 index 000000000000..df6d550d764f --- /dev/null +++ b/packages/jest-presets/src/server/jest-preset.ts @@ -0,0 +1,28 @@ +import type * as SWC from '@swc/core'; +import type { Config } from 'jest'; + +export default { + testEnvironment: 'node', + errorOnDeprecated: true, + + transform: { + '^.+\\.m?(t|j)sx?$': [ + '@swc/jest', + { + sourceMaps: true, + jsc: { + target: 'es2015', + parser: { + syntax: 'typescript', + decorators: false, + dynamicImport: true, + }, + }, + } satisfies SWC.Config, + ], + }, + transformIgnorePatterns: ['/node_modules/@babel', '/node_modules/@jest', '/node_modules/(?!@testing-library/)'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node', 'mjs'], + + collectCoverage: true, +} satisfies Config; diff --git a/packages/jest-presets/tsconfig.json b/packages/jest-presets/tsconfig.json new file mode 100644 index 000000000000..d3a2f31e035b --- /dev/null +++ b/packages/jest-presets/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist", + "declaration": true + }, + "include": ["./src"] +} diff --git a/packages/jwt/jest.config.js b/packages/jwt/jest.config.js deleted file mode 100644 index 6231bde11685..000000000000 --- a/packages/jwt/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} */ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', -}; diff --git a/packages/jwt/jest.config.ts b/packages/jwt/jest.config.ts new file mode 100644 index 000000000000..c18c8ae02465 --- /dev/null +++ b/packages/jwt/jest.config.ts @@ -0,0 +1,6 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + +export default { + preset: server.preset, +} satisfies Config; diff --git a/packages/jwt/package.json b/packages/jwt/package.json index d93ec0dc4228..a6d989e2c275 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -3,29 +3,30 @@ "version": "0.1.1", "private": true, "devDependencies": { - "@types/jest": "~29.5.7", + "@rocket.chat/jest-presets": "workspace:~", + "@types/jest": "~29.5.12", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "^29.1.1", + "jest": "~29.7.0", "typescript": "~5.3.3" }, "scripts": { + "build": "rm -rf dist && tsc", + "dev": "tsc --watch --preserveWatchOutput", + "typecheck": "tsc --noEmit", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", "test": "jest", - "testunit": "jest", - "build": "rm -rf dist && tsc -p tsconfig.json", - "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" + "testunit": "jest" }, "main": "./dist/index.js", "typings": "./dist/index.d.ts", "files": [ "/dist" ], - "volta": { - "extends": "../../package.json" - }, "dependencies": { "jose": "^4.14.4" + }, + "volta": { + "extends": "../../package.json" } } diff --git a/packages/livechat/CHANGELOG.md b/packages/livechat/CHANGELOG.md index 293cc48779c0..56265d43563f 100644 --- a/packages/livechat/CHANGELOG.md +++ b/packages/livechat/CHANGELOG.md @@ -1,5 +1,108 @@ # @rocket.chat/livechat Change Log +## 1.19.0 + +### Minor Changes + +- ([#32498](https://github.com/RocketChat/Rocket.Chat/pull/32498)) Created a `transferChat` Livechat API endpoint for transferring chats programmatically, the endpoint has all the limitations & permissions required that transferring via UI has + +### Patch Changes + +- ([#32692](https://github.com/RocketChat/Rocket.Chat/pull/32692)) Fixed an issue that caused the widget to set the wrong department when using the setDepartment Livechat api endpoint in conjunction with a Livechat Trigger + +- ([#32626](https://github.com/RocketChat/Rocket.Chat/pull/32626)) livechat `setDepartment` livechat api fixes: + - Changing department didn't reflect on the registration form in real time + - Changing the department mid conversation didn't transfer the chat + - Depending on the state of the department, it couldn't be set as default +-
    Updated dependencies [2d89a0c448]: + + - @rocket.chat/ui-kit@0.36.0 + - @rocket.chat/gazzodown@9.0.0 +
    + +## 1.19.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/gazzodown@9.0.0-rc.6 +
    + +## 1.19.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/gazzodown@9.0.0-rc.5 +
    + +## 1.19.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/gazzodown@9.0.0-rc.4 +
    + +## 1.19.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/gazzodown@9.0.0-rc.3 +
    + +## 1.19.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/gazzodown@9.0.0-rc.2 +
    + +## 1.19.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/gazzodown@9.0.0-rc.1 +
    + +## 1.19.0-rc.0 + +### Minor Changes + +- ([#32498](https://github.com/RocketChat/Rocket.Chat/pull/32498)) Created a `transferChat` Livechat API endpoint for transferring chats programmatically, the endpoint has all the limitations & permissions required that transferring via UI has + +### Patch Changes + +- ([#32692](https://github.com/RocketChat/Rocket.Chat/pull/32692)) Fixed an issue that caused the widget to set the wrong department when using the setDepartment Livechat api endpoint in conjunction with a Livechat Trigger + +- ([#32626](https://github.com/RocketChat/Rocket.Chat/pull/32626)) livechat `setDepartment` livechat api fixes: + - Changing department didn't reflect on the registration form in real time + - Changing the department mid conversation didn't transfer the chat + - Depending on the state of the department, it couldn't be set as default +-
    Updated dependencies [2d89a0c448]: + + - @rocket.chat/ui-kit@0.36.0-rc.0 + - @rocket.chat/gazzodown@9.0.0-rc.0 + +## 1.18.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/gazzodown@8.0.2 +
    +
    + ## 1.18.1 ### Patch Changes diff --git a/packages/livechat/package.json b/packages/livechat/package.json index 418c927a5ce8..9d40643dd4c5 100644 --- a/packages/livechat/package.json +++ b/packages/livechat/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/livechat", - "version": "1.18.1", + "version": "1.19.0", "files": [ "/build" ], diff --git a/packages/livechat/src/lib/room.js b/packages/livechat/src/lib/room.js index de17ded17ccb..f7e7e97df5f4 100644 --- a/packages/livechat/src/lib/room.js +++ b/packages/livechat/src/lib/room.js @@ -41,7 +41,7 @@ export const closeChat = async ({ transcriptRequested } = {}) => { await store.setState(initial); } - Triggers.processTrigger('after-guest-registration'); + await Triggers.processTrigger('after-guest-registration'); await loadConfig(); parentCall('callback', 'chat-ended'); diff --git a/packages/livechat/src/lib/transcript.js b/packages/livechat/src/lib/transcript.ts similarity index 68% rename from packages/livechat/src/lib/transcript.js rename to packages/livechat/src/lib/transcript.ts index 970aab2ee9bc..33260edd62e8 100644 --- a/packages/livechat/src/lib/transcript.js +++ b/packages/livechat/src/lib/transcript.ts @@ -9,9 +9,19 @@ const promptTranscript = async () => { config: { messages: { transcriptMessage }, }, - user: { token, visitorEmails }, - room: { _id }, + user, + room, } = store.state; + + if (!room || !user) { + console.warn('Only call promptTranscript when there is a room and a user'); + return; + } + + const { visitorEmails } = user; + + const { _id } = room; + const email = visitorEmails && visitorEmails.length > 0 ? visitorEmails[0].address : ''; if (!email) { return; @@ -23,12 +33,12 @@ const promptTranscript = async () => { text: message, }).then((result) => { if (typeof result.success === 'boolean' && result.success) { - return Livechat.requestTranscript(email, { token, rid: _id }); + return Livechat.requestTranscript(email, { rid: _id }); } }); }; -const transcriptSentAlert = (message) => +const transcriptSentAlert = (message: string) => ModalManager.alert({ text: message, timeout: 1000, @@ -45,7 +55,8 @@ export const handleTranscript = async () => { const result = await promptTranscript(); - if (result && result.success) { + // TODO: Check why the api results are not returning the correct type + if ((result as { message: string; success: boolean })?.success) { transcriptSentAlert(i18next.t('transcript_success')); } }; diff --git a/packages/livechat/src/providers/ServerProvider.tsx b/packages/livechat/src/providers/ServerProvider.tsx index 79a0b2eb6f8f..203740a62e39 100644 --- a/packages/livechat/src/providers/ServerProvider.tsx +++ b/packages/livechat/src/providers/ServerProvider.tsx @@ -1,15 +1,15 @@ import type { Serialized } from '@rocket.chat/core-typings'; -import { Emitter } from '@rocket.chat/emitter'; -import type { Method, PathFor, OperationParams, OperationResult, UrlParams, PathPattern } from '@rocket.chat/rest-typings'; import type { ServerMethodName, ServerMethodParameters, ServerMethodReturn, StreamerCallbackArgs, - UploadResult, StreamNames, StreamKeys, -} from '@rocket.chat/ui-contexts'; +} from '@rocket.chat/ddp-client'; +import { Emitter } from '@rocket.chat/emitter'; +import type { Method, PathFor, OperationParams, OperationResult, UrlParams, PathPattern } from '@rocket.chat/rest-typings'; +import type { UploadResult } from '@rocket.chat/ui-contexts'; import { ServerContext } from '@rocket.chat/ui-contexts'; import { compile } from 'path-to-regexp'; import { useMemo } from 'preact/hooks'; diff --git a/packages/livechat/src/store/index.tsx b/packages/livechat/src/store/index.tsx index abc05f7101a9..f8629ce693cc 100644 --- a/packages/livechat/src/store/index.tsx +++ b/packages/livechat/src/store/index.tsx @@ -58,6 +58,7 @@ export type StoreState = { hiddenSystemMessages?: LivechatHiddenSytemMessageType[]; hideWatermark?: boolean; livechatLogo?: { url: string }; + transcript?: boolean; }; online?: boolean; departments: Department[]; diff --git a/packages/livechat/src/widget.ts b/packages/livechat/src/widget.ts index 47f073aaff0a..9a7af87de95d 100644 --- a/packages/livechat/src/widget.ts +++ b/packages/livechat/src/widget.ts @@ -1,5 +1,5 @@ import type { UserStatus } from '@rocket.chat/core-typings'; -import type { LivechatRoomEvents } from '@rocket.chat/ddp-client/dist/livechat/types/LivechatSDK'; +import type { LivechatRoomEvents } from '@rocket.chat/ddp-client'; import mitt from 'mitt'; import { isDefined } from './helpers/isDefined'; diff --git a/packages/log-format/package.json b/packages/log-format/package.json index 33eeacd1272f..b43a3954a96f 100644 --- a/packages/log-format/package.json +++ b/packages/log-format/package.json @@ -5,16 +5,12 @@ "devDependencies": { "@types/chalk": "^2.2.0", "@types/ejson": "^2.2.1", - "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "build": "rm -rf dist && tsc -p tsconfig.json", "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" }, diff --git a/packages/logger/package.json b/packages/logger/package.json index efbe5aa6e12f..aae996f35139 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -3,16 +3,12 @@ "version": "0.0.2", "private": true, "devDependencies": { - "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "build": "rm -rf dist && tsc -p tsconfig.json", "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" }, diff --git a/packages/message-parser/jest.config.js b/packages/message-parser/jest.config.js deleted file mode 100644 index 114260f819d9..000000000000 --- a/packages/message-parser/jest.config.js +++ /dev/null @@ -1,12 +0,0 @@ -const path = require('path'); - -module.exports = { - coverageReporters: [], - transform: { - '\\.pegjs$': path.resolve(__dirname, './loaders/pegtransform.js'), - }, - preset: 'ts-jest', - errorOnDeprecated: true, - testMatch: ['/tests/**/*.(spec|test).ts'], - moduleFileExtensions: ['js', 'ts', 'pegjs'], -}; diff --git a/packages/message-parser/jest.config.ts b/packages/message-parser/jest.config.ts new file mode 100644 index 000000000000..e11f29938eb9 --- /dev/null +++ b/packages/message-parser/jest.config.ts @@ -0,0 +1,12 @@ +import { resolve } from 'node:path'; + +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + +export default { + preset: server.preset, + transform: { + '\\.pegjs$': resolve(__dirname, './loaders/pegtransform.js'), + }, + moduleFileExtensions: ['js', 'ts', 'pegjs'], +} satisfies Config; diff --git a/packages/message-parser/package.json b/packages/message-parser/package.json index cfdb0ebe73d5..fd7e88dc1d86 100644 --- a/packages/message-parser/package.json +++ b/packages/message-parser/package.json @@ -42,9 +42,9 @@ "build": "run-s .:build:clean .:build:bundle", ".:build:clean": "rimraf dist", ".:build:bundle": "webpack", - "testunit": "jest --runInBand --coverage", - "watch": "jest --watch", - "lint": "eslint src", + "lint": "eslint .", + "test": "jest", + "testunit": "jest", "docs": "typedoc" }, "devDependencies": { @@ -52,20 +52,20 @@ "@babel/eslint-parser": "~7.21.3", "@babel/preset-env": "~7.21.4", "@rocket.chat/eslint-config": "workspace:^", + "@rocket.chat/jest-presets": "workspace:~", "@rocket.chat/peggy-loader": "workspace:~", "@rocket.chat/prettier-config": "~0.31.25", - "@types/jest": "~29.5.7", + "@types/jest": "~29.5.12", "@types/node": "~14.18.42", "@typescript-eslint/parser": "~5.58.0", "babel-loader": "~9.1.2", "eslint": "~8.45.0", - "jest": "~29.6.4", + "jest": "~29.7.0", "npm-run-all": "^4.1.5", "peggy": "3.0.2", "prettier": "~2.8.7", "prettier-plugin-pegjs": "~0.5.4", "rimraf": "^3.0.2", - "ts-jest": "~29.1.0", "ts-loader": "~9.4.2", "typedoc": "~0.24.1", "typescript": "~5.3.3", @@ -74,5 +74,8 @@ }, "dependencies": { "tldts": "~5.7.112" + }, + "volta": { + "extends": "../../package.json" } } diff --git a/packages/mock-providers/CHANGELOG.md b/packages/mock-providers/CHANGELOG.md index cbf328eda950..300b624d5dff 100644 --- a/packages/mock-providers/CHANGELOG.md +++ b/packages/mock-providers/CHANGELOG.md @@ -1,5 +1,27 @@ # @rocket.chat/mock-providers +## 0.1.1 + +### Patch Changes + +- ([#32482](https://github.com/RocketChat/Rocket.Chat/pull/32482)) Fixed an issue with blocked login when dismissed 2FA modal by clicking outside of it or pressing the escape key + +-
    Updated dependencies [b4bbcbfc9a, 25da5280a5, 1b7b1161cf, 03c8b066f9, 2d89a0c448, 3ffe4a2944, 3b4b19cfc5]: + + - @rocket.chat/i18n@0.6.0 +
    + +## 0.1.1-rc.0 + +### Patch Changes + +- ([#32482](https://github.com/RocketChat/Rocket.Chat/pull/32482)) Fixed an issue with blocked login when dismissed 2FA modal by clicking outside of it or pressing the escape key + +-
    Updated dependencies [b4bbcbfc9a, 25da5280a5, 1b7b1161cf, 03c8b066f9, 2d89a0c448, 3ffe4a2944, 3b4b19cfc5]: + + - @rocket.chat/i18n@0.6.0-rc.0 +
    + ## 0.1.0 ### Minor Changes diff --git a/packages/mock-providers/package.json b/packages/mock-providers/package.json index 9adbce01c624..64310f0695cc 100644 --- a/packages/mock-providers/package.json +++ b/packages/mock-providers/package.json @@ -1,21 +1,22 @@ { "name": "@rocket.chat/mock-providers", - "version": "0.1.0", + "version": "0.1.1", "private": true, "dependencies": { + "@rocket.chat/emitter": "~0.31.25", "@rocket.chat/i18n": "workspace:~", "i18next": "~23.4.9", - "react-i18next": "~13.2.2" + "react-i18next": "~13.2.2", + "use-sync-external-store": "~1.2.2" }, "devDependencies": { + "@rocket.chat/ddp-client": "workspace:~", "@rocket.chat/ui-contexts": "workspace:*", "@storybook/react": "~6.5.16", "@tanstack/react-query": "^4.16.1", - "@types/jest": "~29.5.7", + "@types/use-sync-external-store": "^0.0.5", "eslint": "~8.45.0", - "jest": "~29.6.4", "react": "~17.0.2", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "peerDependencies": { @@ -25,7 +26,6 @@ "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "build": "rm -rf dist && tsc -p tsconfig.json", "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" }, @@ -33,5 +33,8 @@ "typings": "./dist/index.d.ts", "files": [ "/dist" - ] + ], + "volta": { + "extends": "../../package.json" + } } diff --git a/packages/mock-providers/src/MockedAppRootBuilder.tsx b/packages/mock-providers/src/MockedAppRootBuilder.tsx index 26c6a82c5533..15b1339c560d 100644 --- a/packages/mock-providers/src/MockedAppRootBuilder.tsx +++ b/packages/mock-providers/src/MockedAppRootBuilder.tsx @@ -1,11 +1,10 @@ -import { type ISetting, type Serialized, type SettingValue } from '@rocket.chat/core-typings'; +import type { ISetting, Serialized, SettingValue } from '@rocket.chat/core-typings'; +import type { ServerMethodName, ServerMethodParameters, ServerMethodReturn } from '@rocket.chat/ddp-client'; +import { Emitter } from '@rocket.chat/emitter'; import languages from '@rocket.chat/i18n/dist/languages'; -import { type Method, type OperationParams, type OperationResult, type PathPattern, type UrlParams } from '@rocket.chat/rest-typings'; +import type { Method, OperationParams, OperationResult, PathPattern, UrlParams } from '@rocket.chat/rest-typings'; +import type { ModalContextValue, TranslationKey } from '@rocket.chat/ui-contexts'; import { - type ServerMethodName, - type ServerMethodParameters, - type ServerMethodReturn, - type TranslationKey, AuthorizationContext, ConnectionStatusContext, RouterContext, @@ -16,18 +15,24 @@ import { ActionManagerContext, ModalContext, } from '@rocket.chat/ui-contexts'; -import { type DecoratorFn } from '@storybook/react'; +import type { DecoratorFn } from '@storybook/react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { type WrapperComponent } from '@testing-library/react-hooks'; import { createInstance } from 'i18next'; -import { type ObjectId } from 'mongodb'; -import React, { type ContextType, type ReactNode, useEffect, useReducer } from 'react'; +import type { ObjectId } from 'mongodb'; +import type { ContextType, JSXElementConstructor, ReactNode } from 'react'; +import React, { useEffect, useReducer } from 'react'; import { I18nextProvider, initReactI18next } from 'react-i18next'; +import { useSyncExternalStore } from 'use-sync-external-store/shim'; type Mutable = { -readonly [P in keyof T]: T[P]; }; +// eslint-disable-next-line @typescript-eslint/naming-convention +interface MockedAppRootEvents { + 'update-modal': void; +} + export class MockedAppRootBuilder { private wrappers: Array<(children: ReactNode) => ReactNode> = []; @@ -90,10 +95,16 @@ export class MockedAppRootBuilder { userId: null, }; - private modal: ContextType = { + private modal: ModalContextValue = { currentModal: { component: null }, modal: { - setModal: () => undefined, + setModal: (modal) => { + this.modal = { + ...this.modal, + currentModal: { component: modal }, + }; + this.events.emit('update-modal'); + }, }, }; @@ -113,6 +124,8 @@ export class MockedAppRootBuilder { }, }; + private events = new Emitter(); + wrap(wrapper: (children: ReactNode) => ReactNode): this { this.wrappers.push(wrapper); return this; @@ -312,22 +325,25 @@ export class MockedAppRootBuilder { return this; } - private i18n = createInstance( - { - // debug: true, - lng: 'en', - fallbackLng: 'en', - ns: ['core'], - nsSeparator: '.', - partialBundledLanguages: true, - defaultNS: 'core', - interpolation: { - escapeValue: false, - }, - initImmediate: false, + withOpenModal(modal: ReactNode) { + this.modal.currentModal = { component: modal }; + + return this; + } + + private i18n = createInstance({ + // debug: true, + lng: 'en', + fallbackLng: 'en', + ns: ['core'], + nsSeparator: '.', + partialBundledLanguages: true, + defaultNS: 'core', + interpolation: { + escapeValue: false, }, - () => undefined, - ).use(initReactI18next); + initImmediate: false, + }).use(initReactI18next); withTranslations(lng: string, ns: string, resources: Record): this { const addResources = () => { @@ -346,15 +362,20 @@ export class MockedAppRootBuilder { return this; } - build(): WrapperComponent<{ children: ReactNode }> { + build(): JSXElementConstructor<{ children: ReactNode }> { const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false }, mutations: { retry: false }, }, + logger: { + log: console.log, + warn: console.warn, + error: () => undefined, + }, }); - const { connectionStatus, server, router, settings, user, modal, i18n, authorization, wrappers } = this; + const { connectionStatus, server, router, settings, user, i18n, authorization, wrappers } = this; const reduceTranslation = (translation?: ContextType): ContextType => { return { @@ -393,6 +414,12 @@ export class MockedAppRootBuilder { }; }; + const subscribeToModal = (onStoreChange: () => void) => this.events.on('update-modal', onStoreChange); + + const getModalSnapshot = () => this.modal; + + i18n.init(); + return function MockedAppRoot({ children }) { const [translation, updateTranslation] = useReducer(reduceTranslation, undefined, () => reduceTranslation()); @@ -406,6 +433,8 @@ export class MockedAppRootBuilder { }; }, []); + const modal = useSyncExternalStore(subscribeToModal, getModalSnapshot); + return ( @@ -444,7 +473,13 @@ export class MockedAppRootBuilder { {/* */} - {wrappers.reduce((children, wrapper) => wrapper(children), children)} + {wrappers.reduce( + (children, wrapper) => wrapper(children), + <> + {children} + {modal.currentModal.component} + , + )} {/* */} diff --git a/packages/mock-providers/src/MockedServerContext.tsx b/packages/mock-providers/src/MockedServerContext.tsx index 58b8ac592d27..1f30cd6f1c2f 100644 --- a/packages/mock-providers/src/MockedServerContext.tsx +++ b/packages/mock-providers/src/MockedServerContext.tsx @@ -1,6 +1,6 @@ import type { Serialized } from '@rocket.chat/core-typings'; +import type { ServerMethodName, ServerMethodParameters, ServerMethodReturn } from '@rocket.chat/ddp-client'; import type { Method, OperationParams, OperationResult, PathPattern, UrlParams } from '@rocket.chat/rest-typings'; -import type { ServerMethodName, ServerMethodParameters, ServerMethodReturn } from '@rocket.chat/ui-contexts'; import { ServerContext } from '@rocket.chat/ui-contexts'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import React from 'react'; diff --git a/packages/model-typings/CHANGELOG.md b/packages/model-typings/CHANGELOG.md index 0b8121fc77a1..29eaadd0e0fe 100644 --- a/packages/model-typings/CHANGELOG.md +++ b/packages/model-typings/CHANGELOG.md @@ -1,5 +1,114 @@ # @rocket.chat/model-typings +## 0.6.0 + +### Minor Changes + +- ([#32493](https://github.com/RocketChat/Rocket.Chat/pull/32493)) Fixed Livechat rooms being displayed in the Engagement Dashboard's "Channels" tab + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. +- ([#32493](https://github.com/RocketChat/Rocket.Chat/pull/32493)) Improved Engagement Dashboard's "Channels" tab performance by not returning rooms that had no activity in the analyzed period + +- ([#32800](https://github.com/RocketChat/Rocket.Chat/pull/32800)) Added the ability to filter chats by `queued` on the Current Chats Omnichannel page + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 24f7df4894, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0 +
    + +## 0.6.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 +
    + +## 0.6.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 +
    + +## 0.6.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 +
    + +## 0.6.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 +
    + +## 0.6.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 +
    + +## 0.6.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 +
    + +## 0.6.0-rc.0 + +### Minor Changes + +- ([#32493](https://github.com/RocketChat/Rocket.Chat/pull/32493)) Fixed Livechat rooms being displayed in the Engagement Dashboard's "Channels" tab + +- ([#32752](https://github.com/RocketChat/Rocket.Chat/pull/32752)) Added system messages support for Omnichannel PDF transcripts and email transcripts. Currently these transcripts don't render system messages and is shown as an empty message in PDF/email. This PR adds this support for all valid livechat system messages. + + Also added a new setting under transcripts, to toggle the inclusion of system messages in email and PDF transcripts. + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. +- ([#32493](https://github.com/RocketChat/Rocket.Chat/pull/32493)) Improved Engagement Dashboard's "Channels" tab performance by not returning rooms that had no activity in the analyzed period + +- ([#32800](https://github.com/RocketChat/Rocket.Chat/pull/32800)) Added the ability to filter chats by `queued` on the Current Chats Omnichannel page + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 24f7df4894, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0-rc.0 +
    + +## 0.5.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-typings@6.10.2 +
    + ## 0.5.1 ### Patch Changes diff --git a/packages/model-typings/package.json b/packages/model-typings/package.json index 3127475ad161..f96764fa49af 100644 --- a/packages/model-typings/package.json +++ b/packages/model-typings/package.json @@ -1,20 +1,16 @@ { "name": "@rocket.chat/model-typings", - "version": "0.5.1", + "version": "0.6.0", "private": true, "devDependencies": { - "@types/jest": "~29.5.7", "@types/node-rsa": "^1.1.3", "eslint": "~8.45.0", - "jest": "~29.6.4", "mongodb": "^4.17.2", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "build": "rm -rf dist && tsc -p tsconfig.json" }, "main": "./dist/index.js", diff --git a/packages/model-typings/src/index.ts b/packages/model-typings/src/index.ts index 23e77ff1de29..61ad5d1f5c55 100644 --- a/packages/model-typings/src/index.ts +++ b/packages/model-typings/src/index.ts @@ -79,3 +79,4 @@ export * from './models/IAuditLogModel'; export * from './models/ICronHistoryModel'; export * from './models/IMigrationsModel'; export * from './models/IModerationReportsModel'; +export * from './updater'; diff --git a/packages/model-typings/src/models/IBaseModel.ts b/packages/model-typings/src/models/IBaseModel.ts index fa053fef9ec8..246c3ae253dd 100644 --- a/packages/model-typings/src/models/IBaseModel.ts +++ b/packages/model-typings/src/models/IBaseModel.ts @@ -22,6 +22,8 @@ import type { WithId, } from 'mongodb'; +import type { Updater } from '../updater'; + export type DefaultFields = Record | Record | void; export type ResultFields = Defaults extends void ? Base @@ -48,6 +50,8 @@ export interface IBaseModel< createIndexes(): Promise; getCollectionName(): string; + getUpdater(): Updater; + updateFromUpdater(query: Filter, updater: Updater): Promise; findOneAndUpdate(query: Filter, update: UpdateFilter | T, options?: FindOneAndUpdateOptions): Promise>; diff --git a/packages/model-typings/src/models/ILivechatDepartmentAgentsModel.ts b/packages/model-typings/src/models/ILivechatDepartmentAgentsModel.ts index 45709dc7ff37..f0f151fa70d4 100644 --- a/packages/model-typings/src/models/ILivechatDepartmentAgentsModel.ts +++ b/packages/model-typings/src/models/ILivechatDepartmentAgentsModel.ts @@ -1,5 +1,5 @@ import type { ILivechatDepartmentAgents, IUser } from '@rocket.chat/core-typings'; -import type { DeleteResult, FindCursor, FindOptions, Document, UpdateResult, Filter } from 'mongodb'; +import type { DeleteResult, FindCursor, FindOptions, Document, UpdateResult, Filter, AggregationCursor } from 'mongodb'; import type { FindPaginated, IBaseModel } from './IBaseModel'; @@ -39,23 +39,6 @@ export interface ILivechatDepartmentAgentsModel extends IBaseModel, ): FindPaginated>; - findActiveDepartmentsByAgentId(agentId: string): FindCursor; - - findActiveDepartmentsByAgentId(agentId: string, options: FindOptions): FindCursor; - - findActiveDepartmentsByAgentId

    ( - agentId: string, - options: FindOptions

    , - ): FindCursor

    ; - - findActiveDepartmentsByAgentId

    ( - agentId: string, - options?: - | undefined - | FindOptions - | FindOptions

    , - ): FindCursor | FindCursor

    ; - findByDepartmentIds(departmentIds: string[], options?: Record): FindCursor; findAgentsByAgentIdAndBusinessHourId(_agentId: string, _businessHourId: string): Promise; setDepartmentEnabledByDepartmentId(departmentId: string, departmentEnabled: boolean): Promise; @@ -67,7 +50,7 @@ export interface ILivechatDepartmentAgentsModel extends IBaseModel, ): Promise; findOneByAgentIdAndDepartmentId(agentId: string, departmentId: string): Promise; - saveAgent(agent: Omit): Promise; + saveAgent(agent: Omit): Promise; removeByAgentId(agentId: string): Promise; removeByDepartmentIdAndAgentId(departmentId: string, agentId: string): Promise; getNextAgentForDepartment( @@ -97,4 +80,5 @@ export interface ILivechatDepartmentAgentsModel extends IBaseModel, ): FindCursor; + findDepartmentsOfAgent(agentId: string, enabled?: boolean): AggregationCursor; } diff --git a/packages/model-typings/src/models/ILivechatRoomsModel.ts b/packages/model-typings/src/models/ILivechatRoomsModel.ts index d4da1d7d8159..3a9eb98d57c4 100644 --- a/packages/model-typings/src/models/ILivechatRoomsModel.ts +++ b/packages/model-typings/src/models/ILivechatRoomsModel.ts @@ -9,6 +9,7 @@ import type { import type { FindCursor, UpdateResult, AggregationCursor, Document, FindOptions, DeleteResult, Filter } from 'mongodb'; import type { FindPaginated } from '..'; +import type { Updater } from '../updater'; import type { IBaseModel } from './IBaseModel'; type Period = { @@ -30,6 +31,8 @@ type WithOptions = { // TODO: Fix types of model export interface ILivechatRoomsModel extends IBaseModel { + getUpdater(): Updater; + getQueueMetrics(params: { departmentId: any; agentId: any; includeOfflineAgents: any; options?: any }): any; findAllNumberOfAbandonedRooms(params: Period & WithDepartment & WithOnlyCount & WithOptions): Promise; @@ -205,14 +208,23 @@ export interface ILivechatRoomsModel extends IBaseModel { options?: FindOptions, extraQuery?: Filter, ): FindCursor; - setResponseByRoomId(roomId: string, responseBy: IOmnichannelRoom['responseBy']): Promise; - setNotResponseByRoomId(roomId: string): Promise; - setAgentLastMessageTs(roomId: string): Promise; - saveAnalyticsDataByRoomId( + getResponseByRoomIdUpdateQuery( + responseBy: IOmnichannelRoom['responseBy'], + updater?: Updater, + ): Updater; + getNotResponseByRoomIdUpdateQuery(updater: Updater): Updater; + getAgentLastMessageTsUpdateQuery(updater?: Updater): Updater; + getAnalyticsUpdateQueryBySentByAgent( room: IOmnichannelRoom, message: IMessage, - analyticsData?: Record, - ): Promise; + analyticsData: Record | undefined, + updater?: Updater, + ): Updater; + getAnalyticsUpdateQueryBySentByVisitor( + room: IOmnichannelRoom, + message: IMessage, + updater?: Updater, + ): Updater; getTotalConversationsBetweenDate(t: 'l', date: { gte: Date; lt: Date }, data?: { departmentId: string }): Promise; getAnalyticsMetricsBetweenDate( t: 'l', @@ -240,11 +252,12 @@ export interface ILivechatRoomsModel extends IBaseModel { removeAgentByRoomId(roomId: string): Promise; removeByVisitorToken(token: string): Promise; removeById(_id: string): Promise; - setVisitorLastMessageTimestampByRoomId(roomId: string, lastMessageTs: Date): Promise; + getVisitorLastMessageTsUpdateQueryByRoomId(lastMessageTs: Date, updater?: Updater): Updater; setVisitorInactivityInSecondsById(roomId: string, visitorInactivity: any): Promise; changeVisitorByRoomId(roomId: string, visitor: { _id: string; username: string; token: string }): Promise; unarchiveOneById(roomId: string): Promise; markVisitorActiveForPeriod(rid: string, period: string): Promise; + getVisitorActiveForPeriodUpdateQuery(period: string, updater?: Updater): Updater; getMACStatisticsForPeriod(period: string): Promise; getMACStatisticsBetweenDates(start: Date, end: Date): Promise; } diff --git a/packages/model-typings/src/models/IRoomsModel.ts b/packages/model-typings/src/models/IRoomsModel.ts index f9daef91dece..1808c9f361f4 100644 --- a/packages/model-typings/src/models/IRoomsModel.ts +++ b/packages/model-typings/src/models/IRoomsModel.ts @@ -1,6 +1,7 @@ import type { IDirectMessageRoom, IMessage, IOmnichannelGenericRoom, IRoom, IRoomFederated, ITeam, IUser } from '@rocket.chat/core-typings'; import type { AggregationCursor, DeleteResult, Document, FindCursor, FindOptions, UpdateOptions, UpdateResult } from 'mongodb'; +import type { Updater } from '../updater'; import type { FindPaginated, IBaseModel } from './IBaseModel'; export interface IChannelsWithNumberOfMessagesBetweenDate { @@ -119,6 +120,8 @@ export interface IRoomsModel extends IBaseModel { setRoomNameById(roomId: IRoom['_id'], name: IRoom['name']): Promise; + setSidepanelById(roomId: IRoom['_id'], sidepanel: IRoom['sidepanel']): Promise; + setFnameById(_id: IRoom['_id'], fname: IRoom['fname']): Promise; setRoomTopicById(roomId: IRoom['_id'], topic: IRoom['description']): Promise; @@ -160,6 +163,7 @@ export interface IRoomsModel extends IBaseModel { countFederatedRooms(): Promise; incMsgCountById(rid: string, inc: number): Promise; + getIncMsgCountUpdateQuery(inc: number, roomUpdater: Updater): Updater; decreaseMessageCountById(rid: string, dec: number): Promise; findOneByIdOrName(_idOrName: string, options?: FindOptions): Promise; setCallStatus(_id: string, callStatus: IRoom['callStatus']): Promise; @@ -232,10 +236,15 @@ export interface IRoomsModel extends IBaseModel { archiveById(rid: string): Promise; unarchiveById(rid: string): Promise; setNameById(rid: string, name: string, fname: string): Promise; - incMsgCountAndSetLastMessageById(rid: IRoom['_id'], inc: number, lastMessageTs: Date, lastMessage?: IMessage): Promise; + setIncMsgCountAndSetLastMessageUpdateQuery( + inc: number, + lastMessage: IMessage, + shouldStoreLastMessage: boolean, + roomUpdater: Updater, + ): Updater; incUsersCountById(rid: string, inc: number): Promise; incUsersCountNotDMsByIds(rids: string[], inc: number): Promise; - setLastMessageById(rid: string, lastMessage: IRoom['lastMessage']): Promise; + getLastMessageUpdateQuery(lastMessage: IRoom['lastMessage'], roomUpdater: Updater): Updater; resetLastMessageById(rid: string, lastMessage: IMessage | null, msgCountDelta?: number): Promise; replaceUsername(username: string, newUsername: string): Promise; replaceMutedUsername(username: string, newUsername: string): Promise; diff --git a/packages/model-typings/src/updater.ts b/packages/model-typings/src/updater.ts new file mode 100644 index 000000000000..7743430ad4b8 --- /dev/null +++ b/packages/model-typings/src/updater.ts @@ -0,0 +1,38 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import type { Join, NestedPaths, PropertyType, ArrayElement, NestedPathsOfType, UpdateFilter } from 'mongodb'; + +export interface Updater { + set

    , K extends keyof P>(key: K, value: P[K]): Updater; + unset>(key: K): Updater; + inc>(key: K, value: number): Updater; + addToSet>(key: K, value: ArrayElementType[K]>): Updater; + hasChanges(): boolean; + getUpdateFilter(): UpdateFilter; +} + +type ArrayElementType = T extends (infer E)[] ? E : T; + +export type SetProps = Readonly< + { + [Property in Join, '.'>]: PropertyType; + } & { + [Property in `${NestedPathsOfType}.$${`[${string}]` | ''}`]: ArrayElement< + PropertyType + >; + } & { + [Property in `${NestedPathsOfType[]>}.$${`[${string}]` | ''}.${string}`]: any; + } +>; + +type GetType = { + [Key in keyof T]: K extends T[Key] ? T[Key] : never; +}; + +type OmitNever = { [K in keyof T as T[K] extends never ? never : K]: T[K] }; + +// only allow optional properties +export type UnsetProps = OmitNever, undefined>>; + +export type IncProps = OmitNever, number>>; + +export type AddToSetProps = OmitNever, any[]>>; diff --git a/packages/models/CHANGELOG.md b/packages/models/CHANGELOG.md index 3bb8885897be..e2b984708aaa 100644 --- a/packages/models/CHANGELOG.md +++ b/packages/models/CHANGELOG.md @@ -1,5 +1,92 @@ # @rocket.chat/models +## 0.2.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +-

    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 264d7d5496]: + + - @rocket.chat/model-typings@0.6.0 +
    + +## 0.2.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/model-typings@0.6.0-rc.6 +
    + +## 0.2.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/model-typings@0.6.0-rc.5 +
    + +## 0.2.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/model-typings@0.6.0-rc.4 +
    + +## 0.2.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/model-typings@0.6.0-rc.3 +
    + +## 0.2.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/model-typings@0.6.0-rc.2 +
    + +## 0.2.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + - @rocket.chat/model-typings@0.6.0-rc.1 +
    + +## 0.2.0-rc.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +-
    Updated dependencies [439faa87d3, 03c8b066f9, 2d89a0c448, 439faa87d3, 264d7d5496]: + + - @rocket.chat/model-typings@0.6.0-rc.0 +
    + +### Patch Changes + +-
    Updated dependencies []: + - @rocket.chat/model-typings@0.5.2 +
    + ## 0.1.1 ### Patch Changes diff --git a/packages/models/jest.config.ts b/packages/models/jest.config.ts index eb3f38119a73..c18c8ae02465 100644 --- a/packages/models/jest.config.ts +++ b/packages/models/jest.config.ts @@ -1,14 +1,6 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', - errorOnDeprecated: true, - testEnvironment: 'jsdom', - modulePathIgnorePatterns: ['/dist/'], - testMatch: ['**/**.spec.ts'], - transform: { - '^.+\\.(t|j)sx?$': '@swc/jest', - }, - moduleNameMapper: { - '\\.css$': 'identity-obj-proxy', - }, - collectCoverage: true, -}; + preset: server.preset, +} satisfies Config; diff --git a/packages/models/package.json b/packages/models/package.json index 89197d6796aa..19f1f28438f6 100644 --- a/packages/models/package.json +++ b/packages/models/package.json @@ -1,25 +1,24 @@ { "name": "@rocket.chat/models", - "version": "0.1.1", + "version": "0.2.0", "private": true, "devDependencies": { - "@swc/core": "^1.3.95", - "@swc/jest": "^0.2.29", - "@types/jest": "~29.5.7", + "@rocket.chat/jest-presets": "workspace:~", + "@types/jest": "~29.5.12", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", + "jest": "^29.7.0", "typescript": "~5.3.3" }, "dependencies": { - "@rocket.chat/model-typings": "workspace:^" + "@rocket.chat/model-typings": "workspace:~" }, "scripts": { + "build": "rm -rf dist && tsc", + "dev": "tsc --watch --preserveWatchOutput", + "typecheck": "tsc --noEmit", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", "test": "jest", - "dev": "tsc --watch --preserveWatchOutput -p tsconfig.json", - "build": "rm -rf dist && tsc -p tsconfig.json", "unit": "jest", "testunit": "jest" }, diff --git a/packages/models/src/index.ts b/packages/models/src/index.ts index e1cf91f1b0ee..655a94923feb 100644 --- a/packages/models/src/index.ts +++ b/packages/models/src/index.ts @@ -88,6 +88,7 @@ export function getCollectionName(name: string): string { } export { registerModel } from './proxify'; +export { type Updater, UpdaterImpl } from './updater'; export const Apps = proxify('IAppsModel'); export const AppsTokens = proxify('IAppsTokensModel'); diff --git a/packages/models/src/updater.spec.ts b/packages/models/src/updater.spec.ts new file mode 100644 index 000000000000..bdae43e338f3 --- /dev/null +++ b/packages/models/src/updater.spec.ts @@ -0,0 +1,152 @@ +import type { IOmnichannelRoom } from '@rocket.chat/core-typings'; + +import { UpdaterImpl } from './updater'; + +test('updater typings', () => { + const updater = new UpdaterImpl<{ + _id: string; + t: 'l'; + a: { + b: string; + }; + c?: number; + + d?: { + e: string; + }; + e: string[]; + }>(); + + // @ts-expect-error: it should not allow any string to `t` only `l` is allowed + updater.set('t', 'a'); + // `l` is allowed + updater.set('t', 'l'); + + // `a` is { b: string } + updater.set('a', { b: 'test' }); + updater.set('a.b', 'test'); + // @ts-expect-error: it should not allow strings to `a`, a is an object containing `b: string` + updater.set('a', 'b'); + // @ts-expect-error: `a` is not optional so unset is not allowed + updater.unset('a'); + // @ts-expect-error: strings cannot be incremented + updater.inc('a', 1); + + // `c` is number but it should be optional, so unset is allowed + updater.unset('c'); + updater.set('c', 1); + // @ts-expect-error: `c` is a number + updater.set('c', 'b'); + // inc is allowed for numbers + updater.inc('c', 1); + + // `d` is { e: string } but it should be optional, so unset is allowed + updater.unset('d'); + updater.set('d', { e: 'a' }); + // @ts-expect-error: `d` is an object + updater.set('d', 'a'); + + // @ts-expect-error: it should not allow numbers, since e is a string + updater.addToSet('e', 1); + // @ts-expect-error: it should not allow strings, since a is an object + updater.addToSet('a', 'b'); + + updater.addToSet('e', 'a'); + // @ts-expect-error: it should not allow `njame` its not specified in the model + updater.set('njame', 1); + + // `d` is { e: string } and also it should be optional, so unset is allowed + updater.unset('d.e'); + // @ts-expect-error: `d` is an object cannot be incremented + updater.inc('d', 1); + + // `activity` is a string + const omnichannel = new UpdaterImpl(); + omnichannel.addToSet('v.activity', 'asd'); + // @ts-expect-error: it should not allow numbers, since activity is a string + omnichannel.addToSet('v.activity', 1); + // @ts-expect-error: it should not allow objects, since activity is a string + omnichannel.addToSet('v.activity', { + asdas: 1, + }); + // @ts-expect-error: it should not allow sub properties, since activity is a string + omnichannel.addToSet('v.activity.asd', { + asdas: 1, + }); +}); + +test('updater $set operations', async () => { + const updater = new UpdaterImpl<{ + _id: string; + t: 'l'; + a: { + b: string; + }; + c?: number; + }>(); + + updater.set('a', { + b: 'set', + }); + + expect(updater.getUpdateFilter()).toEqual({ $set: { a: { b: 'set' } } }); +}); + +test('updater $unset operations', async () => { + const updater = new UpdaterImpl<{ + _id: string; + t: 'l'; + a: { + b: string; + }; + c?: number; + }>(); + updater.unset('c'); + expect(updater.getUpdateFilter()).toEqual({ $unset: { c: 1 } }); +}); + +test('updater inc multiple operations', async () => { + const updater = new UpdaterImpl<{ + _id: string; + t: 'l'; + a: { + b: string; + }; + c?: number; + }>(); + + updater.inc('c', 1); + updater.inc('c', 1); + + expect(updater.getUpdateFilter()).toEqual({ $inc: { c: 2 } }); +}); + +test('it should add items to array', async () => { + const updater = new UpdaterImpl<{ + _id: string; + a: string[]; + }>(); + + updater.addToSet('a', 'b'); + updater.addToSet('a', 'c'); + + expect(updater.getUpdateFilter()).toEqual({ $addToSet: { a: { $each: ['b', 'c'] } } }); +}); + +test('it should getUpdateFilter only once', async () => { + const updater = new UpdaterImpl<{ + _id: string; + t: 'l'; + a: { + b: string; + }; + c?: number; + }>(); + + updater.set('a', { + b: 'set', + }); + + expect(updater.getUpdateFilter()).toEqual({ $set: { a: { b: 'set' } } }); + expect(() => updater.getUpdateFilter()).toThrow(); +}); diff --git a/packages/models/src/updater.ts b/packages/models/src/updater.ts new file mode 100644 index 000000000000..4f7ad271f397 --- /dev/null +++ b/packages/models/src/updater.ts @@ -0,0 +1,79 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import type { Updater, SetProps, UnsetProps, IncProps, AddToSetProps } from '@rocket.chat/model-typings'; +import type { UpdateFilter } from 'mongodb'; + +type ArrayElementType = T extends (infer E)[] ? E : T; + +type Keys = keyof SetProps; + +export class UpdaterImpl implements Updater { + private _set: Map, any> | undefined; + + private _unset: Set> | undefined; + + private _inc: Map, number> | undefined; + + private _addToSet: Map, any[]> | undefined; + + private dirty = false; + + set

    , K extends keyof P>(key: K, value: P[K]) { + this._set = this._set ?? new Map, any>(); + this._set.set(key as Keys, value); + return this; + } + + unset>(key: K): Updater { + this._unset = this._unset ?? new Set>(); + this._unset.add(key); + return this; + } + + inc>(key: K, value: number): Updater { + this._inc = this._inc ?? new Map, number>(); + + const prev = this._inc.get(key) ?? 0; + this._inc.set(key, prev + value); + return this; + } + + addToSet>(key: K, value: ArrayElementType[K]>): Updater { + this._addToSet = this._addToSet ?? new Map, any[]>(); + + const prev = this._addToSet.get(key) ?? []; + this._addToSet.set(key, [...prev, value]); + return this; + } + + hasChanges() { + const filter = this._getUpdateFilter(); + return this._hasChanges(filter); + } + + private _hasChanges(filter: UpdateFilter) { + return Object.keys(filter).length > 0; + } + + private _getUpdateFilter() { + return { + ...(this._set && { $set: Object.fromEntries(this._set) }), + ...(this._unset && { $unset: Object.fromEntries([...this._unset.values()].map((k) => [k, 1])) }), + ...(this._inc && { $inc: Object.fromEntries(this._inc) }), + ...(this._addToSet && { $addToSet: Object.fromEntries([...this._addToSet.entries()].map(([k, v]) => [k, { $each: v }])) }), + } as unknown as UpdateFilter; + } + + getUpdateFilter() { + if (this.dirty) { + throw new Error('Updater is dirty'); + } + this.dirty = true; + const filter = this._getUpdateFilter(); + if (!this._hasChanges(filter)) { + throw new Error('No changes to update'); + } + return filter; + } +} + +export { Updater }; diff --git a/packages/node-poplib/package.json b/packages/node-poplib/package.json index 9e9a112945e6..a232d6b4c476 100644 --- a/packages/node-poplib/package.json +++ b/packages/node-poplib/package.json @@ -3,15 +3,9 @@ "version": "0.0.2", "private": true, "devDependencies": { - "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, - "scripts": { - "test": "jest" - }, "main": "./src/index.js", "typings": "./dist/index.d.ts" } diff --git a/packages/password-policies/jest.config.ts b/packages/password-policies/jest.config.ts index 959a31a7c6bf..c18c8ae02465 100644 --- a/packages/password-policies/jest.config.ts +++ b/packages/password-policies/jest.config.ts @@ -1,3 +1,6 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', -}; + preset: server.preset, +} satisfies Config; diff --git a/packages/password-policies/package.json b/packages/password-policies/package.json index 4b2f0c76b7ae..d53ffa1f5249 100644 --- a/packages/password-policies/package.json +++ b/packages/password-policies/package.json @@ -3,20 +3,20 @@ "version": "0.0.2", "private": true, "devDependencies": { - "@types/chai": "~4.3.16", - "@types/jest": "~29.5.7", - "chai": "^4.3.10", + "@rocket.chat/jest-presets": "workspace:~", + "@types/jest": "~29.5.12", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", + "jest": "~29.7.0", "typescript": "~5.3.3" }, "scripts": { + "build": "rm -rf dist && tsc", + "dev": "tsc --watch --preserveWatchOutput", + "typecheck": "tsc --noEmit", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "testunit": "jest", - "build": "rm -rf dist && tsc -p tsconfig.json", - "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" + "test": "jest", + "testunit": "jest" }, "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/packages/password-policies/src/PasswordPolicy.spec.ts b/packages/password-policies/src/PasswordPolicy.spec.ts new file mode 100644 index 000000000000..c85cfc64586e --- /dev/null +++ b/packages/password-policies/src/PasswordPolicy.spec.ts @@ -0,0 +1,219 @@ +import { PasswordPolicy } from './PasswordPolicy'; + +describe('Password tests with default options', () => { + it('should allow all passwords', () => { + const passwordPolicy = new PasswordPolicy({ throwError: false }); + expect(passwordPolicy.validate(null as any)).toBe(false); + expect(passwordPolicy.validate(undefined as any)).toBe(false); + expect(passwordPolicy.validate('')).toBe(false); + expect(passwordPolicy.validate(' ')).toBe(false); + expect(passwordPolicy.validate('a')).toBe(true); + expect(passwordPolicy.validate('aaaaaaaaa')).toBe(true); + }); +}); + +describe('Password tests with options', () => { + it('should not allow non string or empty', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + throwError: false, + }); + expect(passwordPolicy.validate(null as any)).toBe(false); + expect(passwordPolicy.validate(undefined as any)).toBe(false); + expect(passwordPolicy.validate(1 as any)).toBe(false); + expect(passwordPolicy.validate(true as any)).toBe(false); + expect(passwordPolicy.validate(new Date() as any)).toBe(false); + expect(passwordPolicy.validate(new Function() as any)).toBe(false); + expect(passwordPolicy.validate('')).toBe(false); + }); + + it('should restrict by minLength', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + minLength: 5, + throwError: false, + }); + + expect(passwordPolicy.validate('1')).toBe(false); + expect(passwordPolicy.validate('1234')).toBe(false); + expect(passwordPolicy.validate('12345')).toBe(true); + expect(passwordPolicy.validate(' ')).toBe(false); + }); + + it('should restrict by maxLength', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + maxLength: 5, + throwError: false, + }); + + expect(passwordPolicy.validate('1')).toBe(true); + expect(passwordPolicy.validate('12345')).toBe(true); + expect(passwordPolicy.validate('123456')).toBe(false); + expect(passwordPolicy.validate(' ')).toBe(false); + }); + + it('should allow repeated characters', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + forbidRepeatingCharacters: false, + throwError: false, + }); + + expect(passwordPolicy.validate('1')).toBe(true); + expect(passwordPolicy.validate('12345')).toBe(true); + expect(passwordPolicy.validate('123456')).toBe(true); + expect(passwordPolicy.validate(' ')).toBe(false); + expect(passwordPolicy.validate('11111111111111')).toBe(true); + }); + + it('should restrict repeated characters', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + forbidRepeatingCharacters: true, + forbidRepeatingCharactersCount: 3, + throwError: false, + }); + + expect(passwordPolicy.validate('1')).toBe(true); + expect(passwordPolicy.validate('11')).toBe(true); + expect(passwordPolicy.validate('111')).toBe(true); + expect(passwordPolicy.validate('1111')).toBe(false); + expect(passwordPolicy.validate(' ')).toBe(false); + expect(passwordPolicy.validate('123456')).toBe(true); + }); + + it('should restrict repeated characters customized', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + forbidRepeatingCharacters: true, + forbidRepeatingCharactersCount: 5, + throwError: false, + }); + + expect(passwordPolicy.validate('1')).toBe(true); + expect(passwordPolicy.validate('11')).toBe(true); + expect(passwordPolicy.validate('111')).toBe(true); + expect(passwordPolicy.validate('1111')).toBe(true); + expect(passwordPolicy.validate('11111')).toBe(true); + expect(passwordPolicy.validate('111111')).toBe(false); + expect(passwordPolicy.validate(' ')).toBe(false); + expect(passwordPolicy.validate('123456')).toBe(true); + }); + + it('should contain one lowercase', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + mustContainAtLeastOneLowercase: true, + throwError: false, + }); + + expect(passwordPolicy.validate('a')).toBe(true); + expect(passwordPolicy.validate('aa')).toBe(true); + expect(passwordPolicy.validate('A')).toBe(false); + expect(passwordPolicy.validate(' ')).toBe(false); + expect(passwordPolicy.validate('123456')).toBe(false); + expect(passwordPolicy.validate('AAAAA')).toBe(false); + expect(passwordPolicy.validate('AAAaAAA')).toBe(true); + }); + + it('should contain one uppercase', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + mustContainAtLeastOneUppercase: true, + throwError: false, + }); + + expect(passwordPolicy.validate('a')).toBe(false); + expect(passwordPolicy.validate('aa')).toBe(false); + expect(passwordPolicy.validate('A')).toBe(true); + expect(passwordPolicy.validate(' ')).toBe(false); + expect(passwordPolicy.validate('123456')).toBe(false); + expect(passwordPolicy.validate('AAAAA')).toBe(true); + expect(passwordPolicy.validate('AAAaAAA')).toBe(true); + }); + + it('should contain one number', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + mustContainAtLeastOneNumber: true, + throwError: false, + }); + + expect(passwordPolicy.validate('a')).toBe(false); + expect(passwordPolicy.validate('aa')).toBe(false); + expect(passwordPolicy.validate('A')).toBe(false); + expect(passwordPolicy.validate(' ')).toBe(false); + expect(passwordPolicy.validate('123456')).toBe(true); + expect(passwordPolicy.validate('AAAAA')).toBe(false); + expect(passwordPolicy.validate('AAAaAAA')).toBe(false); + expect(passwordPolicy.validate('AAAa1AAA')).toBe(true); + }); + + it('should contain one special character', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + mustContainAtLeastOneSpecialCharacter: true, + throwError: false, + }); + + expect(passwordPolicy.validate('a')).toBe(false); + expect(passwordPolicy.validate('aa')).toBe(false); + expect(passwordPolicy.validate('A')).toBe(false); + expect(passwordPolicy.validate(' ')).toBe(false); + expect(passwordPolicy.validate('123456')).toBe(false); + expect(passwordPolicy.validate('AAAAA')).toBe(false); + expect(passwordPolicy.validate('AAAaAAA')).toBe(false); + expect(passwordPolicy.validate('AAAa1AAA')).toBe(false); + expect(passwordPolicy.validate('AAAa@AAA')).toBe(true); + }); +}); + +describe('Password Policy', () => { + it('should return a correct password policy', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + throwError: false, + minLength: 10, + maxLength: 20, + forbidRepeatingCharacters: true, + forbidRepeatingCharactersCount: 4, + mustContainAtLeastOneLowercase: true, + mustContainAtLeastOneUppercase: true, + mustContainAtLeastOneNumber: true, + mustContainAtLeastOneSpecialCharacter: true, + }); + + const policy = passwordPolicy.getPasswordPolicy(); + + expect(policy).not.toBe(undefined); + expect(policy.enabled).toBe(true); + expect(policy.policy.length).toBe(8); + expect(policy.policy[0][0]).toBe('get-password-policy-minLength'); + expect(policy.policy[0][1]?.minLength).toBe(10); + }); + + it('should return correct values if policy is disabled', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: false, + }); + + const policy = passwordPolicy.getPasswordPolicy(); + + expect(policy.enabled).toBe(false); + expect(policy.policy.length).toBe(0); + }); + + it('should return correct values if policy is enabled but no specifiers exists', () => { + const passwordPolicy = new PasswordPolicy({ + enabled: true, + }); + + const policy = passwordPolicy.getPasswordPolicy(); + + expect(policy.enabled).toBe(true); + // even when no policy is specified, forbidRepeatingCharactersCount is still configured + // since its default value is 3 + expect(policy.policy.length).toBe(1); + }); +}); diff --git a/packages/password-policies/src/PasswordPolicyClass.ts b/packages/password-policies/src/PasswordPolicy.ts similarity index 100% rename from packages/password-policies/src/PasswordPolicyClass.ts rename to packages/password-policies/src/PasswordPolicy.ts diff --git a/packages/password-policies/src/index.ts b/packages/password-policies/src/index.ts index ce94042e029a..fe91af266a93 100644 --- a/packages/password-policies/src/index.ts +++ b/packages/password-policies/src/index.ts @@ -1 +1 @@ -export { PasswordPolicy } from './PasswordPolicyClass'; +export { PasswordPolicy } from './PasswordPolicy'; diff --git a/packages/password-policies/tests/passwordPolicyClass.test.ts b/packages/password-policies/tests/passwordPolicyClass.test.ts deleted file mode 100644 index 4cda16e3dd27..000000000000 --- a/packages/password-policies/tests/passwordPolicyClass.test.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { expect } from 'chai'; - -import { PasswordPolicy } from '../src/PasswordPolicyClass'; - -describe('PasswordPolicy', () => { - describe('Password tests with default options', () => { - it('should allow all passwords', () => { - const passwordPolicy = new PasswordPolicy({ throwError: false }); - expect(passwordPolicy.validate(null as any)).to.be.equal(false); - expect(passwordPolicy.validate(undefined as any)).to.be.equal(false); - expect(passwordPolicy.validate('')).to.be.equal(false); - expect(passwordPolicy.validate(' ')).to.be.equal(false); - expect(passwordPolicy.validate('a')).to.be.equal(true); - expect(passwordPolicy.validate('aaaaaaaaa')).to.be.equal(true); - }); - }); - - describe('Password tests with options', () => { - it('should not allow non string or empty', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - throwError: false, - }); - expect(passwordPolicy.validate(null as any)).to.be.equal(false); - expect(passwordPolicy.validate(undefined as any)).to.be.false; - expect(passwordPolicy.validate(1 as any)).to.be.false; - expect(passwordPolicy.validate(true as any)).to.be.false; - expect(passwordPolicy.validate(new Date() as any)).to.be.false; - expect(passwordPolicy.validate(new Function() as any)).to.be.false; - expect(passwordPolicy.validate('')).to.be.false; - }); - - it('should restrict by minLength', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - minLength: 5, - throwError: false, - }); - - expect(passwordPolicy.validate('1')).to.be.false; - expect(passwordPolicy.validate('1234')).to.be.false; - expect(passwordPolicy.validate('12345')).to.be.true; - expect(passwordPolicy.validate(' ')).to.be.false; - }); - - it('should restrict by maxLength', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - maxLength: 5, - throwError: false, - }); - - expect(passwordPolicy.validate('1')).to.be.true; - expect(passwordPolicy.validate('12345')).to.be.true; - expect(passwordPolicy.validate('123456')).to.be.false; - expect(passwordPolicy.validate(' ')).to.be.false; - }); - - it('should allow repeated characters', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - forbidRepeatingCharacters: false, - throwError: false, - }); - - expect(passwordPolicy.validate('1')).to.be.true; - expect(passwordPolicy.validate('12345')).to.be.true; - expect(passwordPolicy.validate('123456')).to.be.true; - expect(passwordPolicy.validate(' ')).to.be.false; - expect(passwordPolicy.validate('11111111111111')).to.be.true; - }); - - it('should restrict repeated characters', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - forbidRepeatingCharacters: true, - forbidRepeatingCharactersCount: 3, - throwError: false, - }); - - expect(passwordPolicy.validate('1')).to.be.true; - expect(passwordPolicy.validate('11')).to.be.true; - expect(passwordPolicy.validate('111')).to.be.true; - expect(passwordPolicy.validate('1111')).to.be.false; - expect(passwordPolicy.validate(' ')).to.be.false; - expect(passwordPolicy.validate('123456')).to.be.true; - }); - - it('should restrict repeated characters customized', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - forbidRepeatingCharacters: true, - forbidRepeatingCharactersCount: 5, - throwError: false, - }); - - expect(passwordPolicy.validate('1')).to.be.true; - expect(passwordPolicy.validate('11')).to.be.true; - expect(passwordPolicy.validate('111')).to.be.true; - expect(passwordPolicy.validate('1111')).to.be.true; - expect(passwordPolicy.validate('11111')).to.be.true; - expect(passwordPolicy.validate('111111')).to.be.false; - expect(passwordPolicy.validate(' ')).to.be.false; - expect(passwordPolicy.validate('123456')).to.be.true; - }); - - it('should contain one lowercase', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - mustContainAtLeastOneLowercase: true, - throwError: false, - }); - - expect(passwordPolicy.validate('a')).to.be.true; - expect(passwordPolicy.validate('aa')).to.be.true; - expect(passwordPolicy.validate('A')).to.be.false; - expect(passwordPolicy.validate(' ')).to.be.false; - expect(passwordPolicy.validate('123456')).to.be.false; - expect(passwordPolicy.validate('AAAAA')).to.be.false; - expect(passwordPolicy.validate('AAAaAAA')).to.be.true; - }); - - it('should contain one uppercase', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - mustContainAtLeastOneUppercase: true, - throwError: false, - }); - - expect(passwordPolicy.validate('a')).to.be.false; - expect(passwordPolicy.validate('aa')).to.be.false; - expect(passwordPolicy.validate('A')).to.be.true; - expect(passwordPolicy.validate(' ')).to.be.false; - expect(passwordPolicy.validate('123456')).to.be.false; - expect(passwordPolicy.validate('AAAAA')).to.be.true; - expect(passwordPolicy.validate('AAAaAAA')).to.be.true; - }); - - it('should contain one number', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - mustContainAtLeastOneNumber: true, - throwError: false, - }); - - expect(passwordPolicy.validate('a')).to.be.false; - expect(passwordPolicy.validate('aa')).to.be.false; - expect(passwordPolicy.validate('A')).to.be.false; - expect(passwordPolicy.validate(' ')).to.be.false; - expect(passwordPolicy.validate('123456')).to.be.true; - expect(passwordPolicy.validate('AAAAA')).to.be.false; - expect(passwordPolicy.validate('AAAaAAA')).to.be.false; - expect(passwordPolicy.validate('AAAa1AAA')).to.be.true; - }); - - it('should contain one special character', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - mustContainAtLeastOneSpecialCharacter: true, - throwError: false, - }); - - expect(passwordPolicy.validate('a')).to.be.false; - expect(passwordPolicy.validate('aa')).to.be.false; - expect(passwordPolicy.validate('A')).to.be.false; - expect(passwordPolicy.validate(' ')).to.be.false; - expect(passwordPolicy.validate('123456')).to.be.false; - expect(passwordPolicy.validate('AAAAA')).to.be.false; - expect(passwordPolicy.validate('AAAaAAA')).to.be.false; - expect(passwordPolicy.validate('AAAa1AAA')).to.be.false; - expect(passwordPolicy.validate('AAAa@AAA')).to.be.true; - }); - }); - - describe('Password Policy', () => { - it('should return a correct password policy', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - throwError: false, - minLength: 10, - maxLength: 20, - forbidRepeatingCharacters: true, - forbidRepeatingCharactersCount: 4, - mustContainAtLeastOneLowercase: true, - mustContainAtLeastOneUppercase: true, - mustContainAtLeastOneNumber: true, - mustContainAtLeastOneSpecialCharacter: true, - }); - - const policy = passwordPolicy.getPasswordPolicy(); - - expect(policy).to.not.be.undefined; - expect(policy.enabled).to.be.true; - expect(policy.policy.length).to.be.equal(8); - expect(policy.policy[0][0]).to.be.equal('get-password-policy-minLength'); - expect(policy.policy[0][1]?.minLength).to.be.equal(10); - }); - - it('should return correct values if policy is disabled', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: false, - }); - - const policy = passwordPolicy.getPasswordPolicy(); - - expect(policy.enabled).to.be.false; - expect(policy.policy.length).to.be.equal(0); - }); - - it('should return correct values if policy is enabled but no specifiers exists', () => { - const passwordPolicy = new PasswordPolicy({ - enabled: true, - }); - - const policy = passwordPolicy.getPasswordPolicy(); - - expect(policy.enabled).to.be.true; - // even when no policy is specified, forbidRepeatingCharactersCount is still configured - // since its default value is 3 - expect(policy.policy.length).to.be.equal(1); - }); - }); -}); diff --git a/packages/patch-injection/jest.config.ts b/packages/patch-injection/jest.config.ts index 959a31a7c6bf..c18c8ae02465 100644 --- a/packages/patch-injection/jest.config.ts +++ b/packages/patch-injection/jest.config.ts @@ -1,3 +1,6 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', -}; + preset: server.preset, +} satisfies Config; diff --git a/packages/patch-injection/package.json b/packages/patch-injection/package.json index e90f662ac202..99f676bff831 100644 --- a/packages/patch-injection/package.json +++ b/packages/patch-injection/package.json @@ -3,18 +3,19 @@ "version": "0.0.1", "private": true, "devDependencies": { - "@types/jest": "~29.5.7", + "@rocket.chat/jest-presets": "workspace:~", + "@types/jest": "~29.5.12", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", + "jest": "~29.7.0", "typescript": "~5.3.3" }, "scripts": { + "build": "rm -rf dist && tsc", + "dev": "tsc --watch --preserveWatchOutput", + "typecheck": "tsc --noEmit", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", - "build": "rm -rf dist && tsc -p tsconfig.json", - "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" + "test": "jest" }, "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/packages/patch-injection/src/makeFunction.spec.ts b/packages/patch-injection/src/makeFunction.spec.ts new file mode 100644 index 000000000000..f88efff2be49 --- /dev/null +++ b/packages/patch-injection/src/makeFunction.spec.ts @@ -0,0 +1,236 @@ +import { makeFunction } from './makeFunction'; + +describe('Make a simple function', () => { + it('should execute the function passed as argument', () => { + const fn = makeFunction(() => { + throw new Error('function was called'); + }); + + expect(fn).toThrow('function was called'); + }); + + it('should return the result of the internal function', () => { + const fn = makeFunction(() => 15); + + expect(fn()).toBe(15); + }); +}); + +describe('Replace a simple function', () => { + it('should execute the patched function', () => { + const fn = makeFunction(() => { + throw new Error('function was called'); + }); + + fn.patch(() => { + throw new Error('patch was called'); + }); + + expect(fn).toThrow('patch was called'); + }); + + it('should return the result of the patched function', () => { + const fn = makeFunction(() => 15); + + fn.patch(() => 20); + + expect(fn()).toBe(20); + }); +}); + +describe('Remove a patch', () => { + it('should execute the function passed as argument', () => { + const fn = makeFunction(() => { + throw new Error('function was called'); + }); + + const remove = fn.patch(() => { + throw new Error('patch was called'); + }); + + expect(fn).toThrow('patch was called'); + + remove(); + + expect(fn).toThrow('function was called'); + }); + + it('should return the result of the internal function', () => { + const fn = makeFunction(() => 15); + + const remove = fn.patch(() => 20); + + expect(fn()).toBe(20); + + remove(); + + expect(fn()).toBe(15); + }); +}); + +describe('Patch Condition', () => { + it('should execute either function depending if the patch is enabled or not', () => { + const fn = makeFunction(() => { + throw new Error('function was called'); + }); + + let enabled = false; + + fn.patch( + () => { + throw new Error('patch was called'); + }, + () => enabled, + ); + + expect(fn).toThrow('function was called'); + enabled = true; + expect(fn).toThrow('patch was called'); + enabled = false; + expect(fn).toThrow('function was called'); + }); + + it('should return the value of the right function based on the condition', () => { + const fn = makeFunction(() => 15); + + let enabled = false; + + fn.patch( + () => 20, + () => enabled, + ); + + expect(fn()).toBe(15); + enabled = true; + expect(fn()).toBe(20); + enabled = false; + expect(fn()).toBe(15); + }); +}); + +describe('Chained calls', () => { + it('Should call the inner function', () => { + const fn = makeFunction(() => { + throw new Error('function was called'); + }); + + fn.patch((next) => { + next(); + throw new Error('patch was called'); + }); + + expect(fn).toThrow('function was called'); + }); + + it('should return the sum of values', () => { + const fn = makeFunction(() => 15); + + fn.patch((next) => 20 + next()); + + expect(fn()).toBe(35); + }); + + it('should send the parameters in the correct order every time', () => { + const fn = makeFunction((a: string, b: string) => `3=${[a, b].join('')}`); + + fn.patch((next, a, b) => `2=${[a, b].join('')},${next('E', 'F')}`); + fn.patch((next, a, b) => `1=${[a, b].join('')},${next('C', 'D')}`); + + expect(fn('A', 'B')).toBe('1=AB,2=CD,3=EF'); + }); +}); + +describe('Multiple patches', () => { + it('Should call the right version of the function', () => { + const fn = makeFunction(() => { + throw new Error('function was called'); + }); + + const remove = fn.patch(() => { + throw new Error('patch was called'); + }); + + const remove2 = fn.patch(() => { + throw new Error('second patch was called'); + }); + + expect(fn).toThrow('second patch was called'); + remove2(); + expect(fn).toThrow('patch was called'); + remove(); + expect(fn).toThrow('function was called'); + }); + + it('Should respect conditions and removals', () => { + const fn = makeFunction(() => { + throw new Error('function was called'); + }); + + let enabled = true; + let enabled2 = true; + + const remove = fn.patch( + () => { + throw new Error('patch was called'); + }, + () => enabled, + ); + + const remove2 = fn.patch( + () => { + throw new Error('second patch was called'); + }, + () => enabled2, + ); + + expect(fn).toThrow('second patch was called'); + enabled2 = false; + expect(fn).toThrow('patch was called'); + enabled = false; + expect(fn).toThrow('function was called'); + enabled2 = true; + expect(fn).toThrow('second patch was called'); + enabled = true; + remove2(); + expect(fn).toThrow('patch was called'); + remove(); + expect(fn).toThrow('function was called'); + }); + + it('should chain on the right order', () => { + const fn = makeFunction(() => [1]); + + let enabled2 = true; + let enabled3 = true; + let enabled4 = true; + + fn.patch( + (next) => [2].concat(next()), + () => enabled2, + ); + const remove3 = fn.patch( + (next) => [3].concat(next()), + () => enabled3, + ); + fn.patch( + (next) => [4].concat(next()), + () => enabled4, + ); + + expect(fn()).toStrictEqual([4, 3, 2, 1]); + + enabled2 = false; + expect(fn()).toStrictEqual([4, 3, 1]); + enabled4 = false; + expect(fn()).toStrictEqual([3, 1]); + enabled3 = false; + expect(fn()).toStrictEqual([1]); + enabled3 = true; + expect(fn()).toStrictEqual([3, 1]); + remove3(); + expect(fn()).toStrictEqual([1]); + enabled2 = true; + enabled4 = true; + expect(fn()).toStrictEqual([4, 2, 1]); + }); +}); diff --git a/packages/patch-injection/tests/patches.test.ts b/packages/patch-injection/tests/patches.test.ts deleted file mode 100644 index 74e3da93268a..000000000000 --- a/packages/patch-injection/tests/patches.test.ts +++ /dev/null @@ -1,240 +0,0 @@ -import { expect } from 'chai'; - -import { makeFunction } from '../src/makeFunction'; - -describe('PatchCoordinator', () => { - describe('Make a simple function', () => { - it('should execute the function passed as argument', () => { - const fn = makeFunction(() => { - throw new Error('function was called'); - }); - - expect(fn).to.throw('function was called'); - }); - - it('should return the result of the internal function', () => { - const fn = makeFunction(() => 15); - - expect(fn()).to.be.equal(15); - }); - }); - - describe('Replace a simple function', () => { - it('should execute the patched function', () => { - const fn = makeFunction(() => { - throw new Error('function was called'); - }); - - fn.patch(() => { - throw new Error('patch was called'); - }); - - expect(fn).to.throw('patch was called'); - }); - - it('should return the result of the patched function', () => { - const fn = makeFunction(() => 15); - - fn.patch(() => 20); - - expect(fn()).to.be.equal(20); - }); - }); - - describe('Remove a patch', () => { - it('should execute the function passed as argument', () => { - const fn = makeFunction(() => { - throw new Error('function was called'); - }); - - const remove = fn.patch(() => { - throw new Error('patch was called'); - }); - - expect(fn).to.throw('patch was called'); - - remove(); - - expect(fn).to.throw('function was called'); - }); - - it('should return the result of the internal function', () => { - const fn = makeFunction(() => 15); - - const remove = fn.patch(() => 20); - - expect(fn()).to.be.equal(20); - - remove(); - - expect(fn()).to.be.equal(15); - }); - }); - - describe('Patch Condition', () => { - it('should execute either function depending if the patch is enabled or not', () => { - const fn = makeFunction(() => { - throw new Error('function was called'); - }); - - let enabled = false; - - fn.patch( - () => { - throw new Error('patch was called'); - }, - () => enabled, - ); - - expect(fn).to.throw('function was called'); - enabled = true; - expect(fn).to.throw('patch was called'); - enabled = false; - expect(fn).to.throw('function was called'); - }); - - it('should return the value of the right function based on the condition', () => { - const fn = makeFunction(() => 15); - - let enabled = false; - - fn.patch( - () => 20, - () => enabled, - ); - - expect(fn()).to.be.equal(15); - enabled = true; - expect(fn()).to.be.equal(20); - enabled = false; - expect(fn()).to.be.equal(15); - }); - }); - - describe('Chained calls', () => { - it('Should call the inner function', () => { - const fn = makeFunction(() => { - throw new Error('function was called'); - }); - - fn.patch((next) => { - next(); - throw new Error('patch was called'); - }); - - expect(fn).to.throw('function was called'); - }); - - it('should return the sum of values', () => { - const fn = makeFunction(() => 15); - - fn.patch((next) => 20 + next()); - - expect(fn()).to.be.equal(35); - }); - - it('should send the parameters in the correct order every time', () => { - const fn = makeFunction((a: string, b: string) => `3=${[a, b].join('')}`); - - fn.patch((next, a, b) => `2=${[a, b].join('')},${next('E', 'F')}`); - fn.patch((next, a, b) => `1=${[a, b].join('')},${next('C', 'D')}`); - - expect(fn('A', 'B')).to.be.equal('1=AB,2=CD,3=EF'); - }); - }); - - describe('Multiple patches', () => { - it('Should call the right version of the function', () => { - const fn = makeFunction(() => { - throw new Error('function was called'); - }); - - const remove = fn.patch(() => { - throw new Error('patch was called'); - }); - - const remove2 = fn.patch(() => { - throw new Error('second patch was called'); - }); - - expect(fn).to.throw('second patch was called'); - remove2(); - expect(fn).to.throw('patch was called'); - remove(); - expect(fn).to.throw('function was called'); - }); - - it('Should respect conditions and removals', () => { - const fn = makeFunction(() => { - throw new Error('function was called'); - }); - - let enabled = true; - let enabled2 = true; - - const remove = fn.patch( - () => { - throw new Error('patch was called'); - }, - () => enabled, - ); - - const remove2 = fn.patch( - () => { - throw new Error('second patch was called'); - }, - () => enabled2, - ); - - expect(fn).to.throw('second patch was called'); - enabled2 = false; - expect(fn).to.throw('patch was called'); - enabled = false; - expect(fn).to.throw('function was called'); - enabled2 = true; - expect(fn).to.throw('second patch was called'); - enabled = true; - remove2(); - expect(fn).to.throw('patch was called'); - remove(); - expect(fn).to.throw('function was called'); - }); - - it('should chain on the right order', () => { - const fn = makeFunction(() => [1]); - - let enabled2 = true; - let enabled3 = true; - let enabled4 = true; - - fn.patch( - (next) => [2].concat(next()), - () => enabled2, - ); - const remove3 = fn.patch( - (next) => [3].concat(next()), - () => enabled3, - ); - fn.patch( - (next) => [4].concat(next()), - () => enabled4, - ); - - expect(fn()).to.be.an('array').deep.equal([4, 3, 2, 1]); - - enabled2 = false; - expect(fn()).to.be.an('array').deep.equal([4, 3, 1]); - enabled4 = false; - expect(fn()).to.be.an('array').deep.equal([3, 1]); - enabled3 = false; - expect(fn()).to.be.an('array').deep.equal([1]); - enabled3 = true; - expect(fn()).to.be.an('array').deep.equal([3, 1]); - remove3(); - expect(fn()).to.be.an('array').deep.equal([1]); - enabled2 = true; - enabled4 = true; - expect(fn()).to.be.an('array').deep.equal([4, 2, 1]); - }); - }); -}); diff --git a/packages/peggy-loader/jest.config.js b/packages/peggy-loader/jest.config.js deleted file mode 100644 index 21526c604f6b..000000000000 --- a/packages/peggy-loader/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - preset: 'ts-jest', - errorOnDeprecated: true, - testMatch: ['/src/**/*.spec.[jt]s?(x)'], -}; diff --git a/packages/peggy-loader/package.json b/packages/peggy-loader/package.json index 2b1983bfa62a..5fa014da7f29 100644 --- a/packages/peggy-loader/package.json +++ b/packages/peggy-loader/package.json @@ -31,7 +31,7 @@ "build": "run-s .:build:clean .:build:esm .:build:cjs", ".:build:clean": "rimraf dist", ".:build:esm": "tsc -p tsconfig.json", - ".:build:cjs": "tsc -p tsconfig-cjs.json", + ".:build:cjs": "tsc -p tsconfig.cjs.json", "lint": "eslint src" }, "bugs": { @@ -50,8 +50,10 @@ "peggy": "3.0.2", "prettier": "~2.8.7", "rimraf": "^3.0.2", - "ts-jest": "~29.1.0", "typescript": "~5.3.3", "webpack": "~5.78.0" + }, + "volta": { + "extends": "../../package.json" } } diff --git a/packages/peggy-loader/tsconfig-cjs.json b/packages/peggy-loader/tsconfig.cjs.json similarity index 100% rename from packages/peggy-loader/tsconfig-cjs.json rename to packages/peggy-loader/tsconfig.cjs.json diff --git a/packages/random/jest.config.ts b/packages/random/jest.config.ts index 959a31a7c6bf..e6005852b621 100644 --- a/packages/random/jest.config.ts +++ b/packages/random/jest.config.ts @@ -1,3 +1,18 @@ +import client from '@rocket.chat/jest-presets/client'; +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', -}; + projects: [ + { + displayName: 'client', + preset: client.preset, + testMatch: ['/src/**/*.client.spec.[jt]s?(x)'], + }, + { + displayName: 'server', + preset: server.preset, + testMatch: ['/src/**/*.server.spec.[jt]s?(x)'], + }, + ], +} satisfies Config; diff --git a/packages/random/package.json b/packages/random/package.json index 343ce2344ab1..72fc8c5c566a 100644 --- a/packages/random/package.json +++ b/packages/random/package.json @@ -9,6 +9,7 @@ "scripts": { "build": "rm -rf dist && tsc -p tsconfig.build.json", "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput", + "typecheck": "tsc --noEmit", "lint": "eslint .", "lint:fix": "eslint . --fix", "test": "jest" @@ -17,12 +18,11 @@ "@babel/core": "~7.22.20", "@babel/preset-env": "~7.22.20", "@rocket.chat/eslint-config": "workspace:^", + "@rocket.chat/jest-presets": "workspace:~", "@typescript-eslint/eslint-plugin": "~5.60.1", "@typescript-eslint/parser": "~5.60.1", "eslint": "~8.45.0", - "jest": "~29.6.4", - "jest-environment-jsdom": "~29.6.4", - "ts-jest": "~29.1.1", + "jest": "~29.7.0", "typescript": "~5.3.3" }, "volta": { diff --git a/packages/random/src/main.client.spec.ts b/packages/random/src/main.client.spec.ts index bde7b49b3b11..f5d4d278a5fa 100644 --- a/packages/random/src/main.client.spec.ts +++ b/packages/random/src/main.client.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment jsdom - */ - import { Random } from './main.client'; it('which should generate the same sequence in all environments', () => { diff --git a/packages/rest-typings/CHANGELOG.md b/packages/rest-typings/CHANGELOG.md index 5bb9404f1b0a..efcab160b8e6 100644 --- a/packages/rest-typings/CHANGELOG.md +++ b/packages/rest-typings/CHANGELOG.md @@ -1,5 +1,108 @@ # @rocket.chat/rest-typings +## 6.11.0 + +### Minor Changes + +- ([#32800](https://github.com/RocketChat/Rocket.Chat/pull/32800)) Added the ability to filter chats by `queued` on the Current Chats Omnichannel page + +### Patch Changes + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-

    Updated dependencies [2d89a0c448, 24f7df4894, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/ui-kit@0.36.0 +
    + +## 6.11.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 +
    + +## 6.11.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 +
    + +## 6.11.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 +
    + +## 6.11.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 +
    + +## 6.11.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 +
    + +## 6.11.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 +
    + +## 6.11.0-rc.0 + +### Minor Changes + +- ([#32800](https://github.com/RocketChat/Rocket.Chat/pull/32800)) Added the ability to filter chats by `queued` on the Current Chats Omnichannel page + +### Patch Changes + +- ([#32719](https://github.com/RocketChat/Rocket.Chat/pull/32719)) Added the `user` param to apps-engine update method call, allowing apps' new `onUpdate` hook to know who triggered the update. + +-
    Updated dependencies [2d89a0c448, 24f7df4894, b8e5887fb9]: + + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/ui-kit@0.36.0-rc.0 +
    + +## 6.10.2 + +### Patch Changes + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from being updated or uninstalled in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that prevented apps from handling errors during execution in some cases + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Improved Apps-Engine installation to prevent start up errors on manual installation setups + +- ([#32935](https://github.com/RocketChat/Rocket.Chat/pull/32935)) Fixed an issue that caused the video conference button on rooms to not recognize a video conference provider app in some cases + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-typings@6.10.2 +
    + ## 6.10.1 ### Patch Changes diff --git a/packages/rest-typings/jest.config.ts b/packages/rest-typings/jest.config.ts deleted file mode 100644 index e938f931d149..000000000000 --- a/packages/rest-typings/jest.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default { - preset: 'ts-jest', - errorOnDeprecated: true, - testEnvironment: 'jsdom', - modulePathIgnorePatterns: ['/dist/'], -}; diff --git a/packages/rest-typings/package.json b/packages/rest-typings/package.json index 9be27e7634cb..6a5bf5464e98 100644 --- a/packages/rest-typings/package.json +++ b/packages/rest-typings/package.json @@ -1,22 +1,21 @@ { "name": "@rocket.chat/rest-typings", - "version": "6.11.0-develop", + "version": "6.12.0-develop", "devDependencies": { - "@rocket.chat/eslint-config": "workspace:^", - "@types/jest": "~29.5.7", + "@rocket.chat/eslint-config": "workspace:~", + "@types/jest": "~29.5.12", "eslint": "~8.45.0", - "jest": "~29.6.4", - "jest-environment-jsdom": "~29.6.4", + "jest": "~29.7.0", "mongodb": "^4.17.2", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { + "build": "rm -rf dist && tsc", + "dev": "tsc --watch --preserveWatchOutput", + "typecheck": "tsc --noEmit", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", - "dev": "tsc --watch --preserveWatchOutput -p tsconfig.json", - "build": "rm -rf dist && tsc -p tsconfig.json" + "test": "jest" }, "main": "./dist/index.js", "typings": "./dist/index.d.ts", @@ -24,7 +23,7 @@ "/dist" ], "dependencies": { - "@rocket.chat/apps-engine": "alpha", + "@rocket.chat/apps-engine": "1.44.0", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/ui-kit": "workspace:~", diff --git a/packages/rest-typings/src/v1/omnichannel.ts b/packages/rest-typings/src/v1/omnichannel.ts index ec53304605fc..b8519bf8fe02 100644 --- a/packages/rest-typings/src/v1/omnichannel.ts +++ b/packages/rest-typings/src/v1/omnichannel.ts @@ -3736,7 +3736,9 @@ export type OmnichannelEndpoints = { }; }; '/v1/livechat/agents/:agentId/departments': { - GET: (params?: GETLivechatAgentsAgentIdDepartmentsParams) => { departments: ILivechatDepartmentAgents[] }; + GET: (params?: GETLivechatAgentsAgentIdDepartmentsParams) => { + departments: (ILivechatDepartmentAgents & { departmentName: string })[]; + }; }; '/v1/livechat/business-hour': { GET: (params: GETBusinessHourParams) => { businessHour: ILivechatBusinessHour }; diff --git a/packages/rest-typings/src/v1/teams/index.ts b/packages/rest-typings/src/v1/teams/index.ts index 0a1583b66474..d63e6da8bd8a 100644 --- a/packages/rest-typings/src/v1/teams/index.ts +++ b/packages/rest-typings/src/v1/teams/index.ts @@ -89,6 +89,7 @@ export type TeamsEndpoints = { }; }; owner?: IUser['_id']; + sidepanel?: IRoom['sidepanel']; }) => { team: ITeam; }; diff --git a/packages/rest-typings/src/v1/users/UsersSetPreferenceParamsPOST.ts b/packages/rest-typings/src/v1/users/UsersSetPreferenceParamsPOST.ts index 1c89fdc04d5d..7ef41d363dea 100644 --- a/packages/rest-typings/src/v1/users/UsersSetPreferenceParamsPOST.ts +++ b/packages/rest-typings/src/v1/users/UsersSetPreferenceParamsPOST.ts @@ -1,4 +1,4 @@ -import type { ThemePreference } from '@rocket.chat/ui-theming/src/types/themes'; +import type { ThemePreference } from '@rocket.chat/core-typings'; import Ajv from 'ajv'; const ajv = new Ajv({ diff --git a/packages/server-cloud-communication/package.json b/packages/server-cloud-communication/package.json index 878a0565306b..8c970687ab8b 100644 --- a/packages/server-cloud-communication/package.json +++ b/packages/server-cloud-communication/package.json @@ -4,10 +4,7 @@ "private": true, "devDependencies": { "@rocket.chat/license": "workspace:^", - "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "volta": { @@ -16,7 +13,6 @@ "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" }, "main": "./src/index.ts", diff --git a/packages/server-fetch/package.json b/packages/server-fetch/package.json index e1527e928703..c98b4ba99e54 100644 --- a/packages/server-fetch/package.json +++ b/packages/server-fetch/package.json @@ -3,16 +3,12 @@ "version": "0.0.3", "private": true, "devDependencies": { - "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "build": "rm -rf dist && tsc -p tsconfig.json", "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" }, diff --git a/packages/sha256/jest.config.ts b/packages/sha256/jest.config.ts index 959a31a7c6bf..c18c8ae02465 100644 --- a/packages/sha256/jest.config.ts +++ b/packages/sha256/jest.config.ts @@ -1,3 +1,6 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', -}; + preset: server.preset, +} satisfies Config; diff --git a/packages/sha256/package.json b/packages/sha256/package.json index 1b2f1fa6b523..6d10f5b80d65 100644 --- a/packages/sha256/package.json +++ b/packages/sha256/package.json @@ -8,6 +8,7 @@ "scripts": { "build": "rm -rf dist && tsc -p tsconfig.build.json", "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput", + "typecheck": "tsc --noEmit", "lint": "eslint .", "lint:fix": "eslint . --fix", "test": "jest" @@ -16,11 +17,11 @@ "@babel/core": "~7.22.20", "@babel/preset-env": "~7.22.20", "@rocket.chat/eslint-config": "workspace:^", + "@rocket.chat/jest-presets": "workspace:~", "@typescript-eslint/eslint-plugin": "~5.60.1", "@typescript-eslint/parser": "~5.60.1", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", + "jest": "~29.7.0", "typescript": "~5.3.3" }, "volta": { diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 86ecb2a3c6ec..b74d4940c211 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -1,5 +1,19 @@ # @rocket.chat/tools +## 0.2.2 + +### Patch Changes + +- ([#32527](https://github.com/RocketChat/Rocket.Chat/pull/32527)) Fixed an inconsistent evaluation of the `Accounts_LoginExpiration` setting over the codebase. In some places, it was being used as milliseconds while in others as days. Invalid values produced different results. A helper function was created to centralize the setting validation and the proper value being returned to avoid edge cases. + Negative values may be saved on the settings UI panel but the code will interpret any negative, NaN or 0 value to the default expiration which is 90 days. + +## 0.2.2-rc.0 + +### Patch Changes + +- ([#32527](https://github.com/RocketChat/Rocket.Chat/pull/32527)) Fixed an inconsistent evaluation of the `Accounts_LoginExpiration` setting over the codebase. In some places, it was being used as milliseconds while in others as days. Invalid values produced different results. A helper function was created to centralize the setting validation and the proper value being returned to avoid edge cases. + Negative values may be saved on the settings UI panel but the code will interpret any negative, NaN or 0 value to the default expiration which is 90 days. + ## 0.2.1 ### Patch Changes diff --git a/packages/tools/jest.config.ts b/packages/tools/jest.config.ts index 959a31a7c6bf..46e41b9ab170 100644 --- a/packages/tools/jest.config.ts +++ b/packages/tools/jest.config.ts @@ -1,3 +1,7 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + export default { - preset: 'ts-jest', -}; + preset: server.preset, + testMatch: ['/src/**/*.spec.(ts|js|mjs)'], +} satisfies Config; diff --git a/packages/tools/package.json b/packages/tools/package.json index ac79955314b8..d1301efb7055 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,12 +1,12 @@ { "name": "@rocket.chat/tools", - "version": "0.2.1", + "version": "0.2.2", "private": true, "devDependencies": { - "@types/jest": "~29.5.7", + "@rocket.chat/jest-presets": "workspace:~", + "@types/jest": "~29.5.12", "eslint": "~8.45.0", - "jest": "~29.6.4", - "ts-jest": "~29.1.1", + "jest": "~29.7.0", "typescript": "~5.3.3" }, "scripts": { diff --git a/packages/ui-avatar/CHANGELOG.md b/packages/ui-avatar/CHANGELOG.md index 8b37dbb7fd02..f65d986cfaf5 100644 --- a/packages/ui-avatar/CHANGELOG.md +++ b/packages/ui-avatar/CHANGELOG.md @@ -1,5 +1,86 @@ # @rocket.chat/ui-avatar +## 5.0.0 + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 4e8aa575a6]: + + - @rocket.chat/ui-contexts@9.0.0 +
    + +## 5.0.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.6 +
    + +## 5.0.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.5 +
    + +## 5.0.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.4 +
    + +## 5.0.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.3 +
    + +## 5.0.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.2 +
    + +## 5.0.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.1 +
    + +## 5.0.0-rc.0 + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 4e8aa575a6]: + + - @rocket.chat/ui-contexts@9.0.0-rc.0 +
    + +## 4.0.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@8.0.2 +
    + ## 4.0.1 ### Patch Changes diff --git a/packages/ui-avatar/package.json b/packages/ui-avatar/package.json index 2c3a4d75b018..1c2dc6dabbc4 100644 --- a/packages/ui-avatar/package.json +++ b/packages/ui-avatar/package.json @@ -1,10 +1,10 @@ { "name": "@rocket.chat/ui-avatar", - "version": "4.0.1", + "version": "5.0.0", "private": true, "devDependencies": { "@babel/core": "~7.22.20", - "@rocket.chat/fuselage": "^0.56.0", + "@rocket.chat/fuselage": "^0.57.0", "@rocket.chat/ui-contexts": "workspace:^", "@types/babel__core": "~7.20.3", "@types/react": "~17.0.69", @@ -31,7 +31,7 @@ ], "peerDependencies": { "@rocket.chat/fuselage": "*", - "@rocket.chat/ui-contexts": "8.0.1", + "@rocket.chat/ui-contexts": "9.0.0", "react": "~17.0.2" }, "volta": { diff --git a/packages/ui-client/CHANGELOG.md b/packages/ui-client/CHANGELOG.md index c5cd6a2cce8f..5936f8038bc8 100644 --- a/packages/ui-client/CHANGELOG.md +++ b/packages/ui-client/CHANGELOG.md @@ -1,5 +1,98 @@ # @rocket.chat/ui-client +## 9.0.0 + +### Minor Changes + +- ([#32517](https://github.com/RocketChat/Rocket.Chat/pull/32517)) Feature Preview: New Navigation - `Header` and `Contextualbar` size improvements consistent with the new global `NavBar` + +### Patch Changes + +- ([#32024](https://github.com/RocketChat/Rocket.Chat/pull/32024)) Implemented a new tab to the users page called 'Active', this tab lists all users who have logged in for the first time and are active. + +-
    Updated dependencies [2d89a0c448, 4e8aa575a6]: + + - @rocket.chat/ui-contexts@9.0.0 +
    + +## 9.0.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.6 +
    + +## 9.0.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.5 +
    + +## 9.0.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.4 +
    + +## 9.0.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.3 +
    + +## 9.0.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.2 +
    + +## 9.0.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.1 +
    + +## 9.0.0-rc.0 + +### Minor Changes + +- ([#32517](https://github.com/RocketChat/Rocket.Chat/pull/32517)) Feature Preview: New Navigation - `Header` and `Contextualbar` size improvements consistent with the new global `NavBar` + +### Patch Changes + +- ([#32024](https://github.com/RocketChat/Rocket.Chat/pull/32024)) Implemented a new tab to the users page called 'Active', this tab lists all users who have logged in for the first time and are active. + +-
    Updated dependencies [2d89a0c448, 4e8aa575a6]: + + - @rocket.chat/ui-contexts@9.0.0-rc.0 +
    + +## 8.0.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@8.0.2 +
    + ## 8.0.1 ### Patch Changes diff --git a/packages/ui-client/jest.config.ts b/packages/ui-client/jest.config.ts index d5dd6be2fd45..597fbebb687b 100644 --- a/packages/ui-client/jest.config.ts +++ b/packages/ui-client/jest.config.ts @@ -1,27 +1,12 @@ +import client from '@rocket.chat/jest-presets/client'; +import type { Config } from 'jest'; + export default { - errorOnDeprecated: true, - testEnvironment: 'jsdom', - modulePathIgnorePatterns: ['/dist/'], - testMatch: ['/src/**/**.spec.[jt]s?(x)'], - transform: { - '^.+\\.(t|j)sx?$': [ - '@swc/jest', - { - jsc: { - transform: { - react: { - runtime: 'automatic', - }, - }, - }, - }, - ], - }, + preset: client.preset, + setupFilesAfterEnv: [...client.setupFilesAfterEnv], moduleNameMapper: { - '\\.css$': 'identity-obj-proxy', '^react($|/.+)': '/../../node_modules/react$1', + '^react-dom/client$': '/../../node_modules/react-dom$1', + '^react-dom($|/.+)': '/../../node_modules/react-dom$1', }, - collectCoverage: true, - collectCoverageFrom: ['src/**/*.{ts,tsx}'], - setupFilesAfterEnv: ['@testing-library/jest-dom/extend-expect'], -}; +} satisfies Config; diff --git a/packages/ui-client/package.json b/packages/ui-client/package.json index 9b73e9814f8c..69ca7e8b7f5b 100644 --- a/packages/ui-client/package.json +++ b/packages/ui-client/package.json @@ -1,14 +1,15 @@ { "name": "@rocket.chat/ui-client", - "version": "8.0.1", + "version": "9.0.0", "private": true, "devDependencies": { "@babel/core": "~7.22.20", "@react-aria/toolbar": "^3.0.0-beta.1", "@rocket.chat/css-in-js": "~0.31.25", - "@rocket.chat/fuselage": "^0.56.0", + "@rocket.chat/fuselage": "^0.57.0", "@rocket.chat/fuselage-hooks": "^0.33.1", "@rocket.chat/icons": "^0.36.0", + "@rocket.chat/jest-presets": "workspace:~", "@rocket.chat/mock-providers": "workspace:^", "@rocket.chat/ui-contexts": "workspace:~", "@storybook/addon-actions": "~6.5.16", @@ -21,12 +22,9 @@ "@storybook/manager-webpack4": "~6.5.16", "@storybook/react": "~6.5.16", "@storybook/testing-library": "~0.0.13", - "@swc/jest": "^0.2.29", - "@testing-library/jest-dom": "~5.16.5", - "@testing-library/react": "^12.1.5", - "@testing-library/react-hooks": "^8.0.1", + "@testing-library/react": "~16.0.0", "@types/babel__core": "~7.20.3", - "@types/jest": "~29.5.7", + "@types/jest": "~29.5.12", "@types/react": "~17.0.69", "@types/react-dom": "~17.0.22", "eslint": "~8.45.0", @@ -35,22 +33,21 @@ "eslint-plugin-react-hooks": "~4.6.0", "eslint-plugin-storybook": "~0.6.15", "eslint-plugin-testing-library": "~5.11.1", - "jest": "~29.6.4", + "jest": "~29.7.0", "react": "^17.0.2", "react-dom": "^17.0.2", "react-hook-form": "~7.45.4", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "scripts": { + "build": "rm -rf dist && tsc -p tsconfig.build.json", + "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput", + "typecheck": "tsc --noEmit", "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", "test": "jest", "testunit": "jest", - "build": "rm -rf dist && tsc -p tsconfig-build.json", - "typecheck": "tsc -p tsconfig.json --noEmit", - "storybook": "start-storybook -p 6006", - "dev": "tsc -p tsconfig-build.json --watch --preserveWatchOutput" + "storybook": "start-storybook -p 6006" }, "main": "./dist/index.js", "typings": "./dist/index.d.ts", @@ -63,7 +60,7 @@ "@rocket.chat/fuselage": "*", "@rocket.chat/fuselage-hooks": "*", "@rocket.chat/icons": "*", - "@rocket.chat/ui-contexts": "8.0.1", + "@rocket.chat/ui-contexts": "9.0.0", "react": "~17.0.2" }, "volta": { diff --git a/packages/ui-client/src/components/CustomFieldsForm.tsx b/packages/ui-client/src/components/CustomFieldsForm.tsx index 0d1ba2ca5b1b..3a9c66014e4d 100644 --- a/packages/ui-client/src/components/CustomFieldsForm.tsx +++ b/packages/ui-client/src/components/CustomFieldsForm.tsx @@ -5,7 +5,7 @@ import { useUniqueId } from '@rocket.chat/fuselage-hooks'; import type { TranslationKey } from '@rocket.chat/ui-contexts'; import { useTranslation } from '@rocket.chat/ui-contexts'; import { useCallback, useMemo } from 'react'; -import type { Control, FieldValues } from 'react-hook-form'; +import type { Control, FieldValues, FieldError as RHFFieldError } from 'react-hook-form'; import { Controller, useFormState, get } from 'react-hook-form'; type CustomFieldFormProps = { @@ -46,10 +46,10 @@ const CustomField = ({ [defaultValue, options], ); - const validateRequired = useCallback((value) => (required ? typeof value === 'string' && !!value.trim() : true), [required]); + const validateRequired = useCallback((value: string) => (required ? typeof value === 'string' && !!value.trim() : true), [required]); const getErrorMessage = useCallback( - (error) => { + (error: RHFFieldError) => { switch (error?.type) { case 'required': return t('The_field_is_required', label || name); diff --git a/packages/ui-client/src/components/FeaturePreview/FeaturePreview.spec.tsx b/packages/ui-client/src/components/FeaturePreview/FeaturePreview.spec.tsx index e8e093eb25f6..03c297e7a10b 100644 --- a/packages/ui-client/src/components/FeaturePreview/FeaturePreview.spec.tsx +++ b/packages/ui-client/src/components/FeaturePreview/FeaturePreview.spec.tsx @@ -2,7 +2,6 @@ import { mockAppRoot } from '@rocket.chat/mock-providers'; import { render, screen } from '@testing-library/react'; import { FeaturePreview, FeaturePreviewOff, FeaturePreviewOn } from './FeaturePreview'; -import '@testing-library/jest-dom'; test('should renders off if the feature is disabled', async () => { render( @@ -11,6 +10,7 @@ test('should renders off if the feature is disabled', async () => { off , { + legacyRoot: true, wrapper: mockAppRoot().withSetting('Accounts_AllowFeaturePreview', true).build(), }, ); @@ -25,6 +25,7 @@ test('should renders on if the feature is enabled', async () => { off , { + legacyRoot: true, wrapper: mockAppRoot() .withSetting('Accounts_AllowFeaturePreview', true) .withUserPreference('featuresPreview', [{ name: 'quickReactions', value: true }]) diff --git a/packages/ui-client/src/components/MultiSelectCustom/MultiSelectCustom.tsx b/packages/ui-client/src/components/MultiSelectCustom/MultiSelectCustom.tsx index 317f56899d05..a90cfb1bd1c6 100644 --- a/packages/ui-client/src/components/MultiSelectCustom/MultiSelectCustom.tsx +++ b/packages/ui-client/src/components/MultiSelectCustom/MultiSelectCustom.tsx @@ -64,8 +64,8 @@ export const MultiSelectCustom = ({ const [collapsed, toggleCollapsed] = useToggle(false); const onClose = useCallback( - (e) => { - if (isValidReference(reference, e)) { + (e: MouseEvent) => { + if (isValidReference(reference, e as { target: Node | null })) { toggleCollapsed(false); return; } diff --git a/packages/ui-client/src/components/MultiSelectCustom/MultiSelectCustomList.tsx b/packages/ui-client/src/components/MultiSelectCustom/MultiSelectCustomList.tsx index 71cb54f81aa5..4afe036e74d2 100644 --- a/packages/ui-client/src/components/MultiSelectCustom/MultiSelectCustomList.tsx +++ b/packages/ui-client/src/components/MultiSelectCustom/MultiSelectCustomList.tsx @@ -20,7 +20,7 @@ const MultiSelectCustomList = ({ const [text, setText] = useState(''); - const handleChange = useCallback((event) => setText(event.currentTarget.value), []); + const handleChange = useCallback((event: FormEvent) => setText(event.currentTarget.value), []); const filteredOptions = useFilteredOptions(text, options); diff --git a/packages/ui-client/src/components/PasswordVerifier/PasswordVerifiers.spec.tsx b/packages/ui-client/src/components/PasswordVerifier/PasswordVerifiers.spec.tsx index cb2efaca19f5..108a13713707 100644 --- a/packages/ui-client/src/components/PasswordVerifier/PasswordVerifiers.spec.tsx +++ b/packages/ui-client/src/components/PasswordVerifier/PasswordVerifiers.spec.tsx @@ -10,6 +10,7 @@ afterEach(() => { it('should render no policy if its disabled ', () => { const { queryByRole } = render(, { + legacyRoot: true, wrapper: mockAppRoot().withSetting('Accounts_Password_Policy_Enabled', 'true').build(), }); @@ -18,6 +19,7 @@ it('should render no policy if its disabled ', () => { it('should render no policy if its enabled but empty', async () => { const { queryByRole, queryByTestId } = render(, { + legacyRoot: true, wrapper: mockAppRoot().build(), }); @@ -29,6 +31,7 @@ it('should render no policy if its enabled but empty', async () => { it('should render policy list if its enabled and not empty', async () => { const { queryByRole, queryByTestId } = render(, { + legacyRoot: true, wrapper: mockAppRoot() .withSetting('Accounts_Password_Policy_Enabled', 'true') .withSetting('Accounts_Password_Policy_MinLength', '6') @@ -45,6 +48,7 @@ it('should render policy list if its enabled and not empty', async () => { it('should render all the policies when all policies are enabled', async () => { const { queryByTestId, queryAllByRole } = render(, { + legacyRoot: true, wrapper: mockAppRoot() .withSetting('Accounts_Password_Policy_Enabled', 'true') .withSetting('Accounts_Password_Policy_MinLength', '6') @@ -67,6 +71,7 @@ it('should render all the policies when all policies are enabled', async () => { it("should render policy as invalid if password doesn't match the requirements", async () => { const { queryByTestId, getByRole } = render(, { + legacyRoot: true, wrapper: mockAppRoot() .withSetting('Accounts_Password_Policy_Enabled', 'true') .withSetting('Accounts_Password_Policy_MinLength', '10') @@ -82,6 +87,7 @@ it("should render policy as invalid if password doesn't match the requirements", it('should render policy as valid if password matches the requirements', async () => { const { queryByTestId, getByRole } = render(, { + legacyRoot: true, wrapper: mockAppRoot() .withSetting('Accounts_Password_Policy_Enabled', 'true') .withSetting('Accounts_Password_Policy_MinLength', '2') diff --git a/packages/ui-client/src/hooks/useDocumentTitle.spec.ts b/packages/ui-client/src/hooks/useDocumentTitle.spec.ts index e5df07fb354c..a14d34e63c22 100644 --- a/packages/ui-client/src/hooks/useDocumentTitle.spec.ts +++ b/packages/ui-client/src/hooks/useDocumentTitle.spec.ts @@ -1,4 +1,4 @@ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { useDocumentTitle } from './useDocumentTitle'; @@ -6,21 +6,26 @@ const DEFAULT_TITLE = 'Default Title'; const EXAMPLE_TITLE = 'Example Title'; it('should return the default title', () => { - const { result } = renderHook(() => useDocumentTitle(DEFAULT_TITLE)); + const { result } = renderHook(() => useDocumentTitle(DEFAULT_TITLE), { legacyRoot: true }); expect(result.current.title).toBe(DEFAULT_TITLE); }); it('should return the default title and empty key value if refocus param is false', () => { - const { result } = renderHook(() => useDocumentTitle(DEFAULT_TITLE, false)); + const { result } = renderHook(() => useDocumentTitle(DEFAULT_TITLE, false), { legacyRoot: true }); expect(result.current.title).toBe(DEFAULT_TITLE); expect(result.current.key).toBe(''); }); it('should return the default title and the example title concatenated', () => { - renderHook(() => useDocumentTitle(DEFAULT_TITLE)); - const { result } = renderHook(() => useDocumentTitle(EXAMPLE_TITLE)); + const { result } = renderHook( + () => { + useDocumentTitle(DEFAULT_TITLE); + return useDocumentTitle(EXAMPLE_TITLE); + }, + { legacyRoot: true }, + ); expect(result.current.title).toBe(`${EXAMPLE_TITLE} - ${DEFAULT_TITLE}`); }); diff --git a/packages/ui-client/src/hooks/useFeaturePreview.spec.tsx b/packages/ui-client/src/hooks/useFeaturePreview.spec.tsx index 7f6cda873e88..91bc0c91d070 100644 --- a/packages/ui-client/src/hooks/useFeaturePreview.spec.tsx +++ b/packages/ui-client/src/hooks/useFeaturePreview.spec.tsx @@ -1,41 +1,45 @@ import { mockAppRoot } from '@rocket.chat/mock-providers'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { useFeaturePreview } from './useFeaturePreview'; it('should return false if featurePreviewEnabled is false', () => { const { result } = renderHook(() => useFeaturePreview('quickReactions'), { + legacyRoot: true, wrapper: mockAppRoot().withSetting('Accounts_AllowFeaturePreview', false).build(), }); - expect(result.all[0]).toBe(false); + expect(result.current).toBe(false); }); // TODO: fix this test it('should return false if featurePreviewEnabled is true but feature is not in userPreferences', () => { const { result } = renderHook(() => useFeaturePreview('quickReactions'), { + legacyRoot: true, wrapper: mockAppRoot() .withSetting('Accounts_AllowFeaturePreview', false) .withUserPreference('featuresPreview', [{ name: 'quickReactions', value: true }]) .build(), }); - expect(result.all[0]).toBe(false); + expect(result.current).toBe(false); }); it('should return true if featurePreviewEnabled is true and feature is in userPreferences', () => { const { result } = renderHook(() => useFeaturePreview('quickReactions'), { + legacyRoot: true, wrapper: mockAppRoot() .withSetting('Accounts_AllowFeaturePreview', true) .withUserPreference('featuresPreview', [{ name: 'quickReactions', value: true }]) .build(), }); - expect(result.all[0]).toBe(true); + expect(result.current).toBe(true); }); it('should return false for disabled features', () => { const { result } = renderHook(() => useFeaturePreview('navigationBar'), { + legacyRoot: true, wrapper: mockAppRoot() .withSetting('Accounts_AllowFeaturePreview', true) .withUserPreference('featuresPreview', [ diff --git a/packages/ui-client/src/hooks/useFeaturePreviewList.spec.tsx b/packages/ui-client/src/hooks/useFeaturePreviewList.spec.tsx index d6f09c72bac7..e348cfb6a864 100644 --- a/packages/ui-client/src/hooks/useFeaturePreviewList.spec.tsx +++ b/packages/ui-client/src/hooks/useFeaturePreviewList.spec.tsx @@ -1,14 +1,15 @@ import { mockAppRoot } from '@rocket.chat/mock-providers'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { useFeaturePreviewList, enabledDefaultFeatures } from './useFeaturePreviewList'; it('should return the number of unseen features and Accounts_AllowFeaturePreview enabled ', () => { const { result } = renderHook(() => useFeaturePreviewList(), { + legacyRoot: true, wrapper: mockAppRoot().withSetting('Accounts_AllowFeaturePreview', true).build(), }); - expect(result.all[0]).toEqual( + expect(result.current).toEqual( expect.objectContaining({ featurePreviewEnabled: true, unseenFeatures: enabledDefaultFeatures.length, @@ -18,10 +19,11 @@ it('should return the number of unseen features and Accounts_AllowFeaturePreview it('should return the number of unseen features and Accounts_AllowFeaturePreview disabled ', () => { const { result } = renderHook(() => useFeaturePreviewList(), { + legacyRoot: true, wrapper: mockAppRoot().withSetting('Accounts_AllowFeaturePreview', false).build(), }); - expect(result.all[0]).toEqual( + expect(result.current).toEqual( expect.objectContaining({ featurePreviewEnabled: false, unseenFeatures: 0, @@ -31,13 +33,14 @@ it('should return the number of unseen features and Accounts_AllowFeaturePreview it('should return 0 unseen features', () => { const { result } = renderHook(() => useFeaturePreviewList(), { + legacyRoot: true, wrapper: mockAppRoot() .withSetting('Accounts_AllowFeaturePreview', true) .withUserPreference('featuresPreview', enabledDefaultFeatures) .build(), }); - expect(result.all[0]).toEqual( + expect(result.current).toEqual( expect.objectContaining({ featurePreviewEnabled: true, unseenFeatures: 0, @@ -47,6 +50,7 @@ it('should return 0 unseen features', () => { it('should ignore removed feature previews', () => { const { result } = renderHook(() => useFeaturePreviewList(), { + legacyRoot: true, wrapper: mockAppRoot() .withSetting('Accounts_AllowFeaturePreview', true) .withUserPreference('featuresPreview', [ @@ -69,6 +73,7 @@ it('should ignore removed feature previews', () => { it('should turn off ignored feature previews', async () => { const { result } = renderHook(() => useFeaturePreviewList(), { + legacyRoot: true, wrapper: mockAppRoot() .withSetting('Accounts_AllowFeaturePreview', true) .withUserPreference('featuresPreview', [ diff --git a/packages/ui-client/src/hooks/useValidatePassword.spec.ts b/packages/ui-client/src/hooks/useValidatePassword.spec.ts index 275e4ab8d6f5..8c68e2f0070d 100644 --- a/packages/ui-client/src/hooks/useValidatePassword.spec.ts +++ b/packages/ui-client/src/hooks/useValidatePassword.spec.ts @@ -1,5 +1,5 @@ import { mockAppRoot } from '@rocket.chat/mock-providers'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { useValidatePassword } from './useValidatePassword'; @@ -17,6 +17,7 @@ const settingsMockWrapper = mockAppRoot() it("should return `false` if password doesn't match all the requirements", async () => { const { result } = renderHook(async () => useValidatePassword('secret'), { + legacyRoot: true, wrapper: settingsMockWrapper, }); @@ -26,6 +27,7 @@ it("should return `false` if password doesn't match all the requirements", async it('should return `true` if password matches all the requirements', async () => { const { result } = renderHook(async () => useValidatePassword('5kgnGPq^&t4DSYW!SH#4N'), { + legacyRoot: true, wrapper: settingsMockWrapper, }); diff --git a/packages/ui-client/tsconfig-build.json b/packages/ui-client/tsconfig-build.json deleted file mode 100644 index d65872bd407d..000000000000 --- a/packages/ui-client/tsconfig-build.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "exclude": ["**/*.stories.tsx"] -} diff --git a/packages/ui-client/tsconfig.build.json b/packages/ui-client/tsconfig.build.json new file mode 100644 index 000000000000..14a02ca5a1dc --- /dev/null +++ b/packages/ui-client/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["./src/**/*"], + "exclude": ["**/*.stories.tsx", "./src/**/*.spec.ts", "./src/**/*.spec.tsx"] +} diff --git a/packages/ui-client/tsconfig.json b/packages/ui-client/tsconfig.json index 7fec1e9ddf1f..2c150afcf5d4 100644 --- a/packages/ui-client/tsconfig.json +++ b/packages/ui-client/tsconfig.json @@ -1,8 +1,3 @@ { "extends": "../../tsconfig.base.client.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./dist" - }, - "include": ["./src"] } diff --git a/packages/ui-composer/package.json b/packages/ui-composer/package.json index 0f6ee4655877..2b3fae217aac 100644 --- a/packages/ui-composer/package.json +++ b/packages/ui-composer/package.json @@ -2,11 +2,24 @@ "name": "@rocket.chat/ui-composer", "version": "0.2.0", "private": true, + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "files": [ + "/dist" + ], + "scripts": { + "lint": "eslint --ext .js,.jsx,.ts,.tsx .", + "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", + "build": "rm -rf dist && tsc -p tsconfig.build.json", + "typecheck": "tsc --noEmit", + "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput", + "storybook": "start-storybook -p 6006" + }, "devDependencies": { "@babel/core": "~7.22.20", "@react-aria/toolbar": "^3.0.0-beta.1", "@rocket.chat/eslint-config": "workspace:^", - "@rocket.chat/fuselage": "^0.56.0", + "@rocket.chat/fuselage": "^0.57.0", "@rocket.chat/icons": "^0.36.0", "@storybook/addon-actions": "~6.5.16", "@storybook/addon-docs": "~6.5.16", @@ -16,14 +29,15 @@ "@storybook/react": "~6.5.16", "@storybook/testing-library": "~0.0.13", "@types/babel__core": "~7.20.3", - "@types/jest": "~29.5.7", + "@types/react": "~17.0.69", + "@types/react-dom": "~17.0.22", "eslint": "~8.45.0", "eslint-plugin-react": "~7.32.2", "eslint-plugin-react-hooks": "~4.6.0", "eslint-plugin-storybook": "~0.6.15", - "jest": "~29.6.4", + "react": "~17.0.2", "react-docgen-typescript-plugin": "~1.0.5", - "ts-jest": "~29.1.1", + "react-dom": "~17.0.2", "typescript": "~5.3.3" }, "peerDependencies": { @@ -33,19 +47,6 @@ "react": "^17.0.2", "react-dom": "^17.0.2" }, - "scripts": { - "lint": "eslint --ext .js,.jsx,.ts,.tsx .", - "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", - "build": "rm -rf dist && tsc -p tsconfig.json", - "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput", - "storybook": "start-storybook -p 6006" - }, - "main": "./dist/index.js", - "typings": "./dist/index.d.ts", - "files": [ - "/dist" - ], "volta": { "extends": "../../package.json" } diff --git a/packages/ui-composer/tsconfig.build.json b/packages/ui-composer/tsconfig.build.json new file mode 100644 index 000000000000..1201960b9fb1 --- /dev/null +++ b/packages/ui-composer/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["./src/**/*.stories.tsx"] +} diff --git a/packages/ui-contexts/CHANGELOG.md b/packages/ui-contexts/CHANGELOG.md index 9315b5fbe66a..fb3d074b6fbe 100644 --- a/packages/ui-contexts/CHANGELOG.md +++ b/packages/ui-contexts/CHANGELOG.md @@ -1,5 +1,120 @@ # @rocket.chat/ui-contexts +## 9.0.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +- ([#32482](https://github.com/RocketChat/Rocket.Chat/pull/32482)) Fixed an issue with blocked login when dismissed 2FA modal by clicking outside of it or pressing the escape key + +-
    Updated dependencies [b4bbcbfc9a, 25da5280a5, 1b7b1161cf, 03c8b066f9, 2d89a0c448, 24f7df4894, 3ffe4a2944, 3b4b19cfc5, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/i18n@0.6.0 + - @rocket.chat/core-typings@6.11.0 + - @rocket.chat/rest-typings@6.11.0 + - @rocket.chat/ddp-client@0.3.3 +
    + +## 9.0.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.6 + - @rocket.chat/rest-typings@6.11.0-rc.6 + - @rocket.chat/ddp-client@0.3.3-rc.6 +
    + +## 9.0.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.5 + - @rocket.chat/rest-typings@6.11.0-rc.5 + - @rocket.chat/ddp-client@0.3.3-rc.5 +
    + +## 9.0.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.4 + - @rocket.chat/rest-typings@6.11.0-rc.4 + - @rocket.chat/ddp-client@0.3.3-rc.4 +
    + +## 9.0.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.3 + - @rocket.chat/rest-typings@6.11.0-rc.3 + - @rocket.chat/ddp-client@0.3.3-rc.3 +
    + +## 9.0.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.2 + - @rocket.chat/rest-typings@6.11.0-rc.2 + - @rocket.chat/ddp-client@0.3.3-rc.2 +
    + +## 9.0.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/core-typings@6.11.0-rc.1 + - @rocket.chat/rest-typings@6.11.0-rc.1 + - @rocket.chat/ddp-client@0.3.2-rc.1 +
    + +## 9.0.0-rc.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +- ([#32482](https://github.com/RocketChat/Rocket.Chat/pull/32482)) Fixed an issue with blocked login when dismissed 2FA modal by clicking outside of it or pressing the escape key + +-
    Updated dependencies [b4bbcbfc9a, 25da5280a5, 1b7b1161cf, 03c8b066f9, 2d89a0c448, 24f7df4894, 3ffe4a2944, 3b4b19cfc5, 264d7d5496, b8e5887fb9]: + + - @rocket.chat/i18n@0.6.0-rc.0 + - @rocket.chat/core-typings@6.11.0-rc.0 + - @rocket.chat/rest-typings@6.11.0-rc.0 + - @rocket.chat/ddp-client@0.3.2-rc.0 +
    + +## 8.0.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/core-typings@6.10.2 + - @rocket.chat/rest-typings@6.10.2 + - @rocket.chat/ddp-client@0.3.2 +
    + ## 8.0.1 ### Patch Changes diff --git a/packages/ui-contexts/package.json b/packages/ui-contexts/package.json index 06311c2b501a..513aebd86a30 100644 --- a/packages/ui-contexts/package.json +++ b/packages/ui-contexts/package.json @@ -1,23 +1,21 @@ { "name": "@rocket.chat/ui-contexts", - "version": "8.0.1", + "version": "9.0.0", "private": true, "devDependencies": { "@rocket.chat/core-typings": "workspace:^", + "@rocket.chat/ddp-client": "workspace:~", "@rocket.chat/emitter": "~0.31.25", "@rocket.chat/fuselage-hooks": "^0.33.1", "@rocket.chat/i18n": "workspace:~", "@rocket.chat/rest-typings": "workspace:^", - "@types/jest": "~29.5.7", "@types/react": "~17.0.69", "@types/react-dom": "~17.0.22", "@types/use-sync-external-store": "^0.0.5", "eslint": "~8.45.0", "eslint-plugin-react-hooks": "^4.6.0", - "jest": "~29.6.4", "mongodb": "^4.17.2", "react": "~17.0.2", - "ts-jest": "~29.1.1", "typescript": "~5.3.3", "use-sync-external-store": "^1.2.0" }, @@ -40,7 +38,6 @@ "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "dev": "tsc --watch --preserveWatchOutput -p tsconfig.json", "build": "rm -rf dist && tsc -p tsconfig.json" }, diff --git a/packages/ui-contexts/src/ServerContext/ServerContext.ts b/packages/ui-contexts/src/ServerContext/ServerContext.ts index 14a2b0e1a3ea..e5b7fd63c1c5 100644 --- a/packages/ui-contexts/src/ServerContext/ServerContext.ts +++ b/packages/ui-contexts/src/ServerContext/ServerContext.ts @@ -1,6 +1,12 @@ import type { IServerInfo, Serialized } from '@rocket.chat/core-typings'; -import type { ServerMethodName, ServerMethodParameters, ServerMethodReturn } from '@rocket.chat/ddp-client/src/types/methods'; -import type { StreamKeys, StreamNames, StreamerCallbackArgs } from '@rocket.chat/ddp-client/src/types/streams'; +import type { + ServerMethodName, + ServerMethodParameters, + ServerMethodReturn, + StreamKeys, + StreamNames, + StreamerCallbackArgs, +} from '@rocket.chat/ddp-client'; import type { Method, OperationParams, OperationResult, PathFor, PathPattern, UrlParams } from '@rocket.chat/rest-typings'; import { createContext } from 'react'; diff --git a/packages/ui-contexts/src/hooks/useMethod.ts b/packages/ui-contexts/src/hooks/useMethod.ts index 0d71f2883972..a9f1513ed2f3 100644 --- a/packages/ui-contexts/src/hooks/useMethod.ts +++ b/packages/ui-contexts/src/hooks/useMethod.ts @@ -1,8 +1,12 @@ -import type { ServerMethodFunction, ServerMethodParameters, ServerMethods } from '@rocket.chat/ddp-client/src/types/methods'; +import type { ServerMethodName, ServerMethodParameters, ServerMethodReturn, ServerMethods } from '@rocket.chat/ddp-client'; import { useCallback, useContext } from 'react'; import { ServerContext } from '../ServerContext'; +type ServerMethodFunction = ( + ...args: ServerMethodParameters +) => Promise>; + /* @deprecated prefer the use of api endpoints (useEndpoint) */ export const useMethod = (methodName: MethodName): ServerMethodFunction => { const { callMethod } = useContext(ServerContext); diff --git a/packages/ui-contexts/src/hooks/useStream.ts b/packages/ui-contexts/src/hooks/useStream.ts index d6fb5e76be78..cb008eea468a 100644 --- a/packages/ui-contexts/src/hooks/useStream.ts +++ b/packages/ui-contexts/src/hooks/useStream.ts @@ -1,4 +1,4 @@ -import type { StreamNames, StreamerEvents, StreamKeys, StreamerCallbackArgs } from '@rocket.chat/ddp-client/src/types/streams'; +import type { StreamNames, StreamerEvents, StreamKeys, StreamerCallbackArgs } from '@rocket.chat/ddp-client'; import { useContext, useMemo } from 'react'; import { ServerContext } from '../ServerContext'; diff --git a/packages/ui-contexts/src/hooks/useUserSubscriptions.ts b/packages/ui-contexts/src/hooks/useUserSubscriptions.ts index e59a1e733a2f..ab5cdb9baacd 100644 --- a/packages/ui-contexts/src/hooks/useUserSubscriptions.ts +++ b/packages/ui-contexts/src/hooks/useUserSubscriptions.ts @@ -1,9 +1,9 @@ -import type { SubscriptionWithRoom } from '@rocket.chat/ui-contexts/src/types/SubscriptionWithRoom'; import { useContext, useMemo } from 'react'; import { useSyncExternalStore } from 'use-sync-external-store/shim'; import type { FindOptions, SubscriptionQuery } from '../UserContext'; import { UserContext } from '../UserContext'; +import type { SubscriptionWithRoom } from '../types/SubscriptionWithRoom'; export const useUserSubscriptions = (query: SubscriptionQuery, options?: FindOptions): SubscriptionWithRoom[] => { const { querySubscriptions } = useContext(UserContext); diff --git a/packages/ui-contexts/src/index.ts b/packages/ui-contexts/src/index.ts index e433aadaf1a6..e021eb840aa0 100644 --- a/packages/ui-contexts/src/index.ts +++ b/packages/ui-contexts/src/index.ts @@ -92,21 +92,6 @@ export { useSetOutputMediaDevice } from './hooks/useSetOutputMediaDevice'; export { useSetInputMediaDevice } from './hooks/useSetInputMediaDevice'; export { useAccountsCustomFields } from './hooks/useAccountsCustomFields'; -export { - ServerMethods, - ServerMethodName, - ServerMethodParameters, - ServerMethodReturn, - ServerMethodFunction, -} from '@rocket.chat/ddp-client/src/types/methods'; -export { - StreamerEvents, - StreamNames, - StreamKeys, - StreamerConfigs, - StreamerConfig, - StreamerCallbackArgs, -} from '@rocket.chat/ddp-client/src/types/streams'; export { UploadResult } from './ServerContext'; export { TranslationKey, TranslationLanguage } from './TranslationContext'; export { Fields } from './UserContext'; diff --git a/packages/ui-kit/CHANGELOG.md b/packages/ui-kit/CHANGELOG.md index 1e920681e13d..9f31c620f4db 100644 --- a/packages/ui-kit/CHANGELOG.md +++ b/packages/ui-kit/CHANGELOG.md @@ -1,5 +1,19 @@ # Change Log +## 0.36.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +## 0.36.0-rc.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + ## 0.35.0 ### Minor Changes diff --git a/packages/ui-kit/jest.config.js b/packages/ui-kit/jest.config.js deleted file mode 100644 index 1ea2839f0cb8..000000000000 --- a/packages/ui-kit/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = /** @satisfies {import('jest').Config} */ ({ - preset: 'ts-jest', - testEnvironment: 'node', - errorOnDeprecated: true, - testMatch: ['/src/**/*.spec.[jt]s?(x)'], - setupFilesAfterEnv: ['/src/jest-setup.ts'], - collectCoverage: true, -}); diff --git a/packages/ui-kit/jest.config.ts b/packages/ui-kit/jest.config.ts new file mode 100644 index 000000000000..c18c8ae02465 --- /dev/null +++ b/packages/ui-kit/jest.config.ts @@ -0,0 +1,6 @@ +import server from '@rocket.chat/jest-presets/server'; +import type { Config } from 'jest'; + +export default { + preset: server.preset, +} satisfies Config; diff --git a/packages/ui-kit/package.json b/packages/ui-kit/package.json index b4819ef4311c..44aac1e25d17 100644 --- a/packages/ui-kit/package.json +++ b/packages/ui-kit/package.json @@ -1,62 +1,67 @@ { - "name": "@rocket.chat/ui-kit", - "version": "0.35.0", - "description": "Interactive UI elements for Rocket.Chat Apps", - "homepage": "https://rocket.chat", - "author": { - "name": "Rocket.Chat", - "url": "https://rocket.chat/" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/RocketChat/Rocket.Chat.git" - }, - "bugs": { - "url": "https://github.com/RocketChat/Rocket.Chat/issues" - }, - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/esm/index.d.ts", - "files": [ - "/dist" - ], - "publishConfig": { - "access": "public" - }, - "scripts": { - "build": "run-s .:build:prepare .:build:clean .:build:esm .:build:cjs", - ".:build:prepare": "ts-patch install && typia patch", - ".:build:clean": "rimraf dist", - ".:build:esm": "tsc -p tsconfig.esm.json", - ".:build:cjs": "tsc -p tsconfig.cjs.json", - "typecheck": "tsc --noEmit", - "lint": "eslint . --ext .ts,.tsx", - "test": "jest" - }, - "devDependencies": { - "@babel/core": "~7.21.4", - "@babel/eslint-parser": "~7.23.3", - "@babel/plugin-transform-runtime": "~7.21.4", - "@babel/preset-env": "~7.21.4", - "@rocket.chat/eslint-config": "workspace:~", - "@types/jest": "~29.5.0", - "babel-loader": "~9.1.2", - "eslint": "~8.45.0", - "jest": "~29.5.0", - "npm-run-all": "~4.1.5", - "prettier": "~2.8.8", - "rimraf": "~3.0.2", - "ts-jest": "~29.1.1", - "ts-loader": "~9.4.2", - "ts-node": "~10.9.1", - "ts-patch": "~3.0.2", - "typescript": "~5.3.3" - }, - "dependencies": { - "typia": "~5.3.3" - }, - "volta": { - "extends": "../../package.json" - } + "name": "@rocket.chat/ui-kit", + "version": "0.36.0", + "description": "Interactive UI elements for Rocket.Chat Apps", + "homepage": "https://rocket.chat", + "author": { + "name": "Rocket.Chat", + "url": "https://rocket.chat/" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/RocketChat/Rocket.Chat.git" + }, + "bugs": { + "url": "https://github.com/RocketChat/Rocket.Chat/issues" + }, + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", + "files": [ + "/dist" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "run-s .:build:prepare .:build:clean .:build:esm .:build:cjs", + ".:build:prepare": "ts-patch install && typia patch", + ".:build:clean": "rimraf dist", + ".:build:esm": "tsc -p tsconfig.esm.json", + ".:build:cjs": "tsc -p tsconfig.cjs.json", + "typecheck": "tsc --noEmit", + "lint": "eslint . --ext .ts,.tsx", + "test": "jest" + }, + "devDependencies": { + "@babel/core": "~7.21.4", + "@babel/eslint-parser": "~7.23.3", + "@babel/plugin-transform-runtime": "~7.21.4", + "@babel/preset-env": "~7.21.4", + "@rocket.chat/eslint-config": "workspace:~", + "@rocket.chat/icons": "^0.36.0", + "@rocket.chat/jest-presets": "workspace:~", + "@types/jest": "~29.5.12", + "babel-loader": "~9.1.2", + "eslint": "~8.45.0", + "jest": "~29.7.0", + "npm-run-all": "~4.1.5", + "prettier": "~2.8.8", + "rimraf": "~3.0.2", + "ts-jest": "~29.1.1", + "ts-loader": "~9.4.2", + "ts-node": "~10.9.1", + "ts-patch": "~3.0.2", + "typescript": "~5.3.3" + }, + "dependencies": { + "typia": "~5.3.3" + }, + "peerDependencies": { + "@rocket.chat/icons": "*" + }, + "volta": { + "extends": "../../package.json" + } } diff --git a/packages/ui-kit/tsconfig.cjs.json b/packages/ui-kit/tsconfig.cjs.json index fd872164da6a..2784364aac38 100644 --- a/packages/ui-kit/tsconfig.cjs.json +++ b/packages/ui-kit/tsconfig.cjs.json @@ -7,5 +7,5 @@ "plugins": [{ "transform": "typia/lib/transform" }] }, "include": ["./src/**/*"], - "exclude": ["./src/**/*.spec.ts", "./src/jest-setup.ts"], + "exclude": ["./src/**/*.spec.ts"], } diff --git a/packages/ui-kit/tsconfig.esm.json b/packages/ui-kit/tsconfig.esm.json index 6eea7b79756f..a001f3197042 100644 --- a/packages/ui-kit/tsconfig.esm.json +++ b/packages/ui-kit/tsconfig.esm.json @@ -5,5 +5,5 @@ "outDir": "./dist/esm" }, "include": ["./src/**/*"], - "exclude": ["./src/**/*.spec.ts", "./src/jest-setup.ts"] + "exclude": ["./src/**/*.spec.ts"] } diff --git a/packages/ui-video-conf/.storybook/main.js b/packages/ui-video-conf/.storybook/main.js index 6919b887faaf..dc95f3584a3f 100644 --- a/packages/ui-video-conf/.storybook/main.js +++ b/packages/ui-video-conf/.storybook/main.js @@ -1,7 +1,7 @@ /** @type {import('@storybook/react/types').StorybookConfig} */ module.exports = { stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'], - addons: ['@storybook/addon-essentials'], + addons: ['@storybook/addon-essentials', '@storybook/addon-a11y'], framework: '@storybook/react', features: { postcss: false, diff --git a/packages/ui-video-conf/.storybook/preview.js b/packages/ui-video-conf/.storybook/preview.js index 5980deceb25b..d1e44f0c2b8c 100644 --- a/packages/ui-video-conf/.storybook/preview.js +++ b/packages/ui-video-conf/.storybook/preview.js @@ -1,5 +1,6 @@ import '../../../apps/meteor/app/theme/client/main.css'; import 'highlight.js/styles/github.css'; +import '@rocket.chat/icons/dist/rocketchat.css'; export const parameters = { actions: { argTypesRegex: '^on[A-Z].*' }, diff --git a/packages/ui-video-conf/CHANGELOG.md b/packages/ui-video-conf/CHANGELOG.md index 0849b46fc58b..2a697e293211 100644 --- a/packages/ui-video-conf/CHANGELOG.md +++ b/packages/ui-video-conf/CHANGELOG.md @@ -1,5 +1,105 @@ # @rocket.chat/ui-video-conf +## 9.0.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 4e8aa575a6]: + + - @rocket.chat/ui-contexts@9.0.0 + - @rocket.chat/ui-avatar@5.0.0 +
    + +## 9.0.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.6 + - @rocket.chat/ui-avatar@5.0.0-rc.6 +
    + +## 9.0.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.5 + - @rocket.chat/ui-avatar@5.0.0-rc.5 +
    + +## 9.0.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.4 + - @rocket.chat/ui-avatar@5.0.0-rc.4 +
    + +## 9.0.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.3 + - @rocket.chat/ui-avatar@5.0.0-rc.3 +
    + +## 9.0.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.2 + - @rocket.chat/ui-avatar@5.0.0-rc.2 +
    + +## 9.0.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.1 + - @rocket.chat/ui-avatar@5.0.0-rc.1 +
    + +## 9.0.0-rc.0 + +### Minor Changes + +- ([#32793](https://github.com/RocketChat/Rocket.Chat/pull/32793)) New Feature: Video Conference Persistent Chat. + This feature provides a discussion id for conference provider apps to store the chat messages exchanged during the conferences, so that those users may then access those messages again at any time through Rocket.Chat. + +### Patch Changes + +-
    Updated dependencies [2d89a0c448, 4e8aa575a6]: + + - @rocket.chat/ui-contexts@9.0.0-rc.0 + - @rocket.chat/ui-avatar@5.0.0-rc.0 +
    + +## 8.0.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@8.0.2 + - @rocket.chat/ui-avatar@4.0.2 +
    + ## 8.0.1 ### Patch Changes diff --git a/packages/ui-video-conf/jest.config.ts b/packages/ui-video-conf/jest.config.ts new file mode 100644 index 000000000000..14379928638f --- /dev/null +++ b/packages/ui-video-conf/jest.config.ts @@ -0,0 +1,8 @@ +import client from '@rocket.chat/jest-presets/client'; +import type { Config } from 'jest'; + +export default { + preset: client.preset, + setupFilesAfterEnv: [...client.setupFilesAfterEnv], + testMatch: ['/src/**/*.spec.{ts,tsx}'], +} satisfies Config; diff --git a/packages/ui-video-conf/package.json b/packages/ui-video-conf/package.json index dd34ff30d7a5..d0dc218808c9 100644 --- a/packages/ui-video-conf/package.json +++ b/packages/ui-video-conf/package.json @@ -1,17 +1,19 @@ { "name": "@rocket.chat/ui-video-conf", - "version": "8.0.1", + "version": "9.0.0", "private": true, "devDependencies": { "@babel/core": "~7.22.20", "@rocket.chat/css-in-js": "~0.31.25", "@rocket.chat/eslint-config": "workspace:^", - "@rocket.chat/fuselage": "^0.56.0", + "@rocket.chat/fuselage": "^0.57.0", "@rocket.chat/fuselage-hooks": "^0.33.1", "@rocket.chat/icons": "^0.36.0", + "@rocket.chat/jest-presets": "workspace:~", "@rocket.chat/styled": "~0.31.25", "@rocket.chat/ui-avatar": "workspace:^", "@rocket.chat/ui-contexts": "workspace:^", + "@storybook/addon-a11y": "^6.5.16", "@storybook/addon-actions": "~6.5.16", "@storybook/addon-docs": "~6.5.16", "@storybook/addon-essentials": "~6.5.16", @@ -19,15 +21,17 @@ "@storybook/manager-webpack4": "~6.5.16", "@storybook/react": "~6.5.16", "@storybook/testing-library": "~0.0.13", + "@storybook/testing-react": "~1.3.0", "@types/babel__core": "~7.20.3", - "@types/jest": "~29.5.7", + "@types/jest": "~29.5.12", + "@types/jest-axe": "~3.5.9", "eslint": "~8.45.0", "eslint-plugin-react": "~7.32.2", "eslint-plugin-react-hooks": "~4.6.0", "eslint-plugin-storybook": "~0.6.15", - "jest": "~29.6.4", + "jest": "~29.7.0", + "jest-axe": "~9.0.0", "react-docgen-typescript-plugin": "~1.0.5", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "peerDependencies": { @@ -36,8 +40,8 @@ "@rocket.chat/fuselage-hooks": "*", "@rocket.chat/icons": "*", "@rocket.chat/styled": "*", - "@rocket.chat/ui-avatar": "4.0.1", - "@rocket.chat/ui-contexts": "8.0.1", + "@rocket.chat/ui-avatar": "5.0.0", + "@rocket.chat/ui-contexts": "9.0.0", "react": "^17.0.2", "react-dom": "^17.0.2" }, @@ -45,9 +49,9 @@ "eslint": "eslint --ext .js,.jsx,.ts,.tsx .", "eslint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", "test": "jest", - "build": "tsc -p tsconfig.json", + "build": "tsc -p tsconfig.build.json", "storybook": "start-storybook -p 6006", - "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" + "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput" }, "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/packages/ui-video-conf/src/VideoConfButton/VideoConfButton.spec.tsx b/packages/ui-video-conf/src/VideoConfButton/VideoConfButton.spec.tsx new file mode 100644 index 000000000000..a55b22c4a865 --- /dev/null +++ b/packages/ui-video-conf/src/VideoConfButton/VideoConfButton.spec.tsx @@ -0,0 +1,19 @@ +import { composeStories } from '@storybook/testing-react'; +import { render } from '@testing-library/react'; +import { axe } from 'jest-axe'; + +import * as stories from './VideoConfButton.stories'; + +const testCases = Object.values(composeStories(stories)).map((Story) => [Story.storyName || 'Story', Story]); + +test.each(testCases)(`renders %s without crashing`, async (_storyname, Story) => { + const tree = render(); + expect(tree.baseElement).toMatchSnapshot(); +}); + +test.each(testCases)('%s should have no a11y violations', async (_storyname, Story) => { + const { container } = render(); + + const results = await axe(container); + expect(results).toHaveNoViolations(); +}); diff --git a/packages/ui-video-conf/src/VideoConfButton/VideoConfButton.stories.tsx b/packages/ui-video-conf/src/VideoConfButton/VideoConfButton.stories.tsx new file mode 100644 index 000000000000..769f98563d6e --- /dev/null +++ b/packages/ui-video-conf/src/VideoConfButton/VideoConfButton.stories.tsx @@ -0,0 +1,10 @@ +import type { ComponentMeta, ComponentStory } from '@storybook/react'; + +import VideoConfButton from './VideoConfButton'; + +export default { + title: 'Components/VideoConfButton', + component: VideoConfButton, +} satisfies ComponentMeta; + +export const Default: ComponentStory = () => Button; diff --git a/packages/ui-video-conf/src/VideoConfButton.tsx b/packages/ui-video-conf/src/VideoConfButton/VideoConfButton.tsx similarity index 100% rename from packages/ui-video-conf/src/VideoConfButton.tsx rename to packages/ui-video-conf/src/VideoConfButton/VideoConfButton.tsx diff --git a/packages/ui-video-conf/src/VideoConfButton/__snapshots__/VideoConfButton.spec.tsx.snap b/packages/ui-video-conf/src/VideoConfButton/__snapshots__/VideoConfButton.spec.tsx.snap new file mode 100644 index 000000000000..b7170a3c0dee --- /dev/null +++ b/packages/ui-video-conf/src/VideoConfButton/__snapshots__/VideoConfButton.spec.tsx.snap @@ -0,0 +1,18 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders Default without crashing 1`] = ` + +
    + +
    + +`; diff --git a/packages/ui-video-conf/src/VideoConfButton/index.ts b/packages/ui-video-conf/src/VideoConfButton/index.ts new file mode 100644 index 000000000000..7a3637f70e31 --- /dev/null +++ b/packages/ui-video-conf/src/VideoConfButton/index.ts @@ -0,0 +1 @@ +export { default } from './VideoConfButton'; diff --git a/packages/ui-video-conf/src/VideoConfController/VideoConfController.spec.tsx b/packages/ui-video-conf/src/VideoConfController/VideoConfController.spec.tsx new file mode 100644 index 000000000000..96f5b50af1e3 --- /dev/null +++ b/packages/ui-video-conf/src/VideoConfController/VideoConfController.spec.tsx @@ -0,0 +1,19 @@ +import { composeStories } from '@storybook/testing-react'; +import { render } from '@testing-library/react'; +import { axe } from 'jest-axe'; + +import * as stories from './VideoConfController.stories'; + +const testCases = Object.values(composeStories(stories)).map((Story) => [Story.storyName || 'Story', Story]); + +test.each(testCases)(`renders %s without crashing`, async (_storyname, Story) => { + const tree = render(); + expect(tree.baseElement).toMatchSnapshot(); +}); + +test.each(testCases)('%s should have no a11y violations', async (_storyname, Story) => { + const { container } = render(); + + const results = await axe(container); + expect(results).toHaveNoViolations(); +}); diff --git a/packages/ui-video-conf/src/VideoConfController/VideoConfController.stories.tsx b/packages/ui-video-conf/src/VideoConfController/VideoConfController.stories.tsx new file mode 100644 index 000000000000..dcce6da237ae --- /dev/null +++ b/packages/ui-video-conf/src/VideoConfController/VideoConfController.stories.tsx @@ -0,0 +1,14 @@ +import type { ComponentMeta, ComponentStory } from '@storybook/react'; + +import VideoConfController from './VideoConfController'; + +export default { + title: 'Components/VideoConfController', + component: VideoConfController, +} satisfies ComponentMeta; + +export const Default: ComponentStory = (args) => ; +Default.args = { + 'icon': 'info', + 'aria-label': 'info', +}; diff --git a/packages/ui-video-conf/src/VideoConfController.tsx b/packages/ui-video-conf/src/VideoConfController/VideoConfController.tsx similarity index 65% rename from packages/ui-video-conf/src/VideoConfController.tsx rename to packages/ui-video-conf/src/VideoConfController/VideoConfController.tsx index b3813e329535..0b339fa0baec 100644 --- a/packages/ui-video-conf/src/VideoConfController.tsx +++ b/packages/ui-video-conf/src/VideoConfController/VideoConfController.tsx @@ -1,5 +1,4 @@ import { IconButton } from '@rocket.chat/fuselage'; -import { useUniqueId } from '@rocket.chat/fuselage-hooks'; import type { Keys as IconName } from '@rocket.chat/icons'; import type { ReactElement, ButtonHTMLAttributes } from 'react'; @@ -11,21 +10,16 @@ type VideoConfControllerProps = { small?: boolean; } & Omit, 'ref' | 'is' | 'className' | 'size' | 'elevation'>; -const VideoConfController = ({ icon, active, secondary, disabled, small = true, ...props }: VideoConfControllerProps): ReactElement => { - const id = useUniqueId(); - - return ( - - ); -}; +const VideoConfController = ({ icon, active, secondary, disabled, small = true, ...props }: VideoConfControllerProps): ReactElement => ( + +); export default VideoConfController; diff --git a/packages/ui-video-conf/src/VideoConfController/__snapshots__/VideoConfController.spec.tsx.snap b/packages/ui-video-conf/src/VideoConfController/__snapshots__/VideoConfController.spec.tsx.snap new file mode 100644 index 000000000000..a9c09dcdf166 --- /dev/null +++ b/packages/ui-video-conf/src/VideoConfController/__snapshots__/VideoConfController.spec.tsx.snap @@ -0,0 +1,21 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders Default without crashing 1`] = ` + +
    + +
    + +`; diff --git a/packages/ui-video-conf/src/VideoConfController/index.ts b/packages/ui-video-conf/src/VideoConfController/index.ts new file mode 100644 index 000000000000..352b2fb9769b --- /dev/null +++ b/packages/ui-video-conf/src/VideoConfController/index.ts @@ -0,0 +1 @@ +export { default } from './VideoConfController'; diff --git a/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessage.spec.tsx b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessage.spec.tsx new file mode 100644 index 000000000000..6b0db6b13b33 --- /dev/null +++ b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessage.spec.tsx @@ -0,0 +1,19 @@ +import { composeStories } from '@storybook/testing-react'; +import { render } from '@testing-library/react'; +import { axe } from 'jest-axe'; + +import * as stories from './VideoConfMessage.stories'; + +const testCases = Object.values(composeStories(stories)).map((Story) => [Story.storyName || 'Story', Story]); + +test.each(testCases)(`renders %s without crashing`, async (_storyname, Story) => { + const tree = render(); + expect(tree.baseElement).toMatchSnapshot(); +}); + +test.each(testCases)('%s should have no a11y violations', async (_storyname, Story) => { + const { container } = render(); + + const results = await axe(container); + expect(results).toHaveNoViolations(); +}); diff --git a/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessage.stories.tsx b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessage.stories.tsx index 121db9cac51d..81a42d8b458f 100644 --- a/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessage.stories.tsx +++ b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessage.stories.tsx @@ -2,7 +2,6 @@ import { MessageDivider, Message, Avatar, Box } from '@rocket.chat/fuselage'; import type { ComponentMeta, ComponentStory } from '@storybook/react'; import type { ReactElement } from 'react'; -import '@rocket.chat/icons/dist/rocketchat.css'; import { VideoConfMessage, VideoConfMessageIcon, VideoConfMessageRow, VideoConfMessageText } from '.'; import VideoConfMessageAction from './VideoConfMessageAction'; import VideoConfMessageActions from './VideoConfMessageActions'; @@ -22,7 +21,7 @@ export default { May, 24, 2020 - + @@ -41,7 +40,7 @@ export default { ), ], -} as ComponentMeta; +} satisfies ComponentMeta; const avatarUrl = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAoACgDASIAAhEBAxEB/8QAGwAAAgIDAQAAAAAAAAAAAAAAAAcEBgIDBQj/xAAuEAACAQQAAwcEAQUAAAAAAAABAgMABAUREiExBhMUIkFRYQcWcYGhFTJSgpH/xAAYAQADAQEAAAAAAAAAAAAAAAACAwQBAP/EAB4RAAIBBQEBAQAAAAAAAAAAAAABAgMREiExE0HR/9oADAMBAAIRAxEAPwBuXuIkhBuMe5ib/AHQP49q4L3mLitryTLTSpOiHQI5k/HzXa/qbFOEudVTu1dumWvcTaNCZYZ7vU6g6LxqjOU/24dfs1Ouh9FnkMpd3Reeyx83hAxZZEhkdV9/MBrX71WGPvJcqrJBGveKATtuXXqNU0pu02bTHXD/AGvJAluyxxRd6F4x00o+NdKoVrjbzJdvVe1t5cVLc2ck8qjnohgpPtz2v7G6JtPQ2VJwjlcw+37mchpnK6GtIuv5NFWeTsLNPvxWTvpfjvOEfwKKzEVkSct2vscS/BIzSN0YRkeX81UpPqO8masJETu7OOccY4dswYFQeftv096XV5knuJGdm2T1+agvMXj8jEaHX905QihabvcbuS7X566mLWLwSY8PuRnk/u4eZ0deTl71Ef6hY+0yM88TzeNZY4luYwpVYyduOfrvhPTnr0pXSX9y5mCsyJMdyxxvwq599em+taItqCSNc90ChvZRUruUcT0JiO18Elpk7t8v41LWzacxkBSuvjQ/FFJayjDWrCTepAQ2vUH0oo/Jk3ovpwJJeVCP5CN+lFFaaMqy+nAyuChvrTI2kN9JAsi2ZOy4IBHMnkSCP+iqBexSWdxLazoUljJVlPUH2oorkV10pRc7b1zXb/hZOzuJvM86QWEXeELxOzHSIPcmiiiunVlF2RNTpRkrs//Z'; @@ -54,7 +53,7 @@ export const CallingDM: ComponentStory = () => ( Calling... - + @@ -72,7 +71,7 @@ export const CallEndedDM: ComponentStory = () => ( Call ended - + @@ -90,7 +89,7 @@ export const CallOngoing: ComponentStory = () => ( Call ongoing - + @@ -109,7 +108,7 @@ export const CallEnded: ComponentStory = () => ( Call ended - + diff --git a/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessage.tsx b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessage.tsx index 7c22b707770f..d873da1413d0 100644 --- a/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessage.tsx +++ b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessage.tsx @@ -1,7 +1,8 @@ import { Box } from '@rocket.chat/fuselage'; -import type { ReactElement } from 'react'; +import type { AllHTMLAttributes, ReactElement } from 'react'; -const VideoConfMessage = ({ ...props }): ReactElement => ( +type VideoConfMessageProps = Omit, 'is'>; +const VideoConfMessage = (props: VideoConfMessageProps): ReactElement => ( ( borderWidth={1} borderColor='extra-light' borderRadius='x4' - className='rcx-videoconf-message-block' + rcx-videoconf-message-block {...props} /> ); diff --git a/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageAction.tsx b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageAction.tsx index 9b705001c03f..a50fbda68bf6 100644 --- a/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageAction.tsx +++ b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageAction.tsx @@ -2,6 +2,6 @@ import { IconButton } from '@rocket.chat/fuselage'; import type { ComponentProps, ReactElement } from 'react'; const VideoConfMessageAction = ({ icon = 'info', ...props }: ComponentProps): ReactElement => ( - + ); export default VideoConfMessageAction; diff --git a/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageActions.tsx b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageActions.tsx index cc6112dfbd35..9556c334501b 100644 --- a/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageActions.tsx +++ b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageActions.tsx @@ -2,7 +2,7 @@ import { ButtonGroup } from '@rocket.chat/fuselage'; import type { ComponentProps, ReactElement } from 'react'; const VideoConfMessageActions = ({ children, ...props }: ComponentProps): ReactElement => ( - + {children} ); diff --git a/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageButton.tsx b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageButton.tsx index 75d2933bbce0..44463b2d28db 100644 --- a/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageButton.tsx +++ b/packages/ui-video-conf/src/VideoConfMessage/VideoConfMessageButton.tsx @@ -1,15 +1,9 @@ -import { Box, Button } from '@rocket.chat/fuselage'; -import type { AllHTMLAttributes, ReactElement, ReactNode } from 'react'; +import { Button } from '@rocket.chat/fuselage'; +import type { AllHTMLAttributes, ReactElement } from 'react'; -const VideoConfMessageButton = ({ - children, - primary, - ...props -}: { children: ReactNode; primary?: boolean } & Omit, 'is'>): ReactElement => ( - - - +type VideoConfMessageButtonProps = { primary?: boolean } & Omit, 'is'>; + +const VideoConfMessageButton = ({ primary, ...props }: VideoConfMessageButtonProps): ReactElement => ( + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +

    + Joined +

    +
    +
    + + + + + + + +`; + +exports[`renders CallEndedDM without crashing 1`] = ` + +
    +
    + + +`; + +exports[`renders CallOngoing without crashing 1`] = ` + +
    +
    + + +`; + +exports[`renders CallingDM without crashing 1`] = ` + +
    +
    + + +`; + +exports[`renders Loading without crashing 1`] = ` + +
    +
    + + +`; diff --git a/packages/ui-video-conf/src/VideoConfPopup/VideoConfPopup.spec.tsx b/packages/ui-video-conf/src/VideoConfPopup/VideoConfPopup.spec.tsx new file mode 100644 index 000000000000..d51db2e964d8 --- /dev/null +++ b/packages/ui-video-conf/src/VideoConfPopup/VideoConfPopup.spec.tsx @@ -0,0 +1,19 @@ +import { composeStories } from '@storybook/testing-react'; +import { render } from '@testing-library/react'; +import { axe } from 'jest-axe'; + +import * as stories from './VideoConfPopup.stories'; + +const testCases = Object.values(composeStories(stories)).map((Story) => [Story.storyName || 'Story', Story]); + +test.each(testCases)(`renders %s without crashing`, async (_storyname, Story) => { + const tree = render(); + expect(tree.baseElement).toMatchSnapshot(); +}); + +test.each(testCases)('%s should have no a11y violations', async (_storyname, Story) => { + const { container } = render(); + + const results = await axe(container); + expect(results).toHaveNoViolations(); +}); diff --git a/packages/ui-video-conf/src/VideoConfPopup/VideoConfPopup.stories.tsx b/packages/ui-video-conf/src/VideoConfPopup/VideoConfPopup.stories.tsx index 4f73e3cf4775..c32590af8a14 100644 --- a/packages/ui-video-conf/src/VideoConfPopup/VideoConfPopup.stories.tsx +++ b/packages/ui-video-conf/src/VideoConfPopup/VideoConfPopup.stories.tsx @@ -3,7 +3,6 @@ import { action } from '@storybook/addon-actions'; import type { ComponentMeta, ComponentStory } from '@storybook/react'; import type { ReactElement } from 'react'; -import '@rocket.chat/icons/dist/rocketchat.css'; import { VideoConfPopup, VideoConfPopupHeader, @@ -27,22 +26,22 @@ export default { ), ], -} as ComponentMeta; +} satisfies ComponentMeta; const avatarUrl = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAoACgDASIAAhEBAxEB/8QAGwAAAgIDAQAAAAAAAAAAAAAAAAcEBgIDBQj/xAAuEAACAQQAAwcEAQUAAAAAAAABAgMABAUREiExBhMUIkFRYQcWcYGhFTJSgpH/xAAYAQADAQEAAAAAAAAAAAAAAAACAwQBAP/EAB4RAAIBBQEBAQAAAAAAAAAAAAABAgMREiExE0HR/9oADAMBAAIRAxEAPwBuXuIkhBuMe5ib/AHQP49q4L3mLitryTLTSpOiHQI5k/HzXa/qbFOEudVTu1dumWvcTaNCZYZ7vU6g6LxqjOU/24dfs1Ouh9FnkMpd3Reeyx83hAxZZEhkdV9/MBrX71WGPvJcqrJBGveKATtuXXqNU0pu02bTHXD/AGvJAluyxxRd6F4x00o+NdKoVrjbzJdvVe1t5cVLc2ck8qjnohgpPtz2v7G6JtPQ2VJwjlcw+37mchpnK6GtIuv5NFWeTsLNPvxWTvpfjvOEfwKKzEVkSct2vscS/BIzSN0YRkeX81UpPqO8masJETu7OOccY4dswYFQeftv096XV5knuJGdm2T1+agvMXj8jEaHX905QihabvcbuS7X566mLWLwSY8PuRnk/u4eZ0deTl71Ef6hY+0yM88TzeNZY4luYwpVYyduOfrvhPTnr0pXSX9y5mCsyJMdyxxvwq599em+taItqCSNc90ChvZRUruUcT0JiO18Elpk7t8v41LWzacxkBSuvjQ/FFJayjDWrCTepAQ2vUH0oo/Jk3ovpwJJeVCP5CN+lFFaaMqy+nAyuChvrTI2kN9JAsi2ZOy4IBHMnkSCP+iqBexSWdxLazoUljJVlPUH2oorkV10pRc7b1zXb/hZOzuJvM86QWEXeELxOzHSIPcmiiiunVlF2RNTpRkrs//Z'; export const StartCall: ComponentStory = () => ( - + - - + + - } icon={}> + } icon={}> Room Name diff --git a/packages/ui-video-conf/src/VideoConfPopup/__snapshots__/VideoConfPopup.spec.tsx.snap b/packages/ui-video-conf/src/VideoConfPopup/__snapshots__/VideoConfPopup.spec.tsx.snap new file mode 100644 index 000000000000..358cec7d7f7d --- /dev/null +++ b/packages/ui-video-conf/src/VideoConfPopup/__snapshots__/VideoConfPopup.spec.tsx.snap @@ -0,0 +1,117 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders StartCall without crashing 1`] = ` + +
    +
    + +
    +
    + +`; diff --git a/packages/ui-video-conf/src/hooks/useVideoConfControllers.ts b/packages/ui-video-conf/src/hooks/useVideoConfControllers.ts index 8e55ffa24d79..41bc48b97a25 100644 --- a/packages/ui-video-conf/src/hooks/useVideoConfControllers.ts +++ b/packages/ui-video-conf/src/hooks/useVideoConfControllers.ts @@ -10,13 +10,9 @@ export const useVideoConfControllers = ( ): { controllersConfig: controllersConfigProps; handleToggleMic: () => void; handleToggleCam: () => void } => { const [controllersConfig, setControllersConfig] = useState(initialPreferences); - const handleToggleMic = useCallback((): void => { - setControllersConfig((prevState) => ({ ...prevState, mic: !prevState.mic })); - }, []); + const handleToggleMic = useCallback(() => setControllersConfig((prevState) => ({ ...prevState, mic: !prevState.mic })), []); - const handleToggleCam = useCallback((): void => { - setControllersConfig((prevState) => ({ ...prevState, cam: !prevState.cam })); - }, []); + const handleToggleCam = useCallback(() => setControllersConfig((prevState) => ({ ...prevState, cam: !prevState.cam })), []); return { controllersConfig, diff --git a/packages/ui-video-conf/tsconfig.build.json b/packages/ui-video-conf/tsconfig.build.json new file mode 100644 index 000000000000..36dbe9c166ff --- /dev/null +++ b/packages/ui-video-conf/tsconfig.build.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["./src/**/*"], + "exclude": ["./src/**/*.stories.tsx", "./src/**/*.spec.ts", "./src/**/*.spec.tsx"] +} diff --git a/packages/ui-video-conf/tsconfig.json b/packages/ui-video-conf/tsconfig.json index e2be47cf5499..aa282e17ea6c 100644 --- a/packages/ui-video-conf/tsconfig.json +++ b/packages/ui-video-conf/tsconfig.json @@ -1,8 +1,8 @@ { "extends": "../../tsconfig.base.client.json", "compilerOptions": { - "rootDir": "./src", + "rootDirs": ["./src", "./"], "outDir": "./dist" }, - "include": ["./src/**/*"] + "include": ["./src/**/*", "./jest.config.ts"], } diff --git a/packages/uikit-playground/CHANGELOG.md b/packages/uikit-playground/CHANGELOG.md index 7750377da8a2..0107fc049b8f 100644 --- a/packages/uikit-playground/CHANGELOG.md +++ b/packages/uikit-playground/CHANGELOG.md @@ -1,5 +1,104 @@ # @rocket.chat/uikit-playground +## 0.3.3 + +### Patch Changes + +-
    Updated dependencies [88e5219bd2, 2d89a0c448, 4e8aa575a6, b8e5887fb9]: + + - @rocket.chat/fuselage-ui-kit@9.0.0 + - @rocket.chat/ui-contexts@9.0.0 + - @rocket.chat/ui-avatar@5.0.0 +
    + +## 0.3.3-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.6 + - @rocket.chat/ui-contexts@9.0.0-rc.6 + - @rocket.chat/ui-avatar@5.0.0-rc.6 +
    + +## 0.3.3-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.5 + - @rocket.chat/ui-contexts@9.0.0-rc.5 + - @rocket.chat/ui-avatar@5.0.0-rc.5 +
    + +## 0.3.3-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.4 + - @rocket.chat/ui-contexts@9.0.0-rc.4 + - @rocket.chat/ui-avatar@5.0.0-rc.4 +
    + +## 0.3.3-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.3 + - @rocket.chat/ui-contexts@9.0.0-rc.3 + - @rocket.chat/ui-avatar@5.0.0-rc.3 +
    + +## 0.3.3-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.2 + - @rocket.chat/ui-contexts@9.0.0-rc.2 + - @rocket.chat/ui-avatar@5.0.0-rc.2 +
    + +## 0.3.3-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.1 + - @rocket.chat/ui-contexts@9.0.0-rc.1 + - @rocket.chat/ui-avatar@5.0.0-rc.1 +
    + +## 0.3.3-rc.0 + +### Patch Changes + +-
    Updated dependencies [88e5219bd2, 2d89a0c448, 4e8aa575a6, b8e5887fb9]: + + - @rocket.chat/fuselage-ui-kit@9.0.0-rc.0 + - @rocket.chat/ui-contexts@9.0.0-rc.0 + - @rocket.chat/ui-avatar@5.0.0-rc.0 +
    + +## 0.3.2 + +### Patch Changes + +-
    Updated dependencies [ca6a9d8de8, ca6a9d8de8, ca6a9d8de8, ca6a9d8de8]: + + - @rocket.chat/fuselage-ui-kit@8.0.2 + - @rocket.chat/ui-contexts@8.0.2 + - @rocket.chat/ui-avatar@4.0.2 +
    + ## 0.3.1 ### Patch Changes diff --git a/packages/uikit-playground/package.json b/packages/uikit-playground/package.json index d33cba9aeebc..750f60893188 100644 --- a/packages/uikit-playground/package.json +++ b/packages/uikit-playground/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/uikit-playground", "private": true, - "version": "0.3.1", + "version": "0.3.3", "type": "module", "scripts": { "dev": "vite", @@ -15,10 +15,10 @@ "@codemirror/tooltip": "^0.19.16", "@lezer/highlight": "^1.1.6", "@rocket.chat/css-in-js": "~0.31.25", - "@rocket.chat/fuselage": "^0.56.0", + "@rocket.chat/fuselage": "^0.57.0", "@rocket.chat/fuselage-hooks": "^0.33.1", "@rocket.chat/fuselage-polyfills": "~0.31.25", - "@rocket.chat/fuselage-toastbar": "^0.32.0", + "@rocket.chat/fuselage-toastbar": "^0.33.0", "@rocket.chat/fuselage-tokens": "^0.33.1", "@rocket.chat/fuselage-ui-kit": "workspace:~", "@rocket.chat/icons": "^0.36.0", diff --git a/packages/uikit-playground/src/Components/FlowContainer/FlowContainer.tsx b/packages/uikit-playground/src/Components/FlowContainer/FlowContainer.tsx index f04d95b274c2..311ddaae795c 100644 --- a/packages/uikit-playground/src/Components/FlowContainer/FlowContainer.tsx +++ b/packages/uikit-playground/src/Components/FlowContainer/FlowContainer.tsx @@ -8,6 +8,8 @@ import ReactFlow, { Viewport, ReactFlowInstance, useReactFlow, + Connection, + Edge, } from 'reactflow'; import 'reactflow/dist/style.css'; @@ -39,10 +41,10 @@ const FlowContainer = () => { const edgeUpdateSuccessful = useRef(true); const onConnect = useCallback( - (params) => { - if (params.source === params.target) return; + (connection: Connection) => { + if (connection.source === connection.target) return; const newEdge = { - ...params, + ...connection, type: FlowParams.edgeType, markerEnd: FlowParams.markerEnd, style: FlowParams.style, @@ -57,7 +59,7 @@ const FlowContainer = () => { }, []); const onEdgeUpdate = useCallback( - (oldEdge, newConnection) => { + (oldEdge: Edge, newConnection: Connection) => { edgeUpdateSuccessful.current = true; setEdges((els) => updateEdge(oldEdge, newConnection, els)); }, @@ -65,7 +67,7 @@ const FlowContainer = () => { ); const onEdgeUpdateEnd = useCallback( - (_, edge) => { + (_: MouseEvent | TouchEvent, edge: Edge) => { if (!edgeUpdateSuccessful.current) { setEdges((eds) => { return eds.filter((e) => e.id !== edge.id); diff --git a/packages/uikit-playground/src/Components/SurfaceSelect/SurfaceSelect.tsx b/packages/uikit-playground/src/Components/SurfaceSelect/SurfaceSelect.tsx index d0a59cc42a45..e6c0abba57e7 100644 --- a/packages/uikit-playground/src/Components/SurfaceSelect/SurfaceSelect.tsx +++ b/packages/uikit-playground/src/Components/SurfaceSelect/SurfaceSelect.tsx @@ -16,7 +16,7 @@ const SurfaceSelect: FC = () => { value={`${screens[activeScreen].payload.surface}`} placeholder="Surface" onChange={(e) => { - dispatch(surfaceAction(typeof e === 'string' ? parseInt(e) : e)); + dispatch(surfaceAction(typeof e === 'string' ? parseInt(e) : Number(e))); }} /> ); diff --git a/packages/web-ui-registration/CHANGELOG.md b/packages/web-ui-registration/CHANGELOG.md index 447b861cc456..871e66b0f29c 100644 --- a/packages/web-ui-registration/CHANGELOG.md +++ b/packages/web-ui-registration/CHANGELOG.md @@ -1,5 +1,96 @@ # @rocket.chat/web-ui-registration +## 9.0.0 + +### Patch Changes + +- ([#32482](https://github.com/RocketChat/Rocket.Chat/pull/32482)) Fixed an issue with blocked login when dismissed 2FA modal by clicking outside of it or pressing the escape key + +-
    Updated dependencies [8fc6ca8b4e, 2d89a0c448, 4e8aa575a6]: + + - @rocket.chat/tools@0.2.2 + - @rocket.chat/ui-contexts@9.0.0 +
    + +## 9.0.0-rc.6 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.6 +
    + +## 9.0.0-rc.5 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.5 +
    + +## 9.0.0-rc.4 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.4 +
    + +## 9.0.0-rc.3 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.3 +
    + +## 9.0.0-rc.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.2 +
    + +## 9.0.0-rc.1 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@9.0.0-rc.1 +
    + +## 9.0.0-rc.0 + +### Patch Changes + +- ([#32570](https://github.com/RocketChat/Rocket.Chat/pull/32570)) Login services button was not respecting the button color and text color settings. Implemented a fix to respect these settings and change the button colors accordingly. + + Added a warning on all settings which allow admins to change OAuth button colors, so that they can be alerted about WCAG (Web Content Accessibility Guidelines) compliance. + +- ([#32482](https://github.com/RocketChat/Rocket.Chat/pull/32482)) Fixed an issue with blocked login when dismissed 2FA modal by clicking outside of it or pressing the escape key + +-
    Updated dependencies [8fc6ca8b4e, 2d89a0c448, 4e8aa575a6]: + + - @rocket.chat/tools@0.2.2-rc.0 + - @rocket.chat/ui-contexts@9.0.0-rc.0 +
    + +## 8.0.2 + +### Patch Changes + +-
    Updated dependencies []: + + - @rocket.chat/ui-contexts@8.0.2 +
    + ## 8.0.1 ### Patch Changes diff --git a/packages/web-ui-registration/package.json b/packages/web-ui-registration/package.json index f4e462649679..ba3dc31423a6 100644 --- a/packages/web-ui-registration/package.json +++ b/packages/web-ui-registration/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/web-ui-registration", - "version": "8.0.1", + "version": "9.0.0", "private": true, "homepage": "https://rocket.chat", "main": "./dist/index.js", @@ -11,7 +11,6 @@ "scripts": { "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", - "test": "jest", "storybook": "start-storybook -p 6006 --no-version-updates", "build": "tsc -p tsconfig.build.json", "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput" @@ -35,23 +34,20 @@ "@storybook/react": "~6.5.16", "@storybook/testing-library": "^0.2.2", "@tanstack/react-query": "^4.16.1", - "@testing-library/react": "^13.3.0", - "@types/jest": "~29.5.7", + "@testing-library/react": "~16.0.0", "@types/react": "~17.0.69", "babel-loader": "~8.3.0", "eslint": "~8.45.0", - "jest": "~29.6.4", "react": "~17.0.2", "react-hook-form": "~7.45.4", "react-i18next": "~13.2.2", "storybook-dark-mode": "~3.0.1", - "ts-jest": "~29.1.1", "typescript": "~5.3.3" }, "peerDependencies": { "@rocket.chat/layout": "*", - "@rocket.chat/tools": "0.2.1", - "@rocket.chat/ui-contexts": "8.0.1", + "@rocket.chat/tools": "0.2.2", + "@rocket.chat/ui-contexts": "9.0.0", "@tanstack/react-query": "*", "react": "*", "react-hook-form": "*", diff --git a/packages/web-ui-registration/src/LoginServicesButton.tsx b/packages/web-ui-registration/src/LoginServicesButton.tsx index ba16d360d9c1..d9f43b0e484c 100644 --- a/packages/web-ui-registration/src/LoginServicesButton.tsx +++ b/packages/web-ui-registration/src/LoginServicesButton.tsx @@ -15,8 +15,6 @@ const LoginServicesButton = ({ className, disabled, setError, - buttonColor, - buttonLabelColor, ...props }: T & { className?: string; @@ -45,8 +43,6 @@ const LoginServicesButton = ({ alignItems='center' display='flex' justifyContent='center' - color={buttonLabelColor} - backgroundColor={buttonColor} > {buttonLabelText || t('Sign_in_with__provider__', { provider: title })} diff --git a/packages/web-ui-registration/src/components/LoginSwitchLanguageFooter.tsx b/packages/web-ui-registration/src/components/LoginSwitchLanguageFooter.tsx index 0d08fba8a3ac..46ce5112b9d4 100644 --- a/packages/web-ui-registration/src/components/LoginSwitchLanguageFooter.tsx +++ b/packages/web-ui-registration/src/components/LoginSwitchLanguageFooter.tsx @@ -62,7 +62,10 @@ const LoginSwitchLanguageFooter = ({ {suggestions.map((suggestion) => ( ))} diff --git a/turbo.json b/turbo.json index f7cf760529c0..7ce868eb3707 100644 --- a/turbo.json +++ b/turbo.json @@ -1,7 +1,7 @@ { "$schema": "https://turborepo.org/schema.json", "globalDependencies": ["tsconfig.base.json", "tsconfig.base.server.json", "tsconfig.base.client.json"], - "pipeline": { + "tasks": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] diff --git a/yarn.lock b/yarn.lock index 05788b5fed94..6a6c2a8ee9d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -59,10 +59,10 @@ __metadata: languageName: node linkType: hard -"@adobe/css-tools@npm:^4.0.1": - version: 4.0.1 - resolution: "@adobe/css-tools@npm:4.0.1" - checksum: 80226e2229024c21da9ffa6b5cd4a34b931f071e06f45aba4777ade071d7a6c94605cf73b13718b0c4b34e8b124c65c607b82eaa53a326d3eb73d9682a04a593 +"@adobe/css-tools@npm:^4.4.0": + version: 4.4.0 + resolution: "@adobe/css-tools@npm:4.4.0" + checksum: 1f08fb49bf17fc7f2d1a86d3e739f29ca80063d28168307f1b0a962ef37501c5667271f6771966578897f2e94e43c4770fd802728a6e6495b812da54112d506a languageName: node linkType: hard @@ -2937,16 +2937,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": - version: 7.23.4 - resolution: "@babel/runtime@npm:7.23.4" - dependencies: - regenerator-runtime: ^0.14.0 - checksum: 8eb6a6b2367f7d60e7f7dd83f477cc2e2fdb169e5460694d7614ce5c730e83324bcf29251b70940068e757ad1ee56ff8073a372260d90cad55f18a825caf97cd - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": version: 7.24.4 resolution: "@babel/runtime@npm:7.24.4" dependencies: @@ -4358,7 +4349,7 @@ __metadata: languageName: node linkType: hard -"@jest/core@npm:^29.5.0, @jest/core@npm:^29.6.4, @jest/core@npm:^29.7.0": +"@jest/core@npm:^29.7.0": version: 29.7.0 resolution: "@jest/core@npm:29.7.0" dependencies: @@ -4399,16 +4390,16 @@ __metadata: languageName: node linkType: hard -"@jest/create-cache-key-function@npm:^27.4.2": - version: 27.5.1 - resolution: "@jest/create-cache-key-function@npm:27.5.1" +"@jest/create-cache-key-function@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/create-cache-key-function@npm:29.7.0" dependencies: - "@jest/types": ^27.5.1 - checksum: a6c3a8c769aca6f66f5dc80f1c77e66980b4f213a6b2a15a92ba3595f032848a1261c06c9c798dcf2b672b1ffbefad5085af89d130548741c85ddbe0cf4284e7 + "@jest/types": ^29.6.3 + checksum: 681bc761fa1d6fa3dd77578d444f97f28296ea80755e90e46d1c8fa68661b9e67f54dd38b988742db636d26cf160450dc6011892cec98b3a7ceb58cad8ff3aae languageName: node linkType: hard -"@jest/environment@npm:^29.6.4, @jest/environment@npm:^29.7.0": +"@jest/environment@npm:^29.7.0": version: 29.7.0 resolution: "@jest/environment@npm:29.7.0" dependencies: @@ -4439,7 +4430,7 @@ __metadata: languageName: node linkType: hard -"@jest/fake-timers@npm:^29.6.4, @jest/fake-timers@npm:^29.7.0": +"@jest/fake-timers@npm:^29.7.0": version: 29.7.0 resolution: "@jest/fake-timers@npm:29.7.0" dependencies: @@ -4502,15 +4493,6 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/schemas@npm:28.1.3" - dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de - languageName: node - linkType: hard - "@jest/schemas@npm:^29.6.3": version: 29.6.3 resolution: "@jest/schemas@npm:29.6.3" @@ -4627,7 +4609,7 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.5.0, @jest/types@npm:^29.6.3": +"@jest/types@npm:^29.6.3": version: 29.6.3 resolution: "@jest/types@npm:29.6.3" dependencies: @@ -8460,10 +8442,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/account-utils@workspace:packages/account-utils" dependencies: - "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -8473,45 +8452,40 @@ __metadata: resolution: "@rocket.chat/agenda@workspace:packages/agenda" dependencies: "@types/debug": ^4.1.10 - "@types/jest": ~29.5.7 cron: ~1.8.2 date.js: ~0.3.3 debug: ~4.1.1 eslint: ~8.45.0 human-interval: ^2.0.1 - jest: ~29.6.4 moment-timezone: ~0.5.43 mongodb: ^4.17.2 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft -"@rocket.chat/api-client@workspace:^, @rocket.chat/api-client@workspace:ee/packages/api-client": +"@rocket.chat/api-client@workspace:^, @rocket.chat/api-client@workspace:packages/api-client": version: 0.0.0-use.local - resolution: "@rocket.chat/api-client@workspace:ee/packages/api-client" + resolution: "@rocket.chat/api-client@workspace:packages/api-client" dependencies: "@rocket.chat/core-typings": "workspace:^" + "@rocket.chat/jest-presets": "workspace:~" "@rocket.chat/rest-typings": "workspace:^" - "@swc/core": ^1.3.95 - "@swc/jest": ^0.2.29 - "@types/jest": ~29.5.7 + "@types/jest": ~29.5.12 "@types/strict-uri-encode": ^2.0.1 eslint: ~8.45.0 filter-obj: ^3.0.0 - jest: ~29.6.4 + jest: ~29.7.0 jest-fetch-mock: ^3.0.3 query-string: ^7.1.3 split-on-first: ^3.0.0 strict-uri-encode: ^2.0.0 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft -"@rocket.chat/apps-engine@npm:alpha": - version: 1.44.0-alpha.828 - resolution: "@rocket.chat/apps-engine@npm:1.44.0-alpha.828" +"@rocket.chat/apps-engine@npm:1.44.0": + version: 1.44.0 + resolution: "@rocket.chat/apps-engine@npm:1.44.0" dependencies: "@msgpack/msgpack": 3.0.0-beta2 adm-zip: ^0.5.9 @@ -8527,7 +8501,7 @@ __metadata: uuid: ~8.3.2 peerDependencies: "@rocket.chat/ui-kit": "*" - checksum: e26914b62d2e9823577fe8165a2635d65f69ddc315a880bbc417ddd674e4df487dc9bc9507bf3a0616de06cd927596872c1e90e4c29c61da8581e0a1b7c8d97d + checksum: f2b1b13c6a070c8d320a6d681ede6945a5882f9e2d42f2569bfc8c098229f761c7ef358589d3f1714d17b157fafa8e4869f28752408356f4a9286f62cb517f46 languageName: node linkType: hard @@ -8535,13 +8509,10 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/apps@workspace:packages/apps" dependencies: - "@rocket.chat/apps-engine": alpha + "@rocket.chat/apps-engine": 1.44.0 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/model-typings": "workspace:^" - "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -8585,11 +8556,11 @@ __metadata: "@babel/core": ~7.22.20 "@babel/preset-env": ~7.22.20 "@rocket.chat/eslint-config": "workspace:^" + "@rocket.chat/jest-presets": "workspace:~" "@typescript-eslint/eslint-plugin": ~5.60.1 "@typescript-eslint/parser": ~5.60.1 eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 + jest: ~29.7.0 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -8598,11 +8569,8 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/cas-validate@workspace:packages/cas-validate" dependencies: - "@types/jest": ~29.5.7 cheerio: 1.0.0-rc.10 eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -8614,10 +8582,11 @@ __metadata: "@babel/core": ~7.22.20 "@babel/preset-env": ~7.22.20 "@babel/preset-typescript": ~7.22.15 - "@rocket.chat/apps-engine": alpha + "@rocket.chat/apps-engine": 1.44.0 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/icons": ^0.36.0 + "@rocket.chat/jest-presets": "workspace:~" "@rocket.chat/message-parser": "workspace:^" "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" @@ -8625,22 +8594,22 @@ __metadata: "@types/babel__core": ^7.20.3 "@types/babel__preset-env": ^7.9.4 "@types/fibers": ^3.1.3 - "@types/jest": ~29.5.7 + "@types/jest": ~29.5.12 babel-jest: ^29.5.0 eslint: ~8.45.0 fibers: ^5.0.3 - jest: ~29.6.4 + jest: ~29.7.0 mongodb: ^4.17.2 prettier: ~2.8.8 typescript: ~5.3.3 languageName: unknown linkType: soft -"@rocket.chat/core-typings@workspace:^, @rocket.chat/core-typings@workspace:packages/core-typings": +"@rocket.chat/core-typings@workspace:^, @rocket.chat/core-typings@workspace:packages/core-typings, @rocket.chat/core-typings@workspace:~": version: 0.0.0-use.local resolution: "@rocket.chat/core-typings@workspace:packages/core-typings" dependencies: - "@rocket.chat/apps-engine": alpha + "@rocket.chat/apps-engine": 1.44.0 "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/icons": ^0.36.0 "@rocket.chat/message-parser": "workspace:^" @@ -8660,11 +8629,8 @@ __metadata: "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/models": "workspace:^" "@rocket.chat/random": "workspace:^" - "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.4 mongodb: ^4.17.2 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -8691,21 +8657,19 @@ __metadata: languageName: node linkType: hard -"@rocket.chat/ddp-client@workspace:^, @rocket.chat/ddp-client@workspace:ee/packages/ddp-client": +"@rocket.chat/ddp-client@workspace:^, @rocket.chat/ddp-client@workspace:packages/ddp-client, @rocket.chat/ddp-client@workspace:~": version: 0.0.0-use.local - resolution: "@rocket.chat/ddp-client@workspace:ee/packages/ddp-client" + resolution: "@rocket.chat/ddp-client@workspace:packages/ddp-client" dependencies: "@rocket.chat/api-client": "workspace:^" + "@rocket.chat/core-typings": "workspace:~" + "@rocket.chat/jest-presets": "workspace:~" "@rocket.chat/rest-typings": "workspace:^" - "@swc/core": ^1.3.95 - "@swc/jest": ^0.2.29 - "@types/jest": ^29.5.12 + "@types/jest": ~29.5.12 "@types/ws": ^8.5.8 eslint: ~8.45.0 - jest: ~29.6.4 - jest-environment-jsdom: ~29.6.4 - jest-websocket-mock: ^2.4.0 - ts-jest: ^29.1.2 + jest: ~29.7.0 + jest-websocket-mock: ~2.5.0 typescript: ~5.3.3 ws: ^8.13.0 peerDependencies: @@ -8717,9 +8681,10 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/ddp-streamer@workspace:ee/apps/ddp-streamer" dependencies: - "@rocket.chat/apps-engine": alpha + "@rocket.chat/apps-engine": 1.44.0 "@rocket.chat/core-services": "workspace:^" "@rocket.chat/core-typings": "workspace:^" + "@rocket.chat/ddp-client": "workspace:~" "@rocket.chat/emitter": ~0.31.25 "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/instance-status": "workspace:^" @@ -8728,7 +8693,6 @@ __metadata: "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/string-helpers": ~0.31.25 - "@rocket.chat/ui-contexts": "workspace:^" "@types/ejson": ^2.2.1 "@types/gc-stats": ^1.4.2 "@types/meteor": ^2.9.8 @@ -8884,9 +8848,11 @@ __metadata: languageName: node linkType: hard -"@rocket.chat/fuselage-toastbar@npm:^0.32.0": - version: 0.32.0 - resolution: "@rocket.chat/fuselage-toastbar@npm:0.32.0" +"@rocket.chat/fuselage-toastbar@npm:^0.33.0": + version: 0.33.0 + resolution: "@rocket.chat/fuselage-toastbar@npm:0.33.0" + dependencies: + react-timing-hooks: ~4.0.2 peerDependencies: "@rocket.chat/fuselage": "*" "@rocket.chat/fuselage-hooks": "*" @@ -8894,7 +8860,7 @@ __metadata: "@rocket.chat/styled": "*" react: ^17.0.2 react-dom: ^17.0.2 - checksum: 5e78516aee6446da4c76dac10ff83adb4deeb86d6111c42419f0629c35ec64b19ae6ab563f20b5efa2600c9c723b9096edc3c166e960fd25cfda1f07c4df3f3f + checksum: 97993ad2acdc5a742b71c94f9d321e090769c4116ab52208c2103ca41d4455bc4cd15c0cd0a1f8545144910a8c7f7de645ee150c0d8fc6b746001244690de2ed languageName: node linkType: hard @@ -8913,14 +8879,15 @@ __metadata: "@babel/preset-env": ~7.22.20 "@babel/preset-react": ~7.22.15 "@babel/preset-typescript": ~7.22.15 - "@rocket.chat/apps-engine": alpha + "@rocket.chat/apps-engine": 1.44.0 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" - "@rocket.chat/fuselage": ^0.56.0 + "@rocket.chat/fuselage": ^0.57.0 "@rocket.chat/fuselage-hooks": ^0.33.1 "@rocket.chat/fuselage-polyfills": ~0.31.25 "@rocket.chat/gazzodown": "workspace:^" "@rocket.chat/icons": ^0.36.0 + "@rocket.chat/jest-presets": "workspace:~" "@rocket.chat/mock-providers": "workspace:^" "@rocket.chat/prettier-config": ~0.31.25 "@rocket.chat/styled": ~0.31.25 @@ -8936,9 +8903,8 @@ __metadata: "@storybook/source-loader": ~6.5.16 "@storybook/theming": ~6.5.16 "@tanstack/react-query": ^4.16.1 - "@testing-library/react": ^12.1.4 - "@testing-library/react-hooks": ^8.0.1 - "@testing-library/user-event": ^14.5.2 + "@testing-library/react": ~16.0.0 + "@testing-library/user-event": ~14.5.2 "@types/babel__core": ^7.20.3 "@types/babel__preset-env": ^7.9.4 "@types/react": ~17.0.69 @@ -8947,7 +8913,7 @@ __metadata: cross-env: ^7.0.3 eslint: ~8.45.0 i18next: ^23.10.1 - jest: ^29.7.0 + jest: ~29.7.0 normalize.css: ^8.0.1 npm-run-all: ^4.1.5 prettier: ~2.8.8 @@ -8956,7 +8922,6 @@ __metadata: react-i18next: ^14.1.0 rimraf: ^3.0.2 storybook-dark-mode: ~3.0.1 - ts-jest: ^29.1.2 tslib: ^2.5.3 typescript: ~5.3.3 peerDependencies: @@ -8968,19 +8933,19 @@ __metadata: "@rocket.chat/icons": "*" "@rocket.chat/prettier-config": "*" "@rocket.chat/styled": "*" - "@rocket.chat/ui-avatar": 4.0.0 - "@rocket.chat/ui-contexts": 8.0.0 - "@rocket.chat/ui-kit": 0.35.0 - "@rocket.chat/ui-video-conf": 8.0.0 + "@rocket.chat/ui-avatar": 5.0.0 + "@rocket.chat/ui-contexts": 9.0.0 + "@rocket.chat/ui-kit": 0.36.0 + "@rocket.chat/ui-video-conf": 9.0.0 "@tanstack/react-query": "*" react: "*" react-dom: "*" languageName: unknown linkType: soft -"@rocket.chat/fuselage@npm:^0.56.0": - version: 0.56.0 - resolution: "@rocket.chat/fuselage@npm:0.56.0" +"@rocket.chat/fuselage@npm:^0.57.0": + version: 0.57.0 + resolution: "@rocket.chat/fuselage@npm:0.57.0" dependencies: "@rocket.chat/css-in-js": ^0.31.25 "@rocket.chat/css-supports": ^0.31.25 @@ -8998,7 +8963,7 @@ __metadata: react: ^17.0.2 react-dom: ^17.0.2 react-virtuoso: 1.2.4 - checksum: 1817eb660c9581906a645b8d39cd0377395085ab7dc204d7afd3b2b1c1a36000ea3727a8263ff02dc3d51b8280e1b51e42d062587d685f7e0be1a7a6eb97c5bf + checksum: 80f49f79ca6655067f528a9b427a7bfabbcf1583d0c9f3ed40b79217c7a495e93e0335e15e29b23237bf2ccb5ee5fa063051b40bf4d539439f452ffd45fdb537 languageName: node linkType: hard @@ -9009,8 +8974,9 @@ __metadata: "@babel/core": ~7.22.20 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/css-in-js": ~0.31.25 - "@rocket.chat/fuselage": ^0.56.0 + "@rocket.chat/fuselage": ^0.57.0 "@rocket.chat/fuselage-tokens": ^0.33.1 + "@rocket.chat/jest-presets": "workspace:~" "@rocket.chat/message-parser": "workspace:^" "@rocket.chat/styled": ~0.31.25 "@rocket.chat/ui-client": "workspace:^" @@ -9024,15 +8990,11 @@ __metadata: "@storybook/manager-webpack4": ~6.5.16 "@storybook/react": ~6.5.16 "@storybook/testing-library": ~0.0.13 - "@swc/core": ^1.3.95 - "@swc/jest": ^0.2.29 - "@testing-library/jest-dom": ^5.16.5 - "@testing-library/react": ~12.1.5 - "@types/jest": ~29.5.7 + "@testing-library/react": ~16.0.0 + "@types/jest": ~29.5.12 "@types/katex": ~0.16.5 "@types/react": ~17.0.69 "@types/react-dom": ~17.0.22 - "@types/testing-library__jest-dom": ~5.14.9 "@typescript-eslint/eslint-plugin": ~5.60.1 "@typescript-eslint/parser": ~5.60.1 babel-loader: ^8.3.0 @@ -9044,14 +9006,12 @@ __metadata: eslint-plugin-storybook: ~0.6.15 highlight.js: ^11.5.1 identity-obj-proxy: ^3.0.0 - jest: ~29.6.4 - jest-environment-jsdom: ~29.6.4 + jest: ~29.7.0 katex: ~0.16.9 outdent: ^0.8.0 react-docgen-typescript-plugin: ~1.0.5 react-dom: ~17.0.2 react-error-boundary: ^3.1.4 - ts-jest: ~29.1.1 typescript: ~5.3.3 peerDependencies: "@rocket.chat/core-typings": "workspace:^" @@ -9060,8 +9020,8 @@ __metadata: "@rocket.chat/fuselage-tokens": "*" "@rocket.chat/message-parser": 0.31.29 "@rocket.chat/styled": "*" - "@rocket.chat/ui-client": 8.0.0 - "@rocket.chat/ui-contexts": 8.0.0 + "@rocket.chat/ui-client": 9.0.0 + "@rocket.chat/ui-contexts": 9.0.0 katex: "*" react: "*" languageName: unknown @@ -9071,12 +9031,9 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/i18n@workspace:packages/i18n" dependencies: - "@babel/core": ~7.22.20 - "@babel/preset-env": ~7.22.20 - babel-jest: ^29.5.0 + "@rocket.chat/jest-presets": "workspace:~" eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 + jest: ~29.7.0 tsup: ^6.7.0 typescript: ~5.3.3 languageName: unknown @@ -9102,15 +9059,38 @@ __metadata: languageName: unknown linkType: soft +"@rocket.chat/jest-presets@workspace:packages/jest-presets, @rocket.chat/jest-presets@workspace:~": + version: 0.0.0-use.local + resolution: "@rocket.chat/jest-presets@workspace:packages/jest-presets" + dependencies: + "@rocket.chat/eslint-config": "workspace:~" + "@swc/core": ~1.7.4 + "@swc/jest": ~0.2.36 + "@testing-library/jest-dom": ~6.4.8 + "@types/identity-obj-proxy": ^3 + "@types/jest": ~29.5.12 + "@types/jest-axe": ~3.5.9 + "@types/uuid": ^9 + eslint: ~8.45.0 + identity-obj-proxy: ~3.0.0 + jest: ~29.7.0 + jest-axe: ~9.0.0 + jest-environment-jsdom: ~29.7.0 + jest-environment-node: ~29.7.0 + typescript: ~5.4.5 + uuid: ~9.0.1 + languageName: unknown + linkType: soft + "@rocket.chat/jwt@workspace:^, @rocket.chat/jwt@workspace:packages/jwt": version: 0.0.0-use.local resolution: "@rocket.chat/jwt@workspace:packages/jwt" dependencies: - "@types/jest": ~29.5.7 + "@rocket.chat/jest-presets": "workspace:~" + "@types/jest": ~29.5.12 eslint: ~8.45.0 - jest: ~29.6.4 + jest: ~29.7.0 jose: ^4.14.4 - ts-jest: ^29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -9132,19 +9112,16 @@ __metadata: resolution: "@rocket.chat/license@workspace:ee/packages/license" dependencies: "@rocket.chat/core-typings": "workspace:^" + "@rocket.chat/jest-presets": "workspace:~" "@rocket.chat/jwt": "workspace:^" "@rocket.chat/logger": "workspace:^" - "@swc/core": ^1.3.95 - "@swc/jest": ^0.2.29 "@types/bcrypt": ^5.0.1 - "@types/jest": ~29.5.7 + "@types/jest": ~29.5.12 "@types/ws": ^8.5.8 bcrypt: ^5.0.1 eslint: ~8.45.0 - jest: ~29.6.4 - jest-environment-jsdom: ~29.6.4 - jest-websocket-mock: ^2.4.0 - ts-jest: ~29.1.1 + jest: ~29.7.0 + jest-websocket-mock: ~2.5.0 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -9252,12 +9229,9 @@ __metadata: dependencies: "@types/chalk": ^2.2.0 "@types/ejson": ^2.2.1 - "@types/jest": ~29.5.7 chalk: ^4.0.0 ejson: ^2.2.3 eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -9267,11 +9241,8 @@ __metadata: resolution: "@rocket.chat/logger@workspace:packages/logger" dependencies: "@rocket.chat/emitter": ~0.31.25 - "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.4 pino: ^8.15.0 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -9304,21 +9275,21 @@ __metadata: "@babel/eslint-parser": ~7.21.3 "@babel/preset-env": ~7.21.4 "@rocket.chat/eslint-config": "workspace:^" + "@rocket.chat/jest-presets": "workspace:~" "@rocket.chat/peggy-loader": "workspace:~" "@rocket.chat/prettier-config": ~0.31.25 - "@types/jest": ~29.5.7 + "@types/jest": ~29.5.12 "@types/node": ~14.18.42 "@typescript-eslint/parser": ~5.58.0 babel-loader: ~9.1.2 eslint: ~8.45.0 - jest: ~29.6.4 + jest: ~29.7.0 npm-run-all: ^4.1.5 peggy: 3.0.2 prettier: ~2.8.7 prettier-plugin-pegjs: ~0.5.4 rimraf: ^3.0.2 tldts: ~5.7.112 - ts-jest: ~29.1.0 ts-loader: ~9.4.2 typedoc: ~0.24.1 typescript: ~5.3.3 @@ -9358,7 +9329,7 @@ __metadata: "@rocket.chat/agenda": "workspace:^" "@rocket.chat/api-client": "workspace:^" "@rocket.chat/apps": "workspace:^" - "@rocket.chat/apps-engine": alpha + "@rocket.chat/apps-engine": 1.44.0 "@rocket.chat/base64": "workspace:^" "@rocket.chat/cas-validate": "workspace:^" "@rocket.chat/core-services": "workspace:^" @@ -9370,16 +9341,17 @@ __metadata: "@rocket.chat/favicon": "workspace:^" "@rocket.chat/forked-matrix-appservice-bridge": ^4.0.2 "@rocket.chat/forked-matrix-bot-sdk": ^0.6.0-beta.3 - "@rocket.chat/fuselage": ^0.56.0 + "@rocket.chat/fuselage": ^0.57.0 "@rocket.chat/fuselage-hooks": ^0.33.1 "@rocket.chat/fuselage-polyfills": ~0.31.25 - "@rocket.chat/fuselage-toastbar": ^0.32.0 + "@rocket.chat/fuselage-toastbar": ^0.33.0 "@rocket.chat/fuselage-tokens": ^0.33.1 "@rocket.chat/fuselage-ui-kit": "workspace:^" "@rocket.chat/gazzodown": "workspace:^" "@rocket.chat/i18n": "workspace:^" "@rocket.chat/icons": ^0.36.0 "@rocket.chat/instance-status": "workspace:^" + "@rocket.chat/jest-presets": "workspace:~" "@rocket.chat/jwt": "workspace:^" "@rocket.chat/layout": ~0.31.26 "@rocket.chat/license": "workspace:^" @@ -9425,13 +9397,10 @@ __metadata: "@storybook/addons": ~6.5.16 "@storybook/react": ~6.5.16 "@storybook/testing-library": 0.0.13 - "@swc/core": ^1.3.95 - "@swc/jest": ^0.2.29 "@tanstack/react-query": ^4.16.1 "@tanstack/react-query-devtools": ^4.19.1 - "@testing-library/react": ~12.1.5 - "@testing-library/react-hooks": ^8.0.1 - "@testing-library/user-event": ~13.5.0 + "@testing-library/react": ~16.0.0 + "@testing-library/user-event": ~14.5.2 "@types/adm-zip": ^0.5.3 "@types/archiver": ^5.3.4 "@types/bad-words": ^3.0.2 @@ -9458,6 +9427,7 @@ __metadata: "@types/he": ^1.1.2 "@types/i18next-sprintf-postprocessor": ^0.2.2 "@types/imap": ^0.8.39 + "@types/jest": ~29.5.12 "@types/jsdom": ^16.2.15 "@types/jsdom-global": ^3.0.6 "@types/jsrsasign": ^10.5.11 @@ -9566,7 +9536,7 @@ __metadata: eslint-plugin-prettier: ~4.2.1 eslint-plugin-react: ~7.32.2 eslint-plugin-react-hooks: ~4.6.0 - eslint-plugin-testing-library: ~5.11.1 + eslint-plugin-testing-library: ~6.2.2 eslint-plugin-you-dont-need-lodash-underscore: ~6.12.0 eventemitter3: ^4.0.7 exif-be-gone: ^1.3.2 @@ -9597,7 +9567,7 @@ __metadata: ip-range-check: ^0.2.0 is-svg: ^4.3.2 isolated-vm: 4.4.2 - jest: ~29.6.4 + jest: ~29.7.0 jschardet: ^3.0.0 jsdom: ^16.7.0 jsdom-global: ^3.0.2 @@ -9718,35 +9688,33 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/mock-providers@workspace:packages/mock-providers" dependencies: + "@rocket.chat/ddp-client": "workspace:~" + "@rocket.chat/emitter": ~0.31.25 "@rocket.chat/i18n": "workspace:~" "@rocket.chat/ui-contexts": "workspace:*" "@storybook/react": ~6.5.16 "@tanstack/react-query": ^4.16.1 - "@types/jest": ~29.5.7 + "@types/use-sync-external-store": ^0.0.5 eslint: ~8.45.0 i18next: ~23.4.9 - jest: ~29.6.4 react: ~17.0.2 react-i18next: ~13.2.2 - ts-jest: ~29.1.1 typescript: ~5.3.3 + use-sync-external-store: ~1.2.2 peerDependencies: "@tanstack/react-query": "*" react: "*" languageName: unknown linkType: soft -"@rocket.chat/model-typings@workspace:^, @rocket.chat/model-typings@workspace:packages/model-typings": +"@rocket.chat/model-typings@workspace:^, @rocket.chat/model-typings@workspace:packages/model-typings, @rocket.chat/model-typings@workspace:~": version: 0.0.0-use.local resolution: "@rocket.chat/model-typings@workspace:packages/model-typings" dependencies: "@rocket.chat/core-typings": "workspace:^" - "@types/jest": ~29.5.7 "@types/node-rsa": ^1.1.3 eslint: ~8.45.0 - jest: ~29.6.4 mongodb: ^4.17.2 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -9755,13 +9723,11 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/models@workspace:packages/models" dependencies: - "@rocket.chat/model-typings": "workspace:^" - "@swc/core": ^1.3.95 - "@swc/jest": ^0.2.29 - "@types/jest": ~29.5.7 + "@rocket.chat/jest-presets": "workspace:~" + "@rocket.chat/model-typings": "workspace:~" + "@types/jest": ~29.5.12 eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 + jest: ^29.7.0 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -9783,6 +9749,7 @@ __metadata: "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/emitter": ~0.31.25 "@rocket.chat/eslint-config": "workspace:^" + "@rocket.chat/jest-presets": "workspace:~" "@rocket.chat/logger": "workspace:^" "@rocket.chat/model-typings": "workspace:^" "@rocket.chat/models": "workspace:^" @@ -9790,7 +9757,7 @@ __metadata: "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/string-helpers": ~0.31.25 "@rocket.chat/tools": "workspace:^" - "@types/jest": ~29.5.7 + "@types/jest": ~29.5.12 "@types/node": ^14.18.63 date-fns: ^2.28.0 ejson: ^2.2.3 @@ -9798,13 +9765,12 @@ __metadata: eslint: ~8.45.0 eventemitter3: ^4.0.7 fibers: ^5.0.3 - jest: ~29.6.4 + jest: ~29.7.0 mem: ^8.1.1 moment-timezone: ^0.5.43 mongo-message-queue: ^1.0.0 mongodb: ^4.17.2 pino: ^8.15.0 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -9824,7 +9790,6 @@ __metadata: "@rocket.chat/omnichannel-services": "workspace:^" "@rocket.chat/pdf-worker": "workspace:^" "@rocket.chat/tools": "workspace:^" - "@rocket.chat/ui-contexts": "workspace:^" "@types/gc-stats": ^1.4.2 "@types/node": ^14.18.63 "@types/polka": ^0.5.6 @@ -9873,12 +9838,10 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/password-policies@workspace:packages/password-policies" dependencies: - "@types/chai": ~4.3.16 - "@types/jest": ~29.5.7 - chai: ^4.3.10 + "@rocket.chat/jest-presets": "workspace:~" + "@types/jest": ~29.5.12 eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 + jest: ~29.7.0 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -9887,10 +9850,10 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/patch-injection@workspace:packages/patch-injection" dependencies: - "@types/jest": ~29.5.7 + "@rocket.chat/jest-presets": "workspace:~" + "@types/jest": ~29.5.12 eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 + jest: ~29.7.0 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -9902,25 +9865,22 @@ __metadata: "@react-pdf/renderer": ^3.1.14 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/fuselage-tokens": ^0.33.1 + "@rocket.chat/jest-presets": "workspace:~" "@storybook/addon-essentials": ~6.5.16 "@storybook/react": ~6.5.16 - "@testing-library/jest-dom": ^5.16.5 - "@testing-library/react": ~13.4.0 + "@testing-library/react": ~16.0.0 "@types/emojione": ^2.2.8 - "@types/jest": ~29.5.7 + "@types/jest": ~29.5.12 "@types/react": ~17.0.69 "@types/react-dom": ~17.0.22 - "@types/testing-library__jest-dom": ~5.14.9 emoji-assets: ^7.0.1 emoji-toolkit: ^7.0.1 eslint: ~8.45.0 - jest: ~29.6.4 - jest-environment-jsdom: ~29.6.4 + jest: ~29.7.0 moment: ^2.29.4 moment-timezone: ^0.5.43 - react: ^18.2.0 - react-dom: ^18.2.0 - ts-jest: ~29.1.1 + react: ~18.3.1 + react-dom: ~18.3.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -9937,7 +9897,6 @@ __metadata: peggy: 3.0.2 prettier: ~2.8.7 rimraf: ^3.0.2 - ts-jest: ~29.1.0 typescript: ~5.3.3 webpack: ~5.78.0 peerDependencies: @@ -9950,10 +9909,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/poplib@workspace:packages/node-poplib" dependencies: - "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -9997,7 +9953,7 @@ __metadata: "@babel/core": ~7.22.20 "@babel/preset-env": ~7.22.20 "@babel/preset-typescript": ~7.22.15 - "@rocket.chat/apps-engine": alpha + "@rocket.chat/apps-engine": 1.44.0 "@rocket.chat/core-services": "workspace:^" "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" @@ -10006,7 +9962,7 @@ __metadata: "@types/node": ^14.18.63 babel-jest: ^29.0.3 eslint: ~8.45.0 - jest: ~29.6.4 + jest: ~29.7.0 mongodb: ^4.17.2 typescript: ~5.3.3 languageName: unknown @@ -10064,12 +10020,11 @@ __metadata: "@babel/core": ~7.22.20 "@babel/preset-env": ~7.22.20 "@rocket.chat/eslint-config": "workspace:^" + "@rocket.chat/jest-presets": "workspace:~" "@typescript-eslint/eslint-plugin": ~5.60.1 "@typescript-eslint/parser": ~5.60.1 eslint: ~8.45.0 - jest: ~29.6.4 - jest-environment-jsdom: ~29.6.4 - ts-jest: ~29.1.1 + jest: ~29.7.0 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -10112,19 +10067,17 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/rest-typings@workspace:packages/rest-typings" dependencies: - "@rocket.chat/apps-engine": alpha + "@rocket.chat/apps-engine": 1.44.0 "@rocket.chat/core-typings": "workspace:^" - "@rocket.chat/eslint-config": "workspace:^" + "@rocket.chat/eslint-config": "workspace:~" "@rocket.chat/message-parser": "workspace:^" "@rocket.chat/ui-kit": "workspace:~" - "@types/jest": ~29.5.7 + "@types/jest": ~29.5.12 ajv: ^8.11.0 ajv-formats: ^2.1.1 eslint: ~8.45.0 - jest: ~29.6.4 - jest-environment-jsdom: ~29.6.4 + jest: ~29.7.0 mongodb: ^4.17.2 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -10147,10 +10100,7 @@ __metadata: resolution: "@rocket.chat/server-cloud-communication@workspace:packages/server-cloud-communication" dependencies: "@rocket.chat/license": "workspace:^" - "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -10159,15 +10109,12 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/server-fetch@workspace:packages/server-fetch" dependencies: - "@types/jest": ~29.5.7 "@types/proxy-from-env": ^1.0.3 eslint: ~8.45.0 http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.1 - jest: ~29.6.4 node-fetch: 2.3.0 proxy-from-env: ^1.1.0 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -10179,11 +10126,11 @@ __metadata: "@babel/core": ~7.22.20 "@babel/preset-env": ~7.22.20 "@rocket.chat/eslint-config": "workspace:^" + "@rocket.chat/jest-presets": "workspace:~" "@typescript-eslint/eslint-plugin": ~5.60.1 "@typescript-eslint/parser": ~5.60.1 eslint: ~8.45.0 - jest: ~29.6.4 - ts-jest: ~29.1.1 + jest: ~29.7.0 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -10253,11 +10200,11 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/tools@workspace:packages/tools" dependencies: - "@types/jest": ~29.5.7 + "@rocket.chat/jest-presets": "workspace:~" + "@types/jest": ~29.5.12 eslint: ~8.45.0 - jest: ~29.6.4 + jest: ~29.7.0 moment-timezone: ^0.5.43 - ts-jest: ~29.1.1 typescript: ~5.3.3 languageName: unknown linkType: soft @@ -10267,7 +10214,7 @@ __metadata: resolution: "@rocket.chat/ui-avatar@workspace:packages/ui-avatar" dependencies: "@babel/core": ~7.22.20 - "@rocket.chat/fuselage": ^0.56.0 + "@rocket.chat/fuselage": ^0.57.0 "@rocket.chat/ui-contexts": "workspace:^" "@types/babel__core": ~7.20.3 "@types/react": ~17.0.69 @@ -10281,7 +10228,7 @@ __metadata: typescript: ~5.3.3 peerDependencies: "@rocket.chat/fuselage": "*" - "@rocket.chat/ui-contexts": 8.0.0 + "@rocket.chat/ui-contexts": 9.0.0 react: ~17.0.2 languageName: unknown linkType: soft @@ -10293,9 +10240,10 @@ __metadata: "@babel/core": ~7.22.20 "@react-aria/toolbar": ^3.0.0-beta.1 "@rocket.chat/css-in-js": ~0.31.25 - "@rocket.chat/fuselage": ^0.56.0 + "@rocket.chat/fuselage": ^0.57.0 "@rocket.chat/fuselage-hooks": ^0.33.1 "@rocket.chat/icons": ^0.36.0 + "@rocket.chat/jest-presets": "workspace:~" "@rocket.chat/mock-providers": "workspace:^" "@rocket.chat/ui-contexts": "workspace:~" "@storybook/addon-actions": ~6.5.16 @@ -10308,12 +10256,9 @@ __metadata: "@storybook/manager-webpack4": ~6.5.16 "@storybook/react": ~6.5.16 "@storybook/testing-library": ~0.0.13 - "@swc/jest": ^0.2.29 - "@testing-library/jest-dom": ~5.16.5 - "@testing-library/react": ^12.1.5 - "@testing-library/react-hooks": ^8.0.1 + "@testing-library/react": ~16.0.0 "@types/babel__core": ~7.20.3 - "@types/jest": ~29.5.7 + "@types/jest": ~29.5.12 "@types/react": ~17.0.69 "@types/react-dom": ~17.0.22 eslint: ~8.45.0 @@ -10322,11 +10267,10 @@ __metadata: eslint-plugin-react-hooks: ~4.6.0 eslint-plugin-storybook: ~0.6.15 eslint-plugin-testing-library: ~5.11.1 - jest: ~29.6.4 + jest: ~29.7.0 react: ^17.0.2 react-dom: ^17.0.2 react-hook-form: ~7.45.4 - ts-jest: ~29.1.1 typescript: ~5.3.3 peerDependencies: "@react-aria/toolbar": "*" @@ -10334,7 +10278,7 @@ __metadata: "@rocket.chat/fuselage": "*" "@rocket.chat/fuselage-hooks": "*" "@rocket.chat/icons": "*" - "@rocket.chat/ui-contexts": 8.0.0 + "@rocket.chat/ui-contexts": 9.0.0 react: ~17.0.2 languageName: unknown linkType: soft @@ -10346,7 +10290,7 @@ __metadata: "@babel/core": ~7.22.20 "@react-aria/toolbar": ^3.0.0-beta.1 "@rocket.chat/eslint-config": "workspace:^" - "@rocket.chat/fuselage": ^0.56.0 + "@rocket.chat/fuselage": ^0.57.0 "@rocket.chat/icons": ^0.36.0 "@storybook/addon-actions": ~6.5.16 "@storybook/addon-docs": ~6.5.16 @@ -10356,14 +10300,15 @@ __metadata: "@storybook/react": ~6.5.16 "@storybook/testing-library": ~0.0.13 "@types/babel__core": ~7.20.3 - "@types/jest": ~29.5.7 + "@types/react": ~17.0.69 + "@types/react-dom": ~17.0.22 eslint: ~8.45.0 eslint-plugin-react: ~7.32.2 eslint-plugin-react-hooks: ~4.6.0 eslint-plugin-storybook: ~0.6.15 - jest: ~29.6.4 + react: ~17.0.2 react-docgen-typescript-plugin: ~1.0.5 - ts-jest: ~29.1.1 + react-dom: ~17.0.2 typescript: ~5.3.3 peerDependencies: "@react-aria/toolbar": "*" @@ -10379,21 +10324,19 @@ __metadata: resolution: "@rocket.chat/ui-contexts@workspace:packages/ui-contexts" dependencies: "@rocket.chat/core-typings": "workspace:^" + "@rocket.chat/ddp-client": "workspace:~" "@rocket.chat/emitter": ~0.31.25 "@rocket.chat/fuselage-hooks": ^0.33.1 "@rocket.chat/i18n": "workspace:~" "@rocket.chat/password-policies": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" - "@types/jest": ~29.5.7 "@types/react": ~17.0.69 "@types/react-dom": ~17.0.22 "@types/use-sync-external-store": ^0.0.5 eslint: ~8.45.0 eslint-plugin-react-hooks: ^4.6.0 - jest: ~29.6.4 mongodb: ^4.17.2 react: ~17.0.2 - ts-jest: ~29.1.1 typescript: ~5.3.3 use-sync-external-store: ^1.2.0 peerDependencies: @@ -10417,10 +10360,12 @@ __metadata: "@babel/plugin-transform-runtime": ~7.21.4 "@babel/preset-env": ~7.21.4 "@rocket.chat/eslint-config": "workspace:~" - "@types/jest": ~29.5.0 + "@rocket.chat/icons": ^0.36.0 + "@rocket.chat/jest-presets": "workspace:~" + "@types/jest": ~29.5.12 babel-loader: ~9.1.2 eslint: ~8.45.0 - jest: ~29.5.0 + jest: ~29.7.0 npm-run-all: ~4.1.5 prettier: ~2.8.8 rimraf: ~3.0.2 @@ -10430,6 +10375,8 @@ __metadata: ts-patch: ~3.0.2 typescript: ~5.3.3 typia: ~5.3.3 + peerDependencies: + "@rocket.chat/icons": "*" languageName: unknown linkType: soft @@ -10438,31 +10385,18 @@ __metadata: resolution: "@rocket.chat/ui-theming@workspace:ee/packages/ui-theming" dependencies: "@rocket.chat/css-in-js": ~0.31.25 - "@rocket.chat/fuselage": ^0.56.0 + "@rocket.chat/fuselage": ^0.57.0 "@rocket.chat/fuselage-hooks": ^0.33.1 "@rocket.chat/icons": ^0.36.0 "@rocket.chat/ui-contexts": "workspace:~" - "@storybook/addon-actions": ~6.5.16 - "@storybook/addon-docs": ~6.5.16 - "@storybook/addon-essentials": ~6.5.16 - "@storybook/addon-interactions": ~6.5.16 - "@storybook/addon-links": ~6.5.16 - "@storybook/addon-postcss": ~2.0.0 - "@storybook/builder-webpack4": ~6.5.16 - "@storybook/manager-webpack4": ~6.5.16 - "@storybook/react": ~6.5.16 - "@storybook/testing-library": ~0.0.13 - "@types/jest": ~29.5.7 "@types/react": ~17.0.69 eslint: ~8.45.0 eslint-plugin-anti-trojan-source: ~1.1.1 eslint-plugin-react: ~7.32.2 eslint-plugin-react-hooks: ~4.6.0 eslint-plugin-testing-library: ^5.11.1 - jest: ~29.6.4 react: ~17.0.2 react-docgen-typescript-plugin: ~1.0.5 - ts-jest: ~29.1.1 typescript: ~5.3.3 peerDependencies: "@rocket.chat/css-in-js": "*" @@ -10481,12 +10415,14 @@ __metadata: "@rocket.chat/css-in-js": ~0.31.25 "@rocket.chat/emitter": ~0.31.25 "@rocket.chat/eslint-config": "workspace:^" - "@rocket.chat/fuselage": ^0.56.0 + "@rocket.chat/fuselage": ^0.57.0 "@rocket.chat/fuselage-hooks": ^0.33.1 "@rocket.chat/icons": ^0.36.0 + "@rocket.chat/jest-presets": "workspace:~" "@rocket.chat/styled": ~0.31.25 "@rocket.chat/ui-avatar": "workspace:^" "@rocket.chat/ui-contexts": "workspace:^" + "@storybook/addon-a11y": ^6.5.16 "@storybook/addon-actions": ~6.5.16 "@storybook/addon-docs": ~6.5.16 "@storybook/addon-essentials": ~6.5.16 @@ -10494,15 +10430,17 @@ __metadata: "@storybook/manager-webpack4": ~6.5.16 "@storybook/react": ~6.5.16 "@storybook/testing-library": ~0.0.13 + "@storybook/testing-react": ~1.3.0 "@types/babel__core": ~7.20.3 - "@types/jest": ~29.5.7 + "@types/jest": ~29.5.12 + "@types/jest-axe": ~3.5.9 eslint: ~8.45.0 eslint-plugin-react: ~7.32.2 eslint-plugin-react-hooks: ~4.6.0 eslint-plugin-storybook: ~0.6.15 - jest: ~29.6.4 + jest: ~29.7.0 + jest-axe: ~9.0.0 react-docgen-typescript-plugin: ~1.0.5 - ts-jest: ~29.1.1 typescript: ~5.3.3 peerDependencies: "@rocket.chat/css-in-js": "*" @@ -10510,8 +10448,8 @@ __metadata: "@rocket.chat/fuselage-hooks": "*" "@rocket.chat/icons": "*" "@rocket.chat/styled": "*" - "@rocket.chat/ui-avatar": 4.0.0 - "@rocket.chat/ui-contexts": 8.0.0 + "@rocket.chat/ui-avatar": 5.0.0 + "@rocket.chat/ui-contexts": 9.0.0 react: ^17.0.2 react-dom: ^17.0.2 languageName: unknown @@ -10526,10 +10464,10 @@ __metadata: "@codemirror/tooltip": ^0.19.16 "@lezer/highlight": ^1.1.6 "@rocket.chat/css-in-js": ~0.31.25 - "@rocket.chat/fuselage": ^0.56.0 + "@rocket.chat/fuselage": ^0.57.0 "@rocket.chat/fuselage-hooks": ^0.33.1 "@rocket.chat/fuselage-polyfills": ~0.31.25 - "@rocket.chat/fuselage-toastbar": ^0.32.0 + "@rocket.chat/fuselage-toastbar": ^0.33.0 "@rocket.chat/fuselage-tokens": ^0.33.1 "@rocket.chat/fuselage-ui-kit": "workspace:~" "@rocket.chat/icons": ^0.36.0 @@ -10586,22 +10524,19 @@ __metadata: "@storybook/react": ~6.5.16 "@storybook/testing-library": ^0.2.2 "@tanstack/react-query": ^4.16.1 - "@testing-library/react": ^13.3.0 - "@types/jest": ~29.5.7 + "@testing-library/react": ~16.0.0 "@types/react": ~17.0.69 babel-loader: ~8.3.0 eslint: ~8.45.0 - jest: ~29.6.4 react: ~17.0.2 react-hook-form: ~7.45.4 react-i18next: ~13.2.2 storybook-dark-mode: ~3.0.1 - ts-jest: ~29.1.1 typescript: ~5.3.3 peerDependencies: "@rocket.chat/layout": "*" - "@rocket.chat/tools": 0.2.1 - "@rocket.chat/ui-contexts": 8.0.0 + "@rocket.chat/tools": 0.2.2 + "@rocket.chat/ui-contexts": 9.0.0 "@tanstack/react-query": "*" react: "*" react-hook-form: "*" @@ -10634,13 +10569,6 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.51 - resolution: "@sinclair/typebox@npm:0.24.51" - checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 - languageName: node - linkType: hard - "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -10860,7 +10788,7 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-a11y@npm:6.5.16": +"@storybook/addon-a11y@npm:6.5.16, @storybook/addon-a11y@npm:^6.5.16": version: 6.5.16 resolution: "@storybook/addon-a11y@npm:6.5.16" dependencies: @@ -11837,6 +11765,15 @@ __metadata: languageName: node linkType: hard +"@storybook/csf@npm:0.0.2--canary.87bc651.0": + version: 0.0.2--canary.87bc651.0 + resolution: "@storybook/csf@npm:0.0.2--canary.87bc651.0" + dependencies: + lodash: ^4.17.15 + checksum: 1533ff81f7fb59c06fc608f452de3cfcafba5806da68dd2c88813e8284a7aa1c158daee6a58b028b7ccd03d96974b5d3727deaae1d1d38e304b2a7cdcd8a678d + languageName: node + linkType: hard + "@storybook/csf@npm:^0.0.1": version: 0.0.1 resolution: "@storybook/csf@npm:0.0.1" @@ -12376,6 +12313,21 @@ __metadata: languageName: node linkType: hard +"@storybook/testing-react@npm:~1.3.0": + version: 1.3.0 + resolution: "@storybook/testing-react@npm:1.3.0" + dependencies: + "@storybook/csf": 0.0.2--canary.87bc651.0 + peerDependencies: + "@storybook/addons": ">=6.4.0" + "@storybook/client-api": ">=6.4.0" + "@storybook/preview-web": ">=6.4.0" + "@storybook/react": ">=6.4.0" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: f7da948bfc100b7a3d8f3ddf02e8d610da80344904761ecdaa7a575dcc312c921ef4a28663edcc719aee587b14716643147b0e10414fa17abb740056cf9e80b5 + languageName: node + linkType: hard + "@storybook/theming@npm:6.5.16, @storybook/theming@npm:~6.5.16": version: 6.5.16 resolution: "@storybook/theming@npm:6.5.16" @@ -12443,94 +12395,94 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.95": - version: 1.3.95 - resolution: "@swc/core-darwin-arm64@npm:1.3.95" +"@swc/core-darwin-arm64@npm:1.7.4": + version: 1.7.4 + resolution: "@swc/core-darwin-arm64@npm:1.7.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.95": - version: 1.3.95 - resolution: "@swc/core-darwin-x64@npm:1.3.95" +"@swc/core-darwin-x64@npm:1.7.4": + version: 1.7.4 + resolution: "@swc/core-darwin-x64@npm:1.7.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.95": - version: 1.3.95 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.95" +"@swc/core-linux-arm-gnueabihf@npm:1.7.4": + version: 1.7.4 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.7.4" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.95": - version: 1.3.95 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.95" +"@swc/core-linux-arm64-gnu@npm:1.7.4": + version: 1.7.4 + resolution: "@swc/core-linux-arm64-gnu@npm:1.7.4" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.95": - version: 1.3.95 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.95" +"@swc/core-linux-arm64-musl@npm:1.7.4": + version: 1.7.4 + resolution: "@swc/core-linux-arm64-musl@npm:1.7.4" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.95": - version: 1.3.95 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.95" +"@swc/core-linux-x64-gnu@npm:1.7.4": + version: 1.7.4 + resolution: "@swc/core-linux-x64-gnu@npm:1.7.4" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.95": - version: 1.3.95 - resolution: "@swc/core-linux-x64-musl@npm:1.3.95" +"@swc/core-linux-x64-musl@npm:1.7.4": + version: 1.7.4 + resolution: "@swc/core-linux-x64-musl@npm:1.7.4" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.95": - version: 1.3.95 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.95" +"@swc/core-win32-arm64-msvc@npm:1.7.4": + version: 1.7.4 + resolution: "@swc/core-win32-arm64-msvc@npm:1.7.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.95": - version: 1.3.95 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.95" +"@swc/core-win32-ia32-msvc@npm:1.7.4": + version: 1.7.4 + resolution: "@swc/core-win32-ia32-msvc@npm:1.7.4" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.95": - version: 1.3.95 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.95" +"@swc/core-win32-x64-msvc@npm:1.7.4": + version: 1.7.4 + resolution: "@swc/core-win32-x64-msvc@npm:1.7.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@swc/core@npm:^1.3.95": - version: 1.3.95 - resolution: "@swc/core@npm:1.3.95" - dependencies: - "@swc/core-darwin-arm64": 1.3.95 - "@swc/core-darwin-x64": 1.3.95 - "@swc/core-linux-arm-gnueabihf": 1.3.95 - "@swc/core-linux-arm64-gnu": 1.3.95 - "@swc/core-linux-arm64-musl": 1.3.95 - "@swc/core-linux-x64-gnu": 1.3.95 - "@swc/core-linux-x64-musl": 1.3.95 - "@swc/core-win32-arm64-msvc": 1.3.95 - "@swc/core-win32-ia32-msvc": 1.3.95 - "@swc/core-win32-x64-msvc": 1.3.95 - "@swc/counter": ^0.1.1 - "@swc/types": ^0.1.5 - peerDependencies: - "@swc/helpers": ^0.5.0 +"@swc/core@npm:~1.7.4": + version: 1.7.4 + resolution: "@swc/core@npm:1.7.4" + dependencies: + "@swc/core-darwin-arm64": 1.7.4 + "@swc/core-darwin-x64": 1.7.4 + "@swc/core-linux-arm-gnueabihf": 1.7.4 + "@swc/core-linux-arm64-gnu": 1.7.4 + "@swc/core-linux-arm64-musl": 1.7.4 + "@swc/core-linux-x64-gnu": 1.7.4 + "@swc/core-linux-x64-musl": 1.7.4 + "@swc/core-win32-arm64-msvc": 1.7.4 + "@swc/core-win32-ia32-msvc": 1.7.4 + "@swc/core-win32-x64-msvc": 1.7.4 + "@swc/counter": ^0.1.3 + "@swc/types": ^0.1.12 + peerDependencies: + "@swc/helpers": "*" dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -12555,14 +12507,14 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 49856ad64fa16151f7f784956c8134060c5ed612c9b3fcb79e33676c77219f61fa3bb6b9e0dd15d78c7bff92cacc0c944d2b4e60849eb93caca917a8544b1c2c + checksum: 1b2231fcb6a2a63171e34e80f0d43cd459d259b0a2fa269a129456291dc11b95a716aed60f61e5fcafd039a217916ece375876b02d125d88cdc7927382805e55 languageName: node linkType: hard -"@swc/counter@npm:^0.1.1": - version: 0.1.2 - resolution: "@swc/counter@npm:0.1.2" - checksum: 8427c594f1f0cf44b83885e9c8fe1e370c9db44ae96e07a37c117a6260ee97797d0709483efbcc244e77bac578690215f45b23254c4cd8a70fb25ddbb50bf33e +"@swc/counter@npm:^0.1.3": + version: 0.1.3 + resolution: "@swc/counter@npm:0.1.3" + checksum: df8f9cfba9904d3d60f511664c70d23bb323b3a0803ec9890f60133954173047ba9bdeabce28cd70ba89ccd3fd6c71c7b0bd58be85f611e1ffbe5d5c18616598 languageName: node linkType: hard @@ -12584,22 +12536,25 @@ __metadata: languageName: node linkType: hard -"@swc/jest@npm:^0.2.29": - version: 0.2.29 - resolution: "@swc/jest@npm:0.2.29" +"@swc/jest@npm:~0.2.36": + version: 0.2.36 + resolution: "@swc/jest@npm:0.2.36" dependencies: - "@jest/create-cache-key-function": ^27.4.2 + "@jest/create-cache-key-function": ^29.7.0 + "@swc/counter": ^0.1.3 jsonc-parser: ^3.2.0 peerDependencies: "@swc/core": "*" - checksum: 9eaad322310f34e81f67d41411a7d60663341af1bd9fb65456faa914c936d849d6f643fa3b942a187d52e71e62c33097098c639d25c2047fa874f49bf51cec76 + checksum: 14f2e696ac093e23dae1e2e57d894bbcde4de6fe80341a26c8d0d8cbae5aae31832f8fa32dc698529f128d19a76aeedf2227f59480de6dab5eb3f30bfdf9b71a languageName: node linkType: hard -"@swc/types@npm:^0.1.5": - version: 0.1.5 - resolution: "@swc/types@npm:0.1.5" - checksum: 6aee11f62d3d805a64848e0bd5f0e0e615f958e327a9e1260056c368d7d28764d89e38bd8005a536c9bf18afbcd303edd84099d60df34a2975d62540f61df13b +"@swc/types@npm:^0.1.12": + version: 0.1.12 + resolution: "@swc/types@npm:0.1.12" + dependencies: + "@swc/counter": ^0.1.3 + checksum: cf7f89e46f859864075d7965582baea9c5f98830f45b1046251568c9bdf1ca484b1bf37f6d3c32b7c82ecf8cd5df89d22f05268c391819c44e49911bb1a8e71a languageName: node linkType: hard @@ -12653,25 +12608,25 @@ __metadata: languageName: node linkType: hard -"@testing-library/dom@npm:^8.0.0, @testing-library/dom@npm:^8.3.0, @testing-library/dom@npm:^8.5.0": - version: 8.17.1 - resolution: "@testing-library/dom@npm:8.17.1" +"@testing-library/dom@npm:^8.3.0": + version: 8.20.1 + resolution: "@testing-library/dom@npm:8.20.1" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 - "@types/aria-query": ^4.2.0 - aria-query: ^5.0.0 + "@types/aria-query": ^5.0.1 + aria-query: 5.1.3 chalk: ^4.1.0 dom-accessibility-api: ^0.5.9 - lz-string: ^1.4.4 + lz-string: ^1.5.0 pretty-format: ^27.0.2 - checksum: e4df091fcf84c9eac4a6ee4c76674c1d562bf98732f0ac8820972d7718ab10397b672b9f082aace3cacd1f610fc77de6e1b6094e67afe1df0443bf22eb9deab2 + checksum: 06fc8dc67849aadb726cbbad0e7546afdf8923bd39acb64c576d706249bd7d0d05f08e08a31913fb621162e3b9c2bd0dce15964437f030f9fa4476326fdd3007 languageName: node linkType: hard "@testing-library/dom@npm:^9.0.0": - version: 9.3.1 - resolution: "@testing-library/dom@npm:9.3.1" + version: 9.3.4 + resolution: "@testing-library/dom@npm:9.3.4" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 @@ -12681,78 +12636,47 @@ __metadata: dom-accessibility-api: ^0.5.9 lz-string: ^1.5.0 pretty-format: ^27.0.2 - checksum: 8ee3136451644e39990edea93709c38cf1e8ce5306f3c66273ca00935963faa51ca74e8d92b02eb442ccb842cfa28ca62833e393e075eb269cf9bef6f5600663 + checksum: dfd6fb0d6c7b4dd716ba3c47309bc9541b4a55772cb61758b4f396b3785efe2dbc75dc63423545c039078c7ffcc5e4b8c67c2db1b6af4799580466036f70026f languageName: node linkType: hard -"@testing-library/jest-dom@npm:^5.16.5, @testing-library/jest-dom@npm:~5.16.5": - version: 5.16.5 - resolution: "@testing-library/jest-dom@npm:5.16.5" +"@testing-library/jest-dom@npm:~6.4.8": + version: 6.4.8 + resolution: "@testing-library/jest-dom@npm:6.4.8" dependencies: - "@adobe/css-tools": ^4.0.1 + "@adobe/css-tools": ^4.4.0 "@babel/runtime": ^7.9.2 - "@types/testing-library__jest-dom": ^5.9.1 aria-query: ^5.0.0 chalk: ^3.0.0 css.escape: ^1.5.1 - dom-accessibility-api: ^0.5.6 - lodash: ^4.17.15 + dom-accessibility-api: ^0.6.3 + lodash: ^4.17.21 redent: ^3.0.0 - checksum: 94911f901a8031f3e489d04ac057cb5373621230f5d92bed80e514e24b069fb58a3166d1dd86963e55f078a1bd999da595e2ab96ed95f452d477e272937d792a + checksum: b601688950e522557c2c6bbc0f026ae31a10583577c8a557814b0eb33648fe82afc06299f3cdb79ff0c5076fd1a6106f3d76e2ca0dde6f7ee0555e63008fbd72 languageName: node linkType: hard -"@testing-library/react-hooks@npm:^8.0.1": - version: 8.0.1 - resolution: "@testing-library/react-hooks@npm:8.0.1" +"@testing-library/react@npm:~16.0.0": + version: 16.0.0 + resolution: "@testing-library/react@npm:16.0.0" dependencies: "@babel/runtime": ^7.12.5 - react-error-boundary: ^3.1.0 peerDependencies: - "@types/react": ^16.9.0 || ^17.0.0 - react: ^16.9.0 || ^17.0.0 - react-dom: ^16.9.0 || ^17.0.0 - react-test-renderer: ^16.9.0 || ^17.0.0 + "@testing-library/dom": ^10.0.0 + "@types/react": ^18.0.0 + "@types/react-dom": ^18.0.0 + react: ^18.0.0 + react-dom: ^18.0.0 peerDependenciesMeta: "@types/react": optional: true - react-dom: - optional: true - react-test-renderer: + "@types/react-dom": optional: true - checksum: 7fe44352e920deb5cb1876f80d64e48615232072c9d5382f1e0284b3aab46bb1c659a040b774c45cdf084a5257b8fe463f7e08695ad8480d8a15635d4d3d1f6d - languageName: node - linkType: hard - -"@testing-library/react@npm:^12.1.4, @testing-library/react@npm:^12.1.5, @testing-library/react@npm:~12.1.5": - version: 12.1.5 - resolution: "@testing-library/react@npm:12.1.5" - dependencies: - "@babel/runtime": ^7.12.5 - "@testing-library/dom": ^8.0.0 - "@types/react-dom": <18.0.0 - peerDependencies: - react: <18.0.0 - react-dom: <18.0.0 - checksum: 4abd0490405e709a7df584a0db604e508a4612398bb1326e8fa32dd9393b15badc826dcf6d2f7525437886d507871f719f127b9860ed69ddd204d1fa834f576a - languageName: node - linkType: hard - -"@testing-library/react@npm:^13.3.0, @testing-library/react@npm:~13.4.0": - version: 13.4.0 - resolution: "@testing-library/react@npm:13.4.0" - dependencies: - "@babel/runtime": ^7.12.5 - "@testing-library/dom": ^8.5.0 - "@types/react-dom": ^18.0.0 - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 51ec548c1fdb1271089a5c63e0908f0166f2c7fcd9cacd3108ebbe0ce64cb4351812d885892020dc37608418cfb15698514856502b3cab0e5cc58d6cc1bd4a3e + checksum: 45a35f0b5f34b5a7f4dcefdd3f1d202d5421692e5cc7a491c9bc71e6ed9dd5872a182b80b4dfefb4a56d9c1df35e50f6fa2917bcf657cc26b4bc0d2259df0027 languageName: node linkType: hard -"@testing-library/user-event@npm:^13.2.1, @testing-library/user-event@npm:~13.5.0": +"@testing-library/user-event@npm:^13.2.1": version: 13.5.0 resolution: "@testing-library/user-event@npm:13.5.0" dependencies: @@ -12763,16 +12687,7 @@ __metadata: languageName: node linkType: hard -"@testing-library/user-event@npm:^14.4.0": - version: 14.5.1 - resolution: "@testing-library/user-event@npm:14.5.1" - peerDependencies: - "@testing-library/dom": ">=7.21.4" - checksum: 3e6bc9fd53dfe2f3648190193ed2fd4bca2a1bfb47f68810df3b33f05412526e5fd5c4ef9dc5375635e0f4cdf1859916867b597eed22bda1321e04242ea6c519 - languageName: node - linkType: hard - -"@testing-library/user-event@npm:^14.5.2": +"@testing-library/user-event@npm:^14.4.0, @testing-library/user-event@npm:~14.5.2": version: 14.5.2 resolution: "@testing-library/user-event@npm:14.5.2" peerDependencies: @@ -12855,17 +12770,10 @@ __metadata: languageName: node linkType: hard -"@types/aria-query@npm:^4.2.0": - version: 4.2.2 - resolution: "@types/aria-query@npm:4.2.2" - checksum: 6f2ce11d91e2d665f3873258db19da752d91d85d3679eb5efcdf9c711d14492287e1e4eb52613b28e60375841a9e428594e745b68436c963d8bad4bf72188df3 - languageName: node - linkType: hard - "@types/aria-query@npm:^5.0.1": - version: 5.0.1 - resolution: "@types/aria-query@npm:5.0.1" - checksum: 69fd7cceb6113ed370591aef04b3fd0742e9a1b06dd045c43531448847b85de181495e4566f98e776b37c422a12fd71866e0a1dfd904c5ec3f84d271682901de + version: 5.0.4 + resolution: "@types/aria-query@npm:5.0.4" + checksum: ad8b87e4ad64255db5f0a73bc2b4da9b146c38a3a8ab4d9306154334e0fc67ae64e76bfa298eebd1e71830591fb15987e5de7111bdb36a2221bdc379e3415fb0 languageName: node linkType: hard @@ -13662,6 +13570,13 @@ __metadata: languageName: node linkType: hard +"@types/identity-obj-proxy@npm:^3": + version: 3.0.2 + resolution: "@types/identity-obj-proxy@npm:3.0.2" + checksum: 77387ee587657ab24f12a1dee5c0e1386358d5c38cda5cac78bc5049340cb358e009f6254de3bbdee6a08e46f13b1552cd47a0bbd3e7a53ff469bf58a04ec6e9 + languageName: node + linkType: hard + "@types/imap@npm:^0.8.39": version: 0.8.39 resolution: "@types/imap@npm:0.8.39" @@ -13721,7 +13636,17 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:*, @types/jest@npm:^29.5.12, @types/jest@npm:~29.5.0, @types/jest@npm:~29.5.7": +"@types/jest-axe@npm:~3.5.9": + version: 3.5.9 + resolution: "@types/jest-axe@npm:3.5.9" + dependencies: + "@types/jest": "*" + axe-core: ^3.5.5 + checksum: ca93cf7b13f173278f8c67e4f7d73c9c0cf3c6110f5d76a8815e1044c1b2950fe4b4e83475f6d23bd82479edc908da19e037cf8e1a9c0e89f1c8f5b95355c93d + languageName: node + linkType: hard + +"@types/jest@npm:*, @types/jest@npm:~29.5.12": version: 29.5.12 resolution: "@types/jest@npm:29.5.12" dependencies: @@ -14265,7 +14190,7 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:<18.0.0, @types/react-dom@npm:~17.0.22": +"@types/react-dom@npm:~17.0.22": version: 17.0.22 resolution: "@types/react-dom@npm:17.0.22" dependencies: @@ -14274,15 +14199,6 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^18.0.0": - version: 18.0.10 - resolution: "@types/react-dom@npm:18.0.10" - dependencies: - "@types/react": "*" - checksum: ff8282d5005a0b1cd95fb65bf79d3d8485e4cfe2aaf052129033a178684b940014a3f4536bc20d573f8a01cf4c6f4770c74988cef7c2b5cac3041d9f172647e3 - languageName: node - linkType: hard - "@types/react-lifecycles-compat@npm:^3.0.1": version: 3.0.4 resolution: "@types/react-lifecycles-compat@npm:3.0.4" @@ -14530,15 +14446,6 @@ __metadata: languageName: node linkType: hard -"@types/testing-library__jest-dom@npm:^5.9.1, @types/testing-library__jest-dom@npm:~5.14.9": - version: 5.14.9 - resolution: "@types/testing-library__jest-dom@npm:5.14.9" - dependencies: - "@types/jest": "*" - checksum: d364494fc2545316292e88861146146af1e3818792ca63b62a63758b2f737669b687f4aaddfcfbcb7d0e1ed7890a9bd05de23ff97f277d5e68de574497a9ee72 - languageName: node - linkType: hard - "@types/textarea-caret@npm:^3.0.2": version: 3.0.2 resolution: "@types/textarea-caret@npm:3.0.2" @@ -14625,6 +14532,13 @@ __metadata: languageName: node linkType: hard +"@types/uuid@npm:^9": + version: 9.0.8 + resolution: "@types/uuid@npm:9.0.8" + checksum: b8c60b7ba8250356b5088302583d1704a4e1a13558d143c549c408bf8920535602ffc12394ede77f8a8083511b023704bc66d1345792714002bfa261b17c5275 + languageName: node + linkType: hard + "@types/webidl-conversions@npm:*": version: 6.1.1 resolution: "@types/webidl-conversions@npm:6.1.1" @@ -15640,9 +15554,9 @@ __metadata: linkType: hard "acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": - version: 8.2.0 - resolution: "acorn-walk@npm:8.2.0" - checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + version: 8.3.2 + resolution: "acorn-walk@npm:8.3.2" + checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392 languageName: node linkType: hard @@ -15665,11 +15579,11 @@ __metadata: linkType: hard "acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": - version: 8.10.0 - resolution: "acorn@npm:8.10.0" + version: 8.11.3 + resolution: "acorn@npm:8.11.3" bin: acorn: bin/acorn - checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d + checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c languageName: node linkType: hard @@ -16243,7 +16157,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:5.1.3, aria-query@npm:^5.0.0": +"aria-query@npm:5.1.3": version: 5.1.3 resolution: "aria-query@npm:5.1.3" dependencies: @@ -16252,7 +16166,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.3.0": +"aria-query@npm:^5.0.0, aria-query@npm:^5.3.0": version: 5.3.0 resolution: "aria-query@npm:5.3.0" dependencies: @@ -16282,17 +16196,7 @@ __metadata: languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "array-buffer-byte-length@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - is-array-buffer: ^3.0.1 - checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 - languageName: node - linkType: hard - -"array-buffer-byte-length@npm:^1.0.1": +"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1": version: 1.0.1 resolution: "array-buffer-byte-length@npm:1.0.1" dependencies: @@ -16323,20 +16227,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.0.3, array-includes@npm:^3.1.4, array-includes@npm:^3.1.6": - version: 3.1.6 - resolution: "array-includes@npm:3.1.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - get-intrinsic: ^1.1.3 - is-string: ^1.0.7 - checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 - languageName: node - linkType: hard - -"array-includes@npm:^3.1.7": +"array-includes@npm:^3.0.3, array-includes@npm:^3.1.4, array-includes@npm:^3.1.6, array-includes@npm:^3.1.7": version: 3.1.8 resolution: "array-includes@npm:3.1.8" dependencies: @@ -16394,19 +16285,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.2.1, array.prototype.flat@npm:^1.2.3, array.prototype.flat@npm:^1.2.5": - version: 1.3.1 - resolution: "array.prototype.flat@npm:1.3.1" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - es-shim-unscopables: ^1.0.0 - checksum: 5a8415949df79bf6e01afd7e8839bbde5a3581300e8ad5d8449dea52639e9e59b26a467665622783697917b43bf39940a6e621877c7dd9b3d1c1f97484b9b88b - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.1": +"array.prototype.flat@npm:^1.2.1, array.prototype.flat@npm:^1.2.3, array.prototype.flat@npm:^1.2.5, array.prototype.flat@npm:^1.3.1": version: 1.3.2 resolution: "array.prototype.flat@npm:1.3.2" dependencies: @@ -16418,19 +16297,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.2.1, array.prototype.flatmap@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flatmap@npm:1.3.1" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - es-shim-unscopables: ^1.0.0 - checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 - languageName: node - linkType: hard - -"array.prototype.flatmap@npm:^1.3.2": +"array.prototype.flatmap@npm:^1.2.1, array.prototype.flatmap@npm:^1.3.1, array.prototype.flatmap@npm:^1.3.2": version: 1.3.2 resolution: "array.prototype.flatmap@npm:1.3.2" dependencies: @@ -16468,21 +16335,6 @@ __metadata: languageName: node linkType: hard -"arraybuffer.prototype.slice@npm:^1.0.2": - version: 1.0.2 - resolution: "arraybuffer.prototype.slice@npm:1.0.2" - dependencies: - array-buffer-byte-length: ^1.0.0 - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - get-intrinsic: ^1.2.1 - is-array-buffer: ^3.0.2 - is-shared-array-buffer: ^1.0.2 - checksum: c200faf437786f5b2c80d4564ff5481c886a16dee642ef02abdc7306c7edd523d1f01d1dd12b769c7eb42ac9bc53874510db19a92a2c035c0f6696172aafa5d3 - languageName: node - linkType: hard - "arraybuffer.prototype.slice@npm:^1.0.3": version: 1.0.3 resolution: "arraybuffer.prototype.slice@npm:1.0.3" @@ -16749,13 +16601,6 @@ __metadata: languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.5": - version: 1.0.5 - resolution: "available-typed-arrays@npm:1.0.5" - checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a - languageName: node - linkType: hard - "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -16812,6 +16657,13 @@ __metadata: languageName: node linkType: hard +"axe-core@npm:4.9.1": + version: 4.9.1 + resolution: "axe-core@npm:4.9.1" + checksum: 41d9227871781f96c2952e2a777fca73624959dd0e98864f6d82806a77602f82b4fc490852082a7e524d8cd864e50d8b4d9931819b4a150112981d8c932110c5 + languageName: node + linkType: hard + "axe-core@npm:=4.7.0": version: 4.7.0 resolution: "axe-core@npm:4.7.0" @@ -16819,6 +16671,13 @@ __metadata: languageName: node linkType: hard +"axe-core@npm:^3.5.5": + version: 3.5.6 + resolution: "axe-core@npm:3.5.6" + checksum: 000777d2b6bf1f390beb1fb4b8714ed9127797c021c345b032db0c144e07320dbbe8cb0bcb7688b90b79cfbd3cdc1f27a4dc857804e3c61d7e0defb34deeb830 + languageName: node + linkType: hard + "axe-core@npm:^4.2.0, axe-core@npm:^4.7.0": version: 4.7.2 resolution: "axe-core@npm:4.7.2" @@ -18188,17 +18047,7 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind@npm:1.0.2" - dependencies: - function-bind: ^1.1.1 - get-intrinsic: ^1.0.2 - checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 - languageName: node - linkType: hard - -"call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": version: 1.0.7 resolution: "call-bind@npm:1.0.7" dependencies: @@ -18507,6 +18356,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:4.1.2, chalk@npm:^4, chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + "chalk@npm:^1.0.0": version: 1.1.3 resolution: "chalk@npm:1.1.3" @@ -18520,16 +18379,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4, chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc - languageName: node - linkType: hard - "change-case@npm:^4.1.2": version: 4.1.2 resolution: "change-case@npm:4.1.2" @@ -20893,13 +20742,13 @@ __metadata: linkType: hard "deep-equal@npm:^2.0.5": - version: 2.2.2 - resolution: "deep-equal@npm:2.2.2" + version: 2.2.3 + resolution: "deep-equal@npm:2.2.3" dependencies: array-buffer-byte-length: ^1.0.0 - call-bind: ^1.0.2 + call-bind: ^1.0.5 es-get-iterator: ^1.1.3 - get-intrinsic: ^1.2.1 + get-intrinsic: ^1.2.2 is-arguments: ^1.1.1 is-array-buffer: ^3.0.2 is-date-object: ^1.0.5 @@ -20909,12 +20758,12 @@ __metadata: object-is: ^1.1.5 object-keys: ^1.1.1 object.assign: ^4.1.4 - regexp.prototype.flags: ^1.5.0 + regexp.prototype.flags: ^1.5.1 side-channel: ^1.0.4 which-boxed-primitive: ^1.0.2 which-collection: ^1.0.1 - which-typed-array: ^1.1.9 - checksum: eb61c35157b6ecb96a5359b507b083fbff8ddb4c86a78a781ee38485f77a667465e45d63ee2ebd8a00e86d94c80e499906900cd82c2debb400237e1662cd5397 + which-typed-array: ^1.1.13 + checksum: ee8852f23e4d20a5626c13b02f415ba443a1b30b4b3d39eaf366d59c4a85e6545d7ec917db44d476a85ae5a86064f7e5f7af7479f38f113995ba869f3a1ddc53 languageName: node linkType: hard @@ -20979,18 +20828,7 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.0.1": - version: 1.1.0 - resolution: "define-data-property@npm:1.1.0" - dependencies: - get-intrinsic: ^1.2.1 - gopd: ^1.0.1 - has-property-descriptors: ^1.0.0 - checksum: 7ad4ee84cca8ad427a4831f5693526804b62ce9dfd4efac77214e95a4382aed930072251d4075dc8dc9fc949a353ed51f19f5285a84a788ba9216cc51472a093 - languageName: node - linkType: hard - -"define-data-property@npm:^1.1.4": +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" dependencies: @@ -21008,17 +20846,7 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": - version: 1.2.0 - resolution: "define-properties@npm:1.2.0" - dependencies: - has-property-descriptors: ^1.0.0 - object-keys: ^1.1.1 - checksum: e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6 - languageName: node - linkType: hard - -"define-properties@npm:^1.2.1": +"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -21249,13 +21077,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^28.1.1": - version: 28.1.1 - resolution: "diff-sequences@npm:28.1.1" - checksum: e2529036505567c7ca5a2dea86b6bcd1ca0e3ae63bf8ebf529b8a99cfa915bbf194b7021dc1c57361a4017a6d95578d4ceb29fabc3232a4f4cb866a2726c7690 - languageName: node - linkType: hard - "diff-sequences@npm:^29.6.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" @@ -21363,13 +21184,20 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": +"dom-accessibility-api@npm:^0.5.9": version: 0.5.14 resolution: "dom-accessibility-api@npm:0.5.14" checksum: 782c813f75a09ba6735ef03b5e1624406a3829444ae49d5bdedd272a49d437ae3354f53e02ffc8c9fd9165880250f41546538f27461f839dd4ea1234e77e8d5e languageName: node linkType: hard +"dom-accessibility-api@npm:^0.6.3": + version: 0.6.3 + resolution: "dom-accessibility-api@npm:0.6.3" + checksum: c325b5144bb406df23f4affecffc117dbaec9af03daad9ee6b510c5be647b14d28ef0a4ea5ca06d696d8ab40bb777e5fed98b985976fdef9d8790178fa1d573f + languageName: node + linkType: hard + "dom-converter@npm:^0.2.0": version: 0.2.0 resolution: "dom-converter@npm:0.2.0" @@ -22045,54 +21873,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.2, es-abstract@npm:^1.19.1, es-abstract@npm:^1.20.4, es-abstract@npm:^1.22.1": - version: 1.22.2 - resolution: "es-abstract@npm:1.22.2" - dependencies: - array-buffer-byte-length: ^1.0.0 - arraybuffer.prototype.slice: ^1.0.2 - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - es-set-tostringtag: ^2.0.1 - es-to-primitive: ^1.2.1 - function.prototype.name: ^1.1.6 - get-intrinsic: ^1.2.1 - get-symbol-description: ^1.0.0 - globalthis: ^1.0.3 - gopd: ^1.0.1 - has: ^1.0.3 - has-property-descriptors: ^1.0.0 - has-proto: ^1.0.1 - has-symbols: ^1.0.3 - internal-slot: ^1.0.5 - is-array-buffer: ^3.0.2 - is-callable: ^1.2.7 - is-negative-zero: ^2.0.2 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 - is-string: ^1.0.7 - is-typed-array: ^1.1.12 - is-weakref: ^1.0.2 - object-inspect: ^1.12.3 - object-keys: ^1.1.1 - object.assign: ^4.1.4 - regexp.prototype.flags: ^1.5.1 - safe-array-concat: ^1.0.1 - safe-regex-test: ^1.0.0 - string.prototype.trim: ^1.2.8 - string.prototype.trimend: ^1.0.7 - string.prototype.trimstart: ^1.0.7 - typed-array-buffer: ^1.0.0 - typed-array-byte-length: ^1.0.0 - typed-array-byte-offset: ^1.0.0 - typed-array-length: ^1.0.4 - unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.11 - checksum: cc70e592d360d7d729859013dee7a610c6b27ed8630df0547c16b0d16d9fe6505a70ee14d1af08d970fdd132b3f88c9ca7815ce72c9011608abf8ab0e55fc515 - languageName: node - linkType: hard - -"es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2": +"es-abstract@npm:^1.17.2, es-abstract@npm:^1.19.1, es-abstract@npm:^1.20.4, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" dependencies: @@ -22231,17 +22012,6 @@ __metadata: languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.1": - version: 2.0.1 - resolution: "es-set-tostringtag@npm:2.0.1" - dependencies: - get-intrinsic: ^1.1.3 - has: ^1.0.3 - has-tostringtag: ^1.0.0 - checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 - languageName: node - linkType: hard - "es-set-tostringtag@npm:^2.0.3": version: 2.0.3 resolution: "es-set-tostringtag@npm:2.0.3" @@ -22753,6 +22523,17 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-testing-library@npm:~6.2.2": + version: 6.2.2 + resolution: "eslint-plugin-testing-library@npm:6.2.2" + dependencies: + "@typescript-eslint/utils": ^5.58.0 + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + checksum: df55ca98415bad3e7d6b21adcd0f817d7c6df59cb32099528e45b39e8d7edf95e040334106fc7574fd402ed624ca65215ccf37745e1da1a9c90cfe00b99c5be4 + languageName: node + linkType: hard + "eslint-plugin-you-dont-need-lodash-underscore@npm:~6.12.0": version: 6.12.0 resolution: "eslint-plugin-you-dont-need-lodash-underscore@npm:6.12.0" @@ -24108,17 +23889,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.4, follow-redirects@npm:^1.14.7, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.2": - version: 1.15.2 - resolution: "follow-redirects@npm:1.15.2" - peerDependenciesMeta: - debug: - optional: true - checksum: faa66059b66358ba65c234c2f2a37fcec029dc22775f35d9ad6abac56003268baf41e55f9ee645957b32c7d9f62baf1f0b906e68267276f54ec4b4c597c2b190 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.10.0": +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.10.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.4, follow-redirects@npm:^1.14.7, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.2": version: 1.15.4 resolution: "follow-redirects@npm:1.15.4" peerDependenciesMeta: @@ -24673,19 +24444,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1": - version: 1.2.1 - resolution: "get-intrinsic@npm:1.2.1" - dependencies: - function-bind: ^1.1.1 - has: ^1.0.3 - has-proto: ^1.0.1 - has-symbols: ^1.0.3 - checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" dependencies: @@ -24777,17 +24536,7 @@ __metadata: languageName: node linkType: hard -"get-symbol-description@npm:^1.0.0": - version: 1.0.0 - resolution: "get-symbol-description@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.1 - checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 - languageName: node - linkType: hard - -"get-symbol-description@npm:^1.0.2": +"get-symbol-description@npm:^1.0.0, get-symbol-description@npm:^1.0.2": version: 1.0.2 resolution: "get-symbol-description@npm:1.0.2" dependencies: @@ -25450,16 +25199,7 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0": - version: 1.0.0 - resolution: "has-property-descriptors@npm:1.0.0" - dependencies: - get-intrinsic: ^1.1.1 - checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb - languageName: node - linkType: hard - -"has-property-descriptors@npm:^1.0.2": +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": version: 1.0.2 resolution: "has-property-descriptors@npm:1.0.2" dependencies: @@ -25468,14 +25208,7 @@ __metadata: languageName: node linkType: hard -"has-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "has-proto@npm:1.0.1" - checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e - languageName: node - linkType: hard - -"has-proto@npm:^1.0.3": +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": version: 1.0.3 resolution: "has-proto@npm:1.0.3" checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 @@ -25505,16 +25238,7 @@ __metadata: languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-tostringtag@npm:1.0.0" - dependencies: - has-symbols: ^1.0.2 - checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": version: 1.0.2 resolution: "has-tostringtag@npm:1.0.2" dependencies: @@ -25609,16 +25333,7 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0": - version: 2.0.0 - resolution: "hasown@npm:2.0.0" - dependencies: - function-bind: ^1.1.2 - checksum: 6151c75ca12554565098641c98a40f4cc86b85b0fd5b6fe92360967e4605a4f9610f7757260b4e8098dd1c2ce7f4b095f2006fe72a570e3b6d2d28de0298c176 - languageName: node - linkType: hard - -"hasown@npm:^2.0.1, hasown@npm:^2.0.2": +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -26308,16 +26023,7 @@ __metadata: languageName: node linkType: hard -"i18next@npm:>=17.0.11, i18next@npm:~23.4.9": - version: 23.4.9 - resolution: "i18next@npm:23.4.9" - dependencies: - "@babel/runtime": ^7.22.5 - checksum: 46ac2415dc817c0e25e1c5e64332249825cd63b5fb9a5d42e3a2329d4ecd098c0f15a243f56b53e03db02e2e9931ca9bb4447370b2436f9ad6556de40ce981cf - languageName: node - linkType: hard - -"i18next@npm:^23.10.1": +"i18next@npm:>=17.0.11, i18next@npm:^23.10.1": version: 23.10.1 resolution: "i18next@npm:23.10.1" dependencies: @@ -26335,6 +26041,15 @@ __metadata: languageName: node linkType: hard +"i18next@npm:~23.4.9": + version: 23.4.9 + resolution: "i18next@npm:23.4.9" + dependencies: + "@babel/runtime": ^7.22.5 + checksum: 46ac2415dc817c0e25e1c5e64332249825cd63b5fb9a5d42e3a2329d4ecd098c0f15a243f56b53e03db02e2e9931ca9bb4447370b2436f9ad6556de40ce981cf + languageName: node + linkType: hard + "iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24, iconv-lite@npm:^0.4.4": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -26380,7 +26095,7 @@ __metadata: languageName: node linkType: hard -"identity-obj-proxy@npm:^3.0.0": +"identity-obj-proxy@npm:^3.0.0, identity-obj-proxy@npm:~3.0.0": version: 3.0.0 resolution: "identity-obj-proxy@npm:3.0.0" dependencies: @@ -26803,18 +26518,7 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": - version: 1.0.5 - resolution: "internal-slot@npm:1.0.5" - dependencies: - get-intrinsic: ^1.2.0 - has: ^1.0.3 - side-channel: ^1.0.4 - checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a - languageName: node - linkType: hard - -"internal-slot@npm:^1.0.7": +"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.7": version: 1.0.7 resolution: "internal-slot@npm:1.0.7" dependencies: @@ -27000,18 +26704,7 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": - version: 3.0.2 - resolution: "is-array-buffer@npm:3.0.2" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.0 - is-typed-array: ^1.1.10 - checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 - languageName: node - linkType: hard - -"is-array-buffer@npm:^3.0.4": +"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4": version: 3.0.4 resolution: "is-array-buffer@npm:3.0.4" dependencies: @@ -27466,13 +27159,6 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": - version: 2.0.2 - resolution: "is-negative-zero@npm:2.0.2" - checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a - languageName: node - linkType: hard - "is-negative-zero@npm:^2.0.3": version: 2.0.3 resolution: "is-negative-zero@npm:2.0.3" @@ -27659,16 +27345,7 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "is-shared-array-buffer@npm:1.0.2" - dependencies: - call-bind: ^1.0.2 - checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a - languageName: node - linkType: hard - -"is-shared-array-buffer@npm:^1.0.3": +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "is-shared-array-buffer@npm:1.0.3" dependencies: @@ -27727,16 +27404,7 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": - version: 1.1.12 - resolution: "is-typed-array@npm:1.1.12" - dependencies: - which-typed-array: ^1.1.11 - checksum: 4c89c4a3be07186caddadf92197b17fda663a9d259ea0d44a85f171558270d36059d1c386d34a12cba22dfade5aba497ce22778e866adc9406098c8fc4771796 - languageName: node - linkType: hard - -"is-typed-array@npm:^1.1.13": +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.3": version: 1.1.13 resolution: "is-typed-array@npm:1.1.13" dependencies: @@ -28094,6 +27762,18 @@ __metadata: languageName: node linkType: hard +"jest-axe@npm:~9.0.0": + version: 9.0.0 + resolution: "jest-axe@npm:9.0.0" + dependencies: + axe-core: 4.9.1 + chalk: 4.1.2 + jest-matcher-utils: 29.2.2 + lodash.merge: 4.6.2 + checksum: 04457ed3d03e0b7745584325eab446da65d2093f6b608a83955d5ff0ec6a4e026db0da77c755b5e4d8d582ece443d2921da3d94d52eb499f51c105a1cc784cc7 + languageName: node + linkType: hard + "jest-changed-files@npm:^29.7.0": version: 29.7.0 resolution: "jest-changed-files@npm:29.7.0" @@ -28133,7 +27813,7 @@ __metadata: languageName: node linkType: hard -"jest-cli@npm:^29.5.0, jest-cli@npm:^29.6.4, jest-cli@npm:^29.7.0": +"jest-cli@npm:^29.7.0": version: 29.7.0 resolution: "jest-cli@npm:29.7.0" dependencies: @@ -28197,19 +27877,7 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^28.0.2": - version: 28.1.3 - resolution: "jest-diff@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^28.1.1 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: fa8583e0ccbe775714ce850b009be1b0f6b17a4b6759f33ff47adef27942ebc610dbbcc8a5f7cfb7f12b3b3b05afc9fb41d5f766674616025032ff1e4f9866e0 - languageName: node - linkType: hard - -"jest-diff@npm:^29.7.0": +"jest-diff@npm:^29.2.0, jest-diff@npm:^29.2.1, jest-diff@npm:^29.7.0": version: 29.7.0 resolution: "jest-diff@npm:29.7.0" dependencies: @@ -28243,28 +27911,28 @@ __metadata: languageName: node linkType: hard -"jest-environment-jsdom@npm:~29.6.4": - version: 29.6.4 - resolution: "jest-environment-jsdom@npm:29.6.4" +"jest-environment-jsdom@npm:~29.7.0": + version: 29.7.0 + resolution: "jest-environment-jsdom@npm:29.7.0" dependencies: - "@jest/environment": ^29.6.4 - "@jest/fake-timers": ^29.6.4 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 "@jest/types": ^29.6.3 "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^29.6.3 - jest-util: ^29.6.3 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 jsdom: ^20.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 2afe105f12d7d93ca56e2e6f67ab07ada3dd3da0516d1198f254930683ab9feb2b8c14417baaca53544eed88fd7fb5744f0dbce2e100269746187317ce0347df + checksum: 559aac134c196fccc1dfc794d8fc87377e9f78e894bb13012b0831d88dec0abd7ece99abec69da564b8073803be4f04a9eb4f4d1bb80e29eec0cb252c254deb8 languageName: node linkType: hard -"jest-environment-node@npm:^29.7.0": +"jest-environment-node@npm:^29.7.0, jest-environment-node@npm:~29.7.0": version: 29.7.0 resolution: "jest-environment-node@npm:29.7.0" dependencies: @@ -28288,14 +27956,7 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-get-type@npm:28.0.2" - checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd - languageName: node - linkType: hard - -"jest-get-type@npm:^29.6.3": +"jest-get-type@npm:^29.2.0, jest-get-type@npm:^29.6.3": version: 29.6.3 resolution: "jest-get-type@npm:29.6.3" checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 @@ -28360,6 +28021,18 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:29.2.2": + version: 29.2.2 + resolution: "jest-matcher-utils@npm:29.2.2" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.2.1 + jest-get-type: ^29.2.0 + pretty-format: ^29.2.1 + checksum: 97ef2638ab826c25f84bfedea231cef091820ae0876ba316922da81145e950d2b9d2057d3645813b5ee880bb975ed4f22e228dda5d0d26a20715e575b675357d + languageName: node + linkType: hard + "jest-matcher-utils@npm:^29.7.0": version: 29.7.0 resolution: "jest-matcher-utils@npm:29.7.0" @@ -28399,7 +28072,7 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^29.6.3, jest-mock@npm:^29.7.0": +"jest-mock@npm:^29.7.0": version: 29.7.0 resolution: "jest-mock@npm:29.7.0" dependencies: @@ -28574,7 +28247,7 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.0.0, jest-util@npm:^29.6.3, jest-util@npm:^29.7.0": +"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-util@npm:29.7.0" dependencies: @@ -28618,13 +28291,13 @@ __metadata: languageName: node linkType: hard -"jest-websocket-mock@npm:^2.4.0": - version: 2.4.0 - resolution: "jest-websocket-mock@npm:2.4.0" +"jest-websocket-mock@npm:~2.5.0": + version: 2.5.0 + resolution: "jest-websocket-mock@npm:2.5.0" dependencies: - jest-diff: ^28.0.2 - mock-socket: ^9.1.0 - checksum: 03c0707b70bbdbcdf4c2f5579d3423b41317bdecb38ede593061c7894421d24d903bf9dc53062f7a3f2fc3302374d35436cb36d6db6ac84058b63862438d6d27 + jest-diff: ^29.2.0 + mock-socket: ^9.3.0 + checksum: df52989d62f59aea3408d37089ab56490efdfa75d81c851dde65758474844e273a9a4ebd9c13db49d226b87d8272896cabd91173dd8cc56b96beec309d46554d languageName: node linkType: hard @@ -28662,7 +28335,7 @@ __metadata: languageName: node linkType: hard -"jest@npm:^29.7.0": +"jest@npm:^29.7.0, jest@npm:~29.7.0": version: 29.7.0 resolution: "jest@npm:29.7.0" dependencies: @@ -28681,44 +28354,6 @@ __metadata: languageName: node linkType: hard -"jest@npm:~29.5.0": - version: 29.5.0 - resolution: "jest@npm:29.5.0" - dependencies: - "@jest/core": ^29.5.0 - "@jest/types": ^29.5.0 - import-local: ^3.0.2 - jest-cli: ^29.5.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: a8ff2eb0f421623412236e23cbe67c638127fffde466cba9606bc0c0553b4c1e5cb116d7e0ef990b5d1712851652c8ee461373b578df50857fe635b94ff455d5 - languageName: node - linkType: hard - -"jest@npm:~29.6.4": - version: 29.6.4 - resolution: "jest@npm:29.6.4" - dependencies: - "@jest/core": ^29.6.4 - "@jest/types": ^29.6.3 - import-local: ^3.0.2 - jest-cli: ^29.6.4 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: ba28ca7a86d029bcd742bb254c0c8d0119c1e002ddae128ff6409ebabc0b29c36f69dbf3fdd326aff16e7b2500c9a918bbc6a9a5db4d966e035127242239439f - languageName: node - linkType: hard - "jmespath@npm:0.16.0": version: 0.16.0 resolution: "jmespath@npm:0.16.0" @@ -29156,17 +28791,7 @@ __metadata: languageName: node linkType: hard -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0": - version: 3.2.2 - resolution: "jsx-ast-utils@npm:3.2.2" - dependencies: - array-includes: ^3.1.4 - object.assign: ^4.1.2 - checksum: 88c7ade9e1edb8e27021c9ac194184f47d6ffd3852807c3aac44b1610f7eb33359e1aa872a35008d43ed66b5f7be0f6fd8d6e0574d01cf3a4af3ceb0cd0b5988 - languageName: node - linkType: hard - -"jsx-ast-utils@npm:^3.3.5": +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": version: 3.3.5 resolution: "jsx-ast-utils@npm:3.3.5" dependencies: @@ -29850,7 +29475,7 @@ __metadata: languageName: node linkType: hard -"lodash.merge@npm:^4.6.2": +"lodash.merge@npm:4.6.2, lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 @@ -30118,7 +29743,7 @@ __metadata: languageName: node linkType: hard -"lz-string@npm:^1.4.4, lz-string@npm:^1.5.0": +"lz-string@npm:^1.5.0": version: 1.5.0 resolution: "lz-string@npm:1.5.0" bin: @@ -31262,10 +30887,10 @@ __metadata: languageName: node linkType: hard -"mock-socket@npm:^9.1.0": - version: 9.2.1 - resolution: "mock-socket@npm:9.2.1" - checksum: daf07689563163dbcefbefe23b2a9784a75d0af31706f23ad535c6ab2abbcdefa2e91acddeb50a3c39009139e47a8f909cbb38e8137452193ccb9331637fee3e +"mock-socket@npm:^9.3.0": + version: 9.3.1 + resolution: "mock-socket@npm:9.3.1" + checksum: cb2dde4fc5dde280dd5ccb78eaaa223382ee16437f46b86558017655584ad08c22e733bde2dd5cc86927def506b6caeb0147e3167b9a62d70d5cf19d44103853 languageName: node linkType: hard @@ -32317,9 +31942,9 @@ __metadata: linkType: hard "nwsapi@npm:^2.2.0, nwsapi@npm:^2.2.2": - version: 2.2.2 - resolution: "nwsapi@npm:2.2.2" - checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 + version: 2.2.10 + resolution: "nwsapi@npm:2.2.10" + checksum: 5f1d361b38c47ab49727d5ea8bbfeb5867ae6de0e538eec9a8b77c88005ddde36d8b930e0730b50ee5e5dda949112c0f9ffed1bf15e7e1b3cd9cfa319f5a9b6f languageName: node linkType: hard @@ -32406,14 +32031,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": - version: 1.12.3 - resolution: "object-inspect@npm:1.12.3" - checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.1": +"object-inspect@npm:^1.13.1, object-inspect@npm:^1.9.0": version: 1.13.1 resolution: "object-inspect@npm:1.13.1" checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f @@ -32421,12 +32039,12 @@ __metadata: linkType: hard "object-is@npm:^1.0.1, object-is@npm:^1.1.5": - version: 1.1.5 - resolution: "object-is@npm:1.1.5" + version: 1.1.6 + resolution: "object-is@npm:1.1.6" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe + call-bind: ^1.0.7 + define-properties: ^1.2.1 + checksum: 3ea22759967e6f2380a2cbbd0f737b42dc9ddb2dfefdb159a1b927fea57335e1b058b564bfa94417db8ad58cddab33621a035de6f5e5ad56d89f2dd03e66c6a1 languageName: node linkType: hard @@ -32453,19 +32071,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.2, object.assign@npm:^4.1.4": - version: 4.1.4 - resolution: "object.assign@npm:4.1.4" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - has-symbols: ^1.0.3 - object-keys: ^1.1.1 - checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 - languageName: node - linkType: hard - -"object.assign@npm:^4.1.5": +"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": version: 4.1.5 resolution: "object.assign@npm:4.1.5" dependencies: @@ -32477,18 +32083,7 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.0, object.entries@npm:^1.1.6": - version: 1.1.6 - resolution: "object.entries@npm:1.1.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 0f8c47517e6a9a980241eafe3b73de11e59511883173c2b93d67424a008e47e11b77c80e431ad1d8a806f6108b225a1cab9223e53e555776c612a24297117d28 - languageName: node - linkType: hard - -"object.entries@npm:^1.1.7": +"object.entries@npm:^1.1.0, object.entries@npm:^1.1.6, object.entries@npm:^1.1.7": version: 1.1.8 resolution: "object.entries@npm:1.1.8" dependencies: @@ -32499,18 +32094,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.0 || ^1.0.0, object.fromentries@npm:^2.0.6": - version: 2.0.6 - resolution: "object.fromentries@npm:2.0.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 453c6d694180c0c30df451b60eaf27a5b9bca3fb43c37908fd2b78af895803dc631242bcf05582173afa40d8d0e9c96e16e8874b39471aa53f3ac1f98a085d85 - languageName: node - linkType: hard - -"object.fromentries@npm:^2.0.7": +"object.fromentries@npm:^2.0.0 || ^1.0.0, object.fromentries@npm:^2.0.6, object.fromentries@npm:^2.0.7": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" dependencies: @@ -34873,19 +34457,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^28.1.3": - version: 28.1.3 - resolution: "pretty-format@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 - ansi-regex: ^5.0.1 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: e69f857358a3e03d271252d7524bec758c35e44680287f36c1cb905187fbc82da9981a6eb07edfd8a03bc3cbeebfa6f5234c13a3d5b59f2bbdf9b4c4053e0a7f - languageName: node - linkType: hard - -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.2.1, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" dependencies: @@ -35771,15 +35343,15 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.2.0": - version: 18.2.0 - resolution: "react-dom@npm:18.2.0" +"react-dom@npm:~18.3.1": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" dependencies: loose-envify: ^1.1.0 - scheduler: ^0.23.0 + scheduler: ^0.23.2 peerDependencies: - react: ^18.2.0 - checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc + react: ^18.3.1 + checksum: 298954ecd8f78288dcaece05e88b570014d8f6dce5db6f66e6ee91448debeb59dcd31561dddb354eee47e6c1bb234669459060deb238ed0213497146e555a0b9 languageName: node linkType: hard @@ -35797,7 +35369,7 @@ __metadata: languageName: node linkType: hard -"react-error-boundary@npm:^3.1.0, react-error-boundary@npm:^3.1.4": +"react-error-boundary@npm:^3.1.4": version: 3.1.4 resolution: "react-error-boundary@npm:3.1.4" dependencies: @@ -36098,6 +35670,15 @@ __metadata: languageName: node linkType: hard +"react-timing-hooks@npm:~4.0.2": + version: 4.0.2 + resolution: "react-timing-hooks@npm:4.0.2" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 95ebcaffe400f3e1af32bd82eb92258c5e1473e43a7edf65879692117946105bb21f4e91046fdc85c8c737997be1d8148bffacfde8a8a9ee835d81415048119e + languageName: node + linkType: hard + "react-virtuoso@npm:^4.7.1": version: 4.7.1 resolution: "react-virtuoso@npm:4.7.1" @@ -36129,12 +35710,12 @@ __metadata: languageName: node linkType: hard -"react@npm:^18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" +"react@npm:~18.3.1": + version: 18.3.1 + resolution: "react@npm:18.3.1" dependencies: loose-envify: ^1.1.0 - checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b + checksum: a27bcfa8ff7c15a1e50244ad0d0c1cb2ad4375eeffefd266a64889beea6f6b64c4966c9b37d14ee32d6c9fcd5aa6ba183b6988167ab4d127d13e7cb5b386a376 languageName: node linkType: hard @@ -36532,18 +36113,7 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0, regexp.prototype.flags@npm:^1.5.1": - version: 1.5.1 - resolution: "regexp.prototype.flags@npm:1.5.1" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - set-function-name: ^2.0.0 - checksum: 869edff00288442f8d7fa4c9327f91d85f3b3acf8cbbef9ea7a220345cf23e9241b6def9263d2c1ebcf3a316b0aa52ad26a43a84aa02baca3381717b3e307f47 - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.5.2": +"regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.2": version: 1.5.2 resolution: "regexp.prototype.flags@npm:1.5.2" dependencies: @@ -37154,7 +36724,7 @@ __metadata: "@types/js-yaml": ^4.0.8 node-gyp: ^9.4.1 ts-node: ^10.9.2 - turbo: ^1.12.4 + turbo: latest languageName: unknown linkType: soft @@ -37162,7 +36732,7 @@ __metadata: version: 0.0.0-use.local resolution: "rocketchat-services@workspace:apps/meteor/ee/server/services" dependencies: - "@rocket.chat/apps-engine": alpha + "@rocket.chat/apps-engine": 1.44.0 "@rocket.chat/core-services": "workspace:^" "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/emitter": ~0.31.25 @@ -37286,18 +36856,6 @@ __metadata: languageName: node linkType: hard -"safe-array-concat@npm:^1.0.1": - version: 1.0.1 - resolution: "safe-array-concat@npm:1.0.1" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.1 - has-symbols: ^1.0.3 - isarray: ^2.0.5 - checksum: 001ecf1d8af398251cbfabaf30ed66e3855127fbceee178179524b24160b49d15442f94ed6c0db0b2e796da76bb05b73bf3cc241490ec9c2b741b41d33058581 - languageName: node - linkType: hard - "safe-array-concat@npm:^1.1.2": version: 1.1.2 resolution: "safe-array-concat@npm:1.1.2" @@ -37331,17 +36889,6 @@ __metadata: languageName: node linkType: hard -"safe-regex-test@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-regex-test@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 - is-regex: ^1.1.4 - checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 - languageName: node - linkType: hard - "safe-regex-test@npm:^1.0.3": version: 1.0.3 resolution: "safe-regex-test@npm:1.0.3" @@ -37509,12 +37056,12 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.0": - version: 0.23.0 - resolution: "scheduler@npm:0.23.0" +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" dependencies: loose-envify: ^1.1.0 - checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a + checksum: 3e82d1f419e240ef6219d794ff29c7ee415fbdc19e038f680a10c067108e06284f1847450a210b29bbaf97b9d8a97ced5f624c31c681248ac84c80d56ad5a2c4 languageName: node linkType: hard @@ -37884,17 +37431,6 @@ __metadata: languageName: node linkType: hard -"set-function-name@npm:^2.0.0": - version: 2.0.1 - resolution: "set-function-name@npm:2.0.1" - dependencies: - define-data-property: ^1.0.1 - functions-have-names: ^1.2.3 - has-property-descriptors: ^1.0.0 - checksum: 4975d17d90c40168eee2c7c9c59d023429f0a1690a89d75656306481ece0c3c1fb1ebcc0150ea546d1913e35fbd037bace91372c69e543e51fc5d1f31a9fa126 - languageName: node - linkType: hard - "set-function-name@npm:^2.0.1": version: 2.0.2 resolution: "set-function-name@npm:2.0.2" @@ -39121,17 +38657,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.8": - version: 1.2.8 - resolution: "string.prototype.trim@npm:1.2.8" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - checksum: 49eb1a862a53aba73c3fb6c2a53f5463173cb1f4512374b623bcd6b43ad49dd559a06fb5789bdec771a40fc4d2a564411c0a75d35fb27e76bbe738c211ecff07 - languageName: node - linkType: hard - "string.prototype.trim@npm:^1.2.9": version: 1.2.9 resolution: "string.prototype.trim@npm:1.2.9" @@ -39144,17 +38669,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.7": - version: 1.0.7 - resolution: "string.prototype.trimend@npm:1.0.7" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - checksum: 2375516272fd1ba75992f4c4aa88a7b5f3c7a9ca308d963bcd5645adf689eba6f8a04ebab80c33e30ec0aefc6554181a3a8416015c38da0aa118e60ec896310c - languageName: node - linkType: hard - "string.prototype.trimend@npm:^1.0.8": version: 1.0.8 resolution: "string.prototype.trimend@npm:1.0.8" @@ -39166,17 +38680,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.7": - version: 1.0.7 - resolution: "string.prototype.trimstart@npm:1.0.7" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - checksum: 13d0c2cb0d5ff9e926fa0bec559158b062eed2b68cd5be777ffba782c96b2b492944e47057274e064549b94dd27cf81f48b27a31fee8af5b574cff253e7eb613 - languageName: node - linkType: hard - "string.prototype.trimstart@npm:^1.0.8": version: 1.0.8 resolution: "string.prototype.trimstart@npm:1.0.8" @@ -40358,14 +39861,14 @@ __metadata: linkType: hard "tough-cookie@npm:^4.0.0, tough-cookie@npm:^4.1.2": - version: 4.1.2 - resolution: "tough-cookie@npm:4.1.2" + version: 4.1.4 + resolution: "tough-cookie@npm:4.1.4" dependencies: psl: ^1.1.33 punycode: ^2.1.1 universalify: ^0.2.0 url-parse: ^1.5.3 - checksum: a7359e9a3e875121a84d6ba40cc184dec5784af84f67f3a56d1d2ae39b87c0e004e6ba7c7331f9622a7d2c88609032473488b28fe9f59a1fec115674589de39a + checksum: 5815059f014c31179a303c673f753f7899a6fce94ac93712c88ea5f3c26e0c042b5f0c7a599a00f8e0feeca4615dba75c3dffc54f3c1a489978aa8205e09307c languageName: node linkType: hard @@ -40493,9 +39996,9 @@ __metadata: languageName: node linkType: hard -"ts-jest@npm:^29.1.1, ts-jest@npm:^29.1.2, ts-jest@npm:~29.1.0, ts-jest@npm:~29.1.1": - version: 29.1.2 - resolution: "ts-jest@npm:29.1.2" +"ts-jest@npm:~29.1.1": + version: 29.1.5 + resolution: "ts-jest@npm:29.1.5" dependencies: bs-logger: 0.x fast-json-stable-stringify: 2.x @@ -40507,6 +40010,7 @@ __metadata: yargs-parser: ^21.0.1 peerDependencies: "@babel/core": ">=7.0.0-beta.0 <8" + "@jest/transform": ^29.0.0 "@jest/types": ^29.0.0 babel-jest: ^29.0.0 jest: ^29.0.0 @@ -40514,6 +40018,8 @@ __metadata: peerDependenciesMeta: "@babel/core": optional: true + "@jest/transform": + optional: true "@jest/types": optional: true babel-jest: @@ -40522,7 +40028,7 @@ __metadata: optional: true bin: ts-jest: cli.js - checksum: a0ce0affc1b716c78c9ab55837829c42cb04b753d174a5c796bb1ddf9f0379fc20647b76fbe30edb30d9b23181908138d6b4c51ef2ae5e187b66635c295cefd5 + checksum: 96bfdea46d7faa83457c2647806a31a86f28656f703515fee9f6d2ff1ccfc58ccfbbe3ae9283f40141a85af0def30afe887843be5b002c08ed5d5189c941eab1 languageName: node linkType: hard @@ -40541,45 +40047,7 @@ __metadata: languageName: node linkType: hard -"ts-node@npm:^10.9.1, ts-node@npm:~10.9.1": - version: 10.9.1 - resolution: "ts-node@npm:10.9.1" - dependencies: - "@cspotcode/source-map-support": ^0.8.0 - "@tsconfig/node10": ^1.0.7 - "@tsconfig/node12": ^1.0.7 - "@tsconfig/node14": ^1.0.0 - "@tsconfig/node16": ^1.0.2 - acorn: ^8.4.1 - acorn-walk: ^8.1.1 - arg: ^4.1.0 - create-require: ^1.1.0 - diff: ^4.0.1 - make-error: ^1.1.1 - v8-compile-cache-lib: ^3.0.1 - yn: 3.1.1 - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 - languageName: node - linkType: hard - -"ts-node@npm:^10.9.2": +"ts-node@npm:^10.9.1, ts-node@npm:^10.9.2, ts-node@npm:~10.9.1": version: 10.9.2 resolution: "ts-node@npm:10.9.2" dependencies: @@ -40792,58 +40260,58 @@ __metadata: languageName: node linkType: hard -"turbo-darwin-64@npm:1.12.4": - version: 1.12.4 - resolution: "turbo-darwin-64@npm:1.12.4" +"turbo-darwin-64@npm:2.0.11": + version: 2.0.11 + resolution: "turbo-darwin-64@npm:2.0.11" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"turbo-darwin-arm64@npm:1.12.4": - version: 1.12.4 - resolution: "turbo-darwin-arm64@npm:1.12.4" +"turbo-darwin-arm64@npm:2.0.11": + version: 2.0.11 + resolution: "turbo-darwin-arm64@npm:2.0.11" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"turbo-linux-64@npm:1.12.4": - version: 1.12.4 - resolution: "turbo-linux-64@npm:1.12.4" +"turbo-linux-64@npm:2.0.11": + version: 2.0.11 + resolution: "turbo-linux-64@npm:2.0.11" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"turbo-linux-arm64@npm:1.12.4": - version: 1.12.4 - resolution: "turbo-linux-arm64@npm:1.12.4" +"turbo-linux-arm64@npm:2.0.11": + version: 2.0.11 + resolution: "turbo-linux-arm64@npm:2.0.11" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"turbo-windows-64@npm:1.12.4": - version: 1.12.4 - resolution: "turbo-windows-64@npm:1.12.4" +"turbo-windows-64@npm:2.0.11": + version: 2.0.11 + resolution: "turbo-windows-64@npm:2.0.11" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"turbo-windows-arm64@npm:1.12.4": - version: 1.12.4 - resolution: "turbo-windows-arm64@npm:1.12.4" +"turbo-windows-arm64@npm:2.0.11": + version: 2.0.11 + resolution: "turbo-windows-arm64@npm:2.0.11" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"turbo@npm:^1.12.4": - version: 1.12.4 - resolution: "turbo@npm:1.12.4" +"turbo@npm:latest": + version: 2.0.11 + resolution: "turbo@npm:2.0.11" dependencies: - turbo-darwin-64: 1.12.4 - turbo-darwin-arm64: 1.12.4 - turbo-linux-64: 1.12.4 - turbo-linux-arm64: 1.12.4 - turbo-windows-64: 1.12.4 - turbo-windows-arm64: 1.12.4 + turbo-darwin-64: 2.0.11 + turbo-darwin-arm64: 2.0.11 + turbo-linux-64: 2.0.11 + turbo-linux-arm64: 2.0.11 + turbo-windows-64: 2.0.11 + turbo-windows-arm64: 2.0.11 dependenciesMeta: turbo-darwin-64: optional: true @@ -40859,7 +40327,7 @@ __metadata: optional: true bin: turbo: bin/turbo - checksum: d387fb91af6ed0ea925201d3858180353c5d93be564829de2e22f48fe57124d1347d2abb8b99215901a305d4c6da4a0daf4c28afeec20fa1bc1ae2762c3b8d3d + checksum: a2fcb17b2549102dcd912799319a5c31cbabc3fcb76241bac1d2231ee4e1911789cd4e6b4eb050f9e8548ef89143ee77be59eb35b1843cf12b42f136ef176a0c languageName: node linkType: hard @@ -41030,17 +40498,6 @@ __metadata: languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-buffer@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.1 - is-typed-array: ^1.1.10 - checksum: 3e0281c79b2a40cd97fe715db803884301993f4e8c18e8d79d75fd18f796e8cd203310fec8c7fdb5e6c09bedf0af4f6ab8b75eb3d3a85da69328f28a80456bd3 - languageName: node - linkType: hard - "typed-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-buffer@npm:1.0.2" @@ -41052,18 +40509,6 @@ __metadata: languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-length@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - for-each: ^0.3.3 - has-proto: ^1.0.1 - is-typed-array: ^1.1.10 - checksum: b03db16458322b263d87a702ff25388293f1356326c8a678d7515767ef563ef80e1e67ce648b821ec13178dd628eb2afdc19f97001ceae7a31acf674c849af94 - languageName: node - linkType: hard - "typed-array-byte-length@npm:^1.0.1": version: 1.0.1 resolution: "typed-array-byte-length@npm:1.0.1" @@ -41077,19 +40522,6 @@ __metadata: languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-offset@npm:1.0.0" - dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - for-each: ^0.3.3 - has-proto: ^1.0.1 - is-typed-array: ^1.1.10 - checksum: 04f6f02d0e9a948a95fbfe0d5a70b002191fae0b8fe0fe3130a9b2336f043daf7a3dda56a31333c35a067a97e13f539949ab261ca0f3692c41603a46a94e960b - languageName: node - linkType: hard - "typed-array-byte-offset@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-byte-offset@npm:1.0.2" @@ -41104,17 +40536,6 @@ __metadata: languageName: node linkType: hard -"typed-array-length@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-length@npm:1.0.4" - dependencies: - call-bind: ^1.0.2 - for-each: ^0.3.3 - is-typed-array: ^1.1.9 - checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 - languageName: node - linkType: hard - "typed-array-length@npm:^1.0.6": version: 1.0.6 resolution: "typed-array-length@npm:1.0.6" @@ -41171,6 +40592,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:~5.4.5": + version: 5.4.5 + resolution: "typescript@npm:5.4.5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 53c879c6fa1e3bcb194b274d4501ba1985894b2c2692fa079db03c5a5a7140587a1e04e1ba03184605d35f439b40192d9e138eb3279ca8eee313c081c8bcd9b0 + languageName: node + linkType: hard + "typescript@patch:typescript@~5.3.3#~builtin": version: 5.3.3 resolution: "typescript@patch:typescript@npm%3A5.3.3#~builtin::version=5.3.3&hash=85af82" @@ -41181,6 +40612,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@~5.4.5#~builtin": + version: 5.4.5 + resolution: "typescript@patch:typescript@npm%3A5.4.5#~builtin::version=5.4.5&hash=85af82" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 2373c693f3b328f3b2387c3efafe6d257b057a142f9a79291854b14ff4d5367d3d730810aee981726b677ae0fd8329b23309da3b6aaab8263dbdccf1da07a3ba + languageName: node + linkType: hard + "typia@npm:5.3.3, typia@npm:^5.3.3": version: 5.3.3 resolution: "typia@npm:5.3.3" @@ -41859,7 +41300,7 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:1.2.0, use-sync-external-store@npm:^1.2.0, use-sync-external-store@npm:~1.2.0": +"use-sync-external-store@npm:1.2.0": version: 1.2.0 resolution: "use-sync-external-store@npm:1.2.0" peerDependencies: @@ -41868,6 +41309,15 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:^1.2.0, use-sync-external-store@npm:~1.2.0, use-sync-external-store@npm:~1.2.2": + version: 1.2.2 + resolution: "use-sync-external-store@npm:1.2.2" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: fe07c071c4da3645f112c38c0e57beb479a8838616ff4e92598256ecce527f2888c08febc7f9b2f0ce2f0e18540ba3cde41eb2035e4fafcb4f52955037098a81 + languageName: node + linkType: hard + "use@npm:^3.1.0": version: 3.1.1 resolution: "use@npm:3.1.1" @@ -42027,7 +41477,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^9.0.0, uuid@npm:^9.0.1": +"uuid@npm:^9.0.0, uuid@npm:^9.0.1, uuid@npm:~9.0.1": version: 9.0.1 resolution: "uuid@npm:9.0.1" bin: @@ -43036,20 +42486,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": - version: 1.1.11 - resolution: "which-typed-array@npm:1.1.11" - dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - for-each: ^0.3.3 - gopd: ^1.0.1 - has-tostringtag: ^1.0.0 - checksum: 711ffc8ef891ca6597b19539075ec3e08bb9b4c2ca1f78887e3c07a977ab91ac1421940505a197758fb5939aa9524976d0a5bbcac34d07ed6faa75cedbb17206 - languageName: node - linkType: hard - -"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15": +"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": version: 1.1.15 resolution: "which-typed-array@npm:1.1.15" dependencies: @@ -43305,8 +42742,8 @@ __metadata: linkType: hard "ws@npm:^8.11.0, ws@npm:^8.13.0, ws@npm:^8.2.3, ws@npm:^8.8.1": - version: 8.13.0 - resolution: "ws@npm:8.13.0" + version: 8.17.0 + resolution: "ws@npm:8.17.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -43315,7 +42752,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + checksum: 147ef9eab0251364e1d2c55338ad0efb15e6913923ccbfdf20f7a8a6cb8f88432bcd7f4d8f66977135bfad35575644f9983201c1a361019594a4e53977bf6d4e languageName: node linkType: hard