From db61d343f5f9f2dc8552b97d9243c0ebfe8baa94 Mon Sep 17 00:00:00 2001 From: Clemens Zeidler Date: Sun, 30 Aug 2020 20:17:08 +1200 Subject: [PATCH 001/115] Add option to send/edit a message with Ctrl + Enter / Command + Enter When editing multi-line text this option helps to prevent accidentally sending a message too early. With this option, Enter just inserts a new line. For example, composing programming code in a dev chat becomes much easier when Enter just inserts a new line instead of sending the message. Signed-off-by: Clemens Zeidler --- src/components/views/rooms/EditMessageComposer.js | 8 ++++++-- src/components/views/rooms/SendMessageComposer.js | 8 ++++++-- .../settings/tabs/user/PreferencesUserSettingsTab.js | 1 + src/i18n/strings/en_EN.json | 1 + src/settings/Settings.ts | 5 +++++ 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/components/views/rooms/EditMessageComposer.js b/src/components/views/rooms/EditMessageComposer.js index 78c7de887d..636c5b27ff 100644 --- a/src/components/views/rooms/EditMessageComposer.js +++ b/src/components/views/rooms/EditMessageComposer.js @@ -29,9 +29,10 @@ import EditorStateTransfer from '../../../utils/EditorStateTransfer'; import classNames from 'classnames'; import {EventStatus} from 'matrix-js-sdk'; import BasicMessageComposer from "./BasicMessageComposer"; -import {Key} from "../../../Keyboard"; +import {Key, isOnlyCtrlOrCmdKeyEvent} from "../../../Keyboard"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; import {Action} from "../../../dispatcher/actions"; +import SettingsStore from "../../../settings/SettingsStore"; function _isReply(mxEvent) { const relatesTo = mxEvent.getContent()["m.relates_to"]; @@ -135,7 +136,10 @@ export default class EditMessageComposer extends React.Component { if (event.metaKey || event.altKey || event.shiftKey) { return; } - if (event.key === Key.ENTER) { + const ctrlEnterToSend = !!SettingsStore.getValue('MessageComposerInput.ctrlEnterToSend'); + const send = ctrlEnterToSend ? event.key === Key.ENTER && isOnlyCtrlOrCmdKeyEvent(event) + : event.key === Key.ENTER; + if (send) { this._sendEdit(); event.preventDefault(); } else if (event.key === Key.ESCAPE) { diff --git a/src/components/views/rooms/SendMessageComposer.js b/src/components/views/rooms/SendMessageComposer.js index 25dcf8ccd5..dd1b67c989 100644 --- a/src/components/views/rooms/SendMessageComposer.js +++ b/src/components/views/rooms/SendMessageComposer.js @@ -39,11 +39,12 @@ import * as sdk from '../../../index'; import Modal from '../../../Modal'; import {_t, _td} from '../../../languageHandler'; import ContentMessages from '../../../ContentMessages'; -import {Key} from "../../../Keyboard"; +import {Key, isOnlyCtrlOrCmdKeyEvent} from "../../../Keyboard"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; import {MatrixClientPeg} from "../../../MatrixClientPeg"; import RateLimitedFunc from '../../../ratelimitedfunc'; import {Action} from "../../../dispatcher/actions"; +import SettingsStore from "../../../settings/SettingsStore"; function addReplyToMessageContent(content, repliedToEvent, permalinkCreator) { const replyContent = ReplyThread.makeReplyMixIn(repliedToEvent); @@ -122,7 +123,10 @@ export default class SendMessageComposer extends React.Component { return; } const hasModifier = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey; - if (event.key === Key.ENTER && !hasModifier) { + const ctrlEnterToSend = !!SettingsStore.getValue('MessageComposerInput.ctrlEnterToSend'); + const send = ctrlEnterToSend ? event.key === Key.ENTER && isOnlyCtrlOrCmdKeyEvent(event) + : event.key === Key.ENTER && !hasModifier; + if (send) { this._sendMessage(); event.preventDefault(); } else if (event.key === Key.ARROW_UP) { diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js index a77815a68c..64208cb8cd 100644 --- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js @@ -33,6 +33,7 @@ export default class PreferencesUserSettingsTab extends React.Component { 'MessageComposerInput.autoReplaceEmoji', 'MessageComposerInput.suggestEmoji', 'sendTypingNotifications', + 'MessageComposerInput.ctrlEnterToSend', ]; static TIMELINE_SETTINGS = [ diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 47063bdae4..277d9c5952 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -477,6 +477,7 @@ "Enable big emoji in chat": "Enable big emoji in chat", "Send typing notifications": "Send typing notifications", "Show typing notifications": "Show typing notifications", + "Use Ctrl + Enter to send a message (Mac: Command + Enter)": "Use Ctrl + Enter to send a message (Mac: Command + Enter)", "Automatically replace plain text Emoji": "Automatically replace plain text Emoji", "Mirror local video feed": "Mirror local video feed", "Enable Community Filter Panel": "Enable Community Filter Panel", diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 95861e11df..d2d268b2bb 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -321,6 +321,11 @@ export const SETTINGS: {[setting: string]: ISetting} = { displayName: _td("Show typing notifications"), default: true, }, + "MessageComposerInput.ctrlEnterToSend": { + supportedLevels: LEVELS_ACCOUNT_SETTINGS, + displayName: _td("Use Ctrl + Enter to send a message (Mac: Command + Enter)"), + default: false, + }, "MessageComposerInput.autoReplaceEmoji": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, displayName: _td('Automatically replace plain text Emoji'), From 9031c58aebd08b7c6ab07e173f9895006491af5c Mon Sep 17 00:00:00 2001 From: Clemens Zeidler Date: Tue, 8 Sep 2020 21:46:09 +1200 Subject: [PATCH 002/115] Make settings label platform specific --- src/i18n/strings/en_EN.json | 3 ++- src/settings/Settings.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 277d9c5952..a66478ddc9 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -477,7 +477,8 @@ "Enable big emoji in chat": "Enable big emoji in chat", "Send typing notifications": "Send typing notifications", "Show typing notifications": "Show typing notifications", - "Use Ctrl + Enter to send a message (Mac: Command + Enter)": "Use Ctrl + Enter to send a message (Mac: Command + Enter)", + "Use Command + Enter to send a message": "Use Command + Enter to send a message", + "Use Ctrl + Enter to send a message": "Use Ctrl + Enter to send a message", "Automatically replace plain text Emoji": "Automatically replace plain text Emoji", "Mirror local video feed": "Mirror local video feed", "Enable Community Filter Panel": "Enable Community Filter Panel", diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index d2d268b2bb..afe9a50c1e 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -32,6 +32,7 @@ import UseSystemFontController from './controllers/UseSystemFontController'; import { SettingLevel } from "./SettingLevel"; import SettingController from "./controllers/SettingController"; import { RightPanelPhases } from "../stores/RightPanelStorePhases"; +import { isMac } from '../Keyboard'; // These are just a bunch of helper arrays to avoid copy/pasting a bunch of times const LEVELS_ROOM_SETTINGS = [ @@ -323,7 +324,7 @@ export const SETTINGS: {[setting: string]: ISetting} = { }, "MessageComposerInput.ctrlEnterToSend": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, - displayName: _td("Use Ctrl + Enter to send a message (Mac: Command + Enter)"), + displayName: isMac ? _td("Use Command + Enter to send a message") : _td("Use Ctrl + Enter to send a message"), default: false, }, "MessageComposerInput.autoReplaceEmoji": { From 0dc5200b0e858f9c922d67fe5323ab241c51513e Mon Sep 17 00:00:00 2001 From: Glandos Date: Thu, 3 Sep 2020 15:10:33 +0200 Subject: [PATCH 003/115] Push name to the end, near text, in IRC layout Currently, the name (and aux message) are align to the start, leaving a blank space between the end of the name and the message. In a lot of IRC themes, names (and actions) are aligned to the end, next to the message, for a better readability. Signed-off-by: Adrien CLERC --- res/css/views/rooms/_IRCLayout.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/res/css/views/rooms/_IRCLayout.scss b/res/css/views/rooms/_IRCLayout.scss index 958d718b11..ece547d02b 100644 --- a/res/css/views/rooms/_IRCLayout.scss +++ b/res/css/views/rooms/_IRCLayout.scss @@ -186,6 +186,7 @@ $irc-line-height: $font-18px; overflow: hidden; text-overflow: ellipsis; min-width: var(--name-width); + text-align: end; } } } From f36651f5380f1c119577495622365a015b34cdba Mon Sep 17 00:00:00 2001 From: Heiko Carrasco Date: Sat, 26 Sep 2020 23:21:16 +0200 Subject: [PATCH 004/115] Add keyboard shortcut to close current conversations Signed-off-by: Heiko Carrasco --- src/accessibility/KeyboardShortcuts.tsx | 6 ++++++ src/components/structures/LoggedInView.tsx | 12 +++++++++++- src/i18n/strings/en_EN.json | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/accessibility/KeyboardShortcuts.tsx b/src/accessibility/KeyboardShortcuts.tsx index 58d8124122..48d0eb2ab1 100644 --- a/src/accessibility/KeyboardShortcuts.tsx +++ b/src/accessibility/KeyboardShortcuts.tsx @@ -257,6 +257,12 @@ const shortcuts: Record = { key: Key.SLASH, }], description: _td("Toggle this dialog"), + }, { + keybinds: [{ + modifiers: [CMD_OR_CTRL, Modifiers.ALT], + key: Key.H, + }], + description: _td("Go to Home View"), }, ], diff --git a/src/components/structures/LoggedInView.tsx b/src/components/structures/LoggedInView.tsx index 79f2916200..e7256e4cd4 100644 --- a/src/components/structures/LoggedInView.tsx +++ b/src/components/structures/LoggedInView.tsx @@ -21,7 +21,7 @@ import * as PropTypes from 'prop-types'; import { MatrixClient } from 'matrix-js-sdk/src/client'; import { DragDropContext } from 'react-beautiful-dnd'; -import {Key, isOnlyCtrlOrCmdKeyEvent, isOnlyCtrlOrCmdIgnoreShiftKeyEvent} from '../../Keyboard'; +import {Key, isOnlyCtrlOrCmdKeyEvent, isOnlyCtrlOrCmdIgnoreShiftKeyEvent, isMac} from '../../Keyboard'; import PageTypes from '../../PageTypes'; import CallMediaHandler from '../../CallMediaHandler'; import { fixupColorFonts } from '../../utils/FontManager'; @@ -400,6 +400,7 @@ class LoggedInView extends React.Component { const ctrlCmdOnly = isOnlyCtrlOrCmdKeyEvent(ev); const hasModifier = ev.altKey || ev.ctrlKey || ev.metaKey || ev.shiftKey; const isModifier = ev.key === Key.ALT || ev.key === Key.CONTROL || ev.key === Key.META || ev.key === Key.SHIFT; + const modKey = isMac ? ev.metaKey : ev.ctrlKey; switch (ev.key) { case Key.PAGE_UP: @@ -444,6 +445,15 @@ class LoggedInView extends React.Component { } break; + case Key.H: + if (ev.altKey && modKey) { + dis.dispatch({ + action: 'view_home_page', + }); + handled = true; + } + break; + case Key.ARROW_UP: case Key.ARROW_DOWN: if (ev.altKey && !ev.ctrlKey && !ev.metaKey) { diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index eb8f9100ec..0bc430d87a 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2350,6 +2350,7 @@ "Activate selected button": "Activate selected button", "Toggle right panel": "Toggle right panel", "Toggle this dialog": "Toggle this dialog", + "Go to Home View": "Go to Home View", "Move autocomplete selection up/down": "Move autocomplete selection up/down", "Cancel autocomplete": "Cancel autocomplete", "Page Up": "Page Up", From d7f15985f590232a72be980570d98d81b7efd45c Mon Sep 17 00:00:00 2001 From: Heiko Carrasco Date: Tue, 13 Oct 2020 18:26:48 +0200 Subject: [PATCH 005/115] Close all active modals when home shortcut is used Signed-off-by: Heiko Carrasco --- src/Modal.tsx | 9 +++++++++ src/components/structures/LoggedInView.tsx | 2 ++ 2 files changed, 11 insertions(+) diff --git a/src/Modal.tsx b/src/Modal.tsx index b0f6ef988e..b6074e4807 100644 --- a/src/Modal.tsx +++ b/src/Modal.tsx @@ -147,6 +147,15 @@ export class ModalManager { return this.appendDialogAsync(...rest); } + public closeCurrentModal(reason: string) { + const modal = this.getCurrentModal(); + if (!modal) { + return; + } + modal.closeReason = reason; + modal.close(); + } + private buildModal( prom: Promise, props?: IProps, diff --git a/src/components/structures/LoggedInView.tsx b/src/components/structures/LoggedInView.tsx index e7256e4cd4..98921d03a1 100644 --- a/src/components/structures/LoggedInView.tsx +++ b/src/components/structures/LoggedInView.tsx @@ -52,6 +52,7 @@ import RoomListStore from "../../stores/room-list/RoomListStore"; import NonUrgentToastContainer from "./NonUrgentToastContainer"; import { ToggleRightPanelPayload } from "../../dispatcher/payloads/ToggleRightPanelPayload"; import { IThreepidInvite } from "../../stores/ThreepidInviteStore"; +import Modal from "../../Modal"; // We need to fetch each pinned message individually (if we don't already have it) // so each pinned message may trigger a request. Limit the number per room for sanity. @@ -450,6 +451,7 @@ class LoggedInView extends React.Component { dis.dispatch({ action: 'view_home_page', }); + Modal.closeCurrentModal("homeKeyboardShortcut"); handled = true; } break; From 7506e9a85de9a7a1cb4b5836dc3ca4b234dd17b2 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 15 Oct 2020 15:58:18 +0100 Subject: [PATCH 006/115] Disable notifications for the room you have recently been active in Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/Notifier.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Notifier.ts b/src/Notifier.ts index 1899896f9b..6460be20ad 100644 --- a/src/Notifier.ts +++ b/src/Notifier.ts @@ -34,6 +34,8 @@ import SettingsStore from "./settings/SettingsStore"; import { hideToast as hideNotificationsToast } from "./toasts/DesktopNotificationsToast"; import {SettingLevel} from "./settings/SettingLevel"; import {isPushNotifyDisabled} from "./settings/controllers/NotificationControllers"; +import RoomViewStore from "./stores/RoomViewStore"; +import UserActivity from "./UserActivity"; /* * Dispatches: @@ -376,6 +378,11 @@ export const Notifier = { const room = MatrixClientPeg.get().getRoom(ev.getRoomId()); const actions = MatrixClientPeg.get().getPushActionsForEvent(ev); if (actions && actions.notify) { + if (RoomViewStore.getRoomId() === room.roomId && UserActivity.sharedInstance().userActiveRecently()) { + // don't bother notifying as user was recently active in this room + return; + } + if (this.isEnabled()) { this._displayPopupNotification(ev, room); } From 176c7c32da6c8e8314889f6b8bbaa632b03c4f2d Mon Sep 17 00:00:00 2001 From: Bryan Kok Date: Sat, 17 Oct 2020 14:35:11 +0800 Subject: [PATCH 007/115] Search through the list of unfiltered rooms rather than the rooms in the state which are already filtered by the search text --- src/components/views/rooms/RoomSublist.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomSublist.tsx b/src/components/views/rooms/RoomSublist.tsx index 4056f2fbd4..111692786c 100644 --- a/src/components/views/rooms/RoomSublist.tsx +++ b/src/components/views/rooms/RoomSublist.tsx @@ -420,7 +420,7 @@ export default class RoomSublist extends React.Component { room = this.state.rooms && this.state.rooms[0]; } else { // find the first room with a count of the same colour as the badge count - room = this.state.rooms.find((r: Room) => { + room = RoomListStore.instance.unfilteredLists[this.props.tagId].find((r: Room) => { const notifState = this.notificationState.getForRoom(r); return notifState.count > 0 && notifState.color === this.notificationState.color; }); From 091143db525e9eb1a563bd097333b2a6e644af22 Mon Sep 17 00:00:00 2001 From: Resynth Date: Sun, 18 Oct 2020 22:40:19 +0100 Subject: [PATCH 008/115] Add border-radius for video Images have a rounded border, so we may as well add it to videos. Works fine in Chrome, and in other spec-compliant browsers. Signed-off-by: Resynth --- res/css/views/messages/_MVideoBody.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/res/css/views/messages/_MVideoBody.scss b/res/css/views/messages/_MVideoBody.scss index 3b05c53f34..ac3491bc8f 100644 --- a/res/css/views/messages/_MVideoBody.scss +++ b/res/css/views/messages/_MVideoBody.scss @@ -18,5 +18,6 @@ span.mx_MVideoBody { video.mx_MVideoBody { max-width: 100%; height: auto; + border-radius: 4px; } } From da60e4dba69d0475d837a55eb98293285fb116b0 Mon Sep 17 00:00:00 2001 From: Resynth Date: Sun, 25 Oct 2020 16:47:15 +0000 Subject: [PATCH 009/115] Lighten blockquote colour in dark mode Signed-off-by: Resynth --- res/themes/dark/css/_dark.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/themes/dark/css/_dark.scss b/res/themes/dark/css/_dark.scss index 6e0c9acdfe..df68bf0e2f 100644 --- a/res/themes/dark/css/_dark.scss +++ b/res/themes/dark/css/_dark.scss @@ -272,6 +272,10 @@ $composer-shadow-color: rgba(0, 0, 0, 0.28); background-color: #080808; } } + + blockquote { + + } } // diff highlight colors From dc28616a6f366af8cf34970ce363d2e31fe74555 Mon Sep 17 00:00:00 2001 From: Resynth Date: Mon, 26 Oct 2020 22:53:37 +0000 Subject: [PATCH 010/115] Remove empty CSS block Signed-off-by: Resynth --- res/themes/dark/css/_dark.scss | 4 ---- 1 file changed, 4 deletions(-) diff --git a/res/themes/dark/css/_dark.scss b/res/themes/dark/css/_dark.scss index df68bf0e2f..6e0c9acdfe 100644 --- a/res/themes/dark/css/_dark.scss +++ b/res/themes/dark/css/_dark.scss @@ -272,10 +272,6 @@ $composer-shadow-color: rgba(0, 0, 0, 0.28); background-color: #080808; } } - - blockquote { - - } } // diff highlight colors From 6dc709a045204862279629d1e69f799537e27305 Mon Sep 17 00:00:00 2001 From: Resynth Date: Tue, 27 Oct 2020 20:10:23 +0000 Subject: [PATCH 011/115] =?UTF-8?q?=F0=9F=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Resynth --- res/themes/dark/css/_dark.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/themes/dark/css/_dark.scss b/res/themes/dark/css/_dark.scss index 6e0c9acdfe..fdf64d52f8 100644 --- a/res/themes/dark/css/_dark.scss +++ b/res/themes/dark/css/_dark.scss @@ -272,6 +272,10 @@ $composer-shadow-color: rgba(0, 0, 0, 0.28); background-color: #080808; } } + + blockquote { + color: #919191; + } } // diff highlight colors From 24ba566877e5d9a897a3fe21a7b09cf860f0b5ab Mon Sep 17 00:00:00 2001 From: Matthew Kenigsberg Date: Wed, 28 Oct 2020 18:34:04 -0500 Subject: [PATCH 012/115] Specify community description img must be mxc urls Closes vector-im/element-web#7100 Signed-off-by: Matthew Kenigsberg --- src/components/structures/GroupView.js | 2 +- src/i18n/strings/en_EN.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/structures/GroupView.js b/src/components/structures/GroupView.js index 482b9f6da2..bbc4187298 100644 --- a/src/components/structures/GroupView.js +++ b/src/components/structures/GroupView.js @@ -47,7 +47,7 @@ const LONG_DESC_PLACEHOLDER = _td( some important links

- You can even use 'img' tags + You can even add images with Matrix URLs

`); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 1548dd5c13..600319a874 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2001,7 +2001,7 @@ "Attach files from chat or just drag and drop them anywhere in a room.": "Attach files from chat or just drag and drop them anywhere in a room.", "Communities": "Communities", "Create community": "Create community", - "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n", + "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even add images with Matrix URLs \n

\n": "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even add images with Matrix URLs \n

\n", "Add rooms to the community summary": "Add rooms to the community summary", "Which rooms would you like to add to this summary?": "Which rooms would you like to add to this summary?", "Add to summary": "Add to summary", From e15041bd53538a325b4d18a21c0e98b24f77938b Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 2 Nov 2020 15:17:05 -0700 Subject: [PATCH 013/115] Add a custom widget API action for viewing a different room --- .../views/dialogs/ModalWidgetDialog.tsx | 2 +- src/stores/widgets/ElementWidgetActions.ts | 9 +++++ .../widgets/ElementWidgetCapabilities.ts | 19 ++++++++++ src/stores/widgets/StopGapWidget.ts | 37 +++++++++++++++++-- src/stores/widgets/StopGapWidgetDriver.ts | 29 +++++++++++++-- 5 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 src/stores/widgets/ElementWidgetCapabilities.ts diff --git a/src/components/views/dialogs/ModalWidgetDialog.tsx b/src/components/views/dialogs/ModalWidgetDialog.tsx index 6ce3230a7a..16cf89c340 100644 --- a/src/components/views/dialogs/ModalWidgetDialog.tsx +++ b/src/components/views/dialogs/ModalWidgetDialog.tsx @@ -61,7 +61,7 @@ export default class ModalWidgetDialog extends React.PureComponent this.emit("preparing")); this.messaging.on("ready", () => this.emit("ready")); @@ -298,6 +300,35 @@ export class StopGapWidget extends EventEmitter { ActiveWidgetStore.setRoomId(this.mockWidget.id, this.appTileProps.room.roomId); } + // Always attach a handler for ViewRoom, but permission check it internally + this.messaging.on(`action:${ElementWidgetActions.ViewRoom}`, (ev: CustomEvent) => { + ev.preventDefault(); // stop the widget API from auto-rejecting this + + // Check up front if this is even a valid request + const targetRoomId = (ev.detail.data || {}).room_id; + if (!targetRoomId) { + return this.messaging.transport.reply(ev.detail, { + error: {message: "Invalid room ID."}, + }); + } + + // Check the widget's permission + if (!this.messaging.hasCapability(ElementWidgetCapabilities.CanChangeViewedRoom)) { + return this.messaging.transport.reply(ev.detail, { + error: {message: "This widget does not have permission for this action (denied)."}, + }); + } + + // at this point we can change rooms, so do that + defaultDispatcher.dispatch({ + action: 'view_room', + room_id: targetRoomId, + }); + + // acknowledge so the widget doesn't freak out + this.messaging.transport.reply(ev.detail, {}); + }); + if (WidgetType.JITSI.matches(this.mockWidget.type)) { this.messaging.on("action:set_always_on_screen", (ev: CustomEvent) => { diff --git a/src/stores/widgets/StopGapWidgetDriver.ts b/src/stores/widgets/StopGapWidgetDriver.ts index b54e4a5f7d..9b455ac481 100644 --- a/src/stores/widgets/StopGapWidgetDriver.ts +++ b/src/stores/widgets/StopGapWidgetDriver.ts @@ -14,17 +14,40 @@ * limitations under the License. */ -import { Capability, WidgetDriver } from "matrix-widget-api"; +import { Capability, WidgetDriver, WidgetType } from "matrix-widget-api"; import { iterableUnion } from "../../utils/iterables"; +import { MatrixClientPeg } from "../../MatrixClientPeg"; +import { arrayFastClone } from "../../utils/arrays"; +import { ElementWidgetCapabilities } from "./ElementWidgetCapabilities"; // TODO: Purge this from the universe export class StopGapWidgetDriver extends WidgetDriver { - constructor(private allowedCapabilities: Capability[]) { + constructor(private allowedCapabilities: Capability[], private forType: WidgetType) { super(); } public async validateCapabilities(requested: Set): Promise> { - return new Set(iterableUnion(requested, this.allowedCapabilities)); + // TODO: All of this should be a capabilities prompt. + // See https://github.com/vector-im/element-web/issues/13111 + + // Note: None of this well-known widget permissions stuff is documented intentionally. We + // do not want to encourage people relying on this, but need to be able to support it at + // the moment. + // + // If you're a widget developer and seeing this message, please ask the Element team if + // it is safe for you to use this permissions system before trying to use it - it might + // not be here in the future. + + const wkPerms = (MatrixClientPeg.get().getClientWellKnown() || {})['io.element.widget_permissions']; + const allowedCaps = arrayFastClone(this.allowedCapabilities); + if (wkPerms) { + if (Array.isArray(wkPerms["view_room_action"])) { + if (wkPerms["view_room_action"].includes(this.forType)) { + allowedCaps.push(ElementWidgetCapabilities.CanChangeViewedRoom); + } + } + } + return new Set(iterableUnion(requested, allowedCaps)); } } From f5cd079a16abf3099de37c0521bffd655c567617 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 2 Nov 2020 21:32:49 -0700 Subject: [PATCH 014/115] Add support for sending/receiving events from widgets Part of MSC2762: https://github.com/matrix-org/matrix-doc/pull/2762 Requires: https://github.com/matrix-org/matrix-widget-api/pull/9 This is the bare minimum required to send an event to a widget and receive events from widgets. Like the view_room action, this is controlled by a well-known permission key. **Danger**: This allows widgets to potentially modify room state. Use the permissions with care. --- src/stores/widgets/StopGapWidget.ts | 32 +++++++++++++++++++++++ src/stores/widgets/StopGapWidgetDriver.ts | 26 +++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/stores/widgets/StopGapWidget.ts b/src/stores/widgets/StopGapWidget.ts index 441e037ddf..1c26b67faf 100644 --- a/src/stores/widgets/StopGapWidget.ts +++ b/src/stores/widgets/StopGapWidget.ts @@ -55,6 +55,8 @@ import ThemeWatcher from "../../settings/watchers/ThemeWatcher"; import {getCustomTheme} from "../../theme"; import CountlyAnalytics from "../../CountlyAnalytics"; import { ElementWidgetCapabilities } from "./ElementWidgetCapabilities"; +import { MatrixEvent } from "matrix-js-sdk/src/models/event"; +import ActiveRoomObserver from "../../ActiveRoomObserver"; // TODO: Destroy all of this code @@ -329,6 +331,10 @@ export class StopGapWidget extends EventEmitter { this.messaging.transport.reply(ev.detail, {}); }); + // Attach listeners for feeding events - the underlying widget classes handle permissions for us + MatrixClientPeg.get().on('event', this.onEvent); + MatrixClientPeg.get().on('Event.decrypted', this.onEventDecrypted); + if (WidgetType.JITSI.matches(this.mockWidget.type)) { this.messaging.on("action:set_always_on_screen", (ev: CustomEvent) => { @@ -422,5 +428,31 @@ export class StopGapWidget extends EventEmitter { if (!this.started) return; WidgetMessagingStore.instance.stopMessaging(this.mockWidget); ActiveWidgetStore.delRoomId(this.mockWidget.id); + + if (MatrixClientPeg.get()) { + MatrixClientPeg.get().off('event', this.onEvent); + MatrixClientPeg.get().off('Event.decrypted', this.onEventDecrypted); + } + } + + private onEvent = (ev: MatrixEvent) => { + if (ev.isBeingDecrypted() || ev.isDecryptionFailure()) return; + if (ev.getRoomId() !== ActiveRoomObserver.activeRoomId) return; + this.feedEvent(ev); + }; + + private onEventDecrypted = (ev: MatrixEvent) => { + if (ev.isDecryptionFailure()) return; + if (ev.getRoomId() !== ActiveRoomObserver.activeRoomId) return; + this.feedEvent(ev); + }; + + private feedEvent(ev: MatrixEvent) { + if (!this.messaging) return; + + const raw = ev.event; + this.messaging.feedEvent(raw).catch(e => { + console.error("Error sending event to widget: ", e); + }); } } diff --git a/src/stores/widgets/StopGapWidgetDriver.ts b/src/stores/widgets/StopGapWidgetDriver.ts index 9b455ac481..5c2d1868aa 100644 --- a/src/stores/widgets/StopGapWidgetDriver.ts +++ b/src/stores/widgets/StopGapWidgetDriver.ts @@ -14,11 +14,12 @@ * limitations under the License. */ -import { Capability, WidgetDriver, WidgetType } from "matrix-widget-api"; +import { Capability, ISendEventDetails, WidgetDriver, WidgetEventCapability, WidgetType } from "matrix-widget-api"; import { iterableUnion } from "../../utils/iterables"; import { MatrixClientPeg } from "../../MatrixClientPeg"; import { arrayFastClone } from "../../utils/arrays"; import { ElementWidgetCapabilities } from "./ElementWidgetCapabilities"; +import ActiveRoomObserver from "../../ActiveRoomObserver"; // TODO: Purge this from the universe @@ -47,7 +48,30 @@ export class StopGapWidgetDriver extends WidgetDriver { allowedCaps.push(ElementWidgetCapabilities.CanChangeViewedRoom); } } + if (Array.isArray(wkPerms["event_actions"])) { + if (wkPerms["event_actions"].includes(this.forType)) { + allowedCaps.push(...WidgetEventCapability.findEventCapabilities(requested).map(c => c.raw)); + } + } } return new Set(iterableUnion(requested, allowedCaps)); } + + public async sendEvent(eventType: string, content: any, stateKey: string = null): Promise { + const client = MatrixClientPeg.get(); + const roomId = ActiveRoomObserver.activeRoomId; + + if (!client || !roomId) throw new Error("Not in a room or not attached to a client"); + + let r: {event_id: string} = null; + if (stateKey !== null) { + // state event + r = await client.sendStateEvent(roomId, eventType, content, stateKey); + } else { + // message event + r = await client.sendEvent(roomId, eventType, content); + } + + return {roomId, eventId: r.event_id}; + } } From fc90531c9f82df544a1b2229ccead326ec80bf8c Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 2 Nov 2020 21:38:59 -0700 Subject: [PATCH 015/115] Appease the linter --- src/stores/widgets/ElementWidgetActions.ts | 2 +- src/stores/widgets/StopGapWidgetDriver.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/stores/widgets/ElementWidgetActions.ts b/src/stores/widgets/ElementWidgetActions.ts index b908806069..76390086ab 100644 --- a/src/stores/widgets/ElementWidgetActions.ts +++ b/src/stores/widgets/ElementWidgetActions.ts @@ -25,6 +25,6 @@ export enum ElementWidgetActions { export interface IViewRoomApiRequest extends IWidgetApiRequest { data: { - room_id: string; + room_id: string; // eslint-disable-line camelcase }; } diff --git a/src/stores/widgets/StopGapWidgetDriver.ts b/src/stores/widgets/StopGapWidgetDriver.ts index 5c2d1868aa..e2dbf3568e 100644 --- a/src/stores/widgets/StopGapWidgetDriver.ts +++ b/src/stores/widgets/StopGapWidgetDriver.ts @@ -63,7 +63,7 @@ export class StopGapWidgetDriver extends WidgetDriver { if (!client || !roomId) throw new Error("Not in a room or not attached to a client"); - let r: {event_id: string} = null; + let r: {event_id: string} = null; // eslint-disable-line camelcase if (stateKey !== null) { // state event r = await client.sendStateEvent(roomId, eventType, content, stateKey); From 4880abc64a50515eac468d84c677e653715ef49f Mon Sep 17 00:00:00 2001 From: Szimszon Date: Wed, 4 Nov 2020 14:45:00 +0000 Subject: [PATCH 016/115] Translated using Weblate (Hungarian) Currently translated at 99.4% (2367 of 2379 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index edd2cc5d21..6eefc9f8f0 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2549,5 +2549,15 @@ "Show Widgets": "Kisalkalmazások megjelenítése", "Hide Widgets": "Kisalkalmazások elrejtése", "The call was answered on another device.": "A hívás másik eszközön lett fogadva.", - "Answered Elsewhere": "Máshol lett felvéve" + "Answered Elsewhere": "Máshol lett felvéve", + "Tell us below how you feel about %(brand)s so far.": "Mond el nekünk, hogy tetszik eddig ez: %(brand)s.", + "Rate %(brand)s": "Értékeld ezt: %(brand)s", + "Feedback sent": "Visszajelzés elküldve", + "Use the + to make a new room or explore existing ones below": "Új szoba készítéshez vagy kereséshez alább, használd a + jelet", + "%(senderName)s ended the call": "%(senderName)s befejezte a hívást", + "You ended the call": "Befejezted a hívást", + "New version of %(brand)s is available": "Új verzió érhető el ebből: %(brand)s", + "Update %(brand)s": "%(brand)s frissítése", + "Enable desktop notifications": "Asztali értesítések engedélyezése", + "Don't miss a reply": "Ne szalassz el egy választ se" } From 3e3b5af7ead0b9a808b9ee4761380f40bfa3bc44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Wed, 4 Nov 2020 14:48:01 +0000 Subject: [PATCH 017/115] Translated using Weblate (Estonian) Currently translated at 100.0% (2379 of 2379 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 0c90b2b196..f384c9e40d 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -2562,5 +2562,14 @@ "Rate %(brand)s": "Hinda %(brand)s rakendust", "Feedback sent": "Tagasiside on saadetud", "%(senderName)s ended the call": "%(senderName)s lõpetas kõne", - "You ended the call": "Sina lõpetasid kõne" + "You ended the call": "Sina lõpetasid kõne", + "Now, lets help you get started": "Nüüd näitame sulle, mida saad järgmiseks teha", + "Welcome %(name)s": "Tere tulemast, %(name)s", + "Add a photo so people know it's you.": "Enda tutvustamiseks lisa foto.", + "Great, that'll help people know it's you": "Suurepärane, nüüd teised teavad et tegemist on sinuga", + "Use the + to make a new room or explore existing ones below": "Uue jututoa tegemiseks või olemasolevatega tutvumiseks klõpsi + märki", + "New version of %(brand)s is available": "%(brand)s ralenduse uus versioon on saadaval", + "Update %(brand)s": "Uuenda %(brand)s rakendust", + "Enable desktop notifications": "Võta kasutusele töölauakeskkonna teavitused", + "Don't miss a reply": "Ära jäta vastust vahele" } From fa5b07428cbd9053d6eb72424f8742fa2b0fca1a Mon Sep 17 00:00:00 2001 From: Szimszon Date: Wed, 4 Nov 2020 15:12:22 +0000 Subject: [PATCH 018/115] Translated using Weblate (Hungarian) Currently translated at 100.0% (2380 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 6eefc9f8f0..f35b67cfaf 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2559,5 +2559,20 @@ "New version of %(brand)s is available": "Új verzió érhető el ebből: %(brand)s", "Update %(brand)s": "%(brand)s frissítése", "Enable desktop notifications": "Asztali értesítések engedélyezése", - "Don't miss a reply": "Ne szalassz el egy választ se" + "Don't miss a reply": "Ne szalassz el egy választ se", + "Now, let's help you get started": "És most segítünk az indulásban", + "Invite someone using their name, email address, username (like ) or share this room.": "Hívj meg valakit a nevével, e-mail címéve, felhasználói nevével (pl. ) vagy oszd meg ezt a szobát.", + "Start a conversation with someone using their name, email address or username (like ).": "Indíts beszélgetést valakivel és használd hozzá a nevét, e-mail címét vagy a felhasználói nevét (mint ).", + "Invite by email": "Meghívás e-maillel", + "Welcome %(name)s": "Üdv %(name)s", + "Add a photo so people know it's you.": "Hogy másik megismerhessenek adj hozzá egy fényképet.", + "Great, that'll help people know it's you": "Szuper, ez segíteni eldönteni másoknak, hogy te te vagy", + "Send feedback": "Visszajelzés küldése", + "PRO TIP: If you start a bug, please submit debug logs to help us track down the problem.": "Tipp: Ha hibajegyet készítesz, légyszíves segíts a probléma feltárásában azzal, hogy elküldöd a részletes naplót.", + "Please view existing bugs on Github first. No match? Start a new one.": "Először nézd meg, hogy van-e már jegy róla a Github-on. Nincs? Adj fel egy új jegyet.", + "Report a bug": "Hibajegy feladása", + "There are two ways you can provide feedback and help us improve %(brand)s.": "Van két lehetőséged, hogy visszajelezz vagy segíts jobbá tenni ezt: %(brand)s.", + "Comment": "Megjegyzés", + "Add comment": "Megjegyzés hozzáadása", + "Please go into as much detail as you like, so we can track down the problem.": "Ahhoz, hogy megérthessük a problémát olyan részletesen írd le ahogy csak szeretnéd." } From d90fcaaae1cf7bb96362265dec6ba4bbd317d870 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Wed, 4 Nov 2020 15:57:30 +0000 Subject: [PATCH 019/115] Translated using Weblate (Albanian) Currently translated at 99.7% (2375 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 3f4a79b3f6..148e373b98 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2556,5 +2556,19 @@ "Please go into as much detail as you like, so we can track down the problem.": "Ju lutemi, shkoni aq thellë sa doni, që të mund të ndjekim problemin.", "Tell us below how you feel about %(brand)s so far.": "Tregonani më poshtë se si ndiheni rreth %(brand)s deri këtu.", "Rate %(brand)s": "Vlerësojeni %(brand)s", - "Feedback sent": "Përshtypjet u dërguan" + "Feedback sent": "Përshtypjet u dërguan", + "Now, let's help you get started": "Tani, le t’ju ndihmojmë për t’ia filluar", + "Welcome %(name)s": "Mirë se vini %(name)s", + "Add a photo so people know it's you.": "Shtoni një foto, që njerëzit ta dinë se jeni ju.", + "Great, that'll help people know it's you": "Bukur, kjo do t’i ndihmojë njerëzit ta dinë se jeni ju", + "Invite someone using their name, email address, username (like ) or share this room.": "Ftoni dikë duke përdorur emrin e tij, adresën email, emrin e përdoruesit (bie fjala, ) ose ndani me të këtë dhomë.", + "Start a conversation with someone using their name, email address or username (like ).": "Nisni një bisedë me dikë duke përdorur emrin e tij, adresën email ose emrin e përdoruesit (bie fjala, ).", + "Invite by email": "Ftojeni me email", + "Use the + to make a new room or explore existing ones below": "Përdorni + për të krijuar një dhomë të re ose eksploroni ato ekzistuese më poshtë", + "%(senderName)s ended the call": "%(senderName)s e përfundoi thirrjen", + "You ended the call": "E përfunduat thirrjen", + "New version of %(brand)s is available": "Ka gati një version të ri të %(brand)s", + "Update %(brand)s": "Përditësoni %(brand)s", + "Enable desktop notifications": "Aktivizoni njoftime desktopi", + "Don't miss a reply": "Mos humbni asnjë përgjigje" } From b035909239f92f6b3a52609fee3cd009e4f52332 Mon Sep 17 00:00:00 2001 From: Atalonica Date: Wed, 4 Nov 2020 19:11:23 +0000 Subject: [PATCH 020/115] Translated using Weblate (Catalan) Currently translated at 29.0% (692 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/ca/ --- src/i18n/strings/ca.json | 70 ++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json index 6b954da9f2..3144d3ed65 100644 --- a/src/i18n/strings/ca.json +++ b/src/i18n/strings/ca.json @@ -29,7 +29,7 @@ "Search": "Cerca", "powered by Matrix": "amb tecnologia de Matrix", "Edit": "Edita", - "Unpin Message": "Desenganxa el missatge", + "Unpin Message": "Anul·la la fixació de missatge", "Register": "Registre", "Rooms": "Sales", "Add rooms to this community": "Afegeix sales a aquesta comunitat", @@ -97,7 +97,7 @@ "Failed to invite": "No s'ha pogut tramitar la invitació", "Failed to invite the following users to the %(roomName)s room:": "No s'ha pogut convidar a la sala %(roomName)s els següents usuaris:", "You need to be logged in.": "És necessari estar autenticat.", - "You need to be able to invite users to do that.": "Per poder fer això, heu de poder convidar a altres usuaris.", + "You need to be able to invite users to do that.": "Per poder fer això, necessites poder convidar a usuaris.", "Unable to create widget.": "No s'ha pogut crear el giny.", "Failed to send request.": "No s'ha pogut enviar la sol·licitud.", "This room is not recognised.": "No es reconeix aquesta sala.", @@ -108,7 +108,7 @@ "Room %(roomId)s not visible": "La sala %(roomId)s no és visible", "Missing user_id in request": "Falta l'user_id a la vostra sol·licitud", "Usage": "Ús", - "/ddg is not a command": "/ddg no és un comandament", + "/ddg is not a command": "/ddg no és una ordre", "To use it, just wait for autocomplete results to load and tab through them.": "Per utilitzar-lo, simplement espereu que es completin els resultats automàticament i seleccioneu-ne el desitjat.", "Ignored user": "Usuari ignorat", "You are now ignoring %(userId)s": "Esteu ignorant l'usuari %(userId)s", @@ -122,7 +122,7 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s ha sol·licitat una conferència VoIP.", "%(senderName)s invited %(targetName)s.": "%(senderName)s ha convidat a %(targetName)s.", "%(senderName)s banned %(targetName)s.": "%(senderName)s ha expulsat a %(targetName)s.", - "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s ha establert %(displayName)s com el seu nom visible.", + "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s han establert el seu nom visible a %(displayName)s.", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s ha retirat el seu nom visible %(oldDisplayName)s.", "%(senderName)s removed their profile picture.": "%(senderName)s ha retirat la seva foto de perfil.", "%(senderName)s changed their profile picture.": "%(senderName)s ha canviat la seva foto de perfil.", @@ -148,7 +148,7 @@ "%(senderName)s ended the call.": "%(senderName)s ha penjat.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s ha convidat a %(targetDisplayName)s a entrar a la sala.", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s ha fet visible l'històric futur de la sala per a tots els membres, a partir de que hi són convidats.", - "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s ha fet visible l'històric futur de la sala a tots els membres, des de que entren a la sala.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s ha establert la visibilitat de l'històric futur de la sala a tots els membres des de que s'hi uneixen.", "%(senderName)s made future room history visible to all room members.": "%(senderName)s ha fet visible l'històric futur de la sala a tots els membres de la sala.", "%(senderName)s made future room history visible to anyone.": "%(senderName)s ha fet visible el futur historial de la sala per a tothom.", "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s ha fet visible el futur historial de la sala per a desconeguts (%(visibility)s).", @@ -204,7 +204,7 @@ "Cannot add any more widgets": "No s'ha pogut afegir cap més giny", "The maximum permitted number of widgets have already been added to this room.": "Ja s'han afegit el màxim de ginys permesos en aquesta sala.", "Drop File Here": "Deixeu anar un fitxer aquí", - "Drop file here to upload": "Deixeu anar un arxiu aquí per pujar-lo", + "Drop file here to upload": "Deixa anar l'arxiu aquí per pujar-lo", " (unsupported)": " (incompatible)", "Join as voice or video.": "Uneix-te com voice o video.", "Ongoing conference call%(supportedText)s.": "Trucada de conferència en curs %(supportedText)s.", @@ -226,9 +226,9 @@ "Failed to ban user": "No s'ha pogut expulsar l'usuari", "Failed to mute user": "No s'ha pogut silenciar l'usuari", "Failed to change power level": "No s'ha pogut canviar el nivell de poders", - "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "No podreu desfer aquest canvi ja que estareu baixant de grau de privilegis. Només un altre usuari amb més privilegis podrà fer que els recupereu.", - "Are you sure?": "Esteu segur?", - "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "No podreu desfer aquesta acció ja que esteu donant al usuari el mateix nivell de privilegi que el vostre.", + "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "No podràs desfer aquest canvi ja que t'estàs baixant de rang, si ets l'últim usuari de la sala amb privilegis, et serà impossible recuperar-los.", + "Are you sure?": "Estàs segur?", + "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "No podràs desfer aquest canvi ja que estàs donant a l'usuari el mateix nivell de privilegis que el teu.", "Unignore": "Deixa de ignorar", "Ignore": "Ignora", "Jump to read receipt": "Vés a l'últim missatge llegit", @@ -248,11 +248,11 @@ "Upload file": "Puja un fitxer", "Send an encrypted reply…": "Envia una resposta xifrada…", "Send an encrypted message…": "Envia un missatge xifrat…", - "You do not have permission to post to this room": "No teniu el permís per escriure en aquesta sala", - "Server error": "S'ha produït un error al servidor", - "Mirror local video feed": "Mostra el vídeo local com un mirall", + "You do not have permission to post to this room": "No tens permís per enviar res en aquesta sala", + "Server error": "Error del servidor", + "Mirror local video feed": "Remet el flux de vídeo local", "Server unavailable, overloaded, or something else went wrong.": "El servidor no està disponible, està sobrecarregat o alguna altra cosa no ha funcionat correctament.", - "Command error": "S'ha produït un error en l'ordre", + "Command error": "Error en l'ordre", "Jump to message": "Salta al missatge", "No pinned messages.": "No hi ha cap missatge fixat.", "Loading...": "S'està carregant...", @@ -263,15 +263,15 @@ "%(duration)sd": "%(duration)sd", "Online for %(duration)s": "En línia durant %(duration)s", "Idle for %(duration)s": "Inactiu durant %(duration)s", - "Offline for %(duration)s": "Desconnectat durant %(duration)s", + "Offline for %(duration)s": "Fora de línia durant %(duration)s", "Unknown for %(duration)s": "Desconegut durant %(duration)s", - "Online": "Conectat", + "Online": "En línia", "Idle": "Inactiu", - "Offline": "Desconnectat", + "Offline": "Fora de línia", "Unknown": "Desconegut", "Replying": "S'està contestant", "Seen by %(userName)s at %(dateTime)s": "Vist per %(userName)s a les %(dateTime)s", - "No rooms to show": "No hi ha cap sala per a mostrar", + "No rooms to show": "No hi ha sales per mostrar", "Unnamed room": "Sala sense nom", "Save": "Desa", "(~%(count)s results)|other": "(~%(count)s resultats)", @@ -326,9 +326,9 @@ "Invalid file%(extra)s": "Fitxer invàlid%(extra)s", "Error decrypting image": "S'ha produït un error en desxifrar la imatge", "Error decrypting video": "S'ha produït un error en desxifrar el vídeo", - "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s ha canviat el seu avatar per a la sala %(roomName)s", + "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s ha canviat l'avatar de %(roomName)s", "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s ha eliminat l'avatar de la sala.", - "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s ha canviat l'avatar de la sala per aquest ", + "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s ha canviat l'avatar de la sala a ", "Copied!": "Copiat!", "Failed to copy": "No s'ha pogut copiar", "Add an Integration": "Afegeix una integració", @@ -349,10 +349,10 @@ "Failed to remove user from community": "No s'ha pogut treure l'usuari de la comunitat", "Filter community members": "Filtra els membres de la comunitat", "Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "Esteu segur que voleu treure l'usuari '%(roomName)s' del grup %(groupId)s?", - "In reply to ": "In reply to ", + "In reply to ": "En resposta a ", "Removing a room from the community will also remove it from the community page.": "L'eliminació d'una sala de la comunitat també l'eliminarà de la pàgina de la comunitat.", "Failed to remove room from community": "No s'ha pogut eliminar la sala de la comunitat", - "Failed to remove '%(roomName)s' from %(groupId)s": "No s'ha pogut treure la sala '%(roomName)s' de la comunitat %(groupId)s", + "Failed to remove '%(roomName)s' from %(groupId)s": "No s'ha pogut eliminar '%(roomName)s' de %(groupId)s", "Something went wrong!": "Alguna cosa ha anat malament!", "The visibility of '%(roomName)s' in %(groupId)s could not be updated.": "No s'ha pogut actualitzar la visibilitat de la sala '%(roomName)s' de la comunitat %(groupId)s.", "Visibility in Room List": "Visibilitat a la llista de les sales", @@ -372,12 +372,12 @@ "Home": "Inici", "Manage Integrations": "Gestiona les integracions", "%(nameList)s %(transitionList)s": "%(transitionList)s%(nameList)s", - "%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s han entrat", + "%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s s'hi han unit", "%(oneUser)sjoined %(count)s times|one": "%(oneUser)s s'ha unit", "%(severalUsers)sleft %(count)s times|one": "%(severalUsers)s han sortit", "%(oneUser)sleft %(count)s times|one": "%(oneUser)s ha sortit", - "%(severalUsers)sjoined and left %(count)s times|other": "%(severalUsers)s s'han unit i han sortit %(count)s vegades", - "%(severalUsers)sjoined and left %(count)s times|one": "%(severalUsers)s s'han unit i han sortit", + "%(severalUsers)sjoined and left %(count)s times|other": "%(severalUsers)s s'hi han unit i han sortit %(count)s vegades", + "%(severalUsers)sjoined and left %(count)s times|one": "%(severalUsers)s s'hi han unit i han sortit", "%(oneUser)sjoined and left %(count)s times|other": "%(oneUser)s ha entrat i ha sortit %(count)s vegades", "%(oneUser)sjoined and left %(count)s times|one": "%(oneUser)s ha entrat i ha sortit", "%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s han sortit i han tornat a entrar %(count)s vegades", @@ -388,10 +388,10 @@ "%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)s han rebutjat les seves invitacions", "%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)s ha rebutjat la seva invitació %(count)s vegades", "%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)s ha rebutjat la seva invitació", - "%(severalUsers)shad their invitations withdrawn %(count)s times|other": "a %(severalUsers)s els hi han retirat les seves invitacions %(count)s vegades", - "%(severalUsers)shad their invitations withdrawn %(count)s times|one": "a %(severalUsers)s els hi han retirat les seves invitacions", - "%(oneUser)shad their invitation withdrawn %(count)s times|other": "a %(oneUser)s li han retirat la seva invitació %(count)s vegades", - "%(oneUser)shad their invitation withdrawn %(count)s times|one": "a %(oneUser)s li han retirat la seva invitació", + "%(severalUsers)shad their invitations withdrawn %(count)s times|other": "S'han retirat les invitacions de %(severalUsers)s %(count)s vegades", + "%(severalUsers)shad their invitations withdrawn %(count)s times|one": "S'han retirat les invitacions de %(severalUsers)s", + "%(oneUser)shad their invitation withdrawn %(count)s times|other": "S'ha retirat la invitació de %(oneUser)s %(count)s vegades", + "%(oneUser)shad their invitation withdrawn %(count)s times|one": "S'ha retirat la invitació de %(oneUser)s", "were invited %(count)s times|other": "a sigut invitat %(count)s vegades", "were invited %(count)s times|one": "han sigut convidats", "was invited %(count)s times|other": "ha sigut convidat %(count)s vegades", @@ -410,7 +410,7 @@ "was kicked %(count)s times|one": "l'han fet fora", "%(severalUsers)schanged their name %(count)s times|other": "%(severalUsers)s han canviat el seu nom %(count)s vegades", "%(severalUsers)schanged their name %(count)s times|one": "%(severalUsers)s han canviat el seu nom", - "%(oneUser)schanged their name %(count)s times|other": "%(oneUser)s han canviat el seu nom %(count)s vegades", + "%(oneUser)schanged their name %(count)s times|other": "%(oneUser)s ha canviat el seu nom %(count)s vegades", "%(oneUser)schanged their name %(count)s times|one": "%(oneUser)s ha canviat el seu nom", "%(severalUsers)schanged their avatar %(count)s times|other": "%(severalUsers)s han canviat el seu avatar %(count)s vegades", "%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)s han canviat el seu avatar", @@ -426,7 +426,7 @@ "ex. @bob:example.com": "per exemple @carles:exemple.cat", "Add User": "Afegeix un usuari", "Matrix ID": "ID de Matrix", - "Matrix Room ID": "ID de sala de Matrix", + "Matrix Room ID": "ID de la sala de Matrix", "email address": "correu electrònic", "Try using one of the following valid address types: %(validTypesList)s.": "Proveu d'utilitzar un dels següents tipus d'adreça vàlids: %(validTypesList)s.", "You have entered an invalid address.": "No heu introduït una adreça vàlida.", @@ -456,7 +456,7 @@ "An error has occurred.": "S'ha produït un error.", "Unable to restore session": "No s'ha pogut restaurar la sessió", "Invalid Email Address": "El correu electrònic no és vàlid", - "This doesn't appear to be a valid email address": "Aquest no sembla ser un correu electrònic vàlid", + "This doesn't appear to be a valid email address": "Sembla que aquest correu electrònic no és vàlid", "Verification Pending": "Verificació pendent", "Please check your email and click on the link it contains. Once this is done, click continue.": "Reviseu el vostre correu electrònic i feu clic a l'enllaç que conté. Un cop fet això, feu clic a Continua.", "Unable to add email address": "No s'ha pogut afegir el correu electrònic", @@ -506,7 +506,7 @@ "%(inviter)s has invited you to join this community": "%(inviter)s vos convida a unir-vos a aquesta comunitat", "You are an administrator of this community": "Sou un administrador d'aquesta comunitat", "You are a member of this community": "Sou un membre d'aquesta comunitat", - "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Esteu a punt de ser portat a un lloc de tercers perquè pugui autenticar-se amb el vostre compte per utilitzar-lo amb %(integrationsUrl)s. Voleu continuar?", + "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Estàs a punt de ser redirigit a una web de tercers per autenticar el teu compte i poder ser utilitzat amb %(integrationsUrl)s. Vols continuar?", "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "La vostra comunitat no té una descripció llarga, una pàgina HTML per mostrar als membres de la comunitat.
Feu clic aquí per obrir la configuració i donar-ne una!", "Long Description (HTML)": "Descripció llarga (HTML)", "Description": "Descripció", @@ -556,7 +556,7 @@ "Sign out": "Tanca la sessió", "Import E2E room keys": "Importar claus E2E de sala", "Cryptography": "Criptografia", - "Labs": "Laboraroris", + "Labs": "Laboratoris", "%(brand)s version:": "Versió de %(brand)s:", "olm version:": "Versió d'olm:", "Incorrect username and/or password.": "Usuari i/o contrasenya incorrectes.", @@ -653,7 +653,7 @@ "Enable them now": "Habilita-ho ara", "Toolbox": "Caixa d'eines", "Collecting logs": "S'estan recopilant els registres", - "You must specify an event type!": "Heu d'especificar un tipus d'esdeveniment", + "You must specify an event type!": "Has d'especificar un tipus d'esdeveniment!", "(HTTP status %(httpStatus)s)": "(Estat de l´HTTP %(httpStatus)s)", "All Rooms": "Totes les sales", "State Key": "Clau d'estat", @@ -702,7 +702,7 @@ "Pin Message": "Enganxa el missatge", "Failed to change settings": "No s'han pogut modificar els paràmetres", "View Community": "Mira la communitat", - "Event sent!": "S'ha enviat l'esdeveniment", + "Event sent!": "Esdeveniment enviat!", "Event Content": "Contingut de l'esdeveniment", "Thank you!": "Gràcies!", "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Amb el vostre navegador actual, l'aparença de l'aplicació pot ser completament incorrecta i algunes o totes les funcions poden no funcionar correctament. Si voleu provar-ho de totes maneres, podeu continuar, però esteu sols pel que fa als problemes que pugueu trobar!", From 7581266839ce7339a1b642f1f322d150c8a21118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Wed, 4 Nov 2020 17:54:06 +0000 Subject: [PATCH 021/115] Translated using Weblate (Estonian) Currently translated at 100.0% (2380 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index f384c9e40d..ad52b7df6a 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -2571,5 +2571,9 @@ "New version of %(brand)s is available": "%(brand)s ralenduse uus versioon on saadaval", "Update %(brand)s": "Uuenda %(brand)s rakendust", "Enable desktop notifications": "Võta kasutusele töölauakeskkonna teavitused", - "Don't miss a reply": "Ära jäta vastust vahele" + "Don't miss a reply": "Ära jäta vastust vahele", + "Now, let's help you get started": "Nüüd näitame sulle, mida saad järgmiseks teha", + "Invite someone using their name, email address, username (like ) or share this room.": "Kutsu teist osapoolt tema nime, e-posti aadressi, kasutajanime (nagu ) alusel või jaga seda jututuba.", + "Start a conversation with someone using their name, email address or username (like ).": "Alusta vestlust kasutades teise osapoole nime, e-posti aadressi või kasutajanime (näiteks ).", + "Invite by email": "Saada kutse e-kirjaga" } From 75fd37772cd6f414099e703079966811e21dfc1a Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Thu, 5 Nov 2020 22:33:55 +0000 Subject: [PATCH 022/115] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (2380 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/pt_BR/ --- src/i18n/strings/pt_BR.json | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index d44ea4d014..1d720702cf 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -300,7 +300,7 @@ "Ongoing conference call%(supportedText)s.": "Chamada em grupo em andamento%(supportedText)s.", "Online": "Conectada/o", "Idle": "Ocioso", - "Offline": "Desconectado", + "Offline": "Offline", "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "O arquivo exportado irá permitir a qualquer pessoa que o acesse a descriptografar qualquer uma das mensagens criptografadas que você veja, portanto seja bastante cuidadosa(o) em manter este arquivo seguro. Para deixar este arquivo mais protegido, recomendamos que você insira uma senha abaixo, que será usada para criptografar o arquivo. Só será possível importar os dados usando exatamente a mesma senha.", "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Este processo faz com que você possa importar as chaves de criptografia que tinha previamente exportado de outro cliente Matrix. Você poderá então descriptografar todas as mensagens que o outro cliente pôde criptografar.", "Start automatically after system login": "Iniciar automaticamente ao iniciar o sistema", @@ -461,7 +461,7 @@ "%(duration)sd": "%(duration)sd", "Online for %(duration)s": "Online há %(duration)s", "Idle for %(duration)s": "Inativo há %(duration)s", - "Offline for %(duration)s": "Desconectado há %(duration)s", + "Offline for %(duration)s": "Offline há %(duration)s", "Unknown for %(duration)s": "Status desconhecido há %(duration)s", "Unknown": "Desconhecido", "Replying": "Em resposta a", @@ -1431,7 +1431,7 @@ "%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use %(brand)s Desktop for encrypted messages to appear in search results.": "%(brand)s não consegue pesquisar as mensagens criptografadas armazenadas localmente em um navegador de internet. Use o %(brand)s para Computador para que as mensagens criptografadas sejam exibidas nos resultados de buscas.", "Connecting to integration manager...": "Conectando ao gestor de integrações...", "Cannot connect to integration manager": "Não foi possível conectar ao gerenciador de integrações", - "The integration manager is offline or it cannot reach your homeserver.": "Ou o gerenciador de integrações está desconectado, ou ele não conseguiu acessar o seu servidor.", + "The integration manager is offline or it cannot reach your homeserver.": "Ou o gerenciador de integrações está indisponível, ou ele não conseguiu acessar o seu servidor.", "This session is backing up your keys. ": "Esta sessão está fazendo backup das suas chaves. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Esta sessão não está fazendo backup de suas chaves, mas você tem um backup existente que pode restaurar para continuar.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Autorize esta sessão a fazer o backup de chaves antes de se desconectar, para evitar perder chaves que possam estar apenas nesta sessão.", @@ -1781,7 +1781,7 @@ "Disconnect identity server": "Desconectar servidor de identidade", "Disconnect from the identity server ?": "Desconectar-se do servidor de identidade ?", "Disconnect": "Desconectar", - "You should remove your personal data from identity server before disconnecting. Unfortunately, identity server is currently offline or cannot be reached.": "Você deve remover seus dados pessoais do servidor de identidade antes de desconectar. Infelizmente, o servidor de identidade ou está desconectado no momento, ou não pode ser acessado.", + "You should remove your personal data from identity server before disconnecting. Unfortunately, identity server is currently offline or cannot be reached.": "Você deve remover seus dados pessoais do servidor de identidade antes de desconectar. Infelizmente, o servidor de identidade ou está indisponível no momento, ou não pode ser acessado.", "You should:": "Você deveria:", "check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "verifique se há extensões no seu navegador que possam bloquear o servidor de identidade (por exemplo, Privacy Badger)", "contact the administrators of identity server ": "entre em contato com os administradores do servidor de identidade ", @@ -1918,7 +1918,7 @@ "Collapse room list section": "Esconder seção da lista de salas", "Expand room list section": "Mostrar seção da lista de salas", "The person who invited you already left the room.": "A pessoa que convidou você já saiu da sala.", - "The person who invited you already left the room, or their server is offline.": "A pessoa que convidou você já saiu da sala, ou o servidor dela está desconectado.", + "The person who invited you already left the room, or their server is offline.": "A pessoa que convidou você já saiu da sala, ou o servidor dela está indisponível.", "Use an Integration Manager (%(serverName)s) to manage bots, widgets, and sticker packs.": "Use o Gerenciador de Integrações em (%(serverName)s) para gerenciar bots, widgets e pacotes de figurinhas.", "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Use o Gerenciador de Integrações para gerenciar bots, widgets e pacotes de figurinhas.", "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "O Gerenciador de Integrações recebe dados de configuração e pode modificar widgets, enviar convites para salas e definir níveis de permissão em seu nome.", @@ -2493,5 +2493,17 @@ "Tell us below how you feel about %(brand)s so far.": "Conte-nos abaixo o que você sente sobre o %(brand)s até o momento.", "Rate %(brand)s": "Avalie o %(brand)s", "%(senderName)s ended the call": "%(senderName)s encerrou a chamada", - "You ended the call": "Você encerrou a chamada" + "You ended the call": "Você encerrou a chamada", + "Now, let's help you get started": "Agora, vamos começar", + "Don't miss a reply": "Não perca uma resposta", + "Enable desktop notifications": "Ativar notificações na área de trabalho", + "Welcome %(name)s": "Boas-vindas, %(name)s", + "Add a photo so people know it's you.": "Adicione uma foto para as pessoas identificarem você.", + "Great, that'll help people know it's you": "Ótimo, agora as pessoas identificarão você", + "Invite someone using their name, email address, username (like ) or share this room.": "Convide alguém a partir do nome, e-mail ou nome de usuário (por exemplo: ) ou compartilhe esta sala.", + "Start a conversation with someone using their name, email address or username (like ).": "Comece uma conversa, a partir do nome, e-mail ou nome de usuário de alguém (por exemplo: ).", + "Invite by email": "Convidar por e-mail", + "Use the + to make a new room or explore existing ones below": "Clique em + para criar uma nova sala ou explore as salas existentes abaixo", + "New version of %(brand)s is available": "Uma nova versão do %(brand)s está disponível", + "Update %(brand)s": "Atualizar o %(brand)s" } From 799de3981ff99ed41c99565f857fe6c8039fc0f0 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Thu, 5 Nov 2020 02:19:22 +0000 Subject: [PATCH 023/115] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2380 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index f1af2f3719..afefbb1bc0 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2565,5 +2565,17 @@ "Rate %(brand)s": "評價 %(brand)s", "Feedback sent": "已傳送回饋", "%(senderName)s ended the call": "%(senderName)s 結束了通話", - "You ended the call": "您結束了通話" + "You ended the call": "您結束了通話", + "Now, let's help you get started": "現在,讓我們協助您開始", + "Welcome %(name)s": "歡迎 %(name)s", + "Add a photo so people know it's you.": "新增照片以讓其他人知道是您。", + "Great, that'll help people know it's you": "太好了,這會讓人們知道是您", + "Invite someone using their name, email address, username (like ) or share this room.": "使用某人的名字、電子郵件地址或使用者名稱來與他們開始對話(如 )或是分享此聊天室。", + "Start a conversation with someone using their name, email address or username (like ).": "使用某人的名字、電子郵件地址或使用者名稱來與他們開始對話(如 )。", + "Invite by email": "透過電子郵件邀請", + "Use the + to make a new room or explore existing ones below": "使用 + 建立新的聊天室或在下方探索既有的聊天室", + "New version of %(brand)s is available": "%(brand)s 的新版本已可使用", + "Update %(brand)s": "更新 %(brand)s", + "Enable desktop notifications": "啟用桌面通知", + "Don't miss a reply": "不要錯過回覆" } From 02158339b47dea6028a51f3fcf83ee1c884b9cb1 Mon Sep 17 00:00:00 2001 From: Arusekk Date: Thu, 5 Nov 2020 12:00:50 +0000 Subject: [PATCH 024/115] Translated using Weblate (Polish) Currently translated at 62.4% (1486 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/pl/ --- src/i18n/strings/pl.json | 47 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 1343405781..4ac9f9363c 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -692,7 +692,7 @@ "Unable to reject invite": "Nie udało się odrzucić zaproszenia", "Share Message": "Udostępnij wiadomość", "Collapse Reply Thread": "Zwiń wątek odpowiedzi", - "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "

Strona HTML dla Twojej Społeczności

\n

\n Skorzystaj z długiego opisu aby wprowadzić nowych członków do Społeczności lub rozpowszechnić ważne linki.\n

\n

\n Możesz nawet używać tagów 'img'.\n

\n", + "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "

Strona HTML dla Twojej Społeczności

\n

\n Skorzystaj z długiego opisu aby wprowadzić nowych członków do Społeczności lub rozpowszechnić\n ważne linki.\n

\n

\n Możesz nawet używać tagów 'img'.\n

\n", "Add rooms to the community summary": "Dodaj pokoje do podsumowania Społeczności", "Which rooms would you like to add to this summary?": "Które pokoje chcesz dodać do tego podsumowania?", "Add to summary": "Dodaj do podsumowania", @@ -1081,7 +1081,7 @@ "%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s zmienił(a) zasadę dołączania na %(rule)s", "%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s pozwolił(a) by goście dołączali do pokoju.", "%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s zabronił(a) gościom dołączać do pokoju.", - "%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s zmienił dostęp gościnny dla %(rule)s", + "%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s zmienił dostęp gościnny na %(rule)s", "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s aktywował Flair dla %(groups)s w tym pokoju.", "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s dezaktywował Flair dla %(groups)s w tym pokoju.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s aktywował Flair dla %(newGroups)s i dezaktywował Flair dla %(oldGroups)s w tym pokoju.", @@ -1505,7 +1505,7 @@ "Use Single Sign On to continue": "Użyj pojedynczego logowania, aby kontynuować", "Confirm adding this email address by using Single Sign On to prove your identity.": "Potwierdź dodanie tego adresu e-mail przez użycie pojedynczego logowania, aby potwierdzić swoją tożsamość.", "Single Sign On": "Pojedyncze logowanie", - "Confirm adding this phone number by using Single Sign On to prove your identity.": "Potwierdź dodanie tego numeru telefonu przez użycie pojedynczego logowania, aby potwierdzić swoją tożsamość.", + "Confirm adding this phone number by using Single Sign On to prove your identity.": "Potwierdź dodanie tego numeru telefonu przy użyciu pojedynczego logowania, aby potwierdzić swoją tożsamość.", "Learn More": "Dowiedz się więcej", "Light": "Jasny", "Dark": "Ciemny", @@ -1531,5 +1531,44 @@ "Switch to light mode": "Przełącz na tryb jasny", "Switch to dark mode": "Przełącz na tryb ciemny", "Switch theme": "Przełącz motyw", - "All settings": "Wszystkie ustawienia" + "All settings": "Wszystkie ustawienia", + "This requires the latest %(brand)s on your other devices:": "To wymaga najnowszy %(brand)s na pozostałych urządzeniach:", + "%(brand)s Desktop": "%(brand)s na komputer", + "%(brand)s Web": "%(brand)s w przeglądarce", + "%(brand)s iOS": "%(brand)s na iOS", + "%(brand)s Android": "%(brand)s na Android", + "You're signed out": "Wylogowano", + "That matches!": "Zgadza się!", + "New Recovery Method": "Nowy sposób odzyskiwania", + "If disabled, messages from encrypted rooms won't appear in search results.": "Jeśli wyłączone, wiadomości z szyfrowanych pokojów nie pojawią się w wynikach wyszukiwania.", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s z %(totalRooms)s", + "Super": "Super", + "Toggle video on/off": "Włącz/wyłącz wideo", + "Jump to room search": "Przejdź do szukania pokoju", + "Upload a file": "Wyślij plik", + "Unknown (user, session) pair:": "Nieznana para (użytkownik, sesja):", + "Verifies a user, session, and pubkey tuple": "Weryfikuje użytkownika, sesję oraz klucz publiczny", + "Find other public servers or use a custom server": "Znajdź inne publiczne serwery lub podaj własny", + "Join millions for free on the largest public server": "Dołącz do milionów za darmo na największym publicznym serwerze", + "Free": "Za darmo", + "Enter your password to sign in and regain access to your account.": "Podaj hasło, aby zalogować się i odzyskać dostęp do swojego konta.", + "Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Odzyskaj dostęp do swojego konta i klucze zachowane w tej sesji. Bez nich nie uda się odczytać bezpiecznych wiadomości w żadnej sesji.", + "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Ci użytkownicy mogą nie istnieć lub są nieprawidłowi, i nie mogą zostać zaproszeni: %(csvNames)s", + "Failed to find the following users": "Nie udało się znaleźć tych użytkowników", + "We couldn't invite those users. Please check the users you want to invite and try again.": "Nie udało się zaprosić tych użytkowników. Proszę sprawdzić zaproszonych użytkowników i spróbować ponownie.", + "Something went wrong trying to invite the users.": "Coś poszło nie tak podczas zapraszania użytkowników.", + "We couldn't create your DM. Please check the users you want to invite and try again.": "Nie udało się utworzyć wiadomości. Proszę sprawdzić zaproszonych użytkowników i spróbować ponownie.", + "Failed to invite the following users to chat: %(csvUsers)s": "Nie udało się zaprosić tych użytkowników do rozmowy: %(csvUsers)s", + "Invite by email": "Zaproś przez e-mail", + "Invite anyway and never warn me again": "Zaproś mimo to i nie ostrzegaj ponownie", + "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Nie znaleziono profilów wymienionych ID Matriksa — czy zaprosić ich mimo to?", + "The following users may not exist": "Tych użytkowników może nie być", + "Use a different passphrase?": "Użyć innego hasła?", + "Emoji picker": "Wybór emoji", + "Widgets": "Widżety", + "The call could not be established": "Nie udało się nawiązać połączenia", + "Answered Elsewhere": "Odebrane gdzie indziej", + "The call was answered on another device.": "Połączenie zostało odebrane na innym urządzeniu.", + "The other party declined the call.": "Połączenie zostało odrzucone przez drugą stronę.", + "Call Declined": "Połączenie odrzucone" } From 62cc96f3f2c647d827ef400304d25f5592a6ed5f Mon Sep 17 00:00:00 2001 From: Karol Kosek Date: Thu, 5 Nov 2020 11:51:01 +0000 Subject: [PATCH 025/115] Translated using Weblate (Polish) Currently translated at 62.4% (1486 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/pl/ --- src/i18n/strings/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 4ac9f9363c..5ae85654a6 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -1570,5 +1570,6 @@ "Answered Elsewhere": "Odebrane gdzie indziej", "The call was answered on another device.": "Połączenie zostało odebrane na innym urządzeniu.", "The other party declined the call.": "Połączenie zostało odrzucone przez drugą stronę.", - "Call Declined": "Połączenie odrzucone" + "Call Declined": "Połączenie odrzucone", + "Messages in this room are end-to-end encrypted.": "Wiadomości w tym pokoju są szyfrowane end-to-end." } From 8205b4121b8857d69d2c516327e412ba08ff79aa Mon Sep 17 00:00:00 2001 From: Frisk Date: Thu, 5 Nov 2020 11:50:28 +0000 Subject: [PATCH 026/115] Translated using Weblate (Polish) Currently translated at 62.4% (1486 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/pl/ --- src/i18n/strings/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 5ae85654a6..d22fe3d4a0 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -1571,5 +1571,6 @@ "The call was answered on another device.": "Połączenie zostało odebrane na innym urządzeniu.", "The other party declined the call.": "Połączenie zostało odrzucone przez drugą stronę.", "Call Declined": "Połączenie odrzucone", - "Messages in this room are end-to-end encrypted.": "Wiadomości w tym pokoju są szyfrowane end-to-end." + "Messages in this room are end-to-end encrypted.": "Wiadomości w tym pokoju są szyfrowane end-to-end.", + "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Klucz podpisujący, który podano jest taki sam jak klucz podpisujący otrzymany od %(userId)s oraz sesji %(deviceId)s. Sesja została oznaczona jako zweryfikowana." } From 8d1a6d735ba68abe4cda156e3deccf87359e3b9b Mon Sep 17 00:00:00 2001 From: "Auri B. P" Date: Thu, 5 Nov 2020 20:57:19 +0000 Subject: [PATCH 027/115] Translated using Weblate (Catalan) Currently translated at 35.4% (843 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/ca/ --- src/i18n/strings/ca.json | 345 +++++++++++++++++++++++++++------------ 1 file changed, 241 insertions(+), 104 deletions(-) diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json index 3144d3ed65..4661e61c1d 100644 --- a/src/i18n/strings/ca.json +++ b/src/i18n/strings/ca.json @@ -15,9 +15,9 @@ "Favourite": "Favorit", "Mute": "Silencia", "Room directory": "Directori de sales", - "Settings": "Paràmetres", + "Settings": "Configuració", "Start chat": "Inicia un xat", - "Failed to change password. Is your password correct?": "Hi ha hagut un error al canviar la vostra contrasenya. És correcte la vostra contrasenya?", + "Failed to change password. Is your password correct?": "S'ha produït un error en canviar la contrasenya. És correcta la teva contrasenya?", "Continue": "Continua", "Custom Server Options": "Opcions de servidor personalitzat", "Dismiss": "Omet", @@ -37,17 +37,17 @@ "Guests can join": "Els usuaris d'altres xarxes s'hi poden unir", "This email address is already in use": "Aquesta adreça de correu electrònic ja està en ús", "This phone number is already in use": "Aquest número de telèfon ja està en ús", - "Failed to verify email address: make sure you clicked the link in the email": "No s'ha pogut verificar l'adreça de correu electrònic. Assegureu-vos de fer clic a l'enllaç del correu electrònic de verificació", + "Failed to verify email address: make sure you clicked the link in the email": "No s'ha pogut verificar l'adreça de correu electrònic: assegura't de fer clic a l'enllaç del correu electrònic", "Call Failed": "No s'ha pogut realitzar la trucada", - "The remote side failed to pick up": "El costat remot no ha contestat", + "The remote side failed to pick up": "El part remota no ha contestat", "Unable to capture screen": "No s'ha pogut capturar la pantalla", "Existing Call": "Trucada existent", - "You are already in a call.": "Ja sou a una trucada.", - "VoIP is unsupported": "El VoIP no és compatible", - "You cannot place VoIP calls in this browser.": "No es poden fer trucades VoIP amb aquest navegador.", - "You cannot place a call with yourself.": "No és possible trucar-se a un mateix.", + "You are already in a call.": "Ja ets en una trucada.", + "VoIP is unsupported": "VoIP no és compatible", + "You cannot place VoIP calls in this browser.": "No pots fer trucades VoIP en aquest navegador.", + "You cannot place a call with yourself.": "No pots trucar-te a tu mateix.", "Warning!": "Avís!", - "Upload Failed": "No s'ha pogut realitzar la pujada", + "Upload Failed": "No s'ha pogut pujar", "Sun": "dg.", "Mon": "dl.", "Tue": "dt.", @@ -69,51 +69,51 @@ "Dec": "des.", "PM": "PM", "AM": "AM", - "%(weekDayName)s %(time)s": "%(weekDayName)s%(time)s", - "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(day)s de %(monthName)s %(time)s", - "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s de %(monthName)s de %(fullYear)s", - "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(day)s de %(monthName)s de %(fullYear)s %(time)s", - "Who would you like to add to this community?": "A qui voleu afegir a aquesta comunitat?", - "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Avís: les persones que afegiu a aquesta comunitat seran visibles públicament per a qualsevol que conegui l'ID de la comunitat", - "Invite new community members": "Convida nous membres a unir-se a la comunitat", + "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s", + "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(day)s de/d' %(monthName)s %(time)s", + "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s de/d' %(monthName)s de %(fullYear)s", + "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(day)s de/d' %(monthName)s de %(fullYear)s %(time)s", + "Who would you like to add to this community?": "A qui vols afegir a aquesta comunitat?", + "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Avís: qualsevol persona que afegeixis a una comunitat serà visible públicament per a qualsevol que conegui l'ID de la comunitat", + "Invite new community members": "Convida nous membres a la comunitat", "Invite to Community": "Convida a la comunitat", - "Which rooms would you like to add to this community?": "Quines sales voleu afegir a aquesta comunitat?", - "Show these rooms to non-members on the community page and room list?": "Voleu mostrar aquestes sales als que no son membres a la pàgina de la comunitat i a la llista de sales?", + "Which rooms would you like to add to this community?": "Quines sales vols afegir a aquesta comunitat?", + "Show these rooms to non-members on the community page and room list?": "Vols mostrar aquestes sales a la pàgina de la comunitat i a la llista de sales per als que no hi son membres?", "Add rooms to the community": "Afegeix sales a la comunitat", "Add to community": "Afegeix a la comunitat", - "Failed to invite the following users to %(groupId)s:": "No s'ha pogut convidar a %(groupId)s els següents usuaris:", - "Failed to invite users to community": "No s'ha pogut convidar als usuaris a la comunitat", - "Failed to invite users to %(groupId)s": "No s'ha pogut convidar els usuaris a %(groupId)s", - "Failed to add the following rooms to %(groupId)s:": "No s'ha pogut afegir les següents sales al %(groupId)s:", - "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s no té permís per enviar-vos notificacions. Comproveu la configuració del vostre navegador", - "%(brand)s was not given permission to send notifications - please try again": "%(brand)s no ha rebut cap permís per enviar notificacions. Torneu-ho a provar", - "Unable to enable Notifications": "No s'ha pogut activar les notificacions", + "Failed to invite the following users to %(groupId)s:": "No s'han pogut convidar a %(groupId)s els següents usuaris:", + "Failed to invite users to community": "No s'han pogut convidar els usuaris a la comunitat", + "Failed to invite users to %(groupId)s": "No s'han pogut convidar els usuaris a %(groupId)s", + "Failed to add the following rooms to %(groupId)s:": "No s'han pogut afegir a %(groupId)s les següents sales:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s no té permís per enviar-te notificacions, comprova la configuració del teu navegador", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s no ha rebut cap permís per enviar notificacions, torna-ho a provar", + "Unable to enable Notifications": "No s'han pogut activar les notificacions", "This email address was not found": "Aquesta adreça de correu electrònic no s'ha trobat", - "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "La vostra adreça de correu electrònic no sembla que estigui associada amb un identificador de Matrix d'aquest servidor.", - "Default": "Per defecte", + "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "La teva adreça de correu electrònic no sembla estar associada amb un ID de Matrix en aquest servidor.", + "Default": "Predeterminat", "Restricted": "Restringit", "Moderator": "Moderador", "Admin": "Administrador", - "Failed to invite": "No s'ha pogut tramitar la invitació", + "Failed to invite": "No s'ha pogut convidar", "Failed to invite the following users to the %(roomName)s room:": "No s'ha pogut convidar a la sala %(roomName)s els següents usuaris:", - "You need to be logged in.": "És necessari estar autenticat.", - "You need to be able to invite users to do that.": "Per poder fer això, necessites poder convidar a usuaris.", + "You need to be logged in.": "Has d'haver iniciat sessió.", + "You need to be able to invite users to do that.": "Per fer això, necessites poder convidar a usuaris.", "Unable to create widget.": "No s'ha pogut crear el giny.", "Failed to send request.": "No s'ha pogut enviar la sol·licitud.", "This room is not recognised.": "No es reconeix aquesta sala.", - "Power level must be positive integer.": "El nivell de poders ha de ser un enter positiu.", - "You are not in this room.": "No heu entrat a aquesta sala.", - "You do not have permission to do that in this room.": "No teniu el permís per realitzar aquesta acció en aquesta sala.", - "Missing room_id in request": "Falta el room_id en la vostra sol·licitud", - "Room %(roomId)s not visible": "La sala %(roomId)s no és visible", - "Missing user_id in request": "Falta l'user_id a la vostra sol·licitud", + "Power level must be positive integer.": "El nivell d'autoritat ha de ser un enter positiu.", + "You are not in this room.": "No ets en aquesta sala.", + "You do not have permission to do that in this room.": "No tens permís per fer això en aquesta sala.", + "Missing room_id in request": "Falta el room_id a la sol·licitud", + "Room %(roomId)s not visible": "Sala %(roomId)s no visible", + "Missing user_id in request": "Falta l'user_id a la sol·licitud", "Usage": "Ús", "/ddg is not a command": "/ddg no és una ordre", - "To use it, just wait for autocomplete results to load and tab through them.": "Per utilitzar-lo, simplement espereu que es completin els resultats automàticament i seleccioneu-ne el desitjat.", + "To use it, just wait for autocomplete results to load and tab through them.": "Per utilitzar-ho, simplement espera que es completin els resultats automàticament i clica'n el desitjat.", "Ignored user": "Usuari ignorat", - "You are now ignoring %(userId)s": "Esteu ignorant l'usuari %(userId)s", + "You are now ignoring %(userId)s": "Estàs ignorant l'usuari %(userId)s", "Unignored user": "Usuari no ignorat", - "You are no longer ignoring %(userId)s": "Ja no esteu ignorant l'usuari %(userId)s", + "You are no longer ignoring %(userId)s": "Ja no estàs ignorant l'usuari %(userId)s", "Verified key": "Claus verificades", "Call Timeout": "Temps d'espera de les trucades", "Reason": "Raó", @@ -147,19 +147,19 @@ "(unknown failure: %(reason)s)": "(error desconegut: %(reason)s)", "%(senderName)s ended the call.": "%(senderName)s ha penjat.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s ha convidat a %(targetDisplayName)s a entrar a la sala.", - "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s ha fet visible l'històric futur de la sala per a tots els membres, a partir de que hi són convidats.", - "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s ha establert la visibilitat de l'històric futur de la sala a tots els membres des de que s'hi uneixen.", - "%(senderName)s made future room history visible to all room members.": "%(senderName)s ha fet visible l'històric futur de la sala a tots els membres de la sala.", - "%(senderName)s made future room history visible to anyone.": "%(senderName)s ha fet visible el futur historial de la sala per a tothom.", - "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s ha fet visible el futur historial de la sala per a desconeguts (%(visibility)s).", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s ha establert la visibilitat de l'historial futur de la sala a tots els seus membres, a partir de que hi són convidats.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s ha establert la visibilitat de l'historial futur de la sala a tots els seus membres des de que s'hi uneixen.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s ha establert la visibilitat de l'historial futur de la sala a tots els seus membres.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s ha establert la visibilitat de l'historial futur de la sala a tothom.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s ha establert la visibilitat de l'historial futur de la sala a desconegut (%(visibility)s).", "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s de %(fromPowerLevel)s a %(toPowerLevel)s", - "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s ha canviat el nivell de poders de %(powerLevelDiffText)s.", + "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s ha canviat el nivell d'autoritat de %(powerLevelDiffText)s.", "%(senderName)s changed the pinned messages for the room.": "%(senderName)s ha canviat els missatges fixats de la sala.", "%(widgetName)s widget modified by %(senderName)s": "%(senderName)s ha modificat el giny %(widgetName)s", "%(widgetName)s widget added by %(senderName)s": "%(senderName)s ha afegit el giny %(widgetName)s", "%(widgetName)s widget removed by %(senderName)s": "%(senderName)s ha eliminat el giny %(widgetName)s", "Failure to create room": "No s'ha pogut crear la sala", - "Server may be unavailable, overloaded, or you hit a bug.": "És possible que el servidor no estigui disponible, amb sobrecàrrega o que s'hagi trobat un error.", + "Server may be unavailable, overloaded, or you hit a bug.": "És possible que el servidor no estigui disponible, sobrecarregat o que hagi topat amb un error.", "Send": "Envia", "Unnamed Room": "Sala sense nom", "Your browser does not support the required cryptography extensions": "El vostre navegador no és compatible amb els complements criptogràfics necessaris", @@ -167,7 +167,7 @@ "Authentication check failed: incorrect password?": "Ha fallat l'autenticació: heu introduït correctament la contrasenya?", "Failed to join room": "No s'ha pogut entrar a la sala", "Message Pinning": "Fixació de missatges", - "Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostra les marques de temps en format de 12 hores (per exemple, 2:30pm)", + "Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostra les marques de temps en format de 12 hores (p.e. 2:30pm)", "Autoplay GIFs and videos": "Reprodueix de forma automàtica els GIF i vídeos", "Enable automatic language detection for syntax highlighting": "Activa la detecció automàtica d'idiomes per al ressaltat de sintaxi", "Automatically replace plain text Emoji": "Substitueix automàticament Emoji de text pla", @@ -204,7 +204,7 @@ "Cannot add any more widgets": "No s'ha pogut afegir cap més giny", "The maximum permitted number of widgets have already been added to this room.": "Ja s'han afegit el màxim de ginys permesos en aquesta sala.", "Drop File Here": "Deixeu anar un fitxer aquí", - "Drop file here to upload": "Deixa anar l'arxiu aquí per pujar-lo", + "Drop file here to upload": "Deixa anar el fitxer aquí per pujar-lo", " (unsupported)": " (incompatible)", "Join as voice or video.": "Uneix-te com voice o video.", "Ongoing conference call%(supportedText)s.": "Trucada de conferència en curs %(supportedText)s.", @@ -225,10 +225,10 @@ "Ban this user?": "Voleu expulsar a aquest usuari?", "Failed to ban user": "No s'ha pogut expulsar l'usuari", "Failed to mute user": "No s'ha pogut silenciar l'usuari", - "Failed to change power level": "No s'ha pogut canviar el nivell de poders", + "Failed to change power level": "No s'ha pogut canviar el nivell d'autoritat", "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "No podràs desfer aquest canvi ja que t'estàs baixant de rang, si ets l'últim usuari de la sala amb privilegis, et serà impossible recuperar-los.", "Are you sure?": "Estàs segur?", - "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "No podràs desfer aquest canvi ja que estàs donant a l'usuari el mateix nivell de privilegis que el teu.", + "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "No podràs desfer aquest canvi ja que estàs donant a l'usuari el mateix nivell d'autoritat que el teu.", "Unignore": "Deixa de ignorar", "Ignore": "Ignora", "Jump to read receipt": "Vés a l'últim missatge llegit", @@ -240,7 +240,7 @@ "and %(count)s others...|one": "i un altre...", "Invited": "Convidat", "Filter room members": "Filtra els membres de la sala", - "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (poder %(powerLevelNumber)s)", + "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (autoritat %(powerLevelNumber)s)", "Attachment": "Adjunt", "Hangup": "Penja", "Voice call": "Trucada de veu", @@ -249,7 +249,7 @@ "Send an encrypted reply…": "Envia una resposta xifrada…", "Send an encrypted message…": "Envia un missatge xifrat…", "You do not have permission to post to this room": "No tens permís per enviar res en aquesta sala", - "Server error": "Error del servidor", + "Server error": "Error de servidor", "Mirror local video feed": "Remet el flux de vídeo local", "Server unavailable, overloaded, or something else went wrong.": "El servidor no està disponible, està sobrecarregat o alguna altra cosa no ha funcionat correctament.", "Command error": "Error en l'ordre", @@ -299,7 +299,7 @@ "Who can access this room?": "Qui pot entrar a aquesta sala?", "Only people who have been invited": "Només les persones que hi hagin sigut convidades", "Anyone who knows the room's link, apart from guests": "Qualsevol que conegui l'enllaç de la sala, excepte usuaris d'altres xarxes", - "Publish this room to the public in %(domain)s's room directory?": "Voleu que es publiqui aquesta sala al directori de sales públiques de %(domain)s?", + "Publish this room to the public in %(domain)s's room directory?": "Vols publicar aquesta sala al directori de sales públiques de %(domain)s?", "Who can read history?": "Qui pot llegir l'historial?", "Anyone": "Qualsevol", "Members only (since the point in time of selecting this option)": "Només els membres (a partir del punt en què seleccioneu aquesta opció)", @@ -313,19 +313,19 @@ "This room has no local addresses": "Aquesta sala no té adreces locals", "Invalid community ID": "L'ID de la comunitat no és vàlid", "'%(groupId)s' is not a valid community ID": "'%(groupId)s' no és un ID de comunitat vàlid", - "New community ID (e.g. +foo:%(localDomain)s)": "Nou ID de comunitat (per exemple +foo:%(localDomain)s)", + "New community ID (e.g. +foo:%(localDomain)s)": "Nou ID de comunitat (p.e. +foo:%(localDomain)s)", "You have enabled URL previews by default.": "Heu habilitat les previsualitzacions per defecte dels URL.", "You have disabled URL previews by default.": "Heu inhabilitat les previsualitzacions per defecte dels URL.", "URL previews are enabled by default for participants in this room.": "Les previsualitzacions dels URL estan habilitades per defecte per als membres d'aquesta sala.", "URL previews are disabled by default for participants in this room.": "Les previsualitzacions dels URL estan inhabilitades per defecte per als membres d'aquesta sala.", "URL Previews": "Previsualitzacions dels URL", - "Error decrypting audio": "S'ha produït un error mentre es desxifrava l'àudio", - "Error decrypting attachment": "S'ha produït un error en desxifrar el fitxer adjunt", + "Error decrypting audio": "Error desxifrant àudio", + "Error decrypting attachment": "Error desxifrant fitxer adjunt", "Decrypt %(text)s": "Desxifra %(text)s", "Download %(text)s": "Baixa %(text)s", "Invalid file%(extra)s": "Fitxer invàlid%(extra)s", - "Error decrypting image": "S'ha produït un error en desxifrar la imatge", - "Error decrypting video": "S'ha produït un error en desxifrar el vídeo", + "Error decrypting image": "Error desxifrant imatge", + "Error decrypting video": "Error desxifrant video", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s ha canviat l'avatar de %(roomName)s", "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s ha eliminat l'avatar de la sala.", "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s ha canviat l'avatar de la sala a ", @@ -334,9 +334,9 @@ "Add an Integration": "Afegeix una integració", "An email has been sent to %(emailAddress)s": "S'ha enviat un correu electrònic a %(emailAddress)s", "Please check your email to continue registration.": "Reviseu el vostre correu electrònic per a poder continuar amb el registre.", - "Token incorrect": "El testimoni és incorrecte", + "Token incorrect": "Token incorrecte", "A text message has been sent to %(msisdn)s": "S'ha enviat un missatge de text a %(msisdn)s", - "Please enter the code it contains:": "Introduïu el codi que conté:", + "Please enter the code it contains:": "Introdueix el codi que conté:", "Start authentication": "Inicia l'autenticació", "Sign in with": "Inicieu sessió amb", "Email address": "Correu electrònic", @@ -359,7 +359,7 @@ "Visible to everyone": "Visible per a tothom", "Only visible to community members": "Només visible per als membres de la comunitat", "Filter community rooms": "Filtra sales de comunitats", - "Something went wrong when trying to get your communities.": "S'ha produït un error en intentar obtenir les vostres comunitats.", + "Something went wrong when trying to get your communities.": "Alguna cosa ha anat malament mentre s'intentaven obtenir les comunitats.", "You're not currently a member of any communities.": "Actualment no sou membre de cap comunitat.", "Unknown Address": "Adreça desconeguda", "Allow": "Permetre", @@ -431,7 +431,7 @@ "Try using one of the following valid address types: %(validTypesList)s.": "Proveu d'utilitzar un dels següents tipus d'adreça vàlids: %(validTypesList)s.", "You have entered an invalid address.": "No heu introduït una adreça vàlida.", "Confirm Removal": "Confirmeu l'eliminació", - "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Esteu segur que voleu eliminar (suprimir) aquest esdeveniment? Tingueu en compte que si suprimiu un nom sala o si feu un canvi de tema, desfaria el canvi.", + "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Estàs segur que vols eliminar (suprimir) aquest esdeveniment? Tingues en compte que, si suprimeixes un nom de sala o es canvia el tema, podria ser que es revertís.", "This room is not showing flair for any communities": "Aquesta sala no mostra talent per a cap comunitat", "Flair": "Talents", "Showing flair for these communities:": "Mostra els talents d'aquestes comunitats:", @@ -442,7 +442,7 @@ "%(oneUser)sleft %(count)s times|other": "%(oneUser)s ha sortit %(count)s vegades", "Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Les ID de les comunitats només poden contendre caràcters a-z, 0-9, o '=_-./'", "Community IDs cannot be empty.": "Les ID de les comunitats no poden estar buides.", - "Something went wrong whilst creating your community": "S'ha produït un error al crear la vostra comunitat", + "Something went wrong whilst creating your community": "S'ha produït un error mentre es creava la comunitat", "Create Community": "Crea una comunitat", "Community Name": "Nom de la comunitat", "Example": "Exemple", @@ -450,7 +450,7 @@ "example": "exemple", "Create": "Crea", "Create Room": "Crea una sala", - "Unknown error": "S'ha produït un error desconegut", + "Unknown error": "Error desconegut", "Incorrect password": "Contrasenya incorrecta", "Deactivate Account": "Desactivar el compte", "An error has occurred.": "S'ha produït un error.", @@ -475,8 +475,8 @@ "Public Chat": "Xat públic", "Custom": "Personalitzat", "Name": "Nom", - "You must register to use this functionality": "Heu de register per utilitzar aquesta funcionalitat", - "You must join the room to see its files": "Heu d'entrar a la sala per poder-ne veure els fitxers", + "You must register to use this functionality": "Per poder utilitzar aquesta funcionalitat has de registrar-te", + "You must join the room to see its files": "Per poder veure els fitxers de la sala t'hi has d'unir", "There are no visible files in this room": "No hi ha fitxers visibles en aquesta sala", "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "

Aquest és l'HTML per a la pàgina de la vostra comunitat

\n

\n Utilitzeu la descripció llarga per a presentar la comunitat a nous membres,\n o per afegir-hi enlaços d'interès. \n

\n

\n També podeu utilitzar etiquetes 'img'.\n

\n", "Add rooms to the community summary": "Afegiu sales al resum de la comunitat", @@ -499,7 +499,7 @@ "Leave Community": "Abandona la comunitat", "Leave %(groupName)s?": "Voleu sortir de la comunitat %(groupName)s?", "Leave": "Surt", - "Community Settings": "Paràmetres de la comunitat", + "Community Settings": "Configuració de comunitat", "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Aquestes sales es mostren a la pàgina de la comunitat als seus membres i poden entrar-hi fent clic sobre elles.", "Featured Rooms:": "Sales destacades:", "Featured Users:": "Usuaris destacats:", @@ -507,7 +507,7 @@ "You are an administrator of this community": "Sou un administrador d'aquesta comunitat", "You are a member of this community": "Sou un membre d'aquesta comunitat", "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Estàs a punt de ser redirigit a una web de tercers per autenticar el teu compte i poder ser utilitzat amb %(integrationsUrl)s. Vols continuar?", - "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "La vostra comunitat no té una descripció llarga, una pàgina HTML per mostrar als membres de la comunitat.
Feu clic aquí per obrir la configuració i donar-ne una!", + "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "La teva comunitat no té cap descripció llarga (una pàgina HTML per mostrar als membres de la comunitat).
Clica aquí per obrir la configuració i crear-ne una!", "Long Description (HTML)": "Descripció llarga (HTML)", "Description": "Descripció", "Community %(groupId)s not found": "No s'ha pogut trobar la comunitat %(groupId)s", @@ -522,7 +522,7 @@ "Data from an older version of %(brand)s has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "S'han detectat dades d'una versió antiga del %(brand)s. Això haurà provocat que el xifratge d'extrem a extrem no funcioni correctament a la versió anterior. Els missatges xifrats d'extrem a extrem que s'han intercanviat recentment mentre s'utilitzava la versió anterior no es poden desxifrar en aquesta versió. També pot provocar que els missatges intercanviats amb aquesta versió fallin. Si teniu problemes, sortiu de la sessió i torneu a entrar-hi. Per poder llegir l'historial dels missatges xifrats, exporteu i torneu a importar les vostres claus.", "Logout": "Surt", "Your Communities": "Les teves comunitats", - "Error whilst fetching joined communities": "S'ha produït un error en buscar comunitats unides", + "Error whilst fetching joined communities": "Error en l'obtenció de comunitats unides", "Create a new community": "Crea una comunitat nova", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Crea una comunitat per agrupar usuaris i sales! Creeu una pàgina d'inici personalitzada per definir el vostre espai a l'univers Matrix.", "You have no visible notifications": "No teniu cap notificació visible", @@ -568,23 +568,23 @@ "Export": "Exporta", "Import room keys": "Importa les claus de la sala", "Import": "Importa", - "The version of %(brand)s": "La versió del %(brand)s", + "The version of %(brand)s": "La versió de %(brand)s", "Email": "Correu electrònic", "I have verified my email address": "He verificat l'adreça de correu electrònic", "Send Reset Email": "Envia email de reinici", - "Your homeserver's URL": "L'URL del vostre servidor personal", + "Your homeserver's URL": "L'URL del teu servidor propi", "Analytics": "Analítiques", "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s ha canviat el seu nom visible a %(displayName)s.", "Identity Server is": "El servidor d'identitat és", "Submit debug logs": "Enviar logs de depuració", - "The platform you're on": "La plataforma a la que estàs", - "Your language of choice": "El teu idioma preferit", + "The platform you're on": "La plataforma a la que et trobes", + "Your language of choice": "El teu idioma desitjat", "Which officially provided instance you are using, if any": "Quina instància oficial estàs utilitzant, si escau", - "Whether or not you're using the Richtext mode of the Rich Text Editor": "Si esteu utilitzant el mode Richtext del Rich Text Editor o no", - "The information being sent to us to help make %(brand)s better includes:": "La informació enviada a %(brand)s per ajudar-nos a millorar inclou:", - "Fetching third party location failed": "S'ha produït un error en obtenir la ubicació de tercers", + "Whether or not you're using the Richtext mode of the Rich Text Editor": "Si estàs utilitzant, o no, el mode Richtext de Rich Text Editor", + "The information being sent to us to help make %(brand)s better includes:": "La informació que s'envia a %(brand)s per ajudar-nos a millorar inclou:", + "Fetching third party location failed": "Ha fallat l'obtenció de la ubicació de tercers", "Send Account Data": "Envia les dades del compte", - "Advanced notification settings": "Paràmetres avançats de notificacions", + "Advanced notification settings": "Configuració avançada de notificacions", "Uploading report": "S'està enviant l'informe", "Sunday": "Diumenge", "Failed to add tag %(tagName)s to room": "No s'ha pogut afegir l'etiqueta %(tagName)s a la sala", @@ -612,14 +612,14 @@ "Messages containing my display name": "Missatges que contenen el meu nom visible", "Messages in one-to-one chats": "Missatges en xats un a un", "Unavailable": "No disponible", - "Error saving email notification preferences": "No s'han pogut desar les preferències de les notificacions a causa d'un error", + "Error saving email notification preferences": "Error desant preferències de notificacions de correu electrònic", "View Decrypted Source": "Mostra el codi desxifrat", "Failed to update keywords": "No s'han pogut actualitzar les paraules clau", "remove %(name)s from the directory.": "elimina %(name)s del directori.", "Notifications on the following keywords follow rules which can’t be displayed here:": "Les notificacions sobre les següents paraules clau segueixen regles que no es poden mostrar aquí:", "Please set a password!": "Si us plau, establiu una contrasenya", "You have successfully set a password!": "Heu establert correctament la contrasenya", - "An error occurred whilst saving your email notification preferences.": "S'ha produït un error en desar les vostres preferències de notificació per correu electrònic.", + "An error occurred whilst saving your email notification preferences.": "S'ha produït un error mentre es desaven les teves preferències de notificació de correu electrònic.", "Explore Room State": "Esbrina els estats de les sales", "Source URL": "URL origen", "Messages sent by bot": "Missatges enviats pel bot", @@ -668,7 +668,7 @@ "Notify me for anything else": "Notifica'm per a qualsevol altra cosa", "View Source": "Mostra el codi", "Keywords": "Paraules clau", - "Can't update user notification settings": "No es poden actualitzar els paràmetres de les notificacions de l'usuari", + "Can't update user notification settings": "No es pot actualitzar la configuració de notificacions d'usuari", "Notify for all other messages/rooms": "Notifica per a tots els altres missatges o sales", "Unable to look up room ID from server": "No s'ha pogut cercar l'ID de la sala en el servidor", "Couldn't find a matching Matrix room": "No s'ha pogut trobar una sala de Matrix que coincideixi", @@ -700,44 +700,44 @@ "Event Type": "Tipus d'esdeveniment", "Download this file": "Descarrega aquest fitxer", "Pin Message": "Enganxa el missatge", - "Failed to change settings": "No s'han pogut modificar els paràmetres", + "Failed to change settings": "No s'ha pogut canviar la configuració", "View Community": "Mira la communitat", "Event sent!": "Esdeveniment enviat!", "Event Content": "Contingut de l'esdeveniment", "Thank you!": "Gràcies!", "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Amb el vostre navegador actual, l'aparença de l'aplicació pot ser completament incorrecta i algunes o totes les funcions poden no funcionar correctament. Si voleu provar-ho de totes maneres, podeu continuar, però esteu sols pel que fa als problemes que pugueu trobar!", "Checking for an update...": "Comprovant si hi ha actualitzacions...", - "e.g. %(exampleValue)s": "p. ex. %(exampleValue)s", - "Every page you use in the app": "Cada pàgina que utilitzeu a l'aplicació", - "e.g. ": "p. ex. ", - "Your device resolution": "La resolució del vostre dispositiu", + "e.g. %(exampleValue)s": "p.e. %(exampleValue)s", + "Every page you use in the app": "Cada pàgina que utilitzes a l'aplicació", + "e.g. ": "p.e. ", + "Your device resolution": "La resolució del teu dispositiu", "Show Stickers": "Mostra els adhesius", - "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Quan aquesta pàgina contingui informació identificable, com per exemple una sala, usuari o ID de grup, aquestes dades se suprimeixen abans d'enviar-se al servidor.", + "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Quan aquesta pàgina contingui informació d'identificació, com per exemple una sala, usuari o ID de grup, aquestes dades s'eliminen abans d'enviar-se al servidor.", "Call in Progress": "Trucada en curs", - "A call is currently being placed!": "S'està fent una trucada en aquest moment!", + "A call is currently being placed!": "En aquest moment s'està realitzant una trucada!", "A call is already in progress!": "Ja hi ha una trucada en curs!", - "Permission Required": "Permís requerit", - "You do not have permission to start a conference call in this room": "No teniu permís per iniciar una trucada de conferència en aquesta sala", - "Unable to load! Check your network connectivity and try again.": "No s'ha pogut carregar! Comproveu la vostra connectivitat i torneu-ho a provar.", - "Failed to invite users to the room:": "No s'ha pogut convidar els usuaris a aquesta sala:", - "Missing roomId.": "Manca l'ID de la sala.", + "Permission Required": "Es necessita permís", + "You do not have permission to start a conference call in this room": "No tens permís per iniciar una conferència telefònica en aquesta sala", + "Unable to load! Check your network connectivity and try again.": "No s'ha pogut carregar! Comprova la connectivitat de xarxa i torna-ho a intentar.", + "Failed to invite users to the room:": "No s'han pogut convidar els usuaris a la sala:", + "Missing roomId.": "Falta l'ID de sala.", "Searches DuckDuckGo for results": "Cerca al DuckDuckGo els resultats", - "Changes your display nickname": "Canvia el vostre malnom", - "Invites user with given id to current room": "Convida l'usuari amb l'id donat a la sala actual", - "Kicks user with given id": "Expulsa l'usuari amb l'id donat", - "Bans user with given id": "Bandeja l'usuari amb l'id donat", + "Changes your display nickname": "Canvia el teu àlies de visualització", + "Invites user with given id to current room": "Convida a la sala actual l'usuari amb l'ID indicat", + "Kicks user with given id": "Expulsa l'usuari amb l'ID indicat", + "Bans user with given id": "Bandeja l'usuari amb l'ID indicat", "Ignores a user, hiding their messages from you": "Ignora un usuari, amagant-te els seus missatges", - "Stops ignoring a user, showing their messages going forward": "Deixa d'ignorar un usuari, mostrant els seus missatges ara en avant", + "Stops ignoring a user, showing their messages going forward": "Deixa d'ignorar un usuari, i mostra els seus missatges a partir d'ara", "Define the power level of a user": "Defineix el nivell d'autoritat d'un usuari", "Deops user with given id": "Degrada l'usuari amb l'id donat", "Opens the Developer Tools dialog": "Obre el diàleg d'Eines del desenvolupador", "Displays action": "Mostra l'acció", - "Whether or not you're logged in (we don't record your username)": "Si heu iniciat sessió o no (no desem el vostre usuari)", - "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "El fitxer %(fileName)s supera el límit de pujades del servidor", + "Whether or not you're logged in (we don't record your username)": "Si has iniciat sessió o no (no registrem el teu nom d'usuari)", + "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "El fitxer %(fileName)s supera la mida màxima permesa per a pujades d'aquest servidor", "Upgrades a room to a new version": "Actualitza la sala a una versió nova", - "Gets or sets the room topic": "Consulta o canvia el tema de la sala", - "This room has no topic.": "Aquesta sala no te tema.", - "Sets the room name": "Canvia el nom de la sala", + "Gets or sets the room topic": "Obté o estableix el tema de la sala", + "This room has no topic.": "Aquesta sala no té tema.", + "Sets the room name": "Estableix el nom de la sala", "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s ha actualitzat aquesta sala.", "%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s ha fet la sala pública a tothom qui conegui l'adreça.", "%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s ha limitat la sala als convidats.", @@ -778,7 +778,7 @@ "Common names and surnames are easy to guess": "Noms i cognoms comuns són fàcils d'esbrinar", "Straight rows of keys are easy to guess": "Fileres seguides de tecles són fàcils d'esbrinar", "Short keyboard patterns are easy to guess": "Patrons curts de teclat són fàcils d'esbrinar", - "There was an error joining the room": "Hi ha hagut un error en entrar a la sala", + "There was an error joining the room": "Hi ha hagut un error unint-se a la sala", "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "No s'ha trobat el perfil pels IDs de Matrix següents, els voleu convidar igualment?", "Invite anyway and never warn me again": "Convidar igualment i no avisar-me de nou", "Invite anyway": "Convidar igualment", @@ -811,5 +811,142 @@ "Theme": "Tema", "Phone Number": "Número de telèfon", "Help": "Ajuda", - "Send typing notifications": "Envia notificacions d'escriptura" + "Send typing notifications": "Envia notificacions d'escriptura", + "Delete the room address %(alias)s and remove %(name)s from the directory?": "Vols suprimir l'adreça de la sala %(alias)s i eliminar %(name)s del directori?", + "We encountered an error trying to restore your previous session.": "Hem trobat un error en intentar recuperar la teva sessió prèvia.", + "There was an error updating your community. The server is unable to process your request.": "S'ha produït un error en actualitzar la comunitat. El servidor no ha pogut processar la petició.", + "There was an error creating your community. The name may be taken or the server is unable to process your request.": "S'ha produït un error en crear la comunitat. Potser el nom ja existeix o el servidor no ha pogut processar la petició.", + "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "S'ha retornat un error (%(errcode)s) mentre s'intentava validar la invitació. Pots provar a informar d'això a un administrador de sala.", + "Error: Problem communicating with the given homeserver.": "Error: problema comunicant-se amb el servidor local proporcionat.", + "Upload Error": "Error de pujada", + "A connection error occurred while trying to contact the server.": "S'ha produït un error de connexió mentre s'intentava connectar al servidor.", + "%(brand)s encountered an error during upload of:": "%(brand)s ha trobat un error durant la pujada de:", + "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "S'ha produït un error en actualitzar l'adreça principal de la sala. Pot ser que el servidor no ho permeti o que s'hagi produït un error temporal.", + "Error upgrading room": "Error actualitzant sala", + "Error unsubscribing from list": "Error en cancel·lar subscripció de la llista", + "Error changing power level requirement": "Error en canviar requisit del nivell d'autoritat", + "Error changing power level": "Error en canviar nivell d'autoritat", + "Error updating main address": "Error actualitzant adreça principal", + "Error creating address": "Error creant adreça", + "Error removing address": "Error eliminant adreça", + "There was an error removing that address. It may no longer exist or a temporary error occurred.": "S'ha produït un error en eliminar l'adreça. Pot ser que ja no existeixi o que s'hagi produït un error temporal.", + "There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "S'ha produït un error en crear l'adreça. Pot ser que el servidor no ho permeti o que s'hagi produït un error temporal.", + "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "S'ha produït un error en actualitzar l'adreça alternativa de la sala. Pot ser que el servidor no ho permeti o que s'hagi produït un error temporal.", + "%(errcode)s was returned while trying to access the room. If you think you're seeing this message in error, please submit a bug report.": "S'ha retornat %(errcode)s mentre s'intentava accedir a la sala. Si creus que aquest missatge és un error, envia un informe d'error.", + "Error removing ignored user/server": "Error eliminant usuari/servidor ignorat", + "Error subscribing to list": "Error subscrivint-se a la llista", + "Error adding ignored user/server": "Error afegint usuari/servidor ignorat", + "Error downloading theme information.": "Error baixant informació de tema.", + "Unexpected server error trying to leave the room": "Error de servidor inesperat intentant sortir de la sala", + "Error leaving room": "Error sortint de la sala", + "Unexpected error resolving identity server configuration": "Error inesperat resolent la configuració del servidor d'identitat", + "Unexpected error resolving homeserver configuration": "Error inesperat resolent la configuració del servidor local", + "(an error occurred)": "(s'ha produït un error)", + "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Els gestors d'integracions reben dades de configuració i poden modificar ginys, enviar invitacions a sales i establir nivells d'autoritat en nom teu.", + "An error occurred changing the room's power level requirements. Ensure you have sufficient permissions and try again.": "S'ha produït un error en canviar els requisits del nivell d'autoritat de la sala. Assegura't que tens suficients permisos i torna-ho a provar.", + "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "S'ha produït un error en canviar el nivell d'autoritat de l'usuari. Assegura't que tens suficients permisos i torna-ho a provar.", + "Power level": "Nivell d'autoritat", + "Unbans user with given ID": "Desbandeja l'usuari amb l'ID indicat", + "Unrecognised room address:": "Adreça de sala no reconeguda:", + "Joins room with given address": "S'uneix a la sala amb l'adreça indicada", + "Use an identity server": "Utilitza un servidor d'identitat", + "Failed to set topic": "No s'ha pogut establir el tema", + "Changes your avatar in all rooms": "Canvia el teu avatar en totes les sales", + "Changes your avatar in this current room only": "Canvia el teu avatar només en aquesta sala actual", + "Changes the avatar of the current room": "Canvia l'avatar de la sala actual", + "Changes your display nickname in the current room only": "Canvia el teu àlies de visualització només en la sala actual", + "Double check that your server supports the room version chosen and try again.": "Comprova que el teu servidor és compatible amb la versió de sala que has triat i torna-ho a intentar.", + "You do not have the required permissions to use this command.": "No disposes dels permisos necessaris per utilitzar aquesta ordre.", + "Sends a message as html, without interpreting it as markdown": "Envia un missatge com a html sense interpretar-lo com a markdown", + "Sends a message as plain text, without interpreting it as markdown": "Envia un missatge com a text pla sense interpretar-lo com a markdown", + "Prepends ( ͡° ͜ʖ ͡°) to a plain-text message": "Afegeix ( ͡° ͜ʖ ͡°) al principi d'un missatge de text pla", + "Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Afegeix ¯\\_(ツ)_/¯ al principi d'un missatge de text pla", + "Other": "Altres", + "Actions": "Accions", + "Messages": "Missatges", + "Setting up keys": "Configurant claus", + "Go Back": "Torna", + "Are you sure you want to cancel entering passphrase?": "Estàs segur que vols cancel·lar la introducció de la frase secreta?", + "Cancel entering passphrase?": "Vols cancel·lar la introducció de la frase secreta?", + "Custom (%(level)s)": "Personalitzat (%(level)s)", + "Sign In": "Inicia sessió", + "Create Account": "Crea un compte", + "Use your account or create a new one to continue.": "Utilitza el teu compte o crea'n un de nou per continuar.", + "Sign In or Create Account": "Inicia sessió o Crea un compte", + "%(name)s is requesting verification": "%(name)s està demanant verificació", + "Trust": "Confiança", + "Only continue if you trust the owner of the server.": "Continua, només, si confies amb el propietari del servidor.", + "Identity server has no terms of service": "El servidor d'identitat no disposa de condicions de servei", + "This action requires accessing the default identity server to validate an email address or phone number, but the server does not have any terms of service.": "Aquesta acció necessita accedir al servidor d'identitat predeterminat per validar una adreça de correu electrònic o un número de telèfon, però el servidor no disposa de condicions de servei.", + "Room name or address": "Nom o adreça de la sala", + "Name or Matrix ID": "Nom o ID de Matrix", + "The server does not support the room version specified.": "El servidor no és compatible amb la versió de sala especificada.", + "The file '%(fileName)s' failed to upload.": "No s'ha pogut pujar el fitxer '%(fileName)s'.", + "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "En aquests moments no és possible respondre amb un fitxer. Vols pujar aquest fitxer sense respondre?", + "Replying With Files": "Responent amb fitxers", + "Answered Elsewhere": "Respost en una altra banda", + "Your user agent": "El teu agent d'usuari", + "Find a room… (e.g. %(exampleRoom)s)": "Cerca un sala... (p.e. %(exampleRoom)s)", + "e.g. my-room": "p.e. la-meva-sala", + "New published address (e.g. #alias:server)": "Nova adreça publicada (p.e. #alias:server)", + "Whether you're using %(brand)s as an installed Progressive Web App": "Si estàs utilitzant %(brand)s com a una instal·lació d'una Aplicació Web Progressiva (PWA)", + "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Si estàs utilitzant, o no, la funció 'molles de pa' (avatars a sobre la llista de sales)", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Si estàs utilitzant %(brand)s en un dispositiu on el tàctil és el principal mecanisme d'entrada", + "If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Si no has eliminat el mètode de recuperació, pot ser que un atacant estigui intentant accedir al teu compte. Canvia la teva contrasenya i configura un nou mètode de recuperació a Configuració, immediatament.", + "If you didn't set the new recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Si no has configurat el teu mètode de recuperació, pot ser que un atacant estigui intentant accedir al teu compte. Canvia la teva contrasenya i configura un nou mètode de recuperació a Configuració, immediatament.", + "You can also set up Secure Backup & manage your keys in Settings.": "També pots configurar la còpia de seguretat segura i gestionar les teves claus a Configuració.", + "You've previously used %(brand)s on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, %(brand)s needs to resync your account.": "Prèviament has fet servir %(brand)s a %(host)s amb la càrrega mandrosa de membres activada. En aquesta versió la càrrega mandrosa està desactivada. Com que la memòria cau local no és compatible entre les dues versions, %(brand)s necessita tornar a sincronitzar el teu compte.", + "Show info about bridges in room settings": "Mostra informació d'enllaços a la configuració de sala", + "Use an identity server to invite by email. Manage in Settings.": "Utilitza un servidor d'identitat per convidar per correu electrònic. Gestiona'l a Configuració.", + "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Utilitza un servidor d'identitat per poder convidar per correu electrònic. Fes clic a continua per a utilitzar el servidor d'identitat predeterminat (%(defaultIdentityServerName)s) o gestiona'l a Configuració.", + "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Utilitza un servidor d'identitat per poder convidar per correu electrònic. Utilitza el predeterminat (%(defaultIdentityServerName)s) o gestiona'l a Configuració.", + "Use an identity server to invite by email. Manage in Settings.": "Utilitza un servidor d'identitat per poder convidar per correu electrònic. Gestiona'l a Configuració.", + "Integrations not allowed": "No es permeten integracions", + "Integrations are disabled": "Les integracions estan desactivades", + "Manage integrations": "Gestió d'integracions", + "Community settings": "Configuració de comunitat", + "Notification settings": "Configuració de notificacions", + "Room Settings - %(roomName)s": "Configuració de sala - %(roomName)s", + "Confirm this user's session by comparing the following with their User Settings:": "Confirma aquesta sessió d'usuari comparant amb la seva configuració d'usuari, el següent:", + "Confirm by comparing the following with the User Settings in your other session:": "Confirma comparant el següent amb la configuració d'usuari de la teva altra sessió:", + "Room settings": "Configuració de sala", + "Appearance Settings only affect this %(brand)s session.": "La configuració d'aspecte només afecta aquesta sessió %(brand)s.", + "Change notification settings": "Canvia la configuració de notificacions", + "⚠ These settings are meant for advanced users.": "⚠ Aquesta configuració està pensada per usuaris avançats.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Per rebre invitacions directament a %(brand)s, enllaça aquest correu electrònic amb el teu compte a Configuració.", + "Change settings": "Canvia la configuració", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Per rebre invitacions directament a %(brand)s, utilitza un servidor d'identitat a Configuració.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Per rebre invitacions directament a %(brand)s, comparteix aquest correu electrònic a Configuració.", + "Enable 'Manage Integrations' in Settings to do this.": "Per fer això, activa 'Gestió d'integracions' a Configuració.", + "We recommend you change your password and recovery key in Settings immediately": "Et recomanem que canviïs immediatament la teva contrasenya i clau de recuperació a Configuració", + "Go to Settings": "Ves a Configuració", + "No identity server is configured: add one in server settings to reset your password.": "No hi ha cap servidor d'identitat configurat: afegeix-ne un a la configuració del servidor per poder restablir la teva contrasenya.", + "User settings": "Configuració d'usuari", + "All settings": "Totes les configuracions", + "This will end the conference for everyone. Continue?": "Això finalitzarà la conferència per a tothom. Vols continuar?", + "End conference": "Finalitza la conferència", + "Alternatively, you can try to use the public server at turn.matrix.org, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Com a alternativa, pots provar d'utilitzar el servidor públic a turn.matrix.org, però no serà tant fiable i compartirà la teva IP amb el servidor. També pots gestionar-ho a Configuració.", + "Try using turn.matrix.org": "Prova d'utilitzar turn.matrix.org", + "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Demana a l'administrador del servidor local (%(homeserverDomain)s) que configuri un servidor TURN perquè les trucades funcionin de manera fiable.", + "Call failed due to misconfigured server": "La trucada ha fallat a causa d'una configuració errònia al servidor", + "The call was answered on another device.": "La trucada s'ha respost des d'un altre dispositiu.", + "The call could not be established": "No s'ha pogut establir la trucada", + "The other party declined the call.": "L'altra part ha rebutjat la trucada.", + "Call Declined": "Trucada rebutjada", + "Add Phone Number": "Afegeix número de telèfon", + "Confirm adding email": "Confirma l'addició del correu electrònic", + "To continue, use Single Sign On to prove your identity.": "Per continuar, utilitza la inscripció única SSO (per demostrar la teva identitat).", + "Confirm your account deactivation by using Single Sign On to prove your identity.": "Confirma la desactivació del teu compte mitjançant la inscripció única SSO (per demostrar la teva identitat).", + "Confirm deleting these sessions by using Single Sign On to prove your identity.|one": "Confirma l'eliminació d'aquesta sessió mitjançant la inscripció única SSO (per demostrar la teva identitat).", + "Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "Confirma l'eliminació d'aquestes sessions mitjançant la inscripció única SSO (per demostrar la teva identitat).", + "Confirm adding this phone number by using Single Sign On to prove your identity.": "Confirma l'addició d'aquest número de telèfon mitjançant la inscripció única SSO (per demostrar la teva identitat).", + "Confirm adding this email address by using Single Sign On to prove your identity.": "Confirma l'addició d'aquest correu electrònic mitjançant la inscripció única SSO (per demostrar la teva identitat).", + "Sign in with single sign-on": "Inicia sessió mitjançant la inscripció única (SSO)", + "Single Sign On": "Inscripció única (SSO)", + "Use Single Sign On to continue": "Utilitza la inscripció única (SSO) per a continuar", + "Click the button below to confirm adding this phone number.": "Fes clic al botó de sota per confirmar l'addició d'aquest número de telèfon.", + "Confirm adding phone number": "Confirma l'addició del número de telèfon", + "Add Email Address": "Afegeix una adreça de correu electrònic", + "Confirm": "Confirma", + "Click the button below to confirm adding this email address.": "Fes clic al botó de sota per confirmar l'addició d'aquesta adreça de correu electrònic." } From f4f3dbfcb6f2c14ea52c31688dc9771823d4815f Mon Sep 17 00:00:00 2001 From: XoseM Date: Thu, 5 Nov 2020 03:35:49 +0000 Subject: [PATCH 028/115] Translated using Weblate (Galician) Currently translated at 100.0% (2380 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index dc3e0ff1e4..17de8cc096 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2561,5 +2561,18 @@ "Add comment": "Engadir comentario", "Please go into as much detail as you like, so we can track down the problem.": "Podes entrar en detalle canto desexes, así poderemos entender mellor o problema.", "%(senderName)s ended the call": "%(senderName)s finalizou a chamada", - "You ended the call": "Finalizaches a chamada" + "You ended the call": "Finalizaches a chamada", + "Now, let's help you get started": "Ímosche axudar neste comezo", + "Welcome %(name)s": "Benvida %(name)s", + "Add a photo so people know it's you.": "Engade unha foto así a xente recoñecerate.", + "Great, that'll help people know it's you": "Moi ben, así axudarás a que outras persoas te recoñezan", + "Invite someone using their name, email address, username (like ) or share this room.": "Convida a persoas usando o seu nome, enderezo de email, nome de usuaria (como ) ou comparte esta sala.", + "Start a conversation with someone using their name, email address or username (like ).": "Inicia unha conversa con alguén usando o seu nome, enderezo de email ou nome de usuaria (como ).", + "Invite by email": "Convidar por email", + "Use the + to make a new room or explore existing ones below": "Usa o + para crear unha nova sala ou explora as existentes embaixo", + "Offline encrypted messaging using dehydrated devices": "Mensaxería cifrada offline usando dispositivos \"deshidratados\"", + "New version of %(brand)s is available": "Hai unha nova versión de %(brand)s dispoñible", + "Update %(brand)s": "Actualizar %(brand)s", + "Enable desktop notifications": "Activar notificacións de escritorio", + "Don't miss a reply": "Non perdas as réplicas" } From 7705e6185eb3337247bc625087b2322f928f039f Mon Sep 17 00:00:00 2001 From: TR_SLimey Date: Fri, 6 Nov 2020 17:17:10 +0000 Subject: [PATCH 029/115] Translated using Weblate (Polish) Currently translated at 62.9% (1498 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/pl/ --- src/i18n/strings/pl.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index d22fe3d4a0..8122e93f45 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -1572,5 +1572,17 @@ "The other party declined the call.": "Połączenie zostało odrzucone przez drugą stronę.", "Call Declined": "Połączenie odrzucone", "Messages in this room are end-to-end encrypted.": "Wiadomości w tym pokoju są szyfrowane end-to-end.", - "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Klucz podpisujący, który podano jest taki sam jak klucz podpisujący otrzymany od %(userId)s oraz sesji %(deviceId)s. Sesja została oznaczona jako zweryfikowana." + "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Klucz podpisujący, który podano jest taki sam jak klucz podpisujący otrzymany od %(userId)s oraz sesji %(deviceId)s. Sesja została oznaczona jako zweryfikowana.", + "Sends a message to the given user": "Wysyła wiadomość do wybranego użytkownika", + "Opens chat with the given user": "Otwiera rozmowę z wybranym użytkownikiem", + "Please supply a widget URL or embed code": "Proszę podać adres URL widżetu lub embed code", + "Command failed": "Wykonywanie komendy nie powiodło się", + "Unrecognised room address:": "Nieznany adres pokoju:", + "Joins room with given address": "Dołącz do pokoju o wybranym adresie", + "Prepends ( ͡° ͜ʖ ͡°) to a plain-text message": "Dodaje ( ͡° ͜ʖ ͡°) na początku wiadomości tekstowej", + "Are you sure you want to cancel entering passphrase?": "Czy na pewno chcesz anulować wpisywanie hasła?", + "Cancel entering passphrase?": "Anulować wpisywanie hasła?", + "Room name or address": "Nazwa lub adres pokoju", + "This will end the conference for everyone. Continue?": "Czy na pewno chcesz zakończyc połączenie grupowe? To zakończy je dla wszystkich uczestnikow.", + "End conference": "Zakończ połączenie grupowe" } From ae0e525b4bc8247257f6e1962442725da6dd658f Mon Sep 17 00:00:00 2001 From: random Date: Sat, 7 Nov 2020 10:57:59 +0000 Subject: [PATCH 030/115] Translated using Weblate (Italian) Currently translated at 99.9% (2379 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 9138bb86f9..36ba1477e6 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -797,7 +797,7 @@ "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Il tuo account sarà permanentemente inutilizzabile. Non potrai accedere e nessuno potrà ri-registrare lo stesso ID utente. Il tuo account abbandonerà tutte le stanze a cui partecipa e i dettagli del tuo account saranno rimossi dal server di identità. Questa azione è irreversibile.", "Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "Disattivare il tuo account non eliminerà in modo predefinito i messaggi che hai inviato. Se vuoi che noi dimentichiamo i tuoi messaggi, seleziona la casella sotto.", "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "La visibilità dei messaggi in Matrix è simile alle email. Se dimentichiamo i messaggi significa che quelli che hai inviato non verranno condivisi con alcun utente nuovo o non registrato, ma gli utenti registrati che avevano già accesso ai messaggi avranno ancora accesso alla loro copia.", - "Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "Per favore dimenticate tutti i messaggi che ho inviato quando il mio account viene disattivato (Attenzione: gli utenti futuri vedranno un elenco incompleto di conversazioni)", + "Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "Per favore dimenticate tutti i messaggi che ho inviato quando il mio account viene disattivato (Attenzione: gli utenti futuri vedranno un elenco incompleto di conversazioni)", "To continue, please enter your password:": "Per continuare, inserisci la tua password:", "Can't leave Server Notices room": "Impossibile abbandonare la stanza Notifiche Server", "This room is used for important messages from the Homeserver, so you cannot leave it.": "Questa stanza viene usata per messaggi importanti dall'homeserver, quindi non puoi lasciarla.", @@ -833,7 +833,7 @@ "The email field must not be blank.": "Il campo email non deve essere vuoto.", "The phone number field must not be blank.": "Il campo telefono non deve essere vuoto.", "The password field must not be blank.": "Il campo passwordl non deve essere vuoto.", - "You can't send any messages until you review and agree to our terms and conditions.": "Non è possibile inviare alcun messaggio fino a quando non si esaminano e si accettano i nostri termini e condizioni .", + "You can't send any messages until you review and agree to our terms and conditions.": "Non puoi inviare alcun messaggio fino a quando non leggi ed accetti i nostri termini e condizioni.", "A call is currently being placed!": "Attualmente c'è una chiamata in corso!", "System Alerts": "Avvisi di sistema", "Failed to remove widget": "Rimozione del widget fallita", @@ -893,7 +893,7 @@ "Predictable substitutions like '@' instead of 'a' don't help very much": "Sostituzioni prevedibili come '@' al posto di 'a' non aiutano molto", "Add another word or two. Uncommon words are better.": "Aggiungi ancora una o due parole. Meglio parole non comuni.", "Repeats like \"aaa\" are easy to guess": "Ripetizioni come \"aaa\" sono facili da indovinare", - "Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Ripetizioni come \"abcabcabc\" sono solo leggermente più difficili da indovinare di \"abc\"", + "Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Ripetizioni come \"abcabcabc\" sono solo leggermente più difficili da indovinare di \"abc\"", "Sequences like abc or 6543 are easy to guess": "Sequenze come abc o 6543 sono facili da indovinare", "Recent years are easy to guess": "Gli anni recenti sono facili da indovinare", "Dates are often easy to guess": "Le date sono spesso facili da indovinare", @@ -2564,5 +2564,17 @@ "Rate %(brand)s": "Valuta %(brand)s", "Feedback sent": "Feedback inviato", "%(senderName)s ended the call": "%(senderName)s ha terminato la chiamata", - "You ended the call": "Hai terminato la chiamata" + "You ended the call": "Hai terminato la chiamata", + "Now, let's help you get started": "Alcuni consigli per iniziare", + "Welcome %(name)s": "Benvenuto/a %(name)s", + "Add a photo so people know it's you.": "Aggiungi una foto in modo che le persone ti riconoscano.", + "Great, that'll help people know it's you": "Ottimo, ciò aiuterà le persone a capire che sei tu", + "Invite someone using their name, email address, username (like ) or share this room.": "Invita qualcuno usando il suo nome, indirizzo email, nome utente (come ) o condividi questa stanza.", + "Start a conversation with someone using their name, email address or username (like ).": "Inizia una conversazione con qualcuno usando il suo nome, indirizzo email o nome utente (come ).", + "Invite by email": "Invita per email", + "Use the + to make a new room or explore existing ones below": "Usa la + per creare una nuova stanza o esplorare quelle esistenti sotto", + "New version of %(brand)s is available": "Nuova versione di %(brand)s disponibile", + "Update %(brand)s": "Aggiorna %(brand)s", + "Enable desktop notifications": "Attiva le notifiche desktop", + "Don't miss a reply": "Non perdere una risposta" } From fc14d980ff951839f85525115ab0ef59a10504a1 Mon Sep 17 00:00:00 2001 From: Kaede Date: Mon, 9 Nov 2020 01:56:55 +0000 Subject: [PATCH 031/115] Translated using Weblate (Japanese) Currently translated at 57.5% (1369 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/ja/ --- src/i18n/strings/ja.json | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index bab5b35125..cc38ef5d39 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -151,7 +151,7 @@ "Preparing to send logs": "ログを送信する準備をしています", "Explore Account Data": "アカウントのデータを調べる", "The server may be unavailable or overloaded": "サーバは使用できないか、オーバーロードされています", - "Reject": "やめる", + "Reject": "拒否する", "Failed to set Direct Message status of room": "部屋のダイレクトメッセージステータスの設定に失敗しました", "Remove from Directory": "ディレクトリから消去する", "Enable them now": "今有効化する", @@ -1433,5 +1433,31 @@ "Go back": "戻る", "To help avoid duplicate issues, please view existing issues first (and add a +1) or create a new issue if you can't find it.": "重複した issue の報告が発生しないようにするため、まず既存の issue を確認してあなたが行おうとしているのと同様の報告が見つかった場合はその issue を +1 してください。見つからなかった場合は、新しい issue を作成して報告を行ってください。", "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "バグが発生したり、共有したいフィードバックがある場合は、GitHub でお知らせください。", - "Report bugs & give feedback": "バグ報告とフィードバック" + "Report bugs & give feedback": "バグ報告とフィードバック", + "Everyone in this room is verified": "この部屋内の全員を検証済み", + "Verify all users in a room to ensure it's secure.": "この部屋内のすべてのユーザーが安全であることを確認しました。", + "You've successfully verified %(displayName)s!": "%(displayName)s は正常に検証されました。", + "You've successfully verified %(deviceName)s (%(deviceId)s)!": "%(deviceName)s (%(deviceId)s) は正常に検証されました。", + "You've successfully verified your device!": "このデバイスは正常に検証されました。", + "You've successfully verified this user.": "このユーザーは正常に検証されました。", + "Reject & Ignore user": "拒否した上でこのユーザーを無視する", + " invited you": " があなたを招待しています", + "Do you want to join %(roomName)s?": "%(roomName)s に参加しますか?", + "Start chatting": "チャットを開始", + " wants to chat": " がチャット開始を求めています", + "Do you want to chat with %(user)s?": "%(user)s とのチャットを開始しますか?", + "Use the Desktop app to search encrypted messages": "デスクトップアプリを使用すると暗号化されたメッセージを検索できます", + "You have no visible notifications in this room.": "この部屋に確認すべき通知はありません。", + "You’re all caught up": "確認するものはありません", + "Got it": "了解", + "Got It": "了解", + "Accepting…": "了承中…", + "Waiting for %(displayName)s to verify…": "%(displayName)s が検証するのを待っています…", + "Waiting for %(displayName)s to accept…": "%(displayName)s が了承するのを待っています…", + "Room avatar": "部屋のアバター", + "Start Verification": "検証を開始", + "For extra security, verify this user by checking a one-time code on both of your devices.": "セキュリティ強化するために、両者のデバイスでワンタイムコードを確認し、このユーザーを検証することができます。", + "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "あなたのメッセージは保護されており、あなたと宛先だけが保護を解除してメッセージを閲覧するための固有の鍵を持っています。", + "%(name)s wants to verify": "%(name)s が検証を求めています", + "You sent a verification request": "あなたが検証リクエストを送信しました" } From f3042e3c187c5946a8f46946a83a1d2a34b6c9ea Mon Sep 17 00:00:00 2001 From: Slavi Pantaleev Date: Mon, 9 Nov 2020 08:18:25 +0000 Subject: [PATCH 032/115] Translated using Weblate (Bulgarian) Currently translated at 98.2% (2339 of 2380 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/bg/ --- src/i18n/strings/bg.json | 144 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 143 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json index 980e3117eb..e03215cb04 100644 --- a/src/i18n/strings/bg.json +++ b/src/i18n/strings/bg.json @@ -2347,5 +2347,147 @@ "🎉 All servers are banned from participating! This room can no longer be used.": "🎉 Всички сървъри за възбранени от участие! Тази стая вече не може да бъде използвана.", "%(senderDisplayName)s changed the server ACLs for this room.": "%(senderDisplayName)s промени сървърните разрешения за контрол на достъпа до тази стая.", "Prepends ( ͡° ͜ʖ ͡°) to a plain-text message": "Добавя ( ͡° ͜ʖ ͡°) в началото на текстовото съобщение", - "The call was answered on another device.": "На обаждането беше отговорено от друго устройство." + "The call was answered on another device.": "На обаждането беше отговорено от друго устройство.", + "This room is public": "Тази стая е публична", + "Move right": "Премести надясно", + "Move left": "Премести наляво", + "Revoke permissions": "Оттеглете привилегии", + "Take a picture": "Направете снимка", + "Unable to set up keys": "Неуспешна настройка на ключовете", + "Use your Security Key to continue.": "Използвайте ключа си за сигурност за да продължите.", + "Security Key": "Ключ за сигурност", + "Enter your Security Phrase or to continue.": "Въведете защитната фраза или за да продължите.", + "Security Phrase": "Защитна фраза", + "Invalid Recovery Key": "Невалиден ключ за възстановяване", + "Wrong Recovery Key": "Грешен ключ за възстановяване", + "Looks good!": "Изглежда добре!", + "Wrong file type": "Грешен тип файл", + "Recent changes that have not yet been received": "Скорошни промени, които още не са били получени", + "The server is not configured to indicate what the problem is (CORS).": "Сървърът не е конфигуриран да укаже какъв е проблемът (CORS).", + "A connection error occurred while trying to contact the server.": "Възникнал е проблем с връзката при свързване към сървъра.", + "Your area is experiencing difficulties connecting to the internet.": "В районът ви има проблеми с връзката с интернет.", + "The server has denied your request.": "Сървърът е забранил заявката ви.", + "The server is offline.": "Сървърът е офлайн.", + "A browser extension is preventing the request.": "Разширение на браузъра блокира заявката.", + "Your firewall or anti-virus is blocking the request.": "Защитната ви стена (firewall) или антивирусен софтуер блокират заявката.", + "The server (%(serverName)s) took too long to respond.": "Сървърът %(serverName)s отне твърде дълго да отговори.", + "Your server isn't responding to some of your requests. Below are some of the most likely reasons.": "Сървърът ви не отговаря на някой от заявките ви. По-долу са някои от най-вероятните причини.", + "Server isn't responding": "Сървърът не отговаря", + "You're all caught up.": "Наваксали сте с всичко.", + "Data on this screen is shared with %(widgetDomain)s": "Данните на този екран са споделени с %(widgetDomain)s", + "Modal Widget": "Модално приспособление", + "Invite someone using their name, username (like ) or share this room.": "Поканете някой по име, потребителско име (като ) или споделете тази стая.", + "Invite someone using their name, email address, username (like ) or share this room.": "Поканете някой по име, имейл адрес, потребителско име (като ) или споделете тази стая.", + "This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click here": "Това няма да ги покани в %(communityName)s. За да поканите някой в %(communityName)s, кликнете тук", + "Start a conversation with someone using their name or username (like ).": "Започнете разговор с някой използвайки тяхното име или потребителско име (като ).", + "Start a conversation with someone using their name, email address or username (like ).": "Започнете разговор с някой използвайки тяхното име, имейл адрес или потребителско име (като ).", + "May include members not in %(communityName)s": "Може да съдържа членове, които не са в %(communityName)s", + "Invite by email": "Покани по имейл", + "Send feedback": "Изпрати обратна връзка", + "PRO TIP: If you start a bug, please submit debug logs to help us track down the problem.": "ПРОФЕСИОНАЛЕН СЪВЕТ: Ако ще съобщавате за проблем, изпратете и логове за разработчици за да ни помогнете да открием проблема.", + "Please view existing bugs on Github first. No match? Start a new one.": "Първо прегледайте съществуващите проблеми в Github. Няма подобни? Създайте нов.", + "Report a bug": "Съобщете за проблем", + "There are two ways you can provide feedback and help us improve %(brand)s.": "Има два начина да дадете обратна връзка и да ни помогнете да подобрим %(brand)s.", + "Comment": "Коментар", + "Add comment": "Добави коментар", + "Please go into as much detail as you like, so we can track down the problem.": "Моля, разкажете колкото подробно желаете, за да можем да открием проблема.", + "Tell us below how you feel about %(brand)s so far.": "Кажете ни какво мислите за %(brand)s към този момент.", + "Rate %(brand)s": "Оценете %(brand)s", + "Feedback sent": "Обратната връзка беше изпратена", + "Update community": "Обнови общността", + "There was an error updating your community. The server is unable to process your request.": "Възникна грешка при обновяването на общността. Сървърът не може да обработки заявката ви.", + "Block anyone not part of %(serverName)s from ever joining this room.": "Блокирай всеки, който не е част от %(serverName)s от присъединяване в тази стая.", + "Create a room in %(communityName)s": "Създай стая в %(communityName)s", + "You might disable this if the room will be used for collaborating with external teams who have their own homeserver. This cannot be changed later.": "Може да изключите това, ако стаята ще се използва за съвместна работа с външни екипи, имащи собствен сървър. Това не може да бъде променено по-късно.", + "You might enable this if the room will only be used for collaborating with internal teams on your homeserver. This cannot be changed later.": "Може да включите това, ако стаята ще се използва само за съвместна работа на вътрешни екипи на сървъра ви. Това не може да бъде променено по-късно.", + "Your server requires encryption to be enabled in private rooms.": "Сървърът ви изисква в частните стаи да е включено шифроване.", + "Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone in this community.": "Към частните стаи присъединяването е само с покана. Публичните могат да бъдат открити и присъединени от всеки в тази общност.", + "Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone.": "Към частните стаи присъединяването е само с покана. Публичните могат да бъдат открити и присъединени от всеки.", + "An image will help people identify your community.": "Снимката би помогнала на хората да идентифицират общността ви.", + "Add image (optional)": "Добавете снимка (незадължително)", + "Enter name": "Въведете име", + "What's the name of your community or team?": "Какво е името на общността или екипа ви?", + "You can change this later if needed.": "Може да промените това и по-късно, ако е нужно.", + "Use this when referencing your community to others. The community ID cannot be changed.": "Използвайте това когато се обръщате към общността сред други хора. Идентификатора не може да бъде променен.", + "Community ID: +:%(domain)s": "Идентификатор на общност: +:%(domain)s", + "There was an error creating your community. The name may be taken or the server is unable to process your request.": "Възникна грешка при създаването на общността. Името може да е заето или пък сървърът не може да обработи заявката.", + "Invite people to join %(communityName)s": "Поканете хора в %(communityName)s", + "Send %(count)s invites|one": "Изпрати %(count)s покана", + "Send %(count)s invites|other": "Изпрати %(count)s покани", + "People you know on %(brand)s": "Хора, които познаване в %(brand)s", + "Add another email": "Добави друг имейл", + "Download logs": "Изтегли на логове", + "Preparing to download logs": "Подготвяне за изтегляне на логове", + "Information": "Информация", + "This version of %(brand)s does not support searching encrypted messages": "Тази версия на %(brand)s не поддържа търсенето в шифровани съобщения", + "This version of %(brand)s does not support viewing some encrypted files": "Тази версия на %(brand)s не поддържа преглеждането на някои шифровани файлове", + "Use the Desktop app to search encrypted messages": "Използвайте Desktop приложението за да търсите в шифровани съобщения", + "Use the Desktop app to see all encrypted files": "Използвайте Desktop приложението за да видите всички шифровани файлове", + "Click to view edits": "Кликнете за да видите редакциите", + "Edited at %(date)s": "Редактирано на %(date)s", + "Message deleted on %(date)s": "Съобщението изтрито на %(date)s", + "Video conference started by %(senderName)s": "Видео конференцията беше стартирана от %(senderName)s", + "Video conference updated by %(senderName)s": "Видео конференцията беше обновена от %(senderName)s", + "Video conference ended by %(senderName)s": "Видео конференцията беше прекратена от %(senderName)s", + "Join the conference from the room information card on the right": "Присъединете се към конференцията от информацията за стаята в дясно", + "Join the conference at the top of this room": "Присъединете се към конференцията в горната част на стаята", + "Ignored attempt to disable encryption": "Опитът за изключване на шифроването беше игнориран", + "Room settings": "Настройки на стаята", + "Show files": "Покажи файловете", + "%(count)s people|other": "%(count)s човека", + "%(count)s people|one": "%(count)s човек", + "About": "Относно", + "Not encrypted": "Не е шифровано", + "Add widgets, bridges & bots": "Добави приспособления, мостове и ботове", + "Edit widgets, bridges & bots": "Промени приспособления, мостове и ботове", + "Widgets": "Приспособления", + "Unpin a widget to view it in this panel": "Разкачете приспособление за да го видите в този панел", + "Unpin": "Разкачи", + "You can only pin up to %(count)s widgets|other": "Може да закачите максимум %(count)s приспособления", + "Room Info": "Информация за стаята", + "Favourited": "В любими", + "Forget Room": "Забрави стаята", + "Notification options": "Настройки за уведомление", + "Mentions & Keywords": "Споменавания и ключови думи", + "Use default": "Използвай по подразбиране", + "Show previews of messages": "Показвай преглед на съобщенията", + "Show rooms with unread messages first": "Показвай стаи с непрочетени съобщения първи", + "%(count)s results|one": "%(count)s резултат", + "%(count)s results|other": "%(count)s резултата", + "Use the + to make a new room or explore existing ones below": "Използвайте + за да направите нова стая или да прегледате съществуващите", + "Explore all public rooms": "Прегледай всички публични стаи", + "Can't see what you’re looking for?": "Не намирате това, което търсите?", + "Custom Tag": "Собствен етикет", + "Explore public rooms": "Прегледай публични стаи", + "Explore community rooms": "Прегледай стаи от общността", + "Show Widgets": "Покажи приспособленията", + "Hide Widgets": "Скрий приспособленията", + "Remove messages sent by others": "Премахвай съобщения изпратени от други", + "Privacy": "Поверителност", + "Secure Backup": "Защитено резервно копие", + "Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Настройте името на шрифт инсталиран в системата и %(brand)s ще се опита да го използва.", + "not ready": "не е готово", + "ready": "готово", + "Secret storage:": "Секретно складиране:", + "Backup key cached:": "Резервният ключ е кеширан:", + "Backup key stored:": "Резервният ключ е съхранен:", + "Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Recovery Key.": "Правете резервно копие на ключовете за шифроване и данните в профила, в случай че загубите достъп до сесиите си. Ключовете ви ще бъдат защитени с уникален ключ за възстановяване.", + "Algorithm:": "Алгоритъм:", + "Backup version:": "Версия на резервното копие:", + "The operation could not be completed": "Операцията не можа да бъде завършена", + "Failed to save your profile": "Неуспешно запазване на профила ви", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply.": "Вероятно сте ги конфигурирали в клиент различен от %(brand)s. Не можете да ги управлявате в %(brand)s, но те все пак важат.", + "There are advanced notifications which are not shown here.": "Съществуват по-сложни уведомления, които не са показани тук.", + "%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use %(brand)s Desktop for encrypted messages to appear in search results.": "%(brand)s не може да кешира шифровани съобщения локално по сигурен начин когато работи в уеб браузър. Използвайте %(brand)s Desktop за да можете да търсите шифровани съобщения.", + "Master private key:": "Главен частен ключ:", + "not found in storage": "не е намерено в складирането", + "Cross-signing is not set up.": "Кръстосаното-подписване не е настроено.", + "Cross-signing is ready for use.": "Кръстосаното-подписване е готово за използване.", + "Your server isn't responding to some requests.": "Сървърът ви не отговаря на някои заявки.", + "%(senderName)s ended the call": "%(senderName)s приключи разговора", + "You ended the call": "Приключихте разговора", + "New version of %(brand)s is available": "Налична е нова версия на %(brand)s", + "Update %(brand)s": "Обнови %(brand)s", + "Enable desktop notifications": "Включете уведомления на работния плот", + "Don't miss a reply": "Не пропускайте отговор" } From 36ef9ec341cb352b1e0a04ed45c954324c21690c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 9 Nov 2020 14:21:45 +0000 Subject: [PATCH 033/115] Update styling of the Analytics toast to try and decrease number of users blindly pressing No --- res/css/_components.scss | 1 + src/components/structures/ToastContainer.tsx | 4 ++-- src/i18n/strings/en_EN.json | 3 +-- src/stores/ToastStore.ts | 1 + src/toasts/AnalyticsToast.tsx | 3 ++- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/res/css/_components.scss b/res/css/_components.scss index 37d0e0d286..ae4b4b23fe 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -225,6 +225,7 @@ @import "./views/settings/tabs/user/_SecurityUserSettingsTab.scss"; @import "./views/settings/tabs/user/_VoiceUserSettingsTab.scss"; @import "./views/terms/_InlineTermsAgreement.scss"; +@import "./views/toasts/_AnalyticsToast.scss"; @import "./views/toasts/_NonUrgentEchoFailureToast.scss"; @import "./views/verification/_VerificationShowSas.scss"; @import "./views/voip/_CallContainer.scss"; diff --git a/src/components/structures/ToastContainer.tsx b/src/components/structures/ToastContainer.tsx index 84473031fa..513cca82c3 100644 --- a/src/components/structures/ToastContainer.tsx +++ b/src/components/structures/ToastContainer.tsx @@ -55,11 +55,11 @@ export default class ToastContainer extends React.Component<{}, IState> { let toast; if (totalCount !== 0) { const topToast = this.state.toasts[0]; - const {title, icon, key, component, props} = topToast; + const {title, icon, key, component, className, props} = topToast; const toastClasses = classNames("mx_Toast_toast", { "mx_Toast_hasIcon": icon, [`mx_Toast_icon_${icon}`]: icon, - }); + }, className); let countIndicator; if (isStacked || this.state.countSeen > 0) { diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index a56e22e5fc..bf07193acf 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -397,7 +397,7 @@ "Unknown App": "Unknown App", "Help us improve %(brand)s": "Help us improve %(brand)s", "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.", - "I want to help": "I want to help", + "Yes": "Yes", "No": "No", "Review where you’re logged in": "Review where you’re logged in", "Verify all your sessions to ensure your account & messages are safe": "Verify all your sessions to ensure your account & messages are safe", @@ -1355,7 +1355,6 @@ "Verify by emoji": "Verify by emoji", "Almost there! Is your other session showing the same shield?": "Almost there! Is your other session showing the same shield?", "Almost there! Is %(displayName)s showing the same shield?": "Almost there! Is %(displayName)s showing the same shield?", - "Yes": "Yes", "Verify all users in a room to ensure it's secure.": "Verify all users in a room to ensure it's secure.", "In encrypted rooms, verify all users to ensure it’s secure.": "In encrypted rooms, verify all users to ensure it’s secure.", "You've successfully verified your device!": "You've successfully verified your device!", diff --git a/src/stores/ToastStore.ts b/src/stores/ToastStore.ts index 038aebc7c9..850c3cb026 100644 --- a/src/stores/ToastStore.ts +++ b/src/stores/ToastStore.ts @@ -25,6 +25,7 @@ export interface IToast { title: string; icon?: string; component: C; + className?: string; props?: Omit, "toastKey">; // toastKey is injected by ToastContainer } diff --git a/src/toasts/AnalyticsToast.tsx b/src/toasts/AnalyticsToast.tsx index e0eda5fa48..5a7737b1a6 100644 --- a/src/toasts/AnalyticsToast.tsx +++ b/src/toasts/AnalyticsToast.tsx @@ -64,12 +64,13 @@ export const showToast = (policyUrl?: string) => { ) : sub, }, ), - acceptLabel: _t("I want to help"), + acceptLabel: _t("Yes"), onAccept, rejectLabel: _t("No"), onReject, }, component: GenericToast, + className: "mx_AnalyticsToast", priority: 10, }); }; From 5dd0766d35ff658dac984479bdbe93f12acb1d6c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 9 Nov 2020 14:36:12 +0000 Subject: [PATCH 034/115] Add missing scss file --- res/css/views/toasts/_AnalyticsToast.scss | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 res/css/views/toasts/_AnalyticsToast.scss diff --git a/res/css/views/toasts/_AnalyticsToast.scss b/res/css/views/toasts/_AnalyticsToast.scss new file mode 100644 index 0000000000..fdbe7f1c76 --- /dev/null +++ b/res/css/views/toasts/_AnalyticsToast.scss @@ -0,0 +1,27 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.mx_AnalyticsToast { + .mx_AccessibleButton_kind_danger { + background: none; + color: $accent-color; + } + + .mx_AccessibleButton_kind_primary { + background: $accent-color; + color: #ffffff; + } +} From 453c956d063b8d73c0f7b1d8d8235c0da79bef4e Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 9 Nov 2020 14:44:53 +0000 Subject: [PATCH 035/115] Add Analytics instrumentation to the Homepage --- src/components/structures/HomePage.tsx | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/components/structures/HomePage.tsx b/src/components/structures/HomePage.tsx index 8058ddad93..32ae40db58 100644 --- a/src/components/structures/HomePage.tsx +++ b/src/components/structures/HomePage.tsx @@ -34,10 +34,26 @@ import {useEventEmitter} from "../../hooks/useEventEmitter"; import MatrixClientContext from "../../contexts/MatrixClientContext"; import classNames from "classnames"; import {ENTERING} from "react-transition-group/Transition"; +import Analytics from "../../Analytics"; +import CountlyAnalytics from "../../CountlyAnalytics"; -const onClickSendDm = () => dis.dispatch({action: 'view_create_chat'}); -const onClickExplore = () => dis.fire(Action.ViewRoomDirectory); -const onClickNewRoom = () => dis.dispatch({action: 'view_create_room'}); +const onClickSendDm = () => { + Analytics.trackEvent('home_page', 'button', 'dm'); + CountlyAnalytics.instance.track("home_page_button", { button: "dm" }); + dis.dispatch({action: 'view_create_chat'}); +}; + +const onClickExplore = () => { + Analytics.trackEvent('home_page', 'button', 'room_directory'); + CountlyAnalytics.instance.track("home_page_button", { button: "room_directory" }); + dis.fire(Action.ViewRoomDirectory); +}; + +const onClickNewRoom = () => { + Analytics.trackEvent('home_page', 'button', 'create_room'); + CountlyAnalytics.instance.track("home_page_button", { button: "create_room" }); + dis.dispatch({action: 'view_create_room'}); +}; interface IProps { justRegistered?: boolean; @@ -69,6 +85,8 @@ const UserWelcomeTop = () => { onChange={async (ev) => { if (!ev.target.files?.length) return; setBusy(true); + Analytics.trackEvent("home_page", "upload_avatar"); + CountlyAnalytics.instance.track("home_page_upload_avatar"); const file = ev.target.files[0]; const uri = await cli.uploadContent(file); await cli.setAvatarUrl(uri); From c4e2e2124f25ec2f30c632a5cbbd7062cc2d1813 Mon Sep 17 00:00:00 2001 From: XoseM Date: Mon, 9 Nov 2020 12:56:08 +0000 Subject: [PATCH 036/115] Translated using Weblate (Galician) Currently translated at 91.3% (2402 of 2629 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 17de8cc096..9448042def 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2574,5 +2574,27 @@ "New version of %(brand)s is available": "Hai unha nova versión de %(brand)s dispoñible", "Update %(brand)s": "Actualizar %(brand)s", "Enable desktop notifications": "Activar notificacións de escritorio", - "Don't miss a reply": "Non perdas as réplicas" + "Don't miss a reply": "Non perdas as réplicas", + "Barbados": "Barbados", + "Bangladesh": "Bangladesh", + "Bahrain": "Bahrain", + "Bahamas": "Bahamas", + "Azerbaijan": "Azerbaixán", + "Austria": "Austria", + "Australia": "Australia", + "Aruba": "Aruba", + "Armenia": "Armenia", + "Argentina": "Arxentina", + "Antigua & Barbuda": "Antigua & Barbuda", + "Antarctica": "Antártida", + "Anguilla": "Anguilla", + "Angola": "Angola", + "Andorra": "Andorra", + "American Samoa": "Samoa americana", + "Algeria": "Alxeria", + "Albania": "Albania", + "Åland Islands": "Åland Islands", + "Afghanistan": "Afghanistán", + "United States": "EEUU de América", + "United Kingdom": "Reino Unido" } From efc5e88443e4af8d3e8cf4e462b9d613bc0cee70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Mon, 9 Nov 2020 14:40:39 +0000 Subject: [PATCH 037/115] Translated using Weblate (Estonian) Currently translated at 100.0% (2629 of 2629 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 251 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 250 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index ad52b7df6a..03c3d2444c 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -2575,5 +2575,254 @@ "Now, let's help you get started": "Nüüd näitame sulle, mida saad järgmiseks teha", "Invite someone using their name, email address, username (like ) or share this room.": "Kutsu teist osapoolt tema nime, e-posti aadressi, kasutajanime (nagu ) alusel või jaga seda jututuba.", "Start a conversation with someone using their name, email address or username (like ).": "Alusta vestlust kasutades teise osapoole nime, e-posti aadressi või kasutajanime (näiteks ).", - "Invite by email": "Saada kutse e-kirjaga" + "Invite by email": "Saada kutse e-kirjaga", + "Zambia": "Sambia", + "Yemen": "Jeemen", + "Western Sahara": "Lääne-Sahara", + "Wallis & Futuna": "Wallis ja Futuna", + "Vietnam": "Vietnam", + "Venezuela": "Venezuela", + "Vatican City": "Vatikan", + "Vanuatu": "Vanuatu", + "Uzbekistan": "Usbekistan", + "Uruguay": "Uruguay", + "United Arab Emirates": "Araabia Ühendemiraadid", + "Ukraine": "Ukraina", + "Uganda": "Uganda", + "U.S. Virgin Islands": "USA Neitsisaared", + "Tuvalu": "Tuvalu", + "Turks & Caicos Islands": "Turks ja Caicos", + "Turkmenistan": "Türkmenistan", + "Turkey": "Türgi", + "Tunisia": "Tuneesia", + "Trinidad & Tobago": "Trinidad ja Tobago", + "Tonga": "Tonga", + "Tokelau": "Tokelau", + "Togo": "Togo", + "Timor-Leste": "Ida-Timor", + "Thailand": "Tai", + "Tanzania": "Tansaania", + "Tajikistan": "Tadžikistan", + "Taiwan": "Taiwan", + "São Tomé & Príncipe": "São Tomé ja Príncipe", + "Syria": "Süüria", + "Switzerland": "Šveits", + "Sweden": "Rootsi", + "Swaziland": "Svaasimaa", + "Svalbard & Jan Mayen": "Svalbard ja Jan Mayen", + "Suriname": "Suriname", + "Sudan": "Sudaan", + "St. Vincent & Grenadines": "Saint Vincent", + "St. Pierre & Miquelon": "Saint-Pierre ja Miquelon", + "St. Martin": "Saint-Martin", + "St. Lucia": "Saint Lucia", + "St. Kitts & Nevis": "Saint Kitts ja Nevis", + "St. Helena": "Saint Helena", + "St. Barthélemy": "Saint-Barthélemy", + "Sri Lanka": "Sri Lanka", + "Spain": "Hispaania", + "South Sudan": "Lõuna-Sudaan", + "South Korea": "Lõuna-Korea", + "South Georgia & South Sandwich Islands": "Lõuna-Georgia ja Lõuna-Sandwichi saared", + "South Africa": "Lõuna-Aafrika Vabariik", + "Somalia": "Somaalia", + "Solomon Islands": "Saalomoni Saared", + "Slovenia": "Sloveenia", + "Slovakia": "Slovakkia", + "Sint Maarten": "Sint Maarten", + "Singapore": "Singapur", + "Sierra Leone": "Sierra Leone", + "Seychelles": "Seišellid", + "Serbia": "Serbia", + "Senegal": "Senegal", + "Saudi Arabia": "Saudi Araabia", + "San Marino": "San Marino", + "Samoa": "Samoa", + "Réunion": "Réunion", + "Rwanda": "Rwanda", + "Russia": "Venemaa", + "Romania": "Rumeenia", + "Qatar": "Katar", + "Puerto Rico": "Puerto Rico", + "Portugal": "Portugal", + "Poland": "Poola", + "Pitcairn Islands": "Pitcairn", + "Philippines": "Filipiinid", + "Peru": "Peruu", + "Paraguay": "Paraguay", + "Papua New Guinea": "Paapua Uus-Guinea", + "Panama": "Panama", + "Palestine": "Palestiina", + "Palau": "Belau", + "Pakistan": "Pakistan", + "Oman": "Omaan", + "Norway": "Norra", + "Northern Mariana Islands": "Põhja-Mariaanid", + "North Korea": "Põhja-Korea", + "Norfolk Island": "Norfolk", + "Niue": "Niue", + "Nigeria": "Nigeeria", + "Niger": "Niger", + "Nicaragua": "Nicaragua", + "New Zealand": "Uus-Meremaa", + "New Caledonia": "Uus-Kaledoonia", + "Netherlands": "Holland", + "Nepal": "Nepal", + "Nauru": "Nauru", + "Namibia": "Namiibia", + "Myanmar": "Myanmar", + "Mozambique": "Mosambiik", + "Morocco": "Maroko", + "Montserrat": "Montserrat", + "Montenegro": "Montenegro", + "Mongolia": "Mongoolia", + "Monaco": "Monaco", + "Moldova": "Moldova", + "Micronesia": "Mikroneesia", + "Mexico": "Mehhiko", + "Mayotte": "Mayotte", + "Mauritius": "Mauritius", + "Mauritania": "Mauritaania", + "Martinique": "Martinique", + "Marshall Islands": "Marshalli Saared", + "Malta": "Malta", + "Mali": "Mali", + "Maldives": "Maldiivid", + "Malaysia": "Malaisia", + "Malawi": "Malawi", + "Madagascar": "Madagaskar", + "Macedonia": "Põhja-Makedoonia", + "Macau": "Macau", + "Luxembourg": "Luksemburg", + "Lithuania": "Leedu", + "Liechtenstein": "Liechtenstein", + "Libya": "Liibüa", + "Liberia": "Libeeria", + "Lesotho": "Lesotho", + "Lebanon": "Liibanon", + "Latvia": "Läti", + "Laos": "Laos", + "Kyrgyzstan": "Kõrgõzstan", + "Kuwait": "Kuveit", + "Kosovo": "Kosovo", + "Kiribati": "Kiribati", + "Kenya": "Keenia", + "Kazakhstan": "Kasahstan", + "Jordan": "Jordaania", + "Jersey": "Jersey", + "Japan": "Jaapan", + "Jamaica": "Jamaica", + "Italy": "Itaalia", + "Israel": "Iisrael", + "Isle of Man": "Mani saar", + "Ireland": "Iirimaa", + "Iraq": "Iraak", + "Iran": "Iraan", + "Indonesia": "Indoneesia", + "India": "India", + "Iceland": "Island", + "Hungary": "Ungari", + "Hong Kong": "Hongkong", + "Honduras": "Honduras", + "Heard & McDonald Islands": "Heard ja McDonald", + "Haiti": "Haiti", + "Guyana": "Guyana", + "Guinea-Bissau": "Guinea-Bissau", + "Guinea": "Guinea", + "Guernsey": "Guernsey", + "Guatemala": "Guatemala", + "Guam": "Guam", + "Guadeloupe": "Guadeloupe", + "Grenada": "Grenada", + "Greenland": "Gröönimaa", + "Greece": "Kreeka", + "Gibraltar": "Gibraltar", + "Ghana": "Ghana", + "Germany": "Saksamaa", + "Georgia": "Gruusia", + "Gambia": "Gambia", + "Gabon": "Gabon", + "French Southern Territories": "Prantsuse Lõunaalad", + "French Polynesia": "Prantsuse Polüneesia", + "French Guiana": "Prantsuse Guajaana", + "France": "Prantsusmaa", + "Zimbabwe": "Zimbabwe", + "Finland": "Soome", + "Fiji": "Fidži", + "Faroe Islands": "Fääri saared", + "Falkland Islands": "Falklandi (Malviini) saared", + "Ethiopia": "Etioopia", + "Estonia": "Eesti", + "Eritrea": "Eritrea", + "Equatorial Guinea": "Ekvatoriaal-Guinea", + "El Salvador": "El Salvador", + "Egypt": "Egiptus", + "Ecuador": "Ecuador", + "Dominican Republic": "Dominikaani Vabariik", + "Dominica": "Dominica", + "Djibouti": "Djibouti", + "Denmark": "Taani", + "Côte d’Ivoire": "Elevandiluurannik", + "Czech Republic": "Tšehhi", + "Cyprus": "Küpros", + "Curaçao": "Curaçao", + "Cuba": "Kuuba", + "Croatia": "Horvaatia", + "Costa Rica": "Costa Rica", + "Cook Islands": "Cooki saared", + "Congo - Kinshasa": "Kongo DV", + "Congo - Brazzaville": "Kongo Vabariik", + "Comoros": "Komoorid", + "Colombia": "Colombia", + "Cocos (Keeling) Islands": "Kookossaared", + "Christmas Island": "Jõulusaar", + "China": "Hiina", + "Chile": "Tšiili", + "Chad": "Tšaad", + "Central African Republic": "Kesk-Aafrika Vabariik", + "Cayman Islands": "Kaimanisaared", + "Caribbean Netherlands": "Bonaire, Sint Eustatius ja Saba", + "Cape Verde": "Roheneemesaared", + "Canada": "Kanada", + "Cameroon": "Kamerun", + "Cambodia": "Kambodža", + "Burundi": "Burundi", + "Burkina Faso": "Burkina Faso", + "Bulgaria": "Bulgaaria", + "Brunei": "Brunei", + "British Virgin Islands": "Briti Neitsisaared", + "British Indian Ocean Territory": "Briti India ookeani ala", + "Brazil": "Brasiilia", + "Bouvet Island": "Bouvet’ saar", + "Botswana": "Botswana", + "Bosnia": "Bosnia ja Hertsegoviina", + "Bolivia": "Boliivia", + "Bhutan": "Bhutan", + "Bermuda": "Bermuda", + "Benin": "Benin", + "Belize": "Belize", + "Belgium": "Belgia", + "Belarus": "Valgevene", + "Barbados": "Barbados", + "Bangladesh": "Bangladesh", + "Bahrain": "Bahrein", + "Bahamas": "Bahama", + "Azerbaijan": "Aserbaidžaan", + "Austria": "Austria", + "Australia": "Austraalia", + "Aruba": "Aruba", + "Armenia": "Armeenia", + "Argentina": "Argentina", + "Antigua & Barbuda": "Antigua ja Barbuda", + "Antarctica": "Antarktis", + "Anguilla": "Anguilla", + "Angola": "Angola", + "Andorra": "Andorra", + "American Samoa": "Ameerika Samoa", + "Algeria": "Alžeeria", + "Albania": "Albaania", + "Åland Islands": "Ahvenamaa", + "Afghanistan": "Afganistan", + "United States": "Ameerika Ühendriigid", + "United Kingdom": "Suurbritannia" } From 7af9b68f7245a678d56df66975198e3b22b5c153 Mon Sep 17 00:00:00 2001 From: Szimszon Date: Mon, 9 Nov 2020 19:06:28 +0000 Subject: [PATCH 038/115] Translated using Weblate (Hungarian) Currently translated at 91.5% (2407 of 2629 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index f35b67cfaf..72a6811727 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2574,5 +2574,32 @@ "There are two ways you can provide feedback and help us improve %(brand)s.": "Van két lehetőséged, hogy visszajelezz vagy segíts jobbá tenni ezt: %(brand)s.", "Comment": "Megjegyzés", "Add comment": "Megjegyzés hozzáadása", - "Please go into as much detail as you like, so we can track down the problem.": "Ahhoz, hogy megérthessük a problémát olyan részletesen írd le ahogy csak szeretnéd." + "Please go into as much detail as you like, so we can track down the problem.": "Ahhoz, hogy megérthessük a problémát olyan részletesen írd le ahogy csak szeretnéd.", + "Bermuda": "Bermuda", + "Benin": "Benin", + "Belize": "Belize", + "Belgium": "Belgium", + "Belarus": "Fehéroroszország", + "Barbados": "Barbados", + "Bangladesh": "Banglades", + "Bahrain": "Bahrain", + "Bahamas": "Bahamák", + "Azerbaijan": "Azerbajdzsán", + "Austria": "Ausztria", + "Australia": "Ausztrália", + "Aruba": "Aruba", + "Armenia": "Armenia", + "Argentina": "Argentína", + "Antigua & Barbuda": "Antigua és Barbuda", + "Antarctica": "Antarktisz", + "Anguilla": "Anguilla", + "Angola": "Angola", + "Andorra": "Andorra", + "American Samoa": "Amerikai Szamoa", + "Algeria": "Algéria", + "Albania": "Albánia", + "Åland Islands": "Åland-szigetek", + "Afghanistan": "Afganisztán", + "United States": "Egyesült Államok", + "United Kingdom": "Egyesült Királyság" } From f5e9b5e96cbfd2ed2a3aada73587fe23db727818 Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Mon, 9 Nov 2020 20:47:07 +0000 Subject: [PATCH 039/115] Translated using Weblate (Portuguese (Brazil)) Currently translated at 94.8% (2494 of 2629 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/pt_BR/ --- src/i18n/strings/pt_BR.json | 116 +++++++++++++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 1d720702cf..8e0c3eea0b 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -2505,5 +2505,119 @@ "Invite by email": "Convidar por e-mail", "Use the + to make a new room or explore existing ones below": "Clique em + para criar uma nova sala ou explore as salas existentes abaixo", "New version of %(brand)s is available": "Uma nova versão do %(brand)s está disponível", - "Update %(brand)s": "Atualizar o %(brand)s" + "Update %(brand)s": "Atualizar o %(brand)s", + "Jordan": "Jordânia", + "Japan": "Japão", + "Jamaica": "Jamaica", + "Italy": "Itália", + "Israel": "Israel", + "Ireland": "Irlanda", + "Iraq": "Iraque", + "Iran": "Irã", + "Indonesia": "Indonésia", + "India": "Índia", + "Iceland": "Islândia", + "Hungary": "Hungria", + "Hong Kong": "Hong Kong", + "Honduras": "Honduras", + "Haiti": "Haiti", + "Guyana": "Guiana", + "Guinea-Bissau": "Guiné-Bissau", + "Comoros": "Comores", + "Vietnam": "Vietnã", + "Venezuela": "Venezuela", + "Uruguay": "Uruguai", + "United Arab Emirates": "Emirados Árabes Unidos", + "Ukraine": "Ucrânia", + "Uganda": "Uganda", + "Turkey": "Turquia", + "Spain": "Espanha", + "South Sudan": "Sudão do Sul", + "South Korea": "Coreia do Sul", + "South Africa": "África do Sul", + "Somalia": "Somália", + "Solomon Islands": "Ilhas Salomão", + "Slovenia": "Eslovênia", + "Slovakia": "Eslováquia", + "Singapore": "Singapura", + "Sierra Leone": "Serra Leoa", + "Serbia": "Sérvia", + "Senegal": "Senegal", + "Saudi Arabia": "Arábia Saudita", + "Russia": "Rússia", + "Romania": "Romênia", + "Puerto Rico": "Porto Rico", + "Portugal": "Portugal", + "Poland": "Polônia", + "Peru": "Peru", + "Paraguay": "Paraguai", + "Panama": "Panamá", + "Palestine": "Palestina", + "Pakistan": "Paquistão", + "Norway": "Noruega", + "North Korea": "Coreia do Norte", + "Niger": "Níger", + "Nigeria": "Nigéria", + "Nicaragua": "Nicarágua", + "New Zealand": "Nova Zelândia", + "Nepal": "Nepal", + "Nauru": "Nauru", + "Zambia": "Zâmbia", + "Zimbabwe": "Zimbábue", + "France": "França", + "Egypt": "Egito", + "Ecuador": "Equador", + "Denmark": "Dinamarca", + "Côte d’Ivoire": "Costa do Marfim", + "Cyprus": "Chipre", + "Cuba": "Cuba", + "Croatia": "Croácia", + "Costa Rica": "Costa Rica", + "Colombia": "Colômbia", + "China": "China", + "Chile": "Chile", + "Chad": "Chade", + "Cape Verde": "Cabo Verde", + "Canada": "Canadá", + "Cameroon": "Camarões", + "Cambodia": "Camboja", + "Burundi": "Burundi", + "Burkina Faso": "Burkina Faso", + "Bulgaria": "Bulgária", + "Brunei": "Brunei", + "British Virgin Islands": "Ilhas Virgens Britânicas", + "British Indian Ocean Territory": "Território Britânico do Oceano Índico", + "Brazil": "Brasil", + "Bouvet Island": "Ilha Bouvet", + "Botswana": "Botsuana", + "Bosnia": "Bósnia e Herzegovina", + "Bolivia": "Bolívia", + "Bhutan": "Butão", + "Bermuda": "Bermudas", + "Benin": "Benim", + "Belize": "Belize", + "Belgium": "Bélgica", + "Belarus": "Bielorrússia", + "Barbados": "Barbados", + "Bangladesh": "Bangladesh", + "Bahrain": "Bahrein", + "Bahamas": "Bahamas", + "Azerbaijan": "Azerbaijão", + "Austria": "Áustria", + "Australia": "Austrália", + "Aruba": "Aruba", + "Armenia": "Armênia", + "Argentina": "Argentina", + "Antigua & Barbuda": "Antígua e Barbuda", + "Antarctica": "Antártica", + "Anguilla": "Anguilla", + "Angola": "Angola", + "Andorra": "Andorra", + "American Samoa": "Samoa Americana", + "Algeria": "Argélia", + "Albania": "Albânia", + "Åland Islands": "Ilhas Aland", + "Afghanistan": "Afeganistão", + "United States": "Estados Unidos", + "United Kingdom": "Reino Unido" } From ab8dad50e68727a8083888270321c2cbad4b796f Mon Sep 17 00:00:00 2001 From: random Date: Mon, 9 Nov 2020 21:16:40 +0000 Subject: [PATCH 040/115] Translated using Weblate (Italian) Currently translated at 90.5% (2380 of 2629 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 36ba1477e6..77881bcb24 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2576,5 +2576,6 @@ "New version of %(brand)s is available": "Nuova versione di %(brand)s disponibile", "Update %(brand)s": "Aggiorna %(brand)s", "Enable desktop notifications": "Attiva le notifiche desktop", - "Don't miss a reply": "Non perdere una risposta" + "Don't miss a reply": "Non perdere una risposta", + "Modal Widget": "Widget modale" } From 220a0bc2a0c028fb8a023ed93934c5d4ab3ab8a7 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Tue, 10 Nov 2020 04:04:09 +0000 Subject: [PATCH 041/115] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2629 of 2629 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 251 +++++++++++++++++++++++++++++++++- 1 file changed, 250 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index afefbb1bc0..dbcfb743c5 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2577,5 +2577,254 @@ "New version of %(brand)s is available": "%(brand)s 的新版本已可使用", "Update %(brand)s": "更新 %(brand)s", "Enable desktop notifications": "啟用桌面通知", - "Don't miss a reply": "不要錯過回覆" + "Don't miss a reply": "不要錯過回覆", + "Zimbabwe": "辛巴威", + "Zambia": "尚比亞", + "Yemen": "葉門", + "Western Sahara": "西撒哈拉", + "Wallis & Futuna": "瓦利斯和富圖那", + "Vietnam": "越南", + "Venezuela": "委內瑞拉", + "Vatican City": "梵蒂岡", + "Vanuatu": "萬那杜", + "Uzbekistan": "烏茲別克", + "Uruguay": "烏拉圭", + "United Arab Emirates": "阿拉伯聯合大公國", + "Ukraine": "烏克蘭", + "Uganda": "烏干達", + "U.S. Virgin Islands": "美屬維京群島", + "Tuvalu": "吐瓦魯", + "Turks & Caicos Islands": "土克凱可群島", + "Turkmenistan": "土庫曼", + "Turkey": "土耳其", + "Tunisia": "突尼西亞", + "Trinidad & Tobago": "千里達及托巴哥", + "Tonga": "東加", + "Tokelau": "托克勞", + "Togo": "多哥", + "Timor-Leste": "東帝汶", + "Thailand": "泰國", + "Tanzania": "坦尚尼亞", + "Tajikistan": "塔吉克", + "Taiwan": "台灣", + "São Tomé & Príncipe": "聖多美普林西比", + "Syria": "敘利亞", + "Switzerland": "瑞士", + "Sweden": "瑞典", + "Swaziland": "史瓦帝尼", + "Svalbard & Jan Mayen": "斯瓦巴和揚馬延", + "Suriname": "蘇利南", + "Sudan": "蘇丹", + "St. Vincent & Grenadines": "聖文森及格瑞那丁", + "St. Pierre & Miquelon": "聖皮埃與密克隆", + "St. Martin": "聖馬丁", + "St. Lucia": "聖露西亞", + "St. Kitts & Nevis": "聖克里斯多福及尼維斯", + "St. Helena": "聖赫勒拿", + "St. Barthélemy": "聖巴瑟米", + "Sri Lanka": "斯里蘭卡", + "Spain": "西班牙", + "South Sudan": "南蘇丹", + "South Korea": "南韓", + "South Georgia & South Sandwich Islands": "南喬治亞與南桑威奇群島", + "South Africa": "南非", + "Somalia": "索馬利亞", + "Solomon Islands": "索羅門群島", + "Slovenia": "斯洛維尼亞", + "Slovakia": "斯洛伐克", + "Sint Maarten": "荷屬聖馬丁", + "Singapore": "新加坡", + "Sierra Leone": "獅子山", + "Seychelles": "塞席爾", + "Serbia": "塞爾維亞", + "Senegal": "塞內加爾", + "Saudi Arabia": "沙烏地阿拉伯", + "San Marino": "聖馬利諾", + "Samoa": "薩摩亞", + "Réunion": "留尼旺", + "Rwanda": "盧安達", + "Russia": "俄羅斯", + "Romania": "羅馬尼亞", + "Qatar": "卡達", + "Puerto Rico": "波多黎各", + "Portugal": "葡萄牙", + "Poland": "波蘭", + "Pitcairn Islands": "皮特肯群島", + "Philippines": "菲律賓", + "Peru": "秘魯", + "Paraguay": "巴拉圭", + "Papua New Guinea": "巴布亞紐幾內亞", + "Panama": "巴拿馬", + "Palestine": "巴勒斯坦", + "Palau": "帛琉", + "Pakistan": "巴基斯坦", + "Oman": "阿曼", + "Norway": "挪威", + "Northern Mariana Islands": "北馬利安納群島", + "North Korea": "北韓", + "Norfolk Island": "諾福克島", + "Niue": "紐埃", + "Nigeria": "奈及利亞", + "Niger": "尼日", + "Nicaragua": "尼加拉瓜", + "New Zealand": "紐西蘭", + "New Caledonia": "新喀里多尼亞", + "Netherlands": "荷蘭", + "Nepal": "尼泊爾", + "Nauru": "諾魯", + "Namibia": "納米比亞", + "Myanmar": "緬甸", + "Mozambique": "莫三比克", + "Morocco": "摩洛哥", + "Montserrat": "蒙哲臘", + "Montenegro": "蒙特內哥羅", + "Mongolia": "蒙古", + "Monaco": "摩納哥", + "Moldova": "摩爾多瓦", + "Micronesia": "密克羅尼西亞", + "Mexico": "墨西哥", + "Mayotte": "馬約特", + "Mauritius": "模里西斯", + "Mauritania": "茅利塔尼亞", + "Martinique": "馬丁尼克", + "Marshall Islands": "馬紹爾群島", + "Malta": "馬爾他", + "Mali": "馬利", + "Maldives": "馬爾地夫", + "Malaysia": "馬來西亞", + "Malawi": "馬拉威", + "Madagascar": "馬達加斯加", + "Macedonia": "馬其頓", + "Macau": "澳門", + "Luxembourg": "盧森堡", + "Lithuania": "立陶宛", + "Liechtenstein": "列支敦斯登", + "Libya": "利比亞", + "Liberia": "賴比瑞亞", + "Lesotho": "賴索托", + "Lebanon": "黎巴嫩", + "Latvia": "拉脫維亞", + "Laos": "寮國", + "Kyrgyzstan": "吉爾吉斯", + "Kuwait": "科威特", + "Kosovo": "科索沃", + "Kiribati": "吉里巴斯", + "Kenya": "肯亞", + "Kazakhstan": "哈薩克", + "Jordan": "約旦", + "Jersey": "澤西", + "Japan": "日本", + "Jamaica": "牙買加", + "Italy": "義大利", + "Israel": "以色列", + "Isle of Man": "曼島", + "Ireland": "愛爾蘭", + "Iraq": "伊拉克", + "Iran": "伊朗", + "Indonesia": "印度尼西亞", + "India": "印度", + "Iceland": "冰島", + "Hungary": "匈牙利", + "Hong Kong": "香港", + "Honduras": "宏都拉斯", + "Heard & McDonald Islands": "赫德島和麥克唐納群島", + "Haiti": "海地", + "Guyana": "蓋亞那", + "Guinea-Bissau": "幾內亞比索", + "Guinea": "幾內亞", + "Guernsey": "根西", + "Guatemala": "瓜地馬拉", + "Guam": "關島", + "Guadeloupe": "瓜地洛普", + "Grenada": "格瑞那達", + "Greenland": "格陵蘭", + "Greece": "希臘", + "Gibraltar": "直布羅陀", + "Ghana": "迦納", + "Germany": "德國", + "Georgia": "喬治亞", + "Gambia": "甘比亞", + "Gabon": "加彭", + "French Southern Territories": "法屬南部領地", + "French Polynesia": "法屬玻里尼西亞", + "French Guiana": "法屬圭亞那", + "France": "法國", + "Finland": "芬蘭", + "Fiji": "斐濟", + "Faroe Islands": "法羅群島", + "Falkland Islands": "福克蘭群島", + "Ethiopia": "衣索比亞", + "Estonia": "愛沙尼亞", + "Eritrea": "厄利垂亞", + "Equatorial Guinea": "赤道幾內亞", + "El Salvador": "薩爾瓦多", + "Egypt": "埃及", + "Ecuador": "厄瓜多", + "Dominican Republic": "多明尼加", + "Dominica": "多米尼克", + "Djibouti": "吉布地", + "Denmark": "丹麥", + "Côte d’Ivoire": "象牙海岸", + "Czech Republic": "捷克", + "Cyprus": "賽普勒斯", + "Curaçao": "古拉索", + "Cuba": "古巴", + "Croatia": "克羅埃西亞", + "Costa Rica": "哥斯大黎加", + "Cook Islands": "庫克群島", + "Congo - Kinshasa": "剛果 - 金夏沙", + "Congo - Brazzaville": "剛果 - 布拉薩", + "Comoros": "葛摩", + "Colombia": "哥倫比亞", + "Cocos (Keeling) Islands": "科科斯(基林)群島", + "Christmas Island": "聖誕島", + "China": "中國", + "Chile": "智利", + "Chad": "查德", + "Central African Republic": "中非共和國", + "Cayman Islands": "開曼群島", + "Caribbean Netherlands": "荷屬加勒比", + "Cape Verde": "維德角", + "Canada": "加拿大", + "Cameroon": "喀麥隆", + "Cambodia": "柬埔寨", + "Burundi": "蒲隆地", + "Burkina Faso": "布吉納法索", + "Bulgaria": "保加利亞", + "Brunei": "汶萊", + "British Virgin Islands": "英屬維京群島", + "British Indian Ocean Territory": "英屬印度洋屬地", + "Brazil": "巴西", + "Bouvet Island": "布威島", + "Botswana": "波札那", + "Bosnia": "波士尼亞", + "Bolivia": "玻利維亞", + "Bhutan": "不丹", + "Bermuda": "百慕達", + "Benin": "貝南", + "Belize": "貝里斯", + "Belgium": "比利時", + "Belarus": "白俄羅斯", + "Barbados": "巴貝多", + "Bangladesh": "孟加拉", + "Bahrain": "巴林", + "Bahamas": "巴哈馬", + "Azerbaijan": "亞塞拜然", + "Austria": "奧地利", + "Australia": "澳洲", + "Aruba": "阿魯巴", + "Armenia": "亞美尼亞", + "Argentina": "阿根廷", + "Antigua & Barbuda": "安地卡及巴布達", + "Antarctica": "南極洲", + "Anguilla": "安吉拉", + "Angola": "安哥拉", + "Andorra": "安道爾", + "American Samoa": "美屬薩摩亞", + "Algeria": "阿爾及利亞", + "Albania": "阿爾巴尼亞", + "Åland Islands": "奧蘭", + "Afghanistan": "阿富汗", + "United States": "美國", + "United Kingdom": "英國" } From f045c257e3af9b0eaefb5f69e3610de5b20672e4 Mon Sep 17 00:00:00 2001 From: Slavi Pantaleev Date: Tue, 10 Nov 2020 08:09:14 +0000 Subject: [PATCH 042/115] Translated using Weblate (Bulgarian) Currently translated at 89.5% (2353 of 2629 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/bg/ --- src/i18n/strings/bg.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json index e03215cb04..4e4c5c5760 100644 --- a/src/i18n/strings/bg.json +++ b/src/i18n/strings/bg.json @@ -2489,5 +2489,19 @@ "New version of %(brand)s is available": "Налична е нова версия на %(brand)s", "Update %(brand)s": "Обнови %(brand)s", "Enable desktop notifications": "Включете уведомления на работния плот", - "Don't miss a reply": "Не пропускайте отговор" + "Don't miss a reply": "Не пропускайте отговор", + "User menu": "Потребителско меню", + "Search rooms": "Търси стаи", + "Save your Security Key": "Запази ключа за сигурност", + "Confirm Security Phrase": "Потвърди фразата за сигурност", + "Set a Security Phrase": "Настрой фраза за сигурност", + "You can also set up Secure Backup & manage your keys in Settings.": "Също така, може да конфигурирате защитено резервно копиране и да управлявате ключовете си от Настройки.", + "If you cancel now, you may lose encrypted messages & data if you lose access to your logins.": "Ако се откажете сега, може да загубите достъп до шифрованите съобщения и данни, в случай че загубите достъп до тази сесия.", + "Store your Security Key somewhere safe, like a password manager or a safe, as it’s used to safeguard your encrypted data.": "Запазете ключа за сигурност на сигурно място, като password manager или сейф, понеже се използва за предпазване на шифрованите данни.", + "Enter a security phrase only you know, as it’s used to safeguard your data. To be secure, you shouldn’t re-use your account password.": "Въведете фраза за сигурност, която знаете само вие. Тя ще се използва за предпазване на данните ви. За да е по-сигурно, не използвайте паролата за профила си.", + "Use a secret phrase only you know, and optionally save a Security Key to use for backup.": "Използвайте секретна фраза, която знаете само вие. При необходимост запазете и ключа за сигурност за резервното копие.", + "Enter a Security Phrase": "Въведете фраза за сигурност", + "We’ll generate a Security Key for you to store somewhere safe, like a password manager or a safe.": "Ще генерираме ключ за сигурност, който да съхраните на сигурно място, като password manager или сейф.", + "Generate a Security Key": "Генерирай ключ за сигурност", + "Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.": "Предпазете се от загуба на достъп до шифрованите съобщения и данни като направите резервно копие на ключовете за шифроване върху сървъра." } From db85d2c48a1603850f6b3602c38f76141472cf16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?= Date: Tue, 10 Nov 2020 17:50:44 +0000 Subject: [PATCH 043/115] Translated using Weblate (Hungarian) Currently translated at 93.3% (2465 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 72a6811727..dfdd150a36 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2601,5 +2601,29 @@ "Åland Islands": "Åland-szigetek", "Afghanistan": "Afganisztán", "United States": "Egyesült Államok", - "United Kingdom": "Egyesült Királyság" + "United Kingdom": "Egyesült Királyság", + "Ghana": "Ghána", + "Germany": "Németország", + "Georgia": "Grúzia", + "Gambia": "Gambia", + "Gabon": "Gabon", + "French Southern Territories": "Francia déli és antarktiszi területek", + "French Polynesia": "Francia Polinézia", + "French Guiana": "Francia Guyana", + "France": "Franciaország", + "Finland": "Finnország", + "Fiji": "Fidzsi-szigetek", + "Faroe Islands": "Feröer", + "Falkland Islands": "Falkland-szigetek", + "Ethiopia": "Etiópia", + "Estonia": "Észtország", + "Eritrea": "Eritrea", + "Equatorial Guinea": "Egyenlítői-Guinea", + "El Salvador": "Salvador", + "Egypt": "Egyiptom", + "Ecuador": "Ecuador", + "Dominican Republic": "Dominikai Köztársaság", + "Dominica": "Dominikai Közösség", + "Djibouti": "Dzsibuti", + "Denmark": "Dánia" } From eedd897a73cafba6e8d4b91c894c7fe8aaf7d706 Mon Sep 17 00:00:00 2001 From: Szimszon Date: Tue, 10 Nov 2020 17:39:08 +0000 Subject: [PATCH 044/115] Translated using Weblate (Hungarian) Currently translated at 93.3% (2465 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index dfdd150a36..9460c89089 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2625,5 +2625,41 @@ "Dominican Republic": "Dominikai Köztársaság", "Dominica": "Dominikai Közösség", "Djibouti": "Dzsibuti", - "Denmark": "Dánia" + "Denmark": "Dánia", + "Côte d’Ivoire": "Elefántcsontpart", + "Czech Republic": "Cseh Köztársaság", + "Cyprus": "Ciprus", + "Curaçao": "Curaçao", + "Cuba": "Kuba", + "Croatia": "Horvát", + "Costa Rica": "Costa Rica", + "Cook Islands": "Cook-szigetek", + "Congo - Kinshasa": "Kongó - Kinshasa", + "Congo - Brazzaville": "Kongó - Brazzaville", + "Comoros": "Comore-szigetek", + "Colombia": "Kolumbia", + "Cocos (Keeling) Islands": "Kókusz-szigetek", + "Christmas Island": "Karácsony-szigetek", + "China": "Kína", + "Chile": "Chile", + "Chad": "Csád", + "Central African Republic": "Közép-afrikai Köztársaság", + "Cayman Islands": "Kajmán-szigetek", + "Caribbean Netherlands": "Karibi Hollandia", + "Cape Verde": "Zöld-fok", + "Canada": "Kanada", + "Cameroon": "Kamerun", + "Cambodia": "Kambodzsa", + "Burundi": "Burundi", + "Burkina Faso": "Burkina Faso", + "Bulgaria": "Bulgária", + "Brunei": "Brunei", + "British Virgin Islands": "Brit Virgin-szigetek", + "British Indian Ocean Territory": "Brit Indiai-óceáni Terület", + "Brazil": "Brazília", + "Bouvet Island": "Bouvet-sziget", + "Botswana": "Botswana", + "Bosnia": "Bosznia", + "Bolivia": "Bolívia", + "Bhutan": "Bhután" } From 61ee77b97d269b0af5f832919b7253afc0e9f5dd Mon Sep 17 00:00:00 2001 From: random Date: Tue, 10 Nov 2020 16:26:25 +0000 Subject: [PATCH 045/115] Translated using Weblate (Italian) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 266 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 265 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 77881bcb24..4df5fd0a39 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2577,5 +2577,269 @@ "Update %(brand)s": "Aggiorna %(brand)s", "Enable desktop notifications": "Attiva le notifiche desktop", "Don't miss a reply": "Non perdere una risposta", - "Modal Widget": "Widget modale" + "Modal Widget": "Widget modale", + "%(creator)s created this DM.": "%(creator)s ha creato questo MD.", + "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "I messaggi in questa stanza sono cifrati end-to-end. Quando qualcuno entra puoi verificarlo nel suo profilo, ti basta toccare il suo avatar.", + "Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "Qui i messaggi sono cifrati end-to-end. Verifica %(displayName)s nel suo profilo - tocca il suo avatar.", + "This is the start of .": "Questo è l'inizio di .", + "Add a photo, so people can easily spot your room.": "Aggiungi una foto, in modo che le persone notino facilmente la stanza.", + "%(displayName)s created this room.": "%(displayName)s ha creato questa stanza.", + "You created this room.": "Hai creato questa stanza.", + "Add a topic to help people know what it is about.": "Aggiungi un argomento per aiutare le persone a capire di cosa si parla.", + "Topic: %(topic)s ": "Argomento: %(topic)s ", + "Topic: %(topic)s (edit)": "Argomento: %(topic)s (modifica)", + "This is the beginning of your direct message history with .": "Questo è l'inizio della tua cronologia di messaggi diretti con .", + "Only the two of you are in this conversation, unless either of you invites anyone to join.": "Solo voi due siete in questa conversazione, a meno che uno di voi non inviti qualcuno.", + "Call Paused": "Chiamata in pausa", + "Takes the call in the current room off hold": "Riprende la chiamata nella stanza attuale", + "Places the call in the current room on hold": "Mette in pausa la chiamata nella stanza attuale", + "Zimbabwe": "Zimbabwe", + "Zambia": "Zambia", + "Yemen": "Yemen", + "Western Sahara": "Sahara Occidentale", + "Wallis & Futuna": "Wallis e Futuna", + "Vietnam": "Vietnam", + "Venezuela": "Venezuela", + "Vatican City": "Città del Vaticano", + "Vanuatu": "Vanuatu", + "Uzbekistan": "Uzbekistan", + "Uruguay": "Uruguay", + "United Arab Emirates": "Emirati Arabi Uniti", + "Ukraine": "Ucraina", + "Uganda": "Uganda", + "U.S. Virgin Islands": "Isole Vergini americane", + "Tuvalu": "Tuvalu", + "Turks & Caicos Islands": "Turks e Caicos", + "Turkmenistan": "Turkmenistan", + "Turkey": "Turchia", + "Tunisia": "Tunisia", + "Trinidad & Tobago": "Trinidad e Tobago", + "Tonga": "Tonga", + "Tokelau": "Tokelau", + "Togo": "Togo", + "Timor-Leste": "Timor Est", + "Thailand": "Tailandia", + "Tanzania": "Tanzania", + "Tajikistan": "Tagikistan", + "Taiwan": "Taiwan", + "São Tomé & Príncipe": "São Tomé e Príncipe", + "Syria": "Siria", + "Switzerland": "Svizzera", + "Sweden": "Svezia", + "Swaziland": "eSwatini", + "Svalbard & Jan Mayen": "Svalbard e Jan Mayen", + "Suriname": "Suriname", + "Sudan": "Sudan", + "St. Vincent & Grenadines": "Saint Vincent e Grenadine", + "St. Pierre & Miquelon": "Saint-Pierre e Miquelon", + "St. Martin": "Saint Martin", + "St. Lucia": "Saint Lucia", + "St. Kitts & Nevis": "Saint Kitts e Nevis", + "St. Helena": "Sant'Elena", + "St. Barthélemy": "Saint-Barthélemy", + "Sri Lanka": "Sri Lanka", + "Spain": "Spagna", + "South Sudan": "Sudan del Sud", + "South Korea": "Corea del Sud", + "South Georgia & South Sandwich Islands": "Georgia del Sud e Isole Sandwich Australi", + "South Africa": "Sudafrica", + "Somalia": "Somalia", + "Solomon Islands": "Isole Solomone", + "Slovenia": "Slovenia", + "Slovakia": "Slovacchia", + "Sint Maarten": "Sint Maarten", + "Singapore": "Singapore", + "Sierra Leone": "Sierra Leone", + "Seychelles": "Seychelles", + "Serbia": "Serbia", + "Senegal": "Senegal", + "Saudi Arabia": "Arabia Saudita", + "San Marino": "San Marino", + "Samoa": "Samoa", + "Réunion": "Riunione", + "Rwanda": "Ruanda", + "Russia": "Russia", + "Romania": "Romania", + "Qatar": "Qatar", + "Puerto Rico": "Puerto Rico", + "Portugal": "Portogallo", + "Poland": "Polonia", + "Pitcairn Islands": "Isole Pitcairn", + "Philippines": "Filippine", + "Peru": "Peru", + "Paraguay": "Paraguay", + "Papua New Guinea": "Papua Nuova Guinea", + "Panama": "Panama", + "Palestine": "Palestina", + "Palau": "Palau", + "Pakistan": "Pakistan", + "Oman": "Oman", + "Norway": "Norvegia", + "Northern Mariana Islands": "Isole Marianne Settentrionali", + "North Korea": "Corea del Nord", + "Norfolk Island": "Isola Norfolk", + "Niue": "Niue", + "Nigeria": "Nigeria", + "Niger": "Niger", + "Nicaragua": "Nicaragua", + "New Zealand": "Nuova Zelanda", + "New Caledonia": "Nuova Caledonia", + "Netherlands": "Paesi Bassi", + "Nepal": "Nepal", + "Nauru": "Nauru", + "Namibia": "Namibia", + "Myanmar": "Birmania", + "Mozambique": "Mozambico", + "Morocco": "Marocco", + "Montserrat": "Montserrat", + "Montenegro": "Montenegro", + "Mongolia": "Mongolia", + "Monaco": "Monaco", + "Moldova": "Moldavia", + "Micronesia": "Micronesia", + "Mexico": "Messico", + "Mayotte": "Maiotta", + "Mauritius": "Mauritius", + "Mauritania": "Mauritania", + "Martinique": "Martinica", + "Marshall Islands": "Isole Marshall", + "Malta": "Malta", + "Mali": "Mali", + "Maldives": "Maldive", + "Malaysia": "Malesia", + "Malawi": "Malawi", + "Madagascar": "Madagascar", + "Macedonia": "Macedonia", + "Macau": "Macau", + "Luxembourg": "Lussemburgo", + "Lithuania": "Lituania", + "Liechtenstein": "Liechtenstein", + "Libya": "Libia", + "Liberia": "Liberia", + "Lesotho": "Lesotho", + "Lebanon": "Libano", + "Latvia": "Lettonia", + "Laos": "Laos", + "Kyrgyzstan": "Kirghizistan", + "Kuwait": "Kuwait", + "Kosovo": "Kosovo", + "Kiribati": "Kiribati", + "Kenya": "Kenya", + "Kazakhstan": "Kazakistan", + "Jordan": "Giordania", + "Jersey": "Baliato di Jersey", + "Japan": "Giappone", + "Jamaica": "Giamaica", + "Italy": "Italia", + "Israel": "Israele", + "Isle of Man": "Isola di Man", + "Ireland": "Irlanda", + "Iraq": "Iraq", + "Iran": "Iran", + "Indonesia": "Indonesia", + "India": "India", + "Iceland": "Islanda", + "Hungary": "Ungheria", + "Hong Kong": "Hong Kong", + "Honduras": "Honduras", + "Heard & McDonald Islands": "Isole Heard e McDonald", + "Haiti": "Haiti", + "Guyana": "Guyana", + "Guinea-Bissau": "Guinea-Bissau", + "Guinea": "Guinea", + "Guernsey": "Guernsey", + "Guatemala": "Guatemala", + "Guam": "Guam", + "Guadeloupe": "Guadalupa", + "Grenada": "Grenada", + "Greenland": "Groenlandia", + "Greece": "Grecia", + "Gibraltar": "Gibilterra", + "Ghana": "Ghana", + "Germany": "Germania", + "Georgia": "Georgia", + "Gambia": "Gambia", + "Gabon": "Gabon", + "French Southern Territories": "Terre australi e antartiche francesi", + "French Polynesia": "Polinesia Francese", + "French Guiana": "Guiana Francese", + "France": "Francia", + "Finland": "Finlandia", + "Fiji": "Figi", + "Faroe Islands": "Isole Faroe", + "Falkland Islands": "Isole Falkland", + "Ethiopia": "Etiopia", + "Estonia": "Estonia", + "Eritrea": "Eritrea", + "Equatorial Guinea": "Guinea Equatoriale", + "El Salvador": "El Salvador", + "Egypt": "Egitto", + "Ecuador": "Ecuador", + "Dominican Republic": "Repubblica Dominicana", + "Dominica": "Dominica", + "Djibouti": "Gibuti", + "Denmark": "Danimarca", + "Côte d’Ivoire": "Costa d'Avorio", + "Czech Republic": "Repubblica Ceca", + "Cyprus": "Cipro", + "Curaçao": "Curaçao", + "Cuba": "Cuba", + "Croatia": "Croazia", + "Costa Rica": "Costa Rica", + "Cook Islands": "Isole Cook", + "Congo - Kinshasa": "Congo - Kinshasa", + "Congo - Brazzaville": "Congo - Brazzaville", + "Comoros": "Comore", + "Colombia": "Colombia", + "Cocos (Keeling) Islands": "Isole Cocos (Keeling)", + "Christmas Island": "Isola di Natale", + "China": "Cina", + "Chile": "Cile", + "Chad": "Ciad", + "Central African Republic": "Repubblica Centrafricana", + "Cayman Islands": "Isole Cayman", + "Caribbean Netherlands": "Paesi Bassi caraibici", + "Cape Verde": "Capo Verde", + "Canada": "Canada", + "Cameroon": "Camerun", + "Cambodia": "Cambogia", + "Burundi": "Burundi", + "Burkina Faso": "Burkina Faso", + "Bulgaria": "Bulgaria", + "Brunei": "Brunei", + "British Virgin Islands": "Isole Vergini britanniche", + "British Indian Ocean Territory": "Territorio britannico dell'Oceano Indiano", + "Brazil": "Brasile", + "Bouvet Island": "Isola Bouvet", + "Botswana": "Botswana", + "Bosnia": "Bosnia", + "Bolivia": "Bolivia", + "Bhutan": "Bhutan", + "Bermuda": "Bermuda", + "Benin": "Benin", + "Belize": "Belize", + "Belgium": "Belgio", + "Belarus": "Bielorussia", + "Barbados": "Barbados", + "Bangladesh": "Bangladesh", + "Bahrain": "Bahrein", + "Bahamas": "Bahamas", + "Azerbaijan": "Azerbaigian", + "Austria": "Austria", + "Australia": "Australia", + "Aruba": "Aruba", + "Armenia": "Armenia", + "Argentina": "Argentina", + "Antigua & Barbuda": "Antigua e Barbuda", + "Antarctica": "Antartide", + "Anguilla": "Anguilla", + "Angola": "Angola", + "Andorra": "Andorra", + "American Samoa": "Samoa Americane", + "Algeria": "Algeria", + "Albania": "Albania", + "Åland Islands": "Isole Åland", + "Afghanistan": "Afghanistan", + "United States": "Stati Uniti", + "United Kingdom": "Regno Unito" } From 1ba4c93e4db15ea809793231e491af403224c4a2 Mon Sep 17 00:00:00 2001 From: Kaede Date: Tue, 10 Nov 2020 16:24:22 +0000 Subject: [PATCH 046/115] Translated using Weblate (Japanese) Currently translated at 52.0% (1374 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/ja/ --- src/i18n/strings/ja.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index cc38ef5d39..4ab5bc0de2 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -649,7 +649,7 @@ "Incorrect password": "間違ったパスワード", "Deactivate Account": "アカウントを無効にする", "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "これにより、あなたのアカウントは永久に使用できなくなります。ログインできなくなり、誰も同じユーザーIDを再登録できなくなります。これにより、参加しているすべてのルームから退室し、 IDサーバからあなたのアカウントの詳細が削除されます。この操作は元に戻すことができません。", - "Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "アカウントを無効にしても、送信されたメッセージはデフォルトではなくなりません。メッセージを忘れてしまった場合は、下のボックスにチェックを入れてください。", + "Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "アカウントを無効にしても、送信されたメッセージはデフォルトでは忘れられません。メッセージを忘れさせたい場合は、下のボックスにチェックを入れてください。", "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "Matrixのメッセージの可視性は電子メールと似ています。メッセージを忘れると、新規または未登録のユーザーと共有することができませんが、既にこれらのメッセージにアクセスしている登録ユーザーは、依然としてそのコピーにアクセスできます。", "Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "アカウントを無効する際、送信したすべてのメッセージを削除(警告:これにより、今後のユーザーは会話履歴の全文を見ることができなくなります)", "To continue, please enter your password:": "続行するには、パスワードを入力してください:", @@ -1459,5 +1459,12 @@ "For extra security, verify this user by checking a one-time code on both of your devices.": "セキュリティ強化するために、両者のデバイスでワンタイムコードを確認し、このユーザーを検証することができます。", "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "あなたのメッセージは保護されており、あなたと宛先だけが保護を解除してメッセージを閲覧するための固有の鍵を持っています。", "%(name)s wants to verify": "%(name)s が検証を求めています", - "You sent a verification request": "あなたが検証リクエストを送信しました" + "You sent a verification request": "あなたが検証リクエストを送信しました", + "This account has been deactivated.": "このアカウントは、無効化されています。", + "Forget Room": "部屋を忘れる", + "Forget this room": "部屋を忘れる", + "Recently Direct Messaged": "最近ダイレクトメッセージで会話したユーザー", + "Invite someone using their name, username (like ) or share this room.": "この部屋に誰かを招待したい場合は、招待したいユーザーの名前、( の様な)ユーザー名、またはメールアドレスを指定するか、この部屋を共有してください。", + "Invite someone using their name, email address, username (like ) or share this room.": "この部屋に誰かを招待したい場合は、招待したいユーザーの名前、メールアドレス、または( の様な)ユーザー名を指定するか、この部屋を共有してください。", + "Upgrade your encryption": "暗号化をアップグレード" } From a447033dacc12c8adbb44460be30a0526a692949 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Tue, 10 Nov 2020 14:32:17 +0000 Subject: [PATCH 047/115] Translated using Weblate (Albanian) Currently translated at 99.8% (2637 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 266 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 265 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 148e373b98..82644d85a3 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2570,5 +2570,269 @@ "New version of %(brand)s is available": "Ka gati një version të ri të %(brand)s", "Update %(brand)s": "Përditësoni %(brand)s", "Enable desktop notifications": "Aktivizoni njoftime desktopi", - "Don't miss a reply": "Mos humbni asnjë përgjigje" + "Don't miss a reply": "Mos humbni asnjë përgjigje", + "Paraguay": "Paraguai", + "Guyana": "Guajanë", + "Central African Republic": "Republika e Afrikës Qendrore", + "Nauru": "Nauru", + "Belarus": "Bjellorusi", + "Kyrgyzstan": "Kirgizstan", + "Macedonia": "Maqedoni", + "North Korea": "Kore e Veriut", + "Eritrea": "Eritre", + "Congo - Kinshasa": "Kongo-Kinshasa", + "Panama": "Panama", + "Spain": "Spanjë", + "Liberia": "Liberi", + "Mozambique": "Mozambik", + "Zimbabwe": "Zimbabve", + "China": "Kinë", + "United Kingdom": "Mbretëria e Bashkuar", + "Ethiopia": "Etiopi", + "Swaziland": "Svaziland", + "Marshall Islands": "Ishujt Marshall", + "Haiti": "Haiti", + "Slovakia": "Sllovaki", + "Equatorial Guinea": "Guinea Ekuatoriale", + "Anguilla": "Anguila", + "%(creator)s created this DM.": "%(creator)s krijoi këtë DM.", + "Peru": "Peru", + "Seychelles": "Sejshelle", + "St. Lucia": "Shën-Luçia", + "Solomon Islands": "Ishujt Solomon", + "Micronesia": "Mikronezi", + "Wallis & Futuna": "Uallis & Futuna", + "United States": "Shtetet e Bashkuara", + "Philippines": "Filipine", + "New Zealand": "Zelandë e Re", + "St. Vincent & Grenadines": "Shën Vincent dhe Grenadine", + "Afghanistan": "Afganistan", + "Benin": "Benin", + "Cook Islands": "Ishujt Kuk", + "Bahamas": "Bahamas", + "Yemen": "Jemen", + "Curaçao": "Kurasëo", + "Guam": "Guam", + "Albania": "Shqipëri", + "Tajikistan": "Taxhikistan", + "Moldova": "Moldavi", + "Gambia": "Gambia", + "Nicaragua": "Nikaragua", + "Lebanon": "Liban", + "Armenia": "Armeni", + "%(displayName)s created this room.": "%(displayName)s krijoi këtë dhomë.", + "Romania": "Rumani", + "Kazakhstan": "Kazakistan", + "St. Barthélemy": "Shën Bartolome", + "Sierra Leone": "Sierra Leone", + "Kuwait": "Kuvajt", + "Vanuatu": "Vanuatu", + "Gibraltar": "Gjibraltar", + "Trinidad & Tobago": "Trinidad e Tobago", + "Uruguay": "Uruguaj", + "Croatia": "Kroaci", + "Cocos (Keeling) Islands": "Ishujt Kokos (Kiling)", + "Norfolk Island": "Ishujt Norfolk", + "Somalia": "Somali", + "British Virgin Islands": "Ishujt e Virgjër Britanikë", + "Azerbaijan": "Azerbajxhan", + "Tokelau": "Tokelau", + "Slovenia": "Slloveni", + "Malaysia": "Malajzi", + "Guinea": "Guine", + "Ecuador": "Ekuador", + "St. Kitts & Nevis": "Shën Kits dhe Nevis", + "Vietnam": "Vietnam", + "Nepal": "Nepal", + "Colombia": "Kolumbi", + "Kenya": "Kenia", + "Madagascar": "Madagaskar", + "Italy": "Itali", + "Taiwan": "Taivan", + "Jersey": "Xhërsi", + "Rwanda": "Ruandë", + "Martinique": "Martinikë", + "Denmark": "Danimarkë", + "Bahrain": "Bahrein", + "Places the call in the current room on hold": "E kalon në pritje thirrjen në dhomën aktuale", + "Finland": "Finlandë", + "Papua New Guinea": "Papua Guinea e Re", + "Botswana": "Botsvanë", + "Egypt": "Egjipt", + "Norway": "Norvegji", + "Netherlands": "Hollandë", + "Russia": "Rusi", + "Topic: %(topic)s ": "Temë: %(topic)s ", + "Vatican City": "Vatikan", + "Caribbean Netherlands": "Karaibet Holandeze", + "Tonga": "Tonga", + "Christmas Island": "Ishulli i Krishtlindjeve", + "Poland": "Poloni", + "Tuvalu": "Tuvalu", + "Senegal": "Senegal", + "France": "Francë", + "Niger": "Niger", + "Sint Maarten": "Shën Martin", + "You created this room.": "Krijuat këtë dhomë.", + "Iran": "Iran", + "Burkina Faso": "Burkina Faso", + "Palau": "Palau", + "Nigeria": "Nigeri", + "Chile": "Kili", + "French Southern Territories": "Territoret Frënge Jugore", + "India": "Indi", + "Heard & McDonald Islands": "Ishulli Hërd dhe Ishujt Mekdonald", + "Barbados": "Barbados", + "Réunion": "Reunion", + "Sudan": "Sudan", + "Malta": "Maltë", + "Guernsey": "Gërnsi", + "Brazil": "Brazil", + "Qatar": "Katar", + "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "Mesazhet në këtë dhomë fshehtëzohen skaj-më-skaj. Kur njerëzit hyjnë, mund t’i verifikoni te profili i tyre, thjesht prekni mbi avatarin përkatës.", + "Comoros": "Komore", + "Only the two of you are in this conversation, unless either of you invites anyone to join.": "Në këtë bisedë jeni vetëm ju të dy, veç nëse cilido qoftë prej jush ftoi dikë tjetër të vijë.", + "Guinea-Bissau": "Guinea-Bisau", + "Dominican Republic": "Republika Dominikane", + "Georgia": "Xhorxhia", + "Faroe Islands": "Ishujt Faroe", + "Guadeloupe": "Guadalupë", + "Czech Republic": "Republika Çeke", + "Topic: %(topic)s (edit)": "Temë: %(topic)s (përpunojeni)", + "Bulgaria": "Bullgari", + "Add a photo, so people can easily spot your room.": "Shtoni një foto, që njerëzit ta dallojnë kollaj dhomën tuaj.", + "El Salvador": "Salvador", + "Zambia": "Zambia", + "Cayman Islands": "Ishujt Kajman", + "Congo - Brazzaville": "Kongo-Brazavil", + "This is the beginning of your direct message history with .": "Ky është fillimi i historikut të mesazheve tuaja të drejtpërdrejta me .", + "Singapore": "Singapor", + "Costa Rica": "Kosta Rika", + "Ghana": "Ganë", + "Call Paused": "Thirrja u Ndal", + "Mayotte": "Majot", + "Cape Verde": "Kepi i Gjelbërt", + "Belize": "Belize", + "Jamaica": "Xhamajkë", + "Indonesia": "Indonezi", + "Mexico": "Meksikë", + "Monaco": "Monako", + "Cuba": "Kubë", + "Uganda": "Ugandë", + "Latvia": "Letoni", + "Namibia": "Namibi", + "Greenland": "Groenlandë", + "Syria": "Siri", + "Svalbard & Jan Mayen": "Svalbard & Jan-Majen", + "Turkmenistan": "Turkmenistan", + "Lesotho": "Lesoto", + "Australia": "Australi", + "Serbia": "Serbi", + "Cameroon": "Kamerun", + "Ireland": "Irlandë", + "Guatemala": "Guatemalë", + "Fiji": "Fixhi", + "Libya": "Libi", + "Tanzania": "Tanzani", + "Lithuania": "Lituani", + "This is the start of .": "Ky është fillimi i .", + "Antarctica": "Antarktidë", + "Germany": "Gjermani", + "Add a topic to help people know what it is about.": "Shtoni një temë, për t’i ndihmuar njerëzit se përse bëhet fjalë.", + "Switzerland": "Zvicër", + "Maldives": "Maldive", + "Bhutan": "Butan", + "Luxembourg": "Luksemburg", + "St. Martin": "Shën-Martin", + "Cyprus": "Qipro", + "Niue": "Niue", + "Iraq": "Irak", + "Bermuda": "Bermuda", + "Takes the call in the current room off hold": "E heq nga pritja thirrjen në dhomën aktuale", + "French Polynesia": "Polinezia Frënge", + "Mauritius": "Mauricius", + "Grenada": "Grenadë", + "Portugal": "Portugali", + "Burundi": "Burundi", + "St. Pierre & Miquelon": "Shën Pier dhe Mikelon", + "South Africa": "Afrikë e Jugut", + "Morocco": "Marok", + "Malawi": "Malaui", + "Côte d’Ivoire": "Bregu i Fildishtë", + "Kosovo": "Kosovë", + "Thailand": "Tailandë", + "Macau": "Makau", + "Montenegro": "Mal i Zi", + "Angola": "Angolë", + "Northern Mariana Islands": "Ishujt Veriorë Mariana", + "Honduras": "Honduras", + "Japan": "Japoni", + "American Samoa": "Samoa Amerikane", + "South Georgia & South Sandwich Islands": "Xhorxhia Jugore dhe Ishujt Snduiç të Jugut", + "Palestine": "Palestinë", + "Austria": "Austri", + "Suriname": "Surinam", + "Kiribati": "Kiribati", + "Iceland": "Islandë", + "St. Helena": "Shën Helenë", + "Sri Lanka": "Sri Lanka", + "Myanmar": "Mianmar", + "Oman": "Oman", + "Western Sahara": "Sahara Perëndimore", + "Bouvet Island": "Ishulli Bouve", + "Bolivia": "Bolivi", + "Israel": "Izrael", + "Timor-Leste": "Timori Lindor", + "Belgium": "Belgjikë", + "Ukraine": "Ukrainë", + "Turks & Caicos Islands": "Ishujt Turks & Kaikos", + "Montserrat": "Monserrat", + "Samoa": "Samoa", + "United Arab Emirates": "Emiratet e Bashkuara Arabe", + "British Indian Ocean Territory": "Territoret Britanike të Oqeanit Indian", + "Pakistan": "Pakistan", + "South Korea": "Kore e Jugut", + "Jordan": "Jordani", + "Puerto Rico": "Porto Riko", + "Turkey": "Turqi", + "Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "Mesazhet këtu fshehtëzohen skaj-më-skaj. Verifikoni %(displayName)s te profili përkatës - prekni mbi avatarin përkatës.", + "Antigua & Barbuda": "Antigua e Barbuda", + "French Guiana": "Guajana Frënge", + "Hong Kong": "Hong Kong", + "Mongolia": "Mongoli", + "Canada": "Kanada", + "Greece": "Greqi", + "Tunisia": "Tunizi", + "Liechtenstein": "Lihtenshtein", + "Algeria": "Algjeri", + "Åland Islands": "Ishujt Aland", + "Mali": "Mali", + "Pitcairn Islands": "Ishujt Pitkern", + "Andorra": "Andorrë", + "Hungary": "Hungari", + "Bosnia": "Bosnjë-Hercegovinë", + "Argentina": "Argjentinë", + "Togo": "Togo", + "Djibouti": "Xhibut", + "Aruba": "Aruba", + "Chad": "Çad", + "Estonia": "Estoni", + "Laos": "Laos", + "São Tomé & Príncipe": "Sao-Tome e Prinsipe", + "San Marino": "San Marino", + "Cambodia": "Kamboxhia", + "Uzbekistan": "Uzbekistan", + "Gabon": "Gabon", + "Brunei": "Brunei", + "South Sudan": "Sudan i Jugut", + "Venezuela": "Venezuelë", + "New Caledonia": "Kaledoni e Re", + "Saudi Arabia": "Arabi Saudite", + "Isle of Man": "Ishulli Man", + "Dominica": "Dominikë", + "U.S. Virgin Islands": "Ishujt e Virgjër Amerikanë", + "Mauritania": "Mauritani", + "Bangladesh": "Bangladesh", + "Falkland Islands": "Ishujt Falkland", + "Sweden": "Suedi" } From f74f77e170d8c7baea4106280ed6f73d2fb28e00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Tue, 10 Nov 2020 16:48:42 +0000 Subject: [PATCH 048/115] Translated using Weblate (Estonian) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 03c3d2444c..9e9500bad9 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -2824,5 +2824,20 @@ "Åland Islands": "Ahvenamaa", "Afghanistan": "Afganistan", "United States": "Ameerika Ühendriigid", - "United Kingdom": "Suurbritannia" + "United Kingdom": "Suurbritannia", + "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "Sõnumid siin jututoas on läbivalt krüptitud. Kui uued kasutajad liituvad, siis klõpsides nende tunnuspilti saad kontrollida nende profiili.", + "Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "Sõnumid siin jututoas on läbivalt krüptitud. Klõpsides tunnuspilti saad kontrollida kasutaja %(displayName)s profiili.", + "%(creator)s created this DM.": "%(creator)s alustas seda otsesuhtlust.", + "This is the start of .": "See on jututoa algus.", + "Add a photo, so people can easily spot your room.": "Selle, et teised märkaks sinu jututuba lihtsamini, palun lisa üks pilt.", + "%(displayName)s created this room.": "%(displayName)s lõi selle jututoa.", + "You created this room.": "Sa lõid selle jututoa.", + "Add a topic to help people know what it is about.": "Selleks, et teised teaks millega on tegemist, palun lisa teema.", + "Topic: %(topic)s ": "Teema: %(topic)s ", + "Topic: %(topic)s (edit)": "Teema: %(topic)s (muudetud)", + "This is the beginning of your direct message history with .": "See on sinu ja kasutaja otsesuhtluse ajaloo algus.", + "Only the two of you are in this conversation, unless either of you invites anyone to join.": "Seni kuni emb-kumb teist kolmandaid osapooli liituma ei kutsu, olete siin vestluses vaid teie kahekesi.", + "Call Paused": "Kõne on ajutiselt peatatud", + "Takes the call in the current room off hold": "Võtab selles jututoas ootel oleva kõne", + "Places the call in the current room on hold": "Jätab kõne selles jututoas ootele" } From 33783c443018bc16159755fc02aa4ac9392145f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?= Date: Wed, 11 Nov 2020 10:23:40 +0000 Subject: [PATCH 049/115] Translated using Weblate (Hungarian) Currently translated at 99.6% (2634 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 170 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 169 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 9460c89089..2c8f04e273 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2661,5 +2661,173 @@ "Botswana": "Botswana", "Bosnia": "Bosznia", "Bolivia": "Bolívia", - "Bhutan": "Bhután" + "Bhutan": "Bhután", + "Topic: %(topic)s (edit)": "Téma: %(topic)s (szerkesztés)", + "This is the beginning of your direct message history with .": "Ez a közvetlen üzeneteinek előzményeinek eleje a következővel: .", + "Only the two of you are in this conversation, unless either of you invites anyone to join.": "Csak ketten vannak ebben a beszélgetésben, hacsak valamelyikőjük nem hív meg valakit, hogy csatlakozzon.", + "Call Paused": "Hívás szüneteltetve", + "Takes the call in the current room off hold": "Visszaveszi tartásból a jelenlegi szoba hívását", + "Places the call in the current room on hold": "Tartásba teszi a jelenlegi szoba hívását", + "Zimbabwe": "Zimbabwe", + "Zambia": "Zambia", + "Yemen": "Jemen", + "Western Sahara": "Nyugat-Szahara", + "Wallis & Futuna": "Wallis és Futuna", + "Vietnam": "Vietnám", + "Venezuela": "Venezuela", + "Vatican City": "Vatikán", + "Vanuatu": "Vanuatu", + "Uzbekistan": "Üzbegisztán", + "Uruguay": "Uruguay", + "United Arab Emirates": "Egyesült Arab Emírségek", + "Ukraine": "Ukrajna", + "Uganda": "Uganda", + "U.S. Virgin Islands": "Amerikai Virgin-szigetek", + "Tuvalu": "Tuvalu", + "Turks & Caicos Islands": "Turks- és Caicos-szigetek", + "Turkmenistan": "Türkmenisztán", + "Turkey": "Törökország", + "Tunisia": "Tunézia", + "Trinidad & Tobago": "Trinidad és Tobago", + "Tonga": "Tonga", + "Tokelau": "Tokelau-szigetek", + "Togo": "Togo", + "Timor-Leste": "Kelet-Timor", + "Thailand": "Thaiföld", + "Tanzania": "Tanzánia", + "Tajikistan": "Tádzsikisztán", + "Taiwan": "Tajvan", + "São Tomé & Príncipe": "São Tomé és Príncipe", + "Syria": "Szíria", + "Switzerland": "Svájc", + "Sweden": "Svédország", + "Swaziland": "Szváziföld", + "Svalbard & Jan Mayen": "Svalbard és Jan Mayen-sziget", + "Suriname": "Suriname", + "Sudan": "Szudán", + "St. Vincent & Grenadines": "Saint Vincent és a Grenadine-szigetek", + "St. Pierre & Miquelon": "Saint-Pierre és Miquelon", + "St. Helena": "Szent Ilona", + "St. Martin": "Saint-Martin", + "St. Lucia": "Saint Lucia", + "St. Kitts & Nevis": "Saint Kitts és Nevis", + "St. Barthélemy": "Saint-Barthélemy", + "Sri Lanka": "Srí Lanka", + "Spain": "Spanyolország", + "South Sudan": "Dél-Szudán", + "South Korea": "Dél-Korea", + "South Georgia & South Sandwich Islands": "Déli-Georgia és Déli-Sandwich-szigetek", + "South Africa": "Dél-afrikai Köztársaság", + "Somalia": "Szomália", + "Solomon Islands": "Salamon-szigetek", + "Slovenia": "Szlovénia", + "Slovakia": "Szlovákia", + "Sint Maarten": "Sint Maarten", + "Singapore": "Szingapúr", + "Sierra Leone": "Sierra Leone", + "Seychelles": "Seychelle-szigetek", + "Serbia": "Szerbia", + "Senegal": "Szenegál", + "Saudi Arabia": "Szaúd-Arábia", + "San Marino": "San Marino", + "Samoa": "Szamoa", + "Réunion": "Réunion", + "Rwanda": "Ruanda", + "Russia": "Oroszország", + "Romania": "Románia", + "Qatar": "Katar", + "Puerto Rico": "Puerto Rico", + "Portugal": "Portugália", + "Poland": "Lengyelország", + "Pitcairn Islands": "Pitcairn-szigetek", + "Philippines": "Fülöp-szigetek", + "Peru": "Peru", + "Paraguay": "Paraguay", + "Papua New Guinea": "Pápua Új-Guinea", + "Panama": "Panama", + "Palestine": "Palesztína", + "Palau": "Palau", + "Pakistan": "Pakisztán", + "Oman": "Omán", + "Norway": "Norvégia", + "Northern Mariana Islands": "Északi-Mariana-szigetek", + "North Korea": "Észak-Korea", + "Norfolk Island": "Norfolk-sziget", + "Niue": "Niue", + "Nigeria": "Nigéria", + "Niger": "Niger", + "Nicaragua": "Nicaragua", + "New Zealand": "Új-Zéland", + "New Caledonia": "Új-Kaledónia", + "Netherlands": "Hollandia", + "Nepal": "Nepál", + "Nauru": "Nauru", + "Namibia": "Namíbia", + "Myanmar": "Mianmar", + "Mozambique": "Mozambik", + "Morocco": "Marokkó", + "Montserrat": "Montserrat", + "Montenegro": "Montenegró", + "Mongolia": "Mongólia", + "Monaco": "Monaco", + "Moldova": "Moldova", + "Micronesia": "Mikronézia", + "Mexico": "Mexikó", + "Mayotte": "Mayotte", + "Mauritius": "Mauritius", + "Mauritania": "Mauritánia", + "Martinique": "Martinique", + "Marshall Islands": "Marshall-szigetek", + "Malta": "Málta", + "Mali": "Mali", + "Maldives": "Maldív-szigetek", + "Malaysia": "Malajzia", + "Malawi": "Malawi", + "Madagascar": "Madagaszkár", + "Macedonia": "Észak-Macedónia", + "Macau": "Makaó", + "Luxembourg": "Luxembourg", + "Lithuania": "Litvánia", + "Liechtenstein": "Liechtenstein", + "Libya": "Líbia", + "Liberia": "Libéria", + "Lesotho": "Lesotho", + "Lebanon": "Libanon", + "Latvia": "Lettország", + "Laos": "Laosz", + "Kyrgyzstan": "Kirgizisztán", + "Kuwait": "Kuvait", + "Kosovo": "Koszovó", + "Kiribati": "Kiribati", + "Kenya": "Kenya", + "Kazakhstan": "Kazahsztán", + "Jordan": "Jordánia", + "Jersey": "Jersey", + "Japan": "Japán", + "Jamaica": "Jamaica", + "Italy": "Olaszország", + "Israel": "Izrael", + "Isle of Man": "Man", + "Ireland": "Írország", + "Iraq": "Irak", + "Iran": "Irán", + "Indonesia": "Indonézia", + "India": "India", + "Iceland": "Izland", + "Hungary": "Magyarország", + "Hong Kong": "Hong Kong", + "Honduras": "Honduras", + "Heard & McDonald Islands": "Heard-sziget és McDonald-szigetek", + "Haiti": "Haiti", + "Guyana": "Guyana", + "Guinea-Bissau": "Bissau-Guinea", + "Guinea": "Guinea", + "Guernsey": "Guernsey", + "Guatemala": "Guatemala", + "Guam": "Guam", + "Guadeloupe": "Guadeloupe", + "Grenada": "Grenada", + "Greenland": "Grönland", + "Greece": "Görögország", + "Gibraltar": "Gibraltár" } From d558260d5796be81bdda68ff3328f87744ec1941 Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Tue, 10 Nov 2020 20:53:37 +0000 Subject: [PATCH 050/115] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/pt_BR/ --- src/i18n/strings/pt_BR.json | 152 +++++++++++++++++++++++++++++++++++- 1 file changed, 151 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 8e0c3eea0b..c1e95d7c0b 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -2619,5 +2619,155 @@ "Åland Islands": "Ilhas Aland", "Afghanistan": "Afeganistão", "United States": "Estados Unidos", - "United Kingdom": "Reino Unido" + "United Kingdom": "Reino Unido", + "French Southern Territories": "Territórios Austrais e Antárticos Franceses", + "Congo - Brazzaville": "Congo", + "Czech Republic": "República Tcheca", + "Congo - Kinshasa": "República Democrática do Congo", + "U.S. Virgin Islands": "Ilhas Virgens Americanas", + "Tuvalu": "Tuvalu", + "Turks & Caicos Islands": "Ilhas Turcas e Caicos", + "St. Pierre & Miquelon": "São Pedro e Miquelon", + "Turkmenistan": "Turcomenistão", + "Tokelau": "Tokelau", + "Tajikistan": "Tajiquistão", + "Swaziland": "Suazilândia", + "Svalbard & Jan Mayen": "Svalbard e Jan Mayen", + "St. Vincent & Grenadines": "São Vicente e Granadinas", + "St. Martin": "São Martinho", + "St. Kitts & Nevis": "São Cristóvão e Nevis", + "Seychelles": "Seychelles", + "Netherlands": "Países Baixos", + "Kazakhstan": "Cazaquistão", + "Jersey": "Jersey", + "Heard & McDonald Islands": "Ilha Heard e Ilhas McDonald", + "Dominica": "Dominica", + "Caribbean Netherlands": "Países Baixos Caribenhos", + "South Georgia & South Sandwich Islands": "Ilhas Geórgia do Sul e Sandwich do Sul", + "Sint Maarten": "São Martinho", + "Libya": "Líbia", + "Liberia": "Libéria", + "Lesotho": "Lesoto", + "Lebanon": "Líbano", + "Latvia": "Letônia", + "Laos": "Laos", + "Kyrgyzstan": "Quirguistão", + "Kuwait": "Kuwait", + "Kosovo": "Kosovo", + "Kiribati": "Kiribati", + "Tunisia": "Tunísia", + "Trinidad & Tobago": "Trindade e Tobago", + "Tonga": "Tonga", + "Togo": "Togo", + "Timor-Leste": "Timor-Leste", + "Thailand": "Tailândia", + "Tanzania": "Tanzânia", + "Taiwan": "Taiwan", + "São Tomé & Príncipe": "São Tomé e Príncipe", + "Syria": "Síria", + "Switzerland": "Suíça", + "Sweden": "Suécia", + "Suriname": "Suriname", + "Sudan": "Sudão", + "St. Lucia": "Santa Lúcia", + "St. Helena": "Santa Helena", + "St. Barthélemy": "São Bartolomeu", + "Sri Lanka": "Sri Lanka", + "San Marino": "San Marino", + "Samoa": "Samoa", + "Réunion": "Reunião", + "Rwanda": "Ruanda", + "Qatar": "Catar", + "Pitcairn Islands": "Ilhas Pitcairn", + "Philippines": "Filipinas", + "Montserrat": "Montserrat", + "Macedonia": "Macedônia", + "Papua New Guinea": "Papua-Nova Guiné", + "Palau": "Palau", + "Oman": "Omã", + "Northern Mariana Islands": "Ilhas Marianas do Norte", + "Norfolk Island": "Ilha Norfolk", + "Niue": "Niue", + "New Caledonia": "Nova Caledônia", + "Namibia": "Namíbia", + "Myanmar": "Myanmar", + "Mozambique": "Moçambique", + "Morocco": "Marrocos", + "Montenegro": "Montenegro", + "Mongolia": "Mongólia", + "Monaco": "Mônaco", + "Moldova": "Moldávia", + "Micronesia": "Micronésia", + "Mexico": "México", + "Mayotte": "Mayotte", + "Mauritius": "Maurício", + "Mauritania": "Mauritânia", + "Martinique": "Martinica", + "Marshall Islands": "Ilhas Marshall", + "Malta": "Malta", + "Mali": "Mali", + "Maldives": "Maldivas", + "Malaysia": "Malásia", + "Malawi": "Malawi", + "Madagascar": "Madagascar", + "Macau": "Macau", + "Luxembourg": "Luxemburgo", + "Lithuania": "Lituânia", + "Liechtenstein": "Liechtenstein", + "Kenya": "Quênia", + "Isle of Man": "Ilha de Man", + "Guinea": "Guiné", + "Guernsey": "Guernsey", + "Guatemala": "Guatemala", + "Guam": "Guam", + "Guadeloupe": "Guadalupe", + "Grenada": "Granada", + "Greenland": "Groenlândia", + "Greece": "Grécia", + "Gibraltar": "Gibraltar", + "Ghana": "Gana", + "Germany": "Alemanha", + "Georgia": "Geórgia", + "Gambia": "Gâmbia", + "Gabon": "Gabão", + "French Polynesia": "Polinésia Francesa", + "French Guiana": "Guiana Francesa", + "Finland": "Finlândia", + "Fiji": "Fiji", + "Faroe Islands": "Ilhas Faroé", + "Falkland Islands": "Ilhas Malvinas", + "Ethiopia": "Etiópia", + "Estonia": "Estônia", + "Eritrea": "Eritreia", + "Equatorial Guinea": "Guiné Equatorial", + "El Salvador": "El Salvador", + "Dominican Republic": "República Dominicana", + "Djibouti": "Djibouti", + "Curaçao": "Curaçao", + "Cook Islands": "Ilhas Cook", + "Cocos (Keeling) Islands": "Ilhas Cocos (Keeling)", + "Christmas Island": "Ilha Christmas", + "Central African Republic": "República Centro-Africana", + "Cayman Islands": "Ilhas Cayman", + "%(creator)s created this DM.": "%(creator)s criou esta conversa.", + "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "As mensagens nesta sala são criptografadas de ponta a ponta. Quando as pessoas entrarem na conversa, você poderá confirmá-las em seus perfis. Basta clicar em suas fotos de perfil.", + "Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "As mensagens aqui são criptografadas de ponta a ponta. Confirme o perfil de %(displayName)s - clique em sua foto de perfil.", + "This is the start of .": "Este é o início de .", + "Add a photo, so people can easily spot your room.": "Adicione uma imagem para que as pessoas possam identificar facilmente sua sala.", + "%(displayName)s created this room.": "%(displayName)s criou esta sala.", + "You created this room.": "Você criou esta sala.", + "Add a topic to help people know what it is about.": "Adicione uma descrição para ajudar as pessoas a saber do que se trata essa conversa.", + "Topic: %(topic)s ": "Descrição: %(topic)s ", + "Topic: %(topic)s (edit)": "Descrição: %(topic)s (editar)", + "This is the beginning of your direct message history with .": "Este é o início do seu histórico da conversa com .", + "Only the two of you are in this conversation, unless either of you invites anyone to join.": "Apenas vocês dois estão nesta conversa, a menos que algum de vocês convide mais alguém.", + "Call Paused": "Chamada em pausa", + "Takes the call in the current room off hold": "Retoma a chamada na sala atual", + "Places the call in the current room on hold": "Pausa a chamada na sala atual", + "Yemen": "Iêmen", + "Western Sahara": "Saara Ocidental", + "Wallis & Futuna": "Wallis e Futuna", + "Vatican City": "Cidade do Vaticano", + "Vanuatu": "Vanuatu", + "Uzbekistan": "Uzbequistão" } From 802be32ff16218dd9efa0c33cabd278abe349140 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 11 Nov 2020 02:10:13 +0000 Subject: [PATCH 051/115] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index dbcfb743c5..dcddb54496 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2826,5 +2826,20 @@ "Åland Islands": "奧蘭", "Afghanistan": "阿富汗", "United States": "美國", - "United Kingdom": "英國" + "United Kingdom": "英國", + "%(creator)s created this DM.": "%(creator)s 建立了此直接訊息。", + "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "此聊天適中的訊息為端到端加密。當人們加入,您可以在他們的個人檔案中驗證他們,只要點擊他們的大頭照就可以了。", + "Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "此處的訊息為端到端加密。請在他們的個人檔案中驗證 %(displayName)s,只要點擊他們的大頭照就可以了。", + "This is the start of .": "這是 的開頭。", + "Add a photo, so people can easily spot your room.": "新增圖片,這樣人們就可以輕鬆發現您的聊天室。", + "%(displayName)s created this room.": "%(displayName)s 建立了此聊天室。", + "You created this room.": "您建立了此聊天室。", + "Add a topic to help people know what it is about.": "新增主題以協助人們了解這裡在做什麼。", + "Topic: %(topic)s ": "主題:%(topic)s ", + "Topic: %(topic)s (edit)": "主題:%(topic)s(編輯)", + "This is the beginning of your direct message history with .": "這是使用 傳送的您的直接訊息歷史紀錄的開頭。", + "Only the two of you are in this conversation, unless either of you invites anyone to join.": "除非你們兩個其中一個邀請任何人加入,否則只會有你們兩個在此對話中。", + "Call Paused": "通話已暫停", + "Takes the call in the current room off hold": "讓目前聊天室中的通話保持等候接聽的狀態", + "Places the call in the current room on hold": "在目前的聊天室撥打通話並等候接聽" } From c67b0b14ed0fa4c2043a93969a5e55b5d5e60d46 Mon Sep 17 00:00:00 2001 From: XoseM Date: Wed, 11 Nov 2020 06:06:26 +0000 Subject: [PATCH 052/115] Translated using Weblate (Galician) Currently translated at 92.5% (2446 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 48 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 9448042def..1134f138ea 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2596,5 +2596,51 @@ "Åland Islands": "Åland Islands", "Afghanistan": "Afghanistán", "United States": "EEUU de América", - "United Kingdom": "Reino Unido" + "United Kingdom": "Reino Unido", + "Ecuador": "Ecuador", + "Dominican Republic": "República Dominicana", + "Dominica": "Dominica", + "Djibouti": "Djibouti", + "Denmark": "Dinamarca", + "Côte d’Ivoire": "Costa de Marfil", + "Czech Republic": "República Checa", + "Cyprus": "Chipre", + "Curaçao": "Curaçao", + "Cuba": "Cuba", + "Croatia": "Croacia", + "Costa Rica": "Costa Rica", + "Cook Islands": "Cook Islands", + "Congo - Kinshasa": "Congo - Kinshasa", + "Congo - Brazzaville": "Congo - Brazzaville", + "Comoros": "Comoros", + "Colombia": "Colombia", + "Cocos (Keeling) Islands": "Cocos (Keeling) Islands", + "Christmas Island": "Christmas Island", + "China": "China", + "Chile": "Chile", + "Chad": "Chad", + "Central African Republic": "República Centroafricana", + "Cayman Islands": "Illas caimán", + "Caribbean Netherlands": "Paises baixos do Caribe", + "Cape Verde": "Cabo Verde", + "Canada": "Canadá", + "Cameroon": "Camerún", + "Cambodia": "Cambodia", + "Burundi": "Burundi", + "Burkina Faso": "Burkina Faso", + "Bulgaria": "Bulgaria", + "Brunei": "Brunei", + "British Virgin Islands": "British Virgin Islands", + "British Indian Ocean Territory": "British Indian Ocean Territory", + "Brazil": "Brasil", + "Bouvet Island": "Illa Bouvet", + "Botswana": "Botswana", + "Bosnia": "Bosnia", + "Bolivia": "Bolivia", + "Bhutan": "Bután", + "Bermuda": "Bermuda", + "Benin": "Benín", + "Belize": "Belice", + "Belgium": "Bélxica", + "Belarus": "Belarús" } From d5c399dfd9f5265230f44fb92fd124a12fdbc5ce Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 11 Nov 2020 12:56:20 +0000 Subject: [PATCH 053/115] Fix Left Panel layout being wrong when filtering with 0 rooms --- src/components/structures/LeftPanel.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/structures/LeftPanel.tsx b/src/components/structures/LeftPanel.tsx index 4445ff3ff8..52d461edcc 100644 --- a/src/components/structures/LeftPanel.tsx +++ b/src/components/structures/LeftPanel.tsx @@ -46,6 +46,7 @@ interface IProps { } interface IState { + isFiltering: boolean; showBreadcrumbs: boolean; showGroupFilterPanel: boolean; } @@ -70,6 +71,7 @@ export default class LeftPanel extends React.Component { super(props); this.state = { + isFiltering: !!RoomListStore.instance.getFirstNameFilterCondition(), showBreadcrumbs: BreadcrumbsStore.instance.visible, showGroupFilterPanel: SettingsStore.getValue('TagPanel.enableTagPanel'), }; @@ -102,9 +104,10 @@ export default class LeftPanel extends React.Component { }; private onBreadcrumbsUpdate = () => { - const newVal = BreadcrumbsStore.instance.visible; - if (newVal !== this.state.showBreadcrumbs) { - this.setState({showBreadcrumbs: newVal}); + const showBreadcrumbs = BreadcrumbsStore.instance.visible; + const isFiltering = !!RoomListStore.instance.getFirstNameFilterCondition(); + if (showBreadcrumbs !== this.state.showBreadcrumbs || isFiltering !== this.state.isFiltering) { + this.setState({showBreadcrumbs, isFiltering}); // Update the sticky headers too as the breadcrumbs will be popping in or out. if (!this.listContainerRef.current) return; // ignore: no headers to sticky From 187901004d0a97818b95f2a184cb731f9b5bd2e8 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 11 Nov 2020 13:01:40 +0000 Subject: [PATCH 054/115] Fix the Join rooms prompt not showing up due to missing updates --- src/components/structures/LeftPanel.tsx | 9 +++------ src/components/views/rooms/RoomList.tsx | 9 ++++++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/components/structures/LeftPanel.tsx b/src/components/structures/LeftPanel.tsx index 52d461edcc..4445ff3ff8 100644 --- a/src/components/structures/LeftPanel.tsx +++ b/src/components/structures/LeftPanel.tsx @@ -46,7 +46,6 @@ interface IProps { } interface IState { - isFiltering: boolean; showBreadcrumbs: boolean; showGroupFilterPanel: boolean; } @@ -71,7 +70,6 @@ export default class LeftPanel extends React.Component { super(props); this.state = { - isFiltering: !!RoomListStore.instance.getFirstNameFilterCondition(), showBreadcrumbs: BreadcrumbsStore.instance.visible, showGroupFilterPanel: SettingsStore.getValue('TagPanel.enableTagPanel'), }; @@ -104,10 +102,9 @@ export default class LeftPanel extends React.Component { }; private onBreadcrumbsUpdate = () => { - const showBreadcrumbs = BreadcrumbsStore.instance.visible; - const isFiltering = !!RoomListStore.instance.getFirstNameFilterCondition(); - if (showBreadcrumbs !== this.state.showBreadcrumbs || isFiltering !== this.state.isFiltering) { - this.setState({showBreadcrumbs, isFiltering}); + const newVal = BreadcrumbsStore.instance.visible; + if (newVal !== this.state.showBreadcrumbs) { + this.setState({showBreadcrumbs: newVal}); // Update the sticky headers too as the breadcrumbs will be popping in or out. if (!this.listContainerRef.current) return; // ignore: no headers to sticky diff --git a/src/components/views/rooms/RoomList.tsx b/src/components/views/rooms/RoomList.tsx index d952c137cd..3e9a8ac102 100644 --- a/src/components/views/rooms/RoomList.tsx +++ b/src/components/views/rooms/RoomList.tsx @@ -58,6 +58,7 @@ interface IProps { interface IState { sublists: ITagMap; + isNameFiltering: boolean; } const TAG_ORDER: TagID[] = [ @@ -183,6 +184,7 @@ export default class RoomList extends React.PureComponent { this.state = { sublists: {}, + isNameFiltering: !!RoomListStore.instance.getFirstNameFilterCondition(), }; this.dispatcherRef = defaultDispatcher.register(this.onAction); @@ -253,7 +255,8 @@ export default class RoomList extends React.PureComponent { return CustomRoomTagStore.getTags()[t]; }); - let doUpdate = arrayHasDiff(previousListIds, newListIds); + const isNameFiltering = !!RoomListStore.instance.getFirstNameFilterCondition(); + let doUpdate = this.state.isNameFiltering !== isNameFiltering || arrayHasDiff(previousListIds, newListIds); if (!doUpdate) { // so we didn't have the visible sublists change, but did the contents of those // sublists change significantly enough to break the sticky headers? Probably, so @@ -275,7 +278,7 @@ export default class RoomList extends React.PureComponent { const newSublists = objectWithOnly(newLists, newListIds); const sublists = objectShallowClone(newSublists, (k, v) => arrayFastClone(v)); - this.setState({sublists}, () => { + this.setState({sublists, isNameFiltering}, () => { this.props.onResize(); }); } @@ -370,7 +373,7 @@ export default class RoomList extends React.PureComponent { public render() { let explorePrompt: JSX.Element; if (!this.props.isMinimized) { - if (RoomListStore.instance.getFirstNameFilterCondition()) { + if (this.state.isNameFiltering) { explorePrompt =
{_t("Can't see what you’re looking for?")}
From d3fee540c5b8223b80301791e9bb38ac19dd68ca Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 11 Nov 2020 13:08:09 +0000 Subject: [PATCH 055/115] Update Room List filter copy --- src/components/structures/RoomSearch.tsx | 4 ++-- src/i18n/strings/en_EN.json | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/structures/RoomSearch.tsx b/src/components/structures/RoomSearch.tsx index 526aecddd7..a64e40bc65 100644 --- a/src/components/structures/RoomSearch.tsx +++ b/src/components/structures/RoomSearch.tsx @@ -148,7 +148,7 @@ export default class RoomSearch extends React.PureComponent { onBlur={this.onBlur} onChange={this.onChange} onKeyDown={this.onKeyDown} - placeholder={_t("Search")} + placeholder={_t("Filter")} autoComplete="off" /> ); @@ -164,7 +164,7 @@ export default class RoomSearch extends React.PureComponent { if (this.props.isMinimized) { icon = ( diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 830d3cdee4..701bee457f 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2372,8 +2372,9 @@ "Find a room… (e.g. %(exampleRoom)s)": "Find a room… (e.g. %(exampleRoom)s)", "If you can't find the room you're looking for, ask for an invite or Create a new room.": "If you can't find the room you're looking for, ask for an invite or Create a new room.", "Explore rooms in %(communityName)s": "Explore rooms in %(communityName)s", + "Filter": "Filter", "Clear filter": "Clear filter", - "Search rooms": "Search rooms", + "Filter rooms and people": "Filter rooms and people", "You can't send any messages until you review and agree to our terms and conditions.": "You can't send any messages until you review and agree to our terms and conditions.", "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.", "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.", From a481f3bdf1d6be30538185fda44718acb9d3863b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 11 Nov 2020 13:21:20 +0000 Subject: [PATCH 056/115] Iterate the filtering prompt --- res/css/views/rooms/_RoomList.scss | 9 ++++++- src/components/views/rooms/RoomList.tsx | 35 ++++++++++++++++++++++--- src/i18n/strings/en_EN.json | 1 + 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/res/css/views/rooms/_RoomList.scss b/res/css/views/rooms/_RoomList.scss index 78e7307bc0..6ea99585d2 100644 --- a/res/css/views/rooms/_RoomList.scss +++ b/res/css/views/rooms/_RoomList.scss @@ -33,7 +33,6 @@ limitations under the License. div:first-child { font-weight: $font-semi-bold; - margin-bottom: 8px; } .mx_AccessibleButton { @@ -41,6 +40,7 @@ limitations under the License. position: relative; padding: 0 0 0 24px; font-size: inherit; + margin-top: 8px; &::before { content: ''; @@ -53,6 +53,13 @@ limitations under the License. mask-position: center; mask-size: contain; mask-repeat: no-repeat; + } + + &.mx_RoomList_explorePrompt_startChat::before { + mask-image: url('$(res)/img/element-icons/feedback.svg'); + } + + &.mx_RoomList_explorePrompt_explore::before { mask-image: url('$(res)/img/element-icons/roomlist/explore.svg'); } } diff --git a/src/components/views/rooms/RoomList.tsx b/src/components/views/rooms/RoomList.tsx index 3e9a8ac102..de54fabc53 100644 --- a/src/components/views/rooms/RoomList.tsx +++ b/src/components/views/rooms/RoomList.tsx @@ -284,6 +284,10 @@ export default class RoomList extends React.PureComponent { } }; + private onStartChat = () => { + dis.dispatch({action: "view_create_chat"}); + }; + private onExplore = () => { dis.fire(Action.ViewRoomDirectory); }; @@ -335,8 +339,9 @@ export default class RoomList extends React.PureComponent { return p; }, [] as TagID[]); - // show a skeleton UI if the user is in no rooms - const showSkeleton = Object.values(RoomListStore.instance.unfilteredLists).every(list => !list?.length); + // show a skeleton UI if the user is in no rooms and they are not filtering + const showSkeleton = !this.state.isNameFiltering && + Object.values(RoomListStore.instance.unfilteredLists).every(list => !list?.length); for (const orderedTagId of tagOrder) { const orderedRooms = this.state.sublists[orderedTagId] || []; @@ -376,7 +381,18 @@ export default class RoomList extends React.PureComponent { if (this.state.isNameFiltering) { explorePrompt =
{_t("Can't see what you’re looking for?")}
- + + {_t("Start a new chat")} + + {_t("Explore all public rooms")}
; @@ -388,7 +404,18 @@ export default class RoomList extends React.PureComponent { if (unfilteredRooms.length < 1 && unfilteredHistorical < 1) { explorePrompt =
{_t("Use the + to make a new room or explore existing ones below")}
- + + {_t("Start a new chat")} + + {_t("Explore all public rooms")}
; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 701bee457f..3bfa962216 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1391,6 +1391,7 @@ "Historical": "Historical", "Custom Tag": "Custom Tag", "Can't see what you’re looking for?": "Can't see what you’re looking for?", + "Start a new chat": "Start a new chat", "Explore all public rooms": "Explore all public rooms", "Use the + to make a new room or explore existing ones below": "Use the + to make a new room or explore existing ones below", "%(count)s results|other": "%(count)s results", From d0513406ee1d78ca82f144a8e72f59a23050965a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 11 Nov 2020 13:36:17 +0000 Subject: [PATCH 057/115] Pass filter text when clicking explore/dm prompt --- src/RoomInvite.js | 4 +- src/components/structures/MatrixChat.tsx | 7 +- src/components/structures/RoomDirectory.js | 4 +- src/components/views/dialogs/InviteDialog.js | 230 ++++++++++-------- .../views/elements/DirectorySearchBox.js | 30 ++- src/components/views/rooms/RoomList.tsx | 6 +- 6 files changed, 153 insertions(+), 128 deletions(-) diff --git a/src/RoomInvite.js b/src/RoomInvite.js index 7eb7f5dbb2..06d3fb04e8 100644 --- a/src/RoomInvite.js +++ b/src/RoomInvite.js @@ -40,11 +40,11 @@ export function inviteMultipleToRoom(roomId, addrs) { return inviter.invite(addrs).then(states => Promise.resolve({states, inviter})); } -export function showStartChatInviteDialog() { +export function showStartChatInviteDialog(initialText) { // This dialog handles the room creation internally - we don't need to worry about it. const InviteDialog = sdk.getComponent("dialogs.InviteDialog"); Modal.createTrackedDialog( - 'Start DM', '', InviteDialog, {kind: KIND_DM}, + 'Start DM', '', InviteDialog, {kind: KIND_DM, initialText}, /*className=*/null, /*isPriority=*/false, /*isStatic=*/true, ); } diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 22cd73eff7..b2c94e4a8b 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -653,8 +653,9 @@ export default class MatrixChat extends React.PureComponent { } case Action.ViewRoomDirectory: { const RoomDirectory = sdk.getComponent("structures.RoomDirectory"); - Modal.createTrackedDialog('Room directory', '', RoomDirectory, {}, - 'mx_RoomDirectory_dialogWrapper', false, true); + Modal.createTrackedDialog('Room directory', '', RoomDirectory, { + initialText: payload.initialText, + }, 'mx_RoomDirectory_dialogWrapper', false, true); // View the welcome or home page if we need something to look at this.viewSomethingBehindModal(); @@ -677,7 +678,7 @@ export default class MatrixChat extends React.PureComponent { this.chatCreateOrReuse(payload.user_id); break; case 'view_create_chat': - showStartChatInviteDialog(); + showStartChatInviteDialog(payload.initialText || ""); break; case 'view_invite': showRoomInviteDialog(payload.roomId); diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js index ece70e3a8f..e3323b05fa 100644 --- a/src/components/structures/RoomDirectory.js +++ b/src/components/structures/RoomDirectory.js @@ -44,6 +44,7 @@ function track(action) { export default class RoomDirectory extends React.Component { static propTypes = { + initialText: PropTypes.string, onFinished: PropTypes.func.isRequired, }; @@ -61,7 +62,7 @@ export default class RoomDirectory extends React.Component { error: null, instanceId: undefined, roomServer: MatrixClientPeg.getHomeserverName(), - filterString: null, + filterString: this.props.initialText || "", selectedCommunityId: SettingsStore.getValue("feature_communities_v2_prototypes") ? selectedCommunityId : null, @@ -686,6 +687,7 @@ export default class RoomDirectory extends React.Component { onJoinClick={this.onJoinFromSearchClick} placeholder={placeholder} showJoinButton={showJoinButton} + initialText={this.props.initialText} /> {dropdown}
; diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js index 99878569d3..9b7c5803a1 100644 --- a/src/components/views/dialogs/InviteDialog.js +++ b/src/components/views/dialogs/InviteDialog.js @@ -308,10 +308,14 @@ export default class InviteDialog extends React.PureComponent { // The room ID this dialog is for. Only required for KIND_INVITE. roomId: PropTypes.string, + + // Initial value to populate the filter with + initialText: PropTypes.string, }; static defaultProps = { kind: KIND_DM, + initialText: "", }; _debounceTimer: number = null; @@ -338,7 +342,7 @@ export default class InviteDialog extends React.PureComponent { this.state = { targets: [], // array of Member objects (see interface above) - filterText: "", + filterText: this.props.initialText, recents: InviteDialog.buildRecents(alreadyInvited), numRecentsShown: INITIAL_ROOMS_SHOWN, suggestions: this._buildSuggestions(alreadyInvited), @@ -356,6 +360,12 @@ export default class InviteDialog extends React.PureComponent { this._editorRef = createRef(); } + componentDidMount() { + if (this.props.initialText) { + this._updateSuggestions(this.props.initialText); + } + } + static buildRecents(excludedTargetIds: Set): {userId: string, user: RoomMember, lastActive: number} { const rooms = DMRoomMap.shared().getUniqueRoomsWithIndividuals(); // map of userId => js-sdk Room @@ -687,6 +697,115 @@ export default class InviteDialog extends React.PureComponent { } }; + _updateSuggestions = async (term) => { + MatrixClientPeg.get().searchUserDirectory({term}).then(async r => { + if (term !== this.state.filterText) { + // Discard the results - we were probably too slow on the server-side to make + // these results useful. This is a race we want to avoid because we could overwrite + // more accurate results. + return; + } + + if (!r.results) r.results = []; + + // While we're here, try and autocomplete a search result for the mxid itself + // if there's no matches (and the input looks like a mxid). + if (term[0] === '@' && term.indexOf(':') > 1) { + try { + const profile = await MatrixClientPeg.get().getProfileInfo(term); + if (profile) { + // If we have a profile, we have enough information to assume that + // the mxid can be invited - add it to the list. We stick it at the + // top so it is most obviously presented to the user. + r.results.splice(0, 0, { + user_id: term, + display_name: profile['displayname'], + avatar_url: profile['avatar_url'], + }); + } + } catch (e) { + console.warn("Non-fatal error trying to make an invite for a user ID"); + console.warn(e); + + // Add a result anyways, just without a profile. We stick it at the + // top so it is most obviously presented to the user. + r.results.splice(0, 0, { + user_id: term, + display_name: term, + avatar_url: null, + }); + } + } + + this.setState({ + serverResultsMixin: r.results.map(u => ({ + userId: u.user_id, + user: new DirectoryMember(u), + })), + }); + }).catch(e => { + console.error("Error searching user directory:"); + console.error(e); + this.setState({serverResultsMixin: []}); // clear results because it's moderately fatal + }); + + // Whenever we search the directory, also try to search the identity server. It's + // all debounced the same anyways. + if (!this.state.canUseIdentityServer) { + // The user doesn't have an identity server set - warn them of that. + this.setState({tryingIdentityServer: true}); + return; + } + if (term.indexOf('@') > 0 && Email.looksValid(term) && SettingsStore.getValue(UIFeature.IdentityServer)) { + // Start off by suggesting the plain email while we try and resolve it + // to a real account. + this.setState({ + // per above: the userId is a lie here - it's just a regular identifier + threepidResultsMixin: [{user: new ThreepidMember(term), userId: term}], + }); + try { + const authClient = new IdentityAuthClient(); + const token = await authClient.getAccessToken(); + if (term !== this.state.filterText) return; // abandon hope + + const lookup = await MatrixClientPeg.get().lookupThreePid( + 'email', + term, + undefined, // callback + token, + ); + if (term !== this.state.filterText) return; // abandon hope + + if (!lookup || !lookup.mxid) { + // We weren't able to find anyone - we're already suggesting the plain email + // as an alternative, so do nothing. + return; + } + + // We append the user suggestion to give the user an option to click + // the email anyways, and so we don't cause things to jump around. In + // theory, the user would see the user pop up and think "ah yes, that + // person!" + const profile = await MatrixClientPeg.get().getProfileInfo(lookup.mxid); + if (term !== this.state.filterText || !profile) return; // abandon hope + this.setState({ + threepidResultsMixin: [...this.state.threepidResultsMixin, { + user: new DirectoryMember({ + user_id: lookup.mxid, + display_name: profile.displayname, + avatar_url: profile.avatar_url, + }), + userId: lookup.mxid, + }], + }); + } catch (e) { + console.error("Error searching identity server:"); + console.error(e); + this.setState({threepidResultsMixin: []}); // clear results because it's moderately fatal + } + } + }; + _updateFilter = (e) => { const term = e.target.value; this.setState({filterText: term}); @@ -697,113 +816,8 @@ export default class InviteDialog extends React.PureComponent { if (this._debounceTimer) { clearTimeout(this._debounceTimer); } - this._debounceTimer = setTimeout(async () => { - MatrixClientPeg.get().searchUserDirectory({term}).then(async r => { - if (term !== this.state.filterText) { - // Discard the results - we were probably too slow on the server-side to make - // these results useful. This is a race we want to avoid because we could overwrite - // more accurate results. - return; - } - - if (!r.results) r.results = []; - - // While we're here, try and autocomplete a search result for the mxid itself - // if there's no matches (and the input looks like a mxid). - if (term[0] === '@' && term.indexOf(':') > 1) { - try { - const profile = await MatrixClientPeg.get().getProfileInfo(term); - if (profile) { - // If we have a profile, we have enough information to assume that - // the mxid can be invited - add it to the list. We stick it at the - // top so it is most obviously presented to the user. - r.results.splice(0, 0, { - user_id: term, - display_name: profile['displayname'], - avatar_url: profile['avatar_url'], - }); - } - } catch (e) { - console.warn("Non-fatal error trying to make an invite for a user ID"); - console.warn(e); - - // Add a result anyways, just without a profile. We stick it at the - // top so it is most obviously presented to the user. - r.results.splice(0, 0, { - user_id: term, - display_name: term, - avatar_url: null, - }); - } - } - - this.setState({ - serverResultsMixin: r.results.map(u => ({ - userId: u.user_id, - user: new DirectoryMember(u), - })), - }); - }).catch(e => { - console.error("Error searching user directory:"); - console.error(e); - this.setState({serverResultsMixin: []}); // clear results because it's moderately fatal - }); - - // Whenever we search the directory, also try to search the identity server. It's - // all debounced the same anyways. - if (!this.state.canUseIdentityServer) { - // The user doesn't have an identity server set - warn them of that. - this.setState({tryingIdentityServer: true}); - return; - } - if (term.indexOf('@') > 0 && Email.looksValid(term) && SettingsStore.getValue(UIFeature.IdentityServer)) { - // Start off by suggesting the plain email while we try and resolve it - // to a real account. - this.setState({ - // per above: the userId is a lie here - it's just a regular identifier - threepidResultsMixin: [{user: new ThreepidMember(term), userId: term}], - }); - try { - const authClient = new IdentityAuthClient(); - const token = await authClient.getAccessToken(); - if (term !== this.state.filterText) return; // abandon hope - - const lookup = await MatrixClientPeg.get().lookupThreePid( - 'email', - term, - undefined, // callback - token, - ); - if (term !== this.state.filterText) return; // abandon hope - - if (!lookup || !lookup.mxid) { - // We weren't able to find anyone - we're already suggesting the plain email - // as an alternative, so do nothing. - return; - } - - // We append the user suggestion to give the user an option to click - // the email anyways, and so we don't cause things to jump around. In - // theory, the user would see the user pop up and think "ah yes, that - // person!" - const profile = await MatrixClientPeg.get().getProfileInfo(lookup.mxid); - if (term !== this.state.filterText || !profile) return; // abandon hope - this.setState({ - threepidResultsMixin: [...this.state.threepidResultsMixin, { - user: new DirectoryMember({ - user_id: lookup.mxid, - display_name: profile.displayname, - avatar_url: profile.avatar_url, - }), - userId: lookup.mxid, - }], - }); - } catch (e) { - console.error("Error searching identity server:"); - console.error(e); - this.setState({threepidResultsMixin: []}); // clear results because it's moderately fatal - } - } + this._debounceTimer = setTimeout(() => { + this._updateSuggestions(term); }, 150); // 150ms debounce (human reaction time + some) }; diff --git a/src/components/views/elements/DirectorySearchBox.js b/src/components/views/elements/DirectorySearchBox.js index c2e8e4fd68..644b69417b 100644 --- a/src/components/views/elements/DirectorySearchBox.js +++ b/src/components/views/elements/DirectorySearchBox.js @@ -20,8 +20,8 @@ import * as sdk from '../../../index'; import { _t } from '../../../languageHandler'; export default class DirectorySearchBox extends React.Component { - constructor() { - super(); + constructor(props) { + super(props); this._collectInput = this._collectInput.bind(this); this._onClearClick = this._onClearClick.bind(this); this._onChange = this._onChange.bind(this); @@ -31,7 +31,7 @@ export default class DirectorySearchBox extends React.Component { this.input = null; this.state = { - value: '', + value: this.props.initialText || '', }; } @@ -90,15 +90,20 @@ export default class DirectorySearchBox extends React.Component { } return
- - { joinButton } - -
; + + { joinButton } + + ; } } @@ -109,4 +114,5 @@ DirectorySearchBox.propTypes = { onJoinClick: PropTypes.func, placeholder: PropTypes.string, showJoinButton: PropTypes.bool, + initialText: PropTypes.string, }; diff --git a/src/components/views/rooms/RoomList.tsx b/src/components/views/rooms/RoomList.tsx index de54fabc53..6e677f2b01 100644 --- a/src/components/views/rooms/RoomList.tsx +++ b/src/components/views/rooms/RoomList.tsx @@ -285,11 +285,13 @@ export default class RoomList extends React.PureComponent { }; private onStartChat = () => { - dis.dispatch({action: "view_create_chat"}); + const initialText = RoomListStore.instance.getFirstNameFilterCondition()?.search; + dis.dispatch({ action: "view_create_chat", initialText }); }; private onExplore = () => { - dis.fire(Action.ViewRoomDirectory); + const initialText = RoomListStore.instance.getFirstNameFilterCondition()?.search; + dis.dispatch({ action: Action.ViewRoomDirectory, initialText }); }; private renderCommunityInvites(): TemporaryTile[] { From 0bee4bd72bbdde493a0eed3a55d07944e219897d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 11 Nov 2020 13:45:50 +0000 Subject: [PATCH 058/115] Update `Confirm` password placeholder --- src/components/views/auth/RegistrationForm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/auth/RegistrationForm.js b/src/components/views/auth/RegistrationForm.js index 419443984a..5245d1a921 100644 --- a/src/components/views/auth/RegistrationForm.js +++ b/src/components/views/auth/RegistrationForm.js @@ -461,7 +461,7 @@ export default class RegistrationForm extends React.Component { ref={field => this[FIELD_PASSWORD_CONFIRM] = field} type="password" autoComplete="new-password" - label={_t("Confirm")} + label={_t("Confirm password")} value={this.state.passwordConfirm} onChange={this.onPasswordConfirmChange} onValidate={this.onPasswordConfirmValidate} From b3ccabbe6bfdfae580862307c6739b06652f6118 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 11 Nov 2020 14:00:40 +0000 Subject: [PATCH 059/115] Clear recaptcha error on reattempts --- src/components/views/auth/CaptchaForm.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/views/auth/CaptchaForm.js b/src/components/views/auth/CaptchaForm.js index 5cce93f0b8..e2d7d594fa 100644 --- a/src/components/views/auth/CaptchaForm.js +++ b/src/components/views/auth/CaptchaForm.js @@ -102,6 +102,10 @@ export default class CaptchaForm extends React.Component { console.log("Loaded recaptcha script."); try { this._renderRecaptcha(DIV_ID); + // clear error if re-rendered + this.setState({ + errorText: null, + }); CountlyAnalytics.instance.track("onboarding_grecaptcha_loaded"); } catch (e) { this.setState({ From edb5e10506cd79349adff8e7d16dc8810b311abd Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 11 Nov 2020 15:07:57 +0000 Subject: [PATCH 060/115] Iterate registration to simplify it based on usertesting --- .../auth/_InteractiveAuthEntryComponents.scss | 29 +++++++++ res/img/element-icons/email-prompt.svg | 13 ++++ .../structures/auth/Registration.js | 63 ++++++++++++------- .../auth/InteractiveAuthEntryComponents.js | 8 +-- src/components/views/auth/RegistrationForm.js | 32 ---------- 5 files changed, 86 insertions(+), 59 deletions(-) create mode 100644 res/img/element-icons/email-prompt.svg diff --git a/res/css/views/auth/_InteractiveAuthEntryComponents.scss b/res/css/views/auth/_InteractiveAuthEntryComponents.scss index 05cddf2c48..0a5ac9b2bc 100644 --- a/res/css/views/auth/_InteractiveAuthEntryComponents.scss +++ b/res/css/views/auth/_InteractiveAuthEntryComponents.scss @@ -14,6 +14,35 @@ See the License for the specific language governing permissions and limitations under the License. */ +.mx_InteractiveAuthEntryComponents_emailWrapper { + padding-right: 60px; + position: relative; + margin-top: 32px; + margin-bottom: 32px; + + &::before, &::after { + position: absolute; + width: 116px; + height: 116px; + content: ""; + right: -10px; + } + + &::before { + background-color: rgba(244, 246, 250, 0.91); + border-radius: 50%; + top: -20px; + } + + &::after { + background-image: url('$(res)/img/element-icons/email-prompt.svg'); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + top: -25px; + } +} + .mx_InteractiveAuthEntryComponents_msisdnWrapper { text-align: center; } diff --git a/res/img/element-icons/email-prompt.svg b/res/img/element-icons/email-prompt.svg new file mode 100644 index 0000000000..19b8f82449 --- /dev/null +++ b/res/img/element-icons/email-prompt.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/components/structures/auth/Registration.js b/src/components/structures/auth/Registration.js index 630e04da9c..777d57344d 100644 --- a/src/components/structures/auth/Registration.js +++ b/src/components/structures/auth/Registration.js @@ -502,17 +502,9 @@ export default class Registration extends React.Component { return null; } - // If we're on a different phase, we only show the server type selector, - // which is always shown if we allow custom URLs at all. - // (if there's a fatal server error, we need to show the full server - // config as the user may need to change servers to resolve the error). - if (PHASES_ENABLED && this.state.phase !== PHASE_SERVER_DETAILS && !this.state.serverErrorIsFatal) { - return
- -
; + // Hide the server picker once the user is doing UI Auth unless encountered a fatal server error + if (this.state.phase !== PHASE_SERVER_DETAILS && this.state.doingUIAuth && !this.state.serverErrorIsFatal) { + return null; } const serverDetailsProps = {}; @@ -582,17 +574,6 @@ export default class Registration extends React.Component { ; } else if (this.state.flows.length) { - let onEditServerDetailsClick = null; - // If custom URLs are allowed and we haven't selected the Free server type, wire - // up the server details edit link. - if ( - PHASES_ENABLED && - !SdkConfig.get()['disable_custom_urls'] && - this.state.serverType !== ServerType.FREE - ) { - onEditServerDetailsClick = this.onEditServerDetailsClick; - } - return ; } else { + let yourMatrixAccountText = _t('Create your Matrix account on %(serverName)s', { + serverName: this.props.serverConfig.hsName, + }); + if (this.props.serverConfig.hsNameIsDifferent) { + const TextWithTooltip = sdk.getComponent("elements.TextWithTooltip"); + + yourMatrixAccountText = _t('Create your Matrix account on ', {}, { + 'underlinedServerName': () => { + return ; + }, + }); + } + + // If custom URLs are allowed, user is not doing UIA flows and they haven't selected the Free server type, + // wire up the server details edit link. + let editLink = null; + if (PHASES_ENABLED && + !SdkConfig.get()['disable_custom_urls'] && + this.state.serverType !== ServerType.FREE && + !this.state.doingUIAuth + ) { + editLink = ( + + {_t('Change')} + + ); + } + body =

{ _t('Create your account') }

{ errorText } { serverDeadSection } { this.renderServerComponent() } +

+ {yourMatrixAccountText} + {editLink} +

{ this.renderRegisterComponent() } { goBack } { signIn } diff --git a/src/components/views/auth/InteractiveAuthEntryComponents.js b/src/components/views/auth/InteractiveAuthEntryComponents.js index f49e6959fb..6628ca7120 100644 --- a/src/components/views/auth/InteractiveAuthEntryComponents.js +++ b/src/components/views/auth/InteractiveAuthEntryComponents.js @@ -421,12 +421,12 @@ export class EmailIdentityAuthEntry extends React.Component { return ; } else { return ( -
-

{ _t("An email has been sent to %(emailAddress)s", - { emailAddress: (sub) => { this.props.inputs.emailAddress } }, +

+

{ _t("A confirmation email has been sent to %(emailAddress)s", + { emailAddress: (sub) => { this.props.inputs.emailAddress } }, ) }

-

{ _t("Please check your email to continue registration.") }

+

{ _t("Open the link in the email to continue registration.") }

); } diff --git a/src/components/views/auth/RegistrationForm.js b/src/components/views/auth/RegistrationForm.js index 5245d1a921..70c1017427 100644 --- a/src/components/views/auth/RegistrationForm.js +++ b/src/components/views/auth/RegistrationForm.js @@ -51,7 +51,6 @@ export default class RegistrationForm extends React.Component { defaultUsername: PropTypes.string, defaultPassword: PropTypes.string, onRegisterClick: PropTypes.func.isRequired, // onRegisterClick(Object) => ?Promise - onEditServerDetailsClick: PropTypes.func, flows: PropTypes.arrayOf(PropTypes.object).isRequired, serverConfig: PropTypes.instanceOf(ValidatedServerConfig).isRequired, canSubmit: PropTypes.bool, @@ -513,33 +512,6 @@ export default class RegistrationForm extends React.Component { } render() { - let yourMatrixAccountText = _t('Create your Matrix account on %(serverName)s', { - serverName: this.props.serverConfig.hsName, - }); - if (this.props.serverConfig.hsNameIsDifferent) { - const TextWithTooltip = sdk.getComponent("elements.TextWithTooltip"); - - yourMatrixAccountText = _t('Create your Matrix account on ', {}, { - 'underlinedServerName': () => { - return ; - }, - }); - } - - let editLink = null; - if (this.props.onEditServerDetailsClick) { - editLink = - {_t('Change')} - ; - } - const registerButton = ( ); @@ -575,10 +547,6 @@ export default class RegistrationForm extends React.Component { return (
-

- {yourMatrixAccountText} - {editLink} -

{this.renderUsername()} From a2958f8f99e9b142cac482d888d6f9fcc0bc2e53 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 11 Nov 2020 16:45:46 +0000 Subject: [PATCH 061/115] i18n --- src/i18n/strings/en_EN.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 3bfa962216..d9bdd82c42 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2211,8 +2211,8 @@ "Missing captcha public key in homeserver configuration. Please report this to your homeserver administrator.": "Missing captcha public key in homeserver configuration. Please report this to your homeserver administrator.", "Please review and accept all of the homeserver's policies": "Please review and accept all of the homeserver's policies", "Please review and accept the policies of this homeserver:": "Please review and accept the policies of this homeserver:", - "An email has been sent to %(emailAddress)s": "An email has been sent to %(emailAddress)s", - "Please check your email to continue registration.": "Please check your email to continue registration.", + "A confirmation email has been sent to %(emailAddress)s": "A confirmation email has been sent to %(emailAddress)s", + "Open the link in the email to continue registration.": "Open the link in the email to continue registration.", "Token incorrect": "Token incorrect", "A text message has been sent to %(msisdn)s": "A text message has been sent to %(msisdn)s", "Please enter the code it contains:": "Please enter the code it contains:", @@ -2249,8 +2249,6 @@ "Enter username": "Enter username", "Email (optional)": "Email (optional)", "Phone (optional)": "Phone (optional)", - "Create your Matrix account on %(serverName)s": "Create your Matrix account on %(serverName)s", - "Create your Matrix account on ": "Create your Matrix account on ", "Register": "Register", "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.", "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.", @@ -2474,6 +2472,8 @@ "Log in to your new account.": "Log in to your new account.", "You can now close this window or log in to your new account.": "You can now close this window or log in to your new account.", "Registration Successful": "Registration Successful", + "Create your Matrix account on %(serverName)s": "Create your Matrix account on %(serverName)s", + "Create your Matrix account on ": "Create your Matrix account on ", "Create your account": "Create your account", "Use Recovery Key or Passphrase": "Use Recovery Key or Passphrase", "Use Recovery Key": "Use Recovery Key", From 0911007c77e35efbc0fd00712ffcdcfcaf025034 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 11 Nov 2020 17:12:27 +0000 Subject: [PATCH 062/115] fix issue with server selector introduced in this PR --- src/components/structures/auth/Registration.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/components/structures/auth/Registration.js b/src/components/structures/auth/Registration.js index 777d57344d..80bf3b72cd 100644 --- a/src/components/structures/auth/Registration.js +++ b/src/components/structures/auth/Registration.js @@ -507,6 +507,19 @@ export default class Registration extends React.Component { return null; } + // If we're on a different phase, we only show the server type selector, + // which is always shown if we allow custom URLs at all. + // (if there's a fatal server error, we need to show the full server + // config as the user may need to change servers to resolve the error). + if (PHASES_ENABLED && this.state.phase !== PHASE_SERVER_DETAILS && !this.state.serverErrorIsFatal) { + return
+ +
; + } + const serverDetailsProps = {}; if (PHASES_ENABLED) { serverDetailsProps.onAfterSubmit = this.onServerDetailsNextPhaseClick; @@ -704,10 +717,10 @@ export default class Registration extends React.Component { { errorText } { serverDeadSection } { this.renderServerComponent() } -

+ { this.state.phase !== PHASE_SERVER_DETAILS &&

{yourMatrixAccountText} {editLink} -

+ } { this.renderRegisterComponent() } { goBack } { signIn } From 296fc307a9acd52cfc45596a3dfd6876d2d21423 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?= Date: Wed, 11 Nov 2020 10:38:41 +0000 Subject: [PATCH 063/115] Translated using Weblate (Hungarian) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 42 ++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 2c8f04e273..0ecd4db0c3 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -241,8 +241,8 @@ "This room": "Ebben a szobában", "This room is not accessible by remote Matrix servers": "Ez a szoba távoli Matrix szerverről nem érhető el", "To use it, just wait for autocomplete results to load and tab through them.": "A használatához csak várd meg az automatikus kiegészítési találatok betöltését, majd Tabbal választhatsz közülük.", - "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Megpróbáltam betölteni a szoba megadott időpontjának megfelelő adatait, de nincs jogod a kérdéses üzenetek megjelenítéséhez.", - "Tried to load a specific point in this room's timeline, but was unable to find it.": "Megpróbáltam betölteni a szoba megadott időpontjának megfelelő adatait, de nem találom.", + "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Megpróbálta betölteni a szoba megadott időpontjának megfelelő adatait, de nincs joga a kérdéses üzenetek megjelenítéséhez.", + "Tried to load a specific point in this room's timeline, but was unable to find it.": "Megpróbálta betölteni a szoba megadott időpontjának megfelelő adatait, de az nem található.", "Unable to add email address": "Az e-mail címet nem sikerült hozzáadni", "Unable to remove contact information": "A névjegy információkat nem sikerült törölni", "Unable to verify email address.": "Az e-mail cím ellenőrzése sikertelen.", @@ -444,7 +444,7 @@ "Matrix ID": "Matrix azonosító", "Matrix Room ID": "Szoba Matrix azonosító", "email address": "E-mail cím", - "Try using one of the following valid address types: %(validTypesList)s.": "Próbáld meg valamelyik érvényes cím típust: %(validTypesList)s.", + "Try using one of the following valid address types: %(validTypesList)s.": "Próbálja meg valamelyik érvényes címtípust: %(validTypesList)s.", "You have entered an invalid address.": "Érvénytelen címet adtál meg.", "Failed to remove '%(roomName)s' from %(groupId)s": "A(z) %(groupId)s csoportból nem sikerült törölni: %(roomName)s", "Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "Biztos, hogy törlöd a(z) %(roomName)s szobát a(z) %(groupId)s csoportból?", @@ -915,7 +915,7 @@ "Avoid sequences": "Kerüld a sorozatokat", "Avoid recent years": "Kerüld a közeli éveket", "Avoid years that are associated with you": "Kerüld azokat az éveket amik összefüggésbe hozhatók veled", - "Avoid dates and years that are associated with you": "Kerüld a dátumokat és évszámokat amik összefüggésbe hozhatók veled", + "Avoid dates and years that are associated with you": "Kerülje azon dátumokat és évszámokat, amelyek összefüggésbe hozhatók Önnel", "Capitalization doesn't help very much": "A nagybetűk nem igazán segítenek", "All-uppercase is almost as easy to guess as all-lowercase": "A csupa nagybetűset majdnem olyan könnyű kitalálni mint a csupa kisbetűset", "Reversed words aren't much harder to guess": "A megfordított betűrendet sem sokkal nehezebb kitalálni", @@ -960,7 +960,7 @@ "Custom user status messages": "Egyedi felhasználói állapot üzenet", "Set a new status...": "Új állapot beállítása...", "Clear status": "Állapot törlése", - "Unable to load commit detail: %(msg)s": "Sikertelen betöltés részletek: \n%(msg)s", + "Unable to load commit detail: %(msg)s": "A véglegesítés részleteinek betöltése sikertelen: %(msg)s", "Unrecognised address": "Ismeretlen cím", "User %(user_id)s may or may not exist": "%(user_id)s felhasználó lehet, hogy nem létezik", "The following users may not exist": "Az alábbi felhasználók lehet, hogy nem léteznek", @@ -968,7 +968,7 @@ "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Az alábbi Matrix ID-koz nem sikerül megtalálni a profilokat - így is meghívod őket?", "Invite anyway and never warn me again": "Mindenképpen meghív és ne figyelmeztess többet", "Invite anyway": "Mindenképpen meghív", - "Whether or not you're logged in (we don't record your username)": "Akár be vagy jelentkezve, akár nem; nem tároljuk a felhasználónevedet", + "Whether or not you're logged in (we don't record your username)": "Be van-e jelentkezve (nem tároljuk a felhasználónevét)", "Upgrades a room to a new version": "Szoba fejlesztése új verzióra", "Sets the room name": "Szobanév beállítása", "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s fejlesztette a szobát.", @@ -1126,7 +1126,7 @@ "Pizza": "Pizza", "Cake": "Sütemény", "Heart": "Szív", - "Smiley": "Smiley", + "Smiley": "Mosoly", "Robot": "Robot", "Hat": "Kalap", "Glasses": "Szemüveg", @@ -1239,7 +1239,7 @@ "You cannot modify widgets in this room.": "Nem módosíthatod a kisalkalmazásokat a szobában.", "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s visszavonta %(targetDisplayName)s a szobába való belépéséhez szükséges meghívóját.", "Upgrade this room to the recommended room version": "A szoba fejlesztése a javasolt verzióra", - "This room is running room version , which this homeserver has marked as unstable.": "A szoba verziója: , amit a Matrix szerver instabilnak tekint.", + "This room is running room version , which this homeserver has marked as unstable.": "A szoba verziója: , amelyet a Matrix-kiszolgáló instabilnak tekint.", "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "A szoba fejlesztése bezárja ezt a szobát és új, frissített verzióval ugyanezen a néven létrehoz egy újat.", "Failed to revoke invite": "A meghívó visszavonása sikertelen", "Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "A meghívót nem lehet visszavonni. Vagy a szervernek átmenetileg problémái vannak vagy nincs megfelelő jogosultságod a meghívó visszavonásához.", @@ -1475,7 +1475,7 @@ "Use an identity server in Settings to receive invites directly in %(brand)s.": "Állíts be azonosítási szervert a Beállításokban, hogy közvetlen meghívókat kaphass %(brand)sba.", "Share this email in Settings to receive invites directly in %(brand)s.": "Oszd meg a Beállításokban ezt az e-mail címet, hogy közvetlen meghívókat kaphass %(brand)sba.", "Error changing power level": "A hozzáférési szint változtatásnál hiba történt", - "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "A felhasználó hozzáférési szint változtatásakor hiba történt. Ellenőrizd, hogy elegendő jogod van-e hozzá és próbáld újra.", + "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Hiba történt a felhasználó hozzáférési szintjének változtatásakor. Ellenőrizze, hogy elegendő joga van-e hozzá és próbálja újra.", "Bold": "Félkövér", "Italics": "Dőlt", "Strikethrough": "Áthúzott", @@ -1597,11 +1597,11 @@ "This is your list of users/servers you have blocked - don't leave the room!": "Ez az általad tiltott felhasználók/szerverek listája - ne hagyd el ezt a szobát!", "Ignored/Blocked": "Figyelmen kívül hagyott/Tiltott", "Error adding ignored user/server": "Hiba a felhasználó/szerver hozzáadásánál a figyelmen kívül hagyandók listájához", - "Something went wrong. Please try again or view your console for hints.": "Valami nem sikerült. Kérjük próbáld újra vagy nézd meg a konzolt a hiba okának felderítéséhez.", + "Something went wrong. Please try again or view your console for hints.": "Valami nem sikerült. Próbálja újra vagy nézze meg a konzolt a hiba okának felderítéséhez.", "Error subscribing to list": "A listára való feliratkozásnál hiba történt", "Error removing ignored user/server": "Hiba a felhasználó/szerver törlésénél a figyelmen kívül hagyandók listájából", "Error unsubscribing from list": "A listáról való leiratkozásnál hiba történt", - "Please try again or view your console for hints.": "Kérjük próbáld újra vagy nézd meg a konzolt a hiba okának felderítéséhez.", + "Please try again or view your console for hints.": "Próbálja újra vagy nézze meg a konzolt a hiba okának felderítéséhez.", "None": "Semmi", "Ban list rules - %(roomName)s": "Tiltási lista szabályok - %(roomName)s", "Server rules": "Szerver szabályok", @@ -1802,7 +1802,7 @@ "Manage": "Kezelés", "Securely cache encrypted messages locally for them to appear in search results.": "A titkosított üzenetek kereséséhez azokat biztonságos módon helyileg kell tárolnod.", "Enable": "Engedélyez", - "%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with search components added.": "A %(brand)sból a titkosított üzenetek biztonságos helyi tárolásához hiányzik néhány dolog. Ha kísérletezni szeretnél ezzel a lehetőséggel fordíts le egy saját %(brand)sot a kereső komponens hozzáadásával.", + "%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with search components added.": "A %(brand)sból a titkosított üzenetek biztonságos helyi tárolásához hiányzik néhány dolog. Ha kísérletezni szeretne ezzel a lehetőséggel, akkor fordítson le egy saját %(brand)s Desktopot a kereső komponens hozzáadásával.", "Message search": "Üzenet keresése", "This room is bridging messages to the following platforms. Learn more.": "Ez a szoba összeköti az üzeneteket a következő platformokkal, tudj meg többet.", "This room isn’t bridging messages to any platforms. Learn more.": "Ez a szoba egy platformmal sem köt össze üzeneteket. Tudj meg többet.", @@ -1840,7 +1840,7 @@ "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "FIGYELEM: KULCSELLENŐRZÉS SIKERTELEN! %(userId)s aláírási kulcsa és a %(deviceId)s munkamenet ujjlenyomata „%(fprint)s”, ami nem egyezik meg a megadott ujjlenyomattal: „%(fingerprint)s”. Ez azt is jelentheti, hogy a kommunikációt lehallgatják!", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "A megadott aláírási kulcs megegyezik %(userId)s felhasználótól kapott aláírási kulccsal ebben a munkamenetben: %(deviceId)s. A munkamenet ellenőrzöttnek lett jelölve.", "Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Jelenleg a jelszó változtatás minden munkamenet végpontok közötti titkosító kulcsait alaphelyzetbe állítja, ezáltal a titkosított üzenetek olvashatatlanok lesznek, hacsak először nem mented ki a szobák kulcsait és töltöd vissza jelszóváltoztatás után. A jövőben ezt egyszerűsítjük majd.", - "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Ez az munkamenet nem menti el a kulcsaidat, de van létező mentésed ahonnan vissza tudsz állni és továbbléphetsz.", + "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Ez az munkamenet nem menti el a kulcsait, de van létező mentése, amelyből vissza tud állni és amihez hozzá tud adni a továbbiakban.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Állítsd be ezen az munkameneten a Kulcs Mentést kijelentkezés előtt, hogy ne veszíts el olyan kulcsot ami csak ezen az eszközön van meg.", "Connect this session to Key Backup": "Munkamenet csatlakoztatása a Kulcs Mentéshez", "Backup has a signature from unknown session with ID %(deviceId)s": "A mentésnek ismeretlen munkamenetből származó aláírása van ezzel az azonosítóval: %(deviceId)s", @@ -1871,7 +1871,7 @@ "Encrypted by an unverified session": "Ellenőrizetlen munkamenet titkosította", "Encrypted by a deleted session": "Törölt munkamenet által lett titkosítva", "Waiting for %(displayName)s to accept…": "%(displayName)s felhasználóra várakozás az elfogadáshoz…", - "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Az üzeneted biztonságban van és csak neked és a címzetteknek van meg az egyedi kulcs a visszafejtéshez.", + "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Az üzenete biztonságban van, és csak Ön és a címzettek rendelkeznek a visszafejtéshez szükséges egyedi kulcsokkal.", "Your messages are not secure": "Az üzeneteid nincsenek biztonságban", "One of the following may be compromised:": "Valamelyik az alábbiak közül kompromittált:", "Your homeserver": "Matrix szervered", @@ -2012,7 +2012,7 @@ "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "A felhasználó által használt munkamenetek ellenőrzése egyenként, a eszközök közti aláírással hitelesített eszközökben nem bízol meg.", "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "A nyilvánosságra hozott címeket bárki bármelyik szerveren használhatja a szobádba való belépéshez. A cím közzétételéhez először helyi címnek kell beállítani.", "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Állíts be címet ehhez a szobához, hogy a felhasználók a matrix szervereden megtalálhassák (%(localDomain)s)", - "In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "A titkosított szobákban az üzeneted biztonságban van és csak neked és a címzetteknek van meg az egyedi kulcs a visszafejtéshez.", + "In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "A titkosított szobákban az üzenete biztonságban van, és csak Ön és a címzettek rendelkeznek a visszafejtéshez szükséges egyedi kulcsokkal.", "Verify all users in a room to ensure it's secure.": "Ellenőrizd a szoba összes tagját, hogy meggyőződhess a biztonságról.", "In encrypted rooms, verify all users to ensure it’s secure.": "Titkosított szobákban ellenőrizd a szoba összes tagját, hogy meggyőződhess a biztonságról.", "Verified": "Hitelesített", @@ -2566,7 +2566,7 @@ "Invite by email": "Meghívás e-maillel", "Welcome %(name)s": "Üdv %(name)s", "Add a photo so people know it's you.": "Hogy másik megismerhessenek adj hozzá egy fényképet.", - "Great, that'll help people know it's you": "Szuper, ez segíteni eldönteni másoknak, hogy te te vagy", + "Great, that'll help people know it's you": "Nagyszerű, ez segíteni eldönteni másoknak, hogy tényleg Ön az", "Send feedback": "Visszajelzés küldése", "PRO TIP: If you start a bug, please submit debug logs to help us track down the problem.": "Tipp: Ha hibajegyet készítesz, légyszíves segíts a probléma feltárásában azzal, hogy elküldöd a részletes naplót.", "Please view existing bugs on Github first. No match? Start a new one.": "Először nézd meg, hogy van-e már jegy róla a Github-on. Nincs? Adj fel egy új jegyet.", @@ -2829,5 +2829,13 @@ "Grenada": "Grenada", "Greenland": "Grönland", "Greece": "Görögország", - "Gibraltar": "Gibraltár" + "Gibraltar": "Gibraltár", + "%(creator)s created this DM.": "%(creator)s hozta létre ezt az üzenetet.", + "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "A szobában lévő üzenetek végpontok között titkosítottak. Ha emberek csatlakoznak, akkor ellenőrizheti őket a profiljukon, csak kattintson a profilképükre.", + "Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "Az üzenetek végpontok között titkosítottak. Ellenőrizze %(displayName)s személyazonosságát a profilján – koppintson a profilképére.", + "This is the start of .": "Ez a(z) kezdete.", + "Add a photo, so people can easily spot your room.": "Adjon hozzá egy fényképet, hogy könnyen felismerjék a szobáját.", + "%(displayName)s created this room.": "%(displayName)s hozta létre ezt a szobát.", + "You created this room.": "Ön hozta létre ezt a szobát.", + "Add a topic to help people know what it is about.": "Adjon meg egy témát, hogy az emberek tudják, hogy miről van szó." } From 0fa20d150f5effbfc2a03860bf37cb53baf92121 Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Wed, 11 Nov 2020 18:27:50 +0000 Subject: [PATCH 064/115] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/pt_BR/ --- src/i18n/strings/pt_BR.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index c1e95d7c0b..11853e6ee4 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -1829,7 +1829,7 @@ "Change settings": "Alterar configurações", "Send %(eventType)s events": "Enviar eventos de %(eventType)s", "Roles & Permissions": "Papeis & Permissões", - "Select the roles required to change various parts of the room": "Selecione as permissões necessárias para alterar várias partes da sala", + "Select the roles required to change various parts of the room": "Selecione os papeis necessários para alterar várias partes da sala", "Emoji picker": "Enviar emoji", "Room %(name)s": "Sala %(name)s", "No recently visited rooms": "Nenhuma sala foi visitada recentemente", @@ -2769,5 +2769,6 @@ "Wallis & Futuna": "Wallis e Futuna", "Vatican City": "Cidade do Vaticano", "Vanuatu": "Vanuatu", - "Uzbekistan": "Uzbequistão" + "Uzbekistan": "Uzbequistão", + "Role": "Função" } From 63624d8e44ad215b92f9ecc68d515d9bb9ec56f6 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Thu, 12 Nov 2020 02:45:15 +0000 Subject: [PATCH 065/115] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index dcddb54496..6929c5e95e 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2841,5 +2841,6 @@ "Only the two of you are in this conversation, unless either of you invites anyone to join.": "除非你們兩個其中一個邀請任何人加入,否則只會有你們兩個在此對話中。", "Call Paused": "通話已暫停", "Takes the call in the current room off hold": "讓目前聊天室中的通話保持等候接聽的狀態", - "Places the call in the current room on hold": "在目前的聊天室撥打通話並等候接聽" + "Places the call in the current room on hold": "在目前的聊天室撥打通話並等候接聽", + "Role": "角色" } From 58f2e323d495a6afdf758c6b91ba00d4ee3acd8f Mon Sep 17 00:00:00 2001 From: Tirifto Date: Thu, 12 Nov 2020 02:29:40 +0000 Subject: [PATCH 066/115] Translated using Weblate (Esperanto) Currently translated at 93.3% (2465 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/eo/ --- src/i18n/strings/eo.json | 109 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 108 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 7157c7db7c..082925c280 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -2538,5 +2538,112 @@ "Add comment": "Aldoni komenton", "Please go into as much detail as you like, so we can track down the problem.": "Bonvolu detaligi tiel multe, kiel vi volas, por ke ni povu pli facile trovi la problemon.", "Tell us below how you feel about %(brand)s so far.": "Diru al ni, kion vi ĝis nun pensas pri %(brand)s.", - "Communities v2 prototypes. Requires compatible homeserver. Highly experimental - use with caution.": "Pratipoj de la 2-a versio de komunumoj. Bezonas konforman hejmservilon. Tre eksperimenta – uzu nur zorge." + "Communities v2 prototypes. Requires compatible homeserver. Highly experimental - use with caution.": "Pratipoj de la 2-a versio de komunumoj. Bezonas konforman hejmservilon. Tre eksperimenta – uzu nur zorge.", + "Uzbekistan": "Uzbekujo", + "United Arab Emirates": "Unuiĝinaj Arabaj Emirlandoj", + "Ukraine": "Ukrainujo", + "Uganda": "Ugando", + "Turkey": "Turkujo", + "Tunisia": "Tunizio", + "Tajikistan": "Taĝikujo", + "Malta": "Malto", + "Mali": "Malio", + "Maldives": "Maldivoj", + "Malaysia": "Malajzio", + "Luxembourg": "Luksemburgo", + "Lithuania": "Litovujo", + "Liechtenstein": "Liĥtenŝtejno", + "Latvia": "Latvujo", + "Laos": "Laoso", + "Kyrgyzstan": "Kirgizujo", + "Kosovo": "Kosovo", + "Kenya": "Kenjo", + "Kazakhstan": "Kazaĥujo", + "Japan": "Japanujo", + "Jamaica": "Jamajko", + "Italy": "Italujo", + "Israel": "Israelo", + "Isle of Man": "Manksujo", + "Ireland": "Irlando", + "Iraq": "Irako", + "Iran": "Irano", + "Indonesia": "Indonezio", + "India": "Barato", + "Iceland": "Islando", + "Hungary": "Hungarujo", + "Hong Kong": "Honkongo", + "Honduras": "Honduro", + "Haiti": "Haitio", + "Guatemala": "Gvatemalo", + "Grenada": "Grenado", + "Greenland": "Gronlando", + "Greece": "Grekujo", + "Gibraltar": "Ĝibraltaro", + "Germany": "Germanujo", + "France": "Francujo", + "Finland": "Finlando", + "Fiji": "Fiĝio", + "Ethiopia": "Etiopujo", + "Estonia": "Estonujo", + "Eritrea": "Eritreo", + "Equatorial Guinea": "Ekvatora Gvineo", + "El Salvador": "Salvadoro", + "Egypt": "Egiptujo", + "Ecuador": "Ekvadoro", + "Dominican Republic": "Dominika Respubliko", + "Dominica": "Dominiko", + "Denmark": "Danujo", + "Côte d’Ivoire": "Ebur-Bordo", + "Czech Republic": "Ĉeĥujo", + "Cyprus": "Kipro", + "Cuba": "Kubo", + "Croatia": "Kroatujo", + "Costa Rica": "Kostariko", + "Cook Islands": "Insuloj de Cook", + "Comoros": "Komoroj", + "Colombia": "Kolombio", + "Christmas Island": "Kristnaskinsulo", + "China": "Ĉinujo", + "Chile": "Ĉilio", + "Chad": "Ĉado", + "Central African Republic": "Centr-Afriko", + "Cape Verde": "Kaboverdo", + "Canada": "Kanado", + "Cameroon": "Kameruno", + "Cambodia": "Kamboĝo", + "Burundi": "Burundo", + "Bulgaria": "Bulgarujo", + "Brunei": "Brunejo", + "British Virgin Islands": "Britaj Virgulininsuloj", + "Brazil": "Brazilo", + "Botswana": "Cvanujo", + "Bosnia": "Bosnujo", + "Bolivia": "Bolivio", + "Bhutan": "Butano", + "Bermuda": "Bermudo", + "Benin": "Benino", + "Belize": "Belizo", + "Belgium": "Belgujo", + "Belarus": "Belorusujo", + "Barbados": "Barbado", + "Bangladesh": "Bangladeŝo", + "Bahrain": "Barejno", + "Bahamas": "Bahamoj", + "Azerbaijan": "Azerbajĝano", + "Austria": "Aŭstrujo", + "Australia": "Aŭstralio", + "Aruba": "Arubo", + "Armenia": "Armenujo", + "Argentina": "Argentino", + "Antigua & Barbuda": "Antigvo kaj Barbudo", + "Antarctica": "Antarkto", + "Angola": "Angolo", + "Andorra": "Andoro", + "American Samoa": "Usona Samoo", + "Algeria": "Alĝerio", + "Albania": "Albanujo", + "Åland Islands": "Alando", + "Afghanistan": "Afganujo", + "United States": "Usono", + "United Kingdom": "Britujo" } From cd95e683a699b8d4d7b92842ea5fc6565afe59c7 Mon Sep 17 00:00:00 2001 From: XoseM Date: Thu, 12 Nov 2020 07:25:14 +0000 Subject: [PATCH 067/115] Translated using Weblate (Galician) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 207 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 202 insertions(+), 5 deletions(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 1134f138ea..b6bacfcb07 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -168,7 +168,7 @@ "Authentication": "Autenticación", "Last seen": "Visto por última vez", "Failed to set display name": "Fallo ao establecer o nome público", - "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s", + "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s", "Mirror local video feed": "Copiar fonte de vídeo local", "Cannot add any more widgets": "Non pode engadir máis trebellos", "The maximum permitted number of widgets have already been added to this room.": "Xa se lle engadiron o número máximo de trebellos a esta sala.", @@ -547,7 +547,7 @@ "": "", "Import E2E room keys": "Importar chaves E2E da sala", "Cryptography": "Criptografía", - "Analytics": "Analytics", + "Analytics": "Análise", "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s recolle información analítica anónima para permitirnos mellorar a aplicación.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "A intimidade impórtanos, así que non recollemos información personal ou identificable nos datos dos nosos análises.", "Learn more about how we use analytics.": "Saber máis sobre como utilizamos analytics.", @@ -639,7 +639,7 @@ "Failed to add tag %(tagName)s to room": "Fallo ao engadir a etiqueta %(tagName)s a sala", "Key request sent.": "Petición de chave enviada.", "Flair": "Popularidade", - "Showing flair for these communities:": "Mostrar a popularidade destas comunidades:", + "Showing flair for these communities:": "Mostrando a popularidade destas comunidades:", "Display your community flair in rooms configured to show it.": "Mostrar a popularidade da túa comunidade nas salas configuradas para que a mostren.", "Did you know: you can use communities to filter your %(brand)s experience!": "Sabías que podes usar as comunidades para filtrar a túa experiencia en %(brand)s!", "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Para establecer un filtro, arrastra un avatar da comunidade sobre o panel de filtros na parte esquerda da pantalla. Podes premer nun avatar no panel de filtrado en calquera momento para ver só salas e xente asociada a esa comunidade.", @@ -1884,7 +1884,7 @@ "Message layout": "Disposición da mensaxe", "Compact": "Compacta", "Modern": "Moderna", - "Power level": "Nivel de permisos", + "Power level": "Nivel responsabilidade", "Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "Verifica este dispositivo para marcalo como confiable. Confiando neste dispositivo permite que ti e outras usuarias estedes máis tranquilas ao utilizar mensaxes cifradas.", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Ao verificar este dispositivo marcaralo como confiable, e as usuarias que confiaron en ti tamén confiarán nel.", "Waiting for partner to confirm...": "Agardando a que o contacto confirme...", @@ -2642,5 +2642,202 @@ "Benin": "Benín", "Belize": "Belice", "Belgium": "Bélxica", - "Belarus": "Belarús" + "Belarus": "Belarús", + "Places the call in the current room on hold": "Pon en pausa a chamada da sala actual", + "Takes the call in the current room off hold": "Acepta a chamada na sala actual", + "%(creator)s created this DM.": "%(creator)s creou esta MD.", + "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "As mensaxes desta sala están cifradas de extremo-a-extremo. Cando se unan, podes verificar as persoas no seu perfil, tocando no seu avatar.", + "Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "Aquí as mensaxes están cifradas de extremo-a-extre. Verifica a %(displayName)s no seu perfil - toca no seu avatar.", + "Role": "Rol", + "This is the start of .": "Este é o comezo de .", + "Add a photo, so people can easily spot your room.": "Engade unha foto para que se poida identificar a sala facilmente.", + "%(displayName)s created this room.": "%(displayName)s creou esta sala.", + "You created this room.": "Creaches esta sala.", + "Add a topic to help people know what it is about.": "Engade un tema para axudarlle á xente que coñeza de que trata.", + "Topic: %(topic)s ": "Asunto: %(topic)s ", + "Topic: %(topic)s (edit)": "Asunto: %(topic)s (editar)", + "This is the beginning of your direct message history with .": "Este é o comezo do teu historial de conversa con .", + "Only the two of you are in this conversation, unless either of you invites anyone to join.": "Só vós as dúas estades nesta conversa, a non ser que convidedes a alguén máis.", + "Call Paused": "Chamada en pausa", + "Zimbabwe": "Zimbabue", + "Zambia": "Zambia", + "Yemen": "Yemen", + "Western Sahara": "Sahara Occidental", + "Wallis & Futuna": "Wallis & Futuna", + "Vietnam": "Vietnam", + "Venezuela": "Venezuela", + "Vatican City": "Cidade do Vaticano", + "Vanuatu": "Vanuatu", + "Uzbekistan": "Uzbekistan", + "Uruguay": "Uruguai", + "United Arab Emirates": "Emiratos Árabes Unidos", + "Ukraine": "Ucraína", + "Uganda": "Uganda", + "U.S. Virgin Islands": "U.S. Virgin Islands", + "Tuvalu": "Tuvalu", + "Turks & Caicos Islands": "Turks & Caicos Islands", + "Turkmenistan": "Turkmenistán", + "Turkey": "Turquía", + "Tunisia": "Túnez", + "Trinidad & Tobago": "Trinidad & Tobago", + "Tonga": "Tonga", + "Tokelau": "Tokelau", + "Togo": "Togo", + "Timor-Leste": "Timor-Leste", + "Thailand": "Tailandia", + "Tanzania": "Tanzania", + "Tajikistan": "Tajikistan", + "Taiwan": "Taiwan", + "São Tomé & Príncipe": "Santo Tomé e Príncipe", + "Syria": "Siria", + "Switzerland": "Suiza", + "Sweden": "Suecia", + "Swaziland": "Suazilandia", + "Svalbard & Jan Mayen": "Svalbard & Jan Mayen", + "Suriname": "Surinam", + "Sudan": "Sudán", + "St. Vincent & Grenadines": "St. Vincent & Grenadines", + "St. Pierre & Miquelon": "St. Pierre & Miquelon", + "St. Martin": "St. Martin", + "St. Lucia": "St. Lucia", + "St. Kitts & Nevis": "St. Kitts & Nevis", + "St. Helena": "St. Helena", + "St. Barthélemy": "St. Barthélemy", + "Sri Lanka": "Sri Lanka", + "Spain": "España", + "South Sudan": "Sudán do Sur", + "South Korea": "Corea do Sur", + "South Georgia & South Sandwich Islands": "Illas South Georgia & South Sandwich", + "South Africa": "África do Sur", + "Somalia": "Somalia", + "Solomon Islands": "Illas Salomón", + "Slovenia": "Eslovenia", + "Slovakia": "Eslovaquia", + "Sint Maarten": "Sint Maarten", + "Singapore": "Singapur", + "Sierra Leone": "Serra Leona", + "Seychelles": "Seichelles", + "Serbia": "Serbia", + "Senegal": "Senegal", + "Saudi Arabia": "Arabia Saudita", + "San Marino": "San Marino", + "Samoa": "Samoa", + "Réunion": "Reunión", + "Rwanda": "Ruanda", + "Russia": "Rusia", + "Romania": "Romanía", + "Qatar": "Catar", + "Puerto Rico": "Porto Rico", + "Portugal": "Portugal", + "Poland": "Polonia", + "Pitcairn Islands": "Illas Pitcairn", + "Philippines": "Filipinas", + "Peru": "Perú", + "Paraguay": "Paraguai", + "Papua New Guinea": "Papua Nova Guinea", + "Panama": "Panamá", + "Palestine": "Palestina", + "Palau": "Palau", + "Pakistan": "Paquistán", + "Oman": "Omán", + "Norway": "Noruega", + "Northern Mariana Islands": "Illas Marianas do Norte", + "North Korea": "Corea do Norte", + "Norfolk Island": "Illa Norfolk", + "Niue": "Niue", + "Nigeria": "Nixeria", + "Niger": "Níxer", + "Nicaragua": "Nicaragua", + "New Zealand": "Nova Zelanda", + "New Caledonia": "Nova Caledonia", + "Netherlands": "Paises Baixos", + "Nepal": "Nepal", + "Nauru": "Nauru", + "Namibia": "Namibia", + "Myanmar": "Myanmar", + "Mozambique": "Mozambique", + "Morocco": "Marrocos", + "Montserrat": "Montserrat", + "Montenegro": "Montenegro", + "Mongolia": "Mongolia", + "Monaco": "Mónaco", + "Moldova": "Moldavia", + "Micronesia": "Micronesia", + "Mexico": "México", + "Mayotte": "Mayotte", + "Mauritius": "Mauricio", + "Mauritania": "Mauritania", + "Martinique": "Martinica", + "Marshall Islands": "Illas Marshall", + "Malta": "Malta", + "Mali": "Mali", + "Maldives": "Maldivas", + "Malaysia": "Malaisia", + "Malawi": "Malawi", + "Madagascar": "Madagascar", + "Macedonia": "Macedonia", + "Macau": "Macau", + "Luxembourg": "Luxemburgo", + "Lithuania": "Lituania", + "Liechtenstein": "Liechtenstein", + "Libya": "Libia", + "Liberia": "Liberia", + "Lesotho": "Lesoto", + "Lebanon": "Líbano", + "Latvia": "Letonia", + "Laos": "Laos", + "Kyrgyzstan": "Kyrgyzstan", + "Kuwait": "Kuwait", + "Kosovo": "Kosovo", + "Kiribati": "Kiribati", + "Kenya": "Kenia", + "Kazakhstan": "Kazakhstan", + "Jordan": "Xordania", + "Jersey": "Jersey", + "Japan": "Xapón", + "Jamaica": "Xamaica", + "Italy": "Italia", + "Israel": "Israel", + "Isle of Man": "Illa de Man", + "Ireland": "Irlanda", + "Iraq": "Iraq", + "Iran": "Irán", + "Indonesia": "Indonesia", + "India": "India", + "Iceland": "Islandia", + "Hungary": "Hungría", + "Hong Kong": "Hong Kong", + "Honduras": "Honduras", + "Heard & McDonald Islands": "Heard & McDonald Islands", + "Haiti": "Haiti", + "Guyana": "Guyana", + "Guinea-Bissau": "Guinea-Bissau", + "Guinea": "Guinea", + "Guernsey": "Guernsey", + "Guatemala": "Guatemala", + "Guam": "Goam", + "Guadeloupe": "Guadalupe", + "Grenada": "Granada", + "Greenland": "Groenlandia", + "Greece": "Grecia", + "Gibraltar": "Xibraltar", + "Ghana": "Ghana", + "Germany": "Alemaña", + "Georgia": "Xeorxia", + "Gambia": "Gambia", + "Gabon": "Gabón", + "French Southern Territories": "French Southern Territories", + "French Polynesia": "Polinesia francesa", + "French Guiana": "Guaiana Francesa", + "France": "Francia", + "Finland": "Finlandia", + "Fiji": "Fiji", + "Faroe Islands": "Illas Feroe", + "Falkland Islands": "Illas Falkland", + "Ethiopia": "Etiopía", + "Estonia": "Estonia", + "Eritrea": "Eritrea", + "Equatorial Guinea": "Guinea Ecuatorial", + "El Salvador": "O Salvador", + "Egypt": "Exipto" } From 8d16a08f3459018982f6de92111c84ef1e80146f Mon Sep 17 00:00:00 2001 From: Xose M Date: Thu, 12 Nov 2020 07:24:28 +0000 Subject: [PATCH 068/115] Translated using Weblate (Galician) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index b6bacfcb07..f536de32e9 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -169,7 +169,7 @@ "Last seen": "Visto por última vez", "Failed to set display name": "Fallo ao establecer o nome público", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s", - "Mirror local video feed": "Copiar fonte de vídeo local", + "Mirror local video feed": "Replicar a fonte de vídeo local", "Cannot add any more widgets": "Non pode engadir máis trebellos", "The maximum permitted number of widgets have already been added to this room.": "Xa se lle engadiron o número máximo de trebellos a esta sala.", "Add a widget": "Engadir un trebello", @@ -643,7 +643,7 @@ "Display your community flair in rooms configured to show it.": "Mostrar a popularidade da túa comunidade nas salas configuradas para que a mostren.", "Did you know: you can use communities to filter your %(brand)s experience!": "Sabías que podes usar as comunidades para filtrar a túa experiencia en %(brand)s!", "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Para establecer un filtro, arrastra un avatar da comunidade sobre o panel de filtros na parte esquerda da pantalla. Podes premer nun avatar no panel de filtrado en calquera momento para ver só salas e xente asociada a esa comunidade.", - "Deops user with given id": "Degradar á usuaria con ese ID", + "Deops user with given id": "Degrada usuaria co id proporcionado", "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Visto por %(displayName)s(%(userName)s en %(dateTime)s", "Code": "Código", "Unable to join community": "Non te puideches unir a comunidade", From fa156ad9f8847ec6064af3b338eee8e2fe544116 Mon Sep 17 00:00:00 2001 From: Slavi Pantaleev Date: Thu, 12 Nov 2020 07:13:46 +0000 Subject: [PATCH 069/115] Translated using Weblate (Bulgarian) Currently translated at 89.9% (2377 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/bg/ --- src/i18n/strings/bg.json | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json index 4e4c5c5760..e4010e8b64 100644 --- a/src/i18n/strings/bg.json +++ b/src/i18n/strings/bg.json @@ -2503,5 +2503,32 @@ "Enter a Security Phrase": "Въведете фраза за сигурност", "We’ll generate a Security Key for you to store somewhere safe, like a password manager or a safe.": "Ще генерираме ключ за сигурност, който да съхраните на сигурно място, като password manager или сейф.", "Generate a Security Key": "Генерирай ключ за сигурност", - "Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.": "Предпазете се от загуба на достъп до шифрованите съобщения и данни като направите резервно копие на ключовете за шифроване върху сървъра." + "Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.": "Предпазете се от загуба на достъп до шифрованите съобщения и данни като направите резервно копие на ключовете за шифроване върху сървъра.", + "Now, let's help you get started": "Нека ви помогнем да започнете", + "Welcome %(name)s": "Добре дошли, %(name)s", + "Add a photo so people know it's you.": "Добавете снимка, за да може другите хора да знаят, че сте вие.", + "Great, that'll help people know it's you": "Чудесно, това ще позволи на хората да знаят, че сте вие", + "Starting microphone...": "Стартиране на микрофона...", + "Starting camera...": "Стартиране на камерата...", + "Call connecting...": "Свързване на разговор...", + "Calling...": "Звънене...", + "You do not have permission to create rooms in this community.": "Нямате привилегии да създавате стаи в тази общност.", + "Cannot create rooms in this community": "Не можете да създавате стаи в тази общност", + "Community and user menu": "Меню за общността и потребителя", + "User settings": "Потребителски настройки", + "Community settings": "Настройки на общност", + "Failed to find the general chat for this community": "Неуспешно откриване на основния чат за тази общност", + "Create community": "Създай общност", + "Explore rooms in %(communityName)s": "Преглед на стаи в %(communityName)s", + "%(brand)s Android": "%(brand)s за Android", + "You have no visible notifications in this room.": "Нямате видими уведомления за тази стая.", + "You’re all caught up": "Наваксали сте с всичко", + "Attach files from chat or just drag and drop them anywhere in a room.": "Прикачете файлове от чата или ги издърпайте и пуснете в стаята.", + "No files visible in this room": "Няма видими файлове в тази стая", + "Away": "Отсъства", + "%(brand)s iOS": "%(brand)s за iOS", + "%(brand)s Desktop": "%(brand)s Desktop", + "%(brand)s Web": "Уеб версия на %(brand)s", + "Enter the location of your Element Matrix Services homeserver. It may use your own domain name or be a subdomain of element.io.": "Въведете адреса на вашия Element Matrix Services сървър. Той или използва ваш собствен домейн или е поддомейн на element.io.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.": "Може да използвате опцията за собствен сървър, за да влезете в друг Matrix сървър, чрез указване на адреса му. Това позволява да използвате %(brand)s с Matrix профил съществуващ на друг сървър." } From a32fba515e519bbff95b3c2a1e502ba98798d1b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Wed, 11 Nov 2020 19:35:27 +0000 Subject: [PATCH 070/115] Translated using Weblate (Estonian) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 9e9500bad9..fac161e616 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -2839,5 +2839,6 @@ "Only the two of you are in this conversation, unless either of you invites anyone to join.": "Seni kuni emb-kumb teist kolmandaid osapooli liituma ei kutsu, olete siin vestluses vaid teie kahekesi.", "Call Paused": "Kõne on ajutiselt peatatud", "Takes the call in the current room off hold": "Võtab selles jututoas ootel oleva kõne", - "Places the call in the current room on hold": "Jätab kõne selles jututoas ootele" + "Places the call in the current room on hold": "Jätab kõne selles jututoas ootele", + "Role": "Roll" } From f1121c1b6e2024afc216459b06d0f9793de11a30 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 12 Nov 2020 11:09:08 +0000 Subject: [PATCH 071/115] Fix vertical centering of the Homepage and button layout --- res/css/structures/_HomePage.scss | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/res/css/structures/_HomePage.scss b/res/css/structures/_HomePage.scss index 45aa34d3b5..9f72213d1a 100644 --- a/res/css/structures/_HomePage.scss +++ b/res/css/structures/_HomePage.scss @@ -26,9 +26,10 @@ limitations under the License. .mx_HomePage_default { text-align: center; + display: flex; .mx_HomePage_default_wrapper { - padding: 25vh 0 12px; + margin: auto; } img { @@ -55,7 +56,7 @@ limitations under the License. } .mx_HomePage_default_buttons { - margin: 80px auto 0; + margin: 60px auto 0; width: fit-content; .mx_AccessibleButton { @@ -63,7 +64,7 @@ limitations under the License. width: 160px; height: 132px; - margin: 0 20px; + margin: 20px; position: relative; display: inline-block; border-radius: 8px; From 33b7367d820f537e7ee5e32e52720b8cbac8a381 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 12 Nov 2020 10:36:30 -0700 Subject: [PATCH 072/115] Fix room ID handling --- src/stores/widgets/StopGapWidget.ts | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/stores/widgets/StopGapWidget.ts b/src/stores/widgets/StopGapWidget.ts index 1c26b67faf..73399a5086 100644 --- a/src/stores/widgets/StopGapWidget.ts +++ b/src/stores/widgets/StopGapWidget.ts @@ -56,7 +56,6 @@ import {getCustomTheme} from "../../theme"; import CountlyAnalytics from "../../CountlyAnalytics"; import { ElementWidgetCapabilities } from "./ElementWidgetCapabilities"; import { MatrixEvent } from "matrix-js-sdk/src/models/event"; -import ActiveRoomObserver from "../../ActiveRoomObserver"; // TODO: Destroy all of this code @@ -151,6 +150,7 @@ export class StopGapWidget extends EventEmitter { private messaging: ClientWidgetApi; private mockWidget: ElementWidget; private scalarToken: string; + private roomId?: string; constructor(private appTileProps: IAppTileProps) { super(); @@ -163,6 +163,18 @@ export class StopGapWidget extends EventEmitter { } this.mockWidget = new ElementWidget(app); + this.roomId = appTileProps.room?.roomId; + } + + private get eventListenerRoomId(): string { + // When widgets are listening to events, we need to make sure they're only + // receiving events for the right room. In particular, room widgets get locked + // to the room they were added in while account widgets listen to the currently + // active room. + + if (this.roomId) return this.roomId; + + return RoomViewStore.getRoomId(); } public get widgetApi(): ClientWidgetApi { @@ -310,7 +322,7 @@ export class StopGapWidget extends EventEmitter { const targetRoomId = (ev.detail.data || {}).room_id; if (!targetRoomId) { return this.messaging.transport.reply(ev.detail, { - error: {message: "Invalid room ID."}, + error: {message: "Room ID not supplied."}, }); } @@ -437,13 +449,13 @@ export class StopGapWidget extends EventEmitter { private onEvent = (ev: MatrixEvent) => { if (ev.isBeingDecrypted() || ev.isDecryptionFailure()) return; - if (ev.getRoomId() !== ActiveRoomObserver.activeRoomId) return; + if (ev.getRoomId() !== this.eventListenerRoomId) return; this.feedEvent(ev); }; private onEventDecrypted = (ev: MatrixEvent) => { if (ev.isDecryptionFailure()) return; - if (ev.getRoomId() !== ActiveRoomObserver.activeRoomId) return; + if (ev.getRoomId() !== this.eventListenerRoomId) return; this.feedEvent(ev); }; From f5676ebd98a4141e2f84ad8dfd04e86dbc01f70e Mon Sep 17 00:00:00 2001 From: notramo Date: Thu, 12 Nov 2020 18:46:59 +0000 Subject: [PATCH 073/115] Translated using Weblate (Hungarian) Currently translated at 99.8% (2638 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 65 ++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 0ecd4db0c3..c0b54941c8 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -281,7 +281,7 @@ "You are already in a call.": "Már hívásban vagy.", "You cannot place a call with yourself.": "Nem hívhatod fel saját magadat.", "You cannot place VoIP calls in this browser.": "Nem indíthatsz VoIP hívást ebben a böngészőben.", - "You do not have permission to post to this room": "Nincs jogod írni ebben a szobában", + "You do not have permission to post to this room": "Nincs jogod üzenetet küldeni ebbe a szobába", "You have disabled URL previews by default.": "Az URL előnézet alapból tiltva van.", "You have enabled URL previews by default.": "Az URL előnézet alapból engedélyezve van.", "You have no visible notifications": "Nincsenek látható értesítéseid", @@ -379,7 +379,7 @@ "This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Ezzel a folyamattal kimentheted a titkosított szobák üzeneteihez tartozó kulcsokat egy helyi fájlba. Ez után be tudod tölteni ezt a fájlt egy másik Matrix kliensbe, így az a kliens is vissza tudja fejteni az üzeneteket.", "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "A kimentett fájlal bárki el tudja olvasni a titkosított üzeneteket amiket te is, ezért tartsd biztonságban. Ehhez segítségül írj be egy jelmondatot amivel a kimentett adatok titkosításra kerülnek. Az adatok betöltése csak a jelmondat megadásával lehetséges később.", "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Ezzel a folyamattal lehetőséged van betölteni a titkosítási kulcsokat amiket egy másik Matrix kliensből mentettél ki. Ez után minden üzenetet vissza tudsz fejteni amit a másik kliens tudott.", - "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Biztos hogy eltávolítod (törlöd) ezt az eseményt? Figyelem, ha törlöd vagy megváltoztatod a szoba nevét vagy a témát ez a változtatás érvényét vesztheti.", + "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Biztos hogy eltávolítod (törlöd) ezt az eseményt? Figyelem, ha törlöd, vagy megváltoztatod a szoba nevét vagy a témát ez a változtatás érvényét vesztheti.", "If you have previously used a more recent version of %(brand)s, your session may be incompatible with this version. Close this window and return to the more recent version.": "Ha egy újabb %(brand)s verziót használtál valószínűleg ez kapcsolat nem lesz kompatibilis vele. Zárd be az ablakot és térj vissza az újabb verzióhoz.", "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Ha nem állítasz be e-mail címet nem fogod tudni a jelszavadat alaphelyzetbe állítani. Biztos vagy benne?", "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Azonosítás céljából egy harmadik félhez leszel irányítva (%(integrationsUrl)s). Folytatod?", @@ -396,8 +396,8 @@ "PM": "du.", "To get started, please pick a username!": "Az induláshoz válassz egy felhasználói nevet!", "Unable to create widget.": "Nem lehet kisalkalmazást létrehozni.", - "You are not in this room.": "Nem vagy ebben a szobában.", - "You do not have permission to do that in this room.": "Nincs jogod ezt tenni ebben a szobában.", + "You are not in this room.": "Nem vagy tagja ennek a szobának.", + "You do not have permission to do that in this room.": "Nincs jogsultságod ezt tenni ebben a szobában.", "Example": "Példa", "Create": "Létrehoz", "Featured Rooms:": "Kiemelt szobák:", @@ -821,7 +821,7 @@ "Link to selected message": "Hivatkozás a kijelölt üzenetre", "COPY": "Másol", "Share Message": "Üzenet megosztása", - "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "Az olyan titkosított szobákban, mint ez is, az URL előnézet alapértelmezetten ki van kapcsolva, hogy biztosított legyen, hogy a Matrix szerver (ahol az előnézet készül) ne tudjon információt gyűjteni arról, hogy milyen linkeket látsz ebben a szobában.", + "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "A titkosított szobákban, mint például ez is, az URL előnézet alapértelmezetten ki van kapcsolva, hogy biztosított legyen, hogy a Matrix szerver (ahol az előnézet készül) ne tudjon információt gyűjteni arról, hogy milyen linkeket látsz ebben a szobában.", "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "Ha valaki URL linket helyez az üzenetébe, lehetőség van egy előnézet megjelenítésére amivel további információt kaphatunk a linkről, mint cím, leírás és a weboldal képe.", "The email field must not be blank.": "Az e-mail mező nem lehet üres.", "The phone number field must not be blank.": "A telefonszám mező nem lehet üres.", @@ -850,12 +850,12 @@ "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "Az üzeneted nincs elküldve, mert ez a Matrix szerver elérte a havi aktív felhasználói korlátot. A szolgáltatás további igénybevétele végett kérlek vedd fel a kapcsolatot a szolgáltatás adminisztrátorával.", "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Az üzeneted nem került elküldésre mert ez a Matrix szerver túllépte valamelyik erőforrás korlátját. A szolgáltatás további igénybevétele végett kérlek vedd fel a kapcsolatot a szolgáltatás adminisztrátorával.", "Please contact your service administrator to continue using this service.": "A szolgáltatás további használatához kérlek vedd fel a kapcsolatot a szolgáltatás adminisztrátorával.", - "Sorry, your homeserver is too old to participate in this room.": "Sajnáljuk, a Matrix szervered nem elég friss ahhoz, hogy részt vegyen ebben a szobában.", + "Sorry, your homeserver is too old to participate in this room.": "Sajnáljuk, a Matrix szervered túl régi verziójú ahhoz, hogy részt vegyen ebben a szobában.", "Please contact your homeserver administrator.": "Kérlek vedd fel a kapcsolatot a Matrix szerver adminisztrátorával.", "Legal": "Jogi", "This room has been replaced and is no longer active.": "Ezt a szobát lecseréltük és nem aktív többé.", "The conversation continues here.": "A beszélgetés itt folytatódik.", - "This room is a continuation of another conversation.": "Ebben a szobában folytatódik egy másik beszélgetés.", + "This room is a continuation of another conversation.": "Ez a szoba egy másik beszélgetés folytatása.", "Click here to see older messages.": "Ide kattintva megnézheted a régi üzeneteket.", "Failed to upgrade room": "A szoba fejlesztése sikertelen", "The room upgrade could not be completed": "A szoba fejlesztését nem sikerült befejezni", @@ -992,7 +992,7 @@ "You've successfully verified this user.": "Sikeresen ellenőrizted ezt a felhasználót.", "Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "Az üzenetek a felhasználóval végponttól végpontig titkosítva vannak és azt más nem tudja elolvasni.", "Got It": "Értem", - "Verify this user by confirming the following number appears on their screen.": "Ellenőrizd a felhasználót azzal, hogy megerősíted az alábbi számok jelentek meg a képernyőjén.", + "Verify this user by confirming the following number appears on their screen.": "Ellenőrizd a felhasználót azáltal, hogy megbizonyosodtok arról, hogy az alábbi számok jelentek meg az ő képernyőjén is.", "Yes": "Igen", "No": "Nem", "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "E-mail üzenetet küldtünk neked, amivel a címedet ellenőrizzük. Kérlek kövesd az ott leírt lépéseket és kattints az alábbi gombra.", @@ -1047,7 +1047,7 @@ "Room Name": "Szoba neve", "Room Topic": "Szoba témája", "Join": "Belép", - "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Ellenőrizd ezt a felhasználót, hogy megbízhatónak tekinthessük. Megbízható felhasználók további nyugalmat jelenthetnek ha végpontól végpontig titkosítást használsz.", + "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Ellenőrizd ezt a felhasználót, hogy megbízhatónak lehessen tekinteni. Megbízható felhasználók további nyugalmat jelenthetnek ha végpontól végpontig titkosítást használsz.", "Waiting for partner to confirm...": "Várakozás a partner megerősítésére...", "Incoming Verification Request": "Bejövő Hitelesítési Kérés", "To help avoid duplicate issues, please view existing issues first (and add a +1) or create a new issue if you can't find it.": "A duplikált jegyek elkerülése végett kérünk nézd meg a létező jegyeket először (és adj neki +1-et) vagy készíts egy új jegyet ha nem találsz hasonlót.", @@ -1094,7 +1094,7 @@ "%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s megtiltotta a vendég felhasználóknak, hogy belépjenek a szobába.", "%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s a vendég felhasználók belépési jogait erre állította át: %(rule)s", "Group & filter rooms by custom tags (refresh to apply changes)": "Szobák csoportosítása és szűrése egyedi címkékkel (frissíts, hogy a változások érvényre jussanak)", - "Verify this user by confirming the following emoji appear on their screen.": "Hitelesítheted a felhasználót, ha megerősíted, hogy az alábbi emodzsi az ami megjelent a képernyőjén.", + "Verify this user by confirming the following emoji appear on their screen.": "Hitelesítheted a felhasználót, ha megerősíted, hogy az alábbi emojikat lehet látni az ő képernyőjén is.", "Unable to find a supported verification method.": "Nem található támogatott hitelesítési eljárás.", "Dog": "Kutya", "Cat": "Macska", @@ -1191,8 +1191,8 @@ "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Ha bármilyen hibába botlasz vagy szeretnél visszajelzést küldeni nekünk, kérjük oszd meg velünk a GitHub-on.", "Changes your display nickname in the current room only": "Csak ebben a szobában változtatja meg a becenevedet", "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s engedélyezte a kitűzőket ebben a szobában az alábbi közösséghez: %(groups)s.", - "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s letiltotta a kitűzőket ebben a szobában az alábbi közösséghez: %(groups)s.", - "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s engedélyezte a kitűzőket ebben a szobában az alábbi közösséghez: %(newGroups)s és letiltotta ehhez a közösséghez: %(oldGroups)s.", + "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s kikapcsolta a kitűzőket ebben a szobában az alábbi közösséghez: %(groups)s.", + "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s engedélyezte a kitűzőket ebben a szobában az alábbi közösséghez: %(newGroups)s és kikapcsolta ehhez a közösséghez: %(oldGroups)s.", "Show read receipts sent by other users": "Mások által küldött olvasási visszajelzések mutatása", "Scissors": "Ollók", "Error updating main address": "Az elsődleges cím frissítése sikertelen", @@ -1823,7 +1823,7 @@ "Session already verified!": "A munkamenet már ellenőrizve volt!", "WARNING: Session already verified, but keys do NOT MATCH!": "FIGYELEM: A munkamenet már ellenőrizve van de a kulcsok NEM EGYEZNEK!", "Never send encrypted messages to unverified sessions from this session": "Sose küldj titkosított üzenetet ellenőrizetlen munkamenetbe ebből a munkamenetből", - "Never send encrypted messages to unverified sessions in this room from this session": "Sose küldjön titkosított üzeneteket ellenőrizetlen munkamenetekbe ebben a szobában ebből a munkamenetből", + "Never send encrypted messages to unverified sessions in this room from this session": "Ebbe a szobába soha ne küldjön titkosított üzeneteket ellenőrizetlen munkamenetek számára ebből a munkamenetből", "How fast should messages be downloaded.": "Milyen gyorsan legyenek az üzenetek letöltve.", "Waiting for %(displayName)s to verify…": "%(displayName)s felhasználóra várakozás az ellenőrzéshez…", "They match": "Egyeznek", @@ -1896,9 +1896,9 @@ "Verify session": "Munkamenet ellenőrzése", "Session name": "Munkamenet neve", "Session key": "Munkamenet kulcs", - "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "A felhasználót ellenőrizve a munkamenet megbízhatónak lesz jelölve és ugyanakkor a munkamenetedet is megbízhatónak fogja jelölni náluk.", - "Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "Eszköz ellenőrzése és beállítás megbízhatónak. Az eszközben való megbízás megnyugtató lehet, ha végpontok közötti titkosítást használsz.", - "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Az eszköz ellenőrzése megbízhatónak fogja jelezni az eszközt és azok akik téged ellenőriztek megbíznak majd ebben az eszközödben.", + "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "A felhasználó ellenőrzése által az ő munkamenete megbízhatónak lesz jelölve, és a te munkameneted is megbízhatónak lesz jelölve nála.", + "Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "Eszköz ellenőrzése és beállítás megbízhatóként. Az eszközben való megbízás megnyugtató lehet, ha végpontok közötti titkosítást használsz.", + "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Az eszköz ellenőrzése megbízhatónak fogja jelezni az eszközt és azok a felhasználók, akik téged ellenőriztek, megbíznak majd ebben az eszközödben.", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Ezzel visszatérhetsz a fiókodba miután kijelentkeztél majd vissza egy másik munkamenetbe.", "Cancel entering passphrase?": "Megszakítod a jelmondat bevitelét?", "Recovery key mismatch": "A visszaállítási kulcs nem megfelelő", @@ -1912,7 +1912,7 @@ "You have been logged out of all sessions and will no longer receive push notifications. To re-enable notifications, sign in again on each device.": "Kijelentkeztettünk minden eszközödből és nem kapsz értesítéseket sem. Az értesítések újra engedélyezéséhez jelentkezz be újra az eszközökön.", "Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Szerezd vissza a hozzáférést a fiókodhoz és állítsd vissza az elmentett titkosítási kulcsokat ebben a munkamenetben. Ezek nélkül egyetlen munkamenetben sem tudod elolvasni a titkosított üzeneteidet.", "Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Figyelmeztetés: A személyes adataid (beleértve a titkosító kulcsokat is) továbbra is az eszközön vannak tárolva. Ha az eszközt nem használod tovább vagy másik fiókba szeretnél bejelentkezni, töröld őket.", - "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Fejleszd ezt a munkamenetet, hogy más munkamenetet tudj vele hitelesíteni amivel hozzáférnek a titkosított üzenetekhez és megbízhatónak lesznek jelölve más felhasználók számára.", + "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Fejleszd ezt a munkamenetet, hogy más munkameneteket is tudj vele hitelesíteni, azért, hogy azok hozzáférhessenek a titkosított üzenetekhez és megbízhatónak legyenek jelölve más felhasználók számára.", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "A másolatot tartsd biztonságos helyen, mint pl. egy jelszókezelő (vagy széf).", "Your recovery key": "Visszaállítási kulcsod", "Copy": "Másol", @@ -2013,8 +2013,8 @@ "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "A nyilvánosságra hozott címeket bárki bármelyik szerveren használhatja a szobádba való belépéshez. A cím közzétételéhez először helyi címnek kell beállítani.", "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Állíts be címet ehhez a szobához, hogy a felhasználók a matrix szervereden megtalálhassák (%(localDomain)s)", "In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "A titkosított szobákban az üzenete biztonságban van, és csak Ön és a címzettek rendelkeznek a visszafejtéshez szükséges egyedi kulcsokkal.", - "Verify all users in a room to ensure it's secure.": "Ellenőrizd a szoba összes tagját, hogy meggyőződhess a biztonságról.", - "In encrypted rooms, verify all users to ensure it’s secure.": "Titkosított szobákban ellenőrizd a szoba összes tagját, hogy meggyőződhess a biztonságról.", + "Verify all users in a room to ensure it's secure.": "Ellenőrizd a szoba összes tagját, hogy meggyőződhess a biztonságról!", + "In encrypted rooms, verify all users to ensure it’s secure.": "Titkosított szobákban ellenőrizd a szoba összes tagját, hogy meggyőződhess a biztonságról!", "Verified": "Hitelesített", "Verification cancelled": "Ellenőrzés megszakítva", "Compare emoji": "Emodzsik összehasonlítása", @@ -2110,9 +2110,9 @@ "There was a problem communicating with the server. Please try again.": "A szerverrel való kommunikációval probléma történt. Kérlek próbáld újra.", "Sign in with SSO": "Belépés SSO-val", "Welcome to %(appName)s": "Üdvözöl az %(appName)s", - "Liberate your communication": "Szabadítsd fel a kommunikációdat", - "Send a Direct Message": "Közvetlen üzenet küldése", - "Explore Public Rooms": "Nyilvános szobák felderítése", + "Liberate your communication": "Kommunikálj szabadon", + "Send a Direct Message": "Személyes üzenet küldése", + "Explore Public Rooms": "Nyilvános szobák felfedezése", "Create a Group Chat": "Készíts Csoportos Beszélgetést", "Self-verification request": "Ön ellenőrzés kérése", "Cancel replying to a message": "Üzenet válasz megszakítása", @@ -2413,14 +2413,14 @@ "You’re all caught up": "Mindent elolvastál", "You have no visible notifications in this room.": "Nincsenek látható értesítéseid ebben a szobában.", "%(brand)s Android": "%(brand)s Android", - "Explore public rooms": "Nyilvános szobák felderítése", + "Explore public rooms": "Nyilvános szobák felfedezése", "Unexpected server error trying to leave the room": "Váratlan szerver hiba lépett fel a szobából való kilépés közben", "Error leaving room": "A szoba elhagyásakor hiba történt", "Communities v2 prototypes. Requires compatible homeserver. Highly experimental - use with caution.": "Közösségek v2 prototípus. Kompatibilis matrix szervert igényel. Erősen kísérleti állapotban van - körültekintően használd.", "Uploading logs": "Napló feltöltése folyamatban", "Downloading logs": "Napló letöltése folyamatban", "Can't see what you’re looking for?": "Nem találod amit keresel?", - "Explore all public rooms": "Fedezd fel a nyilvános szobákat", + "Explore all public rooms": "Az összes nyilvános szoba felfedezése", "%(count)s results|other": "%(count)s találat", "Information": "Információ", "Preparing to download logs": "Napló előkészítése feltöltéshez", @@ -2496,7 +2496,7 @@ "You don't have permission to remove the call from the room": "A konferencia hívás törléséhez nincs jogosultságod", "Start a conversation with someone using their name or username (like ).": "Indíts beszélgetést valakivel és használd hozzá a nevét vagy a felhasználói nevét (mint ).", "This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click here": "Ez nem hívja meg őket ebbe a közösségbe: %(communityName)s. Hogy meghívj valakit ebbe a közösségbe: %(communityName)s kattints ide", - "Invite someone using their name, username (like ) or share this room.": "Hívj meg valakit a nevével, felhasználói nevével (pl. ) vagy oszd meg ezt a szobát.", + "Invite someone using their name, username (like ) or share this room.": "Hívj meg valakit a nevét, vagy felhasználónevét (például ) megadva, vagy oszd meg ezt a szobát.", "Add widgets, bridges & bots": "Widget-ek, hidak, és botok hozzáadása", "You can only pin 2 widgets at a time": "Egyszerre csak 2 widget-et lehet kitűzni", "Minimize widget": "Widget minimalizálása", @@ -2561,11 +2561,11 @@ "Enable desktop notifications": "Asztali értesítések engedélyezése", "Don't miss a reply": "Ne szalassz el egy választ se", "Now, let's help you get started": "És most segítünk az indulásban", - "Invite someone using their name, email address, username (like ) or share this room.": "Hívj meg valakit a nevével, e-mail címéve, felhasználói nevével (pl. ) vagy oszd meg ezt a szobát.", + "Invite someone using their name, email address, username (like ) or share this room.": "Hívj meg valakit a nevét, e-mail címét, vagy felhasználónevét (például ) megadva, vagy oszd meg ezt a szobát.", "Start a conversation with someone using their name, email address or username (like ).": "Indíts beszélgetést valakivel és használd hozzá a nevét, e-mail címét vagy a felhasználói nevét (mint ).", "Invite by email": "Meghívás e-maillel", "Welcome %(name)s": "Üdv %(name)s", - "Add a photo so people know it's you.": "Hogy másik megismerhessenek adj hozzá egy fényképet.", + "Add a photo so people know it's you.": "Állíts be egy fényképet, hogy mások könnyebben megismerhessenek!", "Great, that'll help people know it's you": "Nagyszerű, ez segíteni eldönteni másoknak, hogy tényleg Ön az", "Send feedback": "Visszajelzés küldése", "PRO TIP: If you start a bug, please submit debug logs to help us track down the problem.": "Tipp: Ha hibajegyet készítesz, légyszíves segíts a probléma feltárásában azzal, hogy elküldöd a részletes naplót.", @@ -2831,11 +2831,12 @@ "Greece": "Görögország", "Gibraltar": "Gibraltár", "%(creator)s created this DM.": "%(creator)s hozta létre ezt az üzenetet.", - "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "A szobában lévő üzenetek végpontok között titkosítottak. Ha emberek csatlakoznak, akkor ellenőrizheti őket a profiljukon, csak kattintson a profilképükre.", + "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "A szobában lévő üzenetek végpontok között titkosítottak. Amikor majd csatlakoznak a felhasználók, ellenőrizheted őket a profiljukban, amit a profilképükre kattintással nyithatsz meg.", "Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "Az üzenetek végpontok között titkosítottak. Ellenőrizze %(displayName)s személyazonosságát a profilján – koppintson a profilképére.", "This is the start of .": "Ez a(z) kezdete.", - "Add a photo, so people can easily spot your room.": "Adjon hozzá egy fényképet, hogy könnyen felismerjék a szobáját.", - "%(displayName)s created this room.": "%(displayName)s hozta létre ezt a szobát.", - "You created this room.": "Ön hozta létre ezt a szobát.", - "Add a topic to help people know what it is about.": "Adjon meg egy témát, hogy az emberek tudják, hogy miről van szó." + "Add a photo, so people can easily spot your room.": "Állíts be egy fényképet, hogy az emberek könnyebben felismerjék a szobát!", + "%(displayName)s created this room.": "%(displayName)s készítette ezt a szobát.", + "You created this room.": "Te készítetted ezt a szobát.", + "Add a topic to help people know what it is about.": "Állítsd be a szoba témáját, hogy az emberek tudják, hogy miről van itt szó.", + "Topic: %(topic)s ": "Téma: %(topic)s " } From 795a7bfa3349c8288d7fcceeae19ca1de5980779 Mon Sep 17 00:00:00 2001 From: Tirifto Date: Thu, 12 Nov 2020 18:19:54 +0000 Subject: [PATCH 074/115] Translated using Weblate (Esperanto) Currently translated at 95.1% (2514 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/eo/ --- src/i18n/strings/eo.json | 54 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 082925c280..3545565fa3 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -2645,5 +2645,57 @@ "Åland Islands": "Alando", "Afghanistan": "Afganujo", "United States": "Usono", - "United Kingdom": "Britujo" + "United Kingdom": "Britujo", + "Sri Lanka": "Srilanko", + "Spain": "Hispanujo", + "South Korea": "Sud-Koreujo", + "South Africa": "Sud-Afriko", + "Somalia": "Somalujo", + "Solomon Islands": "Salomonoj", + "Slovenia": "Slovenujo", + "Slovakia": "Slovakujo", + "Singapore": "Singapuro", + "Sierra Leone": "Sieraleono", + "Seychelles": "Sejŝeloj", + "Serbia": "Serbujo", + "Senegal": "Senegalo", + "Saudi Arabia": "Sauda Arabujo", + "San Marino": "Sanmarino", + "Samoa": "Samoo", + "Rwanda": "Ruando", + "Russia": "Rusujo", + "Romania": "Rumanujo", + "Qatar": "Kataro", + "Puerto Rico": "Portoriko", + "Portugal": "Portugalujo", + "Poland": "Polujo", + "Philippines": "Filipinoj", + "Peru": "Peruo", + "Paraguay": "Paragvajo", + "Papua New Guinea": "Papuo-Nov-Gvineo", + "Panama": "Panamo", + "Palestine": "Palestino", + "Palau": "Palaŭo", + "Pakistan": "Pakistano", + "Oman": "Omano", + "Norway": "Norvegujo", + "North Korea": "Nord-Koreujo", + "Niue": "Niuo", + "Nigeria": "Niĝerio", + "Niger": "Niĝero", + "New Zealand": "Nov-Zelando", + "New Caledonia": "Nova Kaledonio", + "Netherlands": "Nederlando", + "Nepal": "Nepalo", + "Nauru": "Nauro", + "Namibia": "Namibio", + "Myanmar": "Birmo", + "Mozambique": "Mozambiko", + "Morocco": "Maroko", + "Montserrat": "Moncerato", + "Montenegro": "Montenegro", + "Caribbean Netherlands": "Kariba Nederlando", + "Burkina Faso": "Burkino", + "Bouvet Island": "Buvet-Insulo", + "Anguilla": "Angvilo" } From 8ab4ffce63b89b23f0765cd714086d0379c172ae Mon Sep 17 00:00:00 2001 From: random Date: Thu, 12 Nov 2020 11:59:09 +0000 Subject: [PATCH 075/115] Translated using Weblate (Italian) Currently translated at 100.0% (2641 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 4df5fd0a39..c0f6fecfea 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2841,5 +2841,8 @@ "Åland Islands": "Isole Åland", "Afghanistan": "Afghanistan", "United States": "Stati Uniti", - "United Kingdom": "Regno Unito" + "United Kingdom": "Regno Unito", + "Role": "Ruolo", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|one": "Salva in cache i messaggi cifrati localmente in modo che appaiano nei risultati di ricerca, usando %(size)s per salvarli da %(count)s stanza.", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Salva in cache i messaggi cifrati localmente in modo che appaiano nei risultati di ricerca, usando %(size)s per salvarli da %(count)s stanze." } From fca979a4b27cde802a65f71f06ed0e5fef4178f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Thu, 12 Nov 2020 10:59:56 +0000 Subject: [PATCH 076/115] Translated using Weblate (Estonian) Currently translated at 100.0% (2641 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index fac161e616..5546fa2b36 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -2840,5 +2840,7 @@ "Call Paused": "Kõne on ajutiselt peatatud", "Takes the call in the current room off hold": "Võtab selles jututoas ootel oleva kõne", "Places the call in the current room on hold": "Jätab kõne selles jututoas ootele", - "Role": "Roll" + "Role": "Roll", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|one": "Selleks, et sisu saaks otsingus kasutada, puhverda krüptitud sõnumid kohalikus seadmes turvaliselt. %(count)s jututoa andmete salvestamiseks kulub hetkel %(size)s.", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Selleks, et sisu saaks otsingus kasutada, puhverda krüptitud sõnumid kohalikus seadmes turvaliselt. %(count)s jututoa andmete salvestamiseks kulub hetkel %(size)s." } From 3545fb3b652bc546fc6bb361515ed0849d05b878 Mon Sep 17 00:00:00 2001 From: notramo Date: Thu, 12 Nov 2020 21:28:46 +0000 Subject: [PATCH 077/115] Translated using Weblate (Hungarian) Currently translated at 99.8% (2638 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index c0b54941c8..3759725354 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -69,7 +69,7 @@ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s megváltoztatta a témát erre \"%(topic)s\".", "Changes your display nickname": "Megváltoztatja a becenevedet", "Click here to fix": "A javításhoz kattints ide", - "Click to mute audio": "Hang némításhoz kattints ide", + "Click to mute audio": "Hang némításához kattints ide", "Click to mute video": "A videó kikapcsoláshoz kattints ide", "click to reveal": "Megjelenítéshez kattints ide", "Click to unmute video": "Videó bekapcsoláshoz kattints ide", @@ -183,7 +183,7 @@ "Passwords can't be empty": "A jelszó nem lehet üres", "Permissions": "Jogosultságok", "Phone": "Telefon", - "Please check your email and click on the link it contains. Once this is done, click continue.": "Ellenőrizd az e-mail-edet és kattints a benne lévő linkre. Ha ez megvan, kattints a folytatásra.", + "Please check your email and click on the link it contains. Once this is done, click continue.": "Ellenőrizd az e-mail-edet és kattints a benne lévő linkre! Ha ez megvan, kattints a folytatásra!", "Power level must be positive integer.": "A szintnek pozitív egésznek kell lennie.", "Private Chat": "Privát csevegés", "Privileged Users": "Privilegizált felhasználók", @@ -573,7 +573,7 @@ "%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)s megváltoztatta az avatarját", "%(items)s and %(count)s others|other": "%(items)s és még %(count)s másik", "%(items)s and %(count)s others|one": "%(items)s és még egy másik", - "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Az e-mail leküldésre került ide: %(emailAddress)s. Ha követte a levélben lévő linket kattints alább.", + "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Az e-mail leküldésre került ide: %(emailAddress)s. Ha megnyitottad az abban lévő linket, kattints alább.", "The visibility of '%(roomName)s' in %(groupId)s could not be updated.": "%(roomName)s szoba láthatóságát nem lehet frissíteni ebben a közösségben: %(groupId)s.", "Visibility in Room List": "Láthatóság a szoba listában", "Visible to everyone": "Mindenki számára látható", @@ -685,7 +685,7 @@ "Resend": "Küldés újra", "Room not found": "A szoba nem található", "Messages containing my display name": "A profilnevemet tartalmazó üzenetek", - "Messages in one-to-one chats": "Személyes beszélgetések üzenetei", + "Messages in one-to-one chats": "Közvetlen beszélgetések üzenetei", "Unavailable": "Elérhetetlen", "View Decrypted Source": "Visszafejtett forrás megjelenítése", "Failed to update keywords": "Nem lehet frissíteni a kulcsszavakat", @@ -1369,7 +1369,7 @@ "Upload all": "Mindet feltölt", "Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).": "Az új (%(newAccountId)s) fiókod elkészült, de jelenleg egy másik fiókba (%(loggedInUserId)s) vagy bejelentkezve.", "Continue with previous account": "Folytatás az előző fiókkal", - "Edited at %(date)s. Click to view edits.": "Szerkesztve ekkor: %(date)s. A szerkesztések megtekintéséhez kattints.", + "Edited at %(date)s. Click to view edits.": "Szerkesztve ekkor: %(date)s. A szerkesztések megtekintéséhez kattints!", "Message edits": "Üzenet szerkesztések", "Upgrading this room requires closing down the current instance of the room and creating a new room in its place. To give room members the best possible experience, we will:": "A szoba frissítéséhez be kell zárnod ezt a szobát és egy újat kell nyitnod e helyett. A szoba tagjainak a legjobb felhasználói élmény nyújtásához az alábbit fogjuk tenni:", "Loading room preview": "Szoba előnézetének a betöltése", @@ -1862,7 +1862,7 @@ "This user has not verified all of their sessions.": "Ez a felhasználó még nem ellenőrizte az összes munkamenetét.", "You have not verified this user.": "Még nem ellenőrizted ezt a felhasználót.", "You have verified this user. This user has verified all of their sessions.": "Ezt a felhasználót ellenőrizted. Ez a felhasználó hitelesítette az összes munkamenetét.", - "Someone is using an unknown session": "Valaki ismeretlen munkamenetet használ", + "Someone is using an unknown session": "Valaki ellenőrizetlen munkamenetet használ", "Mod": "Mod", "Your key share request has been sent - please check your other sessions for key share requests.": "A kulcs megosztás kérésed el lett küldve - ellenőrizd a többi munkamenetedet a kulcskérések után.", "Key share requests are sent to your other sessions automatically. If you rejected or dismissed the key share request on your other sessions, click here to request the keys for this session again.": "Kulcs megosztás kérés automatikusan el lett küldve neked a másik munkamenetekből. Ha elutasítottad vagy bezártad a kérést másik munkamenetedben, ide kattintva újrakérheted őket ehhez a munkamenethez.", @@ -2111,7 +2111,7 @@ "Sign in with SSO": "Belépés SSO-val", "Welcome to %(appName)s": "Üdvözöl az %(appName)s", "Liberate your communication": "Kommunikálj szabadon", - "Send a Direct Message": "Személyes üzenet küldése", + "Send a Direct Message": "Közvetlen üzenet küldése", "Explore Public Rooms": "Nyilvános szobák felfedezése", "Create a Group Chat": "Készíts Csoportos Beszélgetést", "Self-verification request": "Ön ellenőrzés kérése", @@ -2181,7 +2181,7 @@ "QR Code": "QR kód", "To continue, use Single Sign On to prove your identity.": "A folytatáshoz a személyazonosságod megerősítéséhez használd az egyszeri bejelentkezést.", "Confirm to continue": "Erősítsd meg a továbblépéshez", - "Click the button below to confirm your identity.": "A személyazonosságod megerősítéséhez kattints az alábbi gombra.", + "Click the button below to confirm your identity.": "A személyazonosságod megerősítéséhez kattints a lenti gombra!", "Confirm encryption setup": "Erősítsd meg a titkosítási beállításokat", "Click the button below to confirm setting up encryption.": "Az alábbi gomb megnyomásával erősítsd meg, hogy megadod a titkosítási beállításokat.", "Dismiss read marker and jump to bottom": "Az olvasottak jel eltűntetése és ugrás a végére", @@ -2449,7 +2449,7 @@ "Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone in this community.": "Privát szobák csak meghívóval találhatók meg és meghívóval lehet belépni. A nyilvános szobákat a közösség bármely tagja megtalálhatja és be is léphet.", "You might enable this if the room will only be used for collaborating with internal teams on your homeserver. This cannot be changed later.": "Beállíthatod, ha a szobát csak egy belső csoport használja majd a matrix szervereden. Ezt később nem lehet megváltoztatni.", "You might disable this if the room will be used for collaborating with external teams who have their own homeserver. This cannot be changed later.": "Ne engedélyezd ezt, ha a szobát külső csapat is használja másik matrix szerverről. Később nem lehet megváltoztatni.", - "Block anyone not part of %(serverName)s from ever joining this room.": "A szobába való belépés megtagadása mindenkitől ki nem ezt a matrix szervert használja: %(serverName)s.", + "Block anyone not part of %(serverName)s from ever joining this room.": "A szobába ne léphessenek be azok, akik nem ezen a szerveren vannak: %(serverName)s.", "There was an error updating your community. The server is unable to process your request.": "A közösség módosításakor hiba történt. A szerver nem tudja feldolgozni a kérést.", "Update community": "Közösség módosítása", "May include members not in %(communityName)s": "Olyan tagok is lehetnek akik nincsenek ebben a közösségben: %(communityName)s", @@ -2831,7 +2831,7 @@ "Greece": "Görögország", "Gibraltar": "Gibraltár", "%(creator)s created this DM.": "%(creator)s hozta létre ezt az üzenetet.", - "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "A szobában lévő üzenetek végpontok között titkosítottak. Amikor majd csatlakoznak a felhasználók, ellenőrizheted őket a profiljukban, amit a profilképükre kattintással nyithatsz meg.", + "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "A szobában lévő üzenetek végpontok között titkosítottak. Miután csatlakoztak a felhasználók, ellenőrizheted őket a profiljukban, amit a profilképükre kattintással nyithatsz meg.", "Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "Az üzenetek végpontok között titkosítottak. Ellenőrizze %(displayName)s személyazonosságát a profilján – koppintson a profilképére.", "This is the start of .": "Ez a(z) kezdete.", "Add a photo, so people can easily spot your room.": "Állíts be egy fényképet, hogy az emberek könnyebben felismerjék a szobát!", From dd5ca31a5bebf5e8a11a99dc5ba70955afc3afd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?= Date: Thu, 12 Nov 2020 21:02:38 +0000 Subject: [PATCH 078/115] Translated using Weblate (Hungarian) Currently translated at 99.8% (2638 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 174 +++++++++++++++++++-------------------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 3759725354..8dbac80bc3 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -20,14 +20,14 @@ "Account": "Fiók", "Access Token:": "Elérési kulcs:", "Active call (%(roomName)s)": "Hívás folyamatban (%(roomName)s)", - "Add": "Hozzáad", + "Add": "Hozzáadás", "Add a topic": "Téma megadása", "Admin": "Admin", "Admin Tools": "Admin. Eszközök", "No Microphones detected": "Nem található mikrofon", "No Webcams detected": "Nem található webkamera", "No media permissions": "Nincs media jogosultság", - "You may need to manually permit %(brand)s to access your microphone/webcam": "Lehet hogy manuálisan kell engedélyezned a %(brand)s-nak a hozzáférést a mikrofonhoz ás webkamerához", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Lehet hogy kézileg kell engedélyeznie a %(brand)snak, hogy hozzáférjen a mikrofonjához és webkamerájához", "Default Device": "Alapértelmezett eszköz", "Microphone": "Mikrofon", "Camera": "Kamera", @@ -50,12 +50,12 @@ "Anyone who knows the room's link, apart from guests": "A vendégeken kívül bárki aki ismeri a szoba link-jét", "Anyone who knows the room's link, including guests": "Bárki aki tudja a szoba link-jét, még a vendégek is", "Are you sure?": "Biztos?", - "Are you sure you want to leave the room '%(roomName)s'?": "Biztos elhagyod a szobát '%(roomName)s'?", - "Are you sure you want to reject the invitation?": "Biztos elutasítod a meghívást?", + "Are you sure you want to leave the room '%(roomName)s'?": "Biztos, hogy elhagyja a(z) „%(roomName)s” szobát?", + "Are you sure you want to reject the invitation?": "Biztos, hogy elutasítja a meghívást?", "Attachment": "Csatolmány", "Autoplay GIFs and videos": "GIF-ek és videók automatikus lejátszása", "%(senderName)s banned %(targetName)s.": "%(senderName)s kitiltotta őt: %(targetName)s.", - "Ban": "Kitilt", + "Ban": "Kitiltás", "Banned users": "Kitiltott felhasználók", "Bans user with given id": "Kitiltja a megadott azonosítójú felhasználót", "Call Timeout": "Hívás időtúllépés", @@ -108,7 +108,7 @@ "Failed to kick": "Kirúgás nem sikerült", "Failed to leave room": "A szobát nem sikerült elhagyni", "Failed to load timeline position": "Az idővonal pozíciót nem sikerült betölteni", - "Failed to mute user": "A felhasználót nem sikerült hallgatásra bírni", + "Failed to mute user": "A felhasználót némítása sikertelen", "Failed to reject invite": "A meghívót nem sikerült elutasítani", "Failed to reject invitation": "A meghívót nem sikerült elutasítani", "Failed to send email": "E-mail nem sikerült elküldeni", @@ -128,8 +128,8 @@ "Hangup": "Megszakít", "Historical": "Archív", "Home": "Kezdőlap", - "Homeserver is": "Matrix szerver:", - "Identity Server is": "Azonosítási szerver:", + "Homeserver is": "Matrix-kiszolgáló:", + "Identity Server is": "Azonosítási kiszolgáló:", "I have verified my email address": "Ellenőriztem az e-mail címemet", "Import": "Betöltés", "Import E2E room keys": "E2E szoba kulcsok betöltése", @@ -138,7 +138,7 @@ "Incoming voice call from %(name)s": "Bejövő hívás: %(name)s", "Incorrect username and/or password.": "Helytelen felhasználó és/vagy jelszó.", "Incorrect verification code": "Hibás azonosítási kód", - "Invalid Email Address": "Hibás e-mail cím", + "Invalid Email Address": "Érvénytelen e-mail-cím", "Invalid file%(extra)s": "Hibás fájl%(extra)s", "%(senderName)s invited %(targetName)s.": "%(senderName)s meghívta: %(targetName)s.", "Invited": "Meghívva", @@ -159,7 +159,7 @@ "Logout": "Kilép", "Low priority": "Alacsony prioritás", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s láthatóvá tette a szoba új üzeneteit nekik minden szoba tagnak, a meghívásuk idejétől kezdve.", - "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s láthatóvá tette a szoba új üzeneteit minden szoba tagnak, a csatlakozásuk idejétől kezdve.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s láthatóvá tette a szoba új üzeneteit minden szobatagnak, a csatlakozásuk idejétől kezdve.", "%(senderName)s made future room history visible to all room members.": "%(senderName)s láthatóvá tette a szoba új üzeneteit minden szoba tagnak.", "%(senderName)s made future room history visible to anyone.": "%(senderName)s mindenki számára láthatóvá tette a szoba új üzeneteit.", "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik ismeretlen (%(visibility)s).", @@ -214,19 +214,19 @@ "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s képet küldött.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s meghívót küldött %(targetDisplayName)s felhasználónak, hogy lépjen be a szobába.", "Server error": "Szerver hiba", - "Server may be unavailable, overloaded, or search timed out :(": "A szerver elérhetetlen, túlterhelt vagy a keresés túllépte az időkorlátot :(", + "Server may be unavailable, overloaded, or search timed out :(": "A kiszolgáló elérhetetlen, túlterhelt vagy a keresés túllépte az időkorlátot :(", "Server may be unavailable, overloaded, or you hit a bug.": "A kiszolgáló elérhetetlen, túlterhelt vagy hibára futott.", "Server unavailable, overloaded, or something else went wrong.": "A szerver elérhetetlen, túlterhelt vagy valami más probléma van.", "Session ID": "Kapcsolat azonosító", "%(senderName)s set a profile picture.": "%(senderName)s profil képet állított be.", - "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s a megjelenítési nevét megváltoztatta erre: %(displayName)s.", + "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s erre változtatta a megjelenítési nevét: %(displayName)s.", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Az időbélyegek 12 órás formátumban mutatása (pl.: 2:30pm)", "Signed Out": "Kijelentkezett", "Sign in": "Bejelentkezés", "Sign out": "Kijelentkezés", - "%(count)s of your messages have not been sent.|other": "Néhány üzeneted nem lett elküldve.", + "%(count)s of your messages have not been sent.|other": "Néhány üzenete nem lett elküldve.", "Someone": "Valaki", - "Start authentication": "Azonosítás indítása", + "Start authentication": "Hitelesítés indítása", "Submit": "Elküld", "Success": "Sikeres", "The phone number entered looks invalid": "A megadott telefonszám érvénytelennek tűnik", @@ -251,7 +251,7 @@ "Unable to capture screen": "A képernyő felvétele sikertelen", "Unable to enable Notifications": "Az értesítések engedélyezése sikertelen", "unknown caller": "ismeretlen hívó", - "Unmute": "Némítás kikapcsolása", + "Unmute": "Némítás visszavonása", "Unnamed Room": "Névtelen szoba", "Uploading %(filename)s and %(count)s others|zero": "%(filename)s feltöltése", "Uploading %(filename)s and %(count)s others|one": "%(filename)s és még %(count)s db másik feltöltése", @@ -443,7 +443,7 @@ "Failed to add the following rooms to %(groupId)s:": "A következő szobák hozzáadása a(z) %(groupId)s csoporthoz sikertelen:", "Matrix ID": "Matrix azonosító", "Matrix Room ID": "Szoba Matrix azonosító", - "email address": "E-mail cím", + "email address": "E-mail-cím", "Try using one of the following valid address types: %(validTypesList)s.": "Próbálja meg valamelyik érvényes címtípust: %(validTypesList)s.", "You have entered an invalid address.": "Érvénytelen címet adtál meg.", "Failed to remove '%(roomName)s' from %(groupId)s": "A(z) %(groupId)s csoportból nem sikerült törölni: %(roomName)s", @@ -456,13 +456,13 @@ "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Figyelem: minden személy akit hozzáadsz a közösséghez mindenki számára látható lesz, aki ismeri a közösség azonosítóját", "Invite new community members": "Új tagok meghívása a közösségbe", "Invite to Community": "Meghívás a közösségbe", - "Which rooms would you like to add to this community?": "Melyik szobákat szeretnéd hozzáadni a közösséghez?", + "Which rooms would you like to add to this community?": "Mely szobákat szeretné hozzáadni a közösséghez?", "Add rooms to the community": "Szobák hozzáadása a közösséghez", "Add to community": "Hozzáadás a közösséghez", "Failed to invite users to community": "A felhasználók meghívása a közösségbe sikertelen", "Communities": "Közösségek", "Unpin Message": "Üzenet levétele", - "Jump to message": "Üzenetre ugrás", + "Jump to message": "Ugrás az üzenetre", "No pinned messages.": "Nincsenek kitűzött üzenetek.", "Loading...": "Betöltés...", "Unnamed room": "Névtelen szoba", @@ -501,10 +501,10 @@ "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Készíts közösséget hogy egybegyűjtsd a felhasználókat és szobákat! Készíts egy saját kezdőlapot amivel meghatározhatod magad a Matrix univerzumában.", "And %(count)s more...|other": "És még %(count)s...", "Something went wrong whilst creating your community": "Valami nem sikerült a közösség létrehozásánál", - "Mention": "Említ", + "Mention": "Megemlítés", "Invite": "Meghív", "Delete Widget": "Kisalkalmazás törlése", - "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "A kisalkalmazás törlése minden felhasználót érint a szobában. Tényleg törölni szeretnéd?", + "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "A kisalkalmazás törlése minden felhasználót érint a szobában. Biztos, hogy törölni akarja?", "Mirror local video feed": "Helyi videó folyam tükrözése", "Failed to withdraw invitation": "Nem sikerült visszavonni a meghívót", "Community IDs may only contain characters a-z, 0-9, or '=_-./'": "A közösségi azonosítók csak az alábbi karaktereket tartalmazhatják: a-z, 0-9 vagy '=_-./'", @@ -544,7 +544,7 @@ "%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)s %(count)s alkalommal elutasította a meghívóit", "%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)s elutasította a meghívóit", "%(severalUsers)shad their invitations withdrawn %(count)s times|other": "%(severalUsers)s meghívóit %(count)s alkalommal visszavonták", - "%(severalUsers)shad their invitations withdrawn %(count)s times|one": "%(severalUsers)s visszavonták a meghívóit", + "%(severalUsers)shad their invitations withdrawn %(count)s times|one": "%(severalUsers)s visszavonták a meghívásukat", "%(oneUser)shad their invitation withdrawn %(count)s times|other": "%(oneUser)s meghívóit %(count)s alkalommal vonták vissza", "%(oneUser)shad their invitation withdrawn %(count)s times|one": "%(oneUser)s meghívóit visszavonták", "were invited %(count)s times|other": "%(count)s alkalommal lett meghívva", @@ -722,7 +722,7 @@ "I understand the risks and wish to continue": "Megértettem a kockázatot és folytatom", "Direct Chat": "Közvetlen csevegés", "The server may be unavailable or overloaded": "A szerver nem elérhető vagy túlterhelt", - "Reject": "Elutasít", + "Reject": "Elutasítás", "Failed to set Direct Message status of room": "Nem lehet beállítani a szoba közvetlen beszélgetés státuszát", "Monday": "Hétfő", "All messages (noisy)": "Minden üzenet (hangos)", @@ -795,14 +795,14 @@ "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "A böngésződ tárhelyének a törlése megoldhatja a problémát, de ezzel kijelentkezel és a titkosított beszélgetések előzményei olvashatatlanná válnak.", "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Nem lehet betölteni azt az eseményt amire válaszoltál, mert vagy nem létezik, vagy nincs jogod megnézni.", "Collapse Reply Thread": "Beszélgetés szál becsukása", - "Enable widget screenshots on supported widgets": "Ahol az a kisalkalmazásban támogatott ott képernyőkép készítés engedélyezése", + "Enable widget screenshots on supported widgets": "Ahol az a kisalkalmazásban támogatott, ott engedélyezze a képernyőképeket", "Send analytics data": "Analitikai adatok küldése", "Muted Users": "Elnémított felhasználók", "Terms and Conditions": "Általános Szerződési Feltételek", "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "A %(homeserverDomain)s szerver használatának folytatásához el kell olvasnod és el kell fogadnod az általános szerződési feltételeket.", "Review terms and conditions": "Általános Szerződési Feltételek elolvasása", "To continue, please enter your password:": "Folytatáshoz add meg a jelszavad:", - "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Ez végleg használhatatlanná teszi a fiókodat. Ezután nem fogsz tudni bejelentkezni, és más sem tud majd ezzel az azonosítóval fiókot létrehozni. Minden szobából amibe beléptél ki fogsz lépni, és törölni fogja minden fiók adatod az személyazonosságod biztosító szerverről. Ez a művelet visszafordíthatatlan.", + "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Ez végleg használhatatlanná teszi a fiókját. Ezután nem fog tudni bejelentkezni, és más sem tud majd ezzel az azonosítóval fiókot létrehozni. Minden szobából amibe belépett ki fogsz lépni, és törölni fogja minden fiókadatát az azonosítási kiszolgálóról. Ez a művelet visszafordíthatatlan.", "Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "A fiókod felfüggesztése nem jelenti alapértelmezetten azt, hogy az általad küldött üzenetek elfelejtődnek. Ha törölni szeretnéd az általad küldött üzeneteket, pipáld be a jelölőnégyzetet alul.", "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "Az üzenetek láthatósága a Matrix-ban hasonlít az emailhez. Az általad küldött üzenet törlése azt jelenti, hogy nem osztjuk meg új-, vagy vendég felhasználóval de a már regisztrált felhasználók akik már hozzáfértek az üzenethez továbbra is elérik a saját másolatukat.", "Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "Kérlek töröld az összes általam küldött üzenetet amikor a fiókomat felfüggesztem (Figyelem: ez azt eredményezheti, hogy a jövőbeni felhasználók csak részleges beszélgetést látnak majd)", @@ -834,7 +834,7 @@ "This event could not be displayed": "Az eseményt nem lehet megjeleníteni", "Permission Required": "Jogosultság szükséges", "You do not have permission to start a conference call in this room": "Nincs jogosultságod konferencia hívást kezdeményezni ebben a szobában", - "A call is currently being placed!": "A hívás indítás alatt!", + "A call is currently being placed!": "A hívás indítás alatt van!", "Failed to remove widget": "A kisalkalmazás törlése sikertelen", "An error ocurred whilst trying to remove the widget from the room": "A kisalkalmazás szobából való törlése közben hiba történt", "System Alerts": "Rendszer figyelmeztetések", @@ -868,7 +868,7 @@ "%(brand)s now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "3-, 5-ször kevesebb memóriát használ a %(brand)s azzal, hogy csak akkor tölti be az információkat a felhasználókról amikor arra szükség van. Kérlek várd meg amíg újraszinkronizáljuk a szerverrel!", "Updating %(brand)s": "%(brand)s frissítése", "You've previously used %(brand)s on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, %(brand)s needs to resync your account.": "Előzőleg a szoba tagság késleltetett betöltésének engedélyével itt használtad a %(brand)sot: %(host)s. Ebben a verzióban viszont a késleltetett betöltés nem engedélyezett. Mivel a két gyorsítótár nem kompatibilis egymással így %(brand)snak újra kell szinkronizálnia a fiókot.", - "If the other version of %(brand)s is still open in another tab, please close it as using %(brand)s on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Ha a másik %(brand)s verzió fut még egy másik fülön, kérlek zárd be, mivel ha ugyanott használod a %(brand)sot bekapcsolt késleltetett betöltéssel és kikapcsolva is akkor problémák adódhatnak.", + "If the other version of %(brand)s is still open in another tab, please close it as using %(brand)s on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Ha a másik %(brand)s verzió még fut egy másik fülön, akkor zárja be, mert ha egy gépen használja a %(brand)sot úgy, hogy az egyiken be van kapcsolva a késleltetett betöltés, a másikon pedig ki, akkor problémák adódhatnak.", "Incompatible local cache": "A helyi gyorsítótár nem kompatibilis ezzel a verzióval", "Clear cache and resync": "Gyorsítótár törlése és újraszinkronizálás", "Please review and accept the policies of this homeserver:": "Kérlek nézd át és fogadd el a Matrix szerver felhasználói feltételeit:", @@ -919,8 +919,8 @@ "Capitalization doesn't help very much": "A nagybetűk nem igazán segítenek", "All-uppercase is almost as easy to guess as all-lowercase": "A csupa nagybetűset majdnem olyan könnyű kitalálni mint a csupa kisbetűset", "Reversed words aren't much harder to guess": "A megfordított betűrendet sem sokkal nehezebb kitalálni", - "Predictable substitutions like '@' instead of 'a' don't help very much": "Megjósolható helyettesítések mint az „a” helyett a „@” nem sokat segítenek", - "Add another word or two. Uncommon words are better.": "Adj hozzá még egy-két szót. A ritkán használt szavak jobbak.", + "Predictable substitutions like '@' instead of 'a' don't help very much": "A kiszámítható helyettesítések, mint az „a” helyett a „@”, nem sokat segítenek", + "Add another word or two. Uncommon words are better.": "Adjon hozzá még egy-két szót. A ritkán használt szavak jobbak.", "Repeats like \"aaa\" are easy to guess": "Ismétlések mint az „aaa” könnyen kitalálhatók", "Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Az „abcabcabc” sorozatot csak kicsivel nehezebb kitalálni mint az „abc”-t", "Sequences like abc or 6543 are easy to guess": "Az olyan mint az abc vagy 6543 sorokat könnyű kitalálni", @@ -967,7 +967,7 @@ "Prompt before sending invites to potentially invalid matrix IDs": "Vélhetően hibás Matrix ID-kra való meghívó küldés előtt figyelmeztessen", "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Az alábbi Matrix ID-koz nem sikerül megtalálni a profilokat - így is meghívod őket?", "Invite anyway and never warn me again": "Mindenképpen meghív és ne figyelmeztess többet", - "Invite anyway": "Mindenképpen meghív", + "Invite anyway": "Meghívás mindenképp", "Whether or not you're logged in (we don't record your username)": "Be van-e jelentkezve (nem tároljuk a felhasználónevét)", "Upgrades a room to a new version": "Szoba fejlesztése új verzióra", "Sets the room name": "Szobanév beállítása", @@ -981,7 +981,7 @@ "Show a placeholder for removed messages": "Helykitöltő mutatása a törölt szövegek helyett", "Show join/leave messages (invites/kicks/bans unaffected)": "Mutasd a be-, kilépéseket (meghívók/kirúgások/kitiltások üzeneteit nem érinti)", "Show avatar changes": "Profilkép változás mutatása", - "Show display name changes": "Megjelenítési név változás mutatása", + "Show display name changes": "Megjelenítendő nevek változásának megjelenítése", "Show avatars in user and room mentions": "Profilkép mutatása a felhasználó és szoba említéseknél", "Enable big emoji in chat": "Nagy Emodzsik engedélyezése a csevegésekben", "Send typing notifications": "Gépelés visszajelzés küldése", @@ -995,7 +995,7 @@ "Verify this user by confirming the following number appears on their screen.": "Ellenőrizd a felhasználót azáltal, hogy megbizonyosodtok arról, hogy az alábbi számok jelentek meg az ő képernyőjén is.", "Yes": "Igen", "No": "Nem", - "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "E-mail üzenetet küldtünk neked, amivel a címedet ellenőrizzük. Kérlek kövesd az ott leírt lépéseket és kattints az alábbi gombra.", + "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "E-mail üzenetet küldtünk Önnek, hogy ellenőrizzük a címét. Kövesse az ott leírt utasításokat, és kattintson az alábbi gombra.", "Email Address": "E-mail cím", "Backing up %(sessionsRemaining)s keys...": "Kulcsok biztonsági mentése... (%(sessionsRemaining)s)", "All keys backed up": "Minden kulcs elmentve", @@ -1082,7 +1082,7 @@ "Starting backup...": "Mentés indul...", "A new recovery passphrase and key for Secure Messages have been detected.": "A Biztonságos üzenetekhez új visszaállítási jelmondatot és kulcsot észleltünk.", "Recovery Method Removed": "Visszaállítási eljárás törölve", - "If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Ha nem te törölted a visszaállítási eljárást, akkor egy támadó hozzá akar férni a fiókodhoz. Azonnal változtasd meg a jelszavadat és állíts be egy visszaállítási eljárást a Beállításokban.", + "If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Ha nem Ön törölte a visszaállítási módot, akkor egy támadó hozzá akar férni a fiókjához. Azonnal változtassa meg a jelszavát, és állítson be egy visszaállítási módot a Beállításokban.", "Chat with %(brand)s Bot": "Csevegés a %(brand)s Robottal", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "A(z) „%(fileName)s” mérete nagyobb mint amekkorát a Matrix-kiszolgáló enged feltölteni", "Gets or sets the room topic": "Lekérdezi vagy beállítja a szoba témáját", @@ -1094,7 +1094,7 @@ "%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s megtiltotta a vendég felhasználóknak, hogy belépjenek a szobába.", "%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s a vendég felhasználók belépési jogait erre állította át: %(rule)s", "Group & filter rooms by custom tags (refresh to apply changes)": "Szobák csoportosítása és szűrése egyedi címkékkel (frissíts, hogy a változások érvényre jussanak)", - "Verify this user by confirming the following emoji appear on their screen.": "Hitelesítheted a felhasználót, ha megerősíted, hogy az alábbi emojikat lehet látni az ő képernyőjén is.", + "Verify this user by confirming the following emoji appear on their screen.": "Hitelesítheti a felhasználót, ha megerősíti, hogy az alábbi emodzsi jelenik meg a képernyőjén.", "Unable to find a supported verification method.": "Nem található támogatott hitelesítési eljárás.", "Dog": "Kutya", "Cat": "Macska", @@ -1186,7 +1186,7 @@ "For maximum security, this should be different from your account password.": "A maximális biztonság érdekében ez térjen el a felhasználói fióknál használt jelszótól.", "Your keys are being backed up (the first backup could take a few minutes).": "A kulcsaid mentése folyamatban van (az első mentés több percig is eltarthat).", "Success!": "Sikeres!", - "Allow Peer-to-Peer for 1:1 calls": "Ponttól-pontig kapcsolat engedélyezése az 1:1 hívásokban", + "Allow Peer-to-Peer for 1:1 calls": "Egyenrangú kapcsolat engedélyezése az 1:1 hívásokban", "Credits": "Közreműködők", "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Ha bármilyen hibába botlasz vagy szeretnél visszajelzést küldeni nekünk, kérjük oszd meg velünk a GitHub-on.", "Changes your display nickname in the current room only": "Csak ebben a szobában változtatja meg a becenevedet", @@ -1229,7 +1229,7 @@ "Send %(eventType)s events": "%(eventType)s esemény küldése", "Select the roles required to change various parts of the room": "A szoba bizonyos beállításainak megváltoztatásához szükséges szerep kiválasztása", "Enable encryption?": "Titkosítás engedélyezése?", - "Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly. Learn more about encryption.": "Ha egyszer engedélyezve lett, a szoba titkosítását nem lehet kikapcsolni. A titkosított szobákban küldött üzenetek a szerver számára nem, csak a szoba tagjai számára láthatók. A titkosítás bekapcsolása megakadályoz sok botot és hidat a megfelelő működésben. Tudj meg többet a titkosításról.", + "Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly. Learn more about encryption.": "Ha egyszer engedélyezve lett, a szoba titkosítását nem lehet kikapcsolni. A titkosított szobákban küldött üzenetek a kiszolgáló számára nem, csak a szoba tagjai számára láthatók. A titkosítás bekapcsolása megakadályoz sok botot és hidat a megfelelő működésben. Tudjon meg többet a titkosításról.", "Power level": "Hozzáférési szint", "Want more than a community? Get your own server": "Többet szeretnél, mint egy közösség? Szerezz saját szervert", "Please install Chrome, Firefox, or Safari for the best experience.": "A legjobb élmény eléréséhez kérlek telepíts Chrome-ot, Firefoxot vagy Safarit.", @@ -1248,7 +1248,7 @@ "Maximize apps": "Alkalmazások teljes méretűvé nyitása", "A widget would like to verify your identity": "A kisalkalmazás ellenőrizné a személyazonosságodat", "A widget located at %(widgetUrl)s would like to verify your identity. By allowing this, the widget will be able to verify your user ID, but not perform actions as you.": "A kisalkalmazás itt: %(widgetUrl)s ellenőrizni szeretné a személyazonosságodat. Ha ezt engedélyezed a kisalkalmazás ellenőrizheti a felhasználói azonosítódat de nem viselkedhet úgy mintha te lennél.", - "Remember my selection for this widget": "Jegyezd meg a választásomat ehhez a kisalkalmazáshoz", + "Remember my selection for this widget": "Jegyezze meg a választásomat ehhez a kisalkalmazáshoz", "Deny": "Megtilt", "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)snak nem sikerült a protokoll listát beszereznie a Matrix szervertől. Lehet, hogy a Matrix szerver túl öreg ahhoz, hogy támogasson hálózatot harmadik féltől.", "%(brand)s failed to get the public room list.": "%(brand)snak nem sikerült beszereznie a nyilvános szoba listát.", @@ -1276,7 +1276,7 @@ "These files are too large to upload. The file size limit is %(limit)s.": "A fájl túl nagy a feltöltéshez. A fájlméret korlát %(limit)s.", "Some files are too large to be uploaded. The file size limit is %(limit)s.": "Néhány fájl túl nagy, hogy fel lehessen tölteni. A fájlméret korlát %(limit)s.", "Upload %(count)s other files|other": "Feltölt %(count)s másik fájlt", - "Upload %(count)s other files|one": "Feltölt %(count)s másik fájlt", + "Upload %(count)s other files|one": "%(count)s másik fájl feltöltése", "Cancel All": "Mindent megszakít", "Upload Error": "Feltöltési hiba", "The server does not support the room version specified.": "A kiszolgáló nem támogatja a megadott szobaverziót.", @@ -1300,9 +1300,9 @@ "You were banned from %(roomName)s by %(memberName)s": "Téged kitiltott %(memberName)s ebből a szobából: %(roomName)s", "Something went wrong with your invite to %(roomName)s": "A meghívóddal ebbe a szobába: %(roomName)s valami baj történt", "You can only join it with a working invite.": "Csak érvényes meghívóval tudsz csatlakozni.", - "You can still join it because this is a public room.": "Mivel a szoba nyilvános megpróbálhatsz csatlakozni.", + "You can still join it because this is a public room.": "Mivel a szoba nyilvános, így csatlakozhat.", "Join the discussion": "Beszélgetéshez csatlakozás", - "Try to join anyway": "Mindennek ellenére próbálj csatlakozni", + "Try to join anyway": "Csatlakozás mindenképp", "Do you want to chat with %(user)s?": "%(user)s felhasználóval szeretnél beszélgetni?", "Do you want to join %(roomName)s?": "%(roomName)s szobába szeretnél belépni?", " invited you": " meghívott", @@ -1359,7 +1359,7 @@ "Set a new custom sound": "Új egyedi hang beállítása", "Browse": "Böngész", "Use lowercase letters, numbers, dashes and underscores only": "Csak kisbetűt, számokat, kötőjeleket és aláhúzásokat használj", - "Cannot reach identity server": "Az azonosítási szerver nem érhető el", + "Cannot reach identity server": "Az azonosítási kiszolgáló nem érhető el", "You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Tudsz regisztrálni, de néhány funkció nem lesz elérhető amíg az azonosítási szerver újra elérhető lesz. Ha ezt a figyelmeztetést folyamatosan látod, ellenőrizd a beállításokat vagy vedd fel a kapcsolatot a szerver adminisztrátorával.", "You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "A jelszavadat újra beállíthatod, de néhány funkció nem lesz elérhető amíg az azonosítási szerver újra elérhető lesz. Ha ezt a figyelmeztetést folyamatosan látod, ellenőrizd a beállításokat vagy vedd fel a kapcsolatot a szerver adminisztrátorával.", "You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Beléphetsz, de néhány funkció nem lesz elérhető amíg az azonosítási szerver újra elérhető lesz. Ha ezt a figyelmeztetést folyamatosan látod, ellenőrizd a beállításokat vagy vedd fel a kapcsolatot a szerver adminisztrátorával.", @@ -1423,8 +1423,8 @@ "Only continue if you trust the owner of the server.": "Csak akkor lépj tovább, ha megbízol a kiszolgáló tulajdonosában.", "Disconnect from the identity server ?": "Bontod a kapcsolatot ezzel az azonosítási szerverrel: ?", "Disconnect": "Kapcsolat bontása", - "Identity Server (%(server)s)": "Azonosítás Szerver (%(server)s)", - "You are currently using to discover and be discoverable by existing contacts you know. You can change your identity server below.": "A kapcsolatok kereséséhez és, hogy megtaláljanak ismerősök ezt a szervert használod: . A használt azonosítási szervert alább tudod megváltoztatni.", + "Identity Server (%(server)s)": "Azonosítási kiszolgáló (%(server)s)", + "You are currently using to discover and be discoverable by existing contacts you know. You can change your identity server below.": "A kapcsolatok kereséséhez és hogy megtalálják az ismerősei, ezt a kiszolgálót használja: . A használt azonosítási kiszolgálót alább tudja megváltoztatni.", "You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Jelenleg nem használsz azonosítási szervert. Ahhoz, hogy e-mail cím, vagy egyéb azonosító alapján megtalálhassanak az ismerőseid, vagy te megtalálhasd őket, be kell állítanod egy azonosítási szervert.", "Disconnecting from your identity server will mean you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Ha az azonosítási szerverrel bontod a kapcsolatot az azt fogja eredményezni, hogy más felhasználók nem találnak rád és nem tudsz másokat meghívni e-mail cím vagy telefonszám alapján.", "Enter a new identity server": "Új azonosítási szerver hozzáadása", @@ -1455,17 +1455,17 @@ "Do not use an identity server": "Az azonosítási szerver mellőzése", "Upgrade the room": "Szoba fejlesztése", "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "E-mail cím beállítása a fiók visszaállításához. E-mail cím vagy telefonszám, hogy ismerősök megtalálhassanak.", - "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "E-mail cím beállítása a fiók visszaállításához. E-mail cím, hogy ismerősök megtalálhassanak.", + "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "E-mail-cím beállítása a fiók helyreállításához. Az e-mail-címet arra is használhatja, hogy megtalálhassák az ismerősei.", "Enter your custom homeserver URL What does this mean?": "Add meg a matrix szervered URL-jét Mit jelent ez?", "Enter your custom identity server URL What does this mean?": "Add meg az azonosítási szervered URL-jét Mit jelent ez?", "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Használj azonosítási szervert az e-mail címmel való meghíváshoz. Használd az alapértelmezett szervert (%(defaultIdentityServerName)s) vagy adj meg mást a Beállításokban.", - "Use an identity server to invite by email. Manage in Settings.": "Használj azonosítási szervert e-mail címmel való meghíváshoz. Megadása a Beállításokban.", + "Use an identity server to invite by email. Manage in Settings.": "Használjon egy azonosítási kiszolgálót az e-maillel történő meghíváshoz. Kezelés a Beállításokban.", "Enable room encryption": "Szoba titkosításának bekapcsolása", "Use an identity server": "Azonosítási kiszolgáló használata", - "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Egy azonosítási kiszolgáló használata az e-maillel történő meghíváshoz. Kattints a folytatáshoz az alapértelmezett azonosítási kiszolgáló (%(defaultIdentityServerName)s) használatához, vagy állítsd be a Beállításokban.", + "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Használjon egy azonosítási kiszolgálót az e-maillel történő meghíváshoz. Kattintson a folytatásra az alapértelmezett azonosítási kiszolgáló (%(defaultIdentityServerName)s) használatához, vagy állítsa be a Beállításokban.", "Use an identity server to invite by email. Manage in Settings.": "Egy azonosítási kiszolgáló használata az e-maillel történő meghíváshoz. Módosítás a Beállításokban.", "Deactivate user?": "Felhasználó felfüggesztése?", - "Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?": "A felhasználó felfüggesztése a felhasználót kijelentkezteti és megakadályozza, hogy vissza tudjon lépni. Továbbá kilép minden szobából aminek tagja volt. Ezt nem lehet visszavonni. Biztos, hogy felfüggeszted ezt a felhasználót?", + "Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?": "A felhasználó deaktiválása a felhasználót kijelentkezteti és megakadályozza, hogy vissza tudjon lépni. Továbbá kilépteti minden szobából, amelynek tagja volt. Ezt nem lehet visszavonni. Biztos, hogy deaktiválja ezt a felhasználót?", "Deactivate user": "Felhasználó felfüggesztése", "Sends a message as plain text, without interpreting it as markdown": "Az üzenet elküldése sima szövegként anélkül, hogy „markdown” formázásként értelmezné", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "A meghívód ellenőrzésekor az alábbi hibát kaptuk: %(errcode)s. Ezt az információt megpróbálhatod eljuttatni a szoba gazdájának.", @@ -1523,7 +1523,7 @@ "Topic (optional)": "Téma (nem kötelező)", "Make this room public": "A szoba legyen nyilvános", "Hide advanced": "Haladó elrejtése", - "Show advanced": "Haladó megmutatása", + "Show advanced": "Speciális megjelenítése", "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Más szervereken lévő felhasználók belépésének letiltása-csak helyi szoba (Ezt a beállítást később nem lehet megváltoztatni!)", "Close dialog": "Ablak bezárása", "Show previews/thumbnails for images": "Előnézet/bélyegkép mutatása a képekhez", @@ -1543,7 +1543,7 @@ "Missing captcha public key in homeserver configuration. Please report this to your homeserver administrator.": "A matrix szerveren hiányzik a captcha-hoz a nyilvános kulcs. Kérlek értesítsd a matrix szerver adminisztrátorát.", "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "1 üzenetet törölsz ettől a felhasználótól: %(user)s. Ezt nem lehet visszavonni. Folytatod?", "Remove %(count)s messages|one": "1 üzenet törlése", - "Your email address hasn't been verified yet": "Az e-mail címed még nincs ellenőrizve", + "Your email address hasn't been verified yet": "Az e-mail-címe még nincs ellenőrizve", "Click the link in the email you received to verify and then click continue again.": "Ellenőrzéshez kattints a linkre az e-mailben amit kaptál és itt kattints a folytatásra újra.", "Add Email Address": "E-mail cím hozzáadása", "Add Phone Number": "Telefonszám hozzáadása", @@ -1560,7 +1560,7 @@ "DuckDuckGo Results": "DuckDuckGo találatok", "Quick Reactions": "Gyors Reakció", "Frequently Used": "Gyakran Használt", - "Smileys & People": "Smiley-k és emberek", + "Smileys & People": "Mosolyok és emberek", "Animals & Nature": "Állatok és természet", "Food & Drink": "Étel és ital", "Activities": "Mozgás", @@ -1583,7 +1583,7 @@ "Trust": "Megbízom benne", "Message Actions": "Üzenet Műveletek", "%(name)s (%(userId)s)": "%(name)s (%(userId)s)", - "You verified %(name)s": "Ellenőrizted: %(name)s", + "You verified %(name)s": "Ellenőrizte: %(name)s", "You cancelled verifying %(name)s": "Az ellenőrzést megszakítottad ehhez: %(name)s", "%(name)s cancelled verifying": "%(name)s megszakította az ellenőrzést", "You accepted": "Elfogadtad", @@ -1634,12 +1634,12 @@ "Any of the following data may be shared:": "Az alábbi adatok közül bármelyik megosztásra kerülhet:", "Your display name": "Megjelenítési neved", "Your avatar URL": "Profilképed URL-je", - "Your user ID": "Felhasználói azonosítód", + "Your user ID": "A felhasználói azonosítója", "Your theme": "Témád", "%(brand)s URL": "%(brand)s URL", "Room ID": "Szoba azonosító", "Widget ID": "Kisalkalmazás azonosító", - "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Ennek a kisalkalmazásnak a használata adatot oszthat meg %(widgetDomain)s domain-nel és az Integrációs Menedzserrel.", + "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Ennek a kisalkalmazásnak a használata adatot oszthat meg a(z) %(widgetDomain)s oldallal és az Integrációkezelővel.", "Using this widget may share data with %(widgetDomain)s.": "Ennek a kisalkalmazásnak a használata adatot oszthat meg %(widgetDomain)s domain-nel.", "Widget added by": "A kisalkalmazást hozzáadta", "This widget may use cookies.": "Ez a kisalkalmazás sütiket használhat.", @@ -1650,7 +1650,7 @@ "Remove for me": "Visszavonás magamtól", "Connecting to integration manager...": "Kapcsolódás az integrációs menedzserhez...", "Cannot connect to integration manager": "A kapcsolódás az integrációs menedzserhez sikertelen", - "The integration manager is offline or it cannot reach your homeserver.": "Az integrációs menedzser nem működik vagy nem éri el a matrix szerveredet.", + "The integration manager is offline or it cannot reach your homeserver.": "Az integrációkezelő nem működik, vagy nem éri el a Matrix-kiszolgálóját.", "Use an Integration Manager (%(serverName)s) to manage bots, widgets, and sticker packs.": "Használj Integrációs Menedzsert (%(serverName)s) a botok, kisalkalmazások és matrica csomagok kezeléséhez.", "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Használj Integrációs Menedzsert a botok, kisalkalmazások és matrica csomagok kezeléséhez.", "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integrációs Menedzser megkapja a konfigurációt, módosíthat kisalkalmazásokat, szobához meghívót küldhet és a hozzáférési szintet beállíthatja helyetted.", @@ -1741,8 +1741,8 @@ "This bridge is managed by .": "Ezt a hidat ez a felhasználó kezeli: .", "Suggestions": "Javaslatok", "Failed to find the following users": "Az alábbi felhasználók nem találhatók", - "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Az alábbi felhasználók nem léteznek vagy hibásan vannak megadva és nem lehet őket meghívni: %(csvNames)s", - "Lock": "Zár", + "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Az alábbi felhasználók nem léteznek vagy hibásan vannak megadva, és nem lehet őket meghívni: %(csvNames)s", + "Lock": "Zárolás", "a few seconds ago": "néhány másodperce", "about a minute ago": "percekkel ezelőtt", "%(num)s minutes ago": "%(num)s perccel ezelőtt", @@ -1779,7 +1779,7 @@ "Hint: Begin your message with // to start it with a slash.": "Tipp: Ez üzenetedet kezd ezzel: //, ha perjellel szeretnéd kezdeni.", "Send as message": "Üzenet küldése", "This room is end-to-end encrypted": "Ez a szoba végpontok közötti titkosítást használ", - "Everyone in this room is verified": "A szobába mindenki ellenőrizve van", + "Everyone in this room is verified": "A szobában mindenki ellenőrizve van", "Invite only": "Csak meghívóval", "Send a reply…": "Válasz küldése…", "Send a message…": "Üzenet küldése…", @@ -1790,7 +1790,7 @@ "Set up encryption": "Titkosítás beállítása", "Verify this session": "Munkamenet ellenőrzése", "Encryption upgrade available": "A titkosítási fejlesztés elérhető", - "Enable message search in encrypted rooms": "Üzenetek keresésének engedélyezése titkosított szobákban", + "Enable message search in encrypted rooms": "Üzenetek keresésének bekapcsolása a titkosított szobákban", "Review": "Átnéz", "This bridge was provisioned by .": "Ezt a hidat az alábbi felhasználó készítette: .", "Workspace: %(networkName)s": "Munkahely: %(networkName)s", @@ -1800,7 +1800,7 @@ " to store messages from ": " üzenetek tárolásához ", "rooms.": "szobából.", "Manage": "Kezelés", - "Securely cache encrypted messages locally for them to appear in search results.": "A titkosított üzenetek kereséséhez azokat biztonságos módon helyileg kell tárolnod.", + "Securely cache encrypted messages locally for them to appear in search results.": "A titkosított üzenetek kereséséhez azokat biztonságos módon, helyileg kell tárolnia.", "Enable": "Engedélyez", "%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with search components added.": "A %(brand)sból a titkosított üzenetek biztonságos helyi tárolásához hiányzik néhány dolog. Ha kísérletezni szeretne ezzel a lehetőséggel, akkor fordítson le egy saját %(brand)s Desktopot a kereső komponens hozzáadásával.", "Message search": "Üzenet keresése", @@ -1814,7 +1814,7 @@ "If disabled, messages from encrypted rooms won't appear in search results.": "Ha nincs engedélyezve akkor a titkosított szobák üzenetei nem jelennek meg a keresések között.", "Disable": "Tiltás", "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s a kereshetőség érdekében a titkosított üzeneteket biztonságos módon helyileg tárolja:", - "Space used:": "Hely felhasználva:", + "Space used:": "Felhasznált hely:", "Indexed messages:": "Indexált üzenetek:", "Restore your key backup to upgrade your encryption": "A titkosítás fejlesztéséhez allítsd vissza a kulcs mentést", "Setting up keys": "Kulcsok beállítása", @@ -1919,8 +1919,8 @@ "Make a copy of your recovery key": "Készíts másolatot a visszaállítási kulcsodról", "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another session.": "A Biztonságos Üzenet Visszaállítás beállítása nélkül kijelentkezés után vagy másik munkamenetet használva nem tudod visszaállítani a titkosított üzeneteidet.", "Create key backup": "Kulcs mentés készítése", - "This session is encrypting history using the new recovery method.": "Ez a munkamenet az új visszaállítási metódussal titkosítja a régi üzeneteket.", - "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "A munkamenet észrevette, hogy a visszaállítási jelmondat és a kulcs a Biztonságos üzenetekhez törölve lett.", + "This session is encrypting history using the new recovery method.": "Ez a munkamenet az új visszaállítási módszerrel titkosítja a régi üzeneteket.", + "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "A munkamenet észrevette, hogy a Biztonságos üzenetek visszaállítási jelmondata és kulcsa törölve lett.", "If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Ha véletlenül tetted, beállíthatod a Biztonságos Üzeneteket ezen a munkameneten ami újra titkosítja a régi üzeneteket az visszaállítási eljárással.", "Indexed rooms:": "Indexált szobák:", "Message downloading sleep time(ms)": "Üzenet letöltés alvási idő (ms)", @@ -1963,7 +1963,7 @@ "Show rooms with unread notifications first": "Olvasatlan üzeneteket tartalmazó szobák megjelenítése elől", "Show shortcuts to recently viewed rooms above the room list": "Gyorselérési gombok megjelenítése a nemrég meglátogatott szobákhoz a szoba lista felett", "Sign In or Create Account": "Bejelentkezés vagy fiók létrehozása", - "Use your account or create a new one to continue.": "A folytatáshoz használd a fiókodat, vagy hozz létre egy újat.", + "Use your account or create a new one to continue.": "A folytatáshoz használja a fiókját, vagy hozzon létre egy újat.", "Create Account": "Fiók létrehozása", "Displays information about a user": "A felhasználóról információ megjelenítése", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Matrix-szal kapcsolatos biztonsági hibák jelentésével kapcsolatban kérlek olvasd el a Matrix.org Biztonsági hiba közzétételi szabályzatot.", @@ -1986,7 +1986,7 @@ "Custom theme URL": "Egyedi téma URL", "Add theme": "Téma hozzáadása", "Manually Verify by Text": "Manuális szöveges ellenőrzés", - "Interactively verify by Emoji": "Közös ellenőrzés Emodzsival", + "Interactively verify by Emoji": "Közös ellenőrzés emodzsival", "Self signing private key:": "Titkos önaláíró kulcs:", "cached locally": "helyben gyorsítótárazott", "not found locally": "helyben nem található", @@ -2004,7 +2004,7 @@ "Can't find this server or its room list": "A szerver vagy a szoba listája nem található", "All rooms": "Minden szoba", "Your server": "Matrix szervered", - "Are you sure you want to remove %(serverName)s": "Biztos, hogy törölni szeretnéd: %(serverName)s", + "Are you sure you want to remove %(serverName)s": "Biztos, hogy eltávolítja: %(serverName)s", "Remove server": "Szerver törlése", "Matrix": "Matrix", "Add a new server": "Új szerver hozzáadása", @@ -2051,7 +2051,7 @@ "New line": "Új sor", "Navigate recent messages to edit": "Friss üzenetekben navigálás a szerkesztéshez", "Jump to start/end of the composer": "Az üzenet elejére/végére ugrás a szerkesztőben", - "Navigate composer history": "A szerkesztő korábbi üzeneteiben navigálás", + "Navigate composer history": "Navigálás a szerkesztő előzményeiben", "Toggle microphone mute": "Mikrofon némítás be/ki", "Toggle video on/off": "Videó be/ki", "Jump to room search": "A szoba keresésre ugrás", @@ -2079,17 +2079,17 @@ "Session backup key:": "Munkamenet másolat kulcs:", "Use Single Sign On to continue": "A folytatáshoz használd az egyszeri bejelentkezést (SSO)", "Single Sign On": "Egyszeri bejelentkezés", - "%(name)s is requesting verification": "A(z) %(name)s ellenőrzést kér", + "%(name)s is requesting verification": "%(name)s ellenőrzést kér", "Sends a message as html, without interpreting it as markdown": "Az üzenet elküldése html szövegként anélkül, hogy „markdown” formázásként értelmezné", - "Confirm the emoji below are displayed on both sessions, in the same order:": "Erősítsd meg, hogy az alábbi emodzsik mindkét munkamenetben azonos sorrendben jelentek meg:", + "Confirm the emoji below are displayed on both sessions, in the same order:": "Erősítse meg, hogy az alábbi emodzsik mindkét munkamenetben azonos sorrendben jelentek meg:", "Verify this session by confirming the following number appears on its screen.": "Ellenőrizd ezt a munkamenetet azzal, hogy megerősíted, hogy az alábbi szám jelent meg a kijelzőjén.", - "Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Az ellenőrzéshez a másik munkamenetedre várakozunk, %(deviceName)s (%(deviceId)s)…", + "Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Az ellenőrzéshez a másik munkamenetére – %(deviceName)s (%(deviceId)s) – várunk…", "From %(deviceName)s (%(deviceId)s)": "Innen: %(deviceName)s (%(deviceId)s)", "well formed": "helyes formátum", "unexpected type": "váratlan típus", "Confirm deleting these sessions": "Megerősíted ennek a munkamenetnek a törlését", "Click the button below to confirm deleting these sessions.|other": "Ezeknek a munkamenetek törlésének a megerősítéséhez kattints a gombra lent.", - "Click the button below to confirm deleting these sessions.|one": "Ennek a munkamenet törlésének a megerősítéséhez kattints a gombra lent.", + "Click the button below to confirm deleting these sessions.|one": "A munkamenet törlésének megerősítéséhez kattintson a lenti gombra.", "Delete sessions|other": "Munkamenetek törlése", "Delete sessions|one": "Munkamenet törlése", "Waiting for you to accept on your other session…": "Az elfogadást várjuk a másik munkamenetedből…", @@ -2140,7 +2140,7 @@ "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "A mentést nem lehet visszafejteni ezzel a visszaállítási jelmondattal: kérlek ellenőrizd, hogy a megfelelő visszaállítási jelmondatot adtad-e meg.", "Syncing...": "Szinkronizálás…", "Signing In...": "Bejelentkezés…", - "If you've joined lots of rooms, this might take a while": "Ha sok szobában vagy benn ez eltarthat egy darabig", + "If you've joined lots of rooms, this might take a while": "Ha sok szobához csatlakozott, ez eltarthat egy darabig", "Great! This recovery passphrase looks strong enough.": "Nagyszerű! Ez a visszaállítási jelmondat elég erősnek tűnik.", "Enter a recovery passphrase": "Visszaállítási jelmondat megadása", "Enter your recovery passphrase a second time to confirm it.": "A megerősítéshez add meg a visszaállítási jelmondatot még egyszer.", @@ -2168,7 +2168,7 @@ "Fetching keys from server...": "Kulcsok lekérdezése a szerverről…", "%(completed)s of %(total)s keys restored": "%(completed)s/%(total)s kulcs visszaállítva", "Keys restored": "Kulcsok visszaállítva", - "Successfully restored %(sessionCount)s keys": "Kulcsok (%(sessionCount)s) sikeresen visszaállítva", + "Successfully restored %(sessionCount)s keys": "%(sessionCount)s kulcs sikeresen visszaállítva", "You signed in to a new session without verifying it:": "Ellenőrzés nélkül jelentkeztél be egy új munkamenetbe:", "Verify your other session using one of the options below.": "Ellenőrizd a másik munkameneted a lenti lehetőségek egyikével.", "Invite someone using their name, username (like ), email address or share this room.": "Hívj meg valakit a nevével, felhasználónevével (mint ), e-mail címével vagy oszd meg ezt a szobát.", @@ -2179,7 +2179,7 @@ "Message deleted": "Üzenet törölve", "Message deleted by %(name)s": "%(name)s törölte ezt az üzenetet", "QR Code": "QR kód", - "To continue, use Single Sign On to prove your identity.": "A folytatáshoz a személyazonosságod megerősítéséhez használd az egyszeri bejelentkezést.", + "To continue, use Single Sign On to prove your identity.": "A folytatáshoz, használja az egyszeri bejelentkezést, hogy megerősítse a személyazonosságát.", "Confirm to continue": "Erősítsd meg a továbblépéshez", "Click the button below to confirm your identity.": "A személyazonosságod megerősítéséhez kattints a lenti gombra!", "Confirm encryption setup": "Erősítsd meg a titkosítási beállításokat", @@ -2189,7 +2189,7 @@ "Upload a file": "Fájl feltöltése", "Room name or address": "A szoba neve vagy címe", "Joins room with given address": "Megadott címmel csatlakozik a szobához", - "Unrecognised room address:": "Ismeretlen szoba cím:", + "Unrecognised room address:": "Ismeretlen szobacím:", "Font scaling": "Betű nagyítás", "Font size": "Betűméret", "IRC display name width": "IRC megjelenítési név szélessége", @@ -2259,7 +2259,7 @@ "Use Recovery Key or Passphrase": "Használd a visszaállítási kulcsot vagy jelmondatot", "Use Recovery Key": "Használd a Visszaállítási Kulcsot", "Use the improved room list (will refresh to apply changes)": "Használd a fejlesztett szoba listát (a változások életbe lépéséhez újra fog tölteni)", - "Use custom size": "Egyedi méret használata", + "Use custom size": "Egyéni méret használata", "Use a system font": "Rendszer betűtípus használata", "System font name": "Rendszer betűtípus neve", "Hey you. You're the best!": "Hé te! Te vagy a legjobb!", @@ -2342,7 +2342,7 @@ "You can also set up Secure Backup & manage your keys in Settings.": "A Biztonsági mentést és a kulcsok kezelését beállíthatod a Beállításokban.", "Set up Secure backup": "Biztonsági mentés beállítása", "Set a Security Phrase": "Biztonsági Jelmondat beállítása", - "Confirm Security Phrase": "Biztonsági Jelmondat megerősítése", + "Confirm Security Phrase": "Biztonsági jelmondat megerősítése", "Save your Security Key": "Ments el a Biztonsági Kulcsodat", "Use your account to sign in to the latest version": "A legutolsó verzióba való bejelentkezéshez használd a fiókodat", "We’re excited to announce Riot is now Element": "Izgatottan jelentjük, hogy a Riot mostantól Element", @@ -2351,7 +2351,7 @@ "Enable experimental, compact IRC style layout": "Egyszerű (kísérleti) IRC stílusú kinézet engedélyezése", "Unknown caller": "Ismeretlen hívó", "Incoming voice call": "Bejövő hanghívás", - "Incoming video call": "Bejövő videó hívás", + "Incoming video call": "Bejövő videóhívás", "Incoming call": "Bejövő hívás", "There are advanced notifications which are not shown here.": "Vannak haladó értesítési beállítások amik itt nem jelennek meg.", "Appearance Settings only affect this %(brand)s session.": "A megjelenítési beállítások csak erre az %(brand)s munkamenetre lesznek érvényesek.", @@ -2374,10 +2374,10 @@ "This room is public": "Ez egy nyilvános szoba", "Away": "Távol", "Are you sure you want to cancel entering passphrase?": "Biztos vagy benne, hogy megszakítod a jelmondat bevitelét?", - "Enable advanced debugging for the room list": "Kibővített hibakeresés bekapcsolása a szoba listához", + "Enable advanced debugging for the room list": "Speciális hibakeresés bekapcsolása a szobalistához", "%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use %(brand)s Desktop for encrypted messages to appear in search results.": "A(z) %(brand)s nem képes a web böngészőben futva biztonságosan elmenteni a titkosított üzeneteket helyben. Használd az Asztali %(brand)s alkalmazást ahhoz, hogy az üzenetekben való keresésekkor a titkosított üzenetek is megjelenhessenek.", "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply.": "Valószínűleg egy %(brand)s klienstől eltérő programmal konfiguráltad. %(brand)s kliensben nem tudod módosítani de attól még érvényesek.", - "Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Add meg a rendszer által használt font nevét és %(brand)s megpróbálja majd azt használni.", + "Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Adja meg a rendszer által használt betűkészlet nevét és az %(brand)s megpróbálja azt használni.", "Add users and servers you want to ignore here. Use asterisks to have %(brand)s match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "A figyelmen kívül hagyandó felhasználókat és szervereket itt add meg. %(brand)s kliensben használj csillagot hogy a helyén minden karakterre illeszkedjen a kifejezés. Például: @bot:* figyelmen kívül fog hagyni minden „bot” nevű felhasználót bármely szerverről.", "Low priority rooms show up at the bottom of your room list in a dedicated section at the bottom of your room list": "Az alacsony prioritású szobák egy külön helyen a szobalista alján fognak megjelenni", "Custom Tag": "Egyedi címke", @@ -2394,10 +2394,10 @@ "Change notification settings": "Értesítési beállítások megváltoztatása", "Your server isn't responding to some requests.": "A szervered nem válaszol néhány kérésre.", "You're all caught up.": "Mindent elolvastál.", - "Server isn't responding": "A szerver nem válaszol", + "Server isn't responding": "A kiszolgáló nem válaszol", "Your server isn't responding to some of your requests. Below are some of the most likely reasons.": "A szervered néhány kérésre nem válaszol. Alább felsorolunk pár lehetséges okot.", "The server (%(serverName)s) took too long to respond.": "A szervernek (%(serverName)s) túl hosszú időbe telt válaszolni.", - "Your firewall or anti-virus is blocking the request.": "A tűzfalad vagy víruskeresőd blokkolja a kérést.", + "Your firewall or anti-virus is blocking the request.": "A tűzfala vagy víruskeresője blokkolja a kérést.", "A browser extension is preventing the request.": "Egy böngésző kiterjesztés megakadályozza a kérést.", "The server is offline.": "A szerver nem működik.", "The server has denied your request.": "A szerver elutasította a kérést.", @@ -2442,7 +2442,7 @@ "Create community": "Közösség létrehozása", "Set up Secure Backup": "Biztonsági mentés beállítása", "Explore community rooms": "Fedezd fel a közösségi szobákat", - "Create a room in %(communityName)s": "Készíts szobát itt: %(communityName)s", + "Create a room in %(communityName)s": "Szoba létrehozása itt: %(communityName)s", "Cross-signing and secret storage are ready for use.": "Az eszközök közti hitelesítés és a biztonsági tároló kész a használatra.", "Cross-signing is ready for use, but secret storage is currently not being used to backup your keys.": "Az eszközök közti hitelesítés kész a használatra, de a biztonsági tároló nincs használva a kulcsok mentéséhez.", "Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone.": "Privát szobák csak meghívóval találhatók meg és meghívóval lehet belépni. A nyilvános szobákat bárki megtalálhatja és be is léphet.", @@ -2481,7 +2481,7 @@ "Group call started by %(senderName)s": "A konferenciahívást elindította: %(senderName)s", "Group call ended by %(senderName)s": "A konferenciahívást befejezte: %(senderName)s", "Cross-signing is ready for use.": "Eszközök közötti hitelesítés kész a használatra.", - "Cross-signing is not set up.": "Eszközök közötti hitelesítés nincs beállítva.", + "Cross-signing is not set up.": "Az eszközök közötti hitelesítés nincs beállítva.", "Backup version:": "Mentés verzió:", "Algorithm:": "Algoritmus:", "Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Recovery Key.": "Ments el a titkosítási kulcsaidat a fiókadatokkal arra az esetre ha elvesztenéd a hozzáférést a munkameneteidhez. A kulcsok egy egyedi visszaállítási kulccsal lesznek védve.", @@ -2522,7 +2522,7 @@ "Video conference ended by %(senderName)s": "A videókonferenciát befejezte: %(senderName)s", "Video conference updated by %(senderName)s": "A videókonferenciát frissítette: %(senderName)s", "Video conference started by %(senderName)s": "A videókonferenciát elindította: %(senderName)s", - "Failed to save your profile": "A profilodat nem sikerült elmenteni", + "Failed to save your profile": "A profilját nem sikerült menteni", "The operation could not be completed": "A műveletet nem lehetett befejezni", "Remove messages sent by others": "Mások által küldött üzenetek törlése", "Starting microphone...": "Mikrofon bekapcsolása…", @@ -2530,7 +2530,7 @@ "Call connecting...": "Híváshoz csatlakozás…", "Calling...": "Hívás…", "🎉 All servers are banned from participating! This room can no longer be used.": "🎉 Minden szerver ki van tiltva! Ezt a szobát nem lehet többet használni.", - "%(senderDisplayName)s changed the server ACLs for this room.": "%(senderDisplayName)s megváltoztatta a jogosultságokat a szobában.", + "%(senderDisplayName)s changed the server ACLs for this room.": "%(senderDisplayName)s megváltoztatta a kiszolgálójogosultságokat a szobában.", "%(senderDisplayName)s set the server ACLs for this room.": "%(senderDisplayName)s beállította a jogosultságokat a szobában.", "%(senderName)s declined the call.": "%(senderName)s visszautasította a hívást.", "(an error occurred)": "(hiba történt)", @@ -2539,10 +2539,10 @@ "The call could not be established": "A hívás kapcsolatot nem lehet felépíteni", "The other party declined the call.": "A másik fél elutasította a hívást.", "Call Declined": "Hívás elutasítva", - "Move right": "Jobbra mozgat", + "Move right": "Mozgatás jobbra", "Move left": "Balra mozgat", "Revoke permissions": "Jogosultságok visszavonása", - "Data on this screen is shared with %(widgetDomain)s": "Az adatok erről a képernyőről megosztásra kerülnek ezzel: %(widgetDomain)s", + "Data on this screen is shared with %(widgetDomain)s": "Az ezen a képernyőn látható adatok megosztásra kerülnek ezzel: %(widgetDomain)s", "Modal Widget": "Előugró kisalkalmazás", "Unpin a widget to view it in this panel": "Kisalkalmazás megjelenítése ezen a panelen", "You can only pin up to %(count)s widgets|other": "Csak %(count)s kisalkalmazást tudsz kitűzni", @@ -2574,7 +2574,7 @@ "There are two ways you can provide feedback and help us improve %(brand)s.": "Van két lehetőséged, hogy visszajelezz vagy segíts jobbá tenni ezt: %(brand)s.", "Comment": "Megjegyzés", "Add comment": "Megjegyzés hozzáadása", - "Please go into as much detail as you like, so we can track down the problem.": "Ahhoz, hogy megérthessük a problémát olyan részletesen írd le ahogy csak szeretnéd.", + "Please go into as much detail as you like, so we can track down the problem.": "Ahhoz, hogy megérthessük a problémát, írja le olyan részletesen, amennyire csak szeretné.", "Bermuda": "Bermuda", "Benin": "Benin", "Belize": "Belize", From 0c2fdcd84b1af50cc96ea997d6d3e5c6bd234419 Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Thu, 12 Nov 2020 21:06:54 +0000 Subject: [PATCH 079/115] Translated using Weblate (Swedish) Currently translated at 90.9% (2402 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/sv/ --- src/i18n/strings/sv.json | 44 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index ebd1e0b56b..bf15596277 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -2493,5 +2493,47 @@ "Please go into as much detail as you like, so we can track down the problem.": "Vänligen gå in i hur mycket detalj du vill, så att vi kan hitta problemet.", "Tell us below how you feel about %(brand)s so far.": "Berätta för oss vad du tycker om %(brand)s än så länge.", "Rate %(brand)s": "Betygsätt %(brand)s", - "Feedback sent": "Återkoppling skickad" + "Feedback sent": "Återkoppling skickad", + "Canada": "Kanada", + "Cameroon": "Kamerun", + "Cambodia": "Kambodja", + "Burundi": "Burundi", + "Burkina Faso": "Burkina Faso", + "Bulgaria": "Bulgarien", + "Brunei": "Brunei", + "British Virgin Islands": "Brittiska Jungfruöarna", + "British Indian Ocean Territory": "Brittiska territoriet i Indiska oceanen", + "Brazil": "Brasilien", + "Bouvet Island": "Bouvetön", + "Botswana": "Botswana", + "Bosnia": "Bosnien", + "Bolivia": "Bolivia", + "Bhutan": "Bhutan", + "Bermuda": "Bermuda", + "Benin": "Benin", + "Belize": "Belize", + "Belgium": "Belgien", + "Belarus": "Belarus", + "Barbados": "Barbados", + "Bangladesh": "Bangladesh", + "Bahrain": "Bahrain", + "Bahamas": "Bahamas", + "Azerbaijan": "Azerbajdzjan", + "Austria": "Österrike", + "Australia": "Australien", + "Aruba": "Aruba", + "Armenia": "Armenien", + "Argentina": "Argentina", + "Antigua & Barbuda": "Antigua och Barbuda", + "United Kingdom": "Förenade kungadömet", + "Antarctica": "Antarktis", + "Anguilla": "Anguilla", + "Angola": "Angola", + "Andorra": "Andorra", + "American Samoa": "Amerikanska Samoa", + "Algeria": "Algeriet", + "Albania": "Albanien", + "Åland Islands": "Åland", + "Afghanistan": "Afghanistan", + "United States": "USA" } From 6a3049b90f1ec2b515b154ecfd7a4110d0051751 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 16 Nov 2020 15:40:56 +0000 Subject: [PATCH 080/115] Remove old unused views/paths --- src/components/structures/MatrixChat.tsx | 49 +++--------- .../structures/auth/PostRegistration.js | 77 ------------------- 2 files changed, 9 insertions(+), 117 deletions(-) delete mode 100644 src/components/structures/auth/PostRegistration.js diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 22cd73eff7..dd0b945d86 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -87,36 +87,33 @@ import { CommunityPrototypeStore } from "../../stores/CommunityPrototypeStore"; export enum Views { // a special initial state which is only used at startup, while we are // trying to re-animate a matrix client or register as a guest. - LOADING = 0, + LOADING, // we are showing the welcome view - WELCOME = 1, + WELCOME, // we are showing the login view - LOGIN = 2, + LOGIN, // we are showing the registration view - REGISTER = 3, - - // completing the registration flow - POST_REGISTRATION = 4, + REGISTER, // showing the 'forgot password' view - FORGOT_PASSWORD = 5, + FORGOT_PASSWORD, // showing flow to trust this new device with cross-signing - COMPLETE_SECURITY = 6, + COMPLETE_SECURITY, // flow to setup SSSS / cross-signing on this account - E2E_SETUP = 7, + E2E_SETUP, // we are logged in with an active matrix client. The logged_in state also // includes guests users as they too are logged in at the client level. - LOGGED_IN = 8, + LOGGED_IN, // We are logged out (invalid token) but have our local state again. The user // should log back in to rehydrate the client. - SOFT_LOGOUT = 9, + SOFT_LOGOUT, } // Actions that are redirected through the onboarding process prior to being @@ -562,11 +559,6 @@ export default class MatrixChat extends React.PureComponent { ThemeController.isLogin = true; this.themeWatcher.recheck(); break; - case 'start_post_registration': - this.setState({ - view: Views.POST_REGISTRATION, - }); - break; case 'start_password_recovery': this.setStateForNewView({ view: Views.FORGOT_PASSWORD, @@ -1621,14 +1613,6 @@ export default class MatrixChat extends React.PureComponent { dis.dispatch({ action: 'view_my_groups', }); - } else if (screen === 'complete_security') { - dis.dispatch({ - action: 'start_complete_security', - }); - } else if (screen === 'post_registration') { - dis.dispatch({ - action: 'start_post_registration', - }); } else if (screen.indexOf('room/') === 0) { // Rooms can have the following formats: // #room_alias:domain or !opaque_id:domain @@ -1799,14 +1783,6 @@ export default class MatrixChat extends React.PureComponent { return Lifecycle.setLoggedIn(credentials); } - onFinishPostRegistration = () => { - // Don't confuse this with "PageType" which is the middle window to show - this.setState({ - view: Views.LOGGED_IN, - }); - this.showScreen("settings"); - }; - onSendEvent(roomId: string, event: MatrixEvent) { const cli = MatrixClientPeg.get(); if (!cli) { @@ -1971,13 +1947,6 @@ export default class MatrixChat extends React.PureComponent { accountPassword={this.accountPassword} /> ); - } else if (this.state.view === Views.POST_REGISTRATION) { - // needs to be before normal PageTypes as you are logged in technically - const PostRegistration = sdk.getComponent('structures.auth.PostRegistration'); - view = ( - - ); } else if (this.state.view === Views.LOGGED_IN) { // store errors stop the client syncing and require user intervention, so we'll // be showing a dialog. Don't show anything else. diff --git a/src/components/structures/auth/PostRegistration.js b/src/components/structures/auth/PostRegistration.js deleted file mode 100644 index aa36de6596..0000000000 --- a/src/components/structures/auth/PostRegistration.js +++ /dev/null @@ -1,77 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import React from 'react'; -import PropTypes from 'prop-types'; -import * as sdk from '../../../index'; -import {MatrixClientPeg} from '../../../MatrixClientPeg'; -import { _t } from '../../../languageHandler'; -import AuthPage from "../../views/auth/AuthPage"; - -export default class PostRegistration extends React.Component { - static propTypes = { - onComplete: PropTypes.func.isRequired, - }; - - state = { - avatarUrl: null, - errorString: null, - busy: false, - }; - - componentDidMount() { - // There is some assymetry between ChangeDisplayName and ChangeAvatar, - // as ChangeDisplayName will auto-get the name but ChangeAvatar expects - // the URL to be passed to you (because it's also used for room avatars). - const cli = MatrixClientPeg.get(); - this.setState({busy: true}); - const self = this; - cli.getProfileInfo(cli.credentials.userId).then(function(result) { - self.setState({ - avatarUrl: MatrixClientPeg.get().mxcUrlToHttp(result.avatar_url), - busy: false, - }); - }, function(error) { - self.setState({ - errorString: _t("Failed to fetch avatar URL"), - busy: false, - }); - }); - } - - render() { - const ChangeDisplayName = sdk.getComponent('settings.ChangeDisplayName'); - const ChangeAvatar = sdk.getComponent('settings.ChangeAvatar'); - const AuthHeader = sdk.getComponent('auth.AuthHeader'); - const AuthBody = sdk.getComponent("auth.AuthBody"); - return ( - - - -
- { _t('Set a display name:') } - - { _t('Upload an avatar:') } - - - { this.state.errorString } -
-
-
- ); - } -} From 5b32287f3d8a3c22d3801138d608c7f7bdf15d67 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 16 Nov 2020 15:56:54 +0000 Subject: [PATCH 081/115] Redirect user home from auth screens if they are already logged in --- src/components/structures/MatrixChat.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index dd0b945d86..69066776a9 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -116,6 +116,8 @@ export enum Views { SOFT_LOGOUT, } +const AUTH_SCREENS = ["register", "login", "forgot_password", "start_sso", "start_cas"]; + // Actions that are redirected through the onboarding process prior to being // re-dispatched. NOTE: some actions are non-trivial and would require // re-factoring to be included in this list in future. @@ -1546,6 +1548,14 @@ export default class MatrixChat extends React.PureComponent { } showScreen(screen: string, params?: {[key: string]: any}) { + const cli = MatrixClientPeg.get(); + const isLoggedOutOrGuest = !cli || cli.isGuest(); + if (!isLoggedOutOrGuest && AUTH_SCREENS.includes(screen)) { + // user is logged in and landing on an auth page which will uproot their session, redirect them home instead + dis.dispatch({ action: "view_home_page" }); + return; + } + if (screen === 'register') { dis.dispatch({ action: 'start_registration', @@ -1562,7 +1572,7 @@ export default class MatrixChat extends React.PureComponent { params: params, }); } else if (screen === 'soft_logout') { - if (MatrixClientPeg.get() && MatrixClientPeg.get().getUserId() && !Lifecycle.isSoftLogout()) { + if (cli.getUserId() && !Lifecycle.isSoftLogout()) { // Logged in - visit a room this.viewLastRoom(); } else { From c6ecd591141892288fc2eb46562e996b1fad0281 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 16 Nov 2020 16:30:23 +0000 Subject: [PATCH 082/115] i18n --- src/i18n/strings/en_EN.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index e6ba79295e..d3292c3649 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2460,9 +2460,6 @@ "Signing In...": "Signing In...", "If you've joined lots of rooms, this might take a while": "If you've joined lots of rooms, this might take a while", "Create account": "Create account", - "Failed to fetch avatar URL": "Failed to fetch avatar URL", - "Set a display name:": "Set a display name:", - "Upload an avatar:": "Upload an avatar:", "Unable to query for supported registration methods.": "Unable to query for supported registration methods.", "Registration has been disabled on this homeserver.": "Registration has been disabled on this homeserver.", "This server does not support authentication with a phone number.": "This server does not support authentication with a phone number.", From 2543054413e6e6408b740405f6a478f75b76fef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?= Date: Fri, 13 Nov 2020 13:28:49 +0000 Subject: [PATCH 083/115] Translated using Weblate (Hungarian) Currently translated at 99.8% (2638 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 8dbac80bc3..9c00c8ff6e 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -1590,7 +1590,7 @@ "%(name)s accepted": "%(name)s elfogadta", "You cancelled": "Megszakítottad", "%(name)s cancelled": "%(name)s megszakította", - "%(name)s wants to verify": "%(name)s ellenőrizni szeretne", + "%(name)s wants to verify": "%(name)s ellenőrizni szeretné", "You sent a verification request": "Ellenőrzési kérést küldtél", "Try out new ways to ignore people (experimental)": "Emberek figyelmen kívül hagyásához próbálj ki új utakat (kísérleti)", "My Ban List": "Tiltólistám", From 47d522f0715475cc7b657fafaf6c660ba52f676f Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Fri, 13 Nov 2020 18:06:37 +0000 Subject: [PATCH 084/115] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (2641 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/pt_BR/ --- src/i18n/strings/pt_BR.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 11853e6ee4..aa4bfc41ca 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -2770,5 +2770,7 @@ "Vatican City": "Cidade do Vaticano", "Vanuatu": "Vanuatu", "Uzbekistan": "Uzbequistão", - "Role": "Função" + "Role": "Função", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|one": "Armazene localmente com segurança as mensagens criptografadas para que apareçam nos resultados da pesquisa, usando %(size)s para armazenar mensagens de %(count)s sala.", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Armazene localmente com segurança as mensagens criptografadas para que apareçam nos resultados da pesquisa, usando %(size)s para armazenar mensagens de %(count)s salas." } From 47510eac862f9092b9afa3484cb8fe43ce43a099 Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Sat, 14 Nov 2020 11:02:14 +0000 Subject: [PATCH 085/115] Translated using Weblate (Swedish) Currently translated at 100.0% (2641 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/sv/ --- src/i18n/strings/sv.json | 241 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 240 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index bf15596277..f1bf9f08cd 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -2535,5 +2535,244 @@ "Albania": "Albanien", "Åland Islands": "Åland", "Afghanistan": "Afghanistan", - "United States": "USA" + "United States": "USA", + "%(creator)s created this DM.": "%(creator)s skapade den här DM:en.", + "Now, let's help you get started": "Låt oss hjälpa dig komma igång", + "Welcome %(name)s": "Välkommen %(name)s", + "Add a photo so people know it's you.": "Lägg till en bild för att folk ska veta att det är du.", + "Great, that'll help people know it's you": "Fantastiskt, det kommer att hjälpa folk att veta att det är du", + "Invite someone using their name, email address, username (like ) or share this room.": "Bjud in någon med deras namn, e-postadress eller användarnamn (som ) eller dela det här rummet.", + "Start a conversation with someone using their name, email address or username (like ).": "Starta en konversation med någon med deras namn, e-postadress eller användarnamn (som ).", + "Invite by email": "Bjud in via e-post", + "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "Meddelanden i det här rummet är totalsträckskrypterade. När personer går med så kan du verifiera dem i deras profil, bara klicka på deras avatar.", + "Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "Meddelanden här är totalsträckskrypterade. Verifiera %(displayName)s i deras profil - klicka på deras avatar.", + "Role": "Roll", + "Use the + to make a new room or explore existing ones below": "Använd + för att skapa ett nytt rum eller utforska existerande nedan", + "This is the start of .": "Det här är början på .", + "Add a photo, so people can easily spot your room.": "Lägg till en bild, så att folk lätt kan se ditt rum.", + "%(displayName)s created this room.": "%(displayName)s skapade det här rummet.", + "You created this room.": "Du skapade det här rummet.", + "Add a topic to help people know what it is about.": "Lägg till ett ämne för att låta folk veta vad det handlar om.", + "Topic: %(topic)s ": "Ämne: %(topic)s ", + "Topic: %(topic)s (edit)": "Ämne: %(topic)s (redigera)", + "This is the beginning of your direct message history with .": "Det här är början på din direktmeddelandehistorik med .", + "Only the two of you are in this conversation, unless either of you invites anyone to join.": "Bara ni två är i den här konversationen, om inte någon av er bjuder in någon annan.", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|one": "Cacha säkert krypterade meddelande lokalt för att de ska visas i sökresultat, och använd %(size)s för att lagra meddelanden från %(count)s rum.", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Cacha säkert krypterade meddelande lokalt för att de ska visas i sökresultat, och använd %(size)s för att lagra meddelanden från %(count)s rum.", + "Call Paused": "Samtal pausat", + "%(senderName)s ended the call": "%(senderName)s avslutade samtalet", + "You ended the call": "Du avslutade samtalet", + "New version of %(brand)s is available": "Ny version av %(brand)s är tillgänglig", + "Update %(brand)s": "Uppdatera %(brand)s", + "Enable desktop notifications": "Aktivera skrivbordsaviseringar", + "Don't miss a reply": "Missa inte ett svar", + "Takes the call in the current room off hold": "Avslutar parkering av samtalet i det nuvarande samtalet", + "Places the call in the current room on hold": "Parkerar samtalet i det aktuella rummet", + "Zimbabwe": "Zimbabwe", + "Zambia": "Zambia", + "Yemen": "Jemen", + "Western Sahara": "Västsahara", + "Wallis & Futuna": "Wallis- och Futunaöarna", + "Vietnam": "Vietnam", + "Venezuela": "Venezuela", + "Vatican City": "Vatikanstaten", + "Vanuatu": "Vanuatu", + "Uzbekistan": "Uzbekistan", + "Uruguay": "Uruguay", + "United Arab Emirates": "Förenade Arabemiraten", + "Ukraine": "Ukraina", + "Uganda": "Uganda", + "U.S. Virgin Islands": "Amerikanska Jungfruöarna", + "Tuvalu": "Tuvalu", + "Turks & Caicos Islands": "Turks- och Caicosöarna", + "Turkmenistan": "Turkmenistan", + "Turkey": "Turkiet", + "Tunisia": "Tunisien", + "Trinidad & Tobago": "Trinidad och Tobago", + "Tonga": "Tonga", + "Tokelau": "Tokelau", + "Togo": "Togo", + "Timor-Leste": "Östtimor", + "Thailand": "Thailand", + "Tanzania": "Tanzania", + "Tajikistan": "Tadzjikistan", + "Taiwan": "Taiwan", + "São Tomé & Príncipe": "São Tomé och Príncipe", + "Syria": "Syrien", + "Switzerland": "Schweiz", + "Sweden": "Sverige", + "Swaziland": "Swaziland", + "Svalbard & Jan Mayen": "Svalbard och Jan Mayen", + "Suriname": "Surinam", + "Sudan": "Sudan", + "St. Vincent & Grenadines": "Saint Vincent och Grenadinerna", + "St. Pierre & Miquelon": "Saint-Pierre och Miquelon", + "St. Martin": "Saint Martin", + "St. Lucia": "Saint Lucia", + "St. Kitts & Nevis": "Saint Kitts och Nevis", + "St. Helena": "Sankta Helena", + "St. Barthélemy": "Saint-Barthélemy", + "Sri Lanka": "Sri Lanka", + "Spain": "Spanien", + "South Sudan": "Sydsudan", + "South Korea": "Sydkorea", + "South Georgia & South Sandwich Islands": "Sydgeorgien och Sydsandwichöarna", + "South Africa": "Sydafrika", + "Somalia": "Somalia", + "Solomon Islands": "Salomonöarna", + "Slovenia": "Slovenien", + "Slovakia": "Slovakien", + "Sint Maarten": "Sint Maarten", + "Singapore": "Singapore", + "Sierra Leone": "Sierra Leone", + "Seychelles": "Seychellerna", + "Serbia": "Serbien", + "Senegal": "Senegal", + "Saudi Arabia": "Saudiarabien", + "San Marino": "San Marino", + "Samoa": "Samoa", + "Réunion": "Réunion", + "Rwanda": "Rwanda", + "Russia": "Ryssland", + "Romania": "Rumänien", + "Qatar": "Qatar", + "Puerto Rico": "Puerto Rico", + "Portugal": "Portugal", + "Poland": "Polen", + "Pitcairn Islands": "Pitcairnöarna", + "Philippines": "Filippinerna", + "Peru": "Peru", + "Paraguay": "Paraguay", + "Papua New Guinea": "Papua Nya Guinea", + "Panama": "Panama", + "Palestine": "Palestina", + "Palau": "Palau", + "Pakistan": "Pakistan", + "Oman": "Oman", + "Norway": "Norge", + "Northern Mariana Islands": "Nordmarianerna", + "North Korea": "Nordkorea", + "Norfolk Island": "Norfolkön", + "Niue": "Niue", + "Nigeria": "Nigeria", + "Niger": "Niger", + "Nicaragua": "Nicaragua", + "New Zealand": "Nya Zeeland", + "New Caledonia": "Nya Kaledonien", + "Netherlands": "Nederländerna", + "Nepal": "Nepal", + "Nauru": "Nauru", + "Namibia": "Namibia", + "Myanmar": "Myanmar", + "Mozambique": "Moçambique", + "Morocco": "Marocko", + "Montserrat": "Montserrat", + "Montenegro": "Montenegro", + "Mongolia": "Mongoliet", + "Monaco": "Monaco", + "Moldova": "Moldavien", + "Micronesia": "Mikronesien", + "Mexico": "Mexiko", + "Mayotte": "Mayotte", + "Mauritius": "Mauritius", + "Mauritania": "Mauretanien", + "Martinique": "Martinique", + "Marshall Islands": "Marshallöarna", + "Malta": "Malta", + "Mali": "Mali", + "Maldives": "Maldivierna", + "Malaysia": "Malaysia", + "Malawi": "Malawi", + "Madagascar": "Madagaskar", + "Macedonia": "Nordmakedonien", + "Macau": "Macao", + "Luxembourg": "Luxemburg", + "Lithuania": "Litauen", + "Liechtenstein": "Liechtenstein", + "Libya": "Libyen", + "Liberia": "Liberia", + "Lesotho": "Lesotho", + "Lebanon": "Libanon", + "Latvia": "Lettland", + "Laos": "Laos", + "Kyrgyzstan": "Kirgizistan", + "Kuwait": "Kuwait", + "Kosovo": "Kosovo", + "Kiribati": "Kiribati", + "Kenya": "Kenya", + "Kazakhstan": "Kazakstan", + "Jordan": "Jordanien", + "Jersey": "Jersey", + "Japan": "Japan", + "Jamaica": "Jamaica", + "Italy": "Italien", + "Israel": "Israel", + "Isle of Man": "Isle of Man", + "Ireland": "Irland", + "Iraq": "Irak", + "Iran": "Iran", + "Indonesia": "Indonesien", + "India": "Indien", + "Iceland": "Island", + "Hungary": "Ungern", + "Hong Kong": "Hongkong", + "Honduras": "Honduras", + "Heard & McDonald Islands": "Heard- och McDonaldöarna", + "Haiti": "Haiti", + "Guyana": "Guyana", + "Guinea-Bissau": "Guinea-Bissau", + "Guinea": "Guinea", + "Guernsey": "Guernsey", + "Guatemala": "Guatemala", + "Guam": "Guam", + "Guadeloupe": "Guadeloupe", + "Grenada": "Grenada", + "Greenland": "Grönland", + "Greece": "Grekland", + "Gibraltar": "Gibraltar", + "Ghana": "Ghana", + "Germany": "Tyskland", + "Georgia": "Georgien", + "Gambia": "Gambia", + "Gabon": "Gabon", + "French Southern Territories": "Franska sydterritorierna", + "French Polynesia": "Franska Polynesien", + "French Guiana": "Franska Guinea", + "France": "Frankrike", + "Finland": "Finland", + "Fiji": "Fiji", + "Faroe Islands": "Färöarna", + "Falkland Islands": "Falklandsöarna", + "Ethiopia": "Etiopien", + "Estonia": "Estland", + "Eritrea": "Eritrea", + "Equatorial Guinea": "Ekvatorialguinea", + "El Salvador": "El Salvador", + "Egypt": "Egypten", + "Ecuador": "Ecuador", + "Dominican Republic": "Dominikanska republiken", + "Dominica": "Dominica", + "Djibouti": "Djibouti", + "Denmark": "Danmark", + "Côte d’Ivoire": "Elfenbenskusten", + "Czech Republic": "Tjeckien", + "Cyprus": "Cypern", + "Curaçao": "Curaçao", + "Cuba": "Kuba", + "Croatia": "Kroatien", + "Costa Rica": "Costa Rica", + "Cook Islands": "Cooköarna", + "Congo - Kinshasa": "Kongo-Kinshasa", + "Congo - Brazzaville": "Kongo-Brazzaville", + "Comoros": "Komorerna", + "Colombia": "Colombia", + "Cocos (Keeling) Islands": "Kokosöarna", + "Christmas Island": "Julön", + "China": "Kina", + "Chile": "Chile", + "Chad": "Tchad", + "Central African Republic": "Centralafrikanska republiken", + "Cayman Islands": "Caymanöarna", + "Caribbean Netherlands": "Karibiska Nederländerna", + "Cape Verde": "Kap Verde" } From 2efc49295cdd4e48a733deb7825818ed114853f4 Mon Sep 17 00:00:00 2001 From: sr093906 Date: Sat, 14 Nov 2020 11:16:31 +0000 Subject: [PATCH 086/115] Translated using Weblate (Chinese (Simplified)) Currently translated at 85.4% (2257 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/zh_Hans/ --- src/i18n/strings/zh_Hans.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 359dcfc4a0..809be89383 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -584,7 +584,7 @@ "Please enter the code it contains:": "请输入其包含的代码:", "Matrix ID": "Matrix ID", "Matrix Room ID": "Matrix 聊天室 ID", - "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "

社区页面的 HTML 代码

\n

\n 你可以给社区的新成员们写些长长的社区简介来引导他们,或者放置\n 一些重要的链接\n

\n

\n 你甚至可以使用 标签\n

\n", + "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "", "Add rooms to the community summary": "将聊天室添加到社区简介中", "Which rooms would you like to add to this summary?": "您想要将哪个聊天室添加到社区简介?", "Add to summary": "添加到简介", @@ -819,7 +819,7 @@ "Link to selected message": "选中消息的链接", "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "至多半个小时内,其他用户可能看不到您社区的 名称头像 的变化。", "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "这些聊天室对社区成员可见。社区成员可通过点击来加入它们。", - "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "您的社区还没有详细介绍,一个展示给社区成员的 HTML 页面。
点击这里即可打开设置添加详细介绍!", + "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "你的社区没有一个很长的描述,一个HTML页面可以展示给社区成员。
点击这里即可打开设置添加详细介绍!", "Failed to load %(groupId)s": "%(groupId)s 加载失败", "This room is not public. You will not be able to rejoin without an invite.": "此聊天室不是公开聊天室。如果没有成员邀请,您将无法重新加入。", "Can't leave Server Notices room": "无法退出服务器公告聊天室", @@ -1124,7 +1124,7 @@ "Go back": "返回", "Room Settings - %(roomName)s": "聊天室设置 - %(roomName)s", "A username can only contain lower case letters, numbers and '=_-./'": "用户名只能包含小写字母、数字和 '=_-./'", - "Failed to decrypt %(failedCount)s sessions!": "%(failedCount)s 会话解密失败", + "Failed to decrypt %(failedCount)s sessions!": "%(failedCount)s 个会话解密失败!", "Warning: you should only set up key backup from a trusted computer.": "警告:您应该只在受信任的电脑上设置密钥备份。", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "通过输入恢复密码来访问您的安全消息历史记录和设置安全通信。", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "如果忘记了恢复密码,您可以 使用恢复密钥 或者 设置新的恢复选项", @@ -1530,9 +1530,9 @@ "Backup has a valid signature from this session": "备份有来自此会话的有效签名", "Backup has an invalid signature from this session": "备份有来自此会话的无效签名", "Backup has a valid signature from verified session ": "备份有一个有效的签名,它来自已验证的会话", - "Backup has a valid signature from unverified session ": "备份有一个有效的签名,它来自未验证的会话\n", - "Backup has an invalid signature from verified session ": "备份有一个无效的签名,它来自已验证的会话\n", - "Backup has an invalid signature from unverified session ": "备份有一个无效的签名,它来自未验证的会话\n", + "Backup has a valid signature from unverified session ": "备份有一个有效的签名,它来自未验证的会话", + "Backup has an invalid signature from verified session ": "备份有一个无效的签名,它来自已验证的会话", + "Backup has an invalid signature from unverified session ": "备份有一个无效的签名,它来自未验证的会话", "Backup is not signed by any of your sessions": "备份没有被您的任何一个会话签名", "This backup is trusted because it has been restored on this session": "此备份是受信任的因为它被恢复到了此会话上", "Backup key stored: ": "存储的备份密钥: ", @@ -1553,7 +1553,7 @@ "Disconnect identity server": "断开身份服务器连接", "Disconnect from the identity server ?": "从身份服务器 断开连接吗?", "Disconnect": "断开连接", - "You should remove your personal data from identity server before disconnecting. Unfortunately, identity server is currently offline or cannot be reached.": "断开连接前,你应当删除你的个人信息从身份服务器。\n不幸的是,身份服务器当前处于离线状态或无法访问。", + "You should remove your personal data from identity server before disconnecting. Unfortunately, identity server is currently offline or cannot be reached.": "断开连接前,你应当删除你的个人信息从身份服务器。不幸的是,身份服务器当前处于离线状态或无法访问。", "You should:": "您应该:", "contact the administrators of identity server ": "联系身份服务器 的管理员", "wait and try again later": "等待并稍后重试", @@ -2287,7 +2287,7 @@ "Alt": "Alt", "Alt Gr": "Alt Gr", "Shift": "Shift", - "Super": "", + "Super": "超级", "Ctrl": "Ctrl", "New line": "换行", "Jump to start/end of the composer": "跳转到编辑器的开始/结束", From 1b1520e896091e3500951fdb1977fcec7555d5f9 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Fri, 13 Nov 2020 02:27:18 +0000 Subject: [PATCH 087/115] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2641 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 6929c5e95e..d02ac268bd 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2842,5 +2842,7 @@ "Call Paused": "通話已暫停", "Takes the call in the current room off hold": "讓目前聊天室中的通話保持等候接聽的狀態", "Places the call in the current room on hold": "在目前的聊天室撥打通話並等候接聽", - "Role": "角色" + "Role": "角色", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|one": "使用 %(size)s 儲存來自 %(count)s 個聊天室的訊息,在本機安全地快取已加密的訊息以讓它們可以在搜尋結果中出現。", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "使用 %(size)s 儲存來自 %(count)s 個聊天室的訊息,在本機安全地快取已加密的訊息以讓它們可以在搜尋結果中出現。" } From 0394a269a5c628d0bf9ee6c23dfd62d65c2b941b Mon Sep 17 00:00:00 2001 From: Hassan Algoz Date: Mon, 16 Nov 2020 12:18:50 +0000 Subject: [PATCH 088/115] Translated using Weblate (Arabic) Currently translated at 52.8% (1397 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/ar/ --- src/i18n/strings/ar.json | 1067 +++++++++++++++++++++++++++++++++++++- 1 file changed, 1062 insertions(+), 5 deletions(-) diff --git a/src/i18n/strings/ar.json b/src/i18n/strings/ar.json index 718edd4c26..fec025da8d 100644 --- a/src/i18n/strings/ar.json +++ b/src/i18n/strings/ar.json @@ -58,7 +58,7 @@ "Set Password": "تعيين كلمة سرية", "Checking for an update...": "البحث عن تحديث …", "powered by Matrix": "مشغل بواسطة Matrix", - "The platform you're on": "المنصة الحالية", + "The platform you're on": "المنصة التي أنت عليها", "Your language of choice": "اللغة التي تريد", "e.g. %(exampleValue)s": "مثال: %(exampleValue)s", "Use Single Sign On to continue": "استعمل الولوج الموحّد للمواصلة", @@ -70,12 +70,12 @@ "Add Email Address": "أضِف بريدًا إلكترونيًا", "Confirm adding this phone number by using Single Sign On to prove your identity.": "أكّد إضافتك لرقم الهاتف هذا باستعمال الولوج الموحّد لإثبات هويّتك.", "Confirm adding phone number": "أكّد إضافة رقم الهاتف", - "Click the button below to confirm adding this phone number.": "انقر الزر أسفله لتأكيد إضافة رقم الهاتف هذا", + "Click the button below to confirm adding this phone number.": "انقر الزر أسفله لتأكيد إضافة رقم الهاتف هذا.", "Add Phone Number": "أضِف رقم الهاتف", "Which officially provided instance you are using, if any": "السيرورة المقدّمة رسميًا التي تستعملها، لو وُجدت", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "فيما إذا كنت تستعمل %(brand)s على جهاز اللمس فيه هو طريقة الإدخال الرئيسة", - "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "", - "Whether you're using %(brand)s as an installed Progressive Web App": "فيما إذا كنت تستعمل %(brand)s كتطبيق وِب تدرّجي", + "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "ما إذا كنت تستعمل ميزة \"breadcrumbs\" (الصور الرمزية أعلى قائمة الغرف)", + "Whether you're using %(brand)s as an installed Progressive Web App": "ما إذا كنت تستعمل %(brand)s كتطبيق وِب تدرّجي", "Your user agent": "وكيل المستخدم الذي تستعمله", "Unable to load! Check your network connectivity and try again.": "تعذر التحميل! افحص اتصالك بالشبكة وأعِد المحاولة.", "Call Timeout": "انتهت مهلة الاتصال", @@ -365,5 +365,1062 @@ "Cannot reach identity server": "لا يمكن الوصول لهوية السيرفر", "You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "يمكنك التسجيل , لكن بعض الميزات ستكون غير متوفرة حتى يتم التعرف على هوية السيرفر بشكل متصل . إن كنت ما تزال ترى هذا التحذير , تأكد من إعداداتك أو تواصل مع مدير السيرفر", "You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "يمكنك إعادة ضبط كلمة السر لكن بعض الميزات ستكون غير متوفرة حتى عودة السيرفر للإنترنت . إذا كنت لا تزال ترى هذا التحذير تأكد من إعداداتك أو تواصل مع مدير السيرفر", - "I understand the risks and wish to continue": "ادرك المخاطر وارغب في الاستمرار" + "I understand the risks and wish to continue": "ادرك المخاطر وارغب في الاستمرار", + "Language Dropdown": "قائمة اللغة المنسدلة", + "Information": "المعلومات", + "Rotate clockwise": "أدر باتجاه عقارب الساعة", + "Rotate Right": "أدر لليمين", + "Rotate counter-clockwise": "أدر عكس اتجاه عقارب الساعة", + "Rotate Left": "أدر لليسار", + "Uploaded on %(date)s by %(user)s": "رفعه %(user)s في %(date)s", + "You cannot delete this image. (%(code)s)": "لا يمكنك حذف هذه الصورة. (%(code)s)", + "expand": "توسيع", + "collapse": "تضييق", + "Please create a new issue on GitHub so that we can investigate this bug.": "الرجاء إنشاء إشكال جديد على GitHub حتى نتمكن من التحقيق في هذا الخطأ.", + "No results": "لا نتائج", + "Join": "انضم", + "This version of %(brand)s does not support searching encrypted messages": "لا يدعم هذا الإصدار من %(brand)s البحث في الرسائل المشفرة", + "This version of %(brand)s does not support viewing some encrypted files": "لا يدعم هذا الإصدار من %(brand)s s عرض بعض الملفات المشفرة", + "Use the Desktop app to search encrypted messages": "استخدم تطبيق سطح المكتب للبحث في الرسائل المشفرة", + "Use the Desktop app to see all encrypted files": "استخدم تطبيق سطح المكتب لمشاهدة جميع الملفات المشفرة", + "Popout widget": "عنصر الواجهة المنبثق", + "This widget may use cookies.": "قد يستخدم عنصر الواجهة هذا ملفات تعريف الارتباط.", + "Widget added by": "عنصر واجهة أضافه", + "Widgets do not use message encryption.": "عناصر الواجهة لا تستخدم تشفير الرسائل.", + "Using this widget may share data with %(widgetDomain)s.": "قد يؤدي استخدام هذه الأداة إلى مشاركة البيانات مع%(widgetDomain)s.", + "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "قد يؤدي استخدام عنصر واجهة المستخدم هذا إلى مشاركة البيانات مع %(widgetDomain)s ومدير التكامل الخاص بك.", + "Widget ID": "معرّف عنصر واجهة", + "Room ID": "معرّف الغرفة", + "%(brand)s URL": "رابط %(brand)s", + "Your theme": "مظهر واجهتك", + "Your user ID": "معرّف مستخدمك", + "Your avatar URL": "رابط صورتك الشخصية", + "Your display name": "اسمك الظاهر", + "Any of the following data may be shared:": "يمكن أن تُشارَك أي من البيانات التالية:", + "Unknown Address": "عنوان غير معروف", + "Cancel search": "إلغاء البحث", + "Quick Reactions": "ردود الفعل السريعة", + "Categories": "التصنيفات", + "Flags": "الأعلام", + "Symbols": "الرموز", + "Objects": "الأشياء", + "Travel & Places": "السفر والأماكن", + "Activities": "الأنشطة", + "Food & Drink": "الطعام والشراب", + "Animals & Nature": "الحيوانات والطبيعة", + "Smileys & People": "الوجوه الضاحكة والأشخاص", + "Frequently Used": "كثيرة الاستعمال", + "You're not currently a member of any communities.": "أنت حاليًا لست عضوًا في أي مجتمعات.", + "Display your community flair in rooms configured to show it.": "اعرض flair المجتمع الخاص بك في الغرف المهيأة لإظهار ذلك.", + "Something went wrong when trying to get your communities.": "تعذر الحصول على مجتمعاتك.", + "Filter community rooms": "تصفية غرف المجتمع", + "Add rooms to this community": "أضف غرفاً لهذا المجتمع", + "Only visible to community members": "ظاهرة فقط لأعضاء المجتمع", + "Visible to everyone": "ظاهرة للجميع", + "Visibility in Room List": "الظهور في قائمة الغرف", + "The visibility of '%(roomName)s' in %(groupId)s could not be updated.": "تعذر تحديث رؤية '%(roomName)s' في %(groupId)s.", + "Failed to remove '%(roomName)s' from %(groupId)s": "تعذرت إزالة '%(roomName)s' من %(groupId)s", + "Failed to remove room from community": "تعذر إزالة الغرفة من المجتمع", + "Removing a room from the community will also remove it from the community page.": "ستؤدي إزالة غرفة من المجتمع إلى إزالتها أيضًا من صفحة المجتمع.", + "Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "هل أنت متأكد من أنك تريد إزالة '%(roomName)s' من %(groupId)s؟", + "Filter community members": "تصفية أعضاء المجتمع", + "Failed to load group members": "تعذر تحميل أعضاء المجموعة", + "Can't load this message": "تعذر تحميل هذه الرسالة", + "Submit logs": "إرسال السجلات", + "edited": "عُدل", + "Edited at %(date)s. Click to view edits.": "عُدل في %(date)s. انقر لترى التعديلات.", + "Click to view edits": "انقر لترى التعديلات", + "Edited at %(date)s": "عدل في %(date)s", + "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "أنت على وشك الانتقال إلى موقع تابع لجهة خارجية حتى تتمكن من مصادقة حسابك لاستخدامه مع %(integrationsUrl)s. هل ترغب في الاستمرار؟", + "Add an Integration": "أضف تكاملاً", + "Failed to copy": "تعذر النسخ", + "Copied!": "نُسخ!", + "This room is a continuation of another conversation.": "هذه الغرفة هي استمرار لمحادثة أخرى.", + "Click here to see older messages.": "انقر هنا لترى رسائل أقدم.", + "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s غير صورة الغرفة إلى ", + "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s حذف صورة الغرفة.", + "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s غير صورة الغرفة %(roomName)s", + "Message deleted on %(date)s": "حذفت الرسالة في %(date)s", + "Message deleted by %(name)s": "حذف الرسالة %(name)s", + "Message deleted": "حُذفت الرسالة", + "reacted with %(shortName)s": "تفاعلو ب%(shortName)s", + " reacted with %(content)s": " تفاعلوا ب%(content)s", + "Reactions": "التفاعلات", + "Show all": "أظهر الكل", + "Error decrypting video": "تعذر فك تشفير الفيديو", + "You sent a verification request": "أنت أرسلت طلب تحقق", + "%(name)s wants to verify": "%(name)s يريد التحقق", + "Declining …": "جارٍ الرفض …", + "Accepting …": "جارٍ القبول …", + "%(name)s cancelled": "%(name)s رفض", + "%(name)s declined": "%(name)s رفض", + "You cancelled": "أنت رفضت", + "You declined": "أنت رفضت", + "%(name)s accepted": "%(name)s قبل", + "You accepted": "أنت قبلت", + "%(name)s cancelled verifying": "تم إلغاء التحقق من %(name)s", + "You cancelled verifying %(name)s": "لقد ألغيت التحقق من %(name)s", + "You verified %(name)s": "لقد تحققت من %(name)s", + "You have ignored this user, so their message is hidden. Show anyways.": "لقد تجاهلت هذا المستخدم ، لذلك تم إخفاء رسالته. العرض على أي حال. ", + "Video conference started by %(senderName)s": "بدأ مؤتمر الفيديو %(senderName)s", + "Video conference updated by %(senderName)s": "حدث مؤتمر الفيديو %(senderName)s", + "Video conference ended by %(senderName)s": "أنهى مؤتمر الفيديو %(senderName)s", + "Join the conference from the room information card on the right": "انضم إلى المؤتمر من بطاقة معلومات الغرفة على اليمين", + "Join the conference at the top of this room": "انضم إلى المؤتمر في الجزء العلوي من هذه الغرفة", + "Show image": "إظهار الصورة", + "Error decrypting image": "تعذر فك تشفير صورة", + "Invalid file%(extra)s": "ملف غير صحيح %(extra)s", + "Download %(text)s": "تحميل %(text)s", + "Decrypt %(text)s": "فك تشفير %(text)s", + "Error decrypting attachment": "تعذر فك تشفير المرفق", + "Attachment": "المرفق", + "Message Actions": "إجراءات الرسائل", + "Reply": "رد", + "React": "تفاعل", + "Error decrypting audio": "تعذر فك تشفير الصوت", + "The encryption used by this room isn't supported.": "التشفير الذي تستخدمه هذه الغرفة غير مدعوم.", + "Encryption not enabled": "التشفير غير مفعل", + "Ignored attempt to disable encryption": "تم تجاهل محاولة تعطيل التشفير", + "Encryption enabled": "التشفير مفعل", + "Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "يتم تشفير الرسائل الموجودة في هذه الغرفة بين الطرفين. عندما ينضم الأشخاص ، يمكنك التحقق منهم في ملفهم الشخصي ، ما عليك إلا أن تضغط على صورتهم الشخصية.", + "Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "الرسائل هنا مشفرة من طرف إلى طرف. تحقق من %(displayName)s في ملفهم الشخصي - اضغط على صورتهم الشخصية.", + "View Source": "انظر المصدر", + "Yesterday": "أمس", + "Today": "اليوم", + "Saturday": "السبت", + "Friday": "الجمعة", + "Thursday": "الخميس", + "Wednesday": "الأربعاء", + "Tuesday": "الثلاثاء", + "Monday": "الاثنين", + "Sunday": "الأحد", + "Compare emoji": "قارن الرمز التعبيري", + "Verification cancelled": "أُلغي التحقق", + "You cancelled verification.": "لقد ألغيتَ التحقق.", + "%(displayName)s cancelled verification.": "%(displayName)s ألغى التحقق.", + "You cancelled verification on your other session.": "لقد ألغيت التحقق في اتصالك الآخر.", + "Verification timed out.": "انتهت مهلة التحقق.", + "Start verification again from their profile.": "ابدأ التحقق مرة أخرى من ملف التعريف الخاص بهم.", + "Start verification again from the notification.": "ابدأ التحقق مرة أخرى من الإشعار.", + "Got it": "فهمت", + "Verified": "تم التحقق", + "You've successfully verified %(displayName)s!": "لقد تحققت بنجاح من %(displayName)s!", + "You've successfully verified %(deviceName)s (%(deviceId)s)!": "لقد تحققت بنجاح من %(deviceName)s (%(deviceId)s)!", + "Error updating flair": "خطأ في تحديث flair", + "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "قم بتعيين العناوين لهذه الغرفة حتى يتمكن المستخدمون من العثور على هذه الغرفة من خلال خادمك الوسيط (%(localDomain)s)", + "Local Addresses": "عناوين محلية", + "New published address (e.g. #alias:server)": "عنوان منشور جديد (على سبيل المثال #alias:server)", + "No other published addresses yet, add one below": "لا توجد عناوين أخرى منشورة بعد ، أضف واحدًا أدناه", + "Other published addresses:": "عناوين منشورة أخرى:", + "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "يمكن لأي شخص استخدام العناوين المنشورة على أي خادم للانضمام إلى غرفتك. لنشر عنوان ، يجب تعيينه كعنوان محلي أولاً.", + "Published Addresses": "العناوين المنشورة", + "Local address": "العنوان المحلي", + "This room has no local addresses": "هذه الغرفة ليس لها عناوين محلية", + "not specified": "غير محدد", + "Main address": "العنوان الرئيسي", + "Error removing address": "تعذرت إزالة العنوان", + "There was an error removing that address. It may no longer exist or a temporary error occurred.": "تعذرت إزالة ذاك العنوان. ربما لم يعد موجودًا أو حدث خطأ مؤقت.", + "You don't have permission to delete the address.": "ليس لديك الصلاحية لحذف العنوان.", + "There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "تعذر إنشاء ذاك العنوان. قد لا يسمح به الخادم أو حدث فشل مؤقت.", + "Error creating address": "تعذر إنشاء العنوان", + "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "حدث خطأ أثناء تحديث العناوين البديلة للغرفة. قد لا يسمح به الخادم أو حدث فشل مؤقت.", + "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "حدث خطأ أثناء تحديث العنوان الرئيسي للغرفة. قد لا يسمح به الخادم أو حدث فشل مؤقت.", + "Error updating main address": "تعذر تحديث العنوان الرئيسي", + "Mark all as read": "أشر عليها بأنها قرأت", + "Jump to first unread message.": "الانتقال إلى أول رسالة غير مقروءة.", + "Invited by %(sender)s": "دُعيت من %(sender)s", + "Revoke invite": "إبطال الدعوة", + "Admin Tools": "أدوات المدير", + "Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "تعذر إبطال الدعوة. قد يواجه الخادم مشكلة مؤقتة أو ليس لديك صلاحيات كافية لإلغاء الدعوة.", + "Failed to revoke invite": "تعذر إبطال الدعوة", + "Show Stickers": "إظهار الملصقات", + "Hide Stickers": "إخفاء الملصقات", + "Stickerpack": "حزمة الملصقات", + "Add some now": "أضف البعض الآن", + "You don't currently have any stickerpacks enabled": "ليس لديك حاليًا أي حزم ملصقات ممكّنة", + "Failed to connect to integration manager": "تعذر الاتصال بمدير التكامل", + "Send as message": "أرسل كرسالة", + "Hint: Begin your message with // to start it with a slash.": "تلميح: ابدأ رسالتك ب// لتبدأها بشرطة مائلة.", + "You can use /help to list available commands. Did you mean to send this as a message?": "يمكنك استخدام المساعدة لسرد الأوامر المتاحة. هل قصدت إرسال هذا كرسالة؟", + "Unrecognised command: %(commandText)s": "أمر غير معروف: %(commandText)s", + "Unknown Command": "أمر غير معروف", + "Server unavailable, overloaded, or something else went wrong.": "الخادم غير متوفر أو محمّل فوق طاقته أو وقع خطأ غير ذلك.", + "Server error": "خطأ في الخادم", + "Search…": "بحث …", + "This Room": "هذه الغرفة", + "Only room administrators will see this warning": "لن يرى هذا التحذير سوى مديرو الغرفة", + "This room is running room version , which this homeserver has marked as unstable.": "هذه الغرفة تشغل إصدار الغرفة ، والذي عده الخادم الوسيط هذا بأنه غير مستقر .", + "This room has already been upgraded.": "سبق وأن تمت ترقية هذه الغرفة.", + "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "ستؤدي ترقية هذه الغرفة إلى إغلاق النسخة الحالية للغرفة وإنشاء غرفة تمت ترقيتها بنفس الاسم.", + "Unread messages.": "رسائل غير المقروءة.", + "%(count)s unread messages.|one": "رسالة واحدة غير مقروءة.", + "%(count)s unread messages.|other": "%(count)s من الرسائل غير مقروءة.", + "%(count)s unread messages including mentions.|one": "إشارة واحدة غير مقروءة.", + "%(count)s unread messages including mentions.|other": "%(count)s من الرسائل والإشارات غير المقروءة.", + "Room options": "خيارات الغرفة", + "Leave Room": "غادر الغرفة", + "Settings": "الإعدادات", + "Low Priority": "أولوية منخفضة", + "Favourite": "تفضيل", + "Favourited": "فُضلت", + "Forget Room": "انسَ الغرفة", + "Notification options": "خيارات الإشعارات", + "Mentions & Keywords": "الإشارات والكلمات المفتاحية", + "Use default": "استعمل الاعتيادي", + "Show %(count)s more|one": "أظهر %(count)s زيادة", + "Show %(count)s more|other": "أظهر %(count)s زيادة", + "Jump to first invite.": "الانتقال لأول دعوة.", + "Jump to first unread room.": "الانتقال لأول غرفة لم تقرأ.", + "List options": "خيارات القائمة", + "A-Z": "ألفبائي", + "Activity": "النشاط", + "Sort by": "ترتيب حسب", + "Show previews of messages": "إظهار معاينات للرسائل", + "Show rooms with unread messages first": "اعرض الغرف ذات الرسائل غير المقروءة أولاً", + "Appearance": "المظهر", + "%(errcode)s was returned while trying to access the room. If you think you're seeing this message in error, please submit a bug report.": "رجع %(errcode)s أثناء محاولة الوصول إلى الغرفة. إذا كنت تعتقد أنك ترى هذه الرسالة عن طريق الخطأ ، فيرجى إرسال تقرير خطأ .", + "Try again later, or ask a room admin to check if you have access.": "حاول مرة أخرى لاحقًا ، أو اطلب من مدير الغرفة التحقق مما إذا كان لك الوصول.", + "%(roomName)s is not accessible at this time.": "لا يمكن الوصول إلى %(roomName)s في الوقت الحالي.", + "This room doesn't exist. Are you sure you're at the right place?": "هذه الغرفة غير موجودة. هل أنت متأكد أنك في المكان الصحيح؟", + "%(roomName)s does not exist.": "الغرفة %(roomName)s ليست موجودة.", + "%(roomName)s can't be previewed. Do you want to join it?": "لا يمكن معاينة %(roomName)s. هل تريد الانضمام إليها؟", + "You're previewing %(roomName)s. Want to join it?": "أنت تعاين %(roomName)s. تريد الانضمام إليها؟", + "Reject & Ignore user": "رفض الدعوة وتجاهل الداعي", + "Reject": "رفض", + " invited you": " دعاك", + "Do you want to join %(roomName)s?": "هل تريد أن تنضم إلى %(roomName)s؟", + "Start chatting": "ابدأ المحادثة", + " wants to chat": " يريد محادثتك", + "Do you want to chat with %(user)s?": "هل تريد محادثة %(user)s؟", + "Share this email in Settings to receive invites directly in %(brand)s.": "شارك هذا البريد الإلكتروني في الإعدادات لتلقي الدعوات مباشرةً في %(brand)s.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "استخدم خادم هوية في الإعدادات لتلقي الدعوات مباشرة في %(brand)s.", + "This invite to %(roomName)s was sent to %(email)s": "الدعوة إلى %(roomName)s أرسلت إلى %(email)s", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "اربط هذا البريد الإلكتروني بحسابك في الإعدادات لتلقي الدعوات مباشرةً في%(brand)s.", + "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "تم إرسال الدعوة إلى %(roomName)s إلى %(email)s الذي لا يرتبط بحسابك", + "Join the discussion": "انضم للنقاش", + "You can still join it because this is a public room.": "لا يزال بإمكانك الانضمام إليها لأن هذه غرفة عامة.", + "Try to join anyway": "حاول الانضمام على أي حال", + "You can only join it with a working invite.": "لا يمكن الإنضمام إليها إلا بدعوة صالحة.", + "unknown error code": "رمز خطأٍ غير معروف", + "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "رجع خطأ (%(errcode)s) أثناء محاولة التحقق من صحة دعوتك. يمكنك محاولة تمرير هذه المعلومات إلى مدير الغرفة.", + "Something went wrong with your invite to %(roomName)s": "حدث خطأ في دعوتك إلى %(roomName)s", + "You were banned from %(roomName)s by %(memberName)s": "لقد حُظِرت من غرفة %(roomName)s من قِبَل %(memberName)s", + "Re-join": "أعِد الانضمام", + "Forget this room": "انسَ هذه الغرفة", + "Reason: %(reason)s": "السبب: %(reason)s", + "You were kicked from %(roomName)s by %(memberName)s": "لقد طُرِدت من غرفة %(roomName)s من قِبَل %(memberName)s", + "Loading room preview": "جارٍ تحميل معاينة الغرفة", + "Sign Up": "سجل", + "Join the conversation with an account": "انضم للمحادثة بحساب", + "Rejecting invite …": "جارٍ رفض الدعوة …", + "Loading …": "جارٍ الحمل …", + "Joining room …": "جارٍ الانضمام للغرفة …", + "This room": "هذه الغرفة", + "%(count)s results|one": "%(count)s نتيجة", + "%(count)s results|other": "%(count)s نتائج", + "Use the + to make a new room or explore existing ones below": "استخدم + لإنشاء غرفة جديدة أو استكشف الغرف الموجودة أدناه", + "Explore all public rooms": "استكشف جميع الغرف العامة", + "Can't see what you’re looking for?": "لا ترى ما تبحث عنه؟", + "Custom Tag": "وسم مخصص", + "Historical": "تاريخي", + "System Alerts": "تنبيهات النظام", + "Low priority": "أولوية منخفضة", + "Explore public rooms": "استكشف الغرف العامة", + "Explore community rooms": "استكشف غرف المجتمع", + "Add room": "أضف غرفة", + "Rooms": "الغرف", + "Start chat": "ابدأ محادثة", + "People": "الأشخاص", + "Favourites": "مفضلات", + "Invites": "دعوات", + "Search": "بحث", + "Show Widgets": "إظهار عناصر الواجهة", + "Hide Widgets": "إخفاء عناصر الواجهة", + "Forget room": "انسَ الغرفة", + "Join Room": "انضم للغرفة", + "(~%(count)s results)|one": "(~%(count)s نتيجة)", + "(~%(count)s results)|other": "(~%(count)s نتائج)", + "Guests can join": "يمكن للضيوف الانضمام", + "World readable": "مقروء للعالم", + "Unnamed room": "غرفة بلا اسم", + "No rooms to show": "لا غرف للعرض", + "No recently visited rooms": "لا توجد غرف تمت زيارتها مؤخرًا", + "Room %(name)s": "الغرفة %(name)s", + "Replying": "الرد", + "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "شاهده %(displayName)s (%(userName)s) في %(dateTime)s", + "Seen by %(userName)s at %(dateTime)s": "شاهده %(userName)s في %(dateTime)s", + "Unknown": "غير معروف", + "Offline": "منفصل", + "Idle": "جامد", + "Online": "متصل", + "Unknown for %(duration)s": "غير معروف منذ %(duration)s", + "Offline for %(duration)s": "منفصل منذ %(duration)s", + "Idle for %(duration)s": "جامد منذ %(duration)s", + "Online for %(duration)s": "متصل منذ %(duration)s", + "%(duration)sd": "%(duration)sي", + "%(duration)sh": "%(duration)sس", + "%(duration)sm": "%(duration)sد", + "%(duration)ss": "%(duration)sث", + "Jump to message": "انتقل إلى الرسالة", + "Unpin Message": "إلغاء تثبيت الرسالة", + "Pinned Messages": "الرسائل المثبتة", + "Loading...": "جارٍ الحمل...", + "No pinned messages.": "لا رسائل مثبَّتة.", + "This is the start of .": "هذه بداية .", + "Add a photo, so people can easily spot your room.": "أضف صورة ، حتى يسهل على الناس تمييز غرفتك.", + "You created this room.": "أنت أنشأت هذه الغرفة.", + "%(displayName)s created this room.": "%(displayName)s أنشأ هذه الغرفة.", + "Add a topic to help people know what it is about.": "أضف موضوعاً ليُعرف ما يدور حوله الحديث.", + "Topic: %(topic)s ": "الموضوع: %(topic)s ", + "Topic: %(topic)s (edit)": "الموضوع: %(topic)s (عدل)", + "This is the beginning of your direct message history with .": "هذه هي بداية محفوظات رسائلك المباشرة باسم .", + "Only the two of you are in this conversation, unless either of you invites anyone to join.": "أنتما فقط في هذه المحادثة ، إلا إذا دعا أي منكما أي شخص للانضمام.", + "Quote": "اقتباس", + "Code block": "كتلة برمجية", + "Strikethrough": "مشطوب", + "Italics": "مائل", + "Bold": "ثخين", + "You do not have permission to post to this room": "ليس لديك إذن للنشر في هذه الغرفة", + "This room has been replaced and is no longer active.": "تم استبدال هذه الغرفة ولم تعد نشطة.", + "The conversation continues here.": "تستمر المحادثة هنا.", + "Send a message…": "أرسل رسالة …", + "Send an encrypted message…": "أرسل رسالة مشفرة …", + "Send a reply…": "أرسل جواباً …", + "Send an encrypted reply…": "أرسل جواباً مشفراً …", + "Upload file": "ارفع ملف", + "Emoji picker": "منتقي الرموز التعبيرية", + "Hangup": "إنهاء المكالمة", + "Video call": "مكالمة مرئية", + "Voice call": "مكالمة صوتية", + "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (قوة %(powerLevelNumber)s)", + "Filter room members": "تصفية أعضاء الغرفة", + "Invited": "مدعو", + "Invite to this community": "ادع لهذا المجتمع", + "Invite to this room": "ادع لهذه الغرفة", + "and %(count)s others...|one": "وواحدة أخرى...", + "and %(count)s others...|other": "و %(count)s أخر...", + "Close preview": "إغلاق المعاينة", + "Scroll to most recent messages": "انتقل إلى أحدث الرسائل", + "Please select the destination room for this message": "الرجاء تحديد الغرفة التي توجه لها هذه الرسالة", + "The authenticity of this encrypted message can't be guaranteed on this device.": "لا يمكن ضمان موثوقية هذه الرسالة المشفرة على هذا الجهاز.", + "Encrypted by a deleted session": "مشفرة باتصال محذوف", + "Unencrypted": "غير مشفر", + "Encrypted by an unverified session": "مشفرة باتصال لم يتم التحقق منه", + "Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "يتم تجاهل الأشخاص من خلال قوائم الحظر التي تحتوي على قواعد لمن يتم حظره. الاشتراك في قائمة حظر يعني أن المستخدمين / الخوادم المحظورة بواسطة تلك القائمة سيتم إخفاؤهم عنك.", + "Add users and servers you want to ignore here. Use asterisks to have %(brand)s match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "أضف المستخدمين والخوادم التي تريد تجاهلها هنا. استخدم علامة النجمة لجعل %(brand)s s تطابق أي أحرف. على سبيل المثال ، قد يتجاهل bot: * جميع المستخدمين الذين اسمهم \"bot\" على أي خادم.", + "⚠ These settings are meant for advanced users.": "⚠ هذه الإعدادات مخصصة للمستخدمين المتقدمين.", + "Ignored users": "المستخدمون المتجاهَلون", + "You are currently subscribed to:": "أنت مشترك حاليا ب:", + "View rules": "عرض القواعد", + "Unsubscribe": "إلغاء الاشتراك", + "You are not subscribed to any lists": "أنت غير مشترك في أي قوائم", + "You are currently ignoring:": "حاليًّا أنت متجاهل:", + "You have not ignored anyone.": "أنت لم تتجاهل أحداً.", + "User rules": "قواعد المستخدم", + "Server rules": "قواعد الخادم", + "Ban list rules - %(roomName)s": "قواعد قائمة الحظر - %(roomName)s", + "None": "لا شيء", + "Please try again or view your console for hints.": "يرجى المحاولة مرة أخرى أو عرض وحدة التحكم (console) للتلميحات.", + "Error unsubscribing from list": "تعذر إلغاء الاشتراك من القائمة", + "Error removing ignored user/server": "تعذر حذف مستخدم/خادم مُتجاهَل", + "Please verify the room ID or address and try again.": "يرجى التحقق من معرف الغرفة أو العنوان والمحاولة مرة أخرى.", + "Error subscribing to list": "تعذر الاشتراك في القائمة", + "Something went wrong. Please try again or view your console for hints.": "هناك خطأ ما. يرجى المحاولة مرة أخرى أو عرض وحدة التحكم (console) للتلميحات.", + "Error adding ignored user/server": "تعذر إضافة مستخدم/خادم مُتجاهَل", + "Ignored/Blocked": "المُتجاهل/المحظور", + "Labs": "معامل", + "Customise your experience with experimental labs features. Learn more.": "خصص تجربتك مع ميزات المعامل التجريبية. اعرف المزيد .", + "Clear cache and reload": "محو مخزن الجيب وإعادة التحميل", + "click to reveal": "انقر للكشف", + "Access Token:": "رمز الوصول:", + "Identity Server is": "خادم الهوية هو", + "Homeserver is": "الخادم الوسيط هو", + "olm version:": "إصدار olm:", + "%(brand)s version:": "إصدار %(brand)s:", + "Versions": "الإصدارات", + "Keyboard Shortcuts": "اختصارات لوحة المفاتيح", + "FAQ": "اسئلة شائعة", + "Help & About": "المساعدة وعن البرنامج", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "للإبلاغ عن مشكلة أمنية متعلقة بMatrix ، يرجى قراءة سياسة الإفصاح الأمني في Matrix.org.", + "Submit debug logs": "إرسال سجلات تصحيح الأخطاء", + "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "إذا قمت بإرسال خطأ عبر GitHub ، فيمكن أن تساعدنا سجلات تصحيح الأخطاء في تعقب المشكلة. تحتوي سجلات تصحيح الأخطاء على بيانات استخدام التطبيق بما في ذلك اسم المستخدم والمعرفات أو الأسماء المستعارة للغرف أو المجموعات التي زرتها وأسماء المستخدمين للمستخدمين الآخرين. لا تحتوي على رسائل.", + "Bug reporting": "الإبلاغ عن مشاكل في البرنامج", + "Chat with %(brand)s Bot": "تخاطب مع الروبوت الخاص ب%(brand)s", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "للمساعدة في استخدام %(brand)s ، انقر هنا أو ابدأ محادثة مع برنامج الروبوت الخاص بنا باستخدام الزر أدناه.", + "For help with using %(brand)s, click here.": "للمساعدة في استخدام %(brand)s انقر هنا.", + "Credits": "أمانة", + "Legal": "قانوني", + "General": "عام", + "Discovery": "الاكتشاف", + "Deactivate account": "تعطيل الحساب", + "Deactivate Account": "تعطيل الحساب", + "Deactivating your account is a permanent action - be careful!": "يعد تعطيل حسابك إجراءً دائمًا - كن حذرًا!", + "Account management": "إدارة الحساب", + "Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "وافق على شروط خدمة خادم الهوية %(serverName)s لتكون قابلاً للاكتشاف عن طريق عنوان البريد الإلكتروني أو رقم الهاتف.", + "Language and region": "اللغة والمنطقة", + "Account": "الحساب", + "Set a new account password...": "تعيين كلمة مرور جديدة للحساب ...", + "Phone numbers": "أرقام الهواتف", + "Email addresses": "عنوان البريد الإلكتروني", + "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "تم تغيير كلمة السر بنجاح. لن تتلقى إشعارات فورية في الاتصالات الأخرى حتى تقوم بتسجيل الدخول إليها مرة أخرى", + "Success": "نجاح", + "Appearance Settings only affect this %(brand)s session.": "إنما تؤثر إعدادات المظهر في %(brand)s وعلى هذا الاتصال فقط.", + "Customise your appearance": "تخصيص مظهرك", + "Set the name of a font installed on your system & %(brand)s will attempt to use it.": "قم بتعيين اسم الخط المثبت على نظامك وسيحاول %(brand)s استخدامه.", + "Modern": "حديث", + "Compact": "متراصّ", + "Message layout": "مظهر الرسائل", + "Theme": "المظهر", + "Add theme": "إضافة مظهر", + "Custom theme URL": "رابط المظهر المخصص", + "Theme added!": "أُضيفَ المظهر!", + "Error downloading theme information.": "تعذر تحميل معلومات المظهر.", + "Invalid theme schema.": "ملف وصف المظهر غير صالح.", + "Use between %(min)s pt and %(max)s pt": "استعمل ما بين %(min)spt و %(max)sps", + "Custom font size can only be between %(min)s pt and %(max)s pt": "الحجم المخصص للخط يجب أن ينحصر بين %(min)spt و %(max)spt", + "Size must be a number": "الحجم يجب أن يكون رقمًا", + "Hey you. You're the best!": "يا من ترى هذه الرسالة. أنت الأفضل!", + "New version available. Update now.": "ثمة إصدارٌ جديد. حدّث الآن.", + "Check for update": "ابحث عن تحديث", + "Error encountered (%(errorDetail)s).": "صودِفَ خطأ: (%(errorDetail)s).", + "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "يتلقى مديرو التكامل بيانات الضبط ، ويمكنهم تعديل عناصر واجهة المستخدم ، وإرسال دعوات الغرف ، وتعيين مستويات القوة نيابة عنك.", + "Manage integrations": "إدارة التكاملات", + "Use an Integration Manager to manage bots, widgets, and sticker packs.": "استخدم مدير التكامل لإدارة الروبوتات وعناصر الواجهة وحزم الملصقات.", + "Use an Integration Manager (%(serverName)s) to manage bots, widgets, and sticker packs.": "استخدم مدير التكامل (%(serverName)s) لإدارة الروبوتات وعناصر الواجهة وحزم الملصقات.", + "Change": "تغيير", + "Enter a new identity server": "أدخل خادم هوية جديدًا", + "Do not use an identity server": "لا تستخدم خادم هوية", + "Using an identity server is optional. If you choose not to use an identity server, you won't be discoverable by other users and you won't be able to invite others by email or phone.": "استخدام خادم الهوية اختياري. إذا اخترت عدم استخدام خادم هوية ، فلن يتمكن المستخدمون الآخرون من اكتشافك ولن تتمكن من دعوة الآخرين عبر البريد الإلكتروني أو الهاتف.", + "Disconnecting from your identity server will mean you won't be discoverable by other users and you won't be able to invite others by email or phone.": "قطع الاتصال بخادم الهوية الخاص بك يعني أنك لن تكون قابلاً للاكتشاف من قبل المستخدمين الآخرين ولن تتمكن من دعوة الآخرين عبر البريد الإلكتروني أو الهاتف.", + "You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "أنت لا تستخدم حاليًا خادم هوية. لاكتشاف جهات الاتصال الحالية التي تعرفها وتكون قابلاً للاكتشاف ، أضف واحداً أدناه.", + "Identity Server": "خادم الهوية", + "If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "إذا كنت لا تريد استخدام لاكتشاف جهات الاتصال الموجودة التي تعرفها وتكون قابلاً للاكتشاف ، فأدخل خادم هوية آخر أدناه.", + "You are currently using to discover and be discoverable by existing contacts you know. You can change your identity server below.": "أنت تستخدم حاليًا لاكتشاف جهات الاتصال الحالية التي تعرفها وتجعل نفسك قابلاً للاكتشاف. يمكنك تغيير خادم الهوية الخاص بك أدناه.", + "Identity Server (%(server)s)": "خادمة الهوية (%(server)s)", + "Go back": "ارجع", + "We recommend that you remove your email addresses and phone numbers from the identity server before disconnecting.": "نوصي بإزالة عناوين البريد الإلكتروني وأرقام الهواتف من خادم الهوية قبل قطع الاتصال.", + "You are still sharing your personal data on the identity server .": "لا زالت بياناتك الشخصية مشاعة على خادم الهوية .", + "Disconnect anyway": "افصل على أي حال", + "wait and try again later": "انتظر وعاوِد لاحقًا", + "contact the administrators of identity server ": "اتصل بمديري خادم الهوية ", + "check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "تحقق من المكونات الإضافية للمتصفح الخاص بك بحثًا عن أي شيء قد يحظر خادم الهوية (مثل Privacy Badger)", + "You should:": "يجب عليك:", + "You should remove your personal data from identity server before disconnecting. Unfortunately, identity server is currently offline or cannot be reached.": "لابد من محو بيانات الشخصية من خادم الهوية قبل الانفصال. لسوء الحظ ، خادم الهوية حاليًّا خارج الشبكة أو لا يمكن الوصول إليه.", + "Disconnect": "فصل", + "Disconnect from the identity server ?": "انفصل عن خادم الهوية ؟", + "Disconnect identity server": "افصل خادم الهوية", + "The identity server you have chosen does not have any terms of service.": "خادم الهوية الذي اخترت ليس له شروط خدمة.", + "Terms of service not accepted or the identity server is invalid.": "شروط الخدمة لم تُقبل أو أن خادم الهوية مردود.", + "Disconnect from the identity server and connect to instead?": "انفصل عن خادم الهوية واتصل بآخر بدلاً منه؟", + "Change identity server": "تغيير خادم الهوية", + "Checking server": "فحص خادم", + "Could not connect to Identity Server": "تعذر الاتصال بخادم هوية", + "Not a valid Identity Server (status code %(code)s)": "خادم هوية مردود (رقم الحال %(code)s)", + "Identity Server URL must be HTTPS": "يجب أن يكون رابط (URL) خادم الهوية HTTPS", + "not ready": "غير جاهز", + "ready": "جاهز", + "Secret storage:": "التخزين السري:", + "in account data": "بيانات في حساب", + "Secret storage public key:": "المفتاح العام للتخزين السري:", + "Backup key cached:": "المفتاح الاحتياطي المحفوظ (في cache):", + "Backup key stored:": "المفتاح الاختياطي المحفوظ:", + "not stored": "لم يُحفظ", + "Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Recovery Key.": "قم بعمل نسخة احتياطية من مفاتيح التشفير ببيانات حسابك في حالة فقد الوصول إلى اتصالاتك. ستأمَّن مفاتيحك باستخدام مفتاح استرداد فريد.", + "unexpected type": "نوع غير متوقع", + "well formed": "مشكل جيّداً", + "Back up your keys before signing out to avoid losing them.": "أضف مفاتيحك للاحتياطي قبل تسجيل الخروج لتتجنب ضياعها.", + "Your keys are not being backed up from this session.": "مفاتيحك لا احتياطيَّ لها من هذا الاتصال.", + "Algorithm:": "الخوارزمية:", + "Backup version:": "نسخة الاحتياطي:", + "This backup is trusted because it has been restored on this session": "هذا الاحتياطي موثوق به لأنه تمت استعادته في هذا الاتصال", + "Backup is not signed by any of your sessions": "لا توقيع على الاحتياطي من أي اتصالاتك", + "Backup has an invalid signature from unverified session ": "الاحتياطي له توقيع مردود من اتصال لم يتم التحقق منه ", + "Backup has an invalid signature from verified session ": "الاحتياطي له توقيع مردود من اتصال تم التحقق منه ", + "Backup has a valid signature from unverified session ": "الاحتياطي له توقيع مقبول من اتصال لم يتم التحقق منه ", + "Backup has a valid signature from verified session ": "الاحتياطي له توقيع مقبول من اتصال تم التحقق منه ", + "Backup has an invalid signature from this session": "الاحتياطي له توقيع مردود من هذا الاتصال", + "Backup has a valid signature from this session": "الاحتياطي له توقيع مقبول من هذا الاتصال", + "Backup has a signature from unknown session with ID %(deviceId)s": "الاحتياطي له توقيع من اتصال مجهول له المعرّف %(deviceId)s", + "Backup has a signature from unknown user with ID %(deviceId)s": "الاحتياطي له توقيع من مستخدم مجهول له المعرّف %(deviceId)s", + "Backup has a invalid signature from this user": "الاحتياطي له توقيع مردود من هذا المستخدم", + "Backup has a valid signature from this user": "الاحتياطي له توقيع مقبول من هذا المستخدم", + "All keys backed up": "جميع المفاتيح منسوخة في الاحتياطي", + "Backing up %(sessionsRemaining)s keys...": "جارٍ رفع %(sessionsRemaining)s مفاتيح للاحتياط...", + "Connect this session to Key Backup": "اربط هذا الاتصال باحتياطي مفتاح", + "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "اربط هذا الاتصال باحتياطي قبل تسجيل الخروج لتجنب فقدان أي مفاتيح قد تكون موجودة فقط في هذا الاتصال.", + "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "هذا الاتصال لم يعتمد الاحتياطي لمفاتيحك لكن لديك احتياطي يمكنك الاتسرجاع منه والإضافة إليه فيما بعد.", + "This session is backing up your keys. ": "هذا الاتصال اعتمد الاحتياطي لمفاتيحك. ", + "Restore from Backup": "استعادة من الاحتياطي", + "Unable to load key backup status": "تعذر حمل حالة النسخ الاحتياطي للمفتاح", + "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "هل أنت واثق؟ ستفقد رسائلك المشفرة إذا لم يتم نسخ المفاتيح احتياطيًا بشكل صحيح.", + "Delete Backup": "حذف الحتياطي", + "Save": "حفظ", + "Profile picture": "الصورة الشخصية", + "Display Name": "الاسم الظاهر", + "Profile": "الملف الشخصي", + "Upgrade to your own domain": "رقِّ لنطاقك", + "The operation could not be completed": "تعذر إتمام العملية", + "Failed to save your profile": "تعذر حفظ ملفك الشخصي", + "Noisy": "مزعج", + "On": "مشتغل", + "Off": "مطفأ", + "Enable audible notifications for this session": "تمكين الإشعارات الصوتية لهذا الاتصال", + "Show message in desktop notification": "إظهار الرسالة في إشعارات سطح المكتب", + "Enable desktop notifications for this session": "تمكين إشعارات سطح المكتب لهذا الاتصال", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply.": "ربما قد ضبطتها في عميل آخر غير %(brand)s. لا يمكنك ضبطها في %(brand)s لكنها تبقى سارية.", + "There are advanced notifications which are not shown here.": "توجد إشعارات متقدمة لا تظهر هنا.", + "Notification targets": "أهداف الإشعار", + "Unable to fetch notification target list": "تعذر جلب قائمة هدف الإشعار", + "Notifications on the following keywords follow rules which can’t be displayed here:": "تتبع الإشعارات بالكلمات المفتاحية التالية قواعد لا يمكن عرضها هنا:", + "Add an email address to configure email notifications": "أضف عنوان بريد إلكتروني لضبط إشعاراته", + "Enable email notifications": "تمكين إشعارات البريد الإلكتروني", + "Clear notifications": "محو الإشعارات", + "Enable notifications for this account": "تمكين الإشعارات لهذا الحساب", + "Notify me for anything else": "أشعرني بأي شيء آخر", + "You've successfully verified your device!": "لقد نجحت في التحقق من جهازك!", + "In encrypted rooms, verify all users to ensure it’s secure.": "في الغرف المشفرة ، تحقق من جميع المستخدمين للتأكد من أنها آمنة.", + "Verify all users in a room to ensure it's secure.": "تحقق من جميع المستخدمين في الغرفة للتأكد من أنها آمنة.", + "Yes": "نعم", + "Almost there! Is %(displayName)s showing the same shield?": "أوشكت على الوصول! هل يظهر %(displayName)s نفس الدرع؟", + "Almost there! Is your other session showing the same shield?": "أوشكت على الوصول! هل يُظهر اتصالك الآخر نفس الدرع؟", + "Verify by emoji": "تحقق بالرموز التعبيرية", + "Verify by comparing unique emoji.": "تحقق بمقارنة الرموز التعبيرية الفريدة.", + "If you can't scan the code above, verify by comparing unique emoji.": "إذا لم تتمكن من مسح الرمز أعلاه ، فتحقق بمقارنة الرموز التعبيرية الفريدة.", + "Ask %(displayName)s to scan your code:": "اطلب من %(displayName)s مسح رمزك:", + "Verify by scanning": "تحقق بالمسح", + "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what %(brand)s supports. Try with a different client.": "الاتصال الذي تحاول التحقق منه لا يدعم مسح رمز الاستجابة السريعة أو التحقق من الرموز التعبيرية ، وهو ما يدعمه %(brand)s. جرب مع عميل مختلف.", + "Security": "الأمان", + "This client does not support end-to-end encryption.": "لا يدعم هذا العميل التشفير من طرف إلى طرف.", + "Role": "الدور", + "Failed to deactivate user": "تعذر إلغاء نشاط المستخدم", + "Deactivate user": "إلغاء نشاط المستخدم", + "Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?": "سيؤدي إلغاء نشاط هذا المستخدم إلى تسجيل خروجهم ومنعهم من تسجيل الدخول مرة أخرى. بالإضافة إلى ذلك ، سيغادرون جميع الغرف التي يتواجدون فيها. لا يمكن التراجع عن هذا الإجراء. هل أنت متأكد أنك تريد إلغاء نشاط هذا المستخدم؟", + "Deactivate user?": "إلغاء نشاط المستخدم؟", + "Are you sure?": "هل متأكد أنت؟", + "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "لن تكون قادرًا على التراجع عن هذا التغيير لأنك ترقي المستخدم ليكون له نفس مستوى الطاقة لديك.", + "Failed to change power level": "تعذر تغيير مستوى القوة", + "Failed to remove user from community": "تعذر حذف المستخدم من المجتمع", + "Failed to withdraw invitation": "تعذر سحب الدعوة", + "Remove this user from community?": "إزالة هذا المستخدم من المجتمع؟", + "Disinvite this user from community?": "إبطال دعوة هذا المستخدم إلى المجتمع؟", + "Remove from community": "إزالة من المجتمع", + "Mute": "كتم", + "Unmute": "رفع الكتم", + "Failed to mute user": "تعذر كتم المستخدم", + "Failed to ban user": "تعذر حذف المستخدم", + "Ban this user?": "حظر هذا المستخدم؟", + "Unban this user?": "رفع الحظر عن هذا المستخدم؟", + "Ban": "حظر", + "Remove recent messages": "احذف الرسائل الحديثة", + "Remove %(count)s messages|one": "احذف رسالة واحدة", + "Remove %(count)s messages|other": "احذف %(count)s رسائل", + "For a large amount of messages, this might take some time. Please don't refresh your client in the meantime.": "قد يستغرق هذا وقتًا بحسب عدد الرسائل. من فضلك لا تحدث عمليك أثناء ذلك.", + "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "أنت على وشك إزالة رسالة واحدة أرسلها %(user)s. هذا لا يمكن التراجع عنه. هل ترغب في الاستمرار؟", + "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|other": "أنت على وشك إزالة %(count)s رسائل أرسلها %(user)s. هذا لا يمكن التراجع عنها. هل ترغب في الاستمرار؟", + "Remove recent messages by %(user)s": "قم بإزالة رسائل %(user)s الأخيرة", + "Try scrolling up in the timeline to see if there are any earlier ones.": "حاول الصعود في المخطط الزمني لمعرفة ما إذا كانت هناك سابقات.", + "No recent messages by %(user)s found": "لم يتم العثور على رسائل حديثة من %(user)s", + "Failed to kick": "تعذر الطرد", + "Kick this user?": "طرد هذا المستخدم؟", + "Disinvite this user?": "إبطال الدعوة لهذا المستخدم؟", + "Kick": "طرد", + "Disinvite": "إبطال الدعوة", + "Demote": "تخفيض", + "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "لن تتمكن من التراجع عن هذا التغيير لأنك تقوم بتخفيض رتبتك ، إذا كنت آخر مستخدم ذي امتياز في الغرفة ، فسيكون من المستحيل استعادة الامتيازات.", + "Demote yourself?": "خفض مرتبة نفسك؟", + "Direct message": "رسالة مباشرة", + "Share Link to User": "مشاركة رابط للمستخدم", + "Mention": "إشارة", + "Invite": "دعوة", + "Jump to read receipt": "انتقل لإيصال قراءة", + "Hide sessions": "اخف الاتصالات", + "%(count)s sessions|one": "%(count)s اتصال", + "%(count)s sessions|other": "%(count)s اتصالات", + "Hide verified sessions": "اخف الاتصالات المحققة", + "%(count)s verified sessions|one": "اتصال واحد محقق", + "%(count)s verified sessions|other": "%(count)s اتصالات محققة", + "Not trusted": "غير موثوق", + "Trusted": "موثوق", + "Room settings": "إعدادات الغرفة", + "Share room": "شارك الغرفة", + "Show files": "أظهر ملفات", + "%(count)s people|one": "%(count)s شخص", + "%(count)s people|other": "%(count)s أشخاص", + "About": "حول", + "Not encrypted": "غير مشفر", + "Add widgets, bridges & bots": "إضافة عناصر الواجهة والجسور والروبوتات", + "Edit widgets, bridges & bots": "تعديل عناصر الواجهة والجسور والروبوتات", + "Widgets": "عناصر الواجهة", + "Options": "الخيارات", + "Unpin a widget to view it in this panel": "قم بفك تثبيت عنصر واجهة مستخدم لعرضه في هذه اللوحة", + "Unpin": "فك التثبيت", + "You can only pin up to %(count)s widgets|other": "تثبيت عناصر واجهة المستخدم ممكن إلى %(count)s بحدٍ أعلى", + "Room Info": "معلومات الغرفة", + "Members": "الأعضاء", + "Yours, or the other users’ session": "إياك أو اتصال المستخدمين الآخرين", + "Yours, or the other users’ internet connection": "إياك أو اتصال المستخدمين الآخرين بالإنترنت", + "The homeserver the user you’re verifying is connected to": "الخادم الوسيط الذي يتصل به المستخدم الذي تتحقق منه", + "Your homeserver": "خادمك الوسيط", + "One of the following may be compromised:": "قد يتم اختراق أي مما يلي:", + "Your messages are not secure": "رسائلك ليست آمنة", + "For extra security, verify this user by checking a one-time code on both of your devices.": "لمزيد من الأمان ، تحقق من هذا المستخدم عن طريق التحقق من رمز لمرة واحدة على كلا الجهازين.", + "Verify User": "تحقق من المستخدم", + "In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "في الغرف المشفرة ، يتم تأمين رسائلك ولا يمتلك أحد سواك أنت والمتلقي المفاتيح الفريدة لفتحها.", + "Messages in this room are not end-to-end encrypted.": "الرسائل الموجودة في هذه الغرفة غير مشفرة من طرف إلى طرف.", + "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "رسائلك مؤمنة وليس لأحد المفاتيح الفريدة لفكها إلا أنت والمتلقي.", + "Messages in this room are end-to-end encrypted.": "يتم تشفير الرسائل الموجودة في هذه الغرفة بين الطرفين.", + "Start Verification": "ابدأ التحقق", + "Accepting…": "جارٍ القبول …", + "Waiting for %(displayName)s to accept…": "بانتظار %(displayName)s ليقبل …", + "Waiting for you to accept on your other session…": "في انتظار قبولك من اتصالك الآخر …", + "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "عندما يضع شخص ما عنوان URL في رسالته ، يمكن عرض معاينة عنوان URL لإعطاء مزيد من المعلومات حول هذا الرابط مثل العنوان والوصف وصورة من موقع الويب.", + "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "في الغرف المشفرة ، مثل هذه الغرفة ، يتم تعطيل معاينات URL أصلاً للتأكد من أن خادمك الوسيط (حيث يتم إنشاء المعاينات) لا يمكنه جمع معلومات حول الروابط التي تراها في هذه الغرفة.", + "URL previews are disabled by default for participants in this room.": "معاينات URL معطلة بشكل أصلي للمشاركين في هذه الغرفة.", + "URL previews are enabled by default for participants in this room.": "يتم تمكين معاينات URL أصلًا للمشاركين في هذه الغرفة.", + "You have disabled URL previews by default.": "لقد عطلت معاينات عناوين URL بشكل أصلي.", + "You have enabled URL previews by default.": "لقد قمت بتمكين معاينات URL بشكل أصلي.", + "Publish this room to the public in %(domain)s's room directory?": "هل تريد نشر هذه الغرفة للملأ في دليل غرف %(domain)s؟", + "Room avatar": "صورة الغرفة", + "Room Topic": "موضوع الغرفة", + "Room Name": "اسم الغرفة", + "New community ID (e.g. +foo:%(localDomain)s)": "معرف المجتمع الجديد (على سبيل المثال +foo:%(localDomain)s)", + "This room is not showing flair for any communities": "هذه الغرفة لا تظهر flair لأي مجتمعات", + "Showing flair for these communities:": "إظهار flair لهذه المجتمعات:", + "'%(groupId)s' is not a valid community ID": "'%(groupId)s' ليس معرف مجتمع صالحًا", + "Invalid community ID": "معرف المجتمع غير صالح", + "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "تعذر تحديث flair لهذه الغرفة. قد لا يسمح الخادم بذلك أو حدث خطأ مؤقت.", + "Notify for all other messages/rooms": "أشعر لجميع الرسائل والغرف الأخرى", + "Messages containing keywords": "رسائل تتضمن كلمات مفتاحية", + "Failed to update keywords": "تعذر تحديث الكلمات المفتاحية", + "Failed to change settings": "تعذر تغيير الإعدادات", + "Enter keywords separated by a comma:": "أدخل كلماتٍ مفتاحية مع فاصلة بينها:", + "Keywords": "الكلمات المفتاحية", + "Error saving email notification preferences": "تعذر حفظ تفضيلات إشعار البريد الإلكتروني", + "The integration manager is offline or it cannot reach your homeserver.": "مدري التكامل غير متصل بالإنرتنت أو لا يمكنه الوصول إلى خادمك الوسيط.", + "Cannot connect to integration manager": "لا يمكن الاتصال بمدير التكامل", + "Connecting to integration manager...": "جارٍ الاتصال بمدير التكامل ...", + "%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use %(brand)s Desktop for encrypted messages to appear in search results.": "%(brand)s لا يستطيع تخزين الرسائل المشفرة محليًّا (في cache) بشكل آمن طالما أنه يعمل على متصفح ويب. استخدم %(brand)s على سطح المكتب لتظهر لك الرسائل المشفرة في نتائج البحث.", + "%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with search components added.": "%(brand)s يفقد بعض المكونات المطلوبة لحفظ آمن محليًّا للرسائل المشفرة. إذا أدرت تجربة هذه الخاصية، فأنشئ %(brand)s على سطح المكتب مع إضافة مكونات البحث.", + "Securely cache encrypted messages locally for them to appear in search results.": "تخزين الرسائل المشفرة بشكل آمن (في cache) محليًا حتى تظهر في نتائج البحث.", + "Manage": "إدارة", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|one": "تخزين الرسائل المشفرة مؤقتًا بشكل آمن محليًا حتى تظهر في نتائج البحث ، باستخدام %(size)s لتخزين الرسائل من %(count)s غرفة.", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "تخزين الرسائل المشفرة مؤقتًا بشكل آمن محليًا حتى تظهر في نتائج البحث ، باستخدام%(size)s لتخزين الرسائل من %(count)s غرف.", + "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "تحقق بشكل فردي من كل اتصال يستخدمه المستخدم لتمييزه أنه موثوق ، دون الوثوق بالأجهزة الموقعة بالتبادل.", + "Encryption": "تشفير", + "Failed to set display name": "تعذر تعيين الاسم الظاهر", + "Last seen": "آخر ظهور", + "Public Name": "الاسم العام", + "ID": "معرف", + "Delete %(count)s sessions|one": "حذف %(count)s اتصال", + "Delete %(count)s sessions|other": "حذف %(count)s اتصالات", + "Authentication": "المصادقة", + "Delete sessions|one": "احذف الاتصال", + "Delete sessions|other": "‪احذف الاتصالات", + "Click the button below to confirm deleting these sessions.|one": "انقر الزر أدناه لتأكيد حذف هذا الاتصال.", + "Click the button below to confirm deleting these sessions.|other": "انقر الزر أدناه لتأكيد حذف هذه الاتصالات.", + "Confirm deleting these sessions": "أكد حذف هذه الاتصالات", + "Confirm deleting these sessions by using Single Sign On to prove your identity.|one": "أكد حذف هذا الاتصال باستخدام الدخول الموحد لإثبات هويتك.", + "Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "أكد حذف هذه الاتصالات باستخدام الدخول الموحد لإثبات هويتك.", + "Unable to load session list": "تعذر حمل قائمة الجلسات", + "Your homeserver does not support session management.": "خادمك الوسيط لا يدعم إدارة جلسات اتصال.", + "exists": "يوجد", + "User signing private key:": "المفتاح الخاص لتوقيع المستخدم:", + "Self signing private key:": "المفتاح الخاص للتوقيع الذاتي:", + "not found locally": "لم يعثر عليه محليًّا", + "cached locally": "حُفظ (في cache) محليًّا", + "Master private key:": "المفتاح الخاص الرئيسي:", + "not found in storage": "لم يعثر عليها في المخزن", + "in secret storage": "في المخزن السري", + "Cross-signing private keys:": "المفاتيح الخاصة للتوقيع المتبادل:", + "not found": "لم يعثر عليه", + "in memory": "في الذاكرة", + "Cross-signing public keys:": "المفاتيح العامة للتوقيع المتبادل:", + "Reset": "إعادة تعيين", + "Set up": "تأسيس", + "Cross-signing is not set up.": "لم يتم إعداد التوقيع المتبادل.", + "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "يحتوي حسابك على هوية توقيع متبادل في وحدة تخزين سرية ، لكن هذا الاتصال لم يثق به بعد.", + "Cross-signing is ready for use.": "التوقيع المتبادل جاهز للاستخدام.", + "Your homeserver does not support cross-signing.": "خادمك الوسيط لا يدعم التوقيع المتبادل (cross-signing).", + "Change Password": "تغيير كلمة المرور", + "Confirm password": "تأكيد كلمة المرور", + "New Password": "كلمة مرور جديدة", + "Current password": "كلمة المرور الحالية", + "Do you want to set an email address?": "هل تريد تعيين عنوان بريد إلكتروني؟", + "Export E2E room keys": "تصدير مفاتيح E2E للغرفة", + "Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "سيؤدي تغيير كلمة المرور حاليًا إلى إعادة تعيين أي مفاتيح تشفير من طرف إلى طرف في جميع الاتصالات، مما يجعل المحادثات المحفوظة المشفرة غير قابلة للقراءة ، إلا إذا قمت بتصدير مفاتيح غرفتك أولاً وإعادة استيرادها بعد ذلك. سيتم تحسين هذا في المستقبل.", + "Warning!": "إنذار!", + "Passwords can't be empty": "كلمات المرور لا يمكن أن تكون فارغة", + "New passwords don't match": "كلمات المرور الجديدة لا تتطابق", + "No display name": "لا اسم ظاهر", + "Upload new:": "رفع جديد:", + "Failed to upload profile picture!": "تعذَّر رفع صورة الملف الشخصي!", + "Show more": "أظهر أكثر", + "Show less": "أظهر أقل", + "Channel: %(channelName)s": "قناة: %(channelName)s", + "This bridge is managed by .": "هذا الجسر يديره .", + "Upload": "رفع", + "Accept to continue:": "قبول للمتابعة:", + "Decline (%(counter)s)": "رفض (%(counter)s)", + "From %(deviceName)s (%(deviceId)s)": "من %(deviceName)s (%(deviceId)s)", + "Your server isn't responding to some requests.": "خادمك لا يتجاوب مع بعض الطلبات.", + "Dog": "كلب", + "To be secure, do this in person or use a trusted way to communicate.": "لتكون آمنًا ، افعل ذلك شخصيًا أو استخدم طريقة موثوقة للتواصل.", + "They don't match": "لم يتطابقوا", + "They match": "تطابقوا", + "Cancelling…": "جارٍ الإلغاء…", + "Waiting for %(displayName)s to verify…": "بانتظار %(displayName)s للتحقق…", + "Waiting for your other session to verify…": "بانتظار اتصالك الآخر للتحقق…", + "Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "بانتظار اتصالك الآخر %(deviceName)s (%(deviceId)s) ، للتحقق…", + "Unable to find a supported verification method.": "تعذر العثور على أحد طرق التحقق الممكنة.", + "Verify this user by confirming the following number appears on their screen.": "تحقق من هذا المستخدم من خلال التأكد من ظهور الرقم التالي على شاشته.", + "Verify this session by confirming the following number appears on its screen.": "تحقق من هذا الاتصال من خلال التأكد من ظهور الرقم التالي على شاشته.", + "Verify this user by confirming the following emoji appear on their screen.": "تحقق من هذا المستخدم من خلال التأكيد من ظهور الرموز التعبيرية التالية على شاشته.", + "Confirm the emoji below are displayed on both sessions, in the same order:": "تأكد من عرض الرموز التعبيرية أدناه في كلا الاتصالين بنفس الترتيب:", + "Start": "بداية", + "Compare a unique set of emoji if you don't have a camera on either device": "قارن مجموعة فريدة من الرموز التعبيرية إذا لم يكن لديك كاميرا على أي من الجهازين", + "Compare unique emoji": "قارن رمزاً تعبيريًّا فريداً", + "or": "أو", + "Scan this unique code": "امسح هذا الرمز الفريد", + "Verify this session by completing one of the following:": "تحقق من هذا الاتصال بإكمال أحد الإجراءات التالية:", + "Got It": "فهمت", + "Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "الرسائل الآمنة مع هذا المستخدم مشفرة من طرفك إلى طرفه ولا يمكن قراءتها من قبل جهات خارجية.", + "You've successfully verified this user.": "لقد نجحت في التحقق من هذا المستخدم.", + "Verified!": "تم التحقق!", + "The other party cancelled the verification.": "ألغى الطرف الآخر التحقق.", + "Accept": "قبول", + "Decline": "رفض", + "Incoming call": "مكالمة واردة", + "Incoming video call": "مكالمة مرئية واردة", + "Incoming voice call": "مكالمة صوتية واردة", + "Unknown caller": "متصل غير معروف", + "Call Paused": "أوقِفَ الاتصال", + "Active call": "مكالمة نشطة", + "This is your list of users/servers you have blocked - don't leave the room!": "هذه قائمتك للمستخدمين / الخوادم التي حظرت - لا تغادر الغرفة!", + "My Ban List": "قائمة الحظر", + "When rooms are upgraded": "عند ترقية الغرف", + "Messages sent by bot": "رسائل أرسلها آلي (Bot)", + "When I'm invited to a room": "عندما أُدعى لغرفة", + "Encrypted messages in group chats": "رسائل مشفرة في المحادثات الجماعية", + "Messages in group chats": "رسائل المحادثات الجماعية", + "Encrypted messages in one-to-one chats": "رسائل مشفرة في المحادثات المباشرة", + "Messages in one-to-one chats": "رسائل المحادثات المباشرة", + "Messages containing @room": "رسائل تتضمن @غرفة", + "Messages containing my username": "رسائل تتضمن اسم المستخدم الخاص بي", + "Messages containing my display name": "رسائل تتضمن اسمي الظاهر", + "Downloading logs": "تحميل السجلات", + "Uploading logs": "رفع السجلات", + "Enable experimental, compact IRC style layout": "تفعيل تخطيط نمط IRC التجريبي والمضغوط", + "IRC display name width": "عرض الاسم الظاهر لIRC", + "Manually verify all remote sessions": "تحقق يدويًا من جميع الاتصالات البعيدة", + "How fast should messages be downloaded.": "ما مدى سرعة تنزيل الرسائل.", + "Enable message search in encrypted rooms": "تمكين البحث عن الرسائل في الغرف المشفرة", + "Show previews/thumbnails for images": "إظهار المعاينات / الصور المصغرة للصور", + "Send read receipts for messages (requires compatible homeserver to disable)": "إرسال إيصالات بالقراءة للرسائل (يتطلب التعطيل توافق الخادم الوسيط)", + "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "السماح بخادم مساعدة الاتصال الاحتياطي turn.matrix.org عندما لا يقدم خادمك واحدًا (سيتم مشاركة عنوان IP الخاص بك أثناء المكالمة)", + "Low bandwidth mode": "وضع النطاق الترددي المنخفض", + "Show hidden events in timeline": "إظهار الأحداث المخفية في الجدول الزمني", + "Show shortcuts to recently viewed rooms above the room list": "إظهار اختصارات للغرف التي تم عرضها مؤخرًا أعلى قائمة الغرف", + "Show rooms with unread notifications first": "اعرض الغرف ذات الإشعارات غير المقروءة أولاً", + "Order rooms by name": "ترتيب الغرف بالاسم", + "Show developer tools": "عرض أدوات المطور", + "Prompt before sending invites to potentially invalid matrix IDs": "أعلمني قبل إرسال دعوات لمعرِّفات قد لا تكون صحيحة", + "Room Colour": "لون الغرفة", + "Enable URL previews by default for participants in this room": "تمكين معاينة الروابط أصلاً لأي مشارك في هذه الغرفة", + "Enable URL previews for this room (only affects you)": "تمكين معاينة الروابط لهذه الغرفة (يؤثر عليك فقط)", + "Enable inline URL previews by default": "تمكين معاينة الروابط أصلاً", + "Never send encrypted messages to unverified sessions in this room from this session": "لا ترسل أبدًا رسائل مشفرة إلى اتصالات التي لم يتم التحقق منها في هذه الغرفة من هذا الاتصال", + "Never send encrypted messages to unverified sessions from this session": "لا ترسل أبدًا رسائل مشفرة إلى اتصالات لم يتم التحقق منها من هذا الاتصال", + "Send analytics data": "إرسال بيانات التحليلات", + "Allow Peer-to-Peer for 1:1 calls": "تمكين مكالمة القرين للقرين إذا كانت فردية (1:1)", + "System font name": "اسم خط النظام", + "Use a system font": "استخدام خط النظام", + "Match system theme": "مطابقة ألوان النظام", + "Mirror local video feed": "محاكاة تغذية الفيديو المحلية", + "Automatically replace plain text Emoji": "استبدل الرموز التعبيرية المكتوبة بالأحرف بها", + "Show typing notifications": "إظهار إشعار الكتابة", + "Send typing notifications": "إرسال إشعار بالكتابة", + "Enable big emoji in chat": "تفعيل الرموز التعبيرية الكبيرة في المحادثة", + "Show avatars in user and room mentions": "إظهار الصورة الرمزية عند ذكر مستخدم أو غرفة", + "Enable automatic language detection for syntax highlighting": "تمكين التعرف التلقائي للغة لتلوين الجمل", + "Autoplay GIFs and videos": "التشغيل التلقائي لملفات GIF ومقاطع الفيديو", + "Always show message timestamps": "اعرض دائمًا الطوابع الزمنية للرسالة", + "Show timestamps in 12 hour format (e.g. 2:30pm)": "عرض الطوابع الزمنية بتنسيق 12 ساعة (على سبيل المثال 2:30pm)", + "Show read receipts sent by other users": "إظهار إيصالات القراءة المرسلة من قبل مستخدمين آخرين", + "Show display name changes": "إظهار تغييرات الاسم الظاهر", + "Show avatar changes": "إظهار التغييرات في الصورة الشخصية", + "Show join/leave messages (invites/kicks/bans unaffected)": "إظهار رسائل الانضمام والمغادرة (لا تتأثر الدعوات والركلات والحظر)", + "Show a placeholder for removed messages": "إظهار عنصر نائب للرسائل المحذوفة", + "Use a more compact ‘Modern’ layout": "استخدم تنسيقًا \"حديثًا\" أكثر إحكاما", + "Enable Emoji suggestions while typing": "تفعيل اقتراحات الرموز التعبيرية أثناء الكتابة", + "Use custom size": "استخدام حجم مخصص", + "Font size": "حجم الخط", + "Show info about bridges in room settings": "إظهار المعلومات حول الجسور في إعدادات الغرفة", + "Enable advanced debugging for the room list": "تفعيل التصحيح المتقدم لقائمة الغرف", + "Offline encrypted messaging using dehydrated devices": "الرسائل المشفرة في وضع عدم الاتصال باستخدام أجهزة مجففة", + "Show message previews for reactions in all rooms": "أظهر معاينات الرسائل للتفاعلات في كل الغرف", + "Show message previews for reactions in DMs": "أظهر معاينات الرسائل للتفاعلات في المراسلة المباشرة", + "Support adding custom themes": "دعم إضافة ألوان مخصصة", + "Try out new ways to ignore people (experimental)": "جرب طرق أخرى لتجاهل الناس (تجريبي)", + "Multiple integration managers": "تعدد مدراء التكامل", + "Render simple counters in room header": "إظهار عدّادات بسيطة في رأس الغرفة", + "Group & filter rooms by custom tags (refresh to apply changes)": "جمع وتصفية الغرف حسب أوسمة مخصصة (حدّث لترى التغيرات)", + "Custom user status messages": "تخصيص رسالة حالة المستخدم", + "Message Pinning": "تثبيت الرسالة", + "New spinner design": "التصميم الجديد للدوَّار", + "Change notification settings": "تغيير إعدادات الإشعار", + "%(senderName)s is calling": "%(senderName)s يتصل", + "Waiting for answer": "بانتظار الرد", + "%(senderName)s started a call": "%(senderName)s بدأ مكالمة", + "You started a call": "لقد بدأت مكالمة", + "Call ended": "انتهت المكالمة", + "%(senderName)s ended the call": "%(senderName)s أنهى المكالمة", + "You ended the call": "لقد أنهيتَ المكالمة", + "Call in progress": "مكالمتك تحت الإجراء", + "%(senderName)s joined the call": "%(senderName)s انضم للمكالمة", + "You joined the call": "لقد انضممت إلى المكالمة", + "Failed to join room": "تعذَّر الانضمام للغرفة", + "The person who invited you already left the room, or their server is offline.": "الشخص الذي دعاك سبق وغادر الغرفة ، أو أن خادمه غير متصل بالإنترنت.", + "The person who invited you already left the room.": "الشخص الذي دعاك قد سبق وغادر الغرفة.", + "Please contact your homeserver administrator.": "يُرجى تواصلك مع مدير خادمك.", + "Sorry, your homeserver is too old to participate in this room.": "للأسف ، خادمك أقدم من أن يكون قادرًا على المشاركة في هذه الغرفة.", + "There was an error joining the room": "تعذَّر الانضمام للغرفة", + "Guest": "ضيف", + "New version of %(brand)s is available": "يتوفر إصدار جديد من %(brand)s", + "Update %(brand)s": "حدّث: %(brand)s", + "Verify the new login accessing your account: %(name)s": "تحقق من تسجيل الدخول الجديد لحسابك: %(name)s", + "New login. Was this you?": "تسجيل دخول جديد. هل كان ذاك أنت؟", + "Other users may not trust it": "قد لا يثق به المستخدمون الآخرون", + "This message cannot be decrypted": "لا يمكن فك تشفير هذه الرسالة", + "Re-request encryption keys from your other sessions.": " إعادة طلب مفاتيح التشفير من اتصالاتك الأخرى.", + "Key request sent.": "تم إرسال طلب المفتاح.", + "If your other sessions do not have the key for this message you will not be able to decrypt them.": "إذا كانت اتصالاتك الأخرى لا تحتوي على مفتاح هذه الرسالة ، فلن تتمكن من فك تشفيرها.", + "Key share requests are sent to your other sessions automatically. If you rejected or dismissed the key share request on your other sessions, click here to request the keys for this session again.": "يتم إرسال طلبات مشاركة المفاتيح إلى اتصالاتك الأخرى تلقائيًا. إذا رفضت أو ألغيت طلب مشاركة المفتاح في اتصالاتك الأخرى ، فانقر هنا لطلب مفاتيح هذا الاتصال مرة أخرى.", + "Your key share request has been sent - please check your other sessions for key share requests.": "تم إرسال طلبك لمشاركة المفتاح - يرجى التحقق من اتصالاتك الأخرى في طلبات مشاركة المفتاح.", + "%(senderName)s uploaded a file": "%(senderName)s رفع ملفًّا", + "%(senderName)s sent a video": "%(senderName)s أرسل مرئيًّا", + "%(senderName)s sent an image": "%(senderName)s أرسل صورة", + "This event could not be displayed": "تعذر عرض هذا الحدث", + "Mod": "مشرف", + "Edit message": "تعديل الرسالة", + "Everyone in this room is verified": "تم التحقق من جميع من في هذه الغرفة", + "This room is end-to-end encrypted": "هذه الغرفة مشفرة من طرف إلى طرف", + "Someone is using an unknown session": "شخص ما يستخدم اتصالاً غير معروف", + "You have verified this user. This user has verified all of their sessions.": "لقد تحققت من هذا المستخدم. لقد تحقق هذا المستخدم من جميع اتصالاته.", + "You have not verified this user.": "أنت لم تتحقق من هذا المستخدم.", + "This user has not verified all of their sessions.": "هذا المستخدم لم يتحقق من جميع اتصالاته.", + "Drop file here to upload": "قم بإسقاط الملف هنا ليُرفَع", + "Drop File Here": "أسقط الملف هنا", + "Phone Number": "رقم الهاتف", + "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains.": "تم إرسال رسالة نصية إلى +%(msisdn)s. الرجاء إدخال رمز التحقق الذي فيها.", + "Remove %(phone)s?": "حذف %(phone)s؟", + "Email Address": "عنوان بريد الكتروني", + "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "لقد أرسلنا إليك بريدًا إلكترونيًا للتحقق من عنوانك. يرجى اتباع التعليمات الموجودة هناك ثم نقر الزر أدناه.", + "Add": "أضف", + "Unable to add email address": "تعذرت إضافة عنوان البريد الإلكتروني", + "This doesn't appear to be a valid email address": "لا يبدو عنوان البريد الإلكتروني هذا صالحاً", + "Invalid Email Address": "عنوان البريد الإلكتروني غير صالح", + "Remove %(email)s?": "حذف %(email)s؟", + "Unable to remove contact information": "غير قادر على إزالة معلومات التواصل", + "Discovery options will appear once you have added a phone number above.": "ستظهر خيارات الاكتشاف بمجرد إضافة رقم هاتف أعلاه.", + "Verification code": "رمز التحقق", + "Please enter verification code sent via text.": "الرجاء إدخال رمز التحقق المرسل عبر النص.", + "Incorrect verification code": "رمز التحقق غير صحيح", + "Unable to verify phone number.": "تعذر التحقق من رقم الهاتف.", + "Unable to share phone number": "تعذرت مشاركة رقم الهاتف", + "Revoke": "إبطال", + "Unable to revoke sharing for phone number": "تعذر إبطال مشاركة رقم الهاتف", + "Discovery options will appear once you have added an email above.": "ستظهر خيارات الاكتشاف بمجرد إضافة بريد إلكتروني أعلاه.", + "Share": "مشاركة", + "Complete": "تام", + "Verify the link in your inbox": "تحقق من الرابط في بريدك الوارد", + "Unable to verify email address.": "تعذر التحقق من عنوان البريد الإلكتروني.", + "Click the link in the email you received to verify and then click continue again.": "انقر الرابط الواصل لبريدك الإلكتروني للتحقق ثم انقر \"متابعة\" مرة أخرى.", + "Your email address hasn't been verified yet": "لم يتم التحقق من عنوان بريدك الإلكتروني حتى الآن", + "Unable to share email address": "تعذرت مشاركة البريد الإلتكروني", + "Unable to revoke sharing for email address": "تعذر إبطال مشاركة عنوان البريد الإلكتروني", + "Who can access this room?": "من يمكنه الوصول إلى هذه الغرفة؟", + "Encrypted": "التشفير", + "Once enabled, encryption cannot be disabled.": "لا يمكن تعطيل التشفير بعد تمكينه.", + "Security & Privacy": "الأمان والخصوصية", + "Who can read history?": "من يستطيع قراءة التاريخ؟", + "Members only (since they joined)": "الأعضاء فقط (منذ انضمامهم)", + "Members only (since they were invited)": "الأعضاء فقط (منذ أن تمت دعوتهم)", + "Members only (since the point in time of selecting this option)": "الأعضاء فقط (منذ اللحظة التي حدد فيها هذا الخيار)", + "Anyone": "أي أحد", + "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "ستنطبق التغييرات على من يمكنه قراءة السجل على الرسائل المستقبلية في هذه الغرفة فقط. رؤية التاريخ الحالي لن تتغير.", + "Anyone who knows the room's link, including guests": "أي شخص يعرف رابط الغرفة بما في ذلك الضيوف", + "Anyone who knows the room's link, apart from guests": "أي شخص يعرف رابط الغرفة باستثناء الضيوف", + "Only people who have been invited": "المدعوون فقط", + "To link to this room, please add an address.": "للربط لهذه الغرفة ، يرجى إضافة عنوان.", + "Click here to fix": "انقر هنا للإصلاح", + "Guests cannot join this room even if explicitly invited.": "لا يمكن للضيوف الانضمام إلى هذه الغرفة حتى إذا تمت دعوتهم بعينهم.", + "Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly. Learn more about encryption.": "لا يمكن العدول عن التشفير بعد تمكينه للغرفة. التشفير يحجب حتى الخادم من رؤية رسائل الغرفة، فقط أعضاؤها هم من يرونها. قد يمنع تمكين التشفير العديد من الروبوتات والجسور من العمل بشكل صحيح. اعرف المزيد حول التشفير. ", + "Enable encryption?": "تمكين التشفير؟", + "Select the roles required to change various parts of the room": "حدد الأدوار المطلوبة لتغيير أجزاء مختلفة من الغرفة", + "Permissions": "الصلاحيات", + "Roles & Permissions": "الأدوار والصلاحيات", + "Send %(eventType)s events": "إرسال أحداث من نوع %(eventType)s", + "Banned users": "المستخدمون المحظورون", + "Muted Users": "المستخدمون المكتومون", + "Privileged Users": "المستخدمون المميزون", + "No users have specific privileges in this room": "لا يوجد مستخدمين لديهم امتيازات خاصة في هذه الغرفة", + "Notify everyone": "إشعار الجميع", + "Remove messages sent by others": "حذف رسائل الآخرين", + "Ban users": "حظر المستخدمين", + "Kick users": "طرد المستخدمين", + "Change settings": "تغيير الإعدادات", + "Send messages": "إرسال الرسائل", + "Invite users": "دعوة المستخدمين", + "Default role": "الدور الاعتيادي", + "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "تعذر تغيير مستوى قوة المستخدم. تأكد من أن لديك صلاحيات كافية وحاول مرة أخرى.", + "Error changing power level": "تعذر تغيير مستوى القوة", + "An error occurred changing the room's power level requirements. Ensure you have sufficient permissions and try again.": "تعذر تغيير مستوى قوة الغرفة. تأكد من أن لديك صلاحيات كافية وحاول مرة أخرى.", + "Error changing power level requirement": "تعذر تغيير متطلبات مستوى القوة", + "Banned by %(displayName)s": "حظره %(displayName)s", + "Unban": "فك الحظر", + "Failed to unban": "تعذر فك الحظر", + "Modify widgets": "تعديل عناصر الواجهة", + "Enable room encryption": "تفعيل تشفير الغرفة", + "Upgrade the room": "ترقية الغرفة", + "Change topic": "تغيير الموضوع", + "Change permissions": "تغيير الصلاحيات", + "Change history visibility": "تغيير ظهور التاريخ", + "Change main address for the room": "تغيير العنوان الأساسي للغرفة", + "Change room name": "تغيير اسم الغرفة", + "Change room avatar": "تغيير صورة الغرفة", + "Browse": "تصفح", + "Set a new custom sound": "تعيين صوت مخصص جديد", + "Notification sound": "صوت الإشعار", + "Sounds": "الأصوات", + "Uploaded sound": "صوت تمام الرفع", + "Room Addresses": "عناوين الغرف", + "URL Previews": "معاينة الروابط", + "Bridges": "الجسور", + "This room isn’t bridging messages to any platforms. Learn more.": "هذه الغرفة لا تربط الرسائل بأي منصة. اعرف المزيد. ", + "This room is bridging messages to the following platforms. Learn more.": "تعمل هذه الغرفة على توصيل الرسائل بالمنصات التالية. اعرف المزيد. ", + "Open Devtools": "افتح أدوات المطور", + "Developer options": "خيارات المطور", + "Room version:": "إصدار الغرفة:", + "Room version": "إصدار الغرفة", + "Internal room ID:": "معرف الغرفة الداخلي:", + "Room information": "معلومات الغرفة", + "View older messages in %(roomName)s.": "عرض رسائل أقدم في %(roomName)s.", + "this room": "هذه الغرفة", + "Upgrade this room to the recommended room version": "قم بترقية هذه الغرفة إلى إصدار الغرفة الموصى به", + "Warning: Upgrading a room will not automatically migrate room members to the new version of the room. We'll post a link to the new room in the old version of the room - room members will have to click this link to join the new room.": " تحذير : ترقية الغرفة لن يقوم تلقائيًا بترحيل أعضاء الغرفة إلى الإصدار الجديد من الغرفة. سننشر رابطًا للغرفة الجديدة في الإصدار القديم من الغرفة - سيتعين على أعضاء الغرفة نقر هذا الرابط للانضمام إلى الغرفة الجديدة.", + "This room is not accessible by remote Matrix servers": "لا يمكن الوصول إلى هذه الغرفة بواسطة خوادم Matrix البعيدة", + "Voice & Video": "الصوت والفيديو", + "Camera": "كاميرا", + "Microphone": "ميكروفون", + "Audio Output": "مخرج الصوت", + "No Webcams detected": "لم يتم الكشف عن كاميرات الويب", + "No Microphones detected": "لم يتم الكشف عن أجهزة ميكروفون", + "No Audio Outputs detected": "لم يتم الكشف عن مخرجات الصوت", + "Request media permissions": "اطلب الإذن للوسائط", + "Missing media permissions, click the button below to request.": "إذن الوسائط مفقود ، انقر الزر أدناه لطلب الإذن.", + "You may need to manually permit %(brand)s to access your microphone/webcam": "قد تحتاج إلى السماح يدويًا ل%(brand)s s بالوصول إلى الميكروفون / كاميرا الويب", + "No media permissions": "لا إذن للوسائط", + "A session's public name is visible to people you communicate with": "يكون الاسم العام للاتصال مرئيًا للأشخاص الذين تتواصل معهم", + "Manage the names of and sign out of your sessions below or verify them in your User Profile.": "قم بإدارة أسماء اتصالاتك وتسجيل الخروج منها أدناه أو تحقق منها في ملفك التعريفي.", + "Where you’re logged in": "أمكنة أنت مسجل دخولك فيها", + "Learn more about how we use analytics.": "اعرف أكثر عن كيفية استخدامنا للتحليلات.", + "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "الخصوصية مهمة بالنسبة لنا ، لذلك نحن لا نجمع أي بيانات شخصية أو ما يمكن التمييز به من البيانات لتحليلاتنا.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "تجمع %(brand)s تحليلات مجهولة للسماح لنا بتحسين التطبيق.", + "Privacy": "الخصوصية", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "قام مسؤول الخادم بتعطيل التشفير من طرف إلى طرف أصلاً في الغرف الخاصة والرسائل الخاصّة.", + "Cross-signing": "التوقيع المتبادل", + "Message search": "بحث الرسائل", + "Secure Backup": "تأمين النسخ الاحتياطي", + "Reject all %(invitedRooms)s invites": "رفض كل الدعوات (%(invitedRooms)s)", + "Accept all %(invitedRooms)s invites": "قبول كل الدعوات (%(invitedRooms)s)", + "Bulk options": "خيارات مجمعة", + "Session key:": "مفتاح الاتصال:", + "Session ID:": "معرّف الاتصال:", + "Cryptography": "التشفير", + "Import E2E room keys": "تعبئة مفاتيح E2E للغرف", + "": "<غير معتمد>", + "Autocomplete delay (ms)": "تأخير الإكمال التلقائي (مللي ثانية)", + "Timeline": "الجدول الزمني", + "Composer": "الكاتب", + "Room list": "قائمة الغرفة", + "Preferences": "تفضلات", + "Always show the window menu bar": "", + "Start automatically after system login": "ابدأ تلقائيًا بعد تسجيل الدخول إلى النظام", + "Subscribe": "اشتراك", + "Room ID or address of ban list": "معرف الغرفة أو عنوان قائمة الحظر", + "If this isn't what you want, please use a different tool to ignore users.": "إذا لم يكن هذا ما تريده ، فيرجى استخدام أداة مختلفة لتجاهل المستخدمين.", + "Subscribing to a ban list will cause you to join it!": "سيؤدي الاشتراك في قائمة الحظر إلى انضمامك إليها!", + "Subscribed lists": "قوائم متشرك بها", + "Ignore": "تجاهل", + "eg: @bot:* or example.org": "مثلاً: @bot:* أو example.org", + "Server or user ID to ignore": "الخادم أو معرف المستخدم المطلوب تجاهله", + "Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "تحتوي قائمتك للحظر على المستخدمين / الخوادم الذين لا تريد أن ترى رسائل منهم. بعد أول تجاهل لمستخدم / لخادم ، ستظهر غرفة جديدة في قائمة الغرف باسم \"My Ban List\" - ابق في هذه الغرفة للحفاظ على قائمة الحظر.", + "Personal ban list": "قائمة الحظر الشخصية", + "Safeguard against losing access to encrypted messages & data": "حماية ضد فقدان الوصول إلى الرسائل والبيانات المشفرة", + "Verify": "تحقق", + "Upgrade": "ترقية", + "Verify this session": "تحقق من هذا الاتصال", + "Encryption upgrade available": "ترقية التشفير متاحة", + "Set up Secure Backup": "أعد النسخ الاحتياطي الآمن", + "Ok": "حسنا", + "Contact your server admin.": "تواصل مع مدير الخادم الخاص بك.", + "Your homeserver has exceeded one of its resource limits.": "لقد تجاوز خادمك أحد حدود موارده.", + "Your homeserver has exceeded its user limit.": "لقد تجاوز خادمك حد عدد المستخدمين.", + "Enable": "ممكن", + "Enable desktop notifications": "تمكين إشعارات سطح المكتب", + "Notifications": "الإشعارات", + "Don't miss a reply": "لا تفوت أي رد", + "Later": "لاحقاً", + "Review": "مراجعة", + "Verify all your sessions to ensure your account & messages are safe": "تحقق من جميع اتصالاتك للتأكد من أمان حسابك ورسائلك", + "Review where you’re logged in": "راجع أماكن تسجيل دخولك", + "No": "لا", + "I want to help": "أريد أن أساعد", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "أرسل بيانات استخدام مجهولة والتي تساعدنا في تحسين %(brand)s. سيستخدم هذا ملف تعريف الارتباط .", + "Help us improve %(brand)s": "ساعدنا في تحسين %(brand)s", + "Unknown App": "تطبيق غير معروف", + "Short keyboard patterns are easy to guess": "من السهل تخمين أنماط قصيرة من لوحة المفاتيح", + "Straight rows of keys are easy to guess": "سهلٌ تخمين صفوف من المفاتيح", + "Common names and surnames are easy to guess": "سهلٌ تخمين الأسماء والألقاب الشائعة", + "Names and surnames by themselves are easy to guess": "سهلٌ تخمين الأسماء والألقاب", + "A word by itself is easy to guess": "الكلمة الواحدة سهلٌ تخمينها", + "This is similar to a commonly used password": "كلمة المرور هذه مشابهة لكلمة مرور شائعة", + "This is a very common password": "كلمة المرور هذه شائعة جدًّا", + "This is a top-100 common password": "كلمة المرور هذه من أكثر الكلمات ال100 شيوعاً", + "This is a top-10 common password": "كلمة المرور هذه من أكثر الكلمات ال10 شيوعاً", + "Dates are often easy to guess": "غالبًا ما يكون من السهل تخمين التواريخ", + "Recent years are easy to guess": "من السهل تخمين السنوات الأخيرة", + "Sequences like abc or 6543 are easy to guess": "من السهل تخمين التسلسلات مثل abc أو 6543", + "Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "يصعب تخمين التكرارات مثل \"abcabcabc\" مقارنةً ب\"abc\"", + "Repeats like \"aaa\" are easy to guess": "من السهل تخمين التكرارات مثل \"aaa\"", + "Add another word or two. Uncommon words are better.": "أضف كلمة أخرى أو كلمتين. الكلمات غير المألوفة أفضل.", + "Predictable substitutions like '@' instead of 'a' don't help very much": "الاستبدالات المتوقعة مثل \"@\" بدلاً من \"a\" لا تساعد كثيرًا", + "Reversed words aren't much harder to guess": "الكلمات المعكوسة ليست أصعب تخميناً", + "All-uppercase is almost as easy to guess as all-lowercase": "تكاد تتساوى سهولة تخمين الكلمة ذات الأحرف التي كلها صغيرة مع التي كلها كبيرة", + "Capitalization doesn't help very much": "لا تساعد الكتابة بالأحرف الكبيرة كثيرًا", + "Avoid dates and years that are associated with you": "تجنب التواريخ والسنوات التي ترتبط بك", + "Avoid years that are associated with you": "تجنب السنوات التي ترتبط بك", + "Avoid recent years": "تجنب السنوات الأخيرة", + "Avoid sequences": "تجنب التسلسلات", + "Avoid repeated words and characters": "تجنب الكلمات والأحرف المتكررة", + "No need for symbols, digits, or uppercase letters": "لا حاجة للرموز أو الأرقام أو الأحرف الكبيرة", + "Use a few words, avoid common phrases": "استخدم بضع كلمات ، وتجنب العبارات الشائعة", + "Unknown server error": "خطأ غير معروف في الخادم", + "The user's homeserver does not support the version of the room.": "لا يدعم خادم المستخدم نموذج هذه الغرفة.", + "The user must be unbanned before they can be invited.": "يجب إلغاء حظر المستخدم قبل دعوته.", + "User %(user_id)s may or may not exist": "المستخدم %(user_id)s قد يكون أو لا يكون موجودًا", + "User %(user_id)s does not exist": "المستخدم %(user_id)s معودم", + "User %(userId)s is already in the room": "المستخدم %(userId)s في الغرفة أصلاً", + "United States": "الولايات المتحدة", + "End conference": "إنهاء المؤتمر", + "Answered Elsewhere": "أُجيب في مكان آخر", + "The other party declined the call.": "رفض الطرف الآخر المكالمة.", + "Default Device": "الجهاز الاعتيادي", + "Albania": "ألبانيا", + "Afghanistan": "أفغانستان", + "United Kingdom": "المملكة المتحدة", + "This will end the conference for everyone. Continue?": "هذا سينهي المؤتمر للجميع. استمر؟", + "The call was answered on another device.": "تم الرد على المكالمة على جهاز آخر.", + "The call could not be established": "تعذر إجراء المكالمة", + "Call Declined": "رُفض الاتصال" } From aa6b4578456aa1004d1531bda34f09c37e579e27 Mon Sep 17 00:00:00 2001 From: Hivaa Date: Mon, 16 Nov 2020 09:22:17 +0000 Subject: [PATCH 089/115] Translated using Weblate (Persian) Currently translated at 5.1% (135 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/fa/ --- src/i18n/strings/fa.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json index 5be1cdbe4a..eacc029d03 100644 --- a/src/i18n/strings/fa.json +++ b/src/i18n/strings/fa.json @@ -151,5 +151,12 @@ "A new version of %(brand)s is available!": "نگارشی جدید از %(brand)s موجود است!", "Guest": "مهمان", "Confirm adding this email address by using Single Sign On to prove your identity.": "برای تأیید هویتتان، این نشانی رایانامه را با ورود یکپارچه تأیید کنید.", - "Click the button below to confirm adding this email address.": "برای تأیید افزودن این نشانی رایانامه، دکمهٔ زیر را بزنید." + "Click the button below to confirm adding this email address.": "برای تأیید افزودن این نشانی رایانامه، دکمهٔ زیر را بزنید.", + "Your homeserver's URL": "آدرس سرور شما", + "Whether or not you're using the Richtext mode of the Rich Text Editor": "از حالت Richtext ویرایشگر متنی استفاده می کنید یا نه", + "Which officially provided instance you are using, if any": "در صورت وجود ، از کدام سرویس رسمی استفاده می‌کنید", + "Whether or not you're logged in (we don't record your username)": "وارد حساب خود می‌شوید یا خیر (ما نام کاربری شما را ثبت نمی‌کنیم)", + "Click the button below to confirm adding this phone number.": "برای تائید اضافه‌شدن این شماره تلفن، بر روی دکمه‌ی زیر کلیک کنید.", + "Confirm adding this phone number by using Single Sign On to prove your identity.": "برای اثبات هویت خود، اضافه‌شدن این شماره تلفن را با استفاده از Single Sign On تائید کنید.", + "Failed to verify email address: make sure you clicked the link in the email": "خطا در تائید آدرس ایمیل: مطمئن شوید که بر روی لینک موجود در ایمیل کلیک کرده اید" } From 46fb0162c30a670d33cd5c6a9b4b969a607f9a80 Mon Sep 17 00:00:00 2001 From: XoseM Date: Sat, 14 Nov 2020 06:47:49 +0000 Subject: [PATCH 090/115] Translated using Weblate (Galician) Currently translated at 100.0% (2641 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 62 +++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index f536de32e9..a674d16407 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -42,7 +42,7 @@ "Invite new community members": "Convidará comunidade a novos participantes", "Invite to Community": "Convidar á comunidade", "Which rooms would you like to add to this community?": "Que salas desexaría engadir a esta comunidade?", - "Show these rooms to non-members on the community page and room list?": "Quere que estas salas se lle mostren a outros membros de fóra da comunidade na lista de salas?", + "Show these rooms to non-members on the community page and room list?": "Queres que estas salas se lle mostren a outras participantes de fóra da comunidade e na lista de salas?", "Add rooms to the community": "Engadir salas á comunidade", "Add to community": "Engadir á comunidade", "Failed to invite the following users to %(groupId)s:": "Fallo ao convidar ás seguintes usuarias a %(groupId)s:", @@ -74,7 +74,7 @@ "Missing user_id in request": "Falta o user_id na petición", "Usage": "Uso", "/ddg is not a command": "/ddg non é unha orde", - "To use it, just wait for autocomplete results to load and tab through them.": "Para utilizala, agarde que carguen os resultados de autocompletado e escolla entre eles.", + "To use it, just wait for autocomplete results to load and tab through them.": "Para utilizala, agarda a que carguen os resultados de autocompletado e escolle entre eles.", "Ignored user": "Usuaria ignorada", "You are now ignoring %(userId)s": "Agora está a ignorar %(userId)s", "Unignored user": "Usuarias non ignoradas", @@ -131,7 +131,7 @@ "Authentication check failed: incorrect password?": "Fallou a comprobación de autenticación: contrasinal incorrecto?", "Failed to join room": "Non puideches entrar na sala", "Message Pinning": "Fixando mensaxe", - "Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostrar marcas de tempo con formato 12 horas (ex. 2:30pm)", + "Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostrar marcas de tempo con formato 12 horas (ex. 2:30pm)", "Always show message timestamps": "Mostrar sempre marcas de tempo", "Autoplay GIFs and videos": "Reprodución automática de GIFs e vídeos", "Enable automatic language detection for syntax highlighting": "Activar a detección automática de idioma para o resalte da sintaxe", @@ -281,9 +281,9 @@ "Publish this room to the public in %(domain)s's room directory?": "Publicar esta sala no directorio público de salas de %(domain)s?", "Who can read history?": "Quen pode ler o histórico?", "Anyone": "Calquera", - "Members only (since the point in time of selecting this option)": "Só membros (desde o momento en que se selecciona esta opción)", - "Members only (since they were invited)": "Só membros (desde que foron convidados)", - "Members only (since they joined)": "Só membros (desde que se uniron)", + "Members only (since the point in time of selecting this option)": "Só participantes (desde o momento en que se selecciona esta opción)", + "Members only (since they were invited)": "Só participantes (desde que foron convidadas)", + "Members only (since they joined)": "Só participantes (desde que se uniron)", "Permissions": "Permisos", "Advanced": "Avanzado", "Add a topic": "Engadir asunto", @@ -298,7 +298,7 @@ "You have enabled URL previews by default.": "Activou a vista previa de URL por defecto.", "You have disabled URL previews by default.": "Desactivou a vista previa de URL por defecto.", "URL previews are enabled by default for participants in this room.": "As vistas previas de URL están activas por defecto para os participantes desta sala.", - "URL previews are disabled by default for participants in this room.": "As vistas previas de URL están desactivadas por defecto para os participantes desta sala.", + "URL previews are disabled by default for participants in this room.": "As vistas previas de URL están desactivadas por defecto para as participantes desta sala.", "URL Previews": "Vista previa de URL", "Error decrypting audio": "Fallo ao descifrar audio", "Error decrypting attachment": "Fallo descifrando o anexo", @@ -346,7 +346,7 @@ "Only visible to community members": "Só visible para os participantes da comunidade", "Filter community rooms": "Filtrar salas da comunidade", "Something went wrong when trying to get your communities.": "Algo fallou ao intentar obter as súas comunidades.", - "You're not currently a member of any communities.": "Ate o momento non é membro de ningunha comunidade.", + "You're not currently a member of any communities.": "Ate o momento non es participante en ningunha comunidade.", "Unknown Address": "Enderezo descoñecido", "Allow": "Permitir", "Delete Widget": "Eliminar widget", @@ -390,13 +390,13 @@ "was invited %(count)s times|one": "foi convidada", "were banned %(count)s times|other": "foron prohibidas %(count)s veces", "were banned %(count)s times|one": "foron prohibidas", - "was banned %(count)s times|other": "foi prohibida %(count)s veces", + "was banned %(count)s times|other": "foi vetada %(count)s veces", "was banned %(count)s times|one": "foi prohibida", "were unbanned %(count)s times|other": "retiróuselle a prohibición %(count)s veces", "were unbanned %(count)s times|one": "retrouseille a prohibición", - "was unbanned %(count)s times|other": "retrouseille a prohibición %(count)s veces", + "was unbanned %(count)s times|other": "retirouselle o veto %(count)s veces", "was unbanned %(count)s times|one": "retiróuselle a prohibición", - "were kicked %(count)s times|other": "foron expulsadas %(count)s veces", + "were kicked %(count)s times|other": "foron expulsadas %(count)s veces", "were kicked %(count)s times|one": "foron expulsadas", "was kicked %(count)s times|other": "foi expulsada %(count)s veces", "was kicked %(count)s times|one": "foi expulsada", @@ -465,7 +465,7 @@ "You must register to use this functionality": "Debe rexistrarse para utilizar esta función", "You must join the room to see its files": "Debes unirte a sala para ver os seus ficheiros", "There are no visible files in this room": "Non hai ficheiros visibles nesta sala", - "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "

HTML para a páxina da súa comunidade

\n

\n Utilice a descrición longa para presentar novos membros a comunidade, ou publicar algunha ligazón importante\n \n

\n

\n Tamén pode utilizar etiquetas 'img'\n

\n", + "

HTML for your community's page

\n

\n Use the long description to introduce new members to the community, or distribute\n some important links\n

\n

\n You can even use 'img' tags\n

\n": "

HTML para a páxina da túa comunidade

\n

\n Utiliza a descrición longa para presentalle a comunidade ás novas participantes, ou publicar algunha ligazón importante\n \n

\n

\n Tamén podes usar etiquetas 'img'\n

\n", "Add rooms to the community summary": "Engadir salas ao resumo da comunidade", "Which rooms would you like to add to this summary?": "Que salas desexa engadir a este resumo?", "Add to summary": "Engadir ao resumo", @@ -487,13 +487,13 @@ "Leave %(groupName)s?": "Deixar %(groupName)s?", "Leave": "Saír", "Community Settings": "Axustes da comunidade", - "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Estas salas móstranse aos membros da comunidade na páxina da comunidade. Os participantes da comunidade poden unirse ás salas premendo nelas.", + "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Estas salas móstranse ás participantes da comunidade na páxina da comunidade. As participantes da comunidade poden unirse ás salas premendo nelas.", "Add rooms to this community": "Engadir salas a esta comunidade", "Featured Rooms:": "Salas destacadas:", "Featured Users:": "Usuarias destacadas:", "%(inviter)s has invited you to join this community": "%(inviter)s convidoute a entrar nesta comunidade", "You are an administrator of this community": "Administras esta comunidade", - "You are a member of this community": "É membro desta comunidade", + "You are a member of this community": "Participas nesta comunidade", "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "A túa comunidade non ten unha descrición longa, ou unha páxina HTML que lle mostrar ás participantes.
Preme aquí para abrir os axustes e publicar unha!", "Long Description (HTML)": "Descrición longa (HTML)", "Description": "Descrición", @@ -554,7 +554,7 @@ "Labs": "Labs", "Check for update": "Comprobar actualización", "Reject all %(invitedRooms)s invites": "Rexeitar todos os %(invitedRooms)s convites", - "Start automatically after system login": "Iniciar automaticamente despois de iniciar sesión", + "Start automatically after system login": "Iniciar automaticamente despois de iniciar sesión", "No media permissions": "Sen permisos de medios", "You may need to manually permit %(brand)s to access your microphone/webcam": "Igual ten que permitir manualmente a %(brand)s acceder ao seus micrófono e cámara", "No Microphones detected": "Non se detectaron micrófonos", @@ -804,8 +804,8 @@ "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Iso fará que a túa deixe de ter uso de xeito permanente. Non poderás acceder e ninguén vai a poder volver a rexistrar esa mesma ID de usuaria. Suporá que sairás de todalas salas de conversas nas que estabas e eliminarás os detalles da túa conta do servidores de identidade. Esta acción non ten volta", "Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "Desactivando a súa conta non supón que por defecto esquezamos as súas mensaxes enviadas. Se quere que nos esquezamos das súas mensaxes, prema na caixa de embaixo.", "To continue, please enter your password:": "Para continuar introduza o seu contrasinal:", - "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "A visibilidade das mensaxes en Matrix é parecida á dos correos electrónicos. Que esquezamos as túas mensaxes significa que as mensaxes non se van a compartir con ningún novo membro ou usuaria que non estea rexistrada. Mais aqueles usuarias que xa tiveron acceso a estas mensaxes si que seguirán tendo acceso as súas propias copias desas mensaxes.", - "Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "Esquezan todas as mensaxes que eu enviara no momento en que elimine a miña conta. (Aviso: iso suporá que os seguintes participantes só verán unha versión incompleta das conversas.)", + "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "A visibilidade das mensaxes en Matrix é parecida á dos correos electrónicos. Que esquezamos as túas mensaxes significa que as mensaxes non se van a compartir con ningunha nova participante ou usuaria que non estea rexistrada. Mais aquelas usuarias que xa tiveron acceso a estas mensaxes si que seguirán tendo acceso as súas propias copias desas mensaxes.", + "Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "Esquece todas as mensaxes que enviei cando a miña conta está desactivada. (Aviso: isto fará que usuarias futuras vexan unha versión incompleta das conversas)", "Share Room": "Compartir sala", "Link to most recent message": "Ligazón ás mensaxes máis recentes", "Share User": "Compartir usuaria", @@ -833,7 +833,7 @@ "The email field must not be blank.": "Este campo de correo non pode quedar en branco.", "The phone number field must not be blank.": "O número de teléfono non pode quedar en branco.", "The password field must not be blank.": "O campo do contrasinal non pode quedar en branco.", - "You can't send any messages until you review and agree to our terms and conditions.": "Non vai poder enviar mensaxes ata que revise e acepte os nosos termos e condicións.", + "You can't send any messages until you review and agree to our terms and conditions.": "Non vas poder enviar mensaxes ata que revises e aceptes os nosos termos e condicións.", "A call is currently being placed!": "Xa se estableceu a chamada!", "Sorry, your homeserver is too old to participate in this room.": "Lametámolo, o seu servidor de inicio é vello de máis para participar en esta sala.", "Please contact your homeserver administrator.": "Por favor, contacte coa administración do seu servidor.", @@ -920,14 +920,14 @@ "Messages": "Mensaxes", "Actions": "Accións", "Other": "Outro", - "Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Anteponse ¯\\_(ツ)_/¯ a mensaxe en texto plano", + "Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Anteponse ¯\\_(ツ)_/¯ a mensaxe en texto plano", "Sends a message as plain text, without interpreting it as markdown": "Envía unha mensaxe como texto plano, sen interpretalo como markdown", "Sends a message as html, without interpreting it as markdown": "Envía unha mensaxe como html, sen interpretalo como markdown", "Upgrades a room to a new version": "Subir a sala de versión", "You do not have the required permissions to use this command.": "Non tes os permisos suficientes para usar este comando.", "Error upgrading room": "Fallo ao actualizar a sala", "Double check that your server supports the room version chosen and try again.": "Comproba ben que o servidor soporta a versión da sala escollida e inténtao outra vez.", - "Changes your display nickname in the current room only": "Cambia o teu nome mostrado só para esta esta sala", + "Changes your display nickname in the current room only": "Cambia o teu nome mostrado só para esta sala", "Changes the avatar of the current room": "Cambia o avatar da sala actual", "Changes your avatar in this current room only": "Cambia o teu avatar só nesta sala", "Changes your avatar in all rooms": "Cambia o teu avatar en todas as salas", @@ -997,7 +997,7 @@ "If there is additional context that would help in analysing the issue, such as what you were doing at the time, room IDs, user IDs, etc., please include those things here.": "Se hai contexto que cres que axudaría a analizar o problema, como o que estabas a facer, ID da sala, ID da usuaria, etc., por favor inclúeo aquí.", "To help avoid duplicate issues, please view existing issues first (and add a +1) or create a new issue if you can't find it.": "Para evitar informes duplicados, mira os informes existentes primeiro (e engade un +1) ou crea un novo informe se non o atopas.", "Command Help": "Comando Axuda", - "To help us prevent this in future, please send us logs.": "Para axudarnos a previr esto no futuro, envíanos o rexistro.", + "To help us prevent this in future, please send us logs.": "Para axudarnos a evitar esto no futuro, envíanos o rexistro.", "Help": "Axuda", "Explore Public Rooms": "Explorar Salas Públicas", "Explore": "Explorar", @@ -1085,7 +1085,7 @@ "Unrecognised address": "Enderezo non recoñecible", "You do not have permission to invite people to this room.": "Non tes permiso para convidar a xente a esta sala.", "User %(userId)s is already in the room": "A usuaria %(userId)s xa está na sala", - "User %(user_id)s does not exist": "A usuaria %(user_id)s non existe", + "User %(user_id)s does not exist": "A usuaria %(user_id)s non existe", "User %(user_id)s may or may not exist": "A usuaria %(user_id)s podería non existir", "The user must be unbanned before they can be invited.": "A usuria debe ser desbloqueada antes de poder convidala.", "Messages in this room are end-to-end encrypted.": "As mensaxes desta sala están cifradas de extremo-a-extremo.", @@ -1153,7 +1153,7 @@ "Try out new ways to ignore people (experimental)": "Novos xeitos de ignorar persoas (experimental)", "Show join/leave messages (invites/kicks/bans unaffected)": "Mostrar mensaxes de entrada/saída (mais non convites/expulsións/bloqueos)", "Subscribing to a ban list will cause you to join it!": "Subscribíndote a unha lista de bloqueo fará que te unas a ela!", - "Warning: Upgrading a room will not automatically migrate room members to the new version of the room. We'll post a link to the new room in the old version of the room - room members will have to click this link to join the new room.": "Aviso: Actualizando a sala non fará que os membros da sala migren automáticamente a nova versión da sala. Publicaremos unha ligazón a nova sala na versión antiga da sala - os membros terán que premer na ligazón para unirse a nova sala.", + "Warning: Upgrading a room will not automatically migrate room members to the new version of the room. We'll post a link to the new room in the old version of the room - room members will have to click this link to join the new room.": "Aviso: Actualizando a sala non farás que as participantes da sala migren automáticamente á nova versión da sala. Publicaremos unha ligazón á nova sala na versión antiga da sala - as participantes terán que premer na ligazón para unirse a nova sala.", "Join the conversation with an account": "Únete a conversa cunha conta", "Re-join": "Volta a unirte", "You can only join it with a working invite.": "Só podes unirte cun convite activo.", @@ -1555,7 +1555,7 @@ "Revoke": "Revogar", "Share": "Compartir", "Discovery options will appear once you have added an email above.": "As opcións de descubrimento aparecerán após ti engadas un email.", - "Unable to revoke sharing for phone number": "Non se puido revogar a compartición do número de teléfono", + "Unable to revoke sharing for phone number": "Non se puido revogar a compartición do número de teléfono", "Unable to share phone number": "Non se puido compartir o número de teléfono", "Unable to verify phone number.": "Non se puido verificar o número de teléfono.", "Please enter verification code sent via text.": "Escribe o código de verificación enviado no SMS.", @@ -1776,7 +1776,7 @@ "edited": "editada", "Can't load this message": "Non se cargou a mensaxe", "Submit logs": "Enviar rexistro", - "Failed to load group members": "Fallou a carga dos membros do grupo", + "Failed to load group members": "Fallou a carga das participantes do grupo", "Frequently Used": "Utilizado con frecuencia", "Smileys & People": "Sorrisos e Persoas", "Animals & Nature": "Animais e Natureza", @@ -2042,7 +2042,7 @@ "Missing captcha public key in homeserver configuration. Please report this to your homeserver administrator.": "Falta a chave pública do captcha na configuración do servidor. Informa desto á administración do teu servidor.", "Please review and accept all of the homeserver's policies": "Revisa e acepta todas as cláusulas do servidor", "Please review and accept the policies of this homeserver:": "Revisa e acepta as cláusulas deste servidor:", - "Unable to validate homeserver/identity server": "Non se puido validar o servidor/servidor de identidade", + "Unable to validate homeserver/identity server": "Non se puido validar o servidor de inicio/servidor de identidade", "Your Modular server": "O teu servidor Modular", "Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of modular.im.": "Escribe a localización do teu servidor Modular. Podería utilizar o teu propio nome de dominio ou ser un subdominio de modular.im.", "Server Name": "Nome do Servidor", @@ -2206,7 +2206,7 @@ "If you don't want to set this up now, you can later in Settings.": "Se non queres configurar esto agora, pódelo facer posteriormente nos Axustes.", "Don't ask again": "Non preguntar outra vez", "New Recovery Method": "Novo Método de Recuperación", - "A new recovery passphrase and key for Secure Messages have been detected.": "Detectouse un novo método de chave e frase de paso de recuperación para Mensaxes Seguras.", + "A new recovery passphrase and key for Secure Messages have been detected.": "Detectouse unha nova frase de paso de recuperación e chave para Mensaxes Seguras.", "If you didn't set the new recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Se non configuras o novo método de recuperación, un atacante podería intentar o acceso á túa conta. Cambia inmediatamente o contrasinal da conta e configura un novo método de recuperación nos Axustes.", "This session is encrypting history using the new recovery method.": "Esta sesión está cifrando o historial usando o novo método de recuperación.", "Go to Settings": "Ir a Axustes", @@ -2372,7 +2372,7 @@ "We’re excited to announce Riot is now Element!": "Emociónanos comunicar que Riot agora é Element!", "Learn more at element.io/previously-riot": "Coñece máis en element.io/previously-riot", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.": "Podes usar as opcións de servidor personalizado para conectar con outros servidores Matrix indicando un URL diferente para o servidor. Poderás usar %(brand)s cunha conta Matrix existente noutro servidor de inicio.", - "Enter the location of your Element Matrix Services homeserver. It may use your own domain name or be a subdomain of element.io.": "Escribe a localización do teu servidor Element Matrix Services. Podería ser o teu propio dominio ou un subdominio de element.io.", + "Enter the location of your Element Matrix Services homeserver. It may use your own domain name or be a subdomain of element.io.": "Escribe a localización do teu servidor Element Matrix Services. Podería ser o teu propio dominio ou un subdominio de element.io.", "Search rooms": "Buscar salas", "User menu": "Menú de usuaria", "%(brand)s Web": "Web %(brand)s", @@ -2453,7 +2453,7 @@ "Privacy": "Privacidade", "There was an error updating your community. The server is unable to process your request.": "Algo fallou ó actualizar a comunidade. O servidor non é quen de procesar a solicitude.", "Update community": "Actualizar comunidade", - "May include members not in %(communityName)s": "Podería incluir membros que non están en %(communityName)s", + "May include members not in %(communityName)s": "Podería incluir participantes que non están en %(communityName)s", "Start a conversation with someone using their name, username (like ) or email address. This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click here.": "Iniciar unha conversa con alguén utilizando o seu nome, nome de usuaria (como ) ou enderezo de email. Esto non as convidará a %(communityName)s. Para convidar a alguén a %(communityName)s, preme aquí.", "Failed to find the general chat for this community": "Non se atopou o chat xenérico para esta comunidade", "Community settings": "Axustes da comunidade", @@ -2839,5 +2839,7 @@ "Eritrea": "Eritrea", "Equatorial Guinea": "Guinea Ecuatorial", "El Salvador": "O Salvador", - "Egypt": "Exipto" + "Egypt": "Exipto", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|one": "Conservar na memoria local as mensaxes cifradas de xeito seguro para que aparezan nas buscas, usando %(size)s para gardar mensaxes de %(count)s sala.", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Conservar na memoria local as mensaxes cifradas de xeito seguro para que aparezan nas buscas, usando %(size)s para gardar mensaxes de %(count)s salas." } From c88f50a92916d929ae3f65601125601580909c49 Mon Sep 17 00:00:00 2001 From: blipnik Date: Mon, 16 Nov 2020 12:06:58 +0000 Subject: [PATCH 091/115] Translated using Weblate (Slovenian) Currently translated at 1.0% (27 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/sl/ --- src/i18n/strings/sl.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sl.json b/src/i18n/strings/sl.json index beff9b5bcb..28d3625a83 100644 --- a/src/i18n/strings/sl.json +++ b/src/i18n/strings/sl.json @@ -20,5 +20,9 @@ "Confirm adding this phone number by using Single Sign On to prove your identity.": "Potrdite dodajanje te telefonske številke z enkratno prijavo, da dokažete svojo identiteto.", "Confirm adding phone number": "Potrdi dodajanje telefonske številke", "Click the button below to confirm adding this phone number.": "Pritisnite gumb spodaj da potrdite dodajanje te telefonske številke.", - "Add Phone Number": "Dodaj telefonsko številko" + "Add Phone Number": "Dodaj telefonsko številko", + "Analytics": "Analitika", + "Call Declined": "Klic zavrnjen", + "Call Failed": "Klic ni uspel", + "Your homeserver's URL": "URL domačega strežnika" } From a3a14630843e4e0057e5e353f682a022d8b5b1fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C5=A0uklje?= Date: Mon, 16 Nov 2020 11:20:20 +0000 Subject: [PATCH 092/115] Translated using Weblate (Slovenian) Currently translated at 1.0% (27 of 2641 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/sl/ --- src/i18n/strings/sl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sl.json b/src/i18n/strings/sl.json index 28d3625a83..2024821bb2 100644 --- a/src/i18n/strings/sl.json +++ b/src/i18n/strings/sl.json @@ -24,5 +24,6 @@ "Analytics": "Analitika", "Call Declined": "Klic zavrnjen", "Call Failed": "Klic ni uspel", - "Your homeserver's URL": "URL domačega strežnika" + "Your homeserver's URL": "URL domačega strežnika", + "End": "Konec" } From 91b1c8b8173b2e83b97602ac6a0eb5fa587cb86a Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 13 Nov 2020 15:19:34 -0700 Subject: [PATCH 093/115] Fix DM logic to always pick a more reliable DM room Fixes https://github.com/vector-im/element-web/issues/15605 --- src/components/views/dialogs/InviteDialog.js | 10 ++++++++-- src/components/views/right_panel/UserInfo.tsx | 14 ++----------- src/createRoom.ts | 20 +++++++++++++------ src/utils/membership.ts | 5 +++++ 4 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js index 99878569d3..e29ef143f2 100644 --- a/src/components/views/dialogs/InviteDialog.js +++ b/src/components/views/dialogs/InviteDialog.js @@ -31,7 +31,7 @@ import dis from "../../../dispatcher/dispatcher"; import IdentityAuthClient from "../../../IdentityAuthClient"; import Modal from "../../../Modal"; import {humanizeTime} from "../../../utils/humanize"; -import createRoom, {canEncryptToAllUsers, privateShouldBeEncrypted} from "../../../createRoom"; +import createRoom, {canEncryptToAllUsers, findDMForUser, privateShouldBeEncrypted} from "../../../createRoom"; import {inviteMultipleToRoom, showCommunityInviteDialog} from "../../../RoomInvite"; import {Key} from "../../../Keyboard"; import {Action} from "../../../dispatcher/actions"; @@ -41,6 +41,7 @@ import {CommunityPrototypeStore} from "../../../stores/CommunityPrototypeStore"; import SettingsStore from "../../../settings/SettingsStore"; import {UIFeature} from "../../../settings/UIFeature"; import CountlyAnalytics from "../../../CountlyAnalytics"; +import {Room} from "matrix-js-sdk/src/models/room"; // we have a number of types defined from the Matrix spec which can't reasonably be altered here. /* eslint-disable camelcase */ @@ -575,7 +576,12 @@ export default class InviteDialog extends React.PureComponent { const targetIds = targets.map(t => t.userId); // Check if there is already a DM with these people and reuse it if possible. - const existingRoom = DMRoomMap.shared().getDMRoomForIdentifiers(targetIds); + let existingRoom: Room; + if (targetIds.length === 1) { + existingRoom = findDMForUser(MatrixClientPeg.get(), targetIds[0]); + } else { + existingRoom = DMRoomMap.shared().getDMRoomForIdentifiers(targetIds); + } if (existingRoom) { dis.dispatch({ action: 'view_room', diff --git a/src/components/views/right_panel/UserInfo.tsx b/src/components/views/right_panel/UserInfo.tsx index 66b689ddb9..cdb4c43b09 100644 --- a/src/components/views/right_panel/UserInfo.tsx +++ b/src/components/views/right_panel/UserInfo.tsx @@ -28,7 +28,7 @@ import {EventTimeline} from 'matrix-js-sdk/src/models/event-timeline'; import dis from '../../../dispatcher/dispatcher'; import Modal from '../../../Modal'; import {_t} from '../../../languageHandler'; -import createRoom, {privateShouldBeEncrypted} from '../../../createRoom'; +import createRoom, { findDMForUser, privateShouldBeEncrypted } from '../../../createRoom'; import DMRoomMap from '../../../utils/DMRoomMap'; import AccessibleButton from '../elements/AccessibleButton'; import SdkConfig from '../../../SdkConfig'; @@ -105,17 +105,7 @@ export const getE2EStatus = (cli: MatrixClient, userId: string, devices: IDevice }; async function openDMForUser(matrixClient: MatrixClient, userId: string) { - const dmRooms = DMRoomMap.shared().getDMRoomsForUserId(userId); - const lastActiveRoom = dmRooms.reduce((lastActiveRoom, roomId) => { - const room = matrixClient.getRoom(roomId); - if (!room || room.getMyMembership() === "leave") { - return lastActiveRoom; - } - if (!lastActiveRoom || lastActiveRoom.getLastActiveTimestamp() < room.getLastActiveTimestamp()) { - return room; - } - return lastActiveRoom; - }, null); + const lastActiveRoom = findDMForUser(matrixClient, userId); if (lastActiveRoom) { dis.dispatch({ diff --git a/src/createRoom.ts b/src/createRoom.ts index a42fcc5e7b..699df0d799 100644 --- a/src/createRoom.ts +++ b/src/createRoom.ts @@ -15,20 +15,21 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {MatrixClient} from "matrix-js-sdk/src/client"; -import {Room} from "matrix-js-sdk/src/models/room"; +import { MatrixClient } from "matrix-js-sdk/src/client"; +import { Room } from "matrix-js-sdk/src/models/room"; -import {MatrixClientPeg} from './MatrixClientPeg'; +import { MatrixClientPeg } from './MatrixClientPeg'; import Modal from './Modal'; import * as sdk from './index'; import { _t } from './languageHandler'; import dis from "./dispatcher/dispatcher"; import * as Rooms from "./Rooms"; import DMRoomMap from "./utils/DMRoomMap"; -import {getAddressType} from "./UserAddress"; +import { getAddressType } from "./UserAddress"; import { getE2EEWellKnown } from "./utils/WellKnownUtils"; import GroupStore from "./stores/GroupStore"; import CountlyAnalytics from "./CountlyAnalytics"; +import { isJoinedOrNearlyJoined } from "./utils/membership"; // we define a number of interfaces which take their names from the js-sdk /* eslint-disable camelcase */ @@ -236,9 +237,16 @@ export function findDMForUser(client: MatrixClient, userId: string): Room { const roomIds = DMRoomMap.shared().getDMRoomsForUserId(userId); const rooms = roomIds.map(id => client.getRoom(id)); const suitableDMRooms = rooms.filter(r => { + // Validate that we are joined and the other person is also joined. We'll also make sure + // that the room also looks like a DM (until we have canonical DMs to tell us). For now, + // a DM is a room of two people that contains those two people exactly. This does mean + // that bots, assistants, etc will ruin a room's DM-ness, though this is a problem for + // canonical DMs to solve. if (r && r.getMyMembership() === "join") { - const member = r.getMember(userId); - return member && (member.membership === "invite" || member.membership === "join"); + const members = r.currentState.getMembers(); + const joinedMembers = members.filter(m => isJoinedOrNearlyJoined(m.membership)); + const otherMember = joinedMembers.find(m => m.userId === userId); + return otherMember && joinedMembers.length === 2; } return false; }).sort((r1, r2) => { diff --git a/src/utils/membership.ts b/src/utils/membership.ts index 68ac958490..696bd57880 100644 --- a/src/utils/membership.ts +++ b/src/utils/membership.ts @@ -78,6 +78,11 @@ export function getEffectiveMembership(membership: string): EffectiveMembership } } +export function isJoinedOrNearlyJoined(membership: string): boolean { + const effective = getEffectiveMembership(membership); + return effective === EffectiveMembership.Join || effective === EffectiveMembership.Invite; +} + export async function leaveRoomBehaviour(roomId: string) { let leavingAllVersions = true; const history = await MatrixClientPeg.get().getRoomUpgradeHistory(roomId); From a212dab84ccf5233514bc2a6d9e11b20fa31a5cb Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 17 Nov 2020 20:38:59 -0700 Subject: [PATCH 094/115] Developer design a permissions dialog --- res/css/_components.scss | 1 + .../_WidgetCapabilitiesPromptDialog.scss | 46 ++++ .../WidgetCapabilitiesPromptDialog.tsx | 252 ++++++++++++++++++ src/i18n/strings/en_EN.json | 34 ++- src/languageHandler.tsx | 4 +- src/stores/widgets/StopGapWidget.ts | 5 +- src/stores/widgets/StopGapWidgetDriver.ts | 68 +++-- src/utils/iterables.ts | 6 +- 8 files changed, 382 insertions(+), 34 deletions(-) create mode 100644 res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.scss create mode 100644 src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx diff --git a/res/css/_components.scss b/res/css/_components.scss index 002f95119d..2df4c98809 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -91,6 +91,7 @@ @import "./views/dialogs/_TermsDialog.scss"; @import "./views/dialogs/_UploadConfirmDialog.scss"; @import "./views/dialogs/_UserSettingsDialog.scss"; +@import "./views/dialogs/_WidgetCapabilitiesPromptDialog.scss"; @import "./views/dialogs/_WidgetOpenIDPermissionsDialog.scss"; @import "./views/dialogs/security/_AccessSecretStorageDialog.scss"; @import "./views/dialogs/security/_CreateCrossSigningDialog.scss"; diff --git a/res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.scss b/res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.scss new file mode 100644 index 0000000000..bd39bb8989 --- /dev/null +++ b/res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.scss @@ -0,0 +1,46 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +.mx_WidgetCapabilitiesPromptDialog { + .mx_Dialog_content { + margin-bottom: 16px; + } + + .mx_WidgetCapabilitiesPromptDialog_cap { + margin-top: 8px; + + .mx_WidgetCapabilitiesPromptDialog_byline { + color: $muted-fg-color; + margin-left: 26px; + } + } + + .mx_SettingsFlag { + margin-top: 24px; + + .mx_ToggleSwitch { + display: inline-block; + vertical-align: middle; + margin-right: 8px; + } + + .mx_SettingsFlag_label { + display: inline-block; + vertical-align: middle; + } + } +} diff --git a/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx b/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx new file mode 100644 index 0000000000..7e332e6e9d --- /dev/null +++ b/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx @@ -0,0 +1,252 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React from 'react'; +import BaseDialog from "./BaseDialog"; +import { _t, _td, TranslatedString } from "../../../languageHandler"; +import { IDialogProps } from "./IDialogProps"; +import { Capability, EventDirection, MatrixCapabilities, Widget, WidgetEventCapability } from "matrix-widget-api"; +import { objectShallowClone } from "../../../utils/objects"; +import { ElementWidgetCapabilities } from "../../../stores/widgets/ElementWidgetCapabilities"; +import { EventType, MsgType } from "matrix-js-sdk/lib/@types/event"; +import StyledCheckbox from "../elements/StyledCheckbox"; +import DialogButtons from "../elements/DialogButtons"; +import LabelledToggleSwitch from "../elements/LabelledToggleSwitch"; + +// TODO: These messaging things can probably get their own store of some sort +const SIMPLE_CAPABILITY_MESSAGES = { + [MatrixCapabilities.AlwaysOnScreen]: _td("Remain on your screen while running"), + [MatrixCapabilities.StickerSending]: _td("Send stickers into your active room"), + [ElementWidgetCapabilities.CanChangeViewedRoom]: _td("Change which room you're viewing"), +}; +const SEND_RECV_EVENT_CAPABILITY_MESSAGES = { + [EventType.RoomTopic]: { + // TODO: We probably want to say "this room" when we can + [EventDirection.Send]: _td("Change the topic of your active room"), + [EventDirection.Receive]: _td("See when the topic changes in your active room"), + }, + [EventType.RoomName]: { + [EventDirection.Send]: _td("Change the name of your active room"), + [EventDirection.Receive]: _td("See when the name changes in your active room"), + }, + [EventType.RoomAvatar]: { + [EventDirection.Send]: _td("Change the avatar of your active room"), + [EventDirection.Receive]: _td("See when the avatar changes in your active room"), + }, + // TODO: Add more as needed +}; +function textForEventCapabilitiy(cap: WidgetEventCapability): { primary: TranslatedString, byline: TranslatedString } { + let primary: TranslatedString; + let byline: TranslatedString; + + if (cap.isState) { + byline = cap.keyStr + ? _t("with state key %(stateKey)s", {stateKey: cap.keyStr}) + : _t("with an empty state key"); + } + + const srMessages = SEND_RECV_EVENT_CAPABILITY_MESSAGES[cap.eventType]; + if (srMessages && srMessages[cap.direction]) { + primary = _t(srMessages[cap.direction]); + } else { + if (cap.eventType === EventType.RoomMessage) { + if (cap.direction === EventDirection.Receive) { + if (!cap.keyStr) { + primary = _t("See messages sent in your active room"); + } else { + if (cap.keyStr === MsgType.Text) { + primary = _t("See text messages sent in your active room"); + } else if (cap.keyStr === MsgType.Emote) { + primary = _t("See emotes sent in your active room"); + } else if (cap.keyStr === MsgType.Image) { + primary = _t("See images sent in your active room"); + } else if (cap.keyStr === MsgType.Video) { + primary = _t("See videos sent in your active room"); + } else if (cap.keyStr === MsgType.File) { + primary = _t("See general files sent in your active room"); + } else { + primary = _t( + "See %(msgtype)s messages sent in your active room", + {msgtype: cap.keyStr}, {code: sub => {sub}}, + ); + } + } + } else { + if (!cap.keyStr) { + primary = _t("Send messages as you in your active room"); + } else { + if (cap.keyStr === MsgType.Text) { + primary = _t("Send text messages as you in your active room"); + } else if (cap.keyStr === MsgType.Emote) { + primary = _t("Send emotes as you in your active room"); + } else if (cap.keyStr === MsgType.Image) { + primary = _t("Send images as you in your active room"); + } else if (cap.keyStr === MsgType.Video) { + primary = _t("Send videos as you in your active room"); + } else if (cap.keyStr === MsgType.File) { + primary = _t("Send general files as you in your active room"); + } else { + primary = _t( + "Send %(msgtype)s messages as you in your active room", + {msgtype: cap.keyStr}, {code: sub => {sub}}, + ); + } + } + } + } else { + if (cap.direction === EventDirection.Receive) { + primary = _t( + "See %(eventType)s events sent in your active room", + {eventType: cap.eventType}, {code: sub => {sub}}, + ); + } else { + primary = _t( + "Send %(eventType)s events as you in your active room", + {eventType: cap.eventType}, {code: sub => {sub}}, + ); + } + } + } + + return {primary, byline}; +} + +export function getRememberedCapabilitiesForWidget(widget: Widget): Capability[] { + return JSON.parse(localStorage.getItem(`widget_${widget.id}_approved_caps`) || "[]"); +} + +function setRememberedCapabilitiesForWidget(widget: Widget, caps: Capability[]) { + localStorage.setItem(`widget_${widget.id}_approved_caps`, JSON.stringify(caps)); +} + +interface IProps extends IDialogProps { + requestedCapabilities: Set; + widget: Widget; +} + +interface IBooleanStates { + // @ts-ignore - TS wants a string key, but we know better + [capability: Capability]: boolean; +} + +interface IState { + booleanStates: IBooleanStates; + rememberSelection: boolean; +} + +export default class WidgetCapabilitiesPromptDialog extends React.PureComponent { + private eventPermissionsMap = new Map(); + + constructor(props: IProps) { + super(props); + + const parsedEvents = WidgetEventCapability.findEventCapabilities(this.props.requestedCapabilities); + parsedEvents.forEach(e => this.eventPermissionsMap.set(e.raw, e)); + + const states: IBooleanStates = {}; + this.props.requestedCapabilities.forEach(c => states[c] = true); + + this.state = { + booleanStates: states, + rememberSelection: true, + }; + } + + private onToggle = (capability: Capability) => { + const newStates = objectShallowClone(this.state.booleanStates); + newStates[capability] = !newStates[capability]; + this.setState({booleanStates: newStates}); + }; + + private onRememberSelectionChange = (newVal: boolean) => { + this.setState({rememberSelection: newVal}); + }; + + private onSubmit = async (ev) => { + this.closeAndTryRemember(Object.entries(this.state.booleanStates) + .filter(([_, isSelected]) => isSelected) + .map(([cap]) => cap)); + }; + + private onReject = async (ev) => { + this.closeAndTryRemember([]); // nothing was approved + }; + + private closeAndTryRemember(approved: Capability[]) { + if (this.state.rememberSelection) { + setRememberedCapabilitiesForWidget(this.props.widget, approved); + } + this.props.onFinished({approved}); + } + + public render() { + const checkboxRows = Object.entries(this.state.booleanStates).map(([cap, isChecked], i) => { + const evCap = this.eventPermissionsMap.get(cap); + + let text: TranslatedString; + let byline: TranslatedString; + if (evCap) { + const t = textForEventCapabilitiy(evCap); + text = t.primary; + byline = t.byline; + } else if (SIMPLE_CAPABILITY_MESSAGES[cap]) { + text = _t(SIMPLE_CAPABILITY_MESSAGES[cap]); + } else { + text = _t( + "The %(capability)s capability", + {capability: cap}, {code: sub => {sub}}, + ); + } + + return ( +
+ this.onToggle(cap)} + >{text} + {byline ? {byline} : null} +
+ ); + }); + + return ( + + +
+ {_t("This widget would like to:")} + {checkboxRows} + + +
+ +
+ ); + } +} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index e6ba79295e..d17da7be15 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2123,9 +2123,41 @@ "Upload Error": "Upload Error", "Verify other session": "Verify other session", "Verification Request": "Verification Request", + "Remain on your screen while running": "Remain on your screen while running", + "Send stickers into your active room": "Send stickers into your active room", + "Change which room you're viewing": "Change which room you're viewing", + "Change the topic of your active room": "Change the topic of your active room", + "See when the topic changes in your active room": "See when the topic changes in your active room", + "Change the name of your active room": "Change the name of your active room", + "See when the name changes in your active room": "See when the name changes in your active room", + "Change the avatar of your active room": "Change the avatar of your active room", + "See when the avatar changes in your active room": "See when the avatar changes in your active room", + "with state key %(stateKey)s": "with state key %(stateKey)s", + "with an empty state key": "with an empty state key", + "See messages sent in your active room": "See messages sent in your active room", + "See text messages sent in your active room": "See text messages sent in your active room", + "See emotes sent in your active room": "See emotes sent in your active room", + "See images sent in your active room": "See images sent in your active room", + "See videos sent in your active room": "See videos sent in your active room", + "See general files sent in your active room": "See general files sent in your active room", + "See %(msgtype)s messages sent in your active room": "See %(msgtype)s messages sent in your active room", + "Send messages as you in your active room": "Send messages as you in your active room", + "Send text messages as you in your active room": "Send text messages as you in your active room", + "Send emotes as you in your active room": "Send emotes as you in your active room", + "Send images as you in your active room": "Send images as you in your active room", + "Send videos as you in your active room": "Send videos as you in your active room", + "Send general files as you in your active room": "Send general files as you in your active room", + "Send %(msgtype)s messages as you in your active room": "Send %(msgtype)s messages as you in your active room", + "See %(eventType)s events sent in your active room": "See %(eventType)s events sent in your active room", + "Send %(eventType)s events as you in your active room": "Send %(eventType)s events as you in your active room", + "The %(capability)s capability": "The %(capability)s capability", + "Approve widget permissions": "Approve widget permissions", + "This widget would like to:": "This widget would like to:", + "Remember my selection for this widget": "Remember my selection for this widget", + "Approve": "Approve", + "Decline All": "Decline All", "A widget would like to verify your identity": "A widget would like to verify your identity", "A widget located at %(widgetUrl)s would like to verify your identity. By allowing this, the widget will be able to verify your user ID, but not perform actions as you.": "A widget located at %(widgetUrl)s would like to verify your identity. By allowing this, the widget will be able to verify your user ID, but not perform actions as you.", - "Remember my selection for this widget": "Remember my selection for this widget", "Allow": "Allow", "Deny": "Deny", "Wrong file type": "Wrong file type", diff --git a/src/languageHandler.tsx b/src/languageHandler.tsx index 0921b65137..b61f57d4b3 100644 --- a/src/languageHandler.tsx +++ b/src/languageHandler.tsx @@ -103,6 +103,8 @@ export interface IVariables { type Tags = Record React.ReactNode>; +export type TranslatedString = string | React.ReactNode; + /* * Translates text and optionally also replaces XML-ish elements in the text with e.g. React components * @param {string} text The untranslated text, e.g "click here now to %(foo)s". @@ -121,7 +123,7 @@ type Tags = Record React.ReactNode>; */ export function _t(text: string, variables?: IVariables): string; export function _t(text: string, variables: IVariables, tags: Tags): React.ReactNode; -export function _t(text: string, variables?: IVariables, tags?: Tags): string | React.ReactNode { +export function _t(text: string, variables?: IVariables, tags?: Tags): TranslatedString { // Don't do substitutions in counterpart. We handle it ourselves so we can replace with React components // However, still pass the variables to counterpart so that it can choose the correct plural if count is given // It is enough to pass the count variable, but in the future counterpart might make use of other information too diff --git a/src/stores/widgets/StopGapWidget.ts b/src/stores/widgets/StopGapWidget.ts index 73399a5086..aed07ea32b 100644 --- a/src/stores/widgets/StopGapWidget.ts +++ b/src/stores/widgets/StopGapWidget.ts @@ -32,7 +32,8 @@ import { Widget, WidgetApiToWidgetAction, WidgetApiFromWidgetAction, - IModalWidgetOpenRequest, IWidgetApiErrorResponseData, + IModalWidgetOpenRequest, + IWidgetApiErrorResponseData, } from "matrix-widget-api"; import { StopGapWidgetDriver } from "./StopGapWidgetDriver"; import { EventEmitter } from "events"; @@ -302,7 +303,7 @@ export class StopGapWidget extends EventEmitter { public start(iframe: HTMLIFrameElement) { if (this.started) return; const allowedCapabilities = this.appTileProps.whitelistCapabilities || []; - const driver = new StopGapWidgetDriver( allowedCapabilities, this.mockWidget.type); + const driver = new StopGapWidgetDriver( allowedCapabilities, this.mockWidget); this.messaging = new ClientWidgetApi(this.mockWidget, iframe, driver); this.messaging.on("preparing", () => this.emit("preparing")); this.messaging.on("ready", () => this.emit("ready")); diff --git a/src/stores/widgets/StopGapWidgetDriver.ts b/src/stores/widgets/StopGapWidgetDriver.ts index e2dbf3568e..99b6aacb26 100644 --- a/src/stores/widgets/StopGapWidgetDriver.ts +++ b/src/stores/widgets/StopGapWidgetDriver.ts @@ -14,47 +14,57 @@ * limitations under the License. */ -import { Capability, ISendEventDetails, WidgetDriver, WidgetEventCapability, WidgetType } from "matrix-widget-api"; -import { iterableUnion } from "../../utils/iterables"; +import { + Capability, + ISendEventDetails, + MatrixCapabilities, Widget, + WidgetDriver, +} from "matrix-widget-api"; +import { iterableDiff, iterableUnion } from "../../utils/iterables"; import { MatrixClientPeg } from "../../MatrixClientPeg"; -import { arrayFastClone } from "../../utils/arrays"; -import { ElementWidgetCapabilities } from "./ElementWidgetCapabilities"; import ActiveRoomObserver from "../../ActiveRoomObserver"; +import Modal from "../../Modal"; +import WidgetCapabilitiesPromptDialog, { getRememberedCapabilitiesForWidget } from "../../components/views/dialogs/WidgetCapabilitiesPromptDialog"; // TODO: Purge this from the universe export class StopGapWidgetDriver extends WidgetDriver { - constructor(private allowedCapabilities: Capability[], private forType: WidgetType) { + private allowedCapabilities: Set; + + constructor(allowedCapabilities: Capability[], private forWidget: Widget) { super(); + + // Always allow screenshots to be taken because it's a client-induced flow. The widget can't + // spew screenshots at us and can't request screenshots of us, so it's up to us to provide the + // button if the widget says it supports screenshots. + this.allowedCapabilities = new Set([...allowedCapabilities, MatrixCapabilities.Screenshots]); } public async validateCapabilities(requested: Set): Promise> { - // TODO: All of this should be a capabilities prompt. - // See https://github.com/vector-im/element-web/issues/13111 - - // Note: None of this well-known widget permissions stuff is documented intentionally. We - // do not want to encourage people relying on this, but need to be able to support it at - // the moment. - // - // If you're a widget developer and seeing this message, please ask the Element team if - // it is safe for you to use this permissions system before trying to use it - it might - // not be here in the future. - - const wkPerms = (MatrixClientPeg.get().getClientWellKnown() || {})['io.element.widget_permissions']; - const allowedCaps = arrayFastClone(this.allowedCapabilities); - if (wkPerms) { - if (Array.isArray(wkPerms["view_room_action"])) { - if (wkPerms["view_room_action"].includes(this.forType)) { - allowedCaps.push(ElementWidgetCapabilities.CanChangeViewedRoom); - } - } - if (Array.isArray(wkPerms["event_actions"])) { - if (wkPerms["event_actions"].includes(this.forType)) { - allowedCaps.push(...WidgetEventCapability.findEventCapabilities(requested).map(c => c.raw)); - } + // Check to see if any capabilities aren't automatically accepted (such as sticker pickers + // allowing stickers to be sent). If there are excess capabilities to be approved, the user + // will be prompted to accept them. + const diff = iterableDiff(requested, this.allowedCapabilities); + const missing = new Set(diff.removed); // "removed" is "in A (requested) but not in B (allowed)" + const allowedSoFar = new Set(this.allowedCapabilities); + getRememberedCapabilitiesForWidget(this.forWidget).forEach(cap => allowedSoFar.add(cap)); + // TODO: Do something when the widget requests new capabilities not yet asked for + if (missing.size > 0) { + try { + const [result] = await Modal.createTrackedDialog( + 'Approve Widget Caps', '', + WidgetCapabilitiesPromptDialog, + { + requestedCapabilities: missing, + widget: this.forWidget, + }).finished; + (result.approved || []).forEach(cap => allowedSoFar.add(cap)); + } catch (e) { + console.error("Non-fatal error getting capabilities: ", e); } } - return new Set(iterableUnion(requested, allowedCaps)); + + return new Set(iterableUnion(allowedSoFar, requested)); } public async sendEvent(eventType: string, content: any, stateKey: string = null): Promise { diff --git a/src/utils/iterables.ts b/src/utils/iterables.ts index 56e0bca1b7..7883b2257a 100644 --- a/src/utils/iterables.ts +++ b/src/utils/iterables.ts @@ -14,8 +14,12 @@ * limitations under the License. */ -import { arrayUnion } from "./arrays"; +import { arrayDiff, arrayUnion } from "./arrays"; export function iterableUnion(a: Iterable, b: Iterable): Iterable { return arrayUnion(Array.from(a), Array.from(b)); } + +export function iterableDiff(a: Iterable, b: Iterable): { added: Iterable, removed: Iterable } { + return arrayDiff(Array.from(a), Array.from(b)); +} From 3ee25dadd46fb4b38b5fa582a52c1d656e9b1c66 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 18 Nov 2020 13:09:43 +0000 Subject: [PATCH 095/115] Shrink new room intro top margin to half for encryption bubble tile --- res/css/views/rooms/_NewRoomIntro.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/css/views/rooms/_NewRoomIntro.scss b/res/css/views/rooms/_NewRoomIntro.scss index af72a0dd69..4322ba341c 100644 --- a/res/css/views/rooms/_NewRoomIntro.scss +++ b/res/css/views/rooms/_NewRoomIntro.scss @@ -15,7 +15,7 @@ limitations under the License. */ .mx_NewRoomIntro { - margin: 80px 0 48px 64px; + margin: 40px 0 48px 64px; .mx_MiniAvatarUploader_hasAvatar:not(.mx_MiniAvatarUploader_busy):not(:hover) { &::before, &::after { From 37bd251ecfd4ce48b3565a2e8b130ce90a3a2602 Mon Sep 17 00:00:00 2001 From: XoseM Date: Wed, 18 Nov 2020 11:15:55 +0000 Subject: [PATCH 096/115] Translated using Weblate (Galician) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index a674d16407..4f9a6f34b4 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2841,5 +2841,9 @@ "El Salvador": "O Salvador", "Egypt": "Exipto", "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|one": "Conservar na memoria local as mensaxes cifradas de xeito seguro para que aparezan nas buscas, usando %(size)s para gardar mensaxes de %(count)s sala.", - "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Conservar na memoria local as mensaxes cifradas de xeito seguro para que aparezan nas buscas, usando %(size)s para gardar mensaxes de %(count)s salas." + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Conservar na memoria local as mensaxes cifradas de xeito seguro para que aparezan nas buscas, usando %(size)s para gardar mensaxes de %(count)s salas.", + "Filter rooms and people": "Fitrar salas e persoas", + "Open the link in the email to continue registration.": "Abre a ligazón que hai no email para continuar co rexistro.", + "A confirmation email has been sent to %(emailAddress)s": "Enviouse un email de confirmación a %(emailAddress)s", + "Start a new chat": "Comezar nova conversa" } From 760cb8e00af3a6b47dad9f3a5c2fc7ce679e0843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Wed, 18 Nov 2020 10:32:52 +0000 Subject: [PATCH 097/115] Translated using Weblate (Estonian) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 5546fa2b36..ff95a95ffe 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -2842,5 +2842,9 @@ "Places the call in the current room on hold": "Jätab kõne selles jututoas ootele", "Role": "Roll", "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|one": "Selleks, et sisu saaks otsingus kasutada, puhverda krüptitud sõnumid kohalikus seadmes turvaliselt. %(count)s jututoa andmete salvestamiseks kulub hetkel %(size)s.", - "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Selleks, et sisu saaks otsingus kasutada, puhverda krüptitud sõnumid kohalikus seadmes turvaliselt. %(count)s jututoa andmete salvestamiseks kulub hetkel %(size)s." + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Selleks, et sisu saaks otsingus kasutada, puhverda krüptitud sõnumid kohalikus seadmes turvaliselt. %(count)s jututoa andmete salvestamiseks kulub hetkel %(size)s.", + "Filter rooms and people": "Otsi jututubasid ja inimesi", + "Open the link in the email to continue registration.": "Registreerimisega jätkamiseks vajuta e-kirjas olevat linki.", + "A confirmation email has been sent to %(emailAddress)s": "Saatsime kinnituskirja %(emailAddress)s aadressile", + "Start a new chat": "Alusta uut vestlust" } From a2a07b528a2a43187680fa51b648811349b07a0a Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Wed, 18 Nov 2020 14:46:46 +0000 Subject: [PATCH 098/115] Fix message search summary text This repairs the message search summary text, which regressed in https://github.com/matrix-org/matrix-react-sdk/pull/5416. We can't use the `one` / `other` syntax here since there are two numbers and they are both strings. Fixes https://github.com/vector-im/element-web/issues/15766 --- src/i18n/strings/en_EN.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 40356b11d5..12baf4c60d 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -935,8 +935,7 @@ "Failed to set display name": "Failed to set display name", "Encryption": "Encryption", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.", - "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.", - "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|one": "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s room.", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.": "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.", "Manage": "Manage", "Securely cache encrypted messages locally for them to appear in search results.": "Securely cache encrypted messages locally for them to appear in search results.", "%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with search components added.": "%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with search components added.", From 95a436cdafb14cb2b50586fcff58409544e4460f Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Wed, 18 Nov 2020 14:49:52 +0000 Subject: [PATCH 099/115] Use room(s) style in message --- src/components/views/settings/EventIndexPanel.js | 4 ++-- src/i18n/strings/en_EN.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/views/settings/EventIndexPanel.js b/src/components/views/settings/EventIndexPanel.js index 1fe18cb207..7391fd479e 100644 --- a/src/components/views/settings/EventIndexPanel.js +++ b/src/components/views/settings/EventIndexPanel.js @@ -130,10 +130,10 @@ export default class EventIndexPanel extends React.Component {
{_t("Securely cache encrypted messages locally for them " + - "to appear in search results, using %(size)s to store messages from %(count)s rooms.", + "to appear in search results, using %(size)s to store messages from %(rooms)s room(s).", { size: formatBytes(this.state.eventIndexSize, 0), - count: formatCountLong(this.state.roomCount), + rooms: formatCountLong(this.state.roomCount), }, )}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 12baf4c60d..fd61b214ea 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -935,7 +935,7 @@ "Failed to set display name": "Failed to set display name", "Encryption": "Encryption", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.", - "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.": "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s room(s).": "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s room(s).", "Manage": "Manage", "Securely cache encrypted messages locally for them to appear in search results.": "Securely cache encrypted messages locally for them to appear in search results.", "%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with search components added.": "%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with search components added.", From 14e64c10a30a0ad1481ac0043e7867efbe640de6 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Wed, 18 Nov 2020 15:16:35 +0000 Subject: [PATCH 100/115] Restore numeric count as well for better pluralisation --- src/components/views/settings/EventIndexPanel.js | 5 ++++- src/i18n/strings/en_EN.json | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/views/settings/EventIndexPanel.js b/src/components/views/settings/EventIndexPanel.js index 7391fd479e..ec6ccacc9a 100644 --- a/src/components/views/settings/EventIndexPanel.js +++ b/src/components/views/settings/EventIndexPanel.js @@ -130,9 +130,12 @@ export default class EventIndexPanel extends React.Component {
{_t("Securely cache encrypted messages locally for them " + - "to appear in search results, using %(size)s to store messages from %(rooms)s room(s).", + "to appear in search results, using %(size)s to store messages from %(rooms)s rooms.", { size: formatBytes(this.state.eventIndexSize, 0), + // This drives the singular / plural string + // selection for "room" / "rooms" only. + count: this.state.roomCount, rooms: formatCountLong(this.state.roomCount), }, )} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index fd61b214ea..23047cbdb8 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -935,7 +935,8 @@ "Failed to set display name": "Failed to set display name", "Encryption": "Encryption", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.", - "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s room(s).": "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s room(s).", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|other": "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.", + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|one": "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s room.", "Manage": "Manage", "Securely cache encrypted messages locally for them to appear in search results.": "Securely cache encrypted messages locally for them to appear in search results.", "%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with search components added.": "%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with search components added.", From e4e6254c8d475f3357655d027dc6dd9fea88b075 Mon Sep 17 00:00:00 2001 From: random Date: Wed, 18 Nov 2020 15:00:18 +0000 Subject: [PATCH 101/115] Translated using Weblate (Italian) Currently translated at 100.0% (2642 of 2642 strings) Translation: Element Web/matrix-react-sdk Translate-URL: https://translate.element.io/projects/element-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index c0f6fecfea..4b5b85d415 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2844,5 +2844,9 @@ "United Kingdom": "Regno Unito", "Role": "Ruolo", "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|one": "Salva in cache i messaggi cifrati localmente in modo che appaiano nei risultati di ricerca, usando %(size)s per salvarli da %(count)s stanza.", - "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Salva in cache i messaggi cifrati localmente in modo che appaiano nei risultati di ricerca, usando %(size)s per salvarli da %(count)s stanze." + "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(count)s rooms.|other": "Salva in cache i messaggi cifrati localmente in modo che appaiano nei risultati di ricerca, usando %(size)s per salvarli da %(count)s stanze.", + "Filter rooms and people": "Filtra stanze e persone", + "Open the link in the email to continue registration.": "Apri il link nell'email per continuare la registrazione.", + "A confirmation email has been sent to %(emailAddress)s": "È stata inviata un'email di conferma a %(emailAddress)s", + "Start a new chat": "Inizia una nuova chat" } From f7e2d70ddf3d511f6f6c6c3a3befcbedab485f33 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Wed, 18 Nov 2020 17:41:54 +0000 Subject: [PATCH 102/115] Tweak video component code style --- src/components/views/messages/MVideoBody.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/views/messages/MVideoBody.tsx b/src/components/views/messages/MVideoBody.tsx index fb987a4f0d..671633be9e 100644 --- a/src/components/views/messages/MVideoBody.tsx +++ b/src/components/views/messages/MVideoBody.tsx @@ -71,7 +71,7 @@ export default class MVideoBody extends React.PureComponent { } } - _getContentUrl(): string|null { + private getContentUrl(): string|null { const content = this.props.mxEvent.getContent(); if (content.file !== undefined) { return this.state.decryptedUrl; @@ -80,7 +80,7 @@ export default class MVideoBody extends React.PureComponent { } } - _getThumbUrl(): string|null { + private getThumbUrl(): string|null { const content = this.props.mxEvent.getContent(); if (content.file !== undefined) { return this.state.decryptedThumbnailUrl; @@ -142,8 +142,8 @@ export default class MVideoBody extends React.PureComponent { } } - async _videoOnPlay() { - if (this._getContentUrl() || this.state.fetchingData || this.state.error) { + private videoOnPlay = async () => { + if (this.getContentUrl() || this.state.fetchingData || this.state.error) { // We have the file, we are fetching the file, or there is an error. return; } @@ -195,8 +195,8 @@ export default class MVideoBody extends React.PureComponent { ); } - const contentUrl = this._getContentUrl(); - const thumbUrl = this._getThumbUrl(); + const contentUrl = this.getContentUrl(); + const thumbUrl = this.getThumbUrl(); let height = null; let width = null; let poster = null; @@ -217,7 +217,7 @@ export default class MVideoBody extends React.PureComponent { From 14391a7295a13a1bd810b2cb131d84097fcc80e7 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 19 Nov 2020 11:11:57 +0000 Subject: [PATCH 103/115] Post-merge fix --- src/components/views/elements/MiniAvatarUploader.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/views/elements/MiniAvatarUploader.tsx b/src/components/views/elements/MiniAvatarUploader.tsx index b5e117b42a..8517da6dfb 100644 --- a/src/components/views/elements/MiniAvatarUploader.tsx +++ b/src/components/views/elements/MiniAvatarUploader.tsx @@ -21,6 +21,8 @@ import AccessibleButton from "./AccessibleButton"; import Tooltip from './Tooltip'; import MatrixClientContext from "../../../contexts/MatrixClientContext"; import {useTimeout} from "../../../hooks/useTimeout"; +import Analytics from "../../../Analytics"; +import CountlyAnalytics from '../../../CountlyAnalytics'; export const AVATAR_SIZE = 52; @@ -56,6 +58,8 @@ const MiniAvatarUploader: React.FC = ({ hasAvatar, hasAvatarLabel, noAva onChange={async (ev) => { if (!ev.target.files?.length) return; setBusy(true); + Analytics.trackEvent("mini_avatar", "upload"); + CountlyAnalytics.instance.track("mini_avatar_upload"); const file = ev.target.files[0]; const uri = await cli.uploadContent(file); await setAvatarUrl(uri); From 3e85b6d0852abc6c367ca6c309a1b534960810ae Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Thu, 19 Nov 2020 13:26:14 +0000 Subject: [PATCH 104/115] Fix encrypted video playback in Chrome-based browsers For Chrome-based browsers, it seems we need to set some non-empty `src` URI for the video element's play button to be enabled, so this crafts an empty `data` URI and ensures playing is triggered once the real content has been fetched. Fixes https://github.com/vector-im/element-web/issues/15694 Regressed by https://github.com/matrix-org/matrix-react-sdk/pull/5352 --- src/components/views/messages/MVideoBody.tsx | 34 +++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/src/components/views/messages/MVideoBody.tsx b/src/components/views/messages/MVideoBody.tsx index 671633be9e..9628f11809 100644 --- a/src/components/views/messages/MVideoBody.tsx +++ b/src/components/views/messages/MVideoBody.tsx @@ -39,6 +39,8 @@ interface IState { } export default class MVideoBody extends React.PureComponent { + private videoRef = React.createRef(); + constructor(props) { super(props); this.state = { @@ -80,6 +82,11 @@ export default class MVideoBody extends React.PureComponent { } } + private hasContentUrl(): boolean { + const url = this.getContentUrl(); + return url && !url.startsWith("data:"); + } + private getThumbUrl(): string|null { const content = this.props.mxEvent.getContent(); if (content.file !== undefined) { @@ -118,7 +125,10 @@ export default class MVideoBody extends React.PureComponent { } else { console.log("NOT preloading video"); this.setState({ - decryptedUrl: null, + // For Chrome and Electron, we need to set some non-empty `src` to + // enable the play button. Firefox does not seem to care either + // way, so it's fine to do for all browsers. + decryptedUrl: `data:${content?.info?.mimetype},`, decryptedThumbnailUrl: thumbnailUrl, decryptedBlob: null, }); @@ -143,7 +153,7 @@ export default class MVideoBody extends React.PureComponent { } private videoOnPlay = async () => { - if (this.getContentUrl() || this.state.fetchingData || this.state.error) { + if (this.hasContentUrl() || this.state.fetchingData || this.state.error) { // We have the file, we are fetching the file, or there is an error. return; } @@ -164,6 +174,9 @@ export default class MVideoBody extends React.PureComponent { decryptedUrl: contentUrl, decryptedBlob: decryptedBlob, fetchingData: false, + }, () => { + if (!this.videoRef.current) return; + this.videoRef.current.play(); }); this.props.onHeightChanged(); } @@ -215,9 +228,20 @@ export default class MVideoBody extends React.PureComponent { } return ( - From ddd8bdc00e3fb966ec919c0b93e0785879d2d00f Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 19 Nov 2020 11:15:42 -0700 Subject: [PATCH 105/115] Move all the capability copy to its own class --- .../WidgetCapabilitiesPromptDialog.tsx | 135 +------ src/i18n/strings/en_EN.json | 84 +++-- src/widgets/CapabilityText.tsx | 342 ++++++++++++++++++ 3 files changed, 413 insertions(+), 148 deletions(-) create mode 100644 src/widgets/CapabilityText.tsx diff --git a/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx b/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx index 7e332e6e9d..9e2481f524 100644 --- a/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx +++ b/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx @@ -16,113 +16,19 @@ limitations under the License. import React from 'react'; import BaseDialog from "./BaseDialog"; -import { _t, _td, TranslatedString } from "../../../languageHandler"; +import { _t } from "../../../languageHandler"; import { IDialogProps } from "./IDialogProps"; -import { Capability, EventDirection, MatrixCapabilities, Widget, WidgetEventCapability } from "matrix-widget-api"; +import { + Capability, + Widget, + WidgetEventCapability, + WidgetKind +} from "matrix-widget-api"; import { objectShallowClone } from "../../../utils/objects"; -import { ElementWidgetCapabilities } from "../../../stores/widgets/ElementWidgetCapabilities"; -import { EventType, MsgType } from "matrix-js-sdk/lib/@types/event"; import StyledCheckbox from "../elements/StyledCheckbox"; import DialogButtons from "../elements/DialogButtons"; import LabelledToggleSwitch from "../elements/LabelledToggleSwitch"; - -// TODO: These messaging things can probably get their own store of some sort -const SIMPLE_CAPABILITY_MESSAGES = { - [MatrixCapabilities.AlwaysOnScreen]: _td("Remain on your screen while running"), - [MatrixCapabilities.StickerSending]: _td("Send stickers into your active room"), - [ElementWidgetCapabilities.CanChangeViewedRoom]: _td("Change which room you're viewing"), -}; -const SEND_RECV_EVENT_CAPABILITY_MESSAGES = { - [EventType.RoomTopic]: { - // TODO: We probably want to say "this room" when we can - [EventDirection.Send]: _td("Change the topic of your active room"), - [EventDirection.Receive]: _td("See when the topic changes in your active room"), - }, - [EventType.RoomName]: { - [EventDirection.Send]: _td("Change the name of your active room"), - [EventDirection.Receive]: _td("See when the name changes in your active room"), - }, - [EventType.RoomAvatar]: { - [EventDirection.Send]: _td("Change the avatar of your active room"), - [EventDirection.Receive]: _td("See when the avatar changes in your active room"), - }, - // TODO: Add more as needed -}; -function textForEventCapabilitiy(cap: WidgetEventCapability): { primary: TranslatedString, byline: TranslatedString } { - let primary: TranslatedString; - let byline: TranslatedString; - - if (cap.isState) { - byline = cap.keyStr - ? _t("with state key %(stateKey)s", {stateKey: cap.keyStr}) - : _t("with an empty state key"); - } - - const srMessages = SEND_RECV_EVENT_CAPABILITY_MESSAGES[cap.eventType]; - if (srMessages && srMessages[cap.direction]) { - primary = _t(srMessages[cap.direction]); - } else { - if (cap.eventType === EventType.RoomMessage) { - if (cap.direction === EventDirection.Receive) { - if (!cap.keyStr) { - primary = _t("See messages sent in your active room"); - } else { - if (cap.keyStr === MsgType.Text) { - primary = _t("See text messages sent in your active room"); - } else if (cap.keyStr === MsgType.Emote) { - primary = _t("See emotes sent in your active room"); - } else if (cap.keyStr === MsgType.Image) { - primary = _t("See images sent in your active room"); - } else if (cap.keyStr === MsgType.Video) { - primary = _t("See videos sent in your active room"); - } else if (cap.keyStr === MsgType.File) { - primary = _t("See general files sent in your active room"); - } else { - primary = _t( - "See %(msgtype)s messages sent in your active room", - {msgtype: cap.keyStr}, {code: sub => {sub}}, - ); - } - } - } else { - if (!cap.keyStr) { - primary = _t("Send messages as you in your active room"); - } else { - if (cap.keyStr === MsgType.Text) { - primary = _t("Send text messages as you in your active room"); - } else if (cap.keyStr === MsgType.Emote) { - primary = _t("Send emotes as you in your active room"); - } else if (cap.keyStr === MsgType.Image) { - primary = _t("Send images as you in your active room"); - } else if (cap.keyStr === MsgType.Video) { - primary = _t("Send videos as you in your active room"); - } else if (cap.keyStr === MsgType.File) { - primary = _t("Send general files as you in your active room"); - } else { - primary = _t( - "Send %(msgtype)s messages as you in your active room", - {msgtype: cap.keyStr}, {code: sub => {sub}}, - ); - } - } - } - } else { - if (cap.direction === EventDirection.Receive) { - primary = _t( - "See %(eventType)s events sent in your active room", - {eventType: cap.eventType}, {code: sub => {sub}}, - ); - } else { - primary = _t( - "Send %(eventType)s events as you in your active room", - {eventType: cap.eventType}, {code: sub => {sub}}, - ); - } - } - } - - return {primary, byline}; -} +import { CapabilityText } from "../../../widgets/CapabilityText"; export function getRememberedCapabilitiesForWidget(widget: Widget): Capability[] { return JSON.parse(localStorage.getItem(`widget_${widget.id}_approved_caps`) || "[]"); @@ -135,6 +41,7 @@ function setRememberedCapabilitiesForWidget(widget: Widget, caps: Capability[]) interface IProps extends IDialogProps { requestedCapabilities: Set; widget: Widget; + widgetKind: WidgetKind; // TODO: Refactor into the Widget class } interface IBooleanStates { @@ -194,22 +101,10 @@ export default class WidgetCapabilitiesPromptDialog extends React.PureComponent< public render() { const checkboxRows = Object.entries(this.state.booleanStates).map(([cap, isChecked], i) => { - const evCap = this.eventPermissionsMap.get(cap); - - let text: TranslatedString; - let byline: TranslatedString; - if (evCap) { - const t = textForEventCapabilitiy(evCap); - text = t.primary; - byline = t.byline; - } else if (SIMPLE_CAPABILITY_MESSAGES[cap]) { - text = _t(SIMPLE_CAPABILITY_MESSAGES[cap]); - } else { - text = _t( - "The %(capability)s capability", - {capability: cap}, {code: sub => {sub}}, - ); - } + const text = CapabilityText.for(cap, this.props.widgetKind); + const byline = text.byline + ? {text.byline} + : null; return (
@@ -217,8 +112,8 @@ export default class WidgetCapabilitiesPromptDialog extends React.PureComponent< key={cap + i} checked={isChecked} onChange={() => this.onToggle(cap)} - >{text} - {byline ? {byline} : null} + >{text.primary} + {byline}
); }); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 046190c7af..03bdf512ee 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -569,6 +569,62 @@ "%(names)s and %(count)s others are typing …|other": "%(names)s and %(count)s others are typing …", "%(names)s and %(count)s others are typing …|one": "%(names)s and one other is typing …", "%(names)s and %(lastPerson)s are typing …": "%(names)s and %(lastPerson)s are typing …", + "Remain on your screen when you leave this room (when running)": "Remain on your screen when you leave this room (when running)", + "Remain on your screen while running": "Remain on your screen while running", + "Send stickers into this room": "Send stickers into this room", + "Send stickers into your active room": "Send stickers into your active room", + "Change which room you're viewing": "Change which room you're viewing", + "Change the topic of this room": "Change the topic of this room", + "See when the topic changes in this room": "See when the topic changes in this room", + "Change the topic of your active room": "Change the topic of your active room", + "See when the topic changes in your active room": "See when the topic changes in your active room", + "Change the name of this room": "Change the name of this room", + "See when the name changes in this room": "See when the name changes in this room", + "Change the name of your active room": "Change the name of your active room", + "See when the name changes in your active room": "See when the name changes in your active room", + "Change the avatar of this room": "Change the avatar of this room", + "See when the avatar changes in this room": "See when the avatar changes in this room", + "Change the avatar of your active room": "Change the avatar of your active room", + "See when the avatar changes in your active room": "See when the avatar changes in your active room", + "Send stickers to this room as you": "Send stickers to this room as you", + "See when a sticker is posted in this room": "See when a sticker is posted in this room", + "Send stickers to your active room as you": "Send stickers to your active room as you", + "See when anyone posts a sticker to your active room": "See when anyone posts a sticker to your active room", + "with an empty state key": "with an empty state key", + "with state key %(stateKey)s": "with state key %(stateKey)s", + "Send %(eventType)s events as you in this room": "Send %(eventType)s events as you in this room", + "See %(eventType)s events posted to this room": "See %(eventType)s events posted to this room", + "Send %(eventType)s events as you in your active room": "Send %(eventType)s events as you in your active room", + "See %(eventType)s events posted to your active room": "See %(eventType)s events posted to your active room", + "The %(capability)s capability": "The %(capability)s capability", + "Send messages as you in this room": "Send messages as you in this room", + "Send messages as you in your active room": "Send messages as you in your active room", + "See messages posted to this room": "See messages posted to this room", + "See messages posted to your active room": "See messages posted to your active room", + "Send text messages as you in this room": "Send text messages as you in this room", + "Send text messages as you in your active room": "Send text messages as you in your active room", + "See text messages posted to this room": "See text messages posted to this room", + "See text messages posted to your active room": "See text messages posted to your active room", + "Send emotes as you in this room": "Send emotes as you in this room", + "Send emotes as you in your active room": "Send emotes as you in your active room", + "See emotes posted to this room": "See emotes posted to this room", + "See emotes posted to your active room": "See emotes posted to your active room", + "Send images as you in this room": "Send images as you in this room", + "Send images as you in your active room": "Send images as you in your active room", + "See images posted to this room": "See images posted to this room", + "See images posted to your active room": "See images posted to your active room", + "Send videos as you in this room": "Send videos as you in this room", + "Send videos as you in your active room": "Send videos as you in your active room", + "See videos posted to this room": "See videos posted to this room", + "See videos posted to your active room": "See videos posted to your active room", + "Send general files as you in this room": "Send general files as you in this room", + "Send general files as you in your active room": "Send general files as you in your active room", + "See general files posted to this room": "See general files posted to this room", + "See general files posted to your active room": "See general files posted to your active room", + "Send %(msgtype)s messages as you in this room": "Send %(msgtype)s messages as you in this room", + "Send %(msgtype)s messages as you in your active room": "Send %(msgtype)s messages as you in your active room", + "See %(msgtype)s messages posted to this room": "See %(msgtype)s messages posted to this room", + "See %(msgtype)s messages posted to your active room": "See %(msgtype)s messages posted to your active room", "Cannot reach homeserver": "Cannot reach homeserver", "Ensure you have a stable internet connection, or get in touch with the server admin": "Ensure you have a stable internet connection, or get in touch with the server admin", "Your %(brand)s is misconfigured": "Your %(brand)s is misconfigured", @@ -2123,34 +2179,6 @@ "Upload Error": "Upload Error", "Verify other session": "Verify other session", "Verification Request": "Verification Request", - "Remain on your screen while running": "Remain on your screen while running", - "Send stickers into your active room": "Send stickers into your active room", - "Change which room you're viewing": "Change which room you're viewing", - "Change the topic of your active room": "Change the topic of your active room", - "See when the topic changes in your active room": "See when the topic changes in your active room", - "Change the name of your active room": "Change the name of your active room", - "See when the name changes in your active room": "See when the name changes in your active room", - "Change the avatar of your active room": "Change the avatar of your active room", - "See when the avatar changes in your active room": "See when the avatar changes in your active room", - "with state key %(stateKey)s": "with state key %(stateKey)s", - "with an empty state key": "with an empty state key", - "See messages sent in your active room": "See messages sent in your active room", - "See text messages sent in your active room": "See text messages sent in your active room", - "See emotes sent in your active room": "See emotes sent in your active room", - "See images sent in your active room": "See images sent in your active room", - "See videos sent in your active room": "See videos sent in your active room", - "See general files sent in your active room": "See general files sent in your active room", - "See %(msgtype)s messages sent in your active room": "See %(msgtype)s messages sent in your active room", - "Send messages as you in your active room": "Send messages as you in your active room", - "Send text messages as you in your active room": "Send text messages as you in your active room", - "Send emotes as you in your active room": "Send emotes as you in your active room", - "Send images as you in your active room": "Send images as you in your active room", - "Send videos as you in your active room": "Send videos as you in your active room", - "Send general files as you in your active room": "Send general files as you in your active room", - "Send %(msgtype)s messages as you in your active room": "Send %(msgtype)s messages as you in your active room", - "See %(eventType)s events sent in your active room": "See %(eventType)s events sent in your active room", - "Send %(eventType)s events as you in your active room": "Send %(eventType)s events as you in your active room", - "The %(capability)s capability": "The %(capability)s capability", "Approve widget permissions": "Approve widget permissions", "This widget would like to:": "This widget would like to:", "Remember my selection for this widget": "Remember my selection for this widget", diff --git a/src/widgets/CapabilityText.tsx b/src/widgets/CapabilityText.tsx new file mode 100644 index 0000000000..cb407dc686 --- /dev/null +++ b/src/widgets/CapabilityText.tsx @@ -0,0 +1,342 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { Capability, EventDirection, MatrixCapabilities, WidgetEventCapability, WidgetKind } from "matrix-widget-api"; +import { _t, _td, TranslatedString } from "../languageHandler"; +import { EventType, MsgType } from "matrix-js-sdk/src/@types/event"; +import { ElementWidgetCapabilities } from "../stores/widgets/ElementWidgetCapabilities"; +import React from "react"; + +type GENERIC_WIDGET_KIND = "generic"; +const GENERIC_WIDGET_KIND: GENERIC_WIDGET_KIND = "generic"; + +interface ISendRecvStaticCapText { + // @ts-ignore - TS wants the key to be a string, but we know better + [eventType: EventType]: { + // @ts-ignore - TS wants the key to be a string, but we know better + [widgetKind: WidgetKind | GENERIC_WIDGET_KIND]: { + // @ts-ignore - TS wants the key to be a string, but we know better + [direction: EventDirection]: string; + }; + }; +} + +interface IStaticCapText { + // @ts-ignore - TS wants the key to be a string, but we know better + [capability: Capability]: { + // @ts-ignore - TS wants the key to be a string, but we know better + [widgetKind: WidgetKind | GENERIC_WIDGET_KIND]: string; + }; +} + +export interface TranslatedCapabilityText { + primary: TranslatedString; + byline?: TranslatedString; +} + +export class CapabilityText { + private static simpleCaps: IStaticCapText = { + [MatrixCapabilities.AlwaysOnScreen]: { + [WidgetKind.Room]: _td("Remain on your screen when you leave this room (when running)"), + [GENERIC_WIDGET_KIND]: _td("Remain on your screen while running"), + }, + [MatrixCapabilities.StickerSending]: { + [WidgetKind.Room]: _td("Send stickers into this room"), + [GENERIC_WIDGET_KIND]: _td("Send stickers into your active room"), + }, + [ElementWidgetCapabilities.CanChangeViewedRoom]: { + [GENERIC_WIDGET_KIND]: _td("Change which room you're viewing"), + }, + }; + + private static stateSendRecvCaps: ISendRecvStaticCapText = { + [EventType.RoomTopic]: { + [WidgetKind.Room]: { + [EventDirection.Send]: _td("Change the topic of this room"), + [EventDirection.Receive]: _td("See when the topic changes in this room"), + }, + [GENERIC_WIDGET_KIND]: { + [EventDirection.Send]: _td("Change the topic of your active room"), + [EventDirection.Receive]: _td("See when the topic changes in your active room"), + }, + }, + [EventType.RoomName]: { + [WidgetKind.Room]: { + [EventDirection.Send]: _td("Change the name of this room"), + [EventDirection.Receive]: _td("See when the name changes in this room"), + }, + [GENERIC_WIDGET_KIND]: { + [EventDirection.Send]: _td("Change the name of your active room"), + [EventDirection.Receive]: _td("See when the name changes in your active room"), + }, + }, + [EventType.RoomAvatar]: { + [WidgetKind.Room]: { + [EventDirection.Send]: _td("Change the avatar of this room"), + [EventDirection.Receive]: _td("See when the avatar changes in this room"), + }, + [GENERIC_WIDGET_KIND]: { + [EventDirection.Send]: _td("Change the avatar of your active room"), + [EventDirection.Receive]: _td("See when the avatar changes in your active room"), + }, + }, + }; + + private static nonStateSendRecvCaps: ISendRecvStaticCapText = { + [EventType.Sticker]: { + [WidgetKind.Room]: { + [EventDirection.Send]: _td("Send stickers to this room as you"), + [EventDirection.Receive]: _td("See when a sticker is posted in this room"), + }, + [GENERIC_WIDGET_KIND]: { + [EventDirection.Send]: _td("Send stickers to your active room as you"), + [EventDirection.Receive]: _td("See when anyone posts a sticker to your active room"), + }, + }, + }; + + private static bylineFor(eventCap: WidgetEventCapability): TranslatedString { + if (eventCap.isState) { + return !eventCap.keyStr + ? _t("with an empty state key") + : _t("with state key %(stateKey)s", {stateKey: eventCap.keyStr}); + } + return null; // room messages are handled specially + } + + public static for(capability: Capability, kind: WidgetKind): TranslatedCapabilityText { + // First see if we have a super simple line of text to provide back + if (CapabilityText.simpleCaps[capability]) { + const textForKind = CapabilityText.simpleCaps[capability]; + if (textForKind[kind]) return {primary: _t(textForKind[kind])}; + if (textForKind[GENERIC_WIDGET_KIND]) return {primary: _t(textForKind[GENERIC_WIDGET_KIND])}; + + // ... we'll fall through to the generic capability processing at the end of this + // function if we fail to locate a simple string and the capability isn't for an + // event. + } + + // We didn't have a super simple line of text, so try processing the capability as the + // more complex event send/receive permission type. + const [eventCap] = WidgetEventCapability.findEventCapabilities([capability]); + if (eventCap) { + // Special case room messages so they show up a bit cleaner to the user. Result is + // effectively "Send images" instead of "Send messages... of type images" if we were + // to handle the msgtype nuances in this function. + if (!eventCap.isState && eventCap.eventType === EventType.RoomMessage) { + return CapabilityText.forRoomMessageCap(eventCap, kind); + } + + // See if we have a static line of text to provide for the given event type and + // direction. The hope is that we do for common event types for friendlier copy. + const evSendRecv = eventCap.isState + ? CapabilityText.stateSendRecvCaps + : CapabilityText.nonStateSendRecvCaps; + if (evSendRecv[eventCap.eventType]) { + const textForKind = evSendRecv[eventCap.eventType]; + const textForDirection = textForKind[kind] || textForKind[GENERIC_WIDGET_KIND]; + if (textForDirection && textForDirection[eventCap.direction]) { + return { + primary: _t(textForDirection[eventCap.direction]), + byline: CapabilityText.bylineFor(eventCap), + }; + } + } + + // We don't have anything simple, so just return a generic string for the event cap + if (kind === WidgetKind.Room) { + if (eventCap.direction === EventDirection.Send) { + return { + primary: _t("Send %(eventType)s events as you in this room", { + eventType: eventCap.eventType, + }, { + b: sub => {sub}, + }), + byline: CapabilityText.bylineFor(eventCap), + }; + } else { + return { + primary: _t("See %(eventType)s events posted to this room", { + eventType: eventCap.eventType, + }, { + b: sub => {sub}, + }), + byline: CapabilityText.bylineFor(eventCap), + }; + } + } else { // assume generic + if (eventCap.direction === EventDirection.Send) { + return { + primary: _t("Send %(eventType)s events as you in your active room", { + eventType: eventCap.eventType, + }, { + b: sub => {sub}, + }), + byline: CapabilityText.bylineFor(eventCap), + }; + } else { + return { + primary: _t("See %(eventType)s events posted to your active room", { + eventType: eventCap.eventType, + }, { + b: sub => {sub}, + }), + byline: CapabilityText.bylineFor(eventCap), + }; + } + } + } + + // We don't have enough context to render this capability specially, so we'll present it as-is + return { + primary: _t("The %(capability)s capability", {capability}, { + b: sub => {sub}, + }), + }; + } + + private static forRoomMessageCap(eventCap: WidgetEventCapability, kind: WidgetKind): TranslatedCapabilityText { + // First handle the case of "all messages" to make the switch later on a bit clearer + if (!eventCap.keyStr) { + if (eventCap.direction === EventDirection.Send) { + return { + primary: kind === WidgetKind.Room + ? _t("Send messages as you in this room") + : _t("Send messages as you in your active room"), + }; + } else { + return { + primary: kind === WidgetKind.Room + ? _t("See messages posted to this room") + : _t("See messages posted to your active room"), + }; + } + } + + // Now handle all the message types we care about. There are more message types available, however + // they are not as common so we don't bother rendering them. They'll fall into the generic case. + switch(eventCap.keyStr) { + case MsgType.Text: { + if (eventCap.direction === EventDirection.Send) { + return { + primary: kind === WidgetKind.Room + ? _t("Send text messages as you in this room") + : _t("Send text messages as you in your active room"), + }; + } else { + return { + primary: kind === WidgetKind.Room + ? _t("See text messages posted to this room") + : _t("See text messages posted to your active room"), + }; + } + } + case MsgType.Emote: { + if (eventCap.direction === EventDirection.Send) { + return { + primary: kind === WidgetKind.Room + ? _t("Send emotes as you in this room") + : _t("Send emotes as you in your active room"), + }; + } else { + return { + primary: kind === WidgetKind.Room + ? _t("See emotes posted to this room") + : _t("See emotes posted to your active room"), + }; + } + } + case MsgType.Image: { + if (eventCap.direction === EventDirection.Send) { + return { + primary: kind === WidgetKind.Room + ? _t("Send images as you in this room") + : _t("Send images as you in your active room"), + }; + } else { + return { + primary: kind === WidgetKind.Room + ? _t("See images posted to this room") + : _t("See images posted to your active room"), + }; + } + } + case MsgType.Video: { + if (eventCap.direction === EventDirection.Send) { + return { + primary: kind === WidgetKind.Room + ? _t("Send videos as you in this room") + : _t("Send videos as you in your active room"), + }; + } else { + return { + primary: kind === WidgetKind.Room + ? _t("See videos posted to this room") + : _t("See videos posted to your active room"), + }; + } + } + case MsgType.File: { + if (eventCap.direction === EventDirection.Send) { + return { + primary: kind === WidgetKind.Room + ? _t("Send general files as you in this room") + : _t("Send general files as you in your active room"), + }; + } else { + return { + primary: kind === WidgetKind.Room + ? _t("See general files posted to this room") + : _t("See general files posted to your active room"), + }; + } + } + default: { + let primary: TranslatedString; + if (eventCap.direction === EventDirection.Send) { + if (kind === WidgetKind.Room) { + primary = _t("Send %(msgtype)s messages as you in this room", { + msgtype: eventCap.keyStr, + }, { + b: sub => {sub}, + }); + } else { + primary = _t("Send %(msgtype)s messages as you in your active room", { + msgtype: eventCap.keyStr, + }, { + b: sub => {sub}, + }); + } + } else { + if (kind === WidgetKind.Room) { + primary = _t("See %(msgtype)s messages posted to this room", { + msgtype: eventCap.keyStr, + }, { + b: sub => {sub}, + }); + } else { + primary = _t("See %(msgtype)s messages posted to your active room", { + msgtype: eventCap.keyStr, + }, { + b: sub => {sub}, + }); + } + } + return {primary}; + } + } + } +} From 21663314ee1d58e5eab644aa2ae071d51620446d Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 19 Nov 2020 11:24:17 -0700 Subject: [PATCH 106/115] Minor touchups to the dialog --- src/components/views/dialogs/ModalWidgetDialog.tsx | 3 ++- src/i18n/strings/en_EN.json | 2 +- src/stores/widgets/StopGapWidget.ts | 5 ++++- src/stores/widgets/StopGapWidgetDriver.ts | 8 ++++++-- src/widgets/CapabilityText.tsx | 2 +- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/components/views/dialogs/ModalWidgetDialog.tsx b/src/components/views/dialogs/ModalWidgetDialog.tsx index 652c04c043..e722374555 100644 --- a/src/components/views/dialogs/ModalWidgetDialog.tsx +++ b/src/components/views/dialogs/ModalWidgetDialog.tsx @@ -31,6 +31,7 @@ import { ModalButtonKind, Widget, WidgetApiFromWidgetAction, + WidgetKind, } from "matrix-widget-api"; import {StopGapWidgetDriver} from "../../../stores/widgets/StopGapWidgetDriver"; import {MatrixClientPeg} from "../../../MatrixClientPeg"; @@ -72,7 +73,7 @@ export default class ModalWidgetDialog extends React.PureComponent this.emit("preparing")); this.messaging.on("ready", () => this.emit("ready")); diff --git a/src/stores/widgets/StopGapWidgetDriver.ts b/src/stores/widgets/StopGapWidgetDriver.ts index 99b6aacb26..b6d17b1b1b 100644 --- a/src/stores/widgets/StopGapWidgetDriver.ts +++ b/src/stores/widgets/StopGapWidgetDriver.ts @@ -17,8 +17,10 @@ import { Capability, ISendEventDetails, - MatrixCapabilities, Widget, + MatrixCapabilities, + Widget, WidgetDriver, + WidgetKind, } from "matrix-widget-api"; import { iterableDiff, iterableUnion } from "../../utils/iterables"; import { MatrixClientPeg } from "../../MatrixClientPeg"; @@ -31,7 +33,8 @@ import WidgetCapabilitiesPromptDialog, { getRememberedCapabilitiesForWidget } fr export class StopGapWidgetDriver extends WidgetDriver { private allowedCapabilities: Set; - constructor(allowedCapabilities: Capability[], private forWidget: Widget) { + // TODO: Refactor widgetKind into the Widget class + constructor(allowedCapabilities: Capability[], private forWidget: Widget, private forWidgetKind: WidgetKind) { super(); // Always allow screenshots to be taken because it's a client-induced flow. The widget can't @@ -57,6 +60,7 @@ export class StopGapWidgetDriver extends WidgetDriver { { requestedCapabilities: missing, widget: this.forWidget, + widgetKind: this.forWidgetKind, }).finished; (result.approved || []).forEach(cap => allowedSoFar.add(cap)); } catch (e) { diff --git a/src/widgets/CapabilityText.tsx b/src/widgets/CapabilityText.tsx index cb407dc686..817aae699c 100644 --- a/src/widgets/CapabilityText.tsx +++ b/src/widgets/CapabilityText.tsx @@ -50,7 +50,7 @@ export interface TranslatedCapabilityText { export class CapabilityText { private static simpleCaps: IStaticCapText = { [MatrixCapabilities.AlwaysOnScreen]: { - [WidgetKind.Room]: _td("Remain on your screen when you leave this room (when running)"), + [WidgetKind.Room]: _td("Remain on your screen when viewing another room, when running"), [GENERIC_WIDGET_KIND]: _td("Remain on your screen while running"), }, [MatrixCapabilities.StickerSending]: { From 0104164d51e91efc2fa60122fa3b3548df8fce02 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 19 Nov 2020 12:06:24 -0700 Subject: [PATCH 107/115] Approximate the design as proposed --- res/css/_common.scss | 9 +++++ .../_WidgetCapabilitiesPromptDialog.scss | 33 +++++++++++++++++-- .../WidgetCapabilitiesPromptDialog.tsx | 13 ++++---- .../views/elements/DialogButtons.js | 9 +++++ 4 files changed, 56 insertions(+), 8 deletions(-) diff --git a/res/css/_common.scss b/res/css/_common.scss index 0317e89d20..7ab88d6f02 100644 --- a/res/css/_common.scss +++ b/res/css/_common.scss @@ -60,6 +60,10 @@ pre, code { color: $accent-color; } +.text-muted { + color: $muted-fg-color; +} + b { // On Firefox, the default weight for `` is `bolder` which results in no bold // effect since we only have specific weights of our fonts available. @@ -364,6 +368,11 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus { .mx_Dialog_buttons { margin-top: 20px; text-align: right; + + .mx_Dialog_buttons_additive { + // The consumer is responsible for positioning their elements. + float: left; + } } /* XXX: Our button style are a mess: buttons that happen to appear in dialogs get special styles applied diff --git a/res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.scss b/res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.scss index bd39bb8989..13a1e7a890 100644 --- a/res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.scss +++ b/res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.scss @@ -16,26 +16,55 @@ limitations under the License. .mx_WidgetCapabilitiesPromptDialog { + .text-muted { + font-size: $font-12px; + } + .mx_Dialog_content { margin-bottom: 16px; } .mx_WidgetCapabilitiesPromptDialog_cap { - margin-top: 8px; + margin-top: 20px; + font-size: $font-15px; + line-height: $font-15px; .mx_WidgetCapabilitiesPromptDialog_byline { color: $muted-fg-color; margin-left: 26px; + font-size: $font-12px; + line-height: $font-12px; } } + .mx_Dialog_buttons { + margin-top: 40px; // double normal + } + .mx_SettingsFlag { - margin-top: 24px; + line-height: calc($font-14px + 7px + 7px); // 7px top & bottom padding + color: $muted-fg-color; + font-size: $font-12px; .mx_ToggleSwitch { display: inline-block; vertical-align: middle; margin-right: 8px; + + // downsize the switch + ball + width: $font-32px; + height: $font-15px; + + + &.mx_ToggleSwitch_on > .mx_ToggleSwitch_ball { + left: calc(100% - $font-15px); + } + + .mx_ToggleSwitch_ball { + width: $font-15px; + height: $font-15px; + border-radius: $font-15px; + } } .mx_SettingsFlag_label { diff --git a/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx b/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx index 9e2481f524..7784b73387 100644 --- a/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx +++ b/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx @@ -126,18 +126,19 @@ export default class WidgetCapabilitiesPromptDialog extends React.PureComponent< >
- {_t("This widget would like to:")} +
{_t("This widget would like to:")}
{checkboxRows} - } />
diff --git a/src/components/views/elements/DialogButtons.js b/src/components/views/elements/DialogButtons.js index 001292b6b7..3417485eb8 100644 --- a/src/components/views/elements/DialogButtons.js +++ b/src/components/views/elements/DialogButtons.js @@ -54,6 +54,9 @@ export default class DialogButtons extends React.Component { // disables only the primary button primaryDisabled: PropTypes.bool, + + // something to stick next to the buttons, optionally + additive: PropTypes.element, }; static defaultProps = { @@ -85,8 +88,14 @@ export default class DialogButtons extends React.Component { ; } + let additive = null; + if (this.props.additive) { + additive =
{this.props.additive}
; + } + return (
+ { additive } { cancelButton } { this.props.children }