From 7e4bbfebc62e9e3acf27235df354494bff04a9bb Mon Sep 17 00:00:00 2001 From: Marco Zehe Date: Fri, 14 Feb 2020 12:34:22 +0100 Subject: [PATCH 0001/1504] Don't speak the outgoing message if it is in the Sending state. Signed-off-by: Marco Zehe --- src/components/views/rooms/EventTile.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index 916ddc3c5b..ba27c7c276 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -671,6 +671,9 @@ export default createReactClass({ mx_EventTile_redacted: isRedacted, }); + // If the tile is in the Sending state, don't speak the message. + const suppressSpeech = (isSending) ? "off" : undefined; + let permalink = "#"; if (this.props.permalinkCreator) { permalink = this.props.permalinkCreator.forEvent(this.props.mxEvent.getId()); @@ -789,7 +792,7 @@ export default createReactClass({ case 'notif': { const room = this.context.getRoom(this.props.mxEvent.getRoomId()); return ( -
+
{ room ? room.name : '' } @@ -815,7 +818,7 @@ export default createReactClass({ } case 'file_grid': { return ( -
+
+
{ avatar } { sender }
@@ -879,7 +882,7 @@ export default createReactClass({ ); // tab-index=-1 to allow it to be focusable but do not add tab stop for it, primarily for screen readers return ( -
+
{ readAvatars }
From 1f2bf0485ebee982ca5cdb50cac3f525b26b07fc Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Sat, 18 Apr 2020 14:52:41 +0300 Subject: [PATCH 0002/1504] Implement widget API for signaling the widget to gracefully terminate In theory, widgets could use iframe unload/beforeunload events for cleanup, but in practice browsers have restrictions on what can be done in those events which may not give sufficient time for clean termination. Signed-off-by: Pauli Virtanen --- src/WidgetMessaging.js | 13 +++++++++++++ src/widgets/WidgetApi.ts | 14 ++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/WidgetMessaging.js b/src/WidgetMessaging.js index 5f877bd48a..6a20c340a5 100644 --- a/src/WidgetMessaging.js +++ b/src/WidgetMessaging.js @@ -87,6 +87,19 @@ export default class WidgetMessaging { }); } + /** + * Tells the widget that it should terminate now. + * It is not necessarily called in all instances before the widget is removed, + * and the client may force termination with a timeout. + * @returns {Promise<*>} Resolves when widget has acknowledged the message. + */ + terminate() { + return this.messageToWidget({ + api: OUTBOUND_API_NAME, + action: KnownWidgetActions.Terminate, + }); + } + /** * Request a screenshot from a widget * @return {Promise} To be resolved with screenshot data when it has been generated diff --git a/src/widgets/WidgetApi.ts b/src/widgets/WidgetApi.ts index 05237d258f..e08476edb5 100644 --- a/src/widgets/WidgetApi.ts +++ b/src/widgets/WidgetApi.ts @@ -34,6 +34,7 @@ export enum KnownWidgetActions { ReceiveOpenIDCredentials = "openid_credentials", SetAlwaysOnScreen = "set_always_on_screen", ClientReady = "im.vector.ready", + Terminate = "im.vector.terminate", } export type WidgetAction = KnownWidgetActions | string; @@ -68,6 +69,8 @@ export class WidgetApi { private inFlightRequests: { [requestId: string]: (reply: FromWidgetRequest) => void } = {}; private readyPromise: Promise; private readyPromiseResolve: () => void; + private terminatePromise: Promise; + private terminatePromiseResolve: () => void; /** * Set this to true if your widget is expecting a ready message from the client. False otherwise (default). @@ -78,6 +81,7 @@ export class WidgetApi { this.origin = new URL(currentUrl).origin; this.readyPromise = new Promise(resolve => this.readyPromiseResolve = resolve); + this.terminatePromise = new Promise(resolve => this.terminatePromiseResolve = resolve); window.addEventListener("message", event => { if (event.origin !== this.origin) return; // ignore: invalid origin @@ -98,6 +102,12 @@ export class WidgetApi { // Automatically acknowledge so we can move on this.replyToRequest(payload, {}); + } else if (payload.action === KnownWidgetActions.Terminate) { + // Reply after resolving + this.terminatePromise.then(() => { + this.replyToRequest(payload, {}); + }); + this.terminatePromiseResolve(); } else { console.warn(`[WidgetAPI] Got unexpected action: ${payload.action}`); } @@ -116,6 +126,10 @@ export class WidgetApi { return this.readyPromise; } + public addTerminateCallback(action) { + this.terminatePromise = this.terminatePromise.then(action); + } + private replyToRequest(payload: ToWidgetRequest, reply: any) { if (!window.parent) return; From 4fac7810517795061ec6a750b49d46ed31ebf059 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Sat, 18 Apr 2020 14:53:48 +0300 Subject: [PATCH 0003/1504] Tell widgets to terminate gracefully in AppTile:_endWidgetActions If the widget fails to terminate in two seconds, proceed with disposing the iframe nevertheless. This allows e.g. Jitsi to hangup the conference when minimizing the widget, instead of abrupt disconnect that can leave ghost users behind. Signed-off-by: Pauli Virtanen --- src/components/views/elements/AppTile.js | 74 ++++++++++++++---------- 1 file changed, 43 insertions(+), 31 deletions(-) diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index 58bfda8d22..5176753037 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -340,23 +340,30 @@ export default class AppTile extends React.Component { /** * Ends all widget interaction, such as cancelling calls and disabling webcams. * @private + * @returns {Promise<*>} Resolves when the widget is terminated, or timeout passed. */ _endWidgetActions() { - // HACK: This is a really dirty way to ensure that Jitsi cleans up - // its hold on the webcam. Without this, the widget holds a media - // stream open, even after death. See https://github.com/vector-im/riot-web/issues/7351 - if (this._appFrame.current) { - // In practice we could just do `+= ''` to trick the browser - // into thinking the URL changed, however I can foresee this - // being optimized out by a browser. Instead, we'll just point - // the iframe at a page that is reasonably safe to use in the - // event the iframe doesn't wink away. - // This is relative to where the Riot instance is located. - this._appFrame.current.src = 'about:blank'; - } + const timeout = 2000; + const timeoutPromise = new Promise(resolve => setTimeout(resolve, timeout)); + const messaging = ActiveWidgetStore.getWidgetMessaging(this.props.app.id); - // Delete the widget from the persisted store for good measure. - PersistedElement.destroyElement(this._persistKey); + return Promise.race([messaging.terminate(), timeoutPromise]).finally(() => { + // HACK: This is a really dirty way to ensure that Jitsi cleans up + // its hold on the webcam. Without this, the widget holds a media + // stream open, even after death. See https://github.com/vector-im/riot-web/issues/7351 + if (this._appFrame.current) { + // In practice we could just do `+= ''` to trick the browser + // into thinking the URL changed, however I can foresee this + // being optimized out by a browser. Instead, we'll just point + // the iframe at a page that is reasonably safe to use in the + // event the iframe doesn't wink away. + // This is relative to where the Riot instance is located. + this._appFrame.current.src = 'about:blank'; + } + + // Delete the widget from the persisted store for good measure. + PersistedElement.destroyElement(this._persistKey); + }); } /* If user has permission to modify widgets, delete the widget, @@ -380,21 +387,21 @@ export default class AppTile extends React.Component { } this.setState({deleting: true}); - this._endWidgetActions(); + this._endWidgetActions().then(() => { + WidgetUtils.setRoomWidget( + this.props.room.roomId, + this.props.app.id, + ).catch((e) => { + console.error('Failed to delete widget', e); + const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); - WidgetUtils.setRoomWidget( - this.props.room.roomId, - this.props.app.id, - ).catch((e) => { - console.error('Failed to delete widget', e); - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); - - Modal.createTrackedDialog('Failed to remove widget', '', ErrorDialog, { - title: _t('Failed to remove widget'), - description: _t('An error ocurred whilst trying to remove the widget from the room'), + Modal.createTrackedDialog('Failed to remove widget', '', ErrorDialog, { + title: _t('Failed to remove widget'), + description: _t('An error ocurred whilst trying to remove the widget from the room'), + }); + }).finally(() => { + this.setState({deleting: false}); }); - }).finally(() => { - this.setState({deleting: false}); }); }, }); @@ -545,13 +552,18 @@ export default class AppTile extends React.Component { if (this.props.userWidget) { this._onMinimiseClick(); } else { + let promise; if (this.props.show) { // if we were being shown, end the widget as we're about to be minimized. - this._endWidgetActions(); + promise = this._endWidgetActions(); + } else { + promise = Promise.resolve(); } - dis.dispatch({ - action: 'appsDrawer', - show: !this.props.show, + promise.then(() => { + dis.dispatch({ + action: 'appsDrawer', + show: !this.props.show, + }); }); } } From 94745e9407a5a772febf74608b536f5d70797417 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Sat, 18 Apr 2020 16:57:19 +0300 Subject: [PATCH 0004/1504] Minimize widget immediately, and end it later Signed-off-by: Pauli Virtanen --- src/components/views/elements/AppTile.js | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index 5176753037..100a31bdcc 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -39,6 +39,7 @@ import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore"; import {aboveLeftOf, ContextMenu, ContextMenuButton} from "../../structures/ContextMenu"; import PersistedElement from "./PersistedElement"; import {WidgetType} from "../../../widgets/WidgetType"; +import {sleep} from "../../../utils/promise"; const ALLOWED_APP_URL_SCHEMES = ['https:', 'http:']; const ENABLE_REACT_PERF = false; @@ -344,10 +345,9 @@ export default class AppTile extends React.Component { */ _endWidgetActions() { const timeout = 2000; - const timeoutPromise = new Promise(resolve => setTimeout(resolve, timeout)); const messaging = ActiveWidgetStore.getWidgetMessaging(this.props.app.id); - return Promise.race([messaging.terminate(), timeoutPromise]).finally(() => { + return Promise.race([messaging.terminate(), sleep(timeout)]).finally(() => { // HACK: This is a really dirty way to ensure that Jitsi cleans up // its hold on the webcam. Without this, the widget holds a media // stream open, even after death. See https://github.com/vector-im/riot-web/issues/7351 @@ -552,18 +552,13 @@ export default class AppTile extends React.Component { if (this.props.userWidget) { this._onMinimiseClick(); } else { - let promise; if (this.props.show) { // if we were being shown, end the widget as we're about to be minimized. - promise = this._endWidgetActions(); - } else { - promise = Promise.resolve(); + this._endWidgetActions(); } - promise.then(() => { - dis.dispatch({ - action: 'appsDrawer', - show: !this.props.show, - }); + dis.dispatch({ + action: 'appsDrawer', + show: !this.props.show, }); } } From 352ea29d1733569ad86e7ffbfb960e4d05bde55d Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Sat, 18 Apr 2020 17:04:56 +0300 Subject: [PATCH 0005/1504] Implement widget ReceiveTerminate capability Signed-off-by: Pauli Virtanen --- src/components/views/elements/AppTile.js | 14 +++++++++++--- src/utils/WidgetUtils.js | 1 + src/widgets/WidgetApi.ts | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index 100a31bdcc..18be0eeb67 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -344,10 +344,18 @@ export default class AppTile extends React.Component { * @returns {Promise<*>} Resolves when the widget is terminated, or timeout passed. */ _endWidgetActions() { - const timeout = 2000; - const messaging = ActiveWidgetStore.getWidgetMessaging(this.props.app.id); + let promise; - return Promise.race([messaging.terminate(), sleep(timeout)]).finally(() => { + if (this._hasCapability('m.receive_terminate')) { + // Wait for widget to terminate within a timeout + const timeout = 2000; + const messaging = ActiveWidgetStore.getWidgetMessaging(this.props.app.id); + promise = Promise.race([messaging.terminate(), sleep(timeout)]); + } else { + promise = Promise.resolve(); + } + + return promise.finally(() => { // HACK: This is a really dirty way to ensure that Jitsi cleans up // its hold on the webcam. Without this, the widget holds a media // stream open, even after death. See https://github.com/vector-im/riot-web/issues/7351 diff --git a/src/utils/WidgetUtils.js b/src/utils/WidgetUtils.js index 6a0556c2b3..11dd5a88f7 100644 --- a/src/utils/WidgetUtils.js +++ b/src/utils/WidgetUtils.js @@ -420,6 +420,7 @@ export default class WidgetUtils { if (WidgetType.JITSI.matches(appType)) { capWhitelist.push(Capability.AlwaysOnScreen); } + capWhitelist.push(Capability.ReceiveTerminate); return capWhitelist; } diff --git a/src/widgets/WidgetApi.ts b/src/widgets/WidgetApi.ts index e08476edb5..6a29955713 100644 --- a/src/widgets/WidgetApi.ts +++ b/src/widgets/WidgetApi.ts @@ -23,6 +23,7 @@ export enum Capability { Screenshot = "m.capability.screenshot", Sticker = "m.sticker", AlwaysOnScreen = "m.always_on_screen", + ReceiveTerminate = "m.receive_terminate", } export enum KnownWidgetActions { From cf4137d4b23e5af5baf3c3a1f056da789e51d8b7 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Wed, 22 Apr 2020 19:20:28 +0300 Subject: [PATCH 0006/1504] Make WidgetAPI an EventEmitter + use for terminate + cleanups Use EventEmitter for emitting events, rename terminate event code, plus misc cleanups from review. Signed-off-by: Pauli Virtanen --- src/WidgetMessaging.js | 2 -- src/components/views/elements/AppTile.js | 22 +++++++++--------- src/widgets/WidgetApi.ts | 29 ++++++++++++++---------- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/src/WidgetMessaging.js b/src/WidgetMessaging.js index 6a20c340a5..375e7dd8a3 100644 --- a/src/WidgetMessaging.js +++ b/src/WidgetMessaging.js @@ -89,8 +89,6 @@ export default class WidgetMessaging { /** * Tells the widget that it should terminate now. - * It is not necessarily called in all instances before the widget is removed, - * and the client may force termination with a timeout. * @returns {Promise<*>} Resolves when widget has acknowledged the message. */ terminate() { diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index 18be0eeb67..057643c725 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -346,7 +346,7 @@ export default class AppTile extends React.Component { _endWidgetActions() { let promise; - if (this._hasCapability('m.receive_terminate')) { + if (this._hasCapability('im.vector.receive_terminate')) { // Wait for widget to terminate within a timeout const timeout = 2000; const messaging = ActiveWidgetStore.getWidgetMessaging(this.props.app.id); @@ -396,20 +396,20 @@ export default class AppTile extends React.Component { this.setState({deleting: true}); this._endWidgetActions().then(() => { - WidgetUtils.setRoomWidget( + return WidgetUtils.setRoomWidget( this.props.room.roomId, this.props.app.id, - ).catch((e) => { - console.error('Failed to delete widget', e); - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); + ); + }).catch((e) => { + console.error('Failed to delete widget', e); + const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); - Modal.createTrackedDialog('Failed to remove widget', '', ErrorDialog, { - title: _t('Failed to remove widget'), - description: _t('An error ocurred whilst trying to remove the widget from the room'), - }); - }).finally(() => { - this.setState({deleting: false}); + Modal.createTrackedDialog('Failed to remove widget', '', ErrorDialog, { + title: _t('Failed to remove widget'), + description: _t('An error ocurred whilst trying to remove the widget from the room'), }); + }).finally(() => { + this.setState({deleting: false}); }); }, }); diff --git a/src/widgets/WidgetApi.ts b/src/widgets/WidgetApi.ts index 6a29955713..c5420dca38 100644 --- a/src/widgets/WidgetApi.ts +++ b/src/widgets/WidgetApi.ts @@ -18,12 +18,13 @@ limitations under the License. // https://github.com/turt2live/matrix-dimension/blob/4f92d560266635e5a3c824606215b84e8c0b19f5/web/app/shared/services/scalar/scalar-widget.api.ts import { randomString } from "matrix-js-sdk/src/randomstring"; +import { EventEmitter } from "events"; export enum Capability { Screenshot = "m.capability.screenshot", Sticker = "m.sticker", AlwaysOnScreen = "m.always_on_screen", - ReceiveTerminate = "m.receive_terminate", + ReceiveTerminate = "im.vector.receive_terminate", } export enum KnownWidgetActions { @@ -64,14 +65,17 @@ export interface FromWidgetRequest extends WidgetRequest { /** * Handles Riot <--> Widget interactions for embedded/standalone widgets. + * + * Emitted events: + * - terminate(wait): client requested the widget to terminate. + * Call the argument 'wait(promise)' to postpone the finalization until + * the given promise resolves. */ -export class WidgetApi { +export class WidgetApi extends EventEmitter { private origin: string; private inFlightRequests: { [requestId: string]: (reply: FromWidgetRequest) => void } = {}; private readyPromise: Promise; private readyPromiseResolve: () => void; - private terminatePromise: Promise; - private terminatePromiseResolve: () => void; /** * Set this to true if your widget is expecting a ready message from the client. False otherwise (default). @@ -79,10 +83,11 @@ export class WidgetApi { public expectingExplicitReady = false; constructor(currentUrl: string, private widgetId: string, private requestedCapabilities: string[]) { + super(); + this.origin = new URL(currentUrl).origin; this.readyPromise = new Promise(resolve => this.readyPromiseResolve = resolve); - this.terminatePromise = new Promise(resolve => this.terminatePromiseResolve = resolve); window.addEventListener("message", event => { if (event.origin !== this.origin) return; // ignore: invalid origin @@ -104,11 +109,15 @@ export class WidgetApi { // Automatically acknowledge so we can move on this.replyToRequest(payload, {}); } else if (payload.action === KnownWidgetActions.Terminate) { - // Reply after resolving - this.terminatePromise.then(() => { + // Finalization needs to be async, so postpone with a promise + let finalizePromise = Promise.resolve(); + const wait = promise => { + finalizePromise = finalizePromise.then(value => promise); + } + this.emit('terminate', wait); + Promise.resolve(finalizePromise).then(() => { this.replyToRequest(payload, {}); }); - this.terminatePromiseResolve(); } else { console.warn(`[WidgetAPI] Got unexpected action: ${payload.action}`); } @@ -127,10 +136,6 @@ export class WidgetApi { return this.readyPromise; } - public addTerminateCallback(action) { - this.terminatePromise = this.terminatePromise.then(action); - } - private replyToRequest(payload: ToWidgetRequest, reply: any) { if (!window.parent) return; From 798f5d401ba89c96fd1467afe343a7caba0da5a2 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Sat, 11 Apr 2020 15:23:32 +0300 Subject: [PATCH 0007/1504] Ensure active Jitsi conference is closed on widget pop-out Signed-off-by: Pauli Virtanen --- src/components/views/elements/AppTile.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index 057643c725..f5664fd613 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -671,6 +671,17 @@ export default class AppTile extends React.Component { } _onPopoutWidgetClick() { + // Ensure Jitsi conferences are closed on pop-out, to not confuse the user to join them + // twice from the same computer, which Jitsi can have problems with (audio echo/gain-loop). + if (WidgetType.JITSI.matches(this.props.app.type) && this.props.show) { + this._endWidgetActions().then(() => { + if (this._appFrame.current) { + // Reload iframe + this._appFrame.current.src = this._getRenderedUrl(); + this.setState({}); + } + }); + } // Using Object.assign workaround as the following opens in a new window instead of a new tab. // window.open(this._getPopoutUrl(), '_blank', 'noopener=yes'); Object.assign(document.createElement('a'), From 38962560acce8fdb09705eee3590ae5331028eea Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Tue, 28 Apr 2020 02:18:43 +0300 Subject: [PATCH 0008/1504] Style fixes Signed-off-by: Pauli Virtanen --- src/components/views/elements/AppTile.js | 11 ++++++----- src/widgets/WidgetApi.ts | 5 +++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index f5664fd613..ef0075e800 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -39,6 +39,7 @@ import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore"; import {aboveLeftOf, ContextMenu, ContextMenuButton} from "../../structures/ContextMenu"; import PersistedElement from "./PersistedElement"; import {WidgetType} from "../../../widgets/WidgetType"; +import {Capability} from "../../../widgets/WidgetApi"; import {sleep} from "../../../utils/promise"; const ALLOWED_APP_URL_SCHEMES = ['https:', 'http:']; @@ -344,18 +345,18 @@ export default class AppTile extends React.Component { * @returns {Promise<*>} Resolves when the widget is terminated, or timeout passed. */ _endWidgetActions() { - let promise; + let terminationPromise; - if (this._hasCapability('im.vector.receive_terminate')) { + if (this._hasCapability(Capability.ReceiveTerminate)) { // Wait for widget to terminate within a timeout const timeout = 2000; const messaging = ActiveWidgetStore.getWidgetMessaging(this.props.app.id); - promise = Promise.race([messaging.terminate(), sleep(timeout)]); + terminationPromise = Promise.race([messaging.terminate(), sleep(timeout)]); } else { - promise = Promise.resolve(); + terminationPromise = Promise.resolve(); } - return promise.finally(() => { + return terminationPromise.finally(() => { // HACK: This is a really dirty way to ensure that Jitsi cleans up // its hold on the webcam. Without this, the widget holds a media // stream open, even after death. See https://github.com/vector-im/riot-web/issues/7351 diff --git a/src/widgets/WidgetApi.ts b/src/widgets/WidgetApi.ts index c5420dca38..795c6648ef 100644 --- a/src/widgets/WidgetApi.ts +++ b/src/widgets/WidgetApi.ts @@ -111,11 +111,12 @@ export class WidgetApi extends EventEmitter { } else if (payload.action === KnownWidgetActions.Terminate) { // Finalization needs to be async, so postpone with a promise let finalizePromise = Promise.resolve(); - const wait = promise => { + const wait = (promise) => { finalizePromise = finalizePromise.then(value => promise); - } + }; this.emit('terminate', wait); Promise.resolve(finalizePromise).then(() => { + // Acknowledge that we're shut down now this.replyToRequest(payload, {}); }); } else { From 6eee39c153f4f303c775866f42bd0366c194077a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 18 May 2020 12:04:13 +0100 Subject: [PATCH 0009/1504] Fix /op Slash Command Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/SlashCommands.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index fbb9e2eb0e..6fbf56a518 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -729,9 +729,9 @@ export const Commands = [ const cli = MatrixClientPeg.get(); const room = cli.getRoom(roomId); if (!room) return reject(_t("Command failed")); - + const member = room.getMember(args); + if (!member) return reject(_t("Could not find user in room")); const powerLevelEvent = room.currentState.getStateEvents('m.room.power_levels', ''); - if (!powerLevelEvent.getContent().users[args]) return reject(_t("Could not find user in room")); return success(cli.setPowerLevel(roomId, userId, powerLevel, powerLevelEvent)); } } From b4e2e54dc1bc096759ea00156b868ac922ef18cc Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 18 May 2020 12:06:20 +0100 Subject: [PATCH 0010/1504] make test more specific Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/SlashCommands.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index 6fbf56a518..cea780e361 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -730,7 +730,7 @@ export const Commands = [ const room = cli.getRoom(roomId); if (!room) return reject(_t("Command failed")); const member = room.getMember(args); - if (!member) return reject(_t("Could not find user in room")); + if (!member || member.membership !== "join") return reject(_t("Could not find user in room")); const powerLevelEvent = room.currentState.getStateEvents('m.room.power_levels', ''); return success(cli.setPowerLevel(roomId, userId, powerLevel, powerLevelEvent)); } From b0be99a8f09626fc44ddf5b5c74bcbfda3e6cc3e Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Fri, 22 May 2020 14:41:25 -0500 Subject: [PATCH 0011/1504] Show timestamp of redaction on hover Signed-off-by: Aaron Raimist --- src/components/views/messages/RedactedBody.tsx | 8 +++++++- src/i18n/strings/en_EN.json | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/views/messages/RedactedBody.tsx b/src/components/views/messages/RedactedBody.tsx index 5dada64b52..5f80460d03 100644 --- a/src/components/views/messages/RedactedBody.tsx +++ b/src/components/views/messages/RedactedBody.tsx @@ -19,6 +19,8 @@ import {MatrixClient} from "matrix-js-sdk/src/client"; import {MatrixEvent} from "matrix-js-sdk/src/models/event"; import { _t } from "../../../languageHandler"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; +import {formatFullDate} from "../../../DateUtils"; +import SettingsStore from "../../../settings/SettingsStore"; interface IProps { mxEvent: MatrixEvent; @@ -36,8 +38,12 @@ const RedactedBody = React.forwardRef(({mxEvent}, ref) => { text = _t("Message deleted by %(name)s", { name: sender ? sender.name : redactedBecauseUserId }); } + const showTwelveHour = SettingsStore.getValue("showTwelveHourTimestamps"); + const fullDate = formatFullDate(new Date(unsigned.redacted_because.origin_server_ts), showTwelveHour); + const titleText = _t("Message deleted on %(date)s", { date: fullDate }); + return ( - + { text } ); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index f79d93b98f..a20acd9015 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1352,6 +1352,7 @@ "reacted with %(shortName)s": "reacted with %(shortName)s", "Message deleted": "Message deleted", "Message deleted by %(name)s": "Message deleted by %(name)s", + "Message deleted on %(date)s": "Message deleted on %(date)s", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s changed the avatar for %(roomName)s", "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s removed the room avatar.", "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s changed the room avatar to ", From f54bac0e951584feeba4fefda9f3c02d1191bf90 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 29 May 2020 15:42:07 +0100 Subject: [PATCH 0012/1504] Use recovery keys over passphrases Step 1 - change CreateSecretStorageDialog to just give a recovery key rather than a passphrase. --- .../_CreateSecretStorageDialog.scss | 35 +- .../CreateSecretStorageDialog.js | 438 +++++------------- src/i18n/strings/en_EN.json | 34 +- 3 files changed, 151 insertions(+), 356 deletions(-) diff --git a/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss b/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss index 63e5a3de09..9f1d0f4998 100644 --- a/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss +++ b/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss @@ -73,33 +73,42 @@ limitations under the License. margin-left: 20px; } -.mx_CreateSecretStorageDialog_recoveryKeyHeader { - margin-bottom: 1em; -} - .mx_CreateSecretStorageDialog_recoveryKeyContainer { - display: flex; + width: 380px; + margin-left: auto; + margin-right: auto; } .mx_CreateSecretStorageDialog_recoveryKey { - width: 262px; + font-weight: bold; + text-align: center; padding: 20px; color: $info-plinth-fg-color; background-color: $info-plinth-bg-color; - margin-right: 12px; + border-radius: 6px; + word-spacing: 1em; + margin-bottom: 20px; } .mx_CreateSecretStorageDialog_recoveryKeyButtons { - flex: 1; display: flex; + justify-content: space-between; align-items: center; } .mx_CreateSecretStorageDialog_recoveryKeyButtons .mx_AccessibleButton { - margin-right: 10px; -} - -.mx_CreateSecretStorageDialog_recoveryKeyButtons button { - flex: 1; + width: 160px; + padding-left: 0px; + padding-right: 0px; white-space: nowrap; } + +.mx_CreateSecretStorageDialog_continueSpinner { + margin-top: 33px; + text-align: right; +} + +.mx_CreateSecretStorageDialog_continueSpinner img { + width: 20px; + height: 20px; +} diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index e6ab07c449..44e00d79cd 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -20,25 +20,19 @@ import PropTypes from 'prop-types'; import * as sdk from '../../../../index'; import {MatrixClientPeg} from '../../../../MatrixClientPeg'; import FileSaver from 'file-saver'; -import {_t, _td} from '../../../../languageHandler'; +import {_t} from '../../../../languageHandler'; import Modal from '../../../../Modal'; import { promptForBackupPassphrase } from '../../../../CrossSigningManager'; import {copyNode} from "../../../../utils/strings"; import {SSOAuthEntry} from "../../../../components/views/auth/InteractiveAuthEntryComponents"; -import PassphraseField from "../../../../components/views/auth/PassphraseField"; const PHASE_LOADING = 0; const PHASE_LOADERROR = 1; const PHASE_MIGRATE = 2; -const PHASE_PASSPHRASE = 3; -const PHASE_PASSPHRASE_CONFIRM = 4; -const PHASE_SHOWKEY = 5; -const PHASE_KEEPITSAFE = 6; -const PHASE_STORING = 7; -const PHASE_DONE = 8; -const PHASE_CONFIRM_SKIP = 9; - -const PASSWORD_MIN_SCORE = 4; // So secure, many characters, much complex, wow, etc, etc. +const PHASE_INTRO = 3; +const PHASE_SHOWKEY = 4; +const PHASE_STORING = 5; +const PHASE_CONFIRM_SKIP = 6; /* * Walks the user through the process of creating a passphrase to guard Secure @@ -65,34 +59,26 @@ export default class CreateSecretStorageDialog extends React.PureComponent { this.state = { phase: PHASE_LOADING, - passPhrase: '', - passPhraseValid: false, - passPhraseConfirm: '', - copied: false, downloaded: false, + copied: false, backupInfo: null, + backupInfoFetched: false, + backupInfoFetchError: null, backupSigStatus: null, // does the server offer a UI auth flow with just m.login.password - // for /keys/device_signing/upload? - canUploadKeysWithPasswordOnly: null, + // for /keys/device_signing/upload? (If we have an account password, we + // assume that it can) + canUploadKeysWithPasswordOnly: Boolean(this.state.accountPassword), + canUploadKeyCheckInProgress: false, accountPassword: props.accountPassword || "", accountPasswordCorrect: null, - // status of the key backup toggle switch + // No toggle for this: if we really don't want one, remove it & just hard code true useKeyBackup: true, }; this._passphraseField = createRef(); - this._fetchBackupInfo(); - if (this.state.accountPassword) { - // If we have an account password in memory, let's simplify and - // assume it means password auth is also supported for device - // signing key upload as well. This avoids hitting the server to - // test auth flows, which may be slow under high load. - this.state.canUploadKeysWithPasswordOnly = true; - } else { - this._queryKeyUploadAuth(); - } + this.loadData(); MatrixClientPeg.get().on('crypto.keyBackupStatus', this._onKeyBackupStatusChange); } @@ -109,13 +95,11 @@ export default class CreateSecretStorageDialog extends React.PureComponent { MatrixClientPeg.get().isCryptoEnabled() && await MatrixClientPeg.get().isKeyBackupTrusted(backupInfo) ); - const { force } = this.props; - const phase = (backupInfo && !force) ? PHASE_MIGRATE : PHASE_PASSPHRASE; - this.setState({ - phase, + backupInfoFetched: true, backupInfo, backupSigStatus, + backupInfoFetchError: null, }); return { @@ -123,20 +107,25 @@ export default class CreateSecretStorageDialog extends React.PureComponent { backupSigStatus, }; } catch (e) { - this.setState({phase: PHASE_LOADERROR}); + this.setState({backupInfoFetchError: e}); } } async _queryKeyUploadAuth() { try { + this.setState({canUploadKeyCheckInProgress: true}); await MatrixClientPeg.get().uploadDeviceSigningKeys(null, {}); // We should never get here: the server should always require // UI auth to upload device signing keys. If we do, we upload // no keys which would be a no-op. console.log("uploadDeviceSigningKeys unexpectedly succeeded without UI auth!"); + this.setState({canUploadKeyCheckInProgress: false}); } catch (error) { if (!error.data || !error.data.flows) { console.log("uploadDeviceSigningKeys advertised no flows!"); + this.setState({ + canUploadKeyCheckInProgress: false, + }); return; } const canUploadKeysWithPasswordOnly = error.data.flows.some(f => { @@ -144,10 +133,18 @@ export default class CreateSecretStorageDialog extends React.PureComponent { }); this.setState({ canUploadKeysWithPasswordOnly, + canUploadKeyCheckInProgress: false, }); } } + async _createRecoveryKey() { + this._recoveryKey = await MatrixClientPeg.get().createRecoveryKeyFromPassphrase(); + this.setState({ + phase: PHASE_SHOWKEY, + }); + } + _onKeyBackupStatusChange = () => { if (this.state.phase === PHASE_MIGRATE) this._fetchBackupInfo(); } @@ -156,12 +153,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { this._recoveryKeyNode = n; } - _onUseKeyBackupChange = (enabled) => { - this.setState({ - useKeyBackup: enabled, - }); - } - _onMigrateFormSubmit = (e) => { e.preventDefault(); if (this.state.backupSigStatus.usable) { @@ -171,12 +162,15 @@ export default class CreateSecretStorageDialog extends React.PureComponent { } } + _onIntroContinueClick = () => { + this._createRecoveryKey(); + } + _onCopyClick = () => { const successful = copyNode(this._recoveryKeyNode); if (successful) { this.setState({ copied: true, - phase: PHASE_KEEPITSAFE, }); } } @@ -186,10 +180,8 @@ export default class CreateSecretStorageDialog extends React.PureComponent { type: 'text/plain;charset=us-ascii', }); FileSaver.saveAs(blob, 'recovery-key.txt'); - this.setState({ downloaded: true, - phase: PHASE_KEEPITSAFE, }); } @@ -244,7 +236,9 @@ export default class CreateSecretStorageDialog extends React.PureComponent { _bootstrapSecretStorage = async () => { this.setState({ - phase: PHASE_STORING, + // we use LOADING here rather than STORING as STORING still shows the 'show key' + // screen which is not relevant: LOADING is just a generic spinner. + phase: PHASE_LOADING, error: null, }); @@ -285,9 +279,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent { }, }); } - this.setState({ - phase: PHASE_DONE, - }); + this.props.onFinished(true); } catch (e) { if (this.state.canUploadKeysWithPasswordOnly && e.httpStatus === 401 && e.data.flows) { this.setState({ @@ -306,10 +298,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { this.props.onFinished(false); } - _onDone = () => { - this.props.onFinished(true); - } - _restoreBackup = async () => { // It's possible we'll need the backup key later on for bootstrapping, // so let's stash it here, rather than prompting for it twice. @@ -336,90 +324,35 @@ export default class CreateSecretStorageDialog extends React.PureComponent { } } + _onShowKeyContinueClick = () => { + this._bootstrapSecretStorage(); + } + _onLoadRetryClick = () => { + this.loadData(); + } + + async loadData() { this.setState({phase: PHASE_LOADING}); - this._fetchBackupInfo(); + const proms = []; + + if (!this.state.backupInfoFetched) proms.push(this._fetchBackupInfo()); + if (this.state.canUploadKeysWithPasswordOnly === null) proms.push(this._queryKeyUploadAuth()); + + await Promise.all(proms); + if (this.state.canUploadKeysWithPasswordOnly === null || this.state.backupInfoFetchError) { + this.setState({phase: PHASE_LOADERROR}); + } else if (this.state.backupInfo && !this.props.force) { + this.setState({phase: PHASE_MIGRATE}); + } else { + this.setState({phase: PHASE_INTRO}); + } } _onSkipSetupClick = () => { this.setState({phase: PHASE_CONFIRM_SKIP}); } - _onSetUpClick = () => { - this.setState({phase: PHASE_PASSPHRASE}); - } - - _onSkipPassPhraseClick = async () => { - this._recoveryKey = - await MatrixClientPeg.get().createRecoveryKeyFromPassphrase(); - this.setState({ - copied: false, - downloaded: false, - phase: PHASE_SHOWKEY, - }); - } - - _onPassPhraseNextClick = async (e) => { - e.preventDefault(); - if (!this._passphraseField.current) return; // unmounting - - await this._passphraseField.current.validate({ allowEmpty: false }); - if (!this._passphraseField.current.state.valid) { - this._passphraseField.current.focus(); - this._passphraseField.current.validate({ allowEmpty: false, focused: true }); - return; - } - - this.setState({phase: PHASE_PASSPHRASE_CONFIRM}); - }; - - _onPassPhraseConfirmNextClick = async (e) => { - e.preventDefault(); - - if (this.state.passPhrase !== this.state.passPhraseConfirm) return; - - this._recoveryKey = - await MatrixClientPeg.get().createRecoveryKeyFromPassphrase(this.state.passPhrase); - this.setState({ - copied: false, - downloaded: false, - phase: PHASE_SHOWKEY, - }); - } - - _onSetAgainClick = () => { - this.setState({ - passPhrase: '', - passPhraseValid: false, - passPhraseConfirm: '', - phase: PHASE_PASSPHRASE, - }); - } - - _onKeepItSafeBackClick = () => { - this.setState({ - phase: PHASE_SHOWKEY, - }); - } - - _onPassPhraseValidate = (result) => { - this.setState({ - passPhraseValid: result.valid, - }); - }; - - _onPassPhraseChange = (e) => { - this.setState({ - passPhrase: e.target.value, - }); - } - - _onPassPhraseConfirmChange = (e) => { - this.setState({ - passPhraseConfirm: e.target.value, - }); - } - _onAccountPasswordChange = (e) => { this.setState({ accountPassword: e.target.value, @@ -437,7 +370,12 @@ export default class CreateSecretStorageDialog extends React.PureComponent { let authPrompt; let nextCaption = _t("Next"); - if (this.state.canUploadKeysWithPasswordOnly) { + if (!this.state.backupSigStatus.usable) { + authPrompt =
+
{_t("Restore your key backup to upgrade your encryption")}
+
; + nextCaption = _t("Restore"); + } else if (this.state.canUploadKeysWithPasswordOnly && !this.state.accountPassword) { authPrompt =
{_t("Enter your account password to confirm the upgrade:")}
; - } else if (!this.state.backupSigStatus.usable) { - authPrompt =
-
{_t("Restore your key backup to upgrade your encryption")}
-
; - nextCaption = _t("Restore"); } else { authPrompt =

{_t("You'll need to authenticate with the server to confirm the upgrade.")} @@ -480,185 +413,53 @@ export default class CreateSecretStorageDialog extends React.PureComponent { ; } - _renderPhasePassPhrase() { - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); - const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); - const LabelledToggleSwitch = sdk.getComponent('views.elements.LabelledToggleSwitch'); - - return

-

{_t( - "Set a recovery passphrase to secure encrypted information and recover it if you log out. " + - "This should be different to your account password:", - )}

- -
- -
- - - - - - - -
- {_t("Advanced")} - - {_t("Set up with a recovery key")} - -
- ; - } - - _renderPhasePassPhraseConfirm() { - const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); - const Field = sdk.getComponent('views.elements.Field'); - - let matchText; - let changeText; - if (this.state.passPhraseConfirm === this.state.passPhrase) { - matchText = _t("That matches!"); - changeText = _t("Use a different passphrase?"); - } else if (!this.state.passPhrase.startsWith(this.state.passPhraseConfirm)) { - // only tell them they're wrong if they've actually gone wrong. - // Security concious readers will note that if you left riot-web unattended - // on this screen, this would make it easy for a malicious person to guess - // your passphrase one letter at a time, but they could get this faster by - // just opening the browser's developer tools and reading it. - // Note that not having typed anything at all will not hit this clause and - // fall through so empty box === no hint. - matchText = _t("That doesn't match."); - changeText = _t("Go back to set it again."); - } - - let passPhraseMatch = null; - if (matchText) { - passPhraseMatch =
-
{matchText}
-
- - {changeText} - -
-
; - } - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); - return
-

{_t( - "Enter your recovery passphrase a second time to confirm it.", - )}

-
- -
- {passPhraseMatch} -
-
- - - -
; - } - _renderPhaseShowKey() { const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); + const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); + const InlineSpinner = sdk.getComponent("elements.InlineSpinner"); + + let continueButton; + if (this.state.phase === PHASE_SHOWKEY) { + continueButton = ; + } else { + continueButton =
+ +
; + } + return

{_t( - "Your recovery key is a safety net - you can use it to restore " + - "access to your encrypted messages if you forget your recovery passphrase.", - )}

-

{_t( - "Keep a copy of it somewhere secure, like a password manager or even a safe.", + "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.", )}

-
- {_t("Your recovery key")} -
{this._recoveryKey.encodedPrivateKey}
+ + {_t("Download")} + + {_t("or")} - {_t("Copy")} - - - {_t("Download")} + {this.state.copied ? _t("Copied!") : _t("Copy")}
-
; - } - - _renderPhaseKeepItSafe() { - let introText; - if (this.state.copied) { - introText = _t( - "Your recovery key has been copied to your clipboard, paste it to:", - {}, {b: s => {s}}, - ); - } else if (this.state.downloaded) { - introText = _t( - "Your recovery key is in your Downloads folder.", - {}, {b: s => {s}}, - ); - } - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); - return
- {introText} -
    -
  • {_t("Print it and store it somewhere safe", {}, {b: s => {s}})}
  • -
  • {_t("Save it on a USB key or backup drive", {}, {b: s => {s}})}
  • -
  • {_t("Copy it to your personal cloud storage", {}, {b: s => {s}})}
  • -
- - - + {continueButton}
; } @@ -666,8 +467,8 @@ export default class CreateSecretStorageDialog extends React.PureComponent { const Spinner = sdk.getComponent('views.elements.Spinner'); return
-
; - } +
; + } _renderPhaseLoadError() { const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); @@ -683,17 +484,21 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
; } - _renderPhaseDone() { + _renderPhaseIntro() { const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); return

{_t( - "You can now verify your other devices, " + - "and other users to keep your chats safe.", + "Create a Recovery Key to store encryption keys & secrets with your account data. " + + "If you lose access to this login you’ll need it to unlock your data.", )}

- +
+ + + +
; } @@ -715,21 +520,15 @@ export default class CreateSecretStorageDialog extends React.PureComponent { _titleForPhase(phase) { switch (phase) { + case PHASE_INTRO: + return _t('Create a Recovery Key'); case PHASE_MIGRATE: return _t('Upgrade your encryption'); - case PHASE_PASSPHRASE: - return _t('Set up encryption'); - case PHASE_PASSPHRASE_CONFIRM: - return _t('Confirm recovery passphrase'); case PHASE_CONFIRM_SKIP: return _t('Are you sure?'); case PHASE_SHOWKEY: - case PHASE_KEEPITSAFE: - return _t('Make a copy of your recovery key'); case PHASE_STORING: - return _t('Setting up keys'); - case PHASE_DONE: - return _t("You're done!"); + return _t('Store your Recovery Key'); default: return ''; } @@ -759,26 +558,15 @@ export default class CreateSecretStorageDialog extends React.PureComponent { case PHASE_LOADERROR: content = this._renderPhaseLoadError(); break; + case PHASE_INTRO: + content = this._renderPhaseIntro(); + break; case PHASE_MIGRATE: content = this._renderPhaseMigrate(); break; - case PHASE_PASSPHRASE: - content = this._renderPhasePassPhrase(); - break; - case PHASE_PASSPHRASE_CONFIRM: - content = this._renderPhasePassPhraseConfirm(); - break; case PHASE_SHOWKEY: - content = this._renderPhaseShowKey(); - break; - case PHASE_KEEPITSAFE: - content = this._renderPhaseKeepItSafe(); - break; case PHASE_STORING: - content = this._renderBusyPhase(); - break; - case PHASE_DONE: - content = this._renderPhaseDone(); + content = this._renderPhaseShowKey(); break; case PHASE_CONFIRM_SKIP: content = this._renderPhaseSkipConfirm(); @@ -796,7 +584,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent { onFinished={this.props.onFinished} title={this._titleForPhase(this.state.phase)} headerImage={headerImage} - hasCancel={this.props.hasCancel && [PHASE_PASSPHRASE].includes(this.state.phase)} + hasCancel={this.props.hasCancel} fixedWidth={false} >
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index dc583d8d9a..3b86c21015 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2187,43 +2187,41 @@ "Restore": "Restore", "You'll need to authenticate with the server to confirm the upgrade.": "You'll need to authenticate with the server to confirm the upgrade.", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:", + "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.": "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.", + "Download": "Download", + "Copy": "Copy", + "Unable to query secret storage status": "Unable to query secret storage status", + "Retry": "Retry", + "Create a Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you’ll need it to unlock your data.": "Create a Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you’ll need it to unlock your data.", + "Create a Recovery Key": "Create a Recovery Key", + "Upgrade your encryption": "Upgrade your encryption", + "Store your Recovery Key": "Store your Recovery Key", + "Unable to set up secret storage": "Unable to set up secret storage", + "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.", + "For maximum security, this should be different from your account password.": "For maximum security, this should be different from your account password.", "Enter a recovery passphrase": "Enter a recovery passphrase", "Great! This recovery passphrase looks strong enough.": "Great! This recovery passphrase looks strong enough.", - "Back up encrypted message keys": "Back up encrypted message keys", "Set up with a recovery key": "Set up with a recovery key", "That matches!": "That matches!", "Use a different passphrase?": "Use a different passphrase?", "That doesn't match.": "That doesn't match.", "Go back to set it again.": "Go back to set it again.", - "Enter your recovery passphrase a second time to confirm it.": "Enter your recovery passphrase a second time to confirm it.", - "Confirm your recovery passphrase": "Confirm your recovery passphrase", + "Please enter your recovery passphrase a second time to confirm.": "Please enter your recovery passphrase a second time to confirm.", + "Repeat your recovery passphrase...": "Repeat your recovery passphrase...", "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Keep a copy of it somewhere secure, like a password manager or even a safe.", "Your recovery key": "Your recovery key", - "Copy": "Copy", - "Download": "Download", "Your recovery key has been copied to your clipboard, paste it to:": "Your recovery key has been copied to your clipboard, paste it to:", "Your recovery key is in your Downloads folder.": "Your recovery key is in your Downloads folder.", "Print it and store it somewhere safe": "Print it and store it somewhere safe", "Save it on a USB key or backup drive": "Save it on a USB key or backup drive", "Copy it to your personal cloud storage": "Copy it to your personal cloud storage", - "Unable to query secret storage status": "Unable to query secret storage status", - "Retry": "Retry", - "You can now verify your other devices, and other users to keep your chats safe.": "You can now verify your other devices, and other users to keep your chats safe.", - "Upgrade your encryption": "Upgrade your encryption", - "Confirm recovery passphrase": "Confirm recovery passphrase", - "Make a copy of your recovery key": "Make a copy of your recovery key", - "You're done!": "You're done!", - "Unable to set up secret storage": "Unable to set up secret storage", - "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.", - "For maximum security, this should be different from your account password.": "For maximum security, this should be different from your account password.", - "Please enter your recovery passphrase a second time to confirm.": "Please enter your recovery passphrase a second time to confirm.", - "Repeat your recovery passphrase...": "Repeat your recovery passphrase...", "Your keys are being backed up (the first backup could take a few minutes).": "Your keys are being backed up (the first backup could take a few minutes).", "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.": "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.", "Set up Secure Message Recovery": "Set up Secure Message Recovery", "Secure your backup with a recovery passphrase": "Secure your backup with a recovery passphrase", + "Confirm your recovery passphrase": "Confirm your recovery passphrase", + "Make a copy of your recovery key": "Make a copy of your recovery key", "Starting backup...": "Starting backup...", "Success!": "Success!", "Create key backup": "Create key backup", From 631184c661aa74150d5ff1e1eff1959103a1e8cf Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 29 May 2020 15:55:16 +0100 Subject: [PATCH 0013/1504] Fix upgrading with already trusted backup --- .../dialogs/secretstorage/CreateSecretStorageDialog.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index 44e00d79cd..2147f2c8a8 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -68,7 +68,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent { // does the server offer a UI auth flow with just m.login.password // for /keys/device_signing/upload? (If we have an account password, we // assume that it can) - canUploadKeysWithPasswordOnly: Boolean(this.state.accountPassword), + canUploadKeysWithPasswordOnly: null, canUploadKeyCheckInProgress: false, accountPassword: props.accountPassword || "", accountPasswordCorrect: null, @@ -76,6 +76,12 @@ export default class CreateSecretStorageDialog extends React.PureComponent { useKeyBackup: true, }; + if (props.accountPassword) { + // If we have an account password, we assume we can upload keys with + // just a password (otherwise leave it as null so we poll to check) + this.state.canUploadKeysWithPasswordOnly = true; + } + this._passphraseField = createRef(); this.loadData(); @@ -375,7 +381,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
{_t("Restore your key backup to upgrade your encryption")}
; nextCaption = _t("Restore"); - } else if (this.state.canUploadKeysWithPasswordOnly && !this.state.accountPassword) { + } else if (this.state.canUploadKeysWithPasswordOnly && !this.props.accountPassword) { authPrompt =
{_t("Enter your account password to confirm the upgrade:")}
Date: Tue, 2 Jun 2020 16:32:15 +0100 Subject: [PATCH 0014/1504] Prompt for recovery key on login rather than passphrase Only show passphrase options at all if the user has a passphrase on their SSSS key. --- .../structures/auth/_CompleteSecurity.scss | 4 + src/CrossSigningManager.js | 20 ++- .../structures/auth/CompleteSecurity.js | 4 + .../structures/auth/SetupEncryptionBody.js | 137 +++++++++++++++++- .../keybackup/RestoreKeyBackupDialog.js | 2 +- .../AccessSecretStorageDialog.js | 9 +- .../views/settings/CrossSigningPanel.js | 2 +- src/i18n/strings/en_EN.json | 11 +- src/stores/SetupEncryptionStore.js | 55 ++++++- 9 files changed, 224 insertions(+), 20 deletions(-) diff --git a/res/css/structures/auth/_CompleteSecurity.scss b/res/css/structures/auth/_CompleteSecurity.scss index f742be70e4..7dba57305f 100644 --- a/res/css/structures/auth/_CompleteSecurity.scss +++ b/res/css/structures/auth/_CompleteSecurity.scss @@ -70,6 +70,10 @@ limitations under the License. } } +.mx_CompleteSecurity_recoveryKeyInput { + width: 368px; +} + .mx_CompleteSecurity_heroIcon { width: 128px; height: 128px; diff --git a/src/CrossSigningManager.js b/src/CrossSigningManager.js index c37d0f8bf5..d40f820ac0 100644 --- a/src/CrossSigningManager.js +++ b/src/CrossSigningManager.js @@ -30,6 +30,8 @@ import {encodeBase64} from "matrix-js-sdk/src/crypto/olmlib"; // operation ends. let secretStorageKeys = {}; let secretStorageBeingAccessed = false; +// Stores the 'passphraseOnly' option for the active storage access operation +let passphraseOnlyOption = null; function isCachingAllowed() { return ( @@ -99,6 +101,7 @@ async function getSecretStorageKey({ keys: keyInfos }, ssssItemName) { const key = await inputToKey(input); return await MatrixClientPeg.get().checkSecretStorageKey(key, info); }, + passphraseOnly: passphraseOnlyOption, }, /* className= */ null, /* isPriorityModal= */ false, @@ -213,19 +216,27 @@ export async function promptForBackupPassphrase() { * * @param {Function} [func] An operation to perform once secret storage has been * bootstrapped. Optional. - * @param {bool} [forceReset] Reset secret storage even if it's already set up + * @param {object} [opts] Named options + * @param {bool} [opts.forceReset] Reset secret storage even if it's already set up + * @param {object} [opts.withKeys] Map of key ID to key for SSSS keys that the client + * already has available. If a key is not supplied here, the user will be prompted. + * @param {bool} [opts.passphraseOnly] If true, do not prompt for recovery key or to reset keys */ -export async function accessSecretStorage(func = async () => { }, forceReset = false) { +export async function accessSecretStorage( + func = async () => { }, opts = {}, +) { const cli = MatrixClientPeg.get(); secretStorageBeingAccessed = true; + passphraseOnlyOption = opts.passphraseOnly; + secretStorageKeys = Object.assign({}, opts.withKeys || {}); try { - if (!await cli.hasSecretStorageKey() || forceReset) { + if (!await cli.hasSecretStorageKey() || opts.forceReset) { // This dialog calls bootstrap itself after guiding the user through // passphrase creation. const { finished } = Modal.createTrackedDialogAsync('Create Secret Storage dialog', '', import("./async-components/views/dialogs/secretstorage/CreateSecretStorageDialog"), { - force: forceReset, + force: opts.forceReset, }, null, /* priority = */ false, /* static = */ true, ); @@ -263,5 +274,6 @@ export async function accessSecretStorage(func = async () => { }, forceReset = f if (!isCachingAllowed()) { secretStorageKeys = {}; } + passphraseOnlyOption = null; } } diff --git a/src/components/structures/auth/CompleteSecurity.js b/src/components/structures/auth/CompleteSecurity.js index c73691611d..e38ecd3eac 100644 --- a/src/components/structures/auth/CompleteSecurity.js +++ b/src/components/structures/auth/CompleteSecurity.js @@ -21,6 +21,7 @@ import * as sdk from '../../../index'; import { SetupEncryptionStore, PHASE_INTRO, + PHASE_RECOVERY_KEY, PHASE_BUSY, PHASE_DONE, PHASE_CONFIRM_SKIP, @@ -61,6 +62,9 @@ export default class CompleteSecurity extends React.Component { if (phase === PHASE_INTRO) { icon = ; title = _t("Verify this login"); + } else if (phase === PHASE_RECOVERY_KEY) { + icon = ; + title = _t("Recovery Key"); } else if (phase === PHASE_DONE) { icon = ; title = _t("Session verified"); diff --git a/src/components/structures/auth/SetupEncryptionBody.js b/src/components/structures/auth/SetupEncryptionBody.js index 26534c6e02..cc454b865f 100644 --- a/src/components/structures/auth/SetupEncryptionBody.js +++ b/src/components/structures/auth/SetupEncryptionBody.js @@ -19,15 +19,26 @@ import PropTypes from 'prop-types'; import { _t } from '../../../languageHandler'; import { MatrixClientPeg } from '../../../MatrixClientPeg'; import * as sdk from '../../../index'; +import withValidation from '../../views/elements/Validation'; +import { decodeRecoveryKey } from 'matrix-js-sdk/src/crypto/recoverykey'; import { SetupEncryptionStore, PHASE_INTRO, + PHASE_RECOVERY_KEY, PHASE_BUSY, PHASE_DONE, PHASE_CONFIRM_SKIP, PHASE_FINISHED, } from '../../../stores/SetupEncryptionStore'; +function keyHasPassphrase(keyInfo) { + return ( + keyInfo.passphrase && + keyInfo.passphrase.salt && + keyInfo.passphrase.iterations + ); +} + export default class SetupEncryptionBody extends React.Component { static propTypes = { onFinished: PropTypes.func.isRequired, @@ -45,6 +56,11 @@ export default class SetupEncryptionBody extends React.Component { // Because of the latter, it lives in the state. verificationRequest: store.verificationRequest, backupInfo: store.backupInfo, + recoveryKey: '', + // whether the recovery key is a valid recovery key + recoveryKeyValid: null, + // whether the recovery key is the correct key or not + recoveryKeyCorrect: null, }; } @@ -67,9 +83,14 @@ export default class SetupEncryptionBody extends React.Component { store.stop(); } - _onUsePassphraseClick = async () => { + _onUseRecoveryKeyClick = async () => { const store = SetupEncryptionStore.sharedInstance(); - store.usePassPhrase(); + store.useRecoveryKey(); + } + + _onRecoveryKeyCancelClick() { + const store = SetupEncryptionStore.sharedInstance(); + store.cancelUseRecoveryKey(); } onSkipClick = () => { @@ -92,6 +113,66 @@ export default class SetupEncryptionBody extends React.Component { store.done(); } + _onUsePassphraseClick = () => { + const store = SetupEncryptionStore.sharedInstance(); + store.usePassPhrase(); + } + + _onRecoveryKeyChange = (e) => { + this.setState({recoveryKey: e.target.value}); + } + + _onRecoveryKeyValidate = async (fieldState) => { + const result = await this._validateRecoveryKey(fieldState); + this.setState({recoveryKeyValid: result.valid}); + return result; + } + + _validateRecoveryKey = withValidation({ + rules: [ + { + key: "required", + test: async (state) => { + try { + const decodedKey = decodeRecoveryKey(state.value); + const correct = await MatrixClientPeg.get().checkSecretStorageKey( + decodedKey, SetupEncryptionStore.sharedInstance().keyInfo, + ); + this.setState({ + recoveryKeyValid: true, + recoveryKeyCorrect: correct, + }); + return correct; + } catch (e) { + this.setState({ + recoveryKeyValid: false, + recoveryKeyCorrect: false, + }); + return false; + } + }, + invalid: function() { + if (this.state.recoveryKeyValid) { + return _t("This isn't the recovery key for your account"); + } else { + return _t("This isn't a valid recovery key"); + } + }, + valid: function() { + return _t("Looks good!"); + }, + }, + ], + }) + + _onRecoveryKeyFormSubmit = (e) => { + e.preventDefault(); + if (!this.state.recoveryKeyCorrect) return; + + const store = SetupEncryptionStore.sharedInstance(); + store.setupWithRecoveryKey(decodeRecoveryKey(this.state.recoveryKey)); + } + render() { const AccessibleButton = sdk.getComponent("elements.AccessibleButton"); @@ -108,6 +189,13 @@ export default class SetupEncryptionBody extends React.Component { member={MatrixClientPeg.get().getUser(this.state.verificationRequest.otherUserId)} />; } else if (phase === PHASE_INTRO) { + const store = SetupEncryptionStore.sharedInstance(); + let recoveryKeyPrompt; + if (keyHasPassphrase(store.keyInfo)) { + recoveryKeyPrompt = _t("Use Recovery Key or Passphrase"); + } else { + recoveryKeyPrompt = _t("Use Recovery Key"); + } return (

{_t( @@ -131,8 +219,8 @@ export default class SetupEncryptionBody extends React.Component {

- - {_t("Use Recovery Passphrase or Key")} + + {recoveryKeyPrompt} {_t("Skip")} @@ -140,6 +228,47 @@ export default class SetupEncryptionBody extends React.Component {
); + } else if (phase === PHASE_RECOVERY_KEY) { + const store = SetupEncryptionStore.sharedInstance(); + let keyPrompt; + if (keyHasPassphrase(store.keyInfo)) { + keyPrompt = _t( + "Enter your Recovery Key or enter a
Recovery Passphrase to continue.", {}, + { + a: sub => {sub}, + }, + ); + } else { + keyPrompt = _t("Enter your Recovery Key to continue."); + } + + const Field = sdk.getComponent('elements.Field'); + return
+

{keyPrompt}

+
+ +
+
+ + {_t("Cancel")} + + + {_t("Continue")} + +
+
; } else if (phase === PHASE_DONE) { let message; if (this.state.backupInfo) { diff --git a/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js b/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js index a16202ed93..2f4c524ed7 100644 --- a/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js +++ b/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js @@ -94,7 +94,7 @@ export default class RestoreKeyBackupDialog extends React.PureComponent { if (SettingsStore.getValue("feature_cross_signing")) { // If cross-signing is enabled, we reset the SSSS recovery passphrase (and cross-signing keys) this.props.onFinished(false); - accessSecretStorage(() => {}, /* forceReset = */ true); + accessSecretStorage(() => {}, {forceReset: true}); } else { Modal.createTrackedDialogAsync('Key Backup', 'Key Backup', import('../../../../async-components/views/dialogs/keybackup/CreateKeyBackupDialog'), diff --git a/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js b/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js index e2ceadfbb9..43697f8ee7 100644 --- a/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js +++ b/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js @@ -32,6 +32,9 @@ export default class AccessSecretStorageDialog extends React.PureComponent { keyInfo: PropTypes.object.isRequired, // Function from one of { passphrase, recoveryKey } -> boolean checkPrivateKey: PropTypes.func.isRequired, + // If true, only prompt for a passphrase and do not offer to restore with + // a recovery key or reset keys. + passphraseOnly: PropTypes.bool, } constructor(props) { @@ -58,7 +61,7 @@ export default class AccessSecretStorageDialog extends React.PureComponent { _onResetRecoveryClick = () => { // Re-enter the access flow, but resetting storage this time around. this.props.onFinished(false); - accessSecretStorage(() => {}, /* forceReset = */ true); + accessSecretStorage(() => {}, {forceReset: true}); } _onRecoveryKeyChange = (e) => { @@ -164,7 +167,7 @@ export default class AccessSecretStorageDialog extends React.PureComponent { primaryDisabled={this.state.passPhrase.length === 0} /> - {_t( + {this.props.passphraseOnly ? null : _t( "If you've forgotten your recovery passphrase you can "+ "use your recovery key or " + "set up new recovery options." @@ -234,7 +237,7 @@ export default class AccessSecretStorageDialog extends React.PureComponent { primaryDisabled={!this.state.recoveryKeyValid} /> - {_t( + {this.props.passphraseOnly ? null : _t( "If you've forgotten your recovery key you can "+ "." , {}, { diff --git a/src/components/views/settings/CrossSigningPanel.js b/src/components/views/settings/CrossSigningPanel.js index b1642e260d..19148c2b6c 100644 --- a/src/components/views/settings/CrossSigningPanel.js +++ b/src/components/views/settings/CrossSigningPanel.js @@ -113,7 +113,7 @@ export default class CrossSigningPanel extends React.PureComponent { _bootstrapSecureSecretStorage = async (forceReset=false) => { this.setState({ error: null }); try { - await accessSecretStorage(() => undefined, forceReset); + await accessSecretStorage(() => undefined, {forceReset}); } catch (e) { this.setState({ error: e }); console.error("Error bootstrapping secret storage", e); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 3b86c21015..18cfada862 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2083,6 +2083,7 @@ "Uploading %(filename)s and %(count)s others|one": "Uploading %(filename)s and %(count)s other", "Could not load user profile": "Could not load user profile", "Verify this login": "Verify this login", + "Recovery Key": "Recovery Key", "Session verified": "Session verified", "Failed to send email": "Failed to send email", "The email address linked to your account must be entered.": "The email address linked to your account must be entered.", @@ -2136,10 +2137,16 @@ "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 account": "Create your account", + "This isn't the recovery key for your account": "This isn't the recovery key for your account", + "This isn't a valid recovery key": "This isn't a valid recovery key", + "Looks good!": "Looks good!", + "Use Recovery Key or Passphrase": "Use Recovery Key or Passphrase", + "Use Recovery Key": "Use Recovery Key", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.", "This requires the latest Riot on your other devices:": "This requires the latest Riot on your other devices:", "or another cross-signing capable Matrix client": "or another cross-signing capable Matrix client", - "Use Recovery Passphrase or Key": "Use Recovery Passphrase or Key", + "Enter your Recovery Key or enter a Recovery Passphrase to continue.": "Enter your Recovery Key or enter a Recovery Passphrase to continue.", + "Enter your Recovery Key to continue.": "Enter your Recovery Key to continue.", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.", "Your new session is now verified. Other users will see it as trusted.": "Your new session is now verified. Other users will see it as trusted.", "Without completing security on this session, it won’t have access to encrypted messages.": "Without completing security on this session, it won’t have access to encrypted messages.", @@ -2182,9 +2189,9 @@ "Import": "Import", "Confirm encryption setup": "Confirm encryption setup", "Click the button below to confirm setting up encryption.": "Click the button below to confirm setting up encryption.", - "Enter your account password to confirm the upgrade:": "Enter your account password to confirm the upgrade:", "Restore your key backup to upgrade your encryption": "Restore your key backup to upgrade your encryption", "Restore": "Restore", + "Enter your account password to confirm the upgrade:": "Enter your account password to confirm the upgrade:", "You'll need to authenticate with the server to confirm the upgrade.": "You'll need to authenticate with the server to confirm the upgrade.", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.", "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.": "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.", diff --git a/src/stores/SetupEncryptionStore.js b/src/stores/SetupEncryptionStore.js index ae1f998b02..8c081e1da9 100644 --- a/src/stores/SetupEncryptionStore.js +++ b/src/stores/SetupEncryptionStore.js @@ -20,10 +20,11 @@ import { accessSecretStorage, AccessCancelledError } from '../CrossSigningManage import { PHASE_DONE as VERIF_PHASE_DONE } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; export const PHASE_INTRO = 0; -export const PHASE_BUSY = 1; -export const PHASE_DONE = 2; //final done stage, but still showing UX -export const PHASE_CONFIRM_SKIP = 3; -export const PHASE_FINISHED = 4; //UX can be closed +export const PHASE_RECOVERY_KEY = 1; +export const PHASE_BUSY = 2; +export const PHASE_DONE = 3; //final done stage, but still showing UX +export const PHASE_CONFIRM_SKIP = 4; +export const PHASE_FINISHED = 5; //UX can be closed export class SetupEncryptionStore extends EventEmitter { static sharedInstance() { @@ -36,11 +37,19 @@ export class SetupEncryptionStore extends EventEmitter { return; } this._started = true; - this.phase = PHASE_INTRO; + this.phase = PHASE_BUSY; this.verificationRequest = null; this.backupInfo = null; + + // ID of the key that the secrets we want are encrypted with + this.keyId = null; + // Descriptor of the key that the secrets we want are encrypted with + this.keyInfo = null; + MatrixClientPeg.get().on("crypto.verification.request", this.onVerificationRequest); MatrixClientPeg.get().on('userTrustStatusChanged', this._onUserTrustStatusChanged); + + this.fetchKeyInfo(); } stop() { @@ -57,7 +66,40 @@ export class SetupEncryptionStore extends EventEmitter { } } + async fetchKeyInfo() { + const keys = await MatrixClientPeg.get().isSecretStored('m.cross_signing.master', false); + if (Object.keys(keys).length === 0) { + this.keyId = null; + this.keyInfo = null; + } else { + // If the secret is stored under more than one key, we just pick an arbitrary one + this.keyId = Object.keys(keys)[0]; + this.keyInfo = keys[this.keyId]; + } + + this.phase = PHASE_INTRO; + this.emit("update"); + } + + async useRecoveryKey() { + this.phase = PHASE_RECOVERY_KEY; + this.emit("update"); + } + + cancelUseRecoveryKey() { + this.phase = PHASE_INTRO; + this.emit("update"); + } + + async setupWithRecoveryKey(recoveryKey) { + this.startTrustCheck({[this.keyId]: recoveryKey}); + } + async usePassPhrase() { + this.startTrustCheck(); + } + + async startTrustCheck(withKeys) { this.phase = PHASE_BUSY; this.emit("update"); const cli = MatrixClientPeg.get(); @@ -84,6 +126,9 @@ export class SetupEncryptionStore extends EventEmitter { // to advance before this. await cli.restoreKeyBackupWithSecretStorage(backupInfo); } + }, { + withKeys, + passphraseOnly: true, }).catch(reject); } catch (e) { console.error(e); From c0ac44e4711e55f32501365045e14576665a0aec Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Tue, 2 Jun 2020 17:10:22 +0100 Subject: [PATCH 0015/1504] Change internal font size from from 15 to 20. --- res/css/_common.scss | 2 +- res/css/_font-sizes.scss | 112 +++++++++++++-------------- src/settings/Settings.js | 2 +- src/settings/watchers/FontWatcher.ts | 3 +- 4 files changed, 60 insertions(+), 59 deletions(-) diff --git a/res/css/_common.scss b/res/css/_common.scss index ebeeb381e6..c562c3e95f 100644 --- a/res/css/_common.scss +++ b/res/css/_common.scss @@ -19,7 +19,7 @@ limitations under the License. @import "./_font-sizes.scss"; :root { - font-size: 15px; + font-size: 20px; } html { diff --git a/res/css/_font-sizes.scss b/res/css/_font-sizes.scss index 2d7ab67e40..c4a223d66c 100644 --- a/res/css/_font-sizes.scss +++ b/res/css/_font-sizes.scss @@ -14,59 +14,59 @@ See the License for the specific language governing permissions and limitations under the License. */ -$font-1px: 0.067rem; -$font-1-5px: 0.100rem; -$font-2px: 0.133rem; -$font-3px: 0.200rem; -$font-4px: 0.267rem; -$font-5px: 0.333rem; -$font-6px: 0.400rem; -$font-7px: 0.467rem; -$font-8px: 0.533rem; -$font-9px: 0.600rem; -$font-10px: 0.667rem; -$font-10-4px: 0.693rem; -$font-11px: 0.733rem; -$font-12px: 0.800rem; -$font-13px: 0.867rem; -$font-14px: 0.933rem; -$font-15px: 1.000rem; -$font-16px: 1.067rem; -$font-17px: 1.133rem; -$font-18px: 1.200rem; -$font-19px: 1.267rem; -$font-20px: 1.3333333rem; -$font-21px: 1.400rem; -$font-22px: 1.467rem; -$font-23px: 1.533rem; -$font-24px: 1.600rem; -$font-25px: 1.667rem; -$font-26px: 1.733rem; -$font-27px: 1.800rem; -$font-28px: 1.867rem; -$font-29px: 1.933rem; -$font-30px: 2.000rem; -$font-31px: 2.067rem; -$font-32px: 2.133rem; -$font-33px: 2.200rem; -$font-34px: 2.267rem; -$font-35px: 2.333rem; -$font-36px: 2.400rem; -$font-37px: 2.467rem; -$font-38px: 2.533rem; -$font-39px: 2.600rem; -$font-40px: 2.667rem; -$font-41px: 2.733rem; -$font-42px: 2.800rem; -$font-43px: 2.867rem; -$font-44px: 2.933rem; -$font-45px: 3.000rem; -$font-46px: 3.067rem; -$font-47px: 3.133rem; -$font-48px: 3.200rem; -$font-49px: 3.267rem; -$font-50px: 3.333rem; -$font-51px: 3.400rem; -$font-52px: 3.467rem; -$font-88px: 5.887rem; -$font-400px: 26.667rem; +$font-1px: 0.05rem; +$font-1-5px: 0.075rem; +$font-2px: 0.1rem; +$font-3px: 0.15rem; +$font-4px: 0.2rem; +$font-5px: 0.25rem; +$font-6px: 0.3rem; +$font-7px: 0.35rem; +$font-8px: 0.4rem; +$font-9px: 0.45rem; +$font-10px: 0.5rem; +$font-10-4px: 0.52rem; +$font-11px: 0.55rem; +$font-12px: 0.6rem; +$font-13px: 0.65rem; +$font-14px: 0.7rem; +$font-15px: 0.75rem; +$font-16px: 0.8rem; +$font-17px: 0.85rem; +$font-18px: 0.9rem; +$font-19px: 0.95rem; +$font-20px: 1.0rem; +$font-21px: 1.05rem; +$font-22px: 1.1rem; +$font-23px: 1.15rem; +$font-24px: 1.2rem; +$font-25px: 1.25rem; +$font-26px: 1.3rem; +$font-27px: 1.35rem; +$font-28px: 1.4rem; +$font-29px: 1.45rem; +$font-30px: 1.5rem; +$font-31px: 1.55rem; +$font-32px: 1.6rem; +$font-33px: 1.65rem; +$font-34px: 1.7rem; +$font-35px: 1.75rem; +$font-36px: 1.8rem; +$font-37px: 1.85rem; +$font-38px: 1.9rem; +$font-39px: 1.95rem; +$font-40px: 2.0rem; +$font-41px: 2.05rem; +$font-42px: 2.1rem; +$font-43px: 2.15rem; +$font-44px: 2.2rem; +$font-45px: 2.25rem; +$font-46px: 2.3rem; +$font-47px: 2.35rem; +$font-48px: 2.4rem; +$font-49px: 2.45rem; +$font-50px: 2.5rem; +$font-51px: 2.55rem; +$font-52px: 2.6rem; +$font-88px: 4.4rem; +$font-400px: 20rem; diff --git a/src/settings/Settings.js b/src/settings/Settings.js index e6aa112c5f..7cb4421a4f 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -180,7 +180,7 @@ export const SETTINGS = { "fontSize": { displayName: _td("Font size"), supportedLevels: LEVELS_ACCOUNT_SETTINGS, - default: 15, + default: 20, controller: new FontSizeController(), }, "useCustomFontSize": { diff --git a/src/settings/watchers/FontWatcher.ts b/src/settings/watchers/FontWatcher.ts index dce9e77e9e..08a809f869 100644 --- a/src/settings/watchers/FontWatcher.ts +++ b/src/settings/watchers/FontWatcher.ts @@ -45,7 +45,8 @@ export class FontWatcher implements IWatcher { }; private setRootFontSize = (size) => { - const fontSize = Math.max(Math.min(FontWatcher.MAX_SIZE, size), FontWatcher.MIN_SIZE); + // Externally we tell the user the font is size 15. Internally we use 20. + const fontSize = Math.max(Math.min(FontWatcher.MAX_SIZE, size), FontWatcher.MIN_SIZE) + 5; if (fontSize !== size) { SettingsStore.setValue("fontSize", null, SettingLevel.Device, fontSize); From 5624cf5ceb45c553a5bd21499fcd3cdf51b0734a Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 2 Jun 2020 17:55:27 +0100 Subject: [PATCH 0016/1504] Add option to reset keys to the encryption setup screen --- .../structures/auth/_CompleteSecurity.scss | 4 ++++ .../CreateSecretStorageDialog.js | 24 +++++++++++++++++-- .../structures/auth/SetupEncryptionBody.js | 15 ++++++++++++ src/stores/SetupEncryptionStore.js | 9 +++++++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/res/css/structures/auth/_CompleteSecurity.scss b/res/css/structures/auth/_CompleteSecurity.scss index 7dba57305f..7ea78befb4 100644 --- a/res/css/structures/auth/_CompleteSecurity.scss +++ b/res/css/structures/auth/_CompleteSecurity.scss @@ -102,3 +102,7 @@ limitations under the License. } } } + +.mx_CompleteSecurity_resetText { + padding-top: 20px; +} diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index 2147f2c8a8..a7114d9a73 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -359,6 +359,14 @@ export default class CreateSecretStorageDialog extends React.PureComponent { this.setState({phase: PHASE_CONFIRM_SKIP}); } + _onGoBackClick = () => { + if (this.state.backupInfo && !this.props.force) { + this.setState({phase: PHASE_MIGRATE}); + } else { + this.setState({phase: PHASE_INTRO}); + } + } + _onAccountPasswordChange = (e) => { this.setState({ accountPassword: e.target.value, @@ -492,6 +500,18 @@ export default class CreateSecretStorageDialog extends React.PureComponent { _renderPhaseIntro() { const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); + + let cancelButton; + if (this.props.force) { + // if this is a forced key reset then aborting will just leave the old keys + // in place, and is thereforece just 'cancel' + cancelButton = ; + } else { + // if it's setting up from scratch then aborting leaves the user without + // crypto set up, so they skipping the setup. + cancelButton = ; + } + return

{_t( "Create a Recovery Key to store encryption keys & secrets with your account data. " + @@ -502,7 +522,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent { onPrimaryButtonClick={this._onIntroContinueClick} hasCancel={false} > - + {cancelButton}

; @@ -516,7 +536,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent { "access to encrypted messages.", )} diff --git a/src/components/structures/auth/SetupEncryptionBody.js b/src/components/structures/auth/SetupEncryptionBody.js index cc454b865f..bc83e6e939 100644 --- a/src/components/structures/auth/SetupEncryptionBody.js +++ b/src/components/structures/auth/SetupEncryptionBody.js @@ -83,6 +83,11 @@ export default class SetupEncryptionBody extends React.Component { store.stop(); } + _onResetClick = () => { + const store = SetupEncryptionStore.sharedInstance(); + store.startKeyReset(); + } + _onUseRecoveryKeyClick = async () => { const store = SetupEncryptionStore.sharedInstance(); store.useRecoveryKey(); @@ -226,6 +231,16 @@ export default class SetupEncryptionBody extends React.Component { {_t("Skip")}
+
{_t( + "If you've forgotten your recovery key you can " + + "", {}, { + button: sub => + {sub} + , + }, + )}
); } else if (phase === PHASE_RECOVERY_KEY) { diff --git a/src/stores/SetupEncryptionStore.js b/src/stores/SetupEncryptionStore.js index 8c081e1da9..cc64e24a03 100644 --- a/src/stores/SetupEncryptionStore.js +++ b/src/stores/SetupEncryptionStore.js @@ -81,6 +81,15 @@ export class SetupEncryptionStore extends EventEmitter { this.emit("update"); } + async startKeyReset() { + try { + await accessSecretStorage(() => {}, {forceReset: true}); + // If the keys are reset, the trust status event will fire and we'll change state + } catch (e) { + // dialog was cancelled - stay on the current screen + } + } + async useRecoveryKey() { this.phase = PHASE_RECOVERY_KEY; this.emit("update"); From 397b95c5fa12fda74e8594d61a31e8b02c5629e2 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 2 Jun 2020 18:03:32 +0100 Subject: [PATCH 0017/1504] lint --- .../views/dialogs/secretstorage/CreateSecretStorageDialog.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index a7114d9a73..f5a8db4e04 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -509,7 +509,9 @@ export default class CreateSecretStorageDialog extends React.PureComponent { } else { // if it's setting up from scratch then aborting leaves the user without // crypto set up, so they skipping the setup. - cancelButton = ; + cancelButton = ; } return
From 0046e204a071c27cd473a06111937c15085e9edf Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 2 Jun 2020 18:30:37 +0100 Subject: [PATCH 0018/1504] Make the continue button actually work --- src/components/structures/auth/SetupEncryptionBody.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/structures/auth/SetupEncryptionBody.js b/src/components/structures/auth/SetupEncryptionBody.js index bc83e6e939..7886ed26dd 100644 --- a/src/components/structures/auth/SetupEncryptionBody.js +++ b/src/components/structures/auth/SetupEncryptionBody.js @@ -279,6 +279,7 @@ export default class SetupEncryptionBody extends React.Component { {_t("Continue")} From 338b88fe4371d6d1991dfe7ecfbdee3bcd14b35d Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 3 Jun 2020 09:34:45 +0100 Subject: [PATCH 0019/1504] Remove unused CSS rule --- res/css/structures/auth/_CompleteSecurity.scss | 4 ---- 1 file changed, 4 deletions(-) diff --git a/res/css/structures/auth/_CompleteSecurity.scss b/res/css/structures/auth/_CompleteSecurity.scss index 7ea78befb4..b0462db477 100644 --- a/res/css/structures/auth/_CompleteSecurity.scss +++ b/res/css/structures/auth/_CompleteSecurity.scss @@ -70,10 +70,6 @@ limitations under the License. } } -.mx_CompleteSecurity_recoveryKeyInput { - width: 368px; -} - .mx_CompleteSecurity_heroIcon { width: 128px; height: 128px; From b60a1d3b66b01845cef4d40cee5247b5990576ac Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 3 Jun 2020 09:55:48 +0100 Subject: [PATCH 0020/1504] Import components --- .../secretstorage/CreateSecretStorageDialog.js | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index 5bb25b8f19..72759575b4 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -25,6 +25,10 @@ import Modal from '../../../../Modal'; import { promptForBackupPassphrase } from '../../../../CrossSigningManager'; import {copyNode} from "../../../../utils/strings"; import {SSOAuthEntry} from "../../../../components/views/auth/InteractiveAuthEntryComponents"; +import AccessibleButton from "../../../../components/views/elements/AccessibleButton"; +import DialogButtons from "../../../../components/views/elements/DialogButtons"; +import InlineSpinner from "../../../../components/views/elements/InlineSpinner"; + const PHASE_LOADING = 0; const PHASE_LOADERROR = 1; @@ -380,7 +384,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { // Once we're confident enough in this (and it's supported enough) we can do // it automatically. // https://github.com/vector-im/riot-web/issues/11696 - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); const Field = sdk.getComponent('views.elements.Field'); let authPrompt; @@ -429,10 +432,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { } _renderPhaseShowKey() { - const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); - const InlineSpinner = sdk.getComponent("elements.InlineSpinner"); - let continueButton; if (this.state.phase === PHASE_SHOWKEY) { continueButton =

{_t("Unable to query secret storage status")}

@@ -500,8 +498,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { } _renderPhaseIntro() { - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); - let cancelButton; if (this.props.force) { // if this is a forced key reset then aborting will just leave the old keys @@ -532,7 +528,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { } _renderPhaseSkipConfirm() { - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); return
{_t( "Without completing security on this session, it won’t have " + @@ -568,7 +563,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { let content; if (this.state.error) { - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); content =

{_t("Unable to set up secret storage")}

From 5844a2dd9bd9edeacc74303f05fad4975098d671 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 3 Jun 2020 10:09:38 +0100 Subject: [PATCH 0021/1504] indenting (that somehow the linter doesn't care about?) --- .../views/dialogs/secretstorage/CreateSecretStorageDialog.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index 72759575b4..dd71b13fb6 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -481,8 +481,8 @@ export default class CreateSecretStorageDialog extends React.PureComponent { const Spinner = sdk.getComponent('views.elements.Spinner'); return
-
; - } +
; + } _renderPhaseLoadError() { return
From d33cd5d6f826ff99313fd68b8dae64618a10f7fc Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 3 Jun 2020 02:57:55 +0000 Subject: [PATCH 0022/1504] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2303 of 2303 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-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 0d89863155..9022acca08 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2480,5 +2480,6 @@ "Restart": "重新啟動", "Upgrade your Riot": "升級您的 Riot", "A new version of Riot is available!": "已有新版的 Riot!", - "New version available. Update now.": "有可用的新版本。立刻更新。" + "New version available. Update now.": "有可用的新版本。立刻更新。", + "Emoji picker": "顏文字挑選器" } From a165066d195279a3da4f258937f6380f4738eda5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Tue, 2 Jun 2020 15:20:44 +0000 Subject: [PATCH 0023/1504] Translated using Weblate (Estonian) Currently translated at 57.3% (1320 of 2303 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 81 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index d00525b420..eccfec8ef5 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -1276,5 +1276,84 @@ "Keys restored": "Krüptimise võtmed on taastatud", "Failed to decrypt %(failedCount)s sessions!": "%(failedCount)s sessiooni dekrüptimine ei õnnestunud!", "Successfully restored %(sessionCount)s keys": "%(sessionCount)s sessiooni võtme taastamine õnnestus", - "Warning: you should only set up key backup from a trusted computer.": "Hoiatus: sa peaksid võtmete varunduse seadistama vaid usaldusväärsest arvutist." + "Warning: you should only set up key backup from a trusted computer.": "Hoiatus: sa peaksid võtmete varunduse seadistama vaid usaldusväärsest arvutist.", + "eg: @bot:* or example.org": "näiteks: @bot:* või example.org", + "Subscribed lists": "Tellitud loendid", + "Subscribe": "Telli", + "Start automatically after system login": "Käivita automaatselt peale arvutisse sisselogimist", + "Always show the window menu bar": "Näita alati aknas menüüriba", + "Show tray icon and minimize window to it on close": "Näita süsteemisalve ikooni ja Rioti'i akna sulgemisel minimeeri ta salve", + "Preferences": "Eelistused", + "Room list": "Jututubade loend", + "Timeline": "Ajajoon", + "Autocomplete delay (ms)": "Viivitus automaatsel sõnalõpetusel (ms)", + "Server Name": "Serveri nimi", + "Enter password": "Sisesta salasõna", + "Nice, strong password!": "Vahva, see on korralik salasõna!", + "Password is allowed, but unsafe": "Selline salasõna on küll lubatud, kuid üsna ebaturvaline", + "Keep going...": "Jätka...", + "The email field must not be blank.": "E-posti aadressi väli ei tohi olla tühi.", + "The username field must not be blank.": "Kasutajanime väli ei tohi olla tühi.", + "The phone number field must not be blank.": "Telefoninumbri väli ei tohi olla tühi.", + "The password field must not be blank.": "Salasõna väli ei tohi olla tühi.", + "Email": "E-posti aadress", + "Username": "Kasutajanimi", + "Phone": "Telefon", + "Not sure of your password? Set a new one": "Sa ei ole kindel oma salasõnas? Tee uus salasõna", + "Sign in with": "Logi sisse oma kasutajaga", + "No identity server is configured so you cannot add an email address in order to reset your password in the future.": "Ühtegi isikutuvastusserverit pole seadistatud ning sul ei ole võimalik lisada oma e-posti aadressi hilisemaks võimalikuks salasõna muutmiseks.", + "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Kui sa ei sisesta oma e-posti aadressi, siis sa ei saa hiljem oma salasõnamuuta. Kas sa kindlasti soovid seda?", + "Use an email address to recover your account": "Kasuta e-posti aadressi ligipääsu taastamiseks oma kontole", + "Enter email address (required on this homeserver)": "Sisesta e-posti aadress (nõutav selles koduserveris)", + "Doesn't look like a valid email address": "Ei tundu olema korralik e-posti aadress", + "Passwords don't match": "Salasõnad ei klapi", + "Enter phone number (required on this homeserver)": "Sisesta telefoninumber (nõutav selles koduserveris)", + "Doesn't look like a valid phone number": "Ei tundu olema korralik telefoninumber", + "Use lowercase letters, numbers, dashes and underscores only": "Palun kasuta vaid väiketähti, numbreid, sidekriipsu ja alakriipsu", + "Enter username": "Sisesta kasutajanimi", + "Email (optional)": "E-posti aadress (kui soovid)", + "Phone (optional)": "Telefoninumber (kui soovid)", + "Create your Matrix account on %(serverName)s": "Loo oma Matrixi konto %(serverName)s serveris", + "Create your Matrix account on ": "Loo oma Matrixi konto serveris", + "Register": "Registreeru", + "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Seadista e-posti aadress, mis võimaldaks sul vajadusel taastada ligipääsu oma kontole. Lisaks võid kasutada e-posti aadressi või telefoninumbrit, et need inimesed, kes sind tunnevad, saaks sind leida.", + "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Seadista e-posti aadress, mis võimaldaks sul vajadusel taastada ligipääsu oma kontole. Lisaks võid kasutada e-posti aadressi, et need inimesed, kes sind tunnevad, saaks sind leida.", + "Enter your custom homeserver URL What does this mean?": "Sisesta oma koduserveri aadress Mida see tähendab?", + "Homeserver URL": "Koduserveri aadress", + "Enter your custom identity server URL What does this mean?": "Sisesta kohandatud isikutuvastusserver aadress Mida see tähendab?", + "Identity Server URL": "Isikutuvastusserveri aadress", + "Other servers": "Muud serverid", + "Free": "Tasuta teenus", + "Join millions for free on the largest public server": "Liitu tasuta nende miljonitega, kas kasutavad suurimat avalikku Matrix'i serverit", + "Premium": "Tasuline eriteenus", + "Premium hosting for organisations Learn more": "Tasuline Matrix'i majutusteenus organisatsioonidele Loe lisateavet", + "Find other public servers or use a custom server": "Otsi muid avalikke Matrix'i servereid või kasuta enda määratud serverit", + "Sign in to your Matrix account on %(serverName)s": "Logi sisse on Matrix'i kontole %(serverName)s serveris", + "Sign in to your Matrix account on ": "Logi sisse on Matrix'i kontole serveris", + "Sorry, your browser is not able to run Riot.": "Vabandust, aga Riot ei toimi sinu brauseris.", + "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot kasutab mitmeid uusi brauseri-põhiseid tehnoloogiaid ning mitmed neist kas pole veel olemas või on lahendatud sinu brauseris katselisena.", + "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!": "Sinu praeguse brauseriga meie rakenduse välimus ja toimivus võivad olla täitsa valed ning mõni funktsionaalsus ei pruugi toimida üldse. Kui soovid katsetada, siis loomulikult võid jätkata, kuid erinevate tekkivate vigadega pead ise hakkama saama!", + "Fetching third party location failed": "Kolmanda osapoole asukoha tuvastamine ei õnnestunud", + "Unable to look up room ID from server": "Jututoa tunnuse otsimine serverist ei õnnestunud", + "Show sessions, send anyway or cancel.": "Näita sessioone, saada ikkagi või tühista.", + "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Sinu sõnumit ei saadetud, kuna see koduserver on ületanud on ületanud ressursipiirangu. Teenuse kasutamiseks palun võta ühendust serveri haldajaga.", + "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Saada kõik uuesti või tühista kõigi saatmine. Samuti võid sa valida saatmiseks või saatmise tühistamiseks üksikuid sõnumeid.", + "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Saada sõnum uuesti või tühista sõnumi saatmine.", + "Connectivity to the server has been lost.": "Ühendus sinu serveriga on katkenud.", + "Sent messages will be stored until your connection has returned.": "Saadetud sõnumid salvestatakse seniks, kuni võrguühendus on taastunud.", + "Active call": "Käsilolev kõne", + "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Siin ei leidu kedagi teist! Kas sa tahaksid kutsuda kedagi jututuppa või lõpetada selle tühja jututoa hoiatuse kuvamise?", + "You have %(count)s unread notifications in a prior version of this room.|other": "Sinul on selle jututoa varasemas versioonis %(count)s lugemata teavitust.", + "You have %(count)s unread notifications in a prior version of this room.|one": "Sinul on selle jututoa varasemas versioonis %(count)s lugemata teavitus.", + "Fill screen": "Täida ekraan", + "No identity server is configured: add one in server settings to reset your password.": "Ühtegi isikutuvastusserverit pole seadistatud: salasõna taastamiseks määra see serveri sätetes.", + "Sign in instead": "Pigem logi sisse", + "A verification email will be sent to your inbox to confirm setting your new password.": "Kontrollimaks, et just sina sina ise sisestasid uue salasõna, siis saadame sulle kinnituskirja.", + "Send Reset Email": "Saada salasõna taastamise e-kiri", + "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Saatsime kirja %(emailAddress)s aadressile. Kui sa oled klõpsinud kirjas olnud linki, siis jätka alljärgnevaga.", + "I have verified my email address": "Ma olen teinud läbi oma e-posti aadressi kontrolli", + "Your password has been reset.": "Sinu salasõna on muudetud.", + "Dismiss read marker and jump to bottom": "Ära arvesta loetud sõnumite järjehoidjat ning mine kõige lõppu", + "Jump to oldest unread message": "Mine vanima lugemata sõnumi juurde", + "Upload a file": "Lae fail üles" } From 89c33b2c389960eef07bb60683ccc6396aed6349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Wed, 3 Jun 2020 06:39:17 +0000 Subject: [PATCH 0024/1504] Translated using Weblate (French) Currently translated at 100.0% (2303 of 2303 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 1bd6fd254a..f5cedf902a 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2481,5 +2481,6 @@ "Restart": "Redémarrer", "Upgrade your Riot": "Mettre à niveau votre Riot", "A new version of Riot is available!": "Une nouvelle version de Riot est disponible !", - "New version available. Update now.": "Nouvelle version disponible. Faire la mise à niveau maintenant." + "New version available. Update now.": "Nouvelle version disponible. Faire la mise à niveau maintenant.", + "Emoji picker": "Sélecteur d’émojis" } From 226abb457e2ca5b3302609b6a69033e1480e24f6 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 3 Jun 2020 12:24:22 +0100 Subject: [PATCH 0025/1504] Update copy in encryption upgrade swcreen --- .../secretstorage/CreateSecretStorageDialog.js | 14 ++++++-------- src/i18n/strings/en_EN.json | 6 ++---- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index dd71b13fb6..192427d384 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -389,10 +389,8 @@ export default class CreateSecretStorageDialog extends React.PureComponent { let authPrompt; let nextCaption = _t("Next"); if (!this.state.backupSigStatus.usable) { - authPrompt =
-
{_t("Restore your key backup to upgrade your encryption")}
-
; - nextCaption = _t("Restore"); + authPrompt = null; + nextCaption = _t("Upload"); } else if (this.state.canUploadKeysWithPasswordOnly && !this.props.accountPassword) { authPrompt =
{_t("Enter your account password to confirm the upgrade:")}
@@ -413,9 +411,9 @@ export default class CreateSecretStorageDialog extends React.PureComponent { return

{_t( - "Upgrade this session to allow it to verify other sessions, " + - "granting them access to encrypted messages and marking them " + - "as trusted for other users.", + "Upgrade your Recovery Key to store encryption keys & secrets " + + "with your account data. If you lose access to this login you'll " + + "need it to unlock your data.", )}

{authPrompt}
Date: Wed, 3 Jun 2020 13:04:29 +0100 Subject: [PATCH 0026/1504] Fix end to end tests for new UI --- test/end-to-end-tests/src/usecases/signup.js | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/test/end-to-end-tests/src/usecases/signup.js b/test/end-to-end-tests/src/usecases/signup.js index aa9f6b7efa..c56d4a8dc8 100644 --- a/test/end-to-end-tests/src/usecases/signup.js +++ b/test/end-to-end-tests/src/usecases/signup.js @@ -79,35 +79,18 @@ module.exports = async function signup(session, username, password, homeserver) const acceptButton = await session.query('.mx_InteractiveAuthEntryComponents_termsSubmit'); await acceptButton.click(); - //plow through cross-signing setup by entering arbitrary details - //TODO: It's probably important for the tests to know the passphrase - const xsigningPassphrase = 'a7eaXcjpa9!Yl7#V^h$B^%dovHUVX'; // https://xkcd.com/221/ - let passphraseField = await session.query('.mx_CreateSecretStorageDialog_passPhraseField input'); - await session.replaceInputText(passphraseField, xsigningPassphrase); - await session.delay(1000); // give it a second to analyze our passphrase for security let xsignContButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_buttons .mx_Dialog_primary'); await xsignContButton.click(); - //repeat passphrase entry - passphraseField = await session.query('.mx_CreateSecretStorageDialog_passPhraseField input'); - await session.replaceInputText(passphraseField, xsigningPassphrase); - await session.delay(1000); // give it a second to analyze our passphrase for security - xsignContButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_buttons .mx_Dialog_primary'); - await xsignContButton.click(); - //ignore the recovery key //TODO: It's probably important for the tests to know the recovery key const copyButton = await session.query('.mx_CreateSecretStorageDialog_recoveryKeyButtons_copyBtn'); await copyButton.click(); //acknowledge that we copied the recovery key to a safe place - const copyContinueButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_primary'); + const copyContinueButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_buttons .mx_Dialog_primary'); await copyContinueButton.click(); - //acknowledge that we're done cross-signing setup and our keys are safe - const doneOkButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_primary'); - await doneOkButton.click(); - //wait for registration to finish so the hash gets set //onhashchange better? From 0c1809bb380ee35a4d01cbd22893e766184f72fb Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 3 Jun 2020 13:24:56 +0100 Subject: [PATCH 0027/1504] lint --- test/end-to-end-tests/src/usecases/signup.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/end-to-end-tests/src/usecases/signup.js b/test/end-to-end-tests/src/usecases/signup.js index c56d4a8dc8..2859aadbda 100644 --- a/test/end-to-end-tests/src/usecases/signup.js +++ b/test/end-to-end-tests/src/usecases/signup.js @@ -79,7 +79,7 @@ module.exports = async function signup(session, username, password, homeserver) const acceptButton = await session.query('.mx_InteractiveAuthEntryComponents_termsSubmit'); await acceptButton.click(); - let xsignContButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_buttons .mx_Dialog_primary'); + const xsignContButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_buttons .mx_Dialog_primary'); await xsignContButton.click(); //ignore the recovery key @@ -88,7 +88,9 @@ module.exports = async function signup(session, username, password, homeserver) await copyButton.click(); //acknowledge that we copied the recovery key to a safe place - const copyContinueButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_buttons .mx_Dialog_primary'); + const copyContinueButton = await session.query( + '.mx_CreateSecretStorageDialog .mx_Dialog_buttons .mx_Dialog_primary', + ); await copyContinueButton.click(); //wait for registration to finish so the hash gets set From 677c7aac451766f386d1a6a075cd816dfb59bc55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Wed, 3 Jun 2020 11:30:33 +0000 Subject: [PATCH 0028/1504] Translated using Weblate (Estonian) Currently translated at 57.8% (1304 of 2257 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index eccfec8ef5..0fdcca40d1 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -1355,5 +1355,24 @@ "Your password has been reset.": "Sinu salasõna on muudetud.", "Dismiss read marker and jump to bottom": "Ära arvesta loetud sõnumite järjehoidjat ning mine kõige lõppu", "Jump to oldest unread message": "Mine vanima lugemata sõnumi juurde", - "Upload a file": "Lae fail üles" + "Upload a file": "Lae fail üles", + "Read Marker lifetime (ms)": "Lugemise markeri iga (ms)", + "Read Marker off-screen lifetime (ms)": "Lugemise markeri iga, kui Riot pole fookuses (ms)", + "Unignore": "Lõpeta eiramine", + "": "", + "Import E2E room keys": "Impordi E2E läbiva krüptimise võtmed jututubade jaoks", + "Cryptography": "Krüptimine", + "Session ID:": "Sessiooni tunnus:", + "Session key:": "Sessiooni võti:", + "Bulk options": "Masstoimingute seadistused", + "Accept all %(invitedRooms)s invites": "Võta vastu kõik %(invitedRooms)s kutsed", + "Reject all %(invitedRooms)s invites": "Lükka tagasi kõik %(invitedRooms)s kutsed", + "Key backup": "Võtmete varundus", + "Cross-signing": "Risttunnustamine", + "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.": "Hoiatus: Jututoa versiooni uuendamine ei koli jututoa liikmeid automaatselt uude jututoa olekusse. Vanas jututoa versioonis saab olema viide uuele versioonile ning kõik liikmed peavad seda viidet klõpsama.", + "Uploaded sound": "Üleslaetud heli", + "Sounds": "Helid", + "Notification sound": "Teavitusheli", + "Reset": "Taasta algolek", + "Set a new custom sound": "Seadista uus kohandatud heli" } From 003e75968ac40e5ad77a15059a29c8062ff1ab01 Mon Sep 17 00:00:00 2001 From: random Date: Wed, 3 Jun 2020 12:32:57 +0000 Subject: [PATCH 0029/1504] Translated using Weblate (Italian) Currently translated at 100.0% (2257 of 2257 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-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 e5c1b890d7..37c5159546 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2476,5 +2476,6 @@ "Restart": "Riavvia", "Upgrade your Riot": "Aggiorna Riot", "A new version of Riot is available!": "È disponibile una nuova versione di Riot!", - "New version available. Update now.": "Nuova versione disponibile. Aggiorna ora." + "New version available. Update now.": "Nuova versione disponibile. Aggiorna ora.", + "Emoji picker": "Selettore emoji" } From 520bb1e6fad4ca31db472257724df2ef895fb516 Mon Sep 17 00:00:00 2001 From: Tirifto Date: Wed, 3 Jun 2020 14:40:22 +0000 Subject: [PATCH 0030/1504] Translated using Weblate (Esperanto) Currently translated at 100.0% (2257 of 2257 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eo/ --- src/i18n/strings/eo.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 5252deba23..74cf3629bb 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -2455,5 +2455,6 @@ "Restart": "Restartigi", "Upgrade your Riot": "Gradaltigi vian Rioton", "A new version of Riot is available!": "Nova versio de Riot estas disponebla!", - "New version available. Update now.": "Nova versio estas disponebla. Ĝisdatigu nun." + "New version available. Update now.": "Nova versio estas disponebla. Ĝisdatigu nun.", + "Emoji picker": "Elektilo de bildsignoj" } From bdc451d66beb6944dc4fbbfa19aef14fef457858 Mon Sep 17 00:00:00 2001 From: Justin Sleep Date: Wed, 3 Jun 2020 16:36:48 -0500 Subject: [PATCH 0031/1504] Remove escape backslashes in non-Markdown messages --- src/Markdown.js | 8 -------- src/editor/serialize.ts | 4 ++++ test/editor/serialize-test.js | 12 ++++++++++++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/Markdown.js b/src/Markdown.js index fb1f8bf0ea..d312b7c5bd 100644 --- a/src/Markdown.js +++ b/src/Markdown.js @@ -175,14 +175,6 @@ export default class Markdown { const renderer = new commonmark.HtmlRenderer({safe: false}); const real_paragraph = renderer.paragraph; - // The default `out` function only sends the input through an XML - // escaping function, which causes messages to be entity encoded, - // which we don't want in this case. - renderer.out = function(s) { - // The `lit` function adds a string literal to the output buffer. - this.lit(s); - }; - renderer.paragraph = function(node, entering) { // as with toHTML, only append lines to paragraphs if there are // multiple paragraphs diff --git a/src/editor/serialize.ts b/src/editor/serialize.ts index 4d0b8cd03a..85d2bb8e8f 100644 --- a/src/editor/serialize.ts +++ b/src/editor/serialize.ts @@ -42,6 +42,10 @@ export function htmlSerializeIfNeeded(model: EditorModel, {forceHTML = false} = if (!parser.isPlainText() || forceHTML) { return parser.toHTML(); } + // ensure removal of escape backslashes in non-Markdown messages + if (md.indexOf("\\") > -1) { + return parser.toPlaintext(); + } } export function textSerialize(model: EditorModel) { diff --git a/test/editor/serialize-test.js b/test/editor/serialize-test.js index bd26ae91bb..f0d577ea21 100644 --- a/test/editor/serialize-test.js +++ b/test/editor/serialize-test.js @@ -61,4 +61,16 @@ describe('editor/serialize', function() { const html = htmlSerializeIfNeeded(model, {}); expect(html).toBe("Displayname]"); }); + it('escaped markdown should not retain backslashes', function() { + const pc = createPartCreator(); + const model = new EditorModel([pc.plain('\\*hello\\* world')]); + const html = htmlSerializeIfNeeded(model, {}); + expect(html).toBe('*hello* world'); + }); + it('escaped markdown should convert HTML entities', function() { + const pc = createPartCreator(); + const model = new EditorModel([pc.plain('\\*hello\\* world < hey world!')]); + const html = htmlSerializeIfNeeded(model, {}); + expect(html).toBe('*hello* world < hey world!'); + }); }); From 39dcc9f23ca67873dabbe0831d1935cd97bc114b Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Thu, 4 Jun 2020 01:01:54 +0000 Subject: [PATCH 0032/1504] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2258 of 2258 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-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 9022acca08..e4f9faa56b 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2481,5 +2481,6 @@ "Upgrade your Riot": "升級您的 Riot", "A new version of Riot is available!": "已有新版的 Riot!", "New version available. Update now.": "有可用的新版本。立刻更新。", - "Emoji picker": "顏文字挑選器" + "Emoji picker": "顏文字挑選器", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "您的伺服器管理員已在私人聊天室與直接訊息中預設停用端到端加密。" } From db6d60566bfcfb03a22215e19f7205fca31f1935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Thu, 4 Jun 2020 06:46:15 +0000 Subject: [PATCH 0033/1504] Translated using Weblate (French) Currently translated at 100.0% (2258 of 2258 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index f5cedf902a..45345e5c7d 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2482,5 +2482,6 @@ "Upgrade your Riot": "Mettre à niveau votre Riot", "A new version of Riot is available!": "Une nouvelle version de Riot est disponible !", "New version available. Update now.": "Nouvelle version disponible. Faire la mise à niveau maintenant.", - "Emoji picker": "Sélecteur d’émojis" + "Emoji picker": "Sélecteur d’émojis", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "L’administrateur de votre serveur a désactivé le chiffrement de bout en bout par défaut dans les salons privés et les messages directs." } From 9c93e487481d710da5127f7b6e2b608da68e2c28 Mon Sep 17 00:00:00 2001 From: random Date: Thu, 4 Jun 2020 07:33:11 +0000 Subject: [PATCH 0034/1504] Translated using Weblate (Italian) Currently translated at 100.0% (2258 of 2258 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-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 37c5159546..6f97e61560 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2477,5 +2477,6 @@ "Upgrade your Riot": "Aggiorna Riot", "A new version of Riot is available!": "È disponibile una nuova versione di Riot!", "New version available. Update now.": "Nuova versione disponibile. Aggiorna ora.", - "Emoji picker": "Selettore emoji" + "Emoji picker": "Selettore emoji", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "L'amministratore del server ha disattivato la crittografia end-to-end in modo predefinito nelle stanze private e nei messaggi diretti." } From 82eb80f0c63e5291c25302aac9f9f54d3d457586 Mon Sep 17 00:00:00 2001 From: XoseM Date: Thu, 4 Jun 2020 12:57:18 +0000 Subject: [PATCH 0035/1504] Translated using Weblate (Galician) Currently translated at 52.7% (1189 of 2258 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index d37abfb890..6ae8289889 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -1253,5 +1253,11 @@ "Add theme": "Engadir decorado", "Theme": "Decorado", "Language and region": "Idioma e rexión", - "Your theme": "O teu decorado" + "Your theme": "O teu decorado", + "Use the improved room list (in development - refresh to apply changes)": "Usar a lista mellorada de salas (en desenvolvemento - actualiza para aplicar)", + "Support adding custom themes": "Permitir engadir decorados personalizados", + "Use IRC layout": "Usar disposición IRC", + "Font size": "Tamaño da letra", + "Custom font size": "Tamaño letra personalizado", + "Enable Emoji suggestions while typing": "Activar suxestión de Emoji ao escribir" } From 47df8f2ac0e8834597ba5b7862c41dfb3fd882a8 Mon Sep 17 00:00:00 2001 From: XoseM Date: Thu, 4 Jun 2020 12:59:42 +0000 Subject: [PATCH 0036/1504] Translated using Weblate (Galician) Currently translated at 53.5% (1208 of 2258 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 6ae8289889..ba67879d14 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -1259,5 +1259,24 @@ "Use IRC layout": "Usar disposición IRC", "Font size": "Tamaño da letra", "Custom font size": "Tamaño letra personalizado", - "Enable Emoji suggestions while typing": "Activar suxestión de Emoji ao escribir" + "Enable Emoji suggestions while typing": "Activar suxestión de Emoji ao escribir", + "Show a placeholder for removed messages": "Resaltar o lugar das mensaxes eliminadas", + "Show avatar changes": "Mostrar cambios de avatar", + "Show display name changes": "Mostrar cambios do nome mostrado", + "Show read receipts sent by other users": "Mostrar resgardo de lectura enviados por outras usuarias", + "Show a reminder to enable Secure Message Recovery in encrypted rooms": "Mostrar recordatorio para activar Recuperación Segura de Mensaxes en salas cifradas", + "Show avatars in user and room mentions": "Mostrar avatares nas mencións de salas e usuarias", + "Enable big emoji in chat": "Activar Emojis grandes na conversa", + "Send typing notifications": "Enviar notificación de escritura", + "Show typing notifications": "Mostrar notificacións de escritura", + "Allow Peer-to-Peer for 1:1 calls": "Permitir Par-a-Par para chamadas 1:1", + "Never send encrypted messages to unverified sessions from this session": "Non enviar nunca desde esta sesión mensaxes cifradas a sesións non verificadas", + "Never send encrypted messages to unverified sessions in this room from this session": "Non enviar mensaxes cifradas desde esta sesión a sesións non verificadas nesta sala", + "Prompt before sending invites to potentially invalid matrix IDs": "Avisar antes de enviar convites a IDs de Matrix potencialmente incorrectos", + "Show developer tools": "Mostrar ferramentas de desenvolvemento", + "Order rooms by name": "Ordenar salas por nome", + "Show rooms with unread notifications first": "Mostrar primeiro as salas que teñen notificacións sen ler", + "Show shortcuts to recently viewed rooms above the room list": "Mostrar atallos a salas vistas recentemente enriba da lista de salas", + "Show hidden events in timeline": "Mostrar na cronoloxía eventos ocultos", + "Low bandwidth mode": "Modo de ancho de banda reducido" } From e94f3422dfdc2045d76a8481ada485f56cd0a6e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Fri, 29 May 2020 11:44:08 +0200 Subject: [PATCH 0037/1504] Searching: Add support to paginate Seshat search results. --- src/Searching.js | 44 ++++++++++++++++++++++++++- src/components/structures/RoomView.js | 5 ++- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index 663328fe41..c16906ade7 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -88,6 +88,7 @@ async function localSearch(searchTerm, roomId = undefined) { } const emptyResult = { + seshatQuery: searchArgs, results: [], highlights: [], }; @@ -97,6 +98,7 @@ async function localSearch(searchTerm, roomId = undefined) { const eventIndex = EventIndexPeg.get(); const localResult = await eventIndex.search(searchArgs); + emptyResult.seshatQuery.next_batch = localResult.next_batch; const response = { search_categories: { @@ -104,8 +106,25 @@ async function localSearch(searchTerm, roomId = undefined) { }, }; - const result = MatrixClientPeg.get()._processRoomEventsSearch( + return MatrixClientPeg.get()._processRoomEventsSearch( emptyResult, response); +} + +async function paginatedLocalSearch(searchResult) { + const eventIndex = EventIndexPeg.get(); + + let searchArgs = searchResult.seshatQuery; + + const localResult = await eventIndex.search(searchArgs); + + const response = { + search_categories: { + room_events: localResult, + }, + }; + + const result = MatrixClientPeg.get()._processRoomEventsSearch(searchResult, response); + searchResult.pendingRequest = null; return result; } @@ -132,6 +151,29 @@ function eventIndexSearch(term, roomId = undefined) { return searchPromise; } +function eventIndexSearchPagination(searchResult) { + const client = MatrixClientPeg.get(); + const query = searchResult.seshatQuery; + + if (!query) { + return client.backPaginateRoomEventsSearch(searchResult); + } else { + const promise = paginatedLocalSearch(searchResult); + searchResult.pendingRequest = promise; + return promise; + } +} + +export function searchPagination(searchResult) { + const eventIndex = EventIndexPeg.get(); + const client = MatrixClientPeg.get(); + + if (searchResult.pendingRequest) return searchResult.pendingRequest; + + if (eventIndex === null) return client.backPaginateRoomEventsSearch(searchResult); + else return eventIndexSearchPagination(searchResult); +} + export default function eventSearch(term, roomId = undefined) { const eventIndex = EventIndexPeg.get(); diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 49d7e3c238..6796984037 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -39,7 +39,7 @@ import Tinter from '../../Tinter'; import rate_limited_func from '../../ratelimitedfunc'; import * as ObjectUtils from '../../ObjectUtils'; import * as Rooms from '../../Rooms'; -import eventSearch from '../../Searching'; +import eventSearch, {searchPagination} from '../../Searching'; import {isOnlyCtrlOrCmdIgnoreShiftKeyEvent, isOnlyCtrlOrCmdKeyEvent, Key} from '../../Keyboard'; @@ -1035,8 +1035,7 @@ export default createReactClass({ if (this.state.searchResults.next_batch) { debuglog("requesting more search results"); - const searchPromise = this.context.backPaginateRoomEventsSearch( - this.state.searchResults); + const searchPromise = searchPagination(this.state.searchResults); return this._handleSearchResult(searchPromise); } else { debuglog("no more search results"); From c1ef193e3a8ba0e221d2655095fabc016127b4d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Fri, 29 May 2020 16:32:57 +0200 Subject: [PATCH 0038/1504] Searching: Add initial pagination for combined searches. --- src/Searching.js | 122 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 114 insertions(+), 8 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index c16906ade7..1960f2a2b2 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -71,6 +71,18 @@ async function combinedSearch(searchTerm) { result.highlights = localResult.highlights.concat( serverSideResult.highlights); + result.seshatQuery = localResult.seshatQuery; + result.serverSideNextBatch = serverSideResult.next_batch; + result._query = serverSideResult._query; + + // We need the next batch to be set for the client to know that it can + // paginate further. + if (serverSideResult.next_batch) { + result.next_batch = serverSideResult.next_batch; + } else { + result.next_batch = localResult.next_batch; + } + return result; } @@ -106,16 +118,16 @@ async function localSearch(searchTerm, roomId = undefined) { }, }; - return MatrixClientPeg.get()._processRoomEventsSearch( - emptyResult, response); + return MatrixClientPeg.get()._processRoomEventsSearch(emptyResult, response); } -async function paginatedLocalSearch(searchResult) { +async function localPagination(searchResult) { const eventIndex = EventIndexPeg.get(); - let searchArgs = searchResult.seshatQuery; + const searchArgs = searchResult.seshatQuery; const localResult = await eventIndex.search(searchArgs); + searchResult.seshatQuery.next_batch = localResult.next_batch; const response = { search_categories: { @@ -129,6 +141,92 @@ async function paginatedLocalSearch(searchResult) { return result; } +/** + * Combine the local and server search results + */ +function combineResults(previousSearchResult, localResult = undefined, serverSideResult = undefined) { + // // cachedResults = previousSearchResult.cachedResults; + // if (localResult) { + // previousSearchResult.seshatQuery.next_batch = localResult.next_batch; + // } + const compare = (a, b) => { + const aEvent = a.result; + const bEvent = b.result; + + if (aEvent.origin_server_ts > + bEvent.origin_server_ts) return -1; + if (aEvent.origin_server_ts < + bEvent.origin_server_ts) return 1; + return 0; + }; + + const result = {}; + + result.count = previousSearchResult.count; + + if (localResult && serverSideResult) { + result.results = localResult.results.concat(serverSideResult.results).sort(compare); + result.highlights = localResult.highlights.concat(serverSideResult.highlights); + } else if (localResult) { + result.results = localResult.results; + result.highlights = localResult.highlights; + } else { + result.results = serverSideResult.results; + result.highlights = serverSideResult.highlights; + } + + if (localResult) { + previousSearchResult.seshatQuery.next_batch = localResult.next_batch; + result.next_batch = localResult.next_batch; + } + + if (serverSideResult && serverSideResult.next_batch) { + previousSearchResult.serverSideNextBatch = serverSideResult.next_batch; + result.next_batch = serverSideResult.next_batch; + } + + console.log("HELLOO COMBINING RESULTS", localResult, serverSideResult, result); + + return result +} + +async function combinedPagination(searchResult) { + const eventIndex = EventIndexPeg.get(); + const client = MatrixClientPeg.get(); + + console.log("HELLOOO WORLD"); + + const searchArgs = searchResult.seshatQuery; + + let localResult; + let serverSideResult; + + if (searchArgs.next_batch) { + localResult = await eventIndex.search(searchArgs); + } + + if (searchResult.serverSideNextBatch) { + const body = {body: searchResult._query, next_batch: searchResult.serverSideNextBatch}; + serverSideResult = await client.search(body); + } + + const combinedResult = combineResults(searchResult, localResult, serverSideResult.search_categories.room_events); + + const response = { + search_categories: { + room_events: combinedResult, + }, + }; + + const result = client._processRoomEventsSearch(searchResult, response); + + console.log("HELLO NEW RESULT", searchResult); + + searchResult.pendingRequest = null; + + return result +} + function eventIndexSearch(term, roomId = undefined) { let searchPromise; @@ -153,14 +251,22 @@ function eventIndexSearch(term, roomId = undefined) { function eventIndexSearchPagination(searchResult) { const client = MatrixClientPeg.get(); - const query = searchResult.seshatQuery; - if (!query) { + const seshatQuery = searchResult.seshatQuery; + const serverQuery = searchResult._query; + + if (!seshatQuery) { return client.backPaginateRoomEventsSearch(searchResult); - } else { - const promise = paginatedLocalSearch(searchResult); + } else if (!serverQuery) { + const promise = localPagination(searchResult); searchResult.pendingRequest = promise; + return promise; + } else { + const promise = combinedPagination(searchResult); + searchResult.pendingRequest = promise; + + return promise } } From b6198e0ab996770c7ca8a08ae2cd91e9071a5e0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Wed, 3 Jun 2020 14:16:02 +0200 Subject: [PATCH 0039/1504] Searching: Combine the events before letting the client process them. --- src/Searching.js | 194 +++++++++++++++++++++++++++-------------------- 1 file changed, 113 insertions(+), 81 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index 1960f2a2b2..5fc5b31544 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -17,7 +17,9 @@ limitations under the License. import EventIndexPeg from "./indexing/EventIndexPeg"; import {MatrixClientPeg} from "./MatrixClientPeg"; -function serverSideSearch(term, roomId = undefined) { +async function serverSideSearch(term, roomId = undefined, processResult = true) { + const client = MatrixClientPeg.get(); + let filter; if (roomId !== undefined) { // XXX: it's unintuitive that the filter for searching doesn't have @@ -27,19 +29,59 @@ function serverSideSearch(term, roomId = undefined) { }; } - const searchPromise = MatrixClientPeg.get().searchRoomEvents({ - filter, - term, - }); + const body = { + search_categories: { + room_events: { + search_term: term, + filter: filter, + order_by: "recent", + event_context: { + before_limit: 1, + after_limit: 1, + include_profile: true, + }, + }, + }, + }; - return searchPromise; + const response = await client.search({body: body}); + + if (processResult) { + const searchResult = { + _query: body, + results: [], + highlights: [], + }; + + return client._processRoomEventsSearch(searchResult, response); + } + + const result = { + response: response, + query: body, + }; + + return result; +} + +function compareEvents(a, b) { + const aEvent = a.result; + const bEvent = b.result; + + if (aEvent.origin_server_ts > + bEvent.origin_server_ts) return -1; + if (aEvent.origin_server_ts < + bEvent.origin_server_ts) return 1; + return 0; } async function combinedSearch(searchTerm) { + const client = MatrixClientPeg.get(); + // Create two promises, one for the local search, one for the // server-side search. - const serverSidePromise = serverSideSearch(searchTerm); - const localPromise = localSearch(searchTerm); + const serverSidePromise = serverSideSearch(searchTerm, undefined, false); + const localPromise = localSearch(searchTerm, undefined, false); // Wait for both promises to resolve. await Promise.all([serverSidePromise, localPromise]); @@ -48,45 +90,34 @@ async function combinedSearch(searchTerm) { const localResult = await localPromise; const serverSideResult = await serverSidePromise; - // Combine the search results into one result. - const result = {}; + const serverQuery = serverSideResult.query; + const serverResponse = serverSideResult.response; - // Our localResult and serverSideResult are both ordered by - // recency separately, when we combine them the order might not - // be the right one so we need to sort them. - const compare = (a, b) => { - const aEvent = a.context.getEvent().event; - const bEvent = b.context.getEvent().event; + const localQuery = localResult.query; + const localResponse = localResult.response; - if (aEvent.origin_server_ts > - bEvent.origin_server_ts) return -1; - if (aEvent.origin_server_ts < - bEvent.origin_server_ts) return 1; - return 0; + const emptyResult = { + seshatQuery: localQuery, + _query: serverQuery, + serverSideNextBatch: serverResponse.next_batch, + results: [], + highlights: [], }; - result.count = localResult.count + serverSideResult.count; - result.results = localResult.results.concat( - serverSideResult.results).sort(compare); - result.highlights = localResult.highlights.concat( - serverSideResult.highlights); + const combinedResult = combineResponses(emptyResult, localResponse, serverResponse.search_categories.room_events); - result.seshatQuery = localResult.seshatQuery; - result.serverSideNextBatch = serverSideResult.next_batch; - result._query = serverSideResult._query; + const response = { + search_categories: { + room_events: combinedResult, + }, + }; - // We need the next batch to be set for the client to know that it can - // paginate further. - if (serverSideResult.next_batch) { - result.next_batch = serverSideResult.next_batch; - } else { - result.next_batch = localResult.next_batch; - } + const result = client._processRoomEventsSearch(emptyResult, response); return result; } -async function localSearch(searchTerm, roomId = undefined) { +async function localSearch(searchTerm, roomId = undefined, processResult = true) { const searchArgs = { search_term: searchTerm, before_limit: 1, @@ -110,15 +141,27 @@ async function localSearch(searchTerm, roomId = undefined) { const eventIndex = EventIndexPeg.get(); const localResult = await eventIndex.search(searchArgs); - emptyResult.seshatQuery.next_batch = localResult.next_batch; - const response = { - search_categories: { - room_events: localResult, - }, - }; + if (processResult) { + emptyResult.seshatQuery.next_batch = localResult.next_batch; - return MatrixClientPeg.get()._processRoomEventsSearch(emptyResult, response); + const response = { + search_categories: { + room_events: localResult, + }, + }; + + return MatrixClientPeg.get()._processRoomEventsSearch(emptyResult, response); + } + + searchArgs.next_batch = localResult.next_batch; + + const result = { + response: localResult, + query: searchArgs, + } + + return result; } async function localPagination(searchResult) { @@ -144,57 +187,46 @@ async function localPagination(searchResult) { /** * Combine the local and server search results */ -function combineResults(previousSearchResult, localResult = undefined, serverSideResult = undefined) { - // // cachedResults = previousSearchResult.cachedResults; - // if (localResult) { - // previousSearchResult.seshatQuery.next_batch = localResult.next_batch; - // } - const compare = (a, b) => { - const aEvent = a.result; - const bEvent = b.result; +function combineResponses(previousSearchResult, localEvents = undefined, serverEvents = undefined) { + const response = {}; - if (aEvent.origin_server_ts > - bEvent.origin_server_ts) return -1; - if (aEvent.origin_server_ts < - bEvent.origin_server_ts) return 1; - return 0; - }; - - const result = {}; - - result.count = previousSearchResult.count; - - if (localResult && serverSideResult) { - result.results = localResult.results.concat(serverSideResult.results).sort(compare); - result.highlights = localResult.highlights.concat(serverSideResult.highlights); - } else if (localResult) { - result.results = localResult.results; - result.highlights = localResult.highlights; + if (previousSearchResult.count) { + response.count = previousSearchResult.count; } else { - result.results = serverSideResult.results; - result.highlights = serverSideResult.highlights; + response.count = localEvents.count + serverEvents.count; } - if (localResult) { - previousSearchResult.seshatQuery.next_batch = localResult.next_batch; - result.next_batch = localResult.next_batch; + if (localEvents && serverEvents) { + response.results = localEvents.results.concat(serverEvents.results).sort(compareEvents); + response.highlights = localEvents.highlights.concat(serverEvents.highlights); + } else if (localEvents) { + response.results = localEvents.results; + response.highlights = localEvents.highlights; + } else { + response.results = serverEvents.results; + response.highlights = serverEvents.highlights; } - if (serverSideResult && serverSideResult.next_batch) { - previousSearchResult.serverSideNextBatch = serverSideResult.next_batch; - result.next_batch = serverSideResult.next_batch; + if (localEvents) { + previousSearchResult.seshatQuery.next_batch = localEvents.next_batch; + response.next_batch = localEvents.next_batch; } - console.log("HELLOO COMBINING RESULTS", localResult, serverSideResult, result); + if (serverEvents && serverEvents.next_batch) { + previousSearchResult.serverSideNextBatch = serverEvents.next_batch; + response.next_batch = serverEvents.next_batch; + } - return result + console.log("HELLOO COMBINING RESULTS", localEvents, serverEvents, response); + + return response } async function combinedPagination(searchResult) { const eventIndex = EventIndexPeg.get(); const client = MatrixClientPeg.get(); - console.log("HELLOOO WORLD"); + console.log("HELLOOO WORLD", searchResult.oldestEventFrom); const searchArgs = searchResult.seshatQuery; @@ -210,7 +242,7 @@ async function combinedPagination(searchResult) { serverSideResult = await client.search(body); } - const combinedResult = combineResults(searchResult, localResult, serverSideResult.search_categories.room_events); + const combinedResult = combineResponses(searchResult, localResult, serverSideResult.search_categories.room_events); const response = { search_categories: { From c2e0e10553f1bd3f08a6ea12aaa60c34f1653ea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Wed, 3 Jun 2020 14:30:21 +0200 Subject: [PATCH 0040/1504] Searching: Split out more logic that combines the events. --- src/Searching.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index 5fc5b31544..1a5c8d7a48 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -184,18 +184,9 @@ async function localPagination(searchResult) { return result; } -/** - * Combine the local and server search results - */ -function combineResponses(previousSearchResult, localEvents = undefined, serverEvents = undefined) { +function combineEvents(localEvents = undefined, serverEvents = undefined, cachedEvents = undefined) { const response = {}; - if (previousSearchResult.count) { - response.count = previousSearchResult.count; - } else { - response.count = localEvents.count + serverEvents.count; - } - if (localEvents && serverEvents) { response.results = localEvents.results.concat(serverEvents.results).sort(compareEvents); response.highlights = localEvents.highlights.concat(serverEvents.highlights); @@ -207,6 +198,21 @@ function combineResponses(previousSearchResult, localEvents = undefined, serverE response.highlights = serverEvents.highlights; } + return response; +} + +/** + * Combine the local and server search responses + */ +function combineResponses(previousSearchResult, localEvents = undefined, serverEvents = undefined) { + const response = combineEvents(localEvents, serverEvents); + + if (previousSearchResult.count) { + response.count = previousSearchResult.count; + } else { + response.count = localEvents.count + serverEvents.count; + } + if (localEvents) { previousSearchResult.seshatQuery.next_batch = localEvents.next_batch; response.next_batch = localEvents.next_batch; From 28f7d23bfc674bfd899695a352f385462e8ad383 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 4 Jun 2020 11:18:53 +0200 Subject: [PATCH 0041/1504] Searching: Correctly order the combined search results. --- src/Searching.js | 108 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 91 insertions(+), 17 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index 1a5c8d7a48..42a092edb0 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -184,20 +184,78 @@ async function localPagination(searchResult) { return result; } -function combineEvents(localEvents = undefined, serverEvents = undefined, cachedEvents = undefined) { +function combineEvents(previousSearchResult, localEvents = undefined, serverEvents = undefined) { const response = {}; - if (localEvents && serverEvents) { - response.results = localEvents.results.concat(serverEvents.results).sort(compareEvents); - response.highlights = localEvents.highlights.concat(serverEvents.highlights); - } else if (localEvents) { - response.results = localEvents.results; - response.highlights = localEvents.highlights; - } else { - response.results = serverEvents.results; - response.highlights = serverEvents.highlights; + let oldestEventFrom = "server"; + let cachedEvents; + + if (previousSearchResult.oldestEventFrom) { + oldestEventFrom = previousSearchResult.oldestEventFrom; } + if (previousSearchResult.cachedEvents) { + cachedEvents = previousSearchResult.cachedEvents; + } + + if (localEvents && serverEvents) { + const oldestLocalEvent = localEvents.results[localEvents.results.length - 1].result; + const oldestServerEvent = serverEvents.results[serverEvents.results.length - 1].result; + + if (oldestLocalEvent.origin_server_ts <= oldestServerEvent.origin_server_ts) { + oldestEventFrom = "local"; + } + + const combinedEvents = localEvents.results.concat(serverEvents.results).sort(compareEvents); + response.results = combinedEvents.slice(0, 10); + response.highlights = localEvents.highlights.concat(serverEvents.highlights); + previousSearchResult.cachedEvents = combinedEvents.slice(10); + console.log("HELLOO COMBINED", combinedEvents); + } else if (localEvents) { + if (cachedEvents && cachedEvents.length > 0) { + const oldestLocalEvent = localEvents.results[localEvents.results.length - 1].result; + const oldestCachedEvent = cachedEvents[cachedEvents.length - 1].result; + + if (oldestLocalEvent.origin_server_ts <= oldestCachedEvent.origin_server_ts) { + oldestEventFrom = "local"; + } + + const combinedEvents = localEvents.results.concat(cachedEvents).sort(compareEvents); + response.results = combinedEvents.slice(0, 10); + previousSearchResult.cachedEvents = combinedEvents.slice(10); + } else { + response.results = localEvents.results; + } + + response.highlights = localEvents.highlights; + } else if (serverEvents) { + console.log("HEEEEELOO WHAT'S GOING ON", cachedEvents); + if (cachedEvents && cachedEvents.length > 0) { + const oldestServerEvent = serverEvents.results[serverEvents.results.length - 1].result; + const oldestCachedEvent = cachedEvents[cachedEvents.length - 1].result; + + if (oldestServerEvent.origin_server_ts <= oldestCachedEvent.origin_server_ts) { + oldestEventFrom = "server"; + } + + const combinedEvents = serverEvents.results.concat(cachedEvents).sort(compareEvents); + response.results = combinedEvents.slice(0, 10); + previousSearchResult.cachedEvents = combinedEvents.slice(10); + } else { + response.results = serverEvents.results; + } + response.highlights = serverEvents.highlights; + } else { + if (cachedEvents && cachedEvents.length > 0) { + response.results = cachedEvents; + } + response.highlights = []; + + delete previousSearchResult.cachedEvents; + } + + previousSearchResult.oldestEventFrom = oldestEventFrom; + return response; } @@ -205,7 +263,7 @@ function combineEvents(localEvents = undefined, serverEvents = undefined, cached * Combine the local and server search responses */ function combineResponses(previousSearchResult, localEvents = undefined, serverEvents = undefined) { - const response = combineEvents(localEvents, serverEvents); + const response = combineEvents(previousSearchResult, localEvents, serverEvents); if (previousSearchResult.count) { response.count = previousSearchResult.count; @@ -215,12 +273,20 @@ function combineResponses(previousSearchResult, localEvents = undefined, serverE if (localEvents) { previousSearchResult.seshatQuery.next_batch = localEvents.next_batch; - response.next_batch = localEvents.next_batch; } - if (serverEvents && serverEvents.next_batch) { + if (serverEvents) { previousSearchResult.serverSideNextBatch = serverEvents.next_batch; - response.next_batch = serverEvents.next_batch; + } + + if (previousSearchResult.seshatQuery.next_batch) { + response.next_batch = previousSearchResult.seshatQuery.next_batch; + } else if (previousSearchResult.serverSideNextBatch) { + response.next_batch = previousSearchResult.serverSideNextBatch; + } + + if (!response.next_batch && previousSearchResult.cachedEvents && previousSearchResult.cachedEvents.length > 0) { + response.next_batch = "cached"; } console.log("HELLOO COMBINING RESULTS", localEvents, serverEvents, response); @@ -239,16 +305,24 @@ async function combinedPagination(searchResult) { let localResult; let serverSideResult; - if (searchArgs.next_batch) { + const oldestEventFrom = searchResult.oldestEventFrom; + + if ((searchArgs.next_batch && oldestEventFrom === "server") || (!searchResult.serverSideNextBatch && searchArgs.next_batch)) { localResult = await eventIndex.search(searchArgs); } - if (searchResult.serverSideNextBatch) { + if ((searchResult.serverSideNextBatch && oldestEventFrom === "local") || (!searchArgs.next_batch && searchResult.serverSideNextBatch)) { const body = {body: searchResult._query, next_batch: searchResult.serverSideNextBatch}; serverSideResult = await client.search(body); } - const combinedResult = combineResponses(searchResult, localResult, serverSideResult.search_categories.room_events); + let serverEvents; + + if (serverSideResult) { + serverEvents = serverSideResult.search_categories.room_events; + } + + const combinedResult = combineResponses(searchResult, localResult, serverEvents); const response = { search_categories: { From c6462e11ecd385eb1bb6c0c7f5279aaef1b8584a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 4 Jun 2020 12:12:09 +0200 Subject: [PATCH 0042/1504] Searching: Fix some lint issues. --- src/Searching.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index 42a092edb0..6932836273 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -159,7 +159,7 @@ async function localSearch(searchTerm, roomId = undefined, processResult = true) const result = { response: localResult, query: searchArgs, - } + }; return result; } @@ -291,7 +291,7 @@ function combineResponses(previousSearchResult, localEvents = undefined, serverE console.log("HELLOO COMBINING RESULTS", localEvents, serverEvents, response); - return response + return response; } async function combinedPagination(searchResult) { @@ -307,11 +307,13 @@ async function combinedPagination(searchResult) { const oldestEventFrom = searchResult.oldestEventFrom; - if ((searchArgs.next_batch && oldestEventFrom === "server") || (!searchResult.serverSideNextBatch && searchArgs.next_batch)) { + if ((searchArgs.next_batch && oldestEventFrom === "server") || + (!searchResult.serverSideNextBatch && searchArgs.next_batch)) { localResult = await eventIndex.search(searchArgs); } - if ((searchResult.serverSideNextBatch && oldestEventFrom === "local") || (!searchArgs.next_batch && searchResult.serverSideNextBatch)) { + if ((searchResult.serverSideNextBatch && oldestEventFrom === "local") || + (!searchArgs.next_batch && searchResult.serverSideNextBatch)) { const body = {body: searchResult._query, next_batch: searchResult.serverSideNextBatch}; serverSideResult = await client.search(body); } @@ -336,7 +338,7 @@ async function combinedPagination(searchResult) { searchResult.pendingRequest = null; - return result + return result; } function eventIndexSearch(term, roomId = undefined) { @@ -378,7 +380,7 @@ function eventIndexSearchPagination(searchResult) { const promise = combinedPagination(searchResult); searchResult.pendingRequest = promise; - return promise + return promise; } } From df0659431456d035b323b1a2a6477a84b7cf5af0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 4 Jun 2020 15:25:02 +0200 Subject: [PATCH 0043/1504] Searching: Refactor out some code that combines the search results. --- src/Searching.js | 100 ++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 57 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index 6932836273..11652a6019 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -17,6 +17,8 @@ limitations under the License. import EventIndexPeg from "./indexing/EventIndexPeg"; import {MatrixClientPeg} from "./MatrixClientPeg"; +const SEARCH_LIMIT = 10; + async function serverSideSearch(term, roomId = undefined, processResult = true) { const client = MatrixClientPeg.get(); @@ -26,6 +28,7 @@ async function serverSideSearch(term, roomId = undefined, processResult = true) // the same shape as the v2 filter API :( filter = { rooms: [roomId], + limit: SEARCH_LIMIT, }; } @@ -96,16 +99,21 @@ async function combinedSearch(searchTerm) { const localQuery = localResult.query; const localResponse = localResult.response; + // Store our queries for later on so we can support pagination. const emptyResult = { seshatQuery: localQuery, _query: serverQuery, serverSideNextBatch: serverResponse.next_batch, + cachedEvents: [], + oldestEventFrom: "server", results: [], highlights: [], }; + // Combine our results. const combinedResult = combineResponses(emptyResult, localResponse, serverResponse.search_categories.room_events); + // Let the client process the combined result. const response = { search_categories: { room_events: combinedResult, @@ -122,6 +130,7 @@ async function localSearch(searchTerm, roomId = undefined, processResult = true) search_term: searchTerm, before_limit: 1, after_limit: 1, + limit: SEARCH_LIMIT, order_by_recency: true, room_id: undefined, }; @@ -184,73 +193,53 @@ async function localPagination(searchResult) { return result; } +function compareOldestEvents(firstResults, secondResults) { + try { + const oldestFirstEvent = firstResults.results[firstResults.results.length - 1].result; + const oldestSecondEvent = secondResults.results[secondResults.results.length - 1].result; + + if (oldestFirstEvent.origin_server_ts <= oldestSecondEvent.origin_server_ts) { + return -1 + } else { + return 1 + } + } catch { + return 0 + } +} + +function combineEventSources(previousSearchResult, response, a, b) { + const combinedEvents = a.concat(b).sort(compareEvents); + response.results = combinedEvents.slice(0, SEARCH_LIMIT); + previousSearchResult.cachedEvents = combinedEvents.slice(SEARCH_LIMIT); +} + function combineEvents(previousSearchResult, localEvents = undefined, serverEvents = undefined) { const response = {}; - let oldestEventFrom = "server"; - let cachedEvents; - - if (previousSearchResult.oldestEventFrom) { - oldestEventFrom = previousSearchResult.oldestEventFrom; - } - - if (previousSearchResult.cachedEvents) { - cachedEvents = previousSearchResult.cachedEvents; - } + const cachedEvents = previousSearchResult.cachedEvents; + let oldestEventFrom = previousSearchResult.oldestEventFrom; + response.highlights = previousSearchResult.highlights; if (localEvents && serverEvents) { - const oldestLocalEvent = localEvents.results[localEvents.results.length - 1].result; - const oldestServerEvent = serverEvents.results[serverEvents.results.length - 1].result; - - if (oldestLocalEvent.origin_server_ts <= oldestServerEvent.origin_server_ts) { + if (compareOldestEvents(localEvents, serverEvents) < 0) { oldestEventFrom = "local"; } - const combinedEvents = localEvents.results.concat(serverEvents.results).sort(compareEvents); - response.results = combinedEvents.slice(0, 10); + combineEventSources(previousSearchResult, response, localEvents.results, serverEvents.results); response.highlights = localEvents.highlights.concat(serverEvents.highlights); - previousSearchResult.cachedEvents = combinedEvents.slice(10); - console.log("HELLOO COMBINED", combinedEvents); } else if (localEvents) { - if (cachedEvents && cachedEvents.length > 0) { - const oldestLocalEvent = localEvents.results[localEvents.results.length - 1].result; - const oldestCachedEvent = cachedEvents[cachedEvents.length - 1].result; - - if (oldestLocalEvent.origin_server_ts <= oldestCachedEvent.origin_server_ts) { - oldestEventFrom = "local"; - } - - const combinedEvents = localEvents.results.concat(cachedEvents).sort(compareEvents); - response.results = combinedEvents.slice(0, 10); - previousSearchResult.cachedEvents = combinedEvents.slice(10); - } else { - response.results = localEvents.results; + if (compareOldestEvents(localEvents, cachedEvents) < 0) { + oldestEventFrom = "local"; } - - response.highlights = localEvents.highlights; + combineEventSources(previousSearchResult, response, localEvents.results, cachedEvents); } else if (serverEvents) { - console.log("HEEEEELOO WHAT'S GOING ON", cachedEvents); - if (cachedEvents && cachedEvents.length > 0) { - const oldestServerEvent = serverEvents.results[serverEvents.results.length - 1].result; - const oldestCachedEvent = cachedEvents[cachedEvents.length - 1].result; - - if (oldestServerEvent.origin_server_ts <= oldestCachedEvent.origin_server_ts) { - oldestEventFrom = "server"; - } - - const combinedEvents = serverEvents.results.concat(cachedEvents).sort(compareEvents); - response.results = combinedEvents.slice(0, 10); - previousSearchResult.cachedEvents = combinedEvents.slice(10); - } else { - response.results = serverEvents.results; + if (compareOldestEvents(serverEvents, cachedEvents) < 0) { + oldestEventFrom = "server"; } - response.highlights = serverEvents.highlights; + combineEventSources(previousSearchResult, response, serverEvents.results, cachedEvents); } else { - if (cachedEvents && cachedEvents.length > 0) { - response.results = cachedEvents; - } - response.highlights = []; - + response.results = cachedEvents; delete previousSearchResult.cachedEvents; } @@ -298,15 +287,12 @@ async function combinedPagination(searchResult) { const eventIndex = EventIndexPeg.get(); const client = MatrixClientPeg.get(); - console.log("HELLOOO WORLD", searchResult.oldestEventFrom); - const searchArgs = searchResult.seshatQuery; + const oldestEventFrom = searchResult.oldestEventFrom; let localResult; let serverSideResult; - const oldestEventFrom = searchResult.oldestEventFrom; - if ((searchArgs.next_batch && oldestEventFrom === "server") || (!searchResult.serverSideNextBatch && searchArgs.next_batch)) { localResult = await eventIndex.search(searchArgs); From 96ca47381c94ea4219a326bb56d37ad51c210ac5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 4 Jun 2020 15:25:32 +0200 Subject: [PATCH 0044/1504] Searching: Add more docs explaining what's going on in the pagination. --- src/Searching.js | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index 11652a6019..7ea1463a5e 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -71,10 +71,9 @@ function compareEvents(a, b) { const aEvent = a.result; const bEvent = b.result; - if (aEvent.origin_server_ts > - bEvent.origin_server_ts) return -1; - if (aEvent.origin_server_ts < - bEvent.origin_server_ts) return 1; + if (aEvent.origin_server_ts > bEvent.origin_server_ts) return -1; + if (aEvent.origin_server_ts < bEvent.origin_server_ts) return 1; + return 0; } @@ -254,26 +253,37 @@ function combineEvents(previousSearchResult, localEvents = undefined, serverEven function combineResponses(previousSearchResult, localEvents = undefined, serverEvents = undefined) { const response = combineEvents(previousSearchResult, localEvents, serverEvents); + // Our first search will contain counts from both sources, subsequent + // pagination requests will fetch responses only from one of the sources, so + // reuse the first count when we're paginating. if (previousSearchResult.count) { response.count = previousSearchResult.count; } else { response.count = localEvents.count + serverEvents.count; } + // Update our next batch tokens for the given search sources. if (localEvents) { previousSearchResult.seshatQuery.next_batch = localEvents.next_batch; } - if (serverEvents) { previousSearchResult.serverSideNextBatch = serverEvents.next_batch; } + // Set the response next batch token to one of the tokens from the sources, + // this makes sure that if we exhaust one of the sources we continue with + // the other one. if (previousSearchResult.seshatQuery.next_batch) { response.next_batch = previousSearchResult.seshatQuery.next_batch; } else if (previousSearchResult.serverSideNextBatch) { response.next_batch = previousSearchResult.serverSideNextBatch; } + // We collected all search results from the server as well as from Seshat, + // we still have some events cached that we'll want to display on the next + // pagination request. + // + // Provide a fake next batch token for that case. if (!response.next_batch && previousSearchResult.cachedEvents && previousSearchResult.cachedEvents.length > 0) { response.next_batch = "cached"; } @@ -356,13 +366,18 @@ function eventIndexSearchPagination(searchResult) { const serverQuery = searchResult._query; if (!seshatQuery) { + // This is a search in a non-encrypted room. Do the normal server-side + // pagination. return client.backPaginateRoomEventsSearch(searchResult); } else if (!serverQuery) { + // This is a search in a encrypted room. Do a local pagination. const promise = localPagination(searchResult); searchResult.pendingRequest = promise; return promise; } else { + // We have both queries around, this is a search across all rooms so a + // combined pagination needs to be done. const promise = combinedPagination(searchResult); searchResult.pendingRequest = promise; From 46fd36568affdb948ca3d632027ae56f2301d135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 4 Jun 2020 15:33:51 +0200 Subject: [PATCH 0045/1504] Searching: Always set the limit when searching. The spec doesn't mention any default limit so different homeservers might use different defaults, since we don't want Riot to behave differently depending on the homeserver bite the bullet of sending an additional 10 or so bytes when searching. --- src/Searching.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index 7ea1463a5e..f40e44a84d 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -22,15 +22,11 @@ const SEARCH_LIMIT = 10; async function serverSideSearch(term, roomId = undefined, processResult = true) { const client = MatrixClientPeg.get(); - let filter; - if (roomId !== undefined) { - // XXX: it's unintuitive that the filter for searching doesn't have - // the same shape as the v2 filter API :( - filter = { - rooms: [roomId], - limit: SEARCH_LIMIT, - }; - } + const filter = { + limit: SEARCH_LIMIT, + }; + + if (roomId !== undefined) filter.rooms = [roomId]; const body = { search_categories: { From 94d4aa17ee738bc10c78f138da04c8b23d1d4ab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 4 Jun 2020 15:35:18 +0200 Subject: [PATCH 0046/1504] Searching: Remove some debug logs. --- src/Searching.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index f40e44a84d..cb20176804 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -284,8 +284,6 @@ function combineResponses(previousSearchResult, localEvents = undefined, serverE response.next_batch = "cached"; } - console.log("HELLOO COMBINING RESULTS", localEvents, serverEvents, response); - return response; } @@ -326,8 +324,6 @@ async function combinedPagination(searchResult) { const result = client._processRoomEventsSearch(searchResult, response); - console.log("HELLO NEW RESULT", searchResult); - searchResult.pendingRequest = null; return result; From bf13032d5b9c14ab675db164b09a14ca7cb4e0de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 4 Jun 2020 15:51:06 +0200 Subject: [PATCH 0047/1504] Searching: Fix a lint issue and expand some docs. --- src/Searching.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index cb20176804..29556f0757 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -194,12 +194,12 @@ function compareOldestEvents(firstResults, secondResults) { const oldestSecondEvent = secondResults.results[secondResults.results.length - 1].result; if (oldestFirstEvent.origin_server_ts <= oldestSecondEvent.origin_server_ts) { - return -1 + return -1; } else { - return 1 + return 1; } } catch { - return 0 + return 0; } } @@ -209,6 +209,19 @@ function combineEventSources(previousSearchResult, response, a, b) { previousSearchResult.cachedEvents = combinedEvents.slice(SEARCH_LIMIT); } +/** + * Combine the events from our event sources into a sorted result + * + * @param {object} previousSearchResult A search result from a previous search + * call. + * @param {object} localEvents An unprocessed search result from the event + * index. + * @param {object} serverEvents An unprocessed search result from the server. + * + * @ return {object} A response object that combines the events from the + * different event sources. + * + */ function combineEvents(previousSearchResult, localEvents = undefined, serverEvents = undefined) { const response = {}; From 5dfe5ac135458710a185d5416e3de944e176abb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 4 Jun 2020 16:57:28 +0200 Subject: [PATCH 0048/1504] Searching: More docs and a bit of simplification. --- src/Searching.js | 134 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 127 insertions(+), 7 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index 29556f0757..d2fd67fa27 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -204,7 +204,9 @@ function compareOldestEvents(firstResults, secondResults) { } function combineEventSources(previousSearchResult, response, a, b) { + // Merge event sources and sort the events. const combinedEvents = a.concat(b).sort(compareEvents); + // Put half of the events in the response, and cache the other half. response.results = combinedEvents.slice(0, SEARCH_LIMIT); previousSearchResult.cachedEvents = combinedEvents.slice(SEARCH_LIMIT); } @@ -212,13 +214,104 @@ function combineEventSources(previousSearchResult, response, a, b) { /** * Combine the events from our event sources into a sorted result * + * This method will first be called from the combinedSearch() method. In this + * case we will fetch SEARCH_LIMIT events from the server and the local index. + * + * The method will put the SEARCH_LIMIT newest events from the server and the + * local index in the results part of the response, the rest will be put in the + * cachedEvents field of the previousSearchResult (in this case an empty search + * result). + * + * Every subsequent call will be made from the combinedPagination() method, in + * this case we will combine the cachedEvents and the next SEARCH_LIMIT events + * from either the server or the local index. + * + * Since we have two event sources and we need to sort the results by date we + * need keep on looking for the oldest event. We are implementing a variation of + * a sliding window. + * + * If we set SEARCH_LIMIT to 3: + * + * Server events [01, 02, 04, 06, 07, 08, 11, 13] + * |01, 02, 04| + * Local events [03, 05, 09, 10, 12, 14, 15, 16] + * |03, 05, 09| + * + * We note that the oldest event is from the local index, and we combine the + * results: + * + * Server window [01, 02, 04] + * Local window [03, 05, 09] + * + * Combined events [01, 02, 03, 04, 05, 09] + * + * We split the combined result in the part that we want to present and a part + * that will be cached. + * + * Presented events [01, 02, 03] + * Cached events [04, 05, 09] + * + * We slide the window for the server since the oldest event is from the local + * index. + * + * Server events [01, 02, 04, 06, 07, 08, 11, 13] + * |06, 07, 08| + * Local events [03, 05, 09, 10, 12, 14, 15, 16] + * |XX, XX, XX| + * Cached events [04, 05, 09] + * + * We note that the oldest event is from the server and we combine the new + * server events with the cached ones. + * + * Cached events [04, 05, 09] + * Server events [06, 07, 08] + * + * Combined events [04, 05, 06, 07, 08, 09] + * + * We split again. + * + * Presented events [04, 05, 06] + * Cached events [07, 08, 09] + * + * We slide the local window, the oldest event is on the server. + * + * Server events [01, 02, 04, 06, 07, 08, 11, 13] + * |XX, XX, XX| + * Local events [03, 05, 09, 10, 12, 14, 15, 16] + * |10, 12, 14| + * + * Cached events [07, 08, 09] + * Local events [10, 12, 14] + * Combined events [07, 08, 09, 10, 12, 14] + * + * Presented events [07, 08, 09] + * Cached events [10, 12, 14] + * + * Next up we slide the server window again. + * + * Server events [01, 02, 04, 06, 07, 08, 11, 13] + * |11, 13| + * Local events [03, 05, 09, 10, 12, 14, 15, 16] + * |XX, XX, XX| + * + * Cached events [10, 12, 14] + * Server events [11, 13] + * Combined events [10, 11, 12, 13, 14] + * + * Presented events [10, 11, 12] + * Cached events [13, 14] + * + * We have one source exhausted, we fetch the rest of our events from the other + * source and combine it with our cached events. + * + * * @param {object} previousSearchResult A search result from a previous search * call. * @param {object} localEvents An unprocessed search result from the event * index. * @param {object} serverEvents An unprocessed search result from the server. * - * @ return {object} A response object that combines the events from the + * @return {object} A response object that combines the events from the * different event sources. * */ @@ -230,6 +323,9 @@ function combineEvents(previousSearchResult, localEvents = undefined, serverEven response.highlights = previousSearchResult.highlights; if (localEvents && serverEvents) { + // This is a first search call, combine the events from the server and + // the local index. Note where our oldest event came from, we shall + // fetch the next batch of events from the other source. if (compareOldestEvents(localEvents, serverEvents) < 0) { oldestEventFrom = "local"; } @@ -237,18 +333,28 @@ function combineEvents(previousSearchResult, localEvents = undefined, serverEven combineEventSources(previousSearchResult, response, localEvents.results, serverEvents.results); response.highlights = localEvents.highlights.concat(serverEvents.highlights); } else if (localEvents) { + // This is a pagination call fetching more events from the local index, + // meaning that our oldest event was on the server. + // Change the source of the oldest event if our local event is older + // than the cached one. if (compareOldestEvents(localEvents, cachedEvents) < 0) { oldestEventFrom = "local"; } combineEventSources(previousSearchResult, response, localEvents.results, cachedEvents); } else if (serverEvents) { + // This is a pagination call fetching more events from the server, + // meaning that our oldest event was in the local index. + // Change the source of the oldest event if our server event is older + // than the cached one. if (compareOldestEvents(serverEvents, cachedEvents) < 0) { oldestEventFrom = "server"; } combineEventSources(previousSearchResult, response, serverEvents.results, cachedEvents); } else { + // This is a pagination call where we exhausted both of our event + // sources, let's push the remaining cached events. response.results = cachedEvents; - delete previousSearchResult.cachedEvents; + previousSearchResult.cachedEvents = []; } previousSearchResult.oldestEventFrom = oldestEventFrom; @@ -258,8 +364,18 @@ function combineEvents(previousSearchResult, localEvents = undefined, serverEven /** * Combine the local and server search responses + * + * @param {object} previousSearchResult A search result from a previous search + * call. + * @param {object} localEvents An unprocessed search result from the event + * index. + * @param {object} serverEvents An unprocessed search result from the server. + * + * @return {object} A response object that combines the events from the + * different event sources. */ function combineResponses(previousSearchResult, localEvents = undefined, serverEvents = undefined) { + // Combine our events first. const response = combineEvents(previousSearchResult, localEvents, serverEvents); // Our first search will contain counts from both sources, subsequent @@ -293,7 +409,7 @@ function combineResponses(previousSearchResult, localEvents = undefined, serverE // pagination request. // // Provide a fake next batch token for that case. - if (!response.next_batch && previousSearchResult.cachedEvents && previousSearchResult.cachedEvents.length > 0) { + if (!response.next_batch && previousSearchResult.cachedEvents.length > 0) { response.next_batch = "cached"; } @@ -310,13 +426,15 @@ async function combinedPagination(searchResult) { let localResult; let serverSideResult; - if ((searchArgs.next_batch && oldestEventFrom === "server") || - (!searchResult.serverSideNextBatch && searchArgs.next_batch)) { + // Fetch events from the local index if we have a token for itand if it's + // the local indexes turn or the server has exhausted its results. + if (searchArgs.next_batch && (!searchResult.serverSideNextBatch || oldestEventFrom === "server")) { localResult = await eventIndex.search(searchArgs); } - if ((searchResult.serverSideNextBatch && oldestEventFrom === "local") || - (!searchArgs.next_batch && searchResult.serverSideNextBatch)) { + // Fetch events from the server if we have a token for it and if it's the + // local indexes turn or the local index has exhausted its results. + if (searchResult.serverSideNextBatch && (oldestEventFrom === "local" || !searchArgs.next_batch)) { const body = {body: searchResult._query, next_batch: searchResult.serverSideNextBatch}; serverSideResult = await client.search(body); } @@ -327,6 +445,7 @@ async function combinedPagination(searchResult) { serverEvents = serverSideResult.search_categories.room_events; } + // Combine our events. const combinedResult = combineResponses(searchResult, localResult, serverEvents); const response = { @@ -335,6 +454,7 @@ async function combinedPagination(searchResult) { }, }; + // Let the client process the combined result. const result = client._processRoomEventsSearch(searchResult, response); searchResult.pendingRequest = null; From f6504d67ba0a09379c1291a2000dac1dae9697aa Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Thu, 4 Jun 2020 16:23:28 +0100 Subject: [PATCH 0049/1504] Use 10px instead --- res/css/_common.scss | 2 +- res/css/_font-sizes.scss | 112 +++++++++++++-------------- src/settings/watchers/FontWatcher.ts | 4 +- 3 files changed, 59 insertions(+), 59 deletions(-) diff --git a/res/css/_common.scss b/res/css/_common.scss index c562c3e95f..77a8ff9f4a 100644 --- a/res/css/_common.scss +++ b/res/css/_common.scss @@ -19,7 +19,7 @@ limitations under the License. @import "./_font-sizes.scss"; :root { - font-size: 20px; + font-size: 10px; } html { diff --git a/res/css/_font-sizes.scss b/res/css/_font-sizes.scss index c4a223d66c..5b876ab11d 100644 --- a/res/css/_font-sizes.scss +++ b/res/css/_font-sizes.scss @@ -14,59 +14,59 @@ See the License for the specific language governing permissions and limitations under the License. */ -$font-1px: 0.05rem; -$font-1-5px: 0.075rem; -$font-2px: 0.1rem; -$font-3px: 0.15rem; -$font-4px: 0.2rem; -$font-5px: 0.25rem; -$font-6px: 0.3rem; -$font-7px: 0.35rem; -$font-8px: 0.4rem; -$font-9px: 0.45rem; -$font-10px: 0.5rem; -$font-10-4px: 0.52rem; -$font-11px: 0.55rem; -$font-12px: 0.6rem; -$font-13px: 0.65rem; -$font-14px: 0.7rem; -$font-15px: 0.75rem; -$font-16px: 0.8rem; -$font-17px: 0.85rem; -$font-18px: 0.9rem; -$font-19px: 0.95rem; -$font-20px: 1.0rem; -$font-21px: 1.05rem; -$font-22px: 1.1rem; -$font-23px: 1.15rem; -$font-24px: 1.2rem; -$font-25px: 1.25rem; -$font-26px: 1.3rem; -$font-27px: 1.35rem; -$font-28px: 1.4rem; -$font-29px: 1.45rem; -$font-30px: 1.5rem; -$font-31px: 1.55rem; -$font-32px: 1.6rem; -$font-33px: 1.65rem; -$font-34px: 1.7rem; -$font-35px: 1.75rem; -$font-36px: 1.8rem; -$font-37px: 1.85rem; -$font-38px: 1.9rem; -$font-39px: 1.95rem; -$font-40px: 2.0rem; -$font-41px: 2.05rem; -$font-42px: 2.1rem; -$font-43px: 2.15rem; -$font-44px: 2.2rem; -$font-45px: 2.25rem; -$font-46px: 2.3rem; -$font-47px: 2.35rem; -$font-48px: 2.4rem; -$font-49px: 2.45rem; -$font-50px: 2.5rem; -$font-51px: 2.55rem; -$font-52px: 2.6rem; -$font-88px: 4.4rem; -$font-400px: 20rem; +$font-1px: 0.1rem; +$font-1-5px: 0.15rem; +$font-2px: 0.2rem; +$font-3px: 0.3rem; +$font-4px: 0.4rem; +$font-5px: 0.5rem; +$font-6px: 0.6rem; +$font-7px: 0.7rem; +$font-8px: 0.8rem; +$font-9px: 0.9rem; +$font-10px: 1.0rem; +$font-10-4px: 1.04rem; +$font-11px: 1.1rem; +$font-12px: 1.2rem; +$font-13px: 1.3rem; +$font-14px: 1.4rem; +$font-15px: 1.5rem; +$font-16px: 1.6rem; +$font-17px: 1.7rem; +$font-18px: 1.8rem; +$font-19px: 1.9rem; +$font-20px: 2.0rem; +$font-21px: 2.1rem; +$font-22px: 2.2rem; +$font-23px: 2.3rem; +$font-24px: 2.4rem; +$font-25px: 2.5rem; +$font-26px: 2.6rem; +$font-27px: 2.7rem; +$font-28px: 2.8rem; +$font-29px: 2.9rem; +$font-30px: 3.0rem; +$font-31px: 3.1rem; +$font-32px: 3.2rem; +$font-33px: 3.3rem; +$font-34px: 3.4rem; +$font-35px: 3.5rem; +$font-36px: 3.6rem; +$font-37px: 3.7rem; +$font-38px: 3.8rem; +$font-39px: 3.9rem; +$font-40px: 4.0rem; +$font-41px: 4.1rem; +$font-42px: 4.2rem; +$font-43px: 4.3rem; +$font-44px: 4.4rem; +$font-45px: 4.5rem; +$font-46px: 4.6rem; +$font-47px: 4.7rem; +$font-48px: 4.8rem; +$font-49px: 4.9rem; +$font-50px: 5.0rem; +$font-51px: 5.1rem; +$font-52px: 5.2rem; +$font-88px: 8.8rem; +$font-400px: 40rem; diff --git a/src/settings/watchers/FontWatcher.ts b/src/settings/watchers/FontWatcher.ts index 08a809f869..5d7c601fa1 100644 --- a/src/settings/watchers/FontWatcher.ts +++ b/src/settings/watchers/FontWatcher.ts @@ -45,8 +45,8 @@ export class FontWatcher implements IWatcher { }; private setRootFontSize = (size) => { - // Externally we tell the user the font is size 15. Internally we use 20. - const fontSize = Math.max(Math.min(FontWatcher.MAX_SIZE, size), FontWatcher.MIN_SIZE) + 5; + // Externally we tell the user the font is size 15. Internally we use 10. + const fontSize = Math.max(Math.min(FontWatcher.MAX_SIZE, size), FontWatcher.MIN_SIZE) - 5; if (fontSize !== size) { SettingsStore.setValue("fontSize", null, SettingLevel.Device, fontSize); From 2ec47ecc743593ef816b1b7e7f7e903428b065f3 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Thu, 4 Jun 2020 17:50:56 +0100 Subject: [PATCH 0050/1504] Use different setting flag print expected values --- .../tabs/user/AppearanceUserSettingsTab.tsx | 12 +++++++++--- src/settings/Settings.js | 4 ++-- src/settings/watchers/FontWatcher.ts | 14 ++++++++------ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx index bcd87b290a..9b77493c4f 100644 --- a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx @@ -62,7 +62,7 @@ export default class AppearanceUserSettingsTab extends React.Component { this.setState({fontSize: size.toString()}); - SettingsStore.setValue("fontSize", null, SettingLevel.DEVICE, size); + SettingsStore.setValue("baseFontSize", null, SettingLevel.DEVICE, size - FontWatcher.SIZE_DIFF); }; private onValidateFontSize = async ({value}: Pick): Promise => { @@ -151,7 +151,13 @@ export default class AppearanceUserSettingsTab extends React.Component { - // Externally we tell the user the font is size 15. Internally we use 10. - const fontSize = Math.max(Math.min(FontWatcher.MAX_SIZE, size), FontWatcher.MIN_SIZE) - 5; + console.log({size}) + const fontSize = Math.max(Math.min(FontWatcher.MAX_SIZE, size), FontWatcher.MIN_SIZE); if (fontSize !== size) { - SettingsStore.setValue("fontSize", null, SettingLevel.Device, fontSize); + SettingsStore.setValue("baseFontSize", null, SettingLevel.DEVICE, fontSize); } (document.querySelector(":root")).style.fontSize = toPx(fontSize); }; From bba6767608cea9444d927b02195794f48111c3f5 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Thu, 4 Jun 2020 18:00:22 +0100 Subject: [PATCH 0051/1504] Update displayed min and max --- .../views/settings/tabs/user/AppearanceUserSettingsTab.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx index 9b77493c4f..2b58e0e28e 100644 --- a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx @@ -137,8 +137,8 @@ export default class AppearanceUserSettingsTab extends React.Component): Promise => { const parsedSize = parseFloat(value); - const min = FontWatcher.MIN_SIZE; - const max = FontWatcher.MAX_SIZE; + const min = FontWatcher.MIN_SIZE + FontWatcher.SIZE_DIFF; + const max = FontWatcher.MAX_SIZE + FontWatcher.SIZE_DIFF; if (isNaN(parsedSize)) { return {valid: false, feedback: _t("Size must be a number")}; From f3011f00f78a3de7a34868fc506b462472154b7c Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Thu, 4 Jun 2020 19:43:35 +0100 Subject: [PATCH 0052/1504] Remove debug --- src/settings/watchers/FontWatcher.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/settings/watchers/FontWatcher.ts b/src/settings/watchers/FontWatcher.ts index 1eb0af9f3e..05c707a57b 100644 --- a/src/settings/watchers/FontWatcher.ts +++ b/src/settings/watchers/FontWatcher.ts @@ -47,7 +47,6 @@ export class FontWatcher implements IWatcher { }; private setRootFontSize = (size) => { - console.log({size}) const fontSize = Math.max(Math.min(FontWatcher.MAX_SIZE, size), FontWatcher.MIN_SIZE); if (fontSize !== size) { From 4c1bc50649afcf31f403b7b887ecbdc95ba31772 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 4 Jun 2020 16:34:04 -0600 Subject: [PATCH 0053/1504] Initial styling for new room list This is a work in progress, but covers the coarse areas. This uses all-new classes to better describe what everything is, and to reduce the number of selectors we keep track of. This is primarily layout for the list and not actually the final structure. For example, some buttons are missing and other areas are not styled correctly - the idea in this commit was to get things roughly in the right place and work on it. --- res/css/_components.scss | 3 + res/css/structures/_LeftPanel.scss | 8 -- res/css/structures/_LeftPanel2.scss | 91 +++++++++++++++++++++ res/css/structures/_MatrixChat.scss | 2 +- res/css/views/rooms/_RoomList2.scss | 23 ++++++ res/css/views/rooms/_RoomSublist2.scss | 2 +- res/css/views/rooms/_RoomTile2.scss | 18 ++++ src/components/structures/LeftPanel2.tsx | 63 +++++++++----- src/components/views/rooms/RoomList2.tsx | 2 +- src/components/views/rooms/RoomSublist2.tsx | 21 +++-- src/components/views/rooms/RoomTile2.tsx | 32 ++++---- 11 files changed, 205 insertions(+), 60 deletions(-) create mode 100644 res/css/structures/_LeftPanel2.scss create mode 100644 res/css/views/rooms/_RoomList2.scss create mode 100644 res/css/views/rooms/_RoomTile2.scss diff --git a/res/css/_components.scss b/res/css/_components.scss index b047519d99..62bec5ad62 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -12,6 +12,7 @@ @import "./structures/_HeaderButtons.scss"; @import "./structures/_HomePage.scss"; @import "./structures/_LeftPanel.scss"; +@import "./structures/_LeftPanel2.scss"; @import "./structures/_MainSplit.scss"; @import "./structures/_MatrixChat.scss"; @import "./structures/_MyGroups.scss"; @@ -177,10 +178,12 @@ @import "./views/rooms/_RoomDropTarget.scss"; @import "./views/rooms/_RoomHeader.scss"; @import "./views/rooms/_RoomList.scss"; +@import "./views/rooms/_RoomList2.scss"; @import "./views/rooms/_RoomPreviewBar.scss"; @import "./views/rooms/_RoomRecoveryReminder.scss"; @import "./views/rooms/_RoomSublist2.scss"; @import "./views/rooms/_RoomTile.scss"; +@import "./views/rooms/_RoomTile2.scss"; @import "./views/rooms/_RoomUpgradeWarningBar.scss"; @import "./views/rooms/_SearchBar.scss"; @import "./views/rooms/_SendMessageComposer.scss"; diff --git a/res/css/structures/_LeftPanel.scss b/res/css/structures/_LeftPanel.scss index 899824bc57..35d9f0e7da 100644 --- a/res/css/structures/_LeftPanel.scss +++ b/res/css/structures/_LeftPanel.scss @@ -23,14 +23,6 @@ limitations under the License. flex: 0 0 auto; } -// TODO: Remove temporary indicator of new room list implementation. -// This border is meant to visually distinguish between the two components when the -// user has turned on the new room list implementation, at least until the designs -// themselves give it away. -.mx_LeftPanel2 .mx_LeftPanel { - border-left: 5px #e26dff solid; -} - .mx_LeftPanel_container.collapsed { min-width: unset; /* Collapsed LeftPanel 50px */ diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss new file mode 100644 index 0000000000..52ee4f16ac --- /dev/null +++ b/res/css/structures/_LeftPanel2.scss @@ -0,0 +1,91 @@ +/* +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. +*/ + +$tagPanelWidth: 70px; +$roomListMinimizedWidth: 50px; + +.mx_LeftPanel2 { + background-color: $header-panel-bg-color; + min-width: 260px; + max-width: 50%; + + // Create a row-based flexbox for the TagPanel and the room list + display: flex; + + .mx_LeftPanel2_tagPanelContainer { + flex-grow: 0; + flex-shrink: 0; + flex-basis: $tagPanelWidth; + height: 100%; + + // Create another flexbox so the TagPanel fills the container + display: flex; + + // TagPanel handles its own CSS + } + + // Note: The 'room list' in this context is actually everything that isn't the tag + // panel, such as the menu options, breadcrumbs, filtering, etc + .mx_LeftPanel2_roomListContainer { + width: calc(100% - $tagPanelWidth); + + // Create another flexbox (this time a column) for the room list components + display: flex; + flex-direction: column; + + .mx_LeftPanel2_userHeader { + padding: 14px 12px 20px; // 14px top, 12px sides, 20px bottom + + // Create another flexbox column for the rows to stack within + display: flex; + flex-direction: column; + + // There's 2 rows when breadcrumbs are present: the top bit and the breadcrumbs + .mx_LeftPanel2_headerRow { + // Create yet another flexbox, this time within the row, to ensure items stay + // aligned correctly. This is also a row-based flexbox. + display: flex; + align-items: center; + } + + .mx_LeftPanel2_userAvatarContainer { + position: relative; // to make default avatars work + margin-right: 8px; + } + + .mx_LeftPanel2_userName { + font-weight: 600; + font-size: $font-15px; + line-height: $font-20px; + } + + .mx_LeftPanel2_breadcrumbsContainer { + // TODO: Improve CSS for breadcrumbs (currently shoved into the view rather than placed) + width: 100%; + overflow: hidden; + } + } + + .mx_LeftPanel2_filterContainer { + // TODO: Improve CSS for filtering and its input + } + + .mx_LeftPanel2_actualRoomListContainer { + flex-grow: 1; // fill the available space + overflow-y: auto; + } + } +} diff --git a/res/css/structures/_MatrixChat.scss b/res/css/structures/_MatrixChat.scss index 05c703ab6d..08ed9e5559 100644 --- a/res/css/structures/_MatrixChat.scss +++ b/res/css/structures/_MatrixChat.scss @@ -66,7 +66,7 @@ limitations under the License. } /* not the left panel, and not the resize handle, so the roomview/groupview/... */ -.mx_MatrixChat > :not(.mx_LeftPanel_container):not(.mx_ResizeHandle) { +.mx_MatrixChat > :not(.mx_LeftPanel_container):not(.mx_LeftPanel2):not(.mx_ResizeHandle) { background-color: $primary-bg-color; flex: 1 1 0; diff --git a/res/css/views/rooms/_RoomList2.scss b/res/css/views/rooms/_RoomList2.scss new file mode 100644 index 0000000000..add7214468 --- /dev/null +++ b/res/css/views/rooms/_RoomList2.scss @@ -0,0 +1,23 @@ +/* +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_RoomList2 { + // Create a column-based flexbox for the sublists. That's pretty much all we have to + // worry about in this stylesheet. + display: flex; + flex-direction: column; + flex-wrap: wrap; +} diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index abc3133fc1..55b16843b3 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -16,7 +16,7 @@ limitations under the License. @import "../../../../node_modules/react-resizable/css/styles.css"; -.mx_RoomList2 .mx_RoomSubList_labelContainer { +.mx_RoomList2 .mx_RoomSubList2_labelContainer { z-index: 12; background-color: purple; } diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss new file mode 100644 index 0000000000..6577f1ce25 --- /dev/null +++ b/res/css/views/rooms/_RoomTile2.scss @@ -0,0 +1,18 @@ +/* +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_RoomTile2 { +} diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index c9a4948539..bf0e72beeb 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -24,6 +24,9 @@ import SearchBox from "./SearchBox"; import RoomList2 from "../views/rooms/RoomList2"; import TopLeftMenuButton from "./TopLeftMenuButton"; import { Action } from "../../dispatcher/actions"; +import { MatrixClientPeg } from "../../MatrixClientPeg"; +import BaseAvatar from '../views/avatars/BaseAvatar'; +import RoomBreadcrumbs from "../views/rooms/RoomBreadcrumbs"; /******************************************************************* * CAUTION * @@ -82,24 +85,44 @@ export default class LeftPanel2 extends React.Component { } } + private renderHeader(): React.ReactNode { + // TODO: Use real profile info + // TODO: Presence + // TODO: Breadcrumbs toggle + // TODO: Menu button + const avatarSize = 32; + return ( +
+
+ + + + Irene +
+
+ +
+
+ ); + } + public render(): React.ReactNode { const tagPanel = ( -
+
); - const exploreButton = ( -
- dis.dispatch({action: 'view_room_directory'})}> - {_t("Explore")} - -
- ); - const searchBox = ( { // TODO: Conference handling / calls const containerClasses = classNames({ - "mx_LeftPanel_container": true, - "mx_fadable": true, - "collapsed": false, // TODO: Collapsed support - "mx_LeftPanel_container_hasTagPanel": true, // TODO: TagPanel support - "mx_fadable_faded": false, - "mx_LeftPanel2": true, // TODO: Remove flag when RoomList2 ships (used as an indicator) + "mx_LeftPanel2": true, }); return (
{tagPanel} -
); diff --git a/src/components/views/rooms/RoomList2.tsx b/src/components/views/rooms/RoomList2.tsx index 15aa880109..af366e9685 100644 --- a/src/components/views/rooms/RoomList2.tsx +++ b/src/components/views/rooms/RoomList2.tsx @@ -216,7 +216,7 @@ export default class RoomList2 extends React.Component { onFocus={this.props.onFocus} onBlur={this.props.onBlur} onKeyDown={onKeyDownHandler} - className="mx_RoomList mx_RoomList2" + className="mx_RoomList2" role="tree" aria-label={_t("Rooms")} // Firefox sometimes makes this element focusable due to diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index cc56f92769..e7682a9bb4 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -113,9 +113,9 @@ export default class RoomSublist2 extends React.Component { let chevron = null; if (this.hasTiles()) { const chevronClasses = classNames({ - 'mx_RoomSubList_chevron': true, - 'mx_RoomSubList_chevronRight': false, // isCollapsed - 'mx_RoomSubList_chevronDown': true, // !isCollapsed + 'mx_RoomSublist2_chevron': true, + 'mx_RoomSublist2_chevronRight': false, // isCollapsed + 'mx_RoomSublist2_chevronDown': true, // !isCollapsed }); chevron = (
); } @@ -130,8 +130,8 @@ export default class RoomSublist2 extends React.Component { let badge; if (true) { // !isCollapsed const badgeClasses = classNames({ - 'mx_RoomSubList_badge': true, - 'mx_RoomSubList_badgeHighlight': notifHighlight, + 'mx_RoomSublist2_badge': true, + 'mx_RoomSublist2_badgeHighlight': notifHighlight, }); // Wrap the contents in a div and apply styles to the child div so that the browser default outline works if (notifCount > 0) { @@ -168,7 +168,7 @@ export default class RoomSublist2 extends React.Component { ); @@ -176,11 +176,11 @@ export default class RoomSublist2 extends React.Component { // TODO: a11y (see old component) return ( -
+
@@ -204,9 +204,8 @@ export default class RoomSublist2 extends React.Component { const classes = classNames({ // TODO: Proper collapse support - 'mx_RoomSubList': true, - 'mx_RoomSubList_hidden': false, // len && isCollapsed - 'mx_RoomSubList_nonEmpty': this.hasTiles(), // len && !isCollapsed + 'mx_RoomSublist2': true, + 'mx_RoomSublist2_collapsed': false, // len && isCollapsed }); let content = null; diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index c95cd108dc..40c7bcbc12 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -195,28 +195,28 @@ export default class RoomTile2 extends React.Component { const hasBadge = this.state.notificationState.color > NotificationColor.Bold; const isUnread = this.state.notificationState.color > NotificationColor.None; const classes = classNames({ - 'mx_RoomTile': true, + 'mx_RoomTile2': true, // 'mx_RoomTile_selected': this.state.selected, - 'mx_RoomTile_unread': isUnread, - 'mx_RoomTile_unreadNotify': this.state.notificationState.color >= NotificationColor.Grey, - 'mx_RoomTile_highlight': this.state.notificationState.color >= NotificationColor.Red, - 'mx_RoomTile_invited': this.roomIsInvite, + 'mx_RoomTile2_unread': isUnread, + 'mx_RoomTile2_unreadNotify': this.state.notificationState.color >= NotificationColor.Grey, + 'mx_RoomTile2_highlight': this.state.notificationState.color >= NotificationColor.Red, + 'mx_RoomTile2_invited': this.roomIsInvite, // 'mx_RoomTile_menuDisplayed': isMenuDisplayed, - 'mx_RoomTile_noBadges': !hasBadge, + 'mx_RoomTile2_noBadges': !hasBadge, // 'mx_RoomTile_transparent': this.props.transparent, // 'mx_RoomTile_hasSubtext': subtext && !this.props.collapsed, }); const avatarClasses = classNames({ - 'mx_RoomTile_avatar': true, + 'mx_RoomTile2_avatar': true, }); let badge; if (hasBadge) { const badgeClasses = classNames({ - 'mx_RoomTile_badge': true, - 'mx_RoomTile_badgeButton': false, // this.state.badgeHover || isMenuDisplayed + 'mx_RoomTile2_badge': true, + 'mx_RoomTile2_badgeButton': false, // this.state.badgeHover || isMenuDisplayed }); badge =
{this.state.notificationState.symbol}
; } @@ -227,16 +227,16 @@ export default class RoomTile2 extends React.Component { name = name.replace(":", ":\u200b"); // add a zero-width space to allow linewrapping after the colon const nameClasses = classNames({ - 'mx_RoomTile_name': true, - 'mx_RoomTile_invite': this.roomIsInvite, - 'mx_RoomTile_badgeShown': hasBadge, + 'mx_RoomTile2_name': true, + 'mx_RoomTile2_invite': this.roomIsInvite, + 'mx_RoomTile2_badgeShown': hasBadge, }); // TODO: Support collapsed state properly let tooltip = null; if (false) { // isCollapsed if (this.state.hover) { - tooltip = + tooltip = } } @@ -255,12 +255,12 @@ export default class RoomTile2 extends React.Component { role="treeitem" >
-
+
-
-
+
+
{name}
From 0c15b2bdb6c332713b8e95cb907c6b50adeaeeda Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 4 Jun 2020 21:21:04 -0600 Subject: [PATCH 0054/1504] Simple structuring of the room list itself This covers the larger parts of the design, but doesn't deal with the nuances of hover states, badge sizing, etc. --- res/css/views/rooms/_RoomSublist2.scss | 26 +++- res/css/views/rooms/_RoomTile2.scss | 76 +++++++++++ res/themes/light/css/_light.scss | 5 + src/components/views/rooms/RoomList2.tsx | 3 +- src/components/views/rooms/RoomSublist2.tsx | 135 ++++++++++---------- src/components/views/rooms/RoomTile2.tsx | 65 ++++------ src/i18n/strings/en_EN.json | 9 +- src/stores/room-list/ListLayout.ts | 2 +- 8 files changed, 205 insertions(+), 116 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 55b16843b3..4d8c3fffff 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -16,7 +16,27 @@ limitations under the License. @import "../../../../node_modules/react-resizable/css/styles.css"; -.mx_RoomList2 .mx_RoomSubList2_labelContainer { - z-index: 12; - background-color: purple; +.mx_RoomSublist2 { + // The sublist is a column of rows, essentially + display: flex; + flex-direction: column; + + margin-left: 8px; + margin-top: 12px; + margin-bottom: 12px; + + .mx_RoomSublist2_headerContainer { + text-transform: uppercase; + opacity: 0.5; + line-height: $font-16px; + font-size: $font-12px; + padding-bottom: 8px; + } + + .mx_RoomSublist2_resizeBox { + // Create another flexbox column for the tiles + display: flex; + flex-direction: column; + overflow: hidden; + } } diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index 6577f1ce25..bb27942f81 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -14,5 +14,81 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Note: the room tile expects to be in a flexbox column container .mx_RoomTile2 { + width: 100%; + padding-bottom: 12px; + + // The tile is also a flexbox row itself + display: flex; + flex-wrap: wrap; + + .mx_RoomTile2_avatarContainer { + margin-right: 8px; + } + + .mx_RoomTile2_nameContainer { + // Create a new column layout flexbox for the name parts + display: flex; + flex-direction: column; + justify-content: center; + + .mx_RoomTile2_name, + .mx_RoomTile2_messagePreview { + margin: 0 2px; + } + + // TODO: Ellipsis on the name and preview + + .mx_RoomTile2_name { + font-weight: 600; + font-size: $font-14px; + line-height: $font-19px; + } + + .mx_RoomTile2_messagePreview { + font-size: $font-13px; + line-height: $font-18px; + color: $roomtile2-preview-color; + } + } + + .mx_RoomTile2_badgeContainer { + flex-grow: 1; + + // Create another flexbox row because it's super easy to position the badge at + // the end this way. + display: flex; + align-items: center; + justify-content: flex-end; + + .mx_RoomTile2_badge { + background-color: $roomtile2-badge-color; + + &:not(.mx_RoomTile2_badgeEmpty) { + border-radius: 16px; + font-size: $font-10px; + line-height: $font-14px; + text-align: center; + font-weight: bold; + margin-right: 14px; + color: #fff; // TODO: Variable + + // TODO: Confirm padding on counted badges + padding: 2px 5px; + } + + &.mx_RoomTile2_badgeEmpty { + width: 6px; + height: 6px; + border-radius: 6px; + margin-right: 18px; + } + + &.mx_RoomTile2_badgeHighlight { + // TODO: Use a more specific variable + background-color: $warning-color; + } + } + } } diff --git a/res/themes/light/css/_light.scss b/res/themes/light/css/_light.scss index 78fe2a74c5..683c02528d 100644 --- a/res/themes/light/css/_light.scss +++ b/res/themes/light/css/_light.scss @@ -172,6 +172,11 @@ $header-divider-color: #91A1C0; // ******************** +// TODO: Update variables for new room list +// TODO: Dark theme +$roomtile2-preview-color: #9e9e9e; +$roomtile2-badge-color: #61708b; + $roomtile-name-color: #61708b; $roomtile-badge-fg-color: $accent-fg-color; $roomtile-selected-color: #212121; diff --git a/src/components/views/rooms/RoomList2.tsx b/src/components/views/rooms/RoomList2.tsx index af366e9685..ce1956f68d 100644 --- a/src/components/views/rooms/RoomList2.tsx +++ b/src/components/views/rooms/RoomList2.tsx @@ -96,7 +96,7 @@ const TAG_AESTHETICS: { defaultHidden: false, }, [DefaultTagID.DM]: { - sectionLabel: _td("Direct Messages"), + sectionLabel: _td("People"), isInvite: false, defaultHidden: false, addRoomLabel: _td("Start chat"), @@ -200,6 +200,7 @@ export default class RoomList2 extends React.Component { addRoomLabel={aesthetics.addRoomLabel} isInvite={aesthetics.isInvite} layout={this.state.layouts.get(orderedTagId)} + showMessagePreviews={orderedTagId === DefaultTagID.DM} /> ); } diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index e7682a9bb4..84bcb1ea4d 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -20,15 +20,13 @@ import * as React from "react"; import { createRef } from "react"; import { Room } from "matrix-js-sdk/src/models/room"; import classNames from 'classnames'; -import * as RoomNotifs from '../../../RoomNotifs'; import { RovingTabIndexWrapper } from "../../../accessibility/RovingTabIndex"; import { _t } from "../../../languageHandler"; import AccessibleButton from "../../views/elements/AccessibleButton"; -import AccessibleTooltipButton from "../../views/elements/AccessibleTooltipButton"; -import * as FormattingUtils from '../../../utils/FormattingUtils'; import RoomTile2 from "./RoomTile2"; import { ResizableBox, ResizeCallbackData } from "react-resizable"; import { ListLayout } from "../../../stores/room-list/ListLayout"; +import { DefaultTagID, TagID } from "../../../stores/room-list/models"; /******************************************************************* * CAUTION * @@ -43,6 +41,7 @@ interface IProps { rooms?: Room[]; startAsHidden: boolean; label: string; + showMessagePreviews: boolean; onAddRoom?: () => void; addRoomLabel: string; isInvite: boolean; @@ -93,7 +92,13 @@ export default class RoomSublist2 extends React.Component { if (this.props.rooms) { for (const room of this.props.rooms) { - tiles.push(); + tiles.push( + + ); } } @@ -101,25 +106,16 @@ export default class RoomSublist2 extends React.Component { } private renderHeader(): React.ReactElement { - const notifications = !this.props.isInvite - ? RoomNotifs.aggregateNotificationCount(this.props.rooms) - : {count: 0, highlight: true}; - const notifCount = notifications.count; - const notifHighlight = notifications.highlight; + // TODO: Handle badge count + // const notifications = !this.props.isInvite + // ? RoomNotifs.aggregateNotificationCount(this.props.rooms) + // : {count: 0, highlight: true}; + // const notifCount = notifications.count; + // const notifHighlight = notifications.highlight; // TODO: Title on collapsed // TODO: Incoming call box - let chevron = null; - if (this.hasTiles()) { - const chevronClasses = classNames({ - 'mx_RoomSublist2_chevron': true, - 'mx_RoomSublist2_chevronRight': false, // isCollapsed - 'mx_RoomSublist2_chevronDown': true, // !isCollapsed - }); - chevron = (
); - } - return ( {({onFocus, isActive, ref}) => { @@ -127,52 +123,55 @@ export default class RoomSublist2 extends React.Component { const tabIndex = isActive ? 0 : -1; // TODO: Collapsed state - let badge; - if (true) { // !isCollapsed - const badgeClasses = classNames({ - 'mx_RoomSublist2_badge': true, - 'mx_RoomSublist2_badgeHighlight': notifHighlight, - }); - // Wrap the contents in a div and apply styles to the child div so that the browser default outline works - if (notifCount > 0) { - badge = ( - -
- {FormattingUtils.formatCount(notifCount)} -
-
- ); - } else if (this.props.isInvite && this.hasTiles()) { - // Render the `!` badge for invites - badge = ( - -
- {FormattingUtils.formatCount(this.numTiles)} -
-
- ); - } - } + // TODO: Handle badge count + // let badge; + // if (true) { // !isCollapsed + // const showCount = localStorage.getItem("mx_rls_count") || notifHighlight; + // const badgeClasses = classNames({ + // 'mx_RoomSublist2_badge': true, + // 'mx_RoomSublist2_badgeHighlight': notifHighlight, + // 'mx_RoomSublist2_badgeEmpty': !showCount, + // }); + // // Wrap the contents in a div and apply styles to the child div so that the browser default outline works + // if (notifCount > 0) { + // const count =
{FormattingUtils.formatCount(notifCount)}
; + // badge = ( + // + // {showCount ? count : null} + // + // ); + // } else if (this.props.isInvite && this.hasTiles()) { + // // Render the `!` badge for invites + // badge = ( + // + //
+ // {FormattingUtils.formatCount(this.numTiles)} + //
+ //
+ // ); + // } + // } - let addRoomButton = null; - if (!!this.props.onAddRoom) { - addRoomButton = ( - - ); - } + // TODO: Aux button + // let addRoomButton = null; + // if (!!this.props.onAddRoom) { + // addRoomButton = ( + // + // ); + // } // TODO: a11y (see old component) return ( @@ -184,11 +183,8 @@ export default class RoomSublist2 extends React.Component { role="treeitem" aria-level="1" > - {chevron} {this.props.label} - {badge} - {addRoomButton}
); }} @@ -243,13 +239,14 @@ export default class RoomSublist2 extends React.Component { // TODO: CSS TBD // TODO: Show N more instead of infinity more? // TODO: Safely use the same height of a tile, not hardcoded hacks + const moreTileHeightPx = `${layout.tileHeight}px`; visibleTiles.splice(visibleTiles.length - 1, 1, (
- {_t("Show %(n)s more rooms", {n: numMissing})} + {_t("Show %(n)s more", {n: numMissing})}
)); } diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 40c7bcbc12..8a51327ae2 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -51,6 +51,7 @@ enum NotificationColor { interface IProps { room: Room; + showMessagePreview: boolean; // TODO: Allow falsifying counts (for invites and stuff) // TODO: Transparency? Was this ever used? @@ -192,33 +193,22 @@ export default class RoomTile2 extends React.Component { // TODO: a11y proper // TODO: Render more than bare minimum - const hasBadge = this.state.notificationState.color > NotificationColor.Bold; - const isUnread = this.state.notificationState.color > NotificationColor.None; const classes = classNames({ 'mx_RoomTile2': true, - // 'mx_RoomTile_selected': this.state.selected, - 'mx_RoomTile2_unread': isUnread, - 'mx_RoomTile2_unreadNotify': this.state.notificationState.color >= NotificationColor.Grey, - 'mx_RoomTile2_highlight': this.state.notificationState.color >= NotificationColor.Red, - 'mx_RoomTile2_invited': this.roomIsInvite, - // 'mx_RoomTile_menuDisplayed': isMenuDisplayed, - 'mx_RoomTile2_noBadges': !hasBadge, - // 'mx_RoomTile_transparent': this.props.transparent, - // 'mx_RoomTile_hasSubtext': subtext && !this.props.collapsed, }); - const avatarClasses = classNames({ - 'mx_RoomTile2_avatar': true, - }); - - let badge; + const hasBadge = this.state.notificationState.color > NotificationColor.Bold; if (hasBadge) { + const hasNotif = this.state.notificationState.color >= NotificationColor.Red; + const isEmptyBadge = !localStorage.getItem("mx_rl_rt_badgeCount"); const badgeClasses = classNames({ 'mx_RoomTile2_badge': true, - 'mx_RoomTile2_badgeButton': false, // this.state.badgeHover || isMenuDisplayed + 'mx_RoomTile2_badgeHighlight': hasNotif, + 'mx_RoomTile2_badgeEmpty': isEmptyBadge, }); - badge =
{this.state.notificationState.symbol}
; + const symbol = this.state.notificationState.symbol; + badge =
{isEmptyBadge ? null : symbol}
; } // TODO: the original RoomTile uses state for the room name. Do we need to? @@ -226,20 +216,21 @@ export default class RoomTile2 extends React.Component { if (typeof name !== 'string') name = ''; name = name.replace(":", ":\u200b"); // add a zero-width space to allow linewrapping after the colon - const nameClasses = classNames({ - 'mx_RoomTile2_name': true, - 'mx_RoomTile2_invite': this.roomIsInvite, - 'mx_RoomTile2_badgeShown': hasBadge, - }); - // TODO: Support collapsed state properly - let tooltip = null; - if (false) { // isCollapsed - if (this.state.hover) { - tooltip = - } + // TODO: Tooltip? + + let messagePreview = null; + if (this.props.showMessagePreview) { + // TODO: Actually get the real message preview from state + messagePreview =
I just ate a pie.
; } + const nameClasses = classNames({ + "mx_RoomTile2_name": true, + "mx_RoomTile2_nameWithPreview": !!messagePreview, + }); + + const avatarSize = 32; return ( @@ -254,20 +245,18 @@ export default class RoomTile2 extends React.Component { onClick={this.onTileClick} role="treeitem" > -
-
- -
+
+
-
-
- {name} -
+
+ {name}
+ {messagePreview} +
+
{badge}
- {tooltip} } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 884192b22a..cf6dc2431a 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1090,6 +1090,7 @@ "Low priority": "Low priority", "Historical": "Historical", "System Alerts": "System Alerts", + "People": "People", "This room": "This room", "Joining room …": "Joining room …", "Loading …": "Loading …", @@ -1133,10 +1134,7 @@ "Securely back up your keys to avoid losing them. Learn more.": "Securely back up your keys to avoid losing them. Learn more.", "Not now": "Not now", "Don't ask me again": "Don't ask me again", - "Jump to first unread room.": "Jump to first unread room.", - "Jump to first invite.": "Jump to first invite.", - "Add room": "Add room", - "Show %(n)s more rooms": "Show %(n)s more rooms", + "Show %(n)s more": "Show %(n)s more", "Options": "Options", "%(count)s unread messages including mentions.|other": "%(count)s unread messages including mentions.", "%(count)s unread messages including mentions.|one": "1 unread mention.", @@ -2017,6 +2015,9 @@ "Sent messages will be stored until your connection has returned.": "Sent messages will be stored until your connection has returned.", "Active call": "Active call", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "There's no one else here! Would you like to invite others or stop warning about the empty room?", + "Jump to first unread room.": "Jump to first unread room.", + "Jump to first invite.": "Jump to first invite.", + "Add room": "Add room", "You seem to be uploading files, are you sure you want to quit?": "You seem to be uploading files, are you sure you want to quit?", "You seem to be in a call, are you sure you want to quit?": "You seem to be in a call, are you sure you want to quit?", "Search failed": "Search failed", diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index fd57a03ca1..ee51230a61 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -const TILE_HEIGHT_PX = 34; +const TILE_HEIGHT_PX = 44; interface ISerializedListLayout { numTiles: number; From 0a1080de5a49c8bf1b390a2eb004e4746207e5b9 Mon Sep 17 00:00:00 2001 From: MamasLT Date: Thu, 4 Jun 2020 21:20:26 +0000 Subject: [PATCH 0055/1504] Translated using Weblate (Lithuanian) Currently translated at 67.4% (1522 of 2258 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/lt/ --- src/i18n/strings/lt.json | 43 ++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json index d885c6fd7d..08f7c9f33d 100644 --- a/src/i18n/strings/lt.json +++ b/src/i18n/strings/lt.json @@ -1254,12 +1254,12 @@ "Report Content": "Pranešti", "Nice, strong password!": "Puiku, stiprus slaptažodis!", "Old cryptography data detected": "Aptikti seni kriptografijos duomenys", - "Verify this login": "Patvirtinti šį prisijungimą", + "Verify this login": "Patvirtinkite šį prisijungimą", "Registration has been disabled on this homeserver.": "Registracija šiame serveryje išjungta.", "You can now close this window or log in to your new account.": "Jūs galite uždaryti šį langą arba prisijungti į savo naują paskyrą.", - "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Patvirtinkite savo tapatybę verifikuodami šį prisijungimą viename iš kitų jūsų seansų, suteikdami jam prieigą prie šifruotų žinučių.", + "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Identifikuokite save patvirtindami šį prisijungimą viename iš kitų jūsų seansų ir suteikdami jam prieigą prie šifruotų žinučių.", "This requires the latest Riot on your other devices:": "Tam reikia naujausios Riot versijos kituose jūsų įrenginiuose:", - "or another cross-signing capable Matrix client": "arba kitą kryžminį pasirašymą palaikantį Matrix klientą", + "or another cross-signing capable Matrix client": "arba kito kryžminį pasirašymą palaikančio Matrix kliento", "Use Recovery Passphrase or Key": "Naudoti atgavimo slaptafrazę arba raktą", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Atnaujinkite šį seansą, kad jam būtų leista patvirtinti kitus seansus, suteikiant jiems prieigą prie šifruotų žinučių ir juos pažymint kaip patikimus kitiems vartotojams.", "Use Single Sign On to continue": "Norėdami tęsti naudokite Vieno Prisijungimo sistemą", @@ -1426,7 +1426,7 @@ "Enable desktop notifications for this session": "Įjungti darbalaukio pranešimus šiam seansui", "Enable audible notifications for this session": "Įjungti garsinius pranešimus šiam seansui", "wait and try again later": "palaukite ir bandykite vėliau dar kartą", - "If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "Jei jūs nenorite naudoti radimui ir tam, kad būtumėte randamas esamų, jums žinomų kontaktų, žemiau įveskite kitą tapatybės serverį.", + "If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "Jei jūs nenorite naudoti serverio radimui ir tam, kad būtumėte randamas esamų, jums žinomų kontaktų, žemiau įveskite kitą tapatybės 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.": "Tapatybės serverio naudojimas yra pasirinktinis. Jei jūs pasirinksite jo nenaudoti, jūs nebūsite randamas kitų vartotojų ir neturėsite galimybės pakviesti kitų nurodydamas el. paštą ar telefoną.", "Do not use an identity server": "Nenaudoti tapatybės serverio", "Cross-signing": "Kryžminis pasirašymas", @@ -1462,7 +1462,7 @@ "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Pasiekite savo saugių žinučių istoriją ir kryžminio pasirašymo tapatybę, naudojamą kitų seansų patvirtinimui, įvesdami savo atgavimo raktą.", "Session verified": "Seansas patvirtintas", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Neįmanoma prisijungti prie serverio per HTTP, kai naršyklės juostoje yra HTTPS URL. Naudokite HTTPS arba įjunkite nesaugias rašmenas.", - "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Jūsų naujas seansas dabar yra patvirtintas. Jis turi prieigą prie jūsų šifruotų žinučių ir kiti vartotojai matys jį kaip patikimą.", + "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Jūsų naujas seansas buvo patvirtintas. Jis turi prieigą prie jūsų šifruotų žinučių ir kiti vartotojai matys jį kaip patikimą.", "Your new session is now verified. Other users will see it as trusted.": "Jūsų naujas seansas dabar yra patvirtintas. Kiti vartotojai matys jį kaip patikimą.", "NOT verified": "Nepatvirtinta", "verified": "patvirtinta", @@ -1588,5 +1588,36 @@ "Click the button below to confirm setting up encryption.": "Paspauskite mygtuką žemiau, kad patvirtintumėte šifravimo nustatymą.", "Restore your key backup to upgrade your encryption": "Atstatykite savo raktų atsarginę kopiją, kad atnaujintumėte šifravimą", "Upgrade your encryption": "Atnaujinkite savo šifravimą", - "Failed to set topic": "Nepavyko nustatyti temos" + "Failed to set topic": "Nepavyko nustatyti temos", + "Show typing notifications": "Rodyti spausdinimo pranešimus", + "Show hidden events in timeline": "Rodyti paslėptus įvykius laiko juostoje", + "Session backup key:": "Seanso atsarginės kopijos raktas:", + "Unable to load key backup status": "Nepavyko įkelti rakto atsarginės kopijos būklės", + "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Prieš atsijungdami susiekite šį seansą prie rakto atsarginės kopijos, kad išvengtumėte praradimo raktų, kurie gali būti tik šiame seanse.", + "Connect this session to Key Backup": "Susieti šį seansą su rakto atsargine kopija", + "Backup key stored: ": "Atsarginė rakto kopija saugoma: ", + "You are currently using to discover and be discoverable by existing contacts you know. You can change your identity server below.": "Tam, kad galėtumėte rasti ir tam, kad būtumėte randamas esamų, jums žinomų kontaktų, jūs šiuo metu naudojate tapatybės serverį. Jį pakeisti galite žemiau.", + "Identity Server": "Tapatybės serveris", + "You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Šiuo metu jūs nenaudojate tapatybės serverio. Tam, kad galėtumėte rasti ir tam, kad būtumėte randamas esamų, jums žinomų kontaktų, pridėkite jį žemiau.", + "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.": "Atsijungimas nuo tapatybės serverio reikš, kad jūs nebebūsite randamas kitų vartotojų ir jūs nebegalėsite pakviesti kitų, naudodami jų el. paštą arba telefoną.", + "Appearance": "Išvaizda", + "Deactivate account": "Deaktyvuoti paskyrą", + "Identity Server is": "Tapatybės serveris yra", + "Timeline": "Laiko juosta", + "Key backup": "Atsarginė rakto kopija", + "Where you’re logged in": "Kur esate prisijungę", + "A session's public name is visible to people you communicate with": "Seanso viešas vardas yra matomas žmonių su kuriais jūs bendraujate", + "Try scrolling up in the timeline to see if there are any earlier ones.": "Pabandykite slinkti aukštyn laiko juostoje, kad sužinotumėte, ar yra ankstesnių.", + "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.": "Tai visam laikui padarys jūsų paskyrą nebetinkama naudoti. Jūs nebegalėsite prisijungti ir niekas nebegalės iš naujo užregistruoti to pačio vartotojo ID. Jūsų paskyra išeis iš visų kambarių, kuriuose ji dalyvauja ir pašalins jūsų paskyros detales iš jūsų tapatybės serverio. Šis veiksmas neatšaukiamas.", + "Unable to validate homeserver/identity server": "Neįmanoma patvirtinti serverio/tapatybės serverio", + "No identity server is configured so you cannot add an email address in order to reset your password in the future.": "Nėra sukonfigūruota jokio tapatybės serverio, tad jūs negalite pridėti el. pašto adreso, tam, kad galėtumėte iš naujo nustatyti savo slaptažodį ateityje.", + "Enter your custom identity server URL What does this mean?": "Įveskite savo pasirinktinio tapatybės serverio URL Ką tai reiškia?", + "Identity Server URL": "Tapatybės serverio URL", + "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Bandyta įkelti konkrečią vietą šio kambario laiko juostoje, bet jūs neturite leidimo peržiūrėti tos žinutės.", + "Failed to load timeline position": "Nepavyko įkelti laiko juostos pozicijos", + "Your Matrix account on %(serverName)s": "Jūsų Matrix paskyra %(serverName)s serveryje", + "Your Matrix account on ": "Jūsų Matrix paskyra serveryje", + "No identity server is configured: add one in server settings to reset your password.": "Nesukonfigūruotas joks tapatybės serveris: pridėkite jį serverio nustatymuose, kad iš naujo nustatytumėte slaptažodį.", + "Identity server URL does not appear to be a valid identity server": "Tapatybės serverio URL neatrodo kaip tinkamas tapatybės serveris", + "Scroll up/down in the timeline": "Slinkite aukštyn/žemyn laiko juostoje" } From 211ad66fea90e3c488a890fb9c7c71e3d24cf1ad Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 5 Jun 2020 08:39:38 -0600 Subject: [PATCH 0056/1504] Fix 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 1f70edc5d1..cf6dc2431a 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1134,9 +1134,6 @@ "Securely back up your keys to avoid losing them. Learn more.": "Securely back up your keys to avoid losing them. Learn more.", "Not now": "Not now", "Don't ask me again": "Don't ask me again", - "Jump to first unread room.": "Jump to first unread room.", - "Jump to first invite.": "Jump to first invite.", - "Add room": "Add room", "Show %(n)s more": "Show %(n)s more", "Options": "Options", "%(count)s unread messages including mentions.|other": "%(count)s unread messages including mentions.", From 6752c2832ee8a21e95ce105888b2257ec5bfce2a Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 5 Jun 2020 08:40:32 -0600 Subject: [PATCH 0057/1504] Add missing var --- src/components/views/rooms/RoomSublist2.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 15a0ff801b..1a58b67377 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -237,6 +237,7 @@ export default class RoomSublist2 extends React.Component { // TODO: CSS TBD // TODO: Make this an actual tile + const moreTileHeightPx = layout.tileHeight; visibleTiles.splice(visibleTiles.length - 1, 1, (
Date: Fri, 5 Jun 2020 08:48:23 -0600 Subject: [PATCH 0058/1504] Give the show more button some real CSS This is still somewhat placeholder. --- res/css/views/rooms/_RoomSublist2.scss | 9 +++++++++ src/components/views/rooms/RoomSublist2.tsx | 3 +-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 4d8c3fffff..da1c23b664 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -38,5 +38,14 @@ limitations under the License. display: flex; flex-direction: column; overflow: hidden; + + .mx_RoomSublist2_showMoreButton { + height: 44px; // 1 room tile high + cursor: pointer; + + // We create a flexbox to cheat at alignment + display: flex; + align-items: center; + } } } diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 1a58b67377..90231596fe 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -237,11 +237,10 @@ export default class RoomSublist2 extends React.Component { // TODO: CSS TBD // TODO: Make this an actual tile - const moreTileHeightPx = layout.tileHeight; visibleTiles.splice(visibleTiles.length - 1, 1, (
{_t("Show %(n)s more", {n: numMissing})} From 68e555a0c6641b0061b55f0cf59044e1a2c6c8b2 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 5 Jun 2020 16:40:20 +0100 Subject: [PATCH 0059/1504] Support accounts with cross signing but no SSSS At least at the login stage. Fixes https://github.com/vector-im/riot-web/issues/13894 --- src/components/structures/MatrixChat.tsx | 10 ++++--- .../structures/auth/SetupEncryptionBody.js | 30 +++++++++++++------ src/i18n/strings/en_EN.json | 1 + src/stores/SetupEncryptionStore.js | 2 +- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 7aaedcfb09..b5b77e3ae6 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -1900,10 +1900,12 @@ export default class MatrixChat extends React.PureComponent { return setLoggedInPromise; } - // Test for the master cross-signing key in SSSS as a quick proxy for - // whether cross-signing has been set up on the account. - const masterKeyInStorage = !!cli.getAccountData("m.cross_signing.master"); - if (masterKeyInStorage) { + // wait for the client to finish downloading cross-signing keys for us so we + // know whether or not we have keys set up on this account + await cli.downloadKeys([cli.getUserId()]); + + const crossSigningIsSetUp = cli.getStoredCrossSigningForUser(cli.getUserId()); + if (crossSigningIsSetUp) { this.setStateForNewView({ view: Views.COMPLETE_SECURITY }); } else if (await cli.doesServerSupportUnstableFeature("org.matrix.e2e_cross_signing")) { this.setStateForNewView({ view: Views.E2E_SETUP }); diff --git a/src/components/structures/auth/SetupEncryptionBody.js b/src/components/structures/auth/SetupEncryptionBody.js index 7886ed26dd..4cc5c5ef75 100644 --- a/src/components/structures/auth/SetupEncryptionBody.js +++ b/src/components/structures/auth/SetupEncryptionBody.js @@ -16,7 +16,7 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; -import { _t } from '../../../languageHandler'; +import { _t, _td } from '../../../languageHandler'; import { MatrixClientPeg } from '../../../MatrixClientPeg'; import * as sdk from '../../../index'; import withValidation from '../../views/elements/Validation'; @@ -196,11 +196,27 @@ export default class SetupEncryptionBody extends React.Component { } else if (phase === PHASE_INTRO) { const store = SetupEncryptionStore.sharedInstance(); let recoveryKeyPrompt; - if (keyHasPassphrase(store.keyInfo)) { + if (store.keyInfo && keyHasPassphrase(store.keyInfo)) { recoveryKeyPrompt = _t("Use Recovery Key or Passphrase"); - } else { + } else if (store.keyInfo) { recoveryKeyPrompt = _t("Use Recovery Key"); } + + let useRecoveryKeyButton; + let resetKeysCaption; + if (recoveryKeyPrompt) { + useRecoveryKeyButton = + {recoveryKeyPrompt} + ; + resetKeysCaption = _td( + "If you've forgotten your recovery key you can ", + ); + } else { + resetKeysCaption = _td( + "If you have no other devices you can ", + ); + } + return (

{_t( @@ -224,16 +240,12 @@ export default class SetupEncryptionBody extends React.Component {

- - {recoveryKeyPrompt} - + {useRecoveryKeyButton} {_t("Skip")}
-
{_t( - "If you've forgotten your recovery key you can " + - "", {}, { +
{_t(resetKeysCaption, {}, { button: sub => diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index e54a4d8662..416d1debe7 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2101,6 +2101,7 @@ "Looks good!": "Looks good!", "Use Recovery Key or Passphrase": "Use Recovery Key or Passphrase", "Use Recovery Key": "Use Recovery Key", + "If you have no other devices you can ": "If you have no other devices you can ", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.", "This requires the latest Riot on your other devices:": "This requires the latest Riot on your other devices:", "or another cross-signing capable Matrix client": "or another cross-signing capable Matrix client", diff --git a/src/stores/SetupEncryptionStore.js b/src/stores/SetupEncryptionStore.js index cc64e24a03..e155a5c29f 100644 --- a/src/stores/SetupEncryptionStore.js +++ b/src/stores/SetupEncryptionStore.js @@ -68,7 +68,7 @@ export class SetupEncryptionStore extends EventEmitter { async fetchKeyInfo() { const keys = await MatrixClientPeg.get().isSecretStored('m.cross_signing.master', false); - if (Object.keys(keys).length === 0) { + if (!keys || Object.keys(keys).length === 0) { this.keyId = null; this.keyInfo = null; } else { From 7c59e397102310e5987ef1d0640f46658e2840cd Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 5 Jun 2020 17:52:09 +0100 Subject: [PATCH 0060/1504] Sort out what we wait for after login We were waiting only for the client to become logged in rather than for setLoggedIn() to finish but then we were waiting for the first sync to complete which is far longer. We need setLoggedIn to have finished for crypto to be set up so we can query cross-signing keys, so just wait for that anyway, the logic becomes a lot simpler and we're waiting the same amount of time because we have to wait for the first sync to finish. We can also download keys in parallel. --- src/components/structures/MatrixChat.tsx | 43 +++++++++--------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index b5b77e3ae6..4d85108aaf 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -1868,42 +1868,31 @@ export default class MatrixChat extends React.PureComponent { this.accountPasswordTimer = null; }, 60 * 5 * 1000); - // Wait for the client to be logged in (but not started) - // which is enough to ask the server about account data. - const loggedIn = new Promise(resolve => { - const actionHandlerRef = dis.register(payload => { - if (payload.action !== "on_logged_in") { - return; - } - dis.unregister(actionHandlerRef); - resolve(); - }); - }); - - // Create and start the client in the background - const setLoggedInPromise = Lifecycle.setLoggedIn(credentials); - await loggedIn; + // Create and start the client + await Lifecycle.setLoggedIn(credentials); const cli = MatrixClientPeg.get(); - // We're checking `isCryptoAvailable` here instead of `isCryptoEnabled` - // because the client hasn't been started yet. - const cryptoAvailable = isCryptoAvailable(); - if (!cryptoAvailable) { + const cryptoEnabled = cli.isCryptoEnabled(); + if (!cryptoEnabled) { this.onLoggedIn(); } - this.setState({ pendingInitialSync: true }); - await this.firstSyncPromise.promise; + const promisesList = [this.firstSyncPromise.promise]; + if (cryptoEnabled) { + // wait for the client to finish downloading cross-signing keys for us so we + // know whether or not we have keys set up on this account + promisesList.push(cli.downloadKeys([cli.getUserId()])); + } - if (!cryptoAvailable) { + this.setState({ pendingInitialSync: true }); + + await Promise.all(promisesList); + + if (!cryptoEnabled) { this.setState({ pendingInitialSync: false }); return setLoggedInPromise; } - // wait for the client to finish downloading cross-signing keys for us so we - // know whether or not we have keys set up on this account - await cli.downloadKeys([cli.getUserId()]); - const crossSigningIsSetUp = cli.getStoredCrossSigningForUser(cli.getUserId()); if (crossSigningIsSetUp) { this.setStateForNewView({ view: Views.COMPLETE_SECURITY }); @@ -1913,8 +1902,6 @@ export default class MatrixChat extends React.PureComponent { this.onLoggedIn(); } this.setState({ pendingInitialSync: false }); - - return setLoggedInPromise; }; // complete security / e2e setup has finished From ed7f0fd95f0b72a7dc2c46e037ec84981ea01687 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 5 Jun 2020 18:08:25 +0100 Subject: [PATCH 0061/1504] This promise doesn't exist anymore --- src/components/structures/MatrixChat.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 4d85108aaf..ec65fd6957 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -1890,7 +1890,7 @@ export default class MatrixChat extends React.PureComponent { if (!cryptoEnabled) { this.setState({ pendingInitialSync: false }); - return setLoggedInPromise; + return; } const crossSigningIsSetUp = cli.getStoredCrossSigningForUser(cli.getUserId()); From 1d8833e9f83a50e9223b04c59b8e216b86c56f04 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 5 Jun 2020 14:08:20 -0600 Subject: [PATCH 0062/1504] Selected state, cleanup, and profile display --- res/css/structures/_LeftPanel2.scss | 3 +++ res/css/views/rooms/_RoomList2.scss | 2 ++ res/css/views/rooms/_RoomSublist2.scss | 2 ++ res/css/views/rooms/_RoomTile2.scss | 13 +++++++++++-- res/themes/light/css/_light.scss | 1 + src/ActiveRoomObserver.js | 14 +++++++++----- src/components/structures/LeftPanel2.tsx | 17 +++++++++++++---- src/components/views/rooms/RoomTile2.tsx | 11 ++++++++++- 8 files changed, 51 insertions(+), 12 deletions(-) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index 52ee4f16ac..822a5ac399 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -14,6 +14,9 @@ See the License for the specific language governing permissions and limitations under the License. */ +// TODO: Rename to mx_LeftPanel during replacement of old component + +// TODO: Put these variables in the right place, or namespace them. $tagPanelWidth: 70px; $roomListMinimizedWidth: 50px; diff --git a/res/css/views/rooms/_RoomList2.scss b/res/css/views/rooms/_RoomList2.scss index add7214468..89760958f9 100644 --- a/res/css/views/rooms/_RoomList2.scss +++ b/res/css/views/rooms/_RoomList2.scss @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// TODO: Rename to mx_RoomList during replacement of old component + .mx_RoomList2 { // Create a column-based flexbox for the sublists. That's pretty much all we have to // worry about in this stylesheet. diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index da1c23b664..3b3eccfd60 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// TODO: Rename to mx_RoomSublist during replacement of old component + @import "../../../../node_modules/react-resizable/css/styles.css"; .mx_RoomSublist2 { diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index bb27942f81..3151bb8716 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -14,15 +14,24 @@ See the License for the specific language governing permissions and limitations under the License. */ +// TODO: Rename to mx_RoomTile during replacement of old component + // Note: the room tile expects to be in a flexbox column container .mx_RoomTile2 { - width: 100%; - padding-bottom: 12px; + width: calc(100% - 11px); // 8px for padding (4px on either side), 3px for margin + margin-bottom: 4px; + margin-right: 3px; + padding: 4px; // The tile is also a flexbox row itself display: flex; flex-wrap: wrap; + &.mx_RoomTile2_selected { + background-color: $roomtile2-selected-bg-color; + border-radius: 32px; + } + .mx_RoomTile2_avatarContainer { margin-right: 8px; } diff --git a/res/themes/light/css/_light.scss b/res/themes/light/css/_light.scss index 683c02528d..5aeb125774 100644 --- a/res/themes/light/css/_light.scss +++ b/res/themes/light/css/_light.scss @@ -176,6 +176,7 @@ $header-divider-color: #91A1C0; // TODO: Dark theme $roomtile2-preview-color: #9e9e9e; $roomtile2-badge-color: #61708b; +$roomtile2-selected-bg-color: #FFF; $roomtile-name-color: #61708b; $roomtile-badge-fg-color: $accent-fg-color; diff --git a/src/ActiveRoomObserver.js b/src/ActiveRoomObserver.js index d6fbb460b5..b7695d401d 100644 --- a/src/ActiveRoomObserver.js +++ b/src/ActiveRoomObserver.js @@ -27,7 +27,7 @@ import RoomViewStore from './stores/RoomViewStore'; */ class ActiveRoomObserver { constructor() { - this._listeners = {}; + this._listeners = {}; // key=roomId, value=function(isActive:boolean) this._activeRoomId = RoomViewStore.getRoomId(); // TODO: We could self-destruct when the last listener goes away, or at least @@ -35,6 +35,10 @@ class ActiveRoomObserver { this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate.bind(this)); } + get activeRoomId(): string { + return this._activeRoomId; + } + addListener(roomId, listener) { if (!this._listeners[roomId]) this._listeners[roomId] = []; this._listeners[roomId].push(listener); @@ -51,23 +55,23 @@ class ActiveRoomObserver { } } - _emit(roomId) { + _emit(roomId, isActive: boolean) { if (!this._listeners[roomId]) return; for (const l of this._listeners[roomId]) { - l.call(); + l.call(null, isActive); } } _onRoomViewStoreUpdate() { // emit for the old room ID - if (this._activeRoomId) this._emit(this._activeRoomId); + if (this._activeRoomId) this._emit(this._activeRoomId, false); // update our cache this._activeRoomId = RoomViewStore.getRoomId(); // and emit for the new one - if (this._activeRoomId) this._emit(this._activeRoomId); + if (this._activeRoomId) this._emit(this._activeRoomId, true); } } diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index bf0e72beeb..00419465eb 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -86,26 +86,35 @@ export default class LeftPanel2 extends React.Component { } private renderHeader(): React.ReactNode { - // TODO: Use real profile info + // TODO: Update when profile info changes // TODO: Presence // TODO: Breadcrumbs toggle // TODO: Menu button const avatarSize = 32; + // TODO: Don't do this profile lookup in render() + const client = MatrixClientPeg.get(); + let displayName = client.getUserId(); + let avatarUrl: string = null; + const myUser = client.getUser(client.getUserId()); + if (myUser) { + displayName = myUser.rawDisplayName; + avatarUrl = myUser.avatarUrl; + } return (
- Irene + {displayName}
diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 8a51327ae2..09d7b46ba5 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -23,7 +23,6 @@ import classNames from "classnames"; import { RovingTabIndexWrapper } from "../../../accessibility/RovingTabIndex"; import AccessibleButton from "../../views/elements/AccessibleButton"; import RoomAvatar from "../../views/avatars/RoomAvatar"; -import Tooltip from "../../views/elements/Tooltip"; import dis from '../../../dispatcher/dispatcher'; import { Key } from "../../../Keyboard"; import * as RoomNotifs from '../../../RoomNotifs'; @@ -32,6 +31,7 @@ import * as Unread from '../../../Unread'; import * as FormattingUtils from "../../../utils/FormattingUtils"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; import { MatrixEvent } from "matrix-js-sdk/src/models/event"; +import ActiveRoomObserver from "../../../ActiveRoomObserver"; /******************************************************************* * CAUTION * @@ -66,6 +66,7 @@ interface INotificationState { interface IState { hover: boolean; notificationState: INotificationState; + selected: boolean; } export default class RoomTile2 extends React.Component { @@ -88,12 +89,14 @@ export default class RoomTile2 extends React.Component { this.state = { hover: false, notificationState: this.getNotificationState(), + selected: ActiveRoomObserver.activeRoomId === this.props.room.roomId, }; this.props.room.on("Room.receipt", this.handleRoomEventUpdate); this.props.room.on("Room.timeline", this.handleRoomEventUpdate); this.props.room.on("Room.redaction", this.handleRoomEventUpdate); MatrixClientPeg.get().on("Event.decrypted", this.handleRoomEventUpdate); + ActiveRoomObserver.addListener(this.props.room.roomId, this.onActiveRoomUpdate); } public componentWillUnmount() { @@ -101,6 +104,7 @@ export default class RoomTile2 extends React.Component { this.props.room.removeListener("Room.receipt", this.handleRoomEventUpdate); this.props.room.removeListener("Room.timeline", this.handleRoomEventUpdate); this.props.room.removeListener("Room.redaction", this.handleRoomEventUpdate); + ActiveRoomObserver.removeListener(this.props.room.roomId, this.onActiveRoomUpdate); } if (MatrixClientPeg.get()) { MatrixClientPeg.get().removeListener("Event.decrypted", this.handleRoomEventUpdate); @@ -187,6 +191,10 @@ export default class RoomTile2 extends React.Component { }); }; + private onActiveRoomUpdate = (isActive: boolean) => { + this.setState({selected: isActive}); + }; + public render(): React.ReactElement { // TODO: Collapsed state // TODO: Invites @@ -195,6 +203,7 @@ export default class RoomTile2 extends React.Component { const classes = classNames({ 'mx_RoomTile2': true, + 'mx_RoomTile2_selected': this.state.selected, }); let badge; From 829bf3c774498bacad2aadbaecc582821457ccab Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 5 Jun 2020 14:11:04 -0600 Subject: [PATCH 0063/1504] Add another TODO comment --- res/css/views/rooms/_RoomSublist2.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 3b3eccfd60..e6e5af3b48 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -16,6 +16,8 @@ limitations under the License. // TODO: Rename to mx_RoomSublist during replacement of old component +// TODO: Just use the 3 selectors we need from this instead of importing it. +// We're going to end up with heavy modifications anyways. @import "../../../../node_modules/react-resizable/css/styles.css"; .mx_RoomSublist2 { From 2806c8c18ba4f8bf864b981b54011c5211c333ab Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 5 Jun 2020 14:13:28 -0600 Subject: [PATCH 0064/1504] Fix temporary class --- src/components/structures/LeftPanel2.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 00419465eb..c66c0a6799 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -131,7 +131,7 @@ export default class LeftPanel2 extends React.Component { ); const searchBox = ( Date: Fri, 5 Jun 2020 18:44:05 -0600 Subject: [PATCH 0065/1504] Introduce sticky rooms to the new room list Originally this was intended to be done only in the importance algorithm, however it is clear that all algorithms will need to deal with this. As such, it has been put into the base class to deal with as we may override it in the future. This commit should be self-documenting enough to describe what is going on, though the major highlight is that the handling of the sticky room is done by lying to the underlying algorithm. This has not been optimized for performance yet. For https://github.com/vector-im/riot-web/issues/13635 --- src/stores/room-list/README.md | 38 ++--- src/stores/room-list/RoomListStore2.ts | 20 +++ .../algorithms/list-ordering/Algorithm.ts | 136 +++++++++++++++++- .../list-ordering/ImportanceAlgorithm.ts | 26 ++-- .../list-ordering/NaturalAlgorithm.ts | 8 +- src/stores/room-list/models.ts | 1 + 6 files changed, 193 insertions(+), 36 deletions(-) diff --git a/src/stores/room-list/README.md b/src/stores/room-list/README.md index f4a56130ca..ba34691d34 100644 --- a/src/stores/room-list/README.md +++ b/src/stores/room-list/README.md @@ -74,29 +74,29 @@ gets applied to each category in a sub-sub-list fashion. This should result in t being sorted alphabetically amongst each other as well as the grey rooms sorted amongst each other, but collectively the tag will be sorted into categories with red being at the top. - +### Sticky rooms -The algorithm also has a concept of a 'sticky' room which is the room the user is currently viewing. -The sticky room will remain in position on the room list regardless of other factors going on as typically -clicking on a room will cause it to change categories into 'idle'. This is done by preserving N rooms -above the selected room at all times, where N is the number of rooms above the selected rooms when it was -selected. +When the user visits a room, that room becomes 'sticky' in the list, regardless of ordering algorithm. +From a code perspective, the underlying algorithm is not aware of a sticky room and instead the base class +manages which room is sticky. This is to ensure that all algorithms handle it the same. -For example, if the user has 3 red rooms and selects the middle room, they will always see exactly one -room above their selection at all times. If they receive another notification, and the tag ordering is -specified as Recent, they'll see the new notification go to the top position, and the one that was previously -there fall behind the sticky room. +The sticky flag is simply to say it will not move higher or lower down the list while it is active. For +example, if using the importance algorithm, the room would naturally become idle once viewed and thus +would normally fly down the list out of sight. The sticky room concept instead holds it in place, never +letting it fly down until the user moves to another room. -The sticky room's category is technically 'idle' while being viewed and is explicitly pulled out of the -tag sorting algorithm's input as it must maintain its position in the list. When the user moves to another -room, the previous sticky room gets recalculated to determine which category it needs to be in as the user -could have been scrolled up while new messages were received. +Only one room can be sticky at a time. Room updates around the sticky room will still hold the sticky +room in place. The best example of this is the importance algorithm: if the user has 3 red rooms and +selects the middle room, they will see exactly one room above their selection at all times. If they +receive another notification which causes the room to move into the topmost position, the room that was +above the sticky room will move underneath to allow for the new room to take the top slot, maintaining +the sticky room's position. -Further, the sticky room is not aware of category boundaries and thus the user can see a shift in what -kinds of rooms move around their selection. An example would be the user having 4 red rooms, the user -selecting the third room (leaving 2 above it), and then having the rooms above it read on another device. -This would result in 1 red room and 1 other kind of room above the sticky room as it will try to maintain -2 rooms above the sticky room. +Though only applicable to the importance algorithm, the sticky room is not aware of category boundaries +and thus the user can see a shift in what kinds of rooms move around their selection. An example would +be the user having 4 red rooms, the user selecting the third room (leaving 2 above it), and then having +the rooms above it read on another device. This would result in 1 red room and 1 other kind of room +above the sticky room as it will try to maintain 2 rooms above the sticky room. An exception for the sticky room placement is when there's suddenly not enough rooms to maintain the placement exactly. This typically happens if the user selects a room and leaves enough rooms where it cannot maintain diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index af9970d3cc..7f7d2da0f6 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -29,6 +29,7 @@ import defaultDispatcher from "../../dispatcher/dispatcher"; import { readReceiptChangeIsFor } from "../../utils/read-receipts"; import { IFilterCondition } from "./filters/IFilterCondition"; import { TagWatcher } from "./TagWatcher"; +import RoomViewStore from "../RoomViewStore"; interface IState { tagsEnabled?: boolean; @@ -62,6 +63,7 @@ export class RoomListStore2 extends AsyncStore { this.checkEnabled(); for (const settingName of this.watchedSettings) SettingsStore.monitorSetting(settingName, null); + RoomViewStore.addListener(this.onRVSUpdate); } public get orderedLists(): ITagMap { @@ -93,6 +95,23 @@ export class RoomListStore2 extends AsyncStore { this.setAlgorithmClass(); } + private onRVSUpdate = () => { + if (!this.enabled) return; // TODO: Remove enabled flag when RoomListStore2 takes over + if (!this.matrixClient) return; // We assume there won't be RVS updates without a client + + const activeRoomId = RoomViewStore.getRoomId(); + if (!activeRoomId && this.algorithm.stickyRoom) { + this.algorithm.stickyRoom = null; + } else if (activeRoomId) { + const activeRoom = this.matrixClient.getRoom(activeRoomId); + if (!activeRoom) throw new Error(`${activeRoomId} is current in RVS but missing from client`); + if (activeRoom !== this.algorithm.stickyRoom) { + console.log(`Changing sticky room to ${activeRoomId}`); + this.algorithm.stickyRoom = activeRoom; + } + } + }; + protected async onDispatch(payload: ActionPayload) { if (payload.action === 'MatrixActions.sync') { // Filter out anything that isn't the first PREPARED sync. @@ -110,6 +129,7 @@ export class RoomListStore2 extends AsyncStore { console.log("Regenerating room lists: Startup"); await this.readAndCacheSettingsFromStore(); await this.regenerateAllLists(); + this.onRVSUpdate(); // fake an RVS update to adjust sticky room, if needed } // TODO: Remove this once the RoomListStore becomes default diff --git a/src/stores/room-list/algorithms/list-ordering/Algorithm.ts b/src/stores/room-list/algorithms/list-ordering/Algorithm.ts index 3921bb6221..e8058a2964 100644 --- a/src/stores/room-list/algorithms/list-ordering/Algorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/Algorithm.ts @@ -22,6 +22,7 @@ import { ITagMap, ITagSortingMap } from "../models"; import DMRoomMap from "../../../../utils/DMRoomMap"; import { FILTER_CHANGED, IFilterCondition } from "../../filters/IFilterCondition"; import { EventEmitter } from "events"; +import { UPDATE_EVENT } from "../../../AsyncStore"; // TODO: Add locking support to avoid concurrent writes? @@ -30,6 +31,12 @@ import { EventEmitter } from "events"; */ export const LIST_UPDATED_EVENT = "list_updated_event"; +interface IStickyRoom { + room: Room; + position: number; + tag: TagID; +} + /** * Represents a list ordering algorithm. This class will take care of tag * management (which rooms go in which tags) and ask the implementation to @@ -37,7 +44,9 @@ export const LIST_UPDATED_EVENT = "list_updated_event"; */ export abstract class Algorithm extends EventEmitter { private _cachedRooms: ITagMap = {}; + private _cachedStickyRooms: ITagMap = {}; // a clone of the _cachedRooms, with the sticky room private filteredRooms: ITagMap = {}; + private _stickyRoom: IStickyRoom = null; protected sortAlgorithms: ITagSortingMap; protected rooms: Room[] = []; @@ -51,6 +60,73 @@ export abstract class Algorithm extends EventEmitter { super(); } + public get stickyRoom(): Room { + return this._stickyRoom ? this._stickyRoom.room : null; + } + + public set stickyRoom(val: Room) { + // We wrap this in a closure because we can't use async setters. + // We need async so we can wait for handleRoomUpdate() to do its thing, otherwise + // we risk duplicating rooms. + (async () => { + // It's possible to have no selected room. In that case, clear the sticky room + if (!val) { + if (this._stickyRoom) { + // Lie to the algorithm and re-add the room to the algorithm + await this.handleRoomUpdate(this._stickyRoom.room, RoomUpdateCause.NewRoom); + } + this._stickyRoom = null; + return; + } + + // When we do have a room though, we expect to be able to find it + const tag = this.roomIdsToTags[val.roomId][0]; + if (!tag) throw new Error(`${val.roomId} does not belong to a tag and cannot be sticky`); + let position = this.cachedRooms[tag].indexOf(val); + if (position < 0) throw new Error(`${val.roomId} does not appear to be known and cannot be sticky`); + + // 🐉 Here be dragons. + // Before we can go through with lying to the underlying algorithm about a room + // we need to ensure that when we do we're ready for the innevitable sticky room + // update we'll receive. To prepare for that, we first remove the sticky room and + // recalculate the state ourselves so that when the underlying algorithm calls for + // the same thing it no-ops. After we're done calling the algorithm, we'll issue + // a new update for ourselves. + const lastStickyRoom = this._stickyRoom; + console.log(`Last sticky room:`, lastStickyRoom); + this._stickyRoom = null; + this.recalculateStickyRoom(); + + // When we do have the room, re-add the old room (if needed) to the algorithm + // and remove the sticky room from the algorithm. This is so the underlying + // algorithm doesn't try and confuse itself with the sticky room concept. + if (lastStickyRoom) { + // Lie to the algorithm and re-add the room to the algorithm + await this.handleRoomUpdate(lastStickyRoom.room, RoomUpdateCause.NewRoom); + } + // Lie to the algorithm and remove the room from it's field of view + await this.handleRoomUpdate(val, RoomUpdateCause.RoomRemoved); + + // Now that we're done lying to the algorithm, we need to update our position + // marker only if the user is moving further down the same list. If they're switching + // lists, or moving upwards, the position marker will splice in just fine but if + // they went downwards in the same list we'll be off by 1 due to the shifting rooms. + if (lastStickyRoom && lastStickyRoom.tag === tag && lastStickyRoom.position <= position) { + position++; + } + + this._stickyRoom = { + room: val, + position: position, + tag: tag, + }; + this.recalculateStickyRoom(); + + // Finally, trigger an update + this.emit(LIST_UPDATED_EVENT); + })(); + } + protected get hasFilters(): boolean { return this.allowedByFilter.size > 0; } @@ -58,9 +134,14 @@ export abstract class Algorithm extends EventEmitter { protected set cachedRooms(val: ITagMap) { this._cachedRooms = val; this.recalculateFilteredRooms(); + this.recalculateStickyRoom(); } protected get cachedRooms(): ITagMap { + // 🐉 Here be dragons. + // Note: this is used by the underlying algorithm classes, so don't make it return + // the sticky room cache. If it ends up returning the sticky room cache, we end up + // corrupting our caches and confusing them. return this._cachedRooms; } @@ -154,6 +235,59 @@ export abstract class Algorithm extends EventEmitter { console.log(`[DEBUG] ${filteredRooms.length}/${rooms.length} rooms filtered into ${tagId}`); } + /** + * Recalculate the sticky room position. If this is being called in relation to + * a specific tag being updated, it should be given to this function to optimize + * the call. + * @param updatedTag The tag that was updated, if possible. + */ + protected recalculateStickyRoom(updatedTag: TagID = null): void { + // 🐉 Here be dragons. + // This function does far too much for what it should, and is called by many places. + // Not only is this responsible for ensuring the sticky room is held in place at all + // times, it is also responsible for ensuring our clone of the cachedRooms is up to + // date. If either of these desyncs, we see weird behaviour like duplicated rooms, + // outdated lists, and other nonsensical issues that aren't necessarily obvious. + + if (!this._stickyRoom) { + // If there's no sticky room, just do nothing useful. + if (!!this._cachedStickyRooms) { + // Clear the cache if we won't be needing it + this._cachedStickyRooms = null; + this.emit(LIST_UPDATED_EVENT); + } + return; + } + + if (!this._cachedStickyRooms || !updatedTag) { + console.log(`Generating clone of cached rooms for sticky room handling`); + const stickiedTagMap: ITagMap = {}; + for (const tagId of Object.keys(this.cachedRooms)) { + stickiedTagMap[tagId] = this.cachedRooms[tagId].map(r => r); // shallow clone + } + this._cachedStickyRooms = stickiedTagMap; + } + + if (updatedTag) { + // Update the tag indicated by the caller, if possible. This is mostly to ensure + // our cache is up to date. + console.log(`Replacing cached sticky rooms for ${updatedTag}`); + this._cachedStickyRooms[updatedTag] = this.cachedRooms[updatedTag].map(r => r); // shallow clone + } + + // Now try to insert the sticky room, if we need to. + // We need to if there's no updated tag (we regenned the whole cache) or if the tag + // we might have updated from the cache is also our sticky room. + const sticky = this._stickyRoom; + if (!updatedTag || updatedTag === sticky.tag) { + console.log(`Inserting sticky room ${sticky.room.roomId} at position ${sticky.position} in ${sticky.tag}`); + this._cachedStickyRooms[sticky.tag].splice(sticky.position, 0, sticky.room); + } + + // Finally, trigger an update + this.emit(LIST_UPDATED_EVENT); + } + /** * Asks the Algorithm to regenerate all lists, using the tags given * as reference for which lists to generate and which way to generate @@ -174,7 +308,7 @@ export abstract class Algorithm extends EventEmitter { */ public getOrderedRooms(): ITagMap { if (!this.hasFilters) { - return this.cachedRooms; + return this._cachedStickyRooms || this.cachedRooms; } return this.filteredRooms; } diff --git a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts index 6c4498dad3..ae288a4847 100644 --- a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts @@ -17,7 +17,7 @@ limitations under the License. import { Algorithm } from "./Algorithm"; import { Room } from "matrix-js-sdk/src/models/room"; -import { DefaultTagID, RoomUpdateCause, TagID } from "../../models"; +import { RoomUpdateCause, TagID } from "../../models"; import { ITagMap, SortAlgorithm } from "../models"; import { sortRoomsWithAlgorithm } from "../tag-sorting"; import * as Unread from '../../../../Unread'; @@ -82,15 +82,14 @@ export class ImportanceAlgorithm extends Algorithm { // HOW THIS WORKS // -------------- // - // This block of comments assumes you've read the README one level higher. + // This block of comments assumes you've read the README two levels higher. // You should do that if you haven't already. // // Tags are fed into the algorithmic functions from the Algorithm superclass, // which cause subsequent updates to the room list itself. Categories within // those tags are tracked as index numbers within the array (zero = top), with // each sticky room being tracked separately. Internally, the category index - // can be found from `this.indices[tag][category]` and the sticky room information - // from `this.stickyRoom`. + // can be found from `this.indices[tag][category]`. // // The room list store is always provided with the `this.cachedRooms` results, which are // updated as needed and not recalculated often. For example, when a room needs to @@ -102,17 +101,6 @@ export class ImportanceAlgorithm extends Algorithm { [tag: TagID]: ICategoryIndex; } = {}; - // TODO: Use this (see docs above) - private stickyRoom: { - roomId: string; - tag: TagID; - fromTop: number; - } = { - roomId: null, - tag: null, - fromTop: 0, - }; - constructor() { super(); console.log("Constructed an ImportanceAlgorithm"); @@ -195,6 +183,12 @@ export class ImportanceAlgorithm extends Algorithm { return; } + if (cause === RoomUpdateCause.RoomRemoved) { + // TODO: Be smarter and splice rather than regen the planet. + await this.setKnownRooms(this.rooms.filter(r => r !== room)); + return; + } + let tags = this.roomIdsToTags[room.roomId]; if (!tags) { console.warn(`No tags known for "${room.name}" (${room.roomId})`); @@ -251,6 +245,8 @@ export class ImportanceAlgorithm extends Algorithm { taggedRooms.splice(startIdx, 0, ...sorted); // Finally, flag that we've done something + this.recalculateFilteredRoomsForTag(tag); // update filter to re-sort the list + this.recalculateStickyRoom(tag); // update sticky room to make sure it appears if needed changed = true; } return changed; diff --git a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts index e129e98e6f..d544b1196f 100644 --- a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts @@ -46,11 +46,17 @@ export class NaturalAlgorithm extends Algorithm { console.warn(`No tags known for "${room.name}" (${room.roomId})`); return false; } + let changed = false; for (const tag of tags) { // TODO: Optimize this loop to avoid useless operations // For example, we can skip updates to alphabetic (sometimes) and manually ordered tags this.cachedRooms[tag] = await sortRoomsWithAlgorithm(this.cachedRooms[tag], tag, this.sortAlgorithms[tag]); + + // Flag that we've done something + this.recalculateFilteredRoomsForTag(tag); // update filter to re-sort the list + this.recalculateStickyRoom(tag); // update sticky room to make sure it appears if needed + changed = true; } - return true; // assume we changed something + return changed; } } diff --git a/src/stores/room-list/models.ts b/src/stores/room-list/models.ts index 9a27569db4..188e23f7d7 100644 --- a/src/stores/room-list/models.ts +++ b/src/stores/room-list/models.ts @@ -40,4 +40,5 @@ export enum RoomUpdateCause { Timeline = "TIMELINE", RoomRead = "ROOM_READ", // TODO: Use this. NewRoom = "NEW_ROOM", + RoomRemoved = "ROOM_REMOVED", } From 0bb1eefdea6cf566f0a3ed4972c420700d938f65 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 5 Jun 2020 19:47:15 -0600 Subject: [PATCH 0066/1504] Remove view_room listener as it isn't needed We use the RoomViewStore --- src/stores/room-list/RoomListStore2.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 7f7d2da0f6..882da2b62d 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -226,9 +226,6 @@ export class RoomListStore2 extends AsyncStore { // const roomPayload = (payload); // TODO: Type out the dispatcher types // console.log(`[RoomListDebug] Handling new room ${roomPayload.room.roomId}`); // await this.algorithm.handleRoomUpdate(roomPayload.room, RoomUpdateCause.NewRoom); - } else if (payload.action === 'view_room') { - // TODO: Update sticky room - console.log(payload); } } From 9b928b5a5dac48d2c13ed4d09bebea0c96e6aa80 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 5 Jun 2020 20:12:32 -0600 Subject: [PATCH 0067/1504] Handle remaining cases for room updates in new room list For https://github.com/vector-im/riot-web/issues/13635 This adds support for: * Tag changes * DM changes * Marking our own rooms as read * Our own membership changes The remaining branch we didn't need was the alternate 'new room' branch, so it was removed. This is not optimized - optimization is deferred. --- src/stores/room-list/RoomListStore2.ts | 52 +++++++++++++------ .../list-ordering/ImportanceAlgorithm.ts | 7 +++ src/stores/room-list/models.ts | 3 +- 3 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index af9970d3cc..e71a8185bf 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -145,13 +145,19 @@ export class RoomListStore2 extends AsyncStore { // First see if the receipt event is for our own user. If it was, trigger // a room update (we probably read the room on a different device). if (readReceiptChangeIsFor(payload.event, this.matrixClient)) { - // TODO: Update room now that it's been read - console.log(payload); + console.log(`[RoomListDebug] Got own read receipt in ${payload.event.roomId}`); + const room = this.matrixClient.getRoom(payload.event.roomId); + if (!room) { + console.warn(`Own read receipt was in unknown room ${payload.event.roomId}`); + return; + } + await this.handleRoomUpdate(room, RoomUpdateCause.ReadReceipt); return; } } else if (payload.action === 'MatrixActions.Room.tags') { - // TODO: Update room from tags - console.log(payload); + const roomPayload = (payload); // TODO: Type out the dispatcher types + console.log(`[RoomListDebug] Got tag change in ${roomPayload.room.roomId}`); + await this.handleRoomUpdate(roomPayload.room, RoomUpdateCause.PossibleTagChange); } else if (payload.action === 'MatrixActions.Room.timeline') { const eventPayload = (payload); // TODO: Type out the dispatcher types @@ -189,23 +195,39 @@ export class RoomListStore2 extends AsyncStore { // cause inaccuracies with the list ordering. We may have to decrypt the last N messages of every room :( await this.handleRoomUpdate(room, RoomUpdateCause.Timeline); } else if (payload.action === 'MatrixActions.accountData' && payload.event_type === 'm.direct') { - // TODO: Update DMs - console.log(payload); + const eventPayload = (payload); // TODO: Type out the dispatcher types + console.log(`[RoomListDebug] Received updated DM map`); + const dmMap = eventPayload.event.getContent(); + for (const userId of Object.keys(dmMap)) { + const roomIds = dmMap[userId]; + for (const roomId of roomIds) { + const room = this.matrixClient.getRoom(roomId); + if (!room) { + console.warn(`${roomId} was found in DMs but the room is not in the store`); + continue; + } + + // We expect this RoomUpdateCause to no-op if there's no change, and we don't expect + // the user to have hundreds of rooms to update in one event. As such, we just hammer + // away at updates until the problem is solved. If we were expecting more than a couple + // of rooms to be updated at once, we would consider batching the rooms up. + await this.handleRoomUpdate(room, RoomUpdateCause.PossibleTagChange); + } + } } else if (payload.action === 'MatrixActions.Room.myMembership') { - // TODO: Improve new room check const membershipPayload = (payload); // TODO: Type out the dispatcher types - if (!membershipPayload.oldMembership && membershipPayload.membership === "join") { + if (membershipPayload.oldMembership !== "join" && membershipPayload.membership === "join") { console.log(`[RoomListDebug] Handling new room ${membershipPayload.room.roomId}`); await this.algorithm.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.NewRoom); + return; } - // TODO: Update room from membership change - console.log(payload); - } else if (payload.action === 'MatrixActions.Room') { - // TODO: Improve new room check - // const roomPayload = (payload); // TODO: Type out the dispatcher types - // console.log(`[RoomListDebug] Handling new room ${roomPayload.room.roomId}`); - // await this.algorithm.handleRoomUpdate(roomPayload.room, RoomUpdateCause.NewRoom); + // If it's not a join, it's transitioning into a different list (possibly historical) + if (membershipPayload.oldMembership !== membershipPayload.membership) { + console.log(`[RoomListDebug] Handling membership change in ${membershipPayload.room.roomId}`); + await this.algorithm.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.PossibleTagChange); + return; + } } else if (payload.action === 'view_room') { // TODO: Update sticky room console.log(payload); diff --git a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts index 6c4498dad3..fe13e1972b 100644 --- a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts @@ -189,6 +189,13 @@ export class ImportanceAlgorithm extends Algorithm { } public async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise { + if (cause === RoomUpdateCause.PossibleTagChange) { + // TODO: Be smarter and splice rather than regen the planet. + // TODO: No-op if no change. + await this.setKnownRooms(this.rooms); + return; + } + if (cause === RoomUpdateCause.NewRoom) { // TODO: Be smarter and insert rather than regen the planet. await this.setKnownRooms([room, ...this.rooms]); diff --git a/src/stores/room-list/models.ts b/src/stores/room-list/models.ts index 9a27569db4..43320809d9 100644 --- a/src/stores/room-list/models.ts +++ b/src/stores/room-list/models.ts @@ -38,6 +38,7 @@ export type TagID = string | DefaultTagID; export enum RoomUpdateCause { Timeline = "TIMELINE", - RoomRead = "ROOM_READ", // TODO: Use this. + PossibleTagChange = "POSSIBLE_TAG_CHANGE", + ReadReceipt = "READ_RECEIPT", NewRoom = "NEW_ROOM", } From e8c614d01e117a0721264452d4144fd87eb50767 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Sat, 6 Jun 2020 02:39:02 +0000 Subject: [PATCH 0068/1504] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2259 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-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 e4f9faa56b..6e808dd951 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2482,5 +2482,6 @@ "A new version of Riot is available!": "已有新版的 Riot!", "New version available. Update now.": "有可用的新版本。立刻更新。", "Emoji picker": "顏文字挑選器", - "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "您的伺服器管理員已在私人聊天室與直接訊息中預設停用端到端加密。" + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "您的伺服器管理員已在私人聊天室與直接訊息中預設停用端到端加密。", + "Show %(n)s more": "顯示另外 %(n)s 個" } From d960d5772198ed73328741ef130bebfd0ab5a0bb Mon Sep 17 00:00:00 2001 From: Tirifto Date: Sat, 6 Jun 2020 15:44:39 +0000 Subject: [PATCH 0069/1504] Translated using Weblate (Esperanto) Currently translated at 99.9% (2258 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eo/ --- src/i18n/strings/eo.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 74cf3629bb..fa4fe703b6 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -2456,5 +2456,6 @@ "Upgrade your Riot": "Gradaltigi vian Rioton", "A new version of Riot is available!": "Nova versio de Riot estas disponebla!", "New version available. Update now.": "Nova versio estas disponebla. Ĝisdatigu nun.", - "Emoji picker": "Elektilo de bildsignoj" + "Emoji picker": "Elektilo de bildsignoj", + "Show %(n)s more": "Montri %(n)s pliajn" } From 1af375ab0ef9fff44aabc816175f8646751a8405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Sat, 6 Jun 2020 08:10:54 +0000 Subject: [PATCH 0070/1504] Translated using Weblate (French) Currently translated at 100.0% (2259 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 45345e5c7d..5d19cb31e8 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2483,5 +2483,6 @@ "A new version of Riot is available!": "Une nouvelle version de Riot est disponible !", "New version available. Update now.": "Nouvelle version disponible. Faire la mise à niveau maintenant.", "Emoji picker": "Sélecteur d’émojis", - "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "L’administrateur de votre serveur a désactivé le chiffrement de bout en bout par défaut dans les salons privés et les messages directs." + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "L’administrateur de votre serveur a désactivé le chiffrement de bout en bout par défaut dans les salons privés et les messages directs.", + "Show %(n)s more": "En montrer %(n)s de plus" } From 36597e23edd02902aa77f43c0389b04bcf900c53 Mon Sep 17 00:00:00 2001 From: XoseM Date: Sat, 6 Jun 2020 04:43:48 +0000 Subject: [PATCH 0071/1504] Translated using Weblate (Galician) Currently translated at 67.3% (1521 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 315 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 314 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index ba67879d14..f479b4f038 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -1278,5 +1278,318 @@ "Show rooms with unread notifications first": "Mostrar primeiro as salas que teñen notificacións sen ler", "Show shortcuts to recently viewed rooms above the room list": "Mostrar atallos a salas vistas recentemente enriba da lista de salas", "Show hidden events in timeline": "Mostrar na cronoloxía eventos ocultos", - "Low bandwidth mode": "Modo de ancho de banda reducido" + "Low bandwidth mode": "Modo de ancho de banda reducido", + "Straight rows of keys are easy to guess": "Palabras de letras contiguas son doadas de adiviñar", + "Short keyboard patterns are easy to guess": "Patróns curtos de teclas son doados de adiviñar", + "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Permitir o servidor de apoio para chamadas turn.matrix.org cando o servidor propio non ofreza un (o teu IP compartirase durante a chamada)", + "Send read receipts for messages (requires compatible homeserver to disable)": "Enviar resgardos de lectura para as mensaxes (require servidor compatible para desactivar)", + "Show previews/thumbnails for images": "Mostrar miniaturas/vista previa das imaxes", + "Enable message search in encrypted rooms": "Activar a busca de mensaxes en salas cifradas", + "Keep recovery passphrase in memory for this session": "Manter a frase de paso de recuperación en memoria para esta sesión", + "How fast should messages be downloaded.": "Velocidade á que deberían descargarse as mensaxes.", + "Manually verify all remote sessions": "Verificar manualmente todas as sesións remotas", + "IRC display name width": "Ancho do nome mostrado de IRC", + "Messages containing my username": "Mensaxes que conteñen o meu nome de usuaria", + "Messages containing @room": "Mensaxes que conteñen @room", + "Encrypted messages in one-to-one chats": "Mensaxes cifradas en conversas 1:1", + "Encrypted messages in group chats": "Mensaxes cifradas en convesas en grupo", + "When rooms are upgraded": "Cando se actualizan as salas", + "My Ban List": "Listaxe de bloqueo", + "This is your list of users/servers you have blocked - don't leave the room!": "Esta é a listaxe de usuarias/servidores que ti bloqueaches - non deixes a sala!", + "The other party cancelled the verification.": "A outra parte cancelou a verificación.", + "Verified!": "Verificada!", + "You've successfully verified this user.": "Verificaches esta usuaria.", + "Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "As mensaxes seguras con esta usuaria están cifradas extremo-a-extremo e non son lexibles por terceiras.", + "Got It": "Vale", + "Verify this session by completing one of the following:": "Verifica esta sesión completando un dos seguintes:", + "Scan this unique code": "Escanea este código único", + "or": "ou", + "Compare unique emoji": "Compara os emoji", + "Compare a unique set of emoji if you don't have a camera on either device": "Compara o conxunto único de emoticonas se non tes cámara no outro dispositivo", + "Start": "Comezar", + "Confirm the emoji below are displayed on both sessions, in the same order:": "Confirma que as emoticonas se mostran nas dúas sesións, na mesma orde:", + "Verify this user by confirming the following emoji appear on their screen.": "Verifica a usuaria confirmando que as emoticonas aparecen na súa pantalla.", + "Verify this session by confirming the following number appears on its screen.": "Verifica esta sesión confirmando que o seguinte número aparece na súa pantalla.", + "Verify this user by confirming the following number appears on their screen.": "Verifica esta usuaria confirmando que o seguinte número aparece na súa pantalla.", + "Unable to find a supported verification method.": "Non se atopa un método de verificación válido.", + "Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Agardando pola outra sesión, %(deviceName)s %(deviceId)s, para verificar…", + "Waiting for your other session to verify…": "Agardando pola túa outra sesión para verificar…", + "Waiting for %(displayName)s to verify…": "Agardando por %(displayName)s para verificar…", + "Cancelling…": "Cancelando…", + "They match": "Concordan", + "They don't match": "Non concordan", + "To be secure, do this in person or use a trusted way to communicate.": "Para estar seguro, fai esto en persoa ou utiliza un xeito seguro para comunicarte.", + "Dog": "Can", + "Cat": "Gato", + "Lion": "León", + "Horse": "Cabalo", + "Unicorn": "Unicorno", + "Pig": "Porco", + "Elephant": "Elefante", + "Rabbit": "Coello", + "Panda": "Panda", + "Rooster": "Galo", + "Penguin": "Pingüino", + "Turtle": "Tartaruga", + "Fish": "Peixe", + "Octopus": "Polbo", + "Butterfly": "Bolboreta", + "Flower": "Flor", + "Tree": "Árbore", + "Cactus": "Cactus", + "Mushroom": "Cogomelo", + "Globe": "Globo", + "Moon": "Lúa", + "Cloud": "Nube", + "Fire": "Lume", + "Banana": "Plátano", + "Apple": "Mazá", + "Strawberry": "Amorodo", + "Corn": "Millo", + "Pizza": "Pizza", + "Cake": "Biscoito", + "Heart": "Corazón", + "Smiley": "Sorriso", + "Robot": "Robot", + "Hat": "Sombreiro", + "Glasses": "Gafas", + "Spanner": "Ferramenta", + "Santa": "Nöel", + "Thumbs up": "Oká", + "Umbrella": "Paraugas", + "Hourglass": "Reloxo area", + "Clock": "Reloxo", + "Gift": "Agasallo", + "Light bulb": "Lámpada", + "Book": "Libro", + "Pencil": "Lápis", + "Paperclip": "Prendedor", + "Scissors": "Tesoiras", + "Lock": "Cadeado", + "Key": "Chave", + "Hammer": "Martelo", + "Telephone": "Teléfono", + "Flag": "Bandeira", + "Train": "Tren", + "Bicycle": "Bicicleta", + "Aeroplane": "Aeroplano", + "Rocket": "Foguete", + "Trophy": "Trofeo", + "Ball": "Bola", + "Guitar": "Guitarra", + "Trumpet": "Trompeta", + "Bell": "Campá", + "Anchor": "Áncora", + "Headphones": "Auriculares", + "Folder": "Cartafol", + "Pin": "Pin", + "From %(deviceName)s (%(deviceId)s)": "Desde %(deviceName)s (%(deviceId)s)", + "Decline (%(counter)s)": "Rexeitar (%(counter)s)", + "Accept to continue:": "Acepta para continuar:", + "Upload": "Subir", + "This bridge was provisioned by .": "Esta ponte está proporcionada por .", + "This bridge is managed by .": "Esta ponte está xestionada por .", + "Workspace: %(networkName)s": "Espazo de traballo: %(networkName)s", + "Channel: %(channelName)s": "Canal: %(channelName)s", + "Show less": "Mostrar menos", + "Show more": "Mostrar máis", + "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.": "Ao cambiar o contrasinal vas restablecer todas as chaves de cifrado extremo-a-extremo en tódalas sesións, facendo que o historial de conversa cifrado non sexa lexible, a menos que primeiro exportes todas as chaves das salas e as importes posteriormente. No futuro melloraremos o procedemento.", + "Your homeserver does not support cross-signing.": "O teu servidor non soporta a sinatura cruzada.", + "Cross-signing and secret storage are enabled.": "A sinatura cruzada e o almacenaxe segredo está activados.", + "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "A túa conta ten unha identidade de sinatura cruzada no almacenaxe segredo, pero aínda non confiaches nela nesta sesión.", + "Cross-signing and secret storage are not yet set up.": "A sinatura cruzada e almacenaxe segredo aínda non se configuraron.", + "Reset cross-signing and secret storage": "Restablecer sinatura cruzada e almacenaxe segredo", + "Bootstrap cross-signing and secret storage": "Configurar sinatura cruzada e almacenaxe segredo", + "well formed": "ben formado", + "unexpected type": "tipo non agardado", + "Cross-signing public keys:": "Chaves públicas da sinatura cruzada:", + "in memory": "en memoria", + "not found": "non atopado", + "Cross-signing private keys:": "Chaves privadas da sinatura cruzada:", + "in secret storage": "no almacenaxe segredo", + "Self signing private key:": "Auto asinado da chave privada:", + "cached locally": "na caché local", + "not found locally": "non se atopa localmente", + "User signing private key:": "Chave privada de sinatura da usuaria:", + "Session backup key:": "Chave de apoio da sesión:", + "Secret storage public key:": "Chave pública da almacenaxe segreda:", + "in account data": "nos datos da conta", + "Homeserver feature support:": "Soporte de funcións do servidor:", + "exists": "existe", + "Your homeserver does not support session management.": "O teu servidor non soporta a xestión da sesión.", + "Unable to load session list": "Non se puido cargar a lista de sesións", + "Confirm deleting these sessions": "Confirma o borrado destas sesións", + "Click the button below to confirm deleting these sessions.|other": "Preme no botón inferior para confirmar o borrado das sesións.", + "Click the button below to confirm deleting these sessions.|one": "Preme no botón inferior para confirmar o borrado da sesión.", + "Delete sessions|other": "Borrar sesións", + "Delete sessions|one": "Borrar sesión", + "Delete %(count)s sessions|other": "Borrar %(count)s sesións", + "Delete %(count)s sessions|one": "Borrar %(count)s sesión", + "ID": "ID", + "Public Name": "Nome público", + "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Verificar individualmente cada sesión utilizada pola usuaria para marcala como confiable, non confiando en dispositivos con sinatura cruzada.", + "Securely cache encrypted messages locally for them to appear in search results, using ": "Gardar de xeito seguro na caché mensaxes cifradas para que aparezan nos resultados de busca, usando ", + " to store messages from ": " para gardar mensaxes de ", + "rooms.": "salas.", + "Manage": "Xestionar", + "Securely cache encrypted messages locally for them to appear in search results.": "Gardar de xeito seguro mensaxes cifradas na caché local para que aparezan nos resultados de buscas.", + "Enable": "Activar", + "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Falta un compoñente de Riot requerido para almacenar localmente mensaxes cifradas na caché. Se queres experimentar con esta función, compila unha versión personalizada de Riot Desktop cos compoñentes de busca engadidos.", + "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot non pode gardar de xeito seguro localmente as mensaxes cifradas se se executa nun navegador. Usa Riot Desktop para que as mensaxes cifradas aparezan nas buscas.", + "Connecting to integration manager...": "Conectando co xestor de integración...", + "Cannot connect to integration manager": "Non se puido conectar co xestor de intregración", + "The integration manager is offline or it cannot reach your homeserver.": "O xestor de integración non está en liña ou non é accesible desde o teu servidor.", + "Delete Backup": "Borrar copia de apoio", + "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Estás seguro? Perderás as mensaxes cifradas se non tes unha copia de apoio das chaves de cifrado.", + "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "As mensaxes cifradas están seguras con cifrado de extremo-a-extremo. Só ti e o correpondente(s) tedes as chaves para ler as mensaxes.", + "Unable to load key backup status": "Non se puido cargar o estado das chaves de apoio", + "Restore from Backup": "Restaurar desde copia de apoio", + "This session is backing up your keys. ": "Esta sesión está gardando as túas 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 sesión non está facendo copia das chaves, pero tes unha copia de apoio existente que podes restablecer e engadir para seguir adiante.", + "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Conecta esta sesión ao gardado das chaves antes de desconectarte para evitar perder calquera chave que só puidese estar nesta sesión.", + "Connect this session to Key Backup": "Conecta esta sesión a Copia de Apoio de chaves", + "not stored": "non gardado", + "Backing up %(sessionsRemaining)s keys...": "Copiando %(sessionsRemaining)s chaves...", + "All keys backed up": "Copiaronse todas as chaves", + "Backup has a valid signature from this user": "A copia ten unha sinatura válida desta usuaria", + "Backup has a invalid signature from this user": "A copia ten una sinatura non válida desta usuaria", + "Backup has a signature from unknown user with ID %(deviceId)s": "A copia ten unha sinatura dunha usuaria descoñecida con ID %(deviceId)s", + "Backup has a signature from unknown session with ID %(deviceId)s": "A copia ten unha sinatura dunha sesión descoñecida con ID %(deviceId)s", + "Backup has a valid signature from this session": "A copia ten unha sinatura válida desde esta sesión", + "Backup has an invalid signature from this session": "A copia ten unha sinatura non válida desde esta sesión", + "Backup has a valid signature from verified session ": "A copia ten unha sinatura válida desde a sesión verificada en ", + "Backup has a valid signature from unverified session ": "A copia ten unha sinatura válida desde a sesión non verificada en ", + "Backup has an invalid signature from verified session ": "A copia ten unha sinatura non válida desde a sesión verificada en ", + "Backup has an invalid signature from unverified session ": "A copia ten unha sinatura non válida desde a sesión non verificada en ", + "Backup is not signed by any of your sessions": "A copia non está asinada por ningunha das túas sesións", + "This backup is trusted because it has been restored on this session": "Esta copia é de confianza porque foi restaurada nesta sesión", + "Backup version: ": "Versión da copia: ", + "Algorithm: ": "Algoritmo: ", + "Backup key stored: ": "Chave de apoio gardada: ", + "Your keys are not being backed up from this session.": "As túas chaves non están a ser copiadas desde esta sesión.", + "Back up your keys before signing out to avoid losing them.": "Fai unha copia de apoio das chaves antes de desconectarte para evitar perdelas.", + "Start using Key Backup": "Fai unha Copia de apoio das chaves", + "Clear notifications": "Eliminar notificacións", + "Add an email address to configure email notifications": "Engade un enderezo de email para configurar as notificacións por email", + "Enable desktop notifications for this session": "Activa as notificacións de escritorio para esta sesión", + "Enable audible notifications for this session": "Activa as notificacións por son para esta sesión", + "Upgrade to your own domain": "Mellora e usa un dominio propio", + "Display Name": "Nome mostrado", + "Profile picture": "Imaxe de perfil", + "Identity Server URL must be HTTPS": "O URL do servidor de identidade debe comezar HTTPS", + "Not a valid Identity Server (status code %(code)s)": "Servidor de Identidade non válido (código de estado %(code)s)", + "Could not connect to Identity Server": "Non hai conexión co Servidor de Identidade", + "Checking server": "Comprobando servidor", + "Change identity server": "Cambiar de servidor de identidade", + "Disconnect from the identity server and connect to instead?": "Desconectar do servidor de identidade e conectar con ?", + "Terms of service not accepted or the identity server is invalid.": "Non se aceptaron os Termos do servizo ou o servidor de identidade non é válido.", + "The identity server you have chosen does not have any terms of service.": "O servidor de identidade escollido non ten establecidos termos do servizo.", + "Disconnect identity server": "Desconectar servidor de identidade", + "Disconnect from the identity server ?": "Desconectar 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.": "Deberías eliminar os datos personais do servidor de identidade antes de desconectar. Desgraciadamente, o servidor non está en liña e no se pode acceder.", + "You should:": "Deberías:", + "check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "comprobar os engadidos do navegador por algún está bloqueando o servidor de identidade (como Privacy Badger)", + "contact the administrators of identity server ": "contactar coa administración do servidor de identidade ", + "wait and try again later": "agardar e probar máis tarde", + "Disconnect anyway": "Desconectar igualmente", + "You are still sharing your personal data on the identity server .": "Aínda estás compartindo datos personais no servidor de identidade .", + "We recommend that you remove your email addresses and phone numbers from the identity server before disconnecting.": "Recomendámosche que elimines os teus enderezos de email e números de teléfono do servidor de identidade antes de desconectar del.", + "Go back": "Atrás", + "Identity Server (%(server)s)": "Servidor de Identidade (%(server)s)", + "You are currently using to discover and be discoverable by existing contacts you know. You can change your identity server below.": "Neste intre usas para atopar e ser atopado polos contactos existentes que coñeces. Aquí abaixo podes cambiar de servidor de identidade.", + "If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "Se non queres usar para atopar e ser atopado polos contactos existentes que coñeces, escribe embaixo outro servidor de identidade.", + "Identity Server": "Servidor de Identidade", + "You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Non estás a usar un servidor de identidade. Para atopar e ser atopado polos contactos existentes que coñeces, engade un embaixo.", + "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.": "Ao desconectar do teu servidor de identidade non te poderán atopar as outras usuarias e non poderás convidar a outras polo seu email ou teléfono.", + "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.": "Usar un servidor de identidade é optativo. Se escolles non usar un, non poderás ser atopado por outras usuarias e non poderás convidar a outras polo seu email ou teléfono.", + "Do not use an identity server": "Non usar un servidor de identidade", + "Enter a new identity server": "Escribe o novo servidor de identidade", + "Change": "Cambiar", + "Use an Integration Manager (%(serverName)s) to manage bots, widgets, and sticker packs.": "Usa un Xestor de Integración (%(serverName)s) para xestionar bots, widgets e paquetes de pegatinas.", + "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Usa un Xestor de Integracións para xestionar bots, widgets e paquetes de pegatinas.", + "Manage integrations": "Xestionar integracións", + "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Os xestores de integracións reciben datos de configuración, e poden modificar os widgets, enviar convites das salas, e establecer roles no teu nome.", + "New version available. Update now.": "Nova versión dispoñible. Actualiza.", + "Size must be a number": "O tamaño ten que ser un número", + "Custom font size can only be between %(min)s pt and %(max)s pt": "O tamaño da fonte só pode estar entre %(min)s pt e %(max)s pt", + "Use between %(min)s pt and %(max)s pt": "Usa entre %(min)s pt e %(max)s pt", + "Appearance": "Aparencia", + "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Cambiouse o contrasinal. Non recibirás notificacións push noutras sesións ata que desconectes e voltes a conectar nelas", + "Email addresses": "Enderezos de email", + "Phone numbers": "Número de teléfono", + "Set a new account password...": "Establecer novo contrasinal da conta...", + "Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Acepta os Termos do Servizo do servidor (%(serverName)s) para permitir que te atopen polo enderezo de email ou número de teléfono.", + "Account management": "Xestión da conta", + "Deactivating your account is a permanent action - be careful!": "A desactivación da conta será permanente - ten coidado!", + "Credits": "Créditos", + "Chat with Riot Bot": "Chat co Bot Riot", + "Bug reporting": "Informar de fallos", + "Clear cache and reload": "Baleirar caché e recargar", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Para informar dun asunto relacionado coa seguridade de Matrix, le a Política de Revelación de Privacidade de Matrix.org.", + "FAQ": "PMF", + "Keyboard Shortcuts": "Atallos de teclado", + "Versions": "Versións", + "Customise your experience with experimental labs features. Learn more.": "Personaliza a túa experiencia con características experimentais. Coñecer máis.", + "Ignored/Blocked": "Ignorado/Bloqueado", + "Error adding ignored user/server": "Fallo ao engadir a ignorado usuaria/servidor", + "Something went wrong. Please try again or view your console for hints.": "Algo fallou. Inténtao outra vez o mira na consola para ter algunha pista.", + "Error subscribing to list": "Fallo ao subscribirse a lista", + "Please verify the room ID or address and try again.": "Comproba o ID da sala ou enderezo e proba outra vez.", + "Error removing ignored user/server": "Fallo ao eliminar a usuaria/servidor de ignorados", + "Error unsubscribing from list": "Fallo ao retirar a susbscrición a lista", + "Please try again or view your console for hints.": "Inténtao outra vez ou mira na consola para ter algunha pista.", + "None": "Nada", + "Ban list rules - %(roomName)s": "Regras de bloqueo - %(roomName)s", + "Server rules": "Regras do servidor", + "User rules": "Regras da usuaria", + "You have not ignored anyone.": "Non ignoraches a ninguén.", + "You are currently ignoring:": "Estás a ignorar a:", + "You are not subscribed to any lists": "Non estás subscrita a ningunha lista", + "Unsubscribe": "Baixa na subscrición", + "View rules": "Ver regras", + "You are currently subscribed to:": "Estas subscrito a:", + "Ignored users": "Usuarias ignoradas", + "⚠ These settings are meant for advanced users.": "⚠ Estos axustes van dirixidos a usuarias avanzadas.", + "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Engade aquí usuarias e servidores que desexas ignorar. Usa asterisco que Riot usará como comodín. Exemplo, @bot* ignorará todas as usuarias de calquera servidor que teñan 'bot' no nome.", + "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.": "Ignorar a persoas faise a través de listaxes de bloqueo que conteñen regras. Subscribíndote a unha listaxe de bloqueo fará que esas usuarias/servidores sexan inaccesibles para ti.", + "Personal ban list": "Lista personal de bloqueo", + "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.": "A túa listaxe personal de bloqueo acolle as usuarias/servidores que personalmente non desexas ver. Tras ignorar a túa primeira usuaria/servidor, unha nova sala chamada 'Listaxe de bloqueos' aparecerá na listaxe de salas - non saias desta sala para que o bloqueo siga surtindo efecto.", + "Server or user ID to ignore": "ID de usuaria ou servidor a ignorar", + "eg: @bot:* or example.org": "ex: @bot:* ou exemplo.org", + "Subscribed lists": "Listaxes subscritas", + "If this isn't what you want, please use a different tool to ignore users.": "Se esto non é o que queres, usa unha ferramenta diferente para ignorar usuarias.", + "Room ID or address of ban list": "ID da sala ou enderezo da listaxe de bloqueo", + "Subscribe": "Subscribir", + "Always show the window menu bar": "Mostrar sempre a barra de menú da ventá", + "Show tray icon and minimize window to it on close": "Mostrar icona na bandexa do sistema e minizar nela ao pechar", + "Preferences": "Preferencias", + "Room list": "Listaxe de Salas", + "Composer": "Editor", + "Timeline": "Cronoloxía", + "Autocomplete delay (ms)": "Retraso no autocompletado (ms)", + "Read Marker lifetime (ms)": "Duración do marcador de lectura (ms)", + "Read Marker off-screen lifetime (ms)": "Duración do marcador de lectura fóra de pantall (ms)", + "Session ID:": "ID da sesión:", + "Session key:": "Chave da sesión:", + "Bulk options": "Opcións agrupadas", + "Accept all %(invitedRooms)s invites": "Aceptar os %(invitedRooms)s convites", + "Key backup": "Copia da Chave", + "Message search": "Buscar mensaxe", + "Cross-signing": "Sinatura cruzada", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "A administración do servidor desactivou por omisión o cifrado extremo-a-extremo en salas privadas e Mensaxes Directas.", + "A session's public name is visible to people you communicate with": "Un nome público de sesión é visible para a xente coa que te comunicas", + "Missing media permissions, click the button below to request.": "Falta permiso acceso multimedia, preme o botón para solicitalo.", + "Request media permissions": "Solicitar permiso a multimedia", + "Voice & Video": "Voz e Vídeo", + "Upgrade this room to the recommended room version": "Actualiza esta sala á versión recomendada", + "this room": "esta sala", + "View older messages in %(roomName)s.": "Ver mensaxes antigas en %(roomName)s.", + "Room information": "Información da sala", + "Internal room ID:": "ID interno da sala:", + "Room version": "Versión da sala", + "Room version:": "Versión da sala:", + "Developer options": "Opcións desenvolvemento", + "Open Devtools": "Open Devtools", + "This room is bridging messages to the following platforms. Learn more.": "Esta sala está enviando mensaxes ás seguintes plataformas. Coñece máis." } From d029696049bca0fc8a490ababc2e4d353f1774ac Mon Sep 17 00:00:00 2001 From: notramo Date: Sat, 6 Jun 2020 10:02:11 +0000 Subject: [PATCH 0072/1504] Translated using Weblate (Hungarian) Currently translated at 99.9% (2256 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-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 81526c2c69..896d9e8b24 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2415,7 +2415,7 @@ "Waiting for your other session to verify…": "A másik munkameneted ellenőrzésére várunk…", "You've successfully verified your device!": "Sikeresen ellenőrizted az eszközödet!", "Message deleted": "Üzenet törölve", - "Message deleted by %(name)s": "Üzenetet törölte: %(name)s", + "Message deleted by %(name)s": "%(name)s törölte 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.", "Confirm to continue": "Erősítsd meg a továbblépéshez", From 43be2430338d39d5bf0e0767a3ea19c8373412bd Mon Sep 17 00:00:00 2001 From: Imre Kristoffer Eilertsen Date: Sun, 7 Jun 2020 18:23:20 +0000 Subject: [PATCH 0073/1504] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?= =?UTF-8?q?gian=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 56.8% (1283 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nb_NO/ --- src/i18n/strings/nb_NO.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/nb_NO.json b/src/i18n/strings/nb_NO.json index 8554e3d86b..c26cf7abeb 100644 --- a/src/i18n/strings/nb_NO.json +++ b/src/i18n/strings/nb_NO.json @@ -1344,5 +1344,10 @@ "Repeat your recovery passphrase...": "Gjenta gjenopprettingspassfrasen din …", "Other users may not trust it": "Andre brukere kan kanskje mistro den", " reacted with %(content)s": " reagerte med %(content)s", - "reacted with %(shortName)s": " reagerte med %(shortName)s" + "reacted with %(shortName)s": " reagerte med %(shortName)s", + "%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s kan ikke forhåndsvises. Vil du bli med i den?", + "Messages in this room are end-to-end encrypted.": "Meldinger i dette rommet er start-til-slutt-kryptert.", + "Messages in this room are not end-to-end encrypted.": "Meldinger i dette rommet er ikke start-til-slutt-kryptert.", + "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Meldinger i dette rommet er start-til-slutt-kryptert. Lær mer og verifiser denne brukeren i brukerprofilen deres.", + "Use a different passphrase?": "Vil du bruke en annen passfrase?" } From 8dfed9e597452664449d8c3243fffafa680afaa3 Mon Sep 17 00:00:00 2001 From: Nils Haugen Date: Sun, 7 Jun 2020 10:33:15 +0000 Subject: [PATCH 0074/1504] Translated using Weblate (Norwegian Nynorsk) Currently translated at 56.6% (1278 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nn/ --- src/i18n/strings/nn.json | 105 ++++++++++++++++++++++++--------------- 1 file changed, 66 insertions(+), 39 deletions(-) diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json index 16d2fd276d..52b2c2e83d 100644 --- a/src/i18n/strings/nn.json +++ b/src/i18n/strings/nn.json @@ -13,7 +13,7 @@ "Answer": "Svar", "You are already in a call.": "Du er allereie i ei samtale.", "VoIP is unsupported": "VoIP er ikkje støtta", - "You cannot place VoIP calls in this browser.": "Du kan ikkje utføre med anrop med VoIP i denne nettlesaren.", + "You cannot place VoIP calls in this browser.": "Du kan ikkje utføra samtalar med VoIP i denne nettlesaren.", "You cannot place a call with yourself.": "Du kan ikkje samtala med deg sjølv.", "Could not connect to the integration server": "Kunne ikkje kopla til integreringstenaren", "Call in Progress": "Ei Samtale er i Gang", @@ -167,7 +167,7 @@ "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s-widget lagt til av %(senderName)s", "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget fjerna av %(senderName)s", "Failure to create room": "Klarte ikkje å laga rommet", - "Server may be unavailable, overloaded, or you hit a bug.": "Serveren er kanskje utilgjengeleg, overlasta elles så traff du ein bug.", + "Server may be unavailable, overloaded, or you hit a bug.": "Tenaren er kanskje utilgjengeleg, overlasta elles så traff du ein bug.", "Send anyway": "Send likevel", "Send": "Send", "Unnamed Room": "Rom utan namn", @@ -305,7 +305,7 @@ "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (tilgangsnivå %(powerLevelNumber)s)", "Attachment": "Vedlegg", "Hangup": "Legg på", - "Voice call": "Taleanrop", + "Voice call": "Talesamtale", "Video call": "Videosamtale", "Upload file": "Last opp fil", "Send an encrypted reply…": "Send eit kryptert svar…", @@ -762,7 +762,7 @@ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Send alle på nytt eller avbryt alle. Du kan og markere enkelte meldingar for å sende på nytt eller avbryte.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Send melding på nytt eller avbryt.", "Connectivity to the server has been lost.": "Tilkoplinga til tenaren vart tapt.", - "Sent messages will be stored until your connection has returned.": "Sendte meldingar vil blir lagra lokalt fram til nettverket er oppe igjen.", + "Sent messages will be stored until your connection has returned.": "Sende meldingar vil lagrast lokalt fram til nettverket er oppe att.", "Active call": "Pågåande samtale", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Det er ingen andre her! Vil du invitera andre eller skru av varselet om det tomme rommet??", "You seem to be uploading files, are you sure you want to quit?": "Det ser ut til at du lastar opp filer, er du sikker på at du vil avslutte?", @@ -825,8 +825,8 @@ "Incorrect username and/or password.": "Feil brukarnamn og/eller passord.", "Please note you are logging into the %(hs)s server, not matrix.org.": "Merk deg at du loggar inn på %(hs)s-tenaren, ikkje matrix.org.", "The phone number entered looks invalid": "Det innskrivne telefonnummeret virkar å vere ugyldig", - "Error: Problem communicating with the given homeserver.": "Feil: Det gjekk ikkje an å kommunisere med den spesifiserte heimeserveren.", - "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Kan ikkje koble til heimeserveren via HTTP fordi URL-adressa i nettlesaren er HTTPS. Bruk HTTPS, eller aktiver usikre skript.", + "Error: Problem communicating with the given homeserver.": "Feil: Det gjekk ikkje an å kommunisera med den spesifiserte heimetenaren.", + "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Kan ikkje kobla til heimetenaren via HTTP fordi URL-adressa i nettlesaren er HTTPS. Bruk HTTPS, eller aktiver usikre skript.", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Kan ikkje kopla til heimtenaren - ver venleg og sjekk tilkoplinga di, og sjå til at heimtenaren din sitt CCL-sertifikat er stolt på og at ein nettlesartillegg ikkje hindrar førespurnader.", "Failed to fetch avatar URL": "Klarte ikkje å henta avatar-URLen", "Set a display name:": "Set eit visningsnamn:", @@ -894,7 +894,7 @@ "Clear filter": "Tøm filter", "Profile": "Brukar", "Access Token:": "Tilgangs-token:", - "This homeserver doesn't offer any login flows which are supported by this client.": "Heimeserveren tilbyr ingen påloggingsmetodar som er støtta av denne klienten.", + "This homeserver doesn't offer any login flows which are supported by this client.": "Heimetenaren tilbyr ingen innloggingsmetodar som er støtta av denne klienten.", "Claimed Ed25519 fingerprint key": "Gjorde krav på Ed25519-fingeravtrykksnøkkel", "Export room keys": "Eksporter romnøklar", "Export": "Eksporter", @@ -915,10 +915,10 @@ "Whether or not you're logged in (we don't record your username)": "Uansett om du er innlogga eller ikkje (så lagrar vi ikkje brukarnamnet ditt)", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Fila %(fileName)s er større enn heimetenaren si grense for opplastningar", "Unable to load! Check your network connectivity and try again.": "Klarte ikkje lasta! Sjå på nettilkoplinga di og prøv igjen.", - "Your Riot is misconfigured": "Riot-klienten din er feilkonfiguert", + "Your Riot is misconfigured": "Riot-klienten din er sett opp feil", "Sign In": "Logg inn", "Explore rooms": "Utforsk romma", - "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.": "Meldingen din vart ikkje sent for denne heimeserveren har nådd grensa for maksimalt aktive brukarar pr. månad. Kontakt systemadministratoren for å kunne vidare nytte denne tenesten.", + "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.": "Meldinga di vart ikkje send, for denne heimetenaren har nådd grensa for maksimalt aktive brukarar pr. månad. Kontakt systemadministratoren for å vidare nytte denne tenesta.", "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Denne meldingen vart ikkje sendt fordi heimeserveren har nådd grensa for tilgjengelege systemressursar. Kontakt systemadministratoren for å vidare nytte denne tenesten.", "Add room": "Legg til rom", "You have %(count)s unread notifications in a prior version of this room.|other": "Du har %(count)s uleste varslingar i ein tidligare versjon av dette rommet.", @@ -928,23 +928,23 @@ "Could not load user profile": "Klarde ikkje å laste brukarprofilen", "Your Matrix account on %(serverName)s": "Din Matrix-konto på %(serverName)s", "Your Matrix account on ": "Din Matrix-konto på ", - "No identity server is configured: add one in server settings to reset your password.": "Ingen identitetsserver er konfigurert: legg til ein i innstillingane for å nullstille passordet ditt.", + "No identity server is configured: add one in server settings to reset your password.": "Ingen identitetstenar er satt opp: legg til ein i innstillingane for å nullstille passordet ditt.", "Sign in instead": "Logg inn istaden", "A verification email will be sent to your inbox to confirm setting your new password.": "For å stadfeste tilbakestilling av passordet, vil ein e-post vil bli sendt til din innboks.", "Your password has been reset.": "Passodet ditt vart nullstilt.", "Set a new password": "Sett nytt passord", - "Invalid homeserver discovery response": "Ugyldig svar frå heimeserveren (discovery response)", - "Failed to get autodiscovery configuration from server": "Kladte ikkje å hente automatisk oppsett frå server", - "Invalid base_url for m.homeserver": "Ugyldig base_url for m.homeserver", - "Homeserver URL does not appear to be a valid Matrix homeserver": "URL-adressa virkar ikkje til å vere ein gyldig Matrix-heimeserver", - "Invalid identity server discovery response": "Ugyldig svar frå identitetsserveren (discovery response)", - "Invalid base_url for m.identity_server": "Ugyldig base_url for m.identity_server", - "Identity server URL does not appear to be a valid identity server": "URL-adressa virkar ikkje til å vere ein gyldig identitetsserver", + "Invalid homeserver discovery response": "Feil svar frå heimetenaren (discovery response)", + "Failed to get autodiscovery configuration from server": "Klarde ikkje å hente automatisk oppsett frå tenaren", + "Invalid base_url for m.homeserver": "Feil base_url for m.homeserver", + "Homeserver URL does not appear to be a valid Matrix homeserver": "URL-adressa virkar ikkje til å vere ein gyldig Matrix-heimetenar", + "Invalid identity server discovery response": "Feil svar frå identitetstenaren (discovery response)", + "Invalid base_url for m.identity_server": "Feil base_url for m.identity_server", + "Identity server URL does not appear to be a valid identity server": "URL-adressa virkar ikkje til å vere ein gyldig identitetstenar", "General failure": "Generell feil", - "This homeserver does not support login using email address.": "Denne heimeserveren støttar ikkje innloggingar med e-postadresser.", + "This homeserver does not support login using email address.": "Denne heimetenaren støttar ikkje innloggingar med e-postadresser.", "Please contact your service administrator to continue using this service.": "Kontakt din systemadministrator for å vidare å bruke tenesta.", "This account has been deactivated.": "Denne kontoen har blitt deaktivert.", - "Failed to perform homeserver discovery": "Fekk ikkje til å utforske heimeserveren", + "Failed to perform homeserver discovery": "Fekk ikkje til å utforska heimetenaren", "Sign in with single sign-on": "Logg på med Single-Sign-On", "Create account": "Lag konto", "Registration has been disabled on this homeserver.": "Registrering er deaktivert på denne heimeserveren.", @@ -955,7 +955,7 @@ "You can now close this window or log in to your new account.": "Du kan lukke dette vindauget ellerlogge inn med din nye konto.", "Registration Successful": "Registrering fullført", "Create your account": "Lag din konto", - "Failed to re-authenticate due to a homeserver problem": "Fekk ikkje til å re-authentisere grunna ein feil på heimeserveren", + "Failed to re-authenticate due to a homeserver problem": "Fekk ikkje til å re-authentisere grunna ein feil på heimetenaren", "Failed to re-authenticate": "Fekk ikkje til å re-autentisere", "Enter your password to sign in and regain access to your account.": "Skriv inn ditt passord for å logge på og ta tilbake tilgang til kontoen din.", "Forgotten your password?": "Gløymt passord ?", @@ -1014,7 +1014,7 @@ "Replying With Files": "Send svar med filer", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Nett no er det ikkje mogleg å senda svar med ei fil. Vil du lasta opp denne fila utan å senda svaret?", "The file '%(fileName)s' failed to upload.": "Fila '%(fileName)s' vart ikkje lasta opp.", - "The server does not support the room version specified.": "Serveren støttar ikkje den spesifikke versjonen av rommet.", + "The server does not support the room version specified.": "Tenaren støttar ikkje den spesifikke versjonen av rommet.", "Name or Matrix ID": "Namn eller Matrix ID", "Registration Required": "Registrering er obligatorisk", "You need to register to do this. Would you like to register now?": "Du må registrera for å gjera dette. Ynskjer du å registrera no?", @@ -1062,7 +1062,7 @@ "Encryption upgrade available": "Kryptering kan oppgraderast", "Set up encryption": "Sett opp kryptering", "Unverified session": "Uverifisert sesjon", - "Identity server has no terms of service": "Identitetsserveren manglar bruksvilkår", + "Identity server has no terms of service": "Identitetstenaren manglar bruksvilkår", "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.": "Denne handlinga krev kommunikasjon mot (standard identitetsserver) for å verifisere e-post eller telefonnummer, men serveren manglar bruksvilkår.", "Only continue if you trust the owner of the server.": "Gå vidare så lenge du har tillit til eigar av serveren.", "Trust": "Tillat", @@ -1094,13 +1094,13 @@ "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s la til %(addedAddresses)s og tok vekk %(removedAddresses)s som adresser for dette rommet.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s satte standardadressa for dette rommet til %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s fjerna standardadressa for dette rommet.", - "%(senderName)s placed a voice call.": "%(senderName)s starta eit taleanrop.", - "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s starta eit taleanrop. (ikkje støtta av denne nettlesaren)", + "%(senderName)s placed a voice call.": "%(senderName)s starta ein talesamtale.", + "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s starta ein talesamtale. (ikkje støtta av denne nettlesaren)", "%(senderName)s placed a video call.": "%(senderName)s starta ein videosamtale.", "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s starta ein videosamtale. (ikkje støtta av denne nettlesaren)", "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s trekte tilbake invitasjonen for at %(targetDisplayName)s kan bli medlem i rommet.", "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Du er administrator for dette fellesskapet. Du kan ikkje melde deg inn igjen utan at du har invitasjon frå ein annan administrator.", - "Want more than a community? Get your own server": "Treng du meir enn eit fellesskap? Skaff din eigen server", + "Want more than a community? Get your own server": "Treng du meir enn eit fellesskap? Skaff din eigen tenar", "Sign In or Create Account": "Logg inn eller opprett konto", "Create Account": "Opprett konto", "Sends the given emote coloured as a rainbow": "Sendar emojien med regnbogefargar", @@ -1197,12 +1197,12 @@ "Hint: Begin your message with // to start it with a slash.": "Hint: Start meldinga med // for å starte den med skråstrek.", "Send as message": "Send som melding", "Failed to revoke invite": "Fekk ikkje til å trekke invitasjonen", - "Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "Fekk ikkje til å trekke invitasjonen. Det kan ha oppstått eit midlertidig problem på serveren, eller så har ikkje du tilstrekkelege rettigheiter for å trekke invitasjonen.", + "Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "Fekk ikkje til å ta attende invitasjonen. Det kan ha oppstått ein mellombels feil på tenaren, eller så har ikkje du tilstrekkelege rettar for å ta attende invitasjonen.", "Revoke invite": "Trekk invitasjon", "Invited by %(sender)s": "Invitert av %(sender)s", "Mark all as read": "Merk alle som lesne", "Error updating main address": "Feil under oppdatering av hovedadresse", - "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Det skjedde ein feil under oppdatering av hovedadressa for rommet. Det kan hende at dette er midlertidig, eller at det ikkje er tillate på serveren.", + "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Det skjedde ein feil under oppdatering av hovudadressa for rommet. Det kan hende at dette er ein mellombels feil, eller at det ikkje er tillate på tenaren.", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Feil under oppdatering av sekundæradresse. Det kan hende at dette er midlertidig, eller at det ikkje er tillate på serveren.", "Error creating alias": "Feil under oppretting av alias", "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Det skjedde ein feil under oppretting av dette aliaset. Det kan hende at dette er midlertidig, eller at det ikkje er tillate på serveren.", @@ -1212,12 +1212,12 @@ "Main address": "Hovudadresse", "Local address": "Lokal adresse", "Published Addresses": "Publisert adresse", - "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.": "Publiserte adresser kan bli brukt av alle uansett server for å bli med i rommet. For å publisere ei adresse, må den vere sett som ei lokal adresse fyrst.", + "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.": "Publiserte adresser kan bli brukt av alle uansett tenar for å bli med i rommet. For å publisera ei adresse, må den vere sett som ei lokal adresse fyrst.", "Other published addresses:": "Andre publiserte adresser:", "No other published addresses yet, add one below": "Ingen publiserte adresser til no, legg til ei under", - "New published address (e.g. #alias:server)": "Ny publisert adresse (t.d. #alias:server)", + "New published address (e.g. #alias:server)": "Ny publisert adresse (t.d. #alias:tenar)", "Local Addresses": "Lokale adresser", - "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Sett adresse for dette rommet, slik at brukarar kan finne rommet på din heimeserver (%(localDomain)s)", + "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Sett adresse for dette rommet, slik at brukarar kan finne rommet på din heimetenar (%(localDomain)s)", "Error updating flair": "Oppdatering av etikett gjekk gale", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Feil under oppdatering av etikett for dette rommet. Dette kan vere deaktivert på server , eller så oppstod det ein feil.", "Room Name": "Romnamn", @@ -1231,7 +1231,7 @@ "Match system theme": "Følg systemtema", "Show shortcuts to recently viewed rooms above the room list": "Vis snarvegar til sist synte rom over romkatalogen", "Show hidden events in timeline": "Vis skjulte hendelsar i historikken", - "This is your list of users/servers you have blocked - don't leave the room!": "Dette er di liste over brukarar/serverar du har blokkert - ikkje forlat rommet!", + "This is your list of users/servers you have blocked - don't leave the room!": "Dette er di liste over brukarar/tenarar du har blokkert - ikkje forlat rommet!", "Upload": "Last opp", "Show less": "Vis mindre", "Show more": "Vis meir", @@ -1270,7 +1270,7 @@ "Select the roles required to change various parts of the room": "Juster roller som er påkrevd for å endre ulike deler av rommet", "Once enabled, encryption cannot be disabled.": "Etter aktivering, kan ikkje kryptering bli deaktivert.", "Your display name": "Ditt visningsnamn", - "Can't find this server or its room list": "Klarde ikkje å finne serveren eller romkatalogen til den", + "Can't find this server or its room list": "Klarde ikkje å finna tenaren eller romkatalogen til den", "Upload completed": "Opplasting fullført", "Cancelled signature upload": "Kansellerte opplasting av signatur", "Unabled to upload": "Klarte ikkje å laste opp", @@ -1290,7 +1290,7 @@ "Enable Emoji suggestions while typing": "Aktiver Emoji-forslag under skriving", "Show a placeholder for removed messages": "Vis ein plassholdar for sletta meldingar", "Show avatar changes": "Vis avatar-endringar", - "Show read receipts sent by other users": "Vis lest-rapportar sendt av andre brukarar", + "Show read receipts sent by other users": "Vis lese-rapportar sendt av andre brukarar", "Enable big emoji in chat": "Aktiver store emolji-ar i samtalen", "Send typing notifications": "Kringkast \"skriv...\"-status til andre", "Show typing notifications": "Vis \"skriv...\"-status frå andre", @@ -1321,7 +1321,7 @@ "Jump to start/end of the composer": "Hopp til start/slutt av teksteditoren", "Navigate composer history": "Naviger historikk for teksteditor", "Use Single Sign On to continue": "Bruk Single-sign-on for å fortsette", - "Confirm adding this email address by using Single Sign On to prove your identity.": "Stadfest at du legger til denne e-postadressa, ved å bruke Single-sign-on for å bevise identiteten din.", + "Confirm adding this email address by using Single Sign On to prove your identity.": "Stadfest at du legger til denne e-postadressa, ved å bruke Single-sign-on for å stadfeste identiteten din.", "Single Sign On": "Single-sign-on", "Review Sessions": "Sjå gjennom økter", "Capitalization doesn't help very much": "Store bokstavar hjelp dessverre lite", @@ -1330,7 +1330,7 @@ "Keep secret storage passphrase in memory for this session": "Hald passfrase for hemmeleg lager i systemminnet for denne økta", "Cross-signing and secret storage are enabled.": "Krysssignering og hemmeleg lager er aktivert.", "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Kontoen din har ein kryss-signert identitet det hemmelege lageret, økta di stolar ikkje på denne enno.", - "Cross-signing and secret storage are not yet set up.": "Krysssignering og hemmeleg lager er endå ikkje konfiguert.", + "Cross-signing and secret storage are not yet set up.": "Krysssignering og hemmeleg lager er endå ikkje sett opp.", "Reset cross-signing and secret storage": "Tilbakestill krysssignering og hemmeleg lager", "Bootstrap cross-signing and secret storage": "Førebur krysssignering og hemmeleg lager", "in secret storage": "i hemmeleg lager", @@ -1338,10 +1338,10 @@ "Secret Storage key format:": "Nøkkel-format for hemmeleg lager:", "Keyboard Shortcuts": "Tastatursnarvegar", "Ignored users": "Ignorerte brukarar", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Legg til brukarar og serverar du vil ignorera her. Bruk stjerne/wildcard (*) for at markere eitkvart teikn. Til dømes, @bot* vil ignorere alle brukarar med namn 'bot' på uansett server.", + "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Legg til brukarar og tenarar du vil ignorera her. Bruk stjerne/wildcard (*) for at markere eitkvart teikn. Til dømes, @bot* vil ignorere alle brukarar med namn 'bot' på uansett tenar.", "Server or user ID to ignore": "Server eller brukar-ID for å ignorere", "If this isn't what you want, please use a different tool to ignore users.": "Om det ikkje var dette du ville, bruk eit anna verktøy til å ignorera brukarar.", - "Enter the name of a new server you want to explore.": "Skriv inn namn på ny server du ynskjer å utforske.", + "Enter the name of a new server you want to explore.": "Skriv inn namn på ny tenar du ynskjer å utforske.", "Matrix rooms": "Matrix-rom", "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.": "Om du har meir info rundt korleis problemet oppstod, som kva du prøvde å gjere på det tidspunktet, brukar-IDar m.m ,inkluder gjerne den informasjonen her.", "Topic (optional)": "Emne (valfritt)", @@ -1364,7 +1364,7 @@ "Explore": "Utforsk", "%(creator)s created and configured the room.": "%(creator)s oppretta og konfiguerte dette rommet.", "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot klarde ikkje å hente protokolllister frå heimeserveren. Det kan hende at serveren er for gammal til å støtte tredjeparts-nettverk", - "The homeserver may be unavailable or overloaded.": "Heimeserveren kan vere overlasta eller utilgjengeleg.", + "The homeserver may be unavailable or overloaded.": "Heimetenaren kan vere overlasta eller utilgjengeleg.", "Preview": "Førehandsvis", "View": "Vis", "Find a room…": "Finn eit rom…", @@ -1382,5 +1382,32 @@ "Unable to set up secret storage": "Oppsett av hemmeleg lager feila", "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Denne økta har oppdaga at gjenopprettingspassfrasen og nøkkelen for sikre meldingar vart fjerna.", "Toggle microphone mute": "Slå av/på demping av mikrofon", - "Confirm": "Stadfest" + "Confirm": "Stadfest", + "Confirm adding email": "Stadfest at du ynskjer å legga til e-postadressa", + "Click the button below to confirm adding this email address.": "Trykk på knappen under for å stadfesta at du ynskjer å legga til denne e-postadressa.", + "Confirm adding this phone number by using Single Sign On to prove your identity.": "Stadfest dette telefonnummeret for å bruka Single-sign-on for å bevisa din identitet.", + "Confirm adding phone number": "Stadfest dette telefonnummeret", + "Click the button below to confirm adding this phone number.": "Trykk på knappen nedanfor for å legge til dette telefonnummeret.", + "Room name or address": "Romnamn eller adresse", + "%(name)s is requesting verification": "%(name)s spør etter verifikasjon", + "Use your account or create a new one to continue.": "Bruk kontoen din eller opprett ein ny for å halda fram.", + "Sends a message as html, without interpreting it as markdown": "Sender melding som HTML, utan å tolka den som markdown", + "Failed to set topic": "Fekk ikkje til å setta emne", + "Joins room with given address": "Legg saman rom med spesifisert adresse", + "Unrecognised room address:": "Rom-adressa vart ikkje kjend att:", + "Command failed": "Kommandoen feila", + "Could not find user in room": "Klarde ikkje å finna brukaren i rommet", + "Please supply a widget URL or embed code": "Oppgje ein widget-URL eller innebygd kode", + "Displays information about a user": "Viser informasjon om ein brukar", + "Send a bug report with logs": "Send ein feilrapport med loggar", + "Opens chat with the given user": "Opna ein samtale med den spesifiserte brukaren", + "Sends a message to the given user": "Send ein melding til den spesifiserte brukaren", + "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s endra romnamnet frå %(oldRoomName)s til %(newRoomName)s.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s la til dei alternative adressene %(addresses)s for dette rommet.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s la til ei alternativ adresse %(addresses)s for dette rommet.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s tok vekk dei alternative adressene %(addresses)s for dette rommet.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s tok vekk den alternative adressa %(addresses)s for dette rommet.", + "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s endre den alternative adressa for dette rommet.", + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s endra hovud- og alternativ-adressene for dette rommet.", + "%(senderName)s changed the addresses for this room.": "%(senderName)s endre adressene for dette rommet." } From 760333a0ae954d37822e18bf534be0155a1c011b Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Sun, 7 Jun 2020 13:08:25 -0600 Subject: [PATCH 0075/1504] Move function to a private function --- .../algorithms/list-ordering/Algorithm.ts | 123 +++++++++--------- 1 file changed, 63 insertions(+), 60 deletions(-) diff --git a/src/stores/room-list/algorithms/list-ordering/Algorithm.ts b/src/stores/room-list/algorithms/list-ordering/Algorithm.ts index e8058a2964..c3ac8c150f 100644 --- a/src/stores/room-list/algorithms/list-ordering/Algorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/Algorithm.ts @@ -65,66 +65,8 @@ export abstract class Algorithm extends EventEmitter { } public set stickyRoom(val: Room) { - // We wrap this in a closure because we can't use async setters. - // We need async so we can wait for handleRoomUpdate() to do its thing, otherwise - // we risk duplicating rooms. - (async () => { - // It's possible to have no selected room. In that case, clear the sticky room - if (!val) { - if (this._stickyRoom) { - // Lie to the algorithm and re-add the room to the algorithm - await this.handleRoomUpdate(this._stickyRoom.room, RoomUpdateCause.NewRoom); - } - this._stickyRoom = null; - return; - } - - // When we do have a room though, we expect to be able to find it - const tag = this.roomIdsToTags[val.roomId][0]; - if (!tag) throw new Error(`${val.roomId} does not belong to a tag and cannot be sticky`); - let position = this.cachedRooms[tag].indexOf(val); - if (position < 0) throw new Error(`${val.roomId} does not appear to be known and cannot be sticky`); - - // 🐉 Here be dragons. - // Before we can go through with lying to the underlying algorithm about a room - // we need to ensure that when we do we're ready for the innevitable sticky room - // update we'll receive. To prepare for that, we first remove the sticky room and - // recalculate the state ourselves so that when the underlying algorithm calls for - // the same thing it no-ops. After we're done calling the algorithm, we'll issue - // a new update for ourselves. - const lastStickyRoom = this._stickyRoom; - console.log(`Last sticky room:`, lastStickyRoom); - this._stickyRoom = null; - this.recalculateStickyRoom(); - - // When we do have the room, re-add the old room (if needed) to the algorithm - // and remove the sticky room from the algorithm. This is so the underlying - // algorithm doesn't try and confuse itself with the sticky room concept. - if (lastStickyRoom) { - // Lie to the algorithm and re-add the room to the algorithm - await this.handleRoomUpdate(lastStickyRoom.room, RoomUpdateCause.NewRoom); - } - // Lie to the algorithm and remove the room from it's field of view - await this.handleRoomUpdate(val, RoomUpdateCause.RoomRemoved); - - // Now that we're done lying to the algorithm, we need to update our position - // marker only if the user is moving further down the same list. If they're switching - // lists, or moving upwards, the position marker will splice in just fine but if - // they went downwards in the same list we'll be off by 1 due to the shifting rooms. - if (lastStickyRoom && lastStickyRoom.tag === tag && lastStickyRoom.position <= position) { - position++; - } - - this._stickyRoom = { - room: val, - position: position, - tag: tag, - }; - this.recalculateStickyRoom(); - - // Finally, trigger an update - this.emit(LIST_UPDATED_EVENT); - })(); + // setters can't be async, so we call a private function to do the work + this.updateStickyRoom(val); } protected get hasFilters(): boolean { @@ -175,6 +117,67 @@ export abstract class Algorithm extends EventEmitter { } } + private async updateStickyRoom(val: Room) { + // Note throughout: We need async so we can wait for handleRoomUpdate() to do its thing, + // otherwise we risk duplicating rooms. + + // It's possible to have no selected room. In that case, clear the sticky room + if (!val) { + if (this._stickyRoom) { + // Lie to the algorithm and re-add the room to the algorithm + await this.handleRoomUpdate(this._stickyRoom.room, RoomUpdateCause.NewRoom); + } + this._stickyRoom = null; + return; + } + + // When we do have a room though, we expect to be able to find it + const tag = this.roomIdsToTags[val.roomId][0]; + if (!tag) throw new Error(`${val.roomId} does not belong to a tag and cannot be sticky`); + let position = this.cachedRooms[tag].indexOf(val); + if (position < 0) throw new Error(`${val.roomId} does not appear to be known and cannot be sticky`); + + // 🐉 Here be dragons. + // Before we can go through with lying to the underlying algorithm about a room + // we need to ensure that when we do we're ready for the innevitable sticky room + // update we'll receive. To prepare for that, we first remove the sticky room and + // recalculate the state ourselves so that when the underlying algorithm calls for + // the same thing it no-ops. After we're done calling the algorithm, we'll issue + // a new update for ourselves. + const lastStickyRoom = this._stickyRoom; + console.log(`Last sticky room:`, lastStickyRoom); + this._stickyRoom = null; + this.recalculateStickyRoom(); + + // When we do have the room, re-add the old room (if needed) to the algorithm + // and remove the sticky room from the algorithm. This is so the underlying + // algorithm doesn't try and confuse itself with the sticky room concept. + if (lastStickyRoom) { + // Lie to the algorithm and re-add the room to the algorithm + await this.handleRoomUpdate(lastStickyRoom.room, RoomUpdateCause.NewRoom); + } + // Lie to the algorithm and remove the room from it's field of view + await this.handleRoomUpdate(val, RoomUpdateCause.RoomRemoved); + + // Now that we're done lying to the algorithm, we need to update our position + // marker only if the user is moving further down the same list. If they're switching + // lists, or moving upwards, the position marker will splice in just fine but if + // they went downwards in the same list we'll be off by 1 due to the shifting rooms. + if (lastStickyRoom && lastStickyRoom.tag === tag && lastStickyRoom.position <= position) { + position++; + } + + this._stickyRoom = { + room: val, + position: position, + tag: tag, + }; + this.recalculateStickyRoom(); + + // Finally, trigger an update + this.emit(LIST_UPDATED_EVENT); + } + protected recalculateFilteredRooms() { if (!this.hasFilters) { return; From 8e0247afe5ed1970e653aab6ec7083fb0e09d159 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Sun, 7 Jun 2020 22:06:41 -0600 Subject: [PATCH 0076/1504] Add most of the UI for the new room list's menu button Incomplete implementation: buttons don't work, some text is missing, etc --- res/css/_components.scss | 1 + res/css/structures/_LeftPanel2.scss | 5 + res/css/structures/_UserMenuButton.scss | 157 +++++++++++++ res/img/feather-customised/archive.svg | 1 + .../feather-customised/more-horizontal.svg | 1 + res/img/feather-customised/sun.svg | 1 + res/themes/light/css/_light.scss | 1 + src/components/structures/LeftPanel2.tsx | 5 +- src/components/structures/LoggedInView.tsx | 4 +- .../structures/TopLeftMenuButton.js | 3 +- src/components/structures/UserMenuButton.tsx | 211 ++++++++++++++++++ src/dispatcher/actions.ts | 5 + src/i18n/strings/en_EN.json | 7 + 13 files changed, 397 insertions(+), 5 deletions(-) create mode 100644 res/css/structures/_UserMenuButton.scss create mode 100644 res/img/feather-customised/archive.svg create mode 100644 res/img/feather-customised/more-horizontal.svg create mode 100644 res/img/feather-customised/sun.svg create mode 100644 src/components/structures/UserMenuButton.tsx diff --git a/res/css/_components.scss b/res/css/_components.scss index 62bec5ad62..de4c1c677c 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -29,6 +29,7 @@ @import "./structures/_ToastContainer.scss"; @import "./structures/_TopLeftMenuButton.scss"; @import "./structures/_UploadBar.scss"; +@import "./structures/_UserMenuButton.scss"; @import "./structures/_ViewSource.scss"; @import "./structures/auth/_CompleteSecurity.scss"; @import "./structures/auth/_Login.scss"; diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index 822a5ac399..d335df305f 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -73,6 +73,11 @@ $roomListMinimizedWidth: 50px; font-weight: 600; font-size: $font-15px; line-height: $font-20px; + flex: 1; + } + + .mx_LeftPanel2_headerButtons { + // No special styles: the rest of the layout happens to make it work. } .mx_LeftPanel2_breadcrumbsContainer { diff --git a/res/css/structures/_UserMenuButton.scss b/res/css/structures/_UserMenuButton.scss new file mode 100644 index 0000000000..f7097311c9 --- /dev/null +++ b/res/css/structures/_UserMenuButton.scss @@ -0,0 +1,157 @@ +/* +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_UserMenuButton { + // No special styles on the button itself +} + +.mx_UserMenuButton_contextMenu { + width: 231px; + + // Put 20px of padding around the whole menu. We do this instead of a + // simple `padding: 20px` rule so the horizontal rules added by the + // optionLists is rendered correctly (full width). + >* { + padding-left: 20px; + padding-right: 20px; + + &:first-child { + padding-top: 20px; + } + + &:last-child { + padding-bottom: 20px; + } + } + + .mx_UserMenuButton_contextMenu_header { + // Create a flexbox to organize the header a bit easier + display: flex; + align-items: center; + + .mx_UserMenuButton_contextMenu_name { + // Create another flexbox of columns to handle large user IDs + display: flex; + flex-direction: column; + + // fit the container + flex: 1; + width: calc(100% - 40px); // 40px = 32px theme button + 8px margin to theme button + + * { + // Automatically grow all subelements to fit the container + flex: 1; + width: 100%; + + // Ellipsize any text overflow + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } + + .mx_UserMenuButton_contextMenu_displayName { + font-weight: bold; + font-size: $font-15px; + line-height: $font-20px; + } + + .mx_UserMenuButton_contextMenu_userId { + font-size: $font-15px; + line-height: $font-24px; + } + } + + .mx_UserMenuButton_contextMenu_themeButton { + min-width: 32px; + max-width: 32px; + width: 32px; + height: 32px; + margin-left: 8px; + border-radius: 32px; + background-color: $theme-button-bg-color; + cursor: pointer; + + // to make alignment easier, create flexbox for the image + display: flex; + align-items: center; + justify-content: center; + } + } + + .mx_UserMenuButton_contextMenu_optionList { + margin-top: 20px; + + // This is a bit of a hack when we could just use a simple border-top property, + // however we have a (kinda) good reason for doing it this way: we need opacity. + // To get the right color, we need an opacity modifier which means we have to work + // around the problem. PostCSS doesn't support the opacity() function, and if we + // use something like postcss-functions we quickly run into an issue where the + // function we would define gets passed a CSS variable for custom themes, which + // can't be converted easily even when considering https://stackoverflow.com/a/41265350/7037379 + // + // Therefore, we just hack in a line and border the thing ourselves + &::before { + border-top: 1px solid $primary-fg-color; + opacity: 0.1; + content: ''; + + // Counteract the padding problems (width: 100% ignores the 40px padding, + // unless we position it absolutely then it does the right thing). + width: 100%; + position: absolute; + left: 0; + } + + ul { + list-style: none; + margin: 0; + padding: 0; + + li { + margin: 0; + padding: 20px 0 0; + + a { + text-decoration: none; + color: $primary-fg-color; + font-size: $font-15px; + line-height: $font-24px; + + // Create a flexbox to more easily define the list items + display: flex; + align-items: center; + + img { // icons + width: 16px; + min-width: 16px; + max-width: 16px; + } + + span { // labels + padding-left: 14px; + width: 100%; + flex: 1; + + // Ellipsize any text overflow + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } + } + } + } + } +} diff --git a/res/img/feather-customised/archive.svg b/res/img/feather-customised/archive.svg new file mode 100644 index 0000000000..428882c87b --- /dev/null +++ b/res/img/feather-customised/archive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/res/img/feather-customised/more-horizontal.svg b/res/img/feather-customised/more-horizontal.svg new file mode 100644 index 0000000000..dc6a85564e --- /dev/null +++ b/res/img/feather-customised/more-horizontal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/res/img/feather-customised/sun.svg b/res/img/feather-customised/sun.svg new file mode 100644 index 0000000000..7f51b94d1c --- /dev/null +++ b/res/img/feather-customised/sun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/res/themes/light/css/_light.scss b/res/themes/light/css/_light.scss index 5aeb125774..a50c34cf03 100644 --- a/res/themes/light/css/_light.scss +++ b/res/themes/light/css/_light.scss @@ -177,6 +177,7 @@ $header-divider-color: #91A1C0; $roomtile2-preview-color: #9e9e9e; $roomtile2-badge-color: #61708b; $roomtile2-selected-bg-color: #FFF; +$theme-button-bg-color: #e3e8f0; $roomtile-name-color: #61708b; $roomtile-badge-fg-color: $accent-fg-color; diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index c66c0a6799..2fd8612ff5 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -27,6 +27,7 @@ import { Action } from "../../dispatcher/actions"; import { MatrixClientPeg } from "../../MatrixClientPeg"; import BaseAvatar from '../views/avatars/BaseAvatar'; import RoomBreadcrumbs from "../views/rooms/RoomBreadcrumbs"; +import UserMenuButton from "./UserMenuButton"; /******************************************************************* * CAUTION * @@ -49,7 +50,6 @@ export default class LeftPanel2 extends React.Component { // TODO: Properly support TagPanel // TODO: Properly support searching/filtering // TODO: Properly support breadcrumbs - // TODO: Properly support TopLeftMenu (User Settings) // TODO: a11y // TODO: actually make this useful in general (match design proposals) // TODO: Fadable support (is this still needed?) @@ -115,6 +115,9 @@ export default class LeftPanel2 extends React.Component { /> {displayName} + + +
diff --git a/src/components/structures/LoggedInView.tsx b/src/components/structures/LoggedInView.tsx index 0504e3a76a..19edf505e0 100644 --- a/src/components/structures/LoggedInView.tsx +++ b/src/components/structures/LoggedInView.tsx @@ -452,9 +452,7 @@ class LoggedInView extends React.PureComponent { // composer, so CTRL+` it is if (ctrlCmdOnly) { - dis.dispatch({ - action: 'toggle_top_left_menu', - }); + dis.fire(Action.ToggleUserMenu); handled = true; } break; diff --git a/src/components/structures/TopLeftMenuButton.js b/src/components/structures/TopLeftMenuButton.js index 234dc661f9..71e7e61406 100644 --- a/src/components/structures/TopLeftMenuButton.js +++ b/src/components/structures/TopLeftMenuButton.js @@ -24,6 +24,7 @@ import * as Avatar from '../../Avatar'; import { _t } from '../../languageHandler'; import dis from "../../dispatcher/dispatcher"; import {ContextMenu, ContextMenuButton} from "./ContextMenu"; +import {Action} from "../../dispatcher/actions"; const AVATAR_SIZE = 28; @@ -75,7 +76,7 @@ export default class TopLeftMenuButton extends React.Component { onAction = (payload) => { // For accessibility - if (payload.action === "toggle_top_left_menu") { + if (payload.action === Action.ToggleUserMenu) { if (this._buttonRef) this._buttonRef.click(); } }; diff --git a/src/components/structures/UserMenuButton.tsx b/src/components/structures/UserMenuButton.tsx new file mode 100644 index 0000000000..0968e0bdb6 --- /dev/null +++ b/src/components/structures/UserMenuButton.tsx @@ -0,0 +1,211 @@ +/* +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 * as React from "react"; +import {User} from "matrix-js-sdk/src/models/user"; +import { MatrixClientPeg } from "../../MatrixClientPeg"; +import defaultDispatcher from "../../dispatcher/dispatcher"; +import { ActionPayload } from "../../dispatcher/payloads"; +import { Action } from "../../dispatcher/actions"; +import { createRef } from "react"; +import { _t } from "../../languageHandler"; +import {ContextMenu, ContextMenuButton} from "./ContextMenu"; + +interface IProps { +} + +interface IState { + user: User; + menuDisplayed: boolean; +} + +export default class UserMenuButton extends React.Component { + private dispatcherRef: string; + private buttonRef: React.RefObject = createRef(); + + constructor(props: IProps) { + super(props); + + this.state = { + menuDisplayed: false, + user: MatrixClientPeg.get().getUser(MatrixClientPeg.get().getUserId()), + }; + } + + private get displayName(): string { + if (MatrixClientPeg.get().isGuest()) { + return _t("Guest"); + } else if (this.state.user) { + return this.state.user.displayName; + } else { + return MatrixClientPeg.get().getUserId(); + } + } + + public componentDidMount() { + this.dispatcherRef = defaultDispatcher.register(this.onAction); + } + + private onAction = (ev: ActionPayload) => { + if (ev.action !== Action.ToggleUserMenu) return; // not interested + + // For accessibility + if (this.buttonRef.current) this.buttonRef.current.click(); + }; + + private onOpenMenuClick = (ev: InputEvent) => { + ev.preventDefault(); + ev.stopPropagation(); + this.setState({menuDisplayed: true}); + }; + + private onCloseMenu = () => { + this.setState({menuDisplayed: false}); + }; + + private onSwitchThemeClick = () => { + console.log("TODO: Switch theme"); + }; + + private onSettingsOpen = (ev: React.MouseEvent, tabRef: string) => { + ev.preventDefault(); + ev.stopPropagation(); + + console.log("TODO: Open settings", tabRef); + }; + + private onShowArchived = (ev: React.MouseEvent) => { + ev.preventDefault(); + ev.stopPropagation(); + + console.log("TODO: Show archived rooms"); + }; + + private onProvideFeedback = (ev: React.MouseEvent) => { + ev.preventDefault(); + ev.stopPropagation(); + + console.log("TODO: Show feedback"); + }; + + private onSignOutClick = (ev: React.MouseEvent) => { + ev.preventDefault(); + ev.stopPropagation(); + + console.log("TODO: Sign out"); + }; + + public render() { + let contextMenu; + if (this.state.menuDisplayed) { + const elementRect = this.buttonRef.current.getBoundingClientRect(); + contextMenu = ( + + + + ); + } + + return ( + + + ... + + {contextMenu} + + ) + } +} diff --git a/src/dispatcher/actions.ts b/src/dispatcher/actions.ts index 71493d6e44..60ef61a6e9 100644 --- a/src/dispatcher/actions.ts +++ b/src/dispatcher/actions.ts @@ -58,4 +58,9 @@ export enum Action { * Focuses the user's cursor to the composer. No additional payload information required. */ FocusComposer = "focus_composer", + + /** + * Opens the user menu (previously known as the top left menu). No additional payload information required. + */ + ToggleUserMenu = "toggle_user_menu", } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index cf6dc2431a..8575b3a258 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2042,6 +2042,13 @@ "Uploading %(filename)s and %(count)s others|other": "Uploading %(filename)s and %(count)s others", "Uploading %(filename)s and %(count)s others|zero": "Uploading %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Uploading %(filename)s and %(count)s other", + "Switch to dark mode": "Switch to dark mode", + "Switch theme": "Switch theme", + "Security & privacy": "Security & privacy", + "All settings": "All settings", + "Archived rooms": "Archived rooms", + "Feedback": "Feedback", + "Account settings": "Account settings", "Could not load user profile": "Could not load user profile", "Verify this login": "Verify this login", "Session verified": "Session verified", From 8b6b117fbfe95f3f896972d30ca9fa08a410807a Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Sun, 7 Jun 2020 22:15:54 -0600 Subject: [PATCH 0077/1504] Appease the linter --- res/css/structures/_UserMenuButton.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/css/structures/_UserMenuButton.scss b/res/css/structures/_UserMenuButton.scss index f7097311c9..aca5f4253a 100644 --- a/res/css/structures/_UserMenuButton.scss +++ b/res/css/structures/_UserMenuButton.scss @@ -24,7 +24,7 @@ limitations under the License. // Put 20px of padding around the whole menu. We do this instead of a // simple `padding: 20px` rule so the horizontal rules added by the // optionLists is rendered correctly (full width). - >* { + > * { padding-left: 20px; padding-right: 20px; From f05a1e532b5652d0fe2236b6a2794b889c43149d Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Sun, 7 Jun 2020 22:17:02 -0600 Subject: [PATCH 0078/1504] Point buttons at the right functions --- src/components/structures/UserMenuButton.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/structures/UserMenuButton.tsx b/src/components/structures/UserMenuButton.tsx index 0968e0bdb6..abf4689aa1 100644 --- a/src/components/structures/UserMenuButton.tsx +++ b/src/components/structures/UserMenuButton.tsx @@ -171,7 +171,7 @@ export default class UserMenuButton extends React.Component {
  • - + {_t("Feedback")} @@ -181,7 +181,7 @@ export default class UserMenuButton extends React.Component {
    • - this.onSettingsOpen(e, 'notifications')}> + {_t("Sign out")} From 1315ed503b165c521a794218b5cf4eb6ad237098 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 5 Jun 2020 16:59:24 +0100 Subject: [PATCH 0079/1504] Upgrade deps --- yarn.lock | 1497 +++++++++++++++++++++++++++-------------------------- 1 file changed, 752 insertions(+), 745 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7e444a0e0f..333c5ccf20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,9 +3,9 @@ "@babel/cli@^7.7.5": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.4.tgz#505fb053721a98777b2b175323ea4f090b7d3c1c" - integrity sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.1.tgz#b6e5cd43a17b8f639442ab027976408ebe6d79a0" + integrity sha512-cVB+dXeGhMOqViIaZs3A9OUAe4pKw4SBNdMw6yHJMYR7s4TB+Cei7ThquV/84O19PdIFWuwe03vxxES0BHUm5g== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -18,35 +18,35 @@ optionalDependencies: chokidar "^2.1.8" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.1", "@babel/code-frame@^7.5.5": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" + integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== dependencies: - "@babel/highlight" "^7.8.3" + "@babel/highlight" "^7.10.1" -"@babel/compat-data@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.6.tgz#3f604c40e420131affe6f2c8052e9a275ae2049b" - integrity sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g== +"@babel/compat-data@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db" + integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw== dependencies: - browserslist "^4.11.1" + browserslist "^4.12.0" invariant "^2.2.4" semver "^5.5.0" "@babel/core@>=7.2.2", "@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" - integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg== + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz#bd6786046668a925ac2bd2fd95b579b92a23b36a" + integrity sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ== dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.6" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.6" - "@babel/parser" "^7.9.6" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.6" - "@babel/types" "^7.9.6" + "@babel/code-frame" "^7.10.1" + "@babel/generator" "^7.10.2" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helpers" "^7.10.1" + "@babel/parser" "^7.10.2" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.2" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -56,338 +56,346 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.8.3", "@babel/generator@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" - integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ== +"@babel/generator@^7.10.1", "@babel/generator@^7.10.2", "@babel/generator@^7.4.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9" + integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA== dependencies: - "@babel/types" "^7.9.6" + "@babel/types" "^7.10.2" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" - integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== +"@babel/helper-annotate-as-pure@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268" + integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" - integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059" + integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-explode-assignable-expression" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-builder-react-jsx-experimental@^7.9.0": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3" - integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg== +"@babel/helper-builder-react-jsx-experimental@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.1.tgz#9a7d58ad184d3ac3bafb1a452cec2bad7e4a0bc8" + integrity sha512-irQJ8kpQUV3JasXPSFQ+LCCtJSc5ceZrPFVj6TElR6XCHssi3jV8ch3odIrNtjJFRZZVbrOEfJMI79TPU/h1pQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-module-imports" "^7.8.3" - "@babel/types" "^7.9.5" + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-module-imports" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-builder-react-jsx@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32" - integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw== +"@babel/helper-builder-react-jsx@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.1.tgz#a327f0cf983af5554701b1215de54a019f09b532" + integrity sha512-KXzzpyWhXgzjXIlJU1ZjIXzUPdej1suE6vzqgImZ/cpAsR/CC8gUcX4EWRmDfWz/cs6HOCPMBIJ3nKoXt3BFuw== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/types" "^7.9.0" + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-compilation-targets@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz#1e05b7ccc9d38d2f8b40b458b380a04dcfadd38a" - integrity sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw== +"@babel/helper-compilation-targets@^7.10.2": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285" + integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA== dependencies: - "@babel/compat-data" "^7.9.6" - browserslist "^4.11.1" + "@babel/compat-data" "^7.10.1" + browserslist "^4.12.0" invariant "^2.2.4" levenary "^1.1.1" semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.8.3", "@babel/helper-create-class-features-plugin@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.6.tgz#965c8b0a9f051801fd9d3b372ca0ccf200a90897" - integrity sha512-6N9IeuyHvMBRyjNYOMJHrhwtu4WJMrYf8hVbEHD3pbbbmNOk1kmXSQs7bA4dYDUaIx4ZEzdnvo6NwC3WHd/Qow== +"@babel/helper-create-class-features-plugin@^7.10.1": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz#7474295770f217dbcf288bf7572eb213db46ee67" + integrity sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ== dependencies: - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.9.6" - "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-member-expression-to-functions" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" -"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" - integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== +"@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd" + integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-regex" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-regex" "^7.10.1" regexpu-core "^4.7.0" -"@babel/helper-define-map@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" - integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== +"@babel/helper-define-map@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d" + integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-function-name" "^7.10.1" + "@babel/types" "^7.10.1" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" - integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== +"@babel/helper-explode-assignable-expression@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e" + integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg== dependencies: - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" - integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== +"@babel/helper-function-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4" + integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ== dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.9.5" + "@babel/helper-get-function-arity" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== +"@babel/helper-get-function-arity@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d" + integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-hoist-variables@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" - integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== +"@babel/helper-hoist-variables@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077" + integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== +"@babel/helper-member-expression-to-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15" + integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-module-imports@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== +"@babel/helper-module-imports@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876" + integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-module-transforms@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" - integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== +"@babel/helper-module-transforms@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622" + integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-simple-access" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.6" - "@babel/types" "^7.9.0" + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-simple-access" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" - integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== +"@babel/helper-optimise-call-expression@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543" + integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127" + integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA== -"@babel/helper-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" - integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== +"@babel/helper-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96" + integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g== dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" - integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== +"@babel/helper-remap-async-to-generator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432" + integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-wrap-function" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-wrap-function" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6", "@babel/helper-replace-supers@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444" - integrity sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA== +"@babel/helper-replace-supers@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d" + integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A== dependencies: - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.9.6" - "@babel/types" "^7.9.6" + "@babel/helper-member-expression-to-functions" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-simple-access@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" - integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== +"@babel/helper-simple-access@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e" + integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw== dependencies: - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== +"@babel/helper-split-export-declaration@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" + integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" - integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== +"@babel/helper-validator-identifier@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" + integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== -"@babel/helper-wrap-function@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" - integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== +"@babel/helper-wrap-function@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9" + integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-function-name" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helpers@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580" - integrity sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw== +"@babel/helpers@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973" + integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw== dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.9.6" - "@babel/types" "^7.9.6" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/highlight@^7.8.3": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" - integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== +"@babel/highlight@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0" + integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg== dependencies: - "@babel/helper-validator-identifier" "^7.9.0" + "@babel/helper-validator-identifier" "^7.10.1" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" - integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== +"@babel/parser@^7.1.0", "@babel/parser@^7.10.1", "@babel/parser@^7.10.2", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0" + integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ== -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" - integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== +"@babel/plugin-proposal-async-generator-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55" + integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-remap-async-to-generator" "^7.10.1" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.7.4": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" - integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== +"@babel/plugin-proposal-class-properties@^7.10.1", "@babel/plugin-proposal-class-properties@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01" + integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-proposal-decorators@^7.7.4": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" - integrity sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.1.tgz#9373c2d8db45345c6e30452ad77b469758e5c8f7" + integrity sha512-xBfteh352MTke2U1NpclzMDmAmCdQ2fBZjhZQQfGTjXw6qcRYMkt528sA1U8o0ThDCSeuETXIj5bOGdxN+5gkw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-decorators" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-decorators" "^7.10.1" -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" - integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== +"@babel/plugin-proposal-dynamic-import@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0" + integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-proposal-export-default-from@^7.7.4": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.8.3.tgz#4cb7c2fdeaed490b60d9bfd3dc8a20f81f9c2e7c" - integrity sha512-PYtv2S2OdCdp7GSPDg5ndGZFm9DmWFvuLoS5nBxZCgOBggluLnhTScspJxng96alHQzPyrrHxvC9/w4bFuspeA== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.10.1.tgz#59ea2a4f09dbb0358c73dab27def3d21a27bd370" + integrity sha512-Xfc1CfHapIkwZ/+AI+j4Ha3g233ol0EEdy6SmnUuQQiZX78SfQXHd8tmntc5zqCkwPnIHoiZa6l6p0OAvxYXHw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-export-default-from" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-export-default-from" "^7.10.1" -"@babel/plugin-proposal-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" - integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== +"@babel/plugin-proposal-json-strings@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09" + integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" - integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78" + integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@^7.7.4", "@babel/plugin-proposal-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" - integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== +"@babel/plugin-proposal-numeric-separator@^7.10.1", "@babel/plugin-proposal-numeric-separator@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123" + integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-numeric-separator" "^7.10.1" -"@babel/plugin-proposal-object-rest-spread@^7.7.4", "@babel/plugin-proposal-object-rest-spread@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz#7a093586fcb18b08266eb1a7177da671ac575b63" - integrity sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A== +"@babel/plugin-proposal-object-rest-spread@^7.10.1", "@babel/plugin-proposal-object-rest-spread@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6" + integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.9.5" + "@babel/plugin-transform-parameters" "^7.10.1" -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" - integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== +"@babel/plugin-proposal-optional-catch-binding@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2" + integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" - integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== +"@babel/plugin-proposal-optional-chaining@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c" + integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" - integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== +"@babel/plugin-proposal-private-methods@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598" + integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.8" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f" + integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-async-generators@^7.8.0": version "7.8.4" @@ -396,12 +404,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-decorators@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda" - integrity sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ== +"@babel/plugin-syntax-class-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5" + integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-decorators@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.1.tgz#16b869c4beafc9a442565147bda7ce0967bd4f13" + integrity sha512-a9OAbQhKOwSle1Vr0NJu/ISg1sPfdEkfRKWpgPuzhnWWzForou2gIeUIIwjAMHRekhhpJ7eulZlYs0H14Cbi+g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" @@ -410,19 +425,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.8.3.tgz#f1e55ce850091442af4ba9c2550106035b29d678" - integrity sha512-a1qnnsr73KLNIQcQlcQ4ZHxqqfBKM6iNQZW2OMTyxNbA2WC7SHWHtGVpFzWtQAuS2pspkWVzdEBXXx8Ik0Za4w== +"@babel/plugin-syntax-export-default-from@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.10.1.tgz#634f58f36b5d6320d80f75441fdc61e1c05c33b0" + integrity sha512-+rcL4S/mN1Ss4zhSCbxzv1Wsf12eauvgTjWi0krXEeX1zd6qSxYnJoniE5Ssr5w2WPt61oUCJyXIFQIqO/29zw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-syntax-flow@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz#f2c883bd61a6316f2c89380ae5122f923ba4527f" - integrity sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg== +"@babel/plugin-syntax-flow@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.1.tgz#cd4bbca62fb402babacb174f64f8734310d742f0" + integrity sha512-b3pWVncLBYoPP60UOTc7NMlbtsHQ6ITim78KQejNHK6WJ2mzV5kCcg4mIWpasAfJEgwVTibwo2e+FU7UEIKQUg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-json-strings@^7.8.0": version "7.8.3" @@ -431,12 +446,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" - integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== +"@babel/plugin-syntax-jsx@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz#0ae371134a42b91d5418feb3c8c8d43e1565d2da" + integrity sha512-+OxyOArpVFXQeXKLO9o+r2I4dIoVoy6+Uu0vKELrlweDM3QJADZj+Z+5ERansZqIZBcLj42vHnDI8Rz9BnRIuQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": version "7.8.3" @@ -445,12 +460,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" - integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== +"@babel/plugin-syntax-numeric-separator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99" + integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" @@ -473,184 +488,184 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" - integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== +"@babel/plugin-syntax-top-level-await@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362" + integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-syntax-typescript@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" - integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg== +"@babel/plugin-syntax-typescript@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.1.tgz#5e82bc27bb4202b93b949b029e699db536733810" + integrity sha512-X/d8glkrAtra7CaQGMiGs/OGa6XgUzqPcBXCIGFCpCqnfGlT0Wfbzo/B89xHhnInTaItPK8LALblVXcUOEh95Q== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" - integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== +"@babel/plugin-transform-arrow-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b" + integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" - integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== +"@babel/plugin-transform-async-to-generator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062" + integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-remap-async-to-generator" "^7.10.1" -"@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" - integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== +"@babel/plugin-transform-block-scoped-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d" + integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-block-scoping@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" - integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== +"@babel/plugin-transform-block-scoping@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e" + integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" - integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg== +"@babel/plugin-transform-classes@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f" + integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-define-map" "^7.10.1" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" - integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== +"@babel/plugin-transform-computed-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07" + integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-destructuring@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" - integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q== +"@babel/plugin-transform-destructuring@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907" + integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" - integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== +"@babel/plugin-transform-dotall-regex@^7.10.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee" + integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" - integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== +"@babel/plugin-transform-duplicate-keys@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9" + integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" - integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== +"@babel/plugin-transform-exponentiation-operator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3" + integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-transform-flow-comments@^7.7.4": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.8.3.tgz#0a7e6c49224ac24271e4da25774da0600605ef2c" - integrity sha512-SEmbGPsaUig0x3QkB/Nai3Snk1sRxODBN2EGjdQqgBb5TMcbEejV2TtMGi2XiLmw9Cy/BvJX7CAnfJMctuyglg== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.10.1.tgz#1befb98f8d37245b70770a1f83c67057e41bd4a9" + integrity sha512-A1yDAD/3pU+NyCHRvm+GQE2xiyRV6mGDyhMdTKPqgs5aRcc2MR4wmnHJJIB91f8NwMNl8dxmN6nmj/7FCr6Jgw== dependencies: - "@babel/generator" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-flow" "^7.8.3" + "@babel/generator" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-flow" "^7.10.1" -"@babel/plugin-transform-flow-strip-types@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" - integrity sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg== +"@babel/plugin-transform-flow-strip-types@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.1.tgz#59eafbff9ae85ec8932d4c16c068654be814ec5e" + integrity sha512-i4o0YwiJBIsIx7/liVCZ3Q2WkWr1/Yu39PksBOnh/khW2SwIFsGa5Ze+MSon5KbDfrEHP9NeyefAgvUSXzaEkw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-flow" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-flow" "^7.10.1" -"@babel/plugin-transform-for-of@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" - integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== +"@babel/plugin-transform-for-of@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5" + integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" - integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== +"@babel/plugin-transform-function-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d" + integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" - integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== +"@babel/plugin-transform-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a" + integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" - integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== +"@babel/plugin-transform-member-expression-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39" + integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-modules-amd@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz#8539ec42c153d12ea3836e0e3ac30d5aae7b258e" - integrity sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw== +"@babel/plugin-transform-modules-amd@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a" + integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz#64b7474a4279ee588cacd1906695ca721687c277" - integrity sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ== +"@babel/plugin-transform-modules-commonjs@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301" + integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-simple-access" "^7.10.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz#207f1461c78a231d5337a92140e52422510d81a4" - integrity sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg== +"@babel/plugin-transform-modules-systemjs@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6" + integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA== dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-hoist-variables" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" - integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== +"@babel/plugin-transform-modules-umd@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595" + integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": version "7.8.3" @@ -659,229 +674,248 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.8.3" -"@babel/plugin-transform-new-target@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" - integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== +"@babel/plugin-transform-new-target@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324" + integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-object-super@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" - integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== +"@babel/plugin-transform-object-super@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde" + integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" -"@babel/plugin-transform-parameters@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795" - integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA== +"@babel/plugin-transform-parameters@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd" + integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg== dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-get-function-arity" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-property-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" - integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== +"@babel/plugin-transform-property-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d" + integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-react-display-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" - integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A== +"@babel/plugin-transform-react-display-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.1.tgz#e6a33f6d48dfb213dda5e007d0c7ff82b6a3d8ef" + integrity sha512-rBjKcVwjk26H3VX8pavMxGf33LNlbocMHdSeldIEswtQ/hrjyTG8fKKILW1cSkODyRovckN/uZlGb2+sAV9JUQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-react-jsx-development@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz#3c2a130727caf00c2a293f0aed24520825dbf754" - integrity sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw== +"@babel/plugin-transform-react-jsx-development@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.1.tgz#1ac6300d8b28ef381ee48e6fec430cc38047b7f3" + integrity sha512-XwDy/FFoCfw9wGFtdn5Z+dHh6HXKHkC6DwKNWpN74VWinUagZfDcEJc3Y8Dn5B3WMVnAllX8Kviaw7MtC5Epwg== dependencies: - "@babel/helper-builder-react-jsx-experimental" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/helper-builder-react-jsx-experimental" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" -"@babel/plugin-transform-react-jsx-self@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz#f4f26a325820205239bb915bad8e06fcadabb49b" - integrity sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ== +"@babel/plugin-transform-react-jsx-self@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.1.tgz#22143e14388d72eb88649606bb9e46f421bc3821" + integrity sha512-4p+RBw9d1qV4S749J42ZooeQaBomFPrSxa9JONLHJ1TxCBo3TzJ79vtmG2S2erUT8PDDrPdw4ZbXGr2/1+dILA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" -"@babel/plugin-transform-react-jsx-source@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz#89ef93025240dd5d17d3122294a093e5e0183de0" - integrity sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw== +"@babel/plugin-transform-react-jsx-source@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.1.tgz#30db3d4ee3cdebbb26a82a9703673714777a4273" + integrity sha512-neAbaKkoiL+LXYbGDvh6PjPG+YeA67OsZlE78u50xbWh2L1/C81uHiNP5d1fw+uqUIoiNdCC8ZB+G4Zh3hShJA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" -"@babel/plugin-transform-react-jsx@^7.9.4": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f" - integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw== +"@babel/plugin-transform-react-jsx@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.1.tgz#91f544248ba131486decb5d9806da6a6e19a2896" + integrity sha512-MBVworWiSRBap3Vs39eHt+6pJuLUAaK4oxGc8g+wY+vuSJvLiEQjW1LSTqKb8OUPtDvHCkdPhk7d6sjC19xyFw== dependencies: - "@babel/helper-builder-react-jsx" "^7.9.0" - "@babel/helper-builder-react-jsx-experimental" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/helper-builder-react-jsx" "^7.10.1" + "@babel/helper-builder-react-jsx-experimental" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" -"@babel/plugin-transform-regenerator@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" - integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== +"@babel/plugin-transform-react-pure-annotations@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.1.tgz#f5e7c755d3e7614d4c926e144f501648a5277b70" + integrity sha512-mfhoiai083AkeewsBHUpaS/FM1dmUENHBMpS/tugSJ7VXqXO5dCN1Gkint2YvM1Cdv1uhmAKt1ZOuAjceKmlLA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-regenerator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490" + integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" - integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== +"@babel/plugin-transform-reserved-words@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86" + integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-transform-runtime@^7.8.3": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.6.tgz#3ba804438ad0d880a17bca5eaa0cdf1edeedb2fd" - integrity sha512-qcmiECD0mYOjOIt8YHNsAP1SxPooC/rDmfmiSK9BNY72EitdSc7l44WTEklaWuFtbOEBjNhWWyph/kOImbNJ4w== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz#fd1887f749637fb2ed86dc278e79eb41df37f4b1" + integrity sha512-4w2tcglDVEwXJ5qxsY++DgWQdNJcCCsPxfT34wCUwIf2E7dI7pMpH8JczkMBbgBTNzBX62SZlNJ9H+De6Zebaw== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" - integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== +"@babel/plugin-transform-shorthand-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3" + integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" - integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== +"@babel/plugin-transform-spread@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8" + integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" - integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== +"@babel/plugin-transform-sticky-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00" + integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-regex" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-regex" "^7.10.1" -"@babel/plugin-transform-template-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" - integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== +"@babel/plugin-transform-template-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628" + integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" - integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== +"@babel/plugin-transform-typeof-symbol@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e" + integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-typescript@^7.9.0": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.6.tgz#2248971416a506fc78278fc0c0ea3179224af1e9" - integrity sha512-8OvsRdvpt3Iesf2qsAn+YdlwAJD7zJ+vhFZmDCa4b8dTp7MmHtKk5FF2mCsGxjZwuwsy/yIIay/nLmxST1ctVQ== +"@babel/plugin-transform-typescript@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.1.tgz#2c54daea231f602468686d9faa76f182a94507a6" + integrity sha512-v+QWKlmCnsaimLeqq9vyCsVRMViZG1k2SZTlcZvB+TqyH570Zsij8nvVUZzOASCRiQFUxkLrn9Wg/kH0zgy5OQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.9.6" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-typescript" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-typescript" "^7.10.1" -"@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" - integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== +"@babel/plugin-transform-unicode-escapes@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940" + integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-unicode-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f" + integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/preset-env@^7.7.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.6.tgz#df063b276c6455ec6fcfc6e53aacc38da9b0aea6" - integrity sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ== + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz#715930f2cf8573b0928005ee562bed52fb65fdfb" + integrity sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA== dependencies: - "@babel/compat-data" "^7.9.6" - "@babel/helper-compilation-targets" "^7.9.6" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.9.6" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.9.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/compat-data" "^7.10.1" + "@babel/helper-compilation-targets" "^7.10.2" + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-proposal-async-generator-functions" "^7.10.1" + "@babel/plugin-proposal-class-properties" "^7.10.1" + "@babel/plugin-proposal-dynamic-import" "^7.10.1" + "@babel/plugin-proposal-json-strings" "^7.10.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" + "@babel/plugin-proposal-numeric-separator" "^7.10.1" + "@babel/plugin-proposal-object-rest-spread" "^7.10.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.1" + "@babel/plugin-proposal-optional-chaining" "^7.10.1" + "@babel/plugin-proposal-private-methods" "^7.10.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.1" "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.1" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-syntax-json-strings" "^7.8.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.1" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.9.5" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.9.5" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.9.0" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.9.6" - "@babel/plugin-transform-modules-commonjs" "^7.9.6" - "@babel/plugin-transform-modules-systemjs" "^7.9.6" - "@babel/plugin-transform-modules-umd" "^7.9.0" + "@babel/plugin-syntax-top-level-await" "^7.10.1" + "@babel/plugin-transform-arrow-functions" "^7.10.1" + "@babel/plugin-transform-async-to-generator" "^7.10.1" + "@babel/plugin-transform-block-scoped-functions" "^7.10.1" + "@babel/plugin-transform-block-scoping" "^7.10.1" + "@babel/plugin-transform-classes" "^7.10.1" + "@babel/plugin-transform-computed-properties" "^7.10.1" + "@babel/plugin-transform-destructuring" "^7.10.1" + "@babel/plugin-transform-dotall-regex" "^7.10.1" + "@babel/plugin-transform-duplicate-keys" "^7.10.1" + "@babel/plugin-transform-exponentiation-operator" "^7.10.1" + "@babel/plugin-transform-for-of" "^7.10.1" + "@babel/plugin-transform-function-name" "^7.10.1" + "@babel/plugin-transform-literals" "^7.10.1" + "@babel/plugin-transform-member-expression-literals" "^7.10.1" + "@babel/plugin-transform-modules-amd" "^7.10.1" + "@babel/plugin-transform-modules-commonjs" "^7.10.1" + "@babel/plugin-transform-modules-systemjs" "^7.10.1" + "@babel/plugin-transform-modules-umd" "^7.10.1" "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.9.5" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.10.1" + "@babel/plugin-transform-object-super" "^7.10.1" + "@babel/plugin-transform-parameters" "^7.10.1" + "@babel/plugin-transform-property-literals" "^7.10.1" + "@babel/plugin-transform-regenerator" "^7.10.1" + "@babel/plugin-transform-reserved-words" "^7.10.1" + "@babel/plugin-transform-shorthand-properties" "^7.10.1" + "@babel/plugin-transform-spread" "^7.10.1" + "@babel/plugin-transform-sticky-regex" "^7.10.1" + "@babel/plugin-transform-template-literals" "^7.10.1" + "@babel/plugin-transform-typeof-symbol" "^7.10.1" + "@babel/plugin-transform-unicode-escapes" "^7.10.1" + "@babel/plugin-transform-unicode-regex" "^7.10.1" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.9.6" - browserslist "^4.11.1" + "@babel/types" "^7.10.2" + browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" levenary "^1.1.1" semver "^5.5.0" "@babel/preset-flow@^7.7.4": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.9.0.tgz#fee847c3e090b0b2d9227c1949e4da1d1379280d" - integrity sha512-88uSmlshIrlmPkNkEcx3UpSZ6b8n0UGBq0/0ZMZCF/uxAW0XIAUuDHBhIOAh0pvweafH4RxOwi/H3rWhtqOYPA== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.10.1.tgz#29498ec23baf9aa6dae50c568ceba09d71692b82" + integrity sha512-FuQsibb5PaX07fF1XUO5gjjxdEZbcJv8+ugPDaeFEsBIvUTib8hCtEJow/c2F0jq9ZUjpHCQ8IQKNHRvKE1kJQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-flow-strip-types" "^7.9.0" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-transform-flow-strip-types" "^7.10.1" "@babel/preset-modules@^0.1.3": version "0.1.3" @@ -895,29 +929,30 @@ esutils "^2.0.2" "@babel/preset-react@^7.7.4": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d" - integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.1.tgz#e2ab8ae9a363ec307b936589f07ed753192de041" + integrity sha512-Rw0SxQ7VKhObmFjD/cUcKhPTtzpeviEFX1E6PgP+cYOhQ98icNqtINNFANlsdbQHrmeWnqdxA4Tmnl1jy5tp3Q== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-react-display-name" "^7.8.3" - "@babel/plugin-transform-react-jsx" "^7.9.4" - "@babel/plugin-transform-react-jsx-development" "^7.9.0" - "@babel/plugin-transform-react-jsx-self" "^7.9.0" - "@babel/plugin-transform-react-jsx-source" "^7.9.0" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-transform-react-display-name" "^7.10.1" + "@babel/plugin-transform-react-jsx" "^7.10.1" + "@babel/plugin-transform-react-jsx-development" "^7.10.1" + "@babel/plugin-transform-react-jsx-self" "^7.10.1" + "@babel/plugin-transform-react-jsx-source" "^7.10.1" + "@babel/plugin-transform-react-pure-annotations" "^7.10.1" "@babel/preset-typescript@^7.7.4": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz#87705a72b1f0d59df21c179f7c3d2ef4b16ce192" - integrity sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.1.tgz#a8d8d9035f55b7d99a2461a0bdc506582914d07e" + integrity sha512-m6GV3y1ShiqxnyQj10600ZVOFrSSAa8HQ3qIUk2r+gcGtHTIRw0dJnFLt1WNXpKjtVw7yw1DAPU/6ma2ZvgJuA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-typescript" "^7.9.0" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-transform-typescript" "^7.10.1" "@babel/register@^7.7.4": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.9.0.tgz#02464ede57548bddbb5e9f705d263b7c3f43d48b" - integrity sha512-Tv8Zyi2J2VRR8g7pC5gTeIN8Ihultbmk0ocyNz8H2nEZbmhp1N6q0A1UGsQbDvGP/sNinQKUHf3SqXwqjtFv4Q== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.1.tgz#b6567c5cb5049f44bbf8c35d6ff68ca3c43238ed" + integrity sha512-sl96+kB3IA2B9EzpwwBmYadOT14vw3KaXOknGDbJaZCOj52GDA4Tivudq9doCJcB+bEIKCEARZYwRgBBsCGXyg== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.13" @@ -926,50 +961,50 @@ source-map-support "^0.5.16" "@babel/runtime-corejs3@^7.8.3": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz#67aded13fffbbc2cb93247388cf84d77a4be9a71" - integrity sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA== + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.10.2.tgz#3511797ddf9a3d6f3ce46b99cc835184817eaa4e" + integrity sha512-+a2M/u7r15o3dV1NEizr9bRi+KUVnrs/qYxF0Z06DAPx/4VCWaz1WA7EcbE+uqGgt39lp5akWGmHsTseIkHkHg== dependencies: core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" - integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ== + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839" + integrity sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.4.0", "@babel/template@^7.8.3", "@babel/template@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== +"@babel/template@^7.10.1", "@babel/template@^7.4.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811" + integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig== dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" + "@babel/code-frame" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" - integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27" + integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ== dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.6" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.9.6" - "@babel/types" "^7.9.6" + "@babel/code-frame" "^7.10.1" + "@babel/generator" "^7.10.1" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" - integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA== +"@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d" + integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng== dependencies: - "@babel/helper-validator-identifier" "^7.9.5" + "@babel/helper-validator-identifier" "^7.10.1" lodash "^4.17.13" to-fast-properties "^2.0.0" @@ -1143,9 +1178,9 @@ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== "@peculiar/asn1-schema@^2.0.1", "@peculiar/asn1-schema@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.0.3.tgz#c6c097e842ebb8a07d198b68cd49f2cf9f3571b5" - integrity sha512-STqC+Tfx2dTiIGRmokjsKOeqsfhoV6WaBwFr7BVicSfHLAVSPrZXiugyD8AELrjQdJ9INWpL3N7YSJyU5a1ZwA== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.0.5.tgz#ba6c5a107eec16a23804d0176a3595837b53c0e9" + integrity sha512-VIKJjsgMkv+yyWx3C+D4xo6/NeCg0XFBgNlavtkxELijV+aKAq53du5KkOJbeZtm1nn9CinQKny2PqL8zCfpeA== dependencies: "@types/asn1js" "^0.0.1" asn1js "^2.0.26" @@ -1185,9 +1220,9 @@ "@types/pvutils" "*" "@types/babel__core@^7.1.0": - version "7.1.7" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89" - integrity sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw== + version "7.1.8" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.8.tgz#057f725aca3641f49fc11c7a87a9de5ec588a5d7" + integrity sha512-KXBiQG2OXvaPWFPDS1rD8yV9vO0OuWIqAEqLsbfX0oU2REN5KuoMnZ1gClWcBhO5I3n6oTVAmrMufOvRqdmFTQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1211,9 +1246,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.11.tgz#1ae3010e8bf8851d324878b42acec71986486d18" - integrity sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q== + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.12.tgz#22f49a028e69465390f87bb103ebd61bd086b8f5" + integrity sha512-t4CoEokHTfcyfb4hUaF9oOHu9RmmNWnm1CP0YmMqOOfClKascOmvlEM736vlqeScuGvBDsHkf8R2INd4DWreQA== dependencies: "@babel/types" "^7.3.0" @@ -1222,11 +1257,6 @@ resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.10.tgz#cc658ca319b6355399efc1f5b9e818f1a24bf999" integrity sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ== -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - "@types/fbemitter@*": version "2.0.32" resolved "https://registry.yarnpkg.com/@types/fbemitter/-/fbemitter-2.0.32.tgz#8ed204da0f54e9c8eaec31b1eec91e25132d082c" @@ -1241,11 +1271,10 @@ "@types/react" "*" "@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + version "7.1.2" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.2.tgz#06ca26521353a545d94a0adc74f38a59d232c987" + integrity sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA== dependencies: - "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" @@ -1275,9 +1304,9 @@ integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== "@types/lodash@^4.14.152": - version "4.14.152" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.152.tgz#7e7679250adce14e749304cdb570969f77ec997c" - integrity sha512-Vwf9YF2x1GE3WNeUMjT5bTHa2DqgUo87ocdgTScupY2JclZ5Nn7W2RLM/N0+oreexUk8uaVugR81NnTY/jNNXg== + version "4.14.155" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.155.tgz#e2b4514f46a261fd11542e47519c20ebce7bc23a" + integrity sha512-vEcX7S7aPhsBCivxMwAANQburHBtfN9RdyXFk84IJmu2Z4Hkg1tOFgaslRiEqqvoLtbCBi6ika1EMspE+NZ9Lg== "@types/minimatch@*": version "3.0.3" @@ -1290,14 +1319,14 @@ integrity sha512-jhMOZSS0UGYTS9pqvt6q3wtT3uvOSve5piTEmTMx3zzTuBLvSIMxSIBIc3d5lajVD5h4xc41AMZD2M5orN3PxA== "@types/node@*": - version "14.0.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.5.tgz#3d03acd3b3414cf67faf999aed11682ed121f22b" - integrity sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA== + version "14.0.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.11.tgz#61d4886e2424da73b7b25547f59fdcb534c165a3" + integrity sha512-lCvvI24L21ZVeIiyIUHZ5Oflv1hhHQ5E1S25IRlKIXaRkVgmXpJMI3wUJkmym2bTbCe+WoIibQnMVAU3FguaOg== "@types/node@^12.12.41": - version "12.12.42" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.42.tgz#d0d1149336bd07540dd1ea576692829d575dec34" - integrity sha512-R/9QdYFLL9dE9l5cWWzWIZByVGFd7lk7JVOJ7KD+E1SJ4gni7XJRLz9QTjyYQiHIqEAgku9VgxdLjMlhhUaAFg== + version "12.12.44" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.44.tgz#0d400a1453adcb359b133acceae4dd8bb0e0a159" + integrity sha512-jM6QVv0Sm5d3nW+nUD5jSzPcO6oPqboitSNcwgBay9hifVq/Rauq1PYnROnsmuw45JMBiTnsPAno0bKu2e2xrg== "@types/prop-types@*": version "15.7.3" @@ -2158,7 +2187,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.11.1, browserslist@^4.12.0, browserslist@^4.8.5: +browserslist@^4.12.0, browserslist@^4.8.5: version "4.12.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== @@ -2322,9 +2351,9 @@ camelcase@^5.0.0, camelcase@^5.3.1: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001061: - version "1.0.30001065" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001065.tgz#e8d7fef61cdfd8a7107493ad6bf551a4eb59c68f" - integrity sha512-DDxCLgJ266YnAHQv0jS1wdOaihRFF52Zgmlag39sQJVy2H46oROpJp4hITstqhdB8qnHSrKNoAEkQA9L/oYF9A== + version "1.0.30001079" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001079.tgz#ed3e5225cd9a6850984fdd88bf24ce45d69b9c22" + integrity sha512-2KaYheg0iOY+CMmDuAB3DHehrXhhb4OZU4KBVGDr/YKyYAcpudaiUQ9PJ9rxrPlKEoJ3ATasQ5AN48MqpwS43Q== capture-exit@^2.0.0: version "2.0.0" @@ -3128,9 +3157,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.3.413: - version "1.3.451" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.451.tgz#0c075af3e2f06d706670bde0279432802ca8c83f" - integrity sha512-2fvco0F2bBIgqzO8GRP0Jt/91pdrf9KfZ5FsmkYkjERmIJG585cFeFZV4+CO6oTmU3HmCTgfcZuEa7kW8VUh3A== + version "1.3.464" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.464.tgz#fe13feaa08f6f865d3c89d5d72e54c194f463aa5" + integrity sha512-Oo+0+CN9d2z6FToQW6Hwvi9ez09Y/usKwr0tsDsyg43a871zVJCi1nR0v03djLbRNcaCKjtrnVf2XJhTxEpPCg== elliptic@^6.0.0, elliptic@^6.5.2: version "6.5.2" @@ -3213,9 +3242,9 @@ entities@^1.1.1, "entities@~ 1.1.1", entities@~1.1.1: integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== entities@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.2.tgz#ac74db0bba8d33808bbf36809c3a5c3683531436" - integrity sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== enzyme-adapter-react-16@^1.15.1: version "1.15.2" @@ -3361,9 +3390,9 @@ escape-string-regexp@^1.0.5: integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.9.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" - integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== + version "1.14.2" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.2.tgz#14ab71bf5026c2aa08173afba22c6f3173284a84" + integrity sha512-InuOIiKk8wwuOFg6x9BQXbzjrQhtyXh46K9bqVTPzSo2FnyMBaYGBMC6PhQy7yxxil9vIedFBweQBMK74/7o8A== dependencies: esprima "^4.0.1" estraverse "^4.2.0" @@ -3392,9 +3421,9 @@ eslint-plugin-flowtype@^2.30.0: lodash "^4.17.10" eslint-plugin-jest@^23.0.4: - version "23.13.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.13.1.tgz#b2ce83f76064ad8ba1f1f26f322b86a86e44148e" - integrity sha512-TRLJH6M6EDvGocD98a7yVThrAOCK9WJfo9phuUb0MJptcrOYZeCKzC9aOzZCD93sxXCsiJVZywaTHdI/mAi0FQ== + version "23.13.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.13.2.tgz#7b7993b4e09be708c696b02555083ddefd7e4cc7" + integrity sha512-qZit+moTXTyZFNDqSIR88/L3rdBlTU7CuW6XmyErD2FfHEkdoLgThkRbiQjzgYnX6rfgLx3Ci4eJmF4Ui5v1Cw== dependencies: "@typescript-eslint/experimental-utils" "^2.5.0" @@ -3434,9 +3463,9 @@ eslint-scope@^4.0.3: estraverse "^4.1.1" eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -3456,9 +3485,9 @@ eslint-utils@^2.0.0: eslint-visitor-keys "^1.1.0" eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + version "1.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz#74415ac884874495f78ec2a97349525344c981fa" + integrity sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ== eslint@^5.12.0: version "5.16.0" @@ -3704,9 +3733,9 @@ extsprintf@^1.2.0: integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^2.2.6: version "2.2.7" @@ -4428,9 +4457,9 @@ ignore@^4.0.3, ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.0.4: - version "5.1.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.6.tgz#643194ad4bf2712f37852e386b6998eff0db2106" - integrity sha512-cgXgkypZBcCnOgSihyeqbo6gjIaIyDqPQB7Ra4vhE9m6kigdGoQDMHjviFhRZo3IMlRy6yElosoviMs5YxZXUA== + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== immutable@^3.7.4: version "3.8.2" @@ -4658,9 +4687,9 @@ is-buffer@^2.0.0: integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== is-callable@^1.0.4, is-callable@^1.1.4, is-callable@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" - integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== is-ci@^2.0.0: version "2.0.0" @@ -4850,11 +4879,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: isobject "^3.0.1" is-regex@^1.0.3, is-regex@^1.0.4, is-regex@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== dependencies: - has "^1.0.3" + has-symbols "^1.0.1" is-regexp@^1.0.0: version "1.0.0" @@ -5629,21 +5658,11 @@ lodash-es@^4.2.1: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - lodash.escape@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= - lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" @@ -5654,21 +5673,6 @@ lodash.isequal@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - -lodash.mergewith@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" - integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -5900,9 +5904,9 @@ merge-stream@^2.0.0: integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.2.3: - version "1.3.0" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" - integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" @@ -6167,9 +6171,9 @@ node-notifier@^5.4.2: which "^1.3.0" node-releases@^1.1.53: - version "1.1.56" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.56.tgz#bc054a417d316e3adac90eafb7e1932802f28705" - integrity sha512-EVo605FhWLygH8a64TjgpjyHYOihkxECwX1bHHr8tETJKWEiWS2YJjPbvsX2jFjnjTNEgBCmk9mLjKG1Mf11cw== + version "1.1.58" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.58.tgz#8ee20eef30fa60e52755fcc0942def5a734fe935" + integrity sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg== normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.5.0" @@ -6582,9 +6586,9 @@ path-type@^3.0.0: pify "^3.0.0" pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -6770,9 +6774,9 @@ postcss-value-parser@^4.1.0: integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== postcss@^7.0.1, postcss@^7.0.13, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.30, postcss@^7.0.6, postcss@^7.0.7: - version "7.0.30" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.30.tgz#cc9378beffe46a02cbc4506a0477d05fcea9a8e2" - integrity sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ== + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -7004,7 +7008,7 @@ randexp@0.4.6: discontinuous-range "1.0.0" ret "~0.1.10" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -7256,9 +7260,9 @@ regenerate-unicode-properties@^8.2.0: regenerate "^1.4.0" regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== regenerator-runtime@^0.11.0: version "0.11.1" @@ -7638,17 +7642,13 @@ sane@^4.0.3: walker "~1.0.5" sanitize-html@^1.18.4: - version "1.24.0" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.24.0.tgz#9cd42f236512bfcf6259424e958551148c165a7f" - integrity sha512-TAIFx39V/y06jDd4YUz7ntCdMUXN5Z28pSG7sTP2BCLXwHA9+ermacDpQs35Evo4p6YSgmaPdSbGiX4Fgptuuw== + version "1.26.0" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.26.0.tgz#ab38d671526b9b7c08aa7af7f9ad5a73fcc1bbe4" + integrity sha512-xriDBT2FbfN0ZKCcX6H6svkh1bZpO2e5ny05RQGZY6vFOMAU13La2L5YYf3XpcjXSksCYXzPj7YPvyGp5wbaUA== dependencies: chalk "^2.4.1" htmlparser2 "^4.1.0" - lodash.clonedeep "^4.5.0" - lodash.escaperegexp "^4.1.2" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.mergewith "^4.6.2" + lodash "^4.17.15" postcss "^7.0.27" srcset "^2.0.1" xtend "^4.0.1" @@ -7700,6 +7700,13 @@ serialize-javascript@^2.1.2: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -8318,15 +8325,15 @@ tapable@^1.0.0, tapable@^1.1.3: integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== terser-webpack-plugin@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" - integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^2.1.2" + serialize-javascript "^3.1.0" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" @@ -8558,9 +8565,9 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^3.7.3: - version "3.9.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.3.tgz#d3ac8883a97c26139e42df5e93eeece33d610b8a" - integrity sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ== + version "3.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" + integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== ua-parser-js@^0.7.18: version "0.7.21" @@ -8741,9 +8748,9 @@ url@^0.11.0: querystring "0.2.0" use-callback-ref@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.3.tgz#9f939dfb5740807bbf9dd79cdd4e99d27e827756" - integrity sha512-DPBPh1i2adCZoIArRlTuKRy7yue7QogtEnfv0AKrWsY+GA+4EKe37zhRDouNnyWMoNQFYZZRF+2dLHsWE4YvJA== + version "1.2.4" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.4.tgz#d86d1577bfd0b955b6e04aaf5971025f406bea3c" + integrity sha512-rXpsyvOnqdScyied4Uglsp14qzag1JIemLeTWGKbwpotWht57hbP78aNT+Q4wdFKQfQibbUX4fb6Qb4y11aVOQ== use-sidecar@^1.0.1: version "1.0.2" @@ -8964,9 +8971,9 @@ webpack@^4.20.2: webpack-sources "^1.4.1" what-input@^5.2.6: - version "5.2.9" - resolved "https://registry.yarnpkg.com/what-input/-/what-input-5.2.9.tgz#e484628c00404d2ad5d747ac2f0fb22008f7757a" - integrity sha512-/tuM/4ngvfYB1QF3yekJsmFpIhkiHEDKCl/VYDikyHZVxoFn3U/lNgiNt7aqC8RerkoPUMxc9ihKsW9KwAx2Rg== + version "5.2.10" + resolved "https://registry.yarnpkg.com/what-input/-/what-input-5.2.10.tgz#f79f5b65cf95d75e55e6d580bb0a6b98174cad4e" + integrity sha512-7AQoIMGq7uU8esmKniOtZG3A+pzlwgeyFpkS3f/yzRbxknSL68tvn5gjE6bZ4OMFxCPjpaBd2udUTqlZ0HwrXQ== whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.5" From dbc2f9cbfc5b1ee6aea5bdb61970d2832f1021a5 Mon Sep 17 00:00:00 2001 From: Michael Albert Date: Mon, 8 Jun 2020 08:27:12 +0000 Subject: [PATCH 0080/1504] Translated using Weblate (German) Currently translated at 99.7% (2253 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 40 +++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index f55d94f8fc..d51ef94814 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1569,7 +1569,7 @@ "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Ihr Passwort wurde erfolgreich geändert. Sie erhalten keine Push-Benachrichtigungen zu anderen Sitzungen, bis Sie sich wieder bei diesen anmelden", "Sessions": "Sitzungen", "Notification sound": "Benachrichtigungston", - "Set a new custom sound": "Setze einen neuen benutzerdefinierten Sound", + "Set a new custom sound": "Setze einen neuen benutzerdefinierten Ton", "Browse": "Durchsuche", "Direct Messages": "Direktnachrichten", "You can use /help to list available commands. Did you mean to send this as a message?": "Sie können /help benutzen, um verfügbare Befehle aufzulisten. Wollten Sie dies als Nachricht senden?", @@ -1584,8 +1584,8 @@ "To help us prevent this in future, please send us logs.": "Um uns zu helfen, dies in Zukunft zu vermeiden, senden Sie uns bitte Logs.", "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Wir empfehlen Ihnen, den Verifizierungsprozess für jede Sitzung zu durchlaufen, um zu bestätigen, dass sie ihrem rechtmäßigen Eigentümer gehören, aber Sie können die Nachricht auch ohne Verifizierung erneut senden, wenn Sie dies bevorzugen.", "Notification settings": "Benachrichtigungseinstellungen", - "Help": "Hilfe", - "Filter": "Filter", + "Help": "Hilf uns", + "Filter": "Filtern", "Filter rooms…": "Räume filtern…", "You have %(count)s unread notifications in a prior version of this room.|one": "Sie haben %(count)s ungelesene Benachrichtigungen in einer früheren Version dieses Raumes.", "Go Back": "Gehe zurück", @@ -2389,5 +2389,37 @@ "Create room": "Raum erstellen", "Jump to oldest unread message": "Zur ältesten ungelesenen Nachricht springen", "Upload a file": "Eine Datei hochladen", - "Dismiss read marker and jump to bottom": "Entferne Lesemarker und springe nach unten" + "Dismiss read marker and jump to bottom": "Entferne Lesemarker und springe nach unten", + "Room name or address": "Raumname oder -adresse", + "Joins room with given address": "Tritt dem Raum unter der angegebenen Adresse bei", + "Unrecognised room address:": "Unbekannte Raumadresse:", + "Help us improve Riot": "Hilf uns Riot zu verbessern", + "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Hilf uns Riot zu verbessern, indem du anonyme Nutzungsdaten schickst. Dies wird ein Cookie verwenden.", + "I want to help": "Ich möchte helfen", + "Your homeserver has exceeded its user limit.": "Dein Heimserver hat das Benutzerlimit erreicht.", + "Your homeserver has exceeded one of its resource limits.": "Dein Heimserver hat eine seiner Ressourcengrenzen erreicht.", + "Contact your server admin.": "Kontaktiere deinen Heimserver Administrator.", + "Ok": "Ok", + "Set password": "Setze Passwort", + "To return to your account in future you need to set a password": "Um dein Konto zukünftig wieder verwenden zu können, setze ein Passwort", + "Restart": "Neustarten", + "Upgrade your Riot": "Aktualisiere dein Riot", + "A new version of Riot is available!": "Eine neue Version von Riot ist verfügbar!", + "New version available. Update now.": "Neue Version verfügbar. Jetzt aktualisieren.", + "Please verify the room ID or address and try again.": "Bitte überprüfe die Raum-ID oder -adresse und versuche es erneut.", + "To link to this room, please add an address.": "Um den Raum zu verlinken, füge bitte eine Adresse hinzu.", + "Emoji picker": "Emoji Auswahl", + "Show %(n)s more": "%(n)s weitere anzeigen", + "Error creating address": "Fehler beim Anlegen der Adresse", + "There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Es gab einen Fehler beim Anlegen der Adresse. Entweder erlaubt es der Server nicht oder es gab ein temporäres Problem.", + "You don't have permission to delete the address.": "Du hast nicht die Berechtigung die Adresse zu löschen.", + "Error removing address": "Fehler beim Löschen der Adresse", + "Categories": "Kategorien", + "Room address": "Raumadresse", + "Please provide a room address": "Bitte gib eine Raumadresse an", + "This address is available to use": "Diese Adresse ist verfügbar", + "This address is already in use": "Diese Adresse wird bereits verwendet", + "Address (optional)": "Adresse (optional)", + "delete the address.": "lösche die Adresse.", + "Use a different passphrase?": "Eine andere Passphrase verwenden?" } From 4b920c88dc9cbd5e99d627ce1c5a7969fd9db95d Mon Sep 17 00:00:00 2001 From: yuuki-san Date: Mon, 8 Jun 2020 08:55:02 +0000 Subject: [PATCH 0081/1504] Translated using Weblate (Slovak) Currently translated at 68.7% (1552 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sk/ --- src/i18n/strings/sk.json | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json index 0fe60e4321..0756f8d3e8 100644 --- a/src/i18n/strings/sk.json +++ b/src/i18n/strings/sk.json @@ -1565,7 +1565,7 @@ "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s odstránil/a alternatívne adresy %(addresses)s pre túto miestnosť.", "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s odstránil/a alternatívnu adresu %(addresses)s pre túto miestnosť.", "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s zmenil/a alternatívne adresy pre túto miestnosť.", - "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s zmenil/a hlavnú a alternatívnu/e adresy pre túto miestnosť.", + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s zmenil/a hlavnú a alternatívne adresy pre túto miestnosť.", "%(senderName)s changed the addresses for this room.": "%(senderName)s zmenil/a adresy pre túto miestnosť.", "You signed in to a new session without verifying it:": "Prihlásili ste sa do novej relácie bez jej overenia:", "Verify your other session using one of the options below.": "Overte svoje ostatné relácie pomocou jednej z nižšie uvedených možností.", @@ -1708,7 +1708,7 @@ "Manage": "Spravovať", "Securely cache encrypted messages locally for them to appear in search results.": "Bezpečne cachovať šifrované správy lokálne, aby sa mohli zobraziť vo vyhľadávaní.", "Enable": "Povoliť", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riotu chýbajú niektoré komponenty potrebné na bezpečné cachovanie šifrovaných správ lokálne. Pokiaľ chcete experimentovať s touto funkciou, spravte si svoj vlastný Riot Desktop s pridanými vyhľadávacími komponentami.", + "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riotu chýbajú niektoré komponenty potrebné na bezpečné cachovanie šifrovaných správ lokálne. Pokiaľ chcete experimentovať s touto funkciou, spravte si svoj vlastný Riot Desktop s pridanými vyhľadávacími komponentami.", "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riotu nemôže bezpečne cachovať šifrované správy lokálne keď beží v prehliadači. Použite Riot Desktop, aby sa šifrované správy zobrazili vo vyhľadávaní.", "This session is backing up your keys. ": "Táto relácia zálohuje vaše kľúče. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Táto relácia nezálohuje vaše kľúče, ale už máte jednu existujúcu zálohu z ktorej sa môžete obnoviť a postupne pridávať.", @@ -1727,5 +1727,17 @@ "Enable desktop notifications for this session": "Povoliť desktopové notifikácie pre túto reláciu", "Enable audible notifications for this session": "Povoliť zvukové notifikácie pre túto reláciu", "Size must be a number": "Veľkosť musí byť číslo", - "Custom font size can only be between %(min)s pt and %(max)s pt": "Vlastná veľkosť písma môže byť len v rozmedzí %(min)s pt až %(max)s pt" + "Custom font size can only be between %(min)s pt and %(max)s pt": "Vlastná veľkosť písma môže byť len v rozmedzí %(min)s pt až %(max)s pt", + "Help us improve Riot": "Pomôžte nám zlepšovať Riot", + "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Posielať anonymné dáta o používaní, ktoré nám pomôžu zlepšiť Riot. Toto bude vyžadovať sušienku.", + "I want to help": "Chcem pomôcť", + "Your homeserver has exceeded its user limit.": "Na vašom domovskom serveri bol prekročený limit počtu používateľov.", + "Your homeserver has exceeded one of its resource limits.": "Na vašom domovskom serveri bol prekročený jeden z limitov systémových zdrojov.", + "Contact your server admin.": "Kontaktujte svojho administrátora serveru.", + "Ok": "Ok", + "Set password": "Nastaviť heslo", + "To return to your account in future you need to set a password": "Aby ste sa k účtu mohli vrátiť aj neskôr, je potrebné nastaviť heslo", + "Restart": "Reštartovať", + "Upgrade your Riot": "Upgradujte svoj Riot", + "A new version of Riot is available!": "Nová verzia Riotu je dostupná!" } From 6fe5196a193ca3b1c814cf27463a86db0563186b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 8 Jun 2020 11:43:50 +0100 Subject: [PATCH 0082/1504] send state of lowBandwidth in rageshakes Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/rageshake/submit-rageshake.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rageshake/submit-rageshake.ts b/src/rageshake/submit-rageshake.ts index 9f9d7898cb..64a1ea0c33 100644 --- a/src/rageshake/submit-rageshake.ts +++ b/src/rageshake/submit-rageshake.ts @@ -145,6 +145,10 @@ export default async function sendBugReport(bugReportEndpoint: string, opts: IOp if (enabledLabs.length) { body.append('enabled_labs', enabledLabs.join(', ')); } + // if low bandwidth mode is enabled, say so over rageshake, it causes many issues + if (SettingsStore.getValue("lowBandwidth")) { + body.append("lowBandwidth", "enabled"); + } // add storage persistence/quota information if (navigator.storage && navigator.storage.persisted) { From 39bcd8d56d1e51e62c4559daae97a867bd887741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 21 May 2020 10:10:15 +0200 Subject: [PATCH 0083/1504] EventIndex: Add a checkpoint if a room turns into a encrypted one. --- src/indexing/EventIndex.js | 69 +++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 15 deletions(-) diff --git a/src/indexing/EventIndex.js b/src/indexing/EventIndex.js index fac7c92b65..3f08574d7a 100644 --- a/src/indexing/EventIndex.js +++ b/src/indexing/EventIndex.js @@ -182,6 +182,14 @@ export default class EventIndex extends EventEmitter { return; } + if (ev.getType() === "m.room.encryption") { + console.log("EventIndex: Adding checkpoint for newly encrypted room", + room.roomId); + + this.addRoomCheckpoint(room.roomId, true); + return; + } + // If the event is not yet decrypted mark it for the // Event.decrypted callback. if (ev.isBeingDecrypted()) { @@ -234,26 +242,12 @@ export default class EventIndex extends EventEmitter { */ onTimelineReset = async (room, timelineSet, resetAllTimelines) => { if (room === null) return; - - const indexManager = PlatformPeg.get().getEventIndexingManager(); if (!MatrixClientPeg.get().isRoomEncrypted(room.roomId)) return; - const timeline = room.getLiveTimeline(); - const token = timeline.getPaginationToken("b"); - - const backwardsCheckpoint = { - roomId: room.roomId, - token: token, - fullCrawl: false, - direction: "b", - }; - console.log("EventIndex: Added checkpoint because of a limited timeline", backwardsCheckpoint); - await indexManager.addCrawlerCheckpoint(backwardsCheckpoint); - - this.crawlerCheckpoints.push(backwardsCheckpoint); + this.addRoomCheckpoint(room.roomId, false); } /** @@ -319,6 +313,51 @@ export default class EventIndex extends EventEmitter { this.emit("changedCheckpoint", this.currentRoom()); } + async addEventsFromLiveTimeline(timeline) { + let events = timeline.getEvents(); + + for (let i = 0; i < events.length; i++) { + const ev = events[i]; + await this.addLiveEventToIndex(ev); + } + } + + async addRoomCheckpoint(roomId, fullCrawl = false) { + const indexManager = PlatformPeg.get().getEventIndexingManager(); + const client = MatrixClientPeg.get(); + const room = client.getRoom(roomId); + + if (!room) return; + + const timeline = room.getLiveTimeline(); + let token = timeline.getPaginationToken("b"); + + if(!token) { + // The room doesn't contain any tokens, meaning the live timeline + // contains all the events, add those to the index. + await this.addEventsFromLiveTimeline(timeline); + return; + } + + const checkpoint = { + roomId: room.roomId, + token: token, + fullCrawl: fullCrawl, + direction: "b", + }; + + console.log("EventIndex: Adding checkpoint", checkpoint); + + try{ + await indexManager.addCrawlerCheckpoint(checkpoint); + } catch (e) { + console.log("EventIndex: Error adding new checkpoint for room", + room.roomId, checkpoint, e); + } + + this.crawlerCheckpoints.push(checkpoint); + } + /** * The main crawler loop. * From f802668fff31587d541bb3059a4b42db5fca4c88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 21 May 2020 10:10:46 +0200 Subject: [PATCH 0084/1504] EventIndex: Add a missing await. --- src/indexing/EventIndex.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/indexing/EventIndex.js b/src/indexing/EventIndex.js index 3f08574d7a..aefe849370 100644 --- a/src/indexing/EventIndex.js +++ b/src/indexing/EventIndex.js @@ -302,7 +302,7 @@ export default class EventIndex extends EventEmitter { avatar_url: ev.sender.getMxcAvatarUrl(), }; - indexManager.addEventToIndex(e, profile); + await indexManager.addEventToIndex(e, profile); } /** From ea35fc2881d8b47261d5f46fe0b3ea9e7f53b594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 21 May 2020 12:35:47 +0200 Subject: [PATCH 0085/1504] EventIndex: Fix some lint issues. --- src/indexing/EventIndex.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/indexing/EventIndex.js b/src/indexing/EventIndex.js index aefe849370..f67738ca68 100644 --- a/src/indexing/EventIndex.js +++ b/src/indexing/EventIndex.js @@ -244,8 +244,8 @@ export default class EventIndex extends EventEmitter { if (room === null) return; if (!MatrixClientPeg.get().isRoomEncrypted(room.roomId)) return; - console.log("EventIndex: Added checkpoint because of a limited timeline", - backwardsCheckpoint); + console.log("EventIndex: Adding a checkpoint because of a limited timeline", + room.roomId); this.addRoomCheckpoint(room.roomId, false); } @@ -314,7 +314,7 @@ export default class EventIndex extends EventEmitter { } async addEventsFromLiveTimeline(timeline) { - let events = timeline.getEvents(); + const events = timeline.getEvents(); for (let i = 0; i < events.length; i++) { const ev = events[i]; @@ -330,9 +330,9 @@ export default class EventIndex extends EventEmitter { if (!room) return; const timeline = room.getLiveTimeline(); - let token = timeline.getPaginationToken("b"); + const token = timeline.getPaginationToken("b"); - if(!token) { + if (!token) { // The room doesn't contain any tokens, meaning the live timeline // contains all the events, add those to the index. await this.addEventsFromLiveTimeline(timeline); @@ -348,7 +348,7 @@ export default class EventIndex extends EventEmitter { console.log("EventIndex: Adding checkpoint", checkpoint); - try{ + try { await indexManager.addCrawlerCheckpoint(checkpoint); } catch (e) { console.log("EventIndex: Error adding new checkpoint for room", From 458bea20bebdbff420643306b0f1217f38964e3a Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Mon, 8 Jun 2020 14:31:53 +0100 Subject: [PATCH 0086/1504] Load correct fonstSize default value --- src/settings/watchers/FontWatcher.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/watchers/FontWatcher.ts b/src/settings/watchers/FontWatcher.ts index 05c707a57b..5527284cd0 100644 --- a/src/settings/watchers/FontWatcher.ts +++ b/src/settings/watchers/FontWatcher.ts @@ -32,7 +32,7 @@ export class FontWatcher implements IWatcher { } public start() { - this.setRootFontSize(SettingsStore.getValue("baseFontSize") + FontWatcher.SIZE_DIFF); + this.setRootFontSize(SettingsStore.getValue("baseFontSize")); this.dispatcherRef = dis.register(this.onAction); } From a7bc722b3fb15fc87abcfb41d0b5be1d1ba5ccc4 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Mon, 8 Jun 2020 14:45:12 +0100 Subject: [PATCH 0087/1504] Use px where images use px width --- src/components/views/rooms/ReadReceiptMarker.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/views/rooms/ReadReceiptMarker.js b/src/components/views/rooms/ReadReceiptMarker.js index 2fe577377d..1c490f019e 100644 --- a/src/components/views/rooms/ReadReceiptMarker.js +++ b/src/components/views/rooms/ReadReceiptMarker.js @@ -23,7 +23,7 @@ import { _t } from '../../../languageHandler'; import {formatDate} from '../../../DateUtils'; import Velociraptor from "../../../Velociraptor"; import * as sdk from "../../../index"; -import {toRem} from "../../../utils/units"; +import {toPx} from "../../../utils/units"; let bounce = false; try { @@ -149,7 +149,7 @@ export default createReactClass({ // start at the old height and in the old h pos startStyles.push({ top: startTopOffset+"px", - left: toRem(oldInfo.left) }); + left: toPx(oldInfo.left) }); const reorderTransitionOpts = { duration: 100, @@ -182,7 +182,7 @@ export default createReactClass({ } const style = { - left: toRem(this.props.leftOffset), + left: toPx(this.props.leftOffset), top: '0px', visibility: this.props.hidden ? 'hidden' : 'visible', }; From de18af35ff58b8ffd4f323a47130ff4f05b331ed Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 08:20:15 -0600 Subject: [PATCH 0088/1504] Support minimum to open user settings to a particular tab Tabs now have IDs, and we use those IDs to open things. This doesn't do any conversion to typescript, and doesn't add the same feature to the room settings out of concern for the size of diff. --- src/components/structures/MatrixChat.tsx | 8 +++-- src/components/structures/TabbedView.tsx | 30 ++++++++----------- src/components/structures/UserMenuButton.tsx | 14 +++++---- .../views/dialogs/RoomSettingsDialog.js | 13 ++++++++ .../views/dialogs/UserSettingsDialog.js | 24 ++++++++++++++- src/dispatcher/actions.ts | 1 + src/dispatcher/payloads/OpenToTabPayload.ts | 27 +++++++++++++++++ 7 files changed, 92 insertions(+), 25 deletions(-) create mode 100644 src/dispatcher/payloads/OpenToTabPayload.ts diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 69f91047b7..e08381d8fa 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -72,6 +72,7 @@ import { hideToast as hideAnalyticsToast } from "../../toasts/AnalyticsToast"; import {showToast as showNotificationsToast} from "../../toasts/DesktopNotificationsToast"; +import { OpenToTabPayload } from "../../dispatcher/payloads/OpenToTabPayload"; /** constants for MatrixChat.state.view */ export enum Views { @@ -604,9 +605,12 @@ export default class MatrixChat extends React.PureComponent { this.viewIndexedRoom(payload.roomIndex); break; case Action.ViewUserSettings: { + const tabPayload = payload as OpenToTabPayload; const UserSettingsDialog = sdk.getComponent("dialogs.UserSettingsDialog"); - Modal.createTrackedDialog('User settings', '', UserSettingsDialog, {}, - /*className=*/null, /*isPriority=*/false, /*isStatic=*/true); + Modal.createTrackedDialog('User settings', '', UserSettingsDialog, + {initialTabId: tabPayload.initialTabId}, + /*className=*/null, /*isPriority=*/false, /*isStatic=*/true + ); // View the welcome or home page if we need something to look at this.viewSomethingBehindModal(); diff --git a/src/components/structures/TabbedView.tsx b/src/components/structures/TabbedView.tsx index c0e0e58db8..704dbf8832 100644 --- a/src/components/structures/TabbedView.tsx +++ b/src/components/structures/TabbedView.tsx @@ -27,25 +27,20 @@ import { ReactNode } from "react"; * Represents a tab for the TabbedView. */ export class Tab { - public label: string; - public icon: string; - public body: React.ReactNode; - /** * Creates a new tab. - * @param {string} tabLabel The untranslated tab label. - * @param {string} tabIconClass The class for the tab icon. This should be a simple mask. - * @param {React.ReactNode} tabJsx The JSX for the tab container. + * @param {string} id The tab's ID. + * @param {string} label The untranslated tab label. + * @param {string} icon The class for the tab icon. This should be a simple mask. + * @param {React.ReactNode} body The JSX for the tab container. */ - constructor(tabLabel: string, tabIconClass: string, tabJsx: React.ReactNode) { - this.label = tabLabel; - this.icon = tabIconClass; - this.body = tabJsx; + constructor(public id: string, public label: string, public icon: string, public body: React.ReactNode) { } } interface IProps { tabs: Tab[]; + initialTabId?: string; } interface IState { @@ -53,16 +48,17 @@ interface IState { } export default class TabbedView extends React.Component { - static propTypes = { - // The tabs to show - tabs: PropTypes.arrayOf(PropTypes.instanceOf(Tab)).isRequired, - }; - constructor(props: IProps) { super(props); + let activeTabIndex = 0; + if (props.initialTabId) { + const tabIndex = props.tabs.findIndex(t => t.id === props.initialTabId); + if (tabIndex >= 0) activeTabIndex = tabIndex; + } + this.state = { - activeTabIndex: 0, + activeTabIndex, }; } diff --git a/src/components/structures/UserMenuButton.tsx b/src/components/structures/UserMenuButton.tsx index abf4689aa1..827a279d98 100644 --- a/src/components/structures/UserMenuButton.tsx +++ b/src/components/structures/UserMenuButton.tsx @@ -23,6 +23,8 @@ import { Action } from "../../dispatcher/actions"; import { createRef } from "react"; import { _t } from "../../languageHandler"; import {ContextMenu, ContextMenuButton} from "./ContextMenu"; +import {USER_NOTIFICATIONS_TAB, USER_SECURITY_TAB} from "../views/dialogs/UserSettingsDialog"; +import { OpenToTabPayload } from "../../dispatcher/payloads/OpenToTabPayload"; interface IProps { } @@ -80,11 +82,13 @@ export default class UserMenuButton extends React.Component { console.log("TODO: Switch theme"); }; - private onSettingsOpen = (ev: React.MouseEvent, tabRef: string) => { + private onSettingsOpen = (ev: React.MouseEvent, tabId: string) => { ev.preventDefault(); ev.stopPropagation(); - console.log("TODO: Open settings", tabRef); + const payload: OpenToTabPayload = {action: Action.ViewUserSettings, initialTabId: tabId}; + defaultDispatcher.dispatch(payload); + this.setState({menuDisplayed: false}); // also close the menu }; private onShowArchived = (ev: React.MouseEvent) => { @@ -147,19 +151,19 @@ export default class UserMenuButton extends React.Component {
      • - this.onSettingsOpen(e, 'notifications')}> + this.onSettingsOpen(e, USER_NOTIFICATIONS_TAB)}> {_t("Notification settings")}
      • - this.onSettingsOpen(e, 'security')}> + this.onSettingsOpen(e, USER_SECURITY_TAB)}> {_t("Security & privacy")}
      • - this.onSettingsOpen(e, 'all')}> + this.onSettingsOpen(e, null)}> {_t("All settings")} diff --git a/src/components/views/dialogs/RoomSettingsDialog.js b/src/components/views/dialogs/RoomSettingsDialog.js index c2b98cd9f3..7ad1001f75 100644 --- a/src/components/views/dialogs/RoomSettingsDialog.js +++ b/src/components/views/dialogs/RoomSettingsDialog.js @@ -30,6 +30,13 @@ import {MatrixClientPeg} from "../../../MatrixClientPeg"; import dis from "../../../dispatcher/dispatcher"; import SettingsStore from "../../../settings/SettingsStore"; +export const ROOM_GENERAL_TAB = "ROOM_GENERAL_TAB"; +export const ROOM_SECURITY_TAB = "ROOM_SECURITY_TAB"; +export const ROOM_ROLES_TAB = "ROOM_ROLES_TAB"; +export const ROOM_NOTIFICATIONS_TAB = "ROOM_NOTIFICATIONS_TAB"; +export const ROOM_BRIDGES_TAB = "ROOM_BRIDGES_TAB"; +export const ROOM_ADVANCED_TAB = "ROOM_ADVANCED_TAB"; + export default class RoomSettingsDialog extends React.Component { static propTypes = { roomId: PropTypes.string.isRequired, @@ -56,21 +63,25 @@ export default class RoomSettingsDialog extends React.Component { const tabs = []; tabs.push(new Tab( + ROOM_GENERAL_TAB, _td("General"), "mx_RoomSettingsDialog_settingsIcon", , )); tabs.push(new Tab( + ROOM_SECURITY_TAB, _td("Security & Privacy"), "mx_RoomSettingsDialog_securityIcon", , )); tabs.push(new Tab( + ROOM_ROLES_TAB, _td("Roles & Permissions"), "mx_RoomSettingsDialog_rolesIcon", , )); tabs.push(new Tab( + ROOM_NOTIFICATIONS_TAB, _td("Notifications"), "mx_RoomSettingsDialog_notificationsIcon", , @@ -78,6 +89,7 @@ export default class RoomSettingsDialog extends React.Component { if (SettingsStore.isFeatureEnabled("feature_bridge_state")) { tabs.push(new Tab( + ROOM_BRIDGES_TAB, _td("Bridges"), "mx_RoomSettingsDialog_bridgesIcon", , @@ -85,6 +97,7 @@ export default class RoomSettingsDialog extends React.Component { } tabs.push(new Tab( + ROOM_ADVANCED_TAB, _td("Advanced"), "mx_RoomSettingsDialog_warningIcon", , diff --git a/src/components/views/dialogs/UserSettingsDialog.js b/src/components/views/dialogs/UserSettingsDialog.js index 4592d921a9..1f1a8d1523 100644 --- a/src/components/views/dialogs/UserSettingsDialog.js +++ b/src/components/views/dialogs/UserSettingsDialog.js @@ -33,9 +33,21 @@ import * as sdk from "../../../index"; import SdkConfig from "../../../SdkConfig"; import MjolnirUserSettingsTab from "../settings/tabs/user/MjolnirUserSettingsTab"; +export const USER_GENERAL_TAB = "USER_GENERAL_TAB"; +export const USER_APPEARANCE_TAB = "USER_APPEARANCE_TAB"; +export const USER_FLAIR_TAB = "USER_FLAIR_TAB"; +export const USER_NOTIFICATIONS_TAB = "USER_NOTIFICATIONS_TAB"; +export const USER_PREFERENCES_TAB = "USER_PREFERENCES_TAB"; +export const USER_VOICE_TAB = "USER_VOICE_TAB"; +export const USER_SECURITY_TAB = "USER_SECURITY_TAB"; +export const USER_LABS_TAB = "USER_LABS_TAB"; +export const USER_MJOLNIR_TAB = "USER_MJOLNIR_TAB"; +export const USER_HELP_TAB = "USER_HELP_TAB"; + export default class UserSettingsDialog extends React.Component { static propTypes = { onFinished: PropTypes.func.isRequired, + initialTabId: PropTypes.string, }; constructor() { @@ -63,42 +75,50 @@ export default class UserSettingsDialog extends React.Component { const tabs = []; tabs.push(new Tab( + USER_GENERAL_TAB, _td("General"), "mx_UserSettingsDialog_settingsIcon", , )); tabs.push(new Tab( + USER_APPEARANCE_TAB, _td("Appearance"), "mx_UserSettingsDialog_appearanceIcon", , )); tabs.push(new Tab( + USER_FLAIR_TAB, _td("Flair"), "mx_UserSettingsDialog_flairIcon", , )); tabs.push(new Tab( + USER_NOTIFICATIONS_TAB, _td("Notifications"), "mx_UserSettingsDialog_bellIcon", , )); tabs.push(new Tab( + USER_PREFERENCES_TAB, _td("Preferences"), "mx_UserSettingsDialog_preferencesIcon", , )); tabs.push(new Tab( + USER_VOICE_TAB, _td("Voice & Video"), "mx_UserSettingsDialog_voiceIcon", , )); tabs.push(new Tab( + USER_SECURITY_TAB, _td("Security & Privacy"), "mx_UserSettingsDialog_securityIcon", , )); if (SdkConfig.get()['showLabsSettings'] || SettingsStore.getLabsFeatures().length > 0) { tabs.push(new Tab( + USER_LABS_TAB, _td("Labs"), "mx_UserSettingsDialog_labsIcon", , @@ -106,12 +126,14 @@ export default class UserSettingsDialog extends React.Component { } if (this.state.mjolnirEnabled) { tabs.push(new Tab( + USER_MJOLNIR_TAB, _td("Ignored users"), "mx_UserSettingsDialog_mjolnirIcon", , )); } tabs.push(new Tab( + USER_HELP_TAB, _td("Help & About"), "mx_UserSettingsDialog_helpIcon", , @@ -127,7 +149,7 @@ export default class UserSettingsDialog extends React.Component {
        - +
        ); diff --git a/src/dispatcher/actions.ts b/src/dispatcher/actions.ts index 60ef61a6e9..c9b5d9e3ad 100644 --- a/src/dispatcher/actions.ts +++ b/src/dispatcher/actions.ts @@ -36,6 +36,7 @@ export enum Action { /** * Open the user settings. No additional payload information required. + * Optionally can include an OpenToTabPayload. */ ViewUserSettings = "view_user_settings", diff --git a/src/dispatcher/payloads/OpenToTabPayload.ts b/src/dispatcher/payloads/OpenToTabPayload.ts new file mode 100644 index 0000000000..2877ee053e --- /dev/null +++ b/src/dispatcher/payloads/OpenToTabPayload.ts @@ -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. +*/ + +import { ActionPayload } from "../payloads"; +import { Action } from "../actions"; + +export interface OpenToTabPayload extends ActionPayload { + action: Action.ViewUserSettings | string, // TODO: Add room settings action + + /** + * The tab ID to open in the settings view to start, if possible. + */ + initialTabId?: string; +} From 7a2bb4b112daec2392f04b64dfc067aeb35af6bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Mon, 8 Jun 2020 16:43:20 +0200 Subject: [PATCH 0089/1504] EventIndex: Check if a newly encrypted room is indexed before adding a checkpoint. --- src/indexing/BaseEventIndexManager.ts | 13 +++++++++++ src/indexing/EventIndex.js | 33 ++++++++++++++++++++------- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/indexing/BaseEventIndexManager.ts b/src/indexing/BaseEventIndexManager.ts index c40d1300ea..32ab3b34fe 100644 --- a/src/indexing/BaseEventIndexManager.ts +++ b/src/indexing/BaseEventIndexManager.ts @@ -134,6 +134,19 @@ export default abstract class BaseEventIndexManager { throw new Error("Unimplemented"); } + /** + * Check if the room with the given id is already indexed. + * + * @param {string} roomId The ID of the room which we want to check if it + * has been already indexed. + * + * @return {Promise} Returns true if the index contains events for + * the given room, false otherwise. + */ + isRoomIndexed(roomId: string): Promise { + throw new Error("Unimplemented"); + } + /** * Get statistical information of the index. * diff --git a/src/indexing/EventIndex.js b/src/indexing/EventIndex.js index f67738ca68..fe7c71cfa6 100644 --- a/src/indexing/EventIndex.js +++ b/src/indexing/EventIndex.js @@ -62,6 +62,7 @@ export default class EventIndex extends EventEmitter { client.on('Event.decrypted', this.onEventDecrypted); client.on('Room.timelineReset', this.onTimelineReset); client.on('Room.redaction', this.onRedaction); + client.on('RoomState.events', this.onRoomStateEvent); } /** @@ -76,6 +77,7 @@ export default class EventIndex extends EventEmitter { client.removeListener('Event.decrypted', this.onEventDecrypted); client.removeListener('Room.timelineReset', this.onTimelineReset); client.removeListener('Room.redaction', this.onRedaction); + client.removeListener('RoomState.events', this.onRoomStateEvent); } /** @@ -182,14 +184,6 @@ export default class EventIndex extends EventEmitter { return; } - if (ev.getType() === "m.room.encryption") { - console.log("EventIndex: Adding checkpoint for newly encrypted room", - room.roomId); - - this.addRoomCheckpoint(room.roomId, true); - return; - } - // If the event is not yet decrypted mark it for the // Event.decrypted callback. if (ev.isBeingDecrypted()) { @@ -202,6 +196,15 @@ export default class EventIndex extends EventEmitter { } } + onRoomStateEvent = async (ev, state) => { + if (!MatrixClientPeg.get().isRoomEncrypted(state.roomId)) return; + + if (ev.getType() === "m.room.encryption" && !await this.isRoomIndexed(state.roomId)) { + console.log("EventIndex: Adding a checkpoint for a newly encrypted room", room.roomId); + this.addRoomCheckpoint(state.roomId, true); + } + } + /* * The Event.decrypted listener. * @@ -847,6 +850,20 @@ export default class EventIndex extends EventEmitter { return indexManager.getStats(); } + /** + * Check if the room with the given id is already indexed. + * + * @param {string} roomId The ID of the room which we want to check if it + * has been already indexed. + * + * @return {Promise} Returns true if the index contains events for + * the given room, false otherwise. + */ + async isRoomIndexed(roomId) { + const indexManager = PlatformPeg.get().getEventIndexingManager(); + return indexManager.isRoomIndexed(roomId); + } + /** * Get the room that we are currently crawling. * From acf78ae475799d955eac3b03017a0278c29ce600 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 09:04:43 -0600 Subject: [PATCH 0090/1504] Wire up the remaining dialogs --- src/components/structures/UserMenuButton.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/structures/UserMenuButton.tsx b/src/components/structures/UserMenuButton.tsx index 827a279d98..35b5cc4d4e 100644 --- a/src/components/structures/UserMenuButton.tsx +++ b/src/components/structures/UserMenuButton.tsx @@ -25,6 +25,9 @@ import { _t } from "../../languageHandler"; import {ContextMenu, ContextMenuButton} from "./ContextMenu"; import {USER_NOTIFICATIONS_TAB, USER_SECURITY_TAB} from "../views/dialogs/UserSettingsDialog"; import { OpenToTabPayload } from "../../dispatcher/payloads/OpenToTabPayload"; +import RedesignFeedbackDialog from "../views/dialogs/RedesignFeedbackDialog"; +import Modal from "../../Modal"; +import LogoutDialog from "../views/dialogs/LogoutDialog"; interface IProps { } @@ -95,6 +98,7 @@ export default class UserMenuButton extends React.Component { ev.preventDefault(); ev.stopPropagation(); + // TODO: Archived room view (deferred) console.log("TODO: Show archived rooms"); }; @@ -102,14 +106,16 @@ export default class UserMenuButton extends React.Component { ev.preventDefault(); ev.stopPropagation(); - console.log("TODO: Show feedback"); + Modal.createTrackedDialog('Report bugs & give feedback', '', RedesignFeedbackDialog); + this.setState({menuDisplayed: false}); // also close the menu }; private onSignOutClick = (ev: React.MouseEvent) => { ev.preventDefault(); ev.stopPropagation(); - console.log("TODO: Sign out"); + Modal.createTrackedDialog('Logout from LeftPanel', '', LogoutDialog); + this.setState({menuDisplayed: false}); // also close the menu }; public render() { From 2c81d3eda84b8da8d1fd259608b9d9a1582c7003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Mon, 8 Jun 2020 17:30:26 +0200 Subject: [PATCH 0091/1504] EventIndex: Use the correct variable to get the room id. --- src/indexing/EventIndex.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/indexing/EventIndex.js b/src/indexing/EventIndex.js index fe7c71cfa6..17c3691bc6 100644 --- a/src/indexing/EventIndex.js +++ b/src/indexing/EventIndex.js @@ -200,7 +200,7 @@ export default class EventIndex extends EventEmitter { if (!MatrixClientPeg.get().isRoomEncrypted(state.roomId)) return; if (ev.getType() === "m.room.encryption" && !await this.isRoomIndexed(state.roomId)) { - console.log("EventIndex: Adding a checkpoint for a newly encrypted room", room.roomId); + console.log("EventIndex: Adding a checkpoint for a newly encrypted room", state.roomId); this.addRoomCheckpoint(state.roomId, true); } } From 94ce23aa4b9e835be45df49d4889f9639592b3b4 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 09:24:08 -0600 Subject: [PATCH 0092/1504] Wire up theme changer --- src/components/structures/UserMenuButton.tsx | 31 ++++++++++++++++++-- src/theme.js | 2 +- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/components/structures/UserMenuButton.tsx b/src/components/structures/UserMenuButton.tsx index 35b5cc4d4e..40b53a35fb 100644 --- a/src/components/structures/UserMenuButton.tsx +++ b/src/components/structures/UserMenuButton.tsx @@ -28,6 +28,8 @@ import { OpenToTabPayload } from "../../dispatcher/payloads/OpenToTabPayload"; import RedesignFeedbackDialog from "../views/dialogs/RedesignFeedbackDialog"; import Modal from "../../Modal"; import LogoutDialog from "../views/dialogs/LogoutDialog"; +import SettingsStore, {SettingLevel} from "../../settings/SettingsStore"; +import {getCustomTheme} from "../../theme"; interface IProps { } @@ -35,10 +37,12 @@ interface IProps { interface IState { user: User; menuDisplayed: boolean; + isDarkTheme: boolean; } export default class UserMenuButton extends React.Component { private dispatcherRef: string; + private themeWatcherRef: string; private buttonRef: React.RefObject = createRef(); constructor(props: IProps) { @@ -47,6 +51,7 @@ export default class UserMenuButton extends React.Component { this.state = { menuDisplayed: false, user: MatrixClientPeg.get().getUser(MatrixClientPeg.get().getUserId()), + isDarkTheme: this.isUserOnDarkTheme(), }; } @@ -62,8 +67,26 @@ export default class UserMenuButton extends React.Component { public componentDidMount() { this.dispatcherRef = defaultDispatcher.register(this.onAction); + this.themeWatcherRef = SettingsStore.watchSetting("theme", null, this.onThemeChanged); } + public componentWillUnmount() { + if (this.themeWatcherRef) SettingsStore.unwatchSetting(this.themeWatcherRef); + if (this.dispatcherRef) defaultDispatcher.unregister(this.dispatcherRef); + } + + private isUserOnDarkTheme(): boolean { + const theme = SettingsStore.getValue("theme"); + if (theme.startsWith("custom-")) { + return getCustomTheme(theme.substring(0, 7)).is_dark; + } + return theme === "dark"; + } + + private onThemeChanged = () => { + this.setState({isDarkTheme: this.isUserOnDarkTheme()}); + }; + private onAction = (ev: ActionPayload) => { if (ev.action !== Action.ToggleUserMenu) return; // not interested @@ -82,7 +105,11 @@ export default class UserMenuButton extends React.Component { }; private onSwitchThemeClick = () => { - console.log("TODO: Switch theme"); + // Disable system theme matching if the user hits this button + SettingsStore.setValue("use_system_theme", null, SettingLevel.DEVICE, false); + + const newTheme = this.state.isDarkTheme ? "light" : "dark"; + SettingsStore.setValue("theme", null, SettingLevel.ACCOUNT, newTheme); }; private onSettingsOpen = (ev: React.MouseEvent, tabId: string) => { @@ -142,7 +169,7 @@ export default class UserMenuButton extends React.Component {
        Date: Mon, 8 Jun 2020 09:32:16 -0600 Subject: [PATCH 0093/1504] Add hosting link --- res/css/structures/_UserMenuButton.scss | 5 ++++ src/components/structures/UserMenuButton.tsx | 27 +++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/res/css/structures/_UserMenuButton.scss b/res/css/structures/_UserMenuButton.scss index aca5f4253a..0d35c1cbb2 100644 --- a/res/css/structures/_UserMenuButton.scss +++ b/res/css/structures/_UserMenuButton.scss @@ -42,6 +42,11 @@ limitations under the License. display: flex; align-items: center; + &:nth-child(n + 1) { + // The first header will have appropriate padding, subsequent ones need a margin. + margin-top: 10px; + } + .mx_UserMenuButton_contextMenu_name { // Create another flexbox of columns to handle large user IDs display: flex; diff --git a/src/components/structures/UserMenuButton.tsx b/src/components/structures/UserMenuButton.tsx index 40b53a35fb..dc4415ea54 100644 --- a/src/components/structures/UserMenuButton.tsx +++ b/src/components/structures/UserMenuButton.tsx @@ -30,6 +30,7 @@ import Modal from "../../Modal"; import LogoutDialog from "../views/dialogs/LogoutDialog"; import SettingsStore, {SettingLevel} from "../../settings/SettingsStore"; import {getCustomTheme} from "../../theme"; +import {getHostingLink} from "../../utils/HostingLink"; interface IProps { } @@ -148,6 +149,28 @@ export default class UserMenuButton extends React.Component { public render() { let contextMenu; if (this.state.menuDisplayed) { + let hostingLink; + const signupLink = getHostingLink("user-context-menu"); + if (signupLink) { + hostingLink = ( +
        + {_t( + "Upgrade to your own domain", {}, + { + a: sub => ( + {sub} + ), + }, + )} +
        + ); + } + const elementRect = this.buttonRef.current.getBoundingClientRect(); contextMenu = ( { />
      -
      - TODO: Upgrade prompt -
      + {hostingLink}
      • From fd8c056200723a3a9e1aa82e5436e93aa1e16b09 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 09:40:03 -0600 Subject: [PATCH 0094/1504] Fix i18n --- src/i18n/strings/en_EN.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 8575b3a258..3520446c2b 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2042,6 +2042,7 @@ "Uploading %(filename)s and %(count)s others|other": "Uploading %(filename)s and %(count)s others", "Uploading %(filename)s and %(count)s others|zero": "Uploading %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Uploading %(filename)s and %(count)s other", + "Switch to light mode": "Switch to light mode", "Switch to dark mode": "Switch to dark mode", "Switch theme": "Switch theme", "Security & privacy": "Security & privacy", From 35ecaff3995751fde12bdc152a65e34fd588d827 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Mon, 8 Jun 2020 16:48:32 +0100 Subject: [PATCH 0095/1504] Move Settings flag to ts --- ...cessibleButton.js => AccessibleButton.tsx} | 65 ++++++++-------- .../{SettingsFlag.js => SettingsFlag.tsx} | 76 ++++++++++++------- .../{ToggleSwitch.js => ToggleSwitch.tsx} | 17 ++--- 3 files changed, 89 insertions(+), 69 deletions(-) rename src/components/views/elements/{AccessibleButton.js => AccessibleButton.tsx} (71%) rename src/components/views/elements/{SettingsFlag.js => SettingsFlag.tsx} (54%) rename src/components/views/elements/{ToggleSwitch.js => ToggleSwitch.tsx} (82%) diff --git a/src/components/views/elements/AccessibleButton.js b/src/components/views/elements/AccessibleButton.tsx similarity index 71% rename from src/components/views/elements/AccessibleButton.js rename to src/components/views/elements/AccessibleButton.tsx index d708a44ab2..f35cd52734 100644 --- a/src/components/views/elements/AccessibleButton.js +++ b/src/components/views/elements/AccessibleButton.tsx @@ -15,7 +15,6 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; import {Key} from '../../../Keyboard'; @@ -27,11 +26,20 @@ import {Key} from '../../../Keyboard'; * @param {Object} props react element properties * @returns {Object} rendered react */ -export default function AccessibleButton(props) { - const {element, onClick, children, kind, disabled, ...restProps} = props; +export default function AccessibleButton({ + element, + onClick, + children, + kind, + disabled, + inputRef, + className, + ...restProps +}: IProps) { + const newProps: IAccessibleButtonProps = restProps; if (!disabled) { - restProps.onClick = onClick; + newProps.onClick = onClick, // We need to consume enter onKeyDown and space onKeyUp // otherwise we are risking also activating other keyboard focusable elements // that might receive focus as a result of the AccessibleButtonClick action @@ -39,7 +47,7 @@ export default function AccessibleButton(props) { // And divs which we report as role button to assistive technologies. // Browsers handle space and enter keypresses differently and we are only adjusting to the // inconsistencies here - restProps.onKeyDown = function(e) { + newProps.onKeyDown = (e) => { if (e.key === Key.ENTER) { e.stopPropagation(); e.preventDefault(); @@ -49,8 +57,8 @@ export default function AccessibleButton(props) { e.stopPropagation(); e.preventDefault(); } - }; - restProps.onKeyUp = function(e) { + }, + newProps.onKeyUp = (e) => { if (e.key === Key.SPACE) { e.stopPropagation(); e.preventDefault(); @@ -60,26 +68,26 @@ export default function AccessibleButton(props) { e.stopPropagation(); e.preventDefault(); } - }; + } } // Pass through the ref - used for keyboard shortcut access to some buttons - restProps.ref = restProps.inputRef; - delete restProps.inputRef; + newProps.ref = inputRef; - restProps.className = (restProps.className ? restProps.className + " " : "") + "mx_AccessibleButton"; + newProps.className = (className ? className + " " : "") + "mx_AccessibleButton"; if (kind) { // We apply a hasKind class to maintain backwards compatibility with // buttons which might not know about kind and break - restProps.className += " mx_AccessibleButton_hasKind mx_AccessibleButton_kind_" + kind; + newProps.className += " mx_AccessibleButton_hasKind mx_AccessibleButton_kind_" + kind; } if (disabled) { - restProps.className += " mx_AccessibleButton_disabled"; - restProps["aria-disabled"] = true; + newProps.className += " mx_AccessibleButton_disabled"; + newProps["aria-disabled"] = true; } + // React.createElement expects InputHTMLAttributes return React.createElement(element, restProps, children); } @@ -89,28 +97,25 @@ export default function AccessibleButton(props) { * onClick: (required) Event handler for button activation. Should be * implemented exactly like a normal onClick handler. */ -AccessibleButton.propTypes = { - children: PropTypes.node, - inputRef: PropTypes.oneOfType([ - // Either a function - PropTypes.func, - // Or the instance of a DOM native element - PropTypes.shape({ current: PropTypes.instanceOf(Element) }), - ]), - element: PropTypes.string, - onClick: PropTypes.func.isRequired, - +interface IProps extends React.InputHTMLAttributes { + inputRef?: React.Ref, + element?: string; // The kind of button, similar to how Bootstrap works. // See available classes for AccessibleButton for options. - kind: PropTypes.string, + kind?: string, // The ARIA role - role: PropTypes.string, + role?: string, // The tabIndex - tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), - - disabled: PropTypes.bool, + tabIndex?: number, + disabled?: boolean, + className?: string, + onClick(e?: React.MouseEvent | React.KeyboardEvent): void; }; +interface IAccessibleButtonProps extends React.InputHTMLAttributes { + ref?: React.Ref, +} + AccessibleButton.defaultProps = { element: 'div', role: 'button', diff --git a/src/components/views/elements/SettingsFlag.js b/src/components/views/elements/SettingsFlag.tsx similarity index 54% rename from src/components/views/elements/SettingsFlag.js rename to src/components/views/elements/SettingsFlag.tsx index 15f17805a8..2ae9bc3d87 100644 --- a/src/components/views/elements/SettingsFlag.js +++ b/src/components/views/elements/SettingsFlag.tsx @@ -21,58 +21,76 @@ import createReactClass from 'create-react-class'; import SettingsStore from "../../../settings/SettingsStore"; import { _t } from '../../../languageHandler'; import ToggleSwitch from "./ToggleSwitch"; +import StyledCheckbox from "./StyledCheckbox"; -export default createReactClass({ - displayName: 'SettingsFlag', - propTypes: { - name: PropTypes.string.isRequired, - level: PropTypes.string.isRequired, - roomId: PropTypes.string, // for per-room settings - label: PropTypes.string, // untranslated - onChange: PropTypes.func, - isExplicit: PropTypes.bool, - }, +interface IProps { + name: string, + level: string, + roomId?: string, // for per-room settings + label?: string, // untranslated + isExplicit: boolean, + // XXX: once design replaces all toggles make this the default + useCheckbox?: boolean, + onChange(checked: boolean): void, +} - getInitialState: function() { - return { +interface IState { + // XXX: make this generic when the settings store is typed + value: any; +} + +export default class SettingsFlag extends React.Component { + + constructor(props: IProps) { + super(props); + + this.state = { value: SettingsStore.getValueAt( this.props.level, this.props.name, this.props.roomId, this.props.isExplicit, ), - }; - }, - - onChange: function(checked) { - if (this.props.group && !checked) return; + } + } + private onChange = (checked: boolean): void => { this.save(checked); this.setState({ value: checked }); if (this.props.onChange) this.props.onChange(checked); - }, + } - save: function(val = undefined) { + private checkBoxOnChange = (e: React.ChangeEvent) => { + this.onChange(e.target.checked); + } + + private save = (val?: any): void => { return SettingsStore.setValue( this.props.name, this.props.roomId, this.props.level, val !== undefined ? val : this.state.value, ); - }, + } - render: function() { + public render() { const canChange = SettingsStore.canSetValue(this.props.name, this.props.roomId, this.props.level); let label = this.props.label; if (!label) label = SettingsStore.getDisplayName(this.props.name, this.props.level); else label = _t(label); - return ( -
        - {label} - -
        - ); - }, -}); + if (this.props.useCheckbox) { + return + {label} + ; + } else { + return ( +
        + {label} + +
        + ); + } + } +} diff --git a/src/components/views/elements/ToggleSwitch.js b/src/components/views/elements/ToggleSwitch.tsx similarity index 82% rename from src/components/views/elements/ToggleSwitch.js rename to src/components/views/elements/ToggleSwitch.tsx index bea1a85555..4cb2fa1ef1 100644 --- a/src/components/views/elements/ToggleSwitch.js +++ b/src/components/views/elements/ToggleSwitch.tsx @@ -15,14 +15,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React from "react"; -import PropTypes from "prop-types"; +import React, { EventHandler } from "react"; import classNames from "classnames"; import * as sdk from "../../../index"; // Controlled Toggle Switch element, written with Accessibility in mind -const ToggleSwitch = ({checked, disabled=false, onChange, ...props}) => { - const _onClick = (e) => { +export default ({checked, disabled=false, onChange, ...props}: IProps) => { + const _onClick = () => { if (disabled) return; onChange(!checked); }; @@ -47,15 +46,13 @@ const ToggleSwitch = ({checked, disabled=false, onChange, ...props}) => { ); }; -ToggleSwitch.propTypes = { +interface IProps { // Whether or not this toggle is in the 'on' position. - checked: PropTypes.bool.isRequired, + checked: boolean, // Whether or not the user can interact with the switch - disabled: PropTypes.bool, + disabled: boolean, // Called when the checked state changes. First argument will be the new state. - onChange: PropTypes.func.isRequired, + onChange(checked: boolean): void, }; - -export default ToggleSwitch; From 26eaef848b7649a7796fabb3ebb668099a6e70f5 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Mon, 8 Jun 2020 16:53:19 +0100 Subject: [PATCH 0096/1504] Use Element instead of HTMLElement --- src/components/views/elements/AccessibleButton.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/views/elements/AccessibleButton.tsx b/src/components/views/elements/AccessibleButton.tsx index f35cd52734..6dcadaf63f 100644 --- a/src/components/views/elements/AccessibleButton.tsx +++ b/src/components/views/elements/AccessibleButton.tsx @@ -97,8 +97,8 @@ export default function AccessibleButton({ * onClick: (required) Event handler for button activation. Should be * implemented exactly like a normal onClick handler. */ -interface IProps extends React.InputHTMLAttributes { - inputRef?: React.Ref, +interface IProps extends React.InputHTMLAttributes { + inputRef?: React.Ref, element?: string; // The kind of button, similar to how Bootstrap works. // See available classes for AccessibleButton for options. @@ -109,11 +109,11 @@ interface IProps extends React.InputHTMLAttributes { tabIndex?: number, disabled?: boolean, className?: string, - onClick(e?: React.MouseEvent | React.KeyboardEvent): void; + onClick(e?: React.MouseEvent | React.KeyboardEvent): void; }; -interface IAccessibleButtonProps extends React.InputHTMLAttributes { - ref?: React.Ref, +interface IAccessibleButtonProps extends React.InputHTMLAttributes { + ref?: React.Ref, } AccessibleButton.defaultProps = { From d6a532040ec60bc2e752703f98276f1b1d92a602 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Mon, 8 Jun 2020 16:57:39 +0100 Subject: [PATCH 0097/1504] lint --- src/components/views/elements/AccessibleButton.tsx | 2 +- src/components/views/elements/ToggleSwitch.tsx | 2 +- src/components/views/rooms/RoomSublist2.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/views/elements/AccessibleButton.tsx b/src/components/views/elements/AccessibleButton.tsx index 6dcadaf63f..ecd4847d0d 100644 --- a/src/components/views/elements/AccessibleButton.tsx +++ b/src/components/views/elements/AccessibleButton.tsx @@ -109,7 +109,7 @@ interface IProps extends React.InputHTMLAttributes { tabIndex?: number, disabled?: boolean, className?: string, - onClick(e?: React.MouseEvent | React.KeyboardEvent): void; + onClick?(e?: React.MouseEvent | React.KeyboardEvent): void; }; interface IAccessibleButtonProps extends React.InputHTMLAttributes { diff --git a/src/components/views/elements/ToggleSwitch.tsx b/src/components/views/elements/ToggleSwitch.tsx index 4cb2fa1ef1..902538052b 100644 --- a/src/components/views/elements/ToggleSwitch.tsx +++ b/src/components/views/elements/ToggleSwitch.tsx @@ -20,7 +20,7 @@ import classNames from "classnames"; import * as sdk from "../../../index"; // Controlled Toggle Switch element, written with Accessibility in mind -export default ({checked, disabled=false, onChange, ...props}: IProps) => { +export default ({checked, disabled = false, onChange, ...props}: IProps) => { const _onClick = () => { if (disabled) return; onChange(!checked); diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index d3bb19729d..590c38931e 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -182,7 +182,7 @@ export default class RoomSublist2 extends React.Component { tabIndex={tabIndex} className={"mx_RoomSubList_label"} role="treeitem" - aria-level="1" + aria-level={1} > {chevron} {this.props.label} From bd58f6ea7bfe77decb86f20bcfa5b696a6240cdc Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Mon, 8 Jun 2020 17:38:07 +0100 Subject: [PATCH 0098/1504] Hide checkbox on dark backgrounds --- res/css/views/elements/_StyledCheckbox.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/res/css/views/elements/_StyledCheckbox.scss b/res/css/views/elements/_StyledCheckbox.scss index 14081f1e99..9cb82349ca 100644 --- a/res/css/views/elements/_StyledCheckbox.scss +++ b/res/css/views/elements/_StyledCheckbox.scss @@ -48,6 +48,8 @@ limitations under the License. border-radius: $border-radius; img { + display: none; + height: 100%; width: 100%; filter: invert(100%); @@ -57,6 +59,10 @@ limitations under the License. &:checked + label > .mx_Checkbox_background { background: $accent-color; border-color: $accent-color; + + img { + display: block; + } } & + label > *:not(.mx_Checkbox_background) { From de4c2fe3d9b2fb09e07daf0ff9190d7f838a98a6 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 11:06:21 -0600 Subject: [PATCH 0099/1504] Use real buttons in user menu --- res/css/structures/_UserMenuButton.scss | 2 +- src/components/structures/UserMenuButton.tsx | 25 ++++++++++---------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/res/css/structures/_UserMenuButton.scss b/res/css/structures/_UserMenuButton.scss index 0d35c1cbb2..1f4183f8d6 100644 --- a/res/css/structures/_UserMenuButton.scss +++ b/res/css/structures/_UserMenuButton.scss @@ -129,7 +129,7 @@ limitations under the License. margin: 0; padding: 20px 0 0; - a { + .mx_AccessibleButton { text-decoration: none; color: $primary-fg-color; font-size: $font-15px; diff --git a/src/components/structures/UserMenuButton.tsx b/src/components/structures/UserMenuButton.tsx index dc4415ea54..d8f96d4a91 100644 --- a/src/components/structures/UserMenuButton.tsx +++ b/src/components/structures/UserMenuButton.tsx @@ -31,6 +31,7 @@ import LogoutDialog from "../views/dialogs/LogoutDialog"; import SettingsStore, {SettingLevel} from "../../settings/SettingsStore"; import {getCustomTheme} from "../../theme"; import {getHostingLink} from "../../utils/HostingLink"; +import AccessibleButton from "../views/elements/AccessibleButton"; interface IProps { } @@ -205,44 +206,44 @@ export default class UserMenuButton extends React.Component { From a10e71edcf675924b3917d989d2fc8cfc803561c Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Mon, 8 Jun 2020 18:17:02 +0100 Subject: [PATCH 0100/1504] Use styled radio buttons for theme selection --- res/css/_components.scss | 1 + .../views/elements/_StyledRadioButton.scss | 88 +++++++++++++++++++ .../tabs/user/_AppearanceUserSettingsTab.scss | 55 ++++++++++++ .../views/elements/StyledRadioButton.tsx | 41 +++++++++ .../tabs/user/AppearanceUserSettingsTab.tsx | 39 ++++---- src/i18n/strings/en_EN.json | 4 +- 6 files changed, 212 insertions(+), 16 deletions(-) create mode 100644 res/css/views/elements/_StyledRadioButton.scss create mode 100644 src/components/views/elements/StyledRadioButton.tsx diff --git a/res/css/_components.scss b/res/css/_components.scss index b047519d99..b1a05b1389 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -115,6 +115,7 @@ @import "./views/elements/_Slider.scss"; @import "./views/elements/_Spinner.scss"; @import "./views/elements/_StyledCheckbox.scss"; +@import "./views/elements/_StyledRadioButton.scss"; @import "./views/elements/_SyntaxHighlight.scss"; @import "./views/elements/_TextWithTooltip.scss"; @import "./views/elements/_ToggleSwitch.scss"; diff --git a/res/css/views/elements/_StyledRadioButton.scss b/res/css/views/elements/_StyledRadioButton.scss new file mode 100644 index 0000000000..03a4cf88eb --- /dev/null +++ b/res/css/views/elements/_StyledRadioButton.scss @@ -0,0 +1,88 @@ +/* +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. +*/ + +/** +* This component expects the parent to specify a positive padding and +* width +*/ + +.mx_RadioButton { + + $radio-circle-color: $muted-fg-color; + $active-radio-circle-color: $accent-color; + // We need to make this element positioned + // so that the radio circle can be absolute + position: relative; + + display: flex; + align-items: center; + flex-grow: 1; + + > span { + flex-grow: 1; + + display: flex; + justify-content: center; + } + + > input[type=radio] { + // Remove the OS's representation + margin: 0; + padding: 0; + display: none; + + + div { + // Necessary to center the following span + position: absolute; + + display: flex; + align-items: center; + justify-content: center; + + box-sizing: border-box; + height: $font-16px; + width: $font-16px; + + border: $font-1-5px solid $radio-circle-color; + border-radius: $font-16px; + + > div { + box-sizing: border-box; + + height: $font-8px; + width: $font-8px; + + border-radius: $font-8px; + } + } + } + + > input[type=radio]:checked { + + div { + > div { + background: $radio-circle-color; + } + } + } + + > input[type=radio]:disabled { + + div { + > div { + display: none; + } + } + } +} diff --git a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss index e82ae3c575..eb73d2ec85 100644 --- a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss +++ b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss @@ -43,3 +43,58 @@ limitations under the License. padding-left: 20px; padding-right: 5px; } + +.mx_AppearanceUserSettingsTab_themeSection { + $radio-bg-color: $input-darker-bg-color; + + > .mx_ThemeSelectors { + display: flex; + flex-direction: row; + + margin-top: 23px; + + > .mx_RadioButton { + padding: $font-16px; + border-radius: 10px; + background: rgba($radio-bg-color, 0.2); + width: 180px; + flex-shrink: 1; + flex-grow: 0; + margin-right: 15px; + } + + > .mx_RadioButton:not([disabled]) { + // These need to be hardcoded because they don't change with the theme + &.mx_ThemeSelector_light { + background-color: #f3f8fd; + color: #2e2f32; + } + + &.mx_ThemeSelector_dark { + background-color: #181b21; + + > input > div { + border-color: $input-darker-bg-color; + > div { + border-color: $input-darker-bg-color; + } + } + } + + &.mx_ThemeSelector_black { + background-color: #000000; + + > input > div { + border-color: $input-darker-bg-color; + > div { + border-color: $input-darker-bg-color; + } + } + } + } + } +} + +.mx_SettingsTab_customFontSizeField { + margin-left: calc($font-16px + 10px); +} diff --git a/src/components/views/elements/StyledRadioButton.tsx b/src/components/views/elements/StyledRadioButton.tsx new file mode 100644 index 0000000000..f1d6fb09cd --- /dev/null +++ b/src/components/views/elements/StyledRadioButton.tsx @@ -0,0 +1,41 @@ +/* +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 classnames from 'classnames'; + +interface IProps extends React.InputHTMLAttributes { +} + +interface IState { +} + +export default class StyledRadioButton extends React.PureComponent { + + public static readonly defaultProps = { + className: '', + } + + public render() { + const { children, className, ...otherProps } = this.props; + return + } +} \ No newline at end of file diff --git a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx index bcd87b290a..9146f4ff20 100644 --- a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx @@ -103,7 +103,7 @@ export default class AppearanceUserSettingsTab extends React.Component): void => { + private onThemeChange = (e: React.ChangeEvent): void => { const newTheme = e.target.value; if (this.state.theme === newTheme) return; @@ -193,17 +193,19 @@ export default class AppearanceUserSettingsTab extends React.Component - + this.onUseSystemThemeChanged(e.target.checked)} + > + {SettingsStore.getDisplayName("use_system_theme")} +
      ; } @@ -250,15 +252,19 @@ export default class AppearanceUserSettingsTab extends React.Component {_t("Theme")} {systemThemeSection} - +
      {orderedThemes.map(theme => { - return ; + return + {theme.name} + ; })} - +
      {customThemeForm}
    @@ -302,7 +308,10 @@ export default class AppearanceUserSettingsTab extends React.Component -
    {_t("Appearance")}
    +
    {_t("Customise your appearance")}
    +
    + {_t("Appearance Settings only affect this Riot session.")} +
    {this.renderThemeSection()} {SettingsStore.isFeatureEnabled("feature_font_scaling") ? this.renderFontSection() : null}
  • diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 0aa4c3779e..46a91b0cb1 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -777,7 +777,8 @@ "Custom theme URL": "Custom theme URL", "Add theme": "Add theme", "Theme": "Theme", - "Appearance": "Appearance", + "Customise your appearance": "Customise your appearance", + "Appearance Settings only affect this Riot session.": "Appearance Settings only affect this Riot session.", "Flair": "Flair", "Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?", "Success": "Success", @@ -1753,6 +1754,7 @@ "Upload %(count)s other files|one": "Upload %(count)s other file", "Cancel All": "Cancel All", "Upload Error": "Upload Error", + "Appearance": "Appearance", "Verify other session": "Verify other session", "Verification Request": "Verification Request", "A widget would like to verify your identity": "A widget would like to verify your identity", From 24cf3d5f05e9b77060baa41bec62747ce9455cd7 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Mon, 8 Jun 2020 18:37:36 +0100 Subject: [PATCH 0101/1504] add key to react list and let selector container wrap --- .../views/settings/tabs/user/_AppearanceUserSettingsTab.scss | 4 +++- .../views/settings/tabs/user/AppearanceUserSettingsTab.tsx | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss index eb73d2ec85..1ecfd71888 100644 --- a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss +++ b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss @@ -50,8 +50,9 @@ limitations under the License. > .mx_ThemeSelectors { display: flex; flex-direction: row; + flex-wrap: wrap; - margin-top: 23px; + margin-top: 13px; > .mx_RadioButton { padding: $font-16px; @@ -61,6 +62,7 @@ limitations under the License. flex-shrink: 1; flex-grow: 0; margin-right: 15px; + margin-top: 10px; } > .mx_RadioButton:not([disabled]) { diff --git a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx index 9146f4ff20..3d19241f42 100644 --- a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx @@ -255,6 +255,7 @@ export default class AppearanceUserSettingsTab extends React.Component {orderedThemes.map(theme => { return Date: Mon, 8 Jun 2020 19:02:36 +0100 Subject: [PATCH 0102/1504] Clean up font scaling appearance --- .../settings/tabs/user/_AppearanceUserSettingsTab.scss | 4 ++++ .../views/settings/tabs/user/AppearanceUserSettingsTab.tsx | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss index e82ae3c575..7308bb7177 100644 --- a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss +++ b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss @@ -43,3 +43,7 @@ limitations under the License. padding-left: 20px; padding-right: 5px; } + +.mx_SettingsTab_customFontSizeField { + margin-left: calc($font-16px + 10px); +} diff --git a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx index 2b58e0e28e..e7f22d5ea2 100644 --- a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx @@ -281,7 +281,7 @@ export default class AppearanceUserSettingsTab extends React.Component ""} + displayFunc={_ => ""} disabled={this.state.useCustomFontSize} />
    Aa
    @@ -290,9 +290,10 @@ export default class AppearanceUserSettingsTab extends React.Component this.setState({useCustomFontSize: checked})} + useCheckbox={true} /> this.setState({fontSize: value.target.value})} disabled={!this.state.useCustomFontSize} + className="mx_SettingsTab_customFontSizeField" />
    ; } From 21c8611300e27ef6d731b6f60a4b5b21115165d9 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 12:14:10 -0600 Subject: [PATCH 0103/1504] Convert FormattingUtils to TypeScript and add badge utility function The new function is to be used in the new room list. --- ...{FormattingUtils.js => FormattingUtils.ts} | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) rename src/utils/{FormattingUtils.js => FormattingUtils.ts} (81%) diff --git a/src/utils/FormattingUtils.js b/src/utils/FormattingUtils.ts similarity index 81% rename from src/utils/FormattingUtils.js rename to src/utils/FormattingUtils.ts index b932214530..ed1727d190 100644 --- a/src/utils/FormattingUtils.js +++ b/src/utils/FormattingUtils.ts @@ -1,6 +1,6 @@ /* Copyright 2016 OpenMarket Ltd -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 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. @@ -21,8 +21,8 @@ import { _t } from '../languageHandler'; * formats numbers to fit into ~3 characters, suitable for badge counts * e.g: 999, 9.9K, 99K, 0.9M, 9.9M, 99M, 0.9B, 9.9B */ -export function formatCount(count) { - if (count < 1000) return count; +export function formatCount(count: number): string { + if (count < 1000) return count.toString(); if (count < 10000) return (count / 1000).toFixed(1) + "K"; if (count < 100000) return (count / 1000).toFixed(0) + "K"; if (count < 10000000) return (count / 1000000).toFixed(1) + "M"; @@ -34,7 +34,7 @@ export function formatCount(count) { * Format a count showing the whole number but making it a bit more readable. * e.g: 1000 => 1,000 */ -export function formatCountLong(count) { +export function formatCountLong(count: number): string { const formatter = new Intl.NumberFormat(); return formatter.format(count) } @@ -43,7 +43,7 @@ export function formatCountLong(count) { * format a size in bytes into a human readable form * e.g: 1024 -> 1.00 KB */ -export function formatBytes(bytes, decimals = 2) { +export function formatBytes(bytes: number, decimals = 2): string { if (bytes === 0) return '0 Bytes'; const k = 1024; @@ -62,7 +62,7 @@ export function formatBytes(bytes, decimals = 2) { * * @return {string} */ -export function formatCryptoKey(key) { +export function formatCryptoKey(key: string): string { return key.match(/.{1,4}/g).join(" "); } /** @@ -72,7 +72,7 @@ export function formatCryptoKey(key) { * * @return {number} */ -export function hashCode(str) { +export function hashCode(str: string): number { let hash = 0; let i; let chr; @@ -87,7 +87,7 @@ export function hashCode(str) { return Math.abs(hash); } -export function getUserNameColorClass(userId) { +export function getUserNameColorClass(userId: string): string { const colorNumber = (hashCode(userId) % 8) + 1; return `mx_Username_color${colorNumber}`; } @@ -103,7 +103,7 @@ export function getUserNameColorClass(userId) { * @returns {string} a string constructed by joining `items` with a comma * between each item, but with the last item appended as " and [lastItem]". */ -export function formatCommaSeparatedList(items, itemLimit) { +export function formatCommaSeparatedList(items: string[], itemLimit?: number): string { const remaining = itemLimit === undefined ? 0 : Math.max( items.length - itemLimit, 0, ); @@ -119,3 +119,13 @@ export function formatCommaSeparatedList(items, itemLimit) { return _t("%(items)s and %(lastItem)s", { items: items.join(', '), lastItem: lastItem }); } } + +/** + * Formats a number into a 'minimal' badge count (9, 99, 99+). + * @param count The number to convert + * @returns The badge count, stringified. + */ +export function formatMinimalBadgeCount(count: number): string { + if (count < 100) return count.toString(); + return "99+"; +} From 086b9101fa8720f698644b934e6886ad1563e567 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 13:42:18 -0600 Subject: [PATCH 0104/1504] Add sublist badge counts to new room list Also add IDLE state to rooms --- res/css/_components.scss | 1 + res/css/views/rooms/_NotificationBadge.scss | 72 +++++ res/css/views/rooms/_RoomSublist2.scss | 35 ++- res/css/views/rooms/_RoomTile2.scss | 34 +-- .../views/rooms/NotificationBadge.tsx | 279 ++++++++++++++++++ src/components/views/rooms/RoomSublist2.tsx | 64 ++-- src/components/views/rooms/RoomTile2.tsx | 109 +------ 7 files changed, 408 insertions(+), 186 deletions(-) create mode 100644 res/css/views/rooms/_NotificationBadge.scss create mode 100644 src/components/views/rooms/NotificationBadge.tsx diff --git a/res/css/_components.scss b/res/css/_components.scss index 62bec5ad62..61e3018725 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -170,6 +170,7 @@ @import "./views/rooms/_MemberList.scss"; @import "./views/rooms/_MessageComposer.scss"; @import "./views/rooms/_MessageComposerFormatBar.scss"; +@import "./views/rooms/_NotificationBadge.scss"; @import "./views/rooms/_PinnedEventTile.scss"; @import "./views/rooms/_PinnedEventsPanel.scss"; @import "./views/rooms/_PresenceLabel.scss"; diff --git a/res/css/views/rooms/_NotificationBadge.scss b/res/css/views/rooms/_NotificationBadge.scss new file mode 100644 index 0000000000..609e41c583 --- /dev/null +++ b/res/css/views/rooms/_NotificationBadge.scss @@ -0,0 +1,72 @@ +/* +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_NotificationBadge { + &:not(.mx_NotificationBadge_visible) { + display: none; + } + + // Badges are structured a bit weirdly to work around issues with non-monospace + // font styles. The badge pill is actually a background div and the count floats + // within that. For example: + // + // ( 99+ ) <-- Rounded pill is a _bg class. + // ^- The count is an element floating within that. + + &.mx_NotificationBadge_visible { + background-color: $roomtile2-badge-color; + margin-right: 14px; + + // Create a flexbox to order the count a bit easier + display: flex; + align-items: center; + justify-content: center; + + &.mx_NotificationBadge_highlighted { + // TODO: Use a more specific variable + background-color: $warning-color; + } + + // These are the 3 background types + + &.mx_NotificationBadge_dot { + width: 6px; + height: 6px; + border-radius: 6px; + margin-right: 18px; + } + + &.mx_NotificationBadge_2char { + width: 16px; + height: 16px; + border-radius: 16px; + } + + &.mx_NotificationBadge_3char { + width: 26px; + height: 16px; + border-radius: 16px; + } + + // The following is the floating badge + + .mx_NotificationBadge_count { + font-size: $font-10px; + line-height: $font-14px; + color: #fff; // TODO: Variable + } + } +} diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index e6e5af3b48..cfb9bc3b6d 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -30,11 +30,36 @@ limitations under the License. margin-bottom: 12px; .mx_RoomSublist2_headerContainer { - text-transform: uppercase; - opacity: 0.5; - line-height: $font-16px; - font-size: $font-12px; - padding-bottom: 8px; + // Create a flexbox to make ordering easy + display: flex; + align-items: center; + + .mx_RoomSublist2_badgeContainer { + opacity: 0.8; + padding-right: 7px; + + // Create another flexbox row because it's super easy to position the badge at + // the end this way. + display: flex; + align-items: center; + justify-content: flex-end; + } + + .mx_RoomSublist2_headerText { + text-transform: uppercase; + opacity: 0.5; + line-height: $font-16px; + font-size: $font-12px; + padding-bottom: 8px; + + width: 100%; + flex: 1; + + // Ellipsize any text overflow + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } } .mx_RoomSublist2_resizeBox { diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index 3151bb8716..41c9469bc1 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -50,11 +50,14 @@ limitations under the License. // TODO: Ellipsis on the name and preview .mx_RoomTile2_name { - font-weight: 600; font-size: $font-14px; line-height: $font-19px; } + .mx_RoomTile2_name.mx_RoomTile2_nameHasUnreadEvents { + font-weight: 600; + } + .mx_RoomTile2_messagePreview { font-size: $font-13px; line-height: $font-18px; @@ -70,34 +73,5 @@ limitations under the License. display: flex; align-items: center; justify-content: flex-end; - - .mx_RoomTile2_badge { - background-color: $roomtile2-badge-color; - - &:not(.mx_RoomTile2_badgeEmpty) { - border-radius: 16px; - font-size: $font-10px; - line-height: $font-14px; - text-align: center; - font-weight: bold; - margin-right: 14px; - color: #fff; // TODO: Variable - - // TODO: Confirm padding on counted badges - padding: 2px 5px; - } - - &.mx_RoomTile2_badgeEmpty { - width: 6px; - height: 6px; - border-radius: 6px; - margin-right: 18px; - } - - &.mx_RoomTile2_badgeHighlight { - // TODO: Use a more specific variable - background-color: $warning-color; - } - } } } diff --git a/src/components/views/rooms/NotificationBadge.tsx b/src/components/views/rooms/NotificationBadge.tsx new file mode 100644 index 0000000000..a77d2fc8d0 --- /dev/null +++ b/src/components/views/rooms/NotificationBadge.tsx @@ -0,0 +1,279 @@ +/* +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 classNames from "classnames"; +import { formatMinimalBadgeCount } from "../../../utils/FormattingUtils"; +import { Room } from "matrix-js-sdk/src/models/room"; +import { RovingTabIndexWrapper } from "../../../accessibility/RovingTabIndex"; +import AccessibleButton from "../../views/elements/AccessibleButton"; +import RoomAvatar from "../../views/avatars/RoomAvatar"; +import dis from '../../../dispatcher/dispatcher'; +import { Key } from "../../../Keyboard"; +import * as RoomNotifs from '../../../RoomNotifs'; +import { EffectiveMembership, getEffectiveMembership } from "../../../stores/room-list/membership"; +import * as Unread from '../../../Unread'; +import { MatrixClientPeg } from "../../../MatrixClientPeg"; +import { MatrixEvent } from "matrix-js-sdk/src/models/event"; +import ActiveRoomObserver from "../../../ActiveRoomObserver"; +import { EventEmitter } from "events"; +import { arrayDiff } from "../../../utils/arrays"; + +export const NOTIFICATION_STATE_UPDATE = "update"; + +export enum NotificationColor { + // Inverted (None -> Red) because we do integer comparisons on this + None, // nothing special + Bold, // no badge, show as unread + Grey, // unread notified messages + Red, // unread pings +} + +export interface INotificationState extends EventEmitter { + symbol?: string; + count: number; + color: NotificationColor; +} + +interface IProps { + notification: INotificationState; + + /** + * If true, the badge will conditionally display a badge without count for the user. + */ + allowNoCount: boolean; +} + +interface IState { +} + +export default class NotificationBadge extends React.PureComponent { + constructor(props: IProps) { + super(props); + this.props.notification.on(NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate); + } + + public componentDidUpdate(prevProps: Readonly) { + if (prevProps.notification) { + prevProps.notification.off(NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate); + } + + this.props.notification.on(NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate); + } + + private onNotificationUpdate = () => { + this.forceUpdate(); // notification state changed - update + }; + + public render(): React.ReactElement { + // Don't show a badge if we don't need to + if (this.props.notification.color <= NotificationColor.Bold) return null; + + const hasNotif = this.props.notification.color >= NotificationColor.Red; + const hasCount = this.props.notification.color >= NotificationColor.Grey; + const isEmptyBadge = this.props.allowNoCount && !localStorage.getItem("mx_rl_rt_badgeCount"); + + let symbol = this.props.notification.symbol || formatMinimalBadgeCount(this.props.notification.count); + if (isEmptyBadge) symbol = ""; + + const classes = classNames({ + 'mx_NotificationBadge': true, + 'mx_NotificationBadge_visible': hasCount, + 'mx_NotificationBadge_highlighted': hasNotif, + 'mx_NotificationBadge_dot': isEmptyBadge, + 'mx_NotificationBadge_2char': symbol.length > 0 && symbol.length < 3, + 'mx_NotificationBadge_3char': symbol.length > 2, + }); + + return ( +
    + {symbol} +
    + ); + } +} + +export class RoomNotificationState extends EventEmitter { + private _symbol: string; + private _count: number; + private _color: NotificationColor; + + constructor(private room: Room) { + super(); + this.room.on("Room.receipt", this.handleRoomEventUpdate); + this.room.on("Room.timeline", this.handleRoomEventUpdate); + this.room.on("Room.redaction", this.handleRoomEventUpdate); + MatrixClientPeg.get().on("Event.decrypted", this.handleRoomEventUpdate); + this.updateNotificationState(); + } + + public get symbol(): string { + return this._symbol; + } + + public get count(): number { + return this._count; + } + + public get color(): NotificationColor { + return this._color; + } + + private get roomIsInvite(): boolean { + return getEffectiveMembership(this.room.getMyMembership()) === EffectiveMembership.Invite; + } + + public dispose(): void { + this.room.removeListener("Room.receipt", this.handleRoomEventUpdate); + this.room.removeListener("Room.timeline", this.handleRoomEventUpdate); + this.room.removeListener("Room.redaction", this.handleRoomEventUpdate); + if (MatrixClientPeg.get()) { + MatrixClientPeg.get().removeListener("Event.decrypted", this.handleRoomEventUpdate); + } + } + + private handleRoomEventUpdate = (event: MatrixEvent) => { + const roomId = event.getRoomId(); + + if (roomId !== this.room.roomId) return; // ignore - not for us + this.updateNotificationState(); + }; + + private updateNotificationState() { + const before = {count: this.count, symbol: this.symbol, color: this.color}; + + if (this.roomIsInvite) { + this._color = NotificationColor.Red; + this._symbol = "!"; + this._count = 1; // not used, technically + } else { + const redNotifs = RoomNotifs.getUnreadNotificationCount(this.room, 'highlight'); + const greyNotifs = RoomNotifs.getUnreadNotificationCount(this.room, 'total'); + + // For a 'true count' we pick the grey notifications first because they include the + // red notifications. If we don't have a grey count for some reason we use the red + // count. If that count is broken for some reason, assume zero. This avoids us showing + // a badge for 'NaN' (which formats as 'NaNB' for NaN Billion). + const trueCount = greyNotifs ? greyNotifs : (redNotifs ? redNotifs : 0); + + // Note: we only set the symbol if we have an actual count. We don't want to show + // zero on badges. + + if (redNotifs > 0) { + this._color = NotificationColor.Red; + this._count = trueCount; + this._symbol = null; // symbol calculated by component + } else if (greyNotifs > 0) { + this._color = NotificationColor.Grey; + this._count = trueCount; + this._symbol = null; // symbol calculated by component + } else { + // We don't have any notified messages, but we might have unread messages. Let's + // find out. + const hasUnread = Unread.doesRoomHaveUnreadMessages(this.room); + if (hasUnread) { + this._color = NotificationColor.Bold; + } else { + this._color = NotificationColor.None; + } + + // no symbol or count for this state + this._count = 0; + this._symbol = null; + } + } + + // finally, publish an update if needed + const after = {count: this.count, symbol: this.symbol, color: this.color}; + if (JSON.stringify(before) !== JSON.stringify(after)) { + this.emit(NOTIFICATION_STATE_UPDATE); + } + } +} + +export class ListNotificationState extends EventEmitter { + private _count: number; + private _color: NotificationColor; + private rooms: Room[] = []; + private states: { [roomId: string]: RoomNotificationState } = {}; + + constructor(private byTileCount = false) { + super(); + } + + public get symbol(): string { + return null; // This notification state doesn't support symbols + } + + public get count(): number { + return this._count; + } + + public get color(): NotificationColor { + return this._color; + } + + public setRooms(rooms: Room[]) { + // If we're only concerned about the tile count, don't bother setting up listeners. + if (this.byTileCount) { + this.rooms = rooms; + this.calculateTotalState(); + return; + } + + const oldRooms = this.rooms; + const diff = arrayDiff(oldRooms, rooms); + for (const oldRoom of diff.removed) { + const state = this.states[oldRoom.roomId]; + delete this.states[oldRoom.roomId]; + state.off(NOTIFICATION_STATE_UPDATE, this.onRoomNotificationStateUpdate); + state.dispose(); + } + for (const newRoom of diff.added) { + const state = new RoomNotificationState(newRoom); + state.on(NOTIFICATION_STATE_UPDATE, this.onRoomNotificationStateUpdate); + this.states[newRoom.roomId] = state; + } + + this.calculateTotalState(); + } + + private onRoomNotificationStateUpdate = () => { + this.calculateTotalState(); + }; + + private calculateTotalState() { + const before = {count: this.count, symbol: this.symbol, color: this.color}; + + if (this.byTileCount) { + this._color = NotificationColor.Red; + this._count = this.rooms.length; + } else { + this._count = 0; + this._color = NotificationColor.None; + for (const state of Object.values(this.states)) { + this._count += state.count; + this._color = Math.max(this.color, state.color); + } + } + + // finally, publish an update if needed + const after = {count: this.count, symbol: this.symbol, color: this.color}; + if (JSON.stringify(before) !== JSON.stringify(after)) { + this.emit(NOTIFICATION_STATE_UPDATE); + } + } +} diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 650a3ae645..cd27156cbd 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -26,7 +26,7 @@ import AccessibleButton from "../../views/elements/AccessibleButton"; import RoomTile2 from "./RoomTile2"; import { ResizableBox, ResizeCallbackData } from "react-resizable"; import { ListLayout } from "../../../stores/room-list/ListLayout"; -import { DefaultTagID, TagID } from "../../../stores/room-list/models"; +import NotificationBadge, { ListNotificationState } from "./NotificationBadge"; /******************************************************************* * CAUTION * @@ -56,13 +56,19 @@ interface IProps { } interface IState { + notificationState: ListNotificationState; } export default class RoomSublist2 extends React.Component { private headerButton = createRef(); - private hasTiles(): boolean { - return this.numTiles > 0; + constructor(props: IProps) { + super(props); + + this.state = { + notificationState: new ListNotificationState(this.props.isInvite), + }; + this.state.notificationState.setRooms(this.props.rooms); } private get numTiles(): number { @@ -70,6 +76,10 @@ export default class RoomSublist2 extends React.Component { return (this.props.rooms || []).length; } + public componentDidUpdate() { + this.state.notificationState.setRooms(this.props.rooms); + } + private onAddRoom = (e) => { e.stopPropagation(); if (this.props.onAddRoom) this.props.onAddRoom(); @@ -106,13 +116,6 @@ export default class RoomSublist2 extends React.Component { } private renderHeader(): React.ReactElement { - // TODO: Handle badge count - // const notifications = !this.props.isInvite - // ? RoomNotifs.aggregateNotificationCount(this.props.rooms) - // : {count: 0, highlight: true}; - // const notifCount = notifications.count; - // const notifHighlight = notifications.highlight; - // TODO: Title on collapsed // TODO: Incoming call box @@ -123,42 +126,8 @@ export default class RoomSublist2 extends React.Component { const tabIndex = isActive ? 0 : -1; // TODO: Collapsed state - // TODO: Handle badge count - // let badge; - // if (true) { // !isCollapsed - // const showCount = localStorage.getItem("mx_rls_count") || notifHighlight; - // const badgeClasses = classNames({ - // 'mx_RoomSublist2_badge': true, - // 'mx_RoomSublist2_badgeHighlight': notifHighlight, - // 'mx_RoomSublist2_badgeEmpty': !showCount, - // }); - // // Wrap the contents in a div and apply styles to the child div so that the browser default outline works - // if (notifCount > 0) { - // const count =
    {FormattingUtils.formatCount(notifCount)}
    ; - // badge = ( - // - // {showCount ? count : null} - // - // ); - // } else if (this.props.isInvite && this.hasTiles()) { - // // Render the `!` badge for invites - // badge = ( - // - //
    - // {FormattingUtils.formatCount(this.numTiles)} - //
    - //
    - // ); - // } - // } + + const badge = ; // TODO: Aux button // let addRoomButton = null; @@ -185,6 +154,9 @@ export default class RoomSublist2 extends React.Component { > {this.props.label}
    +
    + {badge} +
    ); }} diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 09d7b46ba5..d4f64e4571 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -25,13 +25,8 @@ import AccessibleButton from "../../views/elements/AccessibleButton"; import RoomAvatar from "../../views/avatars/RoomAvatar"; import dis from '../../../dispatcher/dispatcher'; import { Key } from "../../../Keyboard"; -import * as RoomNotifs from '../../../RoomNotifs'; -import { EffectiveMembership, getEffectiveMembership } from "../../../stores/room-list/membership"; -import * as Unread from '../../../Unread'; -import * as FormattingUtils from "../../../utils/FormattingUtils"; -import { MatrixClientPeg } from "../../../MatrixClientPeg"; -import { MatrixEvent } from "matrix-js-sdk/src/models/event"; import ActiveRoomObserver from "../../../ActiveRoomObserver"; +import NotificationBadge, { INotificationState, NotificationColor, RoomNotificationState } from "./NotificationBadge"; /******************************************************************* * CAUTION * @@ -41,14 +36,6 @@ import ActiveRoomObserver from "../../../ActiveRoomObserver"; * warning disappears. * *******************************************************************/ -enum NotificationColor { - // Inverted (None -> Red) because we do integer comparisons on this - None, // nothing special - Bold, // no badge, show as unread - Grey, // unread notified messages - Red, // unread pings -} - interface IProps { room: Room; showMessagePreview: boolean; @@ -58,11 +45,6 @@ interface IProps { // TODO: Incoming call boxes? } -interface INotificationState { - symbol: string; - color: NotificationColor; -} - interface IState { hover: boolean; notificationState: INotificationState; @@ -88,89 +70,17 @@ export default class RoomTile2 extends React.Component { this.state = { hover: false, - notificationState: this.getNotificationState(), + notificationState: new RoomNotificationState(this.props.room), selected: ActiveRoomObserver.activeRoomId === this.props.room.roomId, }; - this.props.room.on("Room.receipt", this.handleRoomEventUpdate); - this.props.room.on("Room.timeline", this.handleRoomEventUpdate); - this.props.room.on("Room.redaction", this.handleRoomEventUpdate); - MatrixClientPeg.get().on("Event.decrypted", this.handleRoomEventUpdate); ActiveRoomObserver.addListener(this.props.room.roomId, this.onActiveRoomUpdate); } public componentWillUnmount() { if (this.props.room) { - this.props.room.removeListener("Room.receipt", this.handleRoomEventUpdate); - this.props.room.removeListener("Room.timeline", this.handleRoomEventUpdate); - this.props.room.removeListener("Room.redaction", this.handleRoomEventUpdate); ActiveRoomObserver.removeListener(this.props.room.roomId, this.onActiveRoomUpdate); } - if (MatrixClientPeg.get()) { - MatrixClientPeg.get().removeListener("Event.decrypted", this.handleRoomEventUpdate); - } - } - - // XXX: This is a bit of an awful-looking hack. We should probably be using state for - // this, but instead we're kinda forced to either duplicate the code or thread a variable - // through the code paths. This feels like the least evil option. - private get roomIsInvite(): boolean { - return getEffectiveMembership(this.props.room.getMyMembership()) === EffectiveMembership.Invite; - } - - private handleRoomEventUpdate = (event: MatrixEvent) => { - const roomId = event.getRoomId(); - - // Sanity check: should never happen - if (roomId !== this.props.room.roomId) return; - - this.updateNotificationState(); - }; - - private updateNotificationState() { - this.setState({notificationState: this.getNotificationState()}); - } - - private getNotificationState(): INotificationState { - const state: INotificationState = { - color: NotificationColor.None, - symbol: null, - }; - - if (this.roomIsInvite) { - state.color = NotificationColor.Red; - state.symbol = "!"; - } else { - const redNotifs = RoomNotifs.getUnreadNotificationCount(this.props.room, 'highlight'); - const greyNotifs = RoomNotifs.getUnreadNotificationCount(this.props.room, 'total'); - - // For a 'true count' we pick the grey notifications first because they include the - // red notifications. If we don't have a grey count for some reason we use the red - // count. If that count is broken for some reason, assume zero. This avoids us showing - // a badge for 'NaN' (which formats as 'NaNB' for NaN Billion). - const trueCount = greyNotifs ? greyNotifs : (redNotifs ? redNotifs : 0); - - // Note: we only set the symbol if we have an actual count. We don't want to show - // zero on badges. - - if (redNotifs > 0) { - state.color = NotificationColor.Red; - state.symbol = FormattingUtils.formatCount(trueCount); - } else if (greyNotifs > 0) { - state.color = NotificationColor.Grey; - state.symbol = FormattingUtils.formatCount(trueCount); - } else { - // We don't have any notified messages, but we might have unread messages. Let's - // find out. - const hasUnread = Unread.doesRoomHaveUnreadMessages(this.props.room); - if (hasUnread) { - state.color = NotificationColor.Bold; - // no symbol for this state - } - } - } - - return state; } private onTileMouseEnter = () => { @@ -206,19 +116,7 @@ export default class RoomTile2 extends React.Component { 'mx_RoomTile2_selected': this.state.selected, }); - let badge; - const hasBadge = this.state.notificationState.color > NotificationColor.Bold; - if (hasBadge) { - const hasNotif = this.state.notificationState.color >= NotificationColor.Red; - const isEmptyBadge = !localStorage.getItem("mx_rl_rt_badgeCount"); - const badgeClasses = classNames({ - 'mx_RoomTile2_badge': true, - 'mx_RoomTile2_badgeHighlight': hasNotif, - 'mx_RoomTile2_badgeEmpty': isEmptyBadge, - }); - const symbol = this.state.notificationState.symbol; - badge =
    {isEmptyBadge ? null : symbol}
    ; - } + const badge = ; // TODO: the original RoomTile uses state for the room name. Do we need to? let name = this.props.room.name; @@ -237,6 +135,7 @@ export default class RoomTile2 extends React.Component { const nameClasses = classNames({ "mx_RoomTile2_name": true, "mx_RoomTile2_nameWithPreview": !!messagePreview, + "mx_RoomTile2_nameHasUnreadEvents": this.state.notificationState.color >= NotificationColor.Bold, }); const avatarSize = 32; From 0354bf9b6d432354c4c11f376a1c82b4a9705e0e Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 17:11:58 -0600 Subject: [PATCH 0105/1504] Reimplement breadcrumbs for new room list This all-new component handles breadcrumbs a bit more smoothly for the app by always listening to changes even if the component isn't present. This allows the breadcrumbs to remain up to date for when the user re-enables breadcrumbs. The new behaviour is that we turn breadcrumbs on once the user has a room, and we don't turn it back off for them. This also introduces a new animation which is more stable and not laggy, though instead of sliding the breadcrumbs pop. This might be undesirable - to be reviewed. --- res/css/_components.scss | 1 + res/css/structures/_LeftPanel2.scss | 2 +- res/css/views/rooms/_RoomBreadcrumbs2.scss | 53 ++++++ src/components/structures/LeftPanel2.tsx | 34 +++- .../views/rooms/RoomBreadcrumbs2.tsx | 90 ++++++++++ src/i18n/strings/en_EN.json | 1 + src/settings/SettingsStore.js | 2 + src/stores/AsyncStoreWithClient.ts | 53 ++++++ src/stores/BreadcrumbsStore.ts | 154 ++++++++++++++++++ 9 files changed, 384 insertions(+), 6 deletions(-) create mode 100644 res/css/views/rooms/_RoomBreadcrumbs2.scss create mode 100644 src/components/views/rooms/RoomBreadcrumbs2.tsx create mode 100644 src/stores/AsyncStoreWithClient.ts create mode 100644 src/stores/BreadcrumbsStore.ts diff --git a/res/css/_components.scss b/res/css/_components.scss index 62bec5ad62..8958aee2fc 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -175,6 +175,7 @@ @import "./views/rooms/_PresenceLabel.scss"; @import "./views/rooms/_ReplyPreview.scss"; @import "./views/rooms/_RoomBreadcrumbs.scss"; +@import "./views/rooms/_RoomBreadcrumbs2.scss"; @import "./views/rooms/_RoomDropTarget.scss"; @import "./views/rooms/_RoomHeader.scss"; @import "./views/rooms/_RoomList.scss"; diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index 822a5ac399..502ed18a87 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -76,9 +76,9 @@ $roomListMinimizedWidth: 50px; } .mx_LeftPanel2_breadcrumbsContainer { - // TODO: Improve CSS for breadcrumbs (currently shoved into the view rather than placed) width: 100%; overflow: hidden; + margin-top: 8px; } } diff --git a/res/css/views/rooms/_RoomBreadcrumbs2.scss b/res/css/views/rooms/_RoomBreadcrumbs2.scss new file mode 100644 index 0000000000..aa0b0ecb08 --- /dev/null +++ b/res/css/views/rooms/_RoomBreadcrumbs2.scss @@ -0,0 +1,53 @@ +/* +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. +*/ + +@keyframes breadcrumb-popin { + 0% { + // Ideally we'd use `width` instead of `opacity`, but we only + // have 16 nanoseconds to render the frame, and width is expensive. + opacity: 0; + transform: scale(0); + } + 100% { + opacity: 1; + transform: scale(1); + } +} + +.mx_RoomBreadcrumbs2 { + // Create a flexbox for the crumbs + display: flex; + flex-direction: row; + align-items: flex-start; + width: 100%; + + .mx_RoomBreadcrumbs2_crumb { + margin-right: 8px; + width: 32px; + + // React loves to add elements, so only target the one we want to animate + &:first-child { + animation: breadcrumb-popin 0.3s; + } + } + + .mx_RoomBreadcrumbs2_placeholder { + font-weight: 600; + font-size: $font-14px; + line-height: 32px; // specifically to match the height this is not scaled + height: 32px; + } +} diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index c66c0a6799..b42da0be09 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -26,7 +26,9 @@ import TopLeftMenuButton from "./TopLeftMenuButton"; import { Action } from "../../dispatcher/actions"; import { MatrixClientPeg } from "../../MatrixClientPeg"; import BaseAvatar from '../views/avatars/BaseAvatar'; -import RoomBreadcrumbs from "../views/rooms/RoomBreadcrumbs"; +import RoomBreadcrumbs2 from "../views/rooms/RoomBreadcrumbs2"; +import { BreadcrumbsStore } from "../../stores/BreadcrumbsStore"; +import { UPDATE_EVENT } from "../../stores/AsyncStore"; /******************************************************************* * CAUTION * @@ -43,6 +45,7 @@ interface IProps { interface IState { searchExpanded: boolean; searchFilter: string; // TODO: Move search into room list? + showBreadcrumbs: boolean; } export default class LeftPanel2 extends React.Component { @@ -60,7 +63,14 @@ export default class LeftPanel2 extends React.Component { this.state = { searchExpanded: false, searchFilter: "", + showBreadcrumbs: BreadcrumbsStore.instance.visible, }; + + BreadcrumbsStore.instance.on(UPDATE_EVENT, this.onBreadcrumbsUpdate); + } + + public componentWillUnmount() { + BreadcrumbsStore.instance.off(UPDATE_EVENT, this.onBreadcrumbsUpdate); } private onSearch = (term: string): void => { @@ -85,6 +95,13 @@ export default class LeftPanel2 extends React.Component { } } + private onBreadcrumbsUpdate = () => { + const newVal = BreadcrumbsStore.instance.visible; + if (newVal !== this.state.showBreadcrumbs) { + this.setState({showBreadcrumbs: newVal}); + } + }; + private renderHeader(): React.ReactNode { // TODO: Update when profile info changes // TODO: Presence @@ -100,6 +117,16 @@ export default class LeftPanel2 extends React.Component { displayName = myUser.rawDisplayName; avatarUrl = myUser.avatarUrl; } + + let breadcrumbs; + if (this.state.showBreadcrumbs) { + breadcrumbs = ( +
    + +
    + ); + } + return (
    @@ -116,9 +143,7 @@ export default class LeftPanel2 extends React.Component { {displayName}
    -
    - -
    + {breadcrumbs}
    ); } @@ -152,7 +177,6 @@ export default class LeftPanel2 extends React.Component { onBlur={() => {/*TODO*/}} />; - // TODO: Breadcrumbs // TODO: Conference handling / calls const containerClasses = classNames({ diff --git a/src/components/views/rooms/RoomBreadcrumbs2.tsx b/src/components/views/rooms/RoomBreadcrumbs2.tsx new file mode 100644 index 0000000000..195757ccf0 --- /dev/null +++ b/src/components/views/rooms/RoomBreadcrumbs2.tsx @@ -0,0 +1,90 @@ +/* +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 { BreadcrumbsStore } from "../../../stores/BreadcrumbsStore"; +import AccessibleButton from "../elements/AccessibleButton"; +import RoomAvatar from "../avatars/RoomAvatar"; +import { _t } from "../../../languageHandler"; +import { Room } from "matrix-js-sdk/src/models/room"; +import defaultDispatcher from "../../../dispatcher/dispatcher"; +import Analytics from "../../../Analytics"; +import { UPDATE_EVENT } from "../../../stores/AsyncStore"; + +/******************************************************************* + * CAUTION * + ******************************************************************* + * This is a work in progress implementation and isn't complete or * + * even useful as a component. Please avoid using it until this * + * warning disappears. * + *******************************************************************/ + +interface IProps { +} + +interface IState { +} + +export default class RoomBreadcrumbs2 extends React.PureComponent { + private isMounted = true; + + constructor(props: IProps) { + super(props); + + BreadcrumbsStore.instance.on(UPDATE_EVENT, this.onBreadcrumbsUpdate); + } + + public componentWillUnmount() { + this.isMounted = false; + BreadcrumbsStore.instance.off(UPDATE_EVENT, this.onBreadcrumbsUpdate); + } + + private onBreadcrumbsUpdate = () => { + if (!this.isMounted) return; + this.forceUpdate(); // we have no state, so this is the best we can do + }; + + private viewRoom = (room: Room, index: number) => { + Analytics.trackEvent("Breadcrumbs", "click_node", index); + defaultDispatcher.dispatch({action: "view_room", room_id: room.roomId}); + }; + + public render(): React.ReactElement { + // TODO: Decorate crumbs with icons + const tiles = BreadcrumbsStore.instance.rooms.map((r, i) => { + return ( + this.viewRoom(r, i)} + aria-label={_t("Room %(name)s", {name: r.name})} + > + + + ) + }); + + if (tiles.length === 0) { + tiles.push( +
    + {_t("No recently visited rooms")} +
    + ); + } + + return
    {tiles}
    ; + } +} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index cf6dc2431a..75caf5b593 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1069,6 +1069,7 @@ "Replying": "Replying", "Room %(name)s": "Room %(name)s", "Recent rooms": "Recent rooms", + "No recently visited rooms": "No recently visited rooms", "No rooms to show": "No rooms to show", "Unnamed room": "Unnamed room", "World readable": "World readable", diff --git a/src/settings/SettingsStore.js b/src/settings/SettingsStore.js index 4b18a27c6c..dcdde46631 100644 --- a/src/settings/SettingsStore.js +++ b/src/settings/SettingsStore.js @@ -181,6 +181,8 @@ export default class SettingsStore { * @param {String} roomId The room ID to monitor for changes in. Use null for all rooms. */ static monitorSetting(settingName, roomId) { + roomId = roomId || null; // the thing wants null specifically to work, so appease it. + if (!this._monitors[settingName]) this._monitors[settingName] = {}; const registerWatcher = () => { diff --git a/src/stores/AsyncStoreWithClient.ts b/src/stores/AsyncStoreWithClient.ts new file mode 100644 index 0000000000..ce7fd45eec --- /dev/null +++ b/src/stores/AsyncStoreWithClient.ts @@ -0,0 +1,53 @@ +/* +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 { MatrixClient } from "matrix-js-sdk/src/client"; +import { AsyncStore } from "./AsyncStore"; +import { ActionPayload } from "../dispatcher/payloads"; + + +export abstract class AsyncStoreWithClient extends AsyncStore { + protected matrixClient: MatrixClient; + + protected abstract async onAction(payload: ActionPayload); + + protected async onReady() { + // Default implementation is to do nothing. + } + + protected async onNotReady() { + // Default implementation is to do nothing. + } + + protected async onDispatch(payload: ActionPayload) { + await this.onAction(payload); + + if (payload.action === 'MatrixActions.sync') { + // Filter out anything that isn't the first PREPARED sync. + if (!(payload.prevState === 'PREPARED' && payload.state !== 'PREPARED')) { + return; + } + + this.matrixClient = payload.matrixClient; + await this.onReady(); + } else if (payload.action === 'on_client_not_viable' || payload.action === 'on_logged_out') { + if (this.matrixClient) { + await this.onNotReady(); + this.matrixClient = null; + } + } + } +} diff --git a/src/stores/BreadcrumbsStore.ts b/src/stores/BreadcrumbsStore.ts new file mode 100644 index 0000000000..783b38e62f --- /dev/null +++ b/src/stores/BreadcrumbsStore.ts @@ -0,0 +1,154 @@ +/* +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 SettingsStore, { SettingLevel } from "../settings/SettingsStore"; +import { Room } from "matrix-js-sdk/src/models/room"; +import { ActionPayload } from "../dispatcher/payloads"; +import { AsyncStoreWithClient } from "./AsyncStoreWithClient"; +import defaultDispatcher from "../dispatcher/dispatcher"; +import { arrayHasDiff } from "../utils/arrays"; + +const MAX_ROOMS = 20; // arbitrary +const AUTOJOIN_WAIT_THRESHOLD_MS = 90000; // 90s, the time we wait for an autojoined room to show up + +interface IState { + enabled?: boolean; + rooms?: Room[]; +} + +export class BreadcrumbsStore extends AsyncStoreWithClient { + private static internalInstance = new BreadcrumbsStore(); + + private waitingRooms: { roomId: string, addedTs: number }[] = []; + + private constructor() { + super(defaultDispatcher); + + SettingsStore.monitorSetting("breadcrumb_rooms", null); + SettingsStore.monitorSetting("breadcrumbs", null); + } + + public static get instance(): BreadcrumbsStore { + return BreadcrumbsStore.internalInstance; + } + + public get rooms(): Room[] { + return this.state.rooms || []; + } + + public get visible(): boolean { + return this.state.enabled; + } + + protected async onAction(payload: ActionPayload) { + if (!this.matrixClient) return; + + if (payload.action === 'setting_updated') { + if (payload.settingName === 'breadcrumb_rooms') { + await this.updateRooms(); + } else if (payload.settingName === 'breadcrumbs') { + await this.updateState({enabled: SettingsStore.getValue("breadcrumbs", null)}); + } + } else if (payload.action === 'view_room') { + if (payload.auto_join && !this.matrixClient.getRoom(payload.room_id)) { + // Queue the room instead of pushing it immediately. We're probably just + // waiting for a room join to complete. + this.waitingRooms.push({roomId: payload.room_id, addedTs: Date.now()}); + } else { + await this.appendRoom(this.matrixClient.getRoom(payload.room_id)); + } + } + } + + protected async onReady() { + await this.updateRooms(); + await this.updateState({enabled: SettingsStore.getValue("breadcrumbs", null)}); + + this.matrixClient.on("Room.myMembership", this.onMyMembership); + this.matrixClient.on("Room", this.onRoom); + } + + protected async onNotReady() { + this.matrixClient.removeListener("Room.myMembership", this.onMyMembership); + this.matrixClient.removeListener("Room", this.onRoom); + } + + private onMyMembership = async (room: Room) => { + // We turn on breadcrumbs by default once the user has at least 1 room to show. + if (!this.state.enabled) { + await SettingsStore.setValue("breadcrumbs", null, SettingLevel.ACCOUNT, true); + } + }; + + private onRoom = async (room: Room) => { + const waitingRoom = this.waitingRooms.find(r => r.roomId === room.roomId); + if (!waitingRoom) return; + this.waitingRooms.splice(this.waitingRooms.indexOf(waitingRoom), 1); + + if ((Date.now() - waitingRoom.addedTs) > AUTOJOIN_WAIT_THRESHOLD_MS) return; // Too long ago. + await this.appendRoom(room); + }; + + private async updateRooms() { + let roomIds = SettingsStore.getValue("breadcrumb_rooms"); + if (!roomIds || roomIds.length === 0) roomIds = []; + + const rooms = roomIds.map(r => this.matrixClient.getRoom(r)).filter(r => !!r); + const currentRooms = this.state.rooms || []; + if (!arrayHasDiff(rooms, currentRooms)) return; // no change (probably echo) + await this.updateState({rooms}); + } + + private async appendRoom(room: Room) { + const rooms = this.state.rooms.slice(); // cheap clone + + // If the room is upgraded, use that room instead. We'll also splice out + // any children of the room. + const history = this.matrixClient.getRoomUpgradeHistory(room.roomId); + if (history.length > 1) { + room = history[history.length - 1]; // Last room is most recent in history + + // Take out any room that isn't the most recent room + for (let i = 0; i < history.length - 1; i++) { + const idx = rooms.findIndex(r => r.roomId === history[i].roomId); + if (idx !== -1) rooms.splice(idx, 1); + } + } + + // Remove the existing room, if it is present + const existingIdx = rooms.findIndex(r => r.roomId === room.roomId); + if (existingIdx !== -1) { + rooms.splice(existingIdx, 1); + } + + // Splice the room to the start of the list + rooms.splice(0, 0, room); + + if (rooms.length > MAX_ROOMS) { + // This looks weird, but it's saying to start at the MAX_ROOMS point in the + // list and delete everything after it. + rooms.splice(MAX_ROOMS, rooms.length - MAX_ROOMS); + } + + // Update the breadcrumbs + await this.updateState({rooms}); + const roomIds = rooms.map(r => r.roomId); + if (roomIds.length > 0) { + await SettingsStore.setValue("breadcrumb_rooms", null, SettingLevel.ACCOUNT, roomIds); + } + } + +} From 04566e12b202c50d10045fda65bdaf0e288bfecc Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 17:14:40 -0600 Subject: [PATCH 0106/1504] Fix indentation in styles --- res/css/views/rooms/_RoomBreadcrumbs2.scss | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/res/css/views/rooms/_RoomBreadcrumbs2.scss b/res/css/views/rooms/_RoomBreadcrumbs2.scss index aa0b0ecb08..2db0fdca08 100644 --- a/res/css/views/rooms/_RoomBreadcrumbs2.scss +++ b/res/css/views/rooms/_RoomBreadcrumbs2.scss @@ -15,16 +15,16 @@ limitations under the License. */ @keyframes breadcrumb-popin { - 0% { - // Ideally we'd use `width` instead of `opacity`, but we only - // have 16 nanoseconds to render the frame, and width is expensive. - opacity: 0; - transform: scale(0); - } - 100% { - opacity: 1; - transform: scale(1); - } + 0% { + // Ideally we'd use `width` instead of `opacity`, but we only + // have 16 nanoseconds to render the frame, and width is expensive. + opacity: 0; + transform: scale(0); + } + 100% { + opacity: 1; + transform: scale(1); + } } .mx_RoomBreadcrumbs2 { From 8292ce56b0edda8fd44f23827d5d35c08c20314b Mon Sep 17 00:00:00 2001 From: "J. A. Durieux" Date: Mon, 8 Jun 2020 18:06:28 +0000 Subject: [PATCH 0107/1504] Translated using Weblate (Dutch) Currently translated at 90.1% (2036 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 49 ++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index b4bb5dc5bd..69909e942e 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -350,7 +350,7 @@ "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Zo te zien is uw e-mailadres op deze thuisserver niet aan een Matrix-ID gekoppeld.", "You seem to be in a call, are you sure you want to quit?": "Het ziet er naar uit dat u in gesprek bent, weet u zeker dat u wilt afsluiten?", "You seem to be uploading files, are you sure you want to quit?": "Het ziet er naar uit dat u bestanden aan het uploaden bent, weet u zeker dat u wilt afsluiten?", - "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "U kunt deze veranderingen niet ongedaan maken aangezien u de gebruiker tot hetzelfde niveau als uzelf promoveert.", + "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "U zult deze veranderingen niet terug kunnen draaien, daar u de gebruiker tot uw eigen niveau promoveert.", "This server does not support authentication with a phone number.": "Deze server biedt geen ondersteuning voor authenticatie met een telefoonnummer.", "An error occurred: %(error_string)s": "Er is een fout opgetreden: %(error_string)s", "Make Moderator": "Benoemen tot moderator", @@ -382,7 +382,7 @@ "Failed to invite": "Uitnodigen is mislukt", "Failed to invite the following users to the %(roomName)s room:": "Kon de volgende gebruikers niet uitnodigen voor gesprek %(roomName)s:", "Confirm Removal": "Verwijdering bevestigen", - "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.": "Weet u zeker dat u deze gebeurtenis wilt verwijderen? Wees u er wel van bewust dat als u een gespreksnaam of onderwerpswijziging verwijdert, u de verandering mogelijk ongedaan maakt.", + "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.": "Weet u zeker dat u deze gebeurtenis wilt verwijderen? Besef wel dat het verwijderen van een van een gespreksnaams- of onderwerpswijziging die wijziging mogelijk teniet doet.", "Unknown error": "Onbekende fout", "Incorrect password": "Onjuist wachtwoord", "To continue, please enter your password.": "Voer uw wachtwoord in om verder te gaan.", @@ -501,7 +501,7 @@ "Unban this user?": "Deze gebruiker ontbannen?", "Ban this user?": "Deze gebruiker verbannen?", "Mirror local video feed": "Lokale videoaanvoer ook elders opslaan (spiegelen)", - "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.": "U kunt deze actie niet ongedaan maken omdat u zichzelf degradeert. Als u de laatste bevoorrechte gebruiker in het gesprek bent, is het onmogelijk deze rechten terug te krijgen.", + "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.": "Zelfdegradatie is onomkeerbaar. Als u de laatste bevoorrechte gebruiker in het gesprek bent zullen deze rechten voorgoed verloren gaan.", "Unignore": "Niet meer negeren", "Ignore": "Negeren", "Jump to read receipt": "Naar het laatst gelezen bericht gaan", @@ -952,7 +952,7 @@ "User %(userId)s is already in the room": "De gebruiker %(userId)s is al aanwezig", "User %(user_id)s does not exist": "Er bestaat geen gebruiker ‘%(user_id)s’", "User %(user_id)s may or may not exist": "Er bestaat mogelijk geen gebruiker ‘%(user_id)s’", - "The user must be unbanned before they can be invited.": "De gebruiker kan niet uitgenodigd worden voordat diens ban ongedaan is gemaakt.", + "The user must be unbanned before they can be invited.": "De gebruiker kan niet uitgenodigd worden voordat diens ban teniet is gedaan.", "Unknown server error": "Onbekende serverfout", "Use a few words, avoid common phrases": "Gebruik enkele woorden - maar geen bekende uitdrukkingen", "No need for symbols, digits, or uppercase letters": "Hoofdletters, cijfers of speciale tekens hoeven niet, mogen wel", @@ -1107,7 +1107,7 @@ "Language and region": "Taal en regio", "Theme": "Thema", "Account management": "Accountbeheer", - "Deactivating your account is a permanent action - be careful!": "Pas op! Het sluiten van uw account kan niet ongedaan gemaakt worden!", + "Deactivating your account is a permanent action - be careful!": "Pas op! Het sluiten van uw account is onherroepelijk!", "General": "Algemeen", "Legal": "Wettelijk", "Credits": "Met dank aan", @@ -1356,7 +1356,7 @@ "Adds a custom widget by URL to the room": "Voegt met een URL een aangepaste widget toe aan het gesprek", "Please supply a https:// or http:// widget URL": "Voer een https://- of http://-widget-URL in", "You cannot modify widgets in this room.": "U kunt de widgets in dit gesprek niet aanpassen.", - "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s heeft de uitnodiging voor %(targetDisplayName)s om toe te treden tot het gesprek ingetrokken.", + "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s heeft de uitnodiging aan %(targetDisplayName)s toe te treden tot het gesprek ingetrokken.", "Upgrade this room to the recommended room version": "Werk dit gesprek bij tot de aanbevolen versie", "This room is running room version , which this homeserver has marked as unstable.": "Dit gesprek draait op groepsgespreksversie , die door deze thuisserver als onstabiel is gemarkeerd.", "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Bijwerken zal de huidige versie van dit gesprek sluiten, en onder dezelfde naam een bijgewerkte versie starten.", @@ -1477,7 +1477,7 @@ "Cannot reach homeserver": "Kan thuisserver niet bereiken", "Ensure you have a stable internet connection, or get in touch with the server admin": "Zorg dat u een stabiele internetverbinding heeft, of neem contact op met de systeembeheerder", "Your Riot is misconfigured": "Uw Riot is onjuist geconfigureerd", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Vraag uw Riot-beheerder om uw configuratie na te kijken op onjuiste of duplicate items.", + "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Vraag uw Riot-beheerder uw configuratie na te kijken op onjuiste of dubbele items.", "Unexpected error resolving identity server configuration": "Onverwachte fout bij het oplossen van de identiteitsserverconfiguratie", "Use lowercase letters, numbers, dashes and underscores only": "Gebruik enkel letters, cijfers, streepjes en underscores", "Cannot reach identity server": "Kan identiteitsserver niet bereiken", @@ -1572,8 +1572,8 @@ "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Gebruik een identiteitsserver om uit te nodigen via e-mail. Klik op ‘Doorgaan’ om de standaardidentiteitsserver (%(defaultIdentityServerName)s) te gebruiken, of beheer de server in de instellingen.", "Use an identity server to invite by email. Manage in Settings.": "Gebruik een identiteitsserver om uit te nodigen via e-mail. Beheer de server in de instellingen.", "Multiple integration managers": "Meerdere integratiebeheerders", - "Send read receipts for messages (requires compatible homeserver to disable)": "Verstuur leesbevestigingen voor berichten (vereist compatibele thuisserver om uit te schakelen)", - "Accept to continue:": "Aanvaard om verder te gaan:", + "Send read receipts for messages (requires compatible homeserver to disable)": "Verstuur leesbevestigingen voor berichten (uitschakelen vereist een compatibele thuisserver)", + "Accept to continue:": "Aanvaard om door te gaan:", "ID": "ID", "Public Name": "Openbare naam", "Change identity server": "Identiteitsserver wisselen", @@ -1599,11 +1599,11 @@ "No recent messages by %(user)s found": "Geen recente berichten door %(user)s gevonden", "Try scrolling up in the timeline to see if there are any earlier ones.": "Probeer omhoog te scrollen in de tijdslijn om te kijken of er eerdere zijn.", "Remove recent messages by %(user)s": "Recente berichten door %(user)s verwijderen", - "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|other": "U staat op het punt %(count)s berichten door %(user)s te verwijderen. Dit kan niet ongedaan worden gemaakt. Wilt u doorgaan?", + "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|other": "U staat op het punt %(count)s berichten door %(user)s te verwijderen. Dit is onherroepelijk. Wilt u doorgaan?", "For a large amount of messages, this might take some time. Please don't refresh your client in the meantime.": "Bij een groot aantal berichten kan dit even duren. Herlaad uw cliënt niet gedurende deze tijd.", "Remove %(count)s messages|other": "%(count)s berichten verwijderen", "Deactivate user?": "Gebruiker deactiveren?", - "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?": "Deze gebruiker deactiveren zal hem/haar afmelden en verhinderen dat hij/zij zich weer aanmeldt. Bovendien zal hij/zij alle gesprekken waaraan hij/zij deelneemt verlaten. Deze actie kan niet ongedaan worden gemaakt. Weet u zeker dat u deze gebruiker wilt deactiveren?", + "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?": "Deze gebruiker deactiveren zal hem/haar afmelden en verhinderen dat hij/zij zich weer aanmeldt. Bovendien zal hij/zij alle gesprekken waaraan hij/zij deelneemt verlaten. Deze actie is onherroepelijk. Weet u zeker dat u deze gebruiker wilt deactiveren?", "Deactivate user": "Gebruiker deactiveren", "Remove recent messages": "Recente berichten verwijderen", "Bold": "Vet", @@ -1638,7 +1638,7 @@ "Explore rooms": "Gesprekken ontdekken", "Show previews/thumbnails for images": "Toon voorbeelden voor afbeeldingen", "Clear cache and reload": "Cache wissen en herladen", - "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "U staat op het punt 1 bericht door %(user)s te verwijderen. Dit kan niet ongedaan gemaakt worden. Wilt u doorgaan?", + "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "U staat op het punt 1 bericht door %(user)s te verwijderen. Dit is onherroepelijk. Wilt u doorgaan?", "Remove %(count)s messages|one": "1 bericht verwijderen", "%(count)s unread messages including mentions.|other": "%(count)s ongelezen berichten, inclusief vermeldingen.", "%(count)s unread messages.|other": "%(count)s ongelezen berichten.", @@ -1791,7 +1791,7 @@ "Compare unique emoji": "Vergelijk unieke emoji", "Compare a unique set of emoji if you don't have a camera on either device": "Vergelijk een unieke lijst met emoji als geen van beide apparaten een camera heeft", "Start": "Start", - "Securely cache encrypted messages locally for them to appear in search results.": "Sla versleutelde berichten beveiligd op om ze weer te geven in zoekresultaten.", + "Securely cache encrypted messages locally for them to appear in search results.": "Sla versleutelde berichten veilig lokaal op om ze doorzoekbaar te maken.", "Enable": "Inschakelen", "Connecting to integration manager...": "Verbinding maken met de integratiebeheerder…", "Cannot connect to integration manager": "Kan geen verbinding maken met de integratiebeheerder", @@ -1873,7 +1873,7 @@ "in secret storage": "in de sleutelopslag", "Secret storage public key:": "Sleutelopslag publieke sleutel:", "in account data": "in accountinformatie", - "Securely cache encrypted messages locally for them to appear in search results, using ": "Sla versleutelde berichten beveiligd op om ze weer te geven in de zoekresultaten, door gebruik te maken van ", + "Securely cache encrypted messages locally for them to appear in search results, using ": "Sla versleutelde berichten veilig lokaal op opdat ze doorzocht kunnen worden, middels ", " to store messages from ": " om berichten op te slaan van ", "Manage": "Beheren", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Verbind deze sessie met de sleutelback-up voordat u zich afmeldt. Dit voorkomt dat u sleutels verliest die alleen op deze sessie voorkomen.", @@ -1905,8 +1905,8 @@ "Show rooms with unread notifications first": "Gesprekken met ongelezen meldingen eerst tonen", "Show shortcuts to recently viewed rooms above the room list": "Snelkoppelingen naar de gesprekken die u recent heeft bekeken bovenaan de gesprekslijst weergeven", "Cancelling…": "Bezig met annuleren…", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot beschikt niet over alle onderdelen die nodig zijn om versleutelde berichten veilig in het lokale cachegeheugen te bewaren. Als u deze functie wilt uittesten, kunt u een aangepaste versie van Riot Desktop compileren, waarbij de zoekonderdelen toegevoegd zijn.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot kan versleutelde berichten niet veilig bewaren in het lokale cachegeheugen wanneer het uitgevoerd wordt in een webbrowser. Gebruik Riot Desktop om versleutelde berichten in de zoekresultaten te laten verschijnen.", + "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "In Riot ontbreken enige modulen vereist voor het veilig lokaal bewaren van versleutelde berichten. Wilt u deze functie uittesten, compileer dan een aangepaste versie van Riot Desktop die de zoekmodulen bevat.", + "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Als Riot in een webbrowser draait kan het versleutelde berichten niet veilig lokaal bewaren. Gebruik Riot Desktop om versleutelde berichten doorzoekbaar te maken.", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Deze sessie maakt geen back-ups van uw sleutels, maar u beschikt over een reeds bestaande back-up waaruit u kunt herstellen en waaraan u nieuwe sleutels vanaf nu kunt toevoegen.", "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Er is een back-upsleutel opgeslagen in de geheime opslag, maar deze functie is niet ingeschakeld voor deze sessie. Schakel kruiselings ondertekenen in in de experimentele instellingen om de sleutelback-upstatus te wijzigen.", "Customise your experience with experimental labs features. Learn more.": "Personaliseer uw ervaring met experimentele functies. Klik hier voor meer informatie.", @@ -1952,7 +1952,7 @@ "Yours, or the other users’ session": "De sessie van uzelf of de andere gebruiker", "Not Trusted": "Niet vertrouwd", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s%(userId)s heeft zich aangemeld bij een nieuwe sessie zonder deze te verifiëren:", - "Ask this user to verify their session, or manually verify it below.": "Vraag deze gebruiker om zijn/haar sessie te verifiëren, of verifieer deze hieronder handmatig.", + "Ask this user to verify their session, or manually verify it below.": "Vraag deze gebruiker haar/zijn sessie te verifiëren, of verifieer die hieronder handmatig.", "Done": "Klaar", "Manually Verify": "Handmatig verifiëren", "Trusted": "Vertrouwd", @@ -2028,10 +2028,10 @@ "More options": "Meer opties", "Language Dropdown": "Taalselectie", "Destroy cross-signing keys?": "Sleutels voor kruiselings ondertekenen verwijderen?", - "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Het verwijderen van sleutels voor kruiselings ondertekenen kan niet ongedaan gemaakt worden. Iedereen waarmee u geverifieerd heeft zal beveiligingswaarschuwingen te zien krijgen. U wilt dit hoogstwaarschijnlijk niet doen, tenzij u alle apparaten heeft verloren waarmee u kruiselings kon ondertekenen.", + "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Het verwijderen van sleutels voor kruiselings ondertekenen is onherroepelijk. Iedereen waarmee u geverifieerd heeft zal beveiligingswaarschuwingen te zien krijgen. U wilt dit hoogstwaarschijnlijk niet doen, tenzij u alle apparaten heeft verloren waarmee u kruiselings kon ondertekenen.", "Clear cross-signing keys": "Sleutels voor kruiselings ondertekenen wissen", "Clear all data in this session?": "Alle gegevens in deze sessie verwijderen?", - "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Het verwijderen van alle gegevens in deze sessie kan niet ongedaan gemaakt worden. Versleutelde berichten zullen verloren gaan, tenzij u een back-up van hun sleutels heeft.", + "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Het verwijderen van alle gegevens in deze sessie is onherroepelijk. Versleutelde berichten zullen verloren gaan, tenzij u een back-up van hun sleutels heeft.", "Verify session": "Sessie verifiëren", "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Controleer of de sleutel in de gebruikersinstellingen op het apparaat overeenkomt met onderstaande sleutel om te verifiëren dat de sessie vertrouwd kan worden:", "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Neem contact op met de eigenaar op een andere manier (bv. onder vier ogen of met een telefoongesprek) en vraag of de sleutel in zijn/haar gebruikersinstellingen overeenkomt met onderstaande sleutel om te verifiëren dat de sessie vertrouwd kan worden:", @@ -2209,5 +2209,14 @@ "Verify the new login accessing your account: %(name)s": "Verifieer de nieuwe aanmelding op uw account: %(name)s", "Confirm your account deactivation by using Single Sign On to prove your identity.": "Bevestig uw intentie deze account te sluiten door met Single Sign On uw identiteit te bewijzen.", "Are you sure you want to deactivate your account? This is irreversible.": "Weet u zeker dat u uw account wil sluiten? Dit is onomkeerbaar.", - "Confirm account deactivation": "Bevestig accountsluiting" + "Confirm account deactivation": "Bevestig accountsluiting", + "Room name or address": "Gespreksnaam of -adres", + "Joins room with given address": "Treedt tot het gesprek met het opgegeven adres toe", + "Unrecognised room address:": "Gespreksadres niet herkend:", + "Help us improve Riot": "Help ons Riot nog beter te maken", + "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Stuur anonieme gebruiksinformatie waarmee we Riot kunnen verbeteren. Dit plaatst een cookie.", + "I want to help": "Ik wil helpen", + "Your homeserver has exceeded its user limit.": "Uw thuisserver heeft het maximaal aantal gebruikers overschreden.", + "Your homeserver has exceeded one of its resource limits.": "Uw thuisserver heeft een van zijn limieten overschreden.", + "Ok": "Oké" } From 0e6e76ad85fa70b3c56438ab83492c9634282136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Mon, 8 Jun 2020 15:31:40 +0000 Subject: [PATCH 0108/1504] Translated using Weblate (Estonian) Currently translated at 58.1% (1312 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 0fdcca40d1..5ffcd11f16 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -1374,5 +1374,13 @@ "Sounds": "Helid", "Notification sound": "Teavitusheli", "Reset": "Taasta algolek", - "Set a new custom sound": "Seadista uus kohandatud heli" + "Set a new custom sound": "Seadista uus kohandatud heli", + "Jump to message": "Mine sõnumi juurde", + "were invited %(count)s times|other": "said kutse %(count)s korda", + "were invited %(count)s times|one": "said kutse", + "was invited %(count)s times|other": "sai kutse %(count)s korda", + "was invited %(count)s times|one": "sai kutse", + "%(severalUsers)schanged their name %(count)s times|other": "Mitu kasutajat %(severalUsers)s muutsid oma nime %(count)s korda", + "%(severalUsers)schanged their name %(count)s times|one": "Mitu kasutajat %(severalUsers)s muutsid oma nime", + "%(oneUser)schanged their name %(count)s times|other": "Kasutaja %(oneUser)s muutis oma nime %(count)s korda" } From 87d5988d53faaf650aa89eece7898762b4b050f3 Mon Sep 17 00:00:00 2001 From: Nils Haugen Date: Mon, 8 Jun 2020 15:52:42 +0000 Subject: [PATCH 0109/1504] Translated using Weblate (Norwegian Nynorsk) Currently translated at 58.5% (1322 of 2259 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nn/ --- src/i18n/strings/nn.json | 73 +++++++++++++++++++++++++++++++++------- 1 file changed, 61 insertions(+), 12 deletions(-) diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json index 52b2c2e83d..8a5407967a 100644 --- a/src/i18n/strings/nn.json +++ b/src/i18n/strings/nn.json @@ -919,7 +919,7 @@ "Sign In": "Logg inn", "Explore rooms": "Utforsk romma", "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.": "Meldinga di vart ikkje send, for denne heimetenaren har nådd grensa for maksimalt aktive brukarar pr. månad. Kontakt systemadministratoren for å vidare nytte denne tenesta.", - "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Denne meldingen vart ikkje sendt fordi heimeserveren har nådd grensa for tilgjengelege systemressursar. Kontakt systemadministratoren for å vidare nytte denne tenesten.", + "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Denne meldingen vart ikkje send fordi heimetenaren har nådd grensa for tilgjengelege systemressursar. Kontakt systemadministratoren for å vidare nytta denne tenesta.", "Add room": "Legg til rom", "You have %(count)s unread notifications in a prior version of this room.|other": "Du har %(count)s uleste varslingar i ein tidligare versjon av dette rommet.", "You have %(count)s unread notifications in a prior version of this room.|one": "Du har %(count)s ulest varsel i ein tidligare versjon av dette rommet.", @@ -947,7 +947,7 @@ "Failed to perform homeserver discovery": "Fekk ikkje til å utforska heimetenaren", "Sign in with single sign-on": "Logg på med Single-Sign-On", "Create account": "Lag konto", - "Registration has been disabled on this homeserver.": "Registrering er deaktivert på denne heimeserveren.", + "Registration has been disabled on this homeserver.": "Registrering er skrudd av for denne heimetenaren.", "Unable to query for supported registration methods.": "Klarte ikkje å spørre etter støtta registreringsmetodar.", "Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).": "Kontoen din %(newAccountId)s er no registrert, men du er frå tidligare logga på med ein annan konto (%(loggedInUserId)s).", "Continue with previous account": "Fortsett med tidligare konto", @@ -1007,7 +1007,7 @@ "Add Email Address": "Legg til e-postadresse", "Add Phone Number": "Legg til telefonnummer", "Call failed due to misconfigured server": "Kallet gjekk gale fordi tenaren er oppsatt feil", - "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Spør administratoren for din heimetenar%(homeserverDomain)s om å setje opp ein \"TURN-server\" slik at heimetenaren svarar korrekt.", + "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Spør administratoren for din heimetenar%(homeserverDomain)s om å setje opp ein \"TURN-server\" slik at talesamtalar fungerer på rett måte.", "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.": "Alternativt, kan du prøva å nytta den offentlege tenaren på turn.matrix.org, men det kan vera mindre stabilt og IP-adressa di vil bli delt med den tenaren. Du kan og endra på det under Innstillingar.", "Try using turn.matrix.org": "Prøv med å nytta turn.matrix.org", "A conference call could not be started because the integrations server is not available": "Ein konferansesamtale kunne ikkje starta fordi integrasjons-tenaren er utilgjengeleg", @@ -1063,12 +1063,12 @@ "Set up encryption": "Sett opp kryptering", "Unverified session": "Uverifisert sesjon", "Identity server has no terms of service": "Identitetstenaren manglar bruksvilkår", - "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.": "Denne handlinga krev kommunikasjon mot (standard identitetsserver) for å verifisere e-post eller telefonnummer, men serveren manglar bruksvilkår.", - "Only continue if you trust the owner of the server.": "Gå vidare så lenge du har tillit til eigar av serveren.", + "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.": "Denne handlinga krev kommunikasjon mot (standard identitetstenar) for å verifisere e-post eller telefonnummer, men tenaren manglar bruksvilkår.", + "Only continue if you trust the owner of the server.": "Gå vidare så lenge du har tillit til eigar av tenaren.", "Trust": "Tillat", "Custom (%(level)s)": "Tilpassa (%(level)s)", "Error upgrading room": "Feil ved oppgradering av rom", - "Double check that your server supports the room version chosen and try again.": "Sjekk at server støttar romversjon, og prøv på nytt.", + "Double check that your server supports the room version chosen and try again.": "Sjekk at tenar støttar denne romversjonen, og prøv på nytt.", "Verifies a user, session, and pubkey tuple": "Verifiser brukar, økt eller public-key objekt (pubkey tuple)", "Unknown (user, session) pair:": "Ukjent (brukar,økt) par:", "Session already verified!": "Sesjon er tidligare verifisert!", @@ -1183,7 +1183,7 @@ "You're previewing %(roomName)s. Want to join it?": "Du førehandsviser %(roomName)s. Ynskjer du å bli med ?", "%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s kan ikkje førehandsvisast. Ynskjer du å bli med ?", "This room doesn't exist. Are you sure you're at the right place?": "Dette rommet eksisterar ikkje. Er du sikker på at du er på rett plass?", - "Try again later, or ask a room admin to check if you have access.": "Prøv igjen seinare, eller spør ein rom-administrator om du har tilgang.", + "Try again later, or ask a room admin to check if you have access.": "Prøv om att seinare, eller spør ein rom-administrator om du har tilgang.", "Never lose encrypted messages": "Aldri la krypterte meldingar gå tapt", "Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Meldingane i rommet er sikra med ende-til-ende kryptering. Berre du og mottakarane har krypteringsnøklane for desse meldingane.", "Securely back up your keys to avoid losing them. Learn more.": "Kopier nøklane dine for å unngå i miste dei. Les meir.", @@ -1203,7 +1203,7 @@ "Mark all as read": "Merk alle som lesne", "Error updating main address": "Feil under oppdatering av hovedadresse", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Det skjedde ein feil under oppdatering av hovudadressa for rommet. Det kan hende at dette er ein mellombels feil, eller at det ikkje er tillate på tenaren.", - "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Feil under oppdatering av sekundæradresse. Det kan hende at dette er midlertidig, eller at det ikkje er tillate på serveren.", + "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Feil under oppdatering av alternativ adresse. Det kan hende at dette er mellombels, eller at det ikkje er tillate på tenaren.", "Error creating alias": "Feil under oppretting av alias", "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Det skjedde ein feil under oppretting av dette aliaset. Det kan hende at dette er midlertidig, eller at det ikkje er tillate på serveren.", "You don't have permission to delete the alias.": "Du har ikkje lov å slette aliaset.", @@ -1219,7 +1219,7 @@ "Local Addresses": "Lokale adresser", "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Sett adresse for dette rommet, slik at brukarar kan finne rommet på din heimetenar (%(localDomain)s)", "Error updating flair": "Oppdatering av etikett gjekk gale", - "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Feil under oppdatering av etikett for dette rommet. Dette kan vere deaktivert på server , eller så oppstod det ein feil.", + "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Feil under oppdatering av etikett for dette rommet. Dette kan vere deaktivert på tenaren, eller så oppstod det ein feil.", "Room Name": "Romnamn", "Room Topic": "Romemne", "Room avatar": "Rom-avatar", @@ -1339,7 +1339,7 @@ "Keyboard Shortcuts": "Tastatursnarvegar", "Ignored users": "Ignorerte brukarar", "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Legg til brukarar og tenarar du vil ignorera her. Bruk stjerne/wildcard (*) for at markere eitkvart teikn. Til dømes, @bot* vil ignorere alle brukarar med namn 'bot' på uansett tenar.", - "Server or user ID to ignore": "Server eller brukar-ID for å ignorere", + "Server or user ID to ignore": "Tenar eller brukar-ID for å ignorere", "If this isn't what you want, please use a different tool to ignore users.": "Om det ikkje var dette du ville, bruk eit anna verktøy til å ignorera brukarar.", "Enter the name of a new server you want to explore.": "Skriv inn namn på ny tenar du ynskjer å utforske.", "Matrix rooms": "Matrix-rom", @@ -1363,7 +1363,7 @@ "Help": "Hjelp", "Explore": "Utforsk", "%(creator)s created and configured the room.": "%(creator)s oppretta og konfiguerte dette rommet.", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot klarde ikkje å hente protokolllister frå heimeserveren. Det kan hende at serveren er for gammal til å støtte tredjeparts-nettverk", + "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot klarde ikkje å hente protokolllister frå heimetenaren. Det kan hende at tenaren er for gammal til å støtte tredjeparts-nettverk", "The homeserver may be unavailable or overloaded.": "Heimetenaren kan vere overlasta eller utilgjengeleg.", "Preview": "Førehandsvis", "View": "Vis", @@ -1409,5 +1409,54 @@ "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s tok vekk den alternative adressa %(addresses)s for dette rommet.", "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s endre den alternative adressa for dette rommet.", "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s endra hovud- og alternativ-adressene for dette rommet.", - "%(senderName)s changed the addresses for this room.": "%(senderName)s endre adressene for dette rommet." + "%(senderName)s changed the addresses for this room.": "%(senderName)s endre adressene for dette rommet.", + "Review where you’re logged in": "Sjå over kvar du er logga inn", + "Later": "Seinare", + "Allow Peer-to-Peer for 1:1 calls": "Tillat peer-to-peer (P2P) for ein-til-ein samtalar", + "Never send encrypted messages to unverified sessions from this session": "Aldri send krypterte meldingar til ikkje-verifiserte sesjonar frå denne sesjonen", + "Never send encrypted messages to unverified sessions in this room from this session": "Aldri send krypterte meldingar i dette rommet til ikkje-verifiserte sesjonar frå denne sesjonen", + "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Tillat å bruke assistansetenaren turn.matrix.org for talesamtalar viss heimetenaren din ikkje tilbyr dette (IP-adressa di vil bli delt under talesamtalen)", + "Enable message search in encrypted rooms": "Aktiver søk etter meldingar i krypterte rom", + "Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "Sikre meldingar med denne brukaren er ende-til-ende krypterte og kan ikkje lesast av tredjepart.", + "Public Name": "Offentleg namn", + "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Er du sikker? Alle dine krypterte meldingar vil gå tapt viss nøklane dine ikkje er sikkerheitskopierte.", + "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Krypterte meldingar er sikra med ende-til-ende kryptering. Berre du og mottakar(ane) har nøklane for å lese desse meldingane.", + "wait and try again later": "vent og prøv om att seinare", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "For å rapportere eit Matrix-relatert sikkerheitsproblem, les Matrix.org sin Security Disclosure Policy.", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Tenaradministratoren din har deaktivert ende-til-ende kryptering som standard i direktemeldingar og private rom.", + "Where you’re logged in": "Stader du er innlogga", + "Manage the names of and sign out of your sessions below or verify them in your User Profile.": "Handter namn på eller logg ut av sesjonane dine nedanfor eller verifiser dei under brukarprofilen din.", + "A session's public name is visible to people you communicate with": "Ein sesjon sitt offentlege namn, er synleg for andre du kommuniserar med", + "Reset": "Nullstill", + "Set a new custom sound": "Set ein ny tilpassa lyd", + "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.": "Når kryptering er aktivert for eit rom, kan ein ikkje deaktivere det. Meldingar som blir sende i eit kryptert rom kan ikkje bli lesne av tenaren, men berre av deltakarane i rommet. Aktivering av kryptering kan hindre mange botar og bruer frå å fungera på rett måte. Les meir om kryptering her.", + "Encrypted": "Kryptert", + "This room is end-to-end encrypted": "Dette rommet er ende-til-ende kryptert", + "Encrypted by an unverified session": "Kryptert av ein ikkje-verifisert sesjon", + "Encrypted by a deleted session": "Kryptert av ein sletta sesjon", + "Create room": "Lag rom", + "Messages in this room are end-to-end encrypted.": "Meldingar i dette rommet er ende-til-ende kryptert.", + "Messages in this room are not end-to-end encrypted.": "Meldingar i dette rommet er ikkje ende-til-ende kryptert.", + "In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "Når du nyttar krypterte rom er meldingane din sikra. Berre du og mottakaren har unike nøklar som kan gjere meldingane lesbare.", + "This client does not support end-to-end encryption.": "Denne klienten støttar ikkje ende-til-ende kryptering.", + "In encrypted rooms, verify all users to ensure it’s secure.": "Når du nyttar krypterte rom, verifiser alle brukarar for å vere trygg på at det er sikkert.", + "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Meldingar i dette rommet er ende-til-ende krypterte. Meir om dette, samt verifisering av denne brukaren finn du under deira brukarprofil.", + "Join": "Bli med", + "Remove server": "Ta vekk tenar", + "Matrix": "Matrix", + "Add a new server": "Legg til ein ny tenar", + "Add a new server...": "Legg til ein ny tenar", + "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Tømming av data frå denne sesjonen er permanent. Krypterte meldingar vil gå tapt med mindre krypteringsnøklane har blitt sikkerheitskopierte.", + "This room is private, and can only be joined by invitation.": "Dette rommet er privat, brukarar kan berre bli med viss dei har ein invitasjon", + "You can’t disable this later. Bridges & most bots won’t work yet.": "Du kan ikkje skru av dette seinare. Bruer og dei fleste botar vil ikkje fungere enno.", + "Enable end-to-end encryption": "Skru på ende-til-ende kryptering", + "Create a private room": "Lag eit privat rom", + "Make this room public": "Gjer dette rommet offentleg", + "Hide advanced": "Gøym avanserte alternativ", + "Show advanced": "Vis avanserte alternativ", + "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Utesteng brukarar på andre Matrix heimetenarar frå å koma inn i rommet (Dette kan endrast seinare!)", + "I don't want my encrypted messages": "Eg treng ikkje mine krypterte meldingar", + "You'll lose access to your encrypted messages": "Du vil miste tilgangen til dine krypterte meldingar", + "No identity server is configured so you cannot add an email address in order to reset your password in the future.": "Ingen identitetstenar er konfiguert, så i framtida kan ikkje legge til ei e-postadresse for å nullstille passordet.", + "Join millions for free on the largest public server": "Kom ihop med millionar av andre på den største offentlege tenaren" } From eff97e6c205ecdcce0bc40714fe51ca6f4e6d960 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 18:18:34 -0600 Subject: [PATCH 0110/1504] Fix the tests --- src/stores/BreadcrumbsStore.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stores/BreadcrumbsStore.ts b/src/stores/BreadcrumbsStore.ts index 783b38e62f..5944091d00 100644 --- a/src/stores/BreadcrumbsStore.ts +++ b/src/stores/BreadcrumbsStore.ts @@ -113,7 +113,7 @@ export class BreadcrumbsStore extends AsyncStoreWithClient { } private async appendRoom(room: Room) { - const rooms = this.state.rooms.slice(); // cheap clone + const rooms = (this.state.rooms || []).slice(); // cheap clone // If the room is upgraded, use that room instead. We'll also splice out // any children of the room. From 5083811deb8a2a1fc53acd331c667a0926bc5bce Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 18:26:43 -0600 Subject: [PATCH 0111/1504] Appease the tests --- src/stores/BreadcrumbsStore.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/stores/BreadcrumbsStore.ts b/src/stores/BreadcrumbsStore.ts index 5944091d00..f0f2dad91b 100644 --- a/src/stores/BreadcrumbsStore.ts +++ b/src/stores/BreadcrumbsStore.ts @@ -68,7 +68,9 @@ export class BreadcrumbsStore extends AsyncStoreWithClient { // waiting for a room join to complete. this.waitingRooms.push({roomId: payload.room_id, addedTs: Date.now()}); } else { - await this.appendRoom(this.matrixClient.getRoom(payload.room_id)); + // The tests might not result in a valid room object. + const room = this.matrixClient.getRoom(payload.room_id); + if (room) await this.appendRoom(room); } } } From 708c65cd965f9da3fd8ada635a71a116d710b292 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 19:08:18 -0600 Subject: [PATCH 0112/1504] Disable new breadcrumb store when old room list is in use --- src/stores/BreadcrumbsStore.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/stores/BreadcrumbsStore.ts b/src/stores/BreadcrumbsStore.ts index f0f2dad91b..332fa7fe2e 100644 --- a/src/stores/BreadcrumbsStore.ts +++ b/src/stores/BreadcrumbsStore.ts @@ -20,6 +20,7 @@ import { ActionPayload } from "../dispatcher/payloads"; import { AsyncStoreWithClient } from "./AsyncStoreWithClient"; import defaultDispatcher from "../dispatcher/dispatcher"; import { arrayHasDiff } from "../utils/arrays"; +import { RoomListStoreTempProxy } from "./room-list/RoomListStoreTempProxy"; const MAX_ROOMS = 20; // arbitrary const AUTOJOIN_WAIT_THRESHOLD_MS = 90000; // 90s, the time we wait for an autojoined room to show up @@ -56,6 +57,9 @@ export class BreadcrumbsStore extends AsyncStoreWithClient { protected async onAction(payload: ActionPayload) { if (!this.matrixClient) return; + // TODO: Remove when new room list is made the default + if (!RoomListStoreTempProxy.isUsingNewStore()) return; + if (payload.action === 'setting_updated') { if (payload.settingName === 'breadcrumb_rooms') { await this.updateRooms(); @@ -76,6 +80,9 @@ export class BreadcrumbsStore extends AsyncStoreWithClient { } protected async onReady() { + // TODO: Remove when new room list is made the default + if (!RoomListStoreTempProxy.isUsingNewStore()) return; + await this.updateRooms(); await this.updateState({enabled: SettingsStore.getValue("breadcrumbs", null)}); @@ -84,6 +91,9 @@ export class BreadcrumbsStore extends AsyncStoreWithClient { } protected async onNotReady() { + // TODO: Remove when new room list is made the default + if (!RoomListStoreTempProxy.isUsingNewStore()) return; + this.matrixClient.removeListener("Room.myMembership", this.onMyMembership); this.matrixClient.removeListener("Room", this.onRoom); } From 5114c37b82374429c7a7cb1f5889efbd2b1651d7 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 8 Jun 2020 20:33:21 -0600 Subject: [PATCH 0113/1504] Add filtering and exploring to the new room list This is per the designs. Animation doesn't feel required here. Like the rest of this series, this rewrites a component to be more purpose-built to help match the designs and to solve the smallest possible problem. --- res/css/_components.scss | 1 + res/css/structures/_LeftPanel2.scss | 39 ++++- res/css/structures/_RoomSearch.scss | 70 +++++++++ res/img/feather-customised/compass.svg | 1 + src/components/structures/HomePage.tsx | 3 +- src/components/structures/LeftPanel.js | 2 +- src/components/structures/LeftPanel2.tsx | 61 +++----- src/components/structures/MatrixChat.tsx | 6 +- src/components/structures/RoomSearch.tsx | 143 ++++++++++++++++++ src/components/structures/RoomView.js | 4 +- .../views/elements/RoomDirectoryButton.js | 3 +- src/dispatcher/actions.ts | 5 + 12 files changed, 287 insertions(+), 51 deletions(-) create mode 100644 res/css/structures/_RoomSearch.scss create mode 100644 res/img/feather-customised/compass.svg create mode 100644 src/components/structures/RoomSearch.tsx diff --git a/res/css/_components.scss b/res/css/_components.scss index de4c1c677c..66af2ba00f 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -19,6 +19,7 @@ @import "./structures/_NotificationPanel.scss"; @import "./structures/_RightPanel.scss"; @import "./structures/_RoomDirectory.scss"; +@import "./structures/_RoomSearch.scss"; @import "./structures/_RoomStatusBar.scss"; @import "./structures/_RoomSubList.scss"; @import "./structures/_RoomView.scss"; diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index d335df305f..d9a2b1dd5c 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -88,7 +88,44 @@ $roomListMinimizedWidth: 50px; } .mx_LeftPanel2_filterContainer { - // TODO: Improve CSS for filtering and its input + margin-left: 12px; + margin-right: 12px; + + // Create a flexbox to organize the inputs + display: flex; + align-items: center; + + .mx_RoomSearch_expanded + .mx_LeftPanel2_exploreButton { + // Cheaty way to return the occupied space to the filter input + margin: 0; + width: 0; + + // Don't forget to hide the masked ::before icon + visibility: hidden; + } + + .mx_LeftPanel2_exploreButton { + width: 28px; + height: 28px; + border-radius: 20px; + background-color: #fff; // TODO: Variable and theme + position: relative; + margin-left: 8px; + + &::before { + content: ''; + position: absolute; + top: 6px; + left: 6px; + width: 16px; + height: 16px; + mask-image: url('$(res)/img/feather-customised/compass.svg'); + mask-position: center; + mask-size: contain; + mask-repeat: no-repeat; + background: $primary-fg-color; + } + } } .mx_LeftPanel2_actualRoomListContainer { diff --git a/res/css/structures/_RoomSearch.scss b/res/css/structures/_RoomSearch.scss new file mode 100644 index 0000000000..d078031090 --- /dev/null +++ b/res/css/structures/_RoomSearch.scss @@ -0,0 +1,70 @@ +/* +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. +*/ + +// Note: this component expects to be contained within a flexbox +.mx_RoomSearch { + flex: 1; + border-radius: 20px; + background-color: #fff; // TODO: Variable & theme + height: 26px; + padding: 2px; + + // Create a flexbox for the icons (easier to manage) + display: flex; + align-items: center; + + .mx_RoomSearch_icon { + width: 16px; + height: 16px; + mask: url('$(res)/img/feather-customised/search-input.svg'); + mask-repeat: no-repeat; + background: $primary-fg-color; + margin-left: 7px; + } + + .mx_RoomSearch_input { + border: none !important; // !important to override default app-wide styles + flex: 1 !important; // !important to override default app-wide styles + color: $primary-fg-color !important; // !important to override default app-wide styles + padding: 0; + height: 100%; + width: 100%; + font-size: $font-12px; + line-height: $font-16px; + + &:not(.mx_RoomSearch_inputExpanded)::placeholder { + color: $primary-fg-color !important; // !important to override default app-wide styles + } + } + + &.mx_RoomSearch_expanded { + .mx_RoomSearch_clearButton { + width: 16px; + height: 16px; + mask-image: url('$(res)/img/feather-customised/x.svg'); + mask-position: center; + mask-size: contain; + mask-repeat: no-repeat; + background: $primary-fg-color; + margin-right: 8px; + } + } + + .mx_RoomSearch_clearButton { + width: 0; + height: 0; + } +} diff --git a/res/img/feather-customised/compass.svg b/res/img/feather-customised/compass.svg new file mode 100644 index 0000000000..3296260803 --- /dev/null +++ b/res/img/feather-customised/compass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/structures/HomePage.tsx b/src/components/structures/HomePage.tsx index ff8d35a114..209f219598 100644 --- a/src/components/structures/HomePage.tsx +++ b/src/components/structures/HomePage.tsx @@ -22,9 +22,10 @@ import { _t } from "../../languageHandler"; import SdkConfig from "../../SdkConfig"; import * as sdk from "../../index"; import dis from "../../dispatcher/dispatcher"; +import { Action } from "../../dispatcher/actions"; const onClickSendDm = () => dis.dispatch({action: 'view_create_chat'}); -const onClickExplore = () => dis.dispatch({action: 'view_room_directory'}); +const onClickExplore = () => dis.fire(Action.ViewRoomDirectory); const onClickNewRoom = () => dis.dispatch({action: 'view_create_room'}); const HomePage = () => { diff --git a/src/components/structures/LeftPanel.js b/src/components/structures/LeftPanel.js index 05cd97df2a..bae69b5631 100644 --- a/src/components/structures/LeftPanel.js +++ b/src/components/structures/LeftPanel.js @@ -252,7 +252,7 @@ const LeftPanel = createReactClass({ if (!this.props.collapsed) { exploreButton = (
    - dis.dispatch({action: 'view_room_directory'})}>{_t("Explore")} + dis.fire(Action.ViewRoomDirectory)}>{_t("Explore")}
    ); } diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 2fd8612ff5..f417dc99b1 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -18,16 +18,16 @@ import * as React from "react"; import TagPanel from "./TagPanel"; import classNames from "classnames"; import dis from "../../dispatcher/dispatcher"; -import AccessibleButton from "../views/elements/AccessibleButton"; import { _t } from "../../languageHandler"; import SearchBox from "./SearchBox"; import RoomList2 from "../views/rooms/RoomList2"; -import TopLeftMenuButton from "./TopLeftMenuButton"; import { Action } from "../../dispatcher/actions"; import { MatrixClientPeg } from "../../MatrixClientPeg"; import BaseAvatar from '../views/avatars/BaseAvatar'; import RoomBreadcrumbs from "../views/rooms/RoomBreadcrumbs"; import UserMenuButton from "./UserMenuButton"; +import RoomSearch from "./RoomSearch"; +import AccessibleButton from "../views/elements/AccessibleButton"; /******************************************************************* * CAUTION * @@ -42,7 +42,6 @@ interface IProps { } interface IState { - searchExpanded: boolean; searchFilter: string; // TODO: Move search into room list? } @@ -58,7 +57,6 @@ export default class LeftPanel2 extends React.Component { super(props); this.state = { - searchExpanded: false, searchFilter: "", }; } @@ -67,24 +65,10 @@ export default class LeftPanel2 extends React.Component { this.setState({searchFilter: term}); }; - private onSearchCleared = (source: string): void => { - if (source === "keyboard") { - dis.fire(Action.FocusComposer); - } - this.setState({searchExpanded: false}); - } - - private onSearchFocus = (): void => { - this.setState({searchExpanded: true}); + private onExplore = () => { + dis.fire(Action.ViewRoomDirectory); }; - private onSearchBlur = (event: FocusEvent): void => { - const target = event.target as HTMLInputElement; - if (target.value.length === 0) { - this.setState({searchExpanded: false}); - } - } - private renderHeader(): React.ReactNode { // TODO: Update when profile info changes // TODO: Presence @@ -126,6 +110,22 @@ export default class LeftPanel2 extends React.Component { ); } + private renderSearchExplore(): React.ReactNode { + // TODO: Collapsed support + + return ( +
    + + +
    + ); + } + public render(): React.ReactNode { const tagPanel = (
    @@ -133,18 +133,6 @@ export default class LeftPanel2 extends React.Component {
    ); - const searchBox = ( {/*TODO*/}} - onSearch={this.onSearch} - onCleared={this.onSearchCleared} - onFocus={this.onSearchFocus} - onBlur={this.onSearchBlur} - collapsed={false}/>); // TODO: Collapsed support - // TODO: Improve props for RoomList2 const roomList = {/*TODO*/}} @@ -167,14 +155,7 @@ export default class LeftPanel2 extends React.Component { {tagPanel}
    ); diff --git a/src/components/structures/RoomSearch.tsx b/src/components/structures/RoomSearch.tsx index 8e64353954..7ed2acf276 100644 --- a/src/components/structures/RoomSearch.tsx +++ b/src/components/structures/RoomSearch.tsx @@ -38,6 +38,7 @@ import { Action } from "../../dispatcher/actions"; interface IProps { onQueryUpdate: (newQuery: string) => void; isMinimized: boolean; + onVerticalArrow(ev: React.KeyboardEvent); } interface IState { @@ -111,6 +112,8 @@ export default class RoomSearch extends React.PureComponent { if (ev.key === Key.ESCAPE) { this.clearInput(); defaultDispatcher.fire(Action.FocusComposer); + } else if (ev.key === Key.ARROW_UP || ev.key === Key.ARROW_DOWN) { + this.props.onVerticalArrow(ev); } }; diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 547aa5e67e..c1f2a9ac79 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -35,6 +35,7 @@ import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import dis from "../../../dispatcher/dispatcher"; import NotificationBadge from "./NotificationBadge"; import { ListNotificationState } from "../../../stores/notifications/ListNotificationState"; +import { Key } from "../../../Keyboard"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -80,6 +81,9 @@ interface IState { } export default class RoomSublist2 extends React.Component { + private headerButton = createRef(); + private sublistRef = createRef(); + constructor(props: IProps) { super(props); @@ -215,8 +219,52 @@ export default class RoomSublist2 extends React.Component { sublist.scrollIntoView({behavior: 'smooth'}); } else { // on screen - toggle collapse - this.props.layout.isCollapsed = !this.props.layout.isCollapsed; - this.forceUpdate(); // because the layout doesn't trigger an update + this.toggleCollapsed(); + } + }; + + private toggleCollapsed = () => { + this.props.layout.isCollapsed = !this.props.layout.isCollapsed; + this.forceUpdate(); // because the layout doesn't trigger an update + }; + + private onHeaderKeyDown = (ev: React.KeyboardEvent) => { + const isCollapsed = this.props.layout && this.props.layout.isCollapsed; + switch (ev.key) { + case Key.ARROW_LEFT: + ev.stopPropagation(); + if (!isCollapsed) { + // On ARROW_LEFT collapse the room sublist if it isn't already + this.toggleCollapsed(); + } + break; + case Key.ARROW_RIGHT: { + ev.stopPropagation(); + if (isCollapsed) { + // On ARROW_RIGHT expand the room sublist if it isn't already + this.toggleCollapsed(); + } else if (this.sublistRef.current) { + // otherwise focus the first room + const element = this.sublistRef.current.querySelector(".mx_RoomTile2") as HTMLDivElement; + if (element) { + element.focus(); + } + } + break; + } + } + }; + + private onKeyDown = (ev: React.KeyboardEvent) => { + switch (ev.key) { + // On ARROW_LEFT go to the sublist header + case Key.ARROW_LEFT: + ev.stopPropagation(); + this.headerButton.current.focus(); + break; + // Consume ARROW_RIGHT so it doesn't cause focus to get sent to composer + case Key.ARROW_RIGHT: + ev.stopPropagation(); } }; @@ -335,7 +383,6 @@ export default class RoomSublist2 extends React.Component { return ( {({onFocus, isActive, ref}) => { - // TODO: Use onFocus: https://github.com/vector-im/riot-web/issues/14180 const tabIndex = isActive ? 0 : -1; const badge = ( @@ -382,13 +429,13 @@ export default class RoomSublist2 extends React.Component { // doesn't become sticky. // The same applies to the notification badge. return ( -
    -
    +
    +
    { ); } - // TODO: onKeyDown support: https://github.com/vector-im/riot-web/issues/14180 return (
    {this.renderHeader()} {content} diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 92c69e54e7..a85ebe7dd3 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -235,7 +235,7 @@ export default class RoomTile2 extends React.Component { private onClickMentions = ev => this.saveNotifState(ev, MENTIONS_ONLY); private onClickMute = ev => this.saveNotifState(ev, MUTE); - private renderNotificationsMenu(): React.ReactElement { + private renderNotificationsMenu(isActive: boolean): React.ReactElement { if (this.props.isMinimized || MatrixClientPeg.get().isGuest() || this.props.tag === DefaultTagID.Invite) { // the menu makes no sense in these cases so do not show one return null; @@ -296,6 +296,7 @@ export default class RoomTile2 extends React.Component { onClick={this.onNotificationsMenuOpenClick} label={_t("Notification options")} isExpanded={!!this.state.notificationsMenuPosition} + tabIndex={isActive ? 0 : -1} /> {contextMenu} @@ -434,7 +435,7 @@ export default class RoomTile2 extends React.Component { {roomAvatar} {nameContainer} {badge} - {this.renderNotificationsMenu()} + {this.renderNotificationsMenu(isActive)} {this.renderGeneralMenu()} } From 111d4adab2b87c5ed019b4aff6bd7df85c61f1b1 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 22:38:11 +0100 Subject: [PATCH 0628/1504] Convert createRoom over to typescript Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/{createRoom.js => createRoom.ts} | 68 +++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 7 deletions(-) rename src/{createRoom.js => createRoom.ts} (81%) diff --git a/src/createRoom.js b/src/createRoom.ts similarity index 81% rename from src/createRoom.js rename to src/createRoom.ts index affdf196a7..b863450065 100644 --- a/src/createRoom.js +++ b/src/createRoom.ts @@ -15,6 +15,9 @@ 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 {MatrixClientPeg} from './MatrixClientPeg'; import Modal from './Modal'; import * as sdk from './index'; @@ -26,6 +29,56 @@ import {getAddressType} from "./UserAddress"; const E2EE_WK_KEY = "im.vector.riot.e2ee"; +// TODO move these interfaces over to js-sdk once it has been typescripted enough to accept them +enum Visibility { + Public = "public", + Private = "private", +} + +enum Preset { + PrivateChat = "private_chat", + TrustedPrivateChat = "trusted_private_chat", + PublicChat = "public_chat", +} + +interface Invite3PID { + id_server: string; + id_access_token?: string; // this gets injected by the js-sdk + medium: string; + address: string; +} + +interface IStateEvent { + type: string; + state_key?: string; // defaults to an empty string + content: object; +} + +interface ICreateOpts { + visibility?: Visibility; + room_alias_name?: string; + name?: string; + topic?: string; + invite?: string[]; + invite_3pid?: Invite3PID[]; + room_version?: string; + creation_content?: object; + initial_state?: IStateEvent[]; + preset?: Preset; + is_direct?: boolean; + power_level_content_override?: object; +} + +interface IOpts { + dmUserId?: string; + createOpts?: ICreateOpts; + spinner?: boolean; + guestAccess?: boolean; + encryption?: boolean; + inlineErrors?: boolean; + andView?: boolean; +} + /** * Create a new room, and switch to it. * @@ -40,11 +93,12 @@ const E2EE_WK_KEY = "im.vector.riot.e2ee"; * Default: False * @param {bool=} opts.inlineErrors True to raise errors off the promise instead of resolving to null. * Default: False + * @param {bool=} opts.andView True to dispatch an action to view the room once it has been created. * * @returns {Promise} which resolves to the room id, or null if the * action was aborted or failed. */ -export default function createRoom(opts) { +export default function createRoom(opts: IOpts): Promise { opts = opts || {}; if (opts.spinner === undefined) opts.spinner = true; if (opts.guestAccess === undefined) opts.guestAccess = true; @@ -59,12 +113,12 @@ export default function createRoom(opts) { return Promise.resolve(null); } - const defaultPreset = opts.dmUserId ? 'trusted_private_chat' : 'private_chat'; + const defaultPreset = opts.dmUserId ? Preset.TrustedPrivateChat : Preset.PrivateChat; // set some defaults for the creation const createOpts = opts.createOpts || {}; createOpts.preset = createOpts.preset || defaultPreset; - createOpts.visibility = createOpts.visibility || 'private'; + createOpts.visibility = createOpts.visibility || Visibility.Private; if (opts.dmUserId && createOpts.invite === undefined) { switch (getAddressType(opts.dmUserId)) { case 'mx-user-id': @@ -166,7 +220,7 @@ export default function createRoom(opts) { }); } -export function findDMForUser(client, userId) { +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 => { @@ -189,7 +243,7 @@ export function findDMForUser(client, userId) { * NOTE: this assumes you've just created the room and there's not been an opportunity * for other code to run, so we shouldn't miss RoomState.newMember when it comes by. */ -export async function _waitForMember(client, roomId, userId, opts = { timeout: 1500 }) { +export async function _waitForMember(client: MatrixClient, roomId: string, userId: string, opts = { timeout: 1500 }) { const { timeout } = opts; let handler; return new Promise((resolve) => { @@ -212,7 +266,7 @@ export async function _waitForMember(client, roomId, userId, opts = { timeout: 1 * Ensure that for every user in a room, there is at least one device that we * can encrypt to. */ -export async function canEncryptToAllUsers(client, userIds) { +export async function canEncryptToAllUsers(client: MatrixClient, userIds: string[]) { const usersDeviceMap = await client.downloadKeys(userIds); // { "@user:host": { "DEVICE": {...}, ... }, ... } return Object.values(usersDeviceMap).every((userDevices) => @@ -221,7 +275,7 @@ export async function canEncryptToAllUsers(client, userIds) { ); } -export async function ensureDMExists(client, userId) { +export async function ensureDMExists(client: MatrixClient, userId: string): Promise { const existingDMRoom = findDMForUser(client, userId); let roomId; if (existingDMRoom) { From 97711032d8bb94848fabe959edc3ccf7daff2df9 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 22:38:21 +0100 Subject: [PATCH 0629/1504] Fix signature of sleep utility Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/utils/promise.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/promise.ts b/src/utils/promise.ts index c5c1cb9a56..d3ae2c3d1b 100644 --- a/src/utils/promise.ts +++ b/src/utils/promise.ts @@ -15,7 +15,7 @@ limitations under the License. */ // Returns a promise which resolves with a given value after the given number of ms -export function sleep(ms: number, value: T): Promise { +export function sleep(ms: number, value?: T): Promise { return new Promise((resolve => { setTimeout(resolve, ms, value); })); } From 7322aaf6023784ae2bb1dbd556a911611bcd0af6 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 22:42:28 +0100 Subject: [PATCH 0630/1504] Convert PlatformPeg to Typescript Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/@types/global.d.ts | 2 ++ src/{PlatformPeg.js => PlatformPeg.ts} | 15 ++++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) rename src/{PlatformPeg.js => PlatformPeg.ts} (82%) diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index ffd3277892..8486016cd0 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -20,6 +20,7 @@ import { IMatrixClientPeg } from "../MatrixClientPeg"; import ToastStore from "../stores/ToastStore"; import DeviceListener from "../DeviceListener"; import { RoomListStore2 } from "../stores/room-list/RoomListStore2"; +import { PlatformPeg } from "../PlatformPeg"; declare global { interface Window { @@ -33,6 +34,7 @@ declare global { mx_ToastStore: ToastStore; mx_DeviceListener: DeviceListener; mx_RoomListStore2: RoomListStore2; + mxPlatformPeg: PlatformPeg; } // workaround for https://github.com/microsoft/TypeScript/issues/30933 diff --git a/src/PlatformPeg.js b/src/PlatformPeg.ts similarity index 82% rename from src/PlatformPeg.js rename to src/PlatformPeg.ts index 34131fde7d..42cb7acaf7 100644 --- a/src/PlatformPeg.js +++ b/src/PlatformPeg.ts @@ -1,5 +1,6 @@ /* Copyright 2016 OpenMarket Ltd +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. @@ -14,6 +15,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +import BasePlatform from "./BasePlatform"; + /* * Holds the current Platform object used by the code to do anything * specific to the platform we're running on (eg. web, electron) @@ -21,10 +24,8 @@ limitations under the License. * This allows the app layer to set a Platform without necessarily * having to have a MatrixChat object */ -class PlatformPeg { - constructor() { - this.platform = null; - } +export class PlatformPeg { + platform: BasePlatform = null; /** * Returns the current Platform object for the application. @@ -44,7 +45,7 @@ class PlatformPeg { } } -if (!global.mxPlatformPeg) { - global.mxPlatformPeg = new PlatformPeg(); +if (!window.mxPlatformPeg) { + window.mxPlatformPeg = new PlatformPeg(); } -export default global.mxPlatformPeg; +export default window.mxPlatformPeg; From 1ab0a1a1defc1c75c54302ef5ac51c4b71d5ddf0 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 23:14:31 +0100 Subject: [PATCH 0631/1504] First step towards a11y in the new room list Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/BasePlatform.ts | 4 ++++ src/PlatformPeg.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/BasePlatform.ts b/src/BasePlatform.ts index 1d11495e61..acf72a986c 100644 --- a/src/BasePlatform.ts +++ b/src/BasePlatform.ts @@ -53,6 +53,10 @@ export default abstract class BasePlatform { this.startUpdateCheck = this.startUpdateCheck.bind(this); } + abstract async getConfig(): Promise<{}>; + + abstract getDefaultDeviceDisplayName(): string; + protected onAction = (payload: ActionPayload) => { switch (payload.action) { case 'on_client_not_viable': diff --git a/src/PlatformPeg.ts b/src/PlatformPeg.ts index 42cb7acaf7..1d2b813ebc 100644 --- a/src/PlatformPeg.ts +++ b/src/PlatformPeg.ts @@ -40,7 +40,7 @@ export class PlatformPeg { * application. * This should be an instance of a class extending BasePlatform. */ - set(plaf) { + set(plaf: BasePlatform) { this.platform = plaf; } } From 48ce294a497211eff1405b47ca1fc2219857b0db Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 23:15:08 +0100 Subject: [PATCH 0632/1504] Transition languageHandler to Typescript Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- package.json | 1 + src/@types/global.d.ts | 4 ++ src/components/views/toasts/GenericToast.tsx | 4 +- ...languageHandler.js => languageHandler.tsx} | 72 ++++++++++++------- yarn.lock | 5 ++ 5 files changed, 57 insertions(+), 29 deletions(-) rename src/{languageHandler.js => languageHandler.tsx} (87%) diff --git a/package.json b/package.json index e8719520c4..a79a0467ff 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,7 @@ "@babel/register": "^7.7.4", "@peculiar/webcrypto": "^1.0.22", "@types/classnames": "^2.2.10", + "@types/counterpart": "^0.18.1", "@types/flux": "^3.1.9", "@types/lodash": "^4.14.152", "@types/modernizr": "^3.5.3", diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index 8486016cd0..2c2fec759c 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -47,6 +47,10 @@ declare global { hasStorageAccess?: () => Promise; } + interface Navigator { + userLanguage?: string; + } + interface StorageEstimate { usageDetails?: {[key: string]: number}; } diff --git a/src/components/views/toasts/GenericToast.tsx b/src/components/views/toasts/GenericToast.tsx index 9f8885ba47..6cd881b9eb 100644 --- a/src/components/views/toasts/GenericToast.tsx +++ b/src/components/views/toasts/GenericToast.tsx @@ -14,13 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React, {ReactChild} from "react"; +import React, {ReactNode} from "react"; import FormButton from "../elements/FormButton"; import {XOR} from "../../../@types/common"; export interface IProps { - description: ReactChild; + description: ReactNode; acceptLabel: string; onAccept(); diff --git a/src/languageHandler.js b/src/languageHandler.tsx similarity index 87% rename from src/languageHandler.js rename to src/languageHandler.tsx index 79a172015a..91d90d4e6c 100644 --- a/src/languageHandler.js +++ b/src/languageHandler.tsx @@ -1,7 +1,7 @@ /* Copyright 2017 MTRNord and Cooperative EITA Copyright 2017 Vector Creations Ltd. -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 2020 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,10 +20,11 @@ limitations under the License. import request from 'browser-request'; import counterpart from 'counterpart'; import React from 'react'; + import SettingsStore, {SettingLevel} from "./settings/SettingsStore"; import PlatformPeg from "./PlatformPeg"; -// $webapp is a webpack resolve alias pointing to the output directory, see webpack config +// @ts-ignore - $webapp is a webpack resolve alias pointing to the output directory, see webpack config import webpackLangJsonUrl from "$webapp/i18n/languages.json"; const i18nFolder = 'i18n/'; @@ -37,27 +38,31 @@ counterpart.setSeparator('|'); // Fall back to English counterpart.setFallbackLocale('en'); +interface ITranslatableError extends Error { + translatedMessage: string; +} + /** * Helper function to create an error which has an English message * with a translatedMessage property for use by the consumer. * @param {string} message Message to translate. * @returns {Error} The constructed error. */ -export function newTranslatableError(message) { - const error = new Error(message); +export function newTranslatableError(message: string) { + const error = new Error(message) as ITranslatableError; error.translatedMessage = _t(message); return error; } // Function which only purpose is to mark that a string is translatable // Does not actually do anything. It's helpful for automatic extraction of translatable strings -export function _td(s) { +export function _td(s: string): string { return s; } // Wrapper for counterpart's translation function so that it handles nulls and undefineds properly // Takes the same arguments as counterpart.translate() -function safeCounterpartTranslate(text, options) { +function safeCounterpartTranslate(text: string, options?: object) { // Horrible hack to avoid https://github.com/vector-im/riot-web/issues/4191 // The interpolation library that counterpart uses does not support undefined/null // values and instead will throw an error. This is a problem since everywhere else @@ -89,6 +94,13 @@ function safeCounterpartTranslate(text, options) { return translated; } +interface IVariables { + count?: number; + [key: string]: number | string; +} + +type Tags = Record 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". @@ -105,7 +117,9 @@ function safeCounterpartTranslate(text, options) { * * @return a React component if any non-strings were used in substitutions, otherwise a string */ -export function _t(text, variables, tags) { +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 { // 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 @@ -141,23 +155,25 @@ export function _t(text, variables, tags) { * * @return a React component if any non-strings were used in substitutions, otherwise a string */ -export function substitute(text, variables, tags) { - let result = text; +export function substitute(text: string, variables?: IVariables): string; +export function substitute(text: string, variables: IVariables, tags: Tags): string; +export function substitute(text: string, variables?: IVariables, tags?: Tags): string | React.ReactNode { + let result: React.ReactNode | string = text; if (variables !== undefined) { - const regexpMapping = {}; + const regexpMapping: IVariables = {}; for (const variable in variables) { regexpMapping[`%\\(${variable}\\)s`] = variables[variable]; } - result = replaceByRegexes(result, regexpMapping); + result = replaceByRegexes(result as string, regexpMapping); } if (tags !== undefined) { - const regexpMapping = {}; + const regexpMapping: Tags = {}; for (const tag in tags) { regexpMapping[`(<${tag}>(.*?)<\\/${tag}>|<${tag}>|<${tag}\\s*\\/>)`] = tags[tag]; } - result = replaceByRegexes(result, regexpMapping); + result = replaceByRegexes(result as string, regexpMapping); } return result; @@ -172,7 +188,9 @@ export function substitute(text, variables, tags) { * * @return a React component if any non-strings were used in substitutions, otherwise a string */ -export function replaceByRegexes(text, mapping) { +export function replaceByRegexes(text: string, mapping: IVariables): string; +export function replaceByRegexes(text: string, mapping: Tags): React.ReactNode; +export function replaceByRegexes(text: string, mapping: IVariables | Tags): string | React.ReactNode { // We initially store our output as an array of strings and objects (e.g. React components). // This will then be converted to a string or a at the end const output = [text]; @@ -189,7 +207,7 @@ export function replaceByRegexes(text, mapping) { // and everything after the match. Insert all three into the output. We need to do this because we can insert objects. // Otherwise there would be no need for the splitting and we could do simple replacement. let matchFoundSomewhere = false; // If we don't find a match anywhere we want to log it - for (const outputIndex in output) { + for (let outputIndex = 0; outputIndex < output.length; outputIndex++) { const inputText = output[outputIndex]; if (typeof inputText !== 'string') { // We might have inserted objects earlier, don't try to replace them continue; @@ -216,7 +234,7 @@ export function replaceByRegexes(text, mapping) { let replaced; // If substitution is a function, call it if (mapping[regexpString] instanceof Function) { - replaced = mapping[regexpString].apply(null, capturedGroups); + replaced = (mapping as Tags)[regexpString].apply(null, capturedGroups); } else { replaced = mapping[regexpString]; } @@ -277,11 +295,11 @@ export function replaceByRegexes(text, mapping) { // Allow overriding the text displayed when no translation exists // Currently only used in unit tests to avoid having to load // the translations in riot-web -export function setMissingEntryGenerator(f) { +export function setMissingEntryGenerator(f: (value: string) => void) { counterpart.setMissingEntryGenerator(f); } -export function setLanguage(preferredLangs) { +export function setLanguage(preferredLangs: string | string[]) { if (!Array.isArray(preferredLangs)) { preferredLangs = [preferredLangs]; } @@ -358,8 +376,8 @@ export function getLanguageFromBrowser() { * @param {string} language The input language string * @return {string[]} List of normalised languages */ -export function getNormalizedLanguageKeys(language) { - const languageKeys = []; +export function getNormalizedLanguageKeys(language: string) { + const languageKeys: string[] = []; const normalizedLanguage = normalizeLanguageKey(language); const languageParts = normalizedLanguage.split('-'); if (languageParts.length === 2 && languageParts[0] === languageParts[1]) { @@ -380,7 +398,7 @@ export function getNormalizedLanguageKeys(language) { * @param {string} language The language string to be normalized * @returns {string} The normalized language string */ -export function normalizeLanguageKey(language) { +export function normalizeLanguageKey(language: string) { return language.toLowerCase().replace("_", "-"); } @@ -396,7 +414,7 @@ export function getCurrentLanguage() { * @param {string[]} langs List of language codes to pick from * @returns {string} The most appropriate language code from langs */ -export function pickBestLanguage(langs) { +export function pickBestLanguage(langs: string[]): string { const currentLang = getCurrentLanguage(); const normalisedLangs = langs.map(normalizeLanguageKey); @@ -408,13 +426,13 @@ export function pickBestLanguage(langs) { { // Failing that, a different dialect of the same language - const closeLangIndex = normalisedLangs.find((l) => l.substr(0, 2) === currentLang.substr(0, 2)); + const closeLangIndex = normalisedLangs.findIndex((l) => l.substr(0, 2) === currentLang.substr(0, 2)); if (closeLangIndex > -1) return langs[closeLangIndex]; } { // Neither of those? Try an english variant. - const enIndex = normalisedLangs.find((l) => l.startsWith('en')); + const enIndex = normalisedLangs.findIndex((l) => l.startsWith('en')); if (enIndex > -1) return langs[enIndex]; } @@ -422,7 +440,7 @@ export function pickBestLanguage(langs) { return langs[0]; } -function getLangsJson() { +function getLangsJson(): Promise { return new Promise(async (resolve, reject) => { let url; if (typeof(webpackLangJsonUrl) === 'string') { // in Jest this 'url' isn't a URL, so just fall through @@ -443,7 +461,7 @@ function getLangsJson() { }); } -function weblateToCounterpart(inTrs) { +function weblateToCounterpart(inTrs: object): object { const outTrs = {}; for (const key of Object.keys(inTrs)) { @@ -463,7 +481,7 @@ function weblateToCounterpart(inTrs) { return outTrs; } -function getLanguage(langPath) { +function getLanguage(langPath: string): object { return new Promise((resolve, reject) => { request( { method: "GET", url: langPath }, diff --git a/yarn.lock b/yarn.lock index c20658f014..b51f7af45b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1257,6 +1257,11 @@ resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.10.tgz#cc658ca319b6355399efc1f5b9e818f1a24bf999" integrity sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ== +"@types/counterpart@^0.18.1": + version "0.18.1" + resolved "https://registry.yarnpkg.com/@types/counterpart/-/counterpart-0.18.1.tgz#b1b784d9e54d9879f0a8cb12f2caedab65430fe8" + integrity sha512-PRuFlBBkvdDOtxlIASzTmkEFar+S66Ek48NVVTWMUjtJAdn5vyMSN8y6IZIoIymGpR36q2nZbIYazBWyFxL+IQ== + "@types/fbemitter@*": version "2.0.32" resolved "https://registry.yarnpkg.com/@types/fbemitter/-/fbemitter-2.0.32.tgz#8ed204da0f54e9c8eaec31b1eec91e25132d082c" From 5c5482a8ae530a9d06ca4fe356d9a57a8f0efc22 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 23:20:16 +0100 Subject: [PATCH 0633/1504] I've got 99 problems and this badge mismatch is no longer one Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomTile2.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 577387948c..25b60b7898 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -287,8 +287,9 @@ export default class RoomTile2 extends React.Component { const classes = classNames("mx_RoomTile2_notificationsButton", { // Show bell icon for the default case too. - mx_RoomTile2_iconBell: state === ALL_MESSAGES_LOUD || state === ALL_MESSAGES, - mx_RoomTile2_iconBellDot: state === MENTIONS_ONLY, + mx_RoomTile2_iconBell: state === state === ALL_MESSAGES, + mx_RoomTile2_iconBellDot: state === ALL_MESSAGES_LOUD, + mx_RoomTile2_iconBellMentions: state === MENTIONS_ONLY, mx_RoomTile2_iconBellCrossed: state === MUTE, // Only show the icon by default if the room is overridden to muted. From f69a090d3d438eca7ec09c7da9b2ac2719205fd4 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 23:22:36 +0100 Subject: [PATCH 0634/1504] delint Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/createRoom.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/createRoom.ts b/src/createRoom.ts index b863450065..c436196c27 100644 --- a/src/createRoom.ts +++ b/src/createRoom.ts @@ -16,7 +16,7 @@ limitations under the License. */ import {MatrixClient} from "matrix-js-sdk/src/client"; -import {Room} from "matrix-js-sdk/src/models/Room"; +import {Room} from "matrix-js-sdk/src/models/room"; import {MatrixClientPeg} from './MatrixClientPeg'; import Modal from './Modal'; From ae076a7439a854104db2f1e2fe555e6ad0941529 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 2 Jul 2020 16:23:33 -0600 Subject: [PATCH 0635/1504] Add a null guard for message event previews --- src/stores/room-list/previews/MessageEventPreview.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/stores/room-list/previews/MessageEventPreview.ts b/src/stores/room-list/previews/MessageEventPreview.ts index 6f0dc14a58..86ec4c539b 100644 --- a/src/stores/room-list/previews/MessageEventPreview.ts +++ b/src/stores/room-list/previews/MessageEventPreview.ts @@ -30,6 +30,8 @@ export class MessageEventPreview implements IPreview { eventContent = event.getContent()['m.new_content']; } + if (!eventContent || !eventContent['body']) return null; // invalid for our purposes + let body = (eventContent['body'] || '').trim(); const msgtype = eventContent['msgtype']; if (!body || !msgtype) return null; // invalid event, no preview From 33612398bed6383501bb1c2327f5fdc41a35c11b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 23:26:39 +0100 Subject: [PATCH 0636/1504] fix import Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/groups.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/groups.js b/src/groups.js index 860cf71fff..e73af15c79 100644 --- a/src/groups.js +++ b/src/groups.js @@ -15,7 +15,8 @@ limitations under the License. */ import PropTypes from 'prop-types'; -import { _t } from './languageHandler.js'; + +import { _t } from './languageHandler'; export const GroupMemberType = PropTypes.shape({ userId: PropTypes.string.isRequired, From 96cfd26bd42ea1437e4cc4486e1338ce45becc59 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 23:32:21 +0100 Subject: [PATCH 0637/1504] fix imports some more Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/elements/EditableItemList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/elements/EditableItemList.js b/src/components/views/elements/EditableItemList.js index 50d5a3d10f..34e53906a2 100644 --- a/src/components/views/elements/EditableItemList.js +++ b/src/components/views/elements/EditableItemList.js @@ -16,7 +16,7 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; -import {_t} from '../../../languageHandler.js'; +import {_t} from '../../../languageHandler'; import Field from "./Field"; import AccessibleButton from "./AccessibleButton"; From d725cc338924421c2ef5d2f231cad699a8298a6c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 23:39:27 +0100 Subject: [PATCH 0638/1504] convert MatrixClientContext to Typescript Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../{MatrixClientContext.js => MatrixClientContext.ts} | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename src/contexts/{MatrixClientContext.js => MatrixClientContext.ts} (85%) diff --git a/src/contexts/MatrixClientContext.js b/src/contexts/MatrixClientContext.ts similarity index 85% rename from src/contexts/MatrixClientContext.js rename to src/contexts/MatrixClientContext.ts index 54a23ca132..7e8a92064d 100644 --- a/src/contexts/MatrixClientContext.js +++ b/src/contexts/MatrixClientContext.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { createContext } from "react"; +import { MatrixClient } from "matrix-js-sdk/src/client"; -const MatrixClientContext = createContext(undefined); +const MatrixClientContext = createContext(undefined); MatrixClientContext.displayName = "MatrixClientContext"; export default MatrixClientContext; From 98ce1dafee5e009844a0d0bc3bbb82c08ad5a46a Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 2 Jul 2020 16:36:07 -0600 Subject: [PATCH 0639/1504] Remove a bunch of noisy logging from the room list None of these logs are actually needed for troubleshooting anymore. --- src/stores/room-list/RoomListStore2.ts | 10 -------- src/stores/room-list/algorithms/Algorithm.ts | 23 ------------------- .../list-ordering/ImportanceAlgorithm.ts | 3 --- .../list-ordering/NaturalAlgorithm.ts | 3 --- .../filters/CommunityFilterCondition.ts | 2 -- .../room-list/filters/NameFilterCondition.ts | 2 -- 6 files changed, 43 deletions(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index e5205f6051..d4aec93035 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -101,8 +101,6 @@ export class RoomListStore2 extends AsyncStore { console.warn(`${activeRoomId} is current in RVS but missing from client - clearing sticky room`); this.algorithm.stickyRoom = null; } else if (activeRoom !== this.algorithm.stickyRoom) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Changing sticky room to ${activeRoomId}`); this.algorithm.stickyRoom = activeRoom; } } @@ -299,8 +297,6 @@ export class RoomListStore2 extends AsyncStore { private async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise { const shouldUpdate = await this.algorithm.handleRoomUpdate(room, cause); if (shouldUpdate) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[DEBUG] Room "${room.name}" (${room.roomId}) triggered by ${cause} requires list update`); this.emit(LISTS_UPDATE_EVENT, this); } } @@ -367,8 +363,6 @@ export class RoomListStore2 extends AsyncStore { } private onAlgorithmListUpdated = () => { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log("Underlying algorithm has triggered a list update - refiring"); this.emit(LISTS_UPDATE_EVENT, this); }; @@ -408,8 +402,6 @@ export class RoomListStore2 extends AsyncStore { } public addFilter(filter: IFilterCondition): void { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log("Adding filter condition:", filter); this.filterConditions.push(filter); if (this.algorithm) { this.algorithm.addFilterCondition(filter); @@ -417,8 +409,6 @@ export class RoomListStore2 extends AsyncStore { } public removeFilter(filter: IFilterCondition): void { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log("Removing filter condition:", filter); const idx = this.filterConditions.indexOf(filter); if (idx >= 0) { this.filterConditions.splice(idx, 1); diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index 36abf86975..80ca4656af 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -272,9 +272,6 @@ export class Algorithm extends EventEmitter { } } newMap[tagId] = allowedRoomsInThisTag; - - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[DEBUG] ${newMap[tagId].length}/${rooms.length} rooms filtered into ${tagId}`); } const allowedRooms = Object.values(newMap).reduce((rv, v) => { rv.push(...v); return rv; }, []); @@ -310,9 +307,6 @@ export class Algorithm extends EventEmitter { if (filteredRooms.length > 0) { this.filteredRooms[tagId] = filteredRooms; } - - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[DEBUG] ${filteredRooms.length}/${rooms.length} rooms filtered into ${tagId}`); } protected tryInsertStickyRoomToFilterSet(rooms: Room[], tagId: TagID) { @@ -351,8 +345,6 @@ export class Algorithm extends EventEmitter { } if (!this._cachedStickyRooms || !updatedTag) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Generating clone of cached rooms for sticky room handling`); const stickiedTagMap: ITagMap = {}; for (const tagId of Object.keys(this.cachedRooms)) { stickiedTagMap[tagId] = this.cachedRooms[tagId].map(r => r); // shallow clone @@ -363,8 +355,6 @@ export class Algorithm extends EventEmitter { if (updatedTag) { // Update the tag indicated by the caller, if possible. This is mostly to ensure // our cache is up to date. - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Replacing cached sticky rooms for ${updatedTag}`); this._cachedStickyRooms[updatedTag] = this.cachedRooms[updatedTag].map(r => r); // shallow clone } @@ -373,8 +363,6 @@ export class Algorithm extends EventEmitter { // we might have updated from the cache is also our sticky room. const sticky = this._stickyRoom; if (!updatedTag || updatedTag === sticky.tag) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Inserting sticky room ${sticky.room.roomId} at position ${sticky.position} in ${sticky.tag}`); this._cachedStickyRooms[sticky.tag].splice(sticky.position, 0, sticky.room); } @@ -466,13 +454,9 @@ export class Algorithm extends EventEmitter { // Split out the easy rooms first (leave and invite) const memberships = splitRoomsByMembership(rooms); for (const room of memberships[EffectiveMembership.Invite]) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[DEBUG] "${room.name}" (${room.roomId}) is an Invite`); newTags[DefaultTagID.Invite].push(room); } for (const room of memberships[EffectiveMembership.Leave]) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[DEBUG] "${room.name}" (${room.roomId}) is Historical`); newTags[DefaultTagID.Archived].push(room); } @@ -483,11 +467,7 @@ export class Algorithm extends EventEmitter { let inTag = false; if (tags.length > 0) { for (const tag of tags) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[DEBUG] "${room.name}" (${room.roomId}) is tagged as ${tag}`); if (!isNullOrUndefined(newTags[tag])) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[DEBUG] "${room.name}" (${room.roomId}) is tagged with VALID tag ${tag}`); newTags[tag].push(room); inTag = true; } @@ -497,9 +477,6 @@ export class Algorithm extends EventEmitter { if (!inTag) { // TODO: Determine if DM and push there instead: https://github.com/vector-im/riot-web/issues/14236 newTags[DefaultTagID.Untagged].push(room); - - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[DEBUG] "${room.name}" (${room.roomId}) is Untagged`); } } diff --git a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts index e95f92f985..71b6e89df3 100644 --- a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts @@ -87,9 +87,6 @@ export class ImportanceAlgorithm extends OrderingAlgorithm { public constructor(tagId: TagID, initialSortingAlgorithm: SortAlgorithm) { super(tagId, initialSortingAlgorithm); - - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Constructed an ImportanceAlgorithm for ${tagId}`); } // noinspection JSMethodCanBeStatic diff --git a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts index f74329cb4d..1a75d8cf06 100644 --- a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts @@ -28,9 +28,6 @@ export class NaturalAlgorithm extends OrderingAlgorithm { public constructor(tagId: TagID, initialSortingAlgorithm: SortAlgorithm) { super(tagId, initialSortingAlgorithm); - - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Constructed a NaturalAlgorithm for ${tagId}`); } public async setRooms(rooms: Room[]): Promise { diff --git a/src/stores/room-list/filters/CommunityFilterCondition.ts b/src/stores/room-list/filters/CommunityFilterCondition.ts index 9f7d8daaa3..45e65fb4f4 100644 --- a/src/stores/room-list/filters/CommunityFilterCondition.ts +++ b/src/stores/room-list/filters/CommunityFilterCondition.ts @@ -52,8 +52,6 @@ export class CommunityFilterCondition extends EventEmitter implements IFilterCon const beforeRoomIds = this.roomIds; this.roomIds = (await GroupStore.getGroupRooms(this.community.groupId)).map(r => r.roomId); if (arrayHasDiff(beforeRoomIds, this.roomIds)) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log("Updating filter for group: ", this.community.groupId); this.emit(FILTER_CHANGED); } }; diff --git a/src/stores/room-list/filters/NameFilterCondition.ts b/src/stores/room-list/filters/NameFilterCondition.ts index 12f147990d..6014a122f8 100644 --- a/src/stores/room-list/filters/NameFilterCondition.ts +++ b/src/stores/room-list/filters/NameFilterCondition.ts @@ -41,8 +41,6 @@ export class NameFilterCondition extends EventEmitter implements IFilterConditio public set search(val: string) { this._search = val; - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log("Updating filter for room name search:", this._search); this.emit(FILTER_CHANGED); } From 0854924b8dd3b84850649cf5c257293e4330ef60 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 23:51:02 +0100 Subject: [PATCH 0640/1504] iterate some more Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/ContextMenu.tsx | 34 +++++++++++------------ 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/components/structures/ContextMenu.tsx b/src/components/structures/ContextMenu.tsx index c76bbe6133..e45d846bd0 100644 --- a/src/components/structures/ContextMenu.tsx +++ b/src/components/structures/ContextMenu.tsx @@ -114,7 +114,7 @@ export class ContextMenu extends React.PureComponent { this.initialFocus.focus(); } - collectContextMenuRect = (element) => { + private collectContextMenuRect = (element) => { // We don't need to clean up when unmounting, so ignore if (!element) return; @@ -131,7 +131,7 @@ export class ContextMenu extends React.PureComponent { }); }; - onContextMenu = (e) => { + private onContextMenu = (e) => { if (this.props.onFinished) { this.props.onFinished(); @@ -154,20 +154,20 @@ export class ContextMenu extends React.PureComponent { } }; - onContextMenuPreventBubbling = (e) => { + private onContextMenuPreventBubbling = (e) => { // stop propagation so that any context menu handlers don't leak out of this context menu // but do not inhibit the default browser menu e.stopPropagation(); }; // Prevent clicks on the background from going through to the component which opened the menu. - _onFinished = (ev: InputEvent) => { + private onFinished = (ev: React.MouseEvent) => { ev.stopPropagation(); ev.preventDefault(); if (this.props.onFinished) this.props.onFinished(); }; - _onMoveFocus = (element, up) => { + private onMoveFocus = (element: Element, up: boolean) => { let descending = false; // are we currently descending or ascending through the DOM tree? do { @@ -201,25 +201,25 @@ export class ContextMenu extends React.PureComponent { } while (element && !ARIA_MENU_ITEM_ROLES.has(element.getAttribute("role"))); if (element) { - element.focus(); + (element as HTMLElement).focus(); } }; - _onMoveFocusHomeEnd = (element, up) => { + private onMoveFocusHomeEnd = (element: Element, up: boolean) => { let results = element.querySelectorAll('[role^="menuitem"]'); if (!results) { results = element.querySelectorAll('[tab-index]'); } if (results && results.length) { if (up) { - results[0].focus(); + (results[0] as HTMLElement).focus(); } else { - results[results.length - 1].focus(); + (results[results.length - 1] as HTMLElement).focus(); } } }; - _onKeyDown = (ev) => { + private onKeyDown = (ev: React.KeyboardEvent) => { if (!this.props.managed) { if (ev.key === Key.ESCAPE) { this.props.onFinished(); @@ -237,16 +237,16 @@ export class ContextMenu extends React.PureComponent { this.props.onFinished(); break; case Key.ARROW_UP: - this._onMoveFocus(ev.target, true); + this.onMoveFocus(ev.target as Element, true); break; case Key.ARROW_DOWN: - this._onMoveFocus(ev.target, false); + this.onMoveFocus(ev.target as Element, false); break; case Key.HOME: - this._onMoveFocusHomeEnd(this.state.contextMenuElem, true); + this.onMoveFocusHomeEnd(this.state.contextMenuElem, true); break; case Key.END: - this._onMoveFocusHomeEnd(this.state.contextMenuElem, false); + this.onMoveFocusHomeEnd(this.state.contextMenuElem, false); break; default: handled = false; @@ -259,7 +259,7 @@ export class ContextMenu extends React.PureComponent { } }; - renderMenu(hasBackground = this.props.hasBackground) { + protected renderMenu(hasBackground = this.props.hasBackground) { const position: Partial> = {}; const props = this.props; @@ -356,7 +356,7 @@ export class ContextMenu extends React.PureComponent {
    ); @@ -366,7 +366,7 @@ export class ContextMenu extends React.PureComponent {
    Date: Fri, 3 Jul 2020 00:14:51 +0100 Subject: [PATCH 0641/1504] fix notifications icons some more Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomTile2.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 25b60b7898..2c5b46f63c 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -287,7 +287,7 @@ export default class RoomTile2 extends React.Component { const classes = classNames("mx_RoomTile2_notificationsButton", { // Show bell icon for the default case too. - mx_RoomTile2_iconBell: state === state === ALL_MESSAGES, + mx_RoomTile2_iconBell: state === ALL_MESSAGES, mx_RoomTile2_iconBellDot: state === ALL_MESSAGES_LOUD, mx_RoomTile2_iconBellMentions: state === MENTIONS_ONLY, mx_RoomTile2_iconBellCrossed: state === MUTE, From eb5f6de25ffb54c62755df227447786a7f5bb245 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 3 Jul 2020 12:17:54 +0200 Subject: [PATCH 0642/1504] only show topmost top sticky header --- src/components/structures/LeftPanel2.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 0f614435e5..0e9d3dd8d0 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -110,6 +110,7 @@ export default class LeftPanel2 extends React.Component { const headerStickyWidth = rlRect.width - headerRightMargin; let gotBottom = false; + let lastTopHeader; for (const sublist of sublists) { const slRect = sublist.getBoundingClientRect(); @@ -126,6 +127,12 @@ export default class LeftPanel2 extends React.Component { header.classList.add("mx_RoomSublist2_headerContainer_stickyTop"); header.style.width = `${headerStickyWidth}px`; header.style.top = `${rlRect.top}px`; + if (lastTopHeader) { + lastTopHeader.style.display = "none"; + } + // first unset it, if set in last iteration + header.style.removeProperty("display"); + lastTopHeader = header; } else { header.classList.remove("mx_RoomSublist2_headerContainer_sticky"); header.classList.remove("mx_RoomSublist2_headerContainer_stickyTop"); From 04142a8723d2fb07983501ad52dc7b559b087ccf Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 3 Jul 2020 12:06:00 +0100 Subject: [PATCH 0643/1504] Remove duplicate compact settings, handle device level updates This removes the duplicate setting for compact layout from the appearance tab, and leaves the "advanced" one, matching the intention from Design. This also adds the relevant handling to ensure the device-level setting triggers an update immediately when changed. Fixes https://github.com/vector-im/riot-web/issues/14304 --- src/components/structures/LoggedInView.tsx | 17 ++++++++++++----- .../tabs/user/AppearanceUserSettingsTab.tsx | 1 - src/settings/Settings.js | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/components/structures/LoggedInView.tsx b/src/components/structures/LoggedInView.tsx index 9c01480df2..9fbc98dee3 100644 --- a/src/components/structures/LoggedInView.tsx +++ b/src/components/structures/LoggedInView.tsx @@ -146,6 +146,7 @@ class LoggedInView extends React.Component { protected readonly _resizeContainer: React.RefObject; protected readonly _sessionStore: sessionStore; protected readonly _sessionStoreToken: { remove: () => void }; + protected readonly _compactLayoutWatcherRef: string; protected resizer: Resizer; constructor(props, context) { @@ -177,6 +178,10 @@ class LoggedInView extends React.Component { this._matrixClient.on("sync", this.onSync); this._matrixClient.on("RoomState.events", this.onRoomStateEvents); + this._compactLayoutWatcherRef = SettingsStore.watchSetting( + "useCompactLayout", null, this.onCompactLayoutChanged, + ); + fixupColorFonts(); this._roomView = React.createRef(); @@ -194,6 +199,7 @@ class LoggedInView extends React.Component { this._matrixClient.removeListener("accountData", this.onAccountData); this._matrixClient.removeListener("sync", this.onSync); this._matrixClient.removeListener("RoomState.events", this.onRoomStateEvents); + SettingsStore.unwatchSetting(this._compactLayoutWatcherRef); if (this._sessionStoreToken) { this._sessionStoreToken.remove(); } @@ -263,16 +269,17 @@ class LoggedInView extends React.Component { } onAccountData = (event) => { - if (event.getType() === "im.vector.web.settings") { - this.setState({ - useCompactLayout: event.getContent().useCompactLayout, - }); - } if (event.getType() === "m.ignored_user_list") { dis.dispatch({action: "ignore_state_changed"}); } }; + onCompactLayoutChanged = (setting, roomId, level, valueAtLevel, newValue) => { + this.setState({ + useCompactLayout: valueAtLevel, + }); + }; + onSync = (syncState, oldSyncState, data) => { const oldErrCode = ( this.state.syncErrorData && diff --git a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx index f02147608d..c577aed543 100644 --- a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx @@ -291,7 +291,6 @@ export default class AppearanceUserSettingsTab extends React.Component
    {customThemeForm} -
    ); } diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 218e151ef4..58d9ed4f31 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -202,7 +202,7 @@ export const SETTINGS = { default: false, }, "useCompactLayout": { - supportedLevels: LEVELS_ACCOUNT_SETTINGS, + supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS, displayName: _td('Use a more compact ‘Modern’ layout'), default: false, }, From 8bb3f4a2252472653957fc3f08d78ae75d504bdc Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 3 Jul 2020 12:06:00 +0100 Subject: [PATCH 0644/1504] Remove duplicate compact settings, handle device level updates This removes the duplicate setting for compact layout from the appearance tab, and leaves the "advanced" one, matching the intention from Design. This also adds the relevant handling to ensure the device-level setting triggers an update immediately when changed. Fixes https://github.com/vector-im/riot-web/issues/14304 --- src/components/structures/LoggedInView.tsx | 17 ++++++++++++----- .../tabs/user/AppearanceUserSettingsTab.tsx | 1 - src/settings/Settings.js | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/components/structures/LoggedInView.tsx b/src/components/structures/LoggedInView.tsx index 9c01480df2..9fbc98dee3 100644 --- a/src/components/structures/LoggedInView.tsx +++ b/src/components/structures/LoggedInView.tsx @@ -146,6 +146,7 @@ class LoggedInView extends React.Component { protected readonly _resizeContainer: React.RefObject; protected readonly _sessionStore: sessionStore; protected readonly _sessionStoreToken: { remove: () => void }; + protected readonly _compactLayoutWatcherRef: string; protected resizer: Resizer; constructor(props, context) { @@ -177,6 +178,10 @@ class LoggedInView extends React.Component { this._matrixClient.on("sync", this.onSync); this._matrixClient.on("RoomState.events", this.onRoomStateEvents); + this._compactLayoutWatcherRef = SettingsStore.watchSetting( + "useCompactLayout", null, this.onCompactLayoutChanged, + ); + fixupColorFonts(); this._roomView = React.createRef(); @@ -194,6 +199,7 @@ class LoggedInView extends React.Component { this._matrixClient.removeListener("accountData", this.onAccountData); this._matrixClient.removeListener("sync", this.onSync); this._matrixClient.removeListener("RoomState.events", this.onRoomStateEvents); + SettingsStore.unwatchSetting(this._compactLayoutWatcherRef); if (this._sessionStoreToken) { this._sessionStoreToken.remove(); } @@ -263,16 +269,17 @@ class LoggedInView extends React.Component { } onAccountData = (event) => { - if (event.getType() === "im.vector.web.settings") { - this.setState({ - useCompactLayout: event.getContent().useCompactLayout, - }); - } if (event.getType() === "m.ignored_user_list") { dis.dispatch({action: "ignore_state_changed"}); } }; + onCompactLayoutChanged = (setting, roomId, level, valueAtLevel, newValue) => { + this.setState({ + useCompactLayout: valueAtLevel, + }); + }; + onSync = (syncState, oldSyncState, data) => { const oldErrCode = ( this.state.syncErrorData && diff --git a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx index f02147608d..c577aed543 100644 --- a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx @@ -291,7 +291,6 @@ export default class AppearanceUserSettingsTab extends React.Component
    {customThemeForm} - ); } diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 820329f6c6..f0c7840426 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -202,7 +202,7 @@ export const SETTINGS = { default: false, }, "useCompactLayout": { - supportedLevels: LEVELS_ACCOUNT_SETTINGS, + supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS, displayName: _td('Use a more compact ‘Modern’ layout'), default: false, }, From 452bb73dcf26e3620ac3c6778faec7528b678b21 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Fri, 3 Jul 2020 13:22:03 +0100 Subject: [PATCH 0645/1504] Upgrade matrix-js-sdk to 7.1.0 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index b64784d3e3..8ad654683c 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "is-ip": "^2.0.0", "linkifyjs": "^2.1.6", "lodash": "^4.17.14", - "matrix-js-sdk": "7.1.0-rc.1", + "matrix-js-sdk": "7.1.0", "minimist": "^1.2.0", "pako": "^1.0.5", "parse5": "^5.1.1", diff --git a/yarn.lock b/yarn.lock index ff73c6e6e0..7b9b3f1e04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5820,10 +5820,10 @@ mathml-tag-names@^2.0.1: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== -matrix-js-sdk@7.1.0-rc.1: - version "7.1.0-rc.1" - resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-7.1.0-rc.1.tgz#eba6232c5980010783f0d4987421e36d4b365ead" - integrity sha512-h0KmA5RcY7Ui2406Et2plrwQRk8R6r3dBdsihaE6XIbtFaqQgJ4Q/eECFphHU20HA2SXrqXVcgvAIfds5y27aw== +matrix-js-sdk@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-7.1.0.tgz#b3e3304e890df45c827706831748935168ee839f" + integrity sha512-Y+MdOfsVQRGx0KcwSdNtwsFNGWUF7Zi7wPxUSa050J8eBlbkXUNFAyuSWviLJ5pUwzmp9XMEKD9Cdv+tGZG1ww== dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" From 24687589e1275ee512c5b499b2019076be4fa298 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Fri, 3 Jul 2020 13:27:47 +0100 Subject: [PATCH 0646/1504] Prepare changelog for v2.9.0 --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 948583937d..c545a83044 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +Changes in [2.9.0](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.9.0) (2020-07-03) +=================================================================================================== +[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.9.0-rc.1...v2.9.0) + + * Remove duplicate compact settings, handle device level updates + [\#4889](https://github.com/matrix-org/matrix-react-sdk/pull/4889) + Changes in [2.9.0-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.9.0-rc.1) (2020-07-01) ============================================================================================================= [Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.8.1...v2.9.0-rc.1) From 21b7b88fde947fb95053b2726de56d17a8bfff4e Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Fri, 3 Jul 2020 13:27:48 +0100 Subject: [PATCH 0647/1504] v2.9.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8ad654683c..68957ab220 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "2.9.0-rc.1", + "version": "2.9.0", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { From 5c56a55cf02101a7c214555684d92c746a0df5c7 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Fri, 3 Jul 2020 13:29:56 +0100 Subject: [PATCH 0648/1504] Reset matrix-js-sdk back to develop branch --- package.json | 2 +- yarn.lock | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 68957ab220..41ba3f47c1 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "is-ip": "^2.0.0", "linkifyjs": "^2.1.6", "lodash": "^4.17.14", - "matrix-js-sdk": "7.1.0", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", "minimist": "^1.2.0", "pako": "^1.0.5", "parse5": "^5.1.1", diff --git a/yarn.lock b/yarn.lock index 7b9b3f1e04..98b42a0b29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5820,10 +5820,9 @@ mathml-tag-names@^2.0.1: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== -matrix-js-sdk@7.1.0: +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": version "7.1.0" - resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-7.1.0.tgz#b3e3304e890df45c827706831748935168ee839f" - integrity sha512-Y+MdOfsVQRGx0KcwSdNtwsFNGWUF7Zi7wPxUSa050J8eBlbkXUNFAyuSWviLJ5pUwzmp9XMEKD9Cdv+tGZG1ww== + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/2a688bdac828dc62916437d83c72cef1e525d5f9" dependencies: "@babel/runtime" "^7.8.3" another-json "^0.2.0" From 511e0682fcd49fab9a508c7075b7100cefd4bcc4 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Fri, 3 Jul 2020 13:32:24 +0100 Subject: [PATCH 0649/1504] Add upgrade line to changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c545a83044..b2e1f1af0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ Changes in [2.9.0](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v =================================================================================================== [Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.9.0-rc.1...v2.9.0) + * Upgrade to JS SDK 7.1.0 * Remove duplicate compact settings, handle device level updates [\#4889](https://github.com/matrix-org/matrix-react-sdk/pull/4889) From 9b0c711837727c0134609c45793877aa4bf3cc25 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 3 Jul 2020 14:34:43 +0100 Subject: [PATCH 0650/1504] Make the UserMenu more accessible Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/UserMenu.tsx | 87 ++++++++++++++++---------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index ff828e0da7..90a6a7d699 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -21,7 +21,7 @@ import { ActionPayload } from "../../dispatcher/payloads"; import { Action } from "../../dispatcher/actions"; import { createRef } from "react"; import { _t } from "../../languageHandler"; -import {ContextMenu, ContextMenuButton} from "./ContextMenu"; +import {ContextMenu, ContextMenuButton, MenuItem} from "./ContextMenu"; import {USER_NOTIFICATIONS_TAB, USER_SECURITY_TAB} from "../views/dialogs/UserSettingsDialog"; import { OpenToTabPayload } from "../../dispatcher/payloads/OpenToTabPayload"; import RedesignFeedbackDialog from "../views/dialogs/RedesignFeedbackDialog"; @@ -30,7 +30,7 @@ import LogoutDialog from "../views/dialogs/LogoutDialog"; import SettingsStore, {SettingLevel} from "../../settings/SettingsStore"; import {getCustomTheme} from "../../theme"; import {getHostingLink} from "../../utils/HostingLink"; -import AccessibleButton, {ButtonEvent} from "../views/elements/AccessibleButton"; +import {ButtonEvent} from "../views/elements/AccessibleButton"; import SdkConfig from "../../SdkConfig"; import {getHomePageUrl} from "../../utils/pages"; import { OwnProfileStore } from "../../stores/OwnProfileStore"; @@ -50,6 +50,19 @@ interface IState { isDarkTheme: boolean; } +interface IMenuButtonProps { + iconClassName: string; + label: string; + onClick(ev: ButtonEvent); +} + +const MenuButton: React.FC = ({iconClassName, label, onClick}) => { + return + + {label} + ; +}; + export default class UserMenu extends React.Component { private dispatcherRef: string; private themeWatcherRef: string; @@ -102,8 +115,11 @@ export default class UserMenu extends React.Component { private onAction = (ev: ActionPayload) => { if (ev.action !== Action.ToggleUserMenu) return; // not interested - // For accessibility - if (this.buttonRef.current) this.buttonRef.current.click(); + if (this.state.contextMenuPosition) { + this.setState({contextMenuPosition: null}); + } else { + if (this.buttonRef.current) this.buttonRef.current.click(); + } }; private onOpenMenuClick = (ev: InputEvent) => { @@ -206,10 +222,11 @@ export default class UserMenu extends React.Component { let homeButton = null; if (this.hasHomePage) { homeButton = ( - - - {_t("Home")} - + ); } @@ -246,32 +263,38 @@ export default class UserMenu extends React.Component { {hostingLink}
    {homeButton} - this.onSettingsOpen(e, USER_NOTIFICATIONS_TAB)}> - - {_t("Notification settings")} - - this.onSettingsOpen(e, USER_SECURITY_TAB)}> - - {_t("Security & privacy")} - - this.onSettingsOpen(e, null)}> - - {_t("All settings")} - - - - {_t("Archived rooms")} - - - - {_t("Feedback")} - + this.onSettingsOpen(e, USER_NOTIFICATIONS_TAB)} + /> + this.onSettingsOpen(e, USER_SECURITY_TAB)} + /> + this.onSettingsOpen(e, null)} + /> + +
    - - - {_t("Sign out")} - +
    From 47ee00ec5da64235692971acd68dd3d9c14ed038 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 3 Jul 2020 14:43:02 +0100 Subject: [PATCH 0651/1504] Make explore button at all accessible Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/LeftPanel2.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 0cf52039fe..f5a946f964 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -250,8 +250,8 @@ export default class LeftPanel2 extends React.Component { onVerticalArrow={this.onKeyDown} /> From c8a93e9dd708f2af4fb0d6aa4c4c93f12ed8ea8d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 3 Jul 2020 14:49:25 +0100 Subject: [PATCH 0652/1504] clean-up Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/LeftPanel2.tsx | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index f5a946f964..23a9e74646 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -166,20 +166,18 @@ export default class LeftPanel2 extends React.Component { switch (ev.key) { case Key.ARROW_UP: case Key.ARROW_DOWN: - this.onMoveFocus(ev, ev.key === Key.ARROW_UP); + ev.stopPropagation(); + ev.preventDefault(); + this.onMoveFocus(ev.key === Key.ARROW_UP); break; } }; - private onMoveFocus = (ev: React.KeyboardEvent, up: boolean) => { + private onMoveFocus = (up: boolean) => { let element = this.focusedElement; - // unclear why this isn't needed - // var descending = (up == this.focusDirection) ? this.focusDescending : !this.focusDescending; - // this.focusDirection = up; - let descending = false; // are we currently descending or ascending through the DOM tree? - let classes; + let classes: DOMTokenList; do { const child = up ? element.lastElementChild : element.firstElementChild; @@ -212,14 +210,8 @@ export default class LeftPanel2 extends React.Component { classes.contains("mx_RoomSearch_input"))); if (element) { - ev.stopPropagation(); - ev.preventDefault(); element.focus(); this.focusedElement = element; - } else { - // if navigation is via up/down arrow-keys, trap in the widget so it doesn't send to composer - ev.stopPropagation(); - ev.preventDefault(); } }; From 82e0816d8689b9588d22312260e4de3c25b9e81b Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 3 Jul 2020 16:50:01 +0200 Subject: [PATCH 0653/1504] also blur the sticky headers added a DOM element so we can set the background on the parent and the blur on the new element --- res/css/views/rooms/_RoomSublist2.scss | 8 ++++++ res/themes/element/css/_mods.scss | 14 ++++++++++ src/components/views/rooms/RoomSublist2.tsx | 30 +++++++++++---------- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index ef5305aba5..16ae88768b 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -80,6 +80,14 @@ limitations under the License. // We don't have a top style because the top is dependent on the room list header's // height, and is therefore calculated in JS. // The class, mx_RoomSublist2_headerContainer_stickyTop, is applied though. + + // blur for element theme, background image is on parent + .mx_RoomSublist2_stickyHeaderBlur { + width: 100%; + height: 100%; + display: flex; + align-items: center; + } } // Sticky Headers End diff --git a/res/themes/element/css/_mods.scss b/res/themes/element/css/_mods.scss index 12388200b4..52c9dd4232 100644 --- a/res/themes/element/css/_mods.scss +++ b/res/themes/element/css/_mods.scss @@ -19,4 +19,18 @@ .mx_LeftPanel2 .mx_LeftPanel2_roomListContainer { backdrop-filter: blur(175px); } + + // sticky headers need their own blur + + .mx_RoomSublist2_headerContainer_sticky { + background-size: cover; + background-image: var(--avatar-url); + background-position: center; + } + + .mx_RoomSublist2_headerContainer_sticky .mx_RoomSublist2_stickyHeaderBlur { + backdrop-filter: blur(100px); + background-color: $roomlist2-bg-color; + } +} } diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 58ebf54bf7..51507f0f64 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -311,20 +311,22 @@ export default class RoomSublist2 extends React.Component { return (
    - - - {this.props.label} - - {this.renderMenu()} - {this.props.isMinimized ? null : badgeContainer} - {this.props.isMinimized ? null : addRoomButton} +
    + + + {this.props.label} + + {this.renderMenu()} + {this.props.isMinimized ? null : badgeContainer} + {this.props.isMinimized ? null : addRoomButton} +
    {this.props.isMinimized ? badgeContainer : null} {this.props.isMinimized ? addRoomButton : null} From b370e3f0788b889e24adafafcee7e5d361081705 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 3 Jul 2020 16:52:01 +0200 Subject: [PATCH 0654/1504] don't need to set width with javascript? --- res/css/views/rooms/_RoomSublist2.scss | 1 + src/components/structures/LeftPanel2.tsx | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 16ae88768b..e86bf9fbe4 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -71,6 +71,7 @@ limitations under the License. z-index: 1; // over top of other elements, but still under the ones in the visible list height: 32px; // to match the header container // width set by JS + width: calc(100% - 22px); } &.mx_RoomSublist2_headerContainer_stickyBottom { diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 0e9d3dd8d0..45830445ca 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -119,13 +119,11 @@ export default class LeftPanel2 extends React.Component { if (slRect.top + headerHeight > bottom && !gotBottom) { header.classList.add("mx_RoomSublist2_headerContainer_sticky"); header.classList.add("mx_RoomSublist2_headerContainer_stickyBottom"); - header.style.width = `${headerStickyWidth}px`; header.style.top = `unset`; gotBottom = true; } else if (slRect.top < top) { header.classList.add("mx_RoomSublist2_headerContainer_sticky"); header.classList.add("mx_RoomSublist2_headerContainer_stickyTop"); - header.style.width = `${headerStickyWidth}px`; header.style.top = `${rlRect.top}px`; if (lastTopHeader) { lastTopHeader.style.display = "none"; @@ -137,7 +135,6 @@ export default class LeftPanel2 extends React.Component { header.classList.remove("mx_RoomSublist2_headerContainer_sticky"); header.classList.remove("mx_RoomSublist2_headerContainer_stickyTop"); header.classList.remove("mx_RoomSublist2_headerContainer_stickyBottom"); - header.style.width = `unset`; header.style.top = `unset`; } } From 8cd20eedeb641069e238bf6261c18e837208f135 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 3 Jul 2020 16:52:28 +0200 Subject: [PATCH 0655/1504] make stick headers jump in a bit later so the transition is less jumpy --- src/components/structures/LeftPanel2.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 45830445ca..ed16d6a798 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -121,7 +121,7 @@ export default class LeftPanel2 extends React.Component { header.classList.add("mx_RoomSublist2_headerContainer_stickyBottom"); header.style.top = `unset`; gotBottom = true; - } else if (slRect.top < top) { + } else if ((slRect.top - (headerHeight / 3)) < top) { header.classList.add("mx_RoomSublist2_headerContainer_sticky"); header.classList.add("mx_RoomSublist2_headerContainer_stickyTop"); header.style.top = `${rlRect.top}px`; From 52fdf921800307e3c43d8aa215da5426514c4b61 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 3 Jul 2020 16:52:52 +0200 Subject: [PATCH 0656/1504] remove prop instead of assigning unset --- src/components/structures/LeftPanel2.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index ed16d6a798..dd59e77530 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -119,7 +119,7 @@ export default class LeftPanel2 extends React.Component { if (slRect.top + headerHeight > bottom && !gotBottom) { header.classList.add("mx_RoomSublist2_headerContainer_sticky"); header.classList.add("mx_RoomSublist2_headerContainer_stickyBottom"); - header.style.top = `unset`; + header.style.removeProperty("top"); gotBottom = true; } else if ((slRect.top - (headerHeight / 3)) < top) { header.classList.add("mx_RoomSublist2_headerContainer_sticky"); @@ -135,7 +135,7 @@ export default class LeftPanel2 extends React.Component { header.classList.remove("mx_RoomSublist2_headerContainer_sticky"); header.classList.remove("mx_RoomSublist2_headerContainer_stickyTop"); header.classList.remove("mx_RoomSublist2_headerContainer_stickyBottom"); - header.style.top = `unset`; + header.style.removeProperty("top"); } } } From 82ca98cdd5bffa21e320a7afdfbee4cde516afbe Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 3 Jul 2020 16:53:06 +0200 Subject: [PATCH 0657/1504] clear background on show more button in element theme --- res/themes/element/css/_mods.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/res/themes/element/css/_mods.scss b/res/themes/element/css/_mods.scss index 52c9dd4232..fbfe04e2bf 100644 --- a/res/themes/element/css/_mods.scss +++ b/res/themes/element/css/_mods.scss @@ -33,4 +33,7 @@ background-color: $roomlist2-bg-color; } } + +.mx_RoomSublist2_showNButton { + background-color: transparent !important; } From 9c1efe728c6385180421fc42aad4d3e8eff4c122 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 3 Jul 2020 08:54:54 -0600 Subject: [PATCH 0658/1504] Revert "Remove a bunch of noisy logging from the room list" --- src/stores/room-list/RoomListStore2.ts | 10 ++++++++ src/stores/room-list/algorithms/Algorithm.ts | 23 +++++++++++++++++++ .../list-ordering/ImportanceAlgorithm.ts | 3 +++ .../list-ordering/NaturalAlgorithm.ts | 3 +++ .../filters/CommunityFilterCondition.ts | 2 ++ .../room-list/filters/NameFilterCondition.ts | 2 ++ 6 files changed, 43 insertions(+) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index d4aec93035..e5205f6051 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -101,6 +101,8 @@ export class RoomListStore2 extends AsyncStore { console.warn(`${activeRoomId} is current in RVS but missing from client - clearing sticky room`); this.algorithm.stickyRoom = null; } else if (activeRoom !== this.algorithm.stickyRoom) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Changing sticky room to ${activeRoomId}`); this.algorithm.stickyRoom = activeRoom; } } @@ -297,6 +299,8 @@ export class RoomListStore2 extends AsyncStore { private async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise { const shouldUpdate = await this.algorithm.handleRoomUpdate(room, cause); if (shouldUpdate) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[DEBUG] Room "${room.name}" (${room.roomId}) triggered by ${cause} requires list update`); this.emit(LISTS_UPDATE_EVENT, this); } } @@ -363,6 +367,8 @@ export class RoomListStore2 extends AsyncStore { } private onAlgorithmListUpdated = () => { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log("Underlying algorithm has triggered a list update - refiring"); this.emit(LISTS_UPDATE_EVENT, this); }; @@ -402,6 +408,8 @@ export class RoomListStore2 extends AsyncStore { } public addFilter(filter: IFilterCondition): void { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log("Adding filter condition:", filter); this.filterConditions.push(filter); if (this.algorithm) { this.algorithm.addFilterCondition(filter); @@ -409,6 +417,8 @@ export class RoomListStore2 extends AsyncStore { } public removeFilter(filter: IFilterCondition): void { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log("Removing filter condition:", filter); const idx = this.filterConditions.indexOf(filter); if (idx >= 0) { this.filterConditions.splice(idx, 1); diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index 80ca4656af..36abf86975 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -272,6 +272,9 @@ export class Algorithm extends EventEmitter { } } newMap[tagId] = allowedRoomsInThisTag; + + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[DEBUG] ${newMap[tagId].length}/${rooms.length} rooms filtered into ${tagId}`); } const allowedRooms = Object.values(newMap).reduce((rv, v) => { rv.push(...v); return rv; }, []); @@ -307,6 +310,9 @@ export class Algorithm extends EventEmitter { if (filteredRooms.length > 0) { this.filteredRooms[tagId] = filteredRooms; } + + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[DEBUG] ${filteredRooms.length}/${rooms.length} rooms filtered into ${tagId}`); } protected tryInsertStickyRoomToFilterSet(rooms: Room[], tagId: TagID) { @@ -345,6 +351,8 @@ export class Algorithm extends EventEmitter { } if (!this._cachedStickyRooms || !updatedTag) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Generating clone of cached rooms for sticky room handling`); const stickiedTagMap: ITagMap = {}; for (const tagId of Object.keys(this.cachedRooms)) { stickiedTagMap[tagId] = this.cachedRooms[tagId].map(r => r); // shallow clone @@ -355,6 +363,8 @@ export class Algorithm extends EventEmitter { if (updatedTag) { // Update the tag indicated by the caller, if possible. This is mostly to ensure // our cache is up to date. + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Replacing cached sticky rooms for ${updatedTag}`); this._cachedStickyRooms[updatedTag] = this.cachedRooms[updatedTag].map(r => r); // shallow clone } @@ -363,6 +373,8 @@ export class Algorithm extends EventEmitter { // we might have updated from the cache is also our sticky room. const sticky = this._stickyRoom; if (!updatedTag || updatedTag === sticky.tag) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Inserting sticky room ${sticky.room.roomId} at position ${sticky.position} in ${sticky.tag}`); this._cachedStickyRooms[sticky.tag].splice(sticky.position, 0, sticky.room); } @@ -454,9 +466,13 @@ export class Algorithm extends EventEmitter { // Split out the easy rooms first (leave and invite) const memberships = splitRoomsByMembership(rooms); for (const room of memberships[EffectiveMembership.Invite]) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[DEBUG] "${room.name}" (${room.roomId}) is an Invite`); newTags[DefaultTagID.Invite].push(room); } for (const room of memberships[EffectiveMembership.Leave]) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[DEBUG] "${room.name}" (${room.roomId}) is Historical`); newTags[DefaultTagID.Archived].push(room); } @@ -467,7 +483,11 @@ export class Algorithm extends EventEmitter { let inTag = false; if (tags.length > 0) { for (const tag of tags) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[DEBUG] "${room.name}" (${room.roomId}) is tagged as ${tag}`); if (!isNullOrUndefined(newTags[tag])) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[DEBUG] "${room.name}" (${room.roomId}) is tagged with VALID tag ${tag}`); newTags[tag].push(room); inTag = true; } @@ -477,6 +497,9 @@ export class Algorithm extends EventEmitter { if (!inTag) { // TODO: Determine if DM and push there instead: https://github.com/vector-im/riot-web/issues/14236 newTags[DefaultTagID.Untagged].push(room); + + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[DEBUG] "${room.name}" (${room.roomId}) is Untagged`); } } diff --git a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts index 71b6e89df3..e95f92f985 100644 --- a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts @@ -87,6 +87,9 @@ export class ImportanceAlgorithm extends OrderingAlgorithm { public constructor(tagId: TagID, initialSortingAlgorithm: SortAlgorithm) { super(tagId, initialSortingAlgorithm); + + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Constructed an ImportanceAlgorithm for ${tagId}`); } // noinspection JSMethodCanBeStatic diff --git a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts index 1a75d8cf06..f74329cb4d 100644 --- a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts @@ -28,6 +28,9 @@ export class NaturalAlgorithm extends OrderingAlgorithm { public constructor(tagId: TagID, initialSortingAlgorithm: SortAlgorithm) { super(tagId, initialSortingAlgorithm); + + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Constructed a NaturalAlgorithm for ${tagId}`); } public async setRooms(rooms: Room[]): Promise { diff --git a/src/stores/room-list/filters/CommunityFilterCondition.ts b/src/stores/room-list/filters/CommunityFilterCondition.ts index 45e65fb4f4..9f7d8daaa3 100644 --- a/src/stores/room-list/filters/CommunityFilterCondition.ts +++ b/src/stores/room-list/filters/CommunityFilterCondition.ts @@ -52,6 +52,8 @@ export class CommunityFilterCondition extends EventEmitter implements IFilterCon const beforeRoomIds = this.roomIds; this.roomIds = (await GroupStore.getGroupRooms(this.community.groupId)).map(r => r.roomId); if (arrayHasDiff(beforeRoomIds, this.roomIds)) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log("Updating filter for group: ", this.community.groupId); this.emit(FILTER_CHANGED); } }; diff --git a/src/stores/room-list/filters/NameFilterCondition.ts b/src/stores/room-list/filters/NameFilterCondition.ts index 6014a122f8..12f147990d 100644 --- a/src/stores/room-list/filters/NameFilterCondition.ts +++ b/src/stores/room-list/filters/NameFilterCondition.ts @@ -41,6 +41,8 @@ export class NameFilterCondition extends EventEmitter implements IFilterConditio public set search(val: string) { this._search = val; + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log("Updating filter for room name search:", this._search); this.emit(FILTER_CHANGED); } From 918d091878eb3946dfc05dd41f315020d7190b3b Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 3 Jul 2020 16:56:10 +0200 Subject: [PATCH 0659/1504] make background image not move too much when resizing left panel --- res/themes/element/css/_mods.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/themes/element/css/_mods.scss b/res/themes/element/css/_mods.scss index fbfe04e2bf..091f382537 100644 --- a/res/themes/element/css/_mods.scss +++ b/res/themes/element/css/_mods.scss @@ -9,7 +9,7 @@ background-image: var(--avatar-url); background-repeat: no-repeat; background-size: cover; - background-position: center; + background-position: left top; } .mx_TagPanel { From 3f62f20a8594aa233c9bcda365dbfd19a66f0783 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 3 Jul 2020 16:29:48 +0100 Subject: [PATCH 0660/1504] Fix theme selector bubbling out its click events and causing context menu to float away Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/UserMenu.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index ff828e0da7..b65e9f1cb6 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -130,7 +130,10 @@ export default class UserMenu extends React.Component { this.setState({contextMenuPosition: null}); }; - private onSwitchThemeClick = () => { + private onSwitchThemeClick = (ev: React.MouseEvent) => { + ev.preventDefault(); + ev.stopPropagation(); + // Disable system theme matching if the user hits this button SettingsStore.setValue("use_system_theme", null, SettingLevel.DEVICE, false); From 262b1edaa3ade096ae228707003d31f94361543e Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 3 Jul 2020 18:03:28 +0200 Subject: [PATCH 0661/1504] new icons --- res/img/element-icons/leave.svg | 7 +++++++ res/img/element-icons/notifications.svg | 5 +++++ res/img/element-icons/room/composer/attach.svg | 3 +++ res/img/element-icons/room/composer/emoji.svg | 7 +++++++ res/img/element-icons/room/composer/send.svg | 3 +++ res/img/element-icons/room/composer/sticker.svg | 7 +++++++ res/img/element-icons/room/composer/voice-call.svg | 3 +++ res/img/element-icons/room/files.svg | 3 +++ res/img/element-icons/room/format-bar/bold.svg | 5 +++++ res/img/element-icons/room/format-bar/code.svg | 5 +++++ res/img/element-icons/room/format-bar/italic.svg | 5 +++++ res/img/element-icons/room/format-bar/quote.svg | 5 +++++ res/img/element-icons/room/format-bar/strikethrough.svg | 4 ++++ res/img/element-icons/room/integrations.svg | 3 +++ res/img/element-icons/room/members.svg | 7 +++++++ res/img/element-icons/room/message-bar/edit.svg | 4 ++++ res/img/element-icons/room/message-bar/emoji.svg | 5 +++++ res/img/element-icons/room/message-bar/more.svg | 5 +++++ res/img/element-icons/room/message-bar/reply.svg | 5 +++++ res/img/element-icons/room/pin.svg | 7 +++++++ res/img/element-icons/room/search-inset.svg | 3 +++ res/img/element-icons/room/share.svg | 3 +++ res/img/element-icons/roomlist/archived.svg | 3 +++ res/img/element-icons/roomlist/clear-input.svg | 3 +++ res/img/element-icons/roomlist/dark-light-mode.svg | 3 +++ res/img/element-icons/roomlist/direct-chat.svg | 7 +++++++ res/img/element-icons/roomlist/e2ee-default.svg | 3 +++ res/img/element-icons/roomlist/e2ee-error.svg | 5 +++++ res/img/element-icons/roomlist/e2ee-none.svg | 5 +++++ res/img/element-icons/roomlist/e2ee-trusted.svg | 4 ++++ res/img/element-icons/roomlist/explore-rooms.svg | 4 ++++ res/img/element-icons/roomlist/favorite.svg | 3 +++ res/img/element-icons/roomlist/feedback.svg | 7 +++++++ res/img/element-icons/roomlist/low-priority.svg | 3 +++ res/img/element-icons/roomlist/notifications-default.svg | 5 +++++ res/img/element-icons/roomlist/notifications-dm.svg | 3 +++ res/img/element-icons/roomlist/notifications-off.svg | 7 +++++++ res/img/element-icons/roomlist/search.svg | 4 ++++ res/img/element-icons/security.svg | 3 +++ res/img/element-icons/settings.svg | 3 +++ res/img/element-icons/settings/appearance.svg | 3 +++ res/img/element-icons/settings/flare.svg | 3 +++ res/img/element-icons/settings/help.svg | 3 +++ res/img/element-icons/settings/lab-flags.svg | 4 ++++ res/img/element-icons/settings/preference.svg | 3 +++ res/img/element-icons/video-call.svg | 4 ++++ 46 files changed, 199 insertions(+) create mode 100644 res/img/element-icons/leave.svg create mode 100644 res/img/element-icons/notifications.svg create mode 100644 res/img/element-icons/room/composer/attach.svg create mode 100644 res/img/element-icons/room/composer/emoji.svg create mode 100644 res/img/element-icons/room/composer/send.svg create mode 100644 res/img/element-icons/room/composer/sticker.svg create mode 100644 res/img/element-icons/room/composer/voice-call.svg create mode 100644 res/img/element-icons/room/files.svg create mode 100644 res/img/element-icons/room/format-bar/bold.svg create mode 100644 res/img/element-icons/room/format-bar/code.svg create mode 100644 res/img/element-icons/room/format-bar/italic.svg create mode 100644 res/img/element-icons/room/format-bar/quote.svg create mode 100644 res/img/element-icons/room/format-bar/strikethrough.svg create mode 100644 res/img/element-icons/room/integrations.svg create mode 100644 res/img/element-icons/room/members.svg create mode 100644 res/img/element-icons/room/message-bar/edit.svg create mode 100644 res/img/element-icons/room/message-bar/emoji.svg create mode 100644 res/img/element-icons/room/message-bar/more.svg create mode 100644 res/img/element-icons/room/message-bar/reply.svg create mode 100644 res/img/element-icons/room/pin.svg create mode 100644 res/img/element-icons/room/search-inset.svg create mode 100644 res/img/element-icons/room/share.svg create mode 100644 res/img/element-icons/roomlist/archived.svg create mode 100644 res/img/element-icons/roomlist/clear-input.svg create mode 100644 res/img/element-icons/roomlist/dark-light-mode.svg create mode 100644 res/img/element-icons/roomlist/direct-chat.svg create mode 100644 res/img/element-icons/roomlist/e2ee-default.svg create mode 100644 res/img/element-icons/roomlist/e2ee-error.svg create mode 100644 res/img/element-icons/roomlist/e2ee-none.svg create mode 100644 res/img/element-icons/roomlist/e2ee-trusted.svg create mode 100644 res/img/element-icons/roomlist/explore-rooms.svg create mode 100644 res/img/element-icons/roomlist/favorite.svg create mode 100644 res/img/element-icons/roomlist/feedback.svg create mode 100644 res/img/element-icons/roomlist/low-priority.svg create mode 100644 res/img/element-icons/roomlist/notifications-default.svg create mode 100644 res/img/element-icons/roomlist/notifications-dm.svg create mode 100644 res/img/element-icons/roomlist/notifications-off.svg create mode 100644 res/img/element-icons/roomlist/search.svg create mode 100644 res/img/element-icons/security.svg create mode 100644 res/img/element-icons/settings.svg create mode 100644 res/img/element-icons/settings/appearance.svg create mode 100644 res/img/element-icons/settings/flare.svg create mode 100644 res/img/element-icons/settings/help.svg create mode 100644 res/img/element-icons/settings/lab-flags.svg create mode 100644 res/img/element-icons/settings/preference.svg create mode 100644 res/img/element-icons/video-call.svg diff --git a/res/img/element-icons/leave.svg b/res/img/element-icons/leave.svg new file mode 100644 index 0000000000..8a96160afd --- /dev/null +++ b/res/img/element-icons/leave.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/res/img/element-icons/notifications.svg b/res/img/element-icons/notifications.svg new file mode 100644 index 0000000000..c86a7a3b98 --- /dev/null +++ b/res/img/element-icons/notifications.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/room/composer/attach.svg b/res/img/element-icons/room/composer/attach.svg new file mode 100644 index 0000000000..0cac44d29f --- /dev/null +++ b/res/img/element-icons/room/composer/attach.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/room/composer/emoji.svg b/res/img/element-icons/room/composer/emoji.svg new file mode 100644 index 0000000000..9613d9edd9 --- /dev/null +++ b/res/img/element-icons/room/composer/emoji.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/res/img/element-icons/room/composer/send.svg b/res/img/element-icons/room/composer/send.svg new file mode 100644 index 0000000000..b255a9b23b --- /dev/null +++ b/res/img/element-icons/room/composer/send.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/room/composer/sticker.svg b/res/img/element-icons/room/composer/sticker.svg new file mode 100644 index 0000000000..3d8f445926 --- /dev/null +++ b/res/img/element-icons/room/composer/sticker.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/res/img/element-icons/room/composer/voice-call.svg b/res/img/element-icons/room/composer/voice-call.svg new file mode 100644 index 0000000000..d32b703523 --- /dev/null +++ b/res/img/element-icons/room/composer/voice-call.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/room/files.svg b/res/img/element-icons/room/files.svg new file mode 100644 index 0000000000..6dfd6856d6 --- /dev/null +++ b/res/img/element-icons/room/files.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/room/format-bar/bold.svg b/res/img/element-icons/room/format-bar/bold.svg new file mode 100644 index 0000000000..e21210c525 --- /dev/null +++ b/res/img/element-icons/room/format-bar/bold.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/room/format-bar/code.svg b/res/img/element-icons/room/format-bar/code.svg new file mode 100644 index 0000000000..38f94457e8 --- /dev/null +++ b/res/img/element-icons/room/format-bar/code.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/room/format-bar/italic.svg b/res/img/element-icons/room/format-bar/italic.svg new file mode 100644 index 0000000000..270c4f5f15 --- /dev/null +++ b/res/img/element-icons/room/format-bar/italic.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/room/format-bar/quote.svg b/res/img/element-icons/room/format-bar/quote.svg new file mode 100644 index 0000000000..38f94457e8 --- /dev/null +++ b/res/img/element-icons/room/format-bar/quote.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/room/format-bar/strikethrough.svg b/res/img/element-icons/room/format-bar/strikethrough.svg new file mode 100644 index 0000000000..775e0cf8ec --- /dev/null +++ b/res/img/element-icons/room/format-bar/strikethrough.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/img/element-icons/room/integrations.svg b/res/img/element-icons/room/integrations.svg new file mode 100644 index 0000000000..57937cd929 --- /dev/null +++ b/res/img/element-icons/room/integrations.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/room/members.svg b/res/img/element-icons/room/members.svg new file mode 100644 index 0000000000..e73834bfe5 --- /dev/null +++ b/res/img/element-icons/room/members.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/res/img/element-icons/room/message-bar/edit.svg b/res/img/element-icons/room/message-bar/edit.svg new file mode 100644 index 0000000000..d4a7e8eaaf --- /dev/null +++ b/res/img/element-icons/room/message-bar/edit.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/img/element-icons/room/message-bar/emoji.svg b/res/img/element-icons/room/message-bar/emoji.svg new file mode 100644 index 0000000000..697f656b8a --- /dev/null +++ b/res/img/element-icons/room/message-bar/emoji.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/room/message-bar/more.svg b/res/img/element-icons/room/message-bar/more.svg new file mode 100644 index 0000000000..76a28d50d0 --- /dev/null +++ b/res/img/element-icons/room/message-bar/more.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/room/message-bar/reply.svg b/res/img/element-icons/room/message-bar/reply.svg new file mode 100644 index 0000000000..697f656b8a --- /dev/null +++ b/res/img/element-icons/room/message-bar/reply.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/room/pin.svg b/res/img/element-icons/room/pin.svg new file mode 100644 index 0000000000..d2e9a2c2eb --- /dev/null +++ b/res/img/element-icons/room/pin.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/res/img/element-icons/room/search-inset.svg b/res/img/element-icons/room/search-inset.svg new file mode 100644 index 0000000000..2a837f5106 --- /dev/null +++ b/res/img/element-icons/room/search-inset.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/room/share.svg b/res/img/element-icons/room/share.svg new file mode 100644 index 0000000000..5accc0a849 --- /dev/null +++ b/res/img/element-icons/room/share.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/roomlist/archived.svg b/res/img/element-icons/roomlist/archived.svg new file mode 100644 index 0000000000..4d30195082 --- /dev/null +++ b/res/img/element-icons/roomlist/archived.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/roomlist/clear-input.svg b/res/img/element-icons/roomlist/clear-input.svg new file mode 100644 index 0000000000..29fc097600 --- /dev/null +++ b/res/img/element-icons/roomlist/clear-input.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/roomlist/dark-light-mode.svg b/res/img/element-icons/roomlist/dark-light-mode.svg new file mode 100644 index 0000000000..a6a6464b5c --- /dev/null +++ b/res/img/element-icons/roomlist/dark-light-mode.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/roomlist/direct-chat.svg b/res/img/element-icons/roomlist/direct-chat.svg new file mode 100644 index 0000000000..4b92dd9521 --- /dev/null +++ b/res/img/element-icons/roomlist/direct-chat.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/res/img/element-icons/roomlist/e2ee-default.svg b/res/img/element-icons/roomlist/e2ee-default.svg new file mode 100644 index 0000000000..76525f48b2 --- /dev/null +++ b/res/img/element-icons/roomlist/e2ee-default.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/roomlist/e2ee-error.svg b/res/img/element-icons/roomlist/e2ee-error.svg new file mode 100644 index 0000000000..7f1a761dde --- /dev/null +++ b/res/img/element-icons/roomlist/e2ee-error.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/roomlist/e2ee-none.svg b/res/img/element-icons/roomlist/e2ee-none.svg new file mode 100644 index 0000000000..cfafe6d09d --- /dev/null +++ b/res/img/element-icons/roomlist/e2ee-none.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/roomlist/e2ee-trusted.svg b/res/img/element-icons/roomlist/e2ee-trusted.svg new file mode 100644 index 0000000000..577d6a31e1 --- /dev/null +++ b/res/img/element-icons/roomlist/e2ee-trusted.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/img/element-icons/roomlist/explore-rooms.svg b/res/img/element-icons/roomlist/explore-rooms.svg new file mode 100644 index 0000000000..3786ce1153 --- /dev/null +++ b/res/img/element-icons/roomlist/explore-rooms.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/img/element-icons/roomlist/favorite.svg b/res/img/element-icons/roomlist/favorite.svg new file mode 100644 index 0000000000..b255a9b23b --- /dev/null +++ b/res/img/element-icons/roomlist/favorite.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/roomlist/feedback.svg b/res/img/element-icons/roomlist/feedback.svg new file mode 100644 index 0000000000..c15edd709a --- /dev/null +++ b/res/img/element-icons/roomlist/feedback.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/res/img/element-icons/roomlist/low-priority.svg b/res/img/element-icons/roomlist/low-priority.svg new file mode 100644 index 0000000000..832501527b --- /dev/null +++ b/res/img/element-icons/roomlist/low-priority.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/roomlist/notifications-default.svg b/res/img/element-icons/roomlist/notifications-default.svg new file mode 100644 index 0000000000..59743f5d67 --- /dev/null +++ b/res/img/element-icons/roomlist/notifications-default.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/roomlist/notifications-dm.svg b/res/img/element-icons/roomlist/notifications-dm.svg new file mode 100644 index 0000000000..e0bd435240 --- /dev/null +++ b/res/img/element-icons/roomlist/notifications-dm.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/roomlist/notifications-off.svg b/res/img/element-icons/roomlist/notifications-off.svg new file mode 100644 index 0000000000..c848471f63 --- /dev/null +++ b/res/img/element-icons/roomlist/notifications-off.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/res/img/element-icons/roomlist/search.svg b/res/img/element-icons/roomlist/search.svg new file mode 100644 index 0000000000..3786ce1153 --- /dev/null +++ b/res/img/element-icons/roomlist/search.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/img/element-icons/security.svg b/res/img/element-icons/security.svg new file mode 100644 index 0000000000..3fe62b7af9 --- /dev/null +++ b/res/img/element-icons/security.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/settings.svg b/res/img/element-icons/settings.svg new file mode 100644 index 0000000000..e6e2aef54c --- /dev/null +++ b/res/img/element-icons/settings.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/settings/appearance.svg b/res/img/element-icons/settings/appearance.svg new file mode 100644 index 0000000000..6f91759354 --- /dev/null +++ b/res/img/element-icons/settings/appearance.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/settings/flare.svg b/res/img/element-icons/settings/flare.svg new file mode 100644 index 0000000000..e1ae44f386 --- /dev/null +++ b/res/img/element-icons/settings/flare.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/settings/help.svg b/res/img/element-icons/settings/help.svg new file mode 100644 index 0000000000..2ac4f675ec --- /dev/null +++ b/res/img/element-icons/settings/help.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/settings/lab-flags.svg b/res/img/element-icons/settings/lab-flags.svg new file mode 100644 index 0000000000..b96aa17d26 --- /dev/null +++ b/res/img/element-icons/settings/lab-flags.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/img/element-icons/settings/preference.svg b/res/img/element-icons/settings/preference.svg new file mode 100644 index 0000000000..d466662117 --- /dev/null +++ b/res/img/element-icons/settings/preference.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/video-call.svg b/res/img/element-icons/video-call.svg new file mode 100644 index 0000000000..b18736a2f0 --- /dev/null +++ b/res/img/element-icons/video-call.svg @@ -0,0 +1,4 @@ + + + + From bec10b79daf49db461f5923c1d94abcdbee91df2 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 3 Jul 2020 18:03:47 +0200 Subject: [PATCH 0662/1504] apply some of the new icons --- res/css/structures/_RightPanel.scss | 6 +++--- res/css/views/rooms/_MessageComposer.scss | 10 +++++----- res/css/views/rooms/_RoomHeader.scss | 12 ++++++------ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/res/css/structures/_RightPanel.scss b/res/css/structures/_RightPanel.scss index 600871e071..da9303d8aa 100644 --- a/res/css/structures/_RightPanel.scss +++ b/res/css/structures/_RightPanel.scss @@ -67,17 +67,17 @@ limitations under the License. } .mx_RightPanel_membersButton::before { - mask-image: url('$(res)/img/feather-customised/user.svg'); + mask-image: url('$(res)/img/element-icons/room/members.svg'); mask-position: center; } .mx_RightPanel_filesButton::before { - mask-image: url('$(res)/img/feather-customised/files.svg'); + mask-image: url('$(res)/img/element-icons/room/files.svg'); mask-position: center; } .mx_RightPanel_notifsButton::before { - mask-image: url('$(res)/img/feather-customised/notifications.svg'); + mask-image: url('$(res)/img/element-icons/notifications.svg'); mask-position: center; } diff --git a/res/css/views/rooms/_MessageComposer.scss b/res/css/views/rooms/_MessageComposer.scss index c1cda7bf24..a05457fea4 100644 --- a/res/css/views/rooms/_MessageComposer.scss +++ b/res/css/views/rooms/_MessageComposer.scss @@ -199,7 +199,7 @@ limitations under the License. } .mx_MessageComposer_upload::before { - mask-image: url('$(res)/img/feather-customised/paperclip.svg'); + mask-image: url('$(res)/img/element-icons/room/composer/attach.svg'); } .mx_MessageComposer_hangup::before { @@ -207,19 +207,19 @@ limitations under the License. } .mx_MessageComposer_voicecall::before { - mask-image: url('$(res)/img/feather-customised/phone.svg'); + mask-image: url('$(res)/img/element-icons/room/composer/voice-call.svg'); } .mx_MessageComposer_videocall::before { - mask-image: url('$(res)/img/feather-customised/video.svg'); + mask-image: url('$(res)/img/element-icons/video-call.svg'); } .mx_MessageComposer_emoji::before { - mask-image: url('$(res)/img/feather-customised/emoji3.custom.svg'); + mask-image: url('$(res)/img/element-icons/room/composer/emoji.svg'); } .mx_MessageComposer_stickers::before { - mask-image: url('$(res)/img/feather-customised/sticker.custom.svg'); + mask-image: url('$(res)/img/element-icons/room/composer/sticker.svg'); } .mx_MessageComposer_formatting { diff --git a/res/css/views/rooms/_RoomHeader.scss b/res/css/views/rooms/_RoomHeader.scss index a047a6f9b4..c3c7ff0278 100644 --- a/res/css/views/rooms/_RoomHeader.scss +++ b/res/css/views/rooms/_RoomHeader.scss @@ -218,24 +218,24 @@ limitations under the License. } .mx_RoomHeader_settingsButton::before { - mask-image: url('$(res)/img/feather-customised/settings.svg'); + mask-image: url('$(res)/img/element-icons/settings.svg'); } .mx_RoomHeader_forgetButton::before { - mask-image: url('$(res)/img/leave.svg'); + mask-image: url('$(res)/img/element-icons/leave.svg'); width: 26px; } .mx_RoomHeader_searchButton::before { - mask-image: url('$(res)/img/feather-customised/search.svg'); + mask-image: url('$(res)/img/element-icons/room/search-inset.svg'); } .mx_RoomHeader_shareButton::before { - mask-image: url('$(res)/img/feather-customised/share.svg'); + mask-image: url('$(res)/img/element-icons/room/share.svg'); } .mx_RoomHeader_manageIntegsButton::before { - mask-image: url('$(res)/img/feather-customised/grid.svg'); + mask-image: url('$(res)/img/element-icons/room/integrations.svg'); } .mx_RoomHeader_showPanel { @@ -251,7 +251,7 @@ limitations under the License. } .mx_RoomHeader_pinnedButton::before { - mask-image: url('$(res)/img/icons-pin.svg'); + mask-image: url('$(res)/img/element-icons/room/pin.svg'); } .mx_RoomHeader_pinsIndicator { From 5a542281ed49cc2f6d8b58485db5b65ad69eb165 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 3 Jul 2020 19:27:45 +0100 Subject: [PATCH 0663/1504] Make Styled Radio Button outlines default-off Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/elements/_StyledRadioButton.scss | 8 +++++--- .../dialogs/secretstorage/CreateSecretStorageDialog.js | 2 ++ src/components/views/elements/StyledRadioButton.tsx | 6 ++++-- src/components/views/elements/StyledRadioGroup.tsx | 4 +++- .../settings/tabs/user/AppearanceUserSettingsTab.tsx | 3 +++ 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/res/css/views/elements/_StyledRadioButton.scss b/res/css/views/elements/_StyledRadioButton.scss index 17a063593f..ffa1337ebb 100644 --- a/res/css/views/elements/_StyledRadioButton.scss +++ b/res/css/views/elements/_StyledRadioButton.scss @@ -28,9 +28,6 @@ limitations under the License. align-items: baseline; flex-grow: 1; - border: 1px solid $input-darker-bg-color; - border-radius: 8px; - > .mx_RadioButton_content { flex-grow: 1; @@ -110,6 +107,11 @@ limitations under the License. } } +.mx_RadioButton_outlined { + border: 1px solid $input-darker-bg-color; + border-radius: 8px; +} + .mx_RadioButton_checked { border-color: $accent-color; } diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index 984158c7a2..4cef817a38 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -444,6 +444,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent { value={CREATE_STORAGE_OPTION_KEY} name="keyPassphrase" checked={this.state.passPhraseKeySelected === CREATE_STORAGE_OPTION_KEY} + outlined >
    @@ -456,6 +457,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent { value={CREATE_STORAGE_OPTION_PASSPHRASE} name="keyPassphrase" checked={this.state.passPhraseKeySelected === CREATE_STORAGE_OPTION_PASSPHRASE} + outlined >
    diff --git a/src/components/views/elements/StyledRadioButton.tsx b/src/components/views/elements/StyledRadioButton.tsx index 3b83666048..2efd084861 100644 --- a/src/components/views/elements/StyledRadioButton.tsx +++ b/src/components/views/elements/StyledRadioButton.tsx @@ -18,6 +18,7 @@ import React from 'react'; import classnames from 'classnames'; interface IProps extends React.InputHTMLAttributes { + outlined?: boolean; } interface IState { @@ -29,7 +30,7 @@ export default class StyledRadioButton extends React.PureComponent {/* Used to render the radio button circle */} -
    +
    {children}
    ; diff --git a/src/components/views/elements/StyledRadioGroup.tsx b/src/components/views/elements/StyledRadioGroup.tsx index ded1342462..ea8f65d12b 100644 --- a/src/components/views/elements/StyledRadioGroup.tsx +++ b/src/components/views/elements/StyledRadioGroup.tsx @@ -32,10 +32,11 @@ interface IProps { className?: string; definitions: IDefinition[]; value?: T; // if not provided no options will be selected + outlined?: boolean; onChange(newValue: T); } -function StyledRadioGroup({name, definitions, value, className, onChange}: IProps) { +function StyledRadioGroup({name, definitions, value, className, outlined, onChange}: IProps) { const _onChange = e => { onChange(e.target.value); }; @@ -49,6 +50,7 @@ function StyledRadioGroup({name, definitions, value, className name={name} value={d.value} disabled={d.disabled} + outlined={outlined} > {d.label} diff --git a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx index f02147608d..4b2e09a3e3 100644 --- a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx @@ -288,6 +288,7 @@ export default class AppearanceUserSettingsTab extends React.Component
    {customThemeForm} @@ -355,6 +356,7 @@ export default class AppearanceUserSettingsTab extends React.Component {_t("Compact")} @@ -371,6 +373,7 @@ export default class AppearanceUserSettingsTab extends React.Component {_t("Modern")} From c8bb6f5904256b58b41fb0ba7a28e3503bf4ea4a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 3 Jul 2020 19:48:22 +0100 Subject: [PATCH 0664/1504] Improve radio outlines for message layout to be more consistent Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../tabs/user/_AppearanceUserSettingsTab.scss | 6 ++++++ .../tabs/user/AppearanceUserSettingsTab.tsx | 13 ++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss index d724b164e5..df766ab883 100644 --- a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss +++ b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss @@ -188,11 +188,17 @@ limitations under the License. .mx_RadioButton { flex-grow: 0; padding: 10px; + // create a horizontal separation line between the preview and the radio interaction + border-top: 1px solid $input-darker-bg-color; } .mx_EventTile_content { margin-right: 0; } + + &.mx_AppearanceUserSettingsTab_Layout_RadioButton_selected { + border-color: $accent-color; + } } .mx_RadioButton { diff --git a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx index 4b2e09a3e3..0a56fc3cb7 100644 --- a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx @@ -34,6 +34,7 @@ import SettingsFlag from '../../../elements/SettingsFlag'; import Field from '../../../elements/Field'; import EventTilePreview from '../../../elements/EventTilePreview'; import StyledRadioGroup from "../../../elements/StyledRadioGroup"; +import classNames from 'classnames'; interface IProps { } @@ -344,8 +345,10 @@ export default class AppearanceUserSettingsTab extends React.Component {_t("Message layout")} -
    -
    +
    +
    {_t("Compact")}
    -
    +
    {_t("Modern")} From af5f9b7c411cf893f155147700873a1e1eac3132 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 3 Jul 2020 19:53:06 +0100 Subject: [PATCH 0665/1504] revert dark mode separator colour Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../views/settings/tabs/user/_AppearanceUserSettingsTab.scss | 2 -- 1 file changed, 2 deletions(-) diff --git a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss index df766ab883..94983a60bf 100644 --- a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss +++ b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss @@ -188,8 +188,6 @@ limitations under the License. .mx_RadioButton { flex-grow: 0; padding: 10px; - // create a horizontal separation line between the preview and the radio interaction - border-top: 1px solid $input-darker-bg-color; } .mx_EventTile_content { From afa71c7b7c5d3a5b4bce216450366edf95cbf2ad Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 3 Jul 2020 14:26:59 -0600 Subject: [PATCH 0666/1504] Fix minor issues with the badges in the new room list Fixes https://github.com/vector-im/riot-web/issues/14225 --- res/css/views/rooms/_RoomSublist2.scss | 2 +- res/css/views/rooms/_RoomTile2.scss | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 749e0451cd..0e76152f86 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -92,7 +92,7 @@ limitations under the License. // Apply the width and margin to the badge so the container doesn't occupy dead space .mx_NotificationBadge { - width: 16px; + // Do not set a width so the badges get properly sized margin-left: 8px; // same as menu+aux buttons } } diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index 1fd32d3555..7b606ab947 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -85,6 +85,7 @@ limitations under the License. height: 16px; // don't set width so that it takes no space when there is no badge to show margin: auto 0; // vertically align + position: relative; // fixes badge alignment in some scenarios // Create a flexbox to make aligning dot badges easier display: flex; From b5391f8ec8d01fca748c1771c10e5074c364d5bd Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Fri, 3 Jul 2020 17:22:33 -0400 Subject: [PATCH 0667/1504] "ignore"/"unignore" commands: validate user ID Extend the accepted patterns so that users are alerted about invalid input. These patterns are approximations of the Matrix user ID grammer. Resolves https://github.com/vector-im/riot-web/issues/12743 --- src/SlashCommands.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index f667c47b3c..11c955749d 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -660,7 +660,7 @@ export const Commands = [ if (args) { const cli = MatrixClientPeg.get(); - const matches = args.match(/^(\S+)$/); + const matches = args.match(/^(@[^:]+:\S+)$/); if (matches) { const userId = matches[1]; const ignoredUsers = cli.getIgnoredUsers(); @@ -690,7 +690,7 @@ export const Commands = [ if (args) { const cli = MatrixClientPeg.get(); - const matches = args.match(/^(\S+)$/); + const matches = args.match(/(^@[^:]+:\S+$)/); if (matches) { const userId = matches[1]; const ignoredUsers = cli.getIgnoredUsers(); From 4c7014167d19a55b858f4d7d61a959968347b4f1 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 5 Jul 2020 01:06:36 +0100 Subject: [PATCH 0668/1504] Improve a11y of default BaseAvatar Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/avatars/BaseAvatar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/avatars/BaseAvatar.js b/src/components/views/avatars/BaseAvatar.js index 508691e5fd..53e8d0072b 100644 --- a/src/components/views/avatars/BaseAvatar.js +++ b/src/components/views/avatars/BaseAvatar.js @@ -132,7 +132,7 @@ const BaseAvatar = (props) => { ); } else { return ( - + { textNode } { imgNode } From 1620feb55eb4419dd660439f2d91d4434a468c09 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 5 Jul 2020 01:07:46 +0100 Subject: [PATCH 0669/1504] Sprinkle in some better ARIA props Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/LeftPanel2.tsx | 9 ++++-- src/components/structures/RoomSearch.tsx | 7 +++-- src/components/views/rooms/RoomList2.tsx | 3 -- src/components/views/rooms/RoomSublist2.tsx | 22 +++++++++----- src/components/views/rooms/RoomTile2.tsx | 33 ++++++++++++++++++--- 5 files changed, 55 insertions(+), 19 deletions(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 23a9e74646..0b3fa2f7f6 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -235,7 +235,12 @@ export default class LeftPanel2 extends React.Component { private renderSearchExplore(): React.ReactNode { return ( -
    +
    { // TODO fix the accessibility of this: https://github.com/vector-im/riot-web/issues/14180 className="mx_LeftPanel2_exploreButton" onClick={this.onExplore} - alt={_t("Explore rooms")} + title={_t("Explore rooms")} />
    ); diff --git a/src/components/structures/RoomSearch.tsx b/src/components/structures/RoomSearch.tsx index 7ed2acf276..15f3bd5b54 100644 --- a/src/components/structures/RoomSearch.tsx +++ b/src/components/structures/RoomSearch.tsx @@ -149,7 +149,8 @@ export default class RoomSearch extends React.PureComponent { let clearButton = ( ); @@ -157,8 +158,8 @@ export default class RoomSearch extends React.PureComponent { if (this.props.isMinimized) { icon = ( ); diff --git a/src/components/views/rooms/RoomList2.tsx b/src/components/views/rooms/RoomList2.tsx index b0bb70c9a0..06708931a2 100644 --- a/src/components/views/rooms/RoomList2.tsx +++ b/src/components/views/rooms/RoomList2.tsx @@ -276,9 +276,6 @@ export default class RoomList2 extends React.Component { className="mx_RoomList2" role="tree" aria-label={_t("Rooms")} - // Firefox sometimes makes this element focusable due to - // overflow:scroll;, so force it out of tab order. - tabIndex={-1} >{sublists}
    )} diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 21e7c581f0..69125ca88f 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -63,7 +63,7 @@ interface IProps { onAddRoom?: () => void; addRoomLabel: string; isInvite: boolean; - layout: ListLayout; + layout?: ListLayout; isMinimized: boolean; tagId: TagID; @@ -203,6 +203,7 @@ export default class RoomSublist2 extends React.Component { dis.dispatch({ action: 'view_room', room_id: room.roomId, + show_room_tile: true, // to make sure the room gets scrolled into view }); } }; @@ -383,16 +384,22 @@ export default class RoomSublist2 extends React.Component { private renderHeader(): React.ReactElement { return ( - + {({onFocus, isActive, ref}) => { const tabIndex = isActive ? 0 : -1; + let ariaLabel = _t("Jump to first unread room."); + if (this.props.tagId === DefaultTagID.Invite) { + ariaLabel = _t("Jump to first invite."); + } + const badge = ( ); @@ -433,7 +440,7 @@ export default class RoomSublist2 extends React.Component { // doesn't become sticky. // The same applies to the notification badge. return ( -
    +
    { tabIndex={tabIndex} className="mx_RoomSublist2_headerText" role="treeitem" + aria-expanded={!this.props.layout || !this.props.layout.isCollapsed} aria-level={1} onClick={this.onHeaderClick} onContextMenu={this.onContextMenu} @@ -496,12 +504,12 @@ export default class RoomSublist2 extends React.Component { ); if (this.props.isMinimized) showMoreText = null; showNButton = ( -
    + {/* set by CSS masking */} {showMoreText} -
    +
    ); } else if (this.numTiles <= visibleTiles.length && this.numTiles > this.props.layout.defaultVisibleTiles) { // we have all tiles visible - add a button to show less @@ -512,12 +520,12 @@ export default class RoomSublist2 extends React.Component { ); if (this.props.isMinimized) showLessText = null; showNButton = ( -
    + {/* set by CSS masking */} {showLessText} -
    + ); } diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 8a9712b5a4..46b6d57501 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -30,9 +30,15 @@ import { ContextMenu, ContextMenuButton, MenuItemRadio } from "../../structures/ import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import { MessagePreviewStore } from "../../../stores/room-list/MessagePreviewStore"; import DecoratedRoomAvatar from "../avatars/DecoratedRoomAvatar"; -import { getRoomNotifsState, ALL_MESSAGES, ALL_MESSAGES_LOUD, MENTIONS_ONLY, MUTE } from "../../../RoomNotifs"; +import { + getRoomNotifsState, + setRoomNotifsState, + ALL_MESSAGES, + ALL_MESSAGES_LOUD, + MENTIONS_ONLY, + MUTE, +} from "../../../RoomNotifs"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; -import { setRoomNotifsState } from "../../../RoomNotifs"; import { TagSpecificNotificationState } from "../../../stores/notifications/TagSpecificNotificationState"; import { INotificationState } from "../../../stores/notifications/INotificationState"; import NotificationBadge from "./NotificationBadge"; @@ -406,10 +412,11 @@ export default class RoomTile2 extends React.Component { } } + const notificationColor = this.state.notificationState.color; const nameClasses = classNames({ "mx_RoomTile2_name": true, "mx_RoomTile2_nameWithPreview": !!messagePreview, - "mx_RoomTile2_nameHasUnreadEvents": this.state.notificationState.color >= NotificationColor.Bold, + "mx_RoomTile2_nameHasUnreadEvents": notificationColor >= NotificationColor.Bold, }); let nameContainer = ( @@ -422,6 +429,22 @@ export default class RoomTile2 extends React.Component { ); if (this.props.isMinimized) nameContainer = null; + let ariaLabel = name; + // The following labels are written in such a fashion to increase screen reader efficiency (speed). + if (this.props.tag === DefaultTagID.Invite) { + // append nothing + } else if (notificationColor >= NotificationColor.Red) { + ariaLabel += " " + _t("%(count)s unread messages including mentions.", { + count: this.state.notificationState.count, + }); + } else if (notificationColor >= NotificationColor.Grey) { + ariaLabel += " " + _t("%(count)s unread messages.", { + count: this.state.notificationState.count, + }); + } else if (notificationColor >= NotificationColor.Bold) { + ariaLabel += " " + _t("Unread messages."); + } + return ( @@ -434,8 +457,10 @@ export default class RoomTile2 extends React.Component { onMouseEnter={this.onTileMouseEnter} onMouseLeave={this.onTileMouseLeave} onClick={this.onTileClick} - role="treeitem" onContextMenu={this.onContextMenu} + role="treeitem" + aria-label={ariaLabel} + aria-selected={this.state.selected} > {roomAvatar} {nameContainer} From 4f1cd82b665e2d481cae53d3ae0a9f1e337aff8a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 5 Jul 2020 01:24:22 +0100 Subject: [PATCH 0670/1504] i18n Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/i18n/strings/en_EN.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index b23264a297..3794816a27 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1208,6 +1208,8 @@ "Show": "Show", "Message preview": "Message preview", "List options": "List options", + "Jump to first unread room.": "Jump to first unread room.", + "Jump to first invite.": "Jump to first invite.", "Add room": "Add room", "Show %(count)s more|other": "Show %(count)s more", "Show %(count)s more|one": "Show %(count)s more", @@ -2089,6 +2091,8 @@ "Find a room…": "Find a room…", "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.", + "Clear filter": "Clear filter", + "Search rooms": "Search rooms", "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.", @@ -2100,8 +2104,6 @@ "Sent messages will be stored until your connection has returned.": "Sent messages will be stored until your connection has returned.", "Active call": "Active call", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "There's no one else here! Would you like to invite others or stop warning about the empty room?", - "Jump to first unread room.": "Jump to first unread room.", - "Jump to first invite.": "Jump to first invite.", "You seem to be uploading files, are you sure you want to quit?": "You seem to be uploading files, are you sure you want to quit?", "You seem to be in a call, are you sure you want to quit?": "You seem to be in a call, are you sure you want to quit?", "Search failed": "Search failed", @@ -2116,7 +2118,6 @@ "Click to mute video": "Click to mute video", "Click to unmute audio": "Click to unmute audio", "Click to mute audio": "Click to mute audio", - "Clear filter": "Clear filter", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Tried to load a specific point in this room's timeline, but was unable to find it.", "Failed to load timeline position": "Failed to load timeline position", From 83cfdd9c07e647ee7ed9c5f728e421771bf9c625 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 5 Jul 2020 01:30:22 +0100 Subject: [PATCH 0671/1504] Fix accessibility of the Explore button Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/structures/_LeftPanel2.scss | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index bdaada0d15..a73658d916 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -86,11 +86,15 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations .mx_RoomSearch_expanded + .mx_LeftPanel2_exploreButton { // Cheaty way to return the occupied space to the filter input + flex-basis: 0; margin: 0; width: 0; - // Don't forget to hide the masked ::before icon - visibility: hidden; + // Don't forget to hide the masked ::before icon, + // using display:none or visibility:hidden would break accessibility + &::before { + content: none; + } } .mx_LeftPanel2_exploreButton { From 069cdf3ce01fa29181b53dc1d336bf699d7b709b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 5 Jul 2020 18:23:57 +0100 Subject: [PATCH 0672/1504] Fix room list v2 context menus to be aria menus Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/ContextMenu.js | 36 +++++++++++++++++++++ src/components/views/rooms/RoomSublist2.tsx | 26 ++++++++------- src/components/views/rooms/RoomTile2.tsx | 24 ++++++++++---- 3 files changed, 67 insertions(+), 19 deletions(-) diff --git a/src/components/structures/ContextMenu.js b/src/components/structures/ContextMenu.js index e43b0d1431..038208e49f 100644 --- a/src/components/structures/ContextMenu.js +++ b/src/components/structures/ContextMenu.js @@ -23,6 +23,8 @@ import classNames from 'classnames'; import {Key} from "../../Keyboard"; import * as sdk from "../../index"; import AccessibleButton from "../views/elements/AccessibleButton"; +import StyledCheckbox from "../views/elements/StyledCheckbox"; +import StyledRadioButton from "../views/elements/StyledRadioButton"; // Shamelessly ripped off Modal.js. There's probably a better way // of doing reusable widgets like dialog boxes & menus where we go and @@ -421,6 +423,23 @@ MenuItemCheckbox.propTypes = { onClick: PropTypes.func.isRequired, }; +// Semantic component for representing a styled role=menuitemcheckbox +export const StyledMenuItemCheckbox = ({children, label, active=false, disabled=false, ...props}) => { + return ( + + { children } + + ); +}; +StyledMenuItemCheckbox.propTypes = { + ...AccessibleButton.propTypes, + label: PropTypes.string, // optional + active: PropTypes.bool.isRequired, + disabled: PropTypes.bool, // optional + className: PropTypes.string, // optional + onClick: PropTypes.func.isRequired, +}; + // Semantic component for representing a role=menuitemradio export const MenuItemRadio = ({children, label, active=false, disabled=false, ...props}) => { const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); @@ -439,6 +458,23 @@ MenuItemRadio.propTypes = { onClick: PropTypes.func.isRequired, }; +// Semantic component for representing a styled role=menuitemradio +export const StyledMenuItemRadio = ({children, label, active=false, disabled=false, ...props}) => { + return ( + + { children } + + ); +}; +StyledMenuItemRadio.propTypes = { + ...StyledMenuItemRadio.propTypes, + label: PropTypes.string, // optional + active: PropTypes.bool.isRequired, + disabled: PropTypes.bool, // optional + className: PropTypes.string, // optional + onClick: PropTypes.func.isRequired, +}; + // Placement method for to position context menu to right of elementRect with chevronOffset export const toRightOf = (elementRect, chevronOffset=12) => { const left = elementRect.right + window.pageXOffset + 3; diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 69125ca88f..1b1e2ed66d 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -26,16 +26,18 @@ import AccessibleButton from "../../views/elements/AccessibleButton"; import RoomTile2 from "./RoomTile2"; import { ResizableBox, ResizeCallbackData } from "react-resizable"; import { ListLayout } from "../../../stores/room-list/ListLayout"; -import { ContextMenu, ContextMenuButton } from "../../structures/ContextMenu"; -import StyledCheckbox from "../elements/StyledCheckbox"; -import StyledRadioButton from "../elements/StyledRadioButton"; +import { + ContextMenu, + ContextMenuButton, + StyledMenuItemCheckbox, + StyledMenuItemRadio, +} from "../../structures/ContextMenu"; import RoomListStore from "../../../stores/room-list/RoomListStore2"; import { ListAlgorithm, SortAlgorithm } from "../../../stores/room-list/algorithms/models"; import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import dis from "../../../dispatcher/dispatcher"; import NotificationBadge from "./NotificationBadge"; import { ListNotificationState } from "../../../stores/notifications/ListNotificationState"; -import Tooltip from "../elements/Tooltip"; import AccessibleTooltipButton from "../elements/AccessibleTooltipButton"; import { Key } from "../../../Keyboard"; @@ -329,40 +331,40 @@ export default class RoomSublist2 extends React.Component {
    {_t("Sort by")}
    - this.onTagSortChanged(SortAlgorithm.Recent)} checked={!isAlphabetical} name={`mx_${this.props.tagId}_sortBy`} > {_t("Activity")} - - + this.onTagSortChanged(SortAlgorithm.Alphabetic)} checked={isAlphabetical} name={`mx_${this.props.tagId}_sortBy`} > {_t("A-Z")} - +

    {_t("Unread rooms")}
    - {_t("Always show first")} - +

    {_t("Show")}
    - {_t("Message preview")} - +
    diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 46b6d57501..dbaed0d819 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -26,7 +26,13 @@ import dis from '../../../dispatcher/dispatcher'; import { Key } from "../../../Keyboard"; import ActiveRoomObserver from "../../../ActiveRoomObserver"; import { _t } from "../../../languageHandler"; -import { ContextMenu, ContextMenuButton, MenuItemRadio } from "../../structures/ContextMenu"; +import { + ContextMenu, + ContextMenuButton, + MenuItemRadio, + MenuItemCheckbox, + MenuItem, +} from "../../structures/ContextMenu"; import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import { MessagePreviewStore } from "../../../stores/room-list/MessagePreviewStore"; import DecoratedRoomAvatar from "../avatars/DecoratedRoomAvatar"; @@ -328,20 +334,24 @@ export default class RoomTile2 extends React.Component {
    - this.onTagRoom(e, DefaultTagID.Favourite)}> + this.onTagRoom(e, DefaultTagID.Favourite)} + active={false} // TODO: https://github.com/vector-im/riot-web/issues/14283 + label={_t("Favourite")} + > {_t("Favourite")} - - + + {_t("Settings")} - +
    - + {_t("Leave Room")} - +
    From 3cebfc8072b5f84de38c205b5e9be52788d81673 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 5 Jul 2020 19:31:24 +0100 Subject: [PATCH 0673/1504] Fix StyledMenuItemCheckbox and StyledMenuItemRadio Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/ContextMenu.js | 28 +++++++++++++++++++----- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/components/structures/ContextMenu.js b/src/components/structures/ContextMenu.js index 038208e49f..c4825ca1da 100644 --- a/src/components/structures/ContextMenu.js +++ b/src/components/structures/ContextMenu.js @@ -424,9 +424,17 @@ MenuItemCheckbox.propTypes = { }; // Semantic component for representing a styled role=menuitemcheckbox -export const StyledMenuItemCheckbox = ({children, label, active=false, disabled=false, ...props}) => { +export const StyledMenuItemCheckbox = ({children, label, checked=false, disabled=false, ...props}) => { return ( - + { children } ); @@ -434,7 +442,7 @@ export const StyledMenuItemCheckbox = ({children, label, active=false, disabled= StyledMenuItemCheckbox.propTypes = { ...AccessibleButton.propTypes, label: PropTypes.string, // optional - active: PropTypes.bool.isRequired, + checked: PropTypes.bool.isRequired, disabled: PropTypes.bool, // optional className: PropTypes.string, // optional onClick: PropTypes.func.isRequired, @@ -459,9 +467,17 @@ MenuItemRadio.propTypes = { }; // Semantic component for representing a styled role=menuitemradio -export const StyledMenuItemRadio = ({children, label, active=false, disabled=false, ...props}) => { +export const StyledMenuItemRadio = ({children, label, checked=false, disabled=false, ...props}) => { return ( - + { children } ); @@ -469,7 +485,7 @@ export const StyledMenuItemRadio = ({children, label, active=false, disabled=fal StyledMenuItemRadio.propTypes = { ...StyledMenuItemRadio.propTypes, label: PropTypes.string, // optional - active: PropTypes.bool.isRequired, + checked: PropTypes.bool.isRequired, disabled: PropTypes.bool, // optional className: PropTypes.string, // optional onClick: PropTypes.func.isRequired, From a68e23c9e089a66894f85b8cdd24ae0cc2be54b4 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 5 Jul 2020 19:38:45 +0100 Subject: [PATCH 0674/1504] Make message previews accessible via describedby Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomTile2.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index dbaed0d819..3d9a4b5aca 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -80,6 +80,8 @@ interface IState { generalMenuPosition: PartialDOMRect; } +const messagePreviewId = (roomId: string) => `mx_RoomTile2_messagePreview_${roomId}`; + const contextMenuBelow = (elementRect: PartialDOMRect) => { // align the context menu's icons with the icon which opened the context menu const left = elementRect.left + window.pageXOffset - 9; @@ -135,6 +137,10 @@ export default class RoomTile2 extends React.Component { return !this.props.isMinimized && this.props.tag !== DefaultTagID.Invite; } + private get showMessagePreview(): boolean { + return !this.props.isMinimized && this.props.showMessagePreview; + } + public componentWillUnmount() { if (this.props.room) { ActiveRoomObserver.removeListener(this.props.room.roomId, this.onActiveRoomUpdate); @@ -408,14 +414,14 @@ export default class RoomTile2 extends React.Component { name = name.replace(":", ":\u200b"); // add a zero-width space to allow linewrapping after the colon let messagePreview = null; - if (this.props.showMessagePreview && !this.props.isMinimized) { + if (this.showMessagePreview) { // The preview store heavily caches this info, so should be safe to hammer. const text = MessagePreviewStore.instance.getPreviewForRoom(this.props.room, this.props.tag); // Only show the preview if there is one to show. if (text) { messagePreview = ( -
    +
    {text}
    ); @@ -455,6 +461,11 @@ export default class RoomTile2 extends React.Component { ariaLabel += " " + _t("Unread messages."); } + let ariaDescribedBy: string; + if (this.showMessagePreview) { + ariaDescribedBy = messagePreviewId(this.props.room.roomId); + } + return ( @@ -471,6 +482,7 @@ export default class RoomTile2 extends React.Component { role="treeitem" aria-label={ariaLabel} aria-selected={this.state.selected} + aria-describedby={ariaDescribedBy} > {roomAvatar} {nameContainer} From 7c29a53ebdca7cc06dbd51e34565371c9b04561e Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 5 Jul 2020 19:59:29 +0100 Subject: [PATCH 0675/1504] aria-hide the notifications badge on room tiles as we have manual labels here Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomTile2.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 3d9a4b5aca..f3b22c3a64 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -397,8 +397,9 @@ export default class RoomTile2 extends React.Component { let badge: React.ReactNode; if (!this.props.isMinimized) { + // aria-hidden because we summarise the unread count/highlight status in a manual aria-label below badge = ( -
    + ); } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index f16fb38f86..e576411323 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -966,6 +966,8 @@ "Room version:": "Room version:", "Developer options": "Developer options", "Open Devtools": "Open Devtools", + "Make this room low priority": "Make this room low priority", + "Low priority rooms show up at the bottom of your room list in a dedicated section at the bottom of your room list": "Low priority rooms show up at the bottom of your room list in a dedicated section at the bottom of your room list", "This room is bridging messages to the following platforms. Learn more.": "This room is bridging messages to the following platforms. Learn more.", "This room isn’t bridging messages to any platforms. Learn more.": "This room isn’t bridging messages to any platforms. Learn more.", "Bridges": "Bridges", From 774e32ecf0dd3f36b467b82df4ad377c6aa924c4 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 7 Jul 2020 16:16:46 -0600 Subject: [PATCH 0767/1504] Fix DM handling in new room list --- src/stores/room-list/algorithms/Algorithm.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index 361f42eac5..8c7bbc8615 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -524,7 +524,7 @@ export class Algorithm extends EventEmitter { } if (!inTag) { - if (DMRoomMap.getUserIdForRoomId(room.roomId)) { + if (DMRoomMap.shared().getUserIdForRoomId(room.roomId)) { newTags[DefaultTagID.DM].push(room); } else { newTags[DefaultTagID.Untagged].push(room); From f4e05142dbcbda8ae6b4f2faed5868e932a9b80f Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Tue, 7 Jul 2020 23:17:56 +0100 Subject: [PATCH 0768/1504] lint --- src/components/views/rooms/RoomTile2.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 5e4560c7cd..8f00e2d085 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -364,7 +364,7 @@ export default class RoomTile2 extends React.Component { const roomTags = RoomListStore.instance.getTagsForRoom(this.props.room); const isFavorite = roomTags.includes(DefaultTagID.Favourite); - const favoriteClassName = isFavorite ? "mx_RoomTile2_iconFavorite" : "mx_RoomTile2_iconStar" + const favoriteClassName = isFavorite ? "mx_RoomTile2_iconFavorite" : "mx_RoomTile2_iconStar"; let contextMenu = null; if (this.state.generalMenuPosition) { From 121e41d20b4bc9baa73d7a2ea36f90a1b8b6804f Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 7 Jul 2020 16:20:53 -0600 Subject: [PATCH 0769/1504] Remove irrelevant function --- test/components/views/rooms/RoomList-test.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/test/components/views/rooms/RoomList-test.js b/test/components/views/rooms/RoomList-test.js index 3521ec0705..7876ad0f18 100644 --- a/test/components/views/rooms/RoomList-test.js +++ b/test/components/views/rooms/RoomList-test.js @@ -56,11 +56,6 @@ describe('RoomList', () => { DMRoomMap.makeShared(); - // Lie to the room list store about DMs not existing - DMRoomMap.getUserIdForRoomId = () => { - return null; - }; - parentDiv = document.createElement('div'); document.body.appendChild(parentDiv); From f12d9512098dbd4e56dc1f985f042a6d79e6ff5f Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 7 Jul 2020 16:34:42 -0600 Subject: [PATCH 0770/1504] Update end-to-end tests for new room list --- .../src/usecases/accept-invite.js | 6 ++-- .../src/usecases/create-room.js | 36 +++++++++---------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/test/end-to-end-tests/src/usecases/accept-invite.js b/test/end-to-end-tests/src/usecases/accept-invite.js index 3f208cc1fc..a61aaec64c 100644 --- a/test/end-to-end-tests/src/usecases/accept-invite.js +++ b/test/end-to-end-tests/src/usecases/accept-invite.js @@ -15,10 +15,12 @@ See the License for the specific language governing permissions and limitations under the License. */ +const {findSublist} = require("./create-room"); + module.exports = async function acceptInvite(session, name) { session.log.step(`accepts "${name}" invite`); - //TODO: brittle selector - const invitesHandles = await session.queryAll('.mx_RoomTile_name.mx_RoomTile_invite'); + const inviteSublist = await findSublist("invites"); + const invitesHandles = await inviteSublist.$(".mx_RoomTile2_name"); const invitesWithText = await Promise.all(invitesHandles.map(async (inviteHandle) => { const text = await session.innerText(inviteHandle); return {inviteHandle, text}; diff --git a/test/end-to-end-tests/src/usecases/create-room.js b/test/end-to-end-tests/src/usecases/create-room.js index 7e219fd159..50cb1e02f3 100644 --- a/test/end-to-end-tests/src/usecases/create-room.js +++ b/test/end-to-end-tests/src/usecases/create-room.js @@ -16,21 +16,27 @@ limitations under the License. */ async function openRoomDirectory(session) { - const roomDirectoryButton = await session.query('.mx_LeftPanel_explore .mx_AccessibleButton'); + const roomDirectoryButton = await session.query('.mx_LeftPanel2_exploreButton'); await roomDirectoryButton.click(); } +async function findSublist(name) { + const sublists = await session.queryAll('.mx_RoomSublist2'); + for (const sublist of sublists) { + const header = await sublist.$('.mx_RoomSublist2_headerText'); + const headerText = await session.innerText(header); + if (headerText.toLowerCase().includes(name.toLowerCase())) { + return sublist; + } + } + throw new Error(`could not find room list section that contains '${name}' in header`); +} + async function createRoom(session, roomName, encrypted=false) { session.log.step(`creates room "${roomName}"`); - const roomListHeaders = await session.queryAll('.mx_RoomSubList_labelContainer'); - const roomListHeaderLabels = await Promise.all(roomListHeaders.map(h => session.innerText(h))); - const roomsIndex = roomListHeaderLabels.findIndex(l => l.toLowerCase().includes("rooms")); - if (roomsIndex === -1) { - throw new Error("could not find room list section that contains 'rooms' in header"); - } - const roomsHeader = roomListHeaders[roomsIndex]; - const addRoomButton = await roomsHeader.$(".mx_RoomSubList_addRoom"); + const roomsSublist = await findSublist("rooms"); + const addRoomButton = await roomsSublist.$(".mx_RoomSublist2_auxButton"); await addRoomButton.click(); const roomNameInput = await session.query('.mx_CreateRoomDialog_name input'); @@ -51,14 +57,8 @@ async function createRoom(session, roomName, encrypted=false) { async function createDm(session, invitees) { session.log.step(`creates DM with ${JSON.stringify(invitees)}`); - const roomListHeaders = await session.queryAll('.mx_RoomSubList_labelContainer'); - const roomListHeaderLabels = await Promise.all(roomListHeaders.map(h => session.innerText(h))); - const dmsIndex = roomListHeaderLabels.findIndex(l => l.toLowerCase().includes('direct messages')); - if (dmsIndex === -1) { - throw new Error("could not find room list section that contains 'direct messages' in header"); - } - const dmsHeader = roomListHeaders[dmsIndex]; - const startChatButton = await dmsHeader.$(".mx_RoomSubList_addRoom"); + const dmsSublist = await findSublist("people"); + const startChatButton = await dmsSublist.$(".mx_RoomSublist2_auxButton"); await startChatButton.click(); const inviteesEditor = await session.query('.mx_InviteDialog_editor textarea'); @@ -83,4 +83,4 @@ async function createDm(session, invitees) { session.log.done(); } -module.exports = {openRoomDirectory, createRoom, createDm}; +module.exports = {openRoomDirectory, findSublist, createRoom, createDm}; From 9000888013f27f75b106719832eeb88f571414dc Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 7 Jul 2020 16:38:24 -0600 Subject: [PATCH 0771/1504] Pass the session through --- test/end-to-end-tests/src/usecases/accept-invite.js | 2 +- test/end-to-end-tests/src/usecases/create-room.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/end-to-end-tests/src/usecases/accept-invite.js b/test/end-to-end-tests/src/usecases/accept-invite.js index a61aaec64c..27992e16df 100644 --- a/test/end-to-end-tests/src/usecases/accept-invite.js +++ b/test/end-to-end-tests/src/usecases/accept-invite.js @@ -19,7 +19,7 @@ const {findSublist} = require("./create-room"); module.exports = async function acceptInvite(session, name) { session.log.step(`accepts "${name}" invite`); - const inviteSublist = await findSublist("invites"); + const inviteSublist = await findSublist(session, "invites"); const invitesHandles = await inviteSublist.$(".mx_RoomTile2_name"); const invitesWithText = await Promise.all(invitesHandles.map(async (inviteHandle) => { const text = await session.innerText(inviteHandle); diff --git a/test/end-to-end-tests/src/usecases/create-room.js b/test/end-to-end-tests/src/usecases/create-room.js index 50cb1e02f3..24e42b92dd 100644 --- a/test/end-to-end-tests/src/usecases/create-room.js +++ b/test/end-to-end-tests/src/usecases/create-room.js @@ -20,7 +20,7 @@ async function openRoomDirectory(session) { await roomDirectoryButton.click(); } -async function findSublist(name) { +async function findSublist(session, name) { const sublists = await session.queryAll('.mx_RoomSublist2'); for (const sublist of sublists) { const header = await sublist.$('.mx_RoomSublist2_headerText'); @@ -35,7 +35,7 @@ async function findSublist(name) { async function createRoom(session, roomName, encrypted=false) { session.log.step(`creates room "${roomName}"`); - const roomsSublist = await findSublist("rooms"); + const roomsSublist = await findSublist(session, "rooms"); const addRoomButton = await roomsSublist.$(".mx_RoomSublist2_auxButton"); await addRoomButton.click(); @@ -57,7 +57,7 @@ async function createRoom(session, roomName, encrypted=false) { async function createDm(session, invitees) { session.log.step(`creates DM with ${JSON.stringify(invitees)}`); - const dmsSublist = await findSublist("people"); + const dmsSublist = await findSublist(session, "people"); const startChatButton = await dmsSublist.$(".mx_RoomSublist2_auxButton"); await startChatButton.click(); From 9bf2505e51db82afe2ef5d8e8b4356e9f25b79fc Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 7 Jul 2020 16:48:03 -0600 Subject: [PATCH 0772/1504] queryAll, not just query --- test/end-to-end-tests/src/usecases/accept-invite.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/end-to-end-tests/src/usecases/accept-invite.js b/test/end-to-end-tests/src/usecases/accept-invite.js index 27992e16df..d38fdcd0db 100644 --- a/test/end-to-end-tests/src/usecases/accept-invite.js +++ b/test/end-to-end-tests/src/usecases/accept-invite.js @@ -20,7 +20,7 @@ const {findSublist} = require("./create-room"); module.exports = async function acceptInvite(session, name) { session.log.step(`accepts "${name}" invite`); const inviteSublist = await findSublist(session, "invites"); - const invitesHandles = await inviteSublist.$(".mx_RoomTile2_name"); + const invitesHandles = await inviteSublist.$$(".mx_RoomTile2_name"); const invitesWithText = await Promise.all(invitesHandles.map(async (inviteHandle) => { const text = await session.innerText(inviteHandle); return {inviteHandle, text}; From 92dec8ddd81b326558a9032bce253138d3fcfd52 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 8 Jul 2020 00:16:24 +0100 Subject: [PATCH 0773/1504] Fix gaps --- res/css/views/rooms/_RoomSublist2.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 0e76152f86..a8de6dd409 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -203,15 +203,15 @@ limitations under the License. // Update the render() function for RoomSublist2 if these change // Update the ListLayout class for minVisibleTiles if these change. // - // At 24px high and 8px padding on the top this equates to 0.65 of + // At 28px high and 8px padding on the top this equates to 0.73 of // a tile due to how the padding calculations work. - height: 24px; + height: 28px; padding-top: 8px; // We force this to the bottom so it will overlap rooms as needed. // We account for the space it takes up (24px) in the code through padding. position: absolute; - bottom: 4px; // the height of the resize handle + bottom: 0; // the height of the resize handle left: 0; right: 0; From 0906da01baa1724df28814afc34d45d9e4fbeca9 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 8 Jul 2020 00:18:58 +0100 Subject: [PATCH 0774/1504] Fix gaps --- res/css/views/rooms/_RoomSublist2.scss | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index a8de6dd409..d08bc09031 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -203,10 +203,11 @@ limitations under the License. // Update the render() function for RoomSublist2 if these change // Update the ListLayout class for minVisibleTiles if these change. // - // At 28px high and 8px padding on the top this equates to 0.73 of + // At 24px high, 8px padding on the top and 4px padding on the bottom this equates to 0.73 of // a tile due to how the padding calculations work. - height: 28px; + height: 24px; padding-top: 8px; + padding-bottom: 4px; // We force this to the bottom so it will overlap rooms as needed. // We account for the space it takes up (24px) in the code through padding. From 70c1bf3e5c1e305ed177b0b28194e66d51d0ee8b Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 8 Jul 2020 00:25:43 +0100 Subject: [PATCH 0775/1504] Focus room filter on openSearch --- src/components/structures/RoomSearch.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/structures/RoomSearch.tsx b/src/components/structures/RoomSearch.tsx index 15f3bd5b54..861549bef4 100644 --- a/src/components/structures/RoomSearch.tsx +++ b/src/components/structures/RoomSearch.tsx @@ -81,6 +81,7 @@ export default class RoomSearch extends React.PureComponent { private openSearch = () => { defaultDispatcher.dispatch({action: "show_left_panel"}); + defaultDispatcher.dispatch({action: "focus_room_filter"}) }; private onChange = () => { From 8679d90703b6e3b62f2e3ba14db54f06ce13c80f Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 8 Jul 2020 00:27:29 +0100 Subject: [PATCH 0776/1504] lint semi --- src/components/structures/RoomSearch.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/RoomSearch.tsx b/src/components/structures/RoomSearch.tsx index 861549bef4..bb82ab8f63 100644 --- a/src/components/structures/RoomSearch.tsx +++ b/src/components/structures/RoomSearch.tsx @@ -81,7 +81,7 @@ export default class RoomSearch extends React.PureComponent { private openSearch = () => { defaultDispatcher.dispatch({action: "show_left_panel"}); - defaultDispatcher.dispatch({action: "focus_room_filter"}) + defaultDispatcher.dispatch({action: "focus_room_filter"}); }; private onChange = () => { From 15b6a273c9fdc1c086ad5db845eaf0bf6e53a905 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 7 Jul 2020 19:36:26 -0600 Subject: [PATCH 0777/1504] Swap out the resizer lib for something more stable react-resizer appears to be okay at tracking state, but it often desyncs from reality. re-resizer is more maintained and more broadly used (160k downloads vs 110k), and appears to generally do a better job of tracking the cursor. The new library has some oddities though, such as deltas, touch support (hence the polyfill), and calling handles "Enable". For https://github.com/vector-im/riot-web/issues/14022 --- package.json | 2 +- res/css/views/rooms/_RoomSublist2.scss | 16 ++--- src/@types/polyfill.ts | 36 +++++++++++ src/components/views/rooms/RoomSublist2.tsx | 68 +++++++++++++++------ src/stores/room-list/ListLayout.ts | 7 ++- yarn.lock | 32 +++++----- 6 files changed, 114 insertions(+), 47 deletions(-) create mode 100644 src/@types/polyfill.ts diff --git a/package.json b/package.json index 3fd7703afb..608bc42a7f 100644 --- a/package.json +++ b/package.json @@ -89,11 +89,11 @@ "prop-types": "^15.5.8", "qrcode": "^1.4.4", "qs": "^6.6.0", + "re-resizable": "^6.5.2", "react": "^16.9.0", "react-beautiful-dnd": "^4.0.1", "react-dom": "^16.9.0", "react-focus-lock": "^2.2.1", - "react-resizable": "^1.10.1", "react-transition-group": "^4.4.1", "resize-observer-polyfill": "^1.5.0", "sanitize-html": "^1.18.4", diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index d08bc09031..e9149ee5e6 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -254,24 +254,26 @@ limitations under the License. // Class name comes from the ResizableBox component // The hover state needs to use the whole sublist, not just the resizable box, // so that selector is below and one level higher. - .react-resizable-handle { + .mx_RoomSublist2_resizerHandle { cursor: ns-resize; border-radius: 3px; - // Update RESIZE_HANDLE_HEIGHT if this changes - height: 4px; + // Override styles from library + width: unset !important; + height: 4px !important; // Update RESIZE_HANDLE_HEIGHT if this changes // This is positioned directly below the 'show more' button. position: absolute; - bottom: 0; + bottom: 0 !important; // override from library // Together, these make the bar 64px wide - left: calc(50% - 32px); - right: calc(50% - 32px); + // These are also overridden from the library + left: calc(50% - 32px) !important; + right: calc(50% - 32px) !important; } &:hover, &.mx_RoomSublist2_hasMenuOpen { - .react-resizable-handle { + .mx_RoomSublist2_resizerHandle { opacity: 0.8; background-color: $primary-fg-color; } diff --git a/src/@types/polyfill.ts b/src/@types/polyfill.ts new file mode 100644 index 0000000000..816df7946d --- /dev/null +++ b/src/@types/polyfill.ts @@ -0,0 +1,36 @@ +/* +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. +*/ + +export function polyfillTouchEvent() { + // Firefox doesn't have touch events, so create a fake one we can rely on lying about. + if (!window.TouchEvent) { + // We have no intention of actually using this, so just lie. + window.TouchEvent = class TouchEvent extends UIEvent { + public get altKey(): boolean { return false; } + public get changedTouches(): any { return []; } + public get ctrlKey(): boolean { return false; } + public get metaKey(): boolean { return false; } + public get shiftKey(): boolean { return false; } + public get targetTouches(): any { return []; } + public get touches(): any { return []; } + public get rotation(): number { return 0.0; } + public get scale(): number { return 0.0; } + constructor(eventType: string, params?: any) { + super(eventType, params); + } + }; + } +} diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index eefd29f0b7..252e5f562b 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -24,7 +24,6 @@ import {RovingAccessibleButton, RovingTabIndexWrapper} from "../../../accessibil import { _t } from "../../../languageHandler"; import AccessibleButton from "../../views/elements/AccessibleButton"; import RoomTile2 from "./RoomTile2"; -import { ResizableBox, ResizeCallbackData } from "react-resizable"; import { ListLayout } from "../../../stores/room-list/ListLayout"; import { ContextMenu, @@ -40,7 +39,9 @@ import NotificationBadge from "./NotificationBadge"; import { ListNotificationState } from "../../../stores/notifications/ListNotificationState"; import AccessibleTooltipButton from "../elements/AccessibleTooltipButton"; import { Key } from "../../../Keyboard"; -import StyledCheckbox from "../elements/StyledCheckbox"; +import { Enable, Resizable } from "re-resizable"; +import { Direction } from "re-resizable/lib/resizer"; +import { polyfillTouchEvent } from "../../../@types/polyfill"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -58,6 +59,9 @@ const RESIZE_HANDLE_HEIGHT = 4; // As defined by CSS const MAX_PADDING_HEIGHT = SHOW_N_BUTTON_HEIGHT + RESIZE_HANDLE_HEIGHT; +// HACK: We really shouldn't have to do this. +polyfillTouchEvent(); + interface IProps { forRooms: boolean; rooms?: Room[]; @@ -124,10 +128,25 @@ export default class RoomSublist2 extends React.Component { if (this.props.onAddRoom) this.props.onAddRoom(); }; - private onResize = (e: React.MouseEvent, data: ResizeCallbackData) => { - const direction = e.movementY < 0 ? -1 : +1; - const tileDiff = this.props.layout.pixelsToTiles(Math.abs(e.movementY)) * direction; - this.props.layout.setVisibleTilesWithin(tileDiff, this.numTiles); + private onResize = ( + e: MouseEvent | TouchEvent, + travelDirection: Direction, + refToElement: HTMLDivElement, + delta: { width: number, height: number }, // TODO: Use NumberSize from re-resizer when it is exposed + ) => { + // Do some sanity checks, but in reality we shouldn't need these. + if (travelDirection !== "bottom") return; + if (delta.height === 0) return; // something went wrong, so just ignore it. + + // NOTE: the movement in the MouseEvent (not present on a TouchEvent) is inaccurate + // for our purposes. The delta provided by the library is also a change *from when + // resizing started*, meaning it is fairly useless for us. This is why we just use + // the client height and run with it. + + const heightBefore = this.props.layout.visibleTiles; + const heightInTiles = this.props.layout.pixelsToTiles(refToElement.clientHeight); + this.props.layout.setVisibleTilesWithin(heightInTiles, this.numTiles); + if (heightBefore === this.props.layout.visibleTiles) return; // no-op this.forceUpdate(); // because the layout doesn't trigger a re-render }; @@ -556,9 +575,19 @@ export default class RoomSublist2 extends React.Component { } // Figure out if we need a handle - let handles = ['s']; + const handles: Enable = { + bottom: true, // the only one we need, but the others must be explicitly false + bottomLeft: false, + bottomRight: false, + left: false, + right: false, + top: false, + topLeft: false, + topRight: false, + }; if (layout.visibleTiles >= this.numTiles && this.numTiles <= layout.minVisibleTiles) { - handles = []; // no handles, we're at a minimum + // we're at a minimum, don't have a bottom handle + handles.bottom = false; } // We have to account for padding so we can accommodate a 'show more' button and @@ -582,22 +611,25 @@ export default class RoomSublist2 extends React.Component { const tilesWithoutPadding = Math.min(relativeTiles, layout.visibleTiles); const tilesPx = layout.calculateTilesToPixelsMin(relativeTiles, tilesWithoutPadding, padding); + const dimensions = { + height: tilesPx, + }; content = ( - {visibleTiles} {showNButton} - + ); } diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index f31e92b8ae..1e7d8f0763 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -89,11 +89,12 @@ export class ListLayout { return 5 + RESIZER_BOX_FACTOR; } - public setVisibleTilesWithin(diff: number, maxPossible: number) { + public setVisibleTilesWithin(newVal: number, maxPossible: number) { + maxPossible = maxPossible + RESIZER_BOX_FACTOR; if (this.visibleTiles > maxPossible) { - this.visibleTiles = maxPossible + diff; + this.visibleTiles = maxPossible; } else { - this.visibleTiles += diff; + this.visibleTiles = newVal; } } diff --git a/yarn.lock b/yarn.lock index d8106febab..80158a89e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2499,7 +2499,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.1.2, classnames@^2.2.5: +classnames@^2.1.2: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== @@ -3779,6 +3779,11 @@ fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-memoize@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.5.2.tgz#79e3bb6a4ec867ea40ba0e7146816f6cdce9b57e" + integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== + fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" @@ -6882,7 +6887,7 @@ prop-types-exact@^1.2.0: object.assign "^4.1.0" reflect.ownkeys "^0.2.0" -prop-types@15.x, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -7053,6 +7058,13 @@ rc@1.2.8, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +re-resizable@^6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.5.2.tgz#7eb1928c673285d4dcf654211e47acb9a3801c3e" + integrity sha512-Pjo3ydkr/meTr6j3YZqyv+9fRS5UNOj5SaAI06gHFQ35BnpsZKmwNvupCnbo11gjQ1I62Uy+UzlHLO9xPQEuWQ== + dependencies: + fast-memoize "^2.5.1" + react-beautiful-dnd@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-4.0.1.tgz#3b0a49bf6be75af351176c904f012611dd292b81" @@ -7086,14 +7098,6 @@ react-dom@^16.9.0: prop-types "^15.6.2" scheduler "^0.19.1" -react-draggable@^4.0.3: - version "4.4.2" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.2.tgz#f3cefecee25f467f865144cda0d066e5f05f94a0" - integrity sha512-zLQs4R4bnBCGnCVTZiD8hPsHtkiJxgMpGDlRESM+EHQo8ysXhKJ2GKdJ8UxxLJdRVceX1j19jy+hQS2wHislPQ== - dependencies: - classnames "^2.2.5" - prop-types "^15.6.0" - react-focus-lock@^2.2.1: version "2.3.1" resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.3.1.tgz#9d5d85899773609c7eefa4fc54fff6a0f5f2fc47" @@ -7138,14 +7142,6 @@ react-redux@^5.0.6: react-is "^16.6.0" react-lifecycles-compat "^3.0.0" -react-resizable@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-1.10.1.tgz#f0c2cf1d83b3470b87676ce6d6b02bbe3f4d8cd4" - integrity sha512-Jd/bKOKx6+19NwC4/aMLRu/J9/krfxlDnElP41Oc+oLiUWs/zwV1S9yBfBZRnqAwQb6vQ/HRSk3bsSWGSgVbpw== - dependencies: - prop-types "15.x" - react-draggable "^4.0.3" - react-test-renderer@^16.0.0-0, react-test-renderer@^16.9.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.13.1.tgz#de25ea358d9012606de51e012d9742e7f0deabc1" From c5e8a0b5afc30ed5b97867e826c1e3fc1847ab4d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 8 Jul 2020 08:40:58 +0100 Subject: [PATCH 0778/1504] Convert HtmlUtils to TypeScript Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- package.json | 2 + src/{HtmlUtils.js => HtmlUtils.tsx} | 127 +++++++++++++++------------- yarn.lock | 14 +++ 3 files changed, 83 insertions(+), 60 deletions(-) rename src/{HtmlUtils.js => HtmlUtils.tsx} (84%) diff --git a/package.json b/package.json index 3fd7703afb..7251d76498 100644 --- a/package.json +++ b/package.json @@ -122,6 +122,7 @@ "@types/classnames": "^2.2.10", "@types/counterpart": "^0.18.1", "@types/flux": "^3.1.9", + "@types/linkifyjs": "^2.1.3", "@types/lodash": "^4.14.152", "@types/modernizr": "^3.5.3", "@types/node": "^12.12.41", @@ -129,6 +130,7 @@ "@types/react": "^16.9", "@types/react-dom": "^16.9.8", "@types/react-transition-group": "^4.4.0", + "@types/sanitize-html": "^1.23.3", "@types/zxcvbn": "^4.4.0", "babel-eslint": "^10.0.3", "babel-jest": "^24.9.0", diff --git a/src/HtmlUtils.js b/src/HtmlUtils.tsx similarity index 84% rename from src/HtmlUtils.js rename to src/HtmlUtils.tsx index 34e9e55d25..6746f68812 100644 --- a/src/HtmlUtils.js +++ b/src/HtmlUtils.tsx @@ -17,10 +17,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -'use strict'; - -import ReplyThread from "./components/views/elements/ReplyThread"; - import React from 'react'; import sanitizeHtml from 'sanitize-html'; import * as linkify from 'linkifyjs'; @@ -28,12 +24,13 @@ import linkifyMatrix from './linkify-matrix'; import _linkifyElement from 'linkifyjs/element'; import _linkifyString from 'linkifyjs/string'; import classNames from 'classnames'; -import {MatrixClientPeg} from './MatrixClientPeg'; +import EMOJIBASE_REGEX from 'emojibase-regex'; import url from 'url'; -import EMOJIBASE_REGEX from 'emojibase-regex'; +import {MatrixClientPeg} from './MatrixClientPeg'; import {tryTransformPermalinkToLocalHref} from "./utils/permalinks/Permalinks"; import {SHORTCODE_TO_EMOJI, getEmojiFromUnicode} from "./emoji"; +import ReplyThread from "./components/views/elements/ReplyThread"; linkifyMatrix(linkify); @@ -64,7 +61,7 @@ const PERMITTED_URL_SCHEMES = ['http', 'https', 'ftp', 'mailto', 'magnet']; * need emojification. * unicodeToImage uses this function. */ -function mightContainEmoji(str) { +function mightContainEmoji(str: string) { return SURROGATE_PAIR_PATTERN.test(str) || SYMBOL_PATTERN.test(str); } @@ -74,7 +71,7 @@ function mightContainEmoji(str) { * @param {String} char The emoji character * @return {String} The shortcode (such as :thumbup:) */ -export function unicodeToShortcode(char) { +export function unicodeToShortcode(char: string) { const data = getEmojiFromUnicode(char); return (data && data.shortcodes ? `:${data.shortcodes[0]}:` : ''); } @@ -85,7 +82,7 @@ export function unicodeToShortcode(char) { * @param {String} shortcode The shortcode (such as :thumbup:) * @return {String} The emoji character; null if none exists */ -export function shortcodeToUnicode(shortcode) { +export function shortcodeToUnicode(shortcode: string) { shortcode = shortcode.slice(1, shortcode.length - 1); const data = SHORTCODE_TO_EMOJI.get(shortcode); return data ? data.unicode : null; @@ -100,7 +97,7 @@ export function processHtmlForSending(html: string): string { } let contentHTML = ""; - for (let i=0; i < contentDiv.children.length; i++) { + for (let i = 0; i < contentDiv.children.length; i++) { const element = contentDiv.children[i]; if (element.tagName.toLowerCase() === 'p') { contentHTML += element.innerHTML; @@ -122,7 +119,7 @@ export function processHtmlForSending(html: string): string { * Given an untrusted HTML string, return a React node with an sanitized version * of that HTML. */ -export function sanitizedHtmlNode(insaneHtml) { +export function sanitizedHtmlNode(insaneHtml: string) { const saneHtml = sanitizeHtml(insaneHtml, sanitizeHtmlParams); return
    ; @@ -136,7 +133,7 @@ export function sanitizedHtmlNode(insaneHtml) { * other places we need to sanitise URLs. * @return true if permitted, otherwise false */ -export function isUrlPermitted(inputUrl) { +export function isUrlPermitted(inputUrl: string) { try { const parsed = url.parse(inputUrl); if (!parsed.protocol) return false; @@ -147,9 +144,9 @@ export function isUrlPermitted(inputUrl) { } } -const transformTags = { // custom to matrix +const transformTags: sanitizeHtml.IOptions["transformTags"] = { // custom to matrix // add blank targets to all hyperlinks except vector URLs - 'a': function(tagName, attribs) { + 'a': function(tagName: string, attribs: sanitizeHtml.Attributes) { if (attribs.href) { attribs.target = '_blank'; // by default @@ -162,7 +159,7 @@ const transformTags = { // custom to matrix attribs.rel = 'noreferrer noopener'; // https://mathiasbynens.github.io/rel-noopener/ return { tagName, attribs }; }, - 'img': function(tagName, attribs) { + 'img': function(tagName: string, attribs: sanitizeHtml.Attributes) { // Strip out imgs that aren't `mxc` here instead of using allowedSchemesByTag // because transformTags is used _before_ we filter by allowedSchemesByTag and // we don't want to allow images with `https?` `src`s. @@ -176,7 +173,7 @@ const transformTags = { // custom to matrix ); return { tagName, attribs }; }, - 'code': function(tagName, attribs) { + 'code': function(tagName: string, attribs: sanitizeHtml.Attributes) { if (typeof attribs.class !== 'undefined') { // Filter out all classes other than ones starting with language- for syntax highlighting. const classes = attribs.class.split(/\s/).filter(function(cl) { @@ -186,7 +183,7 @@ const transformTags = { // custom to matrix } return { tagName, attribs }; }, - '*': function(tagName, attribs) { + '*': function(tagName: string, attribs: sanitizeHtml.Attributes) { // Delete any style previously assigned, style is an allowedTag for font and span // because attributes are stripped after transforming delete attribs.style; @@ -220,7 +217,7 @@ const transformTags = { // custom to matrix }, }; -const sanitizeHtmlParams = { +const sanitizeHtmlParams: sanitizeHtml.IOptions = { allowedTags: [ 'font', // custom to matrix for IRC-style font coloring 'del', // for markdown @@ -247,16 +244,16 @@ const sanitizeHtmlParams = { }; // this is the same as the above except with less rewriting -const composerSanitizeHtmlParams = Object.assign({}, sanitizeHtmlParams); -composerSanitizeHtmlParams.transformTags = { - 'code': transformTags['code'], - '*': transformTags['*'], +const composerSanitizeHtmlParams: sanitizeHtml.IOptions = { + ...sanitizeHtmlParams, + transformTags: { + 'code': transformTags['code'], + '*': transformTags['*'], + }, }; -class BaseHighlighter { - constructor(highlightClass, highlightLink) { - this.highlightClass = highlightClass; - this.highlightLink = highlightLink; +abstract class BaseHighlighter { + constructor(public highlightClass: string, public highlightLink: string) { } /** @@ -270,47 +267,49 @@ class BaseHighlighter { * returns a list of results (strings for HtmlHighligher, react nodes for * TextHighlighter). */ - applyHighlights(safeSnippet, safeHighlights) { + public applyHighlights(safeSnippet: string, safeHighlights: string[]): T[] { let lastOffset = 0; let offset; - let nodes = []; + let nodes: T[] = []; const safeHighlight = safeHighlights[0]; while ((offset = safeSnippet.toLowerCase().indexOf(safeHighlight.toLowerCase(), lastOffset)) >= 0) { // handle preamble if (offset > lastOffset) { - var subSnippet = safeSnippet.substring(lastOffset, offset); - nodes = nodes.concat(this._applySubHighlights(subSnippet, safeHighlights)); + const subSnippet = safeSnippet.substring(lastOffset, offset); + nodes = nodes.concat(this.applySubHighlights(subSnippet, safeHighlights)); } // do highlight. use the original string rather than safeHighlight // to preserve the original casing. const endOffset = offset + safeHighlight.length; - nodes.push(this._processSnippet(safeSnippet.substring(offset, endOffset), true)); + nodes.push(this.processSnippet(safeSnippet.substring(offset, endOffset), true)); lastOffset = endOffset; } // handle postamble if (lastOffset !== safeSnippet.length) { - subSnippet = safeSnippet.substring(lastOffset, undefined); - nodes = nodes.concat(this._applySubHighlights(subSnippet, safeHighlights)); + const subSnippet = safeSnippet.substring(lastOffset, undefined); + nodes = nodes.concat(this.applySubHighlights(subSnippet, safeHighlights)); } return nodes; } - _applySubHighlights(safeSnippet, safeHighlights) { + private applySubHighlights(safeSnippet: string, safeHighlights: string[]): T[] { if (safeHighlights[1]) { // recurse into this range to check for the next set of highlight matches return this.applyHighlights(safeSnippet, safeHighlights.slice(1)); } else { // no more highlights to be found, just return the unhighlighted string - return [this._processSnippet(safeSnippet, false)]; + return [this.processSnippet(safeSnippet, false)]; } } + + protected abstract processSnippet(snippet: string, highlight: boolean): T; } -class HtmlHighlighter extends BaseHighlighter { +class HtmlHighlighter extends BaseHighlighter { /* highlight the given snippet if required * * snippet: content of the span; must have been sanitised @@ -318,28 +317,23 @@ class HtmlHighlighter extends BaseHighlighter { * * returns an HTML string */ - _processSnippet(snippet, highlight) { + protected processSnippet(snippet: string, highlight: boolean): string { if (!highlight) { // nothing required here return snippet; } - let span = "" - + snippet + ""; + let span = `${snippet}`; if (this.highlightLink) { - span = "" - +span+""; + span = `${span}`; } return span; } } -class TextHighlighter extends BaseHighlighter { - constructor(highlightClass, highlightLink) { - super(highlightClass, highlightLink); - this._key = 0; - } +class TextHighlighter extends BaseHighlighter { + private key = 0; /* create a node to hold the given content * @@ -348,13 +342,12 @@ class TextHighlighter extends BaseHighlighter { * * returns a React node */ - _processSnippet(snippet, highlight) { - const key = this._key++; + protected processSnippet(snippet: string, highlight: boolean): React.ReactNode { + const key = this.key++; - let node = - - { snippet } - ; + let node = + { snippet } + ; if (highlight && this.highlightLink) { node = { node }; @@ -364,6 +357,20 @@ class TextHighlighter extends BaseHighlighter { } } +interface IContent { + format?: string; + formatted_body?: string; + body: string; +} + +interface IOpts { + highlightLink?: string; + disableBigEmoji?: boolean; + stripReplyFallback?: boolean; + returnString?: boolean; + forComposerQuote?: boolean; + ref?: React.Ref; +} /* turn a matrix event body into html * @@ -378,7 +385,7 @@ class TextHighlighter extends BaseHighlighter { * opts.forComposerQuote: optional param to lessen the url rewriting done by sanitization, for quoting into composer * opts.ref: React ref to attach to any React components returned (not compatible with opts.returnString) */ -export function bodyToHtml(content, highlights, opts={}) { +export function bodyToHtml(content: IContent, highlights: string[], opts: IOpts = {}) { const isHtmlMessage = content.format === "org.matrix.custom.html" && content.formatted_body; let bodyHasEmoji = false; @@ -387,9 +394,9 @@ export function bodyToHtml(content, highlights, opts={}) { sanitizeParams = composerSanitizeHtmlParams; } - let strippedBody; - let safeBody; - let isDisplayedWithHtml; + let strippedBody: string; + let safeBody: string; + let isDisplayedWithHtml: boolean; // XXX: We sanitize the HTML whilst also highlighting its text nodes, to avoid accidentally trying // to highlight HTML tags themselves. However, this does mean that we don't highlight textnodes which // are interrupted by HTML tags (not that we did before) - e.g. foobar won't get highlighted @@ -471,7 +478,7 @@ export function bodyToHtml(content, highlights, opts={}) { * @param {object} [options] Options for linkifyString. Default: linkifyMatrix.options * @returns {string} Linkified string */ -export function linkifyString(str, options = linkifyMatrix.options) { +export function linkifyString(str: string, options = linkifyMatrix.options) { return _linkifyString(str, options); } @@ -482,7 +489,7 @@ export function linkifyString(str, options = linkifyMatrix.options) { * @param {object} [options] Options for linkifyElement. Default: linkifyMatrix.options * @returns {object} */ -export function linkifyElement(element, options = linkifyMatrix.options) { +export function linkifyElement(element: HTMLElement, options = linkifyMatrix.options) { return _linkifyElement(element, options); } @@ -493,7 +500,7 @@ export function linkifyElement(element, options = linkifyMatrix.options) { * @param {object} [options] Options for linkifyString. Default: linkifyMatrix.options * @returns {string} */ -export function linkifyAndSanitizeHtml(dirtyHtml, options = linkifyMatrix.options) { +export function linkifyAndSanitizeHtml(dirtyHtml: string, options = linkifyMatrix.options) { return sanitizeHtml(linkifyString(dirtyHtml, options), sanitizeHtmlParams); } @@ -504,7 +511,7 @@ export function linkifyAndSanitizeHtml(dirtyHtml, options = linkifyMatrix.option * @param {Node} node * @returns {bool} */ -export function checkBlockNode(node) { +export function checkBlockNode(node: Node) { switch (node.nodeName) { case "H1": case "H2": diff --git a/yarn.lock b/yarn.lock index d8106febab..972891f4ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1308,6 +1308,13 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== +"@types/linkifyjs@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@types/linkifyjs/-/linkifyjs-2.1.3.tgz#80195c3c88c5e75d9f660e3046ce4a42be2c2fa4" + integrity sha512-V3Xt9wgaOvDPXcpOy3dC8qXCxy3cs0Lr/Hqgd9Bi6m3sf/vpbpTtfmVR0LJklrqYEjaAmc7e3Xh/INT2rCAKjQ== + dependencies: + "@types/react" "*" + "@types/lodash@^4.14.152": version "4.14.155" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.155.tgz#e2b4514f46a261fd11542e47519c20ebce7bc23a" @@ -1372,6 +1379,13 @@ "@types/prop-types" "*" csstype "^2.2.0" +"@types/sanitize-html@^1.23.3": + version "1.23.3" + resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-1.23.3.tgz#26527783aba3bf195ad8a3c3e51bd3713526fc0d" + integrity sha512-Isg8N0ifKdDq6/kaNlIcWfapDXxxquMSk2XC5THsOICRyOIhQGds95XH75/PL/g9mExi4bL8otIqJM/Wo96WxA== + dependencies: + htmlparser2 "^4.1.0" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" From 8d5d3b1c926da3246119e8c6f8d51fda6580825c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 8 Jul 2020 08:50:25 +0100 Subject: [PATCH 0779/1504] Use html innerText for org.matrix.custom.html m.room.message room list previews Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/HtmlUtils.tsx | 7 +++++++ .../room-list/previews/MessageEventPreview.ts | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/HtmlUtils.tsx b/src/HtmlUtils.tsx index 6746f68812..6dba041685 100644 --- a/src/HtmlUtils.tsx +++ b/src/HtmlUtils.tsx @@ -125,6 +125,13 @@ export function sanitizedHtmlNode(insaneHtml: string) { return
    ; } +export function sanitizedHtmlNodeInnerText(insaneHtml: string) { + const saneHtml = sanitizeHtml(insaneHtml, sanitizeHtmlParams); + const contentDiv = document.createElement("div"); + contentDiv.innerHTML = saneHtml; + return contentDiv.innerText; +} + /** * Tests if a URL from an untrusted source may be safely put into the DOM * The biggest threat here is javascript: URIs. diff --git a/src/stores/room-list/previews/MessageEventPreview.ts b/src/stores/room-list/previews/MessageEventPreview.ts index 86ec4c539b..86cb51ef15 100644 --- a/src/stores/room-list/previews/MessageEventPreview.ts +++ b/src/stores/room-list/previews/MessageEventPreview.ts @@ -20,6 +20,7 @@ import { MatrixEvent } from "matrix-js-sdk/src/models/event"; import { _t } from "../../../languageHandler"; import { getSenderName, isSelf, shouldPrefixMessagesIn } from "./utils"; import ReplyThread from "../../../components/views/elements/ReplyThread"; +import { sanitizedHtmlNodeInnerText } from "../../../HtmlUtils"; export class MessageEventPreview implements IPreview { public getTextFor(event: MatrixEvent, tagId?: TagID): string { @@ -36,14 +37,27 @@ export class MessageEventPreview implements IPreview { const msgtype = eventContent['msgtype']; if (!body || !msgtype) return null; // invalid event, no preview + const hasHtml = eventContent.format === "org.matrix.custom.html" && eventContent.formatted_body; + if (hasHtml) { + body = eventContent.formatted_body; + } + // XXX: Newer relations have a getRelation() function which is not compatible with replies. const mRelatesTo = event.getWireContent()['m.relates_to']; if (mRelatesTo && mRelatesTo['m.in_reply_to']) { // If this is a reply, get the real reply and use that - body = (ReplyThread.stripPlainReply(body) || '').trim(); + if (hasHtml) { + body = (ReplyThread.stripHTMLReply(body) || '').trim(); + } else { + body = (ReplyThread.stripPlainReply(body) || '').trim(); + } if (!body) return null; // invalid event, no preview } + if (hasHtml) { + body = sanitizedHtmlNodeInnerText(body); + } + if (msgtype === 'm.emote') { return _t("%(senderName)s %(emote)s", {senderName: getSenderName(event), emote: body}); } From 7b115056b0ec64dba01f1758aa6aab7c88b418b0 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 8 Jul 2020 09:21:33 +0100 Subject: [PATCH 0780/1504] Fix sticky headers being left on display:none if they change too quickly Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/LeftPanel2.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 7fac6cbff1..e67a85db25 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -146,6 +146,7 @@ export default class LeftPanel2 extends React.Component { const slRect = sublist.getBoundingClientRect(); const header = sublist.querySelector(".mx_RoomSublist2_stickable"); + header.style.removeProperty("display"); // always clear display:none first if (slRect.top + headerHeight > bottom && !gotBottom) { header.classList.add("mx_RoomSublist2_headerContainer_sticky"); @@ -161,8 +162,6 @@ export default class LeftPanel2 extends React.Component { if (lastTopHeader) { lastTopHeader.style.display = "none"; } - // first unset it, if set in last iteration - header.style.removeProperty("display"); lastTopHeader = header; } else { header.classList.remove("mx_RoomSublist2_headerContainer_sticky"); From ec54d509e52e225e47406b3ed52085a00c3f0d5c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 8 Jul 2020 13:24:40 +0100 Subject: [PATCH 0781/1504] remove stale debug log Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomTile2.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 90edbfb895..67d7ae34ba 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -170,7 +170,6 @@ export default class RoomTile2 extends React.Component { }; private scrollIntoView = () => { - console.log("DEBUG scrollIntoView", this.roomTileRef.current); if (!this.roomTileRef.current) return; this.roomTileRef.current.scrollIntoView({ block: "nearest", From 75751abc60d9b75438c1a55d00053e5f10e40008 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Jul 2020 14:49:04 +0200 Subject: [PATCH 0782/1504] add wrapper we can then add padding to when sticking headers --- res/css/structures/_LeftPanel2.scss | 8 ++++++++ src/components/structures/LeftPanel2.tsx | 20 +++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index a73658d916..57f690346b 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -121,6 +121,14 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations } } + .mx_LeftPanel2_roomListWrapper { + display: flex; + flex-grow: 1; + overflow: hidden; + min-height: 0; + + } + .mx_LeftPanel2_actualRoomListContainer { flex-grow: 1; // fill the available space overflow-y: auto; diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 7fac6cbff1..037c3bd4ff 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -325,15 +325,17 @@ export default class LeftPanel2 extends React.Component {
    From 0d94cfa97ad7971d43332709e5023d7d4a6cc894 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Jul 2020 14:49:38 +0200 Subject: [PATCH 0783/1504] put sticky headers in padding of wrapper this way they don't need a background, as the list is already clipped --- res/css/structures/_LeftPanel2.scss | 7 ++++++ src/components/structures/LeftPanel2.tsx | 29 ++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index 57f690346b..eaa22a3efa 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -127,6 +127,13 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations overflow: hidden; min-height: 0; + &.stickyBottom { + padding-bottom: 32px; + } + + &.stickyTop { + padding-top: 32px; + } } .mx_LeftPanel2_actualRoomListContainer { diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 037c3bd4ff..51dc4c0c4c 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -153,11 +153,16 @@ export default class LeftPanel2 extends React.Component { header.style.width = `${headerStickyWidth}px`; header.style.removeProperty("top"); gotBottom = true; - } else if ((slRect.top - (headerHeight / 3)) < top) { + } else if (((slRect.top - (headerHeight * 0.6) + headerHeight) < top) || sublist === sublists[0]) { + // the header should become sticky once it is 60% or less out of view at the top. + // We also add headerHeight because the sticky header is put above the scrollable area, + // into the padding of .mx_LeftPanel2_roomListWrapper, + // by subtracting headerHeight from the top below. + // We also always try to make the first sublist header sticky. header.classList.add("mx_RoomSublist2_headerContainer_sticky"); header.classList.add("mx_RoomSublist2_headerContainer_stickyTop"); header.style.width = `${headerStickyWidth}px`; - header.style.top = `${rlRect.top}px`; + header.style.top = `${rlRect.top - headerHeight}px`; if (lastTopHeader) { lastTopHeader.style.display = "none"; } @@ -172,6 +177,26 @@ export default class LeftPanel2 extends React.Component { header.style.removeProperty("top"); } } + + // add appropriate sticky classes to wrapper so it has + // the necessary top/bottom padding to put the sticky header in + const listWrapper = list.parentElement; + if (gotBottom) { + listWrapper.classList.add("stickyBottom"); + } else { + listWrapper.classList.remove("stickyBottom"); + } + if (lastTopHeader) { + listWrapper.classList.add("stickyTop"); + } else { + listWrapper.classList.remove("stickyTop"); + } + + // ensure scroll doesn't go above the gap left by the header of + // the first sublist always being sticky if no other header is sticky + if (list.scrollTop < headerHeight) { + list.scrollTop = headerHeight; + } } // TODO: Improve header reliability: https://github.com/vector-im/riot-web/issues/14232 From a8085f4e3bcd3e0967f3e68b5f2b63db322abac4 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Jul 2020 14:50:08 +0200 Subject: [PATCH 0784/1504] remove background on sticky headers --- res/css/views/rooms/_RoomSublist2.scss | 3 --- 1 file changed, 3 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index d08bc09031..194e615099 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -54,9 +54,6 @@ limitations under the License. max-width: 100%; z-index: 2; // Prioritize headers in the visible list over sticky ones - // Set the same background color as the room list for sticky headers - background-color: $roomlist2-bg-color; - // Create a flexbox to make ordering easy display: flex; align-items: center; From a361ac3f83b42a4e3cea2608aa4ea91b8760cc99 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Jul 2020 15:11:47 +0200 Subject: [PATCH 0785/1504] make collapsing/expanding the first header work again --- src/components/structures/LeftPanel2.tsx | 16 ++++++++-------- src/components/views/rooms/RoomSublist2.tsx | 7 ++++++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 51dc4c0c4c..6da70ed0ae 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -21,6 +21,7 @@ import classNames from "classnames"; import dis from "../../dispatcher/dispatcher"; import { _t } from "../../languageHandler"; import RoomList2 from "../views/rooms/RoomList2"; +import { HEADER_HEIGHT } from "../views/rooms/RoomSublist2"; import { Action } from "../../dispatcher/actions"; import UserMenu from "./UserMenu"; import RoomSearch from "./RoomSearch"; @@ -135,7 +136,6 @@ export default class LeftPanel2 extends React.Component { const bottom = rlRect.bottom; const top = rlRect.top; const sublists = list.querySelectorAll(".mx_RoomSublist2"); - const headerHeight = 32; // Note: must match the CSS! const headerRightMargin = 24; // calculated from margins and widths to align with non-sticky tiles const headerStickyWidth = rlRect.width - headerRightMargin; @@ -147,22 +147,22 @@ export default class LeftPanel2 extends React.Component { const header = sublist.querySelector(".mx_RoomSublist2_stickable"); - if (slRect.top + headerHeight > bottom && !gotBottom) { + if (slRect.top + HEADER_HEIGHT > bottom && !gotBottom) { header.classList.add("mx_RoomSublist2_headerContainer_sticky"); header.classList.add("mx_RoomSublist2_headerContainer_stickyBottom"); header.style.width = `${headerStickyWidth}px`; header.style.removeProperty("top"); gotBottom = true; - } else if (((slRect.top - (headerHeight * 0.6) + headerHeight) < top) || sublist === sublists[0]) { + } else if (((slRect.top - (HEADER_HEIGHT * 0.6) + HEADER_HEIGHT) < top) || sublist === sublists[0]) { // the header should become sticky once it is 60% or less out of view at the top. - // We also add headerHeight because the sticky header is put above the scrollable area, + // We also add HEADER_HEIGHT because the sticky header is put above the scrollable area, // into the padding of .mx_LeftPanel2_roomListWrapper, - // by subtracting headerHeight from the top below. + // by subtracting HEADER_HEIGHT from the top below. // We also always try to make the first sublist header sticky. header.classList.add("mx_RoomSublist2_headerContainer_sticky"); header.classList.add("mx_RoomSublist2_headerContainer_stickyTop"); header.style.width = `${headerStickyWidth}px`; - header.style.top = `${rlRect.top - headerHeight}px`; + header.style.top = `${rlRect.top - HEADER_HEIGHT}px`; if (lastTopHeader) { lastTopHeader.style.display = "none"; } @@ -194,8 +194,8 @@ export default class LeftPanel2 extends React.Component { // ensure scroll doesn't go above the gap left by the header of // the first sublist always being sticky if no other header is sticky - if (list.scrollTop < headerHeight) { - list.scrollTop = headerHeight; + if (list.scrollTop < HEADER_HEIGHT) { + list.scrollTop = HEADER_HEIGHT; } } diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index eefd29f0b7..9a97aac320 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -55,6 +55,7 @@ import StyledCheckbox from "../elements/StyledCheckbox"; const SHOW_N_BUTTON_HEIGHT = 32; // As defined by CSS const RESIZE_HANDLE_HEIGHT = 4; // As defined by CSS +export const HEADER_HEIGHT = 32; // As defined by CSS const MAX_PADDING_HEIGHT = SHOW_N_BUTTON_HEIGHT + RESIZE_HANDLE_HEIGHT; @@ -233,7 +234,11 @@ export default class RoomSublist2 extends React.Component { const possibleSticky = target.parentElement; const sublist = possibleSticky.parentElement.parentElement; - if (possibleSticky.classList.contains('mx_RoomSublist2_headerContainer_sticky')) { + const list = sublist.parentElement.parentElement; + // the scrollTop is capped at the height of the header in LeftPanel2 + const isAtTop = list.scrollTop <= HEADER_HEIGHT; + const isSticky = possibleSticky.classList.contains('mx_RoomSublist2_headerContainer_sticky'); + if (isSticky && !isAtTop) { // is sticky - jump to list sublist.scrollIntoView({behavior: 'smooth'}); } else { From 269c30f8e84b9fba9ad12c2971d7bd8eecd46bc1 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Jul 2020 15:47:01 +0200 Subject: [PATCH 0786/1504] Revert "also blur the sticky headers" This reverts commit 82e0816d8689b9588d22312260e4de3c25b9e81b. --- res/css/views/rooms/_RoomSublist2.scss | 8 ----- res/themes/element/css/_mods.scss | 13 -------- src/components/views/rooms/RoomSublist2.tsx | 34 ++++++++++----------- 3 files changed, 16 insertions(+), 39 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 3fb4d2aecb..837bdad211 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -81,14 +81,6 @@ limitations under the License. // We don't have a top style because the top is dependent on the room list header's // height, and is therefore calculated in JS. // The class, mx_RoomSublist2_headerContainer_stickyTop, is applied though. - - // blur for element theme, background image is on parent - .mx_RoomSublist2_stickyHeaderBlur { - width: 100%; - height: 100%; - display: flex; - align-items: center; - } } // Sticky Headers End diff --git a/res/themes/element/css/_mods.scss b/res/themes/element/css/_mods.scss index e8d126d22f..cc5205ccba 100644 --- a/res/themes/element/css/_mods.scss +++ b/res/themes/element/css/_mods.scss @@ -19,19 +19,6 @@ .mx_LeftPanel2 .mx_LeftPanel2_roomListContainer { backdrop-filter: blur(175px); } - - // sticky headers need their own blur, and their own background to make it opaque - .mx_RoomSublist2_headerContainer_sticky { - background-size: cover; - background-image: var(--avatar-url); - background-position: center; - } -} - -/* outside of @supports as the backdrop-filter will be ignored, and we still apply the mostly-opaque background color */ -.mx_RoomSublist2_headerContainer_sticky .mx_RoomSublist2_stickyHeaderBlur { - backdrop-filter: blur(100px); - background-color: $roomlist2-bg-color; } .mx_RoomSublist2_showNButton { diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 3b8d462282..2ca9ec5dd1 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -437,24 +437,22 @@ export default class RoomSublist2 extends React.Component { return (
    -
    - - - {this.props.label} - - {this.renderMenu()} - {this.props.isMinimized ? null : badgeContainer} - {this.props.isMinimized ? null : addRoomButton} -
    + + + {this.props.label} + + {this.renderMenu()} + {this.props.isMinimized ? null : badgeContainer} + {this.props.isMinimized ? null : addRoomButton}
    {this.props.isMinimized ? badgeContainer : null} {this.props.isMinimized ? addRoomButton : null} From 9b0eeae2eb74352dc509a83039cb038c3e6047b5 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 07:51:04 -0600 Subject: [PATCH 0787/1504] Clarify who is meant to use the polyfill --- src/@types/polyfill.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/@types/polyfill.ts b/src/@types/polyfill.ts index 816df7946d..3ce05d9c2f 100644 --- a/src/@types/polyfill.ts +++ b/src/@types/polyfill.ts @@ -14,8 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ +// This is intended to fix re-resizer because of its unguarded `instanceof TouchEvent` checks. export function polyfillTouchEvent() { - // Firefox doesn't have touch events, so create a fake one we can rely on lying about. + // Firefox doesn't have touch events without touch devices being present, so create a fake + // one we can rely on lying about. if (!window.TouchEvent) { // We have no intention of actually using this, so just lie. window.TouchEvent = class TouchEvent extends UIEvent { From b2abe61fc5fb56086aa73a6f44936f7caa5dc3c9 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 07:51:48 -0600 Subject: [PATCH 0788/1504] clarify which NumberSize to use --- src/components/views/rooms/RoomSublist2.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 252e5f562b..9e4e5de0bb 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -132,7 +132,7 @@ export default class RoomSublist2 extends React.Component { e: MouseEvent | TouchEvent, travelDirection: Direction, refToElement: HTMLDivElement, - delta: { width: number, height: number }, // TODO: Use NumberSize from re-resizer when it is exposed + delta: { width: number, height: number }, // TODO: Use re-resizer's NumberSize when it is exposed as the type ) => { // Do some sanity checks, but in reality we shouldn't need these. if (travelDirection !== "bottom") return; From b4f3b8ab11210f91a3a126985b3b0be06c044cd7 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 07:53:55 -0600 Subject: [PATCH 0789/1504] Use the right variables when detecting max height --- src/stores/room-list/ListLayout.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index 1e7d8f0763..99674fe74f 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -91,7 +91,7 @@ export class ListLayout { public setVisibleTilesWithin(newVal: number, maxPossible: number) { maxPossible = maxPossible + RESIZER_BOX_FACTOR; - if (this.visibleTiles > maxPossible) { + if (newVal > maxPossible) { this.visibleTiles = maxPossible; } else { this.visibleTiles = newVal; From 53bdddfcdd95ff908e143d695c18004426d9e07c Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 8 Jul 2020 16:07:38 +0100 Subject: [PATCH 0790/1504] Fix discrepancies with style --- res/css/views/rooms/_RoomTile2.scss | 1 - src/components/views/rooms/RoomTile2.tsx | 11 +++++++---- src/i18n/strings/en_EN.json | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index c6947e91c5..380a3ab9c7 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -225,7 +225,6 @@ limitations under the License. } .mx_RoomTile2_iconFavorite::before { - background-color: $accent-color; mask-image: url('$(res)/img/feather-customised/favourites.svg'); } diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 8f00e2d085..aae731cf49 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -364,7 +364,9 @@ export default class RoomTile2 extends React.Component { const roomTags = RoomListStore.instance.getTagsForRoom(this.props.room); const isFavorite = roomTags.includes(DefaultTagID.Favourite); - const favoriteClassName = isFavorite ? "mx_RoomTile2_iconFavorite" : "mx_RoomTile2_iconStar"; + const favouriteIconClassName = isFavorite ? "mx_RoomTile2_iconFavorite" : "mx_RoomTile2_iconStar"; + const favouriteLabelClassName = isFavorite ? "mx_RoomTile2_contextMenu_activeRow" : ""; + const favouriteLabel = isFavorite ? _t("Favourited") : _t("Favourite"); let contextMenu = null; if (this.state.generalMenuPosition) { @@ -373,12 +375,13 @@ export default class RoomTile2 extends React.Component {
    this.onTagRoom(e, DefaultTagID.Favourite)} active={isFavorite} - label={_t("Favourite")} + label={favouriteLabel} > - - {_t("Favourite")} + + {favouriteLabel} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index e576411323..5e1b1c4397 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1226,6 +1226,7 @@ "All messages": "All messages", "Mentions & Keywords": "Mentions & Keywords", "Notification options": "Notification options", + "Favourited": "Favourited", "Favourite": "Favourite", "Leave Room": "Leave Room", "Room options": "Room options", From 4ae64aff9a856cb2746377d590e4b3ea038ad724 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 8 Jul 2020 16:14:04 +0100 Subject: [PATCH 0791/1504] lint line length --- .../views/settings/tabs/room/AdvancedRoomSettingsTab.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js index 87d4455767..a1b3bbd136 100644 --- a/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js @@ -188,7 +188,10 @@ export default class AdvancedRoomSettingsTab extends React.Component {
    From 99bce536cdd658432e12a9d7a3e89ebd1e0c9f06 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Jul 2020 17:30:50 +0200 Subject: [PATCH 0792/1504] update call icons --- res/css/structures/_RoomView.scss | 2 +- res/css/views/dialogs/_UserSettingsDialog.scss | 2 +- res/css/views/rooms/_MessageComposer.scss | 11 ++++++++--- res/img/element-icons/call/hangup.svg | 3 +++ res/img/element-icons/{ => call}/video-call.svg | 0 res/img/element-icons/{ => call}/voice-call.svg | 0 res/img/element-icons/call/voice-muted.svg | 4 ++++ res/img/element-icons/call/voice-unmuted.svg | 3 +++ res/img/element-icons/room/in-call.svg | 6 ++++++ src/components/structures/RoomStatusBar.js | 2 +- src/components/structures/RoomView.js | 11 ++++++----- 11 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 res/img/element-icons/call/hangup.svg rename res/img/element-icons/{ => call}/video-call.svg (100%) rename res/img/element-icons/{ => call}/voice-call.svg (100%) create mode 100644 res/img/element-icons/call/voice-muted.svg create mode 100644 res/img/element-icons/call/voice-unmuted.svg create mode 100644 res/img/element-icons/room/in-call.svg diff --git a/res/css/structures/_RoomView.scss b/res/css/structures/_RoomView.scss index f2154ef448..3b60c4e62b 100644 --- a/res/css/structures/_RoomView.scss +++ b/res/css/structures/_RoomView.scss @@ -261,7 +261,7 @@ hr.mx_RoomView_myReadMarker { .mx_RoomView_voipButton { float: right; margin-right: 13px; - margin-top: 10px; + margin-top: 13px; cursor: pointer; } diff --git a/res/css/views/dialogs/_UserSettingsDialog.scss b/res/css/views/dialogs/_UserSettingsDialog.scss index 0612950ab4..bd472710ea 100644 --- a/res/css/views/dialogs/_UserSettingsDialog.scss +++ b/res/css/views/dialogs/_UserSettingsDialog.scss @@ -26,7 +26,7 @@ limitations under the License. } .mx_UserSettingsDialog_voiceIcon::before { - mask-image: url('$(res)/img/element-icons/voice-call.svg'); + mask-image: url('$(res)/img/element-icons/call/voice-call.svg'); } .mx_UserSettingsDialog_bellIcon::before { diff --git a/res/css/views/rooms/_MessageComposer.scss b/res/css/views/rooms/_MessageComposer.scss index 84283444ab..8af9d36fee 100644 --- a/res/css/views/rooms/_MessageComposer.scss +++ b/res/css/views/rooms/_MessageComposer.scss @@ -196,22 +196,27 @@ limitations under the License. mask-size: contain; mask-position: center; } + + &.mx_MessageComposer_hangup::before { + background-color: $warning-color; + } } + .mx_MessageComposer_upload::before { mask-image: url('$(res)/img/element-icons/room/composer/attach.svg'); } .mx_MessageComposer_hangup::before { - mask-image: url('$(res)/img/hangup.svg'); + mask-image: url('$(res)/img/element-icons/call/hangup.svg'); } .mx_MessageComposer_voicecall::before { - mask-image: url('$(res)/img/element-icons/voice-call.svg'); + mask-image: url('$(res)/img/element-icons/call/voice-call.svg'); } .mx_MessageComposer_videocall::before { - mask-image: url('$(res)/img/element-icons/video-call.svg'); + mask-image: url('$(res)/img/element-icons/call/video-call.svg'); } .mx_MessageComposer_emoji::before { diff --git a/res/img/element-icons/call/hangup.svg b/res/img/element-icons/call/hangup.svg new file mode 100644 index 0000000000..1a1b82a1d7 --- /dev/null +++ b/res/img/element-icons/call/hangup.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/video-call.svg b/res/img/element-icons/call/video-call.svg similarity index 100% rename from res/img/element-icons/video-call.svg rename to res/img/element-icons/call/video-call.svg diff --git a/res/img/element-icons/voice-call.svg b/res/img/element-icons/call/voice-call.svg similarity index 100% rename from res/img/element-icons/voice-call.svg rename to res/img/element-icons/call/voice-call.svg diff --git a/res/img/element-icons/call/voice-muted.svg b/res/img/element-icons/call/voice-muted.svg new file mode 100644 index 0000000000..32abafb04a --- /dev/null +++ b/res/img/element-icons/call/voice-muted.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/img/element-icons/call/voice-unmuted.svg b/res/img/element-icons/call/voice-unmuted.svg new file mode 100644 index 0000000000..e664080217 --- /dev/null +++ b/res/img/element-icons/call/voice-unmuted.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/room/in-call.svg b/res/img/element-icons/room/in-call.svg new file mode 100644 index 0000000000..0e574faa84 --- /dev/null +++ b/res/img/element-icons/room/in-call.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/components/structures/RoomStatusBar.js b/src/components/structures/RoomStatusBar.js index 65d062cfaa..3171dbccbe 100644 --- a/src/components/structures/RoomStatusBar.js +++ b/src/components/structures/RoomStatusBar.js @@ -173,7 +173,7 @@ export default createReactClass({ if (this.props.hasActiveCall) { const TintableSvg = sdk.getComponent("elements.TintableSvg"); return ( - + ); } diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 519c4c1f8e..9127cc0ce9 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -1933,7 +1933,7 @@ export default createReactClass({ } if (inCall) { - let zoomButton; let voiceMuteButton; let videoMuteButton; + let zoomButton; let videoMuteButton; if (call.type === "video") { zoomButton = ( @@ -1946,12 +1946,14 @@ export default createReactClass({
    + width="" height="27" />
    ; } - voiceMuteButton = + const voiceMuteButton =
    -
    ; @@ -1963,7 +1965,6 @@ export default createReactClass({ { videoMuteButton } { zoomButton } { statusBar } -
    ; } From 9dd28a9ce0387e66d595e997d76e1acae014d9af Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 8 Jul 2020 17:02:26 +0100 Subject: [PATCH 0793/1504] semi --- .../views/settings/tabs/room/AdvancedRoomSettingsTab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js index a1b3bbd136..2edf3021dc 100644 --- a/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js @@ -190,7 +190,7 @@ export default class AdvancedRoomSettingsTab extends React.Component { onChange={this._onToggleLowPriorityTag} label={_t( "Low priority rooms show up at the bottom of your room list" + - " in a dedicated section at the bottom of your room list" + " in a dedicated section at the bottom of your room list", )} />
    From 571bd3089808e8ed7b662250634cb6da9ded37bb Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Jul 2020 17:30:50 +0200 Subject: [PATCH 0794/1504] update call icons --- res/css/structures/_RoomView.scss | 2 +- res/css/views/dialogs/_UserSettingsDialog.scss | 2 +- res/css/views/rooms/_MessageComposer.scss | 11 ++++++++--- res/img/element-icons/call/fullscreen.svg | 6 ++++++ res/img/element-icons/call/hangup.svg | 3 +++ res/img/element-icons/{ => call}/video-call.svg | 4 ++-- res/img/element-icons/call/video-muted.svg | 5 +++++ res/img/element-icons/{ => call}/voice-call.svg | 0 res/img/element-icons/call/voice-muted.svg | 4 ++++ res/img/element-icons/call/voice-unmuted.svg | 3 +++ res/img/element-icons/room/in-call.svg | 6 ++++++ src/components/structures/RoomStatusBar.js | 2 +- src/components/structures/RoomView.js | 17 ++++++++++------- 13 files changed, 50 insertions(+), 15 deletions(-) create mode 100644 res/img/element-icons/call/fullscreen.svg create mode 100644 res/img/element-icons/call/hangup.svg rename res/img/element-icons/{ => call}/video-call.svg (91%) create mode 100644 res/img/element-icons/call/video-muted.svg rename res/img/element-icons/{ => call}/voice-call.svg (100%) create mode 100644 res/img/element-icons/call/voice-muted.svg create mode 100644 res/img/element-icons/call/voice-unmuted.svg create mode 100644 res/img/element-icons/room/in-call.svg diff --git a/res/css/structures/_RoomView.scss b/res/css/structures/_RoomView.scss index f2154ef448..3b60c4e62b 100644 --- a/res/css/structures/_RoomView.scss +++ b/res/css/structures/_RoomView.scss @@ -261,7 +261,7 @@ hr.mx_RoomView_myReadMarker { .mx_RoomView_voipButton { float: right; margin-right: 13px; - margin-top: 10px; + margin-top: 13px; cursor: pointer; } diff --git a/res/css/views/dialogs/_UserSettingsDialog.scss b/res/css/views/dialogs/_UserSettingsDialog.scss index 0612950ab4..bd472710ea 100644 --- a/res/css/views/dialogs/_UserSettingsDialog.scss +++ b/res/css/views/dialogs/_UserSettingsDialog.scss @@ -26,7 +26,7 @@ limitations under the License. } .mx_UserSettingsDialog_voiceIcon::before { - mask-image: url('$(res)/img/element-icons/voice-call.svg'); + mask-image: url('$(res)/img/element-icons/call/voice-call.svg'); } .mx_UserSettingsDialog_bellIcon::before { diff --git a/res/css/views/rooms/_MessageComposer.scss b/res/css/views/rooms/_MessageComposer.scss index 84283444ab..8af9d36fee 100644 --- a/res/css/views/rooms/_MessageComposer.scss +++ b/res/css/views/rooms/_MessageComposer.scss @@ -196,22 +196,27 @@ limitations under the License. mask-size: contain; mask-position: center; } + + &.mx_MessageComposer_hangup::before { + background-color: $warning-color; + } } + .mx_MessageComposer_upload::before { mask-image: url('$(res)/img/element-icons/room/composer/attach.svg'); } .mx_MessageComposer_hangup::before { - mask-image: url('$(res)/img/hangup.svg'); + mask-image: url('$(res)/img/element-icons/call/hangup.svg'); } .mx_MessageComposer_voicecall::before { - mask-image: url('$(res)/img/element-icons/voice-call.svg'); + mask-image: url('$(res)/img/element-icons/call/voice-call.svg'); } .mx_MessageComposer_videocall::before { - mask-image: url('$(res)/img/element-icons/video-call.svg'); + mask-image: url('$(res)/img/element-icons/call/video-call.svg'); } .mx_MessageComposer_emoji::before { diff --git a/res/img/element-icons/call/fullscreen.svg b/res/img/element-icons/call/fullscreen.svg new file mode 100644 index 0000000000..d2a4c2aa8c --- /dev/null +++ b/res/img/element-icons/call/fullscreen.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/res/img/element-icons/call/hangup.svg b/res/img/element-icons/call/hangup.svg new file mode 100644 index 0000000000..1a1b82a1d7 --- /dev/null +++ b/res/img/element-icons/call/hangup.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/video-call.svg b/res/img/element-icons/call/video-call.svg similarity index 91% rename from res/img/element-icons/video-call.svg rename to res/img/element-icons/call/video-call.svg index b18736a2f0..0c1cd2d419 100644 --- a/res/img/element-icons/video-call.svg +++ b/res/img/element-icons/call/video-call.svg @@ -1,4 +1,4 @@ - - + + diff --git a/res/img/element-icons/call/video-muted.svg b/res/img/element-icons/call/video-muted.svg new file mode 100644 index 0000000000..771c529279 --- /dev/null +++ b/res/img/element-icons/call/video-muted.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/element-icons/voice-call.svg b/res/img/element-icons/call/voice-call.svg similarity index 100% rename from res/img/element-icons/voice-call.svg rename to res/img/element-icons/call/voice-call.svg diff --git a/res/img/element-icons/call/voice-muted.svg b/res/img/element-icons/call/voice-muted.svg new file mode 100644 index 0000000000..32abafb04a --- /dev/null +++ b/res/img/element-icons/call/voice-muted.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/img/element-icons/call/voice-unmuted.svg b/res/img/element-icons/call/voice-unmuted.svg new file mode 100644 index 0000000000..e664080217 --- /dev/null +++ b/res/img/element-icons/call/voice-unmuted.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/img/element-icons/room/in-call.svg b/res/img/element-icons/room/in-call.svg new file mode 100644 index 0000000000..0e574faa84 --- /dev/null +++ b/res/img/element-icons/room/in-call.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/components/structures/RoomStatusBar.js b/src/components/structures/RoomStatusBar.js index 65d062cfaa..3171dbccbe 100644 --- a/src/components/structures/RoomStatusBar.js +++ b/src/components/structures/RoomStatusBar.js @@ -173,7 +173,7 @@ export default createReactClass({ if (this.props.hasActiveCall) { const TintableSvg = sdk.getComponent("elements.TintableSvg"); return ( - + ); } diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 519c4c1f8e..4e48b40bf5 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -1933,25 +1933,29 @@ export default createReactClass({ } if (inCall) { - let zoomButton; let voiceMuteButton; let videoMuteButton; + let zoomButton; let videoMuteButton; if (call.type === "video") { zoomButton = (
    - +
    ); videoMuteButton =
    - + width="" height="27" />
    ; } - voiceMuteButton = + const voiceMuteButton =
    -
    ; @@ -1963,7 +1967,6 @@ export default createReactClass({ { videoMuteButton } { zoomButton } { statusBar } -
    ; } From 5ba64aa4e14acb458698f15560d93f4e29f701c9 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 8 Jul 2020 17:03:08 +0100 Subject: [PATCH 0795/1504] Back to defaul orientation --- src/settings/Settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 29b1dd0298..58d9ed4f31 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -305,7 +305,7 @@ export const SETTINGS = { "VideoView.flipVideoHorizontally": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, displayName: _td('Mirror local video feed'), - default: true, + default: false, }, "TagPanel.enableTagPanel": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, From 7da2b5d92f0813042de8b8a20a80a692e0da61f8 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Jul 2020 18:06:11 +0200 Subject: [PATCH 0796/1504] fix muted video icon center --- res/img/element-icons/call/video-muted.svg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/res/img/element-icons/call/video-muted.svg b/res/img/element-icons/call/video-muted.svg index 771c529279..d2aea71d11 100644 --- a/res/img/element-icons/call/video-muted.svg +++ b/res/img/element-icons/call/video-muted.svg @@ -1,5 +1,5 @@ - - - + + + From 8773d67df7c19732ef9acaffdff60b30dc7ef19e Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 8 Jul 2020 17:28:15 +0100 Subject: [PATCH 0797/1504] Auto expand room list on search --- src/components/structures/RoomSearch.tsx | 9 ++++++++- src/components/views/rooms/RoomList2.tsx | 11 +++++++++++ src/dispatcher/actions.ts | 10 ++++++++++ src/stores/room-list/ListLayout.ts | 12 ++++++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/components/structures/RoomSearch.tsx b/src/components/structures/RoomSearch.tsx index 15f3bd5b54..349025782d 100644 --- a/src/components/structures/RoomSearch.tsx +++ b/src/components/structures/RoomSearch.tsx @@ -76,6 +76,7 @@ export default class RoomSearch extends React.PureComponent { private clearInput = () => { if (!this.inputRef.current) return; this.inputRef.current.value = ""; + defaultDispatcher.dispatch({action: Action.StopRoomFilter}) this.onChange(); }; @@ -102,9 +103,15 @@ export default class RoomSearch extends React.PureComponent { private onFocus = (ev: React.FocusEvent) => { this.setState({focused: true}); ev.target.select(); + if (ev.target.value === "") { + defaultDispatcher.dispatch({action: Action.StartRoomFilter}) + } }; - private onBlur = () => { + private onBlur = (ev: React.FocusEvent) => { + if (ev.target.value === "") { + defaultDispatcher.dispatch({action: Action.StopRoomFilter}) + } this.setState({focused: false}); }; diff --git a/src/components/views/rooms/RoomList2.tsx b/src/components/views/rooms/RoomList2.tsx index fb0136fb29..c294b2e1b0 100644 --- a/src/components/views/rooms/RoomList2.tsx +++ b/src/components/views/rooms/RoomList2.tsx @@ -194,6 +194,17 @@ export default class RoomList2 extends React.Component { show_room_tile: true, // to make sure the room gets scrolled into view }); } + } else if (payload.action === Action.StartRoomFilter) { + this.state.layouts.forEach(x => { + x.saveCollapsedState(); + x.isCollapsed = false; + }); + this.forceUpdate(); + } else if (payload.action === Action.StopRoomFilter) { + this.state.layouts.forEach(x => { + x.restoreCollapsedState(); + }); + this.forceUpdate(); } }; diff --git a/src/dispatcher/actions.ts b/src/dispatcher/actions.ts index 9be674b59e..89b2216db1 100644 --- a/src/dispatcher/actions.ts +++ b/src/dispatcher/actions.ts @@ -84,4 +84,14 @@ export enum Action { * Changes room based on room list order and payload parameters. Should be used with ViewRoomDeltaPayload. */ ViewRoomDelta = "view_room_delta", + + /** + * Informs the room list when room filtering has begun. No additional payload information required. + */ + StartRoomFilter = "start_room_filter", + + /** + * Informs the room list when room filtering has ended. No additional payload information required. + */ + StopRoomFilter = "stop_room_filter", } diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index f31e92b8ae..7be284b0e5 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -26,12 +26,14 @@ interface ISerializedListLayout { numTiles: number; showPreviews: boolean; collapsed: boolean; + savedCollapsed: boolean; } export class ListLayout { private _n = 0; private _previews = false; private _collapsed = false; + private _savedCollapsed = false; constructor(public readonly tagId: TagID) { const serialized = localStorage.getItem(this.key); @@ -41,6 +43,7 @@ export class ListLayout { this._n = parsed.numTiles; this._previews = parsed.showPreviews; this._collapsed = parsed.collapsed; + this._savedCollapsed = parsed.savedCollapsed; } } @@ -136,11 +139,20 @@ export class ListLayout { localStorage.setItem(this.key, JSON.stringify(this.serialize())); } + public saveCollapsedState() { + this._savedCollapsed = this.isCollapsed; + } + + public restoreCollapsedState() { + this.isCollapsed = this._savedCollapsed; + } + private serialize(): ISerializedListLayout { return { numTiles: this.visibleTiles, showPreviews: this.showPreviews, collapsed: this.isCollapsed, + savedCollapsed: this._savedCollapsed, }; } } From fe2bb355ab106a0d04648decc4beea38c7cb3e72 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 8 Jul 2020 18:02:20 +0100 Subject: [PATCH 0798/1504] Hide archive button --- src/components/structures/UserMenu.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index 0cc312d653..1a0fac985b 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -280,11 +280,11 @@ export default class UserMenu extends React.Component { label={_t("All settings")} onClick={(e) => this.onSettingsOpen(e, null)} /> - + /> */} Date: Wed, 8 Jul 2020 18:05:07 +0100 Subject: [PATCH 0799/1504] Lint semis --- src/components/structures/RoomSearch.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/structures/RoomSearch.tsx b/src/components/structures/RoomSearch.tsx index 349025782d..dad05fb577 100644 --- a/src/components/structures/RoomSearch.tsx +++ b/src/components/structures/RoomSearch.tsx @@ -76,7 +76,7 @@ export default class RoomSearch extends React.PureComponent { private clearInput = () => { if (!this.inputRef.current) return; this.inputRef.current.value = ""; - defaultDispatcher.dispatch({action: Action.StopRoomFilter}) + defaultDispatcher.dispatch({action: Action.StopRoomFilter}); this.onChange(); }; @@ -104,13 +104,13 @@ export default class RoomSearch extends React.PureComponent { this.setState({focused: true}); ev.target.select(); if (ev.target.value === "") { - defaultDispatcher.dispatch({action: Action.StartRoomFilter}) + defaultDispatcher.dispatch({action: Action.StartRoomFilter}); } }; private onBlur = (ev: React.FocusEvent) => { if (ev.target.value === "") { - defaultDispatcher.dispatch({action: Action.StopRoomFilter}) + defaultDispatcher.dispatch({action: Action.StopRoomFilter}); } this.setState({focused: false}); }; From 23754ae2bd710aee07d0e2b5ca5486ecaadfdcce Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 8 Jul 2020 18:07:01 +0100 Subject: [PATCH 0800/1504] i18n --- src/i18n/strings/en_EN.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 6c4ccd6685..a38d87d08e 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2137,7 +2137,6 @@ "Switch theme": "Switch theme", "Security & privacy": "Security & privacy", "All settings": "All settings", - "Archived rooms": "Archived rooms", "Feedback": "Feedback", "User menu": "User menu", "Could not load user profile": "Could not load user profile", From 9b48130f4f04da2fdaaf9b7de7dbe05763a61965 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 11:48:34 -0600 Subject: [PATCH 0801/1504] Protect rooms from getting lost due to complex transitions Fixes https://github.com/vector-im/riot-web/issues/14378 Rooms transitioning between multiple states are often at risk of going missing due to the sticky room handling. We now protect that transition by bluntly ensuring the room can't go missing, and by always ensuring we have an updated reference to the room. --- src/stores/room-list/algorithms/Algorithm.ts | 33 +++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index 8c7bbc8615..eee8e60b86 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -655,18 +655,35 @@ export class Algorithm extends EventEmitter { cause = RoomUpdateCause.PossibleTagChange; } - // If we have tags for a room and don't have the room referenced, the room reference - // probably changed. We need to swap out the problematic reference. - if (hasTags && !this.rooms.includes(room) && !isSticky) { - console.warn(`${room.roomId} is missing from room array but is known - trying to find duplicate`); + // Check to see if the room is known first + let knownRoomRef = this.rooms.includes(room); + if (hasTags && !knownRoomRef) { + console.warn(`${room.roomId} might be a reference change - attempting to update reference`); this.rooms = this.rooms.map(r => r.roomId === room.roomId ? room : r); - - // Sanity check - if (!this.rooms.includes(room)) { - throw new Error(`Failed to replace ${room.roomId} with an updated reference`); + knownRoomRef = this.rooms.includes(room); + if (!knownRoomRef) { + console.warn(`${room.roomId} is still not referenced. It may be sticky.`); } } + if (hasTags && isForLastSticky && !knownRoomRef) { + // we have a fairly good chance at losing a room right now. Under some circumstances, + // we can end up with a room which transitions references and tag changes, then gets + // lost when the sticky room changes. To counter this, we try and add the room to the + // list manually as the condition below to update the reference will fail. + // + // Other conditions *should* result in the room being sorted into the right place. + console.warn(`${room.roomId} was about to be lost - inserting at end of room list`); + this.rooms.push(room); + knownRoomRef = true; + } + + // If we have tags for a room and don't have the room referenced, something went horribly + // wrong - the reference should have been updated above. + if (hasTags && !knownRoomRef && !isSticky) { + throw new Error(`${room.roomId} is missing from room array but is known - trying to find duplicate`); + } + // Like above, update the reference to the sticky room if we need to if (hasTags && isSticky) { // Go directly in and set the sticky room's new reference, being careful not From e2d65222a24674a1206138bc1f54e4a41baaae72 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 8 Jul 2020 18:59:27 +0100 Subject: [PATCH 0802/1504] Don't render the context menu within its trigger otherwise unhandled clicks will re-trigger Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/UserMenu.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index 0cc312d653..9f69ad6eca 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -347,8 +347,8 @@ export default class UserMenu extends React.Component { {name} {buttons}
    - {this.renderContextMenu()} + {this.renderContextMenu()}
    ); } From 6e208505674e4070f2bb1ffc1c0676dc5dee11de Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 12:17:51 -0600 Subject: [PATCH 0803/1504] Remove sanity check from requestAnimationFrame It should be in all major browsers as of years ago, and we use it unguarded elsewhere in the app. The performance benefits of it appear to be worthwhile enough to keep it, though it's not a perfect solution. --- src/components/structures/LeftPanel2.tsx | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index e92b0fa9ae..0875914b78 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -115,20 +115,12 @@ export default class LeftPanel2 extends React.Component { }; private handleStickyHeaders(list: HTMLDivElement) { - // TODO: Evaluate if this has any performance benefit or detriment. - // See https://github.com/vector-im/riot-web/issues/14035 - if (this.isDoingStickyHeaders) return; this.isDoingStickyHeaders = true; - if (window.requestAnimationFrame) { - window.requestAnimationFrame(() => { - this.doStickyHeaders(list); - this.isDoingStickyHeaders = false; - }); - } else { + window.requestAnimationFrame(() => { this.doStickyHeaders(list); this.isDoingStickyHeaders = false; - } + }); } private doStickyHeaders(list: HTMLDivElement) { From f9aca7c05e381022598f73953761b22d89546e2e Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 14:36:55 -0600 Subject: [PATCH 0804/1504] Avoid bounding box usage in sticky headers & improve reliability We now use offsets and scroll information to determine where the headers should be stuck to, still supporting the transparent background. Some scroll jumps were originally introduced as part of the change in numbering, so they have been fixed here. By proxy, some additional scroll jump/instability should be fixed as well. This has a lingering problem of still causing a huge number of no-op UI updates though, which will be dealt with in a future commit. --- res/css/structures/_LeftPanel2.scss | 7 ++- res/css/views/rooms/_RoomSublist2.scss | 12 ++--- src/components/structures/LeftPanel2.tsx | 62 +++++++++++------------- 3 files changed, 39 insertions(+), 42 deletions(-) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index eaa22a3efa..b3f7fcc8ee 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -122,16 +122,19 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations } .mx_LeftPanel2_roomListWrapper { + // Create a flexbox to ensure the containing items cause appropriate overflow. display: flex; + flex-grow: 1; overflow: hidden; min-height: 0; + margin-top: 12px; // so we're not up against the search/filter - &.stickyBottom { + &.mx_LeftPanel2_roomListWrapper_stickyBottom { padding-bottom: 32px; } - &.stickyTop { + &.mx_LeftPanel2_roomListWrapper_stickyTop { padding-top: 32px; } } diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 30389a4ec5..1d13f25b8f 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -24,10 +24,6 @@ limitations under the License. margin-left: 8px; width: 100%; - &:first-child { - margin-top: 12px; // so we're not up against the search/filter - } - .mx_RoomSublist2_headerContainer { // Create a flexbox to make alignment easy display: flex; @@ -49,10 +45,15 @@ limitations under the License. padding-bottom: 8px; height: 24px; + // Hide the header container if the contained element is stickied. + // We don't use display:none as that causes the header to go away too. + &.mx_RoomSublist2_headerContainer_hasSticky { + height: 0; + } + .mx_RoomSublist2_stickable { flex: 1; max-width: 100%; - z-index: 2; // Prioritize headers in the visible list over sticky ones // Create a flexbox to make ordering easy display: flex; @@ -64,7 +65,6 @@ limitations under the License. // when sticky scrolls instead of collapses the list. &.mx_RoomSublist2_headerContainer_sticky { position: fixed; - z-index: 1; // over top of other elements, but still under the ones in the visible list height: 32px; // to match the header container // width set by JS } diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 0875914b78..316b590aea 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -124,42 +124,42 @@ export default class LeftPanel2 extends React.Component { } private doStickyHeaders(list: HTMLDivElement) { - const rlRect = list.getBoundingClientRect(); - const bottom = rlRect.bottom; - const top = rlRect.top; + const topEdge = list.scrollTop; + const bottomEdge = list.offsetHeight + list.scrollTop; const sublists = list.querySelectorAll(".mx_RoomSublist2"); - const headerRightMargin = 24; // calculated from margins and widths to align with non-sticky tiles - const headerStickyWidth = rlRect.width - headerRightMargin; + const headerRightMargin = 16; // calculated from margins and widths to align with non-sticky tiles + const headerStickyWidth = list.clientWidth - headerRightMargin; - let gotBottom = false; let lastTopHeader; + let firstBottomHeader; for (const sublist of sublists) { - const slRect = sublist.getBoundingClientRect(); - const header = sublist.querySelector(".mx_RoomSublist2_stickable"); + const headerContainer = header.parentElement; // .mx_RoomSublist2_headerContainer header.style.removeProperty("display"); // always clear display:none first + headerContainer.classList.remove("mx_RoomSublist2_headerContainer_hasSticky"); - if (slRect.top + HEADER_HEIGHT > bottom && !gotBottom) { - header.classList.add("mx_RoomSublist2_headerContainer_sticky"); - header.classList.add("mx_RoomSublist2_headerContainer_stickyBottom"); - header.style.width = `${headerStickyWidth}px`; - header.style.removeProperty("top"); - gotBottom = true; - } else if (((slRect.top - (HEADER_HEIGHT * 0.6) + HEADER_HEIGHT) < top) || sublist === sublists[0]) { - // the header should become sticky once it is 60% or less out of view at the top. - // We also add HEADER_HEIGHT because the sticky header is put above the scrollable area, - // into the padding of .mx_LeftPanel2_roomListWrapper, - // by subtracting HEADER_HEIGHT from the top below. - // We also always try to make the first sublist header sticky. + // When an element is <=40% off screen, make it take over + const offScreenFactor = 0.4; + const isOffTop = (sublist.offsetTop + (offScreenFactor * HEADER_HEIGHT)) <= topEdge; + const isOffBottom = (sublist.offsetTop + (offScreenFactor * HEADER_HEIGHT)) >= bottomEdge; + + if (isOffTop || sublist === sublists[0]) { header.classList.add("mx_RoomSublist2_headerContainer_sticky"); header.classList.add("mx_RoomSublist2_headerContainer_stickyTop"); + headerContainer.classList.add("mx_RoomSublist2_headerContainer_hasSticky"); header.style.width = `${headerStickyWidth}px`; - header.style.top = `${rlRect.top - HEADER_HEIGHT}px`; + header.style.top = `${list.parentElement.offsetTop}px`; if (lastTopHeader) { lastTopHeader.style.display = "none"; } lastTopHeader = header; + } else if (isOffBottom && !firstBottomHeader) { + header.classList.add("mx_RoomSublist2_headerContainer_sticky"); + header.classList.add("mx_RoomSublist2_headerContainer_stickyBottom"); + headerContainer.classList.add("mx_RoomSublist2_headerContainer_hasSticky"); + header.style.width = `${headerStickyWidth}px`; + firstBottomHeader = header; } else { header.classList.remove("mx_RoomSublist2_headerContainer_sticky"); header.classList.remove("mx_RoomSublist2_headerContainer_stickyTop"); @@ -171,22 +171,16 @@ export default class LeftPanel2 extends React.Component { // add appropriate sticky classes to wrapper so it has // the necessary top/bottom padding to put the sticky header in - const listWrapper = list.parentElement; - if (gotBottom) { - listWrapper.classList.add("stickyBottom"); - } else { - listWrapper.classList.remove("stickyBottom"); - } + const listWrapper = list.parentElement; // .mx_LeftPanel2_roomListWrapper if (lastTopHeader) { - listWrapper.classList.add("stickyTop"); + listWrapper.classList.add("mx_LeftPanel2_roomListWrapper_stickyTop"); } else { - listWrapper.classList.remove("stickyTop"); + listWrapper.classList.remove("mx_LeftPanel2_roomListWrapper_stickyTop"); } - - // ensure scroll doesn't go above the gap left by the header of - // the first sublist always being sticky if no other header is sticky - if (list.scrollTop < HEADER_HEIGHT) { - list.scrollTop = HEADER_HEIGHT; + if (firstBottomHeader) { + listWrapper.classList.add("mx_LeftPanel2_roomListWrapper_stickyBottom"); + } else { + listWrapper.classList.remove("mx_LeftPanel2_roomListWrapper_stickyBottom"); } } From 74ca0618ac8e500fc95ef88615b8e652bc487450 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 14:53:52 -0600 Subject: [PATCH 0805/1504] Improve scrolling performance for sticky headers The layout updates are anecdotal based on devtools flagging the values which are "changing" even if they aren't. The scrolling feels better with this as well, though this might be placebo. --- src/components/structures/LeftPanel2.tsx | 90 +++++++++++++++++++----- 1 file changed, 74 insertions(+), 16 deletions(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 316b590aea..f1f1ffd01f 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -131,13 +131,19 @@ export default class LeftPanel2 extends React.Component { const headerRightMargin = 16; // calculated from margins and widths to align with non-sticky tiles const headerStickyWidth = list.clientWidth - headerRightMargin; + // We track which styles we want on a target before making the changes to avoid + // excessive layout updates. + const targetStyles = new Map(); + let lastTopHeader; let firstBottomHeader; for (const sublist of sublists) { const header = sublist.querySelector(".mx_RoomSublist2_stickable"); - const headerContainer = header.parentElement; // .mx_RoomSublist2_headerContainer header.style.removeProperty("display"); // always clear display:none first - headerContainer.classList.remove("mx_RoomSublist2_headerContainer_hasSticky"); // When an element is <=40% off screen, make it take over const offScreenFactor = 0.4; @@ -145,27 +151,79 @@ export default class LeftPanel2 extends React.Component { const isOffBottom = (sublist.offsetTop + (offScreenFactor * HEADER_HEIGHT)) >= bottomEdge; if (isOffTop || sublist === sublists[0]) { - header.classList.add("mx_RoomSublist2_headerContainer_sticky"); - header.classList.add("mx_RoomSublist2_headerContainer_stickyTop"); - headerContainer.classList.add("mx_RoomSublist2_headerContainer_hasSticky"); - header.style.width = `${headerStickyWidth}px`; - header.style.top = `${list.parentElement.offsetTop}px`; + targetStyles.set(header, { stickyTop: true }); if (lastTopHeader) { lastTopHeader.style.display = "none"; + targetStyles.set(lastTopHeader, { makeInvisible: true }); } lastTopHeader = header; } else if (isOffBottom && !firstBottomHeader) { - header.classList.add("mx_RoomSublist2_headerContainer_sticky"); - header.classList.add("mx_RoomSublist2_headerContainer_stickyBottom"); - headerContainer.classList.add("mx_RoomSublist2_headerContainer_hasSticky"); - header.style.width = `${headerStickyWidth}px`; + targetStyles.set(header, { stickyBottom: true }); firstBottomHeader = header; } else { - header.classList.remove("mx_RoomSublist2_headerContainer_sticky"); - header.classList.remove("mx_RoomSublist2_headerContainer_stickyTop"); - header.classList.remove("mx_RoomSublist2_headerContainer_stickyBottom"); - header.style.removeProperty("width"); - header.style.removeProperty("top"); + targetStyles.set(header, {}); // nothing == clear + } + } + + // Run over the style changes and make them reality. We check to see if we're about to + // cause a no-op update, as adding/removing properties that are/aren't there cause + // layout updates. + for (const header of targetStyles.keys()) { + const style = targetStyles.get(header); + const headerContainer = header.parentElement; // .mx_RoomSublist2_headerContainer + + if (style.makeInvisible) { + // we will have already removed the 'display: none', so add it back. + header.style.display = "none"; + continue; // nothing else to do, even if sticky somehow + } + + if (style.stickyTop) { + if (!header.classList.contains("mx_RoomSublist2_headerContainer_stickyTop")) { + header.classList.add("mx_RoomSublist2_headerContainer_stickyTop"); + } + + const newTop = `${list.parentElement.offsetTop}px`; + if (header.style.top !== newTop) { + header.style.top = newTop; + } + } else if (style.stickyBottom) { + if (!header.classList.contains("mx_RoomSublist2_headerContainer_stickyBottom")) { + header.classList.add("mx_RoomSublist2_headerContainer_stickyBottom"); + } + } + + if (style.stickyTop || style.stickyBottom) { + if (!header.classList.contains("mx_RoomSublist2_headerContainer_sticky")) { + header.classList.add("mx_RoomSublist2_headerContainer_sticky"); + } + if (!headerContainer.classList.contains("mx_RoomSublist2_headerContainer_hasSticky")) { + headerContainer.classList.add("mx_RoomSublist2_headerContainer_hasSticky"); + } + + const newWidth = `${headerStickyWidth}px`; + if (header.style.width !== newWidth) { + header.style.width = newWidth; + } + } else if (!style.stickyTop && !style.stickyBottom) { + if (header.classList.contains("mx_RoomSublist2_headerContainer_sticky")) { + header.classList.remove("mx_RoomSublist2_headerContainer_sticky"); + } + if (header.classList.contains("mx_RoomSublist2_headerContainer_stickyTop")) { + header.classList.remove("mx_RoomSublist2_headerContainer_stickyTop"); + } + if (header.classList.contains("mx_RoomSublist2_headerContainer_stickyBottom")) { + header.classList.remove("mx_RoomSublist2_headerContainer_stickyBottom"); + } + if (headerContainer.classList.contains("mx_RoomSublist2_headerContainer_hasSticky")) { + headerContainer.classList.remove("mx_RoomSublist2_headerContainer_hasSticky"); + } + if (header.style.width) { + header.style.removeProperty('width'); + } + if (header.style.top) { + header.style.removeProperty('top'); + } } } From 8972cf937864280e5f918aea42f470842cdd428f Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 16:09:45 -0600 Subject: [PATCH 0806/1504] Potential solution to supporting transparent 'show more' buttons In this demonstration, we remove the cutting line (as it collides with the tile in a weird spot) and instead replace the tile with a placeholder when the text is about to collide with the avatar in the tile. We use a `round()` for this because through some amazing coincidence the collision happens at 0.47, which is close enough to 0.5 for people not to notice. --- res/css/views/rooms/_RoomSublist2.scss | 20 +++++--------------- src/components/views/rooms/RoomSublist2.tsx | 10 ++++++++-- src/stores/room-list/ListLayout.ts | 4 ---- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 30389a4ec5..f64e3c1842 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -187,16 +187,16 @@ limitations under the License. flex-direction: column; overflow: hidden; + .mx_RoomSublist2_placeholder { + height: 44px; // Height of a room tile plus margins + } + .mx_RoomSublist2_showNButton { cursor: pointer; font-size: $font-13px; line-height: $font-18px; color: $roomtile2-preview-color; - // This is the same color as the left panel background because it needs - // to occlude the lastmost tile in the list. - background-color: $roomlist2-bg-color; - // Update the render() function for RoomSublist2 if these change // Update the ListLayout class for minVisibleTiles if these change. // @@ -209,7 +209,7 @@ limitations under the License. // We force this to the bottom so it will overlap rooms as needed. // We account for the space it takes up (24px) in the code through padding. position: absolute; - bottom: 0; // the height of the resize handle + bottom: 0; left: 0; right: 0; @@ -236,16 +236,6 @@ limitations under the License. .mx_RoomSublist2_showLessButtonChevron { mask-image: url('$(res)/img/feather-customised/chevron-up.svg'); } - - &.mx_RoomSublist2_isCutting::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - box-shadow: 0px -2px 3px rgba(46, 47, 50, 0.08); - } } // Class name comes from the ResizableBox component diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 732585d3ac..d6ff77b400 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -560,10 +560,8 @@ export default class RoomSublist2 extends React.Component { if (visibleTiles.length > 0) { const layout = this.props.layout; // to shorten calls - const maxTilesFactored = layout.tilesWithResizerBoxFactor(this.numTiles); const showMoreBtnClasses = classNames({ 'mx_RoomSublist2_showNButton': true, - 'mx_RoomSublist2_isCutting': this.state.isResizing && layout.visibleTiles < maxTilesFactored, }); // If we're hiding rooms, show a 'show more' button to the user. This button @@ -642,6 +640,14 @@ export default class RoomSublist2 extends React.Component { const tilesWithoutPadding = Math.min(relativeTiles, layout.visibleTiles); const tilesPx = layout.calculateTilesToPixelsMin(relativeTiles, tilesWithoutPadding, padding); + // Now that we know our padding constraints, let's find out if we need to chop off the + // last rendered visible tile so it doesn't collide with the 'show more' button + let visibleUnpaddedTiles = Math.round(layout.visibleTiles - layout.pixelsToTiles(padding)); + if (visibleUnpaddedTiles === visibleTiles.length - 1) { + const placeholder =
    ; + visibleTiles.splice(visibleUnpaddedTiles, 1, placeholder); + } + const dimensions = { height: tilesPx, }; diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index 99674fe74f..5169c5e4e5 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -109,10 +109,6 @@ export class ListLayout { return this.tilesToPixels(Math.min(maxTiles, n)) + padding; } - public tilesWithResizerBoxFactor(n: number): number { - return n + RESIZER_BOX_FACTOR; - } - public tilesWithPadding(n: number, paddingPx: number): number { return this.pixelsToTiles(this.tilesToPixelsWithPadding(n, paddingPx)); } From 016710af6a10cf6547668567ed6c029f7f1b4d02 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Thu, 9 Jul 2020 00:43:49 +0100 Subject: [PATCH 0807/1504] Noop first breadcrumb --- src/components/views/rooms/RoomBreadcrumbs2.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/views/rooms/RoomBreadcrumbs2.tsx b/src/components/views/rooms/RoomBreadcrumbs2.tsx index 687f4dd73e..f08adebcd2 100644 --- a/src/components/views/rooms/RoomBreadcrumbs2.tsx +++ b/src/components/views/rooms/RoomBreadcrumbs2.tsx @@ -16,7 +16,6 @@ limitations under the License. import React from "react"; import { BreadcrumbsStore } from "../../../stores/BreadcrumbsStore"; -import AccessibleButton from "../elements/AccessibleButton"; import DecoratedRoomAvatar from "../avatars/DecoratedRoomAvatar"; import { _t } from "../../../languageHandler"; import { Room } from "matrix-js-sdk/src/models/room"; @@ -88,16 +87,19 @@ export default class RoomBreadcrumbs2 extends React.PureComponent { Analytics.trackEvent("Breadcrumbs", "click_node", index); - defaultDispatcher.dispatch({action: "view_room", room_id: room.roomId}); + // If we're rendering the first breadcrumb and this is it no-op + if (!this.state.skipFirst && index === 0) { + return; + } else { + defaultDispatcher.dispatch({action: "view_room", room_id: room.roomId}); + } }; public render(): React.ReactElement { - // TODO: Decorate crumbs with icons: https://github.com/vector-im/riot-web/issues/14040 - // TODO: Scrolling: https://github.com/vector-im/riot-web/issues/14040 - // TODO: Tooltips: https://github.com/vector-im/riot-web/issues/14040 const tiles = BreadcrumbsStore.instance.rooms.map((r, i) => { const roomTags = RoomListStore.instance.getTagsForRoom(r); const roomTag = roomTags.includes(DefaultTagID.DM) ? DefaultTagID.DM : roomTags[0]; + const anon = () => this.viewRoom(r, i); return ( Date: Wed, 8 Jul 2020 18:27:50 -0600 Subject: [PATCH 0808/1504] Move list layout management to its own store This is more general maintenance than performance as the RoomList doesn't need to be generating layouts for the sublists, and it certainly doesn't need to be creating a bunch of extra ones. The sublists are perfectly capable of getting their own layout instance and using it, and we are perfectly able to limit the number of these things we create through the session's lifespan. --- src/@types/global.d.ts | 2 + src/components/views/rooms/RoomList2.tsx | 11 +---- src/components/views/rooms/RoomSublist2.tsx | 44 +++++++++-------- src/stores/room-list/RoomListLayoutStore.ts | 54 +++++++++++++++++++++ src/stores/room-list/RoomListStore2.ts | 13 ++--- 5 files changed, 84 insertions(+), 40 deletions(-) create mode 100644 src/stores/room-list/RoomListLayoutStore.ts diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index 2c2fec759c..fc52296d8b 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -21,6 +21,7 @@ import ToastStore from "../stores/ToastStore"; import DeviceListener from "../DeviceListener"; import { RoomListStore2 } from "../stores/room-list/RoomListStore2"; import { PlatformPeg } from "../PlatformPeg"; +import RoomListLayoutStore from "../stores/room-list/RoomListLayoutStore"; declare global { interface Window { @@ -34,6 +35,7 @@ declare global { mx_ToastStore: ToastStore; mx_DeviceListener: DeviceListener; mx_RoomListStore2: RoomListStore2; + mx_RoomListLayoutStore: RoomListLayoutStore; mxPlatformPeg: PlatformPeg; } diff --git a/src/components/views/rooms/RoomList2.tsx b/src/components/views/rooms/RoomList2.tsx index fb0136fb29..348c424927 100644 --- a/src/components/views/rooms/RoomList2.tsx +++ b/src/components/views/rooms/RoomList2.tsx @@ -32,7 +32,6 @@ import defaultDispatcher from "../../../dispatcher/dispatcher"; import RoomSublist2 from "./RoomSublist2"; import { ActionPayload } from "../../../dispatcher/payloads"; import { NameFilterCondition } from "../../../stores/room-list/filters/NameFilterCondition"; -import { ListLayout } from "../../../stores/room-list/ListLayout"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; import GroupAvatar from "../avatars/GroupAvatar"; import TemporaryTile from "./TemporaryTile"; @@ -66,7 +65,6 @@ interface IProps { interface IState { sublists: ITagMap; - layouts: Map; } const TAG_ORDER: TagID[] = [ @@ -151,7 +149,6 @@ export default class RoomList2 extends React.Component { this.state = { sublists: {}, - layouts: new Map(), }; this.dispatcherRef = defaultDispatcher.register(this.onAction); @@ -227,12 +224,7 @@ export default class RoomList2 extends React.Component { const newLists = RoomListStore.instance.orderedLists; console.log("new lists", newLists); - const layoutMap = new Map(); - for (const tagId of Object.keys(newLists)) { - layoutMap.set(tagId, new ListLayout(tagId)); - } - - this.setState({sublists: newLists, layouts: layoutMap}, () => { + this.setState({sublists: newLists}, () => { this.props.onResize(); }); }; @@ -302,7 +294,6 @@ export default class RoomList2 extends React.Component { onAddRoom={onAddRoomFn} addRoomLabel={aesthetics.addRoomLabel} isInvite={aesthetics.isInvite} - layout={this.state.layouts.get(orderedTagId)} isMinimized={this.props.isMinimized} onResize={this.props.onResize} extraBadTilesThatShouldntExist={extraTiles} diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 732585d3ac..3eadc9a313 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -45,6 +45,7 @@ import {ActionPayload} from "../../../dispatcher/payloads"; import { Enable, Resizable } from "re-resizable"; import { Direction } from "re-resizable/lib/resizer"; import { polyfillTouchEvent } from "../../../@types/polyfill"; +import RoomListLayoutStore from "../../../stores/room-list/RoomListLayoutStore"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -74,7 +75,6 @@ interface IProps { onAddRoom?: () => void; addRoomLabel: string; isInvite: boolean; - layout?: ListLayout; isMinimized: boolean; tagId: TagID; onResize: () => void; @@ -98,10 +98,13 @@ export default class RoomSublist2 extends React.Component { private headerButton = createRef(); private sublistRef = createRef(); private dispatcherRef: string; + private layout: ListLayout; constructor(props: IProps) { super(props); + this.layout = RoomListLayoutStore.instance.getLayoutFor(this.props.tagId); + this.state = { notificationState: new ListNotificationState(this.props.isInvite, this.props.tagId), contextMenuPosition: null, @@ -116,8 +119,7 @@ export default class RoomSublist2 extends React.Component { } private get numVisibleTiles(): number { - if (!this.props.layout) return 0; - const nVisible = Math.floor(this.props.layout.visibleTiles); + const nVisible = Math.floor(this.layout.visibleTiles); return Math.min(nVisible, this.numTiles); } @@ -135,7 +137,7 @@ export default class RoomSublist2 extends React.Component { // XXX: we have to do this a tick later because we have incorrect intermediate props during a room change // where we lose the room we are changing from temporarily and then it comes back in an update right after. setImmediate(() => { - const isCollapsed = this.props.layout.isCollapsed; + const isCollapsed = this.layout.isCollapsed; const roomIndex = this.props.rooms.findIndex((r) => r.roomId === payload.room_id); if (isCollapsed && roomIndex > -1) { @@ -143,7 +145,7 @@ export default class RoomSublist2 extends React.Component { } // extend the visible section to include the room if it is entirely invisible if (roomIndex >= this.numVisibleTiles) { - this.props.layout.visibleTiles = this.props.layout.tilesWithPadding(roomIndex + 1, MAX_PADDING_HEIGHT); + this.layout.visibleTiles = this.layout.tilesWithPadding(roomIndex + 1, MAX_PADDING_HEIGHT); this.forceUpdate(); // because the layout doesn't trigger a re-render } }); @@ -170,10 +172,10 @@ export default class RoomSublist2 extends React.Component { // resizing started*, meaning it is fairly useless for us. This is why we just use // the client height and run with it. - const heightBefore = this.props.layout.visibleTiles; - const heightInTiles = this.props.layout.pixelsToTiles(refToElement.clientHeight); - this.props.layout.setVisibleTilesWithin(heightInTiles, this.numTiles); - if (heightBefore === this.props.layout.visibleTiles) return; // no-op + const heightBefore = this.layout.visibleTiles; + const heightInTiles = this.layout.pixelsToTiles(refToElement.clientHeight); + this.layout.setVisibleTilesWithin(heightInTiles, this.numTiles); + if (heightBefore === this.layout.visibleTiles) return; // no-op this.forceUpdate(); // because the layout doesn't trigger a re-render }; @@ -187,13 +189,13 @@ export default class RoomSublist2 extends React.Component { private onShowAllClick = () => { const numVisibleTiles = this.numVisibleTiles; - this.props.layout.visibleTiles = this.props.layout.tilesWithPadding(this.numTiles, MAX_PADDING_HEIGHT); + this.layout.visibleTiles = this.layout.tilesWithPadding(this.numTiles, MAX_PADDING_HEIGHT); this.forceUpdate(); // because the layout doesn't trigger a re-render setImmediate(this.focusRoomTile, numVisibleTiles); // focus the tile after the current bottom one }; private onShowLessClick = () => { - this.props.layout.visibleTiles = this.props.layout.defaultVisibleTiles; + this.layout.visibleTiles = this.layout.defaultVisibleTiles; this.forceUpdate(); // because the layout doesn't trigger a re-render // focus will flow to the show more button here }; @@ -241,7 +243,7 @@ export default class RoomSublist2 extends React.Component { }; private onMessagePreviewChanged = () => { - this.props.layout.showPreviews = !this.props.layout.showPreviews; + this.layout.showPreviews = !this.layout.showPreviews; this.forceUpdate(); // because the layout doesn't trigger a re-render }; @@ -293,13 +295,13 @@ export default class RoomSublist2 extends React.Component { }; private toggleCollapsed = () => { - this.props.layout.isCollapsed = !this.props.layout.isCollapsed; + this.layout.isCollapsed = !this.layout.isCollapsed; this.forceUpdate(); // because the layout doesn't trigger an update setImmediate(() => this.props.onResize()); // needs to happen when the DOM is updated }; private onHeaderKeyDown = (ev: React.KeyboardEvent) => { - const isCollapsed = this.props.layout && this.props.layout.isCollapsed; + const isCollapsed = this.layout && this.layout.isCollapsed; switch (ev.key) { case Key.ARROW_LEFT: ev.stopPropagation(); @@ -339,7 +341,7 @@ export default class RoomSublist2 extends React.Component { }; private renderVisibleTiles(): React.ReactElement[] { - if (this.props.layout && this.props.layout.isCollapsed) { + if (this.layout && this.layout.isCollapsed) { // don't waste time on rendering return []; } @@ -353,7 +355,7 @@ export default class RoomSublist2 extends React.Component { @@ -404,7 +406,7 @@ export default class RoomSublist2 extends React.Component { {_t("Message preview")} @@ -496,7 +498,7 @@ export default class RoomSublist2 extends React.Component { const collapseClasses = classNames({ 'mx_RoomSublist2_collapseBtn': true, - 'mx_RoomSublist2_collapseBtn_collapsed': this.props.layout && this.props.layout.isCollapsed, + 'mx_RoomSublist2_collapseBtn_collapsed': this.layout && this.layout.isCollapsed, }); const classes = classNames({ @@ -524,7 +526,7 @@ export default class RoomSublist2 extends React.Component { tabIndex={tabIndex} className="mx_RoomSublist2_headerText" role="treeitem" - aria-expanded={!this.props.layout || !this.props.layout.isCollapsed} + aria-expanded={!this.layout.isCollapsed} aria-level={1} onClick={this.onHeaderClick} onContextMenu={this.onContextMenu} @@ -558,7 +560,7 @@ export default class RoomSublist2 extends React.Component { let content = null; if (visibleTiles.length > 0) { - const layout = this.props.layout; // to shorten calls + const layout = this.layout; // to shorten calls const maxTilesFactored = layout.tilesWithResizerBoxFactor(this.numTiles); const showMoreBtnClasses = classNames({ @@ -587,7 +589,7 @@ export default class RoomSublist2 extends React.Component { {showMoreText} ); - } else if (this.numTiles <= visibleTiles.length && this.numTiles > this.props.layout.defaultVisibleTiles) { + } else if (this.numTiles <= visibleTiles.length && this.numTiles > this.layout.defaultVisibleTiles) { // we have all tiles visible - add a button to show less let showLessText = ( diff --git a/src/stores/room-list/RoomListLayoutStore.ts b/src/stores/room-list/RoomListLayoutStore.ts new file mode 100644 index 0000000000..dd4364f5fc --- /dev/null +++ b/src/stores/room-list/RoomListLayoutStore.ts @@ -0,0 +1,54 @@ +/* +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 { TagID } from "./models"; +import { ListLayout } from "./ListLayout"; + +export default class RoomListLayoutStore { + private static internalInstance: RoomListLayoutStore; + + private readonly layoutMap = new Map(); + + public ensureLayoutExists(tagId: TagID) { + if (!this.layoutMap.has(tagId)) { + this.layoutMap.set(tagId, new ListLayout(tagId)); + } + } + + public getLayoutFor(tagId: TagID): ListLayout { + if (!this.layoutMap.has(tagId)) { + this.layoutMap.set(tagId, new ListLayout(tagId)); + } + return this.layoutMap.get(tagId); + } + + // Note: this primarily exists for debugging, and isn't really intended to be used by anything. + public async resetLayouts() { + console.warn("Resetting layouts for room list"); + for (const layout of this.layoutMap.values()) { + layout.reset(); + } + } + + public static get instance(): RoomListLayoutStore { + if (!RoomListLayoutStore.internalInstance) { + RoomListLayoutStore.internalInstance = new RoomListLayoutStore(); + } + return RoomListLayoutStore.internalInstance; + } +} + +window.mx_RoomListLayoutStore = RoomListLayoutStore.instance; diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 82c419d79d..6020e46a12 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -32,6 +32,7 @@ import { Algorithm, LIST_UPDATED_EVENT } from "./algorithms/Algorithm"; import { EffectiveMembership, getEffectiveMembership } from "./membership"; import { ListLayout } from "./ListLayout"; import { isNullOrUndefined } from "matrix-js-sdk/src/utils"; +import RoomListLayoutStore from "./RoomListLayoutStore"; interface IState { tagsEnabled?: boolean; @@ -50,6 +51,7 @@ export class RoomListStore2 extends AsyncStore { private algorithm = new Algorithm(); private filterConditions: IFilterCondition[] = []; private tagWatcher = new TagWatcher(this); + private layoutMap: Map = new Map(); private readonly watchedSettings = [ 'feature_custom_tags', @@ -416,6 +418,8 @@ export class RoomListStore2 extends AsyncStore { for (const tagId of OrderedDefaultTagIDs) { sorts[tagId] = this.calculateTagSorting(tagId); orders[tagId] = this.calculateListOrder(tagId); + + RoomListLayoutStore.instance.ensureLayoutExists(tagId); } if (this.state.tagsEnabled) { @@ -434,15 +438,6 @@ export class RoomListStore2 extends AsyncStore { this.emit(LISTS_UPDATE_EVENT, this); } - // Note: this primarily exists for debugging, and isn't really intended to be used by anything. - public async resetLayouts() { - console.warn("Resetting layouts for room list"); - for (const tagId of Object.keys(this.orderedLists)) { - new ListLayout(tagId).reset(); - } - await this.regenerateAllLists(); - } - public addFilter(filter: IFilterCondition): void { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 console.log("Adding filter condition:", filter); From 2baa78d26baf80c0208c1ec50022d023ad8c4141 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Thu, 9 Jul 2020 01:31:44 +0100 Subject: [PATCH 0809/1504] Move no-op to breadcrumb store --- .../views/rooms/RoomBreadcrumbs2.tsx | 8 +---- src/stores/BreadcrumbsStore.ts | 35 +++++++++++++------ 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/components/views/rooms/RoomBreadcrumbs2.tsx b/src/components/views/rooms/RoomBreadcrumbs2.tsx index f08adebcd2..602c697d8a 100644 --- a/src/components/views/rooms/RoomBreadcrumbs2.tsx +++ b/src/components/views/rooms/RoomBreadcrumbs2.tsx @@ -87,19 +87,13 @@ export default class RoomBreadcrumbs2 extends React.PureComponent { Analytics.trackEvent("Breadcrumbs", "click_node", index); - // If we're rendering the first breadcrumb and this is it no-op - if (!this.state.skipFirst && index === 0) { - return; - } else { - defaultDispatcher.dispatch({action: "view_room", room_id: room.roomId}); - } + defaultDispatcher.dispatch({action: "view_room", room_id: room.roomId}); }; public render(): React.ReactElement { const tiles = BreadcrumbsStore.instance.rooms.map((r, i) => { const roomTags = RoomListStore.instance.getTagsForRoom(r); const roomTag = roomTags.includes(DefaultTagID.DM) ? DefaultTagID.DM : roomTags[0]; - const anon = () => this.viewRoom(r, i); return ( { } private async appendRoom(room: Room) { + let updated = false; const rooms = (this.state.rooms || []).slice(); // cheap clone // If the room is upgraded, use that room instead. We'll also splice out @@ -136,30 +137,42 @@ export class BreadcrumbsStore extends AsyncStoreWithClient { // Take out any room that isn't the most recent room for (let i = 0; i < history.length - 1; i++) { const idx = rooms.findIndex(r => r.roomId === history[i].roomId); - if (idx !== -1) rooms.splice(idx, 1); + if (idx !== -1) { + rooms.splice(idx, 1); + updated = true; + } } } // Remove the existing room, if it is present const existingIdx = rooms.findIndex(r => r.roomId === room.roomId); - if (existingIdx !== -1) { - rooms.splice(existingIdx, 1); - } - // Splice the room to the start of the list - rooms.splice(0, 0, room); + // If we're focusing on the first room no-op + if (existingIdx !== 0) { + if (existingIdx !== -1) { + rooms.splice(existingIdx, 1); + } + + // Splice the room to the start of the list + rooms.splice(0, 0, room); + updated = true; + } if (rooms.length > MAX_ROOMS) { // This looks weird, but it's saying to start at the MAX_ROOMS point in the // list and delete everything after it. rooms.splice(MAX_ROOMS, rooms.length - MAX_ROOMS); + updated = true; } - // Update the breadcrumbs - await this.updateState({rooms}); - const roomIds = rooms.map(r => r.roomId); - if (roomIds.length > 0) { - await SettingsStore.setValue("breadcrumb_rooms", null, SettingLevel.ACCOUNT, roomIds); + + if (updated) { + // Update the breadcrumbs + await this.updateState({rooms}); + const roomIds = rooms.map(r => r.roomId); + if (roomIds.length > 0) { + await SettingsStore.setValue("breadcrumb_rooms", null, SettingLevel.ACCOUNT, roomIds); + } } } From c8f90be81d5a1d5df687066192b2af649bef77d5 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 18:32:12 -0600 Subject: [PATCH 0810/1504] Ensure the map gets cleared upon logout --- src/stores/room-list/RoomListLayoutStore.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/stores/room-list/RoomListLayoutStore.ts b/src/stores/room-list/RoomListLayoutStore.ts index dd4364f5fc..4d8c98a4f8 100644 --- a/src/stores/room-list/RoomListLayoutStore.ts +++ b/src/stores/room-list/RoomListLayoutStore.ts @@ -16,12 +16,21 @@ limitations under the License. import { TagID } from "./models"; import { ListLayout } from "./ListLayout"; +import { AsyncStoreWithClient } from "../AsyncStoreWithClient"; +import defaultDispatcher from "../../dispatcher/dispatcher"; +import { ActionPayload } from "../../dispatcher/payloads"; -export default class RoomListLayoutStore { +interface IState {} + +export default class RoomListLayoutStore extends AsyncStoreWithClient { private static internalInstance: RoomListLayoutStore; private readonly layoutMap = new Map(); + constructor() { + super(defaultDispatcher); + } + public ensureLayoutExists(tagId: TagID) { if (!this.layoutMap.has(tagId)) { this.layoutMap.set(tagId, new ListLayout(tagId)); @@ -49,6 +58,16 @@ export default class RoomListLayoutStore { } return RoomListLayoutStore.internalInstance; } + + protected async onNotReady(): Promise { + // On logout, clear the map. + this.layoutMap.clear(); + } + + // We don't need this function, but our contract says we do + protected async onAction(payload: ActionPayload): Promise { + return Promise.resolve(); + } } window.mx_RoomListLayoutStore = RoomListLayoutStore.instance; From 62b4596c049225ab767f7ef5a91c71cc2749d9fa Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 18:36:56 -0600 Subject: [PATCH 0811/1504] Be consistent with other stores --- src/stores/room-list/RoomListLayoutStore.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/stores/room-list/RoomListLayoutStore.ts b/src/stores/room-list/RoomListLayoutStore.ts index 4d8c98a4f8..fbc7d7719d 100644 --- a/src/stores/room-list/RoomListLayoutStore.ts +++ b/src/stores/room-list/RoomListLayoutStore.ts @@ -31,6 +31,13 @@ export default class RoomListLayoutStore extends AsyncStoreWithClient { super(defaultDispatcher); } + public static get instance(): RoomListLayoutStore { + if (!RoomListLayoutStore.internalInstance) { + RoomListLayoutStore.internalInstance = new RoomListLayoutStore(); + } + return RoomListLayoutStore.internalInstance; + } + public ensureLayoutExists(tagId: TagID) { if (!this.layoutMap.has(tagId)) { this.layoutMap.set(tagId, new ListLayout(tagId)); @@ -52,13 +59,6 @@ export default class RoomListLayoutStore extends AsyncStoreWithClient { } } - public static get instance(): RoomListLayoutStore { - if (!RoomListLayoutStore.internalInstance) { - RoomListLayoutStore.internalInstance = new RoomListLayoutStore(); - } - return RoomListLayoutStore.internalInstance; - } - protected async onNotReady(): Promise { // On logout, clear the map. this.layoutMap.clear(); From 47380306c27b56ac26350695e29d57b1a30f8c3f Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 19:26:25 -0600 Subject: [PATCH 0812/1504] Move and improve notification state handling Previously we were creating a notification state whenever we needed one, which was leading to hundreds of listeners even on a small account. To ease the burden, and reduce the load of having to wake so many listeners, we now record a single listener for each tag ID and room combination. This commit also introduces a number of utilities to make future notification work a bit of an easier transition, such as the `isX` and `hasX` getters on the new NotificationState abstract class. Similarly, "snapshots" have been added to reduce code duplication between different kinds of states checking for updates. The ListNotificationState is now heavily tied into the store which offers it to help reuse the cache of room notification states. Fixes https://github.com/vector-im/riot-web/issues/14370 --- .../views/avatars/DecoratedRoomAvatar.tsx | 8 +- .../views/rooms/NotificationBadge.tsx | 17 ++- src/components/views/rooms/RoomList2.tsx | 12 +-- src/components/views/rooms/RoomSublist2.tsx | 4 +- src/components/views/rooms/RoomTile2.tsx | 18 ++-- src/components/views/rooms/TemporaryTile.tsx | 7 +- .../notifications/INotificationState.ts | 26 ----- .../notifications/ListNotificationState.ts | 34 ++---- src/stores/notifications/NotificationState.ts | 87 +++++++++++++++ .../notifications/RoomNotificationState.ts | 29 +---- .../RoomNotificationStateStore.ts | 101 ++++++++++++++++++ .../notifications/StaticNotificationState.ts | 10 +- 12 files changed, 237 insertions(+), 116 deletions(-) delete mode 100644 src/stores/notifications/INotificationState.ts create mode 100644 src/stores/notifications/NotificationState.ts create mode 100644 src/stores/notifications/RoomNotificationStateStore.ts diff --git a/src/components/views/avatars/DecoratedRoomAvatar.tsx b/src/components/views/avatars/DecoratedRoomAvatar.tsx index e0ad3202b8..40ba15af33 100644 --- a/src/components/views/avatars/DecoratedRoomAvatar.tsx +++ b/src/components/views/avatars/DecoratedRoomAvatar.tsx @@ -21,8 +21,8 @@ import { TagID } from '../../../stores/room-list/models'; import RoomAvatar from "./RoomAvatar"; import RoomTileIcon from "../rooms/RoomTileIcon"; import NotificationBadge from '../rooms/NotificationBadge'; -import { INotificationState } from "../../../stores/notifications/INotificationState"; -import { TagSpecificNotificationState } from "../../../stores/notifications/TagSpecificNotificationState"; +import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore"; +import { NotificationState } from "../../../stores/notifications/NotificationState"; interface IProps { room: Room; @@ -33,7 +33,7 @@ interface IProps { } interface IState { - notificationState?: INotificationState; + notificationState?: NotificationState; } export default class DecoratedRoomAvatar extends React.PureComponent { @@ -42,7 +42,7 @@ export default class DecoratedRoomAvatar extends React.PureComponent= NotificationColor.Red; - const hasCount = notification.color >= NotificationColor.Grey; const hasAnySymbol = notification.symbol || notification.count > 0; - let isEmptyBadge = !hasAnySymbol || !hasCount; + let isEmptyBadge = !hasAnySymbol || !notification.hasUnreadCount; if (forceCount) { isEmptyBadge = false; - if (!hasCount) return null; // Can't render a badge + if (!notification.hasUnreadCount) return null; // Can't render a badge } let symbol = notification.symbol || formatMinimalBadgeCount(notification.count); @@ -117,8 +114,8 @@ export default class NotificationBadge extends React.PureComponent 0 && symbol.length < 3, 'mx_NotificationBadge_3char': symbol.length > 2, diff --git a/src/components/views/rooms/RoomList2.tsx b/src/components/views/rooms/RoomList2.tsx index fb0136fb29..25ffc74fc2 100644 --- a/src/components/views/rooms/RoomList2.tsx +++ b/src/components/views/rooms/RoomList2.tsx @@ -38,9 +38,9 @@ import GroupAvatar from "../avatars/GroupAvatar"; import TemporaryTile from "./TemporaryTile"; import { StaticNotificationState } from "../../../stores/notifications/StaticNotificationState"; import { NotificationColor } from "../../../stores/notifications/NotificationColor"; -import { TagSpecificNotificationState } from "../../../stores/notifications/TagSpecificNotificationState"; import { Action } from "../../../dispatcher/actions"; import { ViewRoomDeltaPayload } from "../../../dispatcher/payloads/ViewRoomDeltaPayload"; +import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -204,14 +204,11 @@ export default class RoomList2 extends React.Component { let listRooms = lists[t]; if (unread) { - // TODO Be smarter and not spin up a bunch of wasted listeners just to kill them 4 lines later - // https://github.com/vector-im/riot-web/issues/14035 - const notificationStates = rooms.map(r => new TagSpecificNotificationState(r, t)); // filter to only notification rooms (and our current active room so we can index properly) - listRooms = notificationStates.filter(state => { - return state.room.roomId === roomId || state.color >= NotificationColor.Bold; + listRooms = listRooms.filter(r => { + const state = RoomNotificationStateStore.instance.getRoomState(r, t); + return state.room.roomId === roomId || state.isUnread; }); - notificationStates.forEach(state => state.destroy()); } rooms.push(...listRooms); @@ -301,7 +298,6 @@ export default class RoomList2 extends React.Component { label={_t(aesthetics.sectionLabel)} onAddRoom={onAddRoomFn} addRoomLabel={aesthetics.addRoomLabel} - isInvite={aesthetics.isInvite} layout={this.state.layouts.get(orderedTagId)} isMinimized={this.props.isMinimized} onResize={this.props.onResize} diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 732585d3ac..0561c7b3c7 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -45,6 +45,7 @@ import {ActionPayload} from "../../../dispatcher/payloads"; import { Enable, Resizable } from "re-resizable"; import { Direction } from "re-resizable/lib/resizer"; import { polyfillTouchEvent } from "../../../@types/polyfill"; +import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -73,7 +74,6 @@ interface IProps { label: string; onAddRoom?: () => void; addRoomLabel: string; - isInvite: boolean; layout?: ListLayout; isMinimized: boolean; tagId: TagID; @@ -103,7 +103,7 @@ export default class RoomSublist2 extends React.Component { super(props); this.state = { - notificationState: new ListNotificationState(this.props.isInvite, this.props.tagId), + notificationState: RoomNotificationStateStore.instance.getListState(this.props.tagId), contextMenuPosition: null, isResizing: false, }; diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 4ecd6bb1ff..db8084baa2 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -46,15 +46,14 @@ import { MUTE, } from "../../../RoomNotifs"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; -import { TagSpecificNotificationState } from "../../../stores/notifications/TagSpecificNotificationState"; -import { INotificationState } from "../../../stores/notifications/INotificationState"; import NotificationBadge from "./NotificationBadge"; -import { NotificationColor } from "../../../stores/notifications/NotificationColor"; import { Volume } from "../../../RoomNotifsTypes"; import RoomListStore from "../../../stores/room-list/RoomListStore2"; import RoomListActions from "../../../actions/RoomListActions"; import defaultDispatcher from "../../../dispatcher/dispatcher"; import {ActionPayload} from "../../../dispatcher/payloads"; +import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore"; +import { NotificationState } from "../../../stores/notifications/NotificationState"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -80,7 +79,7 @@ type PartialDOMRect = Pick; interface IState { hover: boolean; - notificationState: INotificationState; + notificationState: NotificationState; selected: boolean; notificationsMenuPosition: PartialDOMRect; generalMenuPosition: PartialDOMRect; @@ -132,7 +131,7 @@ export default class RoomTile2 extends React.Component { this.state = { hover: false, - notificationState: new TagSpecificNotificationState(this.props.room, this.props.tag), + notificationState: RoomNotificationStateStore.instance.getRoomState(this.props.room, this.props.tag), selected: ActiveRoomObserver.activeRoomId === this.props.room.roomId, notificationsMenuPosition: null, generalMenuPosition: null, @@ -492,11 +491,10 @@ export default class RoomTile2 extends React.Component { } } - const notificationColor = this.state.notificationState.color; const nameClasses = classNames({ "mx_RoomTile2_name": true, "mx_RoomTile2_nameWithPreview": !!messagePreview, - "mx_RoomTile2_nameHasUnreadEvents": notificationColor >= NotificationColor.Bold, + "mx_RoomTile2_nameHasUnreadEvents": this.state.notificationState.isUnread, }); let nameContainer = ( @@ -513,15 +511,15 @@ export default class RoomTile2 extends React.Component { // The following labels are written in such a fashion to increase screen reader efficiency (speed). if (this.props.tag === DefaultTagID.Invite) { // append nothing - } else if (notificationColor >= NotificationColor.Red) { + } else if (this.state.notificationState.hasMentions) { ariaLabel += " " + _t("%(count)s unread messages including mentions.", { count: this.state.notificationState.count, }); - } else if (notificationColor >= NotificationColor.Grey) { + } else if (this.state.notificationState.hasUnreadCount) { ariaLabel += " " + _t("%(count)s unread messages.", { count: this.state.notificationState.count, }); - } else if (notificationColor >= NotificationColor.Bold) { + } else if (this.state.notificationState.isUnread) { ariaLabel += " " + _t("Unread messages."); } diff --git a/src/components/views/rooms/TemporaryTile.tsx b/src/components/views/rooms/TemporaryTile.tsx index b6c165ecda..a3ee7eb5bd 100644 --- a/src/components/views/rooms/TemporaryTile.tsx +++ b/src/components/views/rooms/TemporaryTile.tsx @@ -18,16 +18,15 @@ import React from "react"; import classNames from "classnames"; import { RovingTabIndexWrapper } from "../../../accessibility/RovingTabIndex"; import AccessibleButton from "../../views/elements/AccessibleButton"; -import { INotificationState } from "../../../stores/notifications/INotificationState"; import NotificationBadge from "./NotificationBadge"; -import { NotificationColor } from "../../../stores/notifications/NotificationColor"; +import { NotificationState } from "../../../stores/notifications/NotificationState"; interface IProps { isMinimized: boolean; isSelected: boolean; displayName: string; avatar: React.ReactElement; - notificationState: INotificationState; + notificationState: NotificationState; onClick: () => void; } @@ -74,7 +73,7 @@ export default class TemporaryTile extends React.Component { const nameClasses = classNames({ "mx_RoomTile2_name": true, - "mx_RoomTile2_nameHasUnreadEvents": this.props.notificationState.color >= NotificationColor.Bold, + "mx_RoomTile2_nameHasUnreadEvents": this.props.notificationState.isUnread, }); let nameContainer = ( diff --git a/src/stores/notifications/INotificationState.ts b/src/stores/notifications/INotificationState.ts deleted file mode 100644 index 65bd7b7957..0000000000 --- a/src/stores/notifications/INotificationState.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* -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 { EventEmitter } from "events"; -import { NotificationColor } from "./NotificationColor"; - -export const NOTIFICATION_STATE_UPDATE = "update"; - -export interface INotificationState extends EventEmitter { - symbol?: string; - count: number; - color: NotificationColor; -} diff --git a/src/stores/notifications/ListNotificationState.ts b/src/stores/notifications/ListNotificationState.ts index 5773693b47..6c5f6fc6dd 100644 --- a/src/stores/notifications/ListNotificationState.ts +++ b/src/stores/notifications/ListNotificationState.ts @@ -14,23 +14,20 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { EventEmitter } from "events"; -import { INotificationState, NOTIFICATION_STATE_UPDATE } from "./INotificationState"; import { NotificationColor } from "./NotificationColor"; -import { IDestroyable } from "../../utils/IDestroyable"; import { TagID } from "../room-list/models"; import { Room } from "matrix-js-sdk/src/models/room"; import { arrayDiff } from "../../utils/arrays"; import { RoomNotificationState } from "./RoomNotificationState"; -import { TagSpecificNotificationState } from "./TagSpecificNotificationState"; +import { NOTIFICATION_STATE_UPDATE, NotificationState } from "./NotificationState"; -export class ListNotificationState extends EventEmitter implements IDestroyable, INotificationState { - private _count: number; - private _color: NotificationColor; +export type FetchRoomFn = (room: Room) => RoomNotificationState; + +export class ListNotificationState extends NotificationState { private rooms: Room[] = []; private states: { [roomId: string]: RoomNotificationState } = {}; - constructor(private byTileCount = false, private tagId: TagID) { + constructor(private byTileCount = false, private tagId: TagID, private getRoomFn: FetchRoomFn) { super(); } @@ -38,14 +35,6 @@ export class ListNotificationState extends EventEmitter implements IDestroyable, return null; // This notification state doesn't support symbols } - public get count(): number { - return this._count; - } - - public get color(): NotificationColor { - return this._color; - } - public setRooms(rooms: Room[]) { // If we're only concerned about the tile count, don't bother setting up listeners. if (this.byTileCount) { @@ -62,10 +51,9 @@ export class ListNotificationState extends EventEmitter implements IDestroyable, if (!state) continue; // We likely just didn't have a badge (race condition) delete this.states[oldRoom.roomId]; state.off(NOTIFICATION_STATE_UPDATE, this.onRoomNotificationStateUpdate); - state.destroy(); } for (const newRoom of diff.added) { - const state = new TagSpecificNotificationState(newRoom, this.tagId); + const state = this.getRoomFn(newRoom); state.on(NOTIFICATION_STATE_UPDATE, this.onRoomNotificationStateUpdate); if (this.states[newRoom.roomId]) { // "Should never happen" disclaimer. @@ -85,8 +73,9 @@ export class ListNotificationState extends EventEmitter implements IDestroyable, } public destroy() { + super.destroy(); for (const state of Object.values(this.states)) { - state.destroy(); + state.off(NOTIFICATION_STATE_UPDATE, this.onRoomNotificationStateUpdate); } this.states = {}; } @@ -96,7 +85,7 @@ export class ListNotificationState extends EventEmitter implements IDestroyable, }; private calculateTotalState() { - const before = {count: this.count, symbol: this.symbol, color: this.color}; + const snapshot = this.snapshot(); if (this.byTileCount) { this._color = NotificationColor.Red; @@ -111,10 +100,7 @@ export class ListNotificationState extends EventEmitter implements IDestroyable, } // finally, publish an update if needed - const after = {count: this.count, symbol: this.symbol, color: this.color}; - if (JSON.stringify(before) !== JSON.stringify(after)) { - this.emit(NOTIFICATION_STATE_UPDATE); - } + this.emitIfUpdated(snapshot); } } diff --git a/src/stores/notifications/NotificationState.ts b/src/stores/notifications/NotificationState.ts new file mode 100644 index 0000000000..c8ef0ba859 --- /dev/null +++ b/src/stores/notifications/NotificationState.ts @@ -0,0 +1,87 @@ +/* +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 { EventEmitter } from "events"; +import { NotificationColor } from "./NotificationColor"; +import { IDestroyable } from "../../utils/IDestroyable"; + +export const NOTIFICATION_STATE_UPDATE = "update"; + +export abstract class NotificationState extends EventEmitter implements IDestroyable { + protected _symbol: string; + protected _count: number; + protected _color: NotificationColor; + + public get symbol(): string { + return this._symbol; + } + + public get count(): number { + return this._count; + } + + public get color(): NotificationColor { + return this._color; + } + + public get isIdle(): boolean { + return this.color <= NotificationColor.None; + } + + public get isUnread(): boolean { + return this.color >= NotificationColor.Bold; + } + + public get hasUnreadCount(): boolean { + return this.color >= NotificationColor.Grey && (!!this.count || !!this.symbol); + } + + public get hasMentions(): boolean { + return this.color >= NotificationColor.Red; + } + + protected emitIfUpdated(snapshot: NotificationStateSnapshot) { + if (snapshot.isDifferentFrom(this)) { + this.emit(NOTIFICATION_STATE_UPDATE); + } + } + + protected snapshot(): NotificationStateSnapshot { + return new NotificationStateSnapshot(this); + } + + public destroy(): void { + this.removeAllListeners(NOTIFICATION_STATE_UPDATE); + } +} + +export class NotificationStateSnapshot { + private readonly symbol: string; + private readonly count: number; + private readonly color: NotificationColor; + + constructor(state: NotificationState) { + this.symbol = state.symbol; + this.count = state.count; + this.color = state.color; + } + + public isDifferentFrom(other: NotificationState): boolean { + const before = {count: this.count, symbol: this.symbol, color: this.color}; + const after = {count: other.count, symbol: other.symbol, color: other.color}; + return JSON.stringify(before) !== JSON.stringify(after); + } +} diff --git a/src/stores/notifications/RoomNotificationState.ts b/src/stores/notifications/RoomNotificationState.ts index 51355a2d4d..ab354c0e93 100644 --- a/src/stores/notifications/RoomNotificationState.ts +++ b/src/stores/notifications/RoomNotificationState.ts @@ -14,8 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { EventEmitter } from "events"; -import { INotificationState, NOTIFICATION_STATE_UPDATE } from "./INotificationState"; import { NotificationColor } from "./NotificationColor"; import { IDestroyable } from "../../utils/IDestroyable"; import { MatrixClientPeg } from "../../MatrixClientPeg"; @@ -25,12 +23,9 @@ import { MatrixEvent } from "matrix-js-sdk/src/models/event"; import { Room } from "matrix-js-sdk/src/models/room"; import * as RoomNotifs from '../../RoomNotifs'; import * as Unread from '../../Unread'; +import { NotificationState } from "./NotificationState"; -export class RoomNotificationState extends EventEmitter implements IDestroyable, INotificationState { - private _symbol: string; - private _count: number; - private _color: NotificationColor; - +export class RoomNotificationState extends NotificationState implements IDestroyable { constructor(public readonly room: Room) { super(); this.room.on("Room.receipt", this.handleReadReceipt); @@ -41,23 +36,12 @@ export class RoomNotificationState extends EventEmitter implements IDestroyable, this.updateNotificationState(); } - public get symbol(): string { - return this._symbol; - } - - public get count(): number { - return this._count; - } - - public get color(): NotificationColor { - return this._color; - } - private get roomIsInvite(): boolean { return getEffectiveMembership(this.room.getMyMembership()) === EffectiveMembership.Invite; } public destroy(): void { + super.destroy(); this.room.removeListener("Room.receipt", this.handleReadReceipt); this.room.removeListener("Room.timeline", this.handleRoomEventUpdate); this.room.removeListener("Room.redaction", this.handleRoomEventUpdate); @@ -87,7 +71,7 @@ export class RoomNotificationState extends EventEmitter implements IDestroyable, }; private updateNotificationState() { - const before = {count: this.count, symbol: this.symbol, color: this.color}; + const snapshot = this.snapshot(); if (RoomNotifs.getRoomNotifsState(this.room.roomId) === RoomNotifs.MUTE) { // When muted we suppress all notification states, even if we have context on them. @@ -136,9 +120,6 @@ export class RoomNotificationState extends EventEmitter implements IDestroyable, } // finally, publish an update if needed - const after = {count: this.count, symbol: this.symbol, color: this.color}; - if (JSON.stringify(before) !== JSON.stringify(after)) { - this.emit(NOTIFICATION_STATE_UPDATE); - } + this.emitIfUpdated(snapshot); } } diff --git a/src/stores/notifications/RoomNotificationStateStore.ts b/src/stores/notifications/RoomNotificationStateStore.ts new file mode 100644 index 0000000000..311dcdf2d6 --- /dev/null +++ b/src/stores/notifications/RoomNotificationStateStore.ts @@ -0,0 +1,101 @@ +/* +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 { ActionPayload } from "../../dispatcher/payloads"; +import { AsyncStoreWithClient } from "../AsyncStoreWithClient"; +import defaultDispatcher from "../../dispatcher/dispatcher"; +import { DefaultTagID, TagID } from "../room-list/models"; +import { FetchRoomFn, ListNotificationState } from "./ListNotificationState"; +import { Room } from "matrix-js-sdk/src/models/room"; +import { RoomNotificationState } from "./RoomNotificationState"; +import { TagSpecificNotificationState } from "./TagSpecificNotificationState"; + +const INSPECIFIC_TAG = "INSPECIFIC_TAG"; +type INSPECIFIC_TAG = "INSPECIFIC_TAG"; + +interface IState {} + +export class RoomNotificationStateStore extends AsyncStoreWithClient { + private static internalInstance = new RoomNotificationStateStore(); + + private roomMap = new Map>(); + + private constructor() { + super(defaultDispatcher, {}); + } + + /** + * Creates a new list notification state. The consumer is expected to set the rooms + * on the notification state, and destroy the state when it no longer needs it. + * @param tagId The tag to create the notification state for. + * @returns The notification state for the tag. + */ + public getListState(tagId: TagID): ListNotificationState { + // Note: we don't cache these notification states as the consumer is expected to call + // .setRooms() on the returned object, which could confuse other consumers. + + // TODO: Update if/when invites move out of the room list. + const useTileCount = tagId === DefaultTagID.Invite; + const getRoomFn: FetchRoomFn = (room: Room) => { + return this.getRoomState(room, tagId); + }; + return new ListNotificationState(useTileCount, tagId, getRoomFn); + } + + /** + * Gets a copy of the notification state for a room. The consumer should not + * attempt to destroy the returned state as it may be shared with other + * consumers. + * @param room The room to get the notification state for. + * @param inTagId Optional tag ID to scope the notification state to. + * @returns The room's notification state. + */ + public getRoomState(room: Room, inTagId?: TagID): RoomNotificationState { + if (!this.roomMap.has(room)) { + this.roomMap.set(room, new Map()); + } + + const targetTag = inTagId ? inTagId : INSPECIFIC_TAG; + + const forRoomMap = this.roomMap.get(room); + if (!forRoomMap.has(targetTag)) { + if (inTagId) { + forRoomMap.set(inTagId, new TagSpecificNotificationState(room, inTagId)); + } else { + forRoomMap.set(INSPECIFIC_TAG, new RoomNotificationState(room)); + } + } + + return forRoomMap.get(targetTag); + } + + public static get instance(): RoomNotificationStateStore { + return RoomNotificationStateStore.internalInstance; + } + + protected async onNotReady(): Promise { + for (const roomMap of this.roomMap.values()) { + for (const roomState of roomMap.values()) { + roomState.destroy(); + } + } + } + + // We don't need this, but our contract says we do. + protected async onAction(payload: ActionPayload) { + return Promise.resolve(); + } +} diff --git a/src/stores/notifications/StaticNotificationState.ts b/src/stores/notifications/StaticNotificationState.ts index 51902688fe..0392ed3716 100644 --- a/src/stores/notifications/StaticNotificationState.ts +++ b/src/stores/notifications/StaticNotificationState.ts @@ -14,13 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { EventEmitter } from "events"; -import { INotificationState } from "./INotificationState"; import { NotificationColor } from "./NotificationColor"; +import { NotificationState } from "./NotificationState"; -export class StaticNotificationState extends EventEmitter implements INotificationState { - constructor(public symbol: string, public count: number, public color: NotificationColor) { +export class StaticNotificationState extends NotificationState { + constructor(symbol: string, count: number, color: NotificationColor) { super(); + this._symbol = symbol; + this._count = count; + this._color = color; } public static forCount(count: number, color: NotificationColor): StaticNotificationState { From 545f11d742db110325a579c673de6f3ebcb08393 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 8 Jul 2020 22:23:51 -0600 Subject: [PATCH 0813/1504] Convert devtools dialog to use new room state format --- src/components/views/dialogs/DevtoolsDialog.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/views/dialogs/DevtoolsDialog.js b/src/components/views/dialogs/DevtoolsDialog.js index 08817cdfee..b3f9ef4537 100644 --- a/src/components/views/dialogs/DevtoolsDialog.js +++ b/src/components/views/dialogs/DevtoolsDialog.js @@ -412,13 +412,13 @@ class RoomStateExplorer extends React.PureComponent { if (this.state.eventType === null) { list = { - Object.keys(this.roomStateEvents).map((evType) => { - const stateGroup = this.roomStateEvents[evType]; - const stateKeys = Object.keys(stateGroup); + Array.from(this.roomStateEvents.keys()).map((evType) => { + const stateGroup = this.roomStateEvents.get(evType); + const stateKeys = Array.from(stateGroup.keys()); let onClickFn; if (stateKeys.length === 1 && stateKeys[0] === '') { - onClickFn = this.onViewSourceClick(stateGroup[stateKeys[0]]); + onClickFn = this.onViewSourceClick(stateGroup.get(stateKeys[0])); } else { onClickFn = this.browseEventType(evType); } @@ -430,12 +430,12 @@ class RoomStateExplorer extends React.PureComponent { } ; } else { - const stateGroup = this.roomStateEvents[this.state.eventType]; + const stateGroup = this.roomStateEvents.get(this.state.eventType); list = { - Object.keys(stateGroup).map((stateKey) => { - const ev = stateGroup[stateKey]; + Array.from(stateGroup.keys()).map((stateKey) => { + const ev = stateGroup.get(stateKey); return ; From 0d53521e8399926c92cf2fa7c85fe52444d0be25 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Jul 2020 14:48:15 +0200 Subject: [PATCH 0814/1504] dark theme WIP --- .../element-dark/css/_element-dark.scss | 281 ++++++++++++++++++ res/themes/element-dark/css/element-dark.scss | 7 + src/theme.js | 1 + 3 files changed, 289 insertions(+) create mode 100644 res/themes/element-dark/css/_element-dark.scss create mode 100644 res/themes/element-dark/css/element-dark.scss diff --git a/res/themes/element-dark/css/_element-dark.scss b/res/themes/element-dark/css/_element-dark.scss new file mode 100644 index 0000000000..bc54a8bef3 --- /dev/null +++ b/res/themes/element-dark/css/_element-dark.scss @@ -0,0 +1,281 @@ +// unified palette +// try to use these colors when possible +$bg-color: #181b21; +$base-color: #15171b; +$base-text-color: #edf3ff; +$header-panel-bg-color: #22262e; +$header-panel-border-color: #000000; +$header-panel-text-primary-color: #a1b2d1; +$header-panel-text-secondary-color: #c8c8cd; +$text-primary-color: #edf3ff; +$text-secondary-color: #a1b2d1; +$search-bg-color: #181b21; +$search-placeholder-color: #61708b; +$room-highlight-color: #343a46; + +// typical text (dark-on-white in light skin) +$primary-fg-color: $text-primary-color; +$primary-bg-color: $bg-color; +$muted-fg-color: $header-panel-text-primary-color; + +// used for dialog box text +$light-fg-color: $header-panel-text-secondary-color; + +// used for focusing form controls +$focus-bg-color: $room-highlight-color; + +$mention-user-pill-bg-color: $warning-color; +$other-user-pill-bg-color: $room-highlight-color; +$rte-room-pill-color: $room-highlight-color; +$rte-group-pill-color: $room-highlight-color; + +// informational plinth +$info-plinth-bg-color: $header-panel-bg-color; +$info-plinth-fg-color: #888; + +$preview-bar-bg-color: $header-panel-bg-color; + +$tagpanel-bg-color: #15171bd1; +$inverted-bg-color: $tagpanel-bg-color; + +// used by AddressSelector +$selected-color: $room-highlight-color; + +// selected for hoverover & selected event tiles +$event-selected-color: $header-panel-bg-color; + +// used for the hairline dividers in RoomView +$primary-hairline-color: transparent; + +// used for the border of input text fields +$input-border-color: #e7e7e7; +$input-darker-bg-color: $search-bg-color; +$input-darker-fg-color: $search-placeholder-color; +$input-lighter-bg-color: #f2f5f8; +$input-lighter-fg-color: $input-darker-fg-color; +$input-focused-border-color: #238cf5; +$input-valid-border-color: $accent-color; +$input-invalid-border-color: $warning-color; + +$field-focused-label-bg-color: $bg-color; + +// scrollbars +$scrollbar-thumb-color: rgba(255, 255, 255, 0.2); +$scrollbar-track-color: transparent; + +// context menus +$menu-border-color: $header-panel-border-color; +$menu-bg-color: $header-panel-bg-color; +$menu-box-shadow-color: $bg-color; +$menu-selected-color: $room-highlight-color; + +$avatar-initial-color: #ffffff; +$avatar-bg-color: $bg-color; + +$h3-color: $primary-fg-color; + +$dialog-title-fg-color: $base-text-color; +$dialog-backdrop-color: #000; +$dialog-shadow-color: rgba(0, 0, 0, 0.48); +$dialog-close-fg-color: #9fa9ba; + +$dialog-background-bg-color: $header-panel-bg-color; +$lightbox-background-bg-color: #000; + +$settings-grey-fg-color: #a2a2a2; +$settings-profile-placeholder-bg-color: #e7e7e7; +$settings-profile-overlay-bg-color: #000; +$settings-profile-overlay-placeholder-bg-color: transparent; +$settings-profile-overlay-fg-color: #fff; +$settings-profile-overlay-placeholder-fg-color: #454545; +$settings-subsection-fg-color: $text-secondary-color; + +$topleftmenu-color: $text-primary-color; +$roomheader-color: $text-primary-color; +$roomheader-addroom-bg-color: #3c4556; // $search-placeholder-color at 0.5 opacity +$roomheader-addroom-fg-color: $text-primary-color; +$tagpanel-button-color: $header-panel-text-primary-color; +$roomheader-button-color: $header-panel-text-primary-color; +$groupheader-button-color: $header-panel-text-primary-color; +$rightpanel-button-color: $header-panel-text-primary-color; +$composer-button-color: $header-panel-text-primary-color; +$roomtopic-color: $text-secondary-color; +$eventtile-meta-color: $roomtopic-color; + +$header-divider-color: $header-panel-text-primary-color; + +// ******************** + +// V2 Room List +// TODO: Remove the 2 from all of these when the new list takes over + +$theme-button-bg-color: #e3e8f0; + +$roomlist2-button-bg-color: #1A1D23; // Buttons include the filter box, explore button, and sublist buttons +$roomlist2-bg-color: #21262ceb; + +$roomsublist2-divider-color: $primary-fg-color; + +$roomtile2-preview-color: #9e9e9e; +$roomtile2-default-badge-bg-color: #61708b; +$roomtile2-selected-bg-color: #1A1D23; + +// ******************** + +$roomtile-name-color: $header-panel-text-primary-color; +$roomtile-selected-color: $text-primary-color; +$roomtile-notified-color: $text-primary-color; +$roomtile-selected-bg-color: $room-highlight-color; +$roomtile-focused-bg-color: $room-highlight-color; + +$roomtile-transparent-focused-color: rgba(0, 0, 0, 0.1); + +$panel-divider-color: transparent; + +$widget-menu-bar-bg-color: $header-panel-bg-color; + +// event tile lifecycle +$event-sending-color: $text-secondary-color; + +// event redaction +$event-redacted-fg-color: #606060; +$event-redacted-border-color: #000000; + +$event-highlight-fg-color: $warning-color; +$event-highlight-bg-color: #25271F; + +// event timestamp +$event-timestamp-color: $text-secondary-color; + +// Tabbed views +$tab-label-fg-color: $text-primary-color; +$tab-label-active-fg-color: $text-primary-color; +$tab-label-bg-color: transparent; +$tab-label-active-bg-color: $accent-color; +$tab-label-icon-bg-color: $text-primary-color; +$tab-label-active-icon-bg-color: $text-primary-color; + +// Buttons +$button-primary-fg-color: #ffffff; +$button-primary-bg-color: $accent-color; +$button-secondary-bg-color: transparent; +$button-danger-fg-color: #ffffff; +$button-danger-bg-color: $notice-primary-color; +$button-danger-disabled-fg-color: #ffffff; +$button-danger-disabled-bg-color: #f5b6bb; // TODO: Verify color +$button-link-fg-color: $accent-color; +$button-link-bg-color: transparent; + +// Toggle switch +$togglesw-off-color: $room-highlight-color; + +$visual-bell-bg-color: #800; + +$room-warning-bg-color: $header-panel-bg-color; + +$dark-panel-bg-color: $header-panel-bg-color; +$panel-gradient: rgba(34, 38, 46, 0), rgba(34, 38, 46, 1); + +$message-action-bar-bg-color: $header-panel-bg-color; +$message-action-bar-fg-color: $header-panel-text-primary-color; +$message-action-bar-border-color: #616b7f; +$message-action-bar-hover-border-color: $header-panel-text-primary-color; + +$reaction-row-button-bg-color: $header-panel-bg-color; +$reaction-row-button-border-color: #616b7f; +$reaction-row-button-hover-border-color: $header-panel-text-primary-color; +$reaction-row-button-selected-bg-color: #1f6954; +$reaction-row-button-selected-border-color: $accent-color; + +$kbd-border-color: #000000; + +$tooltip-timeline-bg-color: $tagpanel-bg-color; +$tooltip-timeline-fg-color: #ffffff; + +$interactive-tooltip-bg-color: $base-color; +$interactive-tooltip-fg-color: #ffffff; + +$breadcrumb-placeholder-bg-color: #272c35; + +$user-tile-hover-bg-color: $header-panel-bg-color; + +// Appearance tab colors +$appearance-tab-border-color: $room-highlight-color; + +// ***** Mixins! ***** + +@define-mixin mx_DialogButton { + /* align images in buttons (eg spinners) */ + vertical-align: middle; + border: 0px; + border-radius: 4px; + font-family: $font-family; + font-size: $font-14px; + color: $button-fg-color; + background-color: $button-bg-color; + width: auto; + padding: 7px; + padding-left: 1.5em; + padding-right: 1.5em; + cursor: pointer; + display: inline-block; + outline: none; +} + +@define-mixin mx_DialogButton_danger { + background-color: $accent-color; +} + +@define-mixin mx_DialogButton_secondary { + // flip colours for the secondary ones + font-weight: 600; + border: 1px solid $accent-color ! important; + color: $accent-color; + background-color: $button-secondary-bg-color; +} + +@define-mixin mx_Dialog_link { + color: $accent-color; + text-decoration: none; +} + +// Nasty hacks to apply a filter to arbitrary monochrome artwork to make it +// better match the theme. Typically applied to dark grey 'off' buttons or +// light grey 'on' buttons. +.mx_filterFlipColor { + filter: invert(1); +} + +// markdown overrides: +.mx_EventTile_content .markdown-body pre:hover { + border-color: #808080 !important; // inverted due to rules below +} +.mx_EventTile_content .markdown-body { + pre, code { + filter: invert(1); + } + + pre code { + filter: none; + } + + table { + tr { + background-color: #000000; + } + + tr:nth-child(2n) { + background-color: #080808; + } + } +} + +// diff highlight colors +// intentionally swapped to avoid inversion +.hljs-addition { + background: #fdd; +} + +.hljs-deletion { + background: #dfd; +} diff --git a/res/themes/element-dark/css/element-dark.scss b/res/themes/element-dark/css/element-dark.scss new file mode 100644 index 0000000000..5aefac5881 --- /dev/null +++ b/res/themes/element-dark/css/element-dark.scss @@ -0,0 +1,7 @@ +@import "../../../../res/css/_font-sizes.scss"; +@import "../../element/css/_paths.scss"; +@import "../../element/css/_fonts.scss"; +@import "../../element/css/_element.scss"; +@import "../../element/css/_mods.scss"; +@import "_element-dark.scss"; +@import "../../../../res/css/_components.scss"; diff --git a/src/theme.js b/src/theme.js index 4809a00796..7babf31cc0 100644 --- a/src/theme.js +++ b/src/theme.js @@ -27,6 +27,7 @@ export function enumerateThemes() { "light": _t("Light"), "dark": _t("Dark"), "element": _t("Element Light"), + "element-dark": _t("Element Dark"), }; const customThemes = SettingsStore.getValue("custom_themes"); const customThemeNames = {}; From 1033eda7fb8ca7ab4187e7c5a2a8ee080319522a Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Thu, 9 Jul 2020 15:54:44 +0100 Subject: [PATCH 0815/1504] Move irc layout option to advanced --- .../settings/tabs/user/AppearanceUserSettingsTab.tsx | 7 ++++++- src/i18n/strings/en_EN.json | 3 +-- src/settings/Settings.js | 8 +------- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx index 9bed2fb039..3cb0028f45 100644 --- a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx @@ -402,6 +402,12 @@ export default class AppearanceUserSettingsTab extends React.Component + this.setState({useIRCLayout: checked})} + /> {this.renderThemeSection()} {SettingsStore.isFeatureEnabled("feature_font_scaling") ? this.renderFontSection() : null} - {SettingsStore.isFeatureEnabled("feature_irc_ui") ? this.renderLayoutSection() : null} {this.renderAdvancedSection()}
    ); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index a38d87d08e..fb97bfa26c 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -489,7 +489,6 @@ "Try out new ways to ignore people (experimental)": "Try out new ways to ignore people (experimental)", "Use the improved room list (will refresh to apply changes)": "Use the improved room list (will refresh to apply changes)", "Support adding custom themes": "Support adding custom themes", - "Enable IRC layout option in the appearance tab": "Enable IRC layout option in the appearance tab", "Show info about bridges in room settings": "Show info about bridges in room settings", "Font size": "Font size", "Use custom size": "Use custom size", @@ -539,7 +538,7 @@ "How fast should messages be downloaded.": "How fast should messages be downloaded.", "Manually verify all remote sessions": "Manually verify all remote sessions", "IRC display name width": "IRC display name width", - "Use IRC layout": "Use IRC layout", + "Enable experimental, compact IRC style layout": "Enable experimental, compact IRC style layout", "Collecting app version information": "Collecting app version information", "Collecting logs": "Collecting logs", "Uploading report": "Uploading report", diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 0011ecfccd..5f84b11247 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -159,12 +159,6 @@ export const SETTINGS = { supportedLevels: LEVELS_FEATURE, default: false, }, - "feature_irc_ui": { - supportedLevels: LEVELS_ACCOUNT_SETTINGS, - displayName: _td('Enable IRC layout option in the appearance tab'), - default: false, - isFeature: true, - }, "mjolnirRooms": { supportedLevels: ['account'], default: [], @@ -574,7 +568,7 @@ export const SETTINGS = { }, "useIRCLayout": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, - displayName: _td("Use IRC layout"), + displayName: _td("Enable experimental, compact IRC style layout"), default: false, }, }; From ae09bfb8fdfc93f9e74461fe91d7fca1a9734748 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 9 Jul 2020 10:22:04 -0600 Subject: [PATCH 0816/1504] Don't destroy room notification states when replacing them The "should never happen" now happens a lot by design. We shouldn't destroy the state as it'll stop badge counts for everything. Fixes https://github.com/vector-im/riot-web/issues/14391 --- src/stores/notifications/ListNotificationState.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/stores/notifications/ListNotificationState.ts b/src/stores/notifications/ListNotificationState.ts index 6c5f6fc6dd..6c67dbdd08 100644 --- a/src/stores/notifications/ListNotificationState.ts +++ b/src/stores/notifications/ListNotificationState.ts @@ -55,11 +55,6 @@ export class ListNotificationState extends NotificationState { for (const newRoom of diff.added) { const state = this.getRoomFn(newRoom); state.on(NOTIFICATION_STATE_UPDATE, this.onRoomNotificationStateUpdate); - if (this.states[newRoom.roomId]) { - // "Should never happen" disclaimer. - console.warn("Overwriting notification state for room:", newRoom.roomId); - this.states[newRoom.roomId].destroy(); - } this.states[newRoom.roomId] = state; } From 74fa3b2c8148eb082c052c88741b78d19cc9d10f Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 9 Jul 2020 10:39:53 -0600 Subject: [PATCH 0817/1504] Fix rough badge alignment for community invite tiles again Fixes https://github.com/vector-im/riot-web/issues/14392 --- res/css/views/avatars/_DecoratedRoomAvatar.scss | 2 +- res/css/views/rooms/_RoomTile2.scss | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/res/css/views/avatars/_DecoratedRoomAvatar.scss b/res/css/views/avatars/_DecoratedRoomAvatar.scss index b500d44a43..900f351074 100644 --- a/res/css/views/avatars/_DecoratedRoomAvatar.scss +++ b/res/css/views/avatars/_DecoratedRoomAvatar.scss @@ -24,7 +24,7 @@ limitations under the License. right: 0; } - .mx_NotificationBadge { + .mx_NotificationBadge, .mx_RoomTile2_badgeContainer { position: absolute; top: 0; right: 0; diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index b9e0398e7d..d2d394e266 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -89,7 +89,6 @@ limitations under the License. height: 16px; // don't set width so that it takes no space when there is no badge to show margin: auto 0; // vertically align - position: relative; // fixes badge alignment in some scenarios // Create a flexbox to make aligning dot badges easier display: flex; From eb706951dbd62546d2288841d879bc06749ecbba Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Jul 2020 19:15:44 +0200 Subject: [PATCH 0818/1504] dark theme color adjustments --- .../element-dark/css/_element-dark.scss | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/res/themes/element-dark/css/_element-dark.scss b/res/themes/element-dark/css/_element-dark.scss index bc54a8bef3..85a8639edb 100644 --- a/res/themes/element-dark/css/_element-dark.scss +++ b/res/themes/element-dark/css/_element-dark.scss @@ -1,14 +1,14 @@ // unified palette // try to use these colors when possible $bg-color: #181b21; -$base-color: #15171b; -$base-text-color: #edf3ff; +$base-color: #15191E; +$base-text-color: #ffffff; $header-panel-bg-color: #22262e; $header-panel-border-color: #000000; -$header-panel-text-primary-color: #a1b2d1; +$header-panel-text-primary-color: #B9BEC6; $header-panel-text-secondary-color: #c8c8cd; -$text-primary-color: #edf3ff; -$text-secondary-color: #a1b2d1; +$text-primary-color: #ffffff; +$text-secondary-color: #B9BEC6; $search-bg-color: #181b21; $search-placeholder-color: #61708b; $room-highlight-color: #343a46; @@ -35,8 +35,8 @@ $info-plinth-fg-color: #888; $preview-bar-bg-color: $header-panel-bg-color; -$tagpanel-bg-color: #15171bd1; -$inverted-bg-color: $tagpanel-bg-color; +$tagpanel-bg-color: rgba(44, 50, 56, 0.92); +$inverted-bg-color: $base-color; // used by AddressSelector $selected-color: $room-highlight-color; @@ -111,14 +111,14 @@ $header-divider-color: $header-panel-text-primary-color; $theme-button-bg-color: #e3e8f0; -$roomlist2-button-bg-color: #1A1D23; // Buttons include the filter box, explore button, and sublist buttons -$roomlist2-bg-color: #21262ceb; +$roomlist2-button-bg-color: rgba(141, 151, 165, 0.2); // Buttons include the filter box, explore button, and sublist buttons +$roomlist2-bg-color: rgba(33, 38, 44, 0.92); $roomsublist2-divider-color: $primary-fg-color; -$roomtile2-preview-color: #9e9e9e; +$roomtile2-preview-color: #A9B2BC; $roomtile2-default-badge-bg-color: #61708b; -$roomtile2-selected-bg-color: #1A1D23; +$roomtile2-selected-bg-color: rgba(141, 151, 165, 0.2); // ******************** From c0d2e297206e558c313cddf015b14ea316622452 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Jul 2020 19:16:30 +0200 Subject: [PATCH 0819/1504] add theme variable for room header background color --- res/css/views/rooms/_RoomHeader.scss | 1 + res/themes/element-dark/css/_element-dark.scss | 1 + res/themes/element/css/_element.scss | 1 + res/themes/light/css/_light.scss | 1 + 4 files changed, 4 insertions(+) diff --git a/res/css/views/rooms/_RoomHeader.scss b/res/css/views/rooms/_RoomHeader.scss index c3c7ff0278..90dd89064e 100644 --- a/res/css/views/rooms/_RoomHeader.scss +++ b/res/css/views/rooms/_RoomHeader.scss @@ -17,6 +17,7 @@ limitations under the License. .mx_RoomHeader { flex: 0 0 52px; border-bottom: 1px solid $primary-hairline-color; + background-color: $roomheader-bg-color; .mx_E2EIcon { margin: 0; diff --git a/res/themes/element-dark/css/_element-dark.scss b/res/themes/element-dark/css/_element-dark.scss index 85a8639edb..631852c8bf 100644 --- a/res/themes/element-dark/css/_element-dark.scss +++ b/res/themes/element-dark/css/_element-dark.scss @@ -92,6 +92,7 @@ $settings-subsection-fg-color: $text-secondary-color; $topleftmenu-color: $text-primary-color; $roomheader-color: $text-primary-color; +$roomheader-bg-color: rgba(21, 25, 30, 0.6); $roomheader-addroom-bg-color: #3c4556; // $search-placeholder-color at 0.5 opacity $roomheader-addroom-fg-color: $text-primary-color; $tagpanel-button-color: $header-panel-text-primary-color; diff --git a/res/themes/element/css/_element.scss b/res/themes/element/css/_element.scss index 57995ff999..e880088b62 100644 --- a/res/themes/element/css/_element.scss +++ b/res/themes/element/css/_element.scss @@ -157,6 +157,7 @@ $rte-group-pill-color: #aaa; $topleftmenu-color: #212121; $roomheader-color: #45474a; +$roomheader-bg-color: $primary-bg-color; $roomheader-addroom-bg-color: #c9ced9; $roomheader-addroom-fg-color: #5c6470; $tagpanel-button-color: #91A1C0; diff --git a/res/themes/light/css/_light.scss b/res/themes/light/css/_light.scss index 70b4983cf4..86d5fbd3ca 100644 --- a/res/themes/light/css/_light.scss +++ b/res/themes/light/css/_light.scss @@ -158,6 +158,7 @@ $rte-group-pill-color: #aaa; $topleftmenu-color: #212121; $roomheader-color: #45474a; +$roomheader-bg-color: $primary-bg-color; $roomheader-addroom-bg-color: #91a1c0; $roomheader-addroom-fg-color: $accent-fg-color; $tagpanel-button-color: #91a1c0; From 00f0f6dd3490d8c30beaacf6996d5c0cf0d88b9d Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Jul 2020 19:17:34 +0200 Subject: [PATCH 0820/1504] add color for room list header color --- res/css/views/rooms/_RoomSublist2.scss | 1 + res/themes/element-dark/css/_element-dark.scss | 1 + res/themes/element/css/_element.scss | 2 +- res/themes/light/css/_light.scss | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 2af3b918b9..ee4ca5d320 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -44,6 +44,7 @@ limitations under the License. // to work correctly. padding-bottom: 8px; height: 24px; + color: $roomlist2-header-color; // Hide the header container if the contained element is stickied. // We don't use display:none as that causes the header to go away too. diff --git a/res/themes/element-dark/css/_element-dark.scss b/res/themes/element-dark/css/_element-dark.scss index 631852c8bf..6e9ac98ed2 100644 --- a/res/themes/element-dark/css/_element-dark.scss +++ b/res/themes/element-dark/css/_element-dark.scss @@ -115,6 +115,7 @@ $theme-button-bg-color: #e3e8f0; $roomlist2-button-bg-color: rgba(141, 151, 165, 0.2); // Buttons include the filter box, explore button, and sublist buttons $roomlist2-bg-color: rgba(33, 38, 44, 0.92); +$roomlist2-header-color: #8E99A4; $roomsublist2-divider-color: $primary-fg-color; $roomtile2-preview-color: #A9B2BC; diff --git a/res/themes/element/css/_element.scss b/res/themes/element/css/_element.scss index e880088b62..f04d931f31 100644 --- a/res/themes/element/css/_element.scss +++ b/res/themes/element/css/_element.scss @@ -180,7 +180,7 @@ $theme-button-bg-color: #e3e8f0; $roomlist2-button-bg-color: #fff; // Buttons include the filter box, explore button, and sublist buttons $roomlist2-bg-color: #f3f8fde8; - +$roomlist2-header-color: $primary-fg-color; $roomsublist2-divider-color: $primary-fg-color; $roomtile2-preview-color: #9e9e9e; diff --git a/res/themes/light/css/_light.scss b/res/themes/light/css/_light.scss index 86d5fbd3ca..9ce2c9a980 100644 --- a/res/themes/light/css/_light.scss +++ b/res/themes/light/css/_light.scss @@ -181,7 +181,7 @@ $theme-button-bg-color: #e3e8f0; $roomlist2-button-bg-color: #fff; // Buttons include the filter box, explore button, and sublist buttons $roomlist2-bg-color: $header-panel-bg-color; - +$roomlist2-header-color: $primary-fg-color; $roomsublist2-divider-color: $primary-fg-color; $roomtile2-preview-color: #9e9e9e; From b95b26d19b0359efb75d01e92cac5b0eabeb15d4 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Jul 2020 19:17:47 +0200 Subject: [PATCH 0821/1504] change border radius for selected room tile --- res/css/views/rooms/_RoomTile2.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index 1d010eb243..7d13e6ca2f 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -33,7 +33,7 @@ limitations under the License. &:focus-within, &.mx_RoomTile2_hasMenuOpen { background-color: $roomtile2-selected-bg-color; - border-radius: 32px; + border-radius: 8px; } .mx_DecoratedRoomAvatar, .mx_RoomTile2_avatarContainer { From c2d4e45495845bb0c3b6ada7a395d8dbcda3286d Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Jul 2020 19:19:19 +0200 Subject: [PATCH 0822/1504] theme name translation --- src/i18n/strings/en_EN.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 18ad909af3..486c95c8ea 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -301,6 +301,7 @@ "Light": "Light", "Dark": "Dark", "Element Light": "Element Light", + "Element Dark": "Element Dark", "You signed in to a new session without verifying it:": "You signed in to a new session without verifying it:", "Verify your other session using one of the options below.": "Verify your other session using one of the options below.", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) signed in to a new session without verifying it:", From ade89ab4e90cf8882a68445f110e3e83f715a5e7 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Thu, 9 Jul 2020 18:32:28 +0100 Subject: [PATCH 0823/1504] Move sublist auto expand to out from layouts Co-authored-by: Travis Ralston --- src/components/views/rooms/RoomList2.tsx | 14 ++-------- src/components/views/rooms/RoomSublist2.tsx | 31 +++++++++++++-------- src/stores/room-list/ListLayout.ts | 12 -------- 3 files changed, 22 insertions(+), 35 deletions(-) diff --git a/src/components/views/rooms/RoomList2.tsx b/src/components/views/rooms/RoomList2.tsx index 5cb60655ce..79f6ed0d10 100644 --- a/src/components/views/rooms/RoomList2.tsx +++ b/src/components/views/rooms/RoomList2.tsx @@ -191,18 +191,7 @@ export default class RoomList2 extends React.Component { show_room_tile: true, // to make sure the room gets scrolled into view }); } - } else if (payload.action === Action.StartRoomFilter) { - this.state.layouts.forEach(x => { - x.saveCollapsedState(); - x.isCollapsed = false; - }); - this.forceUpdate(); - } else if (payload.action === Action.StopRoomFilter) { - this.state.layouts.forEach(x => { - x.restoreCollapsedState(); - }); - this.forceUpdate(); - } + } }; private getRoomDelta = (roomId: string, delta: number, unread = false) => { @@ -304,6 +293,7 @@ export default class RoomList2 extends React.Component { isMinimized={this.props.isMinimized} onResize={this.props.onResize} extraBadTilesThatShouldntExist={extraTiles} + isFiltered={!!this.searchFilter.search} /> ); } diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index c3ac85e2de..e7deca2543 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -47,6 +47,7 @@ import { Direction } from "re-resizable/lib/resizer"; import { polyfillTouchEvent } from "../../../@types/polyfill"; import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore"; import RoomListLayoutStore from "../../../stores/room-list/RoomListLayoutStore"; +import { Action } from "../../../dispatcher/actions"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -78,6 +79,7 @@ interface IProps { isMinimized: boolean; tagId: TagID; onResize: () => void; + isFiltered: boolean; // TODO: Don't use this. It's for community invites, and community invites shouldn't be here. // You should feel bad if you use this. @@ -92,6 +94,7 @@ interface IState { notificationState: ListNotificationState; contextMenuPosition: PartialDOMRect; isResizing: boolean; + isExpanded: boolean; // used for the for expand of the sublist when the room list is being filtered } export default class RoomSublist2 extends React.Component { @@ -109,6 +112,7 @@ export default class RoomSublist2 extends React.Component { notificationState: RoomNotificationStateStore.instance.getListState(this.props.tagId), contextMenuPosition: null, isResizing: false, + isExpanded: this.props.isFiltered ? this.props.isFiltered : !this.layout.isCollapsed }; this.state.notificationState.setRooms(this.props.rooms); this.dispatcherRef = defaultDispatcher.register(this.onAction); @@ -123,8 +127,15 @@ export default class RoomSublist2 extends React.Component { return Math.min(nVisible, this.numTiles); } - public componentDidUpdate() { + public componentDidUpdate(prevProps: Readonly) { this.state.notificationState.setRooms(this.props.rooms); + if (prevProps.isFiltered !== this.props.isFiltered) { + if (this.props.isFiltered) { + this.setState({isExpanded: true}); + } else { + this.setState({isExpanded: !this.layout.isCollapsed}); + } + } } public componentWillUnmount() { @@ -137,10 +148,9 @@ export default class RoomSublist2 extends React.Component { // XXX: we have to do this a tick later because we have incorrect intermediate props during a room change // where we lose the room we are changing from temporarily and then it comes back in an update right after. setImmediate(() => { - const isCollapsed = this.layout.isCollapsed; const roomIndex = this.props.rooms.findIndex((r) => r.roomId === payload.room_id); - if (isCollapsed && roomIndex > -1) { + if (!this.state.isExpanded && roomIndex > -1) { this.toggleCollapsed(); } // extend the visible section to include the room if it is entirely invisible @@ -295,24 +305,23 @@ export default class RoomSublist2 extends React.Component { }; private toggleCollapsed = () => { - this.layout.isCollapsed = !this.layout.isCollapsed; - this.forceUpdate(); // because the layout doesn't trigger an update + this.layout.isCollapsed = this.state.isExpanded; + this.setState({isExpanded: !this.layout.isCollapsed}); setImmediate(() => this.props.onResize()); // needs to happen when the DOM is updated }; private onHeaderKeyDown = (ev: React.KeyboardEvent) => { - const isCollapsed = this.layout && this.layout.isCollapsed; switch (ev.key) { case Key.ARROW_LEFT: ev.stopPropagation(); - if (!isCollapsed) { + if (this.state.isExpanded) { // On ARROW_LEFT collapse the room sublist if it isn't already this.toggleCollapsed(); } break; case Key.ARROW_RIGHT: { ev.stopPropagation(); - if (isCollapsed) { + if (!this.state.isExpanded) { // On ARROW_RIGHT expand the room sublist if it isn't already this.toggleCollapsed(); } else if (this.sublistRef.current) { @@ -341,7 +350,7 @@ export default class RoomSublist2 extends React.Component { }; private renderVisibleTiles(): React.ReactElement[] { - if (this.layout && this.layout.isCollapsed) { + if (!this.state.isExpanded) { // don't waste time on rendering return []; } @@ -498,7 +507,7 @@ export default class RoomSublist2 extends React.Component { const collapseClasses = classNames({ 'mx_RoomSublist2_collapseBtn': true, - 'mx_RoomSublist2_collapseBtn_collapsed': this.layout && this.layout.isCollapsed, + 'mx_RoomSublist2_collapseBtn_collapsed': !this.state.isExpanded, }); const classes = classNames({ @@ -526,7 +535,7 @@ export default class RoomSublist2 extends React.Component { tabIndex={tabIndex} className="mx_RoomSublist2_headerText" role="treeitem" - aria-expanded={!this.layout.isCollapsed} + aria-expanded={this.state.isExpanded} aria-level={1} onClick={this.onHeaderClick} onContextMenu={this.onContextMenu} diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index f87181ccd1..5169c5e4e5 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -26,14 +26,12 @@ interface ISerializedListLayout { numTiles: number; showPreviews: boolean; collapsed: boolean; - savedCollapsed: boolean; } export class ListLayout { private _n = 0; private _previews = false; private _collapsed = false; - private _savedCollapsed = false; constructor(public readonly tagId: TagID) { const serialized = localStorage.getItem(this.key); @@ -43,7 +41,6 @@ export class ListLayout { this._n = parsed.numTiles; this._previews = parsed.showPreviews; this._collapsed = parsed.collapsed; - this._savedCollapsed = parsed.savedCollapsed; } } @@ -136,20 +133,11 @@ export class ListLayout { localStorage.setItem(this.key, JSON.stringify(this.serialize())); } - public saveCollapsedState() { - this._savedCollapsed = this.isCollapsed; - } - - public restoreCollapsedState() { - this.isCollapsed = this._savedCollapsed; - } - private serialize(): ISerializedListLayout { return { numTiles: this.visibleTiles, showPreviews: this.showPreviews, collapsed: this.isCollapsed, - savedCollapsed: this._savedCollapsed, }; } } From 8a7bebc6bf446e58f47e4c163d62dcdcce47bd6f Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Thu, 9 Jul 2020 18:37:18 +0100 Subject: [PATCH 0824/1504] lint --- src/components/views/rooms/RoomList2.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomList2.tsx b/src/components/views/rooms/RoomList2.tsx index 79f6ed0d10..ba0464a0a4 100644 --- a/src/components/views/rooms/RoomList2.tsx +++ b/src/components/views/rooms/RoomList2.tsx @@ -191,7 +191,7 @@ export default class RoomList2 extends React.Component { show_room_tile: true, // to make sure the room gets scrolled into view }); } - } + } }; private getRoomDelta = (roomId: string, delta: number, unread = false) => { From 00fc34924cffa7f83948f1c2151b050368c46c4e Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 9 Jul 2020 11:34:34 -0600 Subject: [PATCH 0825/1504] Fix rooms disappearing that were created by the user Fixes https://github.com/vector-im/riot-web/issues/14388 We were receiving a read receipt before a room object, leading to the algorithm to assume the room is archived (no membership), which was causing later index issues when the room tried to get moved from archived to untagged. To prevent this, we just ignore nonsensical updates. --- src/stores/room-list/algorithms/Algorithm.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index eee8e60b86..f70eb69e91 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -41,6 +41,17 @@ import { getListAlgorithmInstance } from "./list-ordering"; */ export const LIST_UPDATED_EVENT = "list_updated_event"; +// These are the causes which require a room to be known in order for us to handle them. If +// a cause in this list is raised and we don't know about the room, we don't handle the update. +// +// Note: these typically happen when a new room is coming in, such as the user creating or +// joining the room. For these cases, we need to know about the room prior to handling it otherwise +// we'll make bad assumptions. +const CAUSES_REQUIRING_ROOM = [ + RoomUpdateCause.Timeline, + RoomUpdateCause.ReadReceipt, +]; + interface IStickyRoom { room: Room; position: number; @@ -755,6 +766,11 @@ export class Algorithm extends EventEmitter { } if (!this.roomIdsToTags[room.roomId]) { + if (CAUSES_REQUIRING_ROOM.includes(cause)) { + console.warn(`Skipping tag update for ${room.roomId} because we don't know about the room`); + return false; + } + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 console.log(`[RoomListDebug] Updating tags for room ${room.roomId} (${room.name})`); From f8e1996e2fb8823efb3808d98a41ec19866a24f1 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 9 Jul 2020 12:08:40 -0600 Subject: [PATCH 0826/1504] Handle NewRoom and PossibleTagChange updates correctly For new rooms, we need to append to our list of known rooms. For tag changes, we need to be sure to update our cache when the tag can reasonably be assumed to have changed. Fixes https://github.com/vector-im/riot-web/issues/14389 --- src/stores/room-list/algorithms/Algorithm.ts | 21 ++++++++----------- .../list-ordering/ImportanceAlgorithm.ts | 14 ++++--------- .../list-ordering/NaturalAlgorithm.ts | 8 +++++-- .../list-ordering/OrderingAlgorithm.ts | 9 ++++++++ 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index f70eb69e91..35511a461d 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -677,18 +677,6 @@ export class Algorithm extends EventEmitter { } } - if (hasTags && isForLastSticky && !knownRoomRef) { - // we have a fairly good chance at losing a room right now. Under some circumstances, - // we can end up with a room which transitions references and tag changes, then gets - // lost when the sticky room changes. To counter this, we try and add the room to the - // list manually as the condition below to update the reference will fail. - // - // Other conditions *should* result in the room being sorted into the right place. - console.warn(`${room.roomId} was about to be lost - inserting at end of room list`); - this.rooms.push(room); - knownRoomRef = true; - } - // If we have tags for a room and don't have the room referenced, something went horribly // wrong - the reference should have been updated above. if (hasTags && !knownRoomRef && !isSticky) { @@ -701,6 +689,13 @@ export class Algorithm extends EventEmitter { // to trigger a sticky room update ourselves. this._stickyRoom.room = room; } + + // If after all that we're still a NewRoom update, add the room if applicable. + // We don't do this for the sticky room (because it causes duplication issues) + // or if we know about the reference (as it should be replaced). + if (cause === RoomUpdateCause.NewRoom && !isSticky && !knownRoomRef) { + this.rooms.push(room); + } } if (cause === RoomUpdateCause.PossibleTagChange) { @@ -715,6 +710,7 @@ export class Algorithm extends EventEmitter { const algorithm: OrderingAlgorithm = this.algorithms[rmTag]; if (!algorithm) throw new Error(`No algorithm for ${rmTag}`); await algorithm.handleRoomUpdate(room, RoomUpdateCause.RoomRemoved); + this.cachedRooms[rmTag] = algorithm.orderedRooms; } for (const addTag of diff.added) { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 @@ -722,6 +718,7 @@ export class Algorithm extends EventEmitter { const algorithm: OrderingAlgorithm = this.algorithms[addTag]; if (!algorithm) throw new Error(`No algorithm for ${addTag}`); await algorithm.handleRoomUpdate(room, RoomUpdateCause.NewRoom); + this.cachedRooms[addTag] = algorithm.orderedRooms; } // Update the tag map so we don't regen it in a moment diff --git a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts index e95f92f985..3acd9f924e 100644 --- a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts @@ -160,7 +160,10 @@ export class ImportanceAlgorithm extends OrderingAlgorithm { this.cachedOrderedRooms.splice(this.indices[category], 0, room); // splice in the new room (pre-adjusted) } else if (cause === RoomUpdateCause.RoomRemoved) { const roomIdx = this.getRoomIndex(room); - if (roomIdx === -1) return false; // no change + if (roomIdx === -1) { + console.warn(`Tried to remove unknown room from ${this.tagId}: ${room.roomId}`); + return false; // no change + } const oldCategory = this.getCategoryFromIndices(roomIdx, this.indices); this.alterCategoryPositionBy(oldCategory, -1, this.indices); this.cachedOrderedRooms.splice(roomIdx, 1); // remove the room @@ -169,15 +172,6 @@ export class ImportanceAlgorithm extends OrderingAlgorithm { } } - private getRoomIndex(room: Room): number { - let roomIdx = this.cachedOrderedRooms.indexOf(room); - if (roomIdx === -1) { // can only happen if the js-sdk's store goes sideways. - console.warn(`Degrading performance to find missing room in "${this.tagId}": ${room.roomId}`); - roomIdx = this.cachedOrderedRooms.findIndex(r => r.roomId === room.roomId); - } - return roomIdx; - } - public async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise { try { await this.updateLock.acquireAsync(); diff --git a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts index f74329cb4d..849c8a2877 100644 --- a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts @@ -50,8 +50,12 @@ export class NaturalAlgorithm extends OrderingAlgorithm { if (cause === RoomUpdateCause.NewRoom) { this.cachedOrderedRooms.push(room); } else if (cause === RoomUpdateCause.RoomRemoved) { - const idx = this.cachedOrderedRooms.indexOf(room); - if (idx >= 0) this.cachedOrderedRooms.splice(idx, 1); + const idx = this.getRoomIndex(room); + if (idx >= 0) { + this.cachedOrderedRooms.splice(idx, 1); + } else { + console.warn(`Tried to remove unknown room from ${this.tagId}: ${room.roomId}`); + } } // TODO: Optimize this to avoid useless operations: https://github.com/vector-im/riot-web/issues/14035 diff --git a/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts index 4ab7650367..c47a35523c 100644 --- a/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts @@ -70,4 +70,13 @@ export abstract class OrderingAlgorithm { * @returns True if the update requires the Algorithm to update the presentation layers. */ public abstract handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise; + + protected getRoomIndex(room: Room): number { + let roomIdx = this.cachedOrderedRooms.indexOf(room); + if (roomIdx === -1) { // can only happen if the js-sdk's store goes sideways. + console.warn(`Degrading performance to find missing room in "${this.tagId}": ${room.roomId}`); + roomIdx = this.cachedOrderedRooms.findIndex(r => r.roomId === room.roomId); + } + return roomIdx; + } } From ce68314de96645a0e4b0c98a2579d33855bdf2be Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Jul 2020 14:43:20 +0000 Subject: [PATCH 0827/1504] Revert "Merge pull request #4932 from matrix-org/travis/room-list/invisible-show-more" This reverts commit f58a0a753897b00b7a8ae5647c6345bb88057aa4. --- res/css/views/rooms/_RoomSublist2.scss | 20 +++++++++++++++----- src/components/views/rooms/RoomSublist2.tsx | 10 ++-------- src/stores/room-list/ListLayout.ts | 4 ++++ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 83e7e68563..1d13f25b8f 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -187,16 +187,16 @@ limitations under the License. flex-direction: column; overflow: hidden; - .mx_RoomSublist2_placeholder { - height: 44px; // Height of a room tile plus margins - } - .mx_RoomSublist2_showNButton { cursor: pointer; font-size: $font-13px; line-height: $font-18px; color: $roomtile2-preview-color; + // This is the same color as the left panel background because it needs + // to occlude the lastmost tile in the list. + background-color: $roomlist2-bg-color; + // Update the render() function for RoomSublist2 if these change // Update the ListLayout class for minVisibleTiles if these change. // @@ -209,7 +209,7 @@ limitations under the License. // We force this to the bottom so it will overlap rooms as needed. // We account for the space it takes up (24px) in the code through padding. position: absolute; - bottom: 0; + bottom: 0; // the height of the resize handle left: 0; right: 0; @@ -236,6 +236,16 @@ limitations under the License. .mx_RoomSublist2_showLessButtonChevron { mask-image: url('$(res)/img/feather-customised/chevron-up.svg'); } + + &.mx_RoomSublist2_isCutting::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 4px; + box-shadow: 0px -2px 3px rgba(46, 47, 50, 0.08); + } } // Class name comes from the ResizableBox component diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index c3ac85e2de..73aa97b6e8 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -562,8 +562,10 @@ export default class RoomSublist2 extends React.Component { if (visibleTiles.length > 0) { const layout = this.layout; // to shorten calls + const maxTilesFactored = layout.tilesWithResizerBoxFactor(this.numTiles); const showMoreBtnClasses = classNames({ 'mx_RoomSublist2_showNButton': true, + 'mx_RoomSublist2_isCutting': this.state.isResizing && layout.visibleTiles < maxTilesFactored, }); // If we're hiding rooms, show a 'show more' button to the user. This button @@ -642,14 +644,6 @@ export default class RoomSublist2 extends React.Component { const tilesWithoutPadding = Math.min(relativeTiles, layout.visibleTiles); const tilesPx = layout.calculateTilesToPixelsMin(relativeTiles, tilesWithoutPadding, padding); - // Now that we know our padding constraints, let's find out if we need to chop off the - // last rendered visible tile so it doesn't collide with the 'show more' button - let visibleUnpaddedTiles = Math.round(layout.visibleTiles - layout.pixelsToTiles(padding)); - if (visibleUnpaddedTiles === visibleTiles.length - 1) { - const placeholder =
    ; - visibleTiles.splice(visibleUnpaddedTiles, 1, placeholder); - } - const dimensions = { height: tilesPx, }; diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index 5169c5e4e5..99674fe74f 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -109,6 +109,10 @@ export class ListLayout { return this.tilesToPixels(Math.min(maxTiles, n)) + padding; } + public tilesWithResizerBoxFactor(n: number): number { + return n + RESIZER_BOX_FACTOR; + } + public tilesWithPadding(n: number, paddingPx: number): number { return this.pixelsToTiles(this.tilesToPixelsWithPadding(n, paddingPx)); } From e2539f11cd156779d152ad19c56ea0a977ab9ec2 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Thu, 9 Jul 2020 19:24:02 +0100 Subject: [PATCH 0828/1504] Scroll fade for breadcrumbs --- res/css/structures/_LeftPanel2.scss | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index eaa22a3efa..0b87ac0469 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -73,6 +73,18 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations overflow-y: hidden; overflow-x: scroll; margin-top: 8px; + + &.mx_IndicatorScrollbar_leftOverflow { + mask-image: linear-gradient(90deg, transparent, black 10%); + } + + &.mx_IndicatorScrollbar_rightOverflow { + mask-image: linear-gradient(90deg, black, black 90%, transparent); + } + + &.mx_IndicatorScrollbar_rightOverflow.mx_IndicatorScrollbar_leftOverflow { + mask-image: linear-gradient(90deg, transparent, black 10%, black 90%, transparent); + } } } From 859f65659c03d2b930f62d142651cd5116c21dd0 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 9 Jul 2020 13:07:13 -0600 Subject: [PATCH 0829/1504] Attempt to support a hard cutoff with the show more button Known issues: * Causes scroll jumps when the button gets added to DOM * Resize handle is invisible when there's a show more button TODO: * Clean up comments * Clean up useless code (all the padding stuff isn't needed) --- res/css/views/rooms/_RoomSublist2.scss | 120 ++++++++++---------- src/components/views/rooms/RoomSublist2.tsx | 41 ++++--- src/stores/room-list/ListLayout.ts | 3 +- 3 files changed, 84 insertions(+), 80 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 1d13f25b8f..6a77056917 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -179,7 +179,6 @@ limitations under the License. } .mx_RoomSublist2_resizeBox { - margin-bottom: 4px; // for the resize handle position: relative; // Create another flexbox column for the tiles @@ -187,65 +186,12 @@ limitations under the License. flex-direction: column; overflow: hidden; - .mx_RoomSublist2_showNButton { - cursor: pointer; - font-size: $font-13px; - line-height: $font-18px; - color: $roomtile2-preview-color; - - // This is the same color as the left panel background because it needs - // to occlude the lastmost tile in the list. - background-color: $roomlist2-bg-color; - - // Update the render() function for RoomSublist2 if these change - // Update the ListLayout class for minVisibleTiles if these change. - // - // At 24px high, 8px padding on the top and 4px padding on the bottom this equates to 0.73 of - // a tile due to how the padding calculations work. - height: 24px; - padding-top: 8px; - padding-bottom: 4px; - - // We force this to the bottom so it will overlap rooms as needed. - // We account for the space it takes up (24px) in the code through padding. + .mx_RoomSublist2_resizerHandles_showNButton { position: absolute; - bottom: 0; // the height of the resize handle + bottom: -32px; // height of the button left: 0; right: 0; - - // We create a flexbox to cheat at alignment - display: flex; - align-items: center; - - .mx_RoomSublist2_showNButtonChevron { - position: relative; - width: 16px; - height: 16px; - margin-left: 12px; - margin-right: 18px; - mask-position: center; - mask-size: contain; - mask-repeat: no-repeat; - background: $roomtile2-preview-color; - } - - .mx_RoomSublist2_showMoreButtonChevron { - mask-image: url('$(res)/img/feather-customised/chevron-down.svg'); - } - - .mx_RoomSublist2_showLessButtonChevron { - mask-image: url('$(res)/img/feather-customised/chevron-up.svg'); - } - - &.mx_RoomSublist2_isCutting::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - box-shadow: 0px -2px 3px rgba(46, 47, 50, 0.08); - } + height: 4px; // height of the handle } // Class name comes from the ResizableBox component @@ -277,6 +223,56 @@ limitations under the License. } } + .mx_RoomSublist2_showNButton { + cursor: pointer; + font-size: $font-13px; + line-height: $font-18px; + color: $roomtile2-preview-color; + + // Update the render() function for RoomSublist2 if these change + // Update the ListLayout class for minVisibleTiles if these change. + // + // At 24px high, 8px padding on the top and 4px padding on the bottom this equates to 0.73 of + // a tile due to how the padding calculations work. + height: 24px; + padding-top: 8px; + padding-bottom: 4px; + + // We create a flexbox to cheat at alignment + display: flex; + align-items: center; + + .mx_RoomSublist2_showNButtonChevron { + position: relative; + width: 16px; + height: 16px; + margin-left: 12px; + margin-right: 18px; + mask-position: center; + mask-size: contain; + mask-repeat: no-repeat; + background: $roomtile2-preview-color; + } + + .mx_RoomSublist2_showMoreButtonChevron { + mask-image: url('$(res)/img/feather-customised/chevron-down.svg'); + } + + .mx_RoomSublist2_showLessButtonChevron { + mask-image: url('$(res)/img/feather-customised/chevron-up.svg'); + } + + &.mx_RoomSublist2_isCutting::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 4px; + box-shadow: 0px -2px 3px rgba(46, 47, 50, 0.08); + } + } + &.mx_RoomSublist2_hasMenuOpen, &:not(.mx_RoomSublist2_minimized) > .mx_RoomSublist2_headerContainer:focus-within, &:not(.mx_RoomSublist2_minimized) > .mx_RoomSublist2_headerContainer:hover { @@ -322,13 +318,13 @@ limitations under the License. .mx_RoomSublist2_resizeBox { align-items: center; + } - .mx_RoomSublist2_showNButton { - flex-direction: column; + .mx_RoomSublist2_showNButton { + flex-direction: column; - .mx_RoomSublist2_showNButtonChevron { - margin-right: 12px; // to center - } + .mx_RoomSublist2_showNButtonChevron { + margin-right: 12px; // to center } } diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 73aa97b6e8..caa679f1d0 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -119,7 +119,7 @@ export default class RoomSublist2 extends React.Component { } private get numVisibleTiles(): number { - const nVisible = Math.floor(this.layout.visibleTiles); + const nVisible = Math.ceil(this.layout.visibleTiles); return Math.min(nVisible, this.numTiles); } @@ -635,8 +635,8 @@ export default class RoomSublist2 extends React.Component { // The padding is variable though, so figure out what we need padding for. let padding = 0; - if (showNButton) padding += SHOW_N_BUTTON_HEIGHT; - padding += RESIZE_HANDLE_HEIGHT; // always append the handle height + //if (showNButton) padding += SHOW_N_BUTTON_HEIGHT; + //padding += RESIZE_HANDLE_HEIGHT; // always append the handle height const relativeTiles = layout.tilesWithPadding(this.numTiles, padding); const minTilesPx = layout.calculateTilesToPixelsMin(relativeTiles, layout.minVisibleTiles, padding); @@ -644,25 +644,32 @@ export default class RoomSublist2 extends React.Component { const tilesWithoutPadding = Math.min(relativeTiles, layout.visibleTiles); const tilesPx = layout.calculateTilesToPixelsMin(relativeTiles, tilesWithoutPadding, padding); + const handleWrapperClasses = classNames({ + 'mx_RoomSublist2_resizerHandles': true, + 'mx_RoomSublist2_resizerHandles_showNButton': !!showNButton, + }); + const dimensions = { height: tilesPx, }; content = ( - - {visibleTiles} + + + {visibleTiles} + {showNButton} - + ); } diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index 99674fe74f..f1900487bc 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -20,7 +20,8 @@ const TILE_HEIGHT_PX = 44; // this comes from the CSS where the show more button is // mathematically this percent of a tile when floating. -const RESIZER_BOX_FACTOR = 0.78; +//const RESIZER_BOX_FACTOR = 0.78; +const RESIZER_BOX_FACTOR = 0; interface ISerializedListLayout { numTiles: number; From 1315f34662426b0b6be9ddf5002d0719224903d5 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 9 Jul 2020 14:52:54 -0600 Subject: [PATCH 0830/1504] Dedupe room list store updates by marking for updates The core of this is in the MarkedExecution class, with the remainder of the commit ensuring that the right marks and triggers are in place to do the firing. Because everything is async/await and run through the RoomListStore, we don't have to worry about self-fed updates in the algorithm classes. This also means we have to trigger pretty much all the time. Changes to tag ordering / list sorting get hit through two paths, so we mark before we do a bulk update and otherwise assume the call is coming in from outside. --- src/stores/room-list/RoomListStore2.ts | 54 +++++++++++----- src/stores/room-list/algorithms/Algorithm.ts | 10 +-- src/utils/MarkedExecution.ts | 67 ++++++++++++++++++++ 3 files changed, 108 insertions(+), 23 deletions(-) create mode 100644 src/utils/MarkedExecution.ts diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 6020e46a12..c29c0b5a20 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -33,6 +33,7 @@ import { EffectiveMembership, getEffectiveMembership } from "./membership"; import { ListLayout } from "./ListLayout"; import { isNullOrUndefined } from "matrix-js-sdk/src/utils"; import RoomListLayoutStore from "./RoomListLayoutStore"; +import { MarkedExecution } from "../../utils/MarkedExecution"; interface IState { tagsEnabled?: boolean; @@ -51,7 +52,7 @@ export class RoomListStore2 extends AsyncStore { private algorithm = new Algorithm(); private filterConditions: IFilterCondition[] = []; private tagWatcher = new TagWatcher(this); - private layoutMap: Map = new Map(); + private updateFn = new MarkedExecution(() => this.emit(LISTS_UPDATE_EVENT)); private readonly watchedSettings = [ 'feature_custom_tags', @@ -91,24 +92,26 @@ export class RoomListStore2 extends AsyncStore { await this.updateAlgorithmInstances(); } - private onRVSUpdate = () => { + private onRVSUpdate = async (quiet = false) => { if (!this.enabled) return; // TODO: Remove with https://github.com/vector-im/riot-web/issues/14231 if (!this.matrixClient) return; // We assume there won't be RVS updates without a client const activeRoomId = RoomViewStore.getRoomId(); if (!activeRoomId && this.algorithm.stickyRoom) { - this.algorithm.stickyRoom = null; + await this.algorithm.setStickyRoom(null); } else if (activeRoomId) { const activeRoom = this.matrixClient.getRoom(activeRoomId); if (!activeRoom) { console.warn(`${activeRoomId} is current in RVS but missing from client - clearing sticky room`); - this.algorithm.stickyRoom = null; + await this.algorithm.setStickyRoom(null); } else if (activeRoom !== this.algorithm.stickyRoom) { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 console.log(`Changing sticky room to ${activeRoomId}`); - this.algorithm.stickyRoom = activeRoom; + await this.algorithm.setStickyRoom(activeRoom); } } + + if (!quiet) this.updateFn.trigger(); }; protected async onDispatch(payload: ActionPayload) { @@ -127,8 +130,12 @@ export class RoomListStore2 extends AsyncStore { // Update any settings here, as some may have happened before we were logically ready. console.log("Regenerating room lists: Startup"); await this.readAndCacheSettingsFromStore(); - await this.regenerateAllLists(); - this.onRVSUpdate(); // fake an RVS update to adjust sticky room, if needed + await this.regenerateAllLists(true); + await this.onRVSUpdate(true); // fake an RVS update to adjust sticky room, if needed + + this.updateFn.trigger(); + + return; // no point in running the next conditions - they won't match } // TODO: Remove this once the RoomListStore becomes default @@ -137,7 +144,7 @@ export class RoomListStore2 extends AsyncStore { if (payload.action === 'on_client_not_viable' || payload.action === 'on_logged_out') { // Reset state without causing updates as the client will have been destroyed // and downstream code will throw NPE errors. - this.reset(null, true); + await this.reset(null, true); this._matrixClient = null; this.initialListsGenerated = false; // we'll want to regenerate them } @@ -151,7 +158,8 @@ export class RoomListStore2 extends AsyncStore { console.log("Regenerating room lists: Settings changed"); await this.readAndCacheSettingsFromStore(); - await this.regenerateAllLists(); // regenerate the lists now + await this.regenerateAllLists(true); // regenerate the lists now + this.updateFn.trigger(); } } @@ -172,6 +180,7 @@ export class RoomListStore2 extends AsyncStore { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 console.log(`[RoomListDebug] Got own read receipt in ${room.roomId}`); await this.handleRoomUpdate(room, RoomUpdateCause.ReadReceipt); + this.updateFn.trigger(); return; } } else if (payload.action === 'MatrixActions.Room.tags') { @@ -179,6 +188,7 @@ export class RoomListStore2 extends AsyncStore { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 console.log(`[RoomListDebug] Got tag change in ${roomPayload.room.roomId}`); await this.handleRoomUpdate(roomPayload.room, RoomUpdateCause.PossibleTagChange); + this.updateFn.trigger(); } else if (payload.action === 'MatrixActions.Room.timeline') { const eventPayload = (payload); // TODO: Type out the dispatcher types @@ -202,6 +212,7 @@ export class RoomListStore2 extends AsyncStore { } } await this.handleRoomUpdate(updatedRoom, RoomUpdateCause.Timeline); + this.updateFn.trigger(); }; if (!room) { console.warn(`Live timeline event ${eventPayload.event.getId()} received without associated room`); @@ -225,6 +236,7 @@ export class RoomListStore2 extends AsyncStore { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 console.log(`[RoomListDebug] Decrypted timeline event ${eventPayload.event.getId()} in ${roomId}`); await this.handleRoomUpdate(room, RoomUpdateCause.Timeline); + this.updateFn.trigger(); } else if (payload.action === 'MatrixActions.accountData' && payload.event_type === 'm.direct') { const eventPayload = (payload); // TODO: Type out the dispatcher types // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 @@ -246,6 +258,7 @@ export class RoomListStore2 extends AsyncStore { await this.handleRoomUpdate(room, RoomUpdateCause.PossibleTagChange); } } + this.updateFn.trigger(); } else if (payload.action === 'MatrixActions.Room.myMembership') { const membershipPayload = (payload); // TODO: Type out the dispatcher types const oldMembership = getEffectiveMembership(membershipPayload.oldMembership); @@ -264,7 +277,7 @@ export class RoomListStore2 extends AsyncStore { const isSticky = this.algorithm.stickyRoom === prevRoom; if (isSticky) { console.log(`[RoomListDebug] Clearing sticky room due to room upgrade`); - await this.algorithm.setStickyRoomAsync(null); + await this.algorithm.setStickyRoom(null); } // Note: we hit the algorithm instead of our handleRoomUpdate() function to @@ -276,6 +289,7 @@ export class RoomListStore2 extends AsyncStore { console.log(`[RoomListDebug] Adding new room to room list`); await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.NewRoom); + this.updateFn.trigger(); return; } @@ -283,6 +297,7 @@ export class RoomListStore2 extends AsyncStore { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 console.log(`[RoomListDebug] Handling invite to ${membershipPayload.room.roomId}`); await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.NewRoom); + this.updateFn.trigger(); return; } @@ -291,6 +306,7 @@ export class RoomListStore2 extends AsyncStore { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 console.log(`[RoomListDebug] Handling membership change in ${membershipPayload.room.roomId}`); await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.PossibleTagChange); + this.updateFn.trigger(); return; } } @@ -301,7 +317,7 @@ export class RoomListStore2 extends AsyncStore { if (shouldUpdate) { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 console.log(`[DEBUG] Room "${room.name}" (${room.roomId}) triggered by ${cause} requires list update`); - this.emit(LISTS_UPDATE_EVENT, this); + this.updateFn.mark(); } } @@ -309,6 +325,7 @@ export class RoomListStore2 extends AsyncStore { await this.algorithm.setTagSorting(tagId, sort); // TODO: Per-account? https://github.com/vector-im/riot-web/issues/14114 localStorage.setItem(`mx_tagSort_${tagId}`, sort); + this.updateFn.triggerIfWillMark(); } public getTagSorting(tagId: TagID): SortAlgorithm { @@ -347,6 +364,7 @@ export class RoomListStore2 extends AsyncStore { await this.algorithm.setListOrdering(tagId, order); // TODO: Per-account? https://github.com/vector-im/riot-web/issues/14114 localStorage.setItem(`mx_listOrder_${tagId}`, order); + this.updateFn.triggerIfWillMark(); } public getListOrder(tagId: TagID): ListAlgorithm { @@ -382,6 +400,10 @@ export class RoomListStore2 extends AsyncStore { } private async updateAlgorithmInstances() { + // We'll require an update, so mark for one. Marking now also prevents the calls + // to setTagSorting and setListOrder from causing triggers. + this.updateFn.mark(); + for (const tag of Object.keys(this.orderedLists)) { const definedSort = this.getTagSorting(tag); const definedOrder = this.getListOrder(tag); @@ -406,11 +428,11 @@ export class RoomListStore2 extends AsyncStore { private onAlgorithmListUpdated = () => { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log("Underlying algorithm has triggered a list update - refiring"); - this.emit(LISTS_UPDATE_EVENT, this); + console.log("Underlying algorithm has triggered a list update - marking"); + this.updateFn.mark(); }; - private async regenerateAllLists() { + private async regenerateAllLists(quiet = false) { console.warn("Regenerating all room lists"); const sorts: ITagSortingMap = {}; @@ -435,7 +457,7 @@ export class RoomListStore2 extends AsyncStore { this.initialListsGenerated = true; - this.emit(LISTS_UPDATE_EVENT, this); + if (!quiet) this.updateFn.trigger(); } public addFilter(filter: IFilterCondition): void { @@ -445,6 +467,7 @@ export class RoomListStore2 extends AsyncStore { if (this.algorithm) { this.algorithm.addFilterCondition(filter); } + this.updateFn.trigger(); } public removeFilter(filter: IFilterCondition): void { @@ -458,6 +481,7 @@ export class RoomListStore2 extends AsyncStore { this.algorithm.removeFilterCondition(filter); } } + this.updateFn.trigger(); } /** diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index 35511a461d..2cd767682b 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -87,12 +87,6 @@ export class Algorithm extends EventEmitter { return this._stickyRoom ? this._stickyRoom.room : null; } - public set stickyRoom(val: Room) { - // setters can't be async, so we call a private function to do the work - // noinspection JSIgnoredPromiseFromCall - this.updateStickyRoom(val); - } - protected get hasFilters(): boolean { return this.allowedByFilter.size > 0; } @@ -115,7 +109,7 @@ export class Algorithm extends EventEmitter { * Awaitable version of the sticky room setter. * @param val The new room to sticky. */ - public async setStickyRoomAsync(val: Room) { + public async setStickyRoom(val: Room) { await this.updateStickyRoom(val); } @@ -746,7 +740,7 @@ export class Algorithm extends EventEmitter { }; } else { // We have to clear the lock as the sticky room change will trigger updates. - await this.setStickyRoomAsync(room); + await this.setStickyRoom(room); } } } diff --git a/src/utils/MarkedExecution.ts b/src/utils/MarkedExecution.ts new file mode 100644 index 0000000000..d866720ecd --- /dev/null +++ b/src/utils/MarkedExecution.ts @@ -0,0 +1,67 @@ +/* +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. +*/ + +/** + * A utility to ensure that a function is only called once triggered with + * a mark applied. Multiple marks can be applied to the function, however + * the function will only be called once upon trigger(). + * + * The function starts unmarked. + */ +export class MarkedExecution { + private marked = false; + + /** + * Creates a MarkedExecution for the provided function. + * @param fn The function to be called upon trigger if marked. + */ + constructor(private fn: () => void) { + } + + /** + * Resets the mark without calling the function. + */ + public reset() { + this.marked = false; + } + + /** + * Marks the function to be called upon trigger(). + */ + public mark() { + this.marked = true; + } + + /** + * If marked, the function will be called, otherwise this does nothing. + */ + public trigger() { + if (!this.marked) return; + this.fn(); + this.reset(); + } + + /** + * Triggers the function if a mark() call would mark it. If the function + * has already been marked this will do nothing. + */ + public triggerIfWillMark() { + if (!this.marked) { + this.mark(); + this.trigger(); + } + } +} From 8624e8beeb66d75350aa4ea16176de1e4409a42d Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 9 Jul 2020 15:11:21 -0600 Subject: [PATCH 0831/1504] Break up the event loop tasks for the room list The room list does a hefty amount of work, so instead of blocking the event loop with a `/sync` request and a bunch of room updates (as we can get multiple per sync) we can instead run it over several smaller tasks. The smaller tasks help the event loop do other things between our tasks, ensuring we don't inadvertently block the UI from rendering too slowly. On my account and machine, this cuts the time to render in half (~30ms, down from ~60ms) . --- src/stores/room-list/RoomListStore2.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index c29c0b5a20..60f888f8ed 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -114,7 +114,13 @@ export class RoomListStore2 extends AsyncStore { if (!quiet) this.updateFn.trigger(); }; - protected async onDispatch(payload: ActionPayload) { + protected onDispatch(payload: ActionPayload) { + // We do this to intentionally break out of the current event loop task, allowing + // us to instead wait for a more convenient time to run our updates. + setImmediate(() => this.onDispatchAsync(payload)); + } + + protected async onDispatchAsync(payload: ActionPayload) { if (payload.action === 'MatrixActions.sync') { // Filter out anything that isn't the first PREPARED sync. if (!(payload.prevState === 'PREPARED' && payload.state !== 'PREPARED')) { From cf154ec9cf551724c38c6fffa55be7cbcd60fe62 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 9 Jul 2020 18:19:38 -0600 Subject: [PATCH 0832/1504] Add an option to disable room list logging, and improve logging For https://github.com/vector-im/riot-web/issues/14035 **This option is not recommended as it completely obliterates all chances of being able to support someone with a broken room list. It is intended for specific testing scenarios only.** --- src/@types/global.d.ts | 3 + src/components/views/rooms/RoomList2.tsx | 5 +- src/components/views/rooms/RoomTile2.tsx | 2 +- src/stores/room-list/RoomListStore2.ts | 106 +++++++++++----- src/stores/room-list/algorithms/Algorithm.ts | 116 ++++++++++-------- .../list-ordering/ImportanceAlgorithm.ts | 3 - .../list-ordering/NaturalAlgorithm.ts | 3 - .../filters/CommunityFilterCondition.ts | 2 - .../room-list/filters/NameFilterCondition.ts | 2 - 9 files changed, 149 insertions(+), 93 deletions(-) diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index fc52296d8b..3f970ea8c3 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -37,6 +37,9 @@ declare global { mx_RoomListStore2: RoomListStore2; mx_RoomListLayoutStore: RoomListLayoutStore; mxPlatformPeg: PlatformPeg; + + // TODO: Remove flag before launch: https://github.com/vector-im/riot-web/issues/14231 + mx_QuietRoomListLogging: boolean; } // workaround for https://github.com/microsoft/TypeScript/issues/30933 diff --git a/src/components/views/rooms/RoomList2.tsx b/src/components/views/rooms/RoomList2.tsx index 3a3ae3707e..3774bb1cd1 100644 --- a/src/components/views/rooms/RoomList2.tsx +++ b/src/components/views/rooms/RoomList2.tsx @@ -219,7 +219,10 @@ export default class RoomList2 extends React.Component { private updateLists = () => { const newLists = RoomListStore.instance.orderedLists; - console.log("new lists", newLists); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log("new lists", newLists); + } this.setState({sublists: newLists}, () => { this.props.onResize(); diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index db8084baa2..a7dc983fa6 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -256,7 +256,7 @@ export default class RoomTile2 extends React.Component { 0 )); } else { - console.log(`Unexpected tag ${tagId} applied to ${this.props.room.room_id}`); + console.warn(`Unexpected tag ${tagId} applied to ${this.props.room.room_id}`); } if ((ev as React.KeyboardEvent).key === Key.ENTER) { diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 6020e46a12..6876454052 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -104,8 +104,10 @@ export class RoomListStore2 extends AsyncStore { console.warn(`${activeRoomId} is current in RVS but missing from client - clearing sticky room`); this.algorithm.stickyRoom = null; } else if (activeRoom !== this.algorithm.stickyRoom) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Changing sticky room to ${activeRoomId}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Changing sticky room to ${activeRoomId}`); + } this.algorithm.stickyRoom = activeRoom; } } @@ -169,15 +171,19 @@ export class RoomListStore2 extends AsyncStore { console.warn(`Own read receipt was in unknown room ${room.roomId}`); return; } - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Got own read receipt in ${room.roomId}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Got own read receipt in ${room.roomId}`); + } await this.handleRoomUpdate(room, RoomUpdateCause.ReadReceipt); return; } } else if (payload.action === 'MatrixActions.Room.tags') { const roomPayload = (payload); // TODO: Type out the dispatcher types - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Got tag change in ${roomPayload.room.roomId}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Got tag change in ${roomPayload.room.roomId}`); + } await this.handleRoomUpdate(roomPayload.room, RoomUpdateCause.PossibleTagChange); } else if (payload.action === 'MatrixActions.Room.timeline') { const eventPayload = (payload); // TODO: Type out the dispatcher types @@ -188,12 +194,16 @@ export class RoomListStore2 extends AsyncStore { const roomId = eventPayload.event.getRoomId(); const room = this.matrixClient.getRoom(roomId); const tryUpdate = async (updatedRoom: Room) => { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Live timeline event ${eventPayload.event.getId()}` + - ` in ${updatedRoom.roomId}`); - if (eventPayload.event.getType() === 'm.room.tombstone' && eventPayload.event.getStateKey() === '') { + if (!window.mx_QuietRoomListLogging) { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Got tombstone event - trying to remove now-dead room`); + console.log(`[RoomListDebug] Live timeline event ${eventPayload.event.getId()}` + + ` in ${updatedRoom.roomId}`); + } + if (eventPayload.event.getType() === 'm.room.tombstone' && eventPayload.event.getStateKey() === '') { + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Got tombstone event - trying to remove now-dead room`); + } const newRoom = this.matrixClient.getRoom(eventPayload.event.getContent()['replacement_room']); if (newRoom) { // If we have the new room, then the new room check will have seen the predecessor @@ -222,13 +232,17 @@ export class RoomListStore2 extends AsyncStore { console.warn(`Event ${eventPayload.event.getId()} was decrypted in an unknown room ${roomId}`); return; } - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Decrypted timeline event ${eventPayload.event.getId()} in ${roomId}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Decrypted timeline event ${eventPayload.event.getId()} in ${roomId}`); + } await this.handleRoomUpdate(room, RoomUpdateCause.Timeline); } else if (payload.action === 'MatrixActions.accountData' && payload.event_type === 'm.direct') { const eventPayload = (payload); // TODO: Type out the dispatcher types - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Received updated DM map`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Received updated DM map`); + } const dmMap = eventPayload.event.getContent(); for (const userId of Object.keys(dmMap)) { const roomIds = dmMap[userId]; @@ -251,45 +265,63 @@ export class RoomListStore2 extends AsyncStore { const oldMembership = getEffectiveMembership(membershipPayload.oldMembership); const newMembership = getEffectiveMembership(membershipPayload.membership); if (oldMembership !== EffectiveMembership.Join && newMembership === EffectiveMembership.Join) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Handling new room ${membershipPayload.room.roomId}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Handling new room ${membershipPayload.room.roomId}`); + } // If we're joining an upgraded room, we'll want to make sure we don't proliferate // the dead room in the list. const createEvent = membershipPayload.room.currentState.getStateEvents("m.room.create", ""); if (createEvent && createEvent.getContent()['predecessor']) { - console.log(`[RoomListDebug] Room has a predecessor`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Room has a predecessor`); + } const prevRoom = this.matrixClient.getRoom(createEvent.getContent()['predecessor']['room_id']); if (prevRoom) { const isSticky = this.algorithm.stickyRoom === prevRoom; if (isSticky) { - console.log(`[RoomListDebug] Clearing sticky room due to room upgrade`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Clearing sticky room due to room upgrade`); + } await this.algorithm.setStickyRoomAsync(null); } // Note: we hit the algorithm instead of our handleRoomUpdate() function to // avoid redundant updates. - console.log(`[RoomListDebug] Removing previous room from room list`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Removing previous room from room list`); + } await this.algorithm.handleRoomUpdate(prevRoom, RoomUpdateCause.RoomRemoved); } } - console.log(`[RoomListDebug] Adding new room to room list`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Adding new room to room list`); + } await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.NewRoom); return; } if (oldMembership !== EffectiveMembership.Invite && newMembership === EffectiveMembership.Invite) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Handling invite to ${membershipPayload.room.roomId}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Handling invite to ${membershipPayload.room.roomId}`); + } await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.NewRoom); return; } // If it's not a join, it's transitioning into a different list (possibly historical) if (oldMembership !== newMembership) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Handling membership change in ${membershipPayload.room.roomId}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Handling membership change in ${membershipPayload.room.roomId}`); + } await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.PossibleTagChange); return; } @@ -299,8 +331,10 @@ export class RoomListStore2 extends AsyncStore { private async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise { const shouldUpdate = await this.algorithm.handleRoomUpdate(room, cause); if (shouldUpdate) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[DEBUG] Room "${room.name}" (${room.roomId}) triggered by ${cause} requires list update`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[DEBUG] Room "${room.name}" (${room.roomId}) triggered by ${cause} requires list update`); + } this.emit(LISTS_UPDATE_EVENT, this); } } @@ -405,8 +439,10 @@ export class RoomListStore2 extends AsyncStore { } private onAlgorithmListUpdated = () => { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log("Underlying algorithm has triggered a list update - refiring"); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log("Underlying algorithm has triggered a list update - refiring"); + } this.emit(LISTS_UPDATE_EVENT, this); }; @@ -439,8 +475,10 @@ export class RoomListStore2 extends AsyncStore { } public addFilter(filter: IFilterCondition): void { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log("Adding filter condition:", filter); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log("Adding filter condition:", filter); + } this.filterConditions.push(filter); if (this.algorithm) { this.algorithm.addFilterCondition(filter); @@ -448,8 +486,10 @@ export class RoomListStore2 extends AsyncStore { } public removeFilter(filter: IFilterCondition): void { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log("Removing filter condition:", filter); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log("Removing filter condition:", filter); + } const idx = this.filterConditions.indexOf(filter); if (idx >= 0) { this.filterConditions.splice(idx, 1); diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index 35511a461d..6147de1500 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -321,8 +321,10 @@ export class Algorithm extends EventEmitter { } newMap[tagId] = allowedRoomsInThisTag; - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[DEBUG] ${newMap[tagId].length}/${rooms.length} rooms filtered into ${tagId}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[DEBUG] ${newMap[tagId].length}/${rooms.length} rooms filtered into ${tagId}`); + } } const allowedRooms = Object.values(newMap).reduce((rv, v) => { rv.push(...v); return rv; }, []); @@ -331,26 +333,13 @@ export class Algorithm extends EventEmitter { this.emit(LIST_UPDATED_EVENT); } - // TODO: Remove or use. - protected addPossiblyFilteredRoomsToTag(tagId: TagID, added: Room[]): void { - const filters = this.allowedByFilter.keys(); - for (const room of added) { - for (const filter of filters) { - if (filter.isVisible(room)) { - this.allowedRoomsByFilters.add(room); - break; - } - } - } - - // Now that we've updated the allowed rooms, recalculate the tag - this.recalculateFilteredRoomsForTag(tagId); - } - protected recalculateFilteredRoomsForTag(tagId: TagID): void { if (!this.hasFilters) return; // don't bother doing work if there's nothing to do - console.log(`Recalculating filtered rooms for ${tagId}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Recalculating filtered rooms for ${tagId}`); + } delete this.filteredRooms[tagId]; const rooms = this.cachedRooms[tagId].map(r => r); // cheap clone this.tryInsertStickyRoomToFilterSet(rooms, tagId); @@ -359,8 +348,10 @@ export class Algorithm extends EventEmitter { this.filteredRooms[tagId] = filteredRooms; } - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[DEBUG] ${filteredRooms.length}/${rooms.length} rooms filtered into ${tagId}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[DEBUG] ${filteredRooms.length}/${rooms.length} rooms filtered into ${tagId}`); + } } protected tryInsertStickyRoomToFilterSet(rooms: Room[], tagId: TagID) { @@ -399,8 +390,10 @@ export class Algorithm extends EventEmitter { } if (!this._cachedStickyRooms || !updatedTag) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Generating clone of cached rooms for sticky room handling`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Generating clone of cached rooms for sticky room handling`); + } const stickiedTagMap: ITagMap = {}; for (const tagId of Object.keys(this.cachedRooms)) { stickiedTagMap[tagId] = this.cachedRooms[tagId].map(r => r); // shallow clone @@ -411,8 +404,10 @@ export class Algorithm extends EventEmitter { if (updatedTag) { // Update the tag indicated by the caller, if possible. This is mostly to ensure // our cache is up to date. - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Replacing cached sticky rooms for ${updatedTag}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Replacing cached sticky rooms for ${updatedTag}`); + } this._cachedStickyRooms[updatedTag] = this.cachedRooms[updatedTag].map(r => r); // shallow clone } @@ -421,8 +416,10 @@ export class Algorithm extends EventEmitter { // we might have updated from the cache is also our sticky room. const sticky = this._stickyRoom; if (!updatedTag || updatedTag === sticky.tag) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Inserting sticky room ${sticky.room.roomId} at position ${sticky.position} in ${sticky.tag}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Inserting sticky room ${sticky.room.roomId} at position ${sticky.position} in ${sticky.tag}`); + } this._cachedStickyRooms[sticky.tag].splice(sticky.position, 0, sticky.room); } @@ -647,8 +644,10 @@ export class Algorithm extends EventEmitter { * processing. */ public async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Handle room update for ${room.roomId} called with cause ${cause}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Handle room update for ${room.roomId} called with cause ${cause}`); + } if (!this.algorithms) throw new Error("Not ready: no algorithms to determine tags from"); // Note: check the isSticky against the room ID just in case the reference is wrong @@ -705,16 +704,20 @@ export class Algorithm extends EventEmitter { const diff = arrayDiff(oldTags, newTags); if (diff.removed.length > 0 || diff.added.length > 0) { for (const rmTag of diff.removed) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Removing ${room.roomId} from ${rmTag}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Removing ${room.roomId} from ${rmTag}`); + } const algorithm: OrderingAlgorithm = this.algorithms[rmTag]; if (!algorithm) throw new Error(`No algorithm for ${rmTag}`); await algorithm.handleRoomUpdate(room, RoomUpdateCause.RoomRemoved); this.cachedRooms[rmTag] = algorithm.orderedRooms; } for (const addTag of diff.added) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Adding ${room.roomId} to ${addTag}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Adding ${room.roomId} to ${addTag}`); + } const algorithm: OrderingAlgorithm = this.algorithms[addTag]; if (!algorithm) throw new Error(`No algorithm for ${addTag}`); await algorithm.handleRoomUpdate(room, RoomUpdateCause.NewRoom); @@ -724,13 +727,17 @@ export class Algorithm extends EventEmitter { // Update the tag map so we don't regen it in a moment this.roomIdsToTags[room.roomId] = newTags; - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`Changing update cause for ${room.roomId} to Timeline to sort rooms`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Changing update cause for ${room.roomId} to Timeline to sort rooms`); + } cause = RoomUpdateCause.Timeline; didTagChange = true; } else { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.warn(`Received no-op update for ${room.roomId} - changing to Timeline update`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`Received no-op update for ${room.roomId} - changing to Timeline update`); + } cause = RoomUpdateCause.Timeline; } @@ -756,20 +763,27 @@ export class Algorithm extends EventEmitter { // as the sticky room relies on this. if (cause !== RoomUpdateCause.NewRoom && cause !== RoomUpdateCause.RoomRemoved) { if (this.stickyRoom === room) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.warn(`[RoomListDebug] Received ${cause} update for sticky room ${room.roomId} - ignoring`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.warn(`[RoomListDebug] Received ${cause} update for sticky room ${room.roomId} - ignoring`); + } return false; } } if (!this.roomIdsToTags[room.roomId]) { if (CAUSES_REQUIRING_ROOM.includes(cause)) { - console.warn(`Skipping tag update for ${room.roomId} because we don't know about the room`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.warn(`Skipping tag update for ${room.roomId} because we don't know about the room`); + } return false; } - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Updating tags for room ${room.roomId} (${room.name})`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Updating tags for room ${room.roomId} (${room.name})`); + } // Get the tags for the room and populate the cache const roomTags = this.getTagsForRoom(room).filter(t => !isNullOrUndefined(this.cachedRooms[t])); @@ -780,12 +794,16 @@ export class Algorithm extends EventEmitter { this.roomIdsToTags[room.roomId] = roomTags; - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Updated tags for ${room.roomId}:`, roomTags); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Updated tags for ${room.roomId}:`, roomTags); + } } - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Reached algorithmic handling for ${room.roomId} and cause ${cause}`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Reached algorithmic handling for ${room.roomId} and cause ${cause}`); + } const tags = this.roomIdsToTags[room.roomId]; if (!tags) { @@ -807,8 +825,10 @@ export class Algorithm extends EventEmitter { changed = true; } - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Finished handling ${room.roomId} with cause ${cause} (changed=${changed})`); + if (!window.mx_QuietRoomListLogging) { + // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 + console.log(`[RoomListDebug] Finished handling ${room.roomId} with cause ${cause} (changed=${changed})`); + } return changed; } } diff --git a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts index 3acd9f924e..88789d3a50 100644 --- a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts @@ -87,9 +87,6 @@ export class ImportanceAlgorithm extends OrderingAlgorithm { public constructor(tagId: TagID, initialSortingAlgorithm: SortAlgorithm) { super(tagId, initialSortingAlgorithm); - - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Constructed an ImportanceAlgorithm for ${tagId}`); } // noinspection JSMethodCanBeStatic diff --git a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts index 849c8a2877..ae1a2c98f6 100644 --- a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts @@ -28,9 +28,6 @@ export class NaturalAlgorithm extends OrderingAlgorithm { public constructor(tagId: TagID, initialSortingAlgorithm: SortAlgorithm) { super(tagId, initialSortingAlgorithm); - - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log(`[RoomListDebug] Constructed a NaturalAlgorithm for ${tagId}`); } public async setRooms(rooms: Room[]): Promise { diff --git a/src/stores/room-list/filters/CommunityFilterCondition.ts b/src/stores/room-list/filters/CommunityFilterCondition.ts index 9f7d8daaa3..45e65fb4f4 100644 --- a/src/stores/room-list/filters/CommunityFilterCondition.ts +++ b/src/stores/room-list/filters/CommunityFilterCondition.ts @@ -52,8 +52,6 @@ export class CommunityFilterCondition extends EventEmitter implements IFilterCon const beforeRoomIds = this.roomIds; this.roomIds = (await GroupStore.getGroupRooms(this.community.groupId)).map(r => r.roomId); if (arrayHasDiff(beforeRoomIds, this.roomIds)) { - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log("Updating filter for group: ", this.community.groupId); this.emit(FILTER_CHANGED); } }; diff --git a/src/stores/room-list/filters/NameFilterCondition.ts b/src/stores/room-list/filters/NameFilterCondition.ts index 12f147990d..6014a122f8 100644 --- a/src/stores/room-list/filters/NameFilterCondition.ts +++ b/src/stores/room-list/filters/NameFilterCondition.ts @@ -41,8 +41,6 @@ export class NameFilterCondition extends EventEmitter implements IFilterConditio public set search(val: string) { this._search = val; - // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 - console.log("Updating filter for room name search:", this._search); this.emit(FILTER_CHANGED); } From edb556f22e792b268d50fc57432d54604bb1850c Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Fri, 10 Jul 2020 02:15:46 +0100 Subject: [PATCH 0833/1504] Stop safari from agressivly shrinking --- res/css/structures/_LeftPanel2.scss | 3 +++ res/css/views/rooms/_RoomSublist2.scss | 2 ++ 2 files changed, 5 insertions(+) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index b3f7fcc8ee..2062acf6b6 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -55,6 +55,7 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations .mx_LeftPanel2_userHeader { padding: 12px 12px 20px; // 12px top, 12px sides, 20px bottom + flex-shrink: 0; // Create another flexbox column for the rows to stack within display: flex; @@ -80,6 +81,8 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations margin-left: 12px; margin-right: 12px; + flex-shrink: 0; + // Create a flexbox to organize the inputs display: flex; align-items: center; diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 83e7e68563..eca738c46a 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -24,6 +24,8 @@ limitations under the License. margin-left: 8px; width: 100%; + flex-shrink: 0; + .mx_RoomSublist2_headerContainer { // Create a flexbox to make alignment easy display: flex; From 1983591cbf4e4b63c145570bd1be09525958314d Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Fri, 10 Jul 2020 02:22:34 +0100 Subject: [PATCH 0834/1504] Remove unused actions --- src/components/views/rooms/RoomSublist2.tsx | 1 - src/dispatcher/actions.ts | 10 ---------- 2 files changed, 11 deletions(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index e7deca2543..67a84e9292 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -47,7 +47,6 @@ import { Direction } from "re-resizable/lib/resizer"; import { polyfillTouchEvent } from "../../../@types/polyfill"; import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore"; import RoomListLayoutStore from "../../../stores/room-list/RoomListLayoutStore"; -import { Action } from "../../../dispatcher/actions"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 diff --git a/src/dispatcher/actions.ts b/src/dispatcher/actions.ts index 89b2216db1..9be674b59e 100644 --- a/src/dispatcher/actions.ts +++ b/src/dispatcher/actions.ts @@ -84,14 +84,4 @@ export enum Action { * Changes room based on room list order and payload parameters. Should be used with ViewRoomDeltaPayload. */ ViewRoomDelta = "view_room_delta", - - /** - * Informs the room list when room filtering has begun. No additional payload information required. - */ - StartRoomFilter = "start_room_filter", - - /** - * Informs the room list when room filtering has ended. No additional payload information required. - */ - StopRoomFilter = "stop_room_filter", } From ceff68476dcf92e49b18a730b7e2c3ecd7e9ddc1 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Fri, 10 Jul 2020 02:25:15 +0100 Subject: [PATCH 0835/1504] Remove useless dispatches --- src/components/structures/RoomSearch.tsx | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/components/structures/RoomSearch.tsx b/src/components/structures/RoomSearch.tsx index 7c5799dcbb..8655db2e8c 100644 --- a/src/components/structures/RoomSearch.tsx +++ b/src/components/structures/RoomSearch.tsx @@ -76,7 +76,6 @@ export default class RoomSearch extends React.PureComponent { private clearInput = () => { if (!this.inputRef.current) return; this.inputRef.current.value = ""; - defaultDispatcher.dispatch({action: Action.StopRoomFilter}); this.onChange(); }; @@ -104,15 +103,9 @@ export default class RoomSearch extends React.PureComponent { private onFocus = (ev: React.FocusEvent) => { this.setState({focused: true}); ev.target.select(); - if (ev.target.value === "") { - defaultDispatcher.dispatch({action: Action.StartRoomFilter}); - } }; private onBlur = (ev: React.FocusEvent) => { - if (ev.target.value === "") { - defaultDispatcher.dispatch({action: Action.StopRoomFilter}); - } this.setState({focused: false}); }; From e4366632cf464e82e9c43816c1caca19189d6e5c Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Fri, 10 Jul 2020 02:54:11 +0100 Subject: [PATCH 0836/1504] Fix search padding --- res/css/structures/_LeftPanel2.scss | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index b3f7fcc8ee..7729eacc73 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -54,7 +54,10 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations flex-direction: column; .mx_LeftPanel2_userHeader { - padding: 12px 12px 20px; // 12px top, 12px sides, 20px bottom + /* 12px top, 12px sides, 20px bottom (using 13px bottom to account + * for internal whitespace in the breadcrumbs) + */ + padding: 12px 12px 13px; // Create another flexbox column for the rows to stack within display: flex; @@ -72,7 +75,8 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations width: 100%; overflow-y: hidden; overflow-x: scroll; - margin-top: 8px; + margin-top: 20px; + padding-bottom: 2px; } } From bba819759215326d417f6ea5d3de8ee1074d06cd Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 9 Jul 2020 22:40:34 -0600 Subject: [PATCH 0837/1504] Use the new layout store --- test/components/views/rooms/RoomList-test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/components/views/rooms/RoomList-test.js b/test/components/views/rooms/RoomList-test.js index 7876ad0f18..81ccf7d7f8 100644 --- a/test/components/views/rooms/RoomList-test.js +++ b/test/components/views/rooms/RoomList-test.js @@ -15,6 +15,7 @@ import GroupStore from '../../../../src/stores/GroupStore.js'; import { MatrixClient, Room, RoomMember } from 'matrix-js-sdk'; import {DefaultTagID} from "../../../../src/stores/room-list/models"; import RoomListStore, {LISTS_UPDATE_EVENT} from "../../../../src/stores/room-list/RoomListStore2"; +import RoomListLayoutStore from "../../../../src/stores/room-list/RoomListLayoutStore"; function generateRoomId() { return '!' + Math.random().toString().slice(2, 10) + ':domain'; @@ -118,7 +119,7 @@ describe('RoomList', () => { parentDiv = null; } - await RoomListStore.instance.resetLayouts(); + await RoomListLayoutStore.instance.resetLayouts(); await RoomListStore.instance.resetStore(); done(); From f2f813c43c46d1fb7cf0f9214def9863cc4c729a Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 10:20:26 +0200 Subject: [PATCH 0838/1504] make tag panel context menu icons follow text color --- .../context_menus/_TagTileContextMenu.scss | 22 ++++++++++++------- .../views/context_menus/TagTileContextMenu.js | 13 ++--------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/res/css/views/context_menus/_TagTileContextMenu.scss b/res/css/views/context_menus/_TagTileContextMenu.scss index e4ccc030a2..8929c8906e 100644 --- a/res/css/views/context_menus/_TagTileContextMenu.scss +++ b/res/css/views/context_menus/_TagTileContextMenu.scss @@ -15,9 +15,8 @@ limitations under the License. */ .mx_TagTileContextMenu_item { - padding-top: 8px; + padding: 8px; padding-right: 20px; - padding-bottom: 8px; cursor: pointer; white-space: nowrap; display: flex; @@ -25,15 +24,22 @@ limitations under the License. line-height: $font-16px; } -.mx_TagTileContextMenu_item object { - pointer-events: none; +.mx_TagTileContextMenu_item::before { + content: ''; + height: 15px; + width: 15px; + background-color: currentColor; + mask-repeat: no-repeat; + mask-size: contain; + margin-right: 8px; } +.mx_TagTileContextMenu_viewCommunity::before { + mask-image: url('$(res)/img/element-icons/view-community.svg'); +} -.mx_TagTileContextMenu_item_icon { - padding-right: 8px; - padding-left: 4px; - display: inline-block; +.mx_TagTileContextMenu_hideCommunity::before { + mask-image: url('$(res)/img/element-icons/hide.svg'); } .mx_TagTileContextMenu_separator { diff --git a/src/components/views/context_menus/TagTileContextMenu.js b/src/components/views/context_menus/TagTileContextMenu.js index fc33037390..62df4330c6 100644 --- a/src/components/views/context_menus/TagTileContextMenu.js +++ b/src/components/views/context_menus/TagTileContextMenu.js @@ -54,21 +54,12 @@ export default class TagTileContextMenu extends React.Component { } render() { - const TintableSvg = sdk.getComponent("elements.TintableSvg"); - return
    - - + { _t('View Community') }
    - - + { _t('Hide') }
    ; From 6dc7a5631b5ae32dae9a2259bedd22c33e523457 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 12:27:48 +0200 Subject: [PATCH 0839/1504] make tag panel less wide --- res/css/structures/_LeftPanel2.scss | 2 +- res/css/structures/_TagPanel.scss | 12 +++++------- src/components/views/elements/TagTile.js | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index 94f80fe2b4..e88157c0aa 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -16,7 +16,7 @@ limitations under the License. // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 -$tagPanelWidth: 70px; // only applies in this file, used for calculations +$tagPanelWidth: 56px; // only applies in this file, used for calculations .mx_LeftPanel2 { background-color: $roomlist2-bg-color; diff --git a/res/css/structures/_TagPanel.scss b/res/css/structures/_TagPanel.scss index 1f8443e395..719bf692e6 100644 --- a/res/css/structures/_TagPanel.scss +++ b/res/css/structures/_TagPanel.scss @@ -33,7 +33,7 @@ limitations under the License. .mx_TagPanel .mx_TagPanel_clearButton_container { /* Constant height within flex mx_TagPanel */ height: 70px; - width: 60px; + width: 56px; flex: none; @@ -51,7 +51,7 @@ limitations under the License. .mx_TagPanel .mx_TagPanel_divider { height: 0px; - width: 42px; + width: 34px; border-bottom: 1px solid $panel-divider-color; display: none; } @@ -69,12 +69,10 @@ limitations under the License. height: 100%; } .mx_TagPanel .mx_TagPanel_tagTileContainer > div { - height: 40px; - padding: 10px 0 9px 0; + margin: 8px 0; } .mx_TagPanel .mx_TagTile { - margin: 9px 0; // opacity: 0.5; position: relative; } @@ -86,8 +84,8 @@ limitations under the License. .mx_TagPanel .mx_TagTile_plus { margin-bottom: 12px; - height: 40px; - width: 40px; + height: 32px; + width: 32px; border-radius: 20px; background-color: $roomheader-addroom-bg-color; position: relative; diff --git a/src/components/views/elements/TagTile.js b/src/components/views/elements/TagTile.js index 1af681dadc..70cdfb7120 100644 --- a/src/components/views/elements/TagTile.js +++ b/src/components/views/elements/TagTile.js @@ -130,7 +130,7 @@ export default createReactClass({ const BaseAvatar = sdk.getComponent('avatars.BaseAvatar'); const profile = this.state.profile || {}; const name = profile.name || this.props.tag; - const avatarHeight = 40; + const avatarHeight = 32; const httpUrl = profile.avatarUrl ? this.context.mxcUrlToHttp( profile.avatarUrl, avatarHeight, avatarHeight, "crop", From a5ba0cad1fa7f2814c3c9127014ac3706d6e3fcf Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 08:13:23 -0600 Subject: [PATCH 0840/1504] Rename to trigger and add docs --- src/stores/room-list/RoomListStore2.ts | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 5591de67b1..f1b26f26ce 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -92,7 +92,12 @@ export class RoomListStore2 extends AsyncStore { await this.updateAlgorithmInstances(); } - private onRVSUpdate = async (quiet = false) => { + /** + * Handles suspected RoomViewStore changes. + * @param trigger Set to false to prevent a list update from being sent. Should only + * be used if the calling code will manually trigger the update. + */ + private onRVSUpdate = async ({trigger = true}) => { if (!this.enabled) return; // TODO: Remove with https://github.com/vector-im/riot-web/issues/14231 if (!this.matrixClient) return; // We assume there won't be RVS updates without a client @@ -113,7 +118,7 @@ export class RoomListStore2 extends AsyncStore { } } - if (!quiet) this.updateFn.trigger(); + if (trigger) this.updateFn.trigger(); }; protected onDispatch(payload: ActionPayload) { @@ -138,8 +143,8 @@ export class RoomListStore2 extends AsyncStore { // Update any settings here, as some may have happened before we were logically ready. console.log("Regenerating room lists: Startup"); await this.readAndCacheSettingsFromStore(); - await this.regenerateAllLists(true); - await this.onRVSUpdate(true); // fake an RVS update to adjust sticky room, if needed + await this.regenerateAllLists({trigger: false}); + await this.onRVSUpdate({trigger: false}); // fake an RVS update to adjust sticky room, if needed this.updateFn.trigger(); @@ -166,7 +171,7 @@ export class RoomListStore2 extends AsyncStore { console.log("Regenerating room lists: Settings changed"); await this.readAndCacheSettingsFromStore(); - await this.regenerateAllLists(true); // regenerate the lists now + await this.regenerateAllLists({trigger: false}); // regenerate the lists now this.updateFn.trigger(); } } @@ -474,7 +479,12 @@ export class RoomListStore2 extends AsyncStore { this.updateFn.mark(); }; - private async regenerateAllLists(quiet = false) { + /** + * Regenerates the room whole room list, discarding any previous results. + * @param trigger Set to false to prevent a list update from being sent. Should only + * be used if the calling code will manually trigger the update. + */ + private async regenerateAllLists({trigger = true}) { console.warn("Regenerating all room lists"); const sorts: ITagSortingMap = {}; @@ -499,7 +509,7 @@ export class RoomListStore2 extends AsyncStore { this.initialListsGenerated = true; - if (!quiet) this.updateFn.trigger(); + if (trigger) this.updateFn.trigger(); } public addFilter(filter: IFilterCondition): void { From 46d53e5c8c55cb82a768eb438ce4edb9fcdc321d Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 08:14:33 -0600 Subject: [PATCH 0841/1504] Reset before trigger just in case the function triggers too --- src/utils/MarkedExecution.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/MarkedExecution.ts b/src/utils/MarkedExecution.ts index d866720ecd..de6cf05953 100644 --- a/src/utils/MarkedExecution.ts +++ b/src/utils/MarkedExecution.ts @@ -50,8 +50,8 @@ export class MarkedExecution { */ public trigger() { if (!this.marked) return; + this.reset(); // reset first just in case the fn() causes a trigger() this.fn(); - this.reset(); } /** From 26427817f2704b674e5cea603786e3d968a53f27 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 08:18:40 -0600 Subject: [PATCH 0842/1504] Fix potential listener conflict with RVS If the RVS ever emits something that contains `trigger: false`, we're pretty screwed, so avoid that. --- src/stores/room-list/RoomListStore2.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index f1b26f26ce..05f678160e 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -63,7 +63,7 @@ export class RoomListStore2 extends AsyncStore { this.checkEnabled(); for (const settingName of this.watchedSettings) SettingsStore.monitorSetting(settingName, null); - RoomViewStore.addListener(this.onRVSUpdate); + RoomViewStore.addListener(() => this.handleRVSUpdate({})); this.algorithm.on(LIST_UPDATED_EVENT, this.onAlgorithmListUpdated); } @@ -97,7 +97,7 @@ export class RoomListStore2 extends AsyncStore { * @param trigger Set to false to prevent a list update from being sent. Should only * be used if the calling code will manually trigger the update. */ - private onRVSUpdate = async ({trigger = true}) => { + private async handleRVSUpdate({trigger = true}) { if (!this.enabled) return; // TODO: Remove with https://github.com/vector-im/riot-web/issues/14231 if (!this.matrixClient) return; // We assume there won't be RVS updates without a client @@ -119,7 +119,7 @@ export class RoomListStore2 extends AsyncStore { } if (trigger) this.updateFn.trigger(); - }; + } protected onDispatch(payload: ActionPayload) { // We do this to intentionally break out of the current event loop task, allowing @@ -144,7 +144,7 @@ export class RoomListStore2 extends AsyncStore { console.log("Regenerating room lists: Startup"); await this.readAndCacheSettingsFromStore(); await this.regenerateAllLists({trigger: false}); - await this.onRVSUpdate({trigger: false}); // fake an RVS update to adjust sticky room, if needed + await this.handleRVSUpdate({trigger: false}); // fake an RVS update to adjust sticky room, if needed this.updateFn.trigger(); From 8701e9293ec0946ee767ba89d5ea82001b926edc Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 10 Jul 2020 15:32:34 +0100 Subject: [PATCH 0843/1504] Add in-app rebranding toasts & prompts Either shows an informational dialog telling you the name has changed, or a more naggy one if the user needs to log in on a different URL. The new URL (if any) is hardcoded based on the current URL, and also with a bonus config param in case other deployments need to do similar. --- res/css/_components.scss | 1 + res/css/structures/_ToastContainer.scss | 6 + res/css/views/dialogs/_RebrandDialog.scss | 63 +++++++ res/img/element-logo.svg | 6 + res/img/riot-logo.svg | 6 + src/@types/global.d.ts | 2 + src/Lifecycle.js | 4 + src/RebrandListener.tsx | 169 ++++++++++++++++++ .../views/dialogs/RebrandDialog.tsx | 116 ++++++++++++ src/i18n/strings/en_EN.json | 9 + 10 files changed, 382 insertions(+) create mode 100644 res/css/views/dialogs/_RebrandDialog.scss create mode 100644 res/img/element-logo.svg create mode 100644 res/img/riot-logo.svg create mode 100644 src/RebrandListener.tsx create mode 100644 src/components/views/dialogs/RebrandDialog.tsx diff --git a/res/css/_components.scss b/res/css/_components.scss index 8288cf34f6..b25b08a144 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -72,6 +72,7 @@ @import "./views/dialogs/_KeyboardShortcutsDialog.scss"; @import "./views/dialogs/_MessageEditHistoryDialog.scss"; @import "./views/dialogs/_NewSessionReviewDialog.scss"; +@import "./views/dialogs/_RebrandDialog.scss"; @import "./views/dialogs/_RoomSettingsDialog.scss"; @import "./views/dialogs/_RoomSettingsDialogBridges.scss"; @import "./views/dialogs/_RoomUpgradeDialog.scss"; diff --git a/res/css/structures/_ToastContainer.scss b/res/css/structures/_ToastContainer.scss index 2916c4ffdc..b15f357fc7 100644 --- a/res/css/structures/_ToastContainer.scss +++ b/res/css/structures/_ToastContainer.scss @@ -56,6 +56,8 @@ limitations under the License. grid-row: 1; mask-size: 100%; mask-repeat: no-repeat; + background-size: 100%; + background-repeat: no-repeat; } &.mx_Toast_icon_verification::after { @@ -67,6 +69,10 @@ limitations under the License. background-image: url("$(res)/img/e2e/warning.svg"); } + &.mx_Toast_icon_element_logo::after { + background-image: url("$(res)/img/element-logo.svg"); + } + .mx_Toast_title, .mx_Toast_body { grid-column: 2; } diff --git a/res/css/views/dialogs/_RebrandDialog.scss b/res/css/views/dialogs/_RebrandDialog.scss new file mode 100644 index 0000000000..cd100a7c5e --- /dev/null +++ b/res/css/views/dialogs/_RebrandDialog.scss @@ -0,0 +1,63 @@ +/* +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_RebrandDialog { + text-align: center; + + a:link, + a:hover, + a:visited { + @mixin mx_Dialog_link; + } + + .mx_Dialog_buttons { + margin-top: 43px; + text-align: center; + } +} + +.mx_RebrandDialog_body { + width: 550px; + margin-left: auto; + margin-right: auto; +} + +.mx_RebrandDialog_logoContainer { + margin-top: 35px; + margin-bottom: 20px; + display: flex; + align-items: center; + justify-content: center; +} + +.mx_RebrandDialog_logo { + margin-left: 28px; + margin-right: 28px; + width: 64px; + height: 64px; +} + +.mx_RebrandDialog_chevron:after { + content: ''; + display: inline-block; + width: 24px; + height: 24px; + mask-position: center; + mask-size: contain; + mask-repeat: no-repeat; + background-color: $muted-fg-color; + mask-image: url('$(res)/img/feather-customised/chevron-right.svg'); +} diff --git a/res/img/element-logo.svg b/res/img/element-logo.svg new file mode 100644 index 0000000000..2cd11ed193 --- /dev/null +++ b/res/img/element-logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/res/img/riot-logo.svg b/res/img/riot-logo.svg new file mode 100644 index 0000000000..ac1e547234 --- /dev/null +++ b/res/img/riot-logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index 2c2fec759c..bd03702729 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -19,6 +19,7 @@ import ContentMessages from "../ContentMessages"; import { IMatrixClientPeg } from "../MatrixClientPeg"; import ToastStore from "../stores/ToastStore"; import DeviceListener from "../DeviceListener"; +import RebrandListener from "../RebrandListener"; import { RoomListStore2 } from "../stores/room-list/RoomListStore2"; import { PlatformPeg } from "../PlatformPeg"; @@ -33,6 +34,7 @@ declare global { mx_ContentMessages: ContentMessages; mx_ToastStore: ToastStore; mx_DeviceListener: DeviceListener; + mx_RebrandListener: RebrandListener; mx_RoomListStore2: RoomListStore2; mxPlatformPeg: PlatformPeg; } diff --git a/src/Lifecycle.js b/src/Lifecycle.js index 9ae4ae7e03..a05392c3e9 100644 --- a/src/Lifecycle.js +++ b/src/Lifecycle.js @@ -40,6 +40,7 @@ import ToastStore from "./stores/ToastStore"; import {IntegrationManagers} from "./integrations/IntegrationManagers"; import {Mjolnir} from "./mjolnir/Mjolnir"; import DeviceListener from "./DeviceListener"; +import RebrandListener from "./RebrandListener"; import {Jitsi} from "./widgets/Jitsi"; import {SSO_HOMESERVER_URL_KEY, SSO_ID_SERVER_URL_KEY} from "./BasePlatform"; @@ -627,6 +628,8 @@ async function startMatrixClient(startSyncing=true) { // Now that we have a MatrixClientPeg, update the Jitsi info await Jitsi.getInstance().start(); + RebrandListener.sharedInstance().start(); + // dispatch that we finished starting up to wire up any other bits // of the matrix client that cannot be set prior to starting up. dis.dispatch({action: 'client_started'}); @@ -688,6 +691,7 @@ export function stopMatrixClient(unsetClient=true) { IntegrationManagers.sharedInstance().stopWatching(); Mjolnir.sharedInstance().stop(); DeviceListener.sharedInstance().stop(); + RebrandListener.sharedInstance().stop(); if (DMRoomMap.shared()) DMRoomMap.shared().stop(); EventIndexPeg.stop(); const cli = MatrixClientPeg.get(); diff --git a/src/RebrandListener.tsx b/src/RebrandListener.tsx new file mode 100644 index 0000000000..37d49561b8 --- /dev/null +++ b/src/RebrandListener.tsx @@ -0,0 +1,169 @@ +/* +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 SdkConfig from "./SdkConfig"; +import ToastStore from "./stores/ToastStore"; +import GenericToast from "./components/views/toasts/GenericToast"; +import RebrandDialog from "./components/views/dialogs/RebrandDialog"; +import { RebrandDialogKind } from "./components/views/dialogs/RebrandDialog"; +import Modal from './Modal'; +import { _t } from './languageHandler'; + +const TOAST_KEY = 'rebrand'; +const NAG_INTERVAL = 24 * 60 * 60 * 1000; + +function getRedirectUrl(url) { + const redirectUrl = new URL(url); + redirectUrl.hash = ''; + + if (SdkConfig.get()['redirectToNewBrandUrl']) { + const newUrl = new URL(SdkConfig.get()['redirectToNewBrandUrl']); + if (url.hostname !== newUrl.hostname || url.pathname !== newUrl.pathname) { + redirectUrl.hostname = newUrl.hostname; + redirectUrl.pathname = newUrl.pathname; + return redirectUrl; + } + return null; + } else if (url.hostname === 'riot.im') { + if (url.pathname.startsWith('/app')) { + redirectUrl.hostname = 'app.element.io'; + } else if (url.pathname.startsWith('/staging')) { + redirectUrl.hostname = 'staging.element.io'; + } else if (url.pathname.startsWith('/develop')) { + redirectUrl.hostname = 'develop.element.io'; + } + + return redirectUrl.href; + } else if (url.hostname.endsWith('.riot.im')) { + redirectUrl.hostname = url.hostname.substr(0, url.hostname.length - '.riot.im'.length) + '.element.io'; + return redirectUrl.href; + } else { + return null; + } +} + +/** + * Shows toasts informing the user that the name of the app has changed and, + * potentially, that they should head to a different URL and log in there + */ +export default class RebrandListener { + private _reshowTimer?: number; + private nagAgainAt?: number = null; + + static sharedInstance() { + if (!window.mx_RebrandListener) window.mx_RebrandListener = new RebrandListener(); + return window.mx_RebrandListener; + } + + constructor() { + this._reshowTimer = null; + } + + start() { + this.recheck(); + } + + stop() { + if (this._reshowTimer) { + clearTimeout(this._reshowTimer); + this._reshowTimer = null; + } + } + + onNagToastLearnMore = async () => { + const [doneClicked] = await Modal.createDialog(RebrandDialog, { + kind: RebrandDialogKind.NAG, + targetUrl: getRedirectUrl(window.location), + }).finished; + if (doneClicked) { + // open in new tab: they should come back here & log out + window.open(getRedirectUrl(window.location), '_blank'); + } + + // whatever the user clicks, we go away & nag again after however long: + // If they went to the new URL, we want to nag them to log out if they + // come back to this tab, and if they clicked, 'remind me later' we want + // to, well, remind them later. + this.nagAgainAt = Date.now() + NAG_INTERVAL; + this.recheck(); + } + + onOneTimeToastLearnMore = async () => { + const [doneClicked] = await Modal.createDialog(RebrandDialog, { + kind: RebrandDialogKind.ONE_TIME, + }).finished; + if (doneClicked) { + localStorage.setItem('mx_rename_dialog_dismissed', 'true'); + this.recheck(); + } + } + + onNagTimerFired = () => { + this._reshowTimer = null; + this.nagAgainAt = null; + this.recheck(); + } + + private async recheck() { + // There are two types of toast/dialog we show: a 'one time' informing the user that + // the app is now called a different thing but no action is required from them (they + // may need to look for a different name name/icon to launch the app but don't need to + // log in again) and a nag toast where they need to log in to the app on a different domain. + let nagToast = false; + let oneTimeToast = false; + + if (getRedirectUrl(window.location)) { + if (!this.nagAgainAt) { + // if we have redirectUrl, show the nag toast + nagToast = true; + } + } else { + // otherwise we show the 'one time' toast / dialog + const renameDialogDismissed = localStorage.getItem('mx_rename_dialog_dismissed'); + if (renameDialogDismissed !== 'true') { + oneTimeToast = true; + } + } + + if (nagToast || oneTimeToast) { + let description; + if (nagToast) { + description = _t("Use your account to sign in to the latest version"); + } else { + description = _t("We’re excited to announce Riot is now Element"); + } + + ToastStore.sharedInstance().addOrReplaceToast({ + key: TOAST_KEY, + title: _t("Riot is now Element!"), + icon: 'element_logo', + props: { + description, + acceptLabel: _t("Learn More"), + onAccept: nagToast ? this.onNagToastLearnMore : this.onOneTimeToastLearnMore, + }, + component: GenericToast, + priority: 20, + }); + } else { + ToastStore.sharedInstance().dismissToast(TOAST_KEY); + } + + if (!this._reshowTimer && this.nagAgainAt) { + this._reshowTimer = setTimeout(this.onNagTimerFired, (this.nagAgainAt - Date.now()) + 100); + } + } +} diff --git a/src/components/views/dialogs/RebrandDialog.tsx b/src/components/views/dialogs/RebrandDialog.tsx new file mode 100644 index 0000000000..6daa33f6de --- /dev/null +++ b/src/components/views/dialogs/RebrandDialog.tsx @@ -0,0 +1,116 @@ +/* +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 * as React from 'react'; +import * as PropTypes from 'prop-types'; +import BaseDialog from './BaseDialog'; +import { _t } from '../../../languageHandler'; +import DialogButtons from '../elements/DialogButtons'; + +export enum RebrandDialogKind { + NAG, + ONE_TIME, +}; + +interface IProps { + onFinished: () => void; + kind: RebrandDialogKind, + targetUrl?: string, +} + +export default class RebrandDialog extends React.PureComponent { + private onDoneClick = () => { + this.props.onFinished(true); + } + + private onGoToElementClick = () => { + this.props.onFinished(true); + } + + private onRemindMeLaterClick = () => { + this.props.onFinished(false); + } + + private getPrettyTargetUrl() { + const u = new URL(this.props.targetUrl); + let ret = u.host; + if (u.pathname !== '/') ret += u.pathname; + return ret; + } + + getBodyText() { + if (this.props.kind === RebrandDialogKind.NAG) { + return _t( + "Use your account to sign in to the latest version of the app at ", {}, + { + a: sub => {this.getPrettyTargetUrl()}, + }, + ); + } else { + return _t( + "You’re already signed in and good to go here, but you can also grab the latest " + + "versions of the app on all platforms at element.io/get-started.", {}, + { + a: sub => {sub}, + }, + ); + } + } + + getDialogButtons() { + if (this.props.kind === RebrandDialogKind.NAG) { + return + } else { + return + } + } + + render() { + return +
    {this.getBodyText()}
    +
    + Riot Logo + + Element Logo +
    +
    + {_t( + "Learn more at element.io/previously-riot", {}, { + a: sub => {sub}, + } + )} +
    + {this.getDialogButtons()} +
    ; + } +} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 58fc6870d1..a3b63b4b93 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -119,6 +119,10 @@ "Unable to enable Notifications": "Unable to enable Notifications", "This email address was not found": "This email address was not found", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Your email address does not appear to be associated with a Matrix ID on this Homeserver.", + "Use your account to sign in to the latest version": "Use your account to sign in to the latest version", + "We’re excited to announce Riot is now Element": "We’re excited to announce Riot is now Element", + "Riot is now Element!": "Riot is now Element!", + "Learn More": "Learn More", "Sign In or Create Account": "Sign In or Create Account", "Use your account or create a new one to continue.": "Use your account or create a new one to continue.", "Create Account": "Create Account", @@ -1753,6 +1757,11 @@ "Use this session to verify your new one, granting it access to encrypted messages:": "Use this session to verify your new one, granting it access to encrypted messages:", "If you didn’t sign in to this session, your account may be compromised.": "If you didn’t sign in to this session, your account may be compromised.", "This wasn't me": "This wasn't me", + "Use your account to sign in to the latest version of the app at ": "Use your account to sign in to the latest version of the app at ", + "You’re already signed in and good to go here, but you can also grab the latest versions of the app on all platforms at element.io/get-started.": "You’re already signed in and good to go here, but you can also grab the latest versions of the app on all platforms at element.io/get-started.", + "Go to Element": "Go to Element", + "We’re excited to announce Riot is now Element!": "We’re excited to announce Riot is now Element!", + "Learn more at element.io/previously-riot": "Learn more at element.io/previously-riot", "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.", "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.": "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.", "Report bugs & give feedback": "Report bugs & give feedback", From 2bf2a08e7a8168e4459b7d65c9c58e3204d58349 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 08:52:46 -0600 Subject: [PATCH 0844/1504] Mark safari hacks --- res/css/structures/_LeftPanel2.scss | 4 ++-- res/css/views/rooms/_RoomSublist2.scss | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index 71d16aaa8f..6d9608f312 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -55,7 +55,7 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations .mx_LeftPanel2_userHeader { padding: 12px 12px 20px; // 12px top, 12px sides, 20px bottom - flex-shrink: 0; + flex-shrink: 0; // to convince safari's layout engine the flexbox is fine // Create another flexbox column for the rows to stack within display: flex; @@ -93,7 +93,7 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations margin-left: 12px; margin-right: 12px; - flex-shrink: 0; + flex-shrink: 0; // to convince safari's layout engine the flexbox is fine // Create a flexbox to organize the inputs display: flex; diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index eca738c46a..c656f2d15d 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -24,7 +24,7 @@ limitations under the License. margin-left: 8px; width: 100%; - flex-shrink: 0; + flex-shrink: 0; // to convince safari's layout engine the flexbox is fine .mx_RoomSublist2_headerContainer { // Create a flexbox to make alignment easy From 3a3bfb39ee5f2ec4f72b305ff94fc6fd7f55332a Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 09:18:53 -0600 Subject: [PATCH 0845/1504] Make the theme switcher switch between Element themes --- src/components/structures/UserMenu.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index f3026ec12f..916d4c0d83 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -98,7 +98,7 @@ export default class UserMenu extends React.Component { if (theme.startsWith("custom-")) { return getCustomTheme(theme.substring("custom-".length)).is_dark; } - return theme === "dark"; + return theme === "dark" || theme === "element-dark"; } private onProfileUpdate = async () => { @@ -152,7 +152,7 @@ export default class UserMenu extends React.Component { // Disable system theme matching if the user hits this button SettingsStore.setValue("use_system_theme", null, SettingLevel.DEVICE, false); - const newTheme = this.state.isDarkTheme ? "light" : "dark"; + const newTheme = this.state.isDarkTheme ? "element" : "element-dark"; SettingsStore.setValue("theme", null, SettingLevel.DEVICE, newTheme); // set at same level as Appearance tab }; From f8db0a4637ada26406cfd475d287f61d523381c5 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 10:21:00 -0600 Subject: [PATCH 0846/1504] Resolve complex merge conflicts --- src/stores/room-list/RoomListStore2.ts | 33 +++++++------------------- 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index bbc2e7f478..d53514dd7a 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -97,11 +97,14 @@ export class RoomListStore2 extends AsyncStore { this._matrixClient = client; + // Update any settings here, as some may have happened before we were logically ready. // Update any settings here, as some may have happened before we were logically ready. console.log("Regenerating room lists: Startup"); await this.readAndCacheSettingsFromStore(); - await this.regenerateAllLists(); - this.onRVSUpdate(); // fake an RVS update to adjust sticky room, if needed + await this.regenerateAllLists({trigger: false}); + await this.handleRVSUpdate({trigger: false}); // fake an RVS update to adjust sticky room, if needed + + this.updateFn.trigger(); } // TODO: Remove enabled flag with the old RoomListStore: https://github.com/vector-im/riot-web/issues/14367 @@ -162,25 +165,9 @@ export class RoomListStore2 extends AsyncStore { return; } -<<<<<<< await this.makeReady(payload.matrixClient); -======= - // TODO: Remove with https://github.com/vector-im/riot-web/issues/14231 - this.checkEnabled(); - if (!this.enabled) return; - - this._matrixClient = payload.matrixClient; - - // Update any settings here, as some may have happened before we were logically ready. - console.log("Regenerating room lists: Startup"); - await this.readAndCacheSettingsFromStore(); - await this.regenerateAllLists({trigger: false}); - await this.handleRVSUpdate({trigger: false}); // fake an RVS update to adjust sticky room, if needed - - this.updateFn.trigger(); return; // no point in running the next conditions - they won't match ->>>>>>> } // TODO: Remove this once the RoomListStore becomes default @@ -511,17 +498,15 @@ export class RoomListStore2 extends AsyncStore { this.updateFn.mark(); }; -<<<<<<< - // This is only exposed externally for the tests. Do not call this within the app. - public async regenerateAllLists() { -======= /** * Regenerates the room whole room list, discarding any previous results. + * + * Note: This is only exposed externally for the tests. Do not call this from within + * the app. * @param trigger Set to false to prevent a list update from being sent. Should only * be used if the calling code will manually trigger the update. */ - private async regenerateAllLists({trigger = true}) { ->>>>>>> + public async regenerateAllLists({trigger = true}) { console.warn("Regenerating all room lists"); const sorts: ITagSortingMap = {}; From d5a3071518a095f19b82d3fb784b6872372ae063 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 18:29:39 +0200 Subject: [PATCH 0847/1504] put show more button inside resizer this way we have a flexbox layout in the resizer with: - the resize handle (fixed) - the show more/less button, if any (fixed) - the list of tiles (grabbing whatever is left) --- res/css/views/rooms/_RoomSublist2.scss | 20 +++++++++++++++----- src/components/views/rooms/RoomSublist2.tsx | 6 ++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 6a77056917..bd00a7fc72 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -186,12 +186,22 @@ limitations under the License. flex-direction: column; overflow: hidden; + .mx_RoomSublist2_tiles { + flex: 1 0 0; + overflow: hidden; + // need this to be flex otherwise the overflow hidden from above + // sometimes vertically centers the clipped list ... no idea why it would do this + // as the box model should be top aligned. Happens in both FF and Chromium + display: flex; + flex-direction: column; + } + .mx_RoomSublist2_resizerHandles_showNButton { - position: absolute; - bottom: -32px; // height of the button - left: 0; - right: 0; - height: 4px; // height of the handle + flex: 0 0 32px; + } + + .mx_RoomSublist2_resizerHandles { + flex: 0 0 4px; } // Class name comes from the ResizableBox component diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index caa679f1d0..70d65f2437 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -666,9 +666,11 @@ export default class RoomSublist2 extends React.Component { className="mx_RoomSublist2_resizeBox" enable={handles} > - {visibleTiles} +
    + {visibleTiles} +
    + {showNButton} - {showNButton} ); } From 725b7f895015c5af42b6d4535f46e6928f9baca1 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 18:30:52 +0200 Subject: [PATCH 0848/1504] make show more button a bit less tall --- res/css/views/rooms/_RoomSublist2.scss | 4 ---- src/components/views/rooms/RoomSublist2.tsx | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index bd00a7fc72..3744641390 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -241,11 +241,7 @@ limitations under the License. // Update the render() function for RoomSublist2 if these change // Update the ListLayout class for minVisibleTiles if these change. - // - // At 24px high, 8px padding on the top and 4px padding on the bottom this equates to 0.73 of - // a tile due to how the padding calculations work. height: 24px; - padding-top: 8px; padding-bottom: 4px; // We create a flexbox to cheat at alignment diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 70d65f2437..66b5a4aad1 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -59,7 +59,7 @@ import RoomListLayoutStore from "../../../stores/room-list/RoomListLayoutStore"; * warning disappears. * *******************************************************************/ -const SHOW_N_BUTTON_HEIGHT = 32; // As defined by CSS +const SHOW_N_BUTTON_HEIGHT = 28; // As defined by CSS const RESIZE_HANDLE_HEIGHT = 4; // As defined by CSS export const HEADER_HEIGHT = 32; // As defined by CSS From 49f7170d9591068bff30203bae82e8e52237bded Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 18:31:53 +0200 Subject: [PATCH 0849/1504] extract type --- src/components/views/rooms/RoomSublist2.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 66b5a4aad1..c219b87c92 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -86,6 +86,12 @@ interface IProps { // TODO: Account for https://github.com/vector-im/riot-web/issues/14179 } +// TODO: Use re-resizer's NumberSize when it is exposed as the type +interface ResizeDelta { + width: number, + height: number, +} + type PartialDOMRect = Pick; interface IState { @@ -161,7 +167,7 @@ export default class RoomSublist2 extends React.Component { e: MouseEvent | TouchEvent, travelDirection: Direction, refToElement: HTMLDivElement, - delta: { width: number, height: number }, // TODO: Use re-resizer's NumberSize when it is exposed as the type + delta: ResizeDelta, ) => { // Do some sanity checks, but in reality we shouldn't need these. if (travelDirection !== "bottom") return; From 314250a6e4234aa56c0c967de983000377801f5c Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 10:38:07 -0600 Subject: [PATCH 0850/1504] Add a test mode flag to the store --- src/stores/room-list/RoomListStore2.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index d53514dd7a..acbb72f1d8 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -46,6 +46,12 @@ interface IState { export const LISTS_UPDATE_EVENT = "lists_update"; export class RoomListStore2 extends AsyncStore { + /** + * Set to true if you're running tests on the store. Should not be touched in + * any other environment. + */ + public static TEST_MODE = false; + private _matrixClient: MatrixClient; private initialListsGenerated = false; private enabled = false; @@ -104,6 +110,7 @@ export class RoomListStore2 extends AsyncStore { await this.regenerateAllLists({trigger: false}); await this.handleRVSUpdate({trigger: false}); // fake an RVS update to adjust sticky room, if needed + this.updateFn.mark(); // we almost certainly want to trigger an update. this.updateFn.trigger(); } @@ -152,7 +159,14 @@ export class RoomListStore2 extends AsyncStore { if (trigger) this.updateFn.trigger(); } - protected onDispatch(payload: ActionPayload) { + protected async onDispatch(payload: ActionPayload) { + // When we're running tests we can't reliably use setImmediate out of timing concerns. + // As such, we use a more synchronous model. + if (RoomListStore2.TEST_MODE) { + await this.onDispatchAsync(payload); + return; + } + // We do this to intentionally break out of the current event loop task, allowing // us to instead wait for a more convenient time to run our updates. setImmediate(() => this.onDispatchAsync(payload)); From 652fb9e6130323553c5fa5aa83646ed7bea589e5 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 18:35:07 +0200 Subject: [PATCH 0851/1504] track height in pixels in component state --- src/components/views/rooms/RoomSublist2.tsx | 47 +++++++++++++-------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index c219b87c92..13690bd1ca 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -111,15 +111,36 @@ export default class RoomSublist2 extends React.Component { this.layout = RoomListLayoutStore.instance.getLayoutFor(this.props.tagId); + const height = this.calculateInitialHeight(); this.state = { notificationState: RoomNotificationStateStore.instance.getListState(this.props.tagId), contextMenuPosition: null, isResizing: false, + height, }; this.state.notificationState.setRooms(this.props.rooms); this.dispatcherRef = defaultDispatcher.register(this.onAction); } + private calculateInitialHeight() { + const requestedVisibleTiles = Math.max(Math.floor(this.layout.visibleTiles), this.layout.minVisibleTiles); + const tileCount = Math.min(this.numTiles, requestedVisibleTiles); + const height = this.layout.tilesToPixelsWithPadding(tileCount, this.padding); + return height; + } + + private get padding() { + let padding = RESIZE_HANDLE_HEIGHT; + // this is used for calculating the max height of the whole container, + // and takes into account whether there should be room reserved for the show less button + // when fully expanded. Note that the show more button might still be shown when not fully expanded, + // but in this case it will take the space of a tile and we don't need to reserve space for it. + if (this.numTiles > this.layout.defaultVisibleTiles) { + padding += SHOW_N_BUTTON_HEIGHT; + } + return padding; + } + private get numTiles(): number { return (this.props.rooms || []).length + (this.props.extraBadTilesThatShouldntExist || []).length; } @@ -568,7 +589,11 @@ export default class RoomSublist2 extends React.Component { if (visibleTiles.length > 0) { const layout = this.layout; // to shorten calls - const maxTilesFactored = layout.tilesWithResizerBoxFactor(this.numTiles); + const minTiles = Math.min(layout.minVisibleTiles, this.numTiles); + const showMoreAtMinHeight = minTiles < this.numTiles; + const minHeightPadding = RESIZE_HANDLE_HEIGHT + (showMoreAtMinHeight ? SHOW_N_BUTTON_HEIGHT : 0); + const minTilesPx = layout.tilesToPixelsWithPadding(minTiles, minHeightPadding); + const maxTilesPx = layout.tilesToPixelsWithPadding(this.numTiles, this.padding); const showMoreBtnClasses = classNames({ 'mx_RoomSublist2_showNButton': true, 'mx_RoomSublist2_isCutting': this.state.isResizing && layout.visibleTiles < maxTilesFactored, @@ -578,9 +603,9 @@ export default class RoomSublist2 extends React.Component { // floats above the resize handle, if we have one present. If the user has all // tiles visible, it becomes 'show less'. let showNButton = null; - if (this.numTiles > visibleTiles.length) { // we have a cutoff condition - add the button to show all const numMissing = this.numTiles - visibleTiles.length; + if (maxTilesPx > this.state.height) { let showMoreText = ( {_t("Show %(count)s more", {count: numMissing})} @@ -595,7 +620,7 @@ export default class RoomSublist2 extends React.Component { {showMoreText} ); - } else if (this.numTiles <= visibleTiles.length && this.numTiles > this.layout.defaultVisibleTiles) { + } else if (this.numTiles > this.layout.defaultVisibleTiles) { // we have all tiles visible - add a button to show less let showLessText = ( @@ -639,29 +664,15 @@ export default class RoomSublist2 extends React.Component { // goes backwards and can become wildly incorrect (visibleTiles says 18 when there's // only mathematically 7 possible). - // The padding is variable though, so figure out what we need padding for. - let padding = 0; - //if (showNButton) padding += SHOW_N_BUTTON_HEIGHT; - //padding += RESIZE_HANDLE_HEIGHT; // always append the handle height - - const relativeTiles = layout.tilesWithPadding(this.numTiles, padding); - const minTilesPx = layout.calculateTilesToPixelsMin(relativeTiles, layout.minVisibleTiles, padding); - const maxTilesPx = layout.tilesToPixelsWithPadding(this.numTiles, padding); - const tilesWithoutPadding = Math.min(relativeTiles, layout.visibleTiles); - const tilesPx = layout.calculateTilesToPixelsMin(relativeTiles, tilesWithoutPadding, padding); - const handleWrapperClasses = classNames({ 'mx_RoomSublist2_resizerHandles': true, 'mx_RoomSublist2_resizerHandles_showNButton': !!showNButton, }); - const dimensions = { - height: tilesPx, - }; content = ( Date: Fri, 10 Jul 2020 18:36:33 +0200 Subject: [PATCH 0852/1504] make all height changes update component state also set visibleTiles as side-effect --- src/components/views/rooms/RoomSublist2.tsx | 46 ++++++++++----------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 13690bd1ca..713b70ce94 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -110,7 +110,7 @@ export default class RoomSublist2 extends React.Component { super(props); this.layout = RoomListLayoutStore.instance.getLayoutFor(this.props.tagId); - + this.heightAtStart = 0; const height = this.calculateInitialHeight(); this.state = { notificationState: RoomNotificationStateStore.instance.getListState(this.props.tagId), @@ -184,47 +184,45 @@ export default class RoomSublist2 extends React.Component { if (this.props.onAddRoom) this.props.onAddRoom(); }; + private applyHeightChange(newHeight: number) { + const heightInTiles = Math.ceil(this.layout.pixelsToTiles(newHeight - this.padding)); + this.layout.visibleTiles = Math.min(this.numTiles, heightInTiles); + } + private onResize = ( e: MouseEvent | TouchEvent, travelDirection: Direction, refToElement: HTMLDivElement, delta: ResizeDelta, ) => { - // Do some sanity checks, but in reality we shouldn't need these. - if (travelDirection !== "bottom") return; - if (delta.height === 0) return; // something went wrong, so just ignore it. - - // NOTE: the movement in the MouseEvent (not present on a TouchEvent) is inaccurate - // for our purposes. The delta provided by the library is also a change *from when - // resizing started*, meaning it is fairly useless for us. This is why we just use - // the client height and run with it. - - const heightBefore = this.layout.visibleTiles; - const heightInTiles = this.layout.pixelsToTiles(refToElement.clientHeight); - this.layout.setVisibleTilesWithin(heightInTiles, this.numTiles); - if (heightBefore === this.layout.visibleTiles) return; // no-op - this.forceUpdate(); // because the layout doesn't trigger a re-render + const newHeight = this.heightAtStart + delta.height; + this.applyHeightChange(newHeight); + this.setState({height: newHeight}); }; private onResizeStart = () => { + this.heightAtStart = this.state.height; this.setState({isResizing: true}); }; - private onResizeStop = () => { - this.setState({isResizing: false}); + private onResizeStop = (e, direction, ref, d) => { + const newHeight = this.heightAtStart + d.height; + this.applyHeightChange(newHeight); + this.setState({isResizing: false, height: newHeight}); }; private onShowAllClick = () => { - const numVisibleTiles = this.numVisibleTiles; - this.layout.visibleTiles = this.layout.tilesWithPadding(this.numTiles, MAX_PADDING_HEIGHT); - this.forceUpdate(); // because the layout doesn't trigger a re-render - setImmediate(this.focusRoomTile, numVisibleTiles); // focus the tile after the current bottom one + const newHeight = this.layout.tilesToPixelsWithPadding(this.numTiles, this.padding); + this.applyHeightChange(newHeight); + this.setState({height: newHeight}, () => { + this.focusRoomTile(this.numTiles - 1); + }); }; private onShowLessClick = () => { - this.layout.visibleTiles = this.layout.defaultVisibleTiles; - this.forceUpdate(); // because the layout doesn't trigger a re-render - // focus will flow to the show more button here + const newHeight = this.layout.tilesToPixelsWithPadding(this.layout.defaultVisibleTiles, this.padding); + this.applyHeightChange(newHeight); + this.setState({height: newHeight}); }; private focusRoomTile = (index: number) => { From 86817430c51cbad1234c200c61ff8de56f8ab415 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 18:37:58 +0200 Subject: [PATCH 0853/1504] update initially shown amount of tiles on component update as rooms aren't all available at ctor time --- src/components/views/rooms/RoomSublist2.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 713b70ce94..6acb5f929c 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -142,7 +142,11 @@ export default class RoomSublist2 extends React.Component { } private get numTiles(): number { - return (this.props.rooms || []).length + (this.props.extraBadTilesThatShouldntExist || []).length; + return RoomSublist2.calcNumTiles(this.props); + } + + private static calcNumTiles(props) { + return (props.rooms || []).length + (props.extraBadTilesThatShouldntExist || []).length; } private get numVisibleTiles(): number { @@ -150,8 +154,13 @@ export default class RoomSublist2 extends React.Component { return Math.min(nVisible, this.numTiles); } - public componentDidUpdate() { + public componentDidUpdate(prevProps) { this.state.notificationState.setRooms(this.props.rooms); + // as the rooms can come in one by one we need to reevaluate + // the amount of available rooms to cap the amount of requested visible rooms by the layout + if (RoomSublist2.calcNumTiles(prevProps) !== this.numTiles) { + this.setState({height: this.calculateInitialHeight()}); + } } public componentWillUnmount() { From e2aa6ecf6b6dd9a9f0290fef092d1de8cc2afee7 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 18:38:32 +0200 Subject: [PATCH 0854/1504] fix show X more counter --- src/components/views/rooms/RoomSublist2.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 6acb5f929c..1a1a45b7cf 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -610,9 +610,11 @@ export default class RoomSublist2 extends React.Component { // floats above the resize handle, if we have one present. If the user has all // tiles visible, it becomes 'show less'. let showNButton = null; - // we have a cutoff condition - add the button to show all - const numMissing = this.numTiles - visibleTiles.length; + if (maxTilesPx > this.state.height) { + const nonPaddedHeight = this.state.height - RESIZE_HANDLE_HEIGHT - SHOW_N_BUTTON_HEIGHT; + const amountFullyShown = Math.floor(nonPaddedHeight / this.layout.tileHeight); + const numMissing = this.numTiles - amountFullyShown; let showMoreText = ( {_t("Show %(count)s more", {count: numMissing})} From 85ac256231e75dcef0d3f82d463768e90c39992a Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 18:38:53 +0200 Subject: [PATCH 0855/1504] cleanup --- res/css/views/rooms/_RoomSublist2.scss | 10 ---------- src/components/views/rooms/RoomSublist2.tsx | 2 -- 2 files changed, 12 deletions(-) diff --git a/res/css/views/rooms/_RoomSublist2.scss b/res/css/views/rooms/_RoomSublist2.scss index 3744641390..73dc7d58b8 100644 --- a/res/css/views/rooms/_RoomSublist2.scss +++ b/res/css/views/rooms/_RoomSublist2.scss @@ -267,16 +267,6 @@ limitations under the License. .mx_RoomSublist2_showLessButtonChevron { mask-image: url('$(res)/img/feather-customised/chevron-up.svg'); } - - &.mx_RoomSublist2_isCutting::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - box-shadow: 0px -2px 3px rgba(46, 47, 50, 0.08); - } } &.mx_RoomSublist2_hasMenuOpen, diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 1a1a45b7cf..5a7bfa3990 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -585,7 +585,6 @@ export default class RoomSublist2 extends React.Component { // TODO: Error boundary: https://github.com/vector-im/riot-web/issues/14185 const visibleTiles = this.renderVisibleTiles(); - const classes = classNames({ 'mx_RoomSublist2': true, 'mx_RoomSublist2_hasMenuOpen': !!this.state.contextMenuPosition, @@ -603,7 +602,6 @@ export default class RoomSublist2 extends React.Component { const maxTilesPx = layout.tilesToPixelsWithPadding(this.numTiles, this.padding); const showMoreBtnClasses = classNames({ 'mx_RoomSublist2_showNButton': true, - 'mx_RoomSublist2_isCutting': this.state.isResizing && layout.visibleTiles < maxTilesFactored, }); // If we're hiding rooms, show a 'show more' button to the user. This button From 15ea3a528796d6e50271095d8754b7f6fcb25bc2 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 18:42:51 +0200 Subject: [PATCH 0856/1504] add types --- src/components/views/rooms/RoomSublist2.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 5a7bfa3990..a059d146e8 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -214,8 +214,13 @@ export default class RoomSublist2 extends React.Component { this.setState({isResizing: true}); }; - private onResizeStop = (e, direction, ref, d) => { - const newHeight = this.heightAtStart + d.height; + private onResizeStop = ( + e: MouseEvent | TouchEvent, + travelDirection: Direction, + refToElement: HTMLDivElement, + delta: ResizeDelta, + ) => { + const newHeight = this.heightAtStart + delta.height; this.applyHeightChange(newHeight); this.setState({isResizing: false, height: newHeight}); }; From ae8d6f5523a3e65548175e6d10410ddce0b67006 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 18:48:54 +0200 Subject: [PATCH 0857/1504] make tsc happy --- src/components/views/rooms/RoomSublist2.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index a059d146e8..73d53ccae7 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -88,8 +88,8 @@ interface IProps { // TODO: Use re-resizer's NumberSize when it is exposed as the type interface ResizeDelta { - width: number, - height: number, + width: number; + height: number; } type PartialDOMRect = Pick; @@ -98,6 +98,7 @@ interface IState { notificationState: ListNotificationState; contextMenuPosition: PartialDOMRect; isResizing: boolean; + height: number; } export default class RoomSublist2 extends React.Component { @@ -105,6 +106,7 @@ export default class RoomSublist2 extends React.Component { private sublistRef = createRef(); private dispatcherRef: string; private layout: ListLayout; + private heightAtStart: number; constructor(props: IProps) { super(props); @@ -684,7 +686,7 @@ export default class RoomSublist2 extends React.Component { content = ( Date: Fri, 10 Jul 2020 11:01:11 -0600 Subject: [PATCH 0858/1504] Fix bad merge --- src/components/views/rooms/RoomSublist2.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index b8023cc532..bfbdd3a161 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -120,7 +120,7 @@ export default class RoomSublist2 extends React.Component { notificationState: RoomNotificationStateStore.instance.getListState(this.props.tagId), contextMenuPosition: null, isResizing: false, - isExpanded: this.props.isFiltered ? this.props.isFiltered : !this.layout.isCollapsed + isExpanded: this.props.isFiltered ? this.props.isFiltered : !this.layout.isCollapsed, height, }; this.state.notificationState.setRooms(this.props.rooms); From 3826d8135838f494cba4d6c834b279a8b54394b3 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 11:05:56 -0600 Subject: [PATCH 0859/1504] Enable test mode --- test/components/views/rooms/RoomList-test.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/components/views/rooms/RoomList-test.js b/test/components/views/rooms/RoomList-test.js index 81ccf7d7f8..e84f943708 100644 --- a/test/components/views/rooms/RoomList-test.js +++ b/test/components/views/rooms/RoomList-test.js @@ -14,7 +14,7 @@ import GroupStore from '../../../../src/stores/GroupStore.js'; import { MatrixClient, Room, RoomMember } from 'matrix-js-sdk'; import {DefaultTagID} from "../../../../src/stores/room-list/models"; -import RoomListStore, {LISTS_UPDATE_EVENT} from "../../../../src/stores/room-list/RoomListStore2"; +import RoomListStore, {LISTS_UPDATE_EVENT, RoomListStore2} from "../../../../src/stores/room-list/RoomListStore2"; import RoomListLayoutStore from "../../../../src/stores/room-list/RoomListLayoutStore"; function generateRoomId() { @@ -49,6 +49,8 @@ describe('RoomList', () => { let myOtherMember; beforeEach(async function(done) { + RoomListStore2.TEST_MODE = true; + TestUtils.stubClient(); client = MatrixClientPeg.get(); client.credentials = {userId: myUserId}; From a2cb6f375a39903e02eb99e63be231fbd2c1ddb3 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 10 Jul 2020 19:06:48 +0200 Subject: [PATCH 0860/1504] fix padding upon Nads request --- res/css/structures/_LeftPanel2.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index 1c650c42c4..2724be4e3d 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -58,7 +58,7 @@ $tagPanelWidth: 56px; // only applies in this file, used for calculations /* 12px top, 12px sides, 20px bottom (using 13px bottom to account * for internal whitespace in the breadcrumbs) */ - padding: 12px 12px 13px; + padding: 12px; flex-shrink: 0; // to convince safari's layout engine the flexbox is fine // Create another flexbox column for the rows to stack within From 9e76a2cebff40ecc7631df69993a560ec4218de6 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 11:07:47 -0600 Subject: [PATCH 0861/1504] Handle off-cycle filtering updates in the new room list --- src/stores/room-list/RoomListStore2.ts | 8 +++++++- src/stores/room-list/algorithms/Algorithm.ts | 11 +++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 05f678160e..4741e1a30f 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -25,7 +25,7 @@ import { IListOrderingMap, ITagMap, ITagSortingMap, ListAlgorithm, SortAlgorithm import { ActionPayload } from "../../dispatcher/payloads"; import defaultDispatcher from "../../dispatcher/dispatcher"; import { readReceiptChangeIsFor } from "../../utils/read-receipts"; -import { IFilterCondition } from "./filters/IFilterCondition"; +import { FILTER_CHANGED, IFilterCondition } from "./filters/IFilterCondition"; import { TagWatcher } from "./TagWatcher"; import RoomViewStore from "../RoomViewStore"; import { Algorithm, LIST_UPDATED_EVENT } from "./algorithms/Algorithm"; @@ -65,6 +65,7 @@ export class RoomListStore2 extends AsyncStore { for (const settingName of this.watchedSettings) SettingsStore.monitorSetting(settingName, null); RoomViewStore.addListener(() => this.handleRVSUpdate({})); this.algorithm.on(LIST_UPDATED_EVENT, this.onAlgorithmListUpdated); + this.algorithm.on(FILTER_CHANGED, this.onAlgorithmFilterUpdated); } public get orderedLists(): ITagMap { @@ -479,6 +480,11 @@ export class RoomListStore2 extends AsyncStore { this.updateFn.mark(); }; + private onAlgorithmFilterUpdated = () => { + // The filter can happen off-cycle, so trigger an update if we need to. + this.updateFn.triggerIfWillMark(); + }; + /** * Regenerates the room whole room list, discarding any previous results. * @param trigger Set to false to prevent a list update from being sent. Should only diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index d985abd392..17e8283c74 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -153,11 +153,11 @@ export class Algorithm extends EventEmitter { // Populate the cache of the new filter this.allowedByFilter.set(filterCondition, this.rooms.filter(r => filterCondition.isVisible(r))); this.recalculateFilteredRooms(); - filterCondition.on(FILTER_CHANGED, this.recalculateFilteredRooms.bind(this)); + filterCondition.on(FILTER_CHANGED, this.handleFilterChange.bind(this)); } public removeFilterCondition(filterCondition: IFilterCondition): void { - filterCondition.off(FILTER_CHANGED, this.recalculateFilteredRooms.bind(this)); + filterCondition.off(FILTER_CHANGED, this.handleFilterChange.bind(this)); if (this.allowedByFilter.has(filterCondition)) { this.allowedByFilter.delete(filterCondition); @@ -169,6 +169,13 @@ export class Algorithm extends EventEmitter { } } + private async handleFilterChange() { + await this.recalculateFilteredRooms(); + + // re-emit the update so the list store can fire an off-cycle update if needed + this.emit(FILTER_CHANGED); + } + private async updateStickyRoom(val: Room) { try { return await this.doUpdateStickyRoom(val); From 063e6e3e9c85713764224f92708f9d04ba49a3c1 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 10 Jul 2020 18:23:27 +0100 Subject: [PATCH 0862/1504] Fix a few types --- src/RebrandListener.tsx | 4 ++-- src/components/views/dialogs/RebrandDialog.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/RebrandListener.tsx b/src/RebrandListener.tsx index 37d49561b8..3cdc323f52 100644 --- a/src/RebrandListener.tsx +++ b/src/RebrandListener.tsx @@ -25,7 +25,7 @@ import { _t } from './languageHandler'; const TOAST_KEY = 'rebrand'; const NAG_INTERVAL = 24 * 60 * 60 * 1000; -function getRedirectUrl(url) { +function getRedirectUrl(url): string { const redirectUrl = new URL(url); redirectUrl.hash = ''; @@ -34,7 +34,7 @@ function getRedirectUrl(url) { if (url.hostname !== newUrl.hostname || url.pathname !== newUrl.pathname) { redirectUrl.hostname = newUrl.hostname; redirectUrl.pathname = newUrl.pathname; - return redirectUrl; + return redirectUrl.toString(); } return null; } else if (url.hostname === 'riot.im') { diff --git a/src/components/views/dialogs/RebrandDialog.tsx b/src/components/views/dialogs/RebrandDialog.tsx index 6daa33f6de..e886850d28 100644 --- a/src/components/views/dialogs/RebrandDialog.tsx +++ b/src/components/views/dialogs/RebrandDialog.tsx @@ -26,7 +26,7 @@ export enum RebrandDialogKind { }; interface IProps { - onFinished: () => void; + onFinished: (bool) => void; kind: RebrandDialogKind, targetUrl?: string, } From 768603987452fce54b671bd3144124b8af41c4eb Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 10 Jul 2020 18:32:43 +0100 Subject: [PATCH 0863/1504] Work around timeout types for now --- src/RebrandListener.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/RebrandListener.tsx b/src/RebrandListener.tsx index 3cdc323f52..077ff7a2f3 100644 --- a/src/RebrandListener.tsx +++ b/src/RebrandListener.tsx @@ -163,7 +163,8 @@ export default class RebrandListener { } if (!this._reshowTimer && this.nagAgainAt) { - this._reshowTimer = setTimeout(this.onNagTimerFired, (this.nagAgainAt - Date.now()) + 100); + // XXX: Our build system picks up NodeJS bindings when we need browser bindings. + this._reshowTimer = setTimeout(this.onNagTimerFired, (this.nagAgainAt - Date.now()) + 100) as any as number; } } } From 5f78522681c0ae51b2b6e22adabc0474f1aa352c Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Thu, 9 Jul 2020 18:20:57 +0100 Subject: [PATCH 0864/1504] Move the default brand into the config module --- src/SdkConfig.ts | 4 +++- src/components/structures/MatrixChat.tsx | 2 +- src/components/views/settings/Notifications.js | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/SdkConfig.ts b/src/SdkConfig.ts index 400d29a20f..6df63b10e8 100644 --- a/src/SdkConfig.ts +++ b/src/SdkConfig.ts @@ -1,6 +1,6 @@ /* Copyright 2016 OpenMarket Ltd -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 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. @@ -20,6 +20,8 @@ export interface ConfigOptions { } export const DEFAULTS: ConfigOptions = { + // Brand name of the app + brand: "Riot", // URL to a page we show in an iframe to configure integrations integrations_ui_url: "https://scalar.vector.im/", // Base URL to the REST interface of the integrations server diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 89ee1bc22d..8115daa418 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -1819,7 +1819,7 @@ export default class MatrixChat extends React.PureComponent { } else { subtitle = `${this.subTitleStatus} ${subtitle}`; } - document.title = `${SdkConfig.get().brand || 'Riot'} ${subtitle}`; + document.title = `${SdkConfig.get().brand} ${subtitle}`; } updateStatusIndicator(state: string, prevState: string) { diff --git a/src/components/views/settings/Notifications.js b/src/components/views/settings/Notifications.js index a3173f18bb..0173132a28 100644 --- a/src/components/views/settings/Notifications.js +++ b/src/components/views/settings/Notifications.js @@ -1,5 +1,6 @@ /* Copyright 2016 OpenMarket Ltd +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. @@ -154,7 +155,7 @@ export default createReactClass({ let emailPusherPromise; if (checked) { const data = {}; - data['brand'] = SdkConfig.get().brand || 'Riot'; + data['brand'] = SdkConfig.get().brand; emailPusherPromise = MatrixClientPeg.get().setPusher({ kind: 'email', app_id: 'm.email', From bb5107a60bd498e6e7323c31a620dbfbe187df05 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Thu, 9 Jul 2020 18:25:03 +0100 Subject: [PATCH 0865/1504] Change default brand name --- src/SdkConfig.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SdkConfig.ts b/src/SdkConfig.ts index 6df63b10e8..b914aaaf6d 100644 --- a/src/SdkConfig.ts +++ b/src/SdkConfig.ts @@ -21,7 +21,7 @@ export interface ConfigOptions { export const DEFAULTS: ConfigOptions = { // Brand name of the app - brand: "Riot", + brand: "Element", // URL to a page we show in an iframe to configure integrations integrations_ui_url: "https://scalar.vector.im/", // Base URL to the REST interface of the integrations server From 9085627a28297befe61f806c1f2c72cd90c778ad Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 10 Jul 2020 19:07:11 +0100 Subject: [PATCH 0866/1504] Use brand name from config in all strings --- src/Analytics.js | 28 +++-- src/Notifier.js | 11 +- .../eventindex/ManageEventIndexDialog.js | 17 +-- .../structures/CompatibilityPage.js | 18 +++- src/components/structures/MatrixChat.tsx | 4 +- src/components/structures/MyGroups.js | 6 +- src/components/structures/RoomDirectory.js | 21 ++-- .../structures/auth/SetupEncryptionBody.js | 14 ++- .../views/dialogs/CryptoStoreTooNewDialog.js | 14 ++- .../dialogs/IntegrationsImpossibleDialog.js | 7 +- .../dialogs/KeySignatureUploadFailedDialog.js | 4 +- .../dialogs/LazyLoadingDisabledDialog.js | 30 ++++-- .../views/dialogs/LazyLoadingResyncDialog.js | 13 ++- .../views/dialogs/RoomUpgradeWarningDialog.js | 11 +- .../dialogs/SessionRestoreErrorDialog.js | 5 +- .../views/elements/AppPermission.js | 6 +- .../views/right_panel/VerificationPanel.js | 9 +- src/components/views/rooms/RoomPreviewBar.js | 13 ++- .../views/settings/EventIndexPanel.js | 20 ++-- .../views/settings/Notifications.js | 9 +- .../tabs/user/AppearanceUserSettingsTab.tsx | 6 +- .../settings/tabs/user/HelpUserSettingsTab.js | 55 +++++++--- .../tabs/user/MjolnirUserSettingsTab.js | 8 +- .../tabs/user/SecurityUserSettingsTab.js | 8 +- .../tabs/user/VoiceUserSettingsTab.js | 8 +- src/i18n/strings/en_EN.json | 102 +++++++++--------- src/toasts/AnalyticsToast.tsx | 10 +- src/toasts/UpdateToast.tsx | 6 +- src/utils/AutoDiscoveryUtils.js | 12 ++- src/utils/MegolmExportEncryption.js | 10 +- 30 files changed, 325 insertions(+), 160 deletions(-) diff --git a/src/Analytics.js b/src/Analytics.js index e55612c4f1..59cc9d0872 100644 --- a/src/Analytics.js +++ b/src/Analytics.js @@ -66,7 +66,10 @@ const customVariables = { }, 'App Version': { id: 2, - expl: _td('The version of Riot'), + expl: _td('The version of %(brand)s'), + getTextVariables: () => ({ + brand: SdkConfig.get().brand, + }), example: '15.0.0', }, 'User Type': { @@ -96,7 +99,10 @@ const customVariables = { }, 'Touch Input': { id: 8, - expl: _td("Whether you're using Riot on a device where touch is the primary input mechanism"), + expl: _td("Whether you're using %(brand)s on a device where touch is the primary input mechanism"), + getTextVariables: () => ({ + brand: SdkConfig.get().brand, + }), example: 'false', }, 'Breadcrumbs': { @@ -106,7 +112,10 @@ const customVariables = { }, 'Installed PWA': { id: 10, - expl: _td("Whether you're using Riot as an installed Progressive Web App"), + expl: _td("Whether you're using %(brand)s as an installed Progressive Web App"), + getTextVariables: () => ({ + brand: SdkConfig.get().brand, + }), example: 'false', }, }; @@ -356,12 +365,17 @@ class Analytics { Modal.createTrackedDialog('Analytics Details', '', ErrorDialog, { title: _t('Analytics'), description:
    -
    - { _t('The information being sent to us to help make Riot better includes:') } -
    +
    {_t('The information being sent to us to help make %(brand)s better includes:', { + brand: SdkConfig.get().brand, + })}
    { rows.map((row) => - + { row[1] !== undefined && } ) } { otherVariables.map((item, index) => diff --git a/src/Notifier.js b/src/Notifier.js index b6690959d2..c6fc7d7985 100644 --- a/src/Notifier.js +++ b/src/Notifier.js @@ -2,6 +2,7 @@ Copyright 2015, 2016 OpenMarket Ltd Copyright 2017 Vector Creations Ltd Copyright 2017 New Vector Ltd +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. @@ -16,7 +17,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {MatrixClientPeg} from './MatrixClientPeg'; +import { MatrixClientPeg } from './MatrixClientPeg'; +import SdkConfig from './SdkConfig'; import PlatformPeg from './PlatformPeg'; import * as TextForEvent from './TextForEvent'; import Analytics from './Analytics'; @@ -226,10 +228,11 @@ const Notifier = { if (result !== 'granted') { // The permission request was dismissed or denied // TODO: Support alternative branding in messaging + const brand = SdkConfig.get().brand; const description = result === 'denied' - ? _t('Riot does not have permission to send you notifications - ' + - 'please check your browser settings') - : _t('Riot was not given permission to send notifications - please try again'); + ? _t('%(brand)s does not have permission to send you notifications - ' + + 'please check your browser settings', { brand }) + : _t('%(brand)s was not given permission to send notifications - please try again', { brand }); const ErrorDialog = sdk.getComponent('dialogs.ErrorDialog'); Modal.createTrackedDialog('Unable to enable Notifications', result, ErrorDialog, { title: _t('Unable to enable Notifications'), diff --git a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js index bb2cf7f0b8..a9dd5be34b 100644 --- a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js +++ b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.js @@ -18,6 +18,7 @@ import React from 'react'; import * as sdk from '../../../../index'; import PropTypes from 'prop-types'; import { _t } from '../../../../languageHandler'; +import SdkConfig from '../../../../SdkConfig'; import SettingsStore, {SettingLevel} from "../../../../settings/SettingsStore"; import Modal from '../../../../Modal'; @@ -134,8 +135,10 @@ export default class ManageEventIndexDialog extends React.Component { }; render() { - let crawlerState; + const brand = SdkConfig.get().brand; + const Field = sdk.getComponent('views.elements.Field'); + let crawlerState; if (this.state.currentRoom === null) { crawlerState = _t("Not currently indexing messages for any room."); } else { @@ -144,17 +147,15 @@ export default class ManageEventIndexDialog extends React.Component { ); } - const Field = sdk.getComponent('views.elements.Field'); - const doneRooms = Math.max(0, (this.state.roomCount - this.state.crawlingRoomsCount)); const eventIndexingSettings = (
    - { - _t( "Riot is securely caching encrypted messages locally for them " + - "to appear in search results:", - ) - } + {_t( + "%(brand)s is securely caching encrypted messages locally for them " + + "to appear in search results:", + { brand }, + )}
    {crawlerState}
    {_t("Space used:")} {formatBytes(this.state.eventIndexSize, 0)}
    diff --git a/src/components/structures/CompatibilityPage.js b/src/components/structures/CompatibilityPage.js index 9a3fdb5f39..1fa6068675 100644 --- a/src/components/structures/CompatibilityPage.js +++ b/src/components/structures/CompatibilityPage.js @@ -1,7 +1,7 @@ /* Copyright 2015, 2016 OpenMarket Ltd Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 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. @@ -20,6 +20,7 @@ import React from 'react'; import createReactClass from 'create-react-class'; import PropTypes from 'prop-types'; import { _t } from '../../languageHandler'; +import SdkConfig from '../../SdkConfig'; export default createReactClass({ displayName: 'CompatibilityPage', @@ -38,14 +39,25 @@ export default createReactClass({ }, render: function() { + const brand = SdkConfig.get().brand; + return (
    -

    { _t("Sorry, your browser is not able to run Riot.", {}, { 'b': (sub) => {sub} }) }

    +

    {_t( + "Sorry, your browser is not able to run %(brand)s.", + { + brand, + }, + { + 'b': (sub) => {sub}, + }) + }

    { _t( - "Riot uses many advanced browser features, some of which are not available " + + "%(brand)s uses many advanced browser features, some of which are not available " + "or experimental in your current browser.", + { brand }, ) }

    diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 8115daa418..6777c0fdfd 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -1445,16 +1445,18 @@ export default class MatrixChat extends React.PureComponent { const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); switch (type) { case 'CRYPTO_WARNING_OLD_VERSION_DETECTED': + const brand = SdkConfig.get().brand; Modal.createTrackedDialog('Crypto migrated', '', ErrorDialog, { title: _t('Old cryptography data detected'), description: _t( - "Data from an older version of Riot has been detected. " + + "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.", + { brand }, ), }); break; diff --git a/src/components/structures/MyGroups.js b/src/components/structures/MyGroups.js index e2a3d6e71f..7043c7f38a 100644 --- a/src/components/structures/MyGroups.js +++ b/src/components/structures/MyGroups.js @@ -1,6 +1,7 @@ /* Copyright 2017 Vector Creations Ltd Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +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. @@ -19,6 +20,7 @@ import React from 'react'; import createReactClass from 'create-react-class'; import * as sdk from '../../index'; import { _t } from '../../languageHandler'; +import SdkConfig from '../../SdkConfig'; import dis from '../../dispatcher/dispatcher'; import AccessibleButton from '../views/elements/AccessibleButton'; import MatrixClientContext from "../../contexts/MatrixClientContext"; @@ -60,6 +62,7 @@ export default createReactClass({ }, render: function() { + const brand = SdkConfig.get().brand; const Loader = sdk.getComponent("elements.Spinner"); const SimpleRoomHeader = sdk.getComponent('rooms.SimpleRoomHeader'); const GroupTile = sdk.getComponent("groups.GroupTile"); @@ -77,7 +80,8 @@ export default createReactClass({

    { _t( - "Did you know: you can use communities to filter your Riot.im experience!", + "Did you know: you can use communities to filter your %(brand)s experience!", + { brand }, ) }

    diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js index acaf66b206..5b12dae7df 100644 --- a/src/components/structures/RoomDirectory.js +++ b/src/components/structures/RoomDirectory.js @@ -1,7 +1,7 @@ /* Copyright 2015, 2016 OpenMarket Ltd Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 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. @@ -25,6 +25,7 @@ import Modal from "../../Modal"; import { linkifyAndSanitizeHtml } from '../../HtmlUtils'; import PropTypes from 'prop-types'; import { _t } from '../../languageHandler'; +import SdkConfig from '../../SdkConfig'; import { instanceForInstanceId, protocolNameForInstanceId } from '../../utils/DirectoryUtils'; import Analytics from '../../Analytics'; import {getHttpUriForMxc} from "matrix-js-sdk/src/content-repo"; @@ -74,7 +75,7 @@ export default createReactClass({ this.protocols = response; this.setState({protocolsLoading: false}); }, (err) => { - console.warn(`error loading thirdparty protocols: ${err}`); + console.warn(`error loading third party protocols: ${err}`); this.setState({protocolsLoading: false}); if (MatrixClientPeg.get().isGuest()) { // Guests currently aren't allowed to use this API, so @@ -83,10 +84,12 @@ export default createReactClass({ return; } track('Failed to get protocol list from homeserver'); + const brand = SdkConfig.get().brand; this.setState({ error: _t( - 'Riot failed to get the protocol list from the homeserver. ' + + '%(brand)s failed to get the protocol list from the homeserver. ' + 'The homeserver may be too old to support third party networks.', + { brand }, ), }); }); @@ -173,12 +176,13 @@ export default createReactClass({ console.error("Failed to get publicRooms: %s", JSON.stringify(err)); track('Failed to get public room list'); + const brand = SdkConfig.get().brand; this.setState({ loading: false, - error: - `${_t('Riot failed to get the public room list.')} ` + - `${(err && err.message) ? err.message : _t('The homeserver may be unavailable or overloaded.')}` - , + error: ( + _t('%(brand)s failed to get the public room list.', { brand }) + + (err && err.message) ? err.message : _t('The homeserver may be unavailable or overloaded.') + ), }); }); }, @@ -314,9 +318,10 @@ export default createReactClass({ const fields = protocolName ? this._getFieldsForThirdPartyLocation(alias, this.protocols[protocolName], instance) : null; if (!fields) { const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); + const brand = SdkConfig.get().brand; Modal.createTrackedDialog('Unable to join network', '', ErrorDialog, { title: _t('Unable to join network'), - description: _t('Riot does not know how to join a room on this network'), + description: _t('%(brand)s does not know how to join a room on this network', { brand }), }); return; } diff --git a/src/components/structures/auth/SetupEncryptionBody.js b/src/components/structures/auth/SetupEncryptionBody.js index f2e702c8cb..5b1f025dfb 100644 --- a/src/components/structures/auth/SetupEncryptionBody.js +++ b/src/components/structures/auth/SetupEncryptionBody.js @@ -17,6 +17,7 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; import { _t } from '../../../languageHandler'; +import SdkConfig from '../../../SdkConfig'; import { MatrixClientPeg } from '../../../MatrixClientPeg'; import * as sdk from '../../../index'; import { @@ -131,6 +132,8 @@ export default class SetupEncryptionBody extends React.Component { ; } + const brand = SdkConfig.get().brand; + return (

    {_t( @@ -138,17 +141,18 @@ export default class SetupEncryptionBody extends React.Component { "granting it access to encrypted messages.", )}

    {_t( - "This requires the latest Riot on your other devices:", + "This requires the latest %(brand)s on your other devices:", + { brand }, )}

    -
    Riot Web
    -
    Riot Desktop
    +
    {_t("%(brand)s Web", { brand })}
    +
    {_t("%(brand)s Desktop", { brand })}
    -
    Riot iOS
    -
    Riot X for Android
    +
    {_t("%(brand)s iOS", { brand })}
    +
    {_t("%(brand)s X for Android", { brand })}

    {_t("or another cross-signing capable Matrix client")}

    diff --git a/src/components/views/dialogs/CryptoStoreTooNewDialog.js b/src/components/views/dialogs/CryptoStoreTooNewDialog.js index 4694619601..6336c635e4 100644 --- a/src/components/views/dialogs/CryptoStoreTooNewDialog.js +++ b/src/components/views/dialogs/CryptoStoreTooNewDialog.js @@ -1,5 +1,6 @@ /* Copyright 2018 New Vector Ltd +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. @@ -18,9 +19,12 @@ import React from 'react'; import * as sdk from '../../../index'; import dis from '../../../dispatcher/dispatcher'; import { _t } from '../../../languageHandler'; +import SdkConfig from '../../../SdkConfig'; import Modal from '../../../Modal'; export default (props) => { + const brand = SdkConfig.get().brand; + const _onLogoutClicked = () => { const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); Modal.createTrackedDialog('Logout e2e db too new', '', QuestionDialog, { @@ -28,7 +32,8 @@ export default (props) => { description: _t( "To avoid losing your chat history, you must export your room keys " + "before logging out. You will need to go back to the newer version of " + - "Riot to do this", + "%(brand)s to do this", + { brand }, ), button: _t("Sign out"), focus: false, @@ -42,9 +47,12 @@ export default (props) => { }; const description = - _t("You've previously used a newer version of Riot with this session. " + + _t( + "You've previously used a newer version of %(brand)s with this session. " + "To use this version again with end to end encryption, you will " + - "need to sign out and back in again."); + "need to sign out and back in again.", + { brand }, + ); const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog'); const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); diff --git a/src/components/views/dialogs/IntegrationsImpossibleDialog.js b/src/components/views/dialogs/IntegrationsImpossibleDialog.js index f12e4232be..68bedc711d 100644 --- a/src/components/views/dialogs/IntegrationsImpossibleDialog.js +++ b/src/components/views/dialogs/IntegrationsImpossibleDialog.js @@ -1,5 +1,5 @@ /* -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 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. @@ -17,6 +17,7 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; import {_t} from "../../../languageHandler"; +import SdkConfig from "../../../SdkConfig"; import * as sdk from "../../../index"; export default class IntegrationsImpossibleDialog extends React.Component { @@ -29,6 +30,7 @@ export default class IntegrationsImpossibleDialog extends React.Component { }; render() { + const brand = SdkConfig.get().brand; const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog'); const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); @@ -39,8 +41,9 @@ export default class IntegrationsImpossibleDialog extends React.Component {

    {_t( - "Your Riot doesn't allow you to use an Integration Manager to do this. " + + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. " + "Please contact an admin.", + { brand }, )}

    diff --git a/src/components/views/dialogs/KeySignatureUploadFailedDialog.js b/src/components/views/dialogs/KeySignatureUploadFailedDialog.js index e59f77fce9..25eb7a90d2 100644 --- a/src/components/views/dialogs/KeySignatureUploadFailedDialog.js +++ b/src/components/views/dialogs/KeySignatureUploadFailedDialog.js @@ -17,6 +17,7 @@ limitations under the License. import React, {useState, useCallback, useRef} from 'react'; import * as sdk from '../../../index'; import { _t } from '../../../languageHandler'; +import SdkConfig from '../../../SdkConfig'; export default function KeySignatureUploadFailedDialog({ failures, @@ -65,9 +66,10 @@ export default function KeySignatureUploadFailedDialog({ let body; if (!success && !cancelled && continuation && retry > 0) { const reason = causes.get(source) || defaultCause; + const brand = SdkConfig.get().brand; body = (
    -

    {_t("Riot encountered an error during upload of:")}

    +

    {_t("%(brand)s encountered an error during upload of:", { brand })}

    {reason}

    {retrying && }
    {JSON.stringify(failures, null, 2)}
    diff --git a/src/components/views/dialogs/LazyLoadingDisabledDialog.js b/src/components/views/dialogs/LazyLoadingDisabledDialog.js index d128d8dedd..cae9510742 100644 --- a/src/components/views/dialogs/LazyLoadingDisabledDialog.js +++ b/src/components/views/dialogs/LazyLoadingDisabledDialog.js @@ -1,5 +1,6 @@ /* Copyright 2018 New Vector Ltd +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. @@ -17,17 +18,28 @@ limitations under the License. import React from 'react'; import QuestionDialog from './QuestionDialog'; import { _t } from '../../../languageHandler'; +import SdkConfig from '../../../SdkConfig'; export default (props) => { - const description1 = - _t("You've previously used Riot 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, " + - "Riot needs to resync your account.", - {host: props.host}); - const description2 = _t("If the other version of Riot is still open in another tab, " + - "please close it as using Riot on the same host with both " + - "lazy loading enabled and disabled simultaneously will cause issues."); + const brand = SdkConfig.get().brand; + const description1 = _t( + "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.", + { + brand, + host: props.host, + }, + ); + const description2 = _t( + "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.", + { + brand, + }, + ); return ( { + const brand = SdkConfig.get().brand; const description = - _t("Riot now uses 3-5x less memory, by only loading information about other users" - + " when needed. Please wait whilst we resynchronise with the server!"); + _t( + "%(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!", + { brand }, + ); return ({description}
    } button={_t("OK")} onFinished={props.onFinished} diff --git a/src/components/views/dialogs/RoomUpgradeWarningDialog.js b/src/components/views/dialogs/RoomUpgradeWarningDialog.js index 02534c5b35..c83528c5ba 100644 --- a/src/components/views/dialogs/RoomUpgradeWarningDialog.js +++ b/src/components/views/dialogs/RoomUpgradeWarningDialog.js @@ -1,5 +1,5 @@ /* -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 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. @@ -17,6 +17,7 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; import {_t} from "../../../languageHandler"; +import SdkConfig from "../../../SdkConfig"; import * as sdk from "../../../index"; import LabelledToggleSwitch from "../elements/LabelledToggleSwitch"; import {MatrixClientPeg} from "../../../MatrixClientPeg"; @@ -63,6 +64,7 @@ export default class RoomUpgradeWarningDialog extends React.Component { }; render() { + const brand = SdkConfig.get().brand; const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog'); const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); @@ -96,8 +98,11 @@ export default class RoomUpgradeWarningDialog extends React.Component {

    {_t( "This usually only affects how the room is processed on the server. If you're " + - "having problems with your Riot, please report a bug.", - {}, { + "having problems with your %(brand)s, please report a bug.", + { + brand, + }, + { "a": (sub) => { return {sub}; }, diff --git a/src/components/views/dialogs/SessionRestoreErrorDialog.js b/src/components/views/dialogs/SessionRestoreErrorDialog.js index 935faf0cad..3706172085 100644 --- a/src/components/views/dialogs/SessionRestoreErrorDialog.js +++ b/src/components/views/dialogs/SessionRestoreErrorDialog.js @@ -1,6 +1,7 @@ /* Copyright 2017 Vector Creations Ltd Copyright 2018 New Vector Ltd +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. @@ -56,6 +57,7 @@ export default createReactClass({ }, render: function() { + const brand = SdkConfig.get().brand; const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog'); const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); @@ -94,9 +96,10 @@ export default createReactClass({

    { _t("We encountered an error trying to restore your previous session.") }

    { _t( - "If you have previously used a more recent version of Riot, your session " + + "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.", + { brand }, ) }

    { _t( diff --git a/src/components/views/elements/AppPermission.js b/src/components/views/elements/AppPermission.js index b96001b106..ec8bffc32f 100644 --- a/src/components/views/elements/AppPermission.js +++ b/src/components/views/elements/AppPermission.js @@ -1,7 +1,7 @@ /* Copyright 2017 Vector Creations Ltd Copyright 2018, 2019 New Vector Ltd -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 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. @@ -21,6 +21,7 @@ import PropTypes from 'prop-types'; import url from 'url'; import * as sdk from '../../../index'; import { _t } from '../../../languageHandler'; +import SdkConfig from '../../../SdkConfig'; import WidgetUtils from "../../../utils/WidgetUtils"; import {MatrixClientPeg} from "../../../MatrixClientPeg"; @@ -76,6 +77,7 @@ export default class AppPermission extends React.Component { } render() { + const brand = SdkConfig.get().brand; const AccessibleButton = sdk.getComponent("views.elements.AccessibleButton"); const MemberAvatar = sdk.getComponent("views.avatars.MemberAvatar"); const BaseAvatar = sdk.getComponent("views.avatars.BaseAvatar"); @@ -96,7 +98,7 @@ export default class AppPermission extends React.Component {

  • {_t("Your avatar URL")}
  • {_t("Your user ID")}
  • {_t("Your theme")}
  • -
  • {_t("Riot URL")}
  • +
  • {_t("%(brand)s URL", { brand })}
  • {_t("Room ID")}
  • {_t("Widget ID")}
  • diff --git a/src/components/views/right_panel/VerificationPanel.js b/src/components/views/right_panel/VerificationPanel.js index 6bb2d3646b..0b6790eac8 100644 --- a/src/components/views/right_panel/VerificationPanel.js +++ b/src/components/views/right_panel/VerificationPanel.js @@ -24,6 +24,7 @@ import {SCAN_QR_CODE_METHOD} from "matrix-js-sdk/src/crypto/verification/QRCode" import VerificationQRCode from "../elements/crypto/VerificationQRCode"; import {_t} from "../../../languageHandler"; +import SdkConfig from "../../../SdkConfig"; import E2EIcon from "../rooms/E2EIcon"; import { PHASE_UNSENT, @@ -63,9 +64,15 @@ export default class VerificationPanel extends React.PureComponent { const showSAS = request.otherPartySupportsMethod(verificationMethods.SAS); const showQR = request.otherPartySupportsMethod(SCAN_QR_CODE_METHOD); const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); + const brand = SdkConfig.get().brand; const noCommonMethodError = !showSAS && !showQR ? -

    {_t("The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.")}

    : +

    {_t( + "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 }, + )}

    : null; if (this.props.layout === 'dialog') { diff --git a/src/components/views/rooms/RoomPreviewBar.js b/src/components/views/rooms/RoomPreviewBar.js index 30e6ae9c58..5c181ec3c4 100644 --- a/src/components/views/rooms/RoomPreviewBar.js +++ b/src/components/views/rooms/RoomPreviewBar.js @@ -1,7 +1,7 @@ /* Copyright 2015, 2016 OpenMarket Ltd Copyright 2017 Vector Creations Ltd -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 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. @@ -24,6 +24,7 @@ import {MatrixClientPeg} from '../../../MatrixClientPeg'; import dis from '../../../dispatcher/dispatcher'; import classNames from 'classnames'; import { _t } from '../../../languageHandler'; +import SdkConfig from "../../../SdkConfig"; import IdentityAuthClient from '../../../IdentityAuthClient'; const MessageCase = Object.freeze({ @@ -282,6 +283,7 @@ export default createReactClass({ }, render: function() { + const brand = SdkConfig.get().brand; const Spinner = sdk.getComponent('elements.Spinner'); const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); @@ -398,7 +400,8 @@ export default createReactClass({ ); subTitle = _t( "Link this email with your account in Settings to receive invites " + - "directly in Riot.", + "directly in %(brand)s.", + { brand }, ); primaryActionLabel = _t("Join the discussion"); primaryActionHandler = this.props.onJoinClick; @@ -413,7 +416,8 @@ export default createReactClass({ }, ); subTitle = _t( - "Use an identity server in Settings to receive invites directly in Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.", + { brand }, ); primaryActionLabel = _t("Join the discussion"); primaryActionHandler = this.props.onJoinClick; @@ -428,7 +432,8 @@ export default createReactClass({ }, ); subTitle = _t( - "Share this email in Settings to receive invites directly in Riot.", + "Share this email in Settings to receive invites directly in %(brand)s.", + { brand }, ); primaryActionLabel = _t("Join the discussion"); primaryActionHandler = this.props.onJoinClick; diff --git a/src/components/views/settings/EventIndexPanel.js b/src/components/views/settings/EventIndexPanel.js index 6b084c2579..6fd1247c4b 100644 --- a/src/components/views/settings/EventIndexPanel.js +++ b/src/components/views/settings/EventIndexPanel.js @@ -17,6 +17,7 @@ limitations under the License. import React from 'react'; import { _t } from '../../../languageHandler'; +import SdkConfig from "../../../SdkConfig"; import * as sdk from '../../../index'; import Modal from '../../../Modal'; import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore"; @@ -121,6 +122,7 @@ export default class EventIndexPanel extends React.Component { render() { let eventIndexingSettings = null; const InlineSpinner = sdk.getComponent('elements.InlineSpinner'); + const brand = SdkConfig.get().brand; if (EventIndexPeg.get() !== null) { eventIndexingSettings = ( @@ -165,11 +167,13 @@ export default class EventIndexPanel extends React.Component { eventIndexingSettings = (
    { - _t( "Riot is missing some components required for securely " + + _t( "%(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 Riot Desktop " + + "experiment with this feature, build a custom %(brand)s Desktop " + "with search components added.", - {}, + { + brand, + }, { 'nativeLink': (sub) => {sub}, @@ -182,12 +186,14 @@ export default class EventIndexPanel extends React.Component { eventIndexingSettings = (
    { - _t( "Riot can't securely cache encrypted messages locally " + - "while running in a web browser. Use Riot Desktop " + + _t( "%(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.", - {}, { - 'riotLink': (sub) => {sub}, }, ) diff --git a/src/components/views/settings/Notifications.js b/src/components/views/settings/Notifications.js index 0173132a28..cbdf3ec1a7 100644 --- a/src/components/views/settings/Notifications.js +++ b/src/components/views/settings/Notifications.js @@ -842,11 +842,16 @@ export default createReactClass({ let advancedSettings; if (externalRules.length) { + const brand = SdkConfig.get().brand; advancedSettings = (

    { _t('Advanced notification settings') }

    - { _t('There are advanced notifications which are not shown here') }.
    - { _t('You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply') }. + { _t('There are advanced notifications which are not shown here.') }
    + {_t( + 'You might have configured them in a client other than %(brand)s. ' + + 'You cannot tune them in %(brand)s but they still apply.', + { brand }, + )}
      { externalRules }
    diff --git a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx index 3cb0028f45..f109cea4a3 100644 --- a/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AppearanceUserSettingsTab.tsx @@ -2,7 +2,6 @@ Copyright 2019 New Vector Ltd Copyright 2019, 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 @@ -18,6 +17,7 @@ limitations under the License. import React from 'react'; import {_t} from "../../../../../languageHandler"; +import SdkConfig from "../../../../../SdkConfig"; import SettingsStore, {SettingLevel} from "../../../../../settings/SettingsStore"; import { enumerateThemes } from "../../../../../theme"; import ThemeWatcher from "../../../../../settings/watchers/ThemeWatcher"; @@ -438,11 +438,13 @@ export default class AppearanceUserSettingsTab extends React.Component
    {_t("Customise your appearance")}
    - {_t("Appearance Settings only affect this Riot session.")} + {_t("Appearance Settings only affect this %(brand)s session.", { brand })}
    {this.renderThemeSection()} {SettingsStore.isFeatureEnabled("feature_font_scaling") ? this.renderFontSection() : null} diff --git a/src/components/views/settings/tabs/user/HelpUserSettingsTab.js b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js index bec79b97c4..67f99921c5 100644 --- a/src/components/views/settings/tabs/user/HelpUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js @@ -1,5 +1,6 @@ /* Copyright 2019 New Vector Ltd +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. @@ -36,13 +37,13 @@ export default class HelpUserSettingsTab extends React.Component { super(); this.state = { - vectorVersion: null, + appVersion: null, canUpdate: false, }; } componentDidMount(): void { - PlatformPeg.get().getAppVersion().then((ver) => this.setState({vectorVersion: ver})).catch((e) => { + PlatformPeg.get().getAppVersion().then((ver) => this.setState({appVersion: ver})).catch((e) => { console.error("Error getting vector version: ", e); }); PlatformPeg.get().canSelfUpdate().then((v) => this.setState({canUpdate: v})).catch((e) => { @@ -148,30 +149,52 @@ export default class HelpUserSettingsTab extends React.Component { } render() { - let faqText = _t('For help with using Riot, click here.', {}, { - 'a': (sub) => - {sub}, - }); + const brand = SdkConfig.get().brand; + + let faqText = _t( + 'For help with using %(brand)s, click here.', + { + brand, + }, + { + 'a': (sub) => + {sub} + , + }, + ); if (SdkConfig.get().welcomeUserId && getCurrentLanguage().startsWith('en')) { faqText = (
    - { - _t('For help with using Riot, click here or start a chat with our ' + - 'bot using the button below.', {}, { - 'a': (sub) => {sub}, - }) - } + {_t( + 'For help with using %(brand)s, click here or start a chat with our ' + + 'bot using the button below.', + { + brand, + }, + { + 'a': (sub) => + {sub} + , + }, + )}
    - {_t("Chat with Riot Bot")} + {_t("Chat with %(brand)s Bot", { brand })}
    ); } - const vectorVersion = this.state.vectorVersion || 'unknown'; + const appVersion = this.state.appVersion || 'unknown'; let olmVersion = MatrixClientPeg.get().olmVersion; olmVersion = olmVersion ? `${olmVersion[0]}.${olmVersion[1]}.${olmVersion[2]}` : ''; @@ -228,7 +251,7 @@ export default class HelpUserSettingsTab extends React.Component {
    {_t("Versions")}
    - {_t("riot-web version:")} {vectorVersion}
    + {_t("%(brand)s version:", { brand })} {appVersion}
    {_t("olm version:")} {olmVersion}
    {updateButton}
    diff --git a/src/components/views/settings/tabs/user/MjolnirUserSettingsTab.js b/src/components/views/settings/tabs/user/MjolnirUserSettingsTab.js index f1fe5f2556..510d6076a0 100644 --- a/src/components/views/settings/tabs/user/MjolnirUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/MjolnirUserSettingsTab.js @@ -1,5 +1,5 @@ /* -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 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. @@ -16,6 +16,7 @@ limitations under the License. import React from 'react'; import {_t} from "../../../../../languageHandler"; +import SdkConfig from "../../../../../SdkConfig"; import {Mjolnir} from "../../../../../mjolnir/Mjolnir"; import {ListRule} from "../../../../../mjolnir/ListRule"; import {BanList, RULE_SERVER, RULE_USER} from "../../../../../mjolnir/BanList"; @@ -234,6 +235,7 @@ export default class MjolnirUserSettingsTab extends React.Component { render() { const Field = sdk.getComponent('elements.Field'); const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); + const brand = SdkConfig.get().brand; return (
    @@ -244,9 +246,9 @@ export default class MjolnirUserSettingsTab extends React.Component {
    {_t( "Add users and servers you want to ignore here. Use asterisks " + - "to have Riot match any characters. For example, @bot:* " + + "to have %(brand)s match any characters. For example, @bot:* " + "would ignore all users that have the name 'bot' on any server.", - {}, {code: (s) => {s}}, + { brand }, {code: (s) => {s}}, )}

    {_t( diff --git a/src/components/views/settings/tabs/user/SecurityUserSettingsTab.js b/src/components/views/settings/tabs/user/SecurityUserSettingsTab.js index 952d9f1e78..591927411d 100644 --- a/src/components/views/settings/tabs/user/SecurityUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/SecurityUserSettingsTab.js @@ -1,5 +1,6 @@ /* Copyright 2019 New Vector Ltd +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. @@ -17,6 +18,7 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; import {_t} from "../../../../../languageHandler"; +import SdkConfig from "../../../../../SdkConfig"; import {SettingLevel} from "../../../../../settings/SettingsStore"; import {MatrixClientPeg} from "../../../../../MatrixClientPeg"; import * as FormattingUtils from "../../../../../utils/FormattingUtils"; @@ -281,6 +283,7 @@ export default class SecurityUserSettingsTab extends React.Component { } render() { + const brand = SdkConfig.get().brand; const DevicesPanel = sdk.getComponent('views.settings.DevicesPanel'); const SettingsFlag = sdk.getComponent('views.elements.SettingsFlag'); const EventIndexPanel = sdk.getComponent('views.settings.EventIndexPanel'); @@ -355,7 +358,10 @@ export default class SecurityUserSettingsTab extends React.Component {
    {_t("Analytics")}
    - {_t("Riot collects anonymous analytics to allow us to improve the application.")} + {_t( + "%(brand)s collects anonymous analytics to allow us to improve the application.", + { brand }, + )}   {_t("Privacy is important to us, so we don't collect any personal or " + "identifiable data for our analytics.")} diff --git a/src/components/views/settings/tabs/user/VoiceUserSettingsTab.js b/src/components/views/settings/tabs/user/VoiceUserSettingsTab.js index 71ed2bab65..efd184069e 100644 --- a/src/components/views/settings/tabs/user/VoiceUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/VoiceUserSettingsTab.js @@ -1,5 +1,6 @@ /* Copyright 2019 New Vector Ltd +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. @@ -16,6 +17,7 @@ limitations under the License. import React from 'react'; import {_t} from "../../../../../languageHandler"; +import SdkConfig from "../../../../../SdkConfig"; import CallMediaHandler from "../../../../../CallMediaHandler"; import Field from "../../../elements/Field"; import AccessibleButton from "../../../elements/AccessibleButton"; @@ -80,10 +82,14 @@ export default class VoiceUserSettingsTab extends React.Component { } } if (error) { + const brand = SdkConfig.get().brand; const ErrorDialog = sdk.getComponent('dialogs.ErrorDialog'); Modal.createTrackedDialog('No media permissions', '', ErrorDialog, { title: _t('No media permissions'), - description: _t('You may need to manually permit Riot to access your microphone/webcam'), + description: _t( + 'You may need to manually permit %(brand)s to access your microphone/webcam', + { brand }, + ), }); } else { this._refreshMediaDevices(stream); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index d5c751a938..cefb34ece9 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -14,22 +14,22 @@ "Click the button below to confirm adding this phone number.": "Click the button below to confirm adding this phone number.", "Add Phone Number": "Add Phone Number", "The platform you're on": "The platform you're on", - "The version of Riot": "The version of Riot", + "The version of %(brand)s": "The version of %(brand)s", "Whether or not you're logged in (we don't record your username)": "Whether or not you're logged in (we don't record your username)", "Your language of choice": "Your language of choice", "Which officially provided instance you are using, if any": "Which officially provided instance you are using, if any", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Whether or not you're using the Richtext mode of the Rich Text Editor", "Your homeserver's URL": "Your homeserver's URL", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Whether you're using Riot on a device where touch is the primary input mechanism", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Whether you're using %(brand)s on a device where touch is the primary input mechanism", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)", - "Whether you're using Riot as an installed Progressive Web App": "Whether you're using Riot as an installed Progressive Web App", + "Whether you're using %(brand)s as an installed Progressive Web App": "Whether you're using %(brand)s as an installed Progressive Web App", "e.g. %(exampleValue)s": "e.g. %(exampleValue)s", "Every page you use in the app": "Every page you use in the app", "e.g. ": "e.g. ", "Your user agent": "Your user agent", "Your device resolution": "Your device resolution", "Analytics": "Analytics", - "The information being sent to us to help make Riot better includes:": "The information being sent to us to help make Riot better includes:", + "The information being sent to us to help make %(brand)s better includes:": "The information being sent to us to help make %(brand)s better includes:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.", "Error": "Error", "Unable to load! Check your network connectivity and try again.": "Unable to load! Check your network connectivity and try again.", @@ -114,8 +114,8 @@ "Only continue if you trust the owner of the server.": "Only continue if you trust the owner of the server.", "Trust": "Trust", "%(name)s is requesting verification": "%(name)s is requesting verification", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot does not have permission to send you notifications - please check your browser settings", - "Riot was not given permission to send notifications - please try again": "Riot was not given permission to send notifications - please try again", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s does not have permission to send you notifications - please check your browser settings", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s was not given permission to send notifications - please try again", "Unable to enable Notifications": "Unable to enable Notifications", "This email address was not found": "This email address was not found", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Your email address does not appear to be associated with a Matrix ID on this Homeserver.", @@ -320,8 +320,8 @@ "%(names)s and %(lastPerson)s are typing …": "%(names)s and %(lastPerson)s are typing …", "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 Riot is misconfigured": "Your Riot is misconfigured", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Ask your Riot admin to check your config for incorrect or duplicate entries.", + "Your %(brand)s is misconfigured": "Your %(brand)s is misconfigured", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.", "Cannot reach identity server": "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 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.": "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.", @@ -353,7 +353,7 @@ "%(num)s days from now": "%(num)s days from now", "%(name)s (%(userId)s)": "%(name)s (%(userId)s)", "Your browser does not support the required cryptography extensions": "Your browser does not support the required cryptography extensions", - "Not a valid Riot keyfile": "Not a valid Riot keyfile", + "Not a valid %(brand)s keyfile": "Not a valid %(brand)s keyfile", "Authentication check failed: incorrect password?": "Authentication check failed: incorrect password?", "Unrecognised address": "Unrecognised address", "You do not have permission to invite people to this room.": "You do not have permission to invite people to this room.", @@ -390,8 +390,8 @@ "Common names and surnames are easy to guess": "Common names and surnames are easy to guess", "Straight rows of keys are easy to guess": "Straight rows of keys are easy to guess", "Short keyboard patterns are easy to guess": "Short keyboard patterns are easy to guess", - "Help us improve Riot": "Help us improve Riot", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Send anonymous usage data which helps us improve Riot. This will use a cookie.", + "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", "No": "No", "Review where you’re logged in": "Review where you’re logged in", @@ -424,8 +424,8 @@ "What's New": "What's New", "Update": "Update", "Restart": "Restart", - "Upgrade your Riot": "Upgrade your Riot", - "A new version of Riot is available!": "A new version of Riot is available!", + "Upgrade your %(brand)s": "Upgrade your %(brand)s", + "A new version of %(brand)s is available!": "A new version of %(brand)s is available!", "Guest": "Guest", "There was an error joining the room": "There was an error joining the room", "Sorry, your homeserver is too old to participate in this room.": "Sorry, your homeserver is too old to participate in this room.", @@ -731,8 +731,8 @@ "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.", "Enable": "Enable", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages 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.", + "%(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 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.", "Connecting to integration manager...": "Connecting to integration manager...", "Cannot connect to integration manager": "Cannot connect to integration manager", "The integration manager is offline or it cannot reach your homeserver.": "The integration manager is offline or it cannot reach your homeserver.", @@ -785,8 +785,8 @@ "Unable to fetch notification target list": "Unable to fetch notification target list", "Notification targets": "Notification targets", "Advanced notification settings": "Advanced notification settings", - "There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply", + "There are advanced notifications which are not shown here.": "There are advanced notifications which are not shown here.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply.": "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply.", "Enable desktop notifications for this session": "Enable desktop notifications for this session", "Show message in desktop notification": "Show message in desktop notification", "Enable audible notifications for this session": "Enable audible notifications for this session", @@ -851,7 +851,7 @@ "Compact": "Compact", "Modern": "Modern", "Customise your appearance": "Customise your appearance", - "Appearance Settings only affect this Riot session.": "Appearance Settings only affect this Riot session.", + "Appearance Settings only affect this %(brand)s session.": "Appearance Settings only affect this %(brand)s session.", "Flair": "Flair", "Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?", "Success": "Success", @@ -871,9 +871,9 @@ "Deactivate account": "Deactivate account", "Legal": "Legal", "Credits": "Credits", - "For help with using Riot, click here.": "For help with using Riot, click here.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "For help with using Riot, click here or start a chat with our bot using the button below.", - "Chat with Riot Bot": "Chat with Riot Bot", + "For help with using %(brand)s, click here.": "For help with using %(brand)s, click here.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "For help with using %(brand)s, click here or start a chat with our bot using the button below.", + "Chat with %(brand)s Bot": "Chat with %(brand)s Bot", "Help & About": "Help & About", "Bug reporting": "Bug reporting", "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.": "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.", @@ -883,7 +883,7 @@ "FAQ": "FAQ", "Keyboard Shortcuts": "Keyboard Shortcuts", "Versions": "Versions", - "riot-web version:": "riot-web version:", + "%(brand)s version:": "%(brand)s version:", "olm version:": "olm version:", "Homeserver is": "Homeserver is", "Identity Server is": "Identity Server is", @@ -911,7 +911,7 @@ "You are currently subscribed to:": "You are currently subscribed to:", "Ignored users": "Ignored users", "⚠ These settings are meant for advanced users.": "⚠ These settings are meant for advanced users.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.", + "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.": "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.", "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.": "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.", "Personal ban list": "Personal ban list", "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.": "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.", @@ -950,11 +950,11 @@ "Where you’re logged in": "Where you’re logged in", "Manage the names of and sign out of your sessions below or verify them in your User Profile.": "Manage the names of and sign out of your sessions below or verify them in your User Profile.", "A session's public name is visible to people you communicate with": "A session's public name is visible to people you communicate with", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot collects anonymous analytics to allow us to improve the application.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s collects anonymous analytics to allow us to improve the application.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.", "Learn more about how we use analytics.": "Learn more about how we use analytics.", "No media permissions": "No media permissions", - "You may need to manually permit Riot to access your microphone/webcam": "You may need to manually permit Riot to access your microphone/webcam", + "You may need to manually permit %(brand)s to access your microphone/webcam": "You may need to manually permit %(brand)s to access your microphone/webcam", "Missing media permissions, click the button below to request.": "Missing media permissions, click the button below to request.", "Request media permissions": "Request media permissions", "No Audio Outputs detected": "No Audio Outputs detected", @@ -1189,10 +1189,10 @@ "You can still join it because this is a public room.": "You can still join it because this is a public room.", "Join the discussion": "Join the discussion", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "This invite to %(roomName)s was sent to %(email)s which is not associated with your account", - "Link this email with your account in Settings to receive invites directly in Riot.": "Link this email with your account in Settings to receive invites directly in Riot.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Link this email with your account in Settings to receive invites directly in %(brand)s.", "This invite to %(roomName)s was sent to %(email)s": "This invite to %(roomName)s was sent to %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Use an identity server in Settings to receive invites directly in Riot.", - "Share this email in Settings to receive invites directly in Riot.": "Share this email in Settings to receive invites directly in Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Use an identity server in Settings to receive invites directly in %(brand)s.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Share this email in Settings to receive invites directly in %(brand)s.", "Do you want to chat with %(user)s?": "Do you want to chat with %(user)s?", " wants to chat": " wants to chat", "Start chatting": "Start chatting", @@ -1374,7 +1374,7 @@ "Failed to deactivate user": "Failed to deactivate user", "This client does not support end-to-end encryption.": "This client does not support end-to-end encryption.", "Security": "Security", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.", + "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.": "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.", "Verify by scanning": "Verify by scanning", "Ask %(displayName)s to scan your code:": "Ask %(displayName)s to scan your code:", "If you can't scan the code above, verify by comparing unique emoji.": "If you can't scan the code above, verify by comparing unique emoji.", @@ -1494,7 +1494,7 @@ "Your avatar URL": "Your avatar URL", "Your user ID": "Your user ID", "Your theme": "Your theme", - "Riot URL": "Riot URL", + "%(brand)s URL": "%(brand)s URL", "Room ID": "Room ID", "Widget ID": "Widget ID", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Using this widget may share data with %(widgetDomain)s & your Integration Manager.", @@ -1669,8 +1669,8 @@ "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)", "Create Room": "Create Room", "Sign out": "Sign out", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this", - "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this", + "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.", "Incompatible Database": "Incompatible Database", "Continue With Encryption Disabled": "Continue With Encryption Disabled", "Confirm your account deactivation by using Single Sign On to prove your identity.": "Confirm your account deactivation by using Single Sign On to prove your identity.", @@ -1711,7 +1711,7 @@ "Integrations are disabled": "Integrations are disabled", "Enable 'Manage Integrations' in Settings to do this.": "Enable 'Manage Integrations' in Settings to do this.", "Integrations not allowed": "Integrations not allowed", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.", "To continue, use Single Sign On to prove your identity.": "To continue, use Single Sign On to prove your identity.", "Confirm to continue": "Confirm to continue", "Click the button below to confirm your identity.": "Click the button below to confirm your identity.", @@ -1731,18 +1731,18 @@ "a new cross-signing key signature": "a new cross-signing key signature", "a device cross-signing signature": "a device cross-signing signature", "a key signature": "a key signature", - "Riot encountered an error during upload of:": "Riot encountered an error during upload of:", + "%(brand)s encountered an error during upload of:": "%(brand)s encountered an error during upload of:", "Upload completed": "Upload completed", "Cancelled signature upload": "Cancelled signature upload", "Unable to upload": "Unable to upload", "Signature upload success": "Signature upload success", "Signature upload failed": "Signature upload failed", - "You've previously used Riot 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, Riot needs to resync your account.": "You've previously used Riot 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, Riot needs to resync your account.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.", + "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.": "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.", + "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.": "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.", "Incompatible local cache": "Incompatible local cache", "Clear cache and resync": "Clear cache and resync", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!", - "Updating Riot": "Updating Riot", + "%(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!": "%(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!", + "Updating %(brand)s": "Updating %(brand)s", "I don't want my encrypted messages": "I don't want my encrypted messages", "Manually export keys": "Manually export keys", "You'll lose access to your encrypted messages": "You'll lose access to your encrypted messages", @@ -1791,7 +1791,7 @@ "Upgrade private room": "Upgrade private room", "Upgrade public room": "Upgrade public room", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.", "You'll upgrade this room from to .": "You'll upgrade this room from to .", "Sign out and remove encryption keys?": "Sign out and remove encryption keys?", "Clear Storage and Sign Out": "Clear Storage and Sign Out", @@ -1799,7 +1799,7 @@ "Refresh": "Refresh", "Unable to restore session": "Unable to restore session", "We encountered an error trying to restore your previous session.": "We encountered an error trying to restore your previous session.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.", + "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.": "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.", "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.", "Verification Pending": "Verification Pending", "Please check your email and click on the link it contains. Once this is done, click continue.": "Please check your email and click on the link it contains. Once this is done, click continue.", @@ -2004,8 +2004,8 @@ "Sign in to your Matrix account on %(serverName)s": "Sign in to your Matrix account on %(serverName)s", "Sign in to your Matrix account on ": "Sign in to your Matrix account on ", "Sign in with SSO": "Sign in with SSO", - "Sorry, your browser is not able to run Riot.": "Sorry, your browser is not able to run Riot.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.", + "Sorry, your browser is not able to run %(brand)s.": "Sorry, your browser is not able to run %(brand)s.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.", "Please install Chrome, Firefox, or Safari for the best experience.": "Please install Chrome, Firefox, or Safari for the best experience.", "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!": "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!", "I understand the risks and wish to continue": "I understand the risks and wish to continue", @@ -2077,20 +2077,20 @@ "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.", "Review terms and conditions": "Review terms and conditions", "Old cryptography data detected": "Old cryptography data detected", - "Data from an older version of Riot 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.": "Data from an older version of Riot 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.", + "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.": "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.", "Self-verification request": "Self-verification request", "Logout": "Logout", "%(creator)s created and configured the room.": "%(creator)s created and configured the room.", "Your Communities": "Your Communities", - "Did you know: you can use communities to filter your Riot.im experience!": "Did you know: you can use communities to filter your Riot.im experience!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Did you know: you can use communities to filter your %(brand)s experience!", "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.": "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.", "Error whilst fetching joined communities": "Error whilst fetching joined communities", "Communities": "Communities", "Create a new community": "Create a new community", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.", "You have no visible notifications": "You have no visible notifications", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.", - "Riot failed to get the public room list.": "Riot failed to get the public room list.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.", + "%(brand)s failed to get the public room list.": "%(brand)s failed to get the public room list.", "The homeserver may be unavailable or overloaded.": "The homeserver may be unavailable or overloaded.", "Delete the room address %(alias)s and remove %(name)s from the directory?": "Delete the room address %(alias)s and remove %(name)s from the directory?", "Remove %(name)s from the directory?": "Remove %(name)s from the directory?", @@ -2099,7 +2099,7 @@ "delete the address.": "delete the address.", "The server may be unavailable or overloaded": "The server may be unavailable or overloaded", "Unable to join network": "Unable to join network", - "Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network", + "%(brand)s does not know how to join a room on this network": "%(brand)s does not know how to join a room on this network", "Room not found": "Room not found", "Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room", "Fetching third party location failed": "Fetching third party location failed", @@ -2207,7 +2207,11 @@ "Use Recovery Key or Passphrase": "Use Recovery Key or Passphrase", "Use Recovery Key": "Use Recovery Key", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.", - "This requires the latest Riot on your other devices:": "This requires the latest Riot on your other devices:", + "This requires the latest %(brand)s on your other devices:": "This requires the latest %(brand)s on your other devices:", + "%(brand)s Web": "%(brand)s Web", + "%(brand)s Desktop": "%(brand)s Desktop", + "%(brand)s iOS": "%(brand)s iOS", + "%(brand)s X for Android": "%(brand)s X for Android", "or another cross-signing capable Matrix client": "or another cross-signing capable Matrix client", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.", "Your new session is now verified. Other users will see it as trusted.": "Your new session is now verified. Other users will see it as trusted.", @@ -2321,7 +2325,7 @@ "Disable": "Disable", "Not currently indexing messages for any room.": "Not currently indexing messages for any room.", "Currently indexing: %(currentRoom)s": "Currently indexing: %(currentRoom)s", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot is securely caching encrypted messages locally for them to appear in search results:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s is securely caching encrypted messages locally for them to appear in search results:", "Space used:": "Space used:", "Indexed messages:": "Indexed messages:", "Indexed rooms:": "Indexed rooms:", diff --git a/src/toasts/AnalyticsToast.tsx b/src/toasts/AnalyticsToast.tsx index b186a65d9d..e0eda5fa48 100644 --- a/src/toasts/AnalyticsToast.tsx +++ b/src/toasts/AnalyticsToast.tsx @@ -17,6 +17,7 @@ limitations under the License. import React from "react"; import { _t } from "../languageHandler"; +import SdkConfig from "../SdkConfig"; import dis from "../dispatcher/dispatcher"; import Analytics from "../Analytics"; import AccessibleButton from "../components/views/elements/AccessibleButton"; @@ -42,14 +43,17 @@ const onUsageDataClicked = () => { const TOAST_KEY = "analytics"; export const showToast = (policyUrl?: string) => { + const brand = SdkConfig.get().brand; ToastStore.sharedInstance().addOrReplaceToast({ key: TOAST_KEY, - title: _t("Help us improve Riot"), + title: _t("Help us improve %(brand)s", { brand }), props: { description: _t( - "Send anonymous usage data which helps us improve Riot. " + + "Send anonymous usage data which helps us improve %(brand)s. " + "This will use a cookie.", - {}, + { + brand, + }, { "UsageDataLink": (sub) => ( { sub } diff --git a/src/toasts/UpdateToast.tsx b/src/toasts/UpdateToast.tsx index 7a8d3671db..595f3a35d6 100644 --- a/src/toasts/UpdateToast.tsx +++ b/src/toasts/UpdateToast.tsx @@ -17,6 +17,7 @@ limitations under the License. import React from "react"; import { _t } from "../languageHandler"; +import SdkConfig from "../SdkConfig"; import GenericToast from "../components/views/toasts/GenericToast"; import ToastStore from "../stores/ToastStore"; import QuestionDialog from "../components/views/dialogs/QuestionDialog"; @@ -76,11 +77,12 @@ export const showToast = (version: string, newVersion: string, releaseNotes?: st acceptLabel = _t("Restart"); } + const brand = SdkConfig.get().brand; ToastStore.sharedInstance().addOrReplaceToast({ key: TOAST_KEY, - title: _t("Upgrade your Riot"), + title: _t("Upgrade your %(brand)s", { brand }), props: { - description: _t("A new version of Riot is available!"), + description: _t("A new version of %(brand)s is available!", { brand }), acceptLabel, onAccept, rejectLabel: _t("Later"), diff --git a/src/utils/AutoDiscoveryUtils.js b/src/utils/AutoDiscoveryUtils.js index 328aa9c776..7452ff31a5 100644 --- a/src/utils/AutoDiscoveryUtils.js +++ b/src/utils/AutoDiscoveryUtils.js @@ -1,6 +1,6 @@ /* Copyright 2019 New Vector Ltd -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 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. @@ -70,10 +70,14 @@ export default class AutoDiscoveryUtils { let title = _t("Cannot reach homeserver"); let body = _t("Ensure you have a stable internet connection, or get in touch with the server admin"); if (!AutoDiscoveryUtils.isLivelinessError(err)) { - title = _t("Your Riot is misconfigured"); + const brand = SdkConfig.get().brand; + title = _t("Your %(brand)s is misconfigured", { brand }); body = _t( - "Ask your Riot admin to check your config for incorrect or duplicate entries.", - {}, { + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.", + { + brand, + }, + { a: (sub) => { return Date: Fri, 10 Jul 2020 19:26:33 +0100 Subject: [PATCH 0867/1504] Replace brand name in stranslated strings --- src/i18n/strings/ar.json | 6 +- src/i18n/strings/az.json | 8 +-- src/i18n/strings/be.json | 2 +- src/i18n/strings/bg.json | 108 ++++++++++++++++----------------- src/i18n/strings/ca.json | 26 ++++---- src/i18n/strings/cs.json | 110 +++++++++++++++++----------------- src/i18n/strings/cy.json | 4 +- src/i18n/strings/da.json | 32 +++++----- src/i18n/strings/de_DE.json | 108 ++++++++++++++++----------------- src/i18n/strings/el.json | 30 +++++----- src/i18n/strings/en_US.json | 30 +++++----- src/i18n/strings/eo.json | 106 ++++++++++++++++---------------- src/i18n/strings/es.json | 100 +++++++++++++++---------------- src/i18n/strings/et.json | 78 ++++++++++++------------ src/i18n/strings/eu.json | 106 ++++++++++++++++---------------- src/i18n/strings/fa.json | 10 ++-- src/i18n/strings/fi.json | 104 ++++++++++++++++---------------- src/i18n/strings/fr.json | 108 ++++++++++++++++----------------- src/i18n/strings/gl.json | 108 ++++++++++++++++----------------- src/i18n/strings/he.json | 12 ++-- src/i18n/strings/hi.json | 26 ++++---- src/i18n/strings/hr.json | 2 +- src/i18n/strings/hu.json | 108 ++++++++++++++++----------------- src/i18n/strings/id.json | 18 +++--- src/i18n/strings/is.json | 10 ++-- src/i18n/strings/it.json | 108 ++++++++++++++++----------------- src/i18n/strings/ja.json | 58 +++++++++--------- src/i18n/strings/jbo.json | 10 ++-- src/i18n/strings/kab.json | 22 +++---- src/i18n/strings/ko.json | 80 ++++++++++++------------- src/i18n/strings/lt.json | 64 ++++++++++---------- src/i18n/strings/lv.json | 36 +++++------ src/i18n/strings/ml.json | 10 ++-- src/i18n/strings/nb_NO.json | 38 ++++++------ src/i18n/strings/nl.json | 96 ++++++++++++++--------------- src/i18n/strings/nn.json | 62 +++++++++---------- src/i18n/strings/oc.json | 2 +- src/i18n/strings/pl.json | 60 +++++++++---------- src/i18n/strings/pt.json | 34 +++++------ src/i18n/strings/pt_BR.json | 54 ++++++++--------- src/i18n/strings/ro.json | 4 +- src/i18n/strings/ru.json | 84 +++++++++++++------------- src/i18n/strings/sk.json | 88 +++++++++++++-------------- src/i18n/strings/sl.json | 4 +- src/i18n/strings/sq.json | 108 ++++++++++++++++----------------- src/i18n/strings/sr.json | 36 +++++------ src/i18n/strings/sr_Latn.json | 10 ++-- src/i18n/strings/sv.json | 70 +++++++++++----------- src/i18n/strings/ta.json | 12 ++-- src/i18n/strings/te.json | 12 ++-- src/i18n/strings/th.json | 18 +++--- src/i18n/strings/tr.json | 52 ++++++++-------- src/i18n/strings/uk.json | 46 +++++++------- src/i18n/strings/vi.json | 14 ++--- src/i18n/strings/vls.json | 62 +++++++++---------- src/i18n/strings/zh_Hans.json | 76 +++++++++++------------ src/i18n/strings/zh_Hant.json | 108 ++++++++++++++++----------------- 57 files changed, 1449 insertions(+), 1449 deletions(-) diff --git a/src/i18n/strings/ar.json b/src/i18n/strings/ar.json index 708778d15d..2a67fd9258 100644 --- a/src/i18n/strings/ar.json +++ b/src/i18n/strings/ar.json @@ -17,15 +17,15 @@ "This email address is already in use": "عنوان البريد هذا مستخدم بالفعل", "This phone number is already in use": "رقم الهاتف هذا مستخدم بالفعل", "Failed to verify email address: make sure you clicked the link in the email": "فشل تأكيد عنوان البريد الإلكتروني: تحقق من نقر الرابط في البريد", - "The version of Riot.im": "إصدارة Riot.im", + "The version of %(brand)s": "إصدارة %(brand)s", "Whether or not you're using the Richtext mode of the Rich Text Editor": "فيما إذا كنت تستخدم وضع النص الغني لمحرر النصوص الغني أم لا", "Your homeserver's URL": "عنوان خادوم المنزل", "Your identity server's URL": "عنوان خادوم التعريف", "Analytics": "التحاليل", - "The information being sent to us to help make Riot.im better includes:": "تحتوي المعلومات التي تُرسل إلينا للمساعدة بتحسين جودة Riot.im الآتي:", + "The information being sent to us to help make %(brand)s better includes:": "تحتوي المعلومات التي تُرسل إلينا للمساعدة بتحسين جودة %(brand)s الآتي:", "Couldn't find a matching Matrix room": "لا يمكن إيجاد غرفة مايتركس متطابقة", "Unavailable": "غير متوفر", - "A new version of Riot is available.": "هناك نسخة جديدة مِن رايوت متوفرة.", + "A new version of %(brand)s is available.": "هناك نسخة جديدة مِن رايوت متوفرة.", "All Rooms": "كل الغُرف", "All messages": "كل الرسائل", "All notifications are currently disabled for all targets.": "كل التنبيهات غير مفعلة حالياً للجميع.", diff --git a/src/i18n/strings/az.json b/src/i18n/strings/az.json index 6cddb58ad1..c52c1fe9f6 100644 --- a/src/i18n/strings/az.json +++ b/src/i18n/strings/az.json @@ -25,7 +25,7 @@ "All notifications are currently disabled for all targets.": "Bütün qurğular üçün bütün bildirişlər kəsilmişdir.", "Failed to verify email address: make sure you clicked the link in the email": "Email-i yoxlamağı bacarmadı: əmin olun ki, siz məktubda istinaddakı ünvana keçdiniz", "The platform you're on": "İstifadə edilən platforma", - "The version of Riot.im": "Riot.im versiyası", + "The version of %(brand)s": "%(brand)s versiyası", "Your language of choice": "Seçilmiş dil", "Which officially provided instance you are using, if any": "Hansı rəsmən dəstəklənən müştəri tərəfindən siz istifadə edirsiniz ( əgər istifadə edirsinizsə)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Siz Rich Text Editor redaktorunda Richtext rejimindən istifadə edirsinizmi", @@ -35,7 +35,7 @@ "e.g. ": "məs. ", "Your User Agent": "Sizin istifadəçi agentiniz", "Your device resolution": "Sizin cihazınızın qətnaməsi", - "The information being sent to us to help make Riot.im better includes:": "Riot.im'i daha yaxşı etmək üçün bizə göndərilən məlumatlar daxildir:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s'i daha yaxşı etmək üçün bizə göndərilən məlumatlar daxildir:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Əgər bu səhifədə şəxsi xarakterin məlumatları rast gəlinirsə, məsələn otağın, istifadəçinin adının və ya qrupun adı, onlar serverə göndərilmədən əvvəl silinirlər.", "Call Timeout": "Cavab yoxdur", "Unable to capture screen": "Ekranın şəkilini etməyə müvəffəq olmur", @@ -334,8 +334,8 @@ "Unnamed Room": "Adı açıqlanmayan otaq", "Unable to load! Check your network connectivity and try again.": "Yükləmək olmur! Şəbəkə bağlantınızı yoxlayın və yenidən cəhd edin.", "Dismiss": "Nəzərə almayın", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot-un sizə bildiriş göndərmək icazəsi yoxdur - brauzerinizin parametrlərini yoxlayın", - "Riot was not given permission to send notifications - please try again": "Riot bildiriş göndərmək üçün icazə verilmədi - lütfən yenidən cəhd edin", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s-un sizə bildiriş göndərmək icazəsi yoxdur - brauzerinizin parametrlərini yoxlayın", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s bildiriş göndərmək üçün icazə verilmədi - lütfən yenidən cəhd edin", "This email address was not found": "Bu e-poçt ünvanı tapılmadı", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "E-poçt adresiniz bu Ana serverdəki Matrix ID ilə əlaqəli görünmür.", "Registration Required": "Qeydiyyat tələb olunur", diff --git a/src/i18n/strings/be.json b/src/i18n/strings/be.json index e8e94b747a..0a3daab661 100644 --- a/src/i18n/strings/be.json +++ b/src/i18n/strings/be.json @@ -21,7 +21,7 @@ "Close": "Зачыніць", "Notifications": "Апавяшчэнні", "Low Priority": "Нізкі прыярытэт", - "Riot does not know how to join a room on this network": "Riot не ведае, як увайсці ў пакой у гэтай сетке", + "%(brand)s does not know how to join a room on this network": "%(brand)s не ведае, як увайсці ў пакой у гэтай сетке", "Members": "Удзельнікі", "Can't update user notification settings": "Немагчыма абнавіць налады апавяшчэнняў карыстальніка", "Failed to change settings": "Не атрымалася змяніць налады", diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json index 1b67bb7ced..363951c314 100644 --- a/src/i18n/strings/bg.json +++ b/src/i18n/strings/bg.json @@ -58,14 +58,14 @@ "This phone number is already in use": "Този телефонен номер е вече зает", "Failed to verify email address: make sure you clicked the link in the email": "Неуспешно потвърждаване на имейл адреса: уверете се, че сте кликнали върху връзката в имейла", "The platform you're on": "Платформата, която използвате", - "The version of Riot.im": "Версията на Riot.im", + "The version of %(brand)s": "Версията на %(brand)s", "Your language of choice": "Вашият език по избор", "Which officially provided instance you are using, if any": "Кой официално-предоставен сървър използвате, ако има такъв", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Дали използвате Richtext режим на Rich Text Editor", "Your homeserver's URL": "Адресът на Вашия Home сървър", "Your identity server's URL": "Адресът на Вашия сървър за самоличност", "Analytics": "Статистика", - "The information being sent to us to help make Riot.im better includes:": "За да направим Riot по-добър, информацията изпратена до нас включва:", + "The information being sent to us to help make %(brand)s better includes:": "За да направим %(brand)s по-добър, информацията изпратена до нас включва:", "Call Failed": "Неуспешно повикване", "Call": "Позвъни", "Answer": "Отговори", @@ -92,8 +92,8 @@ "Failed to invite users to community": "Потребителите не могат да бъдат поканени в общността", "Failed to invite users to %(groupId)s": "Потребителите не могат да бъдат поканени в %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "Следните стаи не могат да бъдат добавени в %(groupId)s:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot няма разрешение да Ви изпраща известия - моля проверете вашите настройки на браузъра", - "Riot was not given permission to send notifications - please try again": "Riot не е получил разрешение да изпраща известия - моля опитайте отново", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s няма разрешение да Ви изпраща известия - моля проверете вашите настройки на браузъра", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s не е получил разрешение да изпраща известия - моля опитайте отново", "Unable to enable Notifications": "Неупешно включване на известия", "This email address was not found": "Този имейл адрес не беше открит", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Изглежда вашият имейл адрес не може да се асоциира с Matrix ID на този Home сървър.", @@ -175,7 +175,7 @@ "Send anyway": "Изпрати въпреки това", "Unnamed Room": "Стая без име", "Your browser does not support the required cryptography extensions": "Вашият браузър не поддържа необходимите разширения за шифроване", - "Not a valid Riot keyfile": "Невалиден файл с ключ за Riot", + "Not a valid %(brand)s keyfile": "Невалиден файл с ключ за %(brand)s", "Authentication check failed: incorrect password?": "Неуспешна автентикация: неправилна парола?", "Failed to join room": "Неуспешно присъединяване към стаята", "Message Pinning": "Функция за закачане на съобщения", @@ -614,14 +614,14 @@ "": "<не се поддържа>", "Import E2E room keys": "Импортирай E2E ключове", "Cryptography": "Криптография", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot събира анонимни статистики, за да ни позволи да подобрим приложението.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s събира анонимни статистики, за да ни позволи да подобрим приложението.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Поверителността е важна за нас, затова не събираме лични или идентифициращи Вас данни.", "Learn more about how we use analytics.": "Научете повече за това как използваме статистическите данни.", "Labs": "Експерименти", "Check for update": "Провери за нова версия", "Start automatically after system login": "Автоматично стартиране след влизане в системата", "No media permissions": "Няма разрешения за медийните устройства", - "You may need to manually permit Riot to access your microphone/webcam": "Може да се наложи ръчно да разрешите на Riot да получи достъп до Вашия микрофон/уеб камера", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Може да се наложи ръчно да разрешите на %(brand)s да получи достъп до Вашия микрофон/уеб камера", "No Microphones detected": "Няма открити микрофони", "No Webcams detected": "Няма открити уеб камери", "Default Device": "Устройство по подразбиране", @@ -634,7 +634,7 @@ "click to reveal": "натиснете за показване", "Homeserver is": "Home сървър:", "Identity Server is": "Сървър за самоличност:", - "riot-web version:": "Версия на riot-web:", + "%(brand)s version:": "Версия на %(brand)s:", "olm version:": "Версия на olm:", "Failed to send email": "Неуспешно изпращане на имейл", "The email address linked to your account must be entered.": "Имейл адресът, свързан с профила Ви, трябва да бъде въведен.", @@ -692,16 +692,16 @@ "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Когато тази страница съдържа информация идентифицираща Вас (като например стая, потребител или идентификатор на група), тези данни биват премахнати преди да бъдат изпратени до сървъра.", "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. Искате ли да продължите?", "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.": "Сигурни ли сте, че искате да премахнете (изтриете) това събитие? Забележете, че ако изтриете събитие за промяна на името на стая или тема, това може да обърне промяната.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Ако преди сте използвали по-нова версия на Riot, Вашата сесия може да не бъде съвместима с текущата версия. Затворете този прозорец и се върнете в по-новата версия.", + "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.": "Ако преди сте използвали по-нова версия на %(brand)s, Вашата сесия може да не бъде съвместима с текущата версия. Затворете този прозорец и се върнете в по-новата версия.", "This will be your account name on the homeserver, or you can pick a different server.": "Това ще бъде името на профила Ви на Home сървъра, или можете да изберете друг сървър.", - "Data from an older version of Riot 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.": "Засечени са данни от по-стара версия на Riot. Това ще доведе до неправилна работа на криптографията от край до край в по-старата версия. Шифрованите от край до край съобщения, които са били обменени наскоро (при използването на по-стара версия), може да не успеят да бъдат разшифровани в тази версия. Това също може да доведе до неуспех в обмяната на съобщения в тази версия. Ако имате проблеми, излезте и влезте отново в профила си. За да запазите историята на съобщенията, експортирайте и импортирайте отново Вашите ключове.", + "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.": "Засечени са данни от по-стара версия на %(brand)s. Това ще доведе до неправилна работа на криптографията от край до край в по-старата версия. Шифрованите от край до край съобщения, които са били обменени наскоро (при използването на по-стара версия), може да не успеят да бъдат разшифровани в тази версия. Това също може да доведе до неуспех в обмяната на съобщения в тази версия. Ако имате проблеми, излезте и влезте отново в профила си. За да запазите историята на съобщенията, експортирайте и импортирайте отново Вашите ключове.", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Няма връзка с Home сървъра. Моля, проверете Вашата връзка. Уверете се, че SSL сертификатът на Home сървъра е надежден и че някое разширение на браузъра не блокира заявките.", "none": "няма", "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.": "Този процес Ви позволява да експортирате във файл ключовете за съобщения в шифровани стаи. Така ще можете да импортирате файла в друг Matrix клиент, така че той също да може да разшифрова такива съобщения.", "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.": "Експортираният файл ще позволи на всеки, който може да го прочете, да разшифрова всяко шифровано съобщение, което можете да видите. Трябва да го държите на сигурно място. За да направите това, трябва да въведете парола по-долу, която ще се използва за шифроване на експортираните данни. Ще бъде възможно да се импортират данните само с използване на същата парола.", "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.": "Този процес позволява да импортирате ключове за шифроване, които преди сте експортирали от друг Matrix клиент. Тогава ще можете да разшифровате всяко съобщение, което другият клиент може да разшифрова.", "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Експортираният файл може да бъде предпазен с парола. Трябва да въведете парола тук, за да разшифровате файла.", - "Did you know: you can use communities to filter your Riot.im experience!": "Знаете ли, че: може да използвате общности, за да филтрирате Вашето Riot.im преживяване!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Знаете ли, че: може да използвате общности, за да филтрирате Вашето %(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.": "За да създадете филтър, дръпнете и пуснете аватара на общността върху панела за филтриране в най-лявата част на екрана. По всяко време може да натиснете върху аватар от панела, за да видите само стаите и хората от тази общност.", "Key request sent.": "Заявката за ключ е изпратена.", "Code": "Код", @@ -721,7 +721,7 @@ "Who can join this community?": "Кой може да се присъедини към тази общност?", "Everyone": "Всеки", "Fetching third party location failed": "Неуспешно извличане на адреса на стаята от друга мрежа", - "A new version of Riot is available.": "Налична е нова версия на Riot.", + "A new version of %(brand)s is available.": "Налична е нова версия на %(brand)s.", "Send Account Data": "Изпращане на Account Data", "All notifications are currently disabled for all targets.": "В момента известията са изключени за всички цели.", "Uploading report": "Качване на доклада", @@ -776,7 +776,7 @@ "Forward Message": "Препрати съобщението", "You have successfully set a password and an email address!": "Вие успешно зададохте парола и имейл адрес!", "Remove %(name)s from the directory?": "Премахване на %(name)s от директорията?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot използва много разширени браузър харектеристики, някои от които не са налични или са все още експериментални в настоящия Ви браузър.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s използва много разширени браузър харектеристики, някои от които не са налични или са все още експериментални в настоящия Ви браузър.", "Developer Tools": "Инструменти за разработчика", "Preparing to send logs": "Подготовка за изпращане на логове", "Explore Account Data": "Преглед на данните от профила", @@ -822,8 +822,8 @@ "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.": "Логовете за дебъгване съдържат данни за използване на приложението, включващи потребителското Ви име, идентификаторите или псевдонимите на стаите или групите, които сте посетили, и потребителските имена на други потребители. Те не съдържат съобщения.", "Unhide Preview": "Покажи отново прегледа", "Unable to join network": "Неуспешно присъединяване към мрежата", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Възможна конфигурация на настройките за известия в клиент, различен от Riot. Не могат да бъдат променени в Riot, но важат въпреки това", - "Sorry, your browser is not able to run Riot.": "За жалост, Вашият браузър не може да пусне Riot.", + "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, но важат въпреки това", + "Sorry, your browser is not able to run %(brand)s.": "За жалост, Вашият браузър не може да пусне %(brand)s.", "Messages in group chats": "Съобщения в групови чатове", "Yesterday": "Вчера", "Error encountered (%(errorDetail)s).": "Възникна грешка (%(errorDetail)s).", @@ -833,7 +833,7 @@ "Set Password": "Задаване на парола", "An error occurred whilst saving your email notification preferences.": "Възникна грешка при запазване на настройките за имейл известяване.", "Off": "Изкл.", - "Riot does not know how to join a room on this network": "Riot не знае как да се присъедини към стая от тази мрежа", + "%(brand)s does not know how to join a room on this network": "%(brand)s не знае как да се присъедини към стая от тази мрежа", "Mentions only": "Само при споменаване", "You can now return to your account after signing out, and sign in on other devices.": "Вече можете да се върнете в профила си след излизане от него и да влезете от други устройства.", "Enable email notifications": "Активиране на имейл известия", @@ -866,8 +866,8 @@ "e.g. %(exampleValue)s": "напр. %(exampleValue)s", "Send analytics data": "Изпращане на статистически данни", "Muted Users": "Заглушени потребители", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Моля, помогнете за подобряването на Riot.im като изпращате анонимни данни за ползване. Това ще използва бисквитка (моля, вижте нашата политика за бисквитки).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Моля, помогнете за подобряването на Riot.im като изпращате анонимни данни за ползване. Това ще използва бисквитка.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Моля, помогнете за подобряването на %(brand)s като изпращате анонимни данни за ползване. Това ще използва бисквитка (моля, вижте нашата политика за бисквитки).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Моля, помогнете за подобряването на %(brand)s като изпращате анонимни данни за ползване. Това ще използва бисквитка.", "Yes, I want to help!": "Да, искам да помогна!", "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.": "Това ще направи акаунта Ви неизползваем завинаги. Няма да можете да влезете пак, а регистрирането повторно на същия потребителски идентификатор няма да е възможно. Акаунтът Ви да напусне всички стаи, в които участва. Ще бъдат премахнати и данните за акаунта Ви от сървъра за самоличност. Действието е необратимо.", "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.": "Деактивирането на акаунта Ви по подразбиране не прави така, че изпратените съобщения да бъдат забравени. Ако искате да забравим съобщенията Ви, моля отбележете с отметка по-долу.", @@ -945,10 +945,10 @@ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s настрой основния адрес на тази стая на %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s премахна основния адрес на тази стая.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Преди да изпратите логове, трябва да отворите доклад за проблем в Github.", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot вече използва 3-5 пъти по-малко памет, като зарежда информация за потребители само когато е нужна. Моля, изчакайте докато ресинхронизираме със сървъра!", - "Updating Riot": "Обновяване на Riot", - "You've previously used Riot 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, Riot needs to resync your account.": "Преди сте използвали Riot на %(host)s с включено постепенно зареждане на членове. В тази версия, тази настройка е изключена. Понеже локалният кеш не е съвместим при тези две настройки, Riot трябва да синхронизира акаунта Ви наново.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Ако другата версия на Riot все още е отворена в друг таб, моля затворете я. Използването на Riot на един адрес във версии с постепенно и без постепенно зареждане ще причини проблеми.", + "%(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!": "%(brand)s вече използва 3-5 пъти по-малко памет, като зарежда информация за потребители само когато е нужна. Моля, изчакайте докато ресинхронизираме със сървъра!", + "Updating %(brand)s": "Обновяване на %(brand)s", + "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.": "Преди сте използвали %(brand)s на %(host)s с включено постепенно зареждане на членове. В тази версия, тази настройка е изключена. Понеже локалният кеш не е съвместим при тези две настройки, %(brand)s трябва да синхронизира акаунта Ви наново.", + "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.": "Ако другата версия на %(brand)s все още е отворена в друг таб, моля затворете я. Използването на %(brand)s на един адрес във версии с постепенно и без постепенно зареждане ще причини проблеми.", "Incompatible local cache": "Несъвместим локален кеш", "Clear cache and resync": "Изчисти кеша и ресинхронизирай", "Please review and accept the policies of this homeserver:": "Моля, прегледайте и приемете политиките на този сървър:", @@ -1000,8 +1000,8 @@ "Please review and accept all of the homeserver's policies": "Моля прегледайте и приемете всички политики на сървъра", "Failed to load group members": "Неуспешно зареждане на членовете на групата", "That doesn't look like a valid email address": "Това не изглежда като валиден имейл адрес", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "За да избегнете загубата на чат история, трябва да експортирате ключовете на стаята преди да излезете от профила си. Ще трябва да се върнете към по-новата версия на Riot за да направите това", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Преди време сте използвали по-нова версия на Riot на %(host)s. За да използвате тази версия отново с шифроване от край до край, ще е необходимо да излезете от профила си и да влезете отново. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "За да избегнете загубата на чат история, трябва да експортирате ключовете на стаята преди да излезете от профила си. Ще трябва да се върнете към по-новата версия на %(brand)s за да направите това", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Преди време сте използвали по-нова версия на %(brand)s на %(host)s. За да използвате тази версия отново с шифроване от край до край, ще е необходимо да излезете от профила си и да влезете отново. ", "Incompatible Database": "Несъвместима база данни", "Continue With Encryption Disabled": "Продължи с изключено шифроване", "Checking...": "Проверяване...", @@ -1114,9 +1114,9 @@ "Theme": "Тема", "Account management": "Управление на акаунта", "Deactivating your account is a permanent action - be careful!": "Деактивирането на акаунта е необратимо действие - внимавайте!", - "For help with using Riot, click here.": "За помощ при използването на Riot, кликнете тук.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "За помощ при използването на Riot, кликнете тук или започнете чат с бота ни използвайки бутона по-долу.", - "Chat with Riot Bot": "Чати с Riot Bot", + "For help with using %(brand)s, click here.": "За помощ при използването на %(brand)s, кликнете тук.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "За помощ при използването на %(brand)s, кликнете тук или започнете чат с бота ни използвайки бутона по-долу.", + "Chat with %(brand)s Bot": "Чати с %(brand)s Bot", "Help & About": "Помощ и относно", "Bug reporting": "Съобщаване за грешка", "FAQ": "Често задавани въпроси", @@ -1393,8 +1393,8 @@ "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.": "Приспособлението от адрес %(widgetUrl)s иска да потвърди идентичността Ви. Ако позволите това, приспособлението ще може да потвърди потребителския Ви идентификатор, без да може да извършва действия с него.", "Remember my selection for this widget": "Запомни избора ми за това приспособление", "Deny": "Откажи", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot не успя да вземе списъка с протоколи от сървъра. Този сървър може да е прекалено стар за да поддържа чужди мрежи.", - "Riot failed to get the public room list.": "Riot не успя да вземе списъка с публични стаи.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s не успя да вземе списъка с протоколи от сървъра. Този сървър може да е прекалено стар за да поддържа чужди мрежи.", + "%(brand)s failed to get the public room list.": "%(brand)s не успя да вземе списъка с публични стаи.", "The homeserver may be unavailable or overloaded.": "Сървърът може да не е наличен или претоварен.", "You have %(count)s unread notifications in a prior version of this room.|other": "Имате %(count)s непрочетени известия в предишна версия на тази стая.", "You have %(count)s unread notifications in a prior version of this room.|one": "Имате %(count)s непрочетено известие в предишна версия на тази стая.", @@ -1476,8 +1476,8 @@ "Identity server URL does not appear to be a valid identity server": "Адресът на сървърът за самоличност не изглежда да е валиден сървър за самоличност", "Cannot reach homeserver": "Неуспешна връзка със сървъра", "Ensure you have a stable internet connection, or get in touch with the server admin": "Уверете се, че интернет връзката ви е стабилна, или се свържете с администратора на сървъра", - "Your Riot is misconfigured": "Riot не е конфигуриран правилно", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Попитайте Riot администратора да провери конфигурацията ви за неправилни или дублирани записи.", + "Your %(brand)s is misconfigured": "%(brand)s не е конфигуриран правилно", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Попитайте %(brand)s администратора да провери конфигурацията ви за неправилни или дублирани записи.", "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.": "Може да възстановите паролата си, но някои функции няма да са достъпни докато сървъра за самоличност е офлайн. Ако продължавате да виждате това предупреждение, проверете конфигурацията или се свържете с администратора на сървъра.", @@ -1587,10 +1587,10 @@ "Deactivate user": "Деактивирай потребителя", "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) при опит да се провери поканата. Може да предадете тази информация на администратор на стаята.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Тази покана за %(roomName)s е била изпратена към адрес %(email)s, който не е асоцииран с профила ви", - "Link this email with your account in Settings to receive invites directly in Riot.": "Свържете този имейл адрес с профила си от Настройки за да получавате покани директно в Riot.", + "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": "Тази покана за %(roomName)s беше изпратена към адрес %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Използвайте сървър за самоличност от Настройки за да получавате покани директно в Riot.", - "Share this email in Settings to receive invites directly in Riot.": "Споделете този имейл в Настройки за да получавате покани директно в Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Използвайте сървър за самоличност от Настройки за да получавате покани директно в %(brand)s.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Споделете този имейл в Настройки за да получавате покани директно в %(brand)s.", "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Използвайте сървър за самоличност за да каните по имейл. Използвайте сървъра за самоличност по подразбиране (%(defaultIdentityServerName)s) или настройте друг в Настройки.", "Use an identity server to invite by email. Manage in Settings.": "Използвайте сървър за самоличност за да каните по имейл. Управлявайте в Настройки.", "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Настройте имейл за възстановяване на профила. По желание, използвайте имейл или телефон за да бъдете откриваеми от сегашните ви контакти.", @@ -1792,7 +1792,7 @@ "View rules": "Виж правилата", "You are currently subscribed to:": "В момента сте абонирани към:", "⚠ These settings are meant for advanced users.": "⚠ Тези настройки са за напреднали потребители.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Добавете тук потребители или сървъри, които искате да игнорирате. Използвайте звездички за да кажете на Riot да търси съвпадения с всеки символ. Например: @bot:* ще игнорира всички потребители с име 'bot' на кой да е сървър.", + "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 да търси съвпадения с всеки символ. Например: @bot:* ще игнорира всички потребители с име 'bot' на кой да е сървър.", "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.": "Игнорирането на хора става чрез списъци за блокиране, които съдържат правила кой да бъде блокиран. Абонирането към списък за блокиране означава, че сървърите/потребителите блокирани от този списък ще бъдат скрити от вас.", "Personal ban list": "Персонален списък за блокиране", "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' - останете в тази стая за да работи списъкът с блокиране.", @@ -1828,7 +1828,7 @@ "Your avatar URL": "Адреса на профилната ви снимка", "Your user ID": "Потребителския ви идентификатор", "Your theme": "Вашата тема", - "Riot URL": "Riot URL адрес", + "%(brand)s URL": "%(brand)s URL адрес", "Room ID": "Идентификатор на стаята", "Widget ID": "Идентификатор на приспособлението", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Използването на това приспособление може да сподели данни с %(widgetDomain)s и с мениджъра на интеграции.", @@ -1841,12 +1841,12 @@ "Integrations are disabled": "Интеграциите са изключени", "Enable 'Manage Integrations' in Settings to do this.": "Включете 'Управление на интеграции' от настройките за направите това.", "Integrations not allowed": "Интеграциите не са разрешени", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Вашият Riot не позволява да използвате мениджъра на интеграции за да направите това. Свържете се с администратор.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Вашият %(brand)s не позволява да използвате мениджъра на интеграции за да направите това. Свържете се с администратор.", "Automatically invite users": "Автоматично кани потребители", "Upgrade private room": "Обнови лична стая", "Upgrade public room": "Обнови публична стая", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Обновяването на стая е действие за напреднали и обикновено се препоръчва когато стаята е нестабилна поради бъгове, липсващи функции или проблеми със сигурността.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Това обикновено влия само на това как стаята се обработва на сървъра. Ако имате проблеми с Riot, съобщете за проблем.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Това обикновено влия само на това как стаята се обработва на сървъра. Ако имате проблеми с %(brand)s, съобщете за проблем.", "You'll upgrade this room from to .": "Ще обновите стаята от до .", "Upgrade": "Обнови", "Enter secret storage passphrase": "Въведете парола за секретно складиране", @@ -1885,11 +1885,11 @@ "Go": "Давай", "Failed to find the following users": "Неуспешно откриване на следните потребители", "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Следните потребители не съществуват или са невалидни и не могат да бъдат поканени: %(csvNames)s", - "The version of Riot": "Версията на Riot", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Дали използвате Riot на устройство, на което основния механизъм за достъп е докосване", - "Whether you're using Riot as an installed Progressive Web App": "Дали използвате Riot като инсталирано прогресивно уеб приложение (PWA)", + "The version of %(brand)s": "Версията на %(brand)s", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Дали използвате %(brand)s на устройство, на което основния механизъм за достъп е докосване", + "Whether you're using %(brand)s as an installed Progressive Web App": "Дали използвате %(brand)s като инсталирано прогресивно уеб приложение (PWA)", "Your user agent": "Информация за браузъра ви", - "The information being sent to us to help make Riot better includes:": "Информацията, която се изпраща за да ни помогне да подобрим Riot включва:", + "The information being sent to us to help make %(brand)s better includes:": "Информацията, която се изпраща за да ни помогне да подобрим %(brand)s включва:", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "В тази стая има непознати сесии: ако продължите без да ги потвърдите, ще е възможно някой да подслуша обаждането ви.", "Review Sessions": "Прегледай сесиите", "If you cancel now, you won't complete verifying the other user.": "Ако се откажете сега, няма да завършите верификацията на другия потребител.", @@ -2035,8 +2035,8 @@ "Manage": "Управление", "Securely cache encrypted messages locally for them to appear in search results.": "Кеширай шифровани съобщения локално по сигурен начин за да се появяват в резултати от търсения.", "Enable": "Включи", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Липсват задължителни компоненти в Riot, за да могат да бъдат складирани локално и по сигурен начин шифровани съобщения. Ако искате да експериментирате с тази функция, \"компилирайте\" версия на Riot Desktop с добавени компоненти за търсене.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot работещ в браузър не може да складира шифровани съобщения локално по сигурен начин. Използвайте Riot Desktop за да може шифровани съобщения да се появяват в резултати от търсения.", + "%(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 Desktop с добавени компоненти за търсене.", + "%(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 за да може шифровани съобщения да се появяват в резултати от търсения.", "This session is backing up your keys. ": "Тази сесия прави резервни копия на ключовете ви. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Тази сесия не прави резервни копия на ключовете, но имате съществуващо резервно копие, което да възстановите и към което да добавяте от тук нататък.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Свържете тази сесия с резервно копие на ключове преди да се отпишете от нея, за да не загубите ключове, които може би съществуват единствено в тази сесия.", @@ -2130,7 +2130,7 @@ "%(count)s sessions|other": "%(count)s сесии", "%(count)s sessions|one": "%(count)s сесия", "Hide sessions": "Скрий сесиите", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Сесията, която се опитвате да верифицирате не поддържа сканиране на QR код или емоджи верификация (нещата които Riot поддържа). Пробвайте с друг клиент.", + "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.": "Сесията, която се опитвате да верифицирате не поддържа сканиране на QR код или емоджи верификация (нещата които %(brand)s поддържа). Пробвайте с друг клиент.", "Verify by scanning": "Верифицирай чрез сканиране", "Ask %(displayName)s to scan your code:": "Попитайте %(displayName)s да сканира вашия код:", "If you can't scan the code above, verify by comparing unique emoji.": "Ако не можете да сканирате кода по-горе, верифицирайте сравнявайки уникални емоджита.", @@ -2237,7 +2237,7 @@ "a new cross-signing key signature": "нов подпис на ключа за кръстосано-подписване", "a device cross-signing signature": "подпис за кръстосано-подписване на устройства", "a key signature": "подпис на ключ", - "Riot encountered an error during upload of:": "Riot срещна проблем при качването на:", + "%(brand)s encountered an error during upload of:": "%(brand)s срещна проблем при качването на:", "Upload completed": "Качването завърши", "Cancelled signature upload": "Отказано качване на подпис", "Unable to upload": "Неуспешно качване", @@ -2269,8 +2269,8 @@ "Room name or address": "Име на стая или адрес", "Joins room with given address": "Присъединява се към стая с дадения адрес", "Unrecognised room address:": "Неразпознат адрес на стая:", - "Help us improve Riot": "Помогнете ни да подобрим Riot", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Изпращане на анонимни данни за използването, които помагат да се подобри Riot. Това ще използва бисквитка.", + "Help us improve %(brand)s": "Помогнете ни да подобрим %(brand)s", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Изпращане на анонимни данни за използването, които помагат да се подобри %(brand)s. Това ще използва бисквитка.", "I want to help": "Искам да помогна", "Your homeserver has exceeded its user limit.": "Надвишен е лимитът за потребители на сървъра ви.", "Your homeserver has exceeded one of its resource limits.": "Беше надвишен някой от лимитите на сървъра.", @@ -2279,8 +2279,8 @@ "Set password": "Настрой парола", "To return to your account in future you need to set a password": "За да се върнете в профила си в бъдеще е необходимо да настройте парола", "Restart": "Рестартирай", - "Upgrade your Riot": "Обновете Riot", - "A new version of Riot is available!": "Налична е нова версия на Riot!", + "Upgrade your %(brand)s": "Обновете %(brand)s", + "A new version of %(brand)s is available!": "Налична е нова версия на %(brand)s!", "New version available. Update now.": "Налична е нова версия. Обновете сега.", "Please verify the room ID or address and try again.": "Проверете идентификатора или адреса на стаята и опитайте пак.", "Room ID or address of ban list": "Идентификатор или адрес на стая списък за блокиране", @@ -2296,7 +2296,7 @@ "This address is available to use": "Адресът е наличен за ползване", "This address is already in use": "Адресът вече се използва", "Set a room address to easily share your room with other people.": "Настройте адрес на стаята за да може лесно да я споделяте с други хора.", - "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Използвали сте и по-нова версия на Riot от сегашната за тази сесия. За да използвате сегашната версия отново с шифроване от-край-до-край, ще е необходимо да излезете и да влезете отново.", + "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Използвали сте и по-нова версия на %(brand)s от сегашната за тази сесия. За да използвате сегашната версия отново с шифроване от-край-до-край, ще е необходимо да излезете и да влезете отново.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Ако сте забравили паролата за възстановяване, може да използвате ключа за възстановяване или да настройте нови опции за възстановяване.", "Enter recovery key": "Въведете ключ за възстановяване", "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Достъпете защитената история на съобщенията и самоличността за кръстосано-подписване за верифициране на други сесии, чрез въвеждане на ключа си за възстановяване.", @@ -2342,7 +2342,7 @@ "Signing In...": "Влизане...", "If you've joined lots of rooms, this might take a while": "Това може да отнеме известно време, ако сте в много стаи", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Потвърдете идентичността на този вход чрез верифицирането му от някоя от другите ви сесии, давайки достъп до шифрованите съобщения.", - "This requires the latest Riot on your other devices:": "Това изисква най-новата версия на Riot на другите ви устройства:", + "This requires the latest %(brand)s on your other devices:": "Това изисква най-новата версия на %(brand)s на другите ви устройства:", "or another cross-signing capable Matrix client": "или друг Matrix клиент поддържащ кръстосано-подписване", "Use Recovery Passphrase or Key": "Използвай парола за възстановяване или ключ", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Сесията ви е потвърдена. Тя има достъп до шифрованите ви съобщения. Други потребители я виждат като доверена.", @@ -2388,7 +2388,7 @@ "Disable": "Изключи", "Not currently indexing messages for any room.": "В момента не се индексират съобщения в нито една стая.", "Currently indexing: %(currentRoom)s": "В момента се индексира: %(currentRoom)s", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot кешира шифровани съобщения локално по сигурен начин, за да може те да се появяват в резултати от търсения:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s кешира шифровани съобщения локално по сигурен начин, за да може те да се появяват в резултати от търсения:", "Space used:": "Използвано пространство:", "Indexed messages:": "Индексирани съобщения:", "Indexed rooms:": "Индексирани стаи:", @@ -2459,7 +2459,7 @@ "Compact": "Компактен", "Modern": "Модерен", "Customise your appearance": "Настройте изгледа", - "Appearance Settings only affect this Riot session.": "Настройките на изгледа влияят само на тази Riot сесия.", + "Appearance Settings only affect this %(brand)s session.": "Настройките на изгледа влияят само на тази %(brand)s сесия.", "The authenticity of this encrypted message can't be guaranteed on this device.": "Автентичността на това шифровано съобщение не може да бъде гарантирана на това устройство.", "Always show first": "Винаги показвай първо", "Show": "Покажи", diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json index aee9559eb7..3df4c50d8a 100644 --- a/src/i18n/strings/ca.json +++ b/src/i18n/strings/ca.json @@ -93,8 +93,8 @@ "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:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot no té permís per enviar-vos notificacions. Comproveu la configuració del vostre navegador", - "Riot was not given permission to send notifications - please try again": "Riot no ha rebut cap permís per enviar notificacions. Torneu-ho a provar", + "%(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", "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.", @@ -174,7 +174,7 @@ "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", - "Not a valid Riot keyfile": "El fitxer no és un fitxer de claus de Riot vàlid", + "Not a valid %(brand)s keyfile": "El fitxer no és un fitxer de claus de %(brand)s vàlid", "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", @@ -511,7 +511,7 @@ "To get started, please pick a username!": "Per començar, seleccioneu un nom d'usuari!", "This will be your account name on the homeserver, or you can pick a different server.": "Aquest serà el nom del seu compte al servidor amfitrió, o bé trieu-ne un altre different server.", "If you already have a Matrix account you can log in instead.": "Si ja teniu un compte a Matrix, podeu log in.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Si anteriorment heu utilitzat un versió de Riot més recent, la vostra sessió podría ser incompatible amb aquesta versió. Tanqueu aquesta finestra i torneu a la versió més recent.", + "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.": "Si anteriorment heu utilitzat un versió de %(brand)s més recent, la vostra sessió podría ser incompatible amb aquesta versió. Tanqueu aquesta finestra i torneu a la versió més recent.", "Private Chat": "Xat privat", "Public Chat": "Xat públic", "Custom": "Personalitzat", @@ -560,7 +560,7 @@ "Failed to leave room": "No s'ha pogut sortir de la sala", "For security, this session has been signed out. Please sign in again.": "Per seguretat, aquesta sessió s'ha tancat. Torna a iniciar la sessió.", "Old cryptography data detected": "S'han detectat dades de criptografia antigues", - "Data from an older version of Riot 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 Riot. 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.", + "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", @@ -602,7 +602,7 @@ "Import E2E room keys": "Importar claus E2E de sala", "Cryptography": "Criptografia", "Labs": "Laboraroris", - "riot-web version:": "Versió de riot-web:", + "%(brand)s version:": "Versió de %(brand)s:", "olm version:": "Versió d'olm:", "Incorrect username and/or password.": "Usuari i/o contrasenya incorrectes.", "The phone number entered looks invalid": "El número de telèfon introduït sembla erroni", @@ -620,7 +620,7 @@ "Export": "Exporta", "Import room keys": "Importa les claus de la sala", "Import": "Importa", - "The version of Riot.im": "La versió del Riot.im", + "The version of %(brand)s": "La versió del %(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", @@ -634,9 +634,9 @@ "Your language of choice": "El teu idioma preferit", "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 Riot.im better includes:": "La informació enviada a Riot.im per ajudar-nos a millorar inclou:", + "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", - "A new version of Riot is available.": "Hi ha una versió nova del Riot disponible.", + "A new version of %(brand)s is available.": "Hi ha una versió nova del %(brand)s disponible.", "Send Account Data": "Envia les dades del compte", "Advanced notification settings": "Paràmetres avançats de notificacions", "Uploading report": "S'està enviant l'informe", @@ -694,7 +694,7 @@ "Enter keywords separated by a comma:": "Introduïu les paraules clau separades per una coma:", "Forward Message": "Reenvia el missatge", "Remove %(name)s from the directory?": "Voleu retirar %(name)s del directori?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilitza moltes funcions avançades del navegador, algunes de les quals no estan disponibles o són experimentals al vostre navegador actual.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s utilitza moltes funcions avançades del navegador, algunes de les quals no estan disponibles o són experimentals al vostre navegador actual.", "Developer Tools": "Eines de desenvolupador", "Preparing to send logs": "Preparant l'enviament de logs", "Explore Account Data": "Explora les dades del compte", @@ -740,8 +740,8 @@ "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.": "Els logs de depuració contenen dades d'ús de l'aplicació que inclouen el teu nom d'usuari, les IDs o pseudònims de les sales o grups que has visitat i els noms d'usuari d'altres usuaris. No contenen missatges.", "Unhide Preview": "Mostra la previsualització", "Unable to join network": "No s'ha pogut unir-se a la xarxa", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "És possible que els hàgiu configurat en un client diferent de Riot. No podeu modificar-los amb Riot, però encara s'apliquen", - "Sorry, your browser is not able to run Riot.": "Disculpeu, el seu navegador not pot executar Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "És possible que els hàgiu configurat en un client diferent de %(brand)s. No podeu modificar-los amb %(brand)s, però encara s'apliquen", + "Sorry, your browser is not able to run %(brand)s.": "Disculpeu, el seu navegador not pot executar %(brand)s.", "Quote": "Cita", "Messages in group chats": "Missatges en xats de grup", "Yesterday": "Ahir", @@ -750,7 +750,7 @@ "Unable to fetch notification target list": "No s'ha pogut obtenir la llista d'objectius de les notificacions", "Set Password": "Establiu una contrasenya", "Off": "Apagat", - "Riot does not know how to join a room on this network": "El Riot no sap com unir-se a una sala en aquesta xarxa", + "%(brand)s does not know how to join a room on this network": "El %(brand)s no sap com unir-se a una sala en aquesta xarxa", "Mentions only": "Només mencions", "Failed to remove tag %(tagName)s from room": "No s'ha pogut esborrar l'etiqueta %(tagName)s de la sala", "You can now return to your account after signing out, and sign in on other devices.": "Ara podreu tornar a entrar al vostre compte des de altres dispositius.", diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index f25b247d46..5c88927408 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -207,9 +207,9 @@ "Alias (optional)": "Alias (nepovinný)", "Results from DuckDuckGo": "Výsledky z DuckDuckGo", "Return to login screen": "Vrátit k přihlašovací obrazovce", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot není oprávněn posílat vám oznámení – zkontrolujte prosím nastavení svého prohlížeče", - "Riot was not given permission to send notifications - please try again": "Riot nebyl oprávněn k posílání oznámení – zkuste to prosím znovu", - "riot-web version:": "verze riot-web:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s není oprávněn posílat vám oznámení – zkontrolujte prosím nastavení svého prohlížeče", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s nebyl oprávněn k posílání oznámení – zkuste to prosím znovu", + "%(brand)s version:": "verze %(brand)s:", "Room %(roomId)s not visible": "Místnost %(roomId)s není viditelná", "Room Colour": "Barva místnosti", "%(roomName)s does not exist.": "%(roomName)s neexistuje.", @@ -454,7 +454,7 @@ "Missing user_id in request": "V zadání chybí user_id", "(could not connect media)": "(média se nepodařilo spojit)", "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s nastavil viditelnost budoucí zpráv v místnosti neznámým (%(visibility)s).", - "Not a valid Riot keyfile": "Neplatný soubor s klíčem Riot", + "Not a valid %(brand)s keyfile": "Neplatný soubor s klíčem %(brand)s", "Mirror local video feed": "Zrcadlit lokání video", "Enable inline URL previews by default": "Nastavit povolení náhledů URL adres jako výchozí", "Enable URL previews for this room (only affects you)": "Povolit náhledy URL adres pro tuto místnost (ovlivňuje pouze vás)", @@ -577,7 +577,7 @@ "Ignore request": "Ignorovat žádost", "Encryption key request": "Žádost o šifrovací klíč", "Unable to restore session": "Nelze obnovit relaci", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Pokud jste se v minulosti již přihlásili s novější verzi programu Riot, vaše relace nemusí být kompatibilní s touto verzí. Zavřete prosím toto okno a přihlaste se znovu pomocí nové verze.", + "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.": "Pokud jste se v minulosti již přihlásili s novější verzi programu %(brand)s, vaše relace nemusí být kompatibilní s touto verzí. Zavřete prosím toto okno a přihlaste se znovu pomocí nové verze.", "Please check your email and click on the link it contains. Once this is done, click continue.": "Zkontrolujte svou e-mailovou schránku a klepněte na odkaz ve zprávě, kterou jsme vám poslali. V případě, že jste to už udělali, klepněte na tlačítko Pokračovat.", "This will allow you to reset your password and receive notifications.": "Toto vám umožní obnovit si heslo a přijímat oznámení e-mailem.", "Skip": "Přeskočit", @@ -635,12 +635,12 @@ "Light theme": "Světlý vzhled", "Dark theme": "Tmavý vzhled", "Analytics": "Analytické údaje", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot sbírá anonymní analytické údaje, které nám umožňují aplikaci dále zlepšovat.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s sbírá anonymní analytické údaje, které nám umožňují aplikaci dále zlepšovat.", "Labs": "Experimentální funkce", "Reject all %(invitedRooms)s invites": "Odmítnutí všech %(invitedRooms)s pozvání", "Start automatically after system login": "Zahájit automaticky po přihlášení do systému", "No media permissions": "Žádná oprávnění k médiím", - "You may need to manually permit Riot to access your microphone/webcam": "Je možné, že budete potřebovat manuálně povolit Riot přístup k mikrofonu/webkameře", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Je možné, že budete potřebovat manuálně povolit %(brand)s přístup k mikrofonu/webkameře", "Profile": "Profil", "The email address linked to your account must be entered.": "Musíte zadat e-mailovou adresu spojenou s vaším účtem.", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Na adresu %(emailAddress)s byla odeslána zpráva. Potom, co přejdete na odkaz z této zprávy, klepněte níže.", @@ -669,10 +669,10 @@ "collapse": "sbalit", "expand": "rozbalit", "Old cryptography data detected": "Nalezeny starší šifrované datové zprávy", - "Data from an older version of Riot 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.": "Byly nalezeny datové zprávy ze starší verze Riot. Důsledkem bude, že end-to-end šifrování nebude ve starší verzi Riot správně fungovat. Šifrované zprávy ze starší verze nemusí být čitelné v nové verzi. Může dojít i k selhání zasílaní zpráv s touto verzí Riotu. Pokud zaznamenáte některý z uvedených problému, odhlaste se a znovu přihlaste. Pro zachování historie zpráv exportujte a znovu importujte své klíče.", + "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.": "Byly nalezeny datové zprávy ze starší verze %(brand)s. Důsledkem bude, že end-to-end šifrování nebude ve starší verzi %(brand)s správně fungovat. Šifrované zprávy ze starší verze nemusí být čitelné v nové verzi. Může dojít i k selhání zasílaní zpráv s touto verzí %(brand)su. Pokud zaznamenáte některý z uvedených problému, odhlaste se a znovu přihlaste. Pro zachování historie zpráv exportujte a znovu importujte své klíče.", "Warning": "Varování", "Fetching third party location failed": "Nepodařilo se zjistit umístění třetí strany", - "A new version of Riot is available.": "Je dostupná nová verze Riotu.", + "A new version of %(brand)s is available.": "Je dostupná nová verze %(brand)su.", "I understand the risks and wish to continue": "Rozumím rizikům a přeji si pokračovat", "Send Account Data": "Poslat data o účtu", "Advanced notification settings": "Rozšířená nastavení oznámení", @@ -729,7 +729,7 @@ "Forward Message": "Přeposlat", "You have successfully set a password and an email address!": "Úspěšně jste si nastavili heslo a e-mailovou adresu!", "Remove %(name)s from the directory?": "Odebrat %(name)s z adresáře?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot používá mnoho pokročilých funkcí, z nichž některé jsou ve vašem současném prohlížeči nedostupné nebo experimentální.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s používá mnoho pokročilých funkcí, z nichž některé jsou ve vašem současném prohlížeči nedostupné nebo experimentální.", "Developer Tools": "Nástroje pro vývojáře", "Explore Account Data": "Prozkoumat data o účtu", "Remove from Directory": "Odebrat z adresáře", @@ -770,14 +770,14 @@ "Show message in desktop notification": "Zobrazovat zprávu v oznámení na ploše", "Unhide Preview": "Zobrazit náhled", "Unable to join network": "Nelze se připojit k síti", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Snad jste je nastavili v jiném klientu než Riot. V Riotu je nemůžete upravit, ale přesto platí", - "Sorry, your browser is not able to run Riot.": "Omlouváme se, váš prohlížeč není schopný Riot spustit.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Snad jste je nastavili v jiném klientu než %(brand)s. V %(brand)su je nemůžete upravit, ale přesto platí", + "Sorry, your browser is not able to run %(brand)s.": "Omlouváme se, váš prohlížeč není schopný %(brand)s spustit.", "Uploaded on %(date)s by %(user)s": "Nahráno %(date)s uživatelem %(user)s", "Messages in group chats": "Zprávy ve skupinách", "Yesterday": "Včera", "Error encountered (%(errorDetail)s).": "Nastala chyba (%(errorDetail)s).", "Low Priority": "Nízká priorita", - "Riot does not know how to join a room on this network": "Riot neví, jak vstoupit do místosti na této síti", + "%(brand)s does not know how to join a room on this network": "%(brand)s neví, jak vstoupit do místosti na této síti", "Set Password": "Nastavit heslo", "An error occurred whilst saving your email notification preferences.": "Při ukládání nastavení e-mailových oznámení nastala chyba.", "Off": "Vypnout", @@ -799,9 +799,9 @@ "Checking for an update...": "Kontrola aktualizací...", "There are advanced notifications which are not shown here": "Jsou k dispozici pokročilá oznámení, která zde nejsou zobrazena", "The platform you're on": "Vámi používaná platforma", - "The version of Riot.im": "Verze Riot.im", + "The version of %(brand)s": "Verze %(brand)s", "Your language of choice": "Váš jazyk", - "Which officially provided instance you are using, if any": "Kterou oficiální instanci Riot.im používáte (a jestli vůbec)", + "Which officially provided instance you are using, if any": "Kterou oficiální instanci %(brand)s používáte (a jestli vůbec)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Zda při psaní zpráv používáte rozbalenou lištu formátování textu", "Your homeserver's URL": "URL vašeho domovského serveru", "Your identity server's URL": "URL Vámi používaného serveru identity", @@ -810,7 +810,7 @@ "e.g. ": "např. ", "Your User Agent": "Řetězec User Agent Vašeho zařízení", "Your device resolution": "Rozlišení obrazovky vašeho zařízení", - "The information being sent to us to help make Riot.im better includes:": "S cílem vylepšovat aplikaci Riot.im shromažďujeme následující údaje:", + "The information being sent to us to help make %(brand)s better includes:": "S cílem vylepšovat aplikaci %(brand)s shromažďujeme následující údaje:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "V případě, že se na stránce vyskytují identifikační údaje, jako například název místnosti, ID uživatele, místnosti a nebo skupiny, jsou tyto údaje před odesláním na server odstraněny.", "Call in Progress": "Probíhající hovor", "A call is currently being placed!": "Právě probíhá jiný hovor!", @@ -850,8 +850,8 @@ "The email field must not be blank.": "E-mail nemůže být prázdný.", "The phone number field must not be blank.": "Telefonní číslo nemůže být prázdné.", "The password field must not be blank.": "Heslo nemůže být prázdné.", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Prosím pomozte nám vylepšovat Riot.im odesíláním anonymních údajů o používaní. Použijeme k tomu cookies (přečtěte si jak cookies používáme).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Prosím pomozte nám vylepšovat Riot.im odesíláním anonymních údajů o používaní. Na tento účel použijeme cookie.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Prosím pomozte nám vylepšovat %(brand)s odesíláním anonymních údajů o používaní. Použijeme k tomu cookies (přečtěte si jak cookies používáme).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Prosím pomozte nám vylepšovat %(brand)s odesíláním anonymních údajů o používaní. Na tento účel použijeme cookie.", "Yes, I want to help!": "Ano, chci pomoci!", "Please contact your service administrator to continue using the service.": "Pro další používání vašeho zařízení prosím kontaktujte prosím správce vaší služby.", "This homeserver has hit its Monthly Active User limit.": "Tento domovský server dosáhl svého měsíčního limitu pro aktivní uživatele.", @@ -908,8 +908,8 @@ "Terms and Conditions": "Smluvní podmínky", "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Chcete-li nadále používat domovský server %(homeserverDomain)s, měli byste si přečíst a odsouhlasit naše smluvní podmínky.", "Review terms and conditions": "Přečíst smluvní podmínky", - "Did you know: you can use communities to filter your Riot.im experience!": "Věděli jste, že práci s Riot.im si můžete zpříjemnit používáním skupin!", - "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.": "Pro nastavení filtru přetáhněte avatar skupiny na panel filtrování na levé straně obrazovky. Potom můžete kdykoliv klepnout na avatar skupiny v tomto panelu a Riot vám bude zobrazovat jen místnosti a lidi z dané skupiny.", + "Did you know: you can use communities to filter your %(brand)s experience!": "Věděli jste, že práci s %(brand)s si můžete zpříjemnit používáním skupin!", + "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.": "Pro nastavení filtru přetáhněte avatar skupiny na panel filtrování na levé straně obrazovky. Potom můžete kdykoliv klepnout na avatar skupiny v tomto panelu a %(brand)s vám bude zobrazovat jen místnosti a lidi z dané skupiny.", "You can't send any messages until you review and agree to our terms and conditions.": "Dokud si nepřečtete a neodsouhlasíte naše smluvní podmínky, nebudete moci posílat žádné zprávy.", "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.": "Vaše zpráva nebyla odeslána, protože tento domovský server dosáhl svého měsíčního limitu pro aktivní uživatele. Pro další využívání služby prosím kontaktujte jejího správce.", "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Vaše zpráva nebyla odeslána, protože tento domovský server dosáhl limitu svých zdrojů. Pro další využívání služby prosím kontaktujte jejího správce.", @@ -926,8 +926,8 @@ "Manually export keys": "Export klíčů", "You'll lose access to your encrypted messages": "Přijdete o přístup k šifrovaným zprávám", "Are you sure you want to sign out?": "Opravdu se chcete odhlásit?", - "Updating Riot": "Aktualizujeme Riot", - "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Jestli máte nějakou zpětnou vazbu nebo máte s Riotem nějaký problém, dejte nám vědět na GitHubu.", + "Updating %(brand)s": "Aktualizujeme %(brand)s", + "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Jestli máte nějakou zpětnou vazbu nebo máte s %(brand)sem nějaký problém, dejte nám vědět na GitHubu.", "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.": "Abychom předešli řešení jednoho problému několikrát, podívejte se prosím nejdřív seznam existujících issue (a můžete jim dát 👍) nebo můžete vyrobit nové. Jenom nám prosím pište anglicky.", "Report bugs & give feedback": "Hlášení chyb a zpětná vazba", "Go back": "Zpět", @@ -999,9 +999,9 @@ "Profile picture": "Profilový obrázek", "Display Name": "Zobrazované jméno", "Room Addresses": "Adresy místnosti", - "For help with using Riot, click here.": "Pro pomoc s používáním Riotu klepněte sem.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Pro pomoc s používáním Riotu klepněte sem nebo následujícím tlačítkem zahajte konverzaci s robotem.", - "Chat with Riot Bot": "Konverzovat s Riot Botem", + "For help with using %(brand)s, click here.": "Pro pomoc s používáním %(brand)su klepněte sem.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Pro pomoc s používáním %(brand)su klepněte sem nebo následujícím tlačítkem zahajte konverzaci s robotem.", + "Chat with %(brand)s Bot": "Konverzovat s %(brand)s Botem", "Ignored users": "Ignorovaní uživatelé", "Bulk options": "Hromadná možnost", "Key backup": "Záloha klíčů", @@ -1255,10 +1255,10 @@ "Encrypted messages in group chats": "Šifrované zprávy ve skupinových konverzacích", "Open Devtools": "Otevřít nástroje pro vývojáře", "Credits": "Poděkování", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Už jste na adrese %(host)s použili novější verzi Riotu. Jestli chcete znovu používat tuto verzi i s end-to-end šifrováním, je potřeba se odhlásit a znovu přihlásit. ", - "You've previously used Riot 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, Riot needs to resync your account.": "Na adrese %(host)s už jste použili Riot se zapnutou volbou načítání členů místností až při prvním zobrazení. V této verzi je načítání členů až při prvním zobrazení vypnuté. Protože je s tímto nastavením lokální vyrovnávací paměť nekompatibilní, Riot potřebuje znovu synchronizovat údaje z vašeho účtu.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Pokud v jiné karťe otevřený jiný Riot, prosím zavřete ji, protože si dvě různé verze můžou navzájem působit problémy.", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot teď používá 3-5× méně paměti, protože si informace o ostatních uživatelích načítá až když je potřebuje. Prosím počkejte na dokončení synchronizace se serverem!", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Už jste na adrese %(host)s použili novější verzi %(brand)su. Jestli chcete znovu používat tuto verzi i s end-to-end šifrováním, je potřeba se odhlásit a znovu přihlásit. ", + "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.": "Na adrese %(host)s už jste použili %(brand)s se zapnutou volbou načítání členů místností až při prvním zobrazení. V této verzi je načítání členů až při prvním zobrazení vypnuté. Protože je s tímto nastavením lokální vyrovnávací paměť nekompatibilní, %(brand)s potřebuje znovu synchronizovat údaje z vašeho účtu.", + "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.": "Pokud v jiné karťe otevřený jiný %(brand)s, prosím zavřete ji, protože si dvě různé verze můžou navzájem působit problémy.", + "%(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!": "%(brand)s teď používá 3-5× méně paměti, protože si informace o ostatních uživatelích načítá až když je potřebuje. Prosím počkejte na dokončení synchronizace se serverem!", "Update status": "Aktualizovat status", "Clear status": "Smazat status", "Set status": "Nastavit status", @@ -1333,7 +1333,7 @@ "Error removing alias": "Nepovedlo se odebrat alias", "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Nastala chyba při pokusu o odstranění aliasu místnosti. Je možné, že už neexistuje, nebo to může být dočasná chyba.", "Power level": "Úroveň oprávnění", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Abyste po odhlášení nepřišli o přístup k historii šifrovaných konverzací, měli byste si před odhlášením exportovat šifrovací klíče místností. Prosím vraťte se k novější verzi Riotu a exportujte si klíče", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Abyste po odhlášení nepřišli o přístup k historii šifrovaných konverzací, měli byste si před odhlášením exportovat šifrovací klíče místností. Prosím vraťte se k novější verzi %(brand)su a exportujte si klíče", "Room Settings - %(roomName)s": "Nastavení místnosti - %(roomName)s", "A username can only contain lower case letters, numbers and '=_-./'": "Uživatelské jméno může obsahovat malá písmena, čísla a znaky '=_-./'", "Share Permalink": "Sdílet odkaz", @@ -1451,10 +1451,10 @@ "Enter username": "Zadejte uživatelské jméno", "Some characters not allowed": "Nějaké znaky jsou zakázané", "Create your Matrix account on ": "Vytvořte si účet Matrix na serveru ", - "Please install Chrome, Firefox, or Safari for the best experience.": "Aby Riot fungoval co nejlépe, nainstalujte si prosím Chrome, Firefox, nebo Safari.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Aby %(brand)s fungoval co nejlépe, nainstalujte si prosím Chrome, Firefox, nebo Safari.", "Want more than a community? Get your own server": "Chcete víc? Můžete mít vlastní server", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot nemohl načíst seznam podporovaných protokolů z domovského serveru. Server je možná příliš zastaralý a nepodporuje komunikaci se síti třetích stran.", - "Riot failed to get the public room list.": "Riot nemohl načíst seznam veřejných místností.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s nemohl načíst seznam podporovaných protokolů z domovského serveru. Server je možná příliš zastaralý a nepodporuje komunikaci se síti třetích stran.", + "%(brand)s failed to get the public room list.": "%(brand)s nemohl načíst seznam veřejných místností.", "The homeserver may be unavailable or overloaded.": "Domovský server je nedostupný nebo přetížený.", "Add room": "Přidat místnost", "You have %(count)s unread notifications in a prior version of this room.|other": "Máte %(count)s nepřečtených oznámení v předchozí verzi této místnosti.", @@ -1476,8 +1476,8 @@ "Browse": "Procházet", "Cannot reach homeserver": "Nelze se připojit k domovskému serveru", "Ensure you have a stable internet connection, or get in touch with the server admin": "Ujistěte se, že máte stabilní internetové připojení. Případně problém řešte se správcem serveru", - "Your Riot is misconfigured": "Riot je špatně nakonfigurován", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Požádejte správce vašeho Riotu, aby zkontroloval vaši konfiguraci. Pravděpodobně obsahuje chyby nebo duplicity.", + "Your %(brand)s is misconfigured": "%(brand)s je špatně nakonfigurován", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Požádejte správce vašeho %(brand)su, aby zkontroloval vaši konfiguraci. Pravděpodobně obsahuje chyby nebo duplicity.", "Unexpected error resolving identity server configuration": "Chyba při hledání konfigurace serveru identity", "Use lowercase letters, numbers, dashes and underscores only": "Používejte pouze malá písmena, čísla, pomlčky a podtržítka", "Cannot reach identity server": "Nelze se připojit k serveru identity", @@ -1619,10 +1619,10 @@ "Loading room preview": "Načítání náhdledu místnosti", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Při ověřování pozvánky došlo k chybě (%(errcode)s). Předejte tuto informaci správci místnosti.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Pozvánka do místnosti %(roomName)s byla poslána na adresu %(email)s, která není k tomuto účtu přidána", - "Link this email with your account in Settings to receive invites directly in Riot.": "Přidejte si tento e-mail k účtu v Nastavení, abyste dostávali pozvání přímo v Riotu.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Přidejte si tento e-mail k účtu v Nastavení, abyste dostávali pozvání přímo v %(brand)su.", "This invite to %(roomName)s was sent to %(email)s": "Pozvánka do %(roomName)s byla odeslána na adresu %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Používat server identit z nastavení k přijímání pozvánek přímo v Riotu.", - "Share this email in Settings to receive invites directly in Riot.": "Sdílet tento e-mail v nastavení, abyste mohli dostávat pozvánky přímo v Riotu.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Používat server identit z nastavení k přijímání pozvánek přímo v %(brand)su.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Sdílet tento e-mail v nastavení, abyste mohli dostávat pozvánky přímo v %(brand)su.", "%(count)s unread messages including mentions.|other": "%(count)s nepřečtených zpráv a zmínek.", "%(count)s unread messages including mentions.|one": "Nepřečtená zmínka.", "%(count)s unread messages.|other": "%(count)s nepřečtených zpráv.", @@ -1776,7 +1776,7 @@ "View rules": "Zobrazit pravidla", "You are currently subscribed to:": "Odebíráte:", "⚠ These settings are meant for advanced users.": "⚠ Tato nastavení jsou pro pokročilé uživatele.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Sem přidejte uživatele a servery, které chcete ignorovat. Můžete použít hvězdičku místo libovolných znaků. Například pravidlo @bot:* zablokuje všechny uživatele se jménem 'bot' na libovolném serveru.", + "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.": "Sem přidejte uživatele a servery, které chcete ignorovat. Můžete použít hvězdičku místo libovolných znaků. Například pravidlo @bot:* zablokuje všechny uživatele se jménem 'bot' na libovolném serveru.", "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.": "Lidé a servery jsou blokováni pomocí seznamů obsahující pravidla koho blokovat. Odebírání blokovacího seznamu znamená, že neuvidíte uživatele a servery na něm uvedené.", "Personal ban list": "Osobní seznam blokací", "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.": "Váš osobní seznam blokací obsahuje všechny uživatele a servery, které nechcete vidět. Po ignorování prvního uživatele/serveru se vytvoří nová místnost 'Můj seznam blokací' - zůstaňte v ní, aby seznam platil.", @@ -1805,7 +1805,7 @@ "Your avatar URL": "URL vašeho avataru", "Your user ID": "Vaše ID", "Your theme": "Váš motiv vzhledu", - "Riot URL": "URL Riotu", + "%(brand)s URL": "URL %(brand)su", "Room ID": "ID místnosti", "Widget ID": "ID widgetu", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Použití tohoto widgetu může sdílet data s %(widgetDomain)s a vaším správcem integrací.", @@ -1817,12 +1817,12 @@ "Integrations are disabled": "Integrace jsou zakázané", "Enable 'Manage Integrations' in Settings to do this.": "Pro provedení této akce povolte v nastavení správu integrací.", "Integrations not allowed": "Integrace nejsou povolené", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Váš Riot neumožňuje použít správce integrací. Kontaktujte prosím správce.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Váš %(brand)s neumožňuje použít správce integrací. Kontaktujte prosím správce.", "Automatically invite users": "Automaticky zvát uživatele", "Upgrade private room": "Upgradovat soukromou místnost", "Upgrade public room": "Upgradovat veřejnou místnost", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Upgradování místnosti je pokročilá operace a je doporučeno jí provést pokud je místnost nestabilní kvůli chybám, chybějícím funkcím nebo zranitelnostem.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Toto běžně ovlivňuje pouze zpracovávání místnosti na serveru. Pokud máte problém s Riotem, nahlaste nám ho prosím.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Toto běžně ovlivňuje pouze zpracovávání místnosti na serveru. Pokud máte problém s %(brand)sem, nahlaste nám ho prosím.", "You'll upgrade this room from to .": "Upgradujeme tuto místnost z na .", "Upgrade": "Upgradovat", "Enter secret storage passphrase": "Zadejte tajné heslo k bezpečnému úložišti", @@ -1937,7 +1937,7 @@ "Manage": "Spravovat", "Securely cache encrypted messages locally for them to appear in search results.": "Bezpečně uchovávat zprávy na tomto zařízení aby se v nich dalo vyhledávat.", "Enable": "Povolit", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot neumí bezpečně uchovávat zprávy když běží v prohlížeči. Pokud chcete vyhledávat v šifrovaných zprávách, použijte Riot Desktop.", + "%(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 neumí bezpečně uchovávat zprávy když běží v prohlížeči. Pokud chcete vyhledávat v šifrovaných zprávách, použijte %(brand)s Desktop.", "This session is backing up your keys. ": "Tato relace zálohuje vaše klíče. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Tato relace nezálohuje vaše klíče, ale už máte zálohu ze které je můžete obnovit.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Než se odhlásíte, připojte tuto relaci k záloze klíčů, abyste nepřišli o klíče, které mohou být jen v této relaci.", @@ -2085,7 +2085,7 @@ "If you cancel now, you won't complete your secret storage operation.": "Pokud teď proces zrušíte, tak se nedokončí operace s bezpečným úložištěm.", "Cancel entering passphrase?": "Zrušit zadávání hesla?", "Setting up keys": "Příprava klíčů", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riotu chybí nějaké komponenty, které jsou potřeba pro vyhledávání v zabezpečených místnostech. Pokud chcete s touto funkcí experimentovat, tak si pořiďte vlastní Riot Desktop s přidanými komponentami.", + "%(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)su chybí nějaké komponenty, které jsou potřeba pro vyhledávání v zabezpečených místnostech. Pokud chcete s touto funkcí experimentovat, tak si pořiďte vlastní %(brand)s Desktop s přidanými komponentami.", "Subscribing to a ban list will cause you to join it!": "Odebíráním seznamu zablokovaných uživatelů se přidáte do jeho místnosti!", "If this isn't what you want, please use a different tool to ignore users.": "Pokud to nechcete, tak prosím použijte jiný nástroj na blokování uživatelů.", "You cancelled verification. Start verification again from their profile.": "Zrušili jste ověření. Můžete začít znovu z druhého profilu.", @@ -2103,11 +2103,11 @@ "Clear cross-signing keys": "Smazat klíče pro cross-signing", "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Zabezpečte si šifrovací klíče silným heslem. Pro lepší bezpečnost by mělo být jiné než vaše heslo k přihlášení:", "Enter a passphrase": "Zadejte heslo", - "The version of Riot": "Verze Riotu", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Zda používáte Riot na dotykovém zařízení", - "Whether you're using Riot as an installed Progressive Web App": "Zda používáte Riot jako nainstalovanou Progresivní Webovou Aplikaci", + "The version of %(brand)s": "Verze %(brand)su", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Zda používáte %(brand)s na dotykovém zařízení", + "Whether you're using %(brand)s as an installed Progressive Web App": "Zda používáte %(brand)s jako nainstalovanou Progresivní Webovou Aplikaci", "Your user agent": "Identifikace vašeho prohlížeče", - "The information being sent to us to help make Riot better includes:": "Abychom mohli Riot zlepšovat, posíláte nám následující informace:", + "The information being sent to us to help make %(brand)s better includes:": "Abychom mohli %(brand)s zlepšovat, posíláte nám následující informace:", "Verify this session by completing one of the following:": "Ověřte tuto relaci dokončením jednoho z následujících:", "Scan this unique code": "Naskenujte tento jedinečný kód", "or": "nebo", @@ -2117,7 +2117,7 @@ "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) se přihlásil do nové relace a neověřil ji:", "Ask this user to verify their session, or manually verify it below.": "Poproste tohoto uživatele aby svojí relaci ověřil a nebo jí níže můžete ověřit manuálně.", "Manually Verify": "Ověřit manuálně", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Relace, kterou se snažíte ověřit, neumožňuje ověření QR kódem ani pomocí emoji, což je to, co Riot podporuje. Zkuste použít jiného klienta.", + "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.": "Relace, kterou se snažíte ověřit, neumožňuje ověření QR kódem ani pomocí emoji, což je to, co %(brand)s podporuje. Zkuste použít jiného klienta.", "Verify by scanning": "Ověřte naskenováním", "You declined": "Odmítli jste", "%(name)s declined": "Uživatel %(name)s odmítl", @@ -2141,7 +2141,7 @@ "Disable": "Zakázat", "Not currently downloading messages for any room.": "Aktuálně se nestahují žádné zprávy.", "Downloading mesages for %(currentRoom)s.": "Stahují se zprávy pro %(currentRoom)s.", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot si bezpečně uchovává šifrované zprávy lokálně, aby v nich mohl vyhledávat:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s si bezpečně uchovává šifrované zprávy lokálně, aby v nich mohl vyhledávat:", "Space used:": "Použitý prostor:", "Indexed messages:": "Indexované zprávy:", "Indexed rooms:": "Indexované místnosti:", @@ -2280,7 +2280,7 @@ "Add a new server...": "Přidat nový server...", "%(networkName)s rooms": "místnosti v %(networkName)s", "Matrix rooms": "místnosti na Matrixu", - "Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Připomínka: Váš prohlížeč není oficiálně podporován, tak se může Riot chovat nepředvídatelně.", + "Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Připomínka: Váš prohlížeč není oficiálně podporován, tak se může %(brand)s chovat nepředvídatelně.", "Enable end-to-end encryption": "Povolit E2E šifrování", "You can’t disable this later. Bridges & most bots won’t work yet.": "Už to v budoucnu nepůjde vypnout. Většina botů a propojení zatím nefunguje.", "Server did not require any authentication": "Server nevyžadoval žádné ověření", @@ -2312,8 +2312,8 @@ "Appearance": "Vzhled", "Please verify the room ID or address and try again.": "Ověřte prosím, že ID místnosti je správné a zkuste to znovu.", "Room ID or address of ban list": "ID nebo adresa seznamu zablokovaných", - "Help us improve Riot": "Pomozte nám zlepšovat Riot", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Zasílat anonymní data o použití aplikace, která nám pomáhají Riot zlepšovat. Bedeme na to používat soubory cookie.", + "Help us improve %(brand)s": "Pomozte nám zlepšovat %(brand)s", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Zasílat anonymní data o použití aplikace, která nám pomáhají %(brand)s zlepšovat. Bedeme na to používat soubory cookie.", "I want to help": "Chci pomoci", "Your homeserver has exceeded its user limit.": "Na vašem domovském serveru byl překročen limit počtu uživatelů.", "Your homeserver has exceeded one of its resource limits.": "Na vašem domovském serveru byl překročen limit systémových požadavků.", @@ -2322,6 +2322,6 @@ "Set password": "Nastavit heslo", "To return to your account in future you need to set a password": "Abyste se k účtu mohli v budoucnu vrátit, je potřeba nastavit heslo", "Restart": "Restartovat", - "Upgrade your Riot": "Aktualizovat Riot", - "A new version of Riot is available!": "Je dostupná nová verze Riotu!" + "Upgrade your %(brand)s": "Aktualizovat %(brand)s", + "A new version of %(brand)s is available!": "Je dostupná nová verze %(brand)su!" } diff --git a/src/i18n/strings/cy.json b/src/i18n/strings/cy.json index 5795f3b5de..99c5296be5 100644 --- a/src/i18n/strings/cy.json +++ b/src/i18n/strings/cy.json @@ -5,8 +5,8 @@ "Failed to verify email address: make sure you clicked the link in the email": "Methiant gwirio cyfeiriad e-bost: gwnewch yn siŵr eich bod wedi clicio'r ddolen yn yr e-bost", "Add Phone Number": "Ychwanegu Rhif Ffôn", "The platform you're on": "Y platfform rydych chi arno", - "The version of Riot.im": "Fersiwn Riot.im", + "The version of %(brand)s": "Fersiwn %(brand)s", "Whether or not you're logged in (we don't record your username)": "Os ydych wedi mewngofnodi ai peidio (nid ydym yn cofnodi'ch enw defnyddiwr)", "Your language of choice": "Eich iaith o ddewis", - "The version of Riot": "Fersiwn Riot" + "The version of %(brand)s": "Fersiwn %(brand)s" } diff --git a/src/i18n/strings/da.json b/src/i18n/strings/da.json index 2fc17fe709..9334a79210 100644 --- a/src/i18n/strings/da.json +++ b/src/i18n/strings/da.json @@ -136,8 +136,8 @@ "Failed to invite users to community": "Kunne ikke invitere brugere til fællesskab", "Failed to invite users to %(groupId)s": "Kunne ikke invitere brugere til %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "Kunne ikke tilføje de følgende rum til %(groupId)s:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot har ikke tilladelse til at sende dig notifikationer - tjek venligst dine browserindstillinger", - "Riot was not given permission to send notifications - please try again": "Riot fik ikke tilladelse til at sende notifikationer - Vær sød at prøve igen", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s har ikke tilladelse til at sende dig notifikationer - tjek venligst dine browserindstillinger", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s fik ikke tilladelse til at sende notifikationer - Vær sød at prøve igen", "Unable to enable Notifications": "Kunne ikke slå Notifikationer til", "This email address was not found": "Denne emailadresse blev ikke fundet", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Din emailadresse lader ikke til at være tilknyttet et Matrix ID på denne Homeserver.", @@ -198,7 +198,7 @@ "Submit debug logs": "Indsend debug-logfiler", "Online": "Online", "Fetching third party location failed": "Hentning af tredjeparts placering mislykkedes", - "A new version of Riot is available.": "En ny version a Riot er tilgængelig.", + "A new version of %(brand)s is available.": "En ny version a %(brand)s er tilgængelig.", "Send Account Data": "Send Konto Data", "All notifications are currently disabled for all targets.": "Alle meddelelser er for øjeblikket deaktiveret for alle mål.", "Uploading report": "Uploader rapport", @@ -257,7 +257,7 @@ "Enter keywords separated by a comma:": "Indtast søgeord adskilt af et komma:", "Forward Message": "Videresend Besked", "Remove %(name)s from the directory?": "Fjern %(name)s fra kataloget?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot bruger mange avancerede browser funktioner, hvoraf nogle af dem ikke er tilgængelige eller er eksperimentelle i din browser.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s bruger mange avancerede browser funktioner, hvoraf nogle af dem ikke er tilgængelige eller er eksperimentelle i din browser.", "Event sent!": "Begivenhed sendt!", "Explore Account Data": "Udforsk Konto Data", "Saturday": "Lørdag", @@ -297,8 +297,8 @@ "Show message in desktop notification": "Vis besked i skrivebordsnotifikation", "Unhide Preview": "Vis Forhåndsvisning", "Unable to join network": "Kan ikke forbinde til netværket", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du har muligvis konfigureret dem i en anden klient end Riot. Du kan ikke tune dem i Riot, men de gælder stadig", - "Sorry, your browser is not able to run Riot.": "Beklager, din browser kan ikke køre Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Du har muligvis konfigureret dem i en anden klient end %(brand)s. Du kan ikke tune dem i %(brand)s, men de gælder stadig", + "Sorry, your browser is not able to run %(brand)s.": "Beklager, din browser kan ikke køre %(brand)s.", "Quote": "Citat", "Messages in group chats": "Beskeder i gruppechats", "Yesterday": "I går", @@ -308,7 +308,7 @@ "Unable to fetch notification target list": "Kan ikke hente meddelelsesmålliste", "Set Password": "Indstil Password", "Resend": "Send igen", - "Riot does not know how to join a room on this network": "Riot ved ikke, hvordan man kan deltage i et rum på dette netværk", + "%(brand)s does not know how to join a room on this network": "%(brand)s ved ikke, hvordan man kan deltage i et rum på dette netværk", "Mentions only": "Kun nævninger", "Failed to remove tag %(tagName)s from room": "Kunne ikke fjerne tag(s): %(tagName)s fra rummet", "Wednesday": "Onsdag", @@ -331,7 +331,7 @@ "View Community": "Vis community", "Preparing to send logs": "Forbereder afsendelse af logfiler", "The platform you're on": "Den platform du bruger", - "The version of Riot.im": "Versionen af Riot.im", + "The version of %(brand)s": "Versionen af %(brand)s", "Whether or not you're logged in (we don't record your username)": "Om du er logget på eller ej (vi logger ikke dit brugernavn)", "Your language of choice": "Dit foretrukne sprog", "Which officially provided instance you are using, if any": "Hvilken officiel tilgængelig instans du bruger, hvis nogen", @@ -345,7 +345,7 @@ "Your User Agent": "Din user agent", "Your device resolution": "Din skærmopløsning", "Analytics": "Analyse data", - "The information being sent to us to help make Riot.im better includes:": "Information som sendes til os for at kunne forbedre Riot.im inkluderer:", + "The information being sent to us to help make %(brand)s better includes:": "Information som sendes til os for at kunne forbedre %(brand)s inkluderer:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Hvis denne side indeholder identificerbar information, så som rum, bruger eller gruppe ID, bliver disse fjernet før dataene sendes til serveren.", "Call Failed": "Opkald mislykkedes", "Review Devices": "Gennemse enheder", @@ -448,8 +448,8 @@ "%(names)s and %(lastPerson)s are typing …": "%(names)s og %(lastPerson)s skriver …", "Cannot reach homeserver": "Homeserveren kan ikke kontaktes", "Ensure you have a stable internet connection, or get in touch with the server admin": "Vær sikker at du har en stabil internetforbindelse, eller kontakt serveradministratoren", - "Your Riot is misconfigured": "Din Riot er konfigureret forkert", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Bed din Riot administrator om at kontrollere din konfiguration for forkerte eller dobbelte poster.", + "Your %(brand)s is misconfigured": "Din %(brand)s er konfigureret forkert", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Bed din %(brand)s administrator om at kontrollere din konfiguration for forkerte eller dobbelte poster.", "Cannot reach identity server": "Identitetsserveren kan ikke kontaktes", "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.": "Du kan registrere dig, men nogle funktioner vil ikke være tilgængelige inden identitetsserveren er online igen. Hvis du bliver ved med at se denne advarsel, tjek din konfiguration eller kontakt en serveradministrator.", "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.": "Du kan nulstille dit kodeord, men nogle funktioner vil ikke være tilgængelige inden identitetsserveren er online igen. Hvis du bliver ved med at se denne advarsel, tjek din konfiguration eller kontakt en serveradministrator.", @@ -465,7 +465,7 @@ "%(items)s and %(count)s others|one": "%(items)s og en anden", "%(items)s and %(lastItem)s": "%(items)s og %(lastItem)s", "Your browser does not support the required cryptography extensions": "Din browser understøtter ikke de påkrævede kryptografiske udvidelser", - "Not a valid Riot keyfile": "Ikke en gyldig Riot nøglefil", + "Not a valid %(brand)s keyfile": "Ikke en gyldig %(brand)s nøglefil", "Authentication check failed: incorrect password?": "Godkendelse mislykkedes: forkert kodeord?", "Unrecognised address": "Ukendt adresse", "You do not have permission to invite people to this room.": "Du har ikke tilladelse til at invitere personer til dette rum.", @@ -517,8 +517,8 @@ "Enable Emoji suggestions while typing": "Aktiver emoji forslag under indtastning", "Use compact timeline layout": "Brug kompakt tidslinje", "Show a placeholder for removed messages": "Vis en pladsholder for fjernede beskeder", - "The version of Riot": "Riot versionen", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Hvorvidt du benytter Riot på en enhed, hvor touch er den primære input-grænseflade", + "The version of %(brand)s": "%(brand)s versionen", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Hvorvidt du benytter %(brand)s på en enhed, hvor touch er den primære input-grænseflade", "Your user agent": "Din user agent", "Use Single Sign On to continue": "Brug Single Sign On til at fortsætte", "Confirm adding this email address by using Single Sign On to prove your identity.": "Bekræft tilføjelsen af denne email adresse ved at bruge Single Sign On til at bevise din identitet.", @@ -529,8 +529,8 @@ "Confirm adding this phone number by using Single Sign On to prove your identity.": "Bekræft tilføjelsen af dette telefonnummer ved at bruge Single Sign On til at bevise din identitet.", "Confirm adding phone number": "Bekræft tilføjelse af telefonnummer", "Click the button below to confirm adding this phone number.": "Klik på knappen herunder for at bekræfte tilføjelsen af dette telefonnummer.", - "Whether you're using Riot as an installed Progressive Web App": "Om du anvender Riot som en installeret Progressiv Web App", - "The information being sent to us to help make Riot better includes:": "Informationen der sendes til os for at hjælpe os med at gøre Riot bedre inkluderer:", + "Whether you're using %(brand)s as an installed Progressive Web App": "Om du anvender %(brand)s som en installeret Progressiv Web App", + "The information being sent to us to help make %(brand)s better includes:": "Informationen der sendes til os for at hjælpe os med at gøre %(brand)s bedre inkluderer:", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Der er ukendte sessions i dette rum: Hvis du fortsætter uden at verificere dem, vil det være muligt for andre at smuglytte til dit opkald.", "Review Sessions": "Overse sessions", "If you cancel now, you won't complete verifying the other user.": "Hvis du annullerer du, vil du ikke have færdiggjort verifikationen af den anden bruger.", diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 4b305cd5b6..4806fc10f8 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -121,8 +121,8 @@ "Existing Call": "Bereits bestehender Anruf", "Failed to verify email address: make sure you clicked the link in the email": "Verifizierung der E-Mail-Adresse fehlgeschlagen: Bitte stelle sicher, dass du den Link in der E-Mail angeklickt hast", "Failure to create room": "Raumerstellung fehlgeschlagen", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot hat keine Berechtigung, um Benachrichtigungen zu senden - bitte Browser-Einstellungen überprüfen", - "Riot was not given permission to send notifications - please try again": "Riot hat keine Berechtigung für das Senden von Benachrichtigungen erhalten - bitte erneut versuchen", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s hat keine Berechtigung, um Benachrichtigungen zu senden - bitte Browser-Einstellungen überprüfen", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s hat keine Berechtigung für das Senden von Benachrichtigungen erhalten - bitte erneut versuchen", "This email address is already in use": "Diese E-Mail-Adresse wird bereits verwendet", "This email address was not found": "Diese E-Mail-Adresse konnte nicht gefunden werden", "The remote side failed to pick up": "Die Gegenstelle konnte nicht abheben", @@ -273,7 +273,7 @@ "New passwords don't match": "Die neuen Passwörter stimmen nicht überein", "olm version:": "Version von olm:", "Passwords can't be empty": "Passwortfelder dürfen nicht leer sein", - "riot-web version:": "Version von riot-web:", + "%(brand)s version:": "Version von %(brand)s:", "Scroll to bottom of page": "Zum Seitenende springen", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Zeitstempel im 12-Stunden-Format anzeigen (z. B. 2:30pm)", "Email address": "E-Mail-Adresse", @@ -320,7 +320,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.": "Dieser Prozess erlaubt es dir, die Schlüssel für die in verschlüsselten Räumen empfangenen Nachrichten in eine lokale Datei zu exportieren. In Zukunft wird es möglich sein, diese Datei in einen anderen Matrix-Client zu importieren, sodass dieser Client diese Nachrichten ebenfalls entschlüsseln kann.", "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.": "Mit der exportierten Datei kann jeder, der diese Datei lesen kann, jede verschlüsselte Nachricht entschlüsseln, die für dich lesbar ist. Du solltest die Datei also unbedingt sicher verwahren. Um den Vorgang sicherer zu gestalten, solltest du unten eine Passphrase eingeben, die dazu verwendet wird, die exportierten Daten zu verschlüsseln. Anschließend wird es nur möglich sein, die Daten zu importieren, wenn dieselbe Passphrase verwendet wird.", "Analytics": "Anonymisierte Analysedaten", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot sammelt anonymisierte Analysedaten, um die Anwendung kontinuierlich verbessern zu können.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s sammelt anonymisierte Analysedaten, um die Anwendung kontinuierlich verbessern zu können.", "Add an Integration": "Eine Integration hinzufügen", "Removed or unknown message type": "Gelöschte Nachricht oder unbekannter Nachrichten-Typ", "URL Previews": "URL-Vorschau", @@ -328,7 +328,7 @@ "Online": "Online", " (unsupported)": " (nicht unterstützt)", "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.": "Dieser Prozess erlaubt es dir, die zuvor von einem anderen Matrix-Client exportierten Verschlüsselungs-Schlüssel zu importieren. Danach kannst du alle Nachrichten entschlüsseln, die auch bereits auf dem anderen Client entschlüsselt werden konnten.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Wenn du zuvor eine aktuellere Version von Riot verwendet hast, ist deine Sitzung eventuell inkompatibel mit dieser Version. Bitte schließe dieses Fenster und kehre zur aktuelleren Version zurück.", + "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.": "Wenn du zuvor eine aktuellere Version von %(brand)s verwendet hast, ist deine Sitzung eventuell inkompatibel mit dieser Version. Bitte schließe dieses Fenster und kehre zur aktuelleren Version zurück.", "Blacklist": "Blockieren", "Unblacklist": "Entblockieren", "Unverify": "Verifizierung widerrufen", @@ -344,7 +344,7 @@ "No Webcams detected": "Keine Webcam erkannt", "No Microphones detected": "Keine Mikrofone erkannt", "No media permissions": "Keine Medienberechtigungen", - "You may need to manually permit Riot to access your microphone/webcam": "Gegebenenfalls kann es notwendig sein, dass du Riot manuell den Zugriff auf dein Mikrofon bzw. deine Webcam gewähren musst", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Gegebenenfalls kann es notwendig sein, dass du %(brand)s manuell den Zugriff auf dein Mikrofon bzw. deine Webcam gewähren musst", "Default Device": "Standard-Gerät", "Microphone": "Mikrofon", "Camera": "Kamera", @@ -423,7 +423,7 @@ "(no answer)": "(keine Antwort)", "(unknown failure: %(reason)s)": "(Unbekannter Fehler: %(reason)s)", "Your browser does not support the required cryptography extensions": "Dein Browser unterstützt die benötigten Verschlüsselungs-Erweiterungen nicht", - "Not a valid Riot keyfile": "Keine gültige Riot-Schlüsseldatei", + "Not a valid %(brand)s keyfile": "Keine gültige %(brand)s-Schlüsseldatei", "Authentication check failed: incorrect password?": "Authentifizierung fehlgeschlagen: Falsches Passwort?", "Do you want to set an email address?": "Möchtest du eine E-Mail-Adresse setzen?", "This will allow you to reset your password and receive notifications.": "Dies ermöglicht es dir, dein Passwort zurückzusetzen und Benachrichtigungen zu empfangen.", @@ -670,7 +670,7 @@ "expand": "Erweitern", "Old cryptography data detected": "Alte Kryptografiedaten erkannt", "Warning": "Warnung", - "Data from an older version of Riot 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.": "Es wurden Daten von einer älteren Version von Riot entdeckt. Dies wird zu Fehlern in der Ende-zu-Ende-Verschlüsselung der älteren Version geführt haben. Ende-zu-Ende verschlüsselte Nachrichten, die ausgetauscht wruden, während die ältere Version genutzt wurde, werden in dieser Version nicht entschlüsselbar sein. Es kann auch zu Fehlern mit Nachrichten führen, die mit dieser Version versendet werden. Wenn du Probleme feststellst, melde dich ab und wieder an. Um die Historie zu behalten, ex- und reimportiere deine Schlüssel.", + "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.": "Es wurden Daten von einer älteren Version von %(brand)s entdeckt. Dies wird zu Fehlern in der Ende-zu-Ende-Verschlüsselung der älteren Version geführt haben. Ende-zu-Ende verschlüsselte Nachrichten, die ausgetauscht wruden, während die ältere Version genutzt wurde, werden in dieser Version nicht entschlüsselbar sein. Es kann auch zu Fehlern mit Nachrichten führen, die mit dieser Version versendet werden. Wenn du Probleme feststellst, melde dich ab und wieder an. Um die Historie zu behalten, ex- und reimportiere deine Schlüssel.", "Send an encrypted reply…": "Verschlüsselte Antwort senden…", "Send a reply (unencrypted)…": "Unverschlüsselte Antwort senden…", "Send an encrypted message…": "Verschlüsselte Nachricht senden…", @@ -681,9 +681,9 @@ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Alle erneut senden oder alle abbrechen. Du kannst auch einzelne Nachrichten erneut senden oder abbrechen.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Nachricht jetzt erneut senden oder senden abbrechen now.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privatsphäre ist uns wichtig, deshalb sammeln wir keine persönlichen oder identifizierbaren Daten für unsere Analysen.", - "The information being sent to us to help make Riot.im better includes:": "Die Informationen, die an uns gesendet werden um Riot.im zu verbessern enthalten:", + "The information being sent to us to help make %(brand)s better includes:": "Die Informationen, die an uns gesendet werden um %(brand)s zu verbessern enthalten:", "The platform you're on": "Benutzte Plattform", - "The version of Riot.im": "Riot.im Version", + "The version of %(brand)s": "%(brand)s Version", "Your language of choice": "Deine ausgewählte Sprache", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Ob du den Richtext-Modus des Editors benutzt oder nicht", "Your homeserver's URL": "Die URL deines Homeservers", @@ -700,7 +700,7 @@ "Failed to set direct chat tag": "Fehler beim Setzen der Direkt-Chat-Markierung", "Failed to remove tag %(tagName)s from room": "Entfernen der Raum-Kennzeichnung %(tagName)s fehlgeschlagen", "Failed to add tag %(tagName)s to room": "Fehler beim Hinzufügen des \"%(tagName)s\"-Tags an dem Raum", - "Did you know: you can use communities to filter your Riot.im experience!": "Wusstest du: Du kannst Communities nutzen um deine Riot.im-Erfahrung zu filtern!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Wusstest du: Du kannst Communities nutzen um deine %(brand)s-Erfahrung zu filtern!", "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.": "Um einen Filter zu setzen, ziehe ein Community-Bild auf das Filter-Panel ganz links. Du kannst jederzeit auf einen Avatar im Filter-Panel klicken um nur die Räume und Personen aus der Community zu sehen.", "Clear filter": "Filter zurücksetzen", "Key request sent.": "Schlüssel-Anfragen gesendet.", @@ -721,7 +721,7 @@ "Everyone": "Jeder", "Stickerpack": "Stickerpack", "Fetching third party location failed": "Das Abrufen des Drittanbieterstandorts ist fehlgeschlagen", - "A new version of Riot is available.": "Eine neue Version von Riot ist verfügbar.", + "A new version of %(brand)s is available.": "Eine neue Version von %(brand)s ist verfügbar.", "Send Account Data": "Benutzerkonto-Daten senden", "All notifications are currently disabled for all targets.": "Aktuell sind alle Benachrichtigungen für alle Ziele deaktiviert.", "Uploading report": "Lade Bericht hoch", @@ -776,7 +776,7 @@ "Forward Message": "Nachricht weiterleiten", "You have successfully set a password and an email address!": "Du hast erfolgreich ein Passwort und eine E-Mail-Adresse gesetzt!", "Remove %(name)s from the directory?": "Soll der Raum %(name)s aus dem Verzeichnis entfernt werden?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot nutzt zahlreiche fortgeschrittene Browser-Funktionen, die teilweise in deinem aktuell verwendeten Browser noch nicht verfügbar sind oder sich noch im experimentellen Status befinden.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s nutzt zahlreiche fortgeschrittene Browser-Funktionen, die teilweise in deinem aktuell verwendeten Browser noch nicht verfügbar sind oder sich noch im experimentellen Status befinden.", "Developer Tools": "Entwicklerwerkzeuge", "Preparing to send logs": "Senden von Logs wird vorbereitet", "Remember, you can always set an email address in user settings if you change your mind.": "Vergiss nicht, dass du in den Benutzereinstellungen jederzeit eine E-Mail-Adresse setzen kannst, wenn du deine Meinung änderst.", @@ -822,8 +822,8 @@ "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.": "Fehlerberichte enthalten Anwendungsdaten wie deinen Nutzernamen, Raum- und Gruppen-ID's und Aliase die du besucht hast sowie Nutzernamen anderer Nutzer. Sie enthalten keine Nachrichten.", "Unhide Preview": "Vorschau wieder anzeigen", "Unable to join network": "Es ist nicht möglich, dem Netzwerk beizutreten", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du hast sie eventuell auf einem anderen Matrix-Client und nicht in Riot konfiguriert. Sie können in Riot nicht verändert werden, gelten aber trotzdem", - "Sorry, your browser is not able to run Riot.": "Es tut uns leid, aber dein Browser kann Riot nicht ausführen.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Du hast sie eventuell auf einem anderen Matrix-Client und nicht in %(brand)s konfiguriert. Sie können in %(brand)s nicht verändert werden, gelten aber trotzdem", + "Sorry, your browser is not able to run %(brand)s.": "Es tut uns leid, aber dein Browser kann %(brand)s nicht ausführen.", "Messages in group chats": "Nachrichten in Gruppen-Chats", "Yesterday": "Gestern", "Error encountered (%(errorDetail)s).": "Es ist ein Fehler aufgetreten (%(errorDetail)s).", @@ -831,7 +831,7 @@ "Unable to fetch notification target list": "Liste der Benachrichtigungsempfänger konnte nicht abgerufen werden", "Set Password": "Passwort einrichten", "Off": "Aus", - "Riot does not know how to join a room on this network": "Riot weiß nicht, wie es einem Raum auf diesem Netzwerk beitreten soll", + "%(brand)s does not know how to join a room on this network": "%(brand)s weiß nicht, wie es einem Raum auf diesem Netzwerk beitreten soll", "Mentions only": "Nur, wenn du erwähnt wirst", "You can now return to your account after signing out, and sign in on other devices.": "Du kannst nun zu deinem Benutzerkonto zurückkehren, nachdem du dich abgemeldet hast. Anschließend kannst du dich an anderen Geräten anmelden.", "Enable email notifications": "E-Mail-Benachrichtigungen aktivieren", @@ -866,8 +866,8 @@ "Send analytics data": "Analysedaten senden", "e.g. %(exampleValue)s": "z.B. %(exampleValue)s", "Muted Users": "Stummgeschaltete Benutzer", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Bitte hilf uns Riot.im zu verbessern, in dem du anonyme Nutzungsdaten schickst. Dies wird ein Cookie benutzen (bitte beachte auch unsere Cookie-Richtlinie).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Bitte hilf uns Riot.im zu verbessern, in dem du anonyme Nutzungsdaten schickst. Dies wird ein Cookie benutzen.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Bitte hilf uns %(brand)s zu verbessern, in dem du anonyme Nutzungsdaten schickst. Dies wird ein Cookie benutzen (bitte beachte auch unsere Cookie-Richtlinie).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Bitte hilf uns %(brand)s zu verbessern, in dem du anonyme Nutzungsdaten schickst. Dies wird ein Cookie benutzen.", "Yes, I want to help!": "Ja, ich möchte helfen!", "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.": "Dies wird deinen Account permanent unbenutzbar machen. Du wirst nicht in der Lage sein, dich anzumelden und keiner wird dieselbe Benutzer-ID erneut registrieren können. Alle Räume, in denen der Account ist, werden verlassen und deine Account-Daten werden vom Identitätsserver gelöscht. Diese Aktion ist unumkehrbar.", "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.": "Standardmäßig werden die von dir gesendeten Nachrichten beim Deaktiveren nicht gelöscht. Wenn du dies von uns möchtest, aktivere das Auswalfeld unten.", @@ -945,10 +945,10 @@ "%(senderName)s removed the main address for this room.": "%(senderName)s entfernte die Hauptadresse von diesem Raum.", "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s fügte %(addedAddresses)s hinzu und entfernte %(removedAddresses)s als Adressen von diesem Raum.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Bevor du Log-Dateien übermittelst, musst du ein GitHub-Issue erstellen um dein Problem zu beschreiben.", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot benutzt nun 3-5-mal weniger Arbeitsspeicher, indem Informationen über andere Nutzer erst bei Bedarf geladen werden. Bitte warte, während die Daten erneut mit dem Server abgeglichen werden!", - "Updating Riot": "Aktualisiere Riot", - "You've previously used Riot 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, Riot needs to resync your account.": "Du hast zuvor Riot auf %(host)s ohne das verzögerte Laden von Mitgliedern genutzt. In dieser Version war das verzögerte Laden deaktiviert. Da die lokal zwischengespeicherten Daten zwischen diesen Einstellungen nicht kompatibel sind, muss Riot dein Konto neu synchronisieren.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Wenn Riot mit der alten Version in einem anderen Tab geöffnet ist, schließe dies bitte, da das parallele Nutzen von Riot auf demselben Host mit aktivierten und deaktivierten verzögertem Laden, Probleme verursachen wird.", + "%(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!": "%(brand)s benutzt nun 3-5-mal weniger Arbeitsspeicher, indem Informationen über andere Nutzer erst bei Bedarf geladen werden. Bitte warte, während die Daten erneut mit dem Server abgeglichen werden!", + "Updating %(brand)s": "Aktualisiere %(brand)s", + "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.": "Du hast zuvor %(brand)s auf %(host)s ohne das verzögerte Laden von Mitgliedern genutzt. In dieser Version war das verzögerte Laden deaktiviert. Da die lokal zwischengespeicherten Daten zwischen diesen Einstellungen nicht kompatibel sind, muss %(brand)s dein Konto neu synchronisieren.", + "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.": "Wenn %(brand)s mit der alten Version in einem anderen Tab geöffnet ist, schließe dies bitte, da das parallele Nutzen von %(brand)s auf demselben Host mit aktivierten und deaktivierten verzögertem Laden, Probleme verursachen wird.", "Incompatible local cache": "Inkompatibler lokaler Zwischenspeicher", "Clear cache and resync": "Zwischenspeicher löschen und erneut synchronisieren", "Please review and accept the policies of this homeserver:": "Bitte sieh dir alle Bedingungen dieses Heimservers an und akzeptiere sie:", @@ -960,7 +960,7 @@ "Delete Backup": "Sicherung löschen", "Backup version: ": "Sicherungsversion: ", "Algorithm: ": "Algorithmus: ", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Um zu vermeiden, dass Ihr Chat-Verlauf verloren geht, müssen Sie Ihre Raum-Schlüssel exportieren, bevor Sie sich abmelden. Dazu müssen Sie auf die neuere Version von Riot zurückgehen", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Um zu vermeiden, dass Ihr Chat-Verlauf verloren geht, müssen Sie Ihre Raum-Schlüssel exportieren, bevor Sie sich abmelden. Dazu müssen Sie auf die neuere Version von %(brand)s zurückgehen", "Incompatible Database": "Inkompatible Datenbanken", "Continue With Encryption Disabled": "Mit deaktivierter Verschlüsselung fortfahren", "Enter a passphrase...": "Passphrase eingeben...", @@ -1036,7 +1036,7 @@ "Restored %(sessionCount)s session keys": "%(sessionCount)s Sitzungsschlüssel wiederhergestellt", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Greifen Sie auf Ihre sichere Nachrichtenhistorie zu und richten Sie einen sicheren Nachrichtenversand ein, indem Sie Ihre Wiederherstellungspassphrase eingeben.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Wenn du deinen Wiederherstellungspassphrase vergessen hast, kannst du deinen Wiederherstellungsschlüssel benutzen oder neue Wiederherstellungsoptionen einrichten", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Du hast kürzlich eine neuere Version von Riot auf %(host)s verwendet. Um diese Version erneut mit Ende-zu-Ende-Verschlüsselung zu nutzen, musst du dich ab- und wieder anmelden. ", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Du hast kürzlich eine neuere Version von %(brand)s auf %(host)s verwendet. Um diese Version erneut mit Ende-zu-Ende-Verschlüsselung zu nutzen, musst du dich ab- und wieder anmelden. ", "Access your secure message history and set up secure messaging by entering your recovery key.": "Greifen Sie auf Ihren sicheren Nachrichtenverlauf zu und richten Sie durch Eingabe Ihres Wiederherstellungsschlüssels einen sicheren Nachrichtenversand ein.", "Set a new status...": "Setze einen neuen Status...", "Clear status": "Status löschen", @@ -1112,9 +1112,9 @@ "Language and region": "Sprache und Region", "Theme": "Design", "Account management": "Benutzerkontenverwaltung", - "For help with using Riot, click here.": "Um Hilfe zur Benutzung von Riot zu erhalten, klicke hier.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Um Hilfe zur Benutzung von Riot zu erhalten, klicke hier oder beginne einen Chat mit unserem Bot, indem du den unteren Button klickst.", - "Chat with Riot Bot": "Chatte mit dem Riot Bot", + "For help with using %(brand)s, click here.": "Um Hilfe zur Benutzung von %(brand)s zu erhalten, klicke hier.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Um Hilfe zur Benutzung von %(brand)s zu erhalten, klicke hier oder beginne einen Chat mit unserem Bot, indem du den unteren Button klickst.", + "Chat with %(brand)s Bot": "Chatte mit dem %(brand)s Bot", "Help & About": "Hilfe & Über", "Bug reporting": "Fehler melden", "FAQ": "Häufige Fragen", @@ -1353,7 +1353,7 @@ "Could not load user profile": "Konnte Nutzerprofil nicht laden", "Your Matrix account on %(serverName)s": "Dein Matrixkonto auf %(serverName)s", "Name or Matrix ID": "Name oder Matrix ID", - "Your Riot is misconfigured": "Dein Riot ist falsch konfiguriert", + "Your %(brand)s is misconfigured": "Dein %(brand)s ist falsch konfiguriert", "You cannot modify widgets in this room.": "Du kannst in diesem Raum keine Widgets verändern.", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Ob du die \"Breadcrumbs\"-Funktion nutzt oder nicht (Avatare oberhalb der Raumliste)", "A conference call could not be started because the integrations server is not available": "Ein Konferenzanruf konnte nicht gestartet werden, da der Integrationsserver nicht verfügbar ist", @@ -1372,7 +1372,7 @@ "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s hat die Einladung zum Raumbeitritt für %(targetDisplayName)s zurückgezogen.", "Cannot reach homeserver": "Der Heimserver ist nicht erreichbar", "Ensure you have a stable internet connection, or get in touch with the server admin": "Stelle sicher, dass du eine stabile Internetverbindung hast oder wende dich an deinen Server-Administrator", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Wende dich an deinen Riot Admin um deine Konfiguration auf ungültige oder doppelte Einträge zu überprüfen.", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Wende dich an deinen %(brand)s Admin um deine Konfiguration auf ungültige oder doppelte Einträge zu überprüfen.", "Unexpected error resolving identity server configuration": "Ein unerwarteter Fehler ist beim Laden der Identitätsserver-Konfiguration aufgetreten", "Cannot reach identity server": "Der Identitätsserver ist nicht erreichbar", "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.": "Du kannst dich registrieren, aber manche Funktionen werden nicht verfügbar sein bis der Identitätsserver wieder online ist. Wenn diese Warnmeldung weiterhin angezeigt wird, überprüfe deine Konfiguration oder kontaktiere deinen Server-Administrator.", @@ -1543,11 +1543,11 @@ "View rules": "Regeln betrachten", "You are currently subscribed to:": "Du abonnierst momentan:", "⚠ These settings are meant for advanced users.": "⚠ Diese Einstellungen sind für fortgeschrittene Nutzer gedacht.", - "The version of Riot": "Die Riot-Version", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Ob du Riot auf einem Gerät verwendest, bei dem Berührung der primäre Eingabemechanismus ist", - "Whether you're using Riot as an installed Progressive Web App": "Ob Sie Riot als installierte progressive Web-App verwenden", + "The version of %(brand)s": "Die %(brand)s-Version", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Ob du %(brand)s auf einem Gerät verwendest, bei dem Berührung der primäre Eingabemechanismus ist", + "Whether you're using %(brand)s as an installed Progressive Web App": "Ob Sie %(brand)s als installierte progressive Web-App verwenden", "Your user agent": "Dein User-Agent", - "The information being sent to us to help make Riot better includes:": "Zu den Informationen, die uns zugesandt werden, um zu helfen, Riot besser zu machen, gehören:", + "The information being sent to us to help make %(brand)s better includes:": "Zu den Informationen, die uns zugesandt werden, um zu helfen, %(brand)s besser zu machen, gehören:", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Es sind unbekannte Sitzungen in diesem Raum: Wenn du ohne Verifizierung fortfährst, wird es für jemanden möglich sein, deinen Anruf zu belauschen.", "If you cancel now, you won't complete verifying the other user.": "Wenn Sie jetzt abbrechen, werden Sie die Verifizierung des anderen Nutzers nicht beenden können.", "If you cancel now, you won't complete verifying your other session.": "Wenn Sie jetzt abbrechen, werden Sie die Verifizierung der anderen Sitzung nicht beenden können.", @@ -1866,7 +1866,7 @@ "Error adding ignored user/server": "Fehler beim Hinzufügen eines ignorierten Nutzers/Servers", "None": "Keine", "Ban list rules - %(roomName)s": "Verbotslistenregeln - %(roomName)s", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Füge hier Benutzer!nnen und Server hinzu, die du ignorieren willst. Verwende Sternchen, damit Riot mit beliebigen Zeichen übereinstimmt. Bspw. würde @bot: * alle Benutzer!nnen ignorieren, die auf einem Server den Namen 'bot' haben.", + "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.": "Füge hier Benutzer!nnen und Server hinzu, die du ignorieren willst. Verwende Sternchen, damit %(brand)s mit beliebigen Zeichen übereinstimmt. Bspw. würde @bot: * alle Benutzer!nnen ignorieren, die auf einem Server den Namen 'bot' haben.", "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.": "Ignorieren von Personen erfolgt über Sperrlisten. Wenn eine Sperrliste abonniert wird, werden die von dieser Liste blockierten Benutzer!nnen/Server ausgeblendet.", "Personal ban list": "Persönliche Sperrliste", "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.": "Deine persönliche Sperrliste enthält alle Benutzer!nnen/Server, von denen du persönlich keine Nachrichten sehen willst. Nachdem du den ersten Benutzer/Server ignoriert hast, wird in der Raumliste \"Meine Sperrliste\" angezeigt - bleibe in diesem Raum, um die Sperrliste aufrecht zu halten.", @@ -1926,8 +1926,8 @@ "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Sitzungen eines Benutzers einzeln verifizieren. Geräten, die ein Benutzer als vertrauenswürdig markiert hat, wird nicht automatisch vertraut (cross-signing).", "Securely cache encrypted messages locally for them to appear in search results, using ": "Der Zwischenspeicher für die lokale Suche in verschlüsselten Nachrichten benötigt ", " to store messages from ": " um Nachrichten aus ", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot benötigt weitere Komponenten um verschlüsselte Nachrichten lokal zu durchsuchen. Wenn du diese Funktion testen möchtest kannst du dir deine eigene Version von Riot Desktop mit der integrierten Suchfunktion bauen.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot kann verschlüsselte Nachrichten nicht lokal durchsuchen während es im Browser läuft. Verwende Riot Desktop damit verschlüsselte Nachrichten mit der Suchfunktion gefunden werden.", + "%(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 benötigt weitere Komponenten um verschlüsselte Nachrichten lokal zu durchsuchen. Wenn du diese Funktion testen möchtest kannst du dir deine eigene Version von %(brand)s Desktop mit der integrierten Suchfunktion bauen.", + "%(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 kann verschlüsselte Nachrichten nicht lokal durchsuchen während es im Browser läuft. Verwende %(brand)s Desktop damit verschlüsselte Nachrichten mit der Suchfunktion gefunden werden.", "Backup has a valid signature from this user": "Die Sicherung hat eine gültige Signatur dieses Benutzers", "Backup has a invalid signature from this user": "Die Sicherung hat eine ungültige Signatur dieses Benutzers", "Backup has a valid signature from verified session ": "Die Sicherung hat eine gültige Signatur von einer verifizierten Sitzung ", @@ -1981,10 +1981,10 @@ "Try to join anyway": "Versuche trotzdem beizutreten", "You can still join it because this is a public room.": "Du kannst trotzdem beitreten da dies ein öffentlicher Raum ist.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Diese Einladung zu %(roomName)s wurde an die Adresse %(email)s gesendet, die nicht zu deinem Konto gehört", - "Link this email with your account in Settings to receive invites directly in Riot.": "Verbinde diese E-Mail-Adresse in den Einstellungen mit deinem Konto um die Einladungen direkt in Riot zu erhalten.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Verbinde diese E-Mail-Adresse in den Einstellungen mit deinem Konto um die Einladungen direkt in %(brand)s zu erhalten.", "This invite to %(roomName)s was sent to %(email)s": "Diese Einladung zu %(roomName)s wurde an %(email)s gesendet", - "Use an identity server in Settings to receive invites directly in Riot.": "Verknüpfe einen Identitätsserver in den Einstellungen um die Einladungen direkt in Riot zu erhalten.", - "Share this email in Settings to receive invites directly in Riot.": "Teile diese E-Mail-Adresse in den Einstellungen um Einladungen direkt in Riot zu erhalten.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Verknüpfe einen Identitätsserver in den Einstellungen um die Einladungen direkt in %(brand)s zu erhalten.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Teile diese E-Mail-Adresse in den Einstellungen um Einladungen direkt in %(brand)s zu erhalten.", "%(roomName)s can't be previewed. Do you want to join it?": "Für %(roomName)s kann keine Vorschau erzeugt werden. Möchtest du den Raum betreten?", "This room doesn't exist. Are you sure you're at the right place?": "Dieser Raum existiert nicht. Bist du sicher dass du hier richtig bist?", "Try again later, or ask a room admin to check if you have access.": "Versuche es später erneut oder bitte einen Raum-Administrator deine Zutrittsrechte zu überprüfen.", @@ -2030,7 +2030,7 @@ "Yours, or the other users’ session": "Deine Sitzung oder die des anderen Benutzers", "%(role)s in %(roomName)s": "%(role)s in %(roomName)s", "This client does not support end-to-end encryption.": "Diese Anwendung unterstützt keine Ende-zu-Ende-Verschlüsselung.", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Die Sitzung, die du verifizieren möchtest, unterstützt weder das Scannen eines QR Codes noch die Emoji Verifikation. Bitte versuche es mit einer anderen Anwendung.", + "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.": "Die Sitzung, die du verifizieren möchtest, unterstützt weder das Scannen eines QR Codes noch die Emoji Verifikation. Bitte versuche es mit einer anderen Anwendung.", "Verify by scanning": "Mit Scannen eines QR Codes verifizieren", "If you can't scan the code above, verify by comparing unique emoji.": "Wenn du den obenstehenden Code nicht scannen kannst versuche es mit der Emoji Verifikation.", "Verify all users in a room to ensure it's secure.": "Verifiziere alle Benutzer in einem Raum um die vollständige Sicherheit zu gewährleisten.", @@ -2078,7 +2078,7 @@ "Your avatar URL": "Deine Avatar URL", "Your user ID": "Deine Benutzer ID", "Your theme": "Dein Design", - "Riot URL": "Riot URL", + "%(brand)s URL": "%(brand)s URL", "Room ID": "Raum ID", "Widget ID": "Widget ID", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Wenn du dieses Widget verwendest können Daten zu %(widgetDomain)s und deinem Integrationsserver übertragen werden.", @@ -2168,7 +2168,7 @@ "Automatically invite users": "Benutzer automatisch einladen", "Upgrade private room": "Privaten Raum hochstufen", "Upgrade public room": "Öffentlichen Raum hochstufen", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Dies wirkt sich normalerweise nur darauf aus, wie der Raum auf dem Server verarbeitet wird. Wenn du Probleme mit deinem Riot hast, melde bitte einen Bug.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Dies wirkt sich normalerweise nur darauf aus, wie der Raum auf dem Server verarbeitet wird. Wenn du Probleme mit deinem %(brand)s hast, melde bitte einen Bug.", "You'll upgrade this room from to .": "Du wirst diesen Raum von zu aktualisieren.", "Missing session data": "Fehlende Sitzungsdaten", "Your browser likely removed this data when running low on disk space.": "Dein Browser hat diese Daten wahrscheinlich entfernt als der Festplattenspeicher knapp wurde.", @@ -2214,7 +2214,7 @@ "Create a Group Chat": "Erstelle einen Gruppenchat", "Use lowercase letters, numbers, dashes and underscores only": "Verwende nur Kleinbuchstaben, Zahlen, Bindestriche und Unterstriche", "Enter your custom identity server URL What does this mean?": "URL deines benutzerdefinierten Identitätsservers eingeben Was bedeutet das?", - "Riot failed to get the public room list.": "Riot konnte die Liste der öffentlichen Räume nicht laden.", + "%(brand)s failed to get the public room list.": "%(brand)s konnte die Liste der öffentlichen Räume nicht laden.", "Verify this login": "Diese Anmeldung verifizieren", "Syncing...": "Synchronisiere...", "Signing In...": "Melde an...", @@ -2254,12 +2254,12 @@ "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Wenn du diesen Benutzer verifizierst werden seine Sitzungen für dich und deine Sitzungen für ihn als vertrauenswürdig markiert.", "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.": "Verifiziere dieses Gerät, um es als vertrauenswürdig zu markieren. Das Vertrauen in dieses Gerät gibt dir und anderen Benutzern zusätzliche Sicherheit, wenn ihr Ende-zu-Ende verschlüsselte Nachrichten verwendet.", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Verifiziere dieses Gerät und es wird es als vertrauenswürdig markiert. Benutzer, die sich bei dir verifiziert haben, werden diesem Gerät auch vertrauen.", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Dein Riot erlaubt dir nicht, eine Integrationsverwaltung zu verwenden, um dies zu tun. Bitte kontaktiere einen Administrator.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Dein %(brand)s erlaubt dir nicht, eine Integrationsverwaltung zu verwenden, um dies zu tun. Bitte kontaktiere einen Administrator.", "We couldn't create your DM. Please check the users you want to invite and try again.": "Wir konnten deine Direktnachricht nicht erstellen. Bitte überprüfe den Benutzer, den du einladen möchtest, und versuche es erneut.", "We couldn't invite those users. Please check the users you want to invite and try again.": "Wir konnten diese Benutzer nicht einladen. Bitte überprüfe sie und versuche es erneut.", "Start a conversation with someone using their name, username (like ) or email address.": "Starte eine Unterhaltung mit jemandem indem du seinen Namen, Benutzernamen (z.B. ) oder E-Mail-Adresse eingibst.", "Invite someone using their name, username (like ), email address or share this room.": "Lade jemanden mit seinem Namen, Benutzernamen (z.B. ) oder E-Mail-Adresse ein oder teile diesen Raum.", - "Riot encountered an error during upload of:": "Es trat ein Fehler auf beim Hochladen von:", + "%(brand)s encountered an error during upload of:": "Es trat ein Fehler auf beim Hochladen von:", "Upload completed": "Hochladen abgeschlossen", "Cancelled signature upload": "Hochladen der Signatur abgebrochen", "Unable to upload": "Hochladen nicht möglich", @@ -2284,10 +2284,10 @@ "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Lege eine E-Mail für die Kontowiederherstellung fest. Verwende optional E-Mail oder Telefon, um von Anderen gefunden zu werden.", "Explore Public Rooms": "Erkunde öffentliche Räume", "If you've joined lots of rooms, this might take a while": "Du bist einer Menge Räumen beigetreten, das kann eine Weile dauern", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot konnte die Protokollliste nicht vom Heimserver abrufen. Der Heimserver ist möglicherweise zu alt, um Netzwerke von Drittanbietern zu unterstützen.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s konnte die Protokollliste nicht vom Heimserver abrufen. Der Heimserver ist möglicherweise zu alt, um Netzwerke von Drittanbietern zu unterstützen.", "No identity server is configured: add one in server settings to reset your password.": "Kein Identitätsserver konfiguriert: Füge einen in den Servereinstellungen hinzu, um dein Kennwort zurückzusetzen.", "Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).": "Dein neues Konto (%(newAccountId)s) ist registriert, aber du hast dich bereits in mit einem anderen Konto (%(loggedInUserId)s) angemeldet.", - "This requires the latest Riot on your other devices:": "Dies benötigt die neuste Version von Riot auf deinen anderen Geräten:", + "This requires the latest %(brand)s on your other devices:": "Dies benötigt die neuste Version von %(brand)s auf deinen anderen Geräten:", "Use Recovery Passphrase or Key": "Benutze deine Wiederherstellungspassphrase oder den Wiederherstellungsschlüssel", "Failed to re-authenticate due to a homeserver problem": "Erneute Authentifizierung aufgrund eines Problems im Heimserver fehlgeschlagen", "Failed to re-authenticate": "Erneute Authentifizierung fehlgeschlagen", @@ -2344,7 +2344,7 @@ "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Wenn du deine Wiederherstellungspassphrase vergessen hast kannst du deinen Wiederherstellungsschlüssel verwenden oder neue Wiederherstellungsoptionen anlegen.", "Self-verification request": "Selbstverifikationsanfrage", "or another cross-signing capable Matrix client": "oder einen anderen Matrix Client der Cross-signing fähig ist", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot verwendet einen sicheren Zwischenspeicher für verschlüsselte Nachrichten, damit sie in den Suchergebnissen angezeigt werden:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s verwendet einen sicheren Zwischenspeicher für verschlüsselte Nachrichten, damit sie in den Suchergebnissen angezeigt werden:", "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Erhalte Zugriff auf deine verschlüsselten Nachrichten und deine Cross-Signing Identität um andere Sitzungen zu verifizieren indem du deine Wiederherstellungspassphrase eingibst.", "Liberate your communication": "Liberate your communication", "Message downloading sleep time(ms)": "Wartezeit zwischen dem Herunterladen von Nachrichten (ms)", @@ -2393,8 +2393,8 @@ "Room name or address": "Raumname oder -adresse", "Joins room with given address": "Tritt dem Raum unter der angegebenen Adresse bei", "Unrecognised room address:": "Unbekannte Raumadresse:", - "Help us improve Riot": "Hilf uns Riot zu verbessern", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Hilf uns Riot zu verbessern, indem du anonyme Nutzungsdaten schickst. Dies wird ein Cookie verwenden.", + "Help us improve %(brand)s": "Hilf uns %(brand)s zu verbessern", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Hilf uns %(brand)s zu verbessern, indem du anonyme Nutzungsdaten schickst. Dies wird ein Cookie verwenden.", "I want to help": "Ich möchte helfen", "Your homeserver has exceeded its user limit.": "Dein Heimserver hat das Benutzerlimit erreicht.", "Your homeserver has exceeded one of its resource limits.": "Dein Heimserver hat eine seiner Ressourcengrenzen erreicht.", @@ -2403,8 +2403,8 @@ "Set password": "Setze Passwort", "To return to your account in future you need to set a password": "Um dein Konto zukünftig wieder verwenden zu können, setze ein Passwort", "Restart": "Neustarten", - "Upgrade your Riot": "Aktualisiere dein Riot", - "A new version of Riot is available!": "Eine neue Version von Riot ist verfügbar!", + "Upgrade your %(brand)s": "Aktualisiere dein %(brand)s", + "A new version of %(brand)s is available!": "Eine neue Version von %(brand)s ist verfügbar!", "New version available. Update now.": "Neue Version verfügbar. Jetzt aktualisieren.", "Please verify the room ID or address and try again.": "Bitte überprüfe die Raum-ID oder -adresse und versuche es erneut.", "To link to this room, please add an address.": "Um den Raum zu verlinken, füge bitte eine Adresse hinzu.", @@ -2426,7 +2426,7 @@ "People": "Personen", "There was an error removing that address. It may no longer exist or a temporary error occurred.": "Beim Entfernen dieser Adresse ist ein Fehler aufgetreten. Vielleicht existiert diese nicht mehr oder es kam zu einem temporären Fehler.", "Set a room address to easily share your room with other people.": "Vergebe eine Raum-Adresse, um diesen Raum auf einfache Weise mit anderen Personen teilen zu können.", - "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Du hast für diese Sitzung zuvor eine neuere Version von Riot verwendet. Um diese Version mit Ende-zu-Ende-Verschlüsselung wieder zu benutzen, musst du dich erst ab- und dann wieder anmelden.", + "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Du hast für diese Sitzung zuvor eine neuere Version von %(brand)s verwendet. Um diese Version mit Ende-zu-Ende-Verschlüsselung wieder zu benutzen, musst du dich erst ab- und dann wieder anmelden.", "Delete the room address %(alias)s and remove %(name)s from the directory?": "Soll die Raum-Adresse %(alias)s gelöscht und %(name)s aus dem Raum-Verzeichnis entfernt werden?", "Switch to light mode": "Zum hellen Thema wechseln", "Switch to dark mode": "Zum dunklen Thema wechseln", @@ -2475,7 +2475,7 @@ "Use a system font": "Verwende die System-Schriftart", "System font name": "System-Schriftart", "Customise your appearance": "Verändere das Erscheinungsbild", - "Appearance Settings only affect this Riot session.": "Einstellungen zum Erscheinungsbild wirken sich nur auf diese Riot Sitzung aus.", + "Appearance Settings only affect this %(brand)s session.": "Einstellungen zum Erscheinungsbild wirken sich nur auf diese %(brand)s Sitzung aus.", "The authenticity of this encrypted message can't be guaranteed on this device.": "Die Echtheit dieser verschlüsselten Nachricht kann auf diesem Gerät nicht garantiert werden.", "You joined the call": "Du bist dem Anruf beigetreten", "%(senderName)s joined the call": "%(senderName)s ist dem Anruf beigetreten", diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index 8bbcf47cbe..9056b4292e 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -135,7 +135,7 @@ "Passwords can't be empty": "Οι κωδικοί πρόσβασης δεν γίνετε να είναι κενοί", "Phone": "Τηλέφωνο", "Register": "Εγγραφή", - "riot-web version:": "Έκδοση riot-web:", + "%(brand)s version:": "Έκδοση %(brand)s:", "Room Colour": "Χρώμα δωματίου", "Rooms": "Δωμάτια", "Save": "Αποθήκευση", @@ -332,8 +332,8 @@ "Please check your email and click on the link it contains. Once this is done, click continue.": "Παρακαλούμε ελέγξτε την ηλεκτρονική σας αλληλογραφία και κάντε κλικ στον σύνδεσμο που περιέχει. Μόλις γίνει αυτό, κάντε κλίκ στο κουμπί συνέχεια.", "%(senderName)s removed their profile picture.": "Ο %(senderName)s αφαίρεσε τη φωτογραφία του προφίλ του.", "%(senderName)s requested a VoIP conference.": "Ο %(senderName)s αιτήθηκε μια συνδιάσκεψη VoIP.", - "Riot does not have permission to send you notifications - please check your browser settings": "Το Riot δεν έχει δικαιώματα για αποστολή ειδοποιήσεων - παρακαλούμε ελέγξτε τις ρυθμίσεις του περιηγητή σας", - "Riot was not given permission to send notifications - please try again": "Δεν δόθηκαν δικαιώματα αποστολής ειδοποιήσεων στο Riot - παρακαλούμε προσπαθήστε ξανά", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "Το %(brand)s δεν έχει δικαιώματα για αποστολή ειδοποιήσεων - παρακαλούμε ελέγξτε τις ρυθμίσεις του περιηγητή σας", + "%(brand)s was not given permission to send notifications - please try again": "Δεν δόθηκαν δικαιώματα αποστολής ειδοποιήσεων στο %(brand)s - παρακαλούμε προσπαθήστε ξανά", "%(roomName)s is not accessible at this time.": "Το %(roomName)s δεν είναι προσβάσιμο αυτή τη στιγμή.", "Scroll to bottom of page": "Μετάβαση στο τέλος της σελίδας", "Server may be unavailable, overloaded, or search timed out :(": "Ο διακομιστής μπορεί να είναι μη διαθέσιμος, υπερφορτωμένος, ή να έχει λήξει η αναζήτηση :(", @@ -364,7 +364,7 @@ "Connectivity to the server has been lost.": "Χάθηκε η συνδεσιμότητα στον διακομιστή.", "Please select the destination room for this message": "Παρακαλούμε επιλέξτε ένα δωμάτιο προορισμού για αυτό το μήνυμα", "Analytics": "Αναλυτικά δεδομένα", - "Riot collects anonymous analytics to allow us to improve the application.": "Το Riot συλλέγει ανώνυμα δεδομένα επιτρέποντας μας να βελτιώσουμε την εφαρμογή.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "Το %(brand)s συλλέγει ανώνυμα δεδομένα επιτρέποντας μας να βελτιώσουμε την εφαρμογή.", "Failed to invite": "Δεν ήταν δυνατή η πρόσκληση", "I verify that the keys match": "Επιβεβαιώνω πως ταιριάζουν τα κλειδιά", "Please check your email to continue registration.": "Παρακαλούμε ελέγξτε την ηλεκτρονική σας αλληλογραφία για να συνεχίσετε με την εγγραφή.", @@ -372,7 +372,7 @@ "Removed or unknown message type": "Αφαιρέθηκε ή άγνωστος τύπος μηνύματος", " (unsupported)": " (μη υποστηριζόμενο)", "%(senderDisplayName)s changed the room avatar to ": "Ο %(senderDisplayName)s άλλαξε την εικόνα του δωματίου σε ", - "You may need to manually permit Riot to access your microphone/webcam": "Μπορεί να χρειαστεί να ορίσετε χειροκίνητα την πρόσβαση του Riot στο μικρόφωνο/κάμερα", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Μπορεί να χρειαστεί να ορίσετε χειροκίνητα την πρόσβαση του %(brand)s στο μικρόφωνο/κάμερα", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Δεν είναι δυνατή η σύνδεση στον διακομιστή - παρακαλούμε ελέγξτε την συνδεσιμότητα, βεβαιωθείτε ότι το πιστοποιητικό SSL του διακομιστή είναι έμπιστο και ότι κάποιο πρόσθετο περιηγητή δεν αποτρέπει τα αιτήματα.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Δεν είναι δυνατή η σύνδεση στον διακομιστή μέσω HTTP όταν μια διεύθυνση HTTPS βρίσκεται στην μπάρα του περιηγητή. Είτε χρησιμοποιήστε HTTPS ή ενεργοποιήστε τα μη ασφαλή σενάρια εντολών.", "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "Ο %(senderName)s άλλαξε το επίπεδο δύναμης του %(powerLevelDiffText)s.", @@ -411,7 +411,7 @@ "Unverify": "Άρση επιβεβαίωσης", "Ongoing conference call%(supportedText)s.": "Κλήση συνδιάσκεψης σε εξέλιξη %(supportedText)s.", "Your browser does not support the required cryptography extensions": "Ο περιηγητής σας δεν υποστηρίζει τα απαιτούμενα πρόσθετα κρυπτογράφησης", - "Not a valid Riot keyfile": "Μη έγκυρο αρχείο κλειδιού Riot", + "Not a valid %(brand)s keyfile": "Μη έγκυρο αρχείο κλειδιού %(brand)s", "Authentication check failed: incorrect password?": "Αποτυχία ελέγχου πιστοποίησης: λανθασμένος κωδικός πρόσβασης;", "Claimed Ed25519 fingerprint key": "Απαιτήθηκε κλειδί αποτυπώματος Ed25519", "Displays action": "Εμφανίζει την ενέργεια", @@ -422,7 +422,7 @@ "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.": "Το αρχείο εξαγωγής θα επιτρέψει σε οποιονδήποτε που μπορεί να το διαβάσει να αποκρυπτογραφήσει κρυπτογραφημένα μηνύματα που εσείς μπορείτε να δείτε, οπότε θα πρέπει να είστε προσεκτικοί για να το κρατήσετε ασφαλές. Για να βοηθήσετε με αυτό, θα πρέπει να εισαγάγετε ένα συνθηματικό, το οποία θα χρησιμοποιηθεί για την κρυπτογράφηση των εξαγόμενων δεδομένων. Η εισαγωγή δεδομένων θα είναι δυνατή χρησιμοποιώντας μόνο το ίδιο συνθηματικό.", "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.": "Αυτή η διαδικασία σας επιτρέπει να εισαγάγετε κλειδιά κρυπτογράφησης που έχετε προηγουμένως εξάγει από άλλο πρόγραμμα του Matrix. Στη συνέχεια, θα μπορέσετε να αποκρυπτογραφήσετε τυχόν μηνύματα που το άλλο πρόγραμμα θα μπορούσε να αποκρυπτογραφήσει.", "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Το αρχείο εξαγωγής θα είναι προστατευμένο με συνθηματικό. Θα χρειαστεί να πληκτρολογήσετε το συνθηματικό εδώ για να αποκρυπτογραφήσετε το αρχείο.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Αν χρησιμοποιούσατε προηγουμένως μια πιο πρόσφατη έκδοση του Riot, η συνεδρία σας ίσως είναι μη συμβατή με αυτήν την έκδοση. Κλείστε αυτό το παράθυρο και επιστρέψτε στην πιο πρόσφατη έκδοση.", + "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.": "Αν χρησιμοποιούσατε προηγουμένως μια πιο πρόσφατη έκδοση του %(brand)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. Θα θέλατε να συνεχίσετε;", "Do you want to set an email address?": "Θέλετε να ορίσετε μια διεύθυνση ηλεκτρονικής αλληλογραφίας;", "This will allow you to reset your password and receive notifications.": "Αυτό θα σας επιτρέψει να επαναφέρετε τον κωδικό πρόσβαση σας και θα μπορείτε να λαμβάνετε ειδοποιήσεις.", @@ -433,7 +433,7 @@ "Encryption key request": "Αίτημα κλειδιού κρυπτογράφησης", "Check for update": "Έλεγχος για ενημέρωση", "Fetching third party location failed": "Η λήψη τοποθεσίας απέτυχε", - "A new version of Riot is available.": "Μία νέα έκδοση του Riot είναι διαθέσιμη.", + "A new version of %(brand)s is available.": "Μία νέα έκδοση του %(brand)s είναι διαθέσιμη.", "All notifications are currently disabled for all targets.": "Όλες οι ειδοποιήσεις είναι προς το παρόν απενεργοποιημένες για όλες τις συσκευές.", "Uploading report": "Αποστολή αναφοράς", "Sunday": "Κυριακή", @@ -446,7 +446,7 @@ "You are not receiving desktop notifications": "Δεν λαμβάνετε ειδοποιήσεις στην επιφάνεια εργασίας", "Friday": "Παρασκευή", "Update": "Ενημέρωση", - "Riot does not know how to join a room on this network": "To Riot δεν γνωρίζει πως να συνδεθεί σε δωμάτια που ανήκουν σ' αυτό το δίκτυο", + "%(brand)s does not know how to join a room on this network": "To %(brand)s δεν γνωρίζει πως να συνδεθεί σε δωμάτια που ανήκουν σ' αυτό το δίκτυο", "On": "Ενεργό", "Changelog": "Αλλαγές", "Waiting for response from server": "Αναμονή απάντησης από τον διακομιστή", @@ -488,7 +488,7 @@ "Enter keywords separated by a comma:": "Προσθέστε λέξεις κλειδιά χωρισμένες με κόμμα:", "I understand the risks and wish to continue": "Κατανοώ του κινδύνους και επιθυμώ να συνεχίσω", "Remove %(name)s from the directory?": "Αφαίρεση του %(name)s από το ευρετήριο;", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Το Riot χρησιμοποιεί αρκετά προχωρημένα χαρακτηριστικά των περιηγητών Ιστού, ορισμένα από τα οποία δεν είναι διαθέσιμα ή είναι σε πειραματικό στάδιο στον περιηγητή σας.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "Το %(brand)s χρησιμοποιεί αρκετά προχωρημένα χαρακτηριστικά των περιηγητών Ιστού, ορισμένα από τα οποία δεν είναι διαθέσιμα ή είναι σε πειραματικό στάδιο στον περιηγητή σας.", "Unnamed room": "Ανώνυμο δωμάτιο", "Remove from Directory": "Αφαίρεση από το ευρετήριο", "Saturday": "Σάββατο", @@ -524,8 +524,8 @@ "Search…": "Αναζήτηση…", "Unhide Preview": "Προεπισκόπηση", "Unable to join network": "Δεν είναι δυνατή η σύνδεση στο δίκτυο", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Ισως να έχετε κάνει τις ρυθμίσεις σε άλλη εφαρμογή εκτός του Riot. Δεν μπορείτε να τις αλλάξετε μέσω του Riot αλλά ισχύουν κανονικά", - "Sorry, your browser is not able to run Riot.": "Λυπούμαστε, αλλά ο περιηγητές σας δεν υποστηρίζεται από το Riot.", + "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 αλλά ισχύουν κανονικά", + "Sorry, your browser is not able to run %(brand)s.": "Λυπούμαστε, αλλά ο περιηγητές σας δεν υποστηρίζεται από το %(brand)s.", "Messages in group chats": "Μηνύματα σε ομαδικές συνομιλίες", "Yesterday": "Χθές", "Error encountered (%(errorDetail)s).": "Παρουσιάστηκε σφάλμα (%(errorDetail)s).", @@ -548,13 +548,13 @@ "There are advanced notifications which are not shown here": "Υπάρχουν προχωρημένες ειδοποιήσεις οι οποίες δεν εμφανίζονται εδώ", "Your identity server's URL": "Το URL του διακομιστή ταυτοποίησής σας", "The platform you're on": "Η πλατφόρμα στην οποία βρίσκεστε", - "The version of Riot.im": "Η έκδοση του Riot.im", + "The version of %(brand)s": "Η έκδοση του %(brand)s", "Your language of choice": "Η γλώσσα επιλογής σας", "Your homeserver's URL": "Το URL του διακομιστή φιλοξενίας σας", "Every page you use in the app": "Κάθε σελίδα που χρησιμοποιείτε στην εφαρμογή", "e.g. ": "π.χ. ", "Your device resolution": "Η ανάλυση της συσκευής σας", - "The information being sent to us to help make Riot.im better includes:": "Οι πληροφορίες που στέλνονται σε εμάς με σκοπό την βελτίωση του Riot.im περιλαμβάνουν:", + "The information being sent to us to help make %(brand)s better includes:": "Οι πληροφορίες που στέλνονται σε εμάς με σκοπό την βελτίωση του %(brand)s περιλαμβάνουν:", "Call Failed": "Η κλήση απέτυχε", "e.g. %(exampleValue)s": "π.χ. %(exampleValue)s", "Review Devices": "Ανασκόπηση συσκευών", @@ -669,6 +669,6 @@ "This room has no topic.": "Το δωμάτιο αυτό δεν έχει κανένα θέμα.", "Sets the room name": "Θέτει το θέμα του δωματίου", "Use an identity server": "Χρησιμοποιήστε ένα διακομιστή ταυτοτήτων", - "Your Riot is misconfigured": "Οι παράμετροι του Riot σας είναι λανθασμένα ρυθμισμένοι", + "Your %(brand)s is misconfigured": "Οι παράμετροι του %(brand)s σας είναι λανθασμένα ρυθμισμένοι", "Explore rooms": "Εξερευνήστε δωμάτια" } diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index 05f29c3887..fd24ddc486 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -11,7 +11,7 @@ "No Microphones detected": "No Microphones detected", "No Webcams detected": "No Webcams detected", "No media permissions": "No media permissions", - "You may need to manually permit Riot to access your microphone/webcam": "You may need to manually permit Riot to access your microphone/webcam", + "You may need to manually permit %(brand)s to access your microphone/webcam": "You may need to manually permit %(brand)s to access your microphone/webcam", "Default Device": "Default Device", "Microphone": "Microphone", "Camera": "Camera", @@ -205,9 +205,9 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s requested a VoIP conference.", "Results from DuckDuckGo": "Results from DuckDuckGo", "Return to login screen": "Return to login screen", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot does not have permission to send you notifications - please check your browser settings", - "Riot was not given permission to send notifications - please try again": "Riot was not given permission to send notifications - please try again", - "riot-web version:": "riot-web version:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s does not have permission to send you notifications - please check your browser settings", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s was not given permission to send notifications - please try again", + "%(brand)s version:": "%(brand)s version:", "Room %(roomId)s not visible": "Room %(roomId)s not visible", "Room Colour": "Room Color", "Rooms": "Rooms", @@ -335,7 +335,7 @@ "Analytics": "Analytics", "Banned by %(displayName)s": "Banned by %(displayName)s", "Options": "Options", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot collects anonymous analytics to allow us to improve the application.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s collects anonymous analytics to allow us to improve the application.", "Passphrases must match": "Passphrases must match", "Passphrase must not be empty": "Passphrase must not be empty", "Export room keys": "Export room keys", @@ -358,7 +358,7 @@ "To continue, please enter your password.": "To continue, please enter your password.", "I verify that the keys match": "I verify that the keys match", "Unable to restore session": "Unable to restore session", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.", + "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.": "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.", "Unknown Address": "Unknown Address", "Unblacklist": "Unblacklist", "Blacklist": "Blacklist", @@ -441,7 +441,7 @@ "This will be your account name on the homeserver, or you can pick a different server.": "This will be your account name on the homeserver, or you can pick a different server.", "If you already have a Matrix account you can log in instead.": "If you already have a Matrix account you can log in instead.", "Your browser does not support the required cryptography extensions": "Your browser does not support the required cryptography extensions", - "Not a valid Riot keyfile": "Not a valid Riot keyfile", + "Not a valid %(brand)s keyfile": "Not a valid %(brand)s keyfile", "Authentication check failed: incorrect password?": "Authentication check failed: incorrect password?", "Do you want to set an email address?": "Do you want to set an email address?", "This will allow you to reset your password and receive notifications.": "This will allow you to reset your password and receive notifications.", @@ -473,7 +473,7 @@ "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget removed by %(senderName)s", "%(senderName)s changed the pinned messages for the room.": "%(senderName)s changed the pinned messages for the room.", "Fetching third party location failed": "Fetching third party location failed", - "A new version of Riot is available.": "A new version of Riot is available.", + "A new version of %(brand)s is available.": "A new version of %(brand)s is available.", "All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.", "Uploading report": "Uploading report", "Sunday": "Sunday", @@ -528,7 +528,7 @@ "Enter keywords separated by a comma:": "Enter keywords separated by a comma:", "Search…": "Search…", "Remove %(name)s from the directory?": "Remove %(name)s from the directory?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.", "Unnamed room": "Unnamed room", "Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.", "All messages (noisy)": "All messages (noisy)", @@ -565,8 +565,8 @@ "Forward Message": "Forward Message", "Unhide Preview": "Unhide Preview", "Unable to join network": "Unable to join network", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply", - "Sorry, your browser is not able to run Riot.": "Sorry, your browser is not able to run Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply", + "Sorry, your browser is not able to run %(brand)s.": "Sorry, your browser is not able to run %(brand)s.", "Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s", "Messages in group chats": "Messages in group chats", "Yesterday": "Yesterday", @@ -575,7 +575,7 @@ "Unable to fetch notification target list": "Unable to fetch notification target list", "Set Password": "Set Password", "Off": "Off", - "Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network", + "%(brand)s does not know how to join a room on this network": "%(brand)s does not know how to join a room on this network", "Mentions only": "Mentions only", "Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room", "You can now return to your account after signing out, and sign in on other devices.": "You can now return to your account after signing out, and sign in on other devices.", @@ -589,7 +589,7 @@ "Checking for an update...": "Checking for an update...", "There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here", "The platform you're on": "The platform you're on", - "The version of Riot.im": "The version of Riot.im", + "The version of %(brand)s": "The version of %(brand)s", "Your language of choice": "Your language of choice", "Which officially provided instance you are using, if any": "Which officially provided instance you are using, if any", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Whether or not you're using the Richtext mode of the Rich Text Editor", @@ -600,7 +600,7 @@ "e.g. ": "e.g. ", "Your User Agent": "Your User Agent", "Your device resolution": "Your device resolution", - "The information being sent to us to help make Riot.im better includes:": "The information being sent to us to help make Riot.im better includes:", + "The information being sent to us to help make %(brand)s better includes:": "The information being sent to us to help make %(brand)s better includes:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.", "Call Failed": "Call Failed", "Review Devices": "Review Devices", @@ -682,7 +682,7 @@ "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s widget modified by %(senderName)s", "%(displayName)s is typing …": "%(displayName)s is typing …", "%(names)s and %(count)s others are typing …|other": "%(names)s and %(count)s others are typing …", - "Your Riot is misconfigured": "Your Riot is misconfigured", + "Your %(brand)s is misconfigured": "Your %(brand)s is misconfigured", "Call failed due to misconfigured server": "Call failed due to misconfigured server", "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.", "Try using turn.matrix.org": "Try using turn.matrix.org", diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 11012a9045..2886da0dc7 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -52,8 +52,8 @@ "Failed to invite users to community": "Malsukcesis inviti novajn uzantojn al komunumo", "Failed to invite users to %(groupId)s": "Malsukcesis inviti uzantojn al %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "Malsukcesis aldoni jenajn ĉambrojn al %(groupId)s:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot ne havas permeson sciigi vin – bonvolu kontroli la agordojn de via foliumilo", - "Riot was not given permission to send notifications - please try again": "Riot ne ricevis permeson sendi sciigojn – bonvolu reprovi", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s ne havas permeson sciigi vin – bonvolu kontroli la agordojn de via foliumilo", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s ne ricevis permeson sendi sciigojn – bonvolu reprovi", "Unable to enable Notifications": "Ne povas ŝalti sciigojn", "This email address was not found": "Tiu ĉi retpoŝtadreso ne troviĝis", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Via retpoŝtareso ŝajne ne ligiĝas al Matrix-identigilo sur tiu ĉi hejmservilo.", @@ -131,7 +131,7 @@ "Server may be unavailable, overloaded, or you hit a bug.": "Servilo povas esti neatingebla, troŝarĝita, aŭ vi renkontis cimon.", "Unnamed Room": "Sennoma Ĉambro", "Your browser does not support the required cryptography extensions": "Via foliumilo ne subtenas la bezonatajn ĉifrajn kromprogramojn", - "Not a valid Riot keyfile": "Nevalida ŝlosila dosiero de Riot", + "Not a valid %(brand)s keyfile": "Nevalida ŝlosila dosiero de %(brand)s", "Authentication check failed: incorrect password?": "Aŭtentikiga kontrolo malsukcesis: ĉu pro malĝusta pasvorto?", "Failed to join room": "Malsukcesis aliĝi al ĉambro", "Message Pinning": "Fikso de mesaĝoj", @@ -478,7 +478,7 @@ "Ignore request": "Malatenti peton", "Encryption key request": "Peto por ĉifra ŝlosilo", "Unable to restore session": "Salutaĵo ne rehaveblas", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Se vi antaŭe uzis pli novan version de Riot, via salutaĵo eble ne akordos kun ĉi tiu versio. Fermu ĉi tiun fenestron kaj revenu al la pli nova versio.", + "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.": "Se vi antaŭe uzis pli novan version de %(brand)s, via salutaĵo eble ne akordos kun ĉi tiu versio. Fermu ĉi tiun fenestron kaj revenu al la pli nova versio.", "Invalid Email Address": "Malvalida retpoŝtadreso", "This doesn't appear to be a valid email address": "Tio ĉi ne ŝajnas esti valida retpoŝtadreso", "Verification Pending": "Atendante kontrolon", @@ -539,7 +539,7 @@ "Failed to leave room": "Malsukcesis forlasi la ĉambron", "Signed Out": "Adiaŭinta", "Old cryptography data detected": "Malnovaj datumoj de ĉifroteĥnikaro troviĝis", - "Data from an older version of Riot 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.": "Datumoj el malnova versio de Riot troviĝis. Ĉi tio malfunkciigos tutvojan ĉifradon en la malnova versio. Tutvoje ĉifritaj mesaĝoj interŝanĝitaj freŝtempe per la malnova versio eble ne malĉifreblos. Tio povas kaŭzi malsukceson ankaŭ al mesaĝoj interŝanĝitaj kun tiu ĉi versio. Se vin trafos problemoj, adiaŭu kaj resalutu. Por reteni mesaĝan historion, elportu kaj reenportu viajn ŝlosilojn.", + "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.": "Datumoj el malnova versio de %(brand)s troviĝis. Ĉi tio malfunkciigos tutvojan ĉifradon en la malnova versio. Tutvoje ĉifritaj mesaĝoj interŝanĝitaj freŝtempe per la malnova versio eble ne malĉifreblos. Tio povas kaŭzi malsukceson ankaŭ al mesaĝoj interŝanĝitaj kun tiu ĉi versio. Se vin trafos problemoj, adiaŭu kaj resalutu. Por reteni mesaĝan historion, elportu kaj reenportu viajn ŝlosilojn.", "Logout": "Adiaŭi", "Your Communities": "Viaj komunumoj", "Error whilst fetching joined communities": "Akirado de viaj komunumoj eraris", @@ -579,13 +579,13 @@ "Import E2E room keys": "Enporti tutvoje ĉifrajn ĉambrajn ŝlosilojn", "Cryptography": "Ĉifroteĥnikaro", "Analytics": "Analizo", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot kolektas sennomaj analizajn datumojn por helpi plibonigadon de la programo.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s kolektas sennomaj analizajn datumojn por helpi plibonigadon de la programo.", "Labs": "Eksperimentaj funkcioj", "Check for update": "Kontroli ĝisdatigojn", "Reject all %(invitedRooms)s invites": "Rifuzi ĉiujn %(invitedRooms)s invitojn", "Start automatically after system login": "Memfare ruli post operaciuma saluto", "No media permissions": "Neniuj permesoj pri aŭdvidaĵoj", - "You may need to manually permit Riot to access your microphone/webcam": "Eble vi devos permane permesi al Riot atingon de viaj mikrofono/kamerao", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Eble vi devos permane permesi al %(brand)s atingon de viaj mikrofono/kamerao", "No Microphones detected": "Neniu mikrofono troviĝis", "No Webcams detected": "Neniu kamerao troviĝis", "Default Device": "Implicita aparato", @@ -599,7 +599,7 @@ "click to reveal": "klaku por malkovri", "Homeserver is": "Hejmservilo estas", "Identity Server is": "Identiga servilo estas", - "riot-web version:": "versio de riot-web:", + "%(brand)s version:": "versio de %(brand)s:", "olm version:": "versio de olm:", "Failed to send email": "Malsukcesis sendi retleteron", "The email address linked to your account must be entered.": "Vi devas enigi retpoŝtadreson ligitan al via konto.", @@ -666,9 +666,9 @@ "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Forigo de fenestraĵo efektiviĝos por ĉiuj uzantoj en ĉi tiu ĉambro. Ĉu vi certe volas ĝin forigi?", "Unblacklist": "Repermesi malĉifradon", "none": "neniu", - "The version of Riot.im": "Tiu ĉi versio de Riot.im", + "The version of %(brand)s": "Tiu ĉi versio de %(brand)s", "Your language of choice": "Via preferata lingvo", - "The information being sent to us to help make Riot.im better includes:": "Informoj sendataj al ni por plibonigi la servon Riot.im inkluzivas:", + "The information being sent to us to help make %(brand)s better includes:": "Informoj sendataj al ni por plibonigi la servon %(brand)s inkluzivas:", "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s ŝanĝis sian vidigan nomon al %(displayName)s.", "Send an encrypted reply…": "Sendi ĉifritan respondon…", "Send a reply (unencrypted)…": "Sendi respondon (neĉifritan)…", @@ -687,7 +687,7 @@ "Failed to add tag %(tagName)s to room": "Malsukcesis aldoni etikedon %(tagName)s al ĉambro", "Submit debug logs": "Sendi sencimigan protokolon", "Fetching third party location failed": "Malsukcesis trovi lokon de ekstera liveranto", - "A new version of Riot is available.": "Nova versio de Riot haveblas.", + "A new version of %(brand)s is available.": "Nova versio de %(brand)s haveblas.", "I understand the risks and wish to continue": "Mi komprenas la riskon kaj volas pluiĝi", "Send Account Data": "Sendi kontajn informojn", "Advanced notification settings": "Specialaj agordoj de sciigoj", @@ -742,7 +742,7 @@ "Search…": "Serĉi…", "You have successfully set a password and an email address!": "Vi sukcese agordis pasvorton kaj retpoŝtadreson!", "Remove %(name)s from the directory?": "Ĉu forigi %(name)s de la ujo?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uzas multajn specialajn funkciojn, el kiuj kelkaj ne disponeblas aŭ estas eksperimentaj en via nuna foliumilo.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s uzas multajn specialajn funkciojn, el kiuj kelkaj ne disponeblas aŭ estas eksperimentaj en via nuna foliumilo.", "Event sent!": "Okazo sendiĝis!", "Explore Account Data": "Esplori kontajn datumojn", "All messages (noisy)": "Ĉiuj mesaĝoj (lauta)", @@ -786,8 +786,8 @@ "Show message in desktop notification": "Montradi mesaĝojn en labortablaj sciigoj", "Unhide Preview": "Malkaŝi antaŭrigardon", "Unable to join network": "Ne povas konektiĝi al la reto", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Vi eble agordis ilin en alia kliento. Vi ne povas agordi ilin en Riot, sed ili ankoraŭ validas", - "Sorry, your browser is not able to run Riot.": "Pardonon, via foliumilo ne kapablas funkciigi klienton Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Vi eble agordis ilin en alia kliento. Vi ne povas agordi ilin en %(brand)s, sed ili ankoraŭ validas", + "Sorry, your browser is not able to run %(brand)s.": "Pardonon, via foliumilo ne kapablas funkciigi klienton %(brand)s.", "Uploaded on %(date)s by %(user)s": "Alŝutita je %(date)s de %(user)s", "Messages in group chats": "Mesaĝoj en grupaj babiloj", "Yesterday": "Hieraŭ", @@ -796,7 +796,7 @@ "Unable to fetch notification target list": "Ne povas akiri la liston de celoj por sciigoj", "Set Password": "Agordi pasvorton", "Off": "For", - "Riot does not know how to join a room on this network": "Riot ne scias aliĝi al ĉambroj en tiu ĉi reto", + "%(brand)s does not know how to join a room on this network": "%(brand)s ne scias aliĝi al ĉambroj en tiu ĉi reto", "Mentions only": "Nur mencioj", "Failed to remove tag %(tagName)s from room": "Malsukcesis forigi etikedon %(tagName)s el la ĉambro", "You can now return to your account after signing out, and sign in on other devices.": "Vi nun rajtas reveni al via konto post adiaŭo, kaj saluti per ĝi kun aliaj aparatoj.", @@ -962,9 +962,9 @@ "Phone numbers": "Telefonnumeroj", "Legal": "Jura", "Credits": "Dankoj", - "For help with using Riot, click here.": "Por helpo kun uzo de Riot, alklaku ĉi tie.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Por helpo kun uzo de Riot, alklaku ĉi tie aŭ komencu babilon kun nia roboto uzante la butonon sube.", - "Chat with Riot Bot": "Babilu kun la roboto Riot Bot", + "For help with using %(brand)s, click here.": "Por helpo kun uzo de %(brand)s, alklaku ĉi tie.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Por helpo kun uzo de %(brand)s, alklaku ĉi tie aŭ komencu babilon kun nia roboto uzante la butonon sube.", + "Chat with %(brand)s Bot": "Babilu kun la roboto %(brand)s Bot", "Help & About": "Helpo kaj Prio", "Bug reporting": "Cim-raportado", "FAQ": "Oftaj demandoj", @@ -1015,7 +1015,7 @@ "Join": "Aliĝi", "Invite anyway": "Tamen inviti", "To continue, please enter your password:": "Por daŭrigi, bonvoluenigi vian pasvorton:", - "Updating Riot": "Ĝisdatigante Riot", + "Updating %(brand)s": "Ĝisdatigante %(brand)s", "Go back": "Reen iri", "Room Settings - %(roomName)s": "Agordoj de ĉambro – %(roomName)s", "Failed to upgrade room": "Malsukcesis gradaltigi ĉambron", @@ -1181,8 +1181,8 @@ "Click here to see older messages.": "Klaku ĉi tien por vidi pli malnovajn mesaĝojn.", "edited": "redaktita", "Failed to load group members": "Malsukcesis enlegi grupanojn", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Bonvolu helpi plibonigi projekton Riot.im per sendado de sennomaj datumoj pri uzado. Tio funkciados per kuketo (bonvolu vidi nian Politikon pri kuketoj).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Bonvolu helpi plibonigi projekton Riot.im per sendado de sennomaj datumoj pri uzado. Tio funkciados per kuketo.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Bonvolu helpi plibonigi projekton %(brand)s per sendado de sennomaj datumoj pri uzado. Tio funkciados per kuketo (bonvolu vidi nian Politikon pri kuketoj).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Bonvolu helpi plibonigi projekton %(brand)s per sendado de sennomaj datumoj pri uzado. Tio funkciados per kuketo.", "Please contact your service administrator to get this limit increased.": "Bonvolu kontakti vian administranton por plialtigi ĉi tiun limon.", "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Ĉi tiu hejmservilo atingis sian monatan limon de aktivaj uzantoj, do iuj uzantoj ne povos saluti.", "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Ĉi tiu hejmservilo pasis trans unu el siaj rimedaj limoj, do iuj uzantoj ne povos saluti.", @@ -1197,7 +1197,7 @@ "Edit message": "Redakti mesaĝon", "This room has already been upgraded.": "Ĉi tiu ĉambro jam gradaltiĝis.", "This room is running room version , which this homeserver has marked as unstable.": "Ĉi tiu ĉambro uzas ĉambran version , kiun la hejmservilo markis kiel nestabilan.", - "Your Riot is misconfigured": "Via kliento Riot estas misagordita", + "Your %(brand)s is misconfigured": "Via kliento %(brand)s estas misagordita", "Joining room …": "Aliĝante al ĉambro …", "Loading …": "Enlegante …", "Rejecting invite …": "Rifuzante inviton …", @@ -1326,7 +1326,7 @@ "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s nuligis inviton en la ĉambron por %(targetDisplayName)s.", "Cannot reach homeserver": "Ne povas atingi hejmservilon", "Ensure you have a stable internet connection, or get in touch with the server admin": "Certiĝu ke vi havas stabilan retkonekton, aŭ kontaktu la administranton de la servilo", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Petu vian Riot-administranton kontroli vian agordaron je malĝustaj aŭ duoblaj eroj.", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Petu vian %(brand)s-administranton kontroli vian agordaron je malĝustaj aŭ duoblaj eroj.", "Cannot reach identity server": "Ne povas atingi identigan servilon", "Please contact your service administrator to continue using this service.": "Bonvolu kontakti vian servo-administranton por daŭrigi uzadon de tiu ĉi servo.", "Failed to perform homeserver discovery": "Malsukcesis trovi hejmservilon", @@ -1399,15 +1399,15 @@ "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Ne povas enlegi la responditan okazon; aŭ ĝi ne ekzistas, aŭ vi ne rajtas vidi ĝin.", "Clear all data": "Vakigi ĉiujn datumojn", "Community IDs cannot be empty.": "Identigilo de komunumo ne estu malplena.", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Por eviti perdon de via babila historio, vi devas elporti la ŝlosilojn de viaj ĉambroj antaŭ adiaŭo. Por tio vi bezonos reveni al la pli nova versio de Riot", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Vi antaŭe uzis pli novan version de Riot je %(host)s. Por ree uzi ĉi tiun version kun ĉifrado, vi devos adiaŭi kaj resaluti. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Por eviti perdon de via babila historio, vi devas elporti la ŝlosilojn de viaj ĉambroj antaŭ adiaŭo. Por tio vi bezonos reveni al la pli nova versio de %(brand)s", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Vi antaŭe uzis pli novan version de %(brand)s je %(host)s. Por ree uzi ĉi tiun version kun ĉifrado, vi devos adiaŭi kaj resaluti. ", "Incompatible Database": "Neakorda datumbazo", "View Servers in Room": "Montri servilojn en ĉambro", - "You've previously used Riot 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, Riot needs to resync your account.": "Vi antaŭe uzis Riot-on je %(host)s kun ŝaltita malfrua enlegado de anoj. En ĉi tiu versio, malfrua enlegado estas malŝaltita. Ĉar la loka kaŝmemoro de ambaŭ versioj ne akordas, Riot bezonas respeguli vian konton.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Se la alia versio de Riot ankoraŭ estas malfermita en alia langeto, bonvolu tiun fermi, ĉar uzado de Riot je la sama gastiganto, kun malfrua enlegado samtempe ŝaltita kaj malŝaltita, kaŭzos problemojn.", + "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.": "Vi antaŭe uzis %(brand)s-on je %(host)s kun ŝaltita malfrua enlegado de anoj. En ĉi tiu versio, malfrua enlegado estas malŝaltita. Ĉar la loka kaŝmemoro de ambaŭ versioj ne akordas, %(brand)s bezonas respeguli vian konton.", + "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.": "Se la alia versio de %(brand)s ankoraŭ estas malfermita en alia langeto, bonvolu tiun fermi, ĉar uzado de %(brand)s je la sama gastiganto, kun malfrua enlegado samtempe ŝaltita kaj malŝaltita, kaŭzos problemojn.", "Incompatible local cache": "Neakorda loka kaŝmemoro", "Clear cache and resync": "Vakigi kaŝmemoron kaj respeguli", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot nun uzas 3–5-oble malpli da memoro, ĉar ĝi enlegas informojn pri aliaj uzantoj nur tiam, kiam ĝi bezonas. Bonvolu atendi ĝis ni respegulos la servilon!", + "%(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!": "%(brand)s nun uzas 3–5-oble malpli da memoro, ĉar ĝi enlegas informojn pri aliaj uzantoj nur tiam, kiam ĝi bezonas. Bonvolu atendi ĝis ni respegulos la servilon!", "You'll lose access to your encrypted messages": "Vi perdos aliron al viaj ĉifritaj mesaĝoj", "Are you sure you want to sign out?": "Ĉu vi certe volas adiaŭi?", "Your homeserver doesn't seem to support this feature.": "Via hejmservilo ŝajne ne subtenas ĉi tiun funkcion.", @@ -1450,10 +1450,10 @@ "Terms and Conditions": "Uzokondiĉoj", "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Por daŭre uzadi la hejmservilon %(homeserverDomain)s, vi devas tralegi kaj konsenti niajn uzokondiĉojn.", "Review terms and conditions": "Tralegi uzokondiĉojn", - "Did you know: you can use communities to filter your Riot.im experience!": "Ĉu vi sciis: vi povas uzi komunumojn por filtri vian sperton de Riot.im!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Ĉu vi sciis: vi povas uzi komunumojn por filtri vian sperton de %(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.": "Por agordi filtrilon, tiru komunuman profilbildon sur la filtran panelon je la maldekstra flanko. Vi povas klaki sur profilbildon en la filtra panelo iam ajn, por vidi nur ĉambrojn kaj homojn ligitaj al ties komunumo.", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot malsukcesis akiri liston de protokoloj de la hejmservilo. Eble la hejmservilo estas tro malnova por subteni eksterajn retojn.", - "Riot failed to get the public room list.": "Riot malsukcesis akiri la liston de publikaj ĉambroj.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s malsukcesis akiri liston de protokoloj de la hejmservilo. Eble la hejmservilo estas tro malnova por subteni eksterajn retojn.", + "%(brand)s failed to get the public room list.": "%(brand)s malsukcesis akiri la liston de publikaj ĉambroj.", "The homeserver may be unavailable or overloaded.": "La hejmservilo eble estas neatingebla aŭ troŝarĝita.", "You can't send any messages until you review and agree to our terms and conditions.": "Vi ne povas sendi mesaĝojn ĝis vi tralegos kaj konsentos niajn uzokondiĉojn.", "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.": "Via mesaĝo ne sendiĝis, ĉar tiu ĉi hejmservilo atingis sian monatan limon de aktivaj uzantoj. Bonvolu kontakti vian administranton de servo por plue uzadi la servon.", @@ -1638,10 +1638,10 @@ "Recent rooms": "Freŝaj vizititaj ĉambroj", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Eraris (%(errcode)s) validigo de via invito. Vi povas transdoni ĉi tiun informon al ĉambra administranto.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Ĉi tiu invito al %(roomName)s sendiĝis al %(email)s, kiu ne estas ligita al via konto", - "Link this email with your account in Settings to receive invites directly in Riot.": "Ligu ĉi tiun retpoŝtadreson al via konto en Agordoj por ricevadi invitojn rekte per Riot.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Ligu ĉi tiun retpoŝtadreson al via konto en Agordoj por ricevadi invitojn rekte per %(brand)s.", "This invite to %(roomName)s was sent to %(email)s": "La invito al %(roomName)s sendiĝis al %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Uzu identigan servilon en Agordoj por ricevadi invitojn rekte per Riot.", - "Share this email in Settings to receive invites directly in Riot.": "Havigu ĉi tiun retpoŝtadreson per Agordoj por ricevadi invitojn rekte per Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Uzu identigan servilon en Agordoj por ricevadi invitojn rekte per %(brand)s.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Havigu ĉi tiun retpoŝtadreson per Agordoj por ricevadi invitojn rekte per %(brand)s.", "%(count)s unread messages including mentions.|other": "%(count)s nelegitaj mesaĝoj, inkluzive menciojn.", "%(count)s unread messages including mentions.|one": "1 nelegita mencio.", "%(count)s unread messages.|other": "%(count)s nelegitaj mesaĝoj.", @@ -1744,7 +1744,7 @@ "Your avatar URL": "URL de via profilbildo", "Your user ID": "Via identigilo de uzanto", "Your theme": "Via haŭto", - "Riot URL": "URL de Riot", + "%(brand)s URL": "URL de %(brand)s", "Room ID": "Identigilo de ĉambro", "Widget ID": "Identigilo de fenestraĵo", "Widgets do not use message encryption.": "Fenestraĵoj ne uzas ĉifradon de mesaĝoj.", @@ -1816,9 +1816,9 @@ "Upgrade your encryption": "Gradaltigi vian ĉifradon", "Encryption upgraded": "Ĉifrado gradaltigita", "Encryption setup complete": "Agordo de ĉifrado finita", - "The version of Riot": "La versio de Riot", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Ĉu vi uzas Rioton per aparato, kies ĉefa enigilo estas tuŝado", - "The information being sent to us to help make Riot better includes:": "La informoj sendataj al ni por plibonigi Rioton inkluzivas:", + "The version of %(brand)s": "La versio de %(brand)s", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Ĉu vi uzas %(brand)son per aparato, kies ĉefa enigilo estas tuŝado", + "The information being sent to us to help make %(brand)s better includes:": "La informoj sendataj al ni por plibonigi %(brand)son inkluzivas:", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Nekonataj salutaĵoj ĉeestas la ĉambron; se vi daŭrigos ne kontrolinte ilin, iu povos subaŭskulti vian vokon.", "If you cancel now, you won't complete verifying the other user.": "Se vi nuligos nun, vi ne finos kontrolon de la alia uzanto.", "If you cancel now, you won't complete verifying your other session.": "Se vi nuligos nun, vi ne finos kontrolon de via alia salutaĵo.", @@ -1939,8 +1939,8 @@ "Manage": "Administri", "Securely cache encrypted messages locally for them to appear in search results.": "Sekure kaŝmemori ĉifritajn mesaĝojn loke, por aperigi ilin en serĉrezultoj.", "Enable": "Ŝalti", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot malhavas kelkajn partojn bezonajn por sekura loka kaŝmemorado de ĉirfitaj mesaĝoj. Se vi volas eksperimenti pri ĉi tiu kapablo, kunmetu propran klienton «Riot Dekstop» kun aldonitaj serĉopartoj.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot ne povas sekure loke kaŝmemori ĉifritajn mesaĝojn, rulate en reta foliumilo. Uzu la klienton Riot Desktop por aperigi ĉirfritajn mesaĝojn en serĉorezultoj.", + "%(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 malhavas kelkajn partojn bezonajn por sekura loka kaŝmemorado de ĉirfitaj mesaĝoj. Se vi volas eksperimenti pri ĉi tiu kapablo, kunmetu propran klienton «%(brand)s Dekstop» kun aldonitaj serĉopartoj.", + "%(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 ne povas sekure loke kaŝmemori ĉifritajn mesaĝojn, rulate en reta foliumilo. Uzu la klienton %(brand)s Desktop por aperigi ĉirfritajn mesaĝojn en serĉorezultoj.", "Connecting to integration manager...": "Konektante al kunigilo…", "This session is backing up your keys. ": "Ĉi tiu salutaĵo savkopias viajn ŝlosilojn. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Ĉi tiu salutaĵo ne savkopias viajn ŝlosilojn, sed vi jam havas savkopion, el kiu vi povas rehavi datumojn, kaj ilin kreskigi plue.", @@ -1981,7 +1981,7 @@ "Server rules": "Servilaj reguloj", "User rules": "Uzantulaj reguloj", "You are currently ignoring:": "Vi nun malatentas:", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Aldonu ĉi tien uzantojn kaj servilojn, kiujn vi volas malatenti. Uzu steleton por akordigi ĉiajn signojn. Ekzemple, @bot:* malatentigus ĉiujn uzantojn kun la nomo «bot» sur ĉiu servilo.", + "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.": "Aldonu ĉi tien uzantojn kaj servilojn, kiujn vi volas malatenti. Uzu steleton por akordigi ĉiajn signojn. Ekzemple, @bot:* malatentigus ĉiujn uzantojn kun la nomo «bot» sur ĉiu servilo.", "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.": "Malatento de homoj okazas per listoj de forbaroj, kiuj enhavas regulojn pri tio, kiun forbari. Abono de listo de forbaroj signifas, ke la uzantoj/serviloj blokataj de la listo estos kaŝitaj de vi.", "Personal ban list": "Persona listo de forbaroj", "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.": "Via persona listo de forbaroj tenas ĉiujn uzantojn/servilojn, kies mesaĝoj vi persone ne volas vidi. Post via unua malatento, nova ĉambro aperos en via listo de ĉambroj, nomita «Mia listo de forbaroj» – restu en ĝi por efikigi la liston de forbaroj.", @@ -2043,7 +2043,7 @@ "%(count)s sessions|one": "%(count)s salutaĵo", "Hide sessions": "Kaŝi salutaĵojn", "%(role)s in %(roomName)s": "%(role)s en %(roomName)s", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "La salutaĵo, kiun vi provas kontroli, ne subtenas skanadon de rapidrespondaj kodoj nek kontrolon per bildsignoj, kiujn subtenas Riot. Provu per alia kliento.", + "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.": "La salutaĵo, kiun vi provas kontroli, ne subtenas skanadon de rapidrespondaj kodoj nek kontrolon per bildsignoj, kiujn subtenas %(brand)s. Provu per alia kliento.", "Verify by scanning": "Kontroli per skanado", "Ask %(displayName)s to scan your code:": "Petu de %(displayName)s skani vian kodon:", "Verify by emoji": "Kontroli per bildsignoj", @@ -2084,7 +2084,7 @@ "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.": "Kontrolu ĉi tiun aparaton por marki ĝin fidata. Fidado povas pacigi la menson de vi kaj aliaj uzantoj dum uzado de tutvoje ĉifrataj mesaĝoj.", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Kontrolo de ĉi tiu aparato markos ĝin fidata, kaj ankaŭ la uzantoj, kiuj interkontrolis kun vi, fidos ĉi tiun aparaton.", "Enable 'Manage Integrations' in Settings to do this.": "Ŝaltu «Administri kunigojn» en Agordoj, por fari ĉi tion.", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Via Rioto ne permesas al vi uzi kunigilon por tio. Bonvolu kontakti administranton.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Via %(brand)so ne permesas al vi uzi kunigilon por tio. Bonvolu kontakti administranton.", "Failed to invite the following users to chat: %(csvUsers)s": "Malsukcesis inviti la jenajn uzantojn al babilo: %(csvUsers)s", "We couldn't create your DM. Please check the users you want to invite and try again.": "Ni ne povis krei vian rektan ĉambron. Bonvolu kontroli, kiujn uzantojn vi invitas, kaj reprovu.", "Something went wrong trying to invite the users.": "Io eraris dum invito de la uzantoj.", @@ -2109,7 +2109,7 @@ "If you didn’t sign in to this session, your account may be compromised.": "Se vi ne salutis ĉi tiun salutaĵon, via konto eble estas malkonfidencigita.", "This wasn't me": "Tio ne estis mi", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Gradaltigo de ĉambro estas altnivela ago kaj estas kutime rekomendata kiam ĉambro estas malstabila pro eraroj, mankantaj funkcioj, aŭ malsekuraĵoj.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Ĉi tio kutime influas nur traktadon de la ĉambro de la servilo. Se vi spertas problemojn pri Riot, bonvolu raporti problemon.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Ĉi tio kutime influas nur traktadon de la ĉambro de la servilo. Se vi spertas problemojn pri %(brand)s, bonvolu raporti problemon.", "You'll upgrade this room from to .": "Vi gradaltigos ĉi tiun ĉambron de al .", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Ĉi tio ebligos saluti aliajn salutaĵojn, kaj reveni al via konto post adiaŭo.", "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Vi nun forlistigas nekontrolitajn salutaĵojn; por sendi mesaĝojn al tiuj salutaĵoj, vi devas ilin kontroli.", @@ -2178,7 +2178,7 @@ "Disable": "Malŝalti", "Not currently indexing messages for any room.": "Mesaĝoj estas indeksataj en neniu ĉambro.", "Currently indexing: %(currentRoom)s.": "Nun indeksante: %(currentRoom)s.", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot sekure loke kaŝmemoras ĉifritajn mesaĝojn por aperigi ilin en serĉorezultoj:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s sekure loke kaŝmemoras ĉifritajn mesaĝojn por aperigi ilin en serĉorezultoj:", "Space used:": "Spaco uzita:", "Indexed messages:": "Indeksitaj masaĝoj:", "Indexed rooms:": "Indeksitaj ĉambroj:", @@ -2226,7 +2226,7 @@ "a new cross-signing key signature": "nova transire subskriba ŝlosila subskribo", "a device cross-signing signature": "aparata transire subskriba ŝlosila subskribo", "a key signature": "ŝlosila subskribo", - "Riot encountered an error during upload of:": "Riot eraris dum alŝuto de:", + "%(brand)s encountered an error during upload of:": "%(brand)s eraris dum alŝuto de:", "Upload completed": "Alŝuto finiĝis", "Cancelled signature upload": "Alŝuto de subskribo nuliĝis", "Unabled to upload": "Ne povas alŝuti", @@ -2275,7 +2275,7 @@ "Enter": "Eniga klavo", "Space": "Spaco", "End": "Finen-klavo", - "Whether you're using Riot as an installed Progressive Web App": "Ĉu vi uzas Rioton kiel Progresan retan aplikaĵon", + "Whether you're using %(brand)s as an installed Progressive Web App": "Ĉu vi uzas %(brand)son kiel Progresan retan aplikaĵon", "Review Sessions": "Rekontroli salutaĵojn", "Unverified login. Was this you?": "Nekontrolita salutaĵo. Ĉu tio estis vi?", "Manually verify all remote sessions": "Permane kontroli ĉiujn forajn salutaĵojn", @@ -2374,7 +2374,7 @@ "Signing In...": "Salutante…", "If you've joined lots of rooms, this might take a while": "Se vi aliĝis al multaj ĉambroj, tio povas daŭri longe", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Konfirmu vian identecon per kontrolo de ĉi tiu saluto el unu el viaj aliaj salutaĵoj, permesante al ĝi legadon de ĉifritaj mesaĝoj.", - "This requires the latest Riot on your other devices:": "Ĉi tio bezonas la plej freŝan version de Riot en viaj aliaj aparatoj:", + "This requires the latest %(brand)s on your other devices:": "Ĉi tio bezonas la plej freŝan version de %(brand)s en viaj aliaj aparatoj:", "or another cross-signing capable Matrix client": "aŭ alian Matrix-klienton kapablan je transiraj subskriboj", "Use Recovery Passphrase or Key": "Uzi rehavajn pasfrazon aŭ ŝlosilon", "Great! This recovery passphrase looks strong enough.": "Bonege! Ĉi tiu rehava pasfrazo ŝajnas sufiĉe forta.", @@ -2438,13 +2438,13 @@ "This address is available to use": "Ĉi tiu adreso estas uzebla", "This address is already in use": "Ĉi tiu adreso jam estas uzata", "Set a room address to easily share your room with other people.": "Agordu adreson de ĉambro por facile konigi la ĉambron al aliuloj.", - "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Vi antaŭe uzis pli novan version de Riot kun tiu ĉi salutaĵo. Por ree uzi ĉi tiun version kun tutvoja ĉifrado, vi devos adiaŭi kaj resaluti.", + "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Vi antaŭe uzis pli novan version de %(brand)s kun tiu ĉi salutaĵo. Por ree uzi ĉi tiun version kun tutvoja ĉifrado, vi devos adiaŭi kaj resaluti.", "Address (optional)": "Adreso (malnepra)", "Delete the room address %(alias)s and remove %(name)s from the directory?": "Ĉu forigi la adreson de ĉambro %(alias)s kaj forigi %(name)s de la listo?", "delete the address.": "forigi la adreson.", "Use a different passphrase?": "Ĉu uzi alian pasfrazon?", - "Help us improve Riot": "Helpu al ni plibonigi Rioton", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Sendi sennomajn datumojn pri uzado, kiuj helpos al ni plibonigi Rioton. Ĉi tio uzos kuketon.", + "Help us improve %(brand)s": "Helpu al ni plibonigi %(brand)son", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Sendi sennomajn datumojn pri uzado, kiuj helpos al ni plibonigi %(brand)son. Ĉi tio uzos kuketon.", "I want to help": "Mi volas helpi", "Your homeserver has exceeded its user limit.": "Via hejmservilo atingis sian limon de uzantoj.", "Your homeserver has exceeded one of its resource limits.": "Via hejmservilo atingis iun limon de rimedoj.", @@ -2453,8 +2453,8 @@ "Set password": "Agordi pasvorton", "To return to your account in future you need to set a password": "Por reveni ose al via konto, vi devas agordi pasvorton", "Restart": "Restartigi", - "Upgrade your Riot": "Gradaltigi vian Rioton", - "A new version of Riot is available!": "Nova versio de Riot estas disponebla!", + "Upgrade your %(brand)s": "Gradaltigi vian %(brand)son", + "A new version of %(brand)s is available!": "Nova versio de %(brand)s estas disponebla!", "New version available. Update now.": "Nova versio estas disponebla. Ĝisdatigu nun.", "Emoji picker": "Elektilo de bildsignoj", "Show %(n)s more": "Montri %(n)s pliajn" diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 33443bd5bd..d53679934c 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -214,7 +214,7 @@ "Active call (%(roomName)s)": "Llamada activa (%(roomName)s)", "Add a topic": "Añadir un tema", "No media permissions": "Sin permisos para el medio", - "You may need to manually permit Riot to access your microphone/webcam": "Probablemente necesite dar permisos manualmente a Riot para su micrófono/cámara", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Probablemente necesite dar permisos manualmente a %(brand)s para su micrófono/cámara", "Are you sure you want to leave the room '%(roomName)s'?": "¿Está seguro de que desea abandonar la sala '%(roomName)s'?", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "No se puede conectar al servidor doméstico - compruebe su conexión, asegúrese de que el certificado SSL del servidor es de confiaza, y compruebe que no hay extensiones del navegador bloqueando las peticiones.", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s eliminó el nombre de la sala.", @@ -265,9 +265,9 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s solicitó una conferencia de vozIP.", "Results from DuckDuckGo": "Resultados desde DuckDuckGo", "Return to login screen": "Regresar a la pantalla de inicio de sesión", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot no tiene permiso para enviarte notificaciones - por favor, comprueba los ajustes de tu navegador", - "Riot was not given permission to send notifications - please try again": "No se le dio permiso a Riot para enviar notificaciones - por favor, inténtalo nuevamente", - "riot-web version:": "versión de riot-web:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s no tiene permiso para enviarte notificaciones - por favor, comprueba los ajustes de tu navegador", + "%(brand)s was not given permission to send notifications - please try again": "No se le dio permiso a %(brand)s para enviar notificaciones - por favor, inténtalo nuevamente", + "%(brand)s version:": "versión de %(brand)s:", "Room %(roomId)s not visible": "La sala %(roomId)s no está visible", "Searches DuckDuckGo for results": "Busca resultados en DuckDuckGo", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostrar marcas temporales en formato de 12 horas (ej. 2:30pm)", @@ -400,11 +400,11 @@ "Online": "En línea", "Submit debug logs": "Enviar registros de depuración", "The platform you're on": "La plataforma en la que te encuentras", - "The version of Riot.im": "La versión de Riot.im", + "The version of %(brand)s": "La versión de %(brand)s", "Your language of choice": "El idioma de tu elección", "Your homeserver's URL": "La URL de tu servidor doméstico", "Your identity server's URL": "La URL de tu servidor de identidad", - "The information being sent to us to help make Riot.im better includes:": "La información que se nos envía para ayudar a mejorar Riot.im incluye:", + "The information being sent to us to help make %(brand)s better includes:": "La información que se nos envía para ayudar a mejorar %(brand)s incluye:", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Estés utilizando o no el modo de Texto Enriquecido del Editor de Texto Enriquecido", "Who would you like to add to this community?": "¿A quién te gustaría añadir a esta comunidad?", "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Advertencia: cualquier persona que añadas a una comunidad será públicamente visible a cualquiera que conozca la ID de la comunidad", @@ -412,7 +412,7 @@ "Invite to Community": "Invitar a la Comunidad", "Which rooms would you like to add to this community?": "¿Qué salas te gustaría añadir a esta comunidad?", "Fetching third party location failed": "Falló la obtención de la ubicación de un tercero", - "A new version of Riot is available.": "Una nueva versión de Riot está disponible.", + "A new version of %(brand)s is available.": "Una nueva versión de %(brand)s está disponible.", "I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar", "Send Account Data": "Enviar Datos de la Cuenta", "Advanced notification settings": "Ajustes avanzados de notificaciones", @@ -474,7 +474,7 @@ "Search…": "Buscar…", "You have successfully set a password and an email address!": "¡Has establecido una nueva contraseña y dirección de correo electrónico!", "Remove %(name)s from the directory?": "¿Eliminar a %(name)s del directorio?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot usa muchas características avanzadas del navegador, algunas de las cuales no están disponibles en su navegador actual.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s usa muchas características avanzadas del navegador, algunas de las cuales no están disponibles en su navegador actual.", "Event sent!": "Evento enviado!", "Preparing to send logs": "Preparando para enviar registros", "Unnamed room": "Sala sin nombre", @@ -520,13 +520,13 @@ "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.": "Los registros de depuración contienen datos de uso de la aplicación como nombre de usuario, ID o alias de las salas o grupos que hayas visitado (y nombres de usuario de otros usuarios). No contienen mensajes.", "Unhide Preview": "Mostrar Vista Previa", "Unable to join network": "No se puede unir a la red", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Es posible que los hayas configurado en un cliente que no sea Riot. No puedes ajustarlos en Riot, pero todavía se aplican", - "Sorry, your browser is not able to run Riot.": "¡Lo sentimos! Su navegador no puede ejecutar Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Es posible que los hayas configurado en un cliente que no sea %(brand)s. No puedes ajustarlos en %(brand)s, pero todavía se aplican", + "Sorry, your browser is not able to run %(brand)s.": "¡Lo sentimos! Su navegador no puede ejecutar %(brand)s.", "Messages in group chats": "Mensajes en conversaciones en grupo", "Yesterday": "Ayer", "Error encountered (%(errorDetail)s).": "Error encontrado (%(errorDetail)s).", "Low Priority": "Prioridad Baja", - "Riot does not know how to join a room on this network": "Riot no sabe cómo unirse a una sala en esta red", + "%(brand)s does not know how to join a room on this network": "%(brand)s no sabe cómo unirse a una sala en esta red", "Set Password": "Establecer contraseña", "Off": "Desactivado", "Mentions only": "Solo menciones", @@ -587,7 +587,7 @@ "%(widgetName)s widget added by %(senderName)s": "componente %(widgetName)s añadido por %(senderName)s", "%(widgetName)s widget removed by %(senderName)s": "componente %(widgetName)s eliminado por %(senderName)s", "Your browser does not support the required cryptography extensions": "Su navegador no soporta las extensiones de criptografía requeridas", - "Not a valid Riot keyfile": "No es un archivo de claves de Riot válido", + "Not a valid %(brand)s keyfile": "No es un archivo de claves de %(brand)s válido", "Message Pinning": "Mensajes con chincheta", "Always show encryption icons": "Mostrar siempre iconos de cifrado", "Automatically replace plain text Emoji": "Sustituir automáticamente Emojis de texto", @@ -706,8 +706,8 @@ "Something went wrong when trying to get your communities.": "Algo fue mal cuando se intentó obtener sus comunidades.", "Display your community flair in rooms configured to show it.": "Muestra la insignia de su comunidad en las salas configuradas a tal efecto.", "You're not currently a member of any communities.": "Actualmente no es miembro de una comunidad.", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Por favor, ayude a mejorar Riot.im enviando información anónima de uso. Esto usará una cookie (por favor, vea nuestra Política de cookies).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Por favor, ayude a mejorar Riot.im enviando información anónima de uso. Esto usará una cookie.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Por favor, ayude a mejorar %(brand)s enviando información anónima de uso. Esto usará una cookie (por favor, vea nuestra Política de cookies).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Por favor, ayude a mejorar %(brand)s enviando información anónima de uso. Esto usará una cookie.", "Yes, I want to help!": "Sí, ¡quiero ayudar!", "Unknown Address": "Dirección desconocida", "Delete Widget": "Eliminar Componente", @@ -805,7 +805,7 @@ "Send Logs": "Enviar Registros", "Refresh": "Refrescar", "We encountered an error trying to restore your previous session.": "Encontramos un error al intentar restaurar su sesión anterior.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Si ha usado anteriormente una versión más reciente de Riot, su sesión puede ser incompatible con ésta. Cierre la ventana y vuelva a la versión más reciente.", + "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.": "Si ha usado anteriormente una versión más reciente de %(brand)s, su sesión puede ser incompatible con ésta. Cierre la ventana y vuelva a la versión más reciente.", "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Limpiando el almacenamiento del navegador puede arreglar el problema, pero le desconectará y cualquier historial de conversación cifrado se volverá ilegible.", "Username not available": "Nombre de usuario no disponible", "An error occurred: %(error_string)s": "Ocurrió un error: %(error_string)s", @@ -868,9 +868,9 @@ "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Para continuar usando el servidor doméstico %(homeserverDomain)s debe revisar y estar de acuerdo con nuestros términos y condiciones.", "Review terms and conditions": "Revisar términos y condiciones", "Old cryptography data detected": "Se detectó información de criptografía antigua", - "Data from an older version of Riot 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.": "Se detectó una versión más antigua de Riot. Esto habrá provocado que la criptografía de extremo a extremo funcione incorrectamente en la versión más antigua. Los mensajes cifrados de extremo a extremo intercambiados recientemente mientras usaba la versión más antigua puede que no sean descifrables con esta versión. Esto también puede hacer que fallen con la más reciente. Si experimenta problemas, desconecte y vuelva a ingresar. Para conservar el historial de mensajes, exporte y vuelva a importar sus claves.", + "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.": "Se detectó una versión más antigua de %(brand)s. Esto habrá provocado que la criptografía de extremo a extremo funcione incorrectamente en la versión más antigua. Los mensajes cifrados de extremo a extremo intercambiados recientemente mientras usaba la versión más antigua puede que no sean descifrables con esta versión. Esto también puede hacer que fallen con la más reciente. Si experimenta problemas, desconecte y vuelva a ingresar. Para conservar el historial de mensajes, exporte y vuelva a importar sus claves.", "Your Communities": "Sus Comunidades", - "Did you know: you can use communities to filter your Riot.im experience!": "Sabía que: puede usar comunidades para filtrar su experiencia con Riot.im", + "Did you know: you can use communities to filter your %(brand)s experience!": "Sabía que: puede usar comunidades para filtrar su experiencia con %(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 configurar un filtro, arrastre un avatar de comunidad sobre el panel de filtro en la parte izquierda de la pantalla. Puede pulsar sobre un avatar en el panel de filtro en cualquier momento para ver solo las salas y personas asociadas con esa comunidad.", "Error whilst fetching joined communities": "Error al recuperar las comunidades a las que estás unido", "Create a new community": "Crear una comunidad nueva", @@ -888,7 +888,7 @@ "Light theme": "Tema claro", "Dark theme": "Tema oscuro", "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.": "Si has enviado un error a GitHub, estos registros pueden ayudar a localizar el problema. Contienen información de uso de la aplicación, incluido el nombre de usuario, IDs o alias de las salas o grupos visitados y los nombres de otros usuarios. No contienen mensajes.", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot recopila análisis de estadísticas anónimas para permitirnos mejorar la aplicación.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s recopila análisis de estadísticas anónimas para permitirnos mejorar la aplicación.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "La privacidad es importante, por lo que no se recopila información personal o identificable en los análisis de estadísticas.", "Learn more about how we use analytics.": "Más información sobre el uso de los análisis de estadísticas.", "Check for update": "Comprobar actualizaciones", @@ -944,8 +944,8 @@ "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s añadió %(addedAddresses)s y eliminó %(removedAddresses)s como direcciones para esta sala.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s estableció la dirección principal para esta sala como %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s eliminó la dirección principal para esta sala.", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot ahora utiliza de 3 a 5 veces menos memoria, porque solo carga información sobre otros usuarios cuando es necesario. Por favor, ¡aguarda mientras volvemos a sincronizar con el servidor!", - "Updating Riot": "Actualizando Riot", + "%(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!": "%(brand)s ahora utiliza de 3 a 5 veces menos memoria, porque solo carga información sobre otros usuarios cuando es necesario. Por favor, ¡aguarda mientras volvemos a sincronizar con el servidor!", + "Updating %(brand)s": "Actualizando %(brand)s", "Room version:": "Versión de la sala:", "Developer options": "Opciones de desarrollador", "Room version": "Versión de la sala", @@ -1120,9 +1120,9 @@ "Account management": "Gestión de la cuenta", "Deactivating your account is a permanent action - be careful!": "Desactivar tu cuenta es permanente - ¡Cuidado!", "Credits": "Créditos", - "For help with using Riot, click here.": "Si necesitas ayuda usando Riot, haz clic aquí.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Si necesitas ayuda usando Riot, haz clic aquí o abre un chat con nuestro bot usando el botón de abajo.", - "Chat with Riot Bot": "Hablar con Riot Bot", + "For help with using %(brand)s, click here.": "Si necesitas ayuda usando %(brand)s, haz clic aquí.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Si necesitas ayuda usando %(brand)s, haz clic aquí o abre un chat con nuestro bot usando el botón de abajo.", + "Chat with %(brand)s Bot": "Hablar con %(brand)s Bot", "Help & About": "Ayuda & Acerca de", "Bug reporting": "Reportar error", "FAQ": "FAQ", @@ -1160,8 +1160,8 @@ "Invite anyway": "Invitar igualmente", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Antes de enviar logs, debes crear un GitHub issue para describir el problema.", "Unable to load commit detail: %(msg)s": "No se pudo cargar el detalle del commit: %(msg)s", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Para evitar perder tu historial de chat, debes exportar las claves de la sala antes de salir. Debes volver a la versión actual de Riot para esto", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Has usado anteriormente una versión reciente de Riot en %(host)s. Para usar esta versión otra vez con cifrado de extremo a extremo, necesitarás salir y entrar otra vez. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Para evitar perder tu historial de chat, debes exportar las claves de la sala antes de salir. Debes volver a la versión actual de %(brand)s para esto", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Has usado anteriormente una versión reciente de %(brand)s en %(host)s. Para usar esta versión otra vez con cifrado de extremo a extremo, necesitarás salir y entrar otra vez. ", "Incompatible Database": "Base de datos incompatible", "Continue With Encryption Disabled": "Seguir con cifrado desactivado", "Use Legacy Verification (for older clients)": "Usar verificación obsoleta (para clientes antiguos)", @@ -1179,7 +1179,7 @@ "Use a longer keyboard pattern with more turns": "Usa un patrón de tecleo largo con más vueltas", "Enable Community Filter Panel": "Habilitar el Panel de Filtro de Comunidad", "Verify this user by confirming the following emoji appear on their screen.": "Verifica este usuario confirmando que los siguientes emojis aparecen en su pantalla.", - "Your Riot is misconfigured": "Tu Riot tiene un error de configuración", + "Your %(brand)s is misconfigured": "Tu %(brand)s tiene un error de configuración", "Whether or not you're logged in (we don't record your username)": "Hayas o no iniciado sesión (no guardamos tu nombre de usuario)", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Uses o no los 'breadcrumbs' (iconos sobre la lista de salas)", "A conference call could not be started because the integrations server is not available": "No se pudo iniciar la conferencia porque el servidor de integraciones no está disponible", @@ -1203,7 +1203,7 @@ "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s ha revocado la invitación para que %(targetDisplayName)s se una a la sala.", "Cannot reach homeserver": "No se puede conectar con el servidor", "Ensure you have a stable internet connection, or get in touch with the server admin": "Asegúrate de tener conexión a internet, o contacta con el administrador del servidor", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Solicita al administrador de Riot que compruebe si hay entradas duplicadas o erróneas en tu configuración.", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Solicita al administrador de %(brand)s que compruebe si hay entradas duplicadas o erróneas en tu configuración.", "Cannot reach identity server": "No se puede conectar con el servidor de identidad", "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.": "Te puedes registrar, pero algunas funcionalidades no estarán disponibles hasta que se pueda conectar con el servidor de identidad. Si continúas viendo este aviso, comprueba tu configuración o contacta con el administrador del servidor.", "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.": "Puedes cambiar tu contraseña, pero algunas funcionalidades no estarán disponibles hasta que el servidor de identidad esté disponible. Si continúas viendo este aviso, comprueba tu configuración o contacta con el administrador del servidor.", @@ -1339,8 +1339,8 @@ "You added a new session '%(displayName)s', which is requesting encryption keys.": "Has añadido una nueva sesión '%(displayName)s', la cual está pidiendo claves de encriptación.", "Your unverified session '%(displayName)s' is requesting encryption keys.": "Tu sesión no verificada '%(displayName)s' esta pidiendo claves de encriptación.", "Loading session info...": "Cargando información de sesión...", - "You've previously used Riot 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, Riot needs to resync your account.": "Has usado Riot anteriormente en %(host)s con carga diferida de usuarios habilitada. En esta versión la carga diferida está deshabilitada. Como el caché local no es compatible entre estas dos configuraciones, Riot necesita resincronizar tu cuenta.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Si la otra versión de Riot esta todavía abierta en otra pestaña, por favor, ciérrala, ya que usar Riot en el mismo host con la opción de carga diferida habilitada y deshabilitada simultáneamente causará problemas.", + "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.": "Has usado %(brand)s anteriormente en %(host)s con carga diferida de usuarios habilitada. En esta versión la carga diferida está deshabilitada. Como el caché local no es compatible entre estas dos configuraciones, %(brand)s necesita resincronizar tu cuenta.", + "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.": "Si la otra versión de %(brand)s esta todavía abierta en otra pestaña, por favor, ciérrala, ya que usar %(brand)s en el mismo host con la opción de carga diferida habilitada y deshabilitada simultáneamente causará problemas.", "Incompatible local cache": "Caché local incompatible", "Clear cache and resync": "Limpiar la caché y resincronizar", "I don't want my encrypted messages": "No quiero mis mensajes cifrados", @@ -1363,7 +1363,7 @@ "Upgrade private room": "Actualizar sala privada", "Upgrade public room": "Actualizar sala pública", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Actualizar una sala es una acción avanzada y es normalmente recomendada cuando una sala es inestable debido a fallos, funcionalidades no disponibles y vulnerabilidades.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Esto solo afecta a como la sala es procesada en el servidor. Si estás teniendo problemas con tu Riot, por favorreporta un fallo.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Esto solo afecta a como la sala es procesada en el servidor. Si estás teniendo problemas con tu %(brand)s, por favorreporta un fallo.", "You'll upgrade this room from to .": "Actualizarás esta sala de a .", "Sign out and remove encryption keys?": "¿Salir y borrar las claves de encriptación?", "A username can only contain lower case letters, numbers and '=_-./'": "Un nombre de usuario solo puede contener letras minúsculas, números y '=_-./'", @@ -1422,9 +1422,9 @@ "Personal ban list": "Lista de bloqueo personal", "Server or user ID to ignore": "Servidor o ID de usuario a ignorar", "eg: @bot:* or example.org": "p. ej.: @bot:* o ejemplo.org", - "The version of Riot": "La version de Riot", + "The version of %(brand)s": "La version de %(brand)s", "Your user agent": "Tu agente de usuario", - "The information being sent to us to help make Riot better includes:": "La información que se nos envía para ayudarnos a mejorar Riot incluye:", + "The information being sent to us to help make %(brand)s better includes:": "La información que se nos envía para ayudarnos a mejorar %(brand)s incluye:", "If you cancel now, you won't complete verifying the other user.": "Si cancelas ahora, no completarás la verificación del otro usuario.", "If you cancel now, you won't complete verifying your other session.": "Si cancelas ahora, no completarás la verificación de tu otra sesión.", "If you cancel now, you won't complete your secret storage operation.": "Si cancelas ahora, no completarás tu operación de almacén secreto.", @@ -1546,8 +1546,8 @@ "Confirm adding this phone number by using Single Sign On to prove your identity.": "Confirme la adición de este número de teléfono usando el Registro Único para probar su identidad...", "Confirm adding phone number": "Confirmar la adición del número de teléfono", "Click the button below to confirm adding this phone number.": "Haga clic en el botón de abajo para confirmar la adición de este número de teléfono.", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Si estés usando Riot en un dispositivo donde una pantalla táctil es el principal mecanismo de entrada", - "Whether you're using Riot as an installed Progressive Web App": "Si estás usando Riot como una Aplicación Web Progresiva instalada", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Si estés usando %(brand)s en un dispositivo donde una pantalla táctil es el principal mecanismo de entrada", + "Whether you're using %(brand)s as an installed Progressive Web App": "Si estás usando %(brand)s como una Aplicación Web Progresiva instalada", "Review Sessions": "Sesiones de revisión", "If you cancel now, you won't complete your operation.": "Si cancela ahora, no completará la operación.", "Review where you’re logged in": "Revise dónde hizo su registro", @@ -1633,8 +1633,8 @@ "Securely cache encrypted messages locally for them to appear in search results, using ": "Almacenar localmente, de manera segura, los mensajes cifrados localmente para que aparezcan en los resultados de la búsqueda, utilizando ", " to store messages from ": " para almacenar mensajes de ", "Securely cache encrypted messages locally for them to appear in search results.": "Almacenar localmente, de manera segura, a los mensajes cifrados localmente para que aparezcan en los resultados de búsqueda.", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "A Riot le faltan algunos componentes necesarios para el almacenamiento seguro de mensajes cifrados a nivel local. Si quieres experimentar con esta característica, construye un Escritorio Riot personalizado con componentes de búsqueda añadidos.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot no puede guardar de forma segura en la memoria caché a mensajes encriptados localmente, mientras se ejecuta en un navegador web. Use Riot Desktop para que los mensajes encriptados aparezcan en los resultados de la búsqueda.", + "%(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)s le faltan algunos componentes necesarios para el almacenamiento seguro de mensajes cifrados a nivel local. Si quieres experimentar con esta característica, construye un Escritorio %(brand)s personalizado con componentes de búsqueda añadidos.", + "%(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 no puede guardar de forma segura en la memoria caché a mensajes encriptados localmente, mientras se ejecuta en un navegador web. Use %(brand)s Desktop para que los mensajes encriptados aparezcan en los resultados de la búsqueda.", "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 sesión no ha creado una copia de seguridad de tus llaves, pero tienes una copia de seguridad existente de la que puedes restaurar y añadir para proceder.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Conecte esta sesión a la copia de seguridad de las claves antes de firmar y así evitar perder las claves que sólo existen en esta sesión.", "Connect this session to Key Backup": "Conecte esta sesión a la copia de respaldo de tu clave", @@ -1674,7 +1674,7 @@ "Something went wrong. Please try again or view your console for hints.": "Algo salió mal. Por favor, inténtalo de nuevo o mira tu consola para encontrar pistas.", "Please try again or view your console for hints.": "Por favor, inténtalo de nuevo o mira tu consola para encontrar pistas.", "Ban list rules - %(roomName)s": "Reglas de la lista negra - %(roomName)s", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Añade los usuarios y servidores que quieras ignorar aquí. Usa asteriscos para que Riot coincida cualquier conjunto de caracteres. Por ejemplo, @bot:* ignoraría a todos los usuarios,en cualquier servidor, que tengan el nombre 'bot' .", + "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ñade los usuarios y servidores que quieras ignorar aquí. Usa asteriscos para que %(brand)s coincida cualquier conjunto de caracteres. Por ejemplo, @bot:* ignoraría a todos los usuarios,en cualquier servidor, que tengan el nombre 'bot' .", "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.": "Ignorar usuarios se hace mediante listas negras que contienen reglas sobre a quién bloquear. Suscribirse a una lista negra significa que los usuarios/servidores bloqueados serán invisibles para tí.", "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.": "Tu lista negra personal contiene todos los usuarios/servidores de los que no quieres ver mensajes. Después de ignorar su primer usuario/servidor, una nueva sala aparecerá en su lista de salas llamada \"Mi lista negra (de bloqueo)\" - permanezca en esta sala para mantener la lista de prohibición en efecto.", "Subscribed lists": "Listados a que subscribiste", @@ -1803,7 +1803,7 @@ "Integrations are disabled": "Las integraciones están deshabilitadas", "Enable 'Manage Integrations' in Settings to do this.": "Habilita 'Gestionar Integraciones' en Ajustes para hacer esto.", "Integrations not allowed": "Integraciones no están permitidas", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Su Riot no le permite utilizar un \"Administrador de Integración\" para hacer esto. Por favor, contacte con un administrador.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Su %(brand)s no le permite utilizar un \"Administrador de Integración\" para hacer esto. Por favor, contacte con un administrador.", "Failed to invite the following users to chat: %(csvUsers)s": "Error invitando a los siguientes usuarios al chat: %(csvUsers)s", "We couldn't create your DM. Please check the users you want to invite and try again.": "No pudimos crear tu Mensaje Directo Por favor, marcar los usuarios que quieres invitar e inténtalo de nuevo.", "Start a conversation with someone using their name, username (like ) or email address.": "Iniciar una conversación con alguien usando su nombre, nombre de usuario (como ) o dirección de correo electrónico.", @@ -1812,7 +1812,7 @@ "a new cross-signing key signature": "una nueva firma de código de firma cruzada", "a device cross-signing signature": "una firma para la firma cruzada de dispositivos", "a key signature": "un firma de clave", - "Riot encountered an error during upload of:": "Riot encontró un error durante la carga de:", + "%(brand)s encountered an error during upload of:": "%(brand)s encontró un error durante la carga de:", "End": "Fin", "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.": "Una vez habilitado, el cifrado de una sala no puede deshabilitarse. Los mensajes enviados a una sala cifrada no pueden ser vistos por el servidor, sólo lo verán los participantes de la sala. Habilitar el cifrado puede hacer que muchos bots y bridges no funcionen correctamente. Aprende más de cifrado", "Joining room …": "Uniéndose a sala …", @@ -1872,10 +1872,10 @@ "Loading room preview": "Cargando vista previa de la sala", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Un código de error (%(errcode)s) fue devuelto al tratar de validar su invitación. Podrías intentar pasar esta información a un administrador de la sala.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Esta invitación a la sala %(roomName)s fue enviada a %(email)s que no está asociada a su cuenta", - "Link this email with your account in Settings to receive invites directly in Riot.": "Para recibir invitaciones directamente en Riot, en Configuración, debes vincular este correo electrónico con tu cuenta.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Para recibir invitaciones directamente en %(brand)s, en Configuración, debes vincular este correo electrónico con tu cuenta.", "This invite to %(roomName)s was sent to %(email)s": "Esta invitación a %(roomName)s fue enviada a %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Utilice un servidor de identidad en Configuración para recibir invitaciones directamente en Riot.", - "Share this email in Settings to receive invites directly in Riot.": "Comparte este correo electrónico en Configuración para recibir invitaciones directamente en Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Utilice un servidor de identidad en Configuración para recibir invitaciones directamente en %(brand)s.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Comparte este correo electrónico en Configuración para recibir invitaciones directamente en %(brand)s.", " wants to chat": " quiere chatear", "Start chatting": "Empieza a chatear", "Reject & Ignore user": "Rechazar e ignorar usuario", @@ -1939,7 +1939,7 @@ "%(role)s in %(roomName)s": "%(role)s en %(roomName)s", "This client does not support end-to-end encryption.": "Este cliente no es compatible con el cifrado de extremo a extremo.", "Security": "Seguridad", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "La sesión que está tratando de verificar no soporta el escaneo de un código QR o la verificación mediante emoji, que es lo que soporta Riot. Inténtalo con un cliente diferente.", + "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.": "La sesión que está tratando de verificar no soporta el escaneo de un código QR o la verificación mediante emoji, que es lo que soporta %(brand)s. Inténtalo con un cliente diferente.", "Verify by scanning": "Verificar mediante escaneo", "Ask %(displayName)s to scan your code:": "Pídele a %(displayName)s que escanee tu código:", "If you can't scan the code above, verify by comparing unique emoji.": "Si no puedes escanear el código de arriba, verifica comparando emoji únicos.", @@ -2008,7 +2008,7 @@ "Your avatar URL": "La URL de su avatar", "Your user ID": "Su identificación (ID) de usuario", "Your theme": "Su tema", - "Riot URL": "URL de Riot", + "%(brand)s URL": "URL de %(brand)s", "Room ID": "Identidad (ID) de la sala", "Widget ID": "Identificación (ID) de widget", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Usar este widget puede resultar en compartir datos con %(widgetDomain)s y su Administrador de Integración.", @@ -2152,8 +2152,8 @@ "Filter rooms…": "Filtrar salas…", "Self-verification request": "Solicitud de auto-verificación", "%(creator)s created and configured the room.": "Sala creada y configurada por %(creator)s.", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot no logró obtener la lista de protocolo del servidor doméstico. El servidor doméstico puede ser demasiado viejo para admitir redes de terceros.", - "Riot failed to get the public room list.": "Riot no logró obtener la lista de salas públicas.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s no logró obtener la lista de protocolo del servidor doméstico. El servidor doméstico puede ser demasiado viejo para admitir redes de terceros.", + "%(brand)s failed to get the public room list.": "%(brand)s no logró obtener la lista de salas públicas.", "The homeserver may be unavailable or overloaded.": "Posiblemente el servidor de doméstico no esté disponible o esté sobrecargado.", "Preview": "Vista previa", "View": "Vista", @@ -2192,15 +2192,15 @@ "This account has been deactivated.": "Esta cuenta ha sido desactivada.", "Room name or address": "Nombre o dirección de la sala", "Address (optional)": "Dirección (opcional)", - "Help us improve Riot": "Ayúdanos a mejorar Riot", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Enviar información anónima de uso nos ayudaría bastante a mejorar Riot. Esto cuenta como utilizar una cookie.", + "Help us improve %(brand)s": "Ayúdanos a mejorar %(brand)s", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Enviar información anónima de uso nos ayudaría bastante a mejorar %(brand)s. Esto cuenta como utilizar una cookie.", "I want to help": "Quiero ayudar", "Ok": "Ok", "Set password": "Establecer contraseña", "To return to your account in future you need to set a password": "Para poder regresar a tu cuenta en un futuro necesitas establecer una contraseña", "Restart": "Reiniciar", - "Upgrade your Riot": "Actualiza tu Riot", - "A new version of Riot is available!": "¡Una nueva versión de Riot se encuentra disponible!", + "Upgrade your %(brand)s": "Actualiza tu %(brand)s", + "A new version of %(brand)s is available!": "¡Una nueva versión de %(brand)s se encuentra disponible!", "You joined the call": "Te has unido a la llamada", "%(senderName)s joined the call": "%(senderName)s se ha unido a la llamada", "Call in progress": "Llamada en progreso", diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 7afcbcaf58..30a7b94fb5 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -5,7 +5,7 @@ "Add Email Address": "Lisa e-posti aadress", "Failed to verify email address: make sure you clicked the link in the email": "E-posti aadressi kontrollimine ei õnnestunud: palun vaata, et sa kindlasti klõpsisid saabunud kirjas olnud viidet", "The platform you're on": "Sinu kasutatav arvutisüsteem", - "The version of Riot": "Riot'i versioon", + "The version of %(brand)s": "%(brand)s'i versioon", "Whether or not you're logged in (we don't record your username)": "Kas sa oled sisseloginud või mitte (me ei salvesta sinu kasutajanime)", "Your language of choice": "Sinu keelevalik", "Your homeserver's URL": "Sinu koduserveri aadress", @@ -13,7 +13,7 @@ "Your user agent": "Sinu kasutajaagent", "Your device resolution": "Sinu seadme resolutsioon", "Analytics": "Analüütika", - "The information being sent to us to help make Riot better includes:": "Riot'i arendamiseks meile saadetava info hulgas on:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s'i arendamiseks meile saadetava info hulgas on:", "Error": "Viga", "Unable to load! Check your network connectivity and try again.": "Laadimine ei õnnestunud! Kontrolli oma võrguühendust ja proovi uuesti.", "Dismiss": "Loobu", @@ -63,8 +63,8 @@ "Verify this session by completing one of the following:": "Verifitseeri see sessioon täites ühe alljärgnevatest:", "Verify this user by confirming the following emoji appear on their screen.": "Verifitseeri see kasutaja tehes kindlaks et järgnev emoji kuvatakse tema ekraanil.", "Verify this session by confirming the following number appears on its screen.": "Verifitseeri see sessioon tehes kindlaks, et järgnev number kuvatakse tema ekraanil.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Riot'i kasutamisega seotud abiteabe otsimiseks klõpsi seda viidet või vajutades järgnevat nuppu alusta vestlust meie robotiga.", - "Chat with Riot Bot": "Vestle Riot'i robotiga", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "%(brand)s'i kasutamisega seotud abiteabe otsimiseks klõpsi seda viidet või vajutades järgnevat nuppu alusta vestlust meie robotiga.", + "Chat with %(brand)s Bot": "Vestle %(brand)s'i robotiga", "Start a chat": "Alusta vestlust", "Invite to this room": "Kutsu siia jututuppa", "Voice call": "Häälkõne", @@ -267,7 +267,7 @@ "Try out new ways to ignore people (experimental)": "Proovi uusi kasutajate eiramise viise (katseline)", "Uploading report": "Laen üles veakirjeldust", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Kui soovid teatada Matrix'iga seotud turvaveast, siis palun tutvu enne Matrix.org Turvalisuse avalikustamise juhendiga.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Lisa siia kasutajad ja serverid keda soovid eirata. Kasuta tärne kõikide märkide tähistamiseks. Näiteks @bot:* eiraks kõiki kasutajaid kõikidest serveritest, kus nimi on \"bot\".", + "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.": "Lisa siia kasutajad ja serverid keda soovid eirata. Kasuta tärne kõikide märkide tähistamiseks. Näiteks @bot:* eiraks kõiki kasutajaid kõikidest serveritest, kus nimi on \"bot\".", "Server or user ID to ignore": "Serverid või kasutajate tunnused, mida soovid eirata", "Ignore": "Eira", "If this isn't what you want, please use a different tool to ignore users.": "Kui tulemus pole see mida soovisid, siis pruugi muud vahendit kasutajate eiramiseks.", @@ -390,15 +390,15 @@ "Visibility in Room List": "Nähtavus jututubade loendis", "Visible to everyone": "Nähtav kõigile", "Something went wrong when trying to get your communities.": "Sinu kogukondade laadimisel läks midagi nüüd viltu.", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Palun aita Riot'it paremaks teha saates arendajatele anonüümset kasutusteavet. See eeldab küpsise kasutamist (palun vaata meie küpsiste kasutuse reegleid).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Palun aita Riot'it paremaks teha saates anonüümset kasutusteavet. See eeldab küpsise kasutamist.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Palun aita %(brand)s'it paremaks teha saates arendajatele anonüümset kasutusteavet. See eeldab küpsise kasutamist (palun vaata meie küpsiste kasutuse reegleid).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Palun aita %(brand)s'it paremaks teha saates anonüümset kasutusteavet. See eeldab küpsise kasutamist.", "Yes, I want to help!": "Jah, ma soovin aidata!", "You are not receiving desktop notifications": "Sa hetkel ei saa oma arvuti töölauakeskkonna teavitusi", "Enable them now": "Võta need nüüd kasutusele", "What's New": "Meie uudised", "Update": "Uuenda", "What's new?": "Mida on meil uut?", - "A new version of Riot is available.": "Uus Riot'i versioon on saadaval.", + "A new version of %(brand)s is available.": "Uus %(brand)s'i versioon on saadaval.", "Your server": "Sinu server", "Matrix": "Matrix", "Add a new server": "Lisa uus server", @@ -500,17 +500,17 @@ "Trust": "Usalda", "%(name)s is requesting verification": "%(name)s soovib verifitseerimist", "Securely cache encrypted messages locally for them to appear in search results.": "Turvaliselt puhverda krüptitud sõnumid kohalikku arvutisse ja võimalda kasutada neid otsingus.", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot'is on puudu need komponendid, mis võimaldavad otsida kohalikest turvaliselt puhverdatud krüptitud sõnumitest. Kui sa tahaksid sellist funktsionaalsust katsetada, siis pead kompileerima Riot'i variandi, kus need komponendid on lisatud.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot ei saa veebibrauserist käivitades otsida turvaliselt kohalikult puhverdatud krüptitud sõnumite hulgast. Selliste sõnumite hulgast otsimiseks kasuta Riot'i töölauaversiooni.", + "%(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 on puudu need komponendid, mis võimaldavad otsida kohalikest turvaliselt puhverdatud krüptitud sõnumitest. Kui sa tahaksid sellist funktsionaalsust katsetada, siis pead kompileerima %(brand)s'i variandi, kus need komponendid on lisatud.", + "%(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 ei saa veebibrauserist käivitades otsida turvaliselt kohalikult puhverdatud krüptitud sõnumite hulgast. Selliste sõnumite hulgast otsimiseks kasuta %(brand)s'i töölauaversiooni.", "Message search": "Otsing sõnumite seast", "Search…": "Otsi…", "Cancel search": "Tühista otsing", "Search failed": "Otsing ebaõnnestus", "Server may be unavailable, overloaded, or search timed out :(": "Server kas pole leitav, on üle koormatud või otsing aegus :(", "No more results": "Rohkem otsingutulemusi pole", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Otsingus kasutamiseks Riot puhverdab turvaliselt kohalikku arvutisse krüptitud sõnumeid:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot'il puudub luba sulle teavituste kuvamiseks - palun kontrolli oma brauseri seadistusi", - "Riot was not given permission to send notifications - please try again": "Riot ei saanud luba teavituste kuvamiseks - palun proovi uuesti", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "Otsingus kasutamiseks %(brand)s puhverdab turvaliselt kohalikku arvutisse krüptitud sõnumeid:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s'il puudub luba sulle teavituste kuvamiseks - palun kontrolli oma brauseri seadistusi", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s ei saanud luba teavituste kuvamiseks - palun proovi uuesti", "Room Notification": "Jututoa teavitus", "Displays information about a user": "Näitab teavet kasutaja kohta", "This homeserver has hit its Monthly Active User limit.": "See koduserver on saavutanud igakuise aktiivsete kasutajate piiri.", @@ -694,11 +694,11 @@ "Where you’re logged in": "Kus sa oled võrku loginud", "Manage the names of and sign out of your sessions below or verify them in your User Profile.": "Halda alljärgnevas oma sessioonide nimesid, logi neist välja või verifitseeri neid oma kasutajaprofiilis.", "A session's public name is visible to people you communicate with": "Sessiooni avalik nimi on nähtav neile, kellega sa suhtled", - "Riot collects anonymous analytics to allow us to improve the application.": "Võimaldamaks meil rakendust parandada kogub Riot anonüümset analüütikat.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "Võimaldamaks meil rakendust parandada kogub %(brand)s anonüümset analüütikat.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privaatsus on meile oluline ning seega me ei kogu ei isiklikke ega isikustatavaid andmeid.", "Learn more about how we use analytics.": "Loe lisaks kuidas me kasutama analüütikat.", "No media permissions": "Meediaõigused puuduvad", - "You may need to manually permit Riot to access your microphone/webcam": "Sa võib-olla pead andma Riot'ile loa mikrofoni ja veebikaamera kasutamiseks", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Sa võib-olla pead andma %(brand)s'ile loa mikrofoni ja veebikaamera kasutamiseks", "Missing media permissions, click the button below to request.": "Meediaga seotud õigused puuduvad. Nende nõutamiseks klõpsi järgnevat nuppu.", "Request media permissions": "Nõuta meediaõigusi", "Frequently Used": "Enamkasutatud", @@ -717,7 +717,7 @@ "Your avatar URL": "Sinu avatari aadress", "Your user ID": "Sinu kasutajatunnus", "Your theme": "Sinu teema", - "Riot URL": "Riot'i aadress", + "%(brand)s URL": "%(brand)s'i aadress", "Room ID": "Jututoa tunnus", "Widget ID": "Vidina tunnus", "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s muutis oma kuvatava nime %(displayName)s-ks.", @@ -730,7 +730,7 @@ "Dark theme": "Tume teema", "%(name)s (%(userId)s)": "%(name)s (%(userId)s)", "Your browser does not support the required cryptography extensions": "Sinu brauser ei toeta vajalikke krüptoteeke", - "Not a valid Riot keyfile": "See ei ole sobilik võtmefail Riot'i jaoks", + "Not a valid %(brand)s keyfile": "See ei ole sobilik võtmefail %(brand)s'i jaoks", "Authentication check failed: incorrect password?": "Autentimine ebaõnnestus: kas salasõna pole õige?", "Unrecognised address": "Tundmatu aadress", "You do not have permission to invite people to this room.": "Sul pole õigusi siia jututuppa osalejate kutsumiseks.", @@ -1009,7 +1009,7 @@ "Registration Successful": "Registreerimine õnnestus", "Create your account": "Loo endale konto", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Kinnita oma isikusamasust verifitseerides seda sisselogimissessiooni mõnest oma muust sessioonist. Sellega tagad ka ligipääsu krüptitud sõnumitele.", - "This requires the latest Riot on your other devices:": "Selleks on sul vaja muudes seadmetes kõige uuemat Riot'i versiooni:", + "This requires the latest %(brand)s on your other devices:": "Selleks on sul vaja muudes seadmetes kõige uuemat %(brand)s'i versiooni:", "You're signed out": "Sa oled loginud välja", "Clear personal data": "Kustuta privaatsed andmed", "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.": "Hoiatus: Sinu privaatsed andmed (sealhulgas krüptimisvõtmed) on jätkuvalt salvestatud selles sessioonis. Eemalda nad, kui oled lõpetanud selle sessiooni kasutamise või soovid sisse logida muu kasutajakontoga.", @@ -1032,8 +1032,8 @@ "Your Communities": "Sinu kogukonnad", "Error whilst fetching joined communities": "Viga nende kogukondade laadimisel, millega sa oled liitunud", "You have no visible notifications": "Sul ei ole nähtavaid teavitusi", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot'il ei õnnestunud koduserverist laadida toetatud protokollide loendit. Toetamaks kolmandate osapoolte võrke võib koduserver olla liiga vana.", - "Riot failed to get the public room list.": "Riot'il ei õnnestunud laadida avalike jututubade loendit.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s'il ei õnnestunud koduserverist laadida toetatud protokollide loendit. Toetamaks kolmandate osapoolte võrke võib koduserver olla liiga vana.", + "%(brand)s failed to get the public room list.": "%(brand)s'il ei õnnestunud laadida avalike jututubade loendit.", "The homeserver may be unavailable or overloaded.": "Koduserver pole kas saadaval või on üle koormatud.", "Room not found": "Jututuba ei leidunud", "Preview": "Eelvaade", @@ -1134,10 +1134,10 @@ "You can still join it because this is a public room.": "Kuna tegemist on avaliku jututoaga, siis võid ikkagi liituda.", "Join the discussion": "Liitu vestlusega", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "See kutse jututuppa %(roomName)s saadeti e-posti aadressile %(email)s, mis ei ole seotud sinu kontoga", - "Link this email with your account in Settings to receive invites directly in Riot.": "Selleks et saada kutseid otse Riot'isse, seosta see e-posti aadress seadete all oma kontoga.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Selleks et saada kutseid otse %(brand)s'isse, seosta see e-posti aadress seadete all oma kontoga.", "This invite to %(roomName)s was sent to %(email)s": "Kutse %(roomName)s jututuppa saadeti %(email)s e-posti aadressile", - "Use an identity server in Settings to receive invites directly in Riot.": "Selleks et saada kutseid otse Riot'isse peab seadistustes olema määratud isikutuvastusserver.", - "Share this email in Settings to receive invites directly in Riot.": "Selleks, et saada kutseid otse Riot'isse, jaga oma seadetes seda e-posti aadressi.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Selleks et saada kutseid otse %(brand)s'isse peab seadistustes olema määratud isikutuvastusserver.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Selleks, et saada kutseid otse %(brand)s'isse, jaga oma seadetes seda e-posti aadressi.", "Start chatting": "Alusta vestlust", "Do you want to join %(roomName)s?": "Kas sa soovid liitud jututoaga %(roomName)s?", " invited you": " kutsus sind", @@ -1255,8 +1255,8 @@ "Loading session info...": "Laen sessiooniteavet…", "Encryption key request": "Krüptimisvõtmete päring", "Upload completed": "Üleslaadimine valmis", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot kasutab varasemaga võrreldes 3-5 korda vähem mälu, sest laeb teavet kasutajate kohta vaid siis, kui vaja. Palun oota hetke, kuni sünkroniseerime andmeid serveriga!", - "Updating Riot": "Uuenda Riot'it", + "%(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!": "%(brand)s kasutab varasemaga võrreldes 3-5 korda vähem mälu, sest laeb teavet kasutajate kohta vaid siis, kui vaja. Palun oota hetke, kuni sünkroniseerime andmeid serveriga!", + "Updating %(brand)s": "Uuenda %(brand)s'it", "I don't want my encrypted messages": "Ma ei soovi oma krüptitud sõnumeid", "Manually export keys": "Ekspordi võtmed käsitsi", "You'll lose access to your encrypted messages": "Sa kaotad ligipääsu oma krüptitud sõnumitele", @@ -1282,7 +1282,7 @@ "Subscribe": "Telli", "Start automatically after system login": "Käivita automaatselt peale arvutisse sisselogimist", "Always show the window menu bar": "Näita alati aknas menüüriba", - "Show tray icon and minimize window to it on close": "Näita süsteemisalve ikooni ja Rioti'i akna sulgemisel minimeeri ta salve", + "Show tray icon and minimize window to it on close": "Näita süsteemisalve ikooni ja %(brand)si'i akna sulgemisel minimeeri ta salve", "Preferences": "Eelistused", "Room list": "Jututubade loend", "Timeline": "Ajajoon", @@ -1330,8 +1330,8 @@ "Find other public servers or use a custom server": "Otsi muid avalikke Matrix'i servereid või kasuta enda määratud serverit", "Sign in to your Matrix account on %(serverName)s": "Logi sisse on Matrix'i kontole %(serverName)s serveris", "Sign in to your Matrix account on ": "Logi sisse on Matrix'i kontole serveris", - "Sorry, your browser is not able to run Riot.": "Vabandust, aga Riot ei toimi sinu brauseris.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot kasutab mitmeid uusi brauseri-põhiseid tehnoloogiaid ning mitmed neist kas pole veel olemas või on lahendatud sinu brauseris katselisena.", + "Sorry, your browser is not able to run %(brand)s.": "Vabandust, aga %(brand)s ei toimi sinu brauseris.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s kasutab mitmeid uusi brauseri-põhiseid tehnoloogiaid ning mitmed neist kas pole veel olemas või on lahendatud sinu brauseris katselisena.", "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!": "Sinu praeguse brauseriga meie rakenduse välimus ja toimivus võivad olla täitsa valed ning mõni funktsionaalsus ei pruugi toimida üldse. Kui soovid katsetada, siis loomulikult võid jätkata, kuid erinevate tekkivate vigadega pead ise hakkama saama!", "Fetching third party location failed": "Kolmanda osapoole asukoha tuvastamine ei õnnestunud", "Unable to look up room ID from server": "Jututoa tunnuse otsimine serverist ei õnnestunud", @@ -1357,7 +1357,7 @@ "Jump to oldest unread message": "Mine vanima lugemata sõnumi juurde", "Upload a file": "Lae fail üles", "Read Marker lifetime (ms)": "Lugemise markeri iga (ms)", - "Read Marker off-screen lifetime (ms)": "Lugemise markeri iga, kui Riot pole fookuses (ms)", + "Read Marker off-screen lifetime (ms)": "Lugemise markeri iga, kui %(brand)s pole fookuses (ms)", "Unignore": "Lõpeta eiramine", "": "", "Import E2E room keys": "Impordi E2E läbiva krüptimise võtmed jututubade jaoks", @@ -1450,7 +1450,7 @@ "%(names)s and %(lastPerson)s are typing …": "%(names)s ja %(lastPerson)s kirjutavad midagi…", "Cannot reach homeserver": "Koduserver ei ole hetkel leitav", "Ensure you have a stable internet connection, or get in touch with the server admin": "Palun kontrolli, kas sul on toimiv internetiühendus ning kui on, siis küsi abi koduserveri haldajalt", - "Your Riot is misconfigured": "Sinu Riot'i seadistused on paigast ära", + "Your %(brand)s is misconfigured": "Sinu %(brand)s'i seadistused on paigast ära", "Your homeserver does not support session management.": "Sinu koduserver ei toeta sessioonide haldust.", "Unable to load session list": "Sessioonide laadimine ei õnnestunud", "Identity server URL does not appear to be a valid identity server": "Isikutuvastusserveri aadress ei tundu viitama kehtivale isikutuvastusserverile", @@ -1480,7 +1480,7 @@ "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Ei õnnestu lugeda krüptitud salvestusruumi. Palun kontrolli, kas sa sisestasid õige taastevõtme.", "This looks like a valid recovery key!": "See tundub olema õige taastevõti!", "Not a valid recovery key": "Ei ole sobilik taastevõti", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Palu, et sinu Riot'u haldur kontrolliks sinu seadistusi võimalike vigaste või topeltkirjete osas.", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Palu, et sinu %(brand)s'u haldur kontrolliks sinu seadistusi võimalike vigaste või topeltkirjete osas.", "Cannot reach identity server": "Isikutuvastusserverit ei õnnestu leida", "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.": "Sa võid registreeruda, kuid mõned funktsionaalsused pole kasutatavad seni, kuni isikutuvastusserver pole uuesti võrgus. Kui see teade tekib järjepanu, siis palun kontrolli oma seadistusi või võta ühendust serveri haldajaga.", "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.": "Sa võid salasõna lähtestada, kuid mõned funktsionaalsused pole kasutatavad seni, kuni isikutuvastusserver pole uuesti võrgus. Kui see teade tekib järjepanu, siis palun kontrolli oma seadistusi või võta ühendust serveri haldajaga.", @@ -1521,13 +1521,13 @@ "Names and surnames by themselves are easy to guess": "Nimesid ja perenimesid on lihtne ära arvata", "Common names and surnames are easy to guess": "Üldisi nimesid ja perenimesid on lihtne ära arvata", "Straight rows of keys are easy to guess": "Klaviatuuril järjest paiknevaid klahvikombinatsioone on lihtne ära arvata", - "Help us improve Riot": "Aidake meil täiustada Riot'it", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Saada meile anonüümset kasutusteavet, mis võimaldab meil Riot'it täiustada. Selline teave põhineb küpsiste kasutamisel.", + "Help us improve %(brand)s": "Aidake meil täiustada %(brand)s'it", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Saada meile anonüümset kasutusteavet, mis võimaldab meil %(brand)s'it täiustada. Selline teave põhineb küpsiste kasutamisel.", "I want to help": "Ma soovin aidata", "No": "Ei", "Restart": "Käivita uuesti", - "Upgrade your Riot": "Uuenda oma Riot'it", - "A new version of Riot is available!": "Uus Riot'i versioon on saadaval!", + "Upgrade your %(brand)s": "Uuenda oma %(brand)s'it", + "A new version of %(brand)s is available!": "Uus %(brand)s'i versioon on saadaval!", "You: %(message)s": "Sina: %(message)s", "There was an error joining the room": "Jututoaga liitumisel tekkis viga", "Sorry, your homeserver is too old to participate in this room.": "Vabandust, sinu koduserver on siin jututoas osalemiseks liiga vana.", @@ -1583,14 +1583,14 @@ "Upgrade private room": "Uuenda omavaheline jututuba", "Upgrade public room": "Uuenda avalik jututuba", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Jututoa uuendamine on keerukas toiming ning tavaliselt soovitatakse seda teha vaid siis, kui jututuba on vigade tõttu halvasti kasutatav, sealt on puudu vajalikke funktsionaalsusi või seal ilmneb turvavigu.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Selline tegevus mõjutab tavaliselt vaid viisi, kuidas jututoa andmeid töödeldakse serveris. Kui sinu kasutatavas Riot'is tekib vigu, siis palun saada meile veateade.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Selline tegevus mõjutab tavaliselt vaid viisi, kuidas jututoa andmeid töödeldakse serveris. Kui sinu kasutatavas %(brand)s'is tekib vigu, siis palun saada meile veateade.", "You'll upgrade this room from to .": "Sa uuendad jututoa versioonist versioonini .", "Clear Storage and Sign Out": "Tühjenda andmeruum ja logi välja", "Send Logs": "Saada logikirjed", "Refresh": "Värskenda", "Unable to restore session": "Sessiooni taastamine ei õnnestunud", "We encountered an error trying to restore your previous session.": "Meil tekkis eelmise sessiooni taastamisel viga.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Kui sa varem oled kasutanud uuemat Riot'i versiooni, siis sinu pragune sessioon ei pruugi olla sellega ühilduv. Sulge see aken ja jätka selle uuema versiooni kasutamist.", + "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.": "Kui sa varem oled kasutanud uuemat %(brand)s'i versiooni, siis sinu pragune sessioon ei pruugi olla sellega ühilduv. Sulge see aken ja jätka selle uuema versiooni kasutamist.", "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Brauseri andmeruumi tühjendamine võib selle vea lahendada, kui samas logid sa ka välja ning kogu krüptitud vestlusajalugu muutub loetamatuks.", "Verification Pending": "Verifikatsioon on ootel", "Back": "Tagasi", @@ -1616,14 +1616,14 @@ "Integrations are disabled": "Lõimingud ei ole kasutusel", "Enable 'Manage Integrations' in Settings to do this.": "Selle tegevuse jaoks määra seadetes \"Halda lõiminguid\" kasutuselevõetuks.", "Integrations not allowed": "Lõimingute kasutamine ei ole lubatud", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Sinu Riot ei võimalda selle tegevuse jaoks kasutada Lõimingute haldurit. Palun küsi lisateavet administraatorilt.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Sinu %(brand)s ei võimalda selle tegevuse jaoks kasutada Lõimingute haldurit. Palun küsi lisateavet administraatorilt.", "Failed to invite the following users to chat: %(csvUsers)s": "Järgnevate kasutajate vestlema kutsumine ei õnnestunud: %(csvUsers)s", "We couldn't create your DM. Please check the users you want to invite and try again.": "Otsevestluse loomine ei õnnestunud. Palun kontrolli, et kasutajanimed oleks õiged ja proovi uuesti.", "a new master key signature": "uus üldvõtme allkiri", "a new cross-signing key signature": "uus risttunnustamise võtme allkiri", "a device cross-signing signature": "seadme risttunnustamise allkiri", "a key signature": "võtme allkiri", - "Riot encountered an error during upload of:": "Riot'is tekkis viga järgneva üleslaadimisel:", + "%(brand)s encountered an error during upload of:": "%(brand)s'is tekkis viga järgneva üleslaadimisel:", "Cancelled signature upload": "Allkirja üleslaadimine on tühistatud", "Unable to upload": "Üleslaadimine ei õnnestu", "Signature upload success": "Allkirja üleslaadimine õnnestus", diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index 0d1b05987e..bdce2b9fd3 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -122,7 +122,7 @@ "No Microphones detected": "Ez da mikrofonorik atzeman", "No Webcams detected": "Ez da kamerarik atzeman", "No media permissions": "Media baimenik ez", - "You may need to manually permit Riot to access your microphone/webcam": "Agian eskuz baimendu behar duzu Riotek mikrofonoa edo kamera atzitzea", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Agian eskuz baimendu behar duzu %(brand)sek mikrofonoa edo kamera atzitzea", "Default Device": "Lehenetsitako gailua", "Microphone": "Mikrofonoa", "Camera": "Kamera", @@ -256,9 +256,9 @@ "%(senderName)s removed their profile picture.": "%(senderName)s erabiltzaileak bere profileko argazkia kendu du.", "%(senderName)s requested a VoIP conference.": "%(senderName)s erabiltzaileak VoIP konferentzia bat eskatu du.", "Results from DuckDuckGo": "DuckDuckGo bilatzaileko emaitzak", - "Riot does not have permission to send you notifications - please check your browser settings": "Riotek ez du zuri jakinarazpenak bidaltzeko baimenik, egiaztatu nabigatzailearen ezarpenak", - "Riot was not given permission to send notifications - please try again": "Ez zaio jakinarazpenak bidaltzeko baimena eman Rioti, saiatu berriro", - "riot-web version:": "riot-web bertsioa:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)sek ez du zuri jakinarazpenak bidaltzeko baimenik, egiaztatu nabigatzailearen ezarpenak", + "%(brand)s was not given permission to send notifications - please try again": "Ez zaio jakinarazpenak bidaltzeko baimena eman %(brand)si, saiatu berriro", + "%(brand)s version:": "%(brand)s bertsioa:", "Room %(roomId)s not visible": "%(roomId)s gela ez dago ikusgai", "Room Colour": "Gelaren kolorea", "%(roomName)s does not exist.": "Ez dago %(roomName)s izeneko gela.", @@ -374,7 +374,7 @@ "Start automatically after system login": "Hasi automatikoki sisteman saioa hasi eta gero", "Analytics": "Estatistikak", "Options": "Aukerak", - "Riot collects anonymous analytics to allow us to improve the application.": "Riotek estatistika anonimoak jasotzen ditu aplikazioa hobetzeko.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)sek estatistika anonimoak jasotzen ditu aplikazioa hobetzeko.", "Passphrases must match": "Pasaesaldiak bat etorri behar dira", "Passphrase must not be empty": "Pasaesaldia ezin da hutsik egon", "File to import": "Inportatu beharreko fitxategia", @@ -391,7 +391,7 @@ "Incorrect password": "Pasahitz okerra", "To continue, please enter your password.": "Jarraitzeko sartu zure pasahitza.", "Unable to restore session": "Ezin izan da saioa berreskuratu", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Aurretik Riot bertsio berriago bat erabili baduzu, zure saioa bertsio honekin bateraezina izan daiteke. Itxi leiho hau eta itzuli bertsio berriagora.", + "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.": "Aurretik %(brand)s bertsio berriago bat erabili baduzu, zure saioa bertsio honekin bateraezina izan daiteke. Itxi leiho hau eta itzuli bertsio berriagora.", "Unknown Address": "Helbide ezezaguna", "Verify...": "Egiaztatu…", "ex. @bob:example.com": "adib. @urko:adibidea.eus", @@ -420,7 +420,7 @@ "This will be your account name on the homeserver, or you can pick a different server.": "Hau izango da zure izena hasiera zerbitzarian, edo hautatu beste zerbitzari bat.", "If you already have a Matrix account you can log in instead.": "Jada Matrix kontua baduzu saioa hasi dezakezu zuzenean.", "Your browser does not support the required cryptography extensions": "Zure nabigatzaileak ez ditu onartzen beharrezkoak diren kriptografia gehigarriak", - "Not a valid Riot keyfile": "Ez da baliozko Riot gako-fitxategia", + "Not a valid %(brand)s keyfile": "Ez da baliozko %(brand)s gako-fitxategia", "Authentication check failed: incorrect password?": "Autentifikazio errorea: pasahitz okerra?", "Do you want to set an email address?": "E-mail helbidea ezarri nahi duzu?", "This will allow you to reset your password and receive notifications.": "Honek zure pasahitza berrezarri eta jakinarazpenak jasotzea ahalbidetuko dizu.", @@ -664,7 +664,7 @@ "%(items)s and %(count)s others|one": "%(items)s eta beste bat", "Try using one of the following valid address types: %(validTypesList)s.": "Saiatu baliozko helbide mota hauetako bat erabiltzen: %(validTypesList)s.", "Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Komunitate IDak a-z, 0-9, edo '=_-./' karaktereak besterik ez ditu onartzen", - "Data from an older version of Riot 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.": "Riot bertsio zahar batek datuak antzeman dira. Honek bertsio zaharrean muturretik muturrerako zifratzea ez funtzionatzea eragingo du. Azkenaldian bertsio zaharrean bidali edo jasotako zifratutako mezuak agian ezin izango dira deszifratu bertsio honetan. Honek ere Bertsio honekin egindako mezu trukeak huts egitea ekar dezake. Arazoak badituzu, amaitu saioa eta hasi berriro saioa. Mezuen historiala gordetzeko, esportatu eta berriro inportatu zure gakoak.", + "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.": "%(brand)s bertsio zahar batek datuak antzeman dira. Honek bertsio zaharrean muturretik muturrerako zifratzea ez funtzionatzea eragingo du. Azkenaldian bertsio zaharrean bidali edo jasotako zifratutako mezuak agian ezin izango dira deszifratu bertsio honetan. Honek ere Bertsio honekin egindako mezu trukeak huts egitea ekar dezake. Arazoak badituzu, amaitu saioa eta hasi berriro saioa. Mezuen historiala gordetzeko, esportatu eta berriro inportatu zure gakoak.", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Sortu komunitate bat erabiltzaileak eta gelak biltzeko! Sortu zure hasiera orria eta markatu zure espazioa Matrix unibertsoan.", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Ez dago beste inor hemen! Beste batzuk gonbidatu nahi dituzu edo gela hutsik dagoela abisatzeari utzi?", "Light theme": "Azal argia", @@ -682,11 +682,11 @@ "Replying": "Erantzuten", "Minimize apps": "Minimizatu aplikazioak", "The platform you're on": "Zauden plataforma", - "The version of Riot.im": "Riot.im bertsioa", + "The version of %(brand)s": "%(brand)s bertsioa", "Your language of choice": "Zure aukerako hizkuntza", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Pribatutasuna garrantzitsua da guretzat, beraz ez dugu datu pertsonalik edo identifikagarririk jasotzen gure estatistiketan.", "Learn more about how we use analytics.": "Ikasi gehiago estatistikei ematen diegun erabileraz.", - "The information being sent to us to help make Riot.im better includes:": "Riot.im hobetzeko bidaltzen zaigun informazioan hau dago:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s hobetzeko bidaltzen zaigun informazioan hau dago:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Orri honek informazio identifikagarria badu ere, esaterako gela, erabiltzailea edo talde ID-a, datu hauek ezabatu egiten dira zerbitzarira bidali aurretik.", "Which officially provided instance you are using, if any": "Erabiltzen ari zaren instantzia ofiziala, balego", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Testu editorean testu aberatsa modua erabiltzen duzun", @@ -701,7 +701,7 @@ "Failed to remove tag %(tagName)s from room": "Huts egin du %(tagName)s etiketa gelatik kentzean", "Failed to add tag %(tagName)s to room": "Huts egin du %(tagName)s etiketa gelara gehitzean", "Clear filter": "Garbitu iragazkia", - "Did you know: you can use communities to filter your Riot.im experience!": "Ba al zenekien? Komunitateak erabili ditzakezu zure Riot.im esperientzia iragazteko!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Ba al zenekien? Komunitateak erabili ditzakezu zure %(brand)s esperientzia iragazteko!", "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.": "Iragazki bat ezartzeko, arrastatu komunitate baten abatarra pantailaren ezkerrean dagoen iragazki-panelera. Iragazki-paneleko abatar batean klik egin dezakezu komunitate horri lotutako gelak eta pertsonak besterik ez ikusteko.", "Key request sent.": "Gako eskaria bidalita.", "Code": "Kodea", @@ -721,7 +721,7 @@ "Who can join this community?": "Nor elkartu daiteke komunitate honetara?", "Everyone": "Edonor", "Fetching third party location failed": "Huts egin du hirugarrengoen kokalekua eskuratzean", - "A new version of Riot is available.": "Riot bertsio berri bat dago eskuragarri.", + "A new version of %(brand)s is available.": "%(brand)s bertsio berri bat dago eskuragarri.", "Send Account Data": "Bidali kontuaren datuak", "All notifications are currently disabled for all targets.": "Une honetan jakinarazpen guztiak helburu guztietarako desgaituta daude.", "Uploading report": "Txostena igotzen", @@ -776,7 +776,7 @@ "Forward Message": "Birbidali mezua", "You have successfully set a password and an email address!": "Ondo ezarri dituzu pasahitza eta e-mail helbidea!", "Remove %(name)s from the directory?": "Kendu %(name)s direktoriotik?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riotek nabigatzaileen ezaugarri aurreratu ugari erabiltzen ditu, hauetako batzuk ez daude erabilgarri edo esperimentalak dira zure oraingo nabigatzailean.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)sek nabigatzaileen ezaugarri aurreratu ugari erabiltzen ditu, hauetako batzuk ez daude erabilgarri edo esperimentalak dira zure oraingo nabigatzailean.", "Event sent!": "Gertaera bidalita!", "Preparing to send logs": "Egunkariak bidaltzeko prestatzen", "Remember, you can always set an email address in user settings if you change your mind.": "Gogoratu, e-mail helbide bat ezarri dezakezu erabiltzaile-ezarpenetan iritzia aldatzen baduzu.", @@ -822,8 +822,8 @@ "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.": "Arazte-egunkariek aplikazioak darabilen datuak dauzkate, zure erabiltzaile izena barne, bisitatu dituzun gelen ID-ak edo ezizenak eta beste erabiltzaileen izenak. Ez dute mezurik.", "Unhide Preview": "Ez ezkutatu aurrebista", "Unable to join network": "Ezin izan da sarera elkartu", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Agian Riot ez beste bezero batean konfiguratu dituzu. Ezin dituzu Riot bidez doitu, baina aplikagarriak dira", - "Sorry, your browser is not able to run Riot.": "Zure nabigatzaileak ez du Riot erabiltzeko gaitasunik.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Agian %(brand)s ez beste bezero batean konfiguratu dituzu. Ezin dituzu %(brand)s bidez doitu, baina aplikagarriak dira", + "Sorry, your browser is not able to run %(brand)s.": "Zure nabigatzaileak ez du %(brand)s erabiltzeko gaitasunik.", "Uploaded on %(date)s by %(user)s": "%(user)s erabiltzaileak %(date)s (e)an igota", "Messages in group chats": "Talde txatetako mezuak", "Yesterday": "Atzo", @@ -832,7 +832,7 @@ "Unable to fetch notification target list": "Ezin izan da jakinarazpen helburuen zerrenda eskuratu", "Set Password": "Ezarri pasahitza", "Off": "Ez", - "Riot does not know how to join a room on this network": "Riotek ez daki nola elkartu gela batetara sare honetan", + "%(brand)s does not know how to join a room on this network": "%(brand)sek ez daki nola elkartu gela batetara sare honetan", "Mentions only": "Aipamenak besterik ez", "You can now return to your account after signing out, and sign in on other devices.": "Zure kontura itzuli zaitezke beste gailuetan saioa amaitu eta berriro hastean.", "Enable email notifications": "Gaitu e-mail bidezko jakinarazpenak", @@ -870,8 +870,8 @@ "Review terms and conditions": "Irakurri termino eta baldintzak", "To continue, please enter your password:": "Jarraitzeko, sartu zure pasahitza:", "e.g. %(exampleValue)s": "adib. %(exampleValue)s", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Hobetu Riot.im erabilera-datu anonimoak bidaliz. Honek coockie bat erabiliko du (Ikusi gure Cookie politika).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Hobetu Riot.im erabilera-datu anonimoak bidaliz. Honek cookie bat erabiliko du.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Hobetu %(brand)s erabilera-datu anonimoak bidaliz. Honek coockie bat erabiliko du (Ikusi gure Cookie politika).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Hobetu %(brand)s erabilera-datu anonimoak bidaliz. Honek cookie bat erabiliko du.", "Yes, I want to help!": "Bai, lagundu nahi dut!", "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.": "Honek kontua behin betirako erabilgaitza bihurtuko du. Ezin izango duzu saioa hasi, eta ezin izango du beste inork ID hori erabili. Kontua dagoen gela guztietatik aterako da, eta kontuaren xehetasunak identitate-zerbitzaritik ezabatuko dira. Ekintza hau ezin da desegin.", "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.": "Kontua desaktibatzean ez dira zuk bidalitako mezuak ahaztuko. Mezuak ahaztea nahi baduzu markatu beheko kutxa.", @@ -945,11 +945,11 @@ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s erabiltzileak %(address)s ezarri du gela honetako helbide nagusi gisa.", "%(senderName)s removed the main address for this room.": "%(senderName)s erabiltzaileak gela honen helbide nagusia kendu du.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Egunkariak bidali aurretik, GitHub arazo bat sortu behar duzu gertatzen zaizuna azaltzeko.", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot-ek orain 3-5 aldiz memoria gutxiago darabil, beste erabiltzaileen informazioa behar denean besterik ez kargatzen. Itxaron zerbitzariarekin sinkronizatzen garen bitartean!", - "Updating Riot": "Riot eguneratzen", + "%(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!": "%(brand)s-ek orain 3-5 aldiz memoria gutxiago darabil, beste erabiltzaileen informazioa behar denean besterik ez kargatzen. Itxaron zerbitzariarekin sinkronizatzen garen bitartean!", + "Updating %(brand)s": "%(brand)s eguneratzen", "Please review and accept the policies of this homeserver:": "Irakurri eta onartu hasiera zerbitzari honen politikak:", - "You've previously used Riot 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, Riot needs to resync your account.": "Aurretik Riot erabili duzu %(host)s zerbitzarian kideen karga alferra gaituta zenuela. Bertsio honetan karga alferra desgaituta dago. Katxe lokala bi ezarpen hauen artean bateragarria ez denez, Riotek zure kontua berriro sinkronizatu behar du.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Rioten beste bertsioa oraindik beste fitxat batean irekita badago, itxi ezazu zerbitzari bera aldi berean karga alferra gaituta eta desgaituta erabiltzeak arazoak sor ditzakeelako.", + "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.": "Aurretik %(brand)s erabili duzu %(host)s zerbitzarian kideen karga alferra gaituta zenuela. Bertsio honetan karga alferra desgaituta dago. Katxe lokala bi ezarpen hauen artean bateragarria ez denez, %(brand)sek zure kontua berriro sinkronizatu behar du.", + "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.": "%(brand)sen beste bertsioa oraindik beste fitxat batean irekita badago, itxi ezazu zerbitzari bera aldi berean karga alferra gaituta eta desgaituta erabiltzeak arazoak sor ditzakeelako.", "Incompatible local cache": "Katxe lokal bateraezina", "Clear cache and resync": "Garbitu katxea eta sinkronizatu berriro", "Add some now": "Gehitu batzuk orain", @@ -962,8 +962,8 @@ "Backup version: ": "Babes-kopiaren bertsioa: ", "Algorithm: ": "Algoritmoa: ", "Please review and accept all of the homeserver's policies": "Berrikusi eta onartu hasiera-zerbitzariaren politika guztiak", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Zure txaten historiala ez galtzeko, zure gelako gakoak esportatu behar dituzu saioa amaitu aurretik. Riot-en bertsio berriagora bueltatu behar zara hau egiteko", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Riot-en bertsio berriago bat erabili duzu %(host)s zerbitzarian. Bertsio hau berriro erabiltzeko muturretik muturrerako zifratzearekin, saioa amaitu eta berriro hasi beharko duzu. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Zure txaten historiala ez galtzeko, zure gelako gakoak esportatu behar dituzu saioa amaitu aurretik. %(brand)s-en bertsio berriagora bueltatu behar zara hau egiteko", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "%(brand)s-en bertsio berriago bat erabili duzu %(host)s zerbitzarian. Bertsio hau berriro erabiltzeko muturretik muturrerako zifratzearekin, saioa amaitu eta berriro hasi beharko duzu. ", "Incompatible Database": "Datu-base bateraezina", "Continue With Encryption Disabled": "Jarraitu zifratzerik gabe", "Enter a passphrase...": "Sartu pasa-esaldi bat...", @@ -1177,9 +1177,9 @@ "Theme": "Azala", "Account management": "Kontuen kudeaketa", "Deactivating your account is a permanent action - be careful!": "Kontua desgaitzea behin betiko ekintza bat da, kontuz ibili!", - "For help with using Riot, click here.": "Riot erabiltzeko laguntza behar baduzu, egin klik hemen.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Riot erabiltzeko laguntza behar baduzu, egin klik hemen edo hasi txat bat gure botarekin beheko botoia sakatuz.", - "Chat with Riot Bot": "Txateatu Riot botarekin", + "For help with using %(brand)s, click here.": "%(brand)s erabiltzeko laguntza behar baduzu, egin klik hemen.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "%(brand)s erabiltzeko laguntza behar baduzu, egin klik hemen edo hasi txat bat gure botarekin beheko botoia sakatuz.", + "Chat with %(brand)s Bot": "Txateatu %(brand)s botarekin", "Help & About": "Laguntza eta honi buruz", "Bug reporting": "Akatsen berri ematea", "FAQ": "FAQ", @@ -1362,7 +1362,7 @@ "A widget would like to verify your identity": "Trepeta batek zure identitatea egiaztatu nahi du", "Remember my selection for this widget": "Gogoratu nire hautua trepeta honentzat", "Deny": "Ukatu", - "Riot failed to get the public room list.": "Riot-ek ezin izan du du gelen zerrenda publikoa eskuratu.", + "%(brand)s failed to get the public room list.": "%(brand)s-ek ezin izan du du gelen zerrenda publikoa eskuratu.", "The homeserver may be unavailable or overloaded.": "Hasiera-zerbitzaria eskuraezin edo kargatuegia egon daiteke.", "You have %(count)s unread notifications in a prior version of this room.|other": "Irakurri gabeko %(count)s jakinarazpen dituzu gela honen aurreko bertsio batean.", "You have %(count)s unread notifications in a prior version of this room.|one": "Irakurri gabeko %(count)s jakinarazpen duzu gela honen aurreko bertsio batean.", @@ -1382,8 +1382,8 @@ "Sends the given emote coloured as a rainbow": "Emandako emote-a ortzadarraren koloreekin bidaltzen du", "Cannot reach homeserver": "Ezin izan da hasiera-zerbitzaria atzitu", "Ensure you have a stable internet connection, or get in touch with the server admin": "Baieztatu Internet konexio egonkor bat duzula, edo jarri kontaktuan zerbitzariaren administratzailearekin", - "Your Riot is misconfigured": "Zure Riot gaizki konfiguratuta dago", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Eskatu zure administratzaileari zure konfigurazioa egiaztatu dezan ea okerrak diren edo bikoiztuta dauden sarrerak dauden.", + "Your %(brand)s is misconfigured": "Zure %(brand)s gaizki konfiguratuta dago", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Eskatu zure administratzaileari zure konfigurazioa egiaztatu dezan ea okerrak diren edo bikoiztuta dauden sarrerak dauden.", "No homeserver URL provided": "Ez da hasiera-zerbitzariaren URL-a eman", "Unexpected error resolving homeserver configuration": "Ustekabeko errorea hasiera-zerbitzariaren konfigurazioa ebaztean", "Unexpected error resolving identity server configuration": "Ustekabeko errorea identitate-zerbitzariaren konfigurazioa ebaztean", @@ -1480,7 +1480,7 @@ "These files are too large to upload. The file size limit is %(limit)s.": "Fitxategi hauek handiegiak dira igotzeko. Fitxategien tamaina-muga %(limit)s da.", "Some files are too large to be uploaded. The file size limit is %(limit)s.": "Fitxategi batzuk handiegiak dira igotzeko. Fitxategien tamaina-muga %(limit)s da.", "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.": "%(widgetUrl)s helbidean kokatutako trepeta batek zure identitatea egiaztatu nahi du. Hau baimentzen baduzu, trepetak zure erabiltzaile ID-a egiaztatu ahal izango du, baina ez zure izenean ekintzarik egin.", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot-ek huts egin du zure hasiera-zerbitzariaren protokoloen zerrenda eskuratzean. Agian hasiera-zerbitzaria zaharregia da hirugarrengoen sareak onartzeko.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s-ek huts egin du zure hasiera-zerbitzariaren protokoloen zerrenda eskuratzean. Agian hasiera-zerbitzaria zaharregia da hirugarrengoen sareak onartzeko.", "Failed to get autodiscovery configuration from server": "Huts egin du aurkikuntza automatikoaren konfigurazioa zerbitzaritik eskuratzean", "Invalid base_url for m.homeserver": "Baliogabeko base_url m.homeserver zerbitzariarentzat", "Invalid base_url for m.identity_server": "Baliogabeko base_url m.identity_server zerbitzariarentzat", @@ -1575,7 +1575,7 @@ "Remove %(phone)s?": "Kendu %(phone)s?", "Deactivate user?": "Desaktibatu erabiltzailea?", "Deactivate user": "Desaktibatu erabiltzailea", - "Link this email with your account in Settings to receive invites directly in Riot.": "Lotu e-mail hau zure kontuarekin gonbidapenak zuzenean Riot-en jasotzeko.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Lotu e-mail hau zure kontuarekin gonbidapenak zuzenean %(brand)s-en jasotzeko.", "This invite to %(roomName)s was sent to %(email)s": "%(roomName)s gelara gonbidapen hau %(email)s helbidera bidali da", "Add Email Address": "Gehitu e-mail helbidea", "Add Phone Number": "Gehitu telefono zenbakia", @@ -1622,8 +1622,8 @@ "Code block": "Kode blokea", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Errore bat jaso da (%(errcode)s) zure gonbidapena balioztatzen saiatzean. Informazio hau gelaren administratzaile bati pasatzen saiatu zaitezke.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "%(roomName)s gelarako gonbidapena zure kontuarekin lotuta ez dagoen %(email)s helbidera bidali da", - "Use an identity server in Settings to receive invites directly in Riot.": "Erabili identitate zerbitzari bat ezarpenetan gonbidapenak zuzenean Riot-en jasotzeko.", - "Share this email in Settings to receive invites directly in Riot.": "Partekatu e-mail hau ezarpenetan gonbidapenak zuzenean Riot-en jasotzeko.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Erabili identitate zerbitzari bat ezarpenetan gonbidapenak zuzenean %(brand)s-en jasotzeko.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Partekatu e-mail hau ezarpenetan gonbidapenak zuzenean %(brand)s-en jasotzeko.", "%(count)s unread messages including mentions.|other": "irakurri gabeko %(count)s mezu aipamenak barne.", "%(count)s unread messages.|other": "irakurri gabeko %(count)s mezu.", "Unread mentions.": "Irakurri gabeko aipamenak.", @@ -1757,7 +1757,7 @@ "View rules": "Ikusi arauak", "You are currently subscribed to:": "Orain hauetara harpidetuta zaude:", "⚠ These settings are meant for advanced users.": "⚠ Ezarpen hauek erabiltzaile aurreratuei zuzenduta daude.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Gehitu ezikusi nahi dituzun erabiltzaileak eta zerbitzariak hona. Erabili asteriskoak edozein karaktereek bat egin dezaten. Adibidez, @bot:* edozein zerbitzaritan 'bot' izena duten erabiltzaileak ezikusiko ditu.", + "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.": "Gehitu ezikusi nahi dituzun erabiltzaileak eta zerbitzariak hona. Erabili asteriskoak edozein karaktereek bat egin dezaten. Adibidez, @bot:* edozein zerbitzaritan 'bot' izena duten erabiltzaileak ezikusiko ditu.", "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.": "Jendea ezikusteko debekuen zerrendak erabiltzen dira, hauek nor debekatzeko arauak dituzte. Debeku zerrenda batera harpidetzean zerrenda horrek debekatzen dituen erabiltzaile eta zerbitzariak ezkutatuko zaizkizu.", "Personal ban list": "Debeku-zerrenda pertsonala", "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.": "Zure debeku-zerrenda pertsonalak zuk pertsonalki ikusi nahi ez dituzun erabiltzaile eta zerbitzariak ditu. Behi erabiltzaile edo zerbitzari bat ezikusita, gela berri bat agertuko da 'Nire debeku-zerrenda' izenarekin, debeku-zerrenda indarrean mantentzeko ez atera gela honetatik.", @@ -1782,7 +1782,7 @@ "Your avatar URL": "Zure abatarraren URL-a", "Your user ID": "Zure erabiltzaile ID-a", "Your theme": "Zure azala", - "Riot URL": "Riot URL-a", + "%(brand)s URL": "%(brand)s URL-a", "Room ID": "Gelaren ID-a", "Widget ID": "Trepetaren ID-a", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Trepeta hau erabiltzean %(widgetDomain)s domeinuarekin eta zure integrazio kudeatzailearekin datuak partekatu daitezke.", @@ -1794,7 +1794,7 @@ "Integrations are disabled": "Integrazioak desgaituta daude", "Enable 'Manage Integrations' in Settings to do this.": "Gaitu 'Kudeatu integrazioak' ezarpenetan hau egiteko.", "Integrations not allowed": "Integrazioak ez daude baimenduta", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Zure Riot aplikazioak ez dizu hau egiteko integrazio kudeatzaile bat erabiltzen uzten. Kontaktatu administratzaileren batekin.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Zure %(brand)s aplikazioak ez dizu hau egiteko integrazio kudeatzaile bat erabiltzen uzten. Kontaktatu administratzaileren batekin.", "Reload": "Birkargatu", "Take picture": "Atera argazkia", "Remove for everyone": "Kendu denentzat", @@ -1850,7 +1850,7 @@ "Upgrade private room": "Eguneratu gela pribatua", "Upgrade public room": "Eguneratu gela publikoa", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Gela eguneratzea ekintza aurreratu bat da eta akatsen, falta diren ezaugarrien, edo segurtasun arazoen erruz gela ezegonkorra denean aholkatzen da.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Orokorrean honek zerbitzariak gela nola prozesatzen duen da duen eragin bakarra. RIot-ekin arazoak badituzu, eman akats baten berri.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Orokorrean honek zerbitzariak gela nola prozesatzen duen da duen eragin bakarra. RIot-ekin arazoak badituzu, eman akats baten berri.", "You'll upgrade this room from to .": "Gela hau bertsiotik bertsiora eguneratuko duzu.", "Upgrade": "Eguneratu", "Enter secret storage passphrase": "Sartu biltegi sekretuko pasaesaldia", @@ -2098,12 +2098,12 @@ "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Egiaztaketa prozesua saio bakoitzeko egitea aholkatzen dizugu, benetan jabearenak direla baieztatzeko, baina egiaztaketa egin gabe mezua bidali dezakezu ere.", "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Atzitu zure mezu seguruen historiala eta zeharkako sinatzerako identitatea beste saioak egiaztatzeko zure pasa-esaldia sartuz.", "Show sessions, send anyway or cancel.": "Erakutsi saioak, bidali edonola ere edo ezeztatu.", - "The information being sent to us to help make Riot better includes:": "Riot hobetzeko bidaltzen zaigun informazioa honakoa da, besteren artean:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s hobetzeko bidaltzen zaigun informazioa honakoa da, besteren artean:", "Verify this session by completing one of the following:": "Egiaztatu saio hau hauetako bat osatuz:", "or": "ala", - "The version of Riot": "Riot bertsioa", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Sarrera mekanismo nagusia ukimena den gailu bat erabiltzen duzun", - "Whether you're using Riot as an installed Progressive Web App": "Riot instalatutako aplikazio progresibo gisa erabiltzen duzun", + "The version of %(brand)s": "%(brand)s bertsioa", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Sarrera mekanismo nagusia ukimena den gailu bat erabiltzen duzun", + "Whether you're using %(brand)s as an installed Progressive Web App": "%(brand)s instalatutako aplikazio progresibo gisa erabiltzen duzun", "Your user agent": "Zure erabiltzaile-agentea", "Show typing notifications": "Erakutsi idazketa jakinarazpenak", "Scan this unique code": "Eskaneatu kode bakan hau", @@ -2122,8 +2122,8 @@ "exists": "badago", "Securely cache encrypted messages locally for them to appear in search results, using ": "Gorde zifratutako mezuak cachean modu seguruan bilaketen emaitzetan agertu daitezen, hau erabiliz ", " to store messages from ": " hemengo mezuak gordetzeko ", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot-ek zifratutako mezuak cache lokalean modu seguruan gordetzeko elementu batzuk faltan ditu. Ezaugarri honekin esperimentatu nahi baduzu, konpilatu pertsonalizatutako Riot Desktop bilaketa osagaiekin.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot-ek ezin ditu zifratutako mezuak cache lokalean gorde web nabigatzaile batetik badabil. Erabili Riot Desktop zifratutako mezuak bilaketen emaitzetan agertzeko.", + "%(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-ek zifratutako mezuak cache lokalean modu seguruan gordetzeko elementu batzuk faltan ditu. Ezaugarri honekin esperimentatu nahi baduzu, konpilatu pertsonalizatutako %(brand)s Desktop bilaketa osagaiekin.", + "%(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-ek ezin ditu zifratutako mezuak cache lokalean gorde web nabigatzaile batetik badabil. Erabili %(brand)s Desktop zifratutako mezuak bilaketen emaitzetan agertzeko.", "Backup has a signature from unknown session with ID %(deviceId)s": "Babes-kopiak %(deviceId)s ID-a duen erabiltzaile ezezagun baten sinadura du", "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Babes-kopiaren gakoa biltegi sekretuan gorde da, baina ezaugarri hau ez dago saio honetan aktibatuta. Gaitu zeharkako sinatzea Laborategia atalean gakoen babes-kopiaren egoera aldatzeko.", "Accepting…": "Onartzen…", @@ -2131,7 +2131,7 @@ "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) erabiltzaileak saio berria hasi du hau egiaztatu gabe:", "Ask this user to verify their session, or manually verify it below.": "Eskatu erabiltzaile honi saioa egiaztatu dezala, edo egiaztatu eskuz azpian.", "Manually Verify": "Eskuzko egiaztaketa", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Egiaztatu nahi duzun saioak ez du QR kodea eskaneatzea onartzen, ezta emoji egiaztaketa, eta hau da Riot-ek onartzen duena. Saiatu beste bezero batekin.", + "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.": "Egiaztatu nahi duzun saioak ez du QR kodea eskaneatzea onartzen, ezta emoji egiaztaketa, eta hau da %(brand)s-ek onartzen duena. Saiatu beste bezero batekin.", "Verify by scanning": "Egiaztatu eskaneatuz", "You declined": "Ukatu egin duzu", "%(name)s declined": "%(name)s erabiltzaileak ukatu du", @@ -2164,7 +2164,7 @@ "Disable": "Desgaitu", "Not currently downloading messages for any room.": "Orain ez da inolako gelatik mezurik deskargatzen ari.", "Downloading mesages for %(currentRoom)s.": "%(currentRoom)s gelako mezuak deskargatzen.", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot-ek zifratutako mezuak cache lokalean gordetzen ditu modu seguruan bilaketen emaitzen ager daitezen:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s-ek zifratutako mezuak cache lokalean gordetzen ditu modu seguruan bilaketen emaitzen ager daitezen:", "Space used:": "Erabilitako espazioa:", "Indexed messages:": "Indexatutako mezuak:", "Indexed rooms:": "Indexatutako gelak:", @@ -2227,7 +2227,7 @@ "a new cross-signing key signature": "zeharkako sinatze gako sinadura berria", "a device cross-signing signature": "gailuz zeharkako sinadura berria", "a key signature": "gako sinadura", - "Riot encountered an error during upload of:": "Riotek errorea aurkitu du hau igotzean:", + "%(brand)s encountered an error during upload of:": "%(brand)sek errorea aurkitu du hau igotzean:", "Upload completed": "Igoera burututa", "Cancelled signature upload": "Sinadura igoera ezeztatuta", "Unabled to upload": "Ezin izan da igo", @@ -2368,7 +2368,7 @@ "Signing In...": "Saioa hasten...", "If you've joined lots of rooms, this might take a while": "Gela askotara elkartu bazara, honek denbora behar lezake", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Baieztatu zure identitatea saio hau zure beste saio batetik egiaztatuz, mezu zifratuetara sarbidea emanez.", - "This requires the latest Riot on your other devices:": "Honek zure beste gailuetan azken Riot bertsioa eskatzen du:", + "This requires the latest %(brand)s on your other devices:": "Honek zure beste gailuetan azken %(brand)s bertsioa eskatzen du:", "or another cross-signing capable Matrix client": "edo zeharkako sinadurarako gai den beste Matrix bezero bat", "Use Recovery Passphrase or Key": "Erabili berreskuratze pasa-esaldia edo gakoa", "Great! This recovery passphrase looks strong enough.": "Bikain! Berreskuratze pasa-esaldi hau sendoa dirudi.", @@ -2430,8 +2430,8 @@ "Joins room with given address": "Emandako helbidea duen gelara elkartzen da", "Unrecognised room address:": "Gela helbide ezezaguna:", "sent an image.": "irudi bat bidali du.", - "Help us improve Riot": "Lagundu gaitzazu Riot hobetzen", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Bidali erabilera datu anonimoak Riot hobetzen laguntzeko. Honek cookie bat darabil.", + "Help us improve %(brand)s": "Lagundu gaitzazu %(brand)s hobetzen", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Bidali erabilera datu anonimoak %(brand)s hobetzen laguntzeko. Honek cookie bat darabil.", "I want to help": "Lagundu nahi dut", "Your homeserver has exceeded its user limit.": "Zure hasiera-zerbitzariak erabiltzaile muga gainditu du.", "Your homeserver has exceeded one of its resource limits.": "Zure hasiera-zerbitzariak bere baliabide mugetako bat gainditu du.", @@ -2440,8 +2440,8 @@ "Set password": "Ezarri pasahitza", "To return to your account in future you need to set a password": "Zure kontura etorkizunean itzultzeko pasahitza ezarri behar duzu", "Restart": "Berrasi", - "Upgrade your Riot": "Eguneratu zure Riot", - "A new version of Riot is available!": "Riot bertsio berria eskuragarri dago!", + "Upgrade your %(brand)s": "Eguneratu zure %(brand)s", + "A new version of %(brand)s is available!": "%(brand)s bertsio berria eskuragarri dago!", "You: %(message)s": "Zu: %(message)s", "New version available. Update now.": "Bertsio berri eskuragarri. Eguneratu orain.", "Please verify the room ID or address and try again.": "Egiaztatu gelaren ID-a edo helbidea eta saiatu berriro.", @@ -2474,7 +2474,7 @@ "This address is available to use": "Gelaren helbide hau erabilgarri dago", "This address is already in use": "Gelaren helbide hau erabilita dago", "Set a room address to easily share your room with other people.": "Ezarri gelaren helbide bat zure gela besteekin erraz partekatzeko.", - "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Riot bertsio berriago bat erabili duzu saio honekin. Berriro bertsio hau muturretik muturrerako zifratzearekin erabiltzeko, saioa amaitu eta berriro hasi beharko duzu.", + "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "%(brand)s bertsio berriago bat erabili duzu saio honekin. Berriro bertsio hau muturretik muturrerako zifratzearekin erabiltzeko, saioa amaitu eta berriro hasi beharko duzu.", "Address (optional)": "Helbidea (aukerakoa)", "Delete the room address %(alias)s and remove %(name)s from the directory?": "Ezabatu %(alias)s gelaren helbidea eta kendu %(name)s direktoriotik?", "delete the address.": "ezabatu helbidea.", diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json index badb785132..3d9bdd3be1 100644 --- a/src/i18n/strings/fa.json +++ b/src/i18n/strings/fa.json @@ -1,7 +1,7 @@ { "Fetching third party location failed": "تطبیق اطلاعات از منابع‌ دسته سوم با شکست مواجه شد", "Messages in one-to-one chats": "پیام‌های درون چت‌های یک‌به‌یک", - "A new version of Riot is available.": "نسخه‌ی جدید از رایوت موجود است.", + "A new version of %(brand)s is available.": "نسخه‌ی جدید از رایوت موجود است.", "Advanced notification settings": "تنظیمات پیشرفته برای آگاه‌سازی‌ها", "Uploading report": "در حال بارگذاری گزارش", "Sunday": "یکشنبه", @@ -60,7 +60,7 @@ "Enter keywords separated by a comma:": "کلیدواژه‌ها را وارد کنید؛ از کاما(,) برای جدا کردن آنها از یکدیگر استفاده کنید:", "Forward Message": "هدایت پیام", "Remove %(name)s from the directory?": "آیا مطمئنید می‌خواهید %(name)s را از فهرست گپ‌ها حذف کنید؟", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "رایوت از بسیاری از ویژگی‌های پیشرفته در مروگرها استفاده می‌کند، برخی از این ویژگی‌ها در مرورگر کنونی شما موجود نیستند و یا در حالت آزمایشی قرار دارند.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "رایوت از بسیاری از ویژگی‌های پیشرفته در مروگرها استفاده می‌کند، برخی از این ویژگی‌ها در مرورگر کنونی شما موجود نیستند و یا در حالت آزمایشی قرار دارند.", "Unnamed room": "گپ نام‌گذاری نشده", "Dismiss": "نادیده بگیر", "Remove from Directory": "از فهرستِ گپ‌ها حذف کن", @@ -100,8 +100,8 @@ "Search…": "جستجو…", "Unhide Preview": "پیش‌نمایش را نمایان کن", "Unable to join network": "خطا در ورود به شبکه", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "ممکن است شما این تنظیمات را در کارخواهی به جز رایوت اعمال کرده باشید. شما نمی‌توانید انها را تغییر دهید اما آنها همچنان تاثیر خود را دارند", - "Sorry, your browser is not able to run Riot.": "متاسفانه مرورگر شما نمی‌تواند رایوت را اجرا کند.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "ممکن است شما این تنظیمات را در کارخواهی به جز رایوت اعمال کرده باشید. شما نمی‌توانید انها را تغییر دهید اما آنها همچنان تاثیر خود را دارند", + "Sorry, your browser is not able to run %(brand)s.": "متاسفانه مرورگر شما نمی‌تواند رایوت را اجرا کند.", "Uploaded on %(date)s by %(user)s": "آپلود شده در تاریخ %(date)s توسط %(user)s", "Messages in group chats": "پیام‌های درون چت‌های گروهی", "Yesterday": "دیروز", @@ -112,7 +112,7 @@ "Set Password": "پسوردتان را انتخاب کنید", "An error occurred whilst saving your email notification preferences.": "خطایی در حین ذخیره‌ی ترجیجات شما درباره‌ی رایانامه رخ داد.", "Off": "خاموش", - "Riot does not know how to join a room on this network": "رایوت از چگونگی ورود به یک گپ در این شبکه اطلاعی ندارد", + "%(brand)s does not know how to join a room on this network": "رایوت از چگونگی ورود به یک گپ در این شبکه اطلاعی ندارد", "Mentions only": "فقط نام‌بردن‌ها", "Failed to remove tag %(tagName)s from room": "خطا در حذف کلیدواژه‌ی %(tagName)s از گپ", "Remove": "حذف کن", diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index b10366bbc9..8c0ea16f3b 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -28,7 +28,7 @@ "No Microphones detected": "Mikrofonia ei löytynyt", "No Webcams detected": "Webkameraa ei löytynyt", "No media permissions": "Ei mediaoikeuksia", - "You may need to manually permit Riot to access your microphone/webcam": "Voit joutua antamaan Riotille luvan mikrofonin/webkameran käyttöön", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Voit joutua antamaan %(brand)sille luvan mikrofonin/webkameran käyttöön", "Default Device": "Oletuslaite", "Microphone": "Mikrofoni", "Camera": "Kamera", @@ -179,7 +179,7 @@ "Reject invitation": "Hylkää kutsu", "Results from DuckDuckGo": "DuckDuckGo:n tulokset", "Return to login screen": "Palaa kirjautumissivulle", - "riot-web version:": "Riot-webin versio:", + "%(brand)s version:": "%(brand)s-webin versio:", "Room Colour": "Huoneen väri", "Rooms": "Huoneet", "Save": "Tallenna", @@ -280,7 +280,7 @@ "Start automatically after system login": "Käynnistä automaattisesti käyttöjärjestelmään kirjautumisen jälkeen", "Analytics": "Analytiikka", "Options": "Valinnat", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot kerää anonyymisti tilastoja jotta voimme parantaa ohjelmistoa.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s kerää anonyymisti tilastoja jotta voimme parantaa ohjelmistoa.", "Passphrases must match": "Salasanojen on täsmättävä", "Passphrase must not be empty": "Salasana ei saa olla tyhjä", "Export room keys": "Vie huoneen avaimet", @@ -314,8 +314,8 @@ "%(targetName)s rejected the invitation.": "%(targetName)s hylkäsi kutsun.", "Remote addresses for this room:": "Tämän huoneen etäosoitteet:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s poisti näyttönimensä (%(oldDisplayName)s).", - "Riot does not have permission to send you notifications - please check your browser settings": "Riotilla ei ole oikeuksia lähettää sinulle ilmoituksia. Ole hyvä ja tarkista selaimen asetukset", - "Riot was not given permission to send notifications - please try again": "Riot ei saanut lupaa lähettää ilmoituksia - yritä uudelleen", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)silla ei ole oikeuksia lähettää sinulle ilmoituksia. Ole hyvä ja tarkista selaimen asetukset", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s ei saanut lupaa lähettää ilmoituksia - yritä uudelleen", "Room %(roomId)s not visible": "Huone %(roomId)s ei ole näkyvissä", "%(roomName)s does not exist.": "Huonetta %(roomName)s ei ole olemassa.", "%(roomName)s is not accessible at this time.": "%(roomName)s ei ole saatavilla tällä hetkellä.", @@ -395,7 +395,7 @@ "This will be your account name on the homeserver, or you can pick a different server.": "Tästä tulee tilisi nimi -kotipalvelimella, tai voit valita toisen palvelimen.", "If you already have a Matrix account you can log in instead.": "Jos sinulla on jo Matrix-tili, voit kirjautua.", "Your browser does not support the required cryptography extensions": "Selaimesi ei tue vaadittuja kryptografisia laajennuksia", - "Not a valid Riot keyfile": "Ei kelvollinen Riot-avaintiedosto", + "Not a valid %(brand)s keyfile": "Ei kelvollinen %(brand)s-avaintiedosto", "Authentication check failed: incorrect password?": "Autentikointi epäonnistui: virheellinen salasana?", "Do you want to set an email address?": "Haluatko asettaa sähköpostiosoitteen?", "This will allow you to reset your password and receive notifications.": "Tämä sallii sinun uudelleenalustaa salasanasi ja vastaanottaa ilmoituksia.", @@ -663,7 +663,7 @@ "Warning": "Varoitus", "Access Token:": "Pääsykoodi:", "Fetching third party location failed": "Kolmannen osapuolen paikan haku epäonnistui", - "A new version of Riot is available.": "Uusi Riot-versio on saatavilla.", + "A new version of %(brand)s is available.": "Uusi %(brand)s-versio on saatavilla.", "Send Account Data": "Lähetä tilin tiedot", "All notifications are currently disabled for all targets.": "Tällä hetkellä kaikki ilmoitukset on kytketty pois kaikilta kohteilta.", "Uploading report": "Ladataan raporttia", @@ -718,7 +718,7 @@ "Search…": "Haku…", "You have successfully set a password and an email address!": "Olet asettanut salasanan ja sähköpostiosoitteen!", "Remove %(name)s from the directory?": "Poista %(name)s luettelosta?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot käyttää monia edistyneitä ominaisuuksia, joista osaa selaimesi ei tue tai ne ovat kokeellisia.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s käyttää monia edistyneitä ominaisuuksia, joista osaa selaimesi ei tue tai ne ovat kokeellisia.", "Developer Tools": "Kehittäjätyökalut", "Explore Account Data": "Tilitiedot", "All messages (noisy)": "Kaikki viestit (meluisa)", @@ -760,8 +760,8 @@ "Show message in desktop notification": "Näytä viestit ilmoituskeskuksessa", "Unhide Preview": "Näytä esikatselu", "Unable to join network": "Verkkoon liittyminen epäonnistui", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Olet saattanut muuttaa niitä muussa asiakasohjelmassa kuin Riotissa. Et voi muuttaa niitä Riotissa mutta ne pätevät silti", - "Sorry, your browser is not able to run Riot.": "Valitettavasti Riot ei toimi selaimessasi.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Olet saattanut muuttaa niitä muussa asiakasohjelmassa kuin %(brand)sissa. Et voi muuttaa niitä %(brand)sissa mutta ne pätevät silti", + "Sorry, your browser is not able to run %(brand)s.": "Valitettavasti %(brand)s ei toimi selaimessasi.", "Uploaded on %(date)s by %(user)s": "Ladattu %(date)s käyttäjän %(user)s toimesta", "Messages in group chats": "Viestit ryhmäkeskusteluissa", "Yesterday": "Eilen", @@ -772,7 +772,7 @@ "An error occurred whilst saving your email notification preferences.": "Sähköposti-ilmoitusasetuksia tallettaessa tapahtui virhe.", "remove %(name)s from the directory.": "poista %(name)s luettelosta.", "Off": "Ei päällä", - "Riot does not know how to join a room on this network": "Riot ei tiedä miten liittyä huoneeseen tässä verkossa", + "%(brand)s does not know how to join a room on this network": "%(brand)s ei tiedä miten liittyä huoneeseen tässä verkossa", "Mentions only": "Vain maininnat", "Failed to remove tag %(tagName)s from room": "Tagin %(tagName)s poistaminen huoneesta epäonnistui", "Wednesday": "Keskiviikko", @@ -801,7 +801,7 @@ "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s vaihtoi näyttönimekseen %(displayName)s.", "Learn more about how we use analytics.": "Lue lisää analytiikkakäytännöistämme.", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Täällä ei ole muita! Haluaisitko kutsua muita tai poistaa varoituksen tyhjästä huoneesta?", - "The version of Riot.im": "Riot.im:n versio", + "The version of %(brand)s": "%(brand)s:n versio", "Your homeserver's URL": "Kotipalvelimesi osoite", "Your identity server's URL": "Identiteettipalvelimesi osoite", "e.g. %(exampleValue)s": "esim. %(exampleValue)s", @@ -1006,7 +1006,7 @@ "The room upgrade could not be completed": "Huoneen päivitystä ei voitu suorittaa", "Failed to upgrade room": "Huoneen päivittäminen epäonnistui", "Are you sure you want to sign out?": "Haluatko varmasti kirjautua ulos?", - "Updating Riot": "Päivitetään Riot", + "Updating %(brand)s": "Päivitetään %(brand)s", "To continue, please enter your password:": "Kirjoita salasanasi jatkaaksesi:", "Incompatible Database": "Yhteensopimaton tietokanta", "Failed to send logs: ": "Lokien lähettäminen epäonnistui: ", @@ -1017,7 +1017,7 @@ "That doesn't look like a valid email address": "Tämä ei vaikuta kelvolliselta sähköpostiosoitteelta", "Join": "Liity", "Yes, I want to help!": "Kyllä, haluan auttaa!", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Auta parantamaan Riot.im:ää lähettämällä käyttötietoja anonyymisti. Tässä hyödynnetään evästettä.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Auta parantamaan %(brand)s:ää lähettämällä käyttötietoja anonyymisti. Tässä hyödynnetään evästettä.", "Failed to load group members": "Ryhmän jäsenten lataaminen epäonnistui", "Click here to see older messages.": "Napsauta tästä nähdäksesi vanhemmat viestit.", "This room is a continuation of another conversation.": "Tämä huone on jatkumo toisesta keskustelusta.", @@ -1035,22 +1035,22 @@ "Email Address": "Sähköpostiosoite", "Yes": "Kyllä", "No": "Ei", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Auta parantamaan Riot.im:ää lähettämällä käyttötietoja anonyymisti. Tämä vaatii toimiakseen evästeen (lue evästekäytäntö).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Auta parantamaan %(brand)s:ää lähettämällä käyttötietoja anonyymisti. Tämä vaatii toimiakseen evästeen (lue evästekäytäntö).", "Elephant": "Norsu", "Add an email address to configure email notifications": "Lisää sähköpostiosoite määrittääksesi sähköposti-ilmoitukset", - "Chat with Riot Bot": "Keskustele Riot-botin kanssa", + "Chat with %(brand)s Bot": "Keskustele %(brand)s-botin kanssa", "You'll lose access to your encrypted messages": "Menetät pääsyn salattuihin viesteihisi", "Create a new room with the same name, description and avatar": "luomme uuden huoneen samalla nimellä, kuvauksella ja kuvalla", "Update any local room aliases to point to the new room": "päivitämme kaikki huoneen aliakset osoittamaan uuteen huoneeseen", "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "estämme käyttäjiä puhumasta vanhassa huoneessa ja lähetämme viestin, joka ohjeistaa käyttäjiä siirtymään uuteen huoneeseen", "Put a link back to the old room at the start of the new room so people can see old messages": "pistämme linkin vanhaan huoneeseen uuden huoneen alkuun, jotta ihmiset voivat nähdä vanhat viestit", "We encountered an error trying to restore your previous session.": "Törmäsimme ongelmaan yrittäessämme palauttaa edellistä istuntoasi.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Jos olet aikaisemmin käyttänyt uudempaa versiota Riotista, istuntosi voi olla epäyhteensopiva tämän version kanssa. Sulje tämä ikkuna ja yritä uudemman version kanssa.", + "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.": "Jos olet aikaisemmin käyttänyt uudempaa versiota %(brand)sista, istuntosi voi olla epäyhteensopiva tämän version kanssa. Sulje tämä ikkuna ja yritä uudemman version kanssa.", "The platform you're on": "Alusta, jolla olet", "Whether or not you're logged in (we don't record your username)": "Oletko kirjautunut vai et (emme tallenna käyttäjätunnustasi)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Käytätkö muotoillun tekstin tilaa muotoilueditorissa vai et", "Your User Agent": "Selaintunnisteesi", - "The information being sent to us to help make Riot.im better includes:": "Tietoihin, jotka lähetetään Riot.im:ään palvelun parantamiseksi, sisältyy:", + "The information being sent to us to help make %(brand)s better includes:": "Tietoihin, jotka lähetetään %(brand)s:ään palvelun parantamiseksi, sisältyy:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Kohdissa, joissa tämä sivu sisältää yksilöivää tietoa, kuten huoneen, käyttäjän tai ryhmän tunnuksen, kyseinen tieto poistetaan ennen palvelimelle lähettämistä.", "A call is currently being placed!": "Puhelua ollaan aloittamassa!", "A call is already in progress!": "Puhelu on jo meneillään!", @@ -1123,8 +1123,8 @@ "Verification code": "Varmennuskoodi", "Internal room ID:": "Sisäinen huoneen ID:", "Credits": "Maininnat", - "For help with using Riot, click here.": "Saadaksesi apua Riotin käyttämisessä, klikkaa tästä.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Saadaksesi apua Riotin käytössä, klikkaa tästä tai aloita keskustelu bottimme kanssa alla olevasta painikkeesta.", + "For help with using %(brand)s, click here.": "Saadaksesi apua %(brand)sin käyttämisessä, klikkaa tästä.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Saadaksesi apua %(brand)sin käytössä, klikkaa tästä tai aloita keskustelu bottimme kanssa alla olevasta painikkeesta.", "Bug reporting": "Virheiden raportointi", "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.": "Jos olet ilmoittanut virheestä Githubin kautta, debug-lokit voivat auttaa meitä ongelman jäljittämisessä. Debug-lokit sisältävät sovelluksen käyttödataa sisältäen käyttäjätunnuksen, vierailemiesi huoneiden tai ryhmien tunnukset tai aliakset ja muiden käyttäjien käyttäjätunnukset. Debug-lokit eivät sisällä viestejä.", "Autocomplete delay (ms)": "Automaattisen täydennyksen viive (ms)", @@ -1221,8 +1221,8 @@ "Before submitting logs, you must create a GitHub issue to describe your problem.": "Ennen lokien lähettämistä sinun täytyy luoda Githubiin issue (kysymys/ongelma), joka sisältää kuvauksen ongelmastasi.", "Unable to load commit detail: %(msg)s": "Commitin tietojen hakeminen epäonnistui: %(msg)s", "Community IDs cannot be empty.": "Yhteisön ID:t eivät voi olla tyhjänä.", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Jotta et menetä keskusteluhistoriaasi, sinun täytyy tallentaa huoneen avaimet ennen kuin kirjaudut ulos. Joudut käyttämään uudempaa Riotin versiota tätä varten", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Olet aikaisemmin käyttänyt uudempaa Riotin versiota koneella %(host)s. Jotta voit käyttää tätä versiota osapuolten välisellä salauksella, sinun täytyy kirjautua ulos ja kirjautua takaisin sisään. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Jotta et menetä keskusteluhistoriaasi, sinun täytyy tallentaa huoneen avaimet ennen kuin kirjaudut ulos. Joudut käyttämään uudempaa %(brand)sin versiota tätä varten", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Olet aikaisemmin käyttänyt uudempaa %(brand)sin versiota koneella %(host)s. Jotta voit käyttää tätä versiota osapuolten välisellä salauksella, sinun täytyy kirjautua ulos ja kirjautua takaisin sisään. ", "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.": "Tämä tekee tilistäsi lopullisesti käyttökelvottoman. Et voi kirjautua sisään, eikä kukaan voi rekisteröidä samaa käyttäjätunnusta. Tilisi poistuu kaikista huoneista, joihin se on liittynyt, ja tilisi tiedot poistetaan identiteettipalvelimeltasi. Tämä toimenpidettä ei voi kumota.", "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.": "Tilisi poistaminen käytöstä ei oletuksena saa meitä unohtamaan lähettämiäsi viestejä. Jos haluaisit meidän unohtavan viestisi, rastita alla oleva ruutu.", "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.": "Viestien näkyvyys Matrixissa on samantapainen kuin sähköpostissa. Vaikka se, että unohdamme viestisi, tarkoittaa, ettei viestejäsi jaeta enää uusille tai rekisteröitymättömille käyttäjille, käyttäjät, jotka ovat jo saaneet viestisi pystyvät lukemaan jatkossakin omaa kopiotaan viesteistäsi.", @@ -1237,11 +1237,11 @@ "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Varmenna tämä käyttäjä merkitäksesi hänet luotetuksi. Käyttäjiin luottaminen antaa sinulle ylimääräistä mielenrauhaa käyttäessäsi osapuolten välistä salausta.", "Waiting for partner to confirm...": "Odotetaan, että toinen osapuoli varmistaa...", "Incoming Verification Request": "Saapuva varmennuspyyntö", - "You've previously used Riot 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, Riot needs to resync your account.": "Olet aikaisemmin käytttänyt Riotia laitteella %(host)s, jossa oli jäsenten laiska lataus käytössä. Tässä versiossa laiska lataus on pois käytöstä. Koska paikallinen välimuisti ei ole yhteensopiva näiden kahden asetuksen välillä, Riotin täytyy synkronoida tilisi tiedot uudelleen.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Jos sinulla on toinen Riotin versio edelleen auki toisessa välilehdessä, suljethan sen, koska Riotin käyttäminen samalla laitteella niin, että laiska lataus on toisessa välilehdessä käytössä ja toisessa ei, aiheuttaa ongelmia.", + "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.": "Olet aikaisemmin käytttänyt %(brand)sia laitteella %(host)s, jossa oli jäsenten laiska lataus käytössä. Tässä versiossa laiska lataus on pois käytöstä. Koska paikallinen välimuisti ei ole yhteensopiva näiden kahden asetuksen välillä, %(brand)sin täytyy synkronoida tilisi tiedot uudelleen.", + "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.": "Jos sinulla on toinen %(brand)sin versio edelleen auki toisessa välilehdessä, suljethan sen, koska %(brand)sin käyttäminen samalla laitteella niin, että laiska lataus on toisessa välilehdessä käytössä ja toisessa ei, aiheuttaa ongelmia.", "Incompatible local cache": "Yhteensopimaton paikallinen välimuisti", "Clear cache and resync": "Tyhjennä välimuisti ja hae tiedot uudelleen", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot käyttää nyt 3-5 kertaa vähemmän muistia, koska se lataa tietoa muista käyttäjistä vain tarvittaessa. Odotathan, kun haemme tarvittavat tiedot palvelimelta!", + "%(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!": "%(brand)s käyttää nyt 3-5 kertaa vähemmän muistia, koska se lataa tietoa muista käyttäjistä vain tarvittaessa. Odotathan, kun haemme tarvittavat tiedot palvelimelta!", "I don't want my encrypted messages": "En halua salattuja viestejäni", "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.": "Välttääksesi saman ongelman ilmoittamista kahdesti, katso ensin olemassaolevat issuet (ja lisää +1, mikäli löydät issuen joka koskee sinuakin) tai luo uusi issue mikäli et löydä ongelmaasi.", "Room Settings - %(roomName)s": "Huoneen asetukset — %(roomName)s", @@ -1294,7 +1294,7 @@ "This room is used for important messages from the Homeserver, so you cannot leave it.": "Tämä huone on kotipalvelimen tärkeille viesteille, joten ei voi poistua siitä.", "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Jatkaaksesi kotipalvelimen %(homeserverDomain)s käyttöä, sinun täytyy lukea ja hyväksyä käyttöehtomme.", "Review terms and conditions": "Lue käyttöehdot", - "Did you know: you can use communities to filter your Riot.im experience!": "Tiesitkö: voit käyttää yhteisöjä suodattaaksesi Riot.im-kokemustasi!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Tiesitkö: voit käyttää yhteisöjä suodattaaksesi %(brand)s-kokemustasi!", "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.": "Asettaaksesi suodattimen, vedä yhteisön kuva vasemmalla olevan suodatinpaneelin päälle. Voit klikata suodatinpaneelissa olevaa yhteisön kuvaa, jotta näet vain huoneet ja henkilöt, jotka liittyvät kyseiseen yhteisöön.", "You can't send any messages until you review and agree to our terms and conditions.": "Et voi lähettää viestejä ennen kuin luet ja hyväksyt käyttöehtomme.", "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.": "Viestiäsi ei lähetetty, koska tämä kotipalvelin on saavuttanut kuukausittaisten aktiivisten käyttäjien rajan. Ota yhteyttä palvelun ylläpitäjään jatkaaksesi palvelun käyttämistä.", @@ -1341,9 +1341,9 @@ "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.": "Sovelma osoitteessa %(widgetUrl)s haluaisi todentaa henkilöllisyytesi. Jos sallit tämän, sovelma pystyy todentamaan käyttäjätunnuksesi, muttei voi toimia nimissäsi.", "Remember my selection for this widget": "Muista valintani tälle sovelmalle", "Deny": "Kiellä", - "Data from an older version of Riot 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.": "Tunnistimme dataa, joka on lähtöisin vanhasta Riotin versiosta. Tämä aiheuttaa toimintahäiriöitä osapuolten välisessä salauksessa vanhassa versiossa. Viestejä, jotka on salattu osapuolten välisellä salauksella vanhalla versiolla, ei välttämättä voida purkaa tällä versiolla. Tämä voi myös aiheuttaa epäonnistumisia viestien välityksessä tämän version kanssa. Jos kohtaat ongelmia, kirjaudu ulos ja takaisin sisään. Säilyttääksesi viestihistoriasi, vie salausavaimesi ja tuo ne uudelleen.", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot epäonnistui protokollalistan hakemisessa kotipalvelimelta. Kotipalvelin saattaa olla liian vanha tukeakseen kolmannen osapuolen verkkoja.", - "Riot failed to get the public room list.": "Riot ei onnistunut hakemaan julkista huoneluetteloa.", + "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.": "Tunnistimme dataa, joka on lähtöisin vanhasta %(brand)sin versiosta. Tämä aiheuttaa toimintahäiriöitä osapuolten välisessä salauksessa vanhassa versiossa. Viestejä, jotka on salattu osapuolten välisellä salauksella vanhalla versiolla, ei välttämättä voida purkaa tällä versiolla. Tämä voi myös aiheuttaa epäonnistumisia viestien välityksessä tämän version kanssa. Jos kohtaat ongelmia, kirjaudu ulos ja takaisin sisään. Säilyttääksesi viestihistoriasi, vie salausavaimesi ja tuo ne uudelleen.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s epäonnistui protokollalistan hakemisessa kotipalvelimelta. Kotipalvelin saattaa olla liian vanha tukeakseen kolmannen osapuolen verkkoja.", + "%(brand)s failed to get the public room list.": "%(brand)s ei onnistunut hakemaan julkista huoneluetteloa.", "The homeserver may be unavailable or overloaded.": "Kotipalvelin saattaa olla saavuttamattomissa tai ylikuormitettuna.", "You have %(count)s unread notifications in a prior version of this room.|other": "Sinulla on %(count)s lukematonta ilmoitusta huoneen edellisessä versiossa.", "You have %(count)s unread notifications in a prior version of this room.|one": "Sinulla on %(count)s lukematon ilmoitus huoneen edellisessä versiossa.", @@ -1460,10 +1460,10 @@ "Your profile": "Oma profiilisi", "Your Matrix account on ": "Matrix-tilisi palvelimella ", "Cannot reach homeserver": "Kotipalvelinta ei voida tavoittaa", - "Your Riot is misconfigured": "Riotin asetukset ovat pielessä", + "Your %(brand)s is misconfigured": "%(brand)sin asetukset ovat pielessä", "Cannot reach identity server": "Identiteettipalvelinta ei voida tavoittaa", "Ensure you have a stable internet connection, or get in touch with the server admin": "Varmista, että internet-yhteytesi on vakaa, tai ota yhteyttä palvelimen ylläpitäjään", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Pyydä Riot-ylläpitäjääsi tarkistamaan, onko asetuksissasivirheellisiä tai toistettuja merkintöjä.", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Pyydä %(brand)s-ylläpitäjääsi tarkistamaan, onko asetuksissasivirheellisiä tai toistettuja merkintöjä.", "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.": "Voit rekisteröityä, mutta osa toiminnoista on pois käytöstä kunnes identiteettipalvelin on jälleen toiminnassa. Jos tämä varoitus toistuu, tarkista asetuksesi tai ota yhteyttä palvelimen ylläpitäjään.", "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.": "Voit palauttaa salasanasi, mutta osa toiminnoista on pois käytöstä kunnes identiteettipalvelin on jälleen toiminnassa. Jos tämä varoitus toistuu, tarkista asetuksesi tai ota yhteyttä palvelimen ylläpitäjään.", "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.": "Voit kirjautua, mutta osa toiminnoista on pois käytöstä kunnes identiteettipalvelin on jälleen toiminnassa. Jos tämä varoitus toistuu, tarkista asetuksesi tai ota yhteyttä palvelimen ylläpitäjään.", @@ -1597,8 +1597,8 @@ "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Käyttäjän oikeustasoa muutettaessa tapahtui virhe. Varmista, että sinulla on riittävät oikeudet ja yritä uudelleen.", "For a large amount of messages, this might take some time. Please don't refresh your client in the meantime.": "Suuren viestimäärän tapauksessa toiminto voi kestää jonkin aikaa. Älä lataa asiakasohjelmaasi uudelleen sillä aikaa.", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Kutsusi validoinnin yrittäminen palautti virheen (%(errcode)s). Voit koettaa välittää tämän tiedon huoneen ylläpitäjälle.", - "Use an identity server in Settings to receive invites directly in Riot.": "Aseta identiteettipalvelin asetuksissa saadaksesi kutsuja suoraan Riotissa.", - "Share this email in Settings to receive invites directly in Riot.": "Jaa tämä sähköposti asetuksissa saadaksesi kutsuja suoraan Riotissa.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Aseta identiteettipalvelin asetuksissa saadaksesi kutsuja suoraan %(brand)sissa.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Jaa tämä sähköposti asetuksissa saadaksesi kutsuja suoraan %(brand)sissa.", "Please fill why you're reporting.": "Kerro miksi teet ilmoitusta.", "Report Content to Your Homeserver Administrator": "Ilmoita sisällöstä kotipalvelimesi ylläpitäjälle", "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Tämän viestin ilmoittaminen lähettää sen yksilöllisen tapahtumatunnuksen (event ID) kotipalvelimesi ylläpitäjälle. Jos tämän huoneen viestit on salattu, kotipalvelimesi ylläpitäjä ei voi lukea viestin tekstiä tai nähdä tiedostoja tai kuvia.", @@ -1616,7 +1616,7 @@ "Deactivate user?": "Deaktivoi käyttäjä?", "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?": "Käyttäjän deaktivoiminen kirjaa hänet ulos ja estää häntä kirjautumasta takaisin sisään. Lisäksi hän poistuu kaikista huoneista, joissa hän on. Tätä toimintoa ei voi kumota. Oletko varma, että haluat deaktivoida tämän käyttäjän?", "Deactivate user": "Deaktivoi käyttäjä", - "Link this email with your account in Settings to receive invites directly in Riot.": "Linkitä tämä sähköposti tilisi kanssa asetuksissa, jotta voit saada kutsuja suoraan Riotissa.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Linkitä tämä sähköposti tilisi kanssa asetuksissa, jotta voit saada kutsuja suoraan %(brand)sissa.", "Room alias": "Huoneen alias", "e.g. my-room": "esim. oma-huone", "Please provide a room alias": "Anna huoneen alias", @@ -1708,7 +1708,7 @@ "Your avatar URL": "Profiilikuvasi URL-osoite", "Your user ID": "Käyttäjätunnuksesi", "Your theme": "Teemasi", - "Riot URL": "Riotin URL-osoite", + "%(brand)s URL": "%(brand)sin URL-osoite", "Room ID": "Huoneen tunnus", "Widget ID": "Sovelman tunnus", "Using this widget may share data with %(widgetDomain)s.": "Tämän sovelman käyttäminen voi jakaa tietoja verkkotunnukselle %(widgetDomain)s.", @@ -1742,7 +1742,7 @@ "You are currently ignoring:": "Jätät tällä hetkellä huomiotta:", "You are not subscribed to any lists": "Et ole liittynyt yhteenkään listaan", "You are currently subscribed to:": "Olet tällä hetkellä liittynyt:", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Lisää käyttäjät ja palvelimet, jotka haluat jättää huomiotta. Voit käyttää asteriskia(*) täsmätäksesi mihin tahansa merkkeihin. Esimerkiksi, @bot:* jättäisi huomiotta kaikki käyttäjät, joiden nimi alkaa kirjaimilla ”bot”.", + "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.": "Lisää käyttäjät ja palvelimet, jotka haluat jättää huomiotta. Voit käyttää asteriskia(*) täsmätäksesi mihin tahansa merkkeihin. Esimerkiksi, @bot:* jättäisi huomiotta kaikki käyttäjät, joiden nimi alkaa kirjaimilla ”bot”.", "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.": "Käyttäjien huomiotta jättäminen tapahtuu estolistojen kautta, joissa on tieto siitä, kenet pitää estää. Estolistalle liittyminen tarkoittaa, että ne käyttäjät/palvelimet, jotka tämä lista estää, eivät näy sinulle.", "Personal ban list": "Henkilökohtainen estolista", "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.": "Henkilökohtainen estolistasi sisältää kaikki käyttäjät/palvelimet, joilta et henkilökohtaisesti halua nähdä viestejä. Sen jälkeen, kun olet estänyt ensimmäisen käyttäjän/palvelimen, huonelistaan ilmestyy uusi huone nimeltä ”Tekemäni estot” (englanniksi ”My Ban List”). Pysy tässä huoneessa, jotta estolistasi pysyy voimassa.", @@ -1753,7 +1753,7 @@ "Room ID or alias of ban list": "Huoneen tunnus tai estolistan alias", "Integration Manager": "Integraatioiden lähde", "Read Marker lifetime (ms)": "Viestin luetuksi merkkaamisen kesto (ms)", - "Read Marker off-screen lifetime (ms)": "Viestin luetuksi merkkaamisen kesto, kun Riot ei ole näkyvissä (ms)", + "Read Marker off-screen lifetime (ms)": "Viestin luetuksi merkkaamisen kesto, kun %(brand)s ei ole näkyvissä (ms)", "Click the link in the email you received to verify and then click continue again.": "Klikkaa lähettämässämme sähköpostissa olevaa linkkiä vahvistaaksesi tunnuksesi. Klikkaa sen jälkeen tällä sivulla olevaa painiketta ”Jatka”.", "Complete": "Valmis", "Revoke": "Kumoa", @@ -1785,7 +1785,7 @@ "Integrations are disabled": "Integraatiot ovat pois käytöstä", "Enable 'Manage Integrations' in Settings to do this.": "Ota integraatiot käyttöön asetuksista kohdasta ”Hallitse integraatioita”.", "Integrations not allowed": "Integraatioiden käyttö on kielletty", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Riot-instanssisi ei salli sinun käyttävän integraatioiden lähdettä tämän tekemiseen. Ota yhteys ylläpitäjääsi.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "%(brand)s-instanssisi ei salli sinun käyttävän integraatioiden lähdettä tämän tekemiseen. Ota yhteys ylläpitäjääsi.", "Reload": "Lataa uudelleen", "Take picture": "Ota kuva", "Remove for everyone": "Poista kaikilta", @@ -1852,7 +1852,7 @@ "Upgrade private room": "Päivitä yksityinen huone", "Upgrade public room": "Päivitä julkinen huone", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Huoneen päivittäminen on monimutkainen toimenpide ja yleensä sitä suositellaan, kun huone on epävakaa bugien, puuttuvien ominaisuuksien tai tietoturvaongelmien takia.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Tämä yleensä vaikuttaa siihen, miten huonetta käsitellään palvelimella. Jos sinulla on ongelmia Riottisi kanssa, ilmoita virheestä.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Tämä yleensä vaikuttaa siihen, miten huonetta käsitellään palvelimella. Jos sinulla on ongelmia %(brand)stisi kanssa, ilmoita virheestä.", "You'll upgrade this room from to .": "Olat päivittämässä tätä huonetta versiosta versioon .", "Upgrade": "Päivitä", "Enter secret storage passphrase": "Syötä salavaraston salalause", @@ -1881,10 +1881,10 @@ "Direct Messages": "Yksityisviestit", "Go": "Mene", "Lock": "Lukko", - "The version of Riot": "Riotin versio", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Käytätkö Riotia laitteella, jossa kosketus on ensisijainen syöttömekanismi", - "Whether you're using Riot as an installed Progressive Web App": "Käytätkö Riotia asennettuna PWA:na (Progressive Web App)", - "The information being sent to us to help make Riot better includes:": "Tietoihin, joita lähetetään Riotin kehittäjille sovelluksen kehittämiseksi sisältyy:", + "The version of %(brand)s": "%(brand)sin versio", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Käytätkö %(brand)sia laitteella, jossa kosketus on ensisijainen syöttömekanismi", + "Whether you're using %(brand)s as an installed Progressive Web App": "Käytätkö %(brand)sia asennettuna PWA:na (Progressive Web App)", + "The information being sent to us to help make %(brand)s better includes:": "Tietoihin, joita lähetetään %(brand)sin kehittäjille sovelluksen kehittämiseksi sisältyy:", "Cancel entering passphrase?": "Peruuta salalauseen syöttäminen?", "Encryption upgrade available": "Salauksen päivitys saatavilla", "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s lisäsi osoitteet %(addedAddresses)s ja %(count)s muuta osoitetta tähän huoneeseen", @@ -2187,7 +2187,7 @@ "%(completed)s of %(total)s keys restored": "%(completed)s / %(total)s avainta palautettu", "Keys restored": "Avaimet palautettu", "Successfully restored %(sessionCount)s keys": "%(sessionCount)s avaimen palautus onnistui", - "This requires the latest Riot on your other devices:": "Tämä vaatii uusimman Riotin muilla laitteillasi:", + "This requires the latest %(brand)s on your other devices:": "Tämä vaatii uusimman %(brand)sin muilla laitteillasi:", "Currently indexing: %(currentRoom)s": "Indeksoidaan huonetta: %(currentRoom)s", "Jump to oldest unread message": "Siirry vanhimpaan lukemattomaan viestiin", "Opens chat with the given user": "Avaa keskustelun annetun käyttäjän kanssa", @@ -2210,8 +2210,8 @@ "Reset cross-signing and secret storage": "Nollaa ristivarmennus ja salavarasto", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Varmenna jokainen käyttäjän istunto erikseen, äläkä luota ristivarmennettuihin laitteisiin.", "Securely cache encrypted messages locally for them to appear in search results.": "Pidä salatut viestit turvallisessa välimuistissa, jotta ne näkyvät hakutuloksissa.", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riotissa ei ole joitain komponentteja, joita tarvitaan viestien turvalliseen välimuistitallennukseen. Jos haluat kokeilla tätä ominaisuutta, käännä mukautettu Riot Desktop, jossa on mukana hakukomponentit.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot ei voi tallentaa viestejä turvalliseen välimuistiin pyöriessään selaimessa. Käytä Electron-pohjaista Riot Desktop-sovellusta nähdäksesi salatut viestit hakutuloksissa.", + "%(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)sissa ei ole joitain komponentteja, joita tarvitaan viestien turvalliseen välimuistitallennukseen. Jos haluat kokeilla tätä ominaisuutta, käännä mukautettu %(brand)s Desktop, jossa on mukana hakukomponentit.", + "%(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 ei voi tallentaa viestejä turvalliseen välimuistiin pyöriessään selaimessa. Käytä Electron-pohjaista %(brand)s Desktop-sovellusta nähdäksesi salatut viestit hakutuloksissa.", "This session is backing up your keys. ": "Tämä istunto varmuuskopioi avaimesi. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Tämä istunto ei varmuuskopioi avaimiasi, mutta sillä on olemassaoleva varmuuskopio, jonka voit palauttaa ja lisätä jatkaaksesi.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Yhdistä tämä istunto avainten varmuuskopiointiin ennen uloskirjautumista, jotta et menetä avaimia, jotka ovat vain tässä istunnossa.", @@ -2254,7 +2254,7 @@ "Verify User": "Varmenna käyttäjä", "For extra security, verify this user by checking a one-time code on both of your devices.": "Lisäturvaksi, varmenna tämä käyttäjä tarkistamalla koodin kummankin laitteella.", "The homeserver the user you’re verifying is connected to": "Käyttäjä, jota varmennat, on kotipalvelimella", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Istunto, jota yrität varmentaa, ei tue QR-koodin skannausta tai emoji-varmennusta, joita Riot tukee. Kokeile eri asiakasohjelmalla.", + "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.": "Istunto, jota yrität varmentaa, ei tue QR-koodin skannausta tai emoji-varmennusta, joita %(brand)s tukee. Kokeile eri asiakasohjelmalla.", "Verify by scanning": "Varmenna skannaamalla", "If you can't scan the code above, verify by comparing unique emoji.": "Jos et pysty skannaamaan yläpuolella olevaa koodia, varmenna vertaamalla emojia.", "Verify by comparing unique emoji.": "Varmenna vertaamalla uniikkia emojia.", @@ -2308,7 +2308,7 @@ "Start a conversation with someone using their name, username (like ) or email address.": "Aloita keskustelu jonkun kanssa käyttäen hänen nimeä, käyttäjätunnus (kuten ) tai sähköpostiosoitetta.", "Invite someone using their name, username (like ), email address or share this room.": "Kutsu tähän huoneeseen käyttäen nimeä, käyttäjätunnusta (kuten ), sähköpostiosoitetta tai jaa tämä huone.", "Your unverified session '%(displayName)s' is requesting encryption keys.": "Varmentamaton istuntosi '%(displayName)s' pyytää salausavaimia.", - "Riot encountered an error during upload of:": "Riot kohtasi virheen lähettäessään:", + "%(brand)s encountered an error during upload of:": "%(brand)s kohtasi virheen lähettäessään:", "Upload completed": "Lähetys valmis", "Cancelled signature upload": "Allekirjoituksen lähetys peruutettu", "Unable to upload": "Lähettäminen ei ole mahdollista", @@ -2317,8 +2317,8 @@ "Room name or address": "Huoneen nimi tai osoite", "Joins room with given address": "Liittyy annetun osoitteen mukaiseen huoneeseen", "Unrecognised room address:": "Tunnistamaton huoneen osoite:", - "Help us improve Riot": "Auta parantamaan Riotia", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Lähetä anonyymiä käyttötietoa, joka auttaa Riotin kehittämisessä. Toiminto käyttää evästettä.", + "Help us improve %(brand)s": "Auta parantamaan %(brand)sia", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Lähetä anonyymiä käyttötietoa, joka auttaa %(brand)sin kehittämisessä. Toiminto käyttää evästettä.", "I want to help": "Haluan auttaa", "Your homeserver has exceeded its user limit.": "Kotipalvelimesi on ylittänyt käyttäjärajansa.", "Your homeserver has exceeded one of its resource limits.": "Kotipalvelimesi on ylittänyt jonkin resurssirajansa.", @@ -2327,8 +2327,8 @@ "Set password": "Aseta salasana", "To return to your account in future you need to set a password": "Päästäksesi jatkossa takaisin tilillesi sinun täytyy asettaa salasana", "Restart": "Käynnistä uudelleen", - "Upgrade your Riot": "Päivitä Riot", - "A new version of Riot is available!": "Uusi Riotin versio on saatavilla!", + "Upgrade your %(brand)s": "Päivitä %(brand)s", + "A new version of %(brand)s is available!": "Uusi %(brand)sin versio on saatavilla!", "New version available. Update now.": "Uusi versio saatavilla. Päivitä nyt.", "To link to this room, please add an address.": "Lisää osoite linkittääksesi tähän huoneeseen.", "Error creating address": "Virhe osoitetta luotaessa", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 3beb6ea836..0113270570 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -169,9 +169,9 @@ "%(senderName)s removed their profile picture.": "%(senderName)s a supprimé son image de profil.", "%(senderName)s requested a VoIP conference.": "%(senderName)s a demandé une téléconférence audio.", "Return to login screen": "Retourner à l’écran de connexion", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot n’a pas la permission de vous envoyer des notifications - merci de vérifier les paramètres de votre navigateur", - "Riot was not given permission to send notifications - please try again": "Riot n’a pas reçu la permission de vous envoyer des notifications - veuillez réessayer", - "riot-web version:": "Version de riot-web :", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s n’a pas la permission de vous envoyer des notifications - merci de vérifier les paramètres de votre navigateur", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s n’a pas reçu la permission de vous envoyer des notifications - veuillez réessayer", + "%(brand)s version:": "Version de %(brand)s :", "Room %(roomId)s not visible": "Le salon %(roomId)s n'est pas visible", "Room Colour": "Couleur du salon", "Rooms": "Salons", @@ -286,7 +286,7 @@ "Please select the destination room for this message": "Merci de sélectionner le salon de destination pour ce message", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s a supprimé le nom du salon.", "Analytics": "Collecte de données", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot collecte des données anonymes qui nous permettent d’améliorer l’application.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s collecte des données anonymes qui nous permettent d’améliorer l’application.", "Passphrases must match": "Les phrases de passe doivent être identiques", "Passphrase must not be empty": "Le mot de passe ne peut pas être vide", "Export room keys": "Exporter les clés de salon", @@ -309,7 +309,7 @@ "To continue, please enter your password.": "Pour continuer, veuillez saisir votre mot de passe.", "I verify that the keys match": "J’ai vérifié que les clés correspondaient", "Unable to restore session": "Impossible de restaurer la session", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Si vous avez utilisé une version plus récente de Riot précédemment, votre session risque d’être incompatible avec cette version. Fermez cette fenêtre et retournez à la version plus récente.", + "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.": "Si vous avez utilisé une version plus récente de %(brand)s précédemment, votre session risque d’être incompatible avec cette version. Fermez cette fenêtre et retournez à la version plus récente.", "Unknown Address": "Adresse inconnue", "Unblacklist": "Supprimer de la liste noire", "Blacklist": "Ajouter à la liste noire", @@ -353,7 +353,7 @@ "No Microphones detected": "Aucun micro détecté", "No Webcams detected": "Aucune webcam détectée", "No media permissions": "Pas de permission pour les médias", - "You may need to manually permit Riot to access your microphone/webcam": "Il est possible que vous deviez manuellement autoriser Riot à accéder à votre micro/webcam", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Il est possible que vous deviez manuellement autoriser %(brand)s à accéder à votre micro/webcam", "Default Device": "Appareil par défaut", "Microphone": "Micro", "Camera": "Caméra", @@ -421,7 +421,7 @@ "(no answer)": "(pas de réponse)", "(unknown failure: %(reason)s)": "(erreur inconnue : %(reason)s)", "Your browser does not support the required cryptography extensions": "Votre navigateur ne supporte pas les extensions cryptographiques nécessaires", - "Not a valid Riot keyfile": "Fichier de clé Riot non valide", + "Not a valid %(brand)s keyfile": "Fichier de clé %(brand)s non valide", "Authentication check failed: incorrect password?": "Erreur d’authentification : mot de passe incorrect ?", "Do you want to set an email address?": "Souhaitez-vous configurer une adresse e-mail ?", "This will allow you to reset your password and receive notifications.": "Ceci vous permettra de réinitialiser votre mot de passe et de recevoir des notifications.", @@ -669,7 +669,7 @@ "Answer": "Répondre", "Send": "Envoyer", "Old cryptography data detected": "Anciennes données de chiffrement détectées", - "Data from an older version of Riot 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.": "Nous avons détecté des données d'une ancienne version de Riot. Le chiffrement de bout en bout n'aura pas fonctionné correctement sur l'ancienne version. Les messages chiffrés échangés récemment dans l'ancienne version ne sont peut-être pas déchiffrables dans cette version. Les échanges de message avec cette version peuvent aussi échouer. Si vous rencontrez des problèmes, déconnectez-vous puis reconnectez-vous. Pour conserver l'historique des messages, exportez puis réimportez vos clés de chiffrement.", + "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.": "Nous avons détecté des données d'une ancienne version de %(brand)s. Le chiffrement de bout en bout n'aura pas fonctionné correctement sur l'ancienne version. Les messages chiffrés échangés récemment dans l'ancienne version ne sont peut-être pas déchiffrables dans cette version. Les échanges de message avec cette version peuvent aussi échouer. Si vous rencontrez des problèmes, déconnectez-vous puis reconnectez-vous. Pour conserver l'historique des messages, exportez puis réimportez vos clés de chiffrement.", "Warning": "Attention", "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.": "Vous ne pourrez pas annuler cette modification car vous vous destituez. Si vous êtes le dernier utilisateur privilégié de ce salon, il sera impossible de récupérer les privilèges.", "%(count)s of your messages have not been sent.|one": "Votre message n'a pas été envoyé.", @@ -683,10 +683,10 @@ "Minimize apps": "Minimiser les applications", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Le respect de votre vie privée est important pour nous, donc nous ne collectons aucune donnée personnelle ou permettant de vous identifier pour nos statistiques.", "Learn more about how we use analytics.": "En savoir plus sur notre utilisation des statistiques.", - "The information being sent to us to help make Riot.im better includes:": "Les informations qui nous sont envoyées pour nous aider à améliorer Riot.im comprennent :", + "The information being sent to us to help make %(brand)s better includes:": "Les informations qui nous sont envoyées pour nous aider à améliorer %(brand)s comprennent :", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Si la page contient des informations permettant de vous identifier, comme un salon, un identifiant d'utilisateur ou de groupe, ces données sont enlevées avant qu'elle ne soit envoyée au serveur.", "The platform you're on": "La plateforme que vous utilisez", - "The version of Riot.im": "La version de Riot.im", + "The version of %(brand)s": "La version de %(brand)s", "Your language of choice": "La langue que vous avez choisie", "Which officially provided instance you are using, if any": "L'instance officielle que vous utilisez, si vous en utilisez une", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Si vous utilisez le mode « texte enrichi » de l'éditeur de texte enrichi", @@ -701,7 +701,7 @@ "Failed to remove tag %(tagName)s from room": "Échec de la suppression de l'étiquette %(tagName)s du salon", "Failed to add tag %(tagName)s to room": "Échec de l'ajout de l'étiquette %(tagName)s au salon", "Clear filter": "Supprimer les filtres", - "Did you know: you can use communities to filter your Riot.im experience!": "Le saviez-vous : vous pouvez utiliser les communautés pour filtrer votre expérience Riot.im !", + "Did you know: you can use communities to filter your %(brand)s experience!": "Le saviez-vous : vous pouvez utiliser les communautés pour filtrer votre expérience %(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.": "Pour activer un filtre, faites glisser un avatar de communauté sur le panneau des filtres tout à gauche de l'écran. Vous pouvez cliquer sur un avatar dans ce panneau quand vous le souhaitez afin de ne voir que les salons et les personnes associés à cette communauté.", "Key request sent.": "Demande de clé envoyée.", "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Vu par %(displayName)s (%(userName)s) à %(dateTime)s", @@ -721,7 +721,7 @@ "Who can join this community?": "Qui peut rejoindre cette communauté ?", "Everyone": "Tout le monde", "Fetching third party location failed": "Échec de la récupération de la localisation tierce", - "A new version of Riot is available.": "Une nouvelle version de Riot est disponible.", + "A new version of %(brand)s is available.": "Une nouvelle version de %(brand)s est disponible.", "Send Account Data": "Envoyer les données du compte", "All notifications are currently disabled for all targets.": "Toutes les notifications sont désactivées pour tous les appareils.", "Uploading report": "Envoi du rapport", @@ -775,7 +775,7 @@ "Search…": "Rechercher…", "You have successfully set a password and an email address!": "Vous avez défini un mot de passe et une adresse e-mail avec succès !", "Remove %(name)s from the directory?": "Supprimer %(name)s du répertoire ?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilise de nombreuses fonctionnalités avancées du navigateur, certaines ne sont pas disponibles ou expérimentales dans votre navigateur actuel.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s utilise de nombreuses fonctionnalités avancées du navigateur, certaines ne sont pas disponibles ou expérimentales dans votre navigateur actuel.", "Developer Tools": "Outils de développement", "Remember, you can always set an email address in user settings if you change your mind.": "Souvenez-vous que vous pourrez toujours définir une adresse e-mail dans les paramètres de l'utilisateur si vous changez d’avis.", "Explore Account Data": "Explorer les données du compte", @@ -818,8 +818,8 @@ "Show message in desktop notification": "Afficher le message dans les notifications de bureau", "Unhide Preview": "Dévoiler l'aperçu", "Unable to join network": "Impossible de rejoindre le réseau", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Vous les avez probablement configurées dans un autre client que Riot. Vous ne pouvez pas les configurer dans Riot mais elles s'appliquent quand même", - "Sorry, your browser is not able to run Riot.": "Désolé, Riot n'est pas supporté par votre navigateur.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Vous les avez probablement configurées dans un autre client que %(brand)s. Vous ne pouvez pas les configurer dans %(brand)s mais elles s'appliquent quand même", + "Sorry, your browser is not able to run %(brand)s.": "Désolé, %(brand)s n'est pas supporté par votre navigateur.", "Uploaded on %(date)s by %(user)s": "Téléchargé le %(date)s par %(user)s", "Messages in group chats": "Messages dans les discussions de groupe", "Yesterday": "Hier", @@ -828,7 +828,7 @@ "Unable to fetch notification target list": "Impossible de récupérer la liste des appareils recevant les notifications", "Set Password": "Définir un mot de passe", "Off": "Désactivé", - "Riot does not know how to join a room on this network": "Riot ne peut pas joindre un salon sur ce réseau", + "%(brand)s does not know how to join a room on this network": "%(brand)s ne peut pas joindre un salon sur ce réseau", "Mentions only": "Seulement les mentions", "You can now return to your account after signing out, and sign in on other devices.": "Vous pouvez maintenant revenir sur votre compte après vous être déconnecté, et vous identifier sur d'autres appareils.", "Enable email notifications": "Activer les notifications par e-mail", @@ -874,8 +874,8 @@ "e.g. %(exampleValue)s": "par ex. %(exampleValue)s", "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é des messages dans Matrix est la même que celle des e-mails. Quand nous oublions vos messages, cela signifie que les messages que vous avez envoyés ne seront partagés avec aucun nouvel utilisateur ou avec les utilisateurs non enregistrés, mais les utilisateurs enregistrés qui ont déjà eu accès à ces messages en conserveront leur propre copie.", "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)": "Veuillez oublier tous les messages que j'ai envoyé quand mon compte sera désactivé (Avertissement : les futurs utilisateurs verront des conversations incomplètes)", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Veuillez aider Riot.im à s'améliorer en envoyant des données d'utilisation anonymes. Cela utilisera un cookie (veuillez voir notre politique de cookie).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Veuillez aider Riot.im à s'améliorer en envoyant des données d'utilisation anonymes. Cela utilisera un cookie.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Veuillez aider %(brand)s à s'améliorer en envoyant des données d'utilisation anonymes. Cela utilisera un cookie (veuillez voir notre politique de cookie).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Veuillez aider %(brand)s à s'améliorer en envoyant des données d'utilisation anonymes. Cela utilisera un cookie.", "Yes, I want to help!": "Oui, je veux aider !", "Can't leave Server Notices room": "Impossible de quitter le salon des Annonces du serveur", "This room is used for important messages from the Homeserver, so you cannot leave it.": "Ce salon est utilisé pour les messages importants du serveur d'accueil, donc vous ne pouvez pas en partir.", @@ -944,11 +944,11 @@ "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s a ajouté %(addedAddresses)s et supprimé %(removedAddresses)s comme adresses pour ce salon.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s à défini l'adresse principale pour ce salon comme %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s a supprimé l'adresse principale de ce salon.", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot utilise maintenant 3 à 5 fois moins de mémoire, en ne chargeant les informations des autres utilisateurs que quand elles sont nécessaires. Veuillez patienter pendant que l'on se resynchronise avec le serveur !", - "Updating Riot": "Mise à jour de Riot", + "%(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!": "%(brand)s utilise maintenant 3 à 5 fois moins de mémoire, en ne chargeant les informations des autres utilisateurs que quand elles sont nécessaires. Veuillez patienter pendant que l'on se resynchronise avec le serveur !", + "Updating %(brand)s": "Mise à jour de %(brand)s", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Avant de soumettre vos journaux, vous devez créer une « issue » sur GitHub pour décrire votre problème.", - "You've previously used Riot 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, Riot needs to resync your account.": "Vous avez utilisé auparavant Riot sur %(host)s avec le chargement différé activé. Dans cette version le chargement différé est désactivé. Comme le cache local n'est pas compatible entre ces deux réglages, Riot doit resynchroniser votre compte.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Si l'autre version de Riot est encore ouverte dans un autre onglet, merci de le fermer car l'utilisation de Riot sur le même hôte avec le chargement différé activé et désactivé à la fois causera des problèmes.", + "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.": "Vous avez utilisé auparavant %(brand)s sur %(host)s avec le chargement différé activé. Dans cette version le chargement différé est désactivé. Comme le cache local n'est pas compatible entre ces deux réglages, %(brand)s doit resynchroniser votre compte.", + "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.": "Si l'autre version de %(brand)s est encore ouverte dans un autre onglet, merci de le fermer car l'utilisation de %(brand)s sur le même hôte avec le chargement différé activé et désactivé à la fois causera des problèmes.", "Incompatible local cache": "Cache local incompatible", "Clear cache and resync": "Vider le cache et resynchroniser", "Please review and accept the policies of this homeserver:": "Veuillez lire et accepter les politiques de ce serveur d'accueil :", @@ -957,8 +957,8 @@ "Open Devtools": "Ouvrir les outils développeur", "Show developer tools": "Afficher les outils de développeur", "Please review and accept all of the homeserver's policies": "Veuillez lire et accepter toutes les politiques du serveur d'accueil", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Pour éviter de perdre l'historique de vos discussions, vous devez exporter vos clés avant de vous déconnecter. Vous devez revenir à une version plus récente de Riot pour pouvoir le faire", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Vous avez utilisé une version plus récente de Riot sur %(host)s. Pour utiliser à nouveau cette version avec le chiffrement de bout en bout, vous devez vous déconnecter et vous reconnecter. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Pour éviter de perdre l'historique de vos discussions, vous devez exporter vos clés avant de vous déconnecter. Vous devez revenir à une version plus récente de %(brand)s pour pouvoir le faire", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Vous avez utilisé une version plus récente de %(brand)s sur %(host)s. Pour utiliser à nouveau cette version avec le chiffrement de bout en bout, vous devez vous déconnecter et vous reconnecter. ", "Incompatible Database": "Base de données incompatible", "Continue With Encryption Disabled": "Continuer avec le chiffrement désactivé", "Sign in with single sign-on": "Se connecter avec l'authentification unique", @@ -1114,8 +1114,8 @@ "Theme": "Thème", "Account management": "Gestion du compte", "Deactivating your account is a permanent action - be careful!": "La désactivation du compte est une action permanente. Soyez prudent !", - "For help with using Riot, click here.": "Pour obtenir de l'aide sur l'utilisation de Riot, cliquez ici.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Pour obtenir de l'aide sur l'utilisation de Riot, cliquez ici ou commencez une discussion avec notre bot en utilisant le bouton ci-dessous.", + "For help with using %(brand)s, click here.": "Pour obtenir de l'aide sur l'utilisation de %(brand)s, cliquez ici.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Pour obtenir de l'aide sur l'utilisation de %(brand)s, cliquez ici ou commencez une discussion avec notre bot en utilisant le bouton ci-dessous.", "Help & About": "Aide & À propos", "Bug reporting": "Signalement d'anomalies", "FAQ": "FAQ", @@ -1125,7 +1125,7 @@ "Room list": "Liste de salons", "Timeline": "Historique", "Autocomplete delay (ms)": "Délai pour l'autocomplétion (ms)", - "Chat with Riot Bot": "Discuter avec le bot Riot", + "Chat with %(brand)s Bot": "Discuter avec le bot %(brand)s", "Roles & Permissions": "Rôles & Permissions", "To link to this room, please add an alias.": "Pour partager ce salon, veuillez créer un alias.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Les modifications concernant l'accès à l'historique ne s'appliqueront qu'aux futurs messages de ce salon. La visibilité de l'historique existant ne sera pas modifiée.", @@ -1369,8 +1369,8 @@ "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.": "Un widget provenant de %(widgetUrl)s souhaite vérifier votre identité. Si vous acceptez cela, le widget pourra vérifier votre identifiant d’utilisateur mais il ne pourra rien faire en se faisant passer pour vous.", "Remember my selection for this widget": "Se souvenir de mon choix pour ce widget", "Deny": "Refuser", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot n’a pas pu récupérer la liste des protocoles depuis le serveur d’accueil. Ce serveur d’accueil est peut-être trop vieux pour prendre en charge les réseaux tiers.", - "Riot failed to get the public room list.": "Riot n’a pas pu récupérer la liste des salons publics.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s n’a pas pu récupérer la liste des protocoles depuis le serveur d’accueil. Ce serveur d’accueil est peut-être trop vieux pour prendre en charge les réseaux tiers.", + "%(brand)s failed to get the public room list.": "%(brand)s n’a pas pu récupérer la liste des salons publics.", "The homeserver may be unavailable or overloaded.": "Le serveur d’accueil est peut-être indisponible ou surchargé.", "You have %(count)s unread notifications in a prior version of this room.|other": "Vous avez %(count)s notifications non lues dans une version précédente de ce salon.", "You have %(count)s unread notifications in a prior version of this room.|one": "Vous avez %(count)s notification non lue dans une version précédente de ce salon.", @@ -1476,8 +1476,8 @@ "Browse": "Parcourir", "Cannot reach homeserver": "Impossible de joindre le serveur d’accueil", "Ensure you have a stable internet connection, or get in touch with the server admin": "Vérifiez que vous avec une connexion internet stable ou contactez l’administrateur du serveur", - "Your Riot is misconfigured": "Votre Riot est mal configuré", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Demandez à votre administrateur Riot de vérifier que votre configuration ne contient pas d’entrées incorrectes ou en double.", + "Your %(brand)s is misconfigured": "Votre %(brand)s est mal configuré", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Demandez à votre administrateur %(brand)s de vérifier que votre configuration ne contient pas d’entrées incorrectes ou en double.", "Unexpected error resolving identity server configuration": "Une erreur inattendue est survenue pendant la résolution de la configuration du serveur d’identité", "Use lowercase letters, numbers, dashes and underscores only": "Utiliser uniquement des lettres minuscules, chiffres, traits d’union et tirets bas", "Cannot reach identity server": "Impossible de joindre le serveur d’identité", @@ -1591,10 +1591,10 @@ "Sends a message as plain text, without interpreting it as markdown": "Envoie un message en texte brut, sans l’interpréter en format markdown", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Une erreur (%(errcode)s) a été retournée en essayant de valider votre invitation. Vous pouvez essayer de transmettre cette information à un administrateur du salon.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Cette invitation à %(roomName)s a été envoyée à %(email)s qui n’est pas associé à votre compte", - "Link this email with your account in Settings to receive invites directly in Riot.": "Liez cet e-mail à votre compte dans les paramètres pour recevoir les invitations directement dans Riot.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Liez cet e-mail à votre compte dans les paramètres pour recevoir les invitations directement dans %(brand)s.", "This invite to %(roomName)s was sent to %(email)s": "Cette invitation à %(roomName)s a été envoyée à %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Utilisez un serveur d’identité dans les paramètres pour recevoir une invitation directement dans Riot.", - "Share this email in Settings to receive invites directly in Riot.": "Partagez cet e-mail dans les paramètres pour recevoir les invitations directement dans Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Utilisez un serveur d’identité dans les paramètres pour recevoir une invitation directement dans %(brand)s.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Partagez cet e-mail dans les paramètres pour recevoir les invitations directement dans %(brand)s.", "Error changing power level": "Erreur de changement de rang", "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Une erreur est survenue lors du changement de rang de l’utilisateur. Vérifiez que vous avez les permissions nécessaires et réessayez.", "Bold": "Gras", @@ -1740,7 +1740,7 @@ "View rules": "Voir les règles", "You are currently subscribed to:": "Vous êtes actuellement inscrit(e) à :", "⚠ These settings are meant for advanced users.": "⚠ Ces paramètres sont prévus pour les utilisateurs avancés.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Ajoutez les utilisateurs et les serveurs que vous voulez ignorer ici. Utilisez des astérisques pour remplacer n’importe quel caractère. Par exemple, @bot:* ignorerait tous les utilisateurs qui ont le nom « bot » sur n’importe quel serveur.", + "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.": "Ajoutez les utilisateurs et les serveurs que vous voulez ignorer ici. Utilisez des astérisques pour remplacer n’importe quel caractère. Par exemple, @bot:* ignorerait tous les utilisateurs qui ont le nom « bot » sur n’importe quel serveur.", "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.": "Ignorer les gens est possible grâce à des listes de bannissement qui contiennent des règles sur les personnes à bannir. L’inscription à une liste de bannissement signifie que les utilisateurs/serveurs bloqués par cette liste seront cachés pour vous.", "Personal ban list": "Liste de bannissement personnelle", "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.": "Votre liste de bannissement personnelle contient tous les utilisateurs/serveurs dont vous ne voulez pas voir les messages personnellement. Quand vous aurez ignoré votre premier utilisateur/serveur, un nouveau salon nommé « Ma liste de bannissement » apparaîtra dans la liste de vos salons − restez dans ce salon pour que la liste de bannissement soit effective.", @@ -1765,7 +1765,7 @@ "Your avatar URL": "L’URL de votre avatar", "Your user ID": "Votre identifiant utilisateur", "Your theme": "Votre thème", - "Riot URL": "URL de Riot", + "%(brand)s URL": "URL de %(brand)s", "Room ID": "Identifiant du salon", "Widget ID": "Identifiant du widget", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "L’utilisation de ce widget pourrait partager des données avec %(widgetDomain)s et votre gestionnaire d’intégrations.", @@ -1785,7 +1785,7 @@ "Integrations are disabled": "Les intégrations sont désactivées", "Enable 'Manage Integrations' in Settings to do this.": "Activez « Gérer les intégrations » dans les paramètres pour faire ça.", "Integrations not allowed": "Les intégrations ne sont pas autorisées", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Votre Riot ne vous autorise pas à utiliser un gestionnaire d’intégrations pour faire ça. Contactez un administrateur.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Votre %(brand)s ne vous autorise pas à utiliser un gestionnaire d’intégrations pour faire ça. Contactez un administrateur.", "Reload": "Recharger", "Take picture": "Prendre une photo", "Remove for everyone": "Supprimer pour tout le monde", @@ -1809,7 +1809,7 @@ "Upgrade private room": "Mettre à niveau le salon privé", "Upgrade public room": "Mettre à niveau le salon public", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "La mise à niveau d’un salon est une action avancée et qui est généralement recommandée quand un salon est instable à cause d’anomalies, de fonctionnalités manquantes ou de failles de sécurité.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Cela n’affecte généralement que la façon dont le salon est traité sur le serveur. Si vous avez des problèmes avec votre Riot, signalez une anomalie.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Cela n’affecte généralement que la façon dont le salon est traité sur le serveur. Si vous avez des problèmes avec votre %(brand)s, signalez une anomalie.", "You'll upgrade this room from to .": "Vous allez mettre à niveau ce salon de vers .", "Upgrade": "Mettre à niveau", "Notification settings": "Paramètres de notification", @@ -1957,14 +1957,14 @@ "Manage": "Gérer", "Securely cache encrypted messages locally for them to appear in search results.": "Mettre en cache les messages chiffrés localement et de manière sécurisée pour qu’ils apparaissent dans les résultats de recherche.", "Enable": "Activer", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Il manque quelques composants à Riot pour mettre en cache les messages chiffrés localement de manière sécurisée. Si vous voulez essayer cette fonctionnalité, construisez Riot Desktop vous-même en ajoutant les composants de recherche.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot ne peut pas mettre en cache les messages chiffrés localement de manière sécurisée dans un navigateur web. Utilisez Riot Desktop pour que les messages chiffrés apparaissent dans les résultats de recherche.", + "%(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.": "Il manque quelques composants à %(brand)s pour mettre en cache les messages chiffrés localement de manière sécurisée. Si vous voulez essayer cette fonctionnalité, construisez %(brand)s Desktop vous-même en ajoutant les composants de recherche.", + "%(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 ne peut pas mettre en cache les messages chiffrés localement de manière sécurisée dans un navigateur web. Utilisez %(brand)s Desktop pour que les messages chiffrés apparaissent dans les résultats de recherche.", "Message search": "Recherche de message", "If disabled, messages from encrypted rooms won't appear in search results.": "Si l’option est désactivée, les messages des salons chiffrés n’apparaîtront pas dans les résultats de recherche.", "Disable": "Désactiver", "Not currently downloading messages for any room.": "Aucun téléchargement de message en cours pour les salons.", "Downloading mesages for %(currentRoom)s.": "Téléchargement des messages pour %(currentRoom)s.", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot met en cache les messages chiffrés localement et de manière sécurisée pour qu’ils apparaissent dans les résultats de recherche :", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s met en cache les messages chiffrés localement et de manière sécurisée pour qu’ils apparaissent dans les résultats de recherche :", "Space used:": "Espace utilisé :", "Indexed messages:": "Messages indexés :", "Number of rooms:": "Nombre de salons :", @@ -2149,12 +2149,12 @@ "Ask this user to verify their session, or manually verify it below.": "Demandez à cet utilisateur de vérifier sa session, ou vérifiez-la manuellement ci-dessous.", "Manually Verify": "Vérifier manuellement", "Verify by scanning": "Vérifier en scannant", - "The version of Riot": "La version de Riot", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Si vous utilisez Riot sur un appareil où le toucher est le mécanisme primaire de saisie", - "Whether you're using Riot as an installed Progressive Web App": "Si vous utilisez Riot en tant qu’application web progressive (PWA)", + "The version of %(brand)s": "La version de %(brand)s", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Si vous utilisez %(brand)s sur un appareil où le toucher est le mécanisme primaire de saisie", + "Whether you're using %(brand)s as an installed Progressive Web App": "Si vous utilisez %(brand)s en tant qu’application web progressive (PWA)", "Your user agent": "Votre agent utilisateur", - "The information being sent to us to help make Riot better includes:": "Les informations qui nous sont envoyées et qui nous aident à améliorer Riot comportent :", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "La session que vous essayez de vérifier ne prend pas en charge les codes QR ou la vérification d’émojis, qui sont les méthodes prises en charge par Riot. Essayez avec un autre client.", + "The information being sent to us to help make %(brand)s better includes:": "Les informations qui nous sont envoyées et qui nous aident à améliorer %(brand)s comportent :", + "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.": "La session que vous essayez de vérifier ne prend pas en charge les codes QR ou la vérification d’émojis, qui sont les méthodes prises en charge par %(brand)s. Essayez avec un autre client.", "You declined": "Vous avez refusé", "%(name)s declined": "%(name)s a refusé", "accepting …": "nous acceptons…", @@ -2237,7 +2237,7 @@ "a new cross-signing key signature": "une nouvelle signature de clé de signature croisée", "a device cross-signing signature": "une signature de signature croisée d’un appareil", "a key signature": "une signature de clé", - "Riot encountered an error during upload of:": "Riot a rencontré une erreur pendant l’envoi de :", + "%(brand)s encountered an error during upload of:": "%(brand)s a rencontré une erreur pendant l’envoi de :", "Upload completed": "Envoi terminé", "Cancelled signature upload": "Envoi de signature annulé", "Unabled to upload": "Envoi impossible", @@ -2401,7 +2401,7 @@ "Unable to query secret storage status": "Impossible de demander le statut du coffre secret", "Verify this login": "Vérifier cette connexion", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Confirmez votre identité en vérifiant cette connexion depuis une de vos autres sessions, cela lui permettra d’avoir accès aux messages chiffrés.", - "This requires the latest Riot on your other devices:": "Ceci nécessite la dernière version de Riot sur vos autres appareils :", + "This requires the latest %(brand)s on your other devices:": "Ceci nécessite la dernière version de %(brand)s sur vos autres appareils :", "or another cross-signing capable Matrix client": "ou un autre client Matrix compatible avec la signature croisée", "Use Recovery Passphrase or Key": "Utiliser la phrase secrète ou la clé de récupération", "Where you’re logged in": "Où vous vous êtes connecté", @@ -2464,13 +2464,13 @@ "This address is available to use": "Cette adresse est disponible", "This address is already in use": "Cette adresse est déjà utilisée", "Set a room address to easily share your room with other people.": "Définissez une adresse de salon pour le partager facilement avec d’autres personnes.", - "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Vous avez précédemment utilisé une version plus récente de Riot avec cette session. Pour réutiliser cette version avec le chiffrement de bout en bout, vous devrez vous déconnecter et vous reconnecter.", + "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Vous avez précédemment utilisé une version plus récente de %(brand)s avec cette session. Pour réutiliser cette version avec le chiffrement de bout en bout, vous devrez vous déconnecter et vous reconnecter.", "Address (optional)": "Adresse (optionnel)", "Delete the room address %(alias)s and remove %(name)s from the directory?": "Supprimer l’adresse du salon %(alias)s et supprimer %(name)s du répertoire ?", "delete the address.": "supprimer l’adresse.", "Use a different passphrase?": "Utiliser une phrase secrète différente ?", - "Help us improve Riot": "Aidez-nous à améliorer Riot", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Envoyez des données anonymes d’utilisation qui nous aident à améliorer Riot. Cela utilisera un cookie.", + "Help us improve %(brand)s": "Aidez-nous à améliorer %(brand)s", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Envoyez des données anonymes d’utilisation qui nous aident à améliorer %(brand)s. Cela utilisera un cookie.", "I want to help": "Je veux aider", "Your homeserver has exceeded its user limit.": "Votre serveur d’accueil a dépassé ses limites d’utilisateurs.", "Your homeserver has exceeded one of its resource limits.": "Votre serveur d’accueil a dépassé une de ses limites de ressources.", @@ -2479,8 +2479,8 @@ "Set password": "Définir le mot de passe", "To return to your account in future you need to set a password": "Pour réutiliser votre compte à l’avenir, vous devez définir un mot de passe", "Restart": "Redémarrer", - "Upgrade your Riot": "Mettre à niveau votre Riot", - "A new version of Riot is available!": "Une nouvelle version de Riot est disponible !", + "Upgrade your %(brand)s": "Mettre à niveau votre %(brand)s", + "A new version of %(brand)s is available!": "Une nouvelle version de %(brand)s est disponible !", "New version available. Update now.": "Nouvelle version disponible. Faire la mise à niveau maintenant.", "Emoji picker": "Sélecteur d’émojis", "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "L’administrateur de votre serveur a désactivé le chiffrement de bout en bout par défaut dans les salons privés et les messages directs.", @@ -2512,7 +2512,7 @@ "Light": "Clair", "Dark": "Sombre", "Customise your appearance": "Personnalisez l’apparence", - "Appearance Settings only affect this Riot session.": "Les paramètres d’apparence affecteront uniquement cette session de Riot.", + "Appearance Settings only affect this %(brand)s session.": "Les paramètres d’apparence affecteront uniquement cette session de %(brand)s.", "Recovery Key": "Clé de récupération", "This isn't the recovery key for your account": "Ce n’est pas la clé de récupération pour votre compte", "This isn't a valid recovery key": "Ce n’est pas une clé de récupération valide", diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 00ef29f9fd..27f5b922e3 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -55,8 +55,8 @@ "Failed to invite users to community": "Houbo un fallo convidando usuarias á comunidade", "Failed to invite users to %(groupId)s": "Houbo un fallo convidando usuarias a %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "Fallo ao engadir as seguintes salas a %(groupId)s:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot non ten permiso para enviarlle notificacións: comprobe os axustes do navegador", - "Riot was not given permission to send notifications - please try again": "Riot non ten permiso para enviar notificacións: inténteo de novo", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s non ten permiso para enviarlle notificacións: comprobe os axustes do navegador", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s non ten permiso para enviar notificacións: inténteo de novo", "Unable to enable Notifications": "Non se puideron activar as notificacións", "This email address was not found": "Non se atopou este enderezo de correo", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "O seu enderezo de correo semella non estar asociado a un ID Matrix neste servidor.", @@ -136,7 +136,7 @@ "Send": "Enviar", "Unnamed Room": "Sala sen nome", "Your browser does not support the required cryptography extensions": "O seu navegador non soporta as extensións de criptografía necesarias", - "Not a valid Riot keyfile": "Non é un ficheiro de chaves Riot válido", + "Not a valid %(brand)s keyfile": "Non é un ficheiro de chaves %(brand)s válido", "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", @@ -481,7 +481,7 @@ "Ignore request": "Ignorar petición", "Encryption key request": "Petición de chave de cifrado", "Unable to restore session": "Non se puido restaurar a sesión", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Se anteriormente utilizaches unha versión máis recente de Riot, a túa sesión podería non ser compatible con esta versión. Pecha esta ventá e volve á versión máis recente.", + "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.": "Se anteriormente utilizaches unha versión máis recente de %(brand)s, a túa sesión podería non ser compatible con esta versión. Pecha esta ventá e volve á versión máis recente.", "Invalid Email Address": "Enderezo de correo non válido", "This doesn't appear to be a valid email address": "Este non semella ser un enderezo de correo válido", "Verification Pending": "Verificación pendente", @@ -592,7 +592,7 @@ "Import E2E room keys": "Importar chaves E2E da sala", "Cryptography": "Criptografía", "Analytics": "Analytics", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot recolle información analítica anónima para permitirnos mellorar a aplicación.", + "%(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.", "Labs": "Labs", @@ -600,7 +600,7 @@ "Reject all %(invitedRooms)s invites": "Rexeitar todos os %(invitedRooms)s convites", "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 Riot to access your microphone/webcam": "Igual ten que permitir manualmente a Riot acceder ao seus micrófono e cámara", + "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", "No Webcams detected": "Non se detectaron cámaras", "Default Device": "Dispositivo por defecto", @@ -614,13 +614,13 @@ "click to reveal": "pulse para revelar", "Homeserver is": "O servidor de inicio é", "Identity Server is": "O servidor de identidade é", - "riot-web version:": "versión riot-web:", + "%(brand)s version:": "versión %(brand)s:", "olm version:": "versión olm:", "Failed to send email": "Fallo ao enviar correo electrónico", "The email address linked to your account must be entered.": "Debe introducir o correo electrónico ligado a súa conta.", "A new password must be entered.": "Debe introducir un novo contrasinal.", "New passwords must match each other.": "Os novos contrasinais deben ser coincidentes.", - "Data from an older version of Riot 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.": "Detectáronse datos de una versión anterior de Riot. Isto causará un mal funcionamento da criptografía extremo-a-extremo na versión antiga. As mensaxes cifradas extremo-a-extremo intercambiadas mentres utilizaba a versión anterior poderían non ser descifrables en esta versión. Isto tamén podería causar que mensaxes intercambiadas con esta versión tampouco funcionasen. Se ten problemas, desconéctese e conéctese de novo. Para manter o historial de mensaxes, exporte e reimporte as súas chaves.", + "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.": "Detectáronse datos de una versión anterior de %(brand)s. Isto causará un mal funcionamento da criptografía extremo-a-extremo na versión antiga. As mensaxes cifradas extremo-a-extremo intercambiadas mentres utilizaba a versión anterior poderían non ser descifrables en esta versión. Isto tamén podería causar que mensaxes intercambiadas con esta versión tampouco funcionasen. Se ten problemas, desconéctese e conéctese de novo. Para manter o historial de mensaxes, exporte e reimporte as súas chaves.", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Enviouse un correo a %(emailAddress)s. Unha vez sigas a ligazón que contén, preme embaixo.", "I have verified my email address": "Validei o meu enderezo de email", "Return to login screen": "Volver a pantalla de conexión", @@ -680,10 +680,10 @@ "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "O ficheiro exportado estará protexido con unha frase de paso. Debe introducir aquí esa frase de paso para descifrar o ficheiro.", "File to import": "Ficheiro a importar", "Import": "Importar", - "The information being sent to us to help make Riot.im better includes:": "A información enviada a Riot.im para axudarnos a mellorar inclúe:", + "The information being sent to us to help make %(brand)s better includes:": "A información enviada a %(brand)s para axudarnos a mellorar inclúe:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Se esta páxina inclúe información identificable como ID de grupo, usuaria ou sala, estes datos son eliminados antes de ser enviados ó servidor.", "The platform you're on": "A plataforma na que está", - "The version of Riot.im": "A versión de Riot.im", + "The version of %(brand)s": "A versión de %(brand)s", "Your language of choice": "A súa preferencia de idioma", "Which officially provided instance you are using, if any": "Se a houbese, que instancia oficial está a utilizar", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Se utiliza o modo Richtext ou non do editor de texto enriquecido", @@ -701,7 +701,7 @@ "Flair": "Popularidade", "Showing flair for these communities:": "Mostrar 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 Riot.im experience!": "Sabías que podes usar as comunidades para filtrar a túa experiencia en Riot.im!", + "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", "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Visto por %(displayName)s(%(userName)s en %(dateTime)s", @@ -721,7 +721,7 @@ "Who can join this community?": "Quen pode unirse a esta comunidade?", "Everyone": "Todo o mundo", "Fetching third party location failed": "Fallo ao obter a localización de terceiros", - "A new version of Riot is available.": "Está dispoñible unha nova versión de Riot.", + "A new version of %(brand)s is available.": "Está dispoñible unha nova versión de %(brand)s.", "Send Account Data": "Enviar datos da conta", "All notifications are currently disabled for all targets.": "Todas as notificacións están desactivadas para todos os destinos.", "Uploading report": "Informe da subida", @@ -775,7 +775,7 @@ "Enter keywords separated by a comma:": "Introduza palabras chave separadas por vírgulas:", "Search…": "Buscar…", "Remove %(name)s from the directory?": "Eliminar %(name)s do directorio?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utiliza características avanzadas do navegador, algunhas das cales non están dispoñibles ou son experimentais no seu navegador actual.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s utiliza características avanzadas do navegador, algunhas das cales non están dispoñibles ou son experimentais no seu navegador actual.", "Developer Tools": "Ferramentas para desenvolver", "Preparing to send logs": "Preparándose para enviar informe", "Remember, you can always set an email address in user settings if you change your mind.": "Lembra que sempre poderás poñer un enderezo de email nos axustes de usuaria se cambiases de idea.", @@ -822,8 +822,8 @@ "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.": "Os informes de depuración conteñen datos de utilización da aplicación como o teu nome de usuaria, os IDs ou alias de salas e grupos que visitachese os nomes de usuaria doutras usuarias. Non conteñen mensaxes.", "Unhide Preview": "Desagochar a vista previa", "Unable to join network": "Non se puido conectar ca rede", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode que os configurases nun cliente diferente de Riot. Non podes establecelos desde Riot pero aínda así aplicaranse", - "Sorry, your browser is not able to run Riot.": "Desculpe, o seu navegador non pode executar Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Pode que os configurases nun cliente diferente de %(brand)s. Non podes establecelos desde %(brand)s pero aínda así aplicaranse", + "Sorry, your browser is not able to run %(brand)s.": "Desculpe, o seu navegador non pode executar %(brand)s.", "Uploaded on %(date)s by %(user)s": "Subido a %(date)s por %(user)s", "Messages in group chats": "Mensaxes en grupos de chat", "Yesterday": "Onte", @@ -832,7 +832,7 @@ "Unable to fetch notification target list": "Non se puido procesar a lista de obxectivo de notificacións", "Set Password": "Establecer contrasinal", "Off": "Off", - "Riot does not know how to join a room on this network": "Riot non sabe como conectar cunha sala nesta rede", + "%(brand)s does not know how to join a room on this network": "%(brand)s non sabe como conectar cunha sala nesta rede", "Mentions only": "Só mencións", "You can now return to your account after signing out, and sign in on other devices.": "Podes voltar a túa conta tras desconectarte, e conectarte noutros dispositivos.", "Enable email notifications": "Activar notificacións de correo", @@ -868,8 +868,8 @@ "Share Link to User": "Compartir a ligazón coa usuaria", "Share room": "Compartir sala", "Muted Users": "Usuarias silenciadas", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Axuda a mellorar Riot.im enviando os datos anónimos de uso. Usaremos unha cookie (le aquí a nosa Política de Cookies).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Axuda a mellorar Riot.im enviando datos anónimos de uso. Esto usará unha cookie.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Axuda a mellorar %(brand)s enviando os datos anónimos de uso. Usaremos unha cookie (le aquí a nosa Política de Cookies).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Axuda a mellorar %(brand)s enviando datos anónimos de uso. Esto usará unha cookie.", "Yes, I want to help!": "Si, quero axudar!", "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.", @@ -931,12 +931,12 @@ "Confirm adding phone number": "Confirma a adición do teléfono", "Click the button below to confirm adding this phone number.": "Preme no botón inferior para confirmar que engades este número.", "Add Phone Number": "Engadir novo Número", - "The version of Riot": "A versión de Riot", + "The version of %(brand)s": "A versión de %(brand)s", "Whether or not you're logged in (we don't record your username)": "Se estás conectada ou non (non rexistramos o teu nome de usuaria)", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Se estás conectada utilizando Riot nun dispositivo maiormente táctil", - "Whether you're using Riot as an installed Progressive Web App": "Se estás a usar Riot como unha Progressive Web App instalada", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Se estás conectada utilizando %(brand)s nun dispositivo maiormente táctil", + "Whether you're using %(brand)s as an installed Progressive Web App": "Se estás a usar %(brand)s como unha Progressive Web App instalada", "Your user agent": "User Agent do navegador", - "The information being sent to us to help make Riot better includes:": "A información que nos envías para mellorar Riot inclúe:", + "The information being sent to us to help make %(brand)s better includes:": "A información que nos envías para mellorar %(brand)s inclúe:", "Please install Chrome, Firefox, or Safari for the best experience.": "Instala Chrome, Firefox, ou Safari para ter unha mellor experiencia.", "Sign In or Create Account": "Conéctate ou Crea unha Conta", "Sign In": "Conectar", @@ -946,7 +946,7 @@ "Sign Up": "Rexistro", "Sign in with single sign-on": "Conectar usando Single Sign On", "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "O eliminación das chaves de sinatura cruzada é permanente. Calquera a quen verificases con elas verá alertas de seguridade. Seguramente non queres facer esto, a menos que perdeses todos os dispositivos nos que podías asinar.", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Usaches anteriormente unha versión máis recente de Riot en %(host)s. Para usar esta versión de novo con cifrado E2E, tes que desconectar e conectar outra vez. ", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Usaches anteriormente unha versión máis recente de %(brand)s en %(host)s. Para usar esta versión de novo con cifrado E2E, tes que desconectar e conectar outra vez. ", "Confirm your account deactivation by using Single Sign On to prove your identity.": "Confirma a desactivación da túa conta usando Single Sign On para probar a túa identidade.", "To continue, use Single Sign On to prove your identity.": "Para continuar, usa Single Sign On para probar a túa identidade.", "Are you sure you want to sign out?": "Tes a certeza de querer desconectar?", @@ -1057,8 +1057,8 @@ "General": "Xeral", "Discovery": "Descubrir", "Deactivate account": "Desactivar conta", - "For help with using Riot, click here.": "Para ter axuda con Riot, preme aquí.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Se precisas axuda usando Riot, preme aquí ou inicia unha conversa co noso bot usando o botón inferior.", + "For help with using %(brand)s, click here.": "Para ter axuda con %(brand)s, preme aquí.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Se precisas axuda usando %(brand)s, preme aquí ou inicia unha conversa co noso bot usando o botón inferior.", "Help & About": "Axuda & Acerca de", "Security & Privacy": "Seguridade & Privacidade", "Where you’re logged in": "Onde estás conectada", @@ -1134,8 +1134,8 @@ "%(names)s and %(lastPerson)s are typing …": "%(names)s e %(lastPerson)s están escribindo…", "Cannot reach homeserver": "Non se acadou o servidor", "Ensure you have a stable internet connection, or get in touch with the server admin": "Asegúrate de que tes boa conexión a internet, ou contacta coa administración do servidor", - "Your Riot is misconfigured": "O teu Riot está mal configurado", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Pídelle a administración do teu Riot que comprobe a configuración para entradas duplicadas ou incorrectas.", + "Your %(brand)s is misconfigured": "O teu %(brand)s está mal configurado", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Pídelle a administración do teu %(brand)s que comprobe a configuración para entradas duplicadas ou incorrectas.", "Cannot reach identity server": "Non se acadou o servidor de identidade", "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.": "Podes rexistrarte, pero algunhas características non estarán dispoñibles ata que o servidor de identidade volte a conectarse. Se segues a ver este aviso, comproba os axustes ou contacta coa administración.", "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.": "Podes restablecer o contrasinal, pero algunhas características non estarán dispoñibles ata que o servidor de identidade se conecte. Se segues a ver este aviso comproba os axustes ou contacta coa administración.", @@ -1201,8 +1201,8 @@ "A word by itself is easy to guess": "Por si sola, unha palabra é fácil de adiviñar", "Names and surnames by themselves are easy to guess": "Nomes e apelidos por si mesmos son fáciles de adiviñar", "Common names and surnames are easy to guess": "Os nomes e alcumes son fáciles de adiviñar", - "Help us improve Riot": "Axúdanos a mellorar Riot", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Envía datos de uso anónimos que nos axudarán a mellorar Riot. Esto precisa usar unha cookie.", + "Help us improve %(brand)s": "Axúdanos a mellorar %(brand)s", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Envía datos de uso anónimos que nos axudarán a mellorar %(brand)s. Esto precisa usar unha cookie.", "I want to help": "Quero axudar", "No": "Non", "Verify all your sessions to ensure your account & messages are safe": "Verifica todas as outras sesións para asegurar que a túa conta e mensaxes están seguros", @@ -1221,8 +1221,8 @@ "Other users may not trust it": "Outras usuarias poderían non confiar", "Verify the new login accessing your account: %(name)s": "Verifica a conexión accedendo a túa conta: %(name)s", "Restart": "Reiniciar", - "Upgrade your Riot": "Mellora o teu Riot", - "A new version of Riot is available!": "Hai unha nova versión de Riot!", + "Upgrade your %(brand)s": "Mellora o teu %(brand)s", + "A new version of %(brand)s is available!": "Hai unha nova versión de %(brand)s!", "There was an error joining the room": "Houbo un fallo ao unirte a sala", "Font scaling": "Escalado da tipografía", "Custom user status messages": "Mensaxes de estado personalizados", @@ -1434,8 +1434,8 @@ "Manage": "Xestionar", "Securely cache encrypted messages locally for them to appear in search results.": "Gardar de xeito seguro mensaxes cifradas na caché local para que aparezan nos resultados de buscas.", "Enable": "Activar", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Falta un compoñente de Riot requerido para almacenar localmente mensaxes cifradas na caché. Se queres experimentar con esta función, compila unha versión personalizada de Riot Desktop cos compoñentes de busca engadidos.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot non pode gardar de xeito seguro localmente as mensaxes cifradas se se executa nun navegador. Usa Riot Desktop para que as mensaxes cifradas aparezan nas buscas.", + "%(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.": "Falta un compoñente de %(brand)s requerido para almacenar localmente mensaxes cifradas na caché. Se queres experimentar con esta función, compila unha versión personalizada de %(brand)s Desktop cos compoñentes de busca engadidos.", + "%(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 non pode gardar de xeito seguro localmente as mensaxes cifradas se se executa nun navegador. Usa %(brand)s Desktop para que as mensaxes cifradas aparezan nas buscas.", "Connecting to integration manager...": "Conectando co xestor de integración...", "Cannot connect to integration manager": "Non se puido conectar co xestor de intregración", "The integration manager is offline or it cannot reach your homeserver.": "O xestor de integración non está en liña ou non é accesible desde o teu servidor.", @@ -1523,7 +1523,7 @@ "Account management": "Xestión da conta", "Deactivating your account is a permanent action - be careful!": "A desactivación da conta será permanente - ten coidado!", "Credits": "Créditos", - "Chat with Riot Bot": "Chat co Bot Riot", + "Chat with %(brand)s Bot": "Chat co Bot %(brand)s", "Bug reporting": "Informar de fallos", "Clear cache and reload": "Baleirar caché e recargar", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Para informar dun asunto relacionado coa seguridade de Matrix, le a Política de Revelación de Privacidade de Matrix.org.", @@ -1551,7 +1551,7 @@ "You are currently subscribed to:": "Estas subscrito a:", "Ignored users": "Usuarias ignoradas", "⚠ These settings are meant for advanced users.": "⚠ Estos axustes van dirixidos a usuarias avanzadas.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Engade aquí usuarias e servidores que desexas ignorar. Usa asterisco que Riot usará como comodín. Exemplo, @bot* ignorará todas as usuarias de calquera servidor que teñan 'bot' no nome.", + "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.": "Engade aquí usuarias e servidores que desexas ignorar. Usa asterisco que %(brand)s usará como comodín. Exemplo, @bot* ignorará todas as usuarias de calquera servidor que teñan 'bot' no nome.", "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.": "Ignorar a persoas faise a través de listaxes de bloqueo que conteñen regras. Subscribíndote a unha listaxe de bloqueo fará que esas usuarias/servidores sexan inaccesibles para ti.", "Personal ban list": "Lista personal de bloqueo", "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.": "A túa listaxe personal de bloqueo acolle as usuarias/servidores que personalmente non desexas ver. Tras ignorar a túa primeira usuaria/servidor, unha nova sala chamada 'Listaxe de bloqueos' aparecerá na listaxe de salas - non saias desta sala para que o bloqueo siga surtindo efecto.", @@ -1664,7 +1664,7 @@ "Light": "Claro", "Dark": "Escuro", "Customise your appearance": "Personaliza o aspecto", - "Appearance Settings only affect this Riot session.": "Os axustes da aparencia só lle afectan a esta sesión Riot.", + "Appearance Settings only affect this %(brand)s session.": "Os axustes da aparencia só lle afectan a esta sesión %(brand)s.", "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.": "As solicitudes de compartir Chave envíanse ás outras túas sesións abertas. Se rexeitaches ou obviaches a solicitude nas outras sesións, preme aquí para voltar a facer a solicitude.", "If your other sessions do not have the key for this message you will not be able to decrypt them.": "Se as túas outras sesións non teñen a chave para esta mensaxe non poderás descifrala.", "Re-request encryption keys from your other sessions.": "Volta a solicitar chaves de cifrado desde as outras sesións.", @@ -1696,10 +1696,10 @@ "Something went wrong with your invite to %(roomName)s": "Algo fallou co teu convite para %(roomName)s", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Un erro (%(errcode)s) foi devolto ao intentar validar o convite. Podes intentar enviarlle esta información a administración da sala.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Este convite para %(roomName)s foi enviado a %(email)s que non está asociado coa túa conta", - "Link this email with your account in Settings to receive invites directly in Riot.": "Liga este email coa túa conta nos Axustes para recibir convites directamente en Riot.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Liga este email coa túa conta nos Axustes para recibir convites directamente en %(brand)s.", "This invite to %(roomName)s was sent to %(email)s": "Este convite para %(roomName)s foi enviado a %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Usa un servidor de identidade nos Axustes para recibir convites directamente en Riot.", - "Share this email in Settings to receive invites directly in Riot.": "Comparte este email en Axustes para recibir convites directamente en Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Usa un servidor de identidade nos Axustes para recibir convites directamente en %(brand)s.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Comparte este email en Axustes para recibir convites directamente en %(brand)s.", "Do you want to chat with %(user)s?": "Desexas conversar con %(user)s?", " wants to chat": " quere conversar", "Start chatting": "Comeza a conversa", @@ -1804,7 +1804,7 @@ "Failed to deactivate user": "Fallo ao desactivar a usuaria", "This client does not support end-to-end encryption.": "Este cliente non soporta o cifrado extremo-a-extremo.", "Security": "Seguridade", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "A sesión que intentas verificar non soporta a verificación por código QR ou por emoticonas, que é o que soporta Riot. Inténtao cun cliente diferente.", + "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.": "A sesión que intentas verificar non soporta a verificación por código QR ou por emoticonas, que é o que soporta %(brand)s. Inténtao cun cliente diferente.", "Verify by scanning": "Verificar escaneando", "Ask %(displayName)s to scan your code:": "Pídelle a %(displayName)s que escanee o teu código:", "If you can't scan the code above, verify by comparing unique emoji.": "Se non podes escanear o código superior, verifica comparando as emoticonas.", @@ -1879,7 +1879,7 @@ "Your display name": "Nome mostrado", "Your avatar URL": "URL do avatar", "Your user ID": "ID de usuaria", - "Riot URL": "URL Riot", + "%(brand)s URL": "URL %(brand)s", "Room ID": "ID da sala", "Widget ID": "ID do widget", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Ao utilizar este widget poderías compartir datos con %(widgetDomain)s e o teu Xestor de integracións.", @@ -1950,8 +1950,8 @@ "Hide advanced": "Ocultar Avanzado", "Show advanced": "Mostrar Avanzado", "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Evitar que usuarias de outros servidores matrix se unan a esta sala (Este axuste non se pode cambiar máis tarde!)", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Para evitar perder o historial da conversa, debes exportar as chaves da sala antes de desconectarte. Necesitarás voltar á nova versión de Riot para facer esto", - "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Xa utilizaches unha versión máis nova de Riot nesta sesión. Para usar esta versión novamente con cifrado extremo-a-extremo tes que desconectarte e voltar a conectar.", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Para evitar perder o historial da conversa, debes exportar as chaves da sala antes de desconectarte. Necesitarás voltar á nova versión de %(brand)s para facer esto", + "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Xa utilizaches unha versión máis nova de %(brand)s nesta sesión. Para usar esta versión novamente con cifrado extremo-a-extremo tes que desconectarte e voltar a conectar.", "Incompatible Database": "Base de datos non compatible", "Continue With Encryption Disabled": "Continuar con Cifrado Desactivado", "Are you sure you want to deactivate your account? This is irreversible.": "¿Tes a certeza de querer desactivar a túa conta? Esto é irreversible.", @@ -1979,7 +1979,7 @@ "Integrations are disabled": "As Integracións están desactivadas", "Enable 'Manage Integrations' in Settings to do this.": "Activa 'Xestionar Integracións' nos Axustes para facer esto.", "Integrations not allowed": "Non se permiten Integracións", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "O teu Riot non permite que uses o Xestor de Integracións, contacta coa administración.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "O teu %(brand)s non permite que uses o Xestor de Integracións, contacta coa administración.", "Confirm to continue": "Confirma para continuar", "Click the button below to confirm your identity.": "Preme no botón inferior para confirmar a túa identidade.", "Failed to invite the following users to chat: %(csvUsers)s": "Fallo ao convidar as seguintes usuarias a conversa: %(csvUsers)s", @@ -1998,19 +1998,19 @@ "a new cross-signing key signature": "unha nova firma con chave de sinatura-cruzada", "a device cross-signing signature": "unha sinatura sinatura-cruzada de dispositivo", "a key signature": "unha chave de sinatura", - "Riot encountered an error during upload of:": "Riot atopou un fallo ao subir:", + "%(brand)s encountered an error during upload of:": "%(brand)s atopou un fallo ao subir:", "Upload completed": "Subida completa", "Cancelled signature upload": "Cancelada a subida da sinatura", "Unable to upload": "Non foi posible a subida", "The authenticity of this encrypted message can't be guaranteed on this device.": "A autenticidade desta mensaxe cifrada non está garantida neste dispositivo.", "Signature upload success": "Subeuse correctamente a sinatura", "Signature upload failed": "Fallou a subida da sinatura", - "You've previously used Riot 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, Riot needs to resync your account.": "Anteriormente utilizaches Riot en %(host)s con carga preguiceira de membros. Nesta versión a carga preguiceira está desactivada. Como a caché local non é compatible entre as dúas configuracións, Riot precisa voltar a sincronizar a conta.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Se a outra versión de Riot aínda está aberta noutra lapela, péchaa por favor, pois podería haber fallos ao estar as dúas sesións traballando simultáneamente.", + "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.": "Anteriormente utilizaches %(brand)s en %(host)s con carga preguiceira de membros. Nesta versión a carga preguiceira está desactivada. Como a caché local non é compatible entre as dúas configuracións, %(brand)s precisa voltar a sincronizar a conta.", + "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.": "Se a outra versión de %(brand)s aínda está aberta noutra lapela, péchaa por favor, pois podería haber fallos ao estar as dúas sesións traballando simultáneamente.", "Incompatible local cache": "Caché local incompatible", "Clear cache and resync": "Baleirar caché e sincronizar", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot utiliza agora entre 3 e 5 veces menos memoria, cargando só información sobre as usuarias cando é preciso. Agarda mentras se sincroniza co servidor!", - "Updating Riot": "Actualizando Riot", + "%(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!": "%(brand)s utiliza agora entre 3 e 5 veces menos memoria, cargando só información sobre as usuarias cando é preciso. Agarda mentras se sincroniza co servidor!", + "Updating %(brand)s": "Actualizando %(brand)s", "I don't want my encrypted messages": "Non quero as miñas mensaxes cifradas", "Manually export keys": "Exportar manualmente as chaves", "You'll lose access to your encrypted messages": "Perderás o acceso as túas mensaxes cifradas", @@ -2050,7 +2050,7 @@ "Upgrade private room": "Actualizar sala privada", "Upgrade public room": "Actualizar sala pública", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "A actualización da sala é unha acción avanzada e recomendada cando unha sala se volta inestable debido aos fallos, características obsoletas e vulnerabilidades da seguridade.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Esto normalmente só afecta ao xeito en que a sala se procesa no servidor. Se tes problemas con Riot, informa do problema.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Esto normalmente só afecta ao xeito en que a sala se procesa no servidor. Se tes problemas con %(brand)s, informa do problema.", "You'll upgrade this room from to .": "Vas actualizar a sala da versión á .", "A username can only contain lower case letters, numbers and '=_-./'": "Un nome de usuaria só pode ter minúsculas, números e '=_-./'", "Checking...": "Comprobando...", @@ -2182,8 +2182,8 @@ "Send a Direct Message": "Envía unha Mensaxe Directa", "Create a Group Chat": "Crear unha Conversa en Grupo", "Self-verification request": "Solicitude de auto-verificación", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot non puido obter a lista de protocolos desde o servidor. O servidor podería ser moi antigo para soportar redes de terceiros.", - "Riot failed to get the public room list.": "Riot non puido obter a lista de salas públicas.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s non puido obter a lista de protocolos desde o servidor. O servidor podería ser moi antigo para soportar redes de terceiros.", + "%(brand)s failed to get the public room list.": "%(brand)s non puido obter a lista de salas públicas.", "The homeserver may be unavailable or overloaded.": "O servidor podería non estar dispoñible ou con sobrecarga.", "delete the address.": "eliminar o enderezo.", "Preview": "Vista previa", @@ -2237,7 +2237,7 @@ "Use Recovery Key or Passphrase": "Usa a Chave de recuperación ou Frase de paso", "Use Recovery Key": "Usa chave de recuperación", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Confirma a túa identidade verificando esta conexión desde unha das outras sesións, permitindo así acceder ás mensaxes cifradas.", - "This requires the latest Riot on your other devices:": "Require a última versión de Riot nos outros dispositivos:", + "This requires the latest %(brand)s on your other devices:": "Require a última versión de %(brand)s nos outros dispositivos:", "or another cross-signing capable Matrix client": "ou outro cliente Matrix que permita a sinatura-cruzada", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "A nova sesión foi verificada. Tes acceso ás mensaxes cifradas, e outras persoas verante como confiable.", "Your new session is now verified. Other users will see it as trusted.": "A nova sesión foi verificada. Outras persoas verante como confiable.", @@ -2321,7 +2321,7 @@ "Disable": "Desactivar", "Not currently indexing messages for any room.": "Non se están indexando as mensaxes de ningunha sala.", "Currently indexing: %(currentRoom)s": "Indexando actualmente: %(currentRoom)s", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot está gardando de xeito seguro na caché local mensaxes cifradas para que aparezan nos resultados das buscas:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s está gardando de xeito seguro na caché local mensaxes cifradas para que aparezan nos resultados das buscas:", "Space used:": "Espazo utilizado:", "Indexed messages:": "Mensaxes indexadas:", "Indexed rooms:": "Salas indexadas:", diff --git a/src/i18n/strings/he.json b/src/i18n/strings/he.json index 2883da0abb..b4584e347e 100644 --- a/src/i18n/strings/he.json +++ b/src/i18n/strings/he.json @@ -78,7 +78,7 @@ "Guests can join": "אורחים יכולים להצטרף", "No rooms to show": "אין חדרים להצגה", "Fetching third party location failed": "נסיון להביא מיקום צד שלישי נכשל", - "A new version of Riot is available.": "יצאה גרסה חדשה של Riot.", + "A new version of %(brand)s is available.": "יצאה גרסה חדשה של %(brand)s.", "Send Account Data": "שלח נתוני משתמש", "All notifications are currently disabled for all targets.": "התראות מנוטרלות לכלל המערכת.", "Uploading report": "מעדכן דוח", @@ -134,7 +134,7 @@ "Enter keywords separated by a comma:": "הכנס מילים מופרדות באמצעות פסיק:", "Forward Message": "העבר הודעה", "Remove %(name)s from the directory?": "הסר את %(name)s מהרשימה?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot משתמש במספר רב של אפשרויות מתקדמות בדפדפן, חלק מהן לא זמינות או בשלבי נסיון בדפדפן שבשימושך כרגע.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s משתמש במספר רב של אפשרויות מתקדמות בדפדפן, חלק מהן לא זמינות או בשלבי נסיון בדפדפן שבשימושך כרגע.", "Event sent!": "ארוע נשלח!", "Preparing to send logs": "מתכונן לשלוח יומנים", "Remember, you can always set an email address in user settings if you change your mind.": "להזכירך: תמיד ניתן לשנות כתובת אימייל בהגדרות משתש. למקרה שתתחרט/י.", @@ -181,8 +181,8 @@ "You must specify an event type!": "חובה להגדיר סוג ארוע!", "Unhide Preview": "הצג מחדש תצוגה מקדימה", "Unable to join network": "לא ניתן להצטרף לרשת", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "יתכן כי בצעת את ההגדרות בצד לקוח ולא ב Riot. לא תוכל לעדכן אותם ב Riot אבל הם עדיין תקפים", - "Sorry, your browser is not able to run Riot.": "מצטערים, הדפדפן שלך הוא אינו יכול להריץ את Riot.", + "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 אבל הם עדיין תקפים", + "Sorry, your browser is not able to run %(brand)s.": "מצטערים, הדפדפן שלך הוא אינו יכול להריץ את %(brand)s.", "Uploaded on %(date)s by %(user)s": "עודכן ב %(date)s ע\"י %(user)s", "Messages in group chats": "הודעות בקבוצות השיחה", "Yesterday": "אתמול", @@ -191,7 +191,7 @@ "Unable to fetch notification target list": "לא ניתן לאחזר רשימת יעדי התראה", "Set Password": "הגדר סיסמא", "Off": "סגור", - "Riot does not know how to join a room on this network": "Riot אינו יודע כיצד להצטרף לחדר ברשת זו", + "%(brand)s does not know how to join a room on this network": "%(brand)s אינו יודע כיצד להצטרף לחדר ברשת זו", "Mentions only": "מאזכר בלבד", "Failed to remove tag %(tagName)s from room": "נכשל בעת נסיון הסרת תג %(tagName)s מהחדר", "You can now return to your account after signing out, and sign in on other devices.": "תוכל עתה לחזור לחשבון שלך רק אחרי התנתקות וחיבור מחדש לחשבון ממכשיר אחר.", @@ -208,5 +208,5 @@ "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!": "באמצעות הדפדפן הנוכחי שלך המראה של היישום יכול להיות שגוי לחלוטין וחלק מהאפשרויות לא תתפקדנה. אם תרצה לנסות בכל זאת תוכל אבל אז כל האחריות עליך!", "Checking for an update...": "בודק עדכונים...", "There are advanced notifications which are not shown here": "ישנן התראות מתקדמות אשר אינן מוצגות כאן", - "Your Riot is misconfigured": "ה Riot שלך מוגדר באופן שגוי" + "Your %(brand)s is misconfigured": "ה %(brand)s שלך מוגדר באופן שגוי" } diff --git a/src/i18n/strings/hi.json b/src/i18n/strings/hi.json index 3028566536..c076b7684a 100644 --- a/src/i18n/strings/hi.json +++ b/src/i18n/strings/hi.json @@ -1,5 +1,5 @@ { - "A new version of Riot is available.": "रायट के एक नया वर्शन उपलब्ध है।", + "A new version of %(brand)s is available.": "रायट के एक नया वर्शन उपलब्ध है।", "All messages": "सारे संदेश", "All Rooms": "सारे कमरे", "Please set a password!": "कृपया एक पासवर्ड सेट करें!", @@ -9,7 +9,7 @@ "This phone number is already in use": "यह फ़ोन नंबर पहले से इस्तेमाल में है", "Failed to verify email address: make sure you clicked the link in the email": "ईमेल आईडी सत्यापित नही हो पाया: कृपया सुनिश्चित कर लें कि आपने ईमेल में मौजूद लिंक पर क्लिक किया है", "The platform you're on": "आप जिस प्लेटफार्म पर हैं", - "The version of Riot.im": "रायट.आई एम का जो संस्करण", + "The version of %(brand)s": "रायट.आई एम का जो संस्करण", "Your language of choice": "आपकी चयन की भाषा", "Which officially provided instance you are using, if any": "क्या आप कोई अधिकृत संस्करण इस्तेमाल कर रहे हैं? अगर हां, तो कौन सा", "Your homeserver's URL": "आपके होमसर्वर का यूआरएल", @@ -24,7 +24,7 @@ "e.g. ": "उदाहरणार्थ ", "Your device resolution": "आपके यंत्र का रेसोलुशन", "Analytics": "एनालिटिक्स", - "The information being sent to us to help make Riot.im better includes:": "Riot.im को बेहतर बनाने के लिए हमें भेजी गई जानकारी में निम्नलिखित शामिल हैं:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s को बेहतर बनाने के लिए हमें भेजी गई जानकारी में निम्नलिखित शामिल हैं:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "जहां इस पृष्ठ में पहचान योग्य जानकारी शामिल है, जैसे कि रूम, यूजर या समूह आईडी, वह डाटा सर्वर को भेजे से पहले हटा दिया जाता है।", "Call Failed": "कॉल विफल", "Review Devices": "डिवाइस की समीक्षा करें", @@ -85,8 +85,8 @@ "Failed to invite users to community": "उपयोगकर्ताओं को कम्युनिटी में आमंत्रित करने में विफल", "Failed to invite users to %(groupId)s": "उपयोगकर्ताओं को %(groupId)s में आमंत्रित करने में विफल", "Failed to add the following rooms to %(groupId)s:": "निम्नलिखित रूम को %(groupId)s में जोड़ने में विफल:", - "Riot does not have permission to send you notifications - please check your browser settings": "आपको सूचनाएं भेजने की रायट की अनुमति नहीं है - कृपया अपनी ब्राउज़र सेटिंग्स जांचें", - "Riot was not given permission to send notifications - please try again": "रायट को सूचनाएं भेजने की अनुमति नहीं दी गई थी - कृपया पुनः प्रयास करें", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "आपको सूचनाएं भेजने की रायट की अनुमति नहीं है - कृपया अपनी ब्राउज़र सेटिंग्स जांचें", + "%(brand)s was not given permission to send notifications - please try again": "रायट को सूचनाएं भेजने की अनुमति नहीं दी गई थी - कृपया पुनः प्रयास करें", "Unable to enable Notifications": "अधिसूचनाएं सक्षम करने में असमर्थ", "This email address was not found": "यह ईमेल पता नहीं मिला था", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "आपका ईमेल पता इस होमसर्वर पर मैट्रिक्स आईडी से जुड़ा प्रतीत नहीं होता है।", @@ -197,7 +197,7 @@ "Please contact your service administrator to continue using the service.": "सेवा का उपयोग जारी रखने के लिए कृपया अपने सेवा व्यवस्थापक से संपर्क करें ।", "Unable to connect to Homeserver. Retrying...": "होमसर्वर से कनेक्ट करने में असमर्थ। पुनः प्रयास किया जा रहा हैं...", "Your browser does not support the required cryptography extensions": "आपका ब्राउज़र आवश्यक क्रिप्टोग्राफी एक्सटेंशन का समर्थन नहीं करता है", - "Not a valid Riot keyfile": "यह एक वैध रायट कीकुंजी नहीं है", + "Not a valid %(brand)s keyfile": "यह एक वैध रायट कीकुंजी नहीं है", "Authentication check failed: incorrect password?": "प्रमाणीकरण जांच विफल: गलत पासवर्ड?", "Sorry, your homeserver is too old to participate in this room.": "क्षमा करें, इस रूम में भाग लेने के लिए आपका होमसर्वर बहुत पुराना है।", "Please contact your homeserver administrator.": "कृपया अपने होमसर्वर व्यवस्थापक से संपर्क करें।", @@ -317,7 +317,7 @@ "Messages containing @room": "@Room युक्त संदेश", "Encrypted messages in one-to-one chats": "एक एक के साथ चैट में एन्क्रिप्टेड संदेश", "Encrypted messages in group chats": "समूह चैट में एन्क्रिप्टेड संदेश", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "हो सकता है कि आपने उन्हें रायट के अलावा किसी अन्य ग्राहक में कॉन्फ़िगर किया हो। आप उन्हें रायट में ट्यून नहीं कर सकते लेकिन वे अभी भी आवेदन करते हैं", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "हो सकता है कि आपने उन्हें रायट के अलावा किसी अन्य ग्राहक में कॉन्फ़िगर किया हो। आप उन्हें रायट में ट्यून नहीं कर सकते लेकिन वे अभी भी आवेदन करते हैं", "Show message in desktop notification": "डेस्कटॉप अधिसूचना में संदेश दिखाएं", "Off": "बंद", "On": "चालू", @@ -408,7 +408,7 @@ "Idle": "निष्क्रिय", "Offline": "ऑफलाइन", "Unknown": "अज्ञात", - "Chat with Riot Bot": "रायट बॉट के साथ चैट करें", + "Chat with %(brand)s Bot": "रायट बॉट के साथ चैट करें", "Whether or not you're logged in (we don't record your username)": "आप लॉग इन हैं या नहीं (हम आपका उपयोगकर्ता नाम रिकॉर्ड नहीं करते हैं)", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "फ़ाइल '%(fileName)s' अपलोड के लिए इस होमस्वर के आकार की सीमा से अधिक है", "Upgrades a room to a new version": "एक रूम को एक नए संस्करण में अपग्रेड करता है", @@ -568,8 +568,8 @@ "Deactivate Account": "खाता निष्क्रिय करें", "Legal": "कानूनी", "Credits": "क्रेडिट", - "For help with using Riot, click here.": "रायट का उपयोग करने में मदद के लिए, यहां क्लिक करें।", - "For help with using Riot, click here or start a chat with our bot using the button below.": "रायट का उपयोग करने में सहायता के लिए, यहां क्लिक करें या नीचे दिए गए बटन का उपयोग करके हमारे बॉट के साथ एक चैट शुरू करें।", + "For help with using %(brand)s, click here.": "रायट का उपयोग करने में मदद के लिए, यहां क्लिक करें।", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "रायट का उपयोग करने में सहायता के लिए, यहां क्लिक करें या नीचे दिए गए बटन का उपयोग करके हमारे बॉट के साथ एक चैट शुरू करें।", "Check for update": "अपडेट के लिये जांचें", "Help & About": "सहायता और के बारे में", "Bug reporting": "बग रिपोर्टिंग", @@ -577,7 +577,7 @@ "Submit debug logs": "डिबग लॉग जमा करें", "FAQ": "सामान्य प्रश्न", "Versions": "संस्करण", - "riot-web version:": "रायट-वेब संस्करण:", + "%(brand)s version:": "रायट-वेब संस्करण:", "olm version:": "olm संस्करण:", "Homeserver is": "होमेसेर्वेर हैं", "Identity Server is": "आइडेंटिटी सर्वर हैं", @@ -606,11 +606,11 @@ "Reject all %(invitedRooms)s invites": "सभी %(invitedRooms)s की आमंत्रण को अस्वीकार करें", "Key backup": "कुंजी बैकअप", "Security & Privacy": "सुरक्षा और गोपनीयता", - "Riot collects anonymous analytics to allow us to improve the application.": "रायट हमें आवेदन में सुधार करने की अनुमति देने के लिए अनाम विश्लेषण एकत्र करता है।", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "रायट हमें आवेदन में सुधार करने की अनुमति देने के लिए अनाम विश्लेषण एकत्र करता है।", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "गोपनीयता हमारे लिए महत्वपूर्ण है, इसलिए हम अपने विश्लेषिकी के लिए कोई व्यक्तिगत या पहचान योग्य डेटा एकत्र नहीं करते हैं।", "Learn more about how we use analytics.": "हम एनालिटिक्स का उपयोग कैसे करते हैं, इसके बारे में और जानें।", "No media permissions": "मीडिया की अनुमति नहीं", - "You may need to manually permit Riot to access your microphone/webcam": "आपको अपने माइक्रोफ़ोन/वेबकैम तक पहुंचने के लिए रायट को मैन्युअल रूप से अनुमति देने की आवश्यकता हो सकती है", + "You may need to manually permit %(brand)s to access your microphone/webcam": "आपको अपने माइक्रोफ़ोन/वेबकैम तक पहुंचने के लिए रायट को मैन्युअल रूप से अनुमति देने की आवश्यकता हो सकती है", "Missing media permissions, click the button below to request.": "मीडिया अनुमतियाँ गुम, अनुरोध करने के लिए नीचे दिए गए बटन पर क्लिक करें।", "Request media permissions": "मीडिया अनुमति का अनुरोध करें", "No Audio Outputs detected": "कोई ऑडियो आउटपुट नहीं मिला", diff --git a/src/i18n/strings/hr.json b/src/i18n/strings/hr.json index 1d90dd7321..527b86e0a7 100644 --- a/src/i18n/strings/hr.json +++ b/src/i18n/strings/hr.json @@ -3,6 +3,6 @@ "This phone number is already in use": "Ovaj broj telefona se već koristi", "Failed to verify email address: make sure you clicked the link in the email": "Nismo u mogućnosti verificirati Vašu email adresu. Provjerite dali ste kliknuli link u mailu", "The platform you're on": "Platforma na kojoj se nalazite", - "The version of Riot.im": "Verzija Riot.im", + "The version of %(brand)s": "Verzija %(brand)s", "Your language of choice": "Izabrani jezik" } diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 378f71fb49..b5b3b0b887 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -27,7 +27,7 @@ "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 Riot to access your microphone/webcam": "Lehet hogy manuálisan kell engedélyezned a Riot-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 manuálisan kell engedélyezned a %(brand)s-nak a hozzáférést a mikrofonhoz ás webkamerához", "Default Device": "Alapértelmezett eszköz", "Microphone": "Mikrofon", "Camera": "Kamera", @@ -221,9 +221,9 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s VoIP konferenciát kezdeményez.", "Results from DuckDuckGo": "Eredmények a DuckDuckGo-ból", "Return to login screen": "Vissza a bejelentkezési képernyőre", - "Riot does not have permission to send you notifications - please check your browser settings": "A Riotnak nincs jogosultsága értesítést küldeni neked – ellenőrizd a böngésző beállításait", - "Riot was not given permission to send notifications - please try again": "A Riotnak nincs jogosultsága értesítést küldeni neked – próbáld újra", - "riot-web version:": "riot-web verzió:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "A %(brand)snak nincs jogosultsága értesítést küldeni neked – ellenőrizd a böngésző beállításait", + "%(brand)s was not given permission to send notifications - please try again": "A %(brand)snak nincs jogosultsága értesítést küldeni neked – próbáld újra", + "%(brand)s version:": "%(brand)s verzió:", "Room %(roomId)s not visible": "%(roomId)s szoba nem látható", "Room Colour": "Szoba színe", "%(roomName)s does not exist.": "%(roomName)s nem létezik.", @@ -365,7 +365,7 @@ "Start automatically after system login": "Rendszerindításkor automatikus elindítás", "Analytics": "Analitika", "Options": "Opciók", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot személytelen analitikai adatokat gyűjt annak érdekében, hogy fejleszteni tudjuk az alkalmazást.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s személytelen analitikai adatokat gyűjt annak érdekében, hogy fejleszteni tudjuk az alkalmazást.", "Passphrases must match": "A jelmondatoknak meg kell egyezniük", "Passphrase must not be empty": "A jelmondat nem lehet üres", "Export room keys": "Szoba kulcsok mentése", @@ -413,7 +413,7 @@ "Something went wrong!": "Valami tönkrement!", "If you already have a Matrix account you can log in instead.": "Ha már van Matrix fiókod, akkor beléphetsz helyette.", "Your browser does not support the required cryptography extensions": "A böngésződ nem támogatja a szükséges titkosítási kiterjesztést", - "Not a valid Riot keyfile": "Nem érvényes Riot kulcsfájl", + "Not a valid %(brand)s keyfile": "Nem érvényes %(brand)s kulcsfájl", "Authentication check failed: incorrect password?": "Azonosítás sikertelen: hibás jelszó?", "Do you want to set an email address?": "Meg szeretnéd adni az e-mail címet?", "This will allow you to reset your password and receive notifications.": "Ezzel alaphelyzetbe tudod állítani a jelszavad és értesítéseket fogadhatsz.", @@ -422,7 +422,7 @@ "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.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Ha egy újabb Riot 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 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?", "This will be your account name on the homeserver, or you can pick a different server.": "Ez lesz a felhasználói neved a Matrix szerveren, vagy választhatsz egy másik szervert.", @@ -669,7 +669,7 @@ "Answer": "Felvétel", "Send": "Elküldés", "Old cryptography data detected": "Régi titkosítási adatot találhatók", - "Data from an older version of Riot 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.": "Régebbi Riot verzióból származó adatok találhatók. Ezek hibás működéshez vezethettek a végponttól-végpontig titkosításban régebbi verzióknál. A nemrég küldött/fogadott titkosított üzenetek ha a régi adatokat használták lehetséges hogy nem lesznek visszafejthetők ebben a verzióban. Ha problémákba ütközöl jelentkezz ki és vissza. A régi üzenetek elérésének biztosításához mentsd ki a kulcsokat és töltsd be újra.", + "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.": "Régebbi %(brand)s verzióból származó adatok találhatók. Ezek hibás működéshez vezethettek a végponttól-végpontig titkosításban régebbi verzióknál. A nemrég küldött/fogadott titkosított üzenetek ha a régi adatokat használták lehetséges hogy nem lesznek visszafejthetők ebben a verzióban. Ha problémákba ütközöl jelentkezz ki és vissza. A régi üzenetek elérésének biztosításához mentsd ki a kulcsokat és töltsd be újra.", "Warning": "Figyelmeztetés", "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.": "Ahogy lefokozod magad a változás visszafordíthatatlan, ha te vagy az utolsó jogosultságokkal bíró felhasználó a szobában a jogok már nem szerezhetők vissza.", "%(count)s of your messages have not been sent.|one": "Az üzeneted nem lett elküldve.", @@ -683,10 +683,10 @@ "Minimize apps": "Alkalmazás összecsukása", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "A személyes adatok védelme fontos számunkra, így mi nem gyűjtünk személyes és személyhez köthető adatokat az analitikánkhoz.", "Learn more about how we use analytics.": "Tudj meg többet arról hogyan használjuk az analitikai adatokat.", - "The information being sent to us to help make Riot.im better includes:": "Az adatok amiket a Riot.im javításához felhasználunk az alábbiak:", + "The information being sent to us to help make %(brand)s better includes:": "Az adatok amiket a %(brand)s javításához felhasználunk az alábbiak:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Minden azonosításra alkalmas adat, mint a szoba-, felhasználó- vagy csoportazonosítók, eltávolításra kerülnek, mielőtt elküldenénk a kiszolgálónak.", "The platform you're on": "A platform amit használsz", - "The version of Riot.im": "Riot.im verziója", + "The version of %(brand)s": "%(brand)s verziója", "Your language of choice": "A használt nyelv", "Which officially provided instance you are using, if any": "Melyik hivatalosan nyújtott példányt használod", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Használod-e a Richtext módot a szerkesztőben vagy nem", @@ -701,7 +701,7 @@ "Failed to remove tag %(tagName)s from room": "Nem sikerült a szobáról eltávolítani ezt: %(tagName)s", "Failed to add tag %(tagName)s to room": "Nem sikerült hozzáadni a szobához ezt: %(tagName)s", "Clear filter": "Szűrő törlése", - "Did you know: you can use communities to filter your Riot.im experience!": "Tudtad, hogy a Riot.im élmény fokozásához használhatsz közösségeket!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Tudtad, hogy a %(brand)s élmény fokozásához használhatsz közösségeket!", "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.": "A szűrő beállításához húzd a közösség avatarját a szűrő panel fölé a képernyő bal szélén. A szűrő panelen az avatarra kattintva bármikor leszűrheted azokat a szobákat és embereket akik a megadott közösséghez tartoznak.", "Key request sent.": "Kulcs kérés elküldve.", "Code": "Kód", @@ -721,7 +721,7 @@ "Who can join this community?": "Ki tud csatlakozni ehhez a közösséghez?", "Everyone": "Mindenki", "Fetching third party location failed": "Nem sikerült lekérdezni a harmadik fél helyét", - "A new version of Riot is available.": "Elérhető egy új Riot verzió.", + "A new version of %(brand)s is available.": "Elérhető egy új %(brand)s verzió.", "Send Account Data": "Fiókadatok küldése", "All notifications are currently disabled for all targets.": "Minden céleszközön minden értesítés tiltva van.", "Uploading report": "Jelentés feltöltése", @@ -776,7 +776,7 @@ "Forward Message": "Üzenet továbbítása", "You have successfully set a password and an email address!": "Sikerült beállítani a jelszavad és e-mail címed!", "Remove %(name)s from the directory?": "Törlöd ezt a szobát a listából: %(name)s?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "A Riot sok fejlett böngészőfunkciót használ, amelyeknek egy része egyáltalán nem, vagy csak kísérleti jelleggel érhető el a jelenlegi böngésződben.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "A %(brand)s sok fejlett böngészőfunkciót használ, amelyeknek egy része egyáltalán nem, vagy csak kísérleti jelleggel érhető el a jelenlegi böngésződben.", "Developer Tools": "Fejlesztői eszközök", "Preparing to send logs": "Előkészülés napló küldéshez", "Remember, you can always set an email address in user settings if you change your mind.": "Ha meggondolod magad, bármikor beállíthatod az e-mail címed a felhasználói beállításoknál.", @@ -821,8 +821,8 @@ "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.": "A hibakereső napló alkalmazás használati adatokat tartalmaz beleértve a felhasználói nevedet, az általad meglátogatott szobák és csoportok azonosítóit alternatív neveit és más felhasználói neveket. Csevegés üzenetek szövegét nem tartalmazza.", "Unhide Preview": "Előnézet mutatása", "Unable to join network": "Nem sikerült kapcsolódni a hálózathoz", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Egy másik, nem Riot-klienssel állítothattad be. A Riotban módosítani nem tudod ezeket, de érvényben vannak", - "Sorry, your browser is not able to run Riot.": "Elnézést, a böngésződben nem fut a Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Egy másik, nem %(brand)s-klienssel állítothattad be. A %(brand)sban módosítani nem tudod ezeket, de érvényben vannak", + "Sorry, your browser is not able to run %(brand)s.": "Elnézést, a böngésződben nem fut a %(brand)s.", "Uploaded on %(date)s by %(user)s": "Feltöltötte %(user)s ekkor: %(date)s", "Messages in group chats": "Csoportszobák üzenetei", "Yesterday": "Tegnap", @@ -831,7 +831,7 @@ "Unable to fetch notification target list": "Nem sikerült letölteni az értesítési célok listáját", "Set Password": "Jelszó beállítása", "Off": "Ki", - "Riot does not know how to join a room on this network": "A Riot nem tud csatlakozni szobához ezen a hálózaton", + "%(brand)s does not know how to join a room on this network": "A %(brand)s nem tud csatlakozni szobához ezen a hálózaton", "Mentions only": "Csak ha megemlítenek", "Wednesday": "Szerda", "You can now return to your account after signing out, and sign in on other devices.": "Most már kijelentkezés után is vissza tudsz lépni a fiókodba, és más készülékekről is be tudsz lépni.", @@ -874,8 +874,8 @@ "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)", "e.g. %(exampleValue)s": "pl. %(exampleValue)s", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Kérlek segíts javítani a Riot.im-et azzal, hogy anonim felhasználási adatokat küldesz. Ez sütit (cookie) fog használni (lásd a sütire vonatkozó szabályozásunkat).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Kérlek segíts javítani a Riot.im-et azzal, hogy anonim felhasználási adatokat küldesz. Ez sütit (cookie) fog használni.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Kérlek segíts javítani a %(brand)s-et azzal, hogy anonim felhasználási adatokat küldesz. Ez sütit (cookie) fog használni (lásd a sütire vonatkozó szabályozásunkat).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Kérlek segíts javítani a %(brand)s-et azzal, hogy anonim felhasználási adatokat küldesz. Ez sütit (cookie) fog használni.", "Yes, I want to help!": "Igen, segítek!", "Can't leave Server Notices room": "Nem lehet elhagyni a Szerver Üzenetek szobát", "This room is used for important messages from the Homeserver, so you cannot leave it.": "Ez a szoba fontos szerverüzenetek közlésére jött létre, nem tudsz kilépni belőle.", @@ -945,10 +945,10 @@ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s elsődleges szoba címnek beállította: %(address)s.", "%(senderName)s removed the main address for this room.": "A szoba elsődleges címét %(senderName)s törölte.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Mielőtt a naplót elküldöd, egy Github jegyet kell nyitni amiben leírod a problémádat.", - "Riot 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 Riot 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 Riot": "Riot frissítése", - "You've previously used Riot 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, Riot 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 Riotot: %(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 Riotnak újra kell szinkronizálnia a fiókot.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Ha a másik Riot verzió fut még egy másik fülön, kérlek zárd be, mivel ha ugyanott használod a Riotot bekapcsolt késleltetett betöltéssel és kikapcsolva is akkor problémák adódhatnak.", + "%(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.", "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:", @@ -957,8 +957,8 @@ "Open Devtools": "Fejlesztői eszközök megnyitása", "Show developer tools": "Fejlesztői eszközök megjelenítése", "Please review and accept all of the homeserver's policies": "Kérlek nézd át és fogadd el a Matrix szerver felhasználási feltételeit", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Hogy a régi üzenetekhez továbbra is hozzáférhess kijelentkezés előtt ki kell mentened a szobák titkosító kulcsait. Ehhez a Riot egy frissebb verzióját kell használnod", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Előzőleg a Riot egy frissebb verzióját használtad itt: %(host)s. Ki-, és vissza kell jelentkezned, hogy megint ezt a verziót használhasd végponttól végpontig titkosításhoz. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Hogy a régi üzenetekhez továbbra is hozzáférhess kijelentkezés előtt ki kell mentened a szobák titkosító kulcsait. Ehhez a %(brand)s egy frissebb verzióját kell használnod", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Előzőleg a %(brand)s egy frissebb verzióját használtad itt: %(host)s. Ki-, és vissza kell jelentkezned, hogy megint ezt a verziót használhasd végponttól végpontig titkosításhoz. ", "Incompatible Database": "Nem kompatibilis adatbázis", "Continue With Encryption Disabled": "Folytatás a titkosítás kikapcsolásával", "Sign in with single sign-on": "Bejelentkezés „egyszeri bejelentkezéssel”", @@ -1114,8 +1114,8 @@ "Theme": "Téma", "Account management": "Fiók menedzsment", "Deactivating your account is a permanent action - be careful!": "A fiók felfüggesztése végleges - légy óvatos!", - "For help with using Riot, click here.": "A Riot használatában való segítséghez kattints ide.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "A Riot használatában való segítségér kattints ide vagy kezdj beszélgetni a botunkkal az alábbi gombra kattintva.", + "For help with using %(brand)s, click here.": "A %(brand)s használatában való segítséghez kattints ide.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "A %(brand)s használatában való segítségér kattints ide vagy kezdj beszélgetni a botunkkal az alábbi gombra kattintva.", "Help & About": "Segítség & Névjegy", "Bug reporting": "Hiba bejelentése", "FAQ": "GYIK", @@ -1186,7 +1186,7 @@ "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.", - "Chat with Riot Bot": "Csevegés a Riot Robottal", + "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", "This room has no topic.": "A szobának nincs témája.", @@ -1369,8 +1369,8 @@ "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", "Deny": "Megtilt", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riotnak 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.", - "Riot failed to get the public room list.": "Riotnak nem sikerült beszereznie a nyilvános szoba listát.", + "%(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.", "The homeserver may be unavailable or overloaded.": "A Matrix szerver elérhetetlen vagy túlterhelt.", "You have %(count)s unread notifications in a prior version of this room.|other": "%(count)s olvasatlan értesítésed van a régi verziójú szobában.", "You have %(count)s unread notifications in a prior version of this room.|one": "%(count)s olvasatlan értesítésed van a régi verziójú szobában.", @@ -1469,8 +1469,8 @@ "Low bandwidth mode": "Alacsony sávszélesség mód", "Cannot reach homeserver": "A matrix szerver elérhetetlen", "Ensure you have a stable internet connection, or get in touch with the server admin": "Legyen stabil az Internet elérésed vagy a szerver adminisztrátorával vedd fel a kapcsolatot", - "Your Riot is misconfigured": "A Riotod hibásan van beállítva", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Kérd meg a Riot adminisztrátorodat, hogy ellenőrizze a beállításaidat hibás vagy duplikált bejegyzéseket keresve.", + "Your %(brand)s is misconfigured": "A %(brand)sod hibásan van beállítva", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Kérd meg a %(brand)s adminisztrátorodat, hogy ellenőrizze a beállításaidat hibás vagy duplikált bejegyzéseket keresve.", "Unexpected error resolving identity server configuration": "Az azonosítási szerver beállításainak feldolgozásánál váratlan hiba történt", "Show recently visited rooms above the room list": "Legutóbb meglátogatott szobák megjelenítése a szobalista felett", "Uploaded sound": "Feltöltött hang", @@ -1591,10 +1591,10 @@ "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.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "A meghívó ehhez a szobához: %(roomName)s erre az e-mail címre lett elküldve: %(email)s ami nincs társítva a fiókodhoz", - "Link this email with your account in Settings to receive invites directly in Riot.": "Kösd össze a Beállításokban ezt az e-mail címet a fiókoddal, hogy közvetlenül a Riotba kaphassa meghívókat.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Kösd össze a Beállításokban ezt az e-mail címet a fiókoddal, hogy közvetlenül a %(brand)sba kaphassa meghívókat.", "This invite to %(roomName)s was sent to %(email)s": "A meghívó ehhez a szobához: %(roomName)s ide lett elküldve: %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Állíts be azonosítási szervert a Beállításokban, hogy közvetlen meghívókat kaphass Riotba.", - "Share this email in Settings to receive invites directly in Riot.": "Oszd meg a Beállításokban ezt az e-mail címet, hogy közvetlen meghívókat kaphass Riotba.", + "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.", "Bold": "Félkövér", @@ -1740,7 +1740,7 @@ "View rules": "Szabályok megtekintése", "You are currently subscribed to:": "Jelenleg ezekre iratkoztál fel:", "⚠ These settings are meant for advanced users.": "⚠ Ezek a beállítások haladó felhasználók számára vannak.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Adj hozzá olyan felhasználókat és szervereket akiket figyelmen kívül kívánsz hagyni. Használj csillagot ahol bármilyen karakter állhat. Például: @bot:* minden „bot” nevű felhasználót figyelmen kívül fog hagyni akármelyik szerverről.", + "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.": "Adj hozzá olyan felhasználókat és szervereket akiket figyelmen kívül kívánsz hagyni. Használj csillagot ahol bármilyen karakter állhat. Például: @bot:* minden „bot” nevű felhasználót figyelmen kívül fog hagyni akármelyik szerverről.", "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.": "Emberek figyelmen kívül hagyása tiltólistán keresztül történik ami arról tartalmaz szabályokat, hogy kiket kell kitiltani. A feliratkozás a tiltólistára azt jelenti, hogy azok a felhasználók/szerverek amik tiltva vannak a lista által, azoknak az üzenetei rejtve maradnak számodra.", "Personal ban list": "Személyes tiltó lista", "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.": "A személyes tiltólistád tartalmazza azokat a személyeket/szervereket akiktől nem szeretnél üzeneteket látni. Az első felhasználó/szerver figyelmen kívül hagyása után egy új szoba jelenik meg a szobák listájában „Tiltólistám” névvel - ahhoz, hogy a lista érvényben maradjon maradj a szobában.", @@ -1765,7 +1765,7 @@ "Your avatar URL": "Profilképed URL-je", "Your user ID": "Felhasználói azonosítód", "Your theme": "Témád", - "Riot URL": "Riot URL", + "%(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.", @@ -1789,7 +1789,7 @@ "Integrations are disabled": "Az integrációk le vannak tiltva", "Enable 'Manage Integrations' in Settings to do this.": "Ehhez engedélyezd az „Integrációk Kezelésé”-t a Beállításokban.", "Integrations not allowed": "Az integrációk nem engedélyezettek", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "A Riotod nem használhat ehhez Integrációs Menedzsert. Kérlek vedd fel a kapcsolatot az adminisztrátorral.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "A %(brand)sod nem használhat ehhez Integrációs Menedzsert. Kérlek vedd fel a kapcsolatot az adminisztrátorral.", "Decline (%(counter)s)": "Elutasítás (%(counter)s)", "Manage integrations": "Integrációk kezelése", "Verification Request": "Ellenőrzési kérés", @@ -1809,7 +1809,7 @@ "Upgrade private room": "Privát szoba fejlesztése", "Upgrade public room": "Nyilvános szoba fejlesztése", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "A szoba frissítése nem egyszerű művelet, általában a szoba hibás működése, hiányzó funkció vagy biztonsági sérülékenység esetén javasolt.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Ez általában a szoba szerver oldali kezelésében jelent változást. Ha a Riotban van problémád, kérlek küldj egy hibajelentést.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Ez általában a szoba szerver oldali kezelésében jelent változást. Ha a %(brand)sban van problémád, kérlek küldj egy hibajelentést.", "You'll upgrade this room from to .": " verzióról verzióra fejleszted a szobát.", "Upgrade": "Fejlesztés", "Notification settings": "Értesítések beállítása", @@ -1960,8 +1960,8 @@ "Manage": "Kezel", "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", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "A Riotbó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 Riotot a kereső komponens hozzáadásával.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "A Riot a web böngészőben nem tud biztonságosan titkosított üzenetet helyben elmenteni. Hogy a titkosított üzenetekre tudjál keresni használj Asztali Riot klienst.", + "%(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 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 %(brand)s a web böngészőben nem tud biztonságosan titkosított üzenetet helyben elmenteni. Hogy a titkosított üzenetekre tudjál keresni használj Asztali %(brand)s klienst.", "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.", @@ -1975,7 +1975,7 @@ "Disable": "Tiltás", "Not currently downloading messages for any room.": "Jelenleg egy szobából sem folyik üzenet letöltés.", "Downloading mesages for %(currentRoom)s.": "Üzenetek letöltése innen: %(currentRoom)s.", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot a kereshetőség érdekében a titkosított üzeneteket biztonságos módon helyileg tárolja:", + "%(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:", "Indexed messages:": "Indexált üzenetek:", "Number of rooms:": "Szobák száma:", @@ -2145,12 +2145,12 @@ "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Eszközök közti hitelesítési kulcsok törlése végleges. Mindenki akit ezzel hitelesítettél biztonsági figyelmeztetéseket fog látni. Hacsak nem vesztetted el az összes eszközödet amivel eszközök közti hitelesítést tudsz végezni, nem valószínű, hogy ezt szeretnéd tenni.", "Clear cross-signing keys": "Eszközök közti hitelesítési kulcsok törlése", "Reset cross-signing and secret storage": "Eszközök közti hitelesítés és biztonsági tároló alaphelyzetbe állítása", - "The version of Riot": "Riot verziója", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Olyan eszközön használod-e a Riotot, ahol az érintés az elsődleges beviteli mód", - "Whether you're using Riot as an installed Progressive Web App": "Progresszív webalkalmazásként használod-e a Riotot", + "The version of %(brand)s": "%(brand)s verziója", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Olyan eszközön használod-e a %(brand)sot, ahol az érintés az elsődleges beviteli mód", + "Whether you're using %(brand)s as an installed Progressive Web App": "Progresszív webalkalmazásként használod-e a %(brand)sot", "Your user agent": "Felhasználói ügynök", - "The information being sent to us to help make Riot better includes:": "Az alábbi információk kerülnek elküldésre, amivel jobbá tehetjük a Riotot:", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Az ellenőrizni kívánt munkamenet nem támogatja se a QR kód beolvasást se az emodzsi ellenőrzést, amit a Riot támogat. Próbáld meg egy másik klienssel.", + "The information being sent to us to help make %(brand)s better includes:": "Az alábbi információk kerülnek elküldésre, amivel jobbá tehetjük a %(brand)sot:", + "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.": "Az ellenőrizni kívánt munkamenet nem támogatja se a QR kód beolvasást se az emodzsi ellenőrzést, amit a %(brand)s támogat. Próbáld meg egy másik klienssel.", "You declined": "Elutasítottad", "%(name)s declined": "%(name)s elutasította", "accepting …": "elfogadás …", @@ -2249,7 +2249,7 @@ "a new cross-signing key signature": "az új eszközök közötti kulcs aláírása", "a device cross-signing signature": "az eszköz eszközök közötti aláírása", "a key signature": "kulcs aláírás", - "Riot encountered an error during upload of:": "Riot hibába ütközött a feltöltés közben:", + "%(brand)s encountered an error during upload of:": "%(brand)s hibába ütközött a feltöltés közben:", "Upload completed": "A feltöltés befejeződött", "Cancelled signature upload": "Az aláírás feltöltése megszakítva", "Unabled to upload": "A feltöltés nem lehetséges", @@ -2392,7 +2392,7 @@ "Please supply a widget URL or embed code": "Add meg a kisalkalmazás URL-jét vagy a beágyazott kódot", "Verify this login": "Belépés ellenőrzése", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Erősítsd meg ebben a bejelentkezésben a személyazonosságodat egy másik munkamenetből, hogy hozzáférhess a titkosított üzenetekhez.", - "This requires the latest Riot on your other devices:": "A Riot legújabb kliensére van ehhez szükséged a többi eszközödön:", + "This requires the latest %(brand)s on your other devices:": "A %(brand)s legújabb kliensére van ehhez szükséged a többi eszközödön:", "or another cross-signing capable Matrix client": "vagy másik eszközök közötti hitelesítésre alkalmas Matrix kliensre", "Use Recovery Passphrase or Key": "Használd a Visszaállítási Jelmondatot vagy Kulcsot", "Unable to query secret storage status": "A biztonsági tároló állapotát nem lehet lekérdezni", @@ -2438,8 +2438,8 @@ "Custom font size can only be between %(min)s pt and %(max)s pt": "Az egyedi betűméret csak %(min)s pont és %(max)s pont között lehet", "Use between %(min)s pt and %(max)s pt": "Csak %(min)s pont és %(max)s pont közötti értéket használj", "Appearance": "Megjelenítés", - "Help us improve Riot": "Segíts nekünk jobbá tenni a Riotot", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Anonim használati adatok küldésével segíthetsz nekünk a Riot fejlesztésében. Ehhez sütiket használ.", + "Help us improve %(brand)s": "Segíts nekünk jobbá tenni a %(brand)sot", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Anonim használati adatok küldésével segíthetsz nekünk a %(brand)s fejlesztésében. Ehhez sütiket használ.", "I want to help": "Segíteni akarok", "Your homeserver has exceeded its user limit.": "A Matrix szervered túllépte a felhasználói szám korlátot.", "Your homeserver has exceeded one of its resource limits.": "A Matrix szervered túllépte valamelyik erőforrás korlátját.", @@ -2448,8 +2448,8 @@ "Set password": "Jelszó beállítása", "To return to your account in future you need to set a password": "Ahhoz, hogy a jövőben vissza tudj térni a fiókodba, jelszót kell beállítanod", "Restart": "Újraindít", - "Upgrade your Riot": "Riot frissítése", - "A new version of Riot is available!": "Új verzió érhető el a Riotból!", + "Upgrade your %(brand)s": "%(brand)s frissítése", + "A new version of %(brand)s is available!": "Új verzió érhető el a %(brand)sból!", "New version available. Update now.": "Új verzió érhető el.Frissíts most.", "Please verify the room ID or address and try again.": "Kérlek ellenőrizd a szoba azonosítót vagy címet és próbáld újra.", "Room ID or address of ban list": "Tiltó lista szoba azonosító vagy cím", @@ -2466,7 +2466,7 @@ "This address is available to use": "Ez a cím használható", "This address is already in use": "Ez a cím már használatban van", "Set a room address to easily share your room with other people.": "A szoba egyszerű megosztásához másokkal állíts be egy címet.", - "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Ezt a munkamenetet előzőleg egy újabb Riot verzióval használtad. Ahhoz, hogy újra ezt a verziót tudd használni végpontok közötti titkosítással, ki kell lépned majd újra vissza.", + "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Ezt a munkamenetet előzőleg egy újabb %(brand)s verzióval használtad. Ahhoz, hogy újra ezt a verziót tudd használni végpontok közötti titkosítással, ki kell lépned majd újra vissza.", "Address (optional)": "Cím (nem kötelező)", "Delete the room address %(alias)s and remove %(name)s from the directory?": "Törlöd a szoba címét: %(alias)s és eltávolítod a könyvtárból ezt: %(name)s?", "delete the address.": "cím törlése.", @@ -2498,7 +2498,7 @@ "Light": "Világos", "Dark": "Sötét", "Customise your appearance": "Szabd személyre a megjelenítést", - "Appearance Settings only affect this Riot session.": "A megjelenítési beállítások csak erre a munkamenetre vonatkoznak.", + "Appearance Settings only affect this %(brand)s session.": "A megjelenítési beállítások csak erre a munkamenetre vonatkoznak.", "Activity": "Aktivitás", "A-Z": "A-Z", "Recovery Key": "Visszaállítási Kulcs", diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index 38d2693500..10de3230f6 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -62,7 +62,7 @@ "Public Chat": "Obrolan Publik", "Reason": "Alasan", "Register": "Registrasi", - "riot-web version:": "riot-web versi:", + "%(brand)s version:": "%(brand)s versi:", "Return to login screen": "Kembali ke halaman masuk", "Room Colour": "Warna Ruang", "Rooms": "Ruang", @@ -122,7 +122,7 @@ "Admin": "Admin", "Admin Tools": "Peralatan Admin", "No Webcams detected": "Tidak ada Webcam terdeteksi", - "You may need to manually permit Riot to access your microphone/webcam": "Anda mungkin perlu secara manual mengizinkan Riot untuk mengakses mikrofon/webcam", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Anda mungkin perlu secara manual mengizinkan %(brand)s untuk mengakses mikrofon/webcam", "Default Device": "Perangkat Bawaan", "Advanced": "Tingkat Lanjut", "Always show message timestamps": "Selalu tampilkan cap waktu dari pesan", @@ -153,7 +153,7 @@ "Ban": "Blokir", "Bans user with given id": "Blokir pengguna dengan id", "Fetching third party location failed": "Gagal mengambil lokasi pihak ketiga", - "A new version of Riot is available.": "Riot versi baru telah tersedia.", + "A new version of %(brand)s is available.": "%(brand)s versi baru telah tersedia.", "All notifications are currently disabled for all targets.": "Semua notifikasi saat ini dinonaktifkan untuk semua target.", "Uploading report": "Unggah laporan", "Sunday": "Minggu", @@ -209,7 +209,7 @@ "Enter keywords separated by a comma:": "Masukkan kata kunci dipisahkan oleh koma:", "Search…": "Cari…", "Remove %(name)s from the directory?": "Hapus %(name)s dari direktori?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot menggunakan banyak fitur terdepan dari browser, dimana tidak tersedia atau dalam fase eksperimen di browser Anda.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s menggunakan banyak fitur terdepan dari browser, dimana tidak tersedia atau dalam fase eksperimen di browser Anda.", "Unnamed room": "Ruang tanpa nama", "Friday": "Jumat", "Remember, you can always set an email address in user settings if you change your mind.": "Ingat, Anda selalu dapat mengubah alamat email di pengaturan pengguna jika anda berubah pikiran.", @@ -251,8 +251,8 @@ "Show message in desktop notification": "Tampilkan pesan pada desktop", "Unhide Preview": "Tampilkan Pratinjau", "Unable to join network": "Tidak dapat bergabung di jaringan", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Anda mungkin sudah konfigurasi di klien selain Riot. Anda tidak dapat setel di Riot tetap berlaku", - "Sorry, your browser is not able to run Riot.": "Maaf, browser Anda tidak dapat menjalankan Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Anda mungkin sudah konfigurasi di klien selain %(brand)s. Anda tidak dapat setel di %(brand)s tetap berlaku", + "Sorry, your browser is not able to run %(brand)s.": "Maaf, browser Anda tidak dapat menjalankan %(brand)s.", "Uploaded on %(date)s by %(user)s": "Diunggah pada %(date)s oleh %(user)s", "Messages in group chats": "Pesan di obrolan grup", "Yesterday": "Kemarin", @@ -262,7 +262,7 @@ "Unable to fetch notification target list": "Tidak dapat mengambil daftar notifikasi target", "Set Password": "Ubah Password", "Off": "Mati", - "Riot does not know how to join a room on this network": "Riot tidak tau bagaimana gabung ruang di jaringan ini", + "%(brand)s does not know how to join a room on this network": "%(brand)s tidak tau bagaimana gabung ruang di jaringan ini", "Mentions only": "Hanya jika disinggung", "Failed to remove tag %(tagName)s from room": "Gagal menghapus tag %(tagName)s dari ruang", "Remove": "Hapus", @@ -281,7 +281,7 @@ "This email address is already in use": "Alamat email ini telah terpakai", "This phone number is already in use": "Nomor telepon ini telah terpakai", "Failed to verify email address: make sure you clicked the link in the email": "Gagal memverifikasi alamat email: pastikan Anda telah menekan link di dalam email", - "The version of Riot.im": "Versi Riot.im", + "The version of %(brand)s": "Versi %(brand)s", "Your language of choice": "Pilihan bahasamu", "Your homeserver's URL": "URL Homeserver Anda", "Your identity server's URL": "URL Server Identitas Anda", @@ -291,7 +291,7 @@ "Your User Agent": "User Agent Anda", "Your device resolution": "Resolusi perangkat Anda", "Analytics": "Analitik", - "The information being sent to us to help make Riot.im better includes:": "Informasi yang dikirim membantu kami memperbaiki Riot.im, termasuk:", + "The information being sent to us to help make %(brand)s better includes:": "Informasi yang dikirim membantu kami memperbaiki %(brand)s, termasuk:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Apabila terdapat informasi yang dapat digunakan untuk pengenalan pada halaman ini, seperti ruang, pengguna, atau ID grup, kami akan menghapusnya sebelum dikirim ke server.", "Call Failed": "Panggilan Gagal", "Review Devices": "Telaah Perangkat", diff --git a/src/i18n/strings/is.json b/src/i18n/strings/is.json index 2e13f4b231..9400be8a3a 100644 --- a/src/i18n/strings/is.json +++ b/src/i18n/strings/is.json @@ -234,7 +234,7 @@ "What's New": "Nýtt á döfinni", "Update": "Uppfæra", "What's new?": "Hvað er nýtt á döfinni?", - "A new version of Riot is available.": "Ný útgáfa af Riot er tiltæk.", + "A new version of %(brand)s is available.": "Ný útgáfa af %(brand)s er tiltæk.", "Set Password": "Setja lykilorð", "Error encountered (%(errorDetail)s).": "Villa fannst (%(errorDetail)s).", "Checking for an update...": "Athuga með uppfærslu...", @@ -355,7 +355,7 @@ "Success": "Tókst", "Import E2E room keys": "Flytja inn E2E dulritunarlykla spjallrásar", "Cryptography": "Dulritun", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot safnar nafnlausum greiningargögnum til að gera okkur kleift að bæta forritið.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s safnar nafnlausum greiningargögnum til að gera okkur kleift að bæta forritið.", "Labs": "Tilraunir", "Check for update": "Athuga með uppfærslu", "Default Device": "Sjálfgefið tæki", @@ -367,7 +367,7 @@ "Access Token:": "Aðgangsteikn:", "click to reveal": "smelltu til að birta", "Identity Server is": "Auðkennisþjónn er", - "riot-web version:": "Útgáfa riot-web:", + "%(brand)s version:": "Útgáfa %(brand)s:", "olm version:": "Útgáfa olm:", "Failed to send email": "Mistókst að senda tölvupóst", "The email address linked to your account must be entered.": "Það þarf að setja inn tölvupóstfangið sem tengt er notandaaðgangnum þínum.", @@ -403,7 +403,7 @@ "File to import": "Skrá til að flytja inn", "Import": "Flytja inn", "The platform you're on": "Stýrikerfið sem þú ert á", - "The version of Riot.im": "Útgáfan af Riot.im", + "The version of %(brand)s": "Útgáfan af %(brand)s", "Your language of choice": "Tungumálið þitt", "Your homeserver's URL": "Vefslóð á heimaþjóninn þinn", "Your identity server's URL": "Vefslóð á auðkenningarþjóninn þinn", @@ -456,7 +456,7 @@ "Private Chat": "Einkaspjall", "Public Chat": "Opinbert spjall", "Collapse Reply Thread": "Fella saman svarþráð", - "Sorry, your browser is not able to run Riot.": "Því miður, vafrinn þinn getur ekki keyrt Riot.", + "Sorry, your browser is not able to run %(brand)s.": "Því miður, vafrinn þinn getur ekki keyrt %(brand)s.", "Add a Room": "Bæta við spjallrás", "Add a User": "Bæta við notanda", "Unable to accept invite": "Mistókst að þiggja boð", diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 69b879ae19..e54b148d79 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -30,7 +30,7 @@ "Admin Tools": "Strumenti di amministrazione", "No Microphones detected": "Nessun Microfono rilevato", "No Webcams detected": "Nessuna Webcam rilevata", - "You may need to manually permit Riot to access your microphone/webcam": "Potresti dover permettere manualmente a Riot di accedere al tuo microfono/webcam", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Potresti dover permettere manualmente a %(brand)s di accedere al tuo microfono/webcam", "Default Device": "Dispositivo Predefinito", "Microphone": "Microfono", "Camera": "Videocamera", @@ -85,14 +85,14 @@ "Unnamed room": "Stanza senza nome", "Online": "Online", "The platform you're on": "La piattaforma in cui sei", - "The version of Riot.im": "La versione di Riot.im", + "The version of %(brand)s": "La versione di %(brand)s", "Your language of choice": "La lingua scelta", "Which officially provided instance you are using, if any": "Quale istanza ufficialmente fornita stai usando, se ne usi una", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Se stai usando o meno la modalità richtext dell'editor con testo arricchito", "Your homeserver's URL": "L'URL del tuo server home", "Your identity server's URL": "L'URL del tuo server identità", "Analytics": "Statistiche", - "The information being sent to us to help make Riot.im better includes:": "Le informazioni inviate per aiutarci a migliorare Riot.im includono:", + "The information being sent to us to help make %(brand)s better includes:": "Le informazioni inviate per aiutarci a migliorare %(brand)s includono:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Se questa pagina include informazioni identificabili, come una stanza, un utente o un ID di un gruppo, tali dati saranno rimossi prima di essere inviati al server.", "Call Failed": "Chiamata fallita", "Review Devices": "Controlla i dispositivi", @@ -119,8 +119,8 @@ "Failed to invite users to community": "Invito degli utenti alla comunità fallito", "Failed to invite users to %(groupId)s": "Invito degli utenti a %(groupId)s fallito", "Failed to add the following rooms to %(groupId)s:": "Aggiunta a %(groupId)s fallita per le seguenti stanze:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot non ha l'autorizzazione ad inviarti notifiche - controlla le impostazioni del browser", - "Riot was not given permission to send notifications - please try again": "Non è stata data a Riot l'autorizzazione ad inviare notifiche - riprova", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s non ha l'autorizzazione ad inviarti notifiche - controlla le impostazioni del browser", + "%(brand)s was not given permission to send notifications - please try again": "Non è stata data a %(brand)s l'autorizzazione ad inviare notifiche - riprova", "Unable to enable Notifications": "Impossibile attivare le notifiche", "This email address was not found": "Indirizzo email non trovato", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Il tuo indirizzo email sembra non essere associato ad un ID Matrix su questo Homeserver.", @@ -192,7 +192,7 @@ "Send": "Invia", "Unnamed Room": "Stanza senza nome", "Your browser does not support the required cryptography extensions": "Il tuo browser non supporta l'estensione crittografica richiesta", - "Not a valid Riot keyfile": "Non è una chiave di Riot valida", + "Not a valid %(brand)s keyfile": "Non è una chiave di %(brand)s valida", "Authentication check failed: incorrect password?": "Controllo di autenticazione fallito: password sbagliata?", "Failed to join room": "Accesso alla stanza fallito", "Use compact timeline layout": "Usa impaginazione cronologia compatta", @@ -510,7 +510,7 @@ "Ignore request": "Ignora la richiesta", "Encryption key request": "Richiesta chiave di cifratura", "Unable to restore session": "Impossibile ripristinare la sessione", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Se hai usato precedentemente una versione più recente di Riot, la tua sessione potrebbe essere incompatibile con questa versione. Chiudi questa finestra e torna alla versione più recente.", + "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.": "Se hai usato precedentemente una versione più recente di %(brand)s, la tua sessione potrebbe essere incompatibile con questa versione. Chiudi questa finestra e torna alla versione più recente.", "Invalid Email Address": "Indirizzo email non valido", "This doesn't appear to be a valid email address": "Questo non sembra essere un indirizzo email valido", "Verification Pending": "In attesa di verifica", @@ -575,10 +575,10 @@ "Signed Out": "Disconnesso", "For security, this session has been signed out. Please sign in again.": "Per sicurezza questa sessione è stata disconnessa. Accedi di nuovo.", "Old cryptography data detected": "Rilevati dati di cifratura obsoleti", - "Data from an older version of Riot 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.": "Sono stati rilevati dati da una vecchia versione di Riot. Ciò avrà causato malfunzionamenti della crittografia end-to-end nella vecchia versione. I messaggi cifrati end-to-end scambiati di recente usando la vecchia versione potrebbero essere indecifrabili in questa versione. Anche i messaggi scambiati con questa versione possono fallire. Se riscontri problemi, disconnettiti e riaccedi. Per conservare la cronologia, esporta e re-importa le tue chiavi.", + "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.": "Sono stati rilevati dati da una vecchia versione di %(brand)s. Ciò avrà causato malfunzionamenti della crittografia end-to-end nella vecchia versione. I messaggi cifrati end-to-end scambiati di recente usando la vecchia versione potrebbero essere indecifrabili in questa versione. Anche i messaggi scambiati con questa versione possono fallire. Se riscontri problemi, disconnettiti e riaccedi. Per conservare la cronologia, esporta e re-importa le tue chiavi.", "Logout": "Disconnetti", "Your Communities": "Le tue comunità", - "Did you know: you can use communities to filter your Riot.im experience!": "Sapevi che: puoi usare le comunità per filtrare la tua esperienza su Riot.im!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Sapevi che: puoi usare le comunità per filtrare la tua esperienza su %(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.": "Per impostare un filtro, trascina l'avatar di una comunità sul pannello dei filtri a sinistra dello schermo. Puoi cliccare un avatar nel pannello dei filtri quando vuoi per vedere solo le stanze e le persone associate a quella comunità.", "Error whilst fetching joined communities": "Errore nella rilevazione delle comunità a cui ti sei unito", "Create a new community": "Crea una nuova comunità", @@ -623,7 +623,7 @@ "Cryptography": "Crittografia", "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.": "Se hai segnalato un errore via Github, i log di debug possono aiutarci a identificare il problema. I log di debug contengono dati di utilizzo dell'applicazione inclusi il nome utente, gli ID o alias delle stanze o gruppi visitati e i nomi degli altri utenti. Non contengono messaggi.", "Submit debug logs": "Invia log di debug", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot raccoglie statistiche anonime per permetterci di migliorare l'applicazione.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s raccoglie statistiche anonime per permetterci di migliorare l'applicazione.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Diamo importanza alla privacy, perciò non raccogliamo dati personali o identificabili per le nostre statistiche.", "Learn more about how we use analytics.": "Ulteriori informazioni su come usiamo le statistiche.", "Labs": "Laboratori", @@ -636,7 +636,7 @@ "click to reveal": "clicca per mostrare", "Homeserver is": "L'homeserver è", "Identity Server is": "Il server di identità è", - "riot-web version:": "versione riot-web:", + "%(brand)s version:": "versione %(brand)s:", "olm version:": "versione olm:", "Failed to send email": "Invio dell'email fallito", "The email address linked to your account must be entered.": "Deve essere inserito l'indirizzo email collegato al tuo account.", @@ -718,7 +718,7 @@ "Who can join this community?": "Chi può unirsi a questa comunità?", "Everyone": "Tutti", "Fetching third party location failed": "Rilevazione posizione di terze parti fallita", - "A new version of Riot is available.": "È disponibile una nuova versione di Riot.", + "A new version of %(brand)s is available.": "È disponibile una nuova versione di %(brand)s.", "Send Account Data": "Invia dati account", "Advanced notification settings": "Impostazioni di notifica avanzate", "Uploading report": "Sto caricando il report", @@ -729,7 +729,7 @@ "You are not receiving desktop notifications": "Non stai ricevendo le notifiche sul desktop", "Friday": "Venerdì", "Update": "Aggiornamento", - "Riot does not know how to join a room on this network": "Riot non sa come entrare nella stanza su questa rete", + "%(brand)s does not know how to join a room on this network": "%(brand)s non sa come entrare nella stanza su questa rete", "On": "Acceso", "Changelog": "Cambiamenti", "Waiting for response from server": "In attesa di una risposta dal server", @@ -773,7 +773,7 @@ "Search…": "Cerca…", "You have successfully set a password and an email address!": "Hai impostato con successo una password e un indirizzo email!", "Remove %(name)s from the directory?": "Rimuovere %(name)s dalla lista?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilizza molte funzioni avanzate del browser, alcune delle quali non sono disponibili o sono sperimentali nel tuo browser attuale.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s utilizza molte funzioni avanzate del browser, alcune delle quali non sono disponibili o sono sperimentali nel tuo browser attuale.", "Developer Tools": "Strumenti per sviluppatori", "Preparing to send logs": "Preparazione invio dei log", "Remember, you can always set an email address in user settings if you change your mind.": "Ricorda, puoi sempre specificare un indirizzo email nelle impostazioni utente se cambi idea.", @@ -820,8 +820,8 @@ "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.": "I log di debug contengono dati di utilizzo dell'applicazione inclusi il nome utente, gli ID o alias delle stanze o gruppi visitati e i nomi degli altri utenti. Non contengono messaggi.", "Unhide Preview": "Mostra anteprima", "Unable to join network": "Impossibile collegarsi alla rete", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Potresti averli configurati in un client diverso da Riot. Non puoi cambiarli in Riot ma sono comunque applicati", - "Sorry, your browser is not able to run Riot.": "Spiacenti, ma il tuo browser non è in grado di utilizzare Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Potresti averli configurati in un client diverso da %(brand)s. Non puoi cambiarli in %(brand)s ma sono comunque applicati", + "Sorry, your browser is not able to run %(brand)s.": "Spiacenti, ma il tuo browser non è in grado di utilizzare %(brand)s.", "Uploaded on %(date)s by %(user)s": "Caricato il %(date)s da %(user)s", "Messages in group chats": "Messaggi nelle chat di gruppo", "Yesterday": "Ieri", @@ -861,8 +861,8 @@ "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Eliminare l'archiviazione del browser potrebbe risolvere il problema, ma verrai disconnesso e la cronologia delle chat criptate sarà illeggibile.", "Collapse Reply Thread": "Riduci finestra di risposta", "e.g. %(exampleValue)s": "es. %(exampleValue)s", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Per favore aiuta a migliorare Riot.im inviando dati di utilizzo anonimi. Verrà usato un cookie (vedi la nostra politica sui cookie).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Per favore aiutaci a migliorare Riot.im inviando dati di utilizzo anonimi. Verrà usato un cookie.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Per favore aiuta a migliorare %(brand)s inviando dati di utilizzo anonimi. Verrà usato un cookie (vedi la nostra politica sui cookie).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Per favore aiutaci a migliorare %(brand)s inviando dati di utilizzo anonimi. Verrà usato un cookie.", "Yes, I want to help!": "Sì, voglio aiutare!", "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.", @@ -945,10 +945,10 @@ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s ha messo %(address)s come indirizzo principale per questa stanza.", "%(senderName)s removed the main address for this room.": "%(senderName)s ha rimosso l'indirizzo principale di questa stanza.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Prima di inviare i log, devi creare una segnalazione su GitHub per descrivere il tuo problema.", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot ora usa da 3 a 5 volte meno memoria, caricando le informazioni degli altri utenti solo quando serve. Si prega di attendere mentre ci risincronizziamo con il server!", - "Updating Riot": "Aggiornamento di Riot", - "You've previously used Riot 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, Riot needs to resync your account.": "Hai usato Riot precedentemente su %(host)s con il caricamento lento dei membri attivato. In questa versione il caricamento lento è disattivato. Dato che la cache locale non è compatibile tra queste due impostazioni, Riot deve risincronizzare il tuo account.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Se l'altra versione di Riot è ancora aperta in un'altra scheda, chiudila perché usare Riot nello stesso host con il caricamento lento sia attivato che disattivato può causare errori.", + "%(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!": "%(brand)s ora usa da 3 a 5 volte meno memoria, caricando le informazioni degli altri utenti solo quando serve. Si prega di attendere mentre ci risincronizziamo con il server!", + "Updating %(brand)s": "Aggiornamento di %(brand)s", + "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.": "Hai usato %(brand)s precedentemente su %(host)s con il caricamento lento dei membri attivato. In questa versione il caricamento lento è disattivato. Dato che la cache locale non è compatibile tra queste due impostazioni, %(brand)s deve risincronizzare il tuo account.", + "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.": "Se l'altra versione di %(brand)s è ancora aperta in un'altra scheda, chiudila perché usare %(brand)s nello stesso host con il caricamento lento sia attivato che disattivato può causare errori.", "Incompatible local cache": "Cache locale non compatibile", "Clear cache and resync": "Svuota cache e risincronizza", "Please review and accept the policies of this homeserver:": "Consulta ed accetta le condizioni di questo homeserver:", @@ -992,8 +992,8 @@ "Backup version: ": "Versione backup: ", "Algorithm: ": "Algoritmo: ", "Please review and accept all of the homeserver's policies": "Si prega di rivedere e accettare tutte le politiche dell'homeserver", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Per evitare di perdere la cronologia della chat, devi esportare le tue chiavi della stanza prima di uscire. Dovrai tornare alla versione più recente di Riot per farlo", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Hai usato in precedenza una versione più recente di Riot su %(host)s. Per usare di nuovo questa versione con cifratura end-to-end, dovrai disconnettere e riaccedere. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Per evitare di perdere la cronologia della chat, devi esportare le tue chiavi della stanza prima di uscire. Dovrai tornare alla versione più recente di %(brand)s per farlo", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Hai usato in precedenza una versione più recente di %(brand)s su %(host)s. Per usare di nuovo questa versione con cifratura end-to-end, dovrai disconnettere e riaccedere. ", "Incompatible Database": "Database non compatibile", "Continue With Encryption Disabled": "Continua con la cifratura disattivata", "Unable to load backup status": "Impossibile caricare lo stato del backup", @@ -1200,9 +1200,9 @@ "Deactivating your account is a permanent action - be careful!": "La disattivazione dell'account è permanente - attenzione!", "General": "Generale", "Credits": "Crediti", - "For help with using Riot, click here.": "Per aiuto su come usare Riot, clicca qui.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Per aiuto su come usare Riot, clicca qui o inizia una chat con il nostro bot usando il pulsante sotto.", - "Chat with Riot Bot": "Chatta con Riot Bot", + "For help with using %(brand)s, click here.": "Per aiuto su come usare %(brand)s, clicca qui.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Per aiuto su come usare %(brand)s, clicca qui o inizia una chat con il nostro bot usando il pulsante sotto.", + "Chat with %(brand)s Bot": "Chatta con %(brand)s Bot", "Help & About": "Aiuto e informazioni", "Bug reporting": "Segnalazione errori", "FAQ": "FAQ", @@ -1369,8 +1369,8 @@ "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.": "Un widget su %(widgetUrl)s vorrebbe verificare la tua identità. Se lo permetti, il widget sarà in grado di verificare il tuo ID utente, ma non di compiere azioni come te.", "Remember my selection for this widget": "Ricorda la mia scelta per questo widget", "Deny": "Nega", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot non è riuscito ad ottenere l'elenco di protocolli dall'homeserver. L'homeserver potrebbe essere troppo vecchio per supportare reti di terze parti.", - "Riot failed to get the public room list.": "Riot non è riuscito ad ottenere l'elenco di stanze pubbliche.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s non è riuscito ad ottenere l'elenco di protocolli dall'homeserver. L'homeserver potrebbe essere troppo vecchio per supportare reti di terze parti.", + "%(brand)s failed to get the public room list.": "%(brand)s non è riuscito ad ottenere l'elenco di stanze pubbliche.", "The homeserver may be unavailable or overloaded.": "L'homeserver potrebbe non essere disponibile o sovraccarico.", "You have %(count)s unread notifications in a prior version of this room.|other": "Hai %(count)s notifiche non lette in una versione precedente di questa stanza.", "You have %(count)s unread notifications in a prior version of this room.|one": "Hai %(count)s notifiche non lette in una versione precedente di questa stanza.", @@ -1476,8 +1476,8 @@ "Browse": "Sfoglia", "Cannot reach homeserver": "Impossibile raggiungere l'homeserver", "Ensure you have a stable internet connection, or get in touch with the server admin": "Assicurati di avere una connessione internet stabile, o contatta l'amministratore del server", - "Your Riot is misconfigured": "Il tuo Riot è configurato male", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Chiedi al tuo amministratore di Riot di controllare la tua configurazione per voci non valide o doppie.", + "Your %(brand)s is misconfigured": "Il tuo %(brand)s è configurato male", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Chiedi al tuo amministratore di %(brand)s di controllare la tua configurazione per voci non valide o doppie.", "Cannot reach identity server": "Impossibile raggiungere il server identità", "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.": "Puoi registrarti, ma alcune funzioni non saranno disponibili finchè il server identità non sarà tornato online. Se continui a vedere questo avviso, controlla la tua configurazione o contatta un amministratore del server.", "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.": "Puoi ripristinare la password, ma alcune funzioni non saranno disponibili finchè il server identità non sarà tornato online. Se continui a vedere questo avviso, controlla la tua configurazione o contatta un amministratore del server.", @@ -1593,10 +1593,10 @@ "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Si è verificato un errore cambiando il livello di poteri dell'utente. Assicurati di averne l'autorizzazione e riprova.", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Si è verificato un errore (%(errcode)s) tentando di validare il tuo invito. Puoi provare a passare questa informazione ad un admin della stanza.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Questo invito per %(roomName)s è stato inviato a %(email)s , la quale non è associata al tuo account", - "Link this email with your account in Settings to receive invites directly in Riot.": "Collega questa email al tuo account nelle impostazioni per ricevere inviti direttamente in Riot.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Collega questa email al tuo account nelle impostazioni per ricevere inviti direttamente in %(brand)s.", "This invite to %(roomName)s was sent to %(email)s": "Questo invito per %(roomName)s è stato inviato a %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Usa un server di identià nelle impostazioni per ricevere inviti direttamente in Riot.", - "Share this email in Settings to receive invites directly in Riot.": "Condividi questa email nelle impostazioni per ricevere inviti direttamente in Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Usa un server di identià nelle impostazioni per ricevere inviti direttamente in %(brand)s.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Condividi questa email nelle impostazioni per ricevere inviti direttamente in %(brand)s.", "Change identity server": "Cambia Identity Server", "Disconnect from the identity server and connect to instead?": "Disconnettersi dall'Identity Server e connettesi invece a ?", "Disconnect identity server": "Disconnetti dall'Identity Server", @@ -1728,7 +1728,7 @@ "View rules": "Vedi regole", "You are currently subscribed to:": "Attualmente sei iscritto a:", "⚠ These settings are meant for advanced users.": "⚠ Queste opzioni sono pensate per utenti esperti.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Aggiungi qui gli utenti e i server che vuoi ignorare. Usa l'asterisco perchè Riot consideri qualsiasi carattere. Ad esempio, @bot:* ignorerà tutti gli utenti che hanno il nome 'bot' su qualsiasi server.", + "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.": "Aggiungi qui gli utenti e i server che vuoi ignorare. Usa l'asterisco perchè %(brand)s consideri qualsiasi carattere. Ad esempio, @bot:* ignorerà tutti gli utenti che hanno il nome 'bot' su qualsiasi server.", "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.": "Si possono ignorare persone attraverso liste di ban contenenti regole per chi bandire. Iscriversi ad una lista di ban significa che gli utenti/server bloccati da quella lista ti verranno nascosti.", "Personal ban list": "Lista di ban personale", "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.": "La tua lista personale di ban contiene tutti gli utenti/server da cui non vuoi vedere messaggi. Dopo aver ignorato il tuo primo utente/server, apparirà una nuova stanza nel tuo elenco stanze chiamata 'Mia lista ban' - resta in questa stanza per mantenere effettiva la lista ban.", @@ -1763,7 +1763,7 @@ "Your avatar URL": "L'URL del tuo avatar", "Your user ID": "Il tuo ID utente", "Your theme": "Il tuo tema", - "Riot URL": "URL di Riot", + "%(brand)s URL": "URL di %(brand)s", "Room ID": "ID stanza", "Widget ID": "ID widget", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Usando questo widget i dati possono essere condivisi con %(widgetDomain)s e il tuo Gestore di Integrazione.", @@ -1783,7 +1783,7 @@ "Integrations are disabled": "Le integrazioni sono disattivate", "Enable 'Manage Integrations' in Settings to do this.": "Attiva 'Gestisci integrazioni' nelle impostazioni per continuare.", "Integrations not allowed": "Integrazioni non permesse", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Il tuo Riot non ti permette di usare il gestore di integrazioni per questa azione. Contatta un amministratore.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Il tuo %(brand)s non ti permette di usare il gestore di integrazioni per questa azione. Contatta un amministratore.", "Reload": "Ricarica", "Take picture": "Scatta foto", "Remove for everyone": "Rimuovi per tutti", @@ -1811,7 +1811,7 @@ "Upgrade private room": "Aggiorna stanza privata", "Upgrade public room": "Aggiorna stanza pubblica", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Aggiornare una stanza è un'azione avanzata ed è consigliabile quando una stanza non è stabile a causa di errori, funzioni mancanti o vulnerabilità di sicurezza.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Solitamente ciò influisce solo come la stanza viene elaborata sul server. Se stai riscontrando problemi con il tuo Riot, segnala un errore.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Solitamente ciò influisce solo come la stanza viene elaborata sul server. Se stai riscontrando problemi con il tuo %(brand)s, segnala un errore.", "You'll upgrade this room from to .": "Aggiornerai questa stanza dalla alla .", "Upgrade": "Aggiorna", "Notification settings": "Impostazioni di notifica", @@ -1963,7 +1963,7 @@ "Manage": "Gestisci", "Securely cache encrypted messages locally for them to appear in search results.": "Tieni in cache localmente i messaggi cifrati in modo sicuro affinché appaiano nei risultati di ricerca.", "Enable": "Attiva", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "A Riot mancano alcuni componenti richiesti per tenere in cache i messaggi cifrati in modo sicuro. Se vuoi sperimentare questa funzionalità, compila un Riot Desktop personale con i componenti di ricerca aggiunti.", + "%(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)s mancano alcuni componenti richiesti per tenere in cache i messaggi cifrati in modo sicuro. Se vuoi sperimentare questa funzionalità, compila un %(brand)s Desktop personale con i componenti di ricerca aggiunti.", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Ci sono sessioni sconosciute in questa stanza: se procedi senza verificarle, sarà possibile per qualcuno origliare la tua chiamata.", "Unverified session": "Sessione non verificata", "Verifies a user, session, and pubkey tuple": "Verifica un utente, una sessione e una tupla pubblica", @@ -1984,7 +1984,7 @@ "Unable to load session list": "Impossibile caricare l'elenco sessioni", "Delete %(count)s sessions|other": "Elimina %(count)s sessioni", "Delete %(count)s sessions|one": "Elimina %(count)s sessione", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot non può conservare in cache i messaggi cifrati in modo sicuro nella versione browser. Usa Riot Desktop affinché i messaggi cifrati appaiano nei risultati di ricerca.", + "%(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 non può conservare in cache i messaggi cifrati in modo sicuro nella versione browser. Usa %(brand)s Desktop affinché i messaggi cifrati appaiano nei risultati di ricerca.", "This session is backing up your keys. ": "Questa sessione sta facendo il backup delle tue chiavi. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Questa sessione non sta facendo il backup delle tue chiavi, ma hai un backup esistente dal quale puoi ripristinare e che puoi usare da ora in poi.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Connetti questa sessione al backup chiavi prima di disconnetterti per non perdere eventuali chiavi che possono essere solo in questa sessione.", @@ -2121,7 +2121,7 @@ "Disable": "Disattiva", "Not currently downloading messages for any room.": "Nessuno scaricamento di messaggi in corso per alcuna stanza.", "Downloading mesages for %(currentRoom)s.": "Scaricamento messaggi per %(currentRoom)s.", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot sta tenendo in cache localmente i messaggi cifrati in modo sicuro affinché appaiano nei risultati di ricerca:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s sta tenendo in cache localmente i messaggi cifrati in modo sicuro affinché appaiano nei risultati di ricerca:", "of ": "di ", "Message downloading sleep time(ms)": "Tempo di attesa scaricamento messaggi (ms)", "If you cancel now, you won't complete verifying the other user.": "Se adesso annulli, non completerai la verifica dell'altro utente.", @@ -2131,11 +2131,11 @@ "Mod": "Moderatore", "Indexed rooms:": "Stanze indicizzate:", "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s di %(totalRooms)s", - "The version of Riot": "La versione di Riot", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Se stai usando Riot su un dispositivo dove il tocco è il metodo di input principale", - "Whether you're using Riot as an installed Progressive Web App": "Se stai usando Riot installato come Web App Progressiva", + "The version of %(brand)s": "La versione di %(brand)s", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Se stai usando %(brand)s su un dispositivo dove il tocco è il metodo di input principale", + "Whether you're using %(brand)s as an installed Progressive Web App": "Se stai usando %(brand)s installato come Web App Progressiva", "Your user agent": "Il tuo user agent", - "The information being sent to us to help make Riot better includes:": "Le informazioni che ci vengono inviate per aiutarci a migliorare Riot includono:", + "The information being sent to us to help make %(brand)s better includes:": "Le informazioni che ci vengono inviate per aiutarci a migliorare %(brand)s includono:", "Show typing notifications": "Mostra notifiche di scrittura", "Verify this session by completing one of the following:": "Verifica questa sessione completando una delle seguenti cose:", "Scan this unique code": "Scansiona questo codice univoco", @@ -2151,7 +2151,7 @@ "Destroy cross-signing keys?": "Distruggere le chiavi di firma incrociata?", "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "L'eliminazione delle chiavi di firma incrociata è permanente. Chiunque si sia verificato con te vedrà avvisi di sicurezza. Quasi sicuramente non vuoi fare questa cosa, a meno che tu non abbia perso tutti i dispositivi da cui puoi fare l'accesso.", "Clear cross-signing keys": "Elimina chiavi di firma incrociata", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "La sessione che stai cercando di verificare non supporta la scansione del codice QR o la verifica emoji, che sono supportate da Riot. Prova con un client diverso.", + "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.": "La sessione che stai cercando di verificare non supporta la scansione del codice QR o la verifica emoji, che sono supportate da %(brand)s. Prova con un client diverso.", "You declined": "Hai rifiutato", "%(name)s declined": "%(name)s ha rifiutato", "accepting …": "accettazione …", @@ -2234,7 +2234,7 @@ "a new cross-signing key signature": "una nuova firma della chiave a firma incrociata", "a device cross-signing signature": "una firma incrociata di dispositivo", "a key signature": "una firma di chiave", - "Riot encountered an error during upload of:": "Riot ha riscontrato un errore durante l'invio di:", + "%(brand)s encountered an error during upload of:": "%(brand)s ha riscontrato un errore durante l'invio di:", "Upload completed": "Invio completato", "Cancelled signature upload": "Invio della firma annullato", "Unabled to upload": "Impossibile inviare", @@ -2398,7 +2398,7 @@ "Currently indexing: %(currentRoom)s": "Attualmente si indicizzano: %(currentRoom)s", "Verify this login": "Verifica questo accesso", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Conferma la tua identità verificando questo accesso da una delle tue altre sessioni, dandogli l'accesso ai messaggi cifrati.", - "This requires the latest Riot on your other devices:": "È richiesta l'ultima versione di Riot sui tuoi altri dispositivi:", + "This requires the latest %(brand)s on your other devices:": "È richiesta l'ultima versione di %(brand)s sui tuoi altri dispositivi:", "or another cross-signing capable Matrix client": "o un altro client Matrix che supporti la firma incrociata", "Use Recovery Passphrase or Key": "Usa la password di ripristino o la chiave", "Review where you’re logged in": "Controlla dove hai fatto l'accesso", @@ -2459,13 +2459,13 @@ "This address is available to use": "Questo indirizzo è disponibile per l'uso", "This address is already in use": "Questo indirizzo è già in uso", "Set a room address to easily share your room with other people.": "Imposta un indirizzo della stanza per condividerla facilmente con le altre persone.", - "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Hai precedentemente usato una versione più recente di Riot con questa sessione. Per usare ancora questa versione con la cifratura end to end, dovrai disconnetterti e riaccedere.", + "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Hai precedentemente usato una versione più recente di %(brand)s con questa sessione. Per usare ancora questa versione con la cifratura end to end, dovrai disconnetterti e riaccedere.", "Address (optional)": "Indirizzo (facoltativo)", "Delete the room address %(alias)s and remove %(name)s from the directory?": "Eliminare l'indirizzo della stanza %(alias)s e rimuovere %(name)s dalla cartella?", "delete the address.": "elimina l'indirizzo.", "Use a different passphrase?": "Usare una password diversa?", - "Help us improve Riot": "Aiutaci a migliorare Riot", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Invia dati di utilizzo anonimi che ci aiutano a migliorare Riot. Verrà usato un cookie.", + "Help us improve %(brand)s": "Aiutaci a migliorare %(brand)s", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Invia dati di utilizzo anonimi che ci aiutano a migliorare %(brand)s. Verrà usato un cookie.", "I want to help": "Voglio aiutare", "Your homeserver has exceeded its user limit.": "Il tuo homeserver ha superato il limite di utenti.", "Your homeserver has exceeded one of its resource limits.": "Il tuo homeserver ha superato uno dei suoi limiti di risorse.", @@ -2474,8 +2474,8 @@ "Set password": "Imposta password", "To return to your account in future you need to set a password": "Per tornare nel tuo account in futuro, devi impostare una password", "Restart": "Riavvia", - "Upgrade your Riot": "Aggiorna Riot", - "A new version of Riot is available!": "È disponibile una nuova versione di Riot!", + "Upgrade your %(brand)s": "Aggiorna %(brand)s", + "A new version of %(brand)s is available!": "È disponibile una nuova versione di %(brand)s!", "New version available. Update now.": "Nuova versione disponibile. Aggiorna ora.", "Emoji picker": "Selettore emoji", "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "L'amministratore del server ha disattivato la crittografia end-to-end in modo predefinito nelle stanze private e nei messaggi diretti.", @@ -2506,7 +2506,7 @@ "Light": "Chiaro", "Dark": "Scuro", "Customise your appearance": "Personalizza l'aspetto", - "Appearance Settings only affect this Riot session.": "Le impostazioni dell'aspetto hanno effetto solo in questa sessione di Riot.", + "Appearance Settings only affect this %(brand)s session.": "Le impostazioni dell'aspetto hanno effetto solo in questa sessione di %(brand)s.", "Recovery Key": "Chiave di recupero", "This isn't the recovery key for your account": "Questa non è la chiave di recupero del tuo account", "This isn't a valid recovery key": "Questa non è una chiave di ripristino valida", diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index 3944aa7489..8ae5c9a5f0 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -30,7 +30,7 @@ "Upload avatar": "アイコン画像を変更", "Upload file": "ファイルのアップロード", "Use compact timeline layout": "会話表示の行間を狭くする", - "Riot collects anonymous analytics to allow us to improve the application.": "Riotはアプリケーションを改善するために匿名の分析情報を収集しています。", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)sはアプリケーションを改善するために匿名の分析情報を収集しています。", "Add": "追加", "No Microphones detected": "マイクが見つかりません", "No Webcams detected": "カメラが見つかりません", @@ -62,17 +62,17 @@ "This phone number is already in use": "この電話番号は既に使われています", "Failed to verify email address: make sure you clicked the link in the email": "メールアドレスの認証に失敗しました。メール中のリンクをクリックしたか、確認してください", "The platform you're on": "利用中のプラットフォーム", - "The version of Riot.im": "Riot.imのバージョン", + "The version of %(brand)s": "%(brand)sのバージョン", "Your language of choice": "選択した言語", "Which officially provided instance you are using, if any": "どの公式に提供されたインスタンスを利用していますか(もしあれば)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "リッチテキストエディタのリッチテキストモードを利用しているか否か", "Your homeserver's URL": "あなたのホームサーバーの URL", "Your identity server's URL": "あなたのアイデンティティサーバーの URL", "Analytics": "分析", - "The information being sent to us to help make Riot.im better includes:": "Riot.imをよりよくするために私達に送信される情報は以下を含みます:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)sをよりよくするために私達に送信される情報は以下を含みます:", "Thursday": "木曜日", "Messages in one-to-one chats": "1対1のチャットでのメッセージ", - "A new version of Riot is available.": "新しいバージョンのRiotが利用可能です。", + "A new version of %(brand)s is available.": "新しいバージョンの%(brand)sが利用可能です。", "All Rooms": "全ての部屋", "You cannot delete this message. (%(code)s)": "あなたはこの発言を削除できません (%(code)s)", "Send": "送信", @@ -84,7 +84,7 @@ "Files": "添付ファイル", "Room not found": "部屋が見つかりません", "Set Password": "パスワードを設定", - "Sorry, your browser is not able to run Riot.": "申し訳ありません。あなたのブラウザではRiotは動作できません。", + "Sorry, your browser is not able to run %(brand)s.": "申し訳ありません。あなたのブラウザでは%(brand)sは動作できません。", "Monday": "月曜日", "Messages in group chats": "グループチャットでのメッセージ", "Friday": "金曜日", @@ -153,7 +153,7 @@ "View Source": "ソースコードを表示する", "Back": "戻る", "Remove %(name)s from the directory?": "ディレクトリから %(name)s を消去しますか?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riotは多くの高度なブラウザの機能を使用しています。そのうちのいくつかはご使用のブラウザでは使えないか、実験的な機能です。", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)sは多くの高度なブラウザの機能を使用しています。そのうちのいくつかはご使用のブラウザでは使えないか、実験的な機能です。", "Event sent!": "イベントが送信されました!", "Preparing to send logs": "ログを送信する準備をしています", "Explore Account Data": "アカウントのデータを調べる", @@ -183,12 +183,12 @@ "Show message in desktop notification": "デスクトップ通知にメッセージ内容を表示する", "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.": "デバッグログはあなたのユーザ名、訪問した部屋やグループのIDやエイリアス、他のユーザのユーザ名を含むアプリの使用データを含みます。メッセージは含みません。", "Unable to join network": "ネットワークに接続できません", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Riot以外のクライアントで設定した可能性があります。Riotで設定することはできませんが、引き続き使用可能です", + "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で設定することはできませんが、引き続き使用可能です", "Error encountered (%(errorDetail)s).": "エラーが発生しました (%(errorDetail)s)。", "Event Type": "イベントの形式", "What's New": "新着", "remove %(name)s from the directory.": "ディレクトリから %(name)s を消去する。", - "Riot does not know how to join a room on this network": "Riotはこのネットワークで部屋に参加する方法を知りません", + "%(brand)s does not know how to join a room on this network": "%(brand)sはこのネットワークで部屋に参加する方法を知りません", "You can now return to your account after signing out, and sign in on other devices.": "サインアウト後にあなたの\nアカウントに戻る、また、他の端末でサインインすることができます。", "Pin Message": "メッセージを固定する", "Thank you!": "ありがとうございます!", @@ -259,8 +259,8 @@ "Failed to invite users to community": "ユーザーをコミュニティに招待できませんでした", "Failed to invite users to %(groupId)s": "ユーザーを %(groupId)s に招待できませんでした", "Failed to add the following rooms to %(groupId)s:": "次の部屋を %(groupId)s に追加できませんでした:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riotに通知を送信する権限がありません - ブラウザの設定を確認してください", - "Riot was not given permission to send notifications - please try again": "Riotに通知を送信する権限がありませんでした。もう一度お試しください", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)sに通知を送信する権限がありません - ブラウザの設定を確認してください", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)sに通知を送信する権限がありませんでした。もう一度お試しください", "Unable to enable Notifications": "通知を有効にできません", "This email address was not found": "このメールアドレスが見つかりませんでした", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "あなたのメールアドレスは、このホームサーバー上のマトリックスIDと関連付けられていないようです。", @@ -366,7 +366,7 @@ "Please contact your service administrator to continue using the service.": "サービスを引き続き使用するには、サービス管理者にお問い合わせください。", "Unable to connect to Homeserver. Retrying...": "ホームサーバーに接続できません。 再試行中...", "Your browser does not support the required cryptography extensions": "お使いのブラウザは、必要な暗号化拡張機能をサポートしていません", - "Not a valid Riot keyfile": "有効なRiotキーファイルではありません", + "Not a valid %(brand)s keyfile": "有効な%(brand)sキーファイルではありません", "Authentication check failed: incorrect password?": "認証チェックに失敗しました: パスワードの間違い?", "Sorry, your homeserver is too old to participate in this room.": "申し訳ありませんが、あなたのホームサーバーはこの部屋に参加するには古すぎます。", "Please contact your homeserver administrator.": "ホームサーバー管理者に連絡してください。", @@ -603,8 +603,8 @@ "Display your community flair in rooms configured to show it.": "表示するよう設定した部屋であなたのコミュニティ バッジを表示", "Show developer tools": "開発者ツールを表示", "You're not currently a member of any communities.": "あなたは現在、どのコミュニティのメンバーでもありません。", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "匿名利用データを送信して、Riot.imの改善を支援してください。 これはCookieを使用します (クッキーポリシーをご覧ください)>。", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "匿名利用データを送信して、Riot.imの改善を支援してください。 これはクッキーを使用します。", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "匿名利用データを送信して、%(brand)sの改善を支援してください。 これはCookieを使用します (クッキーポリシーをご覧ください)>。", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "匿名利用データを送信して、%(brand)sの改善を支援してください。 これはクッキーを使用します。", "Yes, I want to help!": "はい、協力します!", "Please contact your service administrator to get this limit increased.": "この制限を増やすには、サービス管理者にお問い合わせください。", "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "このホームサーバーは月間アクティブユーザー数の上限に達しているため、一部のユーザーはログインできません。", @@ -714,12 +714,12 @@ "Share without verifying": "検証せずに共有する", "Ignore request": "要求を無視する", "Encryption key request": "暗号化キー要求", - "You've previously used Riot 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, Riot needs to resync your account.": "以前 %(host)s にて、メンバーの遅延ロードを有効にしたRiotを使用していました。このバージョンでは、遅延ロードは無効です。ローカルキャッシュはこれらの2つの設定の間で互換性がないため、Riotはアカウントを再同期する必要があります。", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "他のバージョンのRiotがまだ別のタブで開いている場合は、同じホスト上でRiotを使用するように閉じてください。遅延ロードが同時に有効と無効になっていると問題が発生します。", + "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.": "以前 %(host)s にて、メンバーの遅延ロードを有効にした%(brand)sを使用していました。このバージョンでは、遅延ロードは無効です。ローカルキャッシュはこれらの2つの設定の間で互換性がないため、%(brand)sはアカウントを再同期する必要があります。", + "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.": "他のバージョンの%(brand)sがまだ別のタブで開いている場合は、同じホスト上で%(brand)sを使用するように閉じてください。遅延ロードが同時に有効と無効になっていると問題が発生します。", "Incompatible local cache": "互換性のないローカルキャッシュ", "Clear cache and resync": "キャッシュをクリアして再同期する", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riotは、必要に応じて他のユーザーに関する情報をロードするだけで、メモリの使用量を3〜5倍減らしました。サーバーと再同期するのを待ってください!", - "Updating Riot": "Riot更新中", + "%(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!": "%(brand)sは、必要に応じて他のユーザーに関する情報をロードするだけで、メモリの使用量を3〜5倍減らしました。サーバーと再同期するのを待ってください!", + "Updating %(brand)s": "%(brand)s更新中", "Failed to upgrade room": "部屋をアップグレードできませんでした", "The room upgrade could not be completed": "部屋のアップグレードを完了できませんでした", "Upgrade this room to version %(version)s": "この部屋をバージョン %(version)s にアップグレードします", @@ -738,7 +738,7 @@ "Refresh": "リフレッシュ", "Unable to restore session": "セッションを復元できません", "We encountered an error trying to restore your previous session.": "以前のセッションを復元しようとしてエラーが発生しました。", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "以前にRiotの最新バージョンを使用していた場合、セッションはこのバージョンと互換性がない可能性があります。 このウィンドウを閉じて、最新のバージョンに戻ります。", + "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.": "以前に%(brand)sの最新バージョンを使用していた場合、セッションはこのバージョンと互換性がない可能性があります。 このウィンドウを閉じて、最新のバージョンに戻ります。", "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "ブラウザのストレージをクリアすると問題は解決するかもしれませんが、ログアウトして暗号化されたチャット履歴を読むことができなくなります。", "Invalid Email Address": "無効なメールアドレス", "This doesn't appear to be a valid email address": "これは有効なメールアドレスではないようです", @@ -826,10 +826,10 @@ "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "%(homeserverDomain)s ホームサーバーを引き続き使用するには、利用規約を確認して同意する必要があります。", "Review terms and conditions": "利用規約を確認する", "Old cryptography data detected": "古い暗号化データが検出されました", - "Data from an older version of Riot 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.": "Riotの古いバージョンのデータが検出されました。 これにより、古いバージョンではエンドツーエンドの暗号化が機能しなくなります。 古いバージョンを使用している間に最近交換されたエンドツーエンドの暗号化されたメッセージは、このバージョンでは復号化できません。 これにより、このバージョンで交換されたメッセージが失敗することもあります。 問題が発生した場合は、ログアウトして再度ログインしてください。 メッセージ履歴を保持するには、キーをエクスポートして再インポートします。", + "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.": "%(brand)sの古いバージョンのデータが検出されました。 これにより、古いバージョンではエンドツーエンドの暗号化が機能しなくなります。 古いバージョンを使用している間に最近交換されたエンドツーエンドの暗号化されたメッセージは、このバージョンでは復号化できません。 これにより、このバージョンで交換されたメッセージが失敗することもあります。 問題が発生した場合は、ログアウトして再度ログインしてください。 メッセージ履歴を保持するには、キーをエクスポートして再インポートします。", "Logout": "ログアウト", "Your Communities": "あなたのコミュニティ", - "Did you know: you can use communities to filter your Riot.im experience!": "知っていましたか: コミュニティを使ってRiot.imの経験を絞り込むことができます!", + "Did you know: you can use communities to filter your %(brand)s experience!": "知っていましたか: コミュニティを使って%(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.": "フィルターを設定するには、画面左側のフィルターパネルへコミュニティアバターをドラッグします。フィルタパネルのアバターをクリックすると、そのコミュニティに関連付けられた部屋や人だけが表示されます。", "Error whilst fetching joined communities": "参加したコミュニティを取得中にエラーが発生しました", "Create a new community": "新しいコミュニティを作成する", @@ -880,7 +880,7 @@ "Reject all %(invitedRooms)s invites": "%(invitedRooms)s すべての招待を拒否する", "Start automatically after system login": "システムログイン後に自動的に起動する", "No media permissions": "メディア権限がありません", - "You may need to manually permit Riot to access your microphone/webcam": "自分のマイク/ウェブカメラにアクセスするために手動でRiotを許可する必要があるかもしれません", + "You may need to manually permit %(brand)s to access your microphone/webcam": "自分のマイク/ウェブカメラにアクセスするために手動で%(brand)sを許可する必要があるかもしれません", "No Audio Outputs detected": "オーディオ出力が検出されませんでした", "Default Device": "既定のデバイス", "Audio Output": "音声出力", @@ -891,7 +891,7 @@ "click to reveal": "クリックすると表示されます", "Homeserver is": "ホームサーバーは", "Identity Server is": "アイデンティティ・サーバー", - "riot-web version:": "riot-web のバージョン:", + "%(brand)s version:": "%(brand)s のバージョン:", "olm version:": "olm のバージョン:", "Failed to send email": "メールを送信できませんでした", "The email address linked to your account must be entered.": "あなたのアカウントにリンクされているメールアドレスを入力する必要があります。", @@ -1031,7 +1031,7 @@ "%(names)s and %(count)s others are typing …|one": "%(names)s ともう一人が入力中 …", "%(names)s and %(lastPerson)s are typing …": "%(names)s と %(lastPerson)s が入力中 …", "Cannot reach homeserver": "ホームサーバーに接続できません", - "Your Riot is misconfigured": "あなたのRiotは設定が間違っています", + "Your %(brand)s is misconfigured": "あなたの%(brand)sは設定が間違っています", "Cannot reach identity server": "IDサーバーに接続できません", "No homeserver URL provided": "ホームサーバーのURLが与えられていません", "User %(userId)s is already in the room": "ユーザー %(userId)s はすでにその部屋にいます", @@ -1134,7 +1134,7 @@ "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "暗号化されたメッセージは、エンドツーエンドの暗号化によって保護されています。これらの暗号化されたメッセージを読むための鍵を持っているのは、あなたと参加者だけです。", "Restore from Backup": "バックアップから復元", "Credits": "クレジット", - "For help with using Riot, click here.": "Riotの使用方法に関するヘルプはこちらをご覧ください。", + "For help with using %(brand)s, click here.": "%(brand)sの使用方法に関するヘルプはこちらをご覧ください。", "Help & About": "ヘルプと概要", "Bug reporting": "バグの報告", "FAQ": "よくある質問", @@ -1239,7 +1239,7 @@ "Help": "ヘルプ", "Filter rooms…": "部屋を検索…", "Preview": "プレビュー", - "The version of Riot": "Riot のバージョン", + "The version of %(brand)s": "%(brand)s のバージョン", "Your user agent": "あなたの User Agent", "Bold": "太字", "Italics": "イタリック体", @@ -1349,7 +1349,7 @@ "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.": "公開アドレスを使うと、どのサーバーのどのユーザーでもあなたの部屋に参加することができます。アドレスを公開するには、まずローカルアドレスとして設定する必要があります。", "Local Addresses": "ローカルアドレス", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot は検索結果を表示するため、暗号化されたメッセージをローカルに安全にキャッシュしています:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s は検索結果を表示するため、暗号化されたメッセージをローカルに安全にキャッシュしています:", "Space used:": "使用中のストレージ容量:", "Indexed messages:": "インデックス済みのメッセージ数:", "Indexed rooms:": "インデックス済みの部屋数:", @@ -1368,7 +1368,7 @@ "Your avatar URL": "あなたのアバター URL", "Your user ID": "あなたのユーザー ID", "Your theme": "あなたのテーマ", - "Riot URL": "Riot URL", + "%(brand)s URL": "%(brand)s URL", "Room ID": "部屋 ID", "Maximize apps": "アプリを最大化する", "More options": "更なるオプション", @@ -1410,7 +1410,7 @@ "Show shortcuts to recently viewed rooms above the room list": "最近表示した部屋のショートカットを部屋リストの上に表示", "Show previews/thumbnails for images": "画像のプレビュー/サムネイルを表示", "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "あなたのアカウントではクロス署名の認証情報がシークレットストレージに保存されていますが、このセッションでは信頼されていません。", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot はウェブブラウザでは暗号化されたメッセージを安全にキャッシュできません。暗号化されたメッセージを検索結果に表示するには Riot Desktop を利用してください。", + "%(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 を利用してください。", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "このセッションではキーをバックアップしていません。ですが、あなたは復元に使用したり今後キーを追加したりできるバックアップを持っています。", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "このセッションのみにあるキーを失なわないために、セッションをキーバックアップに接続しましょう。", "Connect this session to Key Backup": "このセッションをキーバックアップに接続", @@ -1429,7 +1429,7 @@ "Signing In...": "サインインしています...", "If you've joined lots of rooms, this might take a while": "たくさんの部屋に参加している場合は、時間がかかる可能性があります", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "このログインを他のセッションで承認し、あなたの認証情報を確認すれば、暗号化されたメッセージへアクセスできるようになります。", - "This requires the latest Riot on your other devices:": "最新版の Riot が他のあなたのデバイスで実行されている必要があります:", + "This requires the latest %(brand)s on your other devices:": "最新版の %(brand)s が他のあなたのデバイスで実行されている必要があります:", "or another cross-signing capable Matrix client": "もしくはクロス署名に対応した他の Matrix クライアント", "Without completing security on this session, it won’t have access to encrypted messages.": "このセッションでのセキュリティを完了させない限り、暗号化されたメッセージにはアクセスできません。" } diff --git a/src/i18n/strings/jbo.json b/src/i18n/strings/jbo.json index 8bb052cfe2..89e44240e8 100644 --- a/src/i18n/strings/jbo.json +++ b/src/i18n/strings/jbo.json @@ -3,7 +3,7 @@ "This phone number is already in use": ".i ca'o pilno le fonjudri", "Failed to verify email address: make sure you clicked the link in the email": ".i na pu facki lo du'u xu kau do ponse le skami te mrilu .i ko birti lo du'u do pu skami cuxna le urli pe le se samymri", "The platform you're on": "le ciste poi do pilno", - "The version of Riot.im": "le farvi tcini be la nu zunti", + "The version of %(brand)s": "le farvi tcini be la nu zunti", "Your language of choice": "le se cuxna be fi lo'i bangu", "Which officially provided instance you are using, if any": "le klesi poi ca'irselzau se sabji poi do pilno", "Whether or not you're using the Richtext mode of the Rich Text Editor": "lo du'u xu kau do pilno la .markdaun. lo nu ciski", @@ -15,7 +15,7 @@ "Your User Agent": "le datni be lo do kibyca'o", "Your device resolution": "le ni vidnysle", "Analytics": "lo se lanli datni", - "The information being sent to us to help make Riot.im better includes:": ".i ti liste lo datni poi se dunda fi lo favgau te zu'e lo nu xagzengau la nu zunti", + "The information being sent to us to help make %(brand)s better includes:": ".i ti liste lo datni poi se dunda fi lo favgau te zu'e lo nu xagzengau la nu zunti", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": ".i pu lo nu benji fi lo samtcise'u cu vimcu lo datni poi termi'u no'u mu'a lo termi'u be lo kumfa pe'a .o nai lo pilno .o nai lo girzu", "Call Failed": ".i pu fliba lo nu fonjo'e", "Review Devices": "za'u re'u viska lo liste be lo samtciselse'u", @@ -81,8 +81,8 @@ "Failed to invite users to %(groupId)s": ".i pu fliba lo nu vi'ecpe lo pilno la'o ny. %(groupId)s .ny.", "Failed to add the following rooms to %(groupId)s:": "lo kumfa pe'a poi fliba lo nu jmina ke'a la'o ny. %(groupId)s .ny.", "Unnamed Room": "lo kumfa pe'a noi no da cmene", - "Riot does not have permission to send you notifications - please check your browser settings": ".i na curmi lo nu la nu zunti cu benji lo sajgau do .i .e'o do cipcta lo te cuxna pe le do kibyca'o", - "Riot was not given permission to send notifications - please try again": ".i na pu curmi lo nu la nu zunti cu benji lo sajgau .i .e'o do za'u re'u troci", + "%(brand)s does not have permission to send you notifications - please check your browser settings": ".i na curmi lo nu la nu zunti cu benji lo sajgau do .i .e'o do cipcta lo te cuxna pe le do kibyca'o", + "%(brand)s was not given permission to send notifications - please try again": ".i na pu curmi lo nu la nu zunti cu benji lo sajgau .i .e'o do za'u re'u troci", "Unable to enable Notifications": ".i na kakne lo nu co'a kakne lo nu benji lo sajgau", "This email address was not found": ".i na pu facki fi le ve samymri", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": ".i za'a le ve samymri be fo do cu ckini no lo judri be fi la nacmeimei be'o pe le samtcise'u", @@ -187,7 +187,7 @@ "Please contact your service administrator to continue using the service.": ".i .e'o ko tavla lo do te selfu admine .i ja nai do djica lo nu ca'o pilno le te selfu", "Unable to connect to Homeserver. Retrying...": ".i pu fliba lo nu samjo'e le samtcise'u .i za'u re'u ca'o troci", "Your browser does not support the required cryptography extensions": ".i le do kibyca'o na kakne tu'a le te mifra ciste noi se nitcu", - "Not a valid Riot keyfile": ".i na'e drani ckiku datnyvei", + "Not a valid %(brand)s keyfile": ".i na'e drani ckiku datnyvei", "Authentication check failed: incorrect password?": ".i pu fliba lo nu birti lo du'u curmi lo nu do jonse .i na'e drani xu japyvla", "Sorry, your homeserver is too old to participate in this room.": ".i .uu le do samtcise'u cu dukse lo ka laldo ku ja'e lo du'u sy. na kakne lo nu pagbu le kumfa pe'a", "Please contact your homeserver administrator.": ".i .e'o ko tavla lo admine be le samtcise'u", diff --git a/src/i18n/strings/kab.json b/src/i18n/strings/kab.json index b7cf066a21..a2cc7e23e7 100644 --- a/src/i18n/strings/kab.json +++ b/src/i18n/strings/kab.json @@ -112,7 +112,7 @@ "General": "Amatu", "Legal": "Usḍif", "Credits": "Asenmer", - "Chat with Riot Bot": "Asqerdec akked Riot Bot", + "Chat with %(brand)s Bot": "Asqerdec akked %(brand)s Bot", "FAQ": "Isteqsiyen FAQ", "Keyboard Shortcuts": "Inegzumen n unasiw", "Versions": "Ileqman", @@ -296,7 +296,7 @@ "End": "Taggara", "This email address is already in use": "Tansa-agi n yimayl tettuseqdac yakan", "This phone number is already in use": "Uṭṭun-agi n tilifun yettuseqddac yakan", - "Your Riot is misconfigured": "Riot inek(inem) ur ittusbadu ara", + "Your %(brand)s is misconfigured": "%(brand)s inek(inem) ur ittusbadu ara", "Please install Chrome, Firefox, or Safari for the best experience.": "Ma ulac aɣilif, sebded Chrome, Firefox, neɣSafari i tirmit igerrzen.", "I understand the risks and wish to continue": "Gziɣ ayen ara d-yeḍrun maca bɣiɣ ad kemmleɣ", "Use Single Sign On to continue": "Seqdec anekcum asuf akken ad tkemmleḍ", @@ -311,7 +311,7 @@ "Click the button below to confirm adding this phone number.": "Sit ɣef tqeffalt yellan ddaw i usentem n tmerna n wuṭṭun-a n tilifun.", "Add Phone Number": "Rnu uṭṭun n tilifun", "The platform you're on": "Tiɣerɣert ideg telliḍ akka tura", - "The version of Riot": "Lqem n Riot", + "The version of %(brand)s": "Lqem n %(brand)s", "Whether or not you're logged in (we don't record your username)": "Ma teqqneḍ neɣ uhu (isem-ik(im) n useqdac ur yettwasekles ara)", "Your language of choice": "Tutlayt i tferneḍ", "Which officially provided instance you are using, if any": "Tummant i d-yettunefken tunṣibt ara tesseqdace, ma yella tella", @@ -347,7 +347,7 @@ "Toggle microphone mute": "Rmed/sens tanusi n usawaḍ", "Toggle video on/off": "Rmed/sens tavidyut", "Scroll up/down in the timeline": "Drurem gar afellay/addday n tesnakudt", - "Updating Riot": "Leqqem Riot", + "Updating %(brand)s": "Leqqem %(brand)s", "I don't want my encrypted messages": "Ur bɣiɣ ara izan-inu iwgelhanen", "Manually export keys": "Sifeḍ s ufus tisura", "Session ID": "Asulay n tqimit", @@ -400,8 +400,8 @@ "Failed to add the following rooms to %(groupId)s:": "Timerna n texxamin i d-iteddun ɣer %(groupId)s ur yedi ara:", "Identity server has no terms of service": "Timagit n uqeddac ulac ɣer-sen iferdisen n umeẓlu", "%(name)s is requesting verification": "%(name)s yesra asenqed", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot ulac ɣer-s tisirag i tuzna n yilɣa - ttxil-k/m senqed iɣewwaren n yiminig-ik/im", - "Riot was not given permission to send notifications - please try again": "Riot ur d-yefk ara tisirag i tuzna n yilɣa - ttxil-k/m εreḍ tikkelt-nniḍen", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s ulac ɣer-s tisirag i tuzna n yilɣa - ttxil-k/m senqed iɣewwaren n yiminig-ik/im", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s ur d-yefk ara tisirag i tuzna n yilɣa - ttxil-k/m εreḍ tikkelt-nniḍen", "Unable to enable Notifications": "Sens irmad n yilɣa", "This email address was not found": "Tansa-a n yimayl ulac-it", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Tansa-ik/im n yimayl ur d-tban ara akken ad tettwacudd d usulay Matrix deg usebter-a agejdan.", @@ -435,8 +435,8 @@ "New login. Was this you?": "Anekcam amaynut. D kečč/kemm?", "Verify the new login accessing your account: %(name)s": "Senqed anekcam amaynut i ikecmen ɣer umiḍan-ik/im: %(name)s", "What's new?": "D acu-t umaynut?", - "Upgrade your Riot": "Leqqem Riot inek/inem", - "A new version of Riot is available!": "Lqem amaynut n Riot yella!", + "Upgrade your %(brand)s": "Leqqem %(brand)s inek/inem", + "A new version of %(brand)s is available!": "Lqem amaynut n %(brand)s yella!", "You: %(message)s": "Kečč/kemm: %(message)s", "There was an error joining the room": "Tella-d tuccḍa deg unekcum ɣer texxamt", "Sorry, your homeserver is too old to participate in this room.": "Suref-aɣ, asebter-ik/im agejdan d aqbur aṭas akken ad yettekki deg texxamt-a.", @@ -452,10 +452,10 @@ "Room Colour": "Initen n texxamt", "Show developer tools": "Sken ifecka n uneflay", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Ama tseqdaceḍ askar-inek.inem n umaẓrag n uḍris anesbaɣur neɣ xaṭi", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Γas ma tseqdaceḍ Riot inek.inem deg yibenk anida asami d ametwi agejdan n unekcum", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Γas ma tseqdaceḍ %(brand)s inek.inem deg yibenk anida asami d ametwi agejdan n unekcum", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Γas ma tseqdaceḍ tamahilt 'breadcrumbs' neɣ xaṭi(avatar nnig tebdert n texxamt)", - "Whether you're using Riot as an installed Progressive Web App": "Γas ma tseqdaceḍ Riot d asnas web n usfari i ibedden", - "The information being sent to us to help make Riot better includes:": "Talɣut i aɣ-d-yettwaznen ɣef tallalt n usnerni n Riot deg-s:", + "Whether you're using %(brand)s as an installed Progressive Web App": "Γas ma tseqdaceḍ %(brand)s d asnas web n usfari i ibedden", + "The information being sent to us to help make %(brand)s better includes:": "Talɣut i aɣ-d-yettwaznen ɣef tallalt n usnerni n %(brand)s deg-s:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Ma yili asebter-a degs talɣut tummilt, am texxamt neɣ aseqdac neɣ asulay n ugraw, isefka-a ad ttwakksen send ad ttwaznen i uqeddac.", "Unable to load! Check your network connectivity and try again.": "Yegguma ad d-yali! Senqed tuqqna-inek.inem ɣer uzeṭṭa syen tεerḍeḍ tikkelt-nniḍen.", "Failure to create room": "Timerna n texxamt ur teddi ara", diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index cb8fb17da3..adf01bb6ed 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -63,7 +63,7 @@ "Access Token:": "접근 토큰:", "Active call (%(roomName)s)": "현재 전화 (%(roomName)s 방)", "Add a topic": "주제 추가", - "You may need to manually permit Riot to access your microphone/webcam": "수동으로 Riot에 마이크와 카메라를 허용해야 함", + "You may need to manually permit %(brand)s to access your microphone/webcam": "수동으로 %(brand)s에 마이크와 카메라를 허용해야 함", "%(items)s and %(lastItem)s": "%(items)s님과 %(lastItem)s님", "and %(count)s others...|one": "외 한 명...", "and %(count)s others...|other": "외 %(count)s명...", @@ -226,9 +226,9 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s님이 VoIP 회의를 요청했습니다.", "Results from DuckDuckGo": "DuckDuckGo에서 검색한 결과", "Return to login screen": "로그인 화면으로 돌아가기", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot은 알림을 보낼 권한을 가지고 있지 않습니다. 브라우저 설정을 확인해주세요", - "Riot was not given permission to send notifications - please try again": "Riot이 알림을 보낼 권한을 받지 못했습니다. 다시 해주세요", - "riot-web version:": "Riot 웹 버전:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s은 알림을 보낼 권한을 가지고 있지 않습니다. 브라우저 설정을 확인해주세요", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s이 알림을 보낼 권한을 받지 못했습니다. 다시 해주세요", + "%(brand)s version:": "%(brand)s 웹 버전:", "Room %(roomId)s not visible": "방 %(roomId)s이(가) 보이지 않음", "Room Colour": "방 색", "%(roomName)s does not exist.": "%(roomName)s은 없는 방이에요.", @@ -367,7 +367,7 @@ "Start automatically after system login": "컴퓨터를 시작할 때 자동으로 실행하기", "Analytics": "정보 분석", "Options": "옵션", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot은 앱을 발전시키기 위해 익명으로 정보 분석을 수집합니다.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s은 앱을 발전시키기 위해 익명으로 정보 분석을 수집합니다.", "Passphrases must match": "암호가 일치해야 함", "Passphrase must not be empty": "암호를 입력해야 함", "Export room keys": "방 키 내보내기", @@ -388,7 +388,7 @@ "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.": "이 이벤트를 감추길(삭제하길) 원하세요? 방 이름을 삭제하거나 주제를 바꾸면, 다시 생길 수도 있습니다.", "I verify that the keys match": "열쇠가 맞는지 인증합니다", "Unable to restore session": "세션을 복구할 수 없음", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "이전에 최근 버전의 Riot을 썼다면, 세션이 이 버전과 맞지 않을 것입니다. 창을 닫고 최근 버전으로 돌아가세요.", + "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.": "이전에 최근 버전의 %(brand)s을 썼다면, 세션이 이 버전과 맞지 않을 것입니다. 창을 닫고 최근 버전으로 돌아가세요.", "Unknown Address": "알 수 없는 주소", "Unblacklist": "블랙리스트 제외", "Blacklist": "블랙리스트 등록", @@ -423,7 +423,7 @@ "This will be your account name on the homeserver, or you can pick a different server.": "이건 홈서버에서 계정 이름이 됩니다, 혹은 다른 서버를 고를 수도 있습니다.", "If you already have a Matrix account you can log in instead.": "Matrix 계정을 이미 갖고 있다면, 로그인할 수 있습니다.", "Your browser does not support the required cryptography extensions": "필요한 암호화 확장 기능을 브라우저가 지원하지 않습니다", - "Not a valid Riot keyfile": "올바른 Riot 열쇠 파일이 아닙니다", + "Not a valid %(brand)s keyfile": "올바른 %(brand)s 열쇠 파일이 아닙니다", "Authentication check failed: incorrect password?": "인증 확인 실패: 비밀번호를 틀리셨나요?", "Do you want to set an email address?": "이메일 주소를 설정하시겠어요?", "This will allow you to reset your password and receive notifications.": "이렇게 하면 비밀번호를 다시 설정하고 알림을 받을 수 있습니다.", @@ -434,7 +434,7 @@ "Encryption key request": "암호화 키 요청", "Edit": "편집", "Fetching third party location failed": "제 3자 위치를 가져오지 못함", - "A new version of Riot is available.": "Riot의 새 버전을 사용할 수 있습니다.", + "A new version of %(brand)s is available.": "%(brand)s의 새 버전을 사용할 수 있습니다.", "All notifications are currently disabled for all targets.": "현재 모든 알림이 모든 대상에 대해 꺼져있습니다.", "Uploading report": "신고 업로드 중", "Sunday": "일요일", @@ -487,7 +487,7 @@ "Enter keywords separated by a comma:": "키워드를 쉼표로 구분해 입력해주세요:", "Search…": "찾기…", "Remove %(name)s from the directory?": "목록에서 %(name)s 방을 제거하겠습니까?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot은 많은 고급 브라우저 기능을 사용합니다. 일부는 현재 브라우저에서 쓸 수 없거나 실험 상태입니다.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s은 많은 고급 브라우저 기능을 사용합니다. 일부는 현재 브라우저에서 쓸 수 없거나 실험 상태입니다.", "Developer Tools": "개발자 도구", "Unnamed room": "이름 없는 방", "Remove from Directory": "목록에서 제거", @@ -529,14 +529,14 @@ "Show message in desktop notification": "컴퓨터 알림에서 내용 보이기", "Unhide Preview": "미리 보기를 숨기지 않기", "Unable to join network": "네트워크에 들어갈 수 없음", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Riot이 아닌 다른 클라이언트에서 설정했을지도 모릅니다. Riot에서 바꿀 수는 없지만, 여전히 적용되어 있습니다", - "Sorry, your browser is not able to run Riot.": "죄송합니다. 쓰고 계신 브라우저에서는 Riot를 사용할 수 없습니다.", + "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에서 바꿀 수는 없지만, 여전히 적용되어 있습니다", + "Sorry, your browser is not able to run %(brand)s.": "죄송합니다. 쓰고 계신 브라우저에서는 %(brand)s를 사용할 수 없습니다.", "Uploaded on %(date)s by %(user)s": "%(user)s님이 %(date)s에 업로드함", "Messages in group chats": "그룹 대화 메시지", "Yesterday": "어제", "Error encountered (%(errorDetail)s).": "오류가 일어났습니다 (%(errorDetail)s).", "Low Priority": "중요하지 않음", - "Riot does not know how to join a room on this network": "Riot이 이 네트워크에서 방에 참가하는 방법을 모름", + "%(brand)s does not know how to join a room on this network": "%(brand)s이 이 네트워크에서 방에 참가하는 방법을 모름", "Set Password": "비밀번호 설정", "Off": "끄기", "Mentions only": "언급한 것만", @@ -562,7 +562,7 @@ "%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)s이 아바타를 바꿨습니다", "%(oneUser)schanged their avatar %(count)s times|other": "%(oneUser)s님이 아바타를 %(count)s번 바꿨습니다", "%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)s님이 아바타를 바꿨습니다", - "Data from an older version of Riot 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.": "이전 버전 Riot의 데이터가 감지됬습니다. 이 때문에 이전 버전에서 종단간 암호화가 작동하지 않을 수 있습니다. 이전 버전을 사용하면서 최근에 교환한 종단간 암호화 메시지를 이 버전에서는 복호화할 수 없습니다. 이 버전에서 메시지를 교환할 수 없을 수도 있습니다. 문제가 발생하면 로그아웃한 후 다시 로그인하세요. 메시지 기록을 유지하려면 키를 내보낸 후 다시 가져오세요.", + "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.": "이전 버전 %(brand)s의 데이터가 감지됬습니다. 이 때문에 이전 버전에서 종단간 암호화가 작동하지 않을 수 있습니다. 이전 버전을 사용하면서 최근에 교환한 종단간 암호화 메시지를 이 버전에서는 복호화할 수 없습니다. 이 버전에서 메시지를 교환할 수 없을 수도 있습니다. 문제가 발생하면 로그아웃한 후 다시 로그인하세요. 메시지 기록을 유지하려면 키를 내보낸 후 다시 가져오세요.", "This event could not be displayed": "이 이벤트를 표시할 수 없음", "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "%(displayName)s(%(userName)s)님이 %(dateTime)s에 확인함", "Banned by %(displayName)s": "%(displayName)s님에 의해 출입 금지됨", @@ -575,7 +575,7 @@ "Showing flair for these communities:": "이 커뮤니티에 재능을 공개 중:", "This room is not showing flair for any communities": "이 방은 모든 커뮤니티에 재능을 공개하지 않음", "The platform you're on": "당신이 사용 중인 플랫폼", - "The version of Riot.im": "Riot.im 버전", + "The version of %(brand)s": "%(brand)s 버전", "Your language of choice": "선택한 언어", "Which officially provided instance you are using, if any": "공식적으로 제공하는 인스턴스를 사용하는 지 여부", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Rich Text Editor의 Richtext mode를 사용하고 있는지 여부", @@ -586,7 +586,7 @@ "e.g. ": "예시: ", "Your User Agent": "사용자 에이전트", "Your device resolution": "기기 해상도", - "The information being sent to us to help make Riot.im better includes:": "Riot.im을 발전시키기 위해 저희에게 보내는 정보는 다음을 포함합니다:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s을 발전시키기 위해 저희에게 보내는 정보는 다음을 포함합니다:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "이 페이지에서 방, 사용자, 혹은 그룹 ID와 같은 식별 가능한 정보를 포함하는 부분이 있는 데이터는 서버에 보내지기 전에 제거됩니다.", "Call Failed": "전화 실패", "Review Devices": "기기 검증하기", @@ -748,7 +748,7 @@ "Filter results": "필터 결과", "Filter community rooms": "커뮤니티 방 찾기", "Clear filter": "필터 지우기", - "Did you know: you can use communities to filter your Riot.im experience!": "그거 아세요: 커뮤니티로 Riot.im에서의 경험을 분류할 수 있어요!", + "Did you know: you can use communities to filter your %(brand)s experience!": "그거 아세요: 커뮤니티로 %(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.": "필터를 사용하려면, 커뮤니티 아바타를 화면 왼쪽의 필터 패널로 드래그하세요. 언제든지 필터 패널에 있는 아바타를 클릭해 커뮤니티와 관련된 방과 사람들만 볼 수 있습니다.", "Muted Users": "음소거된 사용자", "Delete Widget": "위젯 삭제", @@ -781,7 +781,7 @@ "Dark theme": "어두운 테마", "A text message has been sent to %(msisdn)s": "%(msisdn)s님에게 문자 메시지를 보냈습니다", "Something went wrong when trying to get your communities.": "커뮤니티를 받는 중 잘못되었습니다.", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "익명의 이용자 데이터를 보내 Riot.im을 개선하도록 도와주세요. 이 과정에서 쿠키를 사용합니다.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "익명의 이용자 데이터를 보내 %(brand)s을 개선하도록 도와주세요. 이 과정에서 쿠키를 사용합니다.", "Allow": "허용", "Visible to everyone": "모두에게 보여짐", "Only visible to community members": "커뮤니티 구성원에게만 보여짐", @@ -890,14 +890,14 @@ "Only room administrators will see this warning": "방 관리자만이 이 경고를 볼 수 있음", "This room is a continuation of another conversation.": "이 방은 다른 대화방의 연장선입니다.", "Click here to see older messages.": "여길 눌러 오래된 메시지를 보세요.", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "익명의 이용자 데이터를 보내 Riot.im을 개선하도록 도와주세요. 이 과정에서 쿠키를 사용합니다 (우리의 쿠키 정책을 살펴보세요).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "익명의 이용자 데이터를 보내 %(brand)s을 개선하도록 도와주세요. 이 과정에서 쿠키를 사용합니다 (우리의 쿠키 정책을 살펴보세요).", "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "이 홈서버는 월 간 활성 사용자 수 한도를 초과했기 때문에 일부 사용자는 로그인할 수 없습니다.", "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", "%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s이 %(count)s번 떠나고 다시 참가했습니다", "In reply to ": "관련 대화 ", "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)": "계정을 비활성화할 때 보낸 모든 메시지는 지워주세요 (경고: 이후 이용자들은 불완전한 대화 목록을 볼 수 있을 겁니다)", "Explore Account Data": "계정 정보 탐색", - "Updating Riot": "Riot 업데이트 중", + "Updating %(brand)s": "%(brand)s 업데이트 중", "Upgrade this room to version %(version)s": "이 방을 %(version)s 버전으로 업그레이드", "Upgrade Room Version": "방 버전 업그레이드", "Create a new room with the same name, description and avatar": "이름, 설명, 아바타가 같은 새 방 만들기", @@ -974,8 +974,8 @@ "%(names)s and %(lastPerson)s are typing …": "%(names)s님과 %(lastPerson)s님이 적고 있습니다 …", "Cannot reach homeserver": "홈서버에 연결할 수 없습니다", "Ensure you have a stable internet connection, or get in touch with the server admin": "인터넷 연결이 안정적인지 확인하세요, 또는 서버 관리자에게 연락하세요", - "Your Riot is misconfigured": "Riot이 잘못 설정됨", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Riot 관리자에게 당신의 설정에 잘못되거나 중복된 항목이 있는지 확인하도록 요청하세요.", + "Your %(brand)s is misconfigured": "%(brand)s이 잘못 설정됨", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "%(brand)s 관리자에게 당신의 설정에 잘못되거나 중복된 항목이 있는지 확인하도록 요청하세요.", "Cannot reach identity server": "ID 서버에 연결할 수 없습니다", "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.": "등록할 수 있지만 ID 서버가 다시 온라인 상태가 될 때까지 일부 기능을 사용할 수 없습니다. 이 경고가 계속 표시되면, 설정을 확인하거나 서버 관리자에게 연락하세요.", "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.": "비밀번호를 다시 설정할 수 있지만 ID 서버가 다시 온라인 상태가 될 때까지 일부 기능을 사용할 수 없습니다. 이 경고가 계속 표시되면, 설정을 확인하거나 서버 관리자에게 연락하세요.", @@ -1175,9 +1175,9 @@ "Deactivate account": "계정 비활성화", "Legal": "법적", "Credits": "크레딧", - "For help with using Riot, click here.": "Riot응 사용하다가 도움이 필요하다면, 여기를 클릭하세요.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Riot을 사용하다가 도움이 필요하다면, 여기를 클릭하거나, 아래 버튼을 사용해 우리의 봇과 대화를 시작하세요.", - "Chat with Riot Bot": "Riot 봇과 대화", + "For help with using %(brand)s, click here.": "%(brand)s응 사용하다가 도움이 필요하다면, 여기를 클릭하세요.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "%(brand)s을 사용하다가 도움이 필요하다면, 여기를 클릭하거나, 아래 버튼을 사용해 우리의 봇과 대화를 시작하세요.", + "Chat with %(brand)s Bot": "%(brand)s 봇과 대화", "Help & About": "도움 & 정보", "Bug reporting": "버그 신고하기", "FAQ": "자주 묻는 질문 (FAQ)", @@ -1347,8 +1347,8 @@ "Unable to load commit detail: %(msg)s": "커밋 세부 정보를 불러올 수 없음: %(msg)s", "Removing…": "제거 중…", "Clear all data": "모든 데이터 지우기", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "대화 기록을 잃지 않으려면, 로그아웃하기 전에 방 키를 내보내야 합니다. 이 작업을 수행하려면 최신 버전의 Riot으로 가야 합니다", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "이전에 %(host)s에서 Riot의 최신 버전을 사용했습니다. 종단간 암호화로 이 버전을 다시 사용하려면, 로그아웃한 후 다시 로그인하세요. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "대화 기록을 잃지 않으려면, 로그아웃하기 전에 방 키를 내보내야 합니다. 이 작업을 수행하려면 최신 버전의 %(brand)s으로 가야 합니다", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "이전에 %(host)s에서 %(brand)s의 최신 버전을 사용했습니다. 종단간 암호화로 이 버전을 다시 사용하려면, 로그아웃한 후 다시 로그인하세요. ", "Incompatible Database": "호환하지 않는 데이터베이스", "Continue With Encryption Disabled": "암호화를 끈 채 계속하기", "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에서 메시지 가시성은 이메일과 유사합니다. 메시지를 지우면 보낸 메시지는 신규 또는 등록하지 않은 사용자와 공유되지 않습니다, 하지만 이미 메시지에 접근한 등록한 사용자는 그 사본에 여전히 접근할 수 있습니다.", @@ -1364,11 +1364,11 @@ "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "이 사용자를 신뢰할 수 있도록 인증합니다. 종단간 암호화 메시지를 사용할 때 사용자를 신뢰하면 안심이 듭니다.", "Waiting for partner to confirm...": "상대방이 확인하기를 기다리는 중...", "Incoming Verification Request": "수신 확인 요청", - "You've previously used Riot 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, Riot needs to resync your account.": "이전에 구성원의 불러오기 지연이 켜진 %(host)s에서 Riot을 사용했습니다. 이 버전에서 불러오기 지연은 꺼집니다. 로컬 캐시가 이 두 설정 간에 호환되지 않으므로, Riot은 계정을 다시 동기화 해야 합니다.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "다른 버전의 Riot이 다른 탭에서 열려있다면, 같은 호스트에서 불러오기 지연이 동시에 켜지고 꺼지면서 오류가 발생할 수 있으니 닫아주세요.", + "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.": "이전에 구성원의 불러오기 지연이 켜진 %(host)s에서 %(brand)s을 사용했습니다. 이 버전에서 불러오기 지연은 꺼집니다. 로컬 캐시가 이 두 설정 간에 호환되지 않으므로, %(brand)s은 계정을 다시 동기화 해야 합니다.", + "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.": "다른 버전의 %(brand)s이 다른 탭에서 열려있다면, 같은 호스트에서 불러오기 지연이 동시에 켜지고 꺼지면서 오류가 발생할 수 있으니 닫아주세요.", "Incompatible local cache": "호환하지 않는 로컬 캐시", "Clear cache and resync": "캐시를 지우고 다시 동기화", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot은 이제 필요할 때만 다른 사용자에 대한 정보를 불러와 메모리를 3배에서 5배 덜 잡아먹습니다. 서버와 다시 동기화하는 동안 기다려주세요!", + "%(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!": "%(brand)s은 이제 필요할 때만 다른 사용자에 대한 정보를 불러와 메모리를 3배에서 5배 덜 잡아먹습니다. 서버와 다시 동기화하는 동안 기다려주세요!", "I don't want my encrypted messages": "저는 제 암호화된 메시지를 원하지 않아요", "Manually export keys": "수동으로 키 내보내기", "You'll lose access to your encrypted messages": "암호화된 메시지에 접근할 수 없게 됩니다", @@ -1493,8 +1493,8 @@ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "당신은 이 커뮤니티의 관리자입니다. 다른 관리자의 초대없이는 이 커뮤니티에 다시 참가할 수 없습니다.", "Want more than a community? Get your own server": "한 개 이상의 커뮤니티가 필요한가요? 자체 서버를 얻으세요", "This homeserver does not support communities": "이 홈서버는 커뮤니티를 지원하지 않습니다", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot이 홈서버에서 프로토콜 얻기에 실패했습니다. 홈서버가 제 3자 네트워크를 지원하기에 너무 오래된 것 같습니다.", - "Riot failed to get the public room list.": "Riot이 공개 방 목록을 가져오는데 실패했습니다.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s이 홈서버에서 프로토콜 얻기에 실패했습니다. 홈서버가 제 3자 네트워크를 지원하기에 너무 오래된 것 같습니다.", + "%(brand)s failed to get the public room list.": "%(brand)s이 공개 방 목록을 가져오는데 실패했습니다.", "The homeserver may be unavailable or overloaded.": "홈서버를 이용할 수 없거나 과부화된 상태입니다.", "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "이 홈서버가 리소스 한도를 초과했기 때문에 메시지를 보낼 수 없었습니다. 서비스를 계속 사용하려면 서비스 관리자에게 연락해주세요.", "Add room": "방 추가", @@ -1591,10 +1591,10 @@ "Sends a message as plain text, without interpreting it as markdown": "일반 문자로 메시지를 보냅니다, 마크다운으로 해석하지 않습니다", "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)가 반환됬습니다. 이 정보를 방 관리자에게 전달할 수 있습니다.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "당신의 계정과 관계없는 %(email)s님으로 %(roomName)s으로의 초대를 보냈습니다", - "Link this email with your account in Settings to receive invites directly in Riot.": "설정에서 이 이메일을 계정에 연결하면 Riot에서 직접 초대를 받을 수 있습니다.", + "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": "%(roomName)s으로의 초대가 %(email)s(으)로 보내졌습니다", - "Use an identity server in Settings to receive invites directly in Riot.": "설정에서 ID 서버를 사용해 Riot에서 직접 초대를 받을 수 있습니다.", - "Share this email in Settings to receive invites directly in Riot.": "설정에서 이 이메일을 공유해서 Riot에서 직접 초대를 받을 수 있습니다.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "설정에서 ID 서버를 사용해 %(brand)s에서 직접 초대를 받을 수 있습니다.", + "Share this email in Settings to receive invites directly in %(brand)s.": "설정에서 이 이메일을 공유해서 %(brand)s에서 직접 초대를 받을 수 있습니다.", "Error changing power level": "권한 등급 변경 중 오류", "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "사용자의 권한 등급을 변경하는 중 오류가 발생했습니다. 변경할 수 있는 권한이 있는 지 확인한 후 다시 시도하세요.", "Bold": "굵게", @@ -1740,7 +1740,7 @@ "View rules": "규칙 보기", "You are currently subscribed to:": "현재 구독 중임:", "⚠ These settings are meant for advanced users.": "⚠ 이 설정은 고급 사용자를 위한 것입니다.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "무시하고 싶은 사용자와 서버를 여기에 추가하세요. 별표(*)를 사용해서 Riot이 이름과 문자를 맞춰볼 수 있습니다. 예를 들어, @bot:*이라면 모든 서버에서 'bot'이라는 문자를 가진 이름의 모든 사용자를 무시합니다.", + "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이 이름과 문자를 맞춰볼 수 있습니다. 예를 들어, @bot:*이라면 모든 서버에서 'bot'이라는 문자를 가진 이름의 모든 사용자를 무시합니다.", "Custom (%(level)s)": "맞춤 (%(level)s)", "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.": "차단당하는 사람은 규칙에 따라 차단 목록을 통해 무시됩니다. 차단 목록을 구독하면 그 목록에서 차단당한 사용자/서버를 당신으로부터 감추게됩니다.", "Personal ban list": "개인 차단 목록", @@ -1765,7 +1765,7 @@ "Your avatar URL": "당신의 아바타 URL", "Your user ID": "당신의 사용자 ID", "Your theme": "당신의 테마", - "Riot URL": "Riot URL", + "%(brand)s URL": "%(brand)s URL", "Room ID": "방 ID", "Widget ID": "위젯 ID", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "이 위젯을 사용하면 %(widgetDomain)s & 통합 관리자와 데이터를 공유합니다.", @@ -1777,11 +1777,11 @@ "Connecting to integration manager...": "통합 관리자로 연결 중...", "Cannot connect to integration manager": "통합 관리자에 연결할 수 없음", "The integration manager is offline or it cannot reach your homeserver.": "통합 관리자가 오프라인이거나 당신의 홈서버에서 접근할 수 없습니다.", - "The version of Riot": "Riot의 버전", - "Whether you're using Riot on a device where touch is the primary input mechanism": "터치가 기본 입력 방식인 기기에서 Riot을 사용하는지 여부", - "Whether you're using Riot as an installed Progressive Web App": "Riot을 설치형 프로그레시브 웹 앱으로 사용하는지 여부", + "The version of %(brand)s": "%(brand)s의 버전", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "터치가 기본 입력 방식인 기기에서 %(brand)s을 사용하는지 여부", + "Whether you're using %(brand)s as an installed Progressive Web App": "%(brand)s을 설치형 프로그레시브 웹 앱으로 사용하는지 여부", "Your user agent": "사용자 에이전트", - "The information being sent to us to help make Riot better includes:": "Riot을 개선하기 위해 당사에 전송되는 정보에는 다음과 같은 것들이 포함됩니다:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s을 개선하기 위해 당사에 전송되는 정보에는 다음과 같은 것들이 포함됩니다:", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "이 방에는 알 수 없는 세션들이 있습니다: 검증 없이 진행하면 누군가 당신의 전화를 도청할 수도 있습니다.", "If you cancel now, you won't complete verifying the other user.": "지금 취소하면 다른 사용자 확인이 완료될 수 없습니다.", "If you cancel now, you won't complete verifying your other session.": "지금 취소하면 당신의 다른 세션을 검증할 수 없습니다.", diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json index f739bd5485..0221f07ee1 100644 --- a/src/i18n/strings/lt.json +++ b/src/i18n/strings/lt.json @@ -3,16 +3,16 @@ "This phone number is already in use": "Šis telefono numeris jau naudojamas", "Failed to verify email address: make sure you clicked the link in the email": "Nepavyko patvirtinti el. pašto adreso: įsitikinkite, kad paspaudėte nuorodą el. laiške", "The platform you're on": "Jūsų naudojama platforma", - "The version of Riot.im": "Riot.im versija", + "The version of %(brand)s": "%(brand)s versija", "Your language of choice": "Jūsų pasirinkta kalba", "Which officially provided instance you are using, if any": "Kurią oficialiai teikiamą instanciją naudojate, jei tokių yra", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Ar jūs naudojate Raiškiojo Teksto Redaktoriaus Raiškiojo Teksto režimą ar ne", "Your homeserver's URL": "Jūsų serverio URL", "Your identity server's URL": "Jūsų tapatybės serverio URL", "Analytics": "Statistika", - "The information being sent to us to help make Riot.im better includes:": "Informacija, siunčiama mums, kad padėtų tobulinti Riot.im, apima:", + "The information being sent to us to help make %(brand)s better includes:": "Informacija, siunčiama mums, kad padėtų tobulinti %(brand)s, apima:", "Fetching third party location failed": "Nepavyko gauti trečios šalies vietos", - "A new version of Riot is available.": "Yra prieinama nauja Riot versija.", + "A new version of %(brand)s is available.": "Yra prieinama nauja %(brand)s versija.", "I understand the risks and wish to continue": "Suprantu šią riziką ir noriu tęsti", "Send Account Data": "Siųsti paskyros duomenis", "Advanced notification settings": "Išplėstiniai pranešimų nustatymai", @@ -81,7 +81,7 @@ "Search…": "Paieška…", "You have successfully set a password and an email address!": "Jūs sėkmingai įrašėte slaptažodį ir el. pašto adresą!", "Remove %(name)s from the directory?": "Ar ištrinti %(name)s iš katalogo?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot naudoja daug išplėstinių naršyklės funkcijų, kai kurios iš jų yra neprieinamos arba eksperimentinės jūsų esamoje naršyklėje.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s naudoja daug išplėstinių naršyklės funkcijų, kai kurios iš jų yra neprieinamos arba eksperimentinės jūsų esamoje naršyklėje.", "Event sent!": "Įvykis išsiųstas!", "Unnamed room": "Kambarys be pavadinimo", "Dismiss": "Atmesti", @@ -131,14 +131,14 @@ "Reply": "Atsakyti", "Show message in desktop notification": "Rodyti žinutes darbalaukio pranešimuose", "Reject": "Atmesti", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Jūs turbūt juos sukonfigūravote kitoje programėlėje nei Riot. Negalite jų koreguoti Riot programėlėje, bet jie vistiek yra taikomi", - "Sorry, your browser is not able to run Riot.": "Atleiskite, jūsų naršyklė negali paleisti Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Jūs turbūt juos sukonfigūravote kitoje programėlėje nei %(brand)s. Negalite jų koreguoti %(brand)s programėlėje, bet jie vistiek yra taikomi", + "Sorry, your browser is not able to run %(brand)s.": "Atleiskite, jūsų naršyklė negali paleisti %(brand)s.", "Quote": "Cituoti", "Messages in group chats": "Žinutės grupės pokalbiuose", "Yesterday": "Vakar", "Error encountered (%(errorDetail)s).": "Susidurta su klaida (%(errorDetail)s).", "Low Priority": "Žemo prioriteto", - "Riot does not know how to join a room on this network": "Riot nežino kaip prisijungti prie kambario šiame tinkle", + "%(brand)s does not know how to join a room on this network": "%(brand)s nežino kaip prisijungti prie kambario šiame tinkle", "Set Password": "Nustatyti slaptažodį", "An error occurred whilst saving your email notification preferences.": "Išsaugant pranešimų el. paštu nuostatas, įvyko klaida.", "Unable to join network": "Nepavyko prisijungti prie tinklo", @@ -214,8 +214,8 @@ "Failed to invite users to community": "Nepavyko pakviesti vartotojų į bendruomenę", "Failed to invite users to %(groupId)s": "Nepavyko pakviesti vartotojų į %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "Nepavyko pridėti šių kambarių į %(groupId)s:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot neturi leidimo siųsti jums pranešimus - patikrinkite savo naršyklės nustatymus", - "Riot was not given permission to send notifications - please try again": "Riot nebuvo suteiktas leidimas siųsti pranešimus - bandykite dar kartą", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s neturi leidimo siųsti jums pranešimus - patikrinkite savo naršyklės nustatymus", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s nebuvo suteiktas leidimas siųsti pranešimus - bandykite dar kartą", "Unable to enable Notifications": "Nepavyko įjungti pranešimų", "This email address was not found": "Šis el. pašto adresas nebuvo rastas", "Admin": "Administratorius", @@ -399,7 +399,7 @@ "": "", "Check for update": "Tikrinti, ar yra atnaujinimų", "Reject all %(invitedRooms)s invites": "Atmesti visus %(invitedRooms)s pakvietimus", - "You may need to manually permit Riot to access your microphone/webcam": "Jums gali tekti rankiniu būdu duoti leidimą Riot prieigai prie mikrofono/kameros", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Jums gali tekti rankiniu būdu duoti leidimą %(brand)s prieigai prie mikrofono/kameros", "No Audio Outputs detected": "Neaptikta jokių garso išvesčių", "No Microphones detected": "Neaptikta jokių mikrofonų", "No Webcams detected": "Neaptikta jokių kamerų", @@ -411,7 +411,7 @@ "Profile": "Profilis", "Account": "Paskyra", "click to reveal": "spustelėkite, norėdami atskleisti", - "riot-web version:": "riot-web versija:", + "%(brand)s version:": "%(brand)s versija:", "olm version:": "olm versija:", "Failed to send email": "Nepavyko išsiųsti el. laiško", "The email address linked to your account must be entered.": "Privalo būti įvestas su jūsų paskyra susietas el. pašto adresas.", @@ -496,7 +496,7 @@ "%(senderName)s made future room history visible to all room members.": "%(senderName)s padarė būsimą kambario istoriją matomą visiems kambario dalyviams.", "%(senderName)s made future room history visible to anyone.": "%(senderName)s padarė būsimą kambario istoriją matomą bet kam.", "Your browser does not support the required cryptography extensions": "Jūsų naršyklė nepalaiko reikalingų kriptografijos plėtinių", - "Not a valid Riot keyfile": "Negaliojantis Riot rakto failas", + "Not a valid %(brand)s keyfile": "Negaliojantis %(brand)s rakto failas", "Authentication check failed: incorrect password?": "Autentifikavimo patikra nepavyko: neteisingas slaptažodis?", "Send analytics data": "Siųsti analitinius duomenis", "Incoming voice call from %(name)s": "Įeinantis balso skambutis nuo %(name)s", @@ -619,8 +619,8 @@ "Filter community members": "Filtruoti bendruomenės dalyvius", "Removing a room from the community will also remove it from the community page.": "Pašalinus kambarį iš bendruomenės, taip pat pašalins jį iš bendruomenės puslapio.", "Filter community rooms": "Filtruoti bendruomenės kambarius", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Padėkite patobulinti Riot.im, siųsdami anoniminius naudojimosi duomenis. Tai panaudos slapuką (žiūrėkite mūsų Slapukų politiką).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Padėkite patobulinti Riot.im, siųsdami anoniminius naudojimosi duomenis. Tai naudos slapuką.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Padėkite patobulinti %(brand)s, siųsdami anoniminius naudojimosi duomenis. Tai panaudos slapuką (žiūrėkite mūsų Slapukų politiką).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Padėkite patobulinti %(brand)s, siųsdami anoniminius naudojimosi duomenis. Tai naudos slapuką.", "Please contact your service administrator to get this limit increased.": "Norėdami padidinti šį limitą, susisiekite su savo paslaugų administratoriumi.", "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Šis namų serveris pasiekė savo mėnesinį aktyvių naudotojų limitą, taigi, kai kurie naudotojai negalės prisijungti.", "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Šis namų serveris viršijo vieno iš savo išteklių limitą, taigi, kai kurie naudotojai negalės prisijungti.", @@ -708,7 +708,7 @@ "Deactivate Account": "Deaktyvuoti paskyrą", "I verify that the keys match": "Aš patvirtinu, kad raktai sutampa", "Incompatible local cache": "Nesuderinamas vietinis podėlis", - "Updating Riot": "Atnaujinama Riot", + "Updating %(brand)s": "Atnaujinama %(brand)s", "This doesn't appear to be a valid email address": "Tai nepanašu į teisingą el. pašto adresą", "Unable to add email address": "Nepavyko pridėti el. pašto adreso", "Unable to verify email address.": "Nepavyko patvirtinti el. pašto adreso.", @@ -751,10 +751,10 @@ "Add Email Address": "Pridėti el. pašto adresą", "Add Phone Number": "Pridėti telefono numerį", "Whether or not you're logged in (we don't record your username)": "Ar jūs prisijungę ar ne (mes neįrašome jūsų vartotojo vardo)", - "Chat with Riot Bot": "Kalbėtis su Riot Botu", + "Chat with %(brand)s Bot": "Kalbėtis su %(brand)s Botu", "Sign In": "Prisijungti", "Explore rooms": "Žvalgyti kambarius", - "Your Riot is misconfigured": "Jūsų Riot yra neteisingai sukonfigūruotas", + "Your %(brand)s is misconfigured": "Jūsų %(brand)s yra neteisingai sukonfigūruotas", "Sign in to your Matrix account on %(serverName)s": "Prisijunkite prie savo Matrix paskyros %(serverName)s serveryje", "Sign in to your Matrix account on ": "Prisijunkite prie savo paskyros serveryje", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Ar jūs naudojate 'duonos trupinių' funkciją ar ne (pseudoportretai virš kambarių sąrašo)", @@ -839,7 +839,7 @@ "%(names)s and %(lastPerson)s are typing …": "%(names)s ir %(lastPerson)s rašo …", "Cannot reach homeserver": "Serveris nepasiekiamas", "Ensure you have a stable internet connection, or get in touch with the server admin": "Įsitikinkite, kad jūsų interneto ryšys yra stabilus, arba susisiekite su serverio administratoriumi", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Paprašykite savo Riot administratoriaus patikrinti ar jūsų konfigūracijoje nėra neteisingų arba pasikartojančių įrašų.", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Paprašykite savo %(brand)s administratoriaus patikrinti ar jūsų konfigūracijoje nėra neteisingų arba pasikartojančių įrašų.", "Cannot reach identity server": "Tapatybės serveris nepasiekiamas", "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.": "Jūs galite registruotis, tačiau kai kurios funkcijos bus nepasiekiamos, kol tapatybės serveris prisijungs. Jei ir toliau matote šį įspėjimą, patikrinkite savo konfigūraciją arba susisiekite su serverio administratoriumi.", "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.": "Jūs galite iš naujo nustatyti savo slaptažodį, tačiau kai kurios funkcijos bus nepasiekiamos, kol tapatybės serveris prisijungs. Jei ir toliau matote šį įspėjimą, patikrinkite savo konfigūraciją arba susisiekite su serverio administratoriumi.", @@ -899,7 +899,7 @@ "This room is not public. You will not be able to rejoin without an invite.": "Šis kambarys nėra viešas. Jūs negalėsite vėl prie jo prisijungti be pakvietimo.", "Are you sure you want to leave the room '%(roomName)s'?": "Ar tikrai norite išeiti iš kambario %(roomName)s?", "%(creator)s created and configured the room.": "%(creator)s sukūrė ir sukonfigūravo kambarį.", - "Riot failed to get the public room list.": "Riot nepavyko gauti viešų kambarių sąrašo.", + "%(brand)s failed to get the public room list.": "%(brand)s nepavyko gauti viešų kambarių sąrašo.", "General failure": "Bendras triktis", "Messages containing my username": "Žinutės, kuriose yra mano vartotojo vardas", "Set a new account password...": "Nustatyti naują paskyros slaptažodį...", @@ -1078,7 +1078,7 @@ "COPY": "Kopijuoti", "Enter recovery key": "Įveskite atgavimo raktą", "Keep going...": "Tęskite...", - "Please install Chrome, Firefox, or Safari for the best experience.": "Riot geriausiai veikia su Chrome, Firefox, arba Safari naršyklėmis.", + "Please install Chrome, Firefox, or Safari for the best experience.": "%(brand)s geriausiai veikia su Chrome, Firefox, arba Safari naršyklėmis.", "Syncing...": "Sinchronizuojama...", "Signing In...": "Prijungiama...", "If you've joined lots of rooms, this might take a while": "Jei esate prisijungę prie daug kambarių, tai gali užtrukti", @@ -1258,7 +1258,7 @@ "Registration has been disabled on this homeserver.": "Registracija šiame serveryje išjungta.", "You can now close this window or log in to your new account.": "Jūs galite uždaryti šį langą arba prisijungti į savo naują paskyrą.", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Identifikuokite save patvirtindami šį prisijungimą viename iš kitų jūsų seansų ir suteikdami jam prieigą prie šifruotų žinučių.", - "This requires the latest Riot on your other devices:": "Tam reikia naujausios Riot versijos kituose jūsų įrenginiuose:", + "This requires the latest %(brand)s on your other devices:": "Tam reikia naujausios %(brand)s versijos kituose jūsų įrenginiuose:", "or another cross-signing capable Matrix client": "arba kito kryžminį pasirašymą palaikančio Matrix kliento", "Use Recovery Passphrase or Key": "Naudoti atgavimo slaptafrazę arba raktą", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Atnaujinkite šį seansą, kad jam būtų leista patvirtinti kitus seansus, suteikiant jiems prieigą prie šifruotų žinučių ir juos pažymint kaip patikimus kitiems vartotojams.", @@ -1269,7 +1269,7 @@ "Confirm adding this phone number by using Single Sign On to prove your identity.": "Patvirtinkite šio telefono numerio pridėjimą naudodami Vieno Prisijungimo sistemą, patvirtinančią jūsų tapatybę.", "Confirm adding phone number": "Patvirtinkite telefono numerio pridėjimą", "Click the button below to confirm adding this phone number.": "Paspauskite žemiau esantį mygtuką, kad patvirtintumėte šio numerio pridėjimą.", - "The version of Riot": "Riot versija", + "The version of %(brand)s": "%(brand)s versija", "Match system theme": "Suderinti su sistemos tema", "Identity Server URL must be HTTPS": "Tapatybės serverio URL privalo būti HTTPS", "Not a valid Identity Server (status code %(code)s)": "Netinkamas tapatybės serveris (statuso kodas %(code)s)", @@ -1309,14 +1309,14 @@ "Your theme": "Jūsų tema", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Valdiklio ištrinimas pašalina jį visiems kambaryje esantiems vartotojams. Ar tikrai norite ištrinti šį valdiklį?", "Enable 'Manage Integrations' in Settings to do this.": "Įjunkite 'Valdyti integracijas' nustatymuose, kad tai atliktumėte.", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Jūsų Riot neleidžia jums naudoti integracijų tvarkytuvo tam atlikti. Susisiekite su administratoriumi.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Jūsų %(brand)s neleidžia jums naudoti integracijų tvarkytuvo tam atlikti. Susisiekite su administratoriumi.", "Enter phone number (required on this homeserver)": "Įveskite telefono numerį (privaloma šiame serveryje)", "Doesn't look like a valid phone number": "Tai nepanašu į veikiantį telefono numerį", "Invalid homeserver discovery response": "Klaidingas serverio radimo atsakas", "Invalid identity server discovery response": "Klaidingas tapatybės serverio radimo atsakas", "The phone number entered looks invalid": "Įvestas telefono numeris atrodo klaidingas", "Double check that your server supports the room version chosen and try again.": "Dar kartą įsitikinkite, kad jūsų serveris palaiko pasirinktą kambario versiją ir bandykite iš naujo.", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Ar naudojate Riot įrenginyje, kuriame pagrindinis įvesties mechanizmas yra lietimas", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Ar naudojate %(brand)s įrenginyje, kuriame pagrindinis įvesties mechanizmas yra lietimas", "Session already verified!": "Seansas jau patvirtintas!", "WARNING: Session already verified, but keys do NOT MATCH!": "ĮSPĖJIMAS: Seansas jau patvirtintas, bet raktai NESUTAMPA!", "Enable cross-signing to verify per-user instead of per-session": "Įjunkite kryžminį pasirašymą, kad patvirtintumėte vartotoją, o ne seansą", @@ -1440,7 +1440,7 @@ "You have verified this user. This user has verified all of their sessions.": "Jūs patvirtinote šį vartotoją. Šis vartotojas patvirtino visus savo seansus.", "Everyone in this room is verified": "Visi šiame kambaryje yra patvirtinti", "Encrypted by a deleted session": "Užšifruota ištrintos sesijos", - "Use an identity server in Settings to receive invites directly in Riot.": "Nustatymuose naudokite tapatybės serverį, kad gautumėte pakvietimus tiesiai į Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Nustatymuose naudokite tapatybės serverį, kad gautumėte pakvietimus tiesiai į %(brand)s.", "%(count)s verified sessions|one": "1 patvirtintas seansas", "If you can't scan the code above, verify by comparing unique emoji.": "Jei nuskaityti aukščiau esančio kodo negalite, patvirtinkite palygindami unikalius jaustukus.", "You've successfully verified your device!": "Jūs sėkmingai patvirtinote savo įrenginį!", @@ -1469,7 +1469,7 @@ "If you don't want to set this up now, you can later in Settings.": "Jei jūs dabar nenorite to nustatyti, galite padaryti tai vėliau Nustatymuose.", "Done": "Atlikta", "No media permissions": "Nėra medijos leidimų", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Seansas, kurį jūs bandote patvirtinti, nepalaiko QR kodo nuskaitymo arba jaustukų patvirtinimo, kuriuos palaiko Riot. Bandykite su kitu klientu.", + "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.": "Seansas, kurį jūs bandote patvirtinti, nepalaiko QR kodo nuskaitymo arba jaustukų patvirtinimo, kuriuos palaiko %(brand)s. Bandykite su kitu klientu.", "Almost there! Is your other session showing the same shield?": "Beveik atlikta! Ar jūsų kitas seansas rodo tokį patį skydą?", "Almost there! Is %(displayName)s showing the same shield?": "Beveik atlikta! Ar %(displayName)s rodo tokį patį skydą?", "No": "Ne", @@ -1540,9 +1540,9 @@ "Reject & Ignore user": "Atmesti ir ignoruoti vartotoją", "Reject invitation": "Atmesti pakvietimą", "Unable to reject invite": "Nepavyko atmesti pakvietimo", - "Whether you're using Riot as an installed Progressive Web App": "Ar naudojate Riot kaip įdiegtą progresyviąją žiniatinklio programą", + "Whether you're using %(brand)s as an installed Progressive Web App": "Ar naudojate %(brand)s kaip įdiegtą progresyviąją žiniatinklio programą", "Your user agent": "Jūsų vartotojo agentas", - "The information being sent to us to help make Riot better includes:": "Informacija, siunčiama mums siekiant pagerinti Riot, yra:", + "The information being sent to us to help make %(brand)s better includes:": "Informacija, siunčiama mums siekiant pagerinti %(brand)s, yra:", "Invite only": "Tik pakviestiems", "You can only join it with a working invite.": "Jūs galite prisijungti tik su veikiančiu pakvietimu.", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Šiame kambaryje yra nežinomų seansų: jei jūs tęsite jų nepatvirtinę, bus galimybė kažkam slapta pasiklausyti jūsų skambučio.", @@ -1639,7 +1639,7 @@ "in account data": "paskyros duomenyse", "Homeserver feature support:": "Serverio funkcijų palaikymas:", "exists": "yra", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot negali saugiai podėlyje talpinti užšifruotų žinučių, kol veikia interneto naršyklėje. Naudokite Riot Desktop, kad užšifruotos žinutės būtų rodomos paieškos rezultatuose.", + "%(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 negali saugiai podėlyje talpinti užšifruotų žinučių, kol veikia interneto naršyklėje. Naudokite %(brand)s Desktop, kad užšifruotos žinutės būtų rodomos paieškos rezultatuose.", "This session is backing up your keys. ": "Šis seansas kuria atsargines jūsų raktų kopijas. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Šis seansas nekuria atsarginių raktų kopijų, bet jūs jau turite atsarginę kopiją iš kurios galite atkurti ir pridėti.", "All keys backed up": "Atsarginė kopija sukurta visiems raktams", @@ -1678,8 +1678,8 @@ "Disconnect": "Atsijungti", "Disconnect anyway": "Vis tiek atsijungti", "Credits": "Padėka", - "For help with using Riot, click here.": "Norėdami gauti pagalbos naudojant Riot, paspauskite čia.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Norėdami gauti pagalbos naudojant Riot, paspauskite čia arba pradėkite pokalbį su mūsų botu pasinaudoję žemiau esančiu mygtuku.", + "For help with using %(brand)s, click here.": "Norėdami gauti pagalbos naudojant %(brand)s, paspauskite čia.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Norėdami gauti pagalbos naudojant %(brand)s, paspauskite čia arba pradėkite pokalbį su mūsų botu pasinaudoję žemiau esančiu mygtuku.", "Bug reporting": "Pranešti apie klaidą", "Clear cache and reload": "Išvalyti podėlį ir perkrauti", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Norėdami pranešti apie su Matrix susijusią saugos problemą, perskaitykite Matrix.org Saugumo Atskleidimo Poliiką.", @@ -1690,7 +1690,7 @@ "Import E2E room keys": "Importuoti E2E kambarių raktus", "Session ID:": "Seanso ID:", "Session key:": "Seanso raktas:", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot renka anoniminę analizę, kad galėtume patobulinti programą.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s renka anoniminę analizę, kad galėtume patobulinti programą.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privatumas mums yra svarbus, todėl mes nerenkame jokių asmeninių ar identifikuojamų duomenų savo analitikai.", "Learn more about how we use analytics.": "Sužinokite daugiau apie tai, kaip mes naudojame analitiką.", "Reset": "Iš naujo nustatyti", diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index 03777f4870..27f07a46f5 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -12,7 +12,7 @@ "No Microphones detected": "Nav mikrofonu", "No Webcams detected": "Nav webkameru", "No media permissions": "Nav datu nesēju, kuriem atļauta piekļuve", - "You may need to manually permit Riot to access your microphone/webcam": "Tev varētu būt nepieciešams manuāli atļaut Riot pieslēgties tavam mikrofonam/webkamerai", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Tev varētu būt nepieciešams manuāli atļaut %(brand)s pieslēgties tavam mikrofonam/webkamerai", "Default Device": "Noklusējuma ierīce", "Microphone": "Mikrofons", "Camera": "Kamera", @@ -211,9 +211,9 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s vēlas VoIP konferenci.", "Results from DuckDuckGo": "Rezultāti no DuckDuckGo", "Return to login screen": "Atgriezties uz pierakstīšanās lapu", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot nav atļauts nosūtīt Tev paziņojumus. Lūdzu pārbaudi sava pārlūka iestatījumus", - "Riot was not given permission to send notifications - please try again": "Riot nav piešķirta atļauja nosūtīt paziņojumus. Lūdzu mēģini vēlreiz", - "riot-web version:": "Riot-web versija:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s nav atļauts nosūtīt Tev paziņojumus. Lūdzu pārbaudi sava pārlūka iestatījumus", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s nav piešķirta atļauja nosūtīt paziņojumus. Lūdzu mēģini vēlreiz", + "%(brand)s version:": "%(brand)s versija:", "Unable to enable Notifications": "Nav iespējams iespējot paziņojumus", "You have no visible notifications": "Tev nav redzamo paziņojumu", "This will allow you to reset your password and receive notifications.": "Tas atļaus Tev atiestatīt paroli un saņemt paziņojumus.", @@ -372,7 +372,7 @@ "Start automatically after system login": "Startēt pie ierīces ielādes", "Analytics": "Analītika", "Options": "Opcijas/iestatījumi", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot ievāc anonīmus analītikas datus, lai varētu uzlabot aplikācijas darbību.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s ievāc anonīmus analītikas datus, lai varētu uzlabot aplikācijas darbību.", "Passphrases must match": "Paroles frāzēm ir jāsakrīt", "Passphrase must not be empty": "Paroles frāze nevar būt tukša", "Export room keys": "Eksportēt istabas atslēgas", @@ -392,7 +392,7 @@ "To continue, please enter your password.": "Lai turpinātu, ievadi savu paroli.", "I verify that the keys match": "Es apstiprinu, ka atslēgas sakrīt", "Unable to restore session": "Nav iespējams atjaunot sesiju", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Ja Tu iepriekš izmantoji jaunāku Riot versiju, tava sesija var nebūt saderīga ar šo versiju. Aizver šo logu un atgriezies jaunākajā versijā.", + "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.": "Ja Tu iepriekš izmantoji jaunāku %(brand)s versiju, tava sesija var nebūt saderīga ar šo versiju. Aizver šo logu un atgriezies jaunākajā versijā.", "Unknown Address": "Nezināma adrese", "Unblacklist": "Atbloķēšanas saraksts", "Blacklist": "Melnais saraksts", @@ -423,7 +423,7 @@ "This will be your account name on the homeserver, or you can pick a different server.": "Šis būs Tavs konta vārds Bāzes serverī, vai arī vari izvēlēties citu serveri.", "If you already have a Matrix account you can log in instead.": "Vai arī, ja Tev jau ir Matrix konts, tu vari pierakstīties tajā.", "Your browser does not support the required cryptography extensions": "Tavs pārlūks neatbalsta vajadzīgos kriptogrāfijas paplašinājumus", - "Not a valid Riot keyfile": "Nederīgs Riot atslēgfails", + "Not a valid %(brand)s keyfile": "Nederīgs %(brand)s atslēgfails", "Authentication check failed: incorrect password?": "Autentifikācijas pārbaude neizdevās. Nepareiza parole?", "Do you want to set an email address?": "Vai vēlies norādīt epasta adresi?", "Skip": "Izlaist", @@ -464,13 +464,13 @@ "Unnamed room": "Nenosaukta istaba", "Guests can join": "Var pievienoties viesi", "The platform you're on": "Izmantotā operētājsistēma", - "The version of Riot.im": "Riot.im versija", + "The version of %(brand)s": "%(brand)s versija", "Your language of choice": "Izvēlētā valoda", "Which officially provided instance you are using, if any": "Kuru oficiāli izlaisto versiju izmantojat (ja to darat)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Neatkarīgi no tā, vai izmantojat Richtext režīmu redaktorā Rich Text Editor", "Your homeserver's URL": "Bāzes servera URL adrese", "Your identity server's URL": "Tava Identitātes servera URL adrese", - "The information being sent to us to help make Riot.im better includes:": "Informācija, kura mums tiek nosūtīta, lai ļautu padarīt Riot.im labāku, ietver:", + "The information being sent to us to help make %(brand)s better includes:": "Informācija, kura mums tiek nosūtīta, lai ļautu padarīt %(brand)s labāku, ietver:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Ja šī lapa ietver identificējamu informāciju, tādu kā istaba, lietotājs, grupas Id, šie dati tiek noņemti pirms nosūtīšanas uz serveri.", "Call Failed": "Zvans neizdevās", "Review Devices": "Ierīču pārskats", @@ -651,7 +651,7 @@ "Failed to load %(groupId)s": "Neizdevās ielādēt %(groupId)s", "This room is not public. You will not be able to rejoin without an invite.": "Šīs istaba nav publiska. Tu nevari tajā ieiet bez uzaicinājuma.", "Old cryptography data detected": "Tika uzieti novecojuši šifrēšanas dati", - "Data from an older version of Riot 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.": "Uzieti dati no vecākas Riot versijas. Tas novedīs pie \"end-to-end\" šifrēšanas problēmām vecākajā versijā. Šajā versijā nevar tikt atšifrēti ziņojumi, kuri radīti izmantojot vecākajā versijā \"end-to-end\" šifrētas ziņas. Tas var arī novest pie ziņapmaiņas, kas veikta ar šo versiju, neizdošanās. Ja rodas ķibeles, izraksties un par jaunu pieraksties sistēmā. Lai saglabātu ziņu vēsturi, eksportē un tad importē savas šifrēšanas atslēgas.", + "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.": "Uzieti dati no vecākas %(brand)s versijas. Tas novedīs pie \"end-to-end\" šifrēšanas problēmām vecākajā versijā. Šajā versijā nevar tikt atšifrēti ziņojumi, kuri radīti izmantojot vecākajā versijā \"end-to-end\" šifrētas ziņas. Tas var arī novest pie ziņapmaiņas, kas veikta ar šo versiju, neizdošanās. Ja rodas ķibeles, izraksties un par jaunu pieraksties sistēmā. Lai saglabātu ziņu vēsturi, eksportē un tad importē savas šifrēšanas atslēgas.", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Radi kopienu, lai apvienotu lietotājus un istabas. Izveido mājaslapu, lai iezīmētu Matrix visumā savu klātbūtni, vietu un telpu.", "Error whilst fetching joined communities": "Ielādējot kopienas radās kļūda", "%(count)s of your messages have not been sent.|one": "Tava ziņa netika nosūtīta.", @@ -663,7 +663,7 @@ "Learn more about how we use analytics.": "Sīkāk par to, kā tiek izmantota analītika.", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Epasts ir nosūtīts uz %(emailAddress)s. Izmanto epastā nosūtīto tīmekļa saiti un tad noklikšķini zemāk.", "Please note you are logging into the %(hs)s server, not matrix.org.": "Lūdzu ņem vērā, ka Tu pieraksties %(hs)s serverī, nevis matrix.org serverī.", - "This homeserver doesn't offer any login flows which are supported by this client.": "Šis bāzes serveris neatbalsta nevienu pierakstīšanās metodi, kuru piedāvā šis Riot klients.", + "This homeserver doesn't offer any login flows which are supported by this client.": "Šis bāzes serveris neatbalsta nevienu pierakstīšanās metodi, kuru piedāvā šis %(brand)s klients.", "Ignores a user, hiding their messages from you": "Ignorē lietotāju, Tev nerādot viņa sūtītās ziņas", "Stops ignoring a user, showing their messages going forward": "Atceļ lietotāja ignorēšanu, rādot viņa turpmāk sūtītās ziņas", "Notify the whole room": "Paziņot visai istabai", @@ -700,7 +700,7 @@ "Long Description (HTML)": "Garais apraksts (HTML)", "Community %(groupId)s not found": "Kopiena %(groupId)s nav atrasta", "Your Communities": "Tavas kopienas", - "Did you know: you can use communities to filter your Riot.im experience!": "Vai zināji: Tu vari izmantot kopienas, lai filtrētu (atlasītu) savu Riot.im pieredzi!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Vai zināji: Tu vari izmantot kopienas, lai filtrētu (atlasītu) savu %(brand)s pieredzi!", "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.": "Lai uzstādītu filtru, uzvelc kopienas avataru uz filtru paneļa ekrāna kreisajā malā. Lai redzētu tikai istabas un cilvēkus, kas saistīti ar šo kopienu, Tu vari klikšķināt uz avatara filtru panelī jebkurā brīdī.", "Create a new community": "Izveidot jaunu kopienu", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Tagadvisas atkārtoti sūtīt vai visas atcelt. Tu vari atzīmēt arī individuālas ziņas, kuras atkārtoti sūtīt vai atcelt.", @@ -710,7 +710,7 @@ "Opens the Developer Tools dialog": "Atver Izstrādātāja instrumentus", "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Skatījis %(displayName)s (%(userName)s) %(dateTime)s", "Fetching third party location failed": "Neizdevās iegūt trešās puses atrašanās vietu", - "A new version of Riot is available.": "Pieejama jauna Riot versija.", + "A new version of %(brand)s is available.": "Pieejama jauna %(brand)s versija.", "Send Account Data": "Sūtīt konta datus", "All notifications are currently disabled for all targets.": "Visiem saņēmējiem visi paziņojumi ir atspējoti.", "Uploading report": "Augšuplādē atskaiti", @@ -765,7 +765,7 @@ "Search…": "Meklēju…", "You have successfully set a password and an email address!": "Esi veiksmīgi iestatījis(usi) paroli un epasta adresi!", "Remove %(name)s from the directory?": "Dzēst %(name)s no kataloga?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot izmanto daudzas advancētas tīmekļa pārlūka iespējas, no kurām dažas var nebūt pieejamas vai ir eksperimentālas Tavā pašreizējajā pārlūkā.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s izmanto daudzas advancētas tīmekļa pārlūka iespējas, no kurām dažas var nebūt pieejamas vai ir eksperimentālas Tavā pašreizējajā pārlūkā.", "Event sent!": "Notikums nosūtīts!", "Preparing to send logs": "Gatavojos nosūtīt atutošanas logfailus", "Explore Account Data": "Aplūkot konta datus", @@ -811,8 +811,8 @@ "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.": "Atutošanas logfaili satur programmas datus, ieskaitot Tavu lietotājvārdu, istabu/grupu ID vai aliases, kuras esi apmeklējis un citu lietotāju lietotājvārdus. Tie nesatur pašas ziņas.", "Unhide Preview": "Rādīt priekšskatījumu", "Unable to join network": "Nav iespējams pievienoties tīklam", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Droši vien Tu konfigurēji tās kādā citā Matrix klientā, nevis Riot. Nav iespējams tos pārkonfigurēt ar Riot, bet tie joprojām tiek izmantoti", - "Sorry, your browser is not able to run Riot.": "Atvaino, diemžēl tavs tīmekļa pārlūks nespēj darbināt Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Droši vien Tu konfigurēji tās kādā citā Matrix klientā, nevis %(brand)s. Nav iespējams tos pārkonfigurēt ar %(brand)s, bet tie joprojām tiek izmantoti", + "Sorry, your browser is not able to run %(brand)s.": "Atvaino, diemžēl tavs tīmekļa pārlūks nespēj darbināt %(brand)s.", "Uploaded on %(date)s by %(user)s": "Augšuplādēja %(user)s %(date)s", "Messages in group chats": "Ziņas grupas čatos", "Yesterday": "vakar", @@ -821,7 +821,7 @@ "Unable to fetch notification target list": "Neizdevās iegūt paziņojumu mērķu sarakstu", "Set Password": "Iestatīt paroli", "Off": "izslēgts", - "Riot does not know how to join a room on this network": "Riot nezin kā pievienoties šajā tīklā esošajai istabai", + "%(brand)s does not know how to join a room on this network": "%(brand)s nezin kā pievienoties šajā tīklā esošajai istabai", "Mentions only": "Vienīgi atsauces", "You can now return to your account after signing out, and sign in on other devices.": "Tagad vari atgriezties savā kontā arī pēc izrakstīšanās, un pierakstīties no citām ierīcēm.", "Enable email notifications": "Iespējot paziņojumus pa epastu", @@ -853,7 +853,7 @@ "You do not have permission to start a conference call in this room": "Šajā istabā nav atļaujas sākt konferences zvanu", "Replying With Files": "Atbildot ar failiem", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Šobrīd nav iespējams atbildēt ar failu. Vai vēlaties augšupielādēt šo failu, neatbildot?", - "Your Riot is misconfigured": "Jūsu Riot ir nepareizi konfigurēts", + "Your %(brand)s is misconfigured": "Jūsu %(brand)s ir nepareizi konfigurēts", "Add Email Address": "Pievienot e-pasta adresi", "Add Phone Number": "Pievienot tālruņa numuru", "Call failed due to misconfigured server": "Zvans neizdevās nekorekti nokonfigurēta servera dēļ" diff --git a/src/i18n/strings/ml.json b/src/i18n/strings/ml.json index f181e0d65a..f6d875eea6 100644 --- a/src/i18n/strings/ml.json +++ b/src/i18n/strings/ml.json @@ -23,7 +23,7 @@ "Microphone": "മൈക്രോഫോൺ", "Camera": "ക്യാമറ", "Fetching third party location failed": "തേഡ് പാര്‍ട്ടി ലൊക്കേഷന്‍ ഫെച്ച് ചെയ്യാന്‍ കഴിഞ്ഞില്ല", - "A new version of Riot is available.": "റയട്ടിന്റെ ഒരു പുതിയ പതിപ്പ് ലഭ്യമാണ്.", + "A new version of %(brand)s is available.": "റയട്ടിന്റെ ഒരു പുതിയ പതിപ്പ് ലഭ്യമാണ്.", "All notifications are currently disabled for all targets.": "അറിയിപ്പുകളെല്ലാം നിര്‍ത്തിയിരിയ്ക്കുന്നു.", "Uploading report": "റിപ്പോര്‍ട്ട് അപ്ലോഡ് ചെയ്യുന്നു", "Sunday": "ഞായര്‍", @@ -76,7 +76,7 @@ "Enter keywords separated by a comma:": "കീവേഡുകളെ കോമ കൊണ്ട് വേര്‍ത്തിരിച്ച് ടൈപ്പ് ചെയ്യുക :", "I understand the risks and wish to continue": "കുഴപ്പമാകാന്‍ സാധ്യതയുണ്ടെന്നെനിയ്ക്കു് മനസ്സിലായി, എന്നാലും മുന്നോട്ട് പോകുക", "Remove %(name)s from the directory?": "%(name)s കള്‍ ഡയറക്റ്ററിയില്‍ നിന്നും മാറ്റണോ ?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "റയട്ട് നൂതന ബ്രൌസര്‍ ഫീച്ചറുകള്‍ ഉപയോഗിക്കുന്നു. നിങ്ങളുടെ ബ്രൌസറില്‍ അവയില്‍ പലതും ഇല്ല / പൂര്‍ണ്ണമല്ല .", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "റയട്ട് നൂതന ബ്രൌസര്‍ ഫീച്ചറുകള്‍ ഉപയോഗിക്കുന്നു. നിങ്ങളുടെ ബ്രൌസറില്‍ അവയില്‍ പലതും ഇല്ല / പൂര്‍ണ്ണമല്ല .", "Unnamed room": "പേരില്ലാത്ത റൂം", "All messages (noisy)": "എല്ലാ സന്ദേശങ്ങളും (ഉച്ചത്തിൽ)", "Saturday": "ശനി", @@ -114,8 +114,8 @@ "Back": "തിരികെ", "Unhide Preview": "പ്രിവ്യു കാണിക്കുക", "Unable to join network": "നെറ്റ്‍വര്‍ക്കില്‍ ജോയിന്‍ ചെയ്യാന്‍ കഴിയില്ല", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "ഇവ റയട്ടല്ലാതെ മറ്റൊരു ക്ലയന്റില്‍ വച്ച് കോണ്‍ഫിഗര്‍ ചെയ്തതാകാം. റയട്ടില്‍ അവ ലഭിക്കില്ല, എങ്കിലും അവ നിലവിലുണ്ട്", - "Sorry, your browser is not able to run Riot.": "ക്ഷമിക്കണം, നിങ്ങളുടെ ബ്രൌസര്‍ റയട്ട് പ്രവര്‍ത്തിപ്പിക്കാന്‍ പര്യാപ്തമല്ല.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "ഇവ റയട്ടല്ലാതെ മറ്റൊരു ക്ലയന്റില്‍ വച്ച് കോണ്‍ഫിഗര്‍ ചെയ്തതാകാം. റയട്ടില്‍ അവ ലഭിക്കില്ല, എങ്കിലും അവ നിലവിലുണ്ട്", + "Sorry, your browser is not able to run %(brand)s.": "ക്ഷമിക്കണം, നിങ്ങളുടെ ബ്രൌസര്‍ റയട്ട് പ്രവര്‍ത്തിപ്പിക്കാന്‍ പര്യാപ്തമല്ല.", "Uploaded on %(date)s by %(user)s": "%(date)s ല്‍ %(user)s അപ്ലോഡ് ചെയ്തത്", "Messages in group chats": "ഗ്രൂപ്പ് ചാറ്റുകളിലെ സന്ദേശങ്ങള്‍ക്ക്", "Yesterday": "ഇന്നലെ", @@ -125,7 +125,7 @@ "Set Password": "രഹസ്യവാക്ക് സജ്ജീകരിക്കുക", "remove %(name)s from the directory.": "%(name)s ഡയറക്റ്ററിയില്‍ നിന്ന് നീക്കം ചെയ്യുക.", "Off": "ഓഫ്", - "Riot does not know how to join a room on this network": "ഈ നെറ്റ്‍വര്‍ക്കിലെ ഒരു റൂമില്‍ എങ്ങനെ അംഗമാകാമെന്ന് റയട്ടിന് അറിയില്ല", + "%(brand)s does not know how to join a room on this network": "ഈ നെറ്റ്‍വര്‍ക്കിലെ ഒരു റൂമില്‍ എങ്ങനെ അംഗമാകാമെന്ന് റയട്ടിന് അറിയില്ല", "Mentions only": "മെന്‍ഷനുകള്‍ മാത്രം", "Failed to remove tag %(tagName)s from room": "റൂമില്‍ നിന്നും %(tagName)s ടാഗ് നീക്കം ചെയ്യുവാന്‍ സാധിച്ചില്ല", "You can now return to your account after signing out, and sign in on other devices.": "നിങ്ങള്‍ക്ക് ഇപ്പോള്‍ സൈന്‍ ഔട്ട് ചെയ്ത ശേഷവും നിങ്ങളുടെ അക്കൌണ്ടിലേക്ക് തിരികെ വരാം, അതു പോലെ മറ്റ് ഡിവൈസുകളില്‍ സൈന്‍ ഇന്‍ ചെയ്യുകയുമാവാം.", diff --git a/src/i18n/strings/nb_NO.json b/src/i18n/strings/nb_NO.json index e815a2e6c3..be186b58c5 100644 --- a/src/i18n/strings/nb_NO.json +++ b/src/i18n/strings/nb_NO.json @@ -4,7 +4,7 @@ "This phone number is already in use": "Dette mobilnummeret er allerede i bruk", "Failed to verify email address: make sure you clicked the link in the email": "Klarte ikke verifisere e-postadressen: dobbelsjekk at du trykket på lenken i e-posten", "The platform you're on": "Platformen du befinner deg på", - "The version of Riot.im": "Versjonen av Riot.im", + "The version of %(brand)s": "Versjonen av %(brand)s", "Your language of choice": "Ditt valgte språk", "Your homeserver's URL": "Din hjemmetjeners URL", "Fetching third party location failed": "Kunne ikke hente tredjeparts lokalisering", @@ -48,7 +48,7 @@ "Enter keywords separated by a comma:": "Angi nøkkelord adskilt med komma:", "I understand the risks and wish to continue": "Jeg forstår risikoen og ønsker å fortsette", "Remove %(name)s from the directory?": "Fjern %(name)s fra katalogen?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot benytter mange avanserte nettleserfunksjoner, og noen av disse er ikke tilgjengelige eller er eksperimentelle på din nåværende nettleser.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s benytter mange avanserte nettleserfunksjoner, og noen av disse er ikke tilgjengelige eller er eksperimentelle på din nåværende nettleser.", "Unnamed room": "Rom uten navn", "All messages (noisy)": "Alle meldinger (høy)", "Direct Chat": "Direkte Chat", @@ -78,12 +78,12 @@ "Thursday": "Torsdag", "All messages": "Alle meldinger", "Unable to join network": "Kunne ikke bli med i nettverket", - "Sorry, your browser is not able to run Riot.": "Beklager, din nettleser er ikke i stand til å kjøre Riot.", + "Sorry, your browser is not able to run %(brand)s.": "Beklager, din nettleser er ikke i stand til å kjøre %(brand)s.", "Uploaded on %(date)s by %(user)s": "Lastet opp den %(date)s av %(user)s", "Messages in group chats": "Meldinger i gruppesamtaler", "Yesterday": "I går", "Low Priority": "Lav Prioritet", - "Riot does not know how to join a room on this network": "Riot vet ikke hvordan man kan komme inn på et rom på dette nettverket", + "%(brand)s does not know how to join a room on this network": "%(brand)s vet ikke hvordan man kan komme inn på et rom på dette nettverket", "An error occurred whilst saving your email notification preferences.": "En feil oppsto i forbindelse med lagring av epost varsel innstillinger.", "remove %(name)s from the directory.": "fjern %(name)s fra katalogen.", "Off": "Av", @@ -109,7 +109,7 @@ "Your User Agent": "Din brukeragent", "Your device resolution": "Din enhets skjermoppløsing", "Analytics": "Statistikk", - "The information being sent to us to help make Riot.im better includes:": "Informasjonen som blir sendt til oss for å hjelpe oss med å lage Riot.im bedre inkluderer:", + "The information being sent to us to help make %(brand)s better includes:": "Informasjonen som blir sendt til oss for å hjelpe oss med å lage %(brand)s bedre inkluderer:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Hvor denne siden inkluderer identifiserende informasjon, sånn som navnet på rommet, brukeren, og gruppe ID, men denne informasjonen blir fjernet før den blir sendt til tjeneren.", "Call Failed": "Oppringning mislyktes", "Review Devices": "Se over enheter", @@ -177,8 +177,8 @@ "Failed to add the following rooms to %(groupId)s:": "Klarte ikke å legge til de følgende rommene til %(groupId)s:", "Unnamed Room": "Navnløst rom", "Unable to load! Check your network connectivity and try again.": "Klarte ikke laste! Sjekk nettverstilkoblingen din og prøv igjen.", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot har ikke tillatelse til å sende deg varsler - vennligst sjekk nettleserinnstillingene", - "Riot was not given permission to send notifications - please try again": "Riot fikk ikke tillatelse til å sende deg varsler - vennligst prøv igjen", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s har ikke tillatelse til å sende deg varsler - vennligst sjekk nettleserinnstillingene", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s fikk ikke tillatelse til å sende deg varsler - vennligst prøv igjen", "Unable to enable Notifications": "Klarte ikke slå på Varslinger", "This email address was not found": "Denne e-post adressen ble ikke funnet", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "E-post adressen din ser ikke ut til å være koplet til en Matrix-ID på denne hjemmetjeneren.", @@ -212,7 +212,7 @@ "To use it, just wait for autocomplete results to load and tab through them.": "For å bruke dette, bare vent til autofullfør-resultatene laster, og tab deg gjennom dem.", "Upgrades a room to a new version": "Oppgraderer et rom til en ny versjon", "Changes your display nickname": "Endrer visningsnavnet ditt", - "Chat with Riot Bot": "Chat med Riot Bot", + "Chat with %(brand)s Bot": "Chat med %(brand)s Bot", "Changes your display nickname in the current room only": "Endrer visningsnavnet ditt kun i det nåværende rommet", "Changes your avatar in this current room only": "Endrer avataren din kun i det nåværende rommet", "Call failed due to misconfigured server": "Oppringingen feilet på grunn av feil-konfigurert tjener", @@ -268,8 +268,8 @@ "%(targetName)s accepted an invitation.": "%(targetName)s aksepterte en invitasjon.", "Add Email Address": "Legg til E-postadresse", "Add Phone Number": "Legg til telefonnummer", - "The version of Riot": "Riot-versjonen", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Hvorvidt du bruker Riot på en enhet som primært mottar inndata gjennom touchskjerm", + "The version of %(brand)s": "%(brand)s-versjonen", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Hvorvidt du bruker %(brand)s på en enhet som primært mottar inndata gjennom touchskjerm", "Your user agent": "Brukeragenten din", "Cancel": "Avbryt", "Trust": "Stol på", @@ -640,7 +640,7 @@ "Check for update": "Let etter oppdateringer", "Help & About": "Hjelp/Om", "Bug reporting": "Feilrapportering", - "riot-web version:": "'riot-web'-versjon:", + "%(brand)s version:": "'%(brand)s'-versjon:", "olm version:": "olm-versjon:", "click to reveal": "klikk for å avsløre", "Ignored/Blocked": "Ignorert/Blokkert", @@ -752,7 +752,7 @@ "Set Password": "Bestem passord", "Your user ID": "Din bruker-ID", "Your theme": "Ditt tema", - "Riot URL": "Riot-URL", + "%(brand)s URL": "%(brand)s-URL", "Room ID": "Rom-ID", "Widget ID": "Modul-ID", "Delete Widget": "Slett modul", @@ -783,7 +783,7 @@ "Create Room": "Opprett et rom", "Session ID": "Økt-ID", "Session key": "Øktnøkkel", - "Updating Riot": "Oppdaterer Riot", + "Updating %(brand)s": "Oppdaterer %(brand)s", "Message edits": "Meldingsredigeringer", "This wasn't me": "Det var ikke meg", "Send report": "Send inn rapport", @@ -885,7 +885,7 @@ "Identity Server (%(server)s)": "Identitetstjener (%(server)s)", "If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "Hvis du ikke ønsker å bruke til å oppdage og bli oppdaget av eksisterende kontakter som du kjenner, skriv inn en annen identitetstjener nedenfor.", "Enter a new identity server": "Skriv inn en ny identitetstjener", - "For help with using Riot, click here.": "For å få hjelp til å bruke Riot, klikk her.", + "For help with using %(brand)s, click here.": "For å få hjelp til å bruke %(brand)s, klikk her.", "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.": "Dersom du har sendt inn en feilrapport på GitHub, kan avlusingsloggbøker hjelpe oss med å finne frem til problemet. Avlusingsloggbøker inneholder programbruksdata inkl. ditt brukernavn, ID-ene eller aliasene til rommene eller gruppene du har besøkt, og brukernavnene til andre brukere. De inneholder ikke noen meldinger.", "Submit debug logs": "Send inn avlusingsloggbøker", "Clear cache and reload": "Tøm mellomlageret og last inn siden på nytt", @@ -895,7 +895,7 @@ "Identity Server is": "Identitetstjeneren er", "Access Token:": "Tilgangssjetong:", "Import E2E room keys": "Importer E2E-romnøkler", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot samler inn anonyme statistikker for å hjelpe oss med å forbedre programmet.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s samler inn anonyme statistikker for å hjelpe oss med å forbedre programmet.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privatlivet er viktig for oss, så vi samler ikke inn noe personlig eller identifiserbar data for våre analyser.", "Internal room ID:": "Intern rom-ID:", "Change room avatar": "Endre rommets avatar", @@ -1153,7 +1153,7 @@ "Secret storage public key:": "Offentlig nøkkel for hemmelig lagring:", "Homeserver feature support:": "Hjemmetjener-funksjonsstøtte:", "Secret Storage key format:": "Nøkkelformatet for hemmelig lagring:", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot kan ikke lagre krypterte meldinger sikkert når den kjøres i en nettleser. Bruk Riot Desktop for at krypterte meldinger skal dukke opp i søkeresultater.", + "%(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 kan ikke lagre krypterte meldinger sikkert når den kjøres i en nettleser. Bruk %(brand)s Desktop for at krypterte meldinger skal dukke opp i søkeresultater.", "Read Marker lifetime (ms)": "Lesemarkørens visningstid (ms)", "Read Marker off-screen lifetime (ms)": "Lesemarkørens visningstid utenfor skjermen (ms)", "Cross-signing": "Kryssignering", @@ -1199,7 +1199,7 @@ "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s-modulen ble endret på av %(senderName)s", "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s-modulen ble lagt til av %(senderName)s", "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s-modulen ble fjernet av %(senderName)s", - "Your Riot is misconfigured": "Ditt Riot-oppsett er feiloppsatt", + "Your %(brand)s is misconfigured": "Ditt %(brand)s-oppsett er feiloppsatt", "a few seconds from now": "om noen sekunder fra nå", "about a minute from now": "rundt et minutt fra nå", "%(num)s minutes from now": "%(num)s minutter fra nå", @@ -1207,7 +1207,7 @@ "%(num)s hours from now": "%(num)s timer fra nå", "about a day from now": "rundt en dag fra nå", "%(num)s days from now": "%(num)s dager fra nå", - "Not a valid Riot keyfile": "Ikke en gyldig Riot-nøkkelfil", + "Not a valid %(brand)s keyfile": "Ikke en gyldig %(brand)s-nøkkelfil", "Unrecognised address": "Adressen ble ikke gjenkjent", "Unknown server error": "Ukjent tjenerfeil", "Recent years are easy to guess": "Nylige år er lette å gjette", @@ -1274,7 +1274,7 @@ "Error decrypting audio": "Feil under dekryptering av lyd", "Decrypt %(text)s": "Dekrypter %(text)s", "You verified %(name)s": "Du verifiserte %(name)s", - "A new version of Riot is available.": "En ny versjon av Riot er tilgjengelig.", + "A new version of %(brand)s is available.": "En ny versjon av %(brand)s er tilgjengelig.", "were kicked %(count)s times|other": "ble sparket ut %(count)s ganger", "was kicked %(count)s times|other": "ble sparket ut %(count)s ganger", "Some characters not allowed": "Noen tegn er ikke tillatt", diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index e0565ec3dd..44745e7095 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -53,7 +53,7 @@ "No Microphones detected": "Geen microfoons gevonden", "No Webcams detected": "Geen webcams gevonden", "No media permissions": "Geen mediatoestemmingen", - "You may need to manually permit Riot to access your microphone/webcam": "U moet Riot wellicht handmatig toestaan uw microfoon/webcam te gebruiken", + "You may need to manually permit %(brand)s to access your microphone/webcam": "U moet %(brand)s wellicht handmatig toestaan uw microfoon/webcam te gebruiken", "Default Device": "Standaardapparaat", "Microphone": "Microfoon", "Camera": "Camera", @@ -247,9 +247,9 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s heeft een VoIP-vergadering aangevraagd.", "Results from DuckDuckGo": "Resultaten van DuckDuckGo", "Return to login screen": "Terug naar het aanmeldscherm", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot heeft geen toestemming u meldingen te sturen - controleer uw browserinstellingen", - "Riot was not given permission to send notifications - please try again": "Riot kreeg geen toestemming u meldingen te sturen - probeer het opnieuw", - "riot-web version:": "riot-web-versie:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s heeft geen toestemming u meldingen te sturen - controleer uw browserinstellingen", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s kreeg geen toestemming u meldingen te sturen - probeer het opnieuw", + "%(brand)s version:": "%(brand)s-versie:", "Room %(roomId)s not visible": "Gesprek %(roomId)s is niet zichtbaar", "Room Colour": "Gesprekskleur", "%(roomName)s does not exist.": "%(roomName)s bestaat niet.", @@ -366,7 +366,7 @@ "Start automatically after system login": "Automatisch starten na systeemaanmelding", "Analytics": "Statistische gegevens", "Options": "Opties", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot verzamelt anonieme analysegegevens die het mogelijk maken de toepassing te verbeteren.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s verzamelt anonieme analysegegevens die het mogelijk maken de toepassing te verbeteren.", "Passphrases must match": "Wachtwoorden moeten overeenkomen", "Passphrase must not be empty": "Wachtwoord mag niet leeg zijn", "Export room keys": "Gesprekssleutels wegschrijven", @@ -390,7 +390,7 @@ "Unblacklist": "Deblokkeren", "I verify that the keys match": "Ik verklaar dat de sleutels overeenkomen", "Unable to restore session": "Sessieherstel lukt niet", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Als u reeds een recentere versie van Riot heeft gebruikt is uw sessie mogelijk onverenigbaar met deze versie. Sluit dit venster en ga terug naar die recentere versie.", + "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.": "Als u reeds een recentere versie van %(brand)s heeft gebruikt is uw sessie mogelijk onverenigbaar met deze versie. Sluit dit venster en ga terug naar die recentere versie.", "Unknown Address": "Onbekend adres", "Unverify": "Ontverifiëren", "Verify...": "Verifiëren…", @@ -423,7 +423,7 @@ "This will be your account name on the homeserver, or you can pick a different server.": "Dit zal uw accountnaam worden op de -thuisserver, of u kunt een andere server kiezen.", "If you already have a Matrix account you can log in instead.": "Als u al een Matrix-account heeft, kunt u zich meteen aanmelden.", "Your browser does not support the required cryptography extensions": "Uw browser ondersteunt de benodigde cryptografie-extensies niet", - "Not a valid Riot keyfile": "Geen geldig Riot-sleutelbestand", + "Not a valid %(brand)s keyfile": "Geen geldig %(brand)s-sleutelbestand", "Authentication check failed: incorrect password?": "Aanmeldingscontrole mislukt: onjuist wachtwoord?", "Do you want to set an email address?": "Wilt u een e-mailadres instellen?", "This will allow you to reset your password and receive notifications.": "Zo kunt u een nieuw wachtwoord instellen en meldingen ontvangen.", @@ -664,7 +664,7 @@ "Community %(groupId)s not found": "Gemeenschap %(groupId)s is niet gevonden", "Failed to load %(groupId)s": "Laden van %(groupId)s is mislukt", "Old cryptography data detected": "Oude cryptografiegegevens gedetecteerd", - "Data from an older version of Riot 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.": "Er zijn gegevens van een oudere versie van Riot gevonden, die problemen veroorzaakt hebben met de eind-tot-eind-versleuteling in de oude versie. Onlangs vanuit de oude versie verzonden eind-tot-eind-versleutelde berichten zijn mogelijk onontsleutelbaar in deze versie. Ook kunnen berichten die met deze versie uitgewisseld zijn falen. Mocht u problemen ervaren, meld u dan opnieuw aan. Schrijf uw sleutels weg en lees ze weer in om uw berichtgeschiedenis te behouden.", + "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.": "Er zijn gegevens van een oudere versie van %(brand)s gevonden, die problemen veroorzaakt hebben met de eind-tot-eind-versleuteling in de oude versie. Onlangs vanuit de oude versie verzonden eind-tot-eind-versleutelde berichten zijn mogelijk onontsleutelbaar in deze versie. Ook kunnen berichten die met deze versie uitgewisseld zijn falen. Mocht u problemen ervaren, meld u dan opnieuw aan. Schrijf uw sleutels weg en lees ze weer in om uw berichtgeschiedenis te behouden.", "Your Communities": "Uw gemeenschappen", "Error whilst fetching joined communities": "Er is een fout opgetreden bij het ophalen van de gemeenschappen waarvan u lid bent", "Create a new community": "Maak een nieuwe gemeenschap aan", @@ -685,10 +685,10 @@ "Stops ignoring a user, showing their messages going forward": "Stopt het negeren van een gebruiker, hierdoor worden de berichten van de gebruiker weer zichtbaar", "Notify the whole room": "Laat dit aan het hele groepsgesprek weten", "Room Notification": "Groepsgespreksmelding", - "The information being sent to us to help make Riot.im better includes:": "De naar ons verstuurde informatie om Riot.im te verbeteren behelst:", + "The information being sent to us to help make %(brand)s better includes:": "De naar ons verstuurde informatie om %(brand)s te verbeteren behelst:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Waar deze pagina identificeerbare informatie bevat, zoals een gespreks-, gebruikers- of groeps-ID, zullen deze gegevens verwijderd worden voordat ze naar de server gestuurd worden.", "The platform you're on": "Het platform dat u gebruikt", - "The version of Riot.im": "De versie van Riot.im", + "The version of %(brand)s": "De versie van %(brand)s", "Your language of choice": "De door u gekozen taal", "Which officially provided instance you are using, if any": "Welke officieel aangeboden instantie u eventueel gebruikt", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Of u de tekstverwerker al dan niet in de modus voor opgemaakte tekst gebruikt", @@ -699,7 +699,7 @@ "were unbanned %(count)s times|one": "zijn ontbannen", "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s heeft %(displayName)s als weergavenaam aangenomen.", "Key request sent.": "Sleutelverzoek verstuurd.", - "Did you know: you can use communities to filter your Riot.im experience!": "Wist u dat: u gemeenschappen kunt gebruiken om uw Riot.im-beleving te filteren!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Wist u dat: u gemeenschappen kunt gebruiken om uw %(brand)s-beleving te filteren!", "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.": "Versleep een gemeenschapsavatar naar het filterpaneel helemaal links op het scherm om een filter in te stellen. Daarna kunt u op de avatar in het filterpaneel klikken wanneer u zich wilt beperken tot de gesprekken en mensen uit die gemeenschap.", "Clear filter": "Filter wissen", "Failed to set direct chat tag": "Instellen van tweegesprekslabel is mislukt", @@ -722,7 +722,7 @@ "Submit debug logs": "Foutopsporingslogboeken indienen", "Opens the Developer Tools dialog": "Opent het dialoogvenster met ontwikkelaarsgereedschap", "Fetching third party location failed": "Het ophalen van de locatie van de derde partij is mislukt", - "A new version of Riot is available.": "Er is een nieuwe versie van Riot beschikbaar.", + "A new version of %(brand)s is available.": "Er is een nieuwe versie van %(brand)s beschikbaar.", "I understand the risks and wish to continue": "Ik begrijp de risico’s en wil graag verdergaan", "Send Account Data": "Accountgegevens versturen", "All notifications are currently disabled for all targets.": "Alle meldingen voor alle bestemmingen zijn momenteel uitgeschakeld.", @@ -777,7 +777,7 @@ "Search…": "Zoeken…", "You have successfully set a password and an email address!": "U heeft een wachtwoord en e-mailadres ingesteld!", "Remove %(name)s from the directory?": "%(name)s uit de catalogus verwijderen?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot gebruikt veel geavanceerde browserfuncties, waarvan enkele niet (of slechts experimenteel) in uw browser beschikbaar zijn.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s gebruikt veel geavanceerde browserfuncties, waarvan enkele niet (of slechts experimenteel) in uw browser beschikbaar zijn.", "Developer Tools": "Ontwikkelgereedschap", "Explore Account Data": "Accountgegevens verkennen", "Remove from Directory": "Verwijderen uit catalogus", @@ -817,8 +817,8 @@ "Show message in desktop notification": "Bericht tonen in bureaubladmelding", "Unhide Preview": "Voorvertoning weergeven", "Unable to join network": "Kon niet toetreden tot dit netwerk", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "U heeft ze mogelijk ingesteld in een andere cliënt dan Riot. U kunt ze niet aanpassen in Riot, maar ze zijn wel actief", - "Sorry, your browser is not able to run Riot.": "Sorry, uw browser werkt niet met Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "U heeft ze mogelijk ingesteld in een andere cliënt dan %(brand)s. U kunt ze niet aanpassen in %(brand)s, maar ze zijn wel actief", + "Sorry, your browser is not able to run %(brand)s.": "Sorry, uw browser werkt niet met %(brand)s.", "Uploaded on %(date)s by %(user)s": "Geüpload door %(user)s op %(date)s", "Messages in group chats": "Berichten in groepsgesprekken", "Yesterday": "Gisteren", @@ -827,7 +827,7 @@ "Unable to fetch notification target list": "Kan de bestemmingslijst voor meldingen niet ophalen", "Set Password": "Wachtwoord instellen", "Off": "Uit", - "Riot does not know how to join a room on this network": "Riot weet niet hoe het moet deelnemen aan een gesprek op dit netwerk", + "%(brand)s does not know how to join a room on this network": "%(brand)s weet niet hoe het moet deelnemen aan een gesprek op dit netwerk", "Mentions only": "Alleen vermeldingen", "Wednesday": "Woensdag", "You can now return to your account after signing out, and sign in on other devices.": "Na afmelding kunt u terugkeren tot uw account, en u op andere apparaten aanmelden.", @@ -858,8 +858,8 @@ "Send analytics data": "Statistische gegevens (analytics) versturen", "Enable widget screenshots on supported widgets": "Widget-schermafbeeldingen inschakelen op ondersteunde widgets", "Muted Users": "Gedempte gebruikers", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Help Riot.im te verbeteren door anonieme gebruiksgegevens te versturen. Dit zal een cookie gebruiken (bekijk hiervoor ons cookiebeleid).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Help Riot.im te verbeteren door anonieme gebruiksgegevens te versturen. Dit zal een cookie gebruiken.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Help %(brand)s te verbeteren door anonieme gebruiksgegevens te versturen. Dit zal een cookie gebruiken (bekijk hiervoor ons cookiebeleid).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Help %(brand)s te verbeteren door anonieme gebruiksgegevens te versturen. Dit zal een cookie gebruiken.", "Yes, I want to help!": "Ja, ik wil helpen!", "Popout widget": "Widget in nieuw venster openen", "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Kan de gebeurtenis waarop gereageerd was niet laden. Wellicht bestaat die niet, of heeft u geen toestemming die te bekijken.", @@ -1091,7 +1091,7 @@ "All keys backed up": "Alle sleutels zijn geback-upt", "Backup version: ": "Back-upversie: ", "Algorithm: ": "Algoritme: ", - "Chat with Riot Bot": "Met Riot-robot chatten", + "Chat with %(brand)s Bot": "Met %(brand)s-robot chatten", "Forces the current outbound group session in an encrypted room to be discarded": "Dwingt tot verwerping van de huidige uitwaartse groepssessie in een versleuteld gesprek", "Start using Key Backup": "Begin sleutelback-up te gebruiken", "Add an email address to configure email notifications": "Voeg een e-mailadres toe om e-mailmeldingen in te stellen", @@ -1111,8 +1111,8 @@ "General": "Algemeen", "Legal": "Wettelijk", "Credits": "Met dank aan", - "For help with using Riot, click here.": "Klik hier voor hulp bij het gebruiken van Riot.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Klik hier voor hulp bij het gebruiken van Riot, of begin een gesprek met onze robot met de knop hieronder.", + "For help with using %(brand)s, click here.": "Klik hier voor hulp bij het gebruiken van %(brand)s.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Klik hier voor hulp bij het gebruiken van %(brand)s, of begin een gesprek met onze robot met de knop hieronder.", "Help & About": "Hulp & Info", "Bug reporting": "Foutmeldingen", "FAQ": "VGV", @@ -1196,8 +1196,8 @@ "Invite anyway": "Alsnog uitnodigen", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Vooraleer u logboeken indient, dient u uw probleem te melden op GitHub.", "Unable to load commit detail: %(msg)s": "Kan commitdetail niet laden: %(msg)s", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Schrijf om uw gespreksgeschiedenis niet te verliezen vóór het afmelden uw gesprekssleutels weg. Dat moet vanuit de nieuwere versie van Riot", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "U heeft eerder een nieuwere versie van Riot op %(host)s gebruikt. Om deze versie opnieuw met eind-tot-eind-versleuteling te gebruiken, zult u zich moeten afmelden en opnieuw aanmelden. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Schrijf om uw gespreksgeschiedenis niet te verliezen vóór het afmelden uw gesprekssleutels weg. Dat moet vanuit de nieuwere versie van %(brand)s", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "U heeft eerder een nieuwere versie van %(brand)s op %(host)s gebruikt. Om deze versie opnieuw met eind-tot-eind-versleuteling te gebruiken, zult u zich moeten afmelden en opnieuw aanmelden. ", "Incompatible Database": "Incompatibele database", "Continue With Encryption Disabled": "Verdergaan met versleuteling uitgeschakeld", "Use Legacy Verification (for older clients)": "Verouderde verificatie gebruiken (voor oudere cliënten)", @@ -1210,12 +1210,12 @@ "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verifieer deze gebruiker om hem/haar als vertrouwd te markeren. Gebruikers vertrouwen geeft u extra gemoedsrust bij het gebruik van eind-tot-eind-versleutelde berichten.", "Waiting for partner to confirm...": "Wachten op bevestiging van partner…", "Incoming Verification Request": "Inkomend verificatieverzoek", - "You've previously used Riot 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, Riot needs to resync your account.": "U heeft voorheen Riot op %(host)s gebruikt met lui laden van leden ingeschakeld. In deze versie is lui laden uitgeschakeld. De lokale cache is niet compatibel tussen deze twee instellingen, zodat Riot uw account moet hersynchroniseren.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Indien de andere versie van Riot nog open staat in een ander tabblad kunt u dat beter sluiten, want het geeft problemen als Riot op dezelfde host gelijktijdig met lui laden ingeschakeld en uitgeschakeld draait.", + "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.": "U heeft voorheen %(brand)s op %(host)s gebruikt met lui laden van leden ingeschakeld. In deze versie is lui laden uitgeschakeld. De lokale cache is niet compatibel tussen deze twee instellingen, zodat %(brand)s uw account moet hersynchroniseren.", + "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.": "Indien de andere versie van %(brand)s nog open staat in een ander tabblad kunt u dat beter sluiten, want het geeft problemen als %(brand)s op dezelfde host gelijktijdig met lui laden ingeschakeld en uitgeschakeld draait.", "Incompatible local cache": "Incompatibele lokale cache", "Clear cache and resync": "Cache wissen en hersynchroniseren", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot verbruikt nu 3-5x minder geheugen, door informatie over andere gebruikers enkel te laden wanneer nodig. Even geduld, we hersynchroniseren met de server!", - "Updating Riot": "Riot wordt bijgewerkt", + "%(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!": "%(brand)s verbruikt nu 3-5x minder geheugen, door informatie over andere gebruikers enkel te laden wanneer nodig. Even geduld, we hersynchroniseren met de server!", + "Updating %(brand)s": "%(brand)s wordt bijgewerkt", "I don't want my encrypted messages": "Ik wil mijn versleutelde berichten niet", "Manually export keys": "Sleutels handmatig wegschrijven", "You'll lose access to your encrypted messages": "U zult de toegang tot uw versleutelde berichten verliezen", @@ -1369,8 +1369,8 @@ "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.": "Een widget op %(widgetUrl)s wil uw identiteit nagaan. Staat u dit toe, dan zal de widget wel uw gebruikers-ID kunnen nagaan, maar niet als u kunnen handelen.", "Remember my selection for this widget": "Onthoud mijn keuze voor deze widget", "Deny": "Weigeren", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot kon de protocollijst niet ophalen van de thuisserver. Mogelijk is de thuisserver te oud om derdepartijnetwerken te ondersteunen.", - "Riot failed to get the public room list.": "Riot kon de lijst met openbare gesprekken niet verkrijgen.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s kon de protocollijst niet ophalen van de thuisserver. Mogelijk is de thuisserver te oud om derdepartijnetwerken te ondersteunen.", + "%(brand)s failed to get the public room list.": "%(brand)s kon de lijst met openbare gesprekken niet verkrijgen.", "The homeserver may be unavailable or overloaded.": "De thuisserver is mogelijk onbereikbaar of overbelast.", "You have %(count)s unread notifications in a prior version of this room.|other": "U heeft %(count)s ongelezen meldingen in een vorige versie van dit gesprek.", "You have %(count)s unread notifications in a prior version of this room.|one": "U heeft %(count)s ongelezen meldingen in een vorige versie van dit gesprek.", @@ -1476,8 +1476,8 @@ "Browse": "Bladeren", "Cannot reach homeserver": "Kan thuisserver niet bereiken", "Ensure you have a stable internet connection, or get in touch with the server admin": "Zorg dat u een stabiele internetverbinding heeft, of neem contact op met de systeembeheerder", - "Your Riot is misconfigured": "Uw Riot is onjuist geconfigureerd", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Vraag uw Riot-beheerder uw configuratie na te kijken op onjuiste of dubbele items.", + "Your %(brand)s is misconfigured": "Uw %(brand)s is onjuist geconfigureerd", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Vraag uw %(brand)s-beheerder uw configuratie na te kijken op onjuiste of dubbele items.", "Unexpected error resolving identity server configuration": "Onverwachte fout bij het oplossen van de identiteitsserverconfiguratie", "Use lowercase letters, numbers, dashes and underscores only": "Gebruik enkel letters, cijfers, streepjes en underscores", "Cannot reach identity server": "Kan identiteitsserver niet bereiken", @@ -1612,10 +1612,10 @@ "Code block": "Codeblok", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Er is een fout opgetreden (%(errcode)s) bij het valideren van uw uitnodiging. U kunt deze informatie doorgeven aan een gespreksbeheerder.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Deze uitnodiging tot %(roomName)s was verstuurd naar %(email)s, dat niet aan uw account gekoppeld is", - "Link this email with your account in Settings to receive invites directly in Riot.": "Koppel in de instellingen dit e-mailadres aan uw account om uitnodigingen direct in Riot te ontvangen.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Koppel in de instellingen dit e-mailadres aan uw account om uitnodigingen direct in %(brand)s te ontvangen.", "This invite to %(roomName)s was sent to %(email)s": "Deze uitnodiging tot %(roomName)s was verstuurd naar %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Gebruik in de instellingen een identiteitsserver om uitnodigingen direct in Riot te ontvangen.", - "Share this email in Settings to receive invites directly in Riot.": "Deel in de instellingen dit e-mailadres om uitnodigingen direct in Riot te ontvangen.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Gebruik in de instellingen een identiteitsserver om uitnodigingen direct in %(brand)s te ontvangen.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Deel in de instellingen dit e-mailadres om uitnodigingen direct in %(brand)s te ontvangen.", "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Gebruik een identiteitsserver om uit te nodigen op e-mailadres. Gebruik de standaardserver (%(defaultIdentityServerName)s) of beheer de server in de Instellingen.", "Use an identity server to invite by email. Manage in Settings.": "Gebruik een identiteitsserver om anderen uit te nodigen via e-mail. Beheer de server in de Instellingen.", "Please fill why you're reporting.": "Gelieve aan te geven waarom u deze melding indient.", @@ -1768,18 +1768,18 @@ "Show less": "Minder tonen", "Show more": "Meer tonen", "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.": "Momenteel stelt een wachtwoordswijziging alle berichtsleutels in alle sessies opnieuw in, en maakt zo oude versleutelde berichten onleesbaar - tenzij u uw sleutels eerst wegschrijft, en na afloop weer inleest. Dit zal verbeterd worden.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Geef hier te negeren gebruikers en servers in. Asterisken staan voor willekeurige tekenreeksen; zo leidt @bot:* tot het negeren van alle gebruikers die ‘bot’ heten op alle servers.", + "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.": "Geef hier te negeren gebruikers en servers in. Asterisken staan voor willekeurige tekenreeksen; zo leidt @bot:* tot het negeren van alle gebruikers die ‘bot’ heten op alle servers.", "in memory": "in het geheugen", "not found": "niet gevonden", "Your homeserver does not support session management.": "Uw thuisserver ondersteunt geen sessiebeheer.", "Unable to load session list": "Kan sessielijst niet laden", "Delete %(count)s sessions|other": "%(count)s sessies verwijderen", "Delete %(count)s sessions|one": "%(count)s sessie verwijderen", - "The version of Riot": "De versie van Riot", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Of u Riot op een apparaat gebruikt waarop een aanraakscherm de voornaamste invoermethode is", - "Whether you're using Riot as an installed Progressive Web App": "Of u Riot gebruikt als een geïnstalleerde Progressive-Web-App", + "The version of %(brand)s": "De versie van %(brand)s", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Of u %(brand)s op een apparaat gebruikt waarop een aanraakscherm de voornaamste invoermethode is", + "Whether you're using %(brand)s as an installed Progressive Web App": "Of u %(brand)s gebruikt als een geïnstalleerde Progressive-Web-App", "Your user agent": "Uw gebruikersagent", - "The information being sent to us to help make Riot better includes:": "De informatie die naar ons wordt verstuurd om Riot te verbeteren bevat:", + "The information being sent to us to help make %(brand)s better includes:": "De informatie die naar ons wordt verstuurd om %(brand)s te verbeteren bevat:", "If you cancel now, you won't complete verifying the other user.": "Als u nu annuleert zult u de andere gebruiker niet verifiëren.", "If you cancel now, you won't complete verifying your other session.": "Als u nu annuleert zult u uw andere sessie niet verifiëren.", "If you cancel now, you won't complete your secret storage operation.": "Als u nu annuleert zal de sleutelopslag worden afgebroken.", @@ -1905,8 +1905,8 @@ "Show rooms with unread notifications first": "Gesprekken met ongelezen meldingen eerst tonen", "Show shortcuts to recently viewed rooms above the room list": "Snelkoppelingen naar de gesprekken die u recent heeft bekeken bovenaan de gesprekslijst weergeven", "Cancelling…": "Bezig met annuleren…", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "In Riot ontbreken enige modulen vereist voor het veilig lokaal bewaren van versleutelde berichten. Wilt u deze functie uittesten, compileer dan een aangepaste versie van Riot Desktop die de zoekmodulen bevat.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Als Riot in een webbrowser draait kan het versleutelde berichten niet veilig lokaal bewaren. Gebruik Riot Desktop om versleutelde berichten doorzoekbaar te maken.", + "%(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.": "In %(brand)s ontbreken enige modulen vereist voor het veilig lokaal bewaren van versleutelde berichten. Wilt u deze functie uittesten, compileer dan een aangepaste versie van %(brand)s Desktop die de zoekmodulen bevat.", + "%(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.": "Als %(brand)s in een webbrowser draait kan het versleutelde berichten niet veilig lokaal bewaren. Gebruik %(brand)s Desktop om versleutelde berichten doorzoekbaar te maken.", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Deze sessie maakt geen back-ups van uw sleutels, maar u beschikt over een reeds bestaande back-up waaruit u kunt herstellen en waaraan u nieuwe sleutels vanaf nu kunt toevoegen.", "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Er is een back-upsleutel opgeslagen in de geheime opslag, maar deze functie is niet ingeschakeld voor deze sessie. Schakel kruiselings ondertekenen in in de experimentele instellingen om de sleutelback-upstatus te wijzigen.", "Customise your experience with experimental labs features. Learn more.": "Personaliseer uw ervaring met experimentele functies. Klik hier voor meer informatie.", @@ -1968,7 +1968,7 @@ "This client does not support end-to-end encryption.": "Deze cliënt biedt geen ondersteuning voor eind-tot-eind-versleuteling.", "Messages in this room are not end-to-end encrypted.": "De berichten in dit gesprek worden niet eind-tot-eind-versleuteld.", "Security": "Beveiliging", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "De sessie die u probeert te verifiëren biedt geen ondersteuning voor de door Riot ondersteunde verificatiemethodes, nl. het scannen van QR-codes of het vergelijken van emoji. Probeer met een andere cliënt te verifiëren.", + "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.": "De sessie die u probeert te verifiëren biedt geen ondersteuning voor de door %(brand)s ondersteunde verificatiemethodes, nl. het scannen van QR-codes of het vergelijken van emoji. Probeer met een andere cliënt te verifiëren.", "Verify by scanning": "Verifiëren met scan", "Ask %(displayName)s to scan your code:": "Vraag %(displayName)s om uw code te scannen:", "Verify by emoji": "Verifiëren met emoji", @@ -2017,7 +2017,7 @@ "Your avatar URL": "De URL van uw profielfoto", "Your user ID": "Uw gebruikers-ID", "Your theme": "Uw thema", - "Riot URL": "Riot-URL", + "%(brand)s URL": "%(brand)s-URL", "Room ID": "Gespreks-ID", "Widget ID": "Widget-ID", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Deze widget gebruiken deelt mogelijk gegevens met %(widgetDomain)s en uw integratiebeheerder.", @@ -2045,7 +2045,7 @@ "Integrations are disabled": "Integraties zijn uitgeschakeld", "Enable 'Manage Integrations' in Settings to do this.": "Schakel ‘Beheer integraties’ in in de instellingen om dit te doen.", "Integrations not allowed": "Integraties niet toegestaan", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Uw Riot laat u geen integratiebeheerder gebruiken om dit te doen. Neem contact op met een beheerder.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Uw %(brand)s laat u geen integratiebeheerder gebruiken om dit te doen. Neem contact op met een beheerder.", "Failed to invite the following users to chat: %(csvUsers)s": "Het uitnodigen van volgende gebruikers voor gesprek is mislukt: %(csvUsers)s", "We couldn't create your DM. Please check the users you want to invite and try again.": "Uw tweegesprek kon niet aangemaakt worden. Controleer de gebruikers die u wilt uitnodigen en probeer het opnieuw.", "Something went wrong trying to invite the users.": "Er is een fout opgetreden bij het uitnodigen van de gebruikers.", @@ -2074,7 +2074,7 @@ "Upgrade private room": "Privégesprek bijwerken", "Upgrade public room": "Openbaar gesprek bijwerken", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Het bijwerken van een gesprek is een gevorderde actie en wordt meestal aanbevolen wanneer een gesprek onstabiel is door fouten, ontbrekende functies of problemen met de beveiliging.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Dit heeft meestal enkel een invloed op de manier waarop het gesprek door de server verwerkt wordt. Als u problemen met uw Riot ondervindt, dien dan een foutmelding in.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Dit heeft meestal enkel een invloed op de manier waarop het gesprek door de server verwerkt wordt. Als u problemen met uw %(brand)s ondervindt, dien dan een foutmelding in.", "You'll upgrade this room from to .": "U werkt dit gesprek bij van naar .", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Daardoor kunt u na afmelding terugkeren tot uw account, en u bij andere sessies aanmelden.", "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "U blokkeert momenteel niet-geverifieerde sessies; om berichten te sturen naar deze sessies moet u ze verifiëren.", @@ -2156,7 +2156,7 @@ "Disable": "Uitschakelen", "Not currently downloading messages for any room.": "Er worden momenteel geen berichten gedownload.", "Downloading mesages for %(currentRoom)s.": "Er worden berichten gedownload voor %(currentRoom)s.", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot bewaart versleutelde berichten veilig in het lokale cachegeheugen om ze in uw zoekresultaten te laten verschijnen:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s bewaart versleutelde berichten veilig in het lokale cachegeheugen om ze in uw zoekresultaten te laten verschijnen:", "Space used:": "Gebruikte ruimte:", "Indexed messages:": "Geïndexeerde berichten:", "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s van %(totalRooms)s", @@ -2213,8 +2213,8 @@ "Room name or address": "Gespreksnaam of -adres", "Joins room with given address": "Neem aan het gesprek met dat adres deel", "Unrecognised room address:": "Gespreksadres niet herkend:", - "Help us improve Riot": "Help ons Riot nog beter te maken", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Stuur anonieme gebruiksinformatie waarmee we Riot kunnen verbeteren. Dit plaatst een cookie.", + "Help us improve %(brand)s": "Help ons %(brand)s nog beter te maken", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Stuur anonieme gebruiksinformatie waarmee we %(brand)s kunnen verbeteren. Dit plaatst een cookie.", "I want to help": "Ik wil helpen", "Your homeserver has exceeded its user limit.": "Uw thuisserver heeft het maximaal aantal gebruikers overschreden.", "Your homeserver has exceeded one of its resource limits.": "Uw thuisserver heeft een van zijn limieten overschreden.", diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json index 8a5407967a..e529805efc 100644 --- a/src/i18n/strings/nn.json +++ b/src/i18n/strings/nn.json @@ -1,9 +1,9 @@ { "This phone number is already in use": "Dette telefonnummeret er allereie i bruk", - "The version of Riot.im": "Utgåva av Riot.im", + "The version of %(brand)s": "Utgåva av %(brand)s", "Your homeserver's URL": "Heimtenaren din si nettadresse", "Your device resolution": "Eininga di sin oppløysing", - "The information being sent to us to help make Riot.im better includes:": "Informasjonen som vert send til oss for å gjera Riot.im betre er mellom anna:", + "The information being sent to us to help make %(brand)s better includes:": "Informasjonen som vert send til oss for å gjera %(brand)s betre er mellom anna:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Der denne sida inneheld gjenkjenneleg informasjon, slik som ein rom-, brukar- eller gruppeID, vert denne informasjonen sletta før han sendast til tenar.", "Call Failed": "Oppringjing Mislukkast", "Review Devices": "Sjå Over Einingar", @@ -60,8 +60,8 @@ "Failed to invite users to community": "Fekk ikkje til å invitera brukarar til fellesskapet.", "Failed to invite users to %(groupId)s": "Fekk ikkje til å invitera brukarar til %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "Fekk ikkje til å invitera følgjande rom til %(groupId)s:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot har ikkje lov til å senda deg varsel - sjekk nettlesarinnstillingane dine", - "Riot was not given permission to send notifications - please try again": "Riot fekk ikkje tillating til å senda varsel - ver venleg og prøv igjen", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s har ikkje lov til å senda deg varsel - sjekk nettlesarinnstillingane dine", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s fekk ikkje tillating til å senda varsel - ver venleg og prøv igjen", "Unable to enable Notifications": "Klarte ikkje å skru på Varsel", "This email address was not found": "Denne epostadressa var ikkje funnen", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Epostadressa di ser ikkje ut til å vera tilknytta ein Matrix-ID på denne heimtenaren.", @@ -172,7 +172,7 @@ "Send": "Send", "Unnamed Room": "Rom utan namn", "Your browser does not support the required cryptography extensions": "Nettlesaren din støttar ikkje dei naudsynte kryptografiske utvidingane", - "Not a valid Riot keyfile": "Ikkje ei gyldig Riot-nykelfil", + "Not a valid %(brand)s keyfile": "Ikkje ei gyldig %(brand)s-nykelfil", "Authentication check failed: incorrect password?": "Authentiseringsforsøk mislukkast: feil passord?", "Failed to join room": "Fekk ikkje til å gå inn i rom", "Message Pinning": "Meldingsfesting", @@ -474,7 +474,7 @@ "What's New": "Kva er nytt", "Update": "Oppdatering", "What's new?": "Kva er nytt?", - "A new version of Riot is available.": "Ein ny versjon av Riot er tilgjengeleg.", + "A new version of %(brand)s is available.": "Ein ny versjon av %(brand)s er tilgjengeleg.", "To return to your account in future you need to set a password": "For å gå tilbake til brukaren din i framtida må du setja eit passord", "Set Password": "Set Passord", "Error encountered (%(errorDetail)s).": "Noko gjekk gale (%(errorDetail)s).", @@ -615,7 +615,7 @@ "Refresh": "Hent fram på nytt", "Unable to restore session": "Kunne ikkje henta øykta fram att", "We encountered an error trying to restore your previous session.": "Noko gjekk gale med framhentinga av den førre øykta di.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Viss du har tidligare brukt ein nyare versjon av Riot, kan økts-data vere inkompatibel med denne versjonen. Lukk dette vindauget og bytt til ein nyare versjon.", + "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.": "Viss du har tidligare brukt ein nyare versjon av %(brand)s, kan økts-data vere inkompatibel med denne versjonen. Lukk dette vindauget og bytt til ein nyare versjon.", "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Det kan henda at å tømma nettlesarlageret rettar opp i det, men det loggar deg ut og kan gjera den krypterte pratehistoria uleseleg.", "Invalid Email Address": "Ugangbar Epostadresse", "This doesn't appear to be a valid email address": "Det ser ikkje ut til at epostadressa er gangbar", @@ -674,8 +674,8 @@ "Low Priority": "Lågrett", "Direct Chat": "Direktesamtale", "View Community": "Sjå Fellesskap", - "Sorry, your browser is not able to run Riot.": "Beklagar, nettlesaren din klarer ikkje å køyra Riot.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot brukar mange avanserte nettlesarfunksjonar, og nokre av dei er ikkje tilgjengelege eller under utprøving i nettlesaren din.", + "Sorry, your browser is not able to run %(brand)s.": "Beklagar, nettlesaren din klarer ikkje å køyra %(brand)s.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s brukar mange avanserte nettlesarfunksjonar, og nokre av dei er ikkje tilgjengelege eller under utprøving i nettlesaren din.", "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!": "Med denne nettlesaren, er det mogleg at synet og kjensla av applikasjonen er fullstendig gale, og nokre eller alle funksjonar verkar kanskje ikkje. Viss du vil prøva likevel kan du gå fram, men då du må sjølv handtera alle vanskar du møter på!", "I understand the risks and wish to continue": "Eg forstår farane og vil gå fram", "Name": "Namn", @@ -733,7 +733,7 @@ "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "For å framleis bruka %(homeserverDomain)s sin heimtenar må du sjå over og seia deg einig i våre Vilkår og Føresetnader.", "Review terms and conditions": "Sjå over Vilkår og Føresetnader", "Old cryptography data detected": "Gamal kryptografidata vart oppdagen", - "Data from an older version of Riot 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.": "Data frå ein eldre versjon av Riot er oppdaga. Dette kan ha gjort at ende-til-ende kryptering feilar i den eldre versjonen. Krypterte meldingar som er utveksla med den gamle versjonen er kanskje ikkje dekrypterbare i denne versjonen. Dette kan forårsake at meldingar utveksla mot denne versjonen vil feile. Opplever du problem med dette, kan du logge inn og ut igjen. For å behalde meldingshistorikk, eksporter og importer nøklane dine på nytt.", + "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.": "Data frå ein eldre versjon av %(brand)s er oppdaga. Dette kan ha gjort at ende-til-ende kryptering feilar i den eldre versjonen. Krypterte meldingar som er utveksla med den gamle versjonen er kanskje ikkje dekrypterbare i denne versjonen. Dette kan forårsake at meldingar utveksla mot denne versjonen vil feile. Opplever du problem med dette, kan du logge inn og ut igjen. For å behalde meldingshistorikk, eksporter og importer nøklane dine på nytt.", "Logout": "Logg ut", "Your Communities": "Dine fellesskap", "Error whilst fetching joined communities": "Noko gjekk gale under innlasting av fellesskapa du med er i", @@ -751,7 +751,7 @@ "remove %(name)s from the directory.": "fjern %(name)s frå romkatalogen.", "delete the alias.": "slett aliaset.", "Unable to join network": "Klarte ikkje å bli med i nettverket", - "Riot does not know how to join a room on this network": "Riot veit ikkje korleis den kan bli med i rom på dette nettverket", + "%(brand)s does not know how to join a room on this network": "%(brand)s veit ikkje korleis den kan bli med i rom på dette nettverket", "Room not found": "Fann ikkje rommet", "Couldn't find a matching Matrix room": "Kunne ikkje finna eit samsvarande Matrix-rom", "Fetching third party location failed": "Noko gjekk gale under henting av tredjepartslokasjon", @@ -791,7 +791,7 @@ "Import E2E room keys": "Hent E2E-romnøklar inn", "Cryptography": "Kryptografi", "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.": "Viss du har rapportert inn feil via GitHub, kan feil-loggar hjelpa oss med å finna problemet. Feil-loggar inneheld data om applikasjonsbruk som; brukarnamn, ID-ar, alias på rom eller grupper du har besøkt og brukarnamn for andre brukarar. Loggane inneheld ikkje meldingar.", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot samlar anonym statistikk inn slik at ein kan forbetre applikasjonen.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s samlar anonym statistikk inn slik at ein kan forbetre applikasjonen.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Personvern er viktig for oss, så vi samlar ikkje personlege eller identifiserbare data for statistikken vår.", "Learn more about how we use analytics.": "Finn ut meir om korleis vi brukar statistikk.", "Labs": "Labben", @@ -799,7 +799,7 @@ "Reject all %(invitedRooms)s invites": "Kanseller alle invitasjonar frå %(invitedRooms)s", "Start automatically after system login": "Start automagisk etter systeminnlogging", "No media permissions": "Ingen mediatilgang", - "You may need to manually permit Riot to access your microphone/webcam": "Det kan henda at du må gje Riot tilgang til mikrofonen/nettkameraet for hand", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Det kan henda at du må gje %(brand)s tilgang til mikrofonen/nettkameraet for hand", "No Audio Outputs detected": "Ingen ljodavspelingseiningar funne", "No Microphones detected": "Ingen opptakseiningar funne", "No Webcams detected": "Ingen Nettkamera funne", @@ -812,7 +812,7 @@ "click to reveal": "klikk for å visa", "Homeserver is": "Heimtenaren er", "Identity Server is": "Identitetstenaren er", - "riot-web version:": "riot-web versjon:", + "%(brand)s version:": "%(brand)s versjon:", "olm version:": "olm versjon:", "Failed to send email": "Fekk ikkje til å senda eposten", "The email address linked to your account must be entered.": "Du må skriva epostadressa som er tilknytta brukaren din inn.", @@ -860,7 +860,7 @@ "Call Timeout": "Tidsavbrot i Samtala", "Enable automatic language detection for syntax highlighting": "Skru automatisk måloppdaging på for syntax-understreking", "Export E2E room keys": "Hent E2E-romnøklar ut", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Det kan henda at du stilte dei inn på ein annan klient enn Riot. Du kan ikkje stilla på dei i Riot men dei gjeld framleis", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Det kan henda at du stilte dei inn på ein annan klient enn %(brand)s. Du kan ikkje stilla på dei i %(brand)s men dei gjeld framleis", "Jump to read receipt": "Hopp til lesen-lappen", "Filter room members": "Filtrer rommedlemmar", "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.": "Når nokon legg ein URL med i meldinga si, kan ei URL-førehandsvising visast for å gje meir info om lenkja slik som tittelen, skildringa, og eit bilete frå nettsida.", @@ -869,8 +869,8 @@ "Filter community members": "Filtrer fellesskapssmedlemmar", "Custom Server Options": "Tilpassa tenar-innstillingar", "Filter community rooms": "Filtrer rom i fellesskapet", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Hjelp oss å forbetra Riot.im ved å senda anonym brukardata. Dette brukar informasjonskapslar (les gjerne vår Cookie-policy).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Hjelp oss å forbetra Riot.im ved å senda anonym brukardata. Dette brukar informasjonskapslar (cookies).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Hjelp oss å forbetra %(brand)s ved å senda anonym brukardata. Dette brukar informasjonskapslar (les gjerne vår Cookie-policy).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Hjelp oss å forbetra %(brand)s ved å senda anonym brukardata. Dette brukar informasjonskapslar (cookies).", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Om du brukar Riktekst-innstillinga på Riktekstfeltet", "This room is not accessible by remote Matrix servers": "Rommet er ikkje tilgjengeleg for andre Matrix-heimtenarar", "Add an Integration": "Legg tillegg til", @@ -886,7 +886,7 @@ "Filter results": "Filtrer resultat", "Custom": "Sjølvsett", "Failed to set Direct Message status of room": "Fekk ikkje til å setja Direktemelding-tilstanden til rommet", - "Did you know: you can use communities to filter your Riot.im experience!": "Visste du at: du kan bruka fellesskap for å filtrera Riot.im-opplevinga di!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Visste du at: du kan bruka fellesskap for å filtrera %(brand)s-opplevinga di!", "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.": "For å setja opp eit filter, dra ein fellesskapsavatar bort til filterpanelet til venstre på skjermen. Du kan klikka på ein avatar i filterpanelet når som helst for å sjå berre romma og folka tilknytta det fellesskapet.", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Lag eit fellesskap for å føra saman brukarar og rom! Lag ei tilpassa heimeside for å markere din del av Matrix-universet.", "Unable to look up room ID from server": "Klarte ikkje å henta rom-ID frå tenaren", @@ -915,7 +915,7 @@ "Whether or not you're logged in (we don't record your username)": "Uansett om du er innlogga eller ikkje (så lagrar vi ikkje brukarnamnet ditt)", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Fila %(fileName)s er større enn heimetenaren si grense for opplastningar", "Unable to load! Check your network connectivity and try again.": "Klarte ikkje lasta! Sjå på nettilkoplinga di og prøv igjen.", - "Your Riot is misconfigured": "Riot-klienten din er sett opp feil", + "Your %(brand)s is misconfigured": "%(brand)s-klienten din er sett opp feil", "Sign In": "Logg inn", "Explore rooms": "Utforsk romma", "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.": "Meldinga di vart ikkje send, for denne heimetenaren har nådd grensa for maksimalt aktive brukarar pr. månad. Kontakt systemadministratoren for å vidare nytte denne tenesta.", @@ -1046,12 +1046,12 @@ "Displays list of commands with usages and descriptions": "Viser ei liste over kommandoar med bruksområde og skildringar", "%(senderName)s made no change.": "%(senderName)s utførde ingen endring.", "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s oppgraderte dette rommet.", - "The version of Riot": "Gjeldande versjon av Riot", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Om du brukar Riot på ein innretning som er satt opp for touch-skjerm", + "The version of %(brand)s": "Gjeldande versjon av %(brand)s", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Om du brukar %(brand)s på ein innretning som er satt opp for touch-skjerm", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Om du nyttar funksjonen 'breadcrumbs' (avatarane over romkatalogen)", - "Whether you're using Riot as an installed Progressive Web App": "Om din Riot er installert som ein webapplikasjon (Progressive Web App)", + "Whether you're using %(brand)s as an installed Progressive Web App": "Om din %(brand)s er installert som ein webapplikasjon (Progressive Web App)", "Your user agent": "Din nettlesar (User-Agent)", - "The information being sent to us to help make Riot better includes:": "Informasjon sendt til oss for å forbetre Riot inkluderar:", + "The information being sent to us to help make %(brand)s better includes:": "Informasjon sendt til oss for å forbetre %(brand)s inkluderar:", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Det er ukjende økter i dette rommet: om går vidare utan å verifisere dei, kan andre avlytte samtalen.", "If you cancel now, you won't complete verifying the other user.": "Om du avbryter no, vil dette stoppe verifikasjonsprosessen for den andre brukaren.", "If you cancel now, you won't complete verifying your other session.": "Om du avbryter no, vil dette stoppe verifikasjonsprosessen for den andre økta.", @@ -1170,10 +1170,10 @@ "You can still join it because this is a public room.": "Du kan fortsatt bli med fordi dette er eit offentleg rom.", "Join the discussion": "Bli med i diskusjonen", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Invitasjonen til %(roomName)s vart sendt til %(email)s, som ikkje er tilknytta din konto", - "Link this email with your account in Settings to receive invites directly in Riot.": "Knytt denne e-posten opp til kontoen din under Innstillingar, for å direkte ta i mot invitasjonar i Riot.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Knytt denne e-posten opp til kontoen din under Innstillingar, for å direkte ta i mot invitasjonar i %(brand)s.", "This invite to %(roomName)s was sent to %(email)s": "Denne invitasjonen for %(roomName)s vart sendt til %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Bruk ein identitetstenar under Innstillingar, for å direkte ta i mot invitasjonar i Riot.", - "Share this email in Settings to receive invites directly in Riot.": "Del denne e-postadresa i Innstillingar, for å direkte ta i mot invitasjonar i Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Bruk ein identitetstenar under Innstillingar, for å direkte ta i mot invitasjonar i %(brand)s.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Del denne e-postadresa i Innstillingar, for å direkte ta i mot invitasjonar i %(brand)s.", "Do you want to chat with %(user)s?": "Ynskjer du å chatte med %(user)s?", " wants to chat": " vil chatte med deg", "Start chatting": "Start chatting", @@ -1275,7 +1275,7 @@ "Cancelled signature upload": "Kansellerte opplasting av signatur", "Unabled to upload": "Klarte ikkje å laste opp", "Room Settings - %(roomName)s": "Rominnstillingar - %(roomName)s", - "Riot failed to get the public room list.": "Riot fekk ikkje til å hente offentleg romkatalog.", + "%(brand)s failed to get the public room list.": "%(brand)s fekk ikkje til å hente offentleg romkatalog.", "Room List": "Romkatalog", "Navigate up/down in the room list": "Naviger opp/ned i romkatalogen", "Select room from the room list": "Vel rom frå romkatalogen", @@ -1311,8 +1311,8 @@ "Add theme": "Legg til tema", "Theme": "Tema", "Credits": "Bidragsytarar", - "For help with using Riot, click here.": "For hjelp med å bruke Riot, klikk her.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "For hjelp med å bruke Riot, klikk her, eller start ein samtale med vår bot ved å bruke knappen under.", + "For help with using %(brand)s, click here.": "For hjelp med å bruke %(brand)s, klikk her.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "For hjelp med å bruke %(brand)s, klikk her, eller start ein samtale med vår bot ved å bruke knappen under.", "Clear cache and reload": "Tøm buffer og last inn på nytt", "Composer": "Teksteditor", "Upgrade this room to the recommended room version": "Oppgrader dette rommet til anbefalt romversjon", @@ -1338,7 +1338,7 @@ "Secret Storage key format:": "Nøkkel-format for hemmeleg lager:", "Keyboard Shortcuts": "Tastatursnarvegar", "Ignored users": "Ignorerte brukarar", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Legg til brukarar og tenarar du vil ignorera her. Bruk stjerne/wildcard (*) for at markere eitkvart teikn. Til dømes, @bot* vil ignorere alle brukarar med namn 'bot' på uansett tenar.", + "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.": "Legg til brukarar og tenarar du vil ignorera her. Bruk stjerne/wildcard (*) for at markere eitkvart teikn. Til dømes, @bot* vil ignorere alle brukarar med namn 'bot' på uansett tenar.", "Server or user ID to ignore": "Tenar eller brukar-ID for å ignorere", "If this isn't what you want, please use a different tool to ignore users.": "Om det ikkje var dette du ville, bruk eit anna verktøy til å ignorera brukarar.", "Enter the name of a new server you want to explore.": "Skriv inn namn på ny tenar du ynskjer å utforske.", @@ -1363,7 +1363,7 @@ "Help": "Hjelp", "Explore": "Utforsk", "%(creator)s created and configured the room.": "%(creator)s oppretta og konfiguerte dette rommet.", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot klarde ikkje å hente protokolllister frå heimetenaren. Det kan hende at tenaren er for gammal til å støtte tredjeparts-nettverk", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s klarde ikkje å hente protokolllister frå heimetenaren. Det kan hende at tenaren er for gammal til å støtte tredjeparts-nettverk", "The homeserver may be unavailable or overloaded.": "Heimetenaren kan vere overlasta eller utilgjengeleg.", "Preview": "Førehandsvis", "View": "Vis", diff --git a/src/i18n/strings/oc.json b/src/i18n/strings/oc.json index e62d44f51d..ccbbb98988 100644 --- a/src/i18n/strings/oc.json +++ b/src/i18n/strings/oc.json @@ -2,7 +2,7 @@ "Add Email Address": "Ajustar una adreça electronica", "Add Phone Number": "Ajustar un numèro de telefòn", "The platform you're on": "La plataforma ont sètz", - "The version of Riot": "La version de Riot", + "The version of %(brand)s": "La version de %(brand)s", "Your language of choice": "La lenga que volètz", "User Options": "Opcions utilizaire", "Start a chat": "Començar una discussion", diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 4b98bdbe2a..a0601ec6f5 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -87,7 +87,7 @@ "No Microphones detected": "Nie wykryto żadnego mikrofonu", "No Webcams detected": "Nie wykryto żadnej kamerki internetowej", "No media permissions": "Brak uprawnień do mediów", - "You may need to manually permit Riot to access your microphone/webcam": "Możliwe, że będziesz musiał ręcznie pozwolić Riotowi na dostęp do twojego mikrofonu/kamerki internetowej", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Możliwe, że będziesz musiał ręcznie pozwolić %(brand)sowi na dostęp do twojego mikrofonu/kamerki internetowej", "Default Device": "Urządzenie domyślne", "Advanced": "Zaawansowane", "Always show message timestamps": "Zawsze pokazuj znaczniki czasu wiadomości", @@ -274,10 +274,10 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s zażądał(a) grupowego połączenia głosowego VoIP.", "Results from DuckDuckGo": "Wyniki z DuckDuckGo", "Return to login screen": "Wróć do ekranu logowania", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot nie ma uprawnień, by wysyłać Ci powiadomienia - sprawdź ustawienia swojej przeglądarki", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s nie ma uprawnień, by wysyłać Ci powiadomienia - sprawdź ustawienia swojej przeglądarki", "Historical": "Historyczne", - "Riot was not given permission to send notifications - please try again": "Riot nie otrzymał uprawnień do wysyłania powiadomień - spróbuj ponownie", - "riot-web version:": "wersja riot-web:", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s nie otrzymał uprawnień do wysyłania powiadomień - spróbuj ponownie", + "%(brand)s version:": "wersja %(brand)s:", "Room %(roomId)s not visible": "Pokój %(roomId)s nie jest widoczny", "Room Colour": "Kolor pokoju", "%(roomName)s does not exist.": "%(roomName)s nie istnieje.", @@ -413,8 +413,8 @@ "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.": "Jesteś pewien że chcesz usunąć to wydarzenie? Pamiętaj, że jeśli usuniesz nazwę pokoju lub aktualizację tematu pokoju, zmiana może zostać cofnięta.", "I verify that the keys match": "Upewnię się, że klucze się zgadzają", "Unable to restore session": "Przywrócenie sesji jest niemożliwe", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Jeśli wcześniej używałeś/aś nowszej wersji Riot, Twoja sesja może być niekompatybilna z tą wersją. Zamknij to okno i powróć do nowszej wersji.", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot zbiera anonimowe dane analityczne, aby umożliwić nam rozwijanie aplikacji.", + "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.": "Jeśli wcześniej używałeś/aś nowszej wersji %(brand)s, Twoja sesja może być niekompatybilna z tą wersją. Zamknij to okno i powróć do nowszej wersji.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s zbiera anonimowe dane analityczne, aby umożliwić nam rozwijanie aplikacji.", "ex. @bob:example.com": "np. @jan:example.com", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Nastąpiła próba załadowania danego punktu w historii tego pokoju, lecz nie masz uprawnień, by zobaczyć określoną wiadomość.", "Use compact timeline layout": "Użyj kompaktowego stylu linii czasu", @@ -436,7 +436,7 @@ "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s zmienił(a) awatar %(roomName)s", "This will be your account name on the homeserver, or you can pick a different server.": "To będzie twoja nazwa konta na serwerze domowym; możesz też wybrać inny serwer.", "If you already have a Matrix account you can log in instead.": "Jeśli już posiadasz konto Matrix możesz się zalogować.", - "Not a valid Riot keyfile": "Niepoprawny plik klucza Riot", + "Not a valid %(brand)s keyfile": "Niepoprawny plik klucza %(brand)s", "Authentication check failed: incorrect password?": "Próba autentykacji nieudana: nieprawidłowe hasło?", "Do you want to set an email address?": "Czy chcesz ustawić adres e-mail?", "Share without verifying": "Udostępnij bez weryfikacji", @@ -464,11 +464,11 @@ "Add to community": "Dodaj do społeczności", "Call": "Zadzwoń", "Submit debug logs": "Wyślij dzienniki błędów", - "The version of Riot.im": "Wersja Riot.im", + "The version of %(brand)s": "Wersja %(brand)s", "Your language of choice": "Twój wybrany język", "Your homeserver's URL": "Adres URL Twojego serwera domowego", "Your identity server's URL": "Adres URL Twojego Serwera Tożsamości", - "The information being sent to us to help make Riot.im better includes:": "Informacje przesyłane do nas, by poprawić Riot.im zawierają:", + "The information being sent to us to help make %(brand)s better includes:": "Informacje przesyłane do nas, by poprawić %(brand)s zawierają:", "The platform you're on": "Platforma na której jesteś", "Answer": "Odbierz", "Review Devices": "Przegląd urządzeń", @@ -523,7 +523,7 @@ "Unnamed room": "Pokój bez nazwy", "Guests can join": "Goście mogą dołączyć", "Fetching third party location failed": "Pobranie lokalizacji zewnętrznej nie powiodło się", - "A new version of Riot is available.": "Dostępna jest nowa wersja Riot.", + "A new version of %(brand)s is available.": "Dostępna jest nowa wersja %(brand)s.", "Send Account Data": "Wyślij dane konta", "All notifications are currently disabled for all targets.": "Wszystkie powiadomienia są obecnie wyłączone dla wszystkich celów.", "Uploading report": "Raport wysyłania", @@ -582,7 +582,7 @@ "Forward Message": "Przekaż wiadomość", "You have successfully set a password and an email address!": "Z powodzeniem ustawiono hasło i adres e-mail dla Twojego konta!", "Remove %(name)s from the directory?": "Usunąć %(name)s z katalogu?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot używa wiele zaawansowanych technologii, które nie są dostępne lub są w fazie testów w Twojej przeglądarce.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s używa wiele zaawansowanych technologii, które nie są dostępne lub są w fazie testów w Twojej przeglądarce.", "Developer Tools": "Narzędzia programistyczne", "Preparing to send logs": "Przygotowywanie do wysłania zapisu rozmów", "Remember, you can always set an email address in user settings if you change your mind.": "Pamiętaj, że zawsze możesz zmienić swój e-mail lub hasło w panelu ustawień użytkownika.", @@ -629,8 +629,8 @@ "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.": "Dziennik błędów zawiera dane użytkowania aplikacji, w tym: twoją nazwę użytkownika, numery ID, aliasy pokojów i grup które odwiedzałeś i loginy innych użytkowników. Nie zawiera wiadomości.", "Unhide Preview": "Odkryj podgląd", "Unable to join network": "Nie można dołączyć do sieci", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Możliwe, że skofigurowałeś je w innym kliencie, niż Riot. Nie możesz ich zmieniać w Riot, ale nadal mają zastosowanie", - "Sorry, your browser is not able to run Riot.": "Przepraszamy, Twoja przeglądarka nie jest w stanie uruchomić Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Możliwe, że skofigurowałeś je w innym kliencie, niż %(brand)s. Nie możesz ich zmieniać w %(brand)s, ale nadal mają zastosowanie", + "Sorry, your browser is not able to run %(brand)s.": "Przepraszamy, Twoja przeglądarka nie jest w stanie uruchomić %(brand)s.", "Uploaded on %(date)s by %(user)s": "Wysłano %(date)s przez %(user)s", "Messages in group chats": "Wiadomości w czatach grupowych", "Yesterday": "Wczoraj", @@ -639,7 +639,7 @@ "Unable to fetch notification target list": "Nie można pobrać listy docelowej dla powiadomień", "Set Password": "Ustaw hasło", "Off": "Wyłącz", - "Riot does not know how to join a room on this network": "Riot nie wie, jak dołączyć do pokoju w tej sieci", + "%(brand)s does not know how to join a room on this network": "%(brand)s nie wie, jak dołączyć do pokoju w tej sieci", "Mentions only": "Tylko, gdy wymienieni", "Failed to remove tag %(tagName)s from room": "Nie udało się usunąć tagu %(tagName)s z pokoju", "You can now return to your account after signing out, and sign in on other devices.": "Teraz możesz powrócić do swojego konta na innych urządzeniach po wylogowaniu i ponownym zalogowaniu się.", @@ -673,8 +673,8 @@ "An email has been sent to %(emailAddress)s": "E-mail został wysłany do %(emailAddress)s", "A text message has been sent to %(msisdn)s": "Wysłano wiadomość tekstową do %(msisdn)s", "Code": "Kod", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Pomóż nam ulepszyć Riot.im wysyłając anonimowe dane analityczne. Spowoduje to użycie pliku cookie (zobacz naszą Politykę plików cookie).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Pomóż nam ulepszyć Riot.im wysyłając anonimowe dane analityczne. Spowoduje to użycie pliku cookie.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Pomóż nam ulepszyć %(brand)s wysyłając anonimowe dane analityczne. Spowoduje to użycie pliku cookie (zobacz naszą Politykę plików cookie).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Pomóż nam ulepszyć %(brand)s wysyłając anonimowe dane analityczne. Spowoduje to użycie pliku cookie.", "Yes, I want to help!": "Tak, chcę pomóc!", "Delete Widget": "Usuń widżet", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Usunięcie widżetu usuwa go dla wszystkich użytkowników w tym pokoju. Czy na pewno chcesz usunąć ten widżet?", @@ -800,9 +800,9 @@ "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Aby kontynuować używanie serwera domowego %(homeserverDomain)s musisz przejrzeć i zaakceptować nasze warunki użytkowania.", "Review terms and conditions": "Przejrzyj warunki użytkowania", "Old cryptography data detected": "Wykryto stare dane kryptograficzne", - "Data from an older version of Riot 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.": "Dane ze starszej wersji Riot zostały wykryte. Spowoduje to błędne działanie kryptografii typu end-to-end w starszej wersji. Wiadomości szyfrowane end-to-end wymieniane ostatnio podczas korzystania ze starszej wersji mogą być niemożliwe do odszyfrowywane w tej wersji. Może to również spowodować niepowodzenie wiadomości wymienianych z tą wersją. Jeśli wystąpią problemy, wyloguj się i zaloguj ponownie. Aby zachować historię wiadomości, wyeksportuj i ponownie zaimportuj klucze.", + "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.": "Dane ze starszej wersji %(brand)s zostały wykryte. Spowoduje to błędne działanie kryptografii typu end-to-end w starszej wersji. Wiadomości szyfrowane end-to-end wymieniane ostatnio podczas korzystania ze starszej wersji mogą być niemożliwe do odszyfrowywane w tej wersji. Może to również spowodować niepowodzenie wiadomości wymienianych z tą wersją. Jeśli wystąpią problemy, wyloguj się i zaloguj ponownie. Aby zachować historię wiadomości, wyeksportuj i ponownie zaimportuj klucze.", "Your Communities": "Twoje Społeczności", - "Did you know: you can use communities to filter your Riot.im experience!": "Czy wiesz, że: możesz używać Społeczności do filtrowania swoich doświadczeń z Riot.im!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Czy wiesz, że: możesz używać Społeczności do filtrowania swoich doświadczeń z %(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.": "Aby ustawić filtr, przeciągnij awatar Społeczności do panelu filtra po lewej stronie ekranu. Możesz kliknąć awatar w panelu filtra w dowolnym momencie, aby zobaczyć tylko pokoje i osoby powiązane z tą społecznością.", "Error whilst fetching joined communities": "Błąd podczas pobierania dołączonych społeczności", "Create a new community": "Utwórz nową Społeczność", @@ -883,13 +883,13 @@ "%(severalUsers)sleft %(count)s times|one": "%(severalUsers)s wyszli(-ły)", "were invited %(count)s times|one": "zostali(-ły) zaproszeni(-one)", "Show developer tools": "Pokaż narzędzia deweloperskie", - "Updating Riot": "Aktualizowanie Riot", + "Updating %(brand)s": "Aktualizowanie %(brand)s", "Please contact your service administrator to continue using this service.": "Proszę, skontaktuj się z administratorem aby korzystać dalej z funkcji.", "Only room administrators will see this warning": "Tylko administratorzy pokojów widzą to ostrzeżenie", "Open Devtools": "Otwórz narzędzia deweloperskie", "Clear cache and resync": "Wyczyść pamięć podręczną i zsynchronizuj ponownie", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot używa teraz 3-5x mniej pamięci, ładując informacje o innych użytkownikach tylko wtedy, gdy jest to konieczne. Poczekaj, aż ponownie zsynchronizujemy się z serwerem!", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Jeśli inna wersja Riot jest nadal otwarta w innej zakładce, proszę zamknij ją, ponieważ używanie Riot na tym samym komputerze z włączonym i wyłączonym jednocześnie leniwym ładowaniem będzie powodować problemy.", + "%(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!": "%(brand)s używa teraz 3-5x mniej pamięci, ładując informacje o innych użytkownikach tylko wtedy, gdy jest to konieczne. Poczekaj, aż ponownie zsynchronizujemy się z serwerem!", + "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.": "Jeśli inna wersja %(brand)s jest nadal otwarta w innej zakładce, proszę zamknij ją, ponieważ używanie %(brand)s na tym samym komputerze z włączonym i wyłączonym jednocześnie leniwym ładowaniem będzie powodować problemy.", "And %(count)s more...|other": "I %(count)s więcej…", "Delete Backup": "Usuń Kopię Zapasową", "Unable to load! Check your network connectivity and try again.": "Nie można załadować! Sprawdź połączenie sieciowe i spróbuj ponownie.", @@ -1143,7 +1143,7 @@ "A conference call could not be started because the integrations server is not available": "Połączenie konferencyjne nie może zostać rozpoczęte ponieważ serwer integracji jest niedostępny", "The file '%(fileName)s' failed to upload.": "Nie udało się przesłać pliku '%(fileName)s'.", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Plik '%(fileName)s' przekracza limit rozmiaru dla tego serwera głównego", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Poproś swojego administratora Riot by sprawdzić Twoją konfigurację względem niewłaściwych lub zduplikowanych elementów.", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Poproś swojego administratora %(brand)s by sprawdzić Twoją konfigurację względem niewłaściwych lub zduplikowanych elementów.", "Cannot reach identity server": "Nie można połączyć się z serwerem tożsamości", "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.": "Możesz się zarejestrować, lecz niektóre funkcje nie będą dostępne dopóki Serwer Tożsamości nie będzie znów online. Jeśli ciągle widzisz to ostrzeżenie, sprawdź swoją konfigurację lub skontaktuj się z administratorem serwera.", "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.": "Możesz zresetować hasło, lecz niektóre funkcje nie będą dostępne dopóki Serwer Tożsamości nie będzie znów online. Jeśli ciągle widzisz to ostrzeżenie, sprawdź swoją konfigurację lub skontaktuj się z administratorem serwera.", @@ -1179,7 +1179,7 @@ "%(names)s and %(count)s others are typing …|one": "%(names)s i jedna osoba pisze…", "Cannot reach homeserver": "Błąd połączenia z serwerem domowym", "Ensure you have a stable internet connection, or get in touch with the server admin": "Upewnij się, że posiadasz stabilne połączenie internetowe lub skontaktuj się z administratorem serwera", - "Your Riot is misconfigured": "Twój Riot jest źle skonfigurowany", + "Your %(brand)s is misconfigured": "Twój %(brand)s jest źle skonfigurowany", "Unexpected error resolving homeserver configuration": "Nieoczekiwany błąd przy ustalaniu konfiguracji serwera domowego", "Unexpected error resolving identity server configuration": "Nieoczekiwany błąd przy ustalaniu konfiguracji serwera tożsamości", "User %(userId)s is already in the room": "Użytkownik %(userId)s jest już w pokoju", @@ -1254,9 +1254,9 @@ "Deactivate account": "Dezaktywuj konto", "Legal": "Warunki prawne", "Credits": "Podziękowania", - "For help with using Riot, click here.": "Aby uzyskać pomoc w używaniu Riot, naciśnij tutaj.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Aby uzyskać pomoc w używaniu Riot, naciśnij tutaj lub uruchom rozmowę z naszym botem, za pomocą odnośnika poniżej.", - "Chat with Riot Bot": "Rozmowa z Botem Riota", + "For help with using %(brand)s, click here.": "Aby uzyskać pomoc w używaniu %(brand)s, naciśnij tutaj.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Aby uzyskać pomoc w używaniu %(brand)s, naciśnij tutaj lub uruchom rozmowę z naszym botem, za pomocą odnośnika poniżej.", + "Chat with %(brand)s Bot": "Rozmowa z Botem %(brand)sa", "FAQ": "Najczęściej zadawane pytania", "Always show the window menu bar": "Zawsze pokazuj pasek menu okna", "Add Email Address": "Dodaj adres e-mail", @@ -1321,9 +1321,9 @@ "Try to join anyway": "Spróbuj dołączyć mimo tego", "You can still join it because this is a public room.": "Możesz mimo to dołączyć, gdyż pokój jest publiczny.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "To zaproszenie do %(roomName)s zostało wysłane na adres %(email)s, który nie jest przypisany do Twojego konta", - "Link this email with your account in Settings to receive invites directly in Riot.": "Połącz ten adres e-mail z Twoim kontem w Ustawieniach, aby otrzymywać zaproszenia bezpośrednio w Riot.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Połącz ten adres e-mail z Twoim kontem w Ustawieniach, aby otrzymywać zaproszenia bezpośrednio w %(brand)s.", "This invite to %(roomName)s was sent to %(email)s": "To zaproszenie do %(roomName)s zostało wysłane do %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Użyj serwera tożsamości w Ustawieniach, aby otrzymywać zaproszenia bezpośrednio w Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Użyj serwera tożsamości w Ustawieniach, aby otrzymywać zaproszenia bezpośrednio w %(brand)s.", "Do you want to chat with %(user)s?": "Czy chcesz rozmawiać z %(user)s?", "Do you want to join %(roomName)s?": "Czy chcesz dołączyć do %(roomName)s?", " invited you": " zaprosił(a) CIę", @@ -1594,9 +1594,9 @@ "Click the button below to confirm adding this email address.": "Naciśnij przycisk poniżej aby zatwierdzić dodawanie adresu e-mail.", "Confirm adding phone number": "Potwierdź dodanie numeru telefonu", "Click the button below to confirm adding this phone number.": "Naciśnij przycisk poniżej aby potwierdzić dodanie tego numeru telefonu.", - "The version of Riot": "Wersja Riota", + "The version of %(brand)s": "Wersja %(brand)sa", "Your user agent": "Twój user agent", - "The information being sent to us to help make Riot better includes:": "Informacje przesyłane do nas w celu poprawy jakości Riota zawierają:", + "The information being sent to us to help make %(brand)s better includes:": "Informacje przesyłane do nas w celu poprawy jakości %(brand)sa zawierają:", "Sends a message as html, without interpreting it as markdown": "Wysyła wiadomość w formacie html, bez interpretowania jej jako markdown", "Error upgrading room": "Błąd podczas aktualizacji pokoju", "Double check that your server supports the room version chosen and try again.": "Sprawdź ponownie czy Twój serwer wspiera wybraną wersję pokoju i spróbuj ponownie.", diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index 6c64a10696..680cdd583a 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -176,8 +176,8 @@ "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s removeu o seu nome público (%(oldDisplayName)s).", "%(senderName)s removed their profile picture.": "%(senderName)s removeu sua imagem de perfil.", "%(senderName)s requested a VoIP conference.": "%(senderName)s está solicitando uma conferência de voz.", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot não tem permissões para enviar notificações a você - por favor, verifique as configurações do seu navegador", - "Riot was not given permission to send notifications - please try again": "Riot não tem permissões para enviar notificações a você - por favor, tente novamente", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s não tem permissões para enviar notificações a você - por favor, verifique as configurações do seu navegador", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s não tem permissões para enviar notificações a você - por favor, tente novamente", "Room %(roomId)s not visible": "A sala %(roomId)s não está visível", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s enviou uma imagem.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s enviou um convite para %(targetDisplayName)s entrar na sala.", @@ -279,7 +279,7 @@ "Mute": "Silenciar", "olm version:": "versão do olm:", "Operation failed": "A operação falhou", - "riot-web version:": "versão do riot-web:", + "%(brand)s version:": "versão do %(brand)s:", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostrar os horários em formato de 12h (p.ex: 2:30pm)", "Unmute": "Tirar do mudo", "Warning!": "Atenção!", @@ -287,7 +287,7 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s apagou o nome da sala.", "Analytics": "Análise", "Options": "Opções", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot coleta informações anônimas de uso para nos permitir melhorar o sistema.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s coleta informações anônimas de uso para nos permitir melhorar o sistema.", "Passphrases must match": "As senhas têm que ser iguais", "Passphrase must not be empty": "A senha não pode estar vazia", "Export room keys": "Exportar chaves de sala", @@ -308,7 +308,7 @@ "To continue, please enter your password.": "Para continuar, por favor insira a sua senha.", "I verify that the keys match": "Eu confirmo que as chaves são iguais", "Unable to restore session": "Não foi possível restaurar a sessão", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Se você já usou antes uma versão mais recente do Riot, a sua sessão pode ser incompatível com esta versão. Feche esta janela e tente abrir com a versão mais recente.", + "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.": "Se você já usou antes uma versão mais recente do %(brand)s, a sua sessão pode ser incompatível com esta versão. Feche esta janela e tente abrir com a versão mais recente.", "Unknown Address": "Endereço desconhecido", "Unblacklist": "Tirar da lista de bloqueados", "Blacklist": "Colocar na lista de bloqueados", @@ -353,7 +353,7 @@ "No Microphones detected": "Não foi detetado nenhum microfone", "No Webcams detected": "Não foi detetada nenhuma Webcam", "No media permissions": "Não há permissões para o uso de vídeo/áudio no seu navegador", - "You may need to manually permit Riot to access your microphone/webcam": "Você talvez precise autorizar manualmente que o Riot acesse seu microfone e webcam", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Você talvez precise autorizar manualmente que o %(brand)s acesse seu microfone e webcam", "Default Device": "Dispositivo padrão", "Microphone": "Microfone", "Camera": "Câmera de vídeo", @@ -440,7 +440,7 @@ "Failed to copy": "Falha ao copiar", "Check for update": "Procurar atualizações", "Your browser does not support the required cryptography extensions": "O seu browser não suporta as extensões de criptografia necessárias", - "Not a valid Riot keyfile": "Não é um ficheiro de chaves Riot válido", + "Not a valid %(brand)s keyfile": "Não é um ficheiro de chaves %(brand)s válido", "Authentication check failed: incorrect password?": "Erro de autenticação: palavra-passe incorreta?", "Do you want to set an email address?": "Deseja definir um endereço de e-mail?", "This will allow you to reset your password and receive notifications.": "Isto irá permitir-lhe redefinir a sua palavra-passe e receber notificações.", @@ -476,7 +476,7 @@ "Banned by %(displayName)s": "Banido por %(displayName)s", "Message removed by %(userId)s": "Mensagem removida por %(userId)s", "Fetching third party location failed": "Falha ao obter localização de terceiros", - "A new version of Riot is available.": "Uma nova versão do Riot está disponível.", + "A new version of %(brand)s is available.": "Uma nova versão do %(brand)s está disponível.", "I understand the risks and wish to continue": "Entendo os riscos e pretendo continuar", "Advanced notification settings": "Configurações avançadas de notificação", "Uploading report": "A enviar o relatório", @@ -534,7 +534,7 @@ "Enter keywords separated by a comma:": "Insira palavras-chave separadas por vírgula:", "Search…": "Pesquisar…", "Remove %(name)s from the directory?": "Remover %(name)s da lista pública de salas?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "O Riot usa muitas funcionalidades avançadas do navegador, algumas das quais não estão disponíveis ou ainda são experimentais no seu navegador atual.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "O %(brand)s usa muitas funcionalidades avançadas do navegador, algumas das quais não estão disponíveis ou ainda são experimentais no seu navegador atual.", "Developer Tools": "Ferramentas de desenvolvedor", "Unnamed room": "Sala sem nome", "Remove from Directory": "Remover da lista pública de salas", @@ -573,8 +573,8 @@ "Back": "Voltar", "Unhide Preview": "Mostrar a pré-visualização novamente", "Unable to join network": "Não foi possível juntar-se à rede", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode ter configurado num outro cliente sem ser o Riot. Não pode ajustá-las no Riot, mas ainda assim elas aplicam-se", - "Sorry, your browser is not able to run Riot.": "Desculpe, o seu navegador não é capaz de executar o Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Pode ter configurado num outro cliente sem ser o %(brand)s. Não pode ajustá-las no %(brand)s, mas ainda assim elas aplicam-se", + "Sorry, your browser is not able to run %(brand)s.": "Desculpe, o seu navegador não é capaz de executar o %(brand)s.", "Messages in group chats": "Mensagens em salas", "Yesterday": "Ontem", "Error encountered (%(errorDetail)s).": "Erro encontrado (%(errorDetail)s).", @@ -582,7 +582,7 @@ "Unable to fetch notification target list": "Não foi possível obter a lista de alvos de notificação", "Set Password": "Definir palavra-passe", "Off": "Desativado", - "Riot does not know how to join a room on this network": "O Riot não sabe como entrar numa sala nesta rede", + "%(brand)s does not know how to join a room on this network": "O %(brand)s não sabe como entrar numa sala nesta rede", "Mentions only": "Apenas menções", "Failed to remove tag %(tagName)s from room": "Não foi possível remover a marcação %(tagName)s desta sala", "Wednesday": "Quarta-feira", @@ -603,7 +603,7 @@ "Add Email Address": "Adicione adresso de e-mail", "Add Phone Number": "Adicione número de telefone", "The platform you're on": "A plataforma em que se encontra", - "The version of Riot.im": "A versão do RIOT.im", + "The version of %(brand)s": "A versão do RIOT.im", "Whether or not you're logged in (we don't record your username)": "Tenha ou não, iniciado sessão (não iremos guardar o seu nome de utilizador)", "Your language of choice": "O seu idioma que escolheu", "Which officially provided instance you are using, if any": "Qual instância oficial está utilizando, se for o caso", @@ -616,7 +616,7 @@ "e.g. ": "ex. ", "Your User Agent": "O seu Agente de Utilizador", "Your device resolution": "A resolução do seu dispositivo", - "The information being sent to us to help make Riot.im better includes:": "As informações que estão sendo enviadas para ajudar a melhorar o Riot.im incluem:", + "The information being sent to us to help make %(brand)s better includes:": "As informações que estão sendo enviadas para ajudar a melhorar o %(brand)s incluem:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Quando esta página contém informação de que permitam a sua identificação, como uma sala, ID de utilizador ou de grupo, estes dados são removidos antes de serem enviados ao servidor.", "Call Failed": "A chamada falhou", "Review Devices": "Rever dispositivos", @@ -628,8 +628,8 @@ "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Peça ao administrador do seu servidor inicial (%(homeserverDomain)s) de configurar um servidor TURN para que as chamadas funcionem fiavelmente.", "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.": "Alternativamente, pode tentar usar o servidor público em turn.matrix.org, mas não será tão fiável e partilhará o seu IP com esse servidor. Também pode gerir isso nas definições.", "Try using turn.matrix.org": "Tente utilizar turn.matrix.org", - "The version of Riot": "A versão do Riot", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Quer esteja a usar o Riot num dispositivo onde o touch é o mecanismo de entrada primário", - "Whether you're using Riot as an installed Progressive Web App": "Quer esteja a usar o Riot como uma Progressive Web App (PWA)", + "The version of %(brand)s": "A versão do %(brand)s", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Quer esteja a usar o %(brand)s num dispositivo onde o touch é o mecanismo de entrada primário", + "Whether you're using %(brand)s as an installed Progressive Web App": "Quer esteja a usar o %(brand)s como uma Progressive Web App (PWA)", "Your user agent": "O seu user agent" } diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 97245ef025..91f81e0beb 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -176,8 +176,8 @@ "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s removeu o seu nome público (%(oldDisplayName)s).", "%(senderName)s removed their profile picture.": "%(senderName)s removeu sua imagem de perfil.", "%(senderName)s requested a VoIP conference.": "%(senderName)s está solicitando uma conferência de voz.", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot não tem permissões para enviar notificações a você - por favor, verifique as configurações do seu navegador", - "Riot was not given permission to send notifications - please try again": "Riot não tem permissões para enviar notificações a você - por favor, tente novamente", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s não tem permissões para enviar notificações a você - por favor, verifique as configurações do seu navegador", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s não tem permissões para enviar notificações a você - por favor, tente novamente", "Room %(roomId)s not visible": "A sala %(roomId)s não está visível", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s enviou uma imagem.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s enviou um convite para %(targetDisplayName)s entrar na sala.", @@ -279,7 +279,7 @@ "Mute": "Mudo", "olm version:": "versão do olm:", "Operation failed": "A operação falhou", - "riot-web version:": "versão do riot-web:", + "%(brand)s version:": "versão do %(brand)s:", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostrar os horários em formato de 12h (p.ex: 2:30pm)", "Unmute": "Tirar do mudo", "Warning!": "Atenção!", @@ -287,7 +287,7 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s apagou o nome da sala.", "Analytics": "Análise", "Options": "Opções", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot coleta informações anônimas de uso para nos permitir melhorar o sistema.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s coleta informações anônimas de uso para nos permitir melhorar o sistema.", "Passphrases must match": "As senhas têm que ser iguais", "Passphrase must not be empty": "A senha não pode estar vazia", "Export room keys": "Exportar chaves de sala", @@ -308,7 +308,7 @@ "To continue, please enter your password.": "Para continuar, por favor insira a sua senha.", "I verify that the keys match": "Eu confirmo que as chaves são iguais", "Unable to restore session": "Não foi possível restaurar a sessão", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Se você já usou antes uma versão mais recente do Riot, a sua sessão pode ser incompatível com esta versão. Feche esta janela e tente abrir com a versão mais recente.", + "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.": "Se você já usou antes uma versão mais recente do %(brand)s, a sua sessão pode ser incompatível com esta versão. Feche esta janela e tente abrir com a versão mais recente.", "Unknown Address": "Endereço desconhecido", "Unblacklist": "Tirar da lista de bloqueados", "Blacklist": "Colocar na lista de bloqueados", @@ -353,7 +353,7 @@ "No Microphones detected": "Não foi detectado nenhum microfone", "No Webcams detected": "Não foi detectada nenhuma Webcam", "No media permissions": "Não há permissões de uso de vídeo/áudio no seu navegador", - "You may need to manually permit Riot to access your microphone/webcam": "Você talvez precise autorizar manualmente que o Riot acesse seu microfone e webcam", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Você talvez precise autorizar manualmente que o %(brand)s acesse seu microfone e webcam", "Default Device": "Dispositivo padrão", "Microphone": "Microfone", "Camera": "Câmera de vídeo", @@ -422,7 +422,7 @@ "(no answer)": "(sem resposta)", "(unknown failure: %(reason)s)": "(falha desconhecida: %(reason)s)", "Your browser does not support the required cryptography extensions": "O seu navegador não suporta as extensões de criptografia necessárias", - "Not a valid Riot keyfile": "Não é um arquivo de chaves Riot válido", + "Not a valid %(brand)s keyfile": "Não é um arquivo de chaves %(brand)s válido", "Authentication check failed: incorrect password?": "Falha ao checar a autenticação: senha incorreta?", "Do you want to set an email address?": "Você deseja definir um endereço de e-mail?", "This will allow you to reset your password and receive notifications.": "Isso permitirá que você redefina sua senha e receba notificações.", @@ -446,14 +446,14 @@ "Edit": "Editar", "Unpin Message": "Desafixar Mensagem", "Add rooms to this community": "Adicionar salas na comunidade", - "The version of Riot.im": "A Versão do Riot.im", + "The version of %(brand)s": "A Versão do %(brand)s", "The platform you're on": "A plataforma que você está usando", "Your language of choice": "O idioma que você selecionou", "Which officially provided instance you are using, if any": "Qual instância oficial você está usando, se for o caso", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Se você está usando o editor de texto visual", "Your homeserver's URL": "A URL do seu Servidor de Base (homeserver)", "Your identity server's URL": "A URL do seu servidor de identidade", - "The information being sent to us to help make Riot.im better includes:": "As informações que estão sendo enviadas para ajudar a melhorar o Riot.im incluem:", + "The information being sent to us to help make %(brand)s better includes:": "As informações que estão sendo enviadas para ajudar a melhorar o %(brand)s incluem:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Quando esta página tem informação de identificação, como uma sala, ID de usuária/o ou de grupo, estes dados são removidos antes de serem enviados ao servidor.", "Call Failed": "A chamada falhou", "Review Devices": "Revisar dispositivos", @@ -674,7 +674,7 @@ "Failed to load %(groupId)s": "Não foi possível carregar a comunidade %(groupId)s", "This room is not public. You will not be able to rejoin without an invite.": "Esta sala não é pública. Você não poderá voltar sem ser convidada/o.", "Old cryptography data detected": "Dados de criptografia antigos foram detectados", - "Data from an older version of Riot 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.": "Dados de uma versão anterior do Riot foram detectados. Isso fará com que a criptografia ponta-a-ponta não funcione na versão anterior. Mensagens criptografadas ponta-a-ponta que foram trocadas recentemente usando a versão antiga do Riot talvez não possam ser decriptografadas nesta versão. Isso também pode fazer com que mensagens trocadas com esta versão falhem. Se você tiver problemas desta natureza, faça logout e entre novamente. Para manter o histórico de mensagens, exporte e reimporte suas chaves de criptografia.", + "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.": "Dados de uma versão anterior do %(brand)s foram detectados. Isso fará com que a criptografia ponta-a-ponta não funcione na versão anterior. Mensagens criptografadas ponta-a-ponta que foram trocadas recentemente usando a versão antiga do %(brand)s talvez não possam ser decriptografadas nesta versão. Isso também pode fazer com que mensagens trocadas com esta versão falhem. Se você tiver problemas desta natureza, faça logout e entre novamente. Para manter o histórico de mensagens, exporte e reimporte suas chaves de criptografia.", "Your Communities": "Suas comunidades", "Error whilst fetching joined communities": "Erro baixando comunidades das quais você faz parte", "Create a new community": "Criar nova comunidade", @@ -701,11 +701,11 @@ "Failed to set direct chat tag": "Falha ao definir esta conversa como direta", "Failed to remove tag %(tagName)s from room": "Falha ao remover a tag %(tagName)s da sala", "Failed to add tag %(tagName)s to room": "Falha ao adicionar a tag %(tagName)s para a sala", - "Did you know: you can use communities to filter your Riot.im experience!": "Você sabia? Você pode usar as comunidades para filtrar a sua experiência no Riot!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Você sabia? Você pode usar as comunidades para filtrar a sua experiência no %(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 criar um filtro, arraste a imagem de uma comunidade sobre o painel de filtros na extrema esquerda da sua tela. Você pode clicar na imagem de uma comunidade no painel de filtros a qualquer momento para ver apenas as salas e pessoas associadas com esta comunidade.", "Key request sent.": "Requisição de chave enviada.", "Fetching third party location failed": "Falha ao acessar localização de terceiros", - "A new version of Riot is available.": "Uma nova versão do Riot está disponível.", + "A new version of %(brand)s is available.": "Uma nova versão do %(brand)s está disponível.", "I understand the risks and wish to continue": "Entendo os riscos e desejo continuar", "Send Account Data": "Enviar Dados da Conta", "Advanced notification settings": "Configurações avançadas de notificação", @@ -761,7 +761,7 @@ "Search…": "Buscar…", "You have successfully set a password and an email address!": "Você definiu uma senha e um endereço de e-mail com sucesso!", "Remove %(name)s from the directory?": "Remover %(name)s da lista pública de salas?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "O Riot usa muitas funcionalidades avançadas do navegador, algumas das quais não estão disponíveis ou ainda são experimentais no seu navegador atual.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "O %(brand)s usa muitas funcionalidades avançadas do navegador, algumas das quais não estão disponíveis ou ainda são experimentais no seu navegador atual.", "Developer Tools": "Ferramentas do desenvolvedor", "Explore Account Data": "Explorar Dados da Conta", "Remove from Directory": "Remover da lista pública de salas", @@ -801,8 +801,8 @@ "Show message in desktop notification": "Mostrar mensagens na notificação", "Unhide Preview": "Mostrar a pré-visualização", "Unable to join network": "Não foi possível conectar na rede", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Você pode te-las configurado em outro cliente além do Riot. Você não pode ajustá-las no Riot, mas ainda assim elas se aplicam aqui", - "Sorry, your browser is not able to run Riot.": "Perdão. O seu navegador não é capaz de rodar o Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Você pode te-las configurado em outro cliente além do %(brand)s. Você não pode ajustá-las no %(brand)s, mas ainda assim elas se aplicam aqui", + "Sorry, your browser is not able to run %(brand)s.": "Perdão. O seu navegador não é capaz de rodar o %(brand)s.", "Messages in group chats": "Mensagens em salas", "Yesterday": "Ontem", "Error encountered (%(errorDetail)s).": "Erro encontrado (%(errorDetail)s).", @@ -810,7 +810,7 @@ "Unable to fetch notification target list": "Não foi possível obter a lista de alvos de notificação", "Set Password": "Definir senha", "Off": "Desativado", - "Riot does not know how to join a room on this network": "O sistema não sabe como entrar na sala desta rede", + "%(brand)s does not know how to join a room on this network": "O sistema não sabe como entrar na sala desta rede", "Mentions only": "Apenas menções", "Wednesday": "Quarta", "You can now return to your account after signing out, and sign in on other devices.": "Você pode retornar agora para a sua conta depois de fazer logout, e então fazer login em outros dispositivos.", @@ -932,8 +932,8 @@ "The phone number field must not be blank.": "O campo do número de telefone não pode estar em branco.", "The password field must not be blank.": "O campo da senha não pode ficar em branco.", "Failed to load group members": "Falha ao carregar membros do grupo", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Por favor, ajude a melhorar o Riot.im enviando dados de uso anônimo. Isso usará um cookie (consulte nossa Política de cookies).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Por favor, ajude a melhorar o Riot.im enviando dados de uso anônimo. Isto irá usar um cookie.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Por favor, ajude a melhorar o %(brand)s enviando dados de uso anônimo. Isso usará um cookie (consulte nossa Política de cookies).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Por favor, ajude a melhorar o %(brand)s enviando dados de uso anônimo. Isto irá usar um cookie.", "Yes, I want to help!": "Sim, quero ajudar!", "Please contact your service administrator to get this limit increased.": "Por favor, entre em contato com o administrador do serviço para aumentar esse limite.", "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Este homeserver atingiu seu limite de usuário ativo mensal, então alguns usuários não poderão efetuar login.", @@ -949,8 +949,8 @@ "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.": "Os registros de depuração contêm dados de uso do aplicativo, incluindo seu nome de usuário, os IDs ou aliases das salas ou grupos que você visitou e os nomes de usuários de outros usuários. Eles não contêm mensagens.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Antes de enviar os registros, você deve criar uma questão no GitHub para descrever seu problema.", "Unable to load commit detail: %(msg)s": "Não é possível carregar os detalhes do commit: %(msg)s", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Para evitar perder seu histórico de bate-papo, você deve exportar as chaves do seu quarto antes de fazer logout. Você precisará voltar para a versão mais recente do Riot para fazer isso", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Você já usou uma versão mais recente do Riot em %(host)s. Para usar essa versão novamente com criptografia de ponta a ponta, você precisará sair e voltar novamente. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Para evitar perder seu histórico de bate-papo, você deve exportar as chaves do seu quarto antes de fazer logout. Você precisará voltar para a versão mais recente do %(brand)s para fazer isso", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Você já usou uma versão mais recente do %(brand)s em %(host)s. Para usar essa versão novamente com criptografia de ponta a ponta, você precisará sair e voltar novamente. ", "Incompatible Database": "Banco de dados incompatível", "Continue With Encryption Disabled": "Continuar com criptografia desativada", "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.": "Isso tornará sua conta permanentemente inutilizável. Você não poderá efetuar login e ninguém poderá registrar novamente o mesmo ID de usuário. Isso fará com que sua conta deixe todas as salas nas quais está participando e removerá os detalhes da sua conta do seu servidor de identidade. Esta ação é irreversível.", @@ -960,8 +960,8 @@ "To continue, please enter your password:": "Para continuar, por favor digite sua senha:", "Incompatible local cache": "Cache local incompatível", "Clear cache and resync": "Limpar cache e ressincronizar", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot agora usa 3-5x menos memória, pois carrega informação sobre outros usuários apenas quando necessário. Por favor, aguarde enquanto ressincronizamos com o servidor!", - "Updating Riot": "Atualizando Riot", + "%(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!": "%(brand)s agora usa 3-5x menos memória, pois carrega informação sobre outros usuários apenas quando necessário. Por favor, aguarde enquanto ressincronizamos com o servidor!", + "Updating %(brand)s": "Atualizando %(brand)s", "Failed to upgrade room": "Falha ao atualizar a sala", "The room upgrade could not be completed": "A atualização da sala não pode ser completada", "Upgrade this room to version %(version)s": "Atualize essa sala para versão %(version)s", @@ -969,8 +969,8 @@ "Create a new room with the same name, description and avatar": "Criar uma nova sala com o mesmo nome, descrição e avatar", "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "Impedir usuários de conversar na versão antiga da sala e postar uma mensagem aconselhando os usuários a migrarem para a nova sala", "Put a link back to the old room at the start of the new room so people can see old messages": "Colocar um link para a sala antiga no começo da sala nova de modo que as pessoas possam ver mensagens antigas", - "You've previously used Riot 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, Riot needs to resync your account.": "Você já usou o Riot em %(host)s com o carregamento Lazy de membros ativado. Nesta versão, o carregamento Lazy está desativado. Como o cache local não é compatível entre essas duas configurações, a Riot precisa ressincronizar sua conta.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Se a outra versão do Riot ainda estiver aberta em outra aba, por favor, feche-a pois usar o Riot no mesmo host com o carregamento Lazy ativado e desativado simultaneamente causará problemas.", + "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.": "Você já usou o %(brand)s em %(host)s com o carregamento Lazy de membros ativado. Nesta versão, o carregamento Lazy está desativado. Como o cache local não é compatível entre essas duas configurações, a %(brand)s precisa ressincronizar sua conta.", + "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.": "Se a outra versão do %(brand)s ainda estiver aberta em outra aba, por favor, feche-a pois usar o %(brand)s no mesmo host com o carregamento Lazy ativado e desativado simultaneamente causará problemas.", "Update any local room aliases to point to the new room": "Atualize todos os aliases da sala local para apontar para a nova sala", "Clear Storage and Sign Out": "Limpar armazenamento e sair", "Refresh": "Atualizar", @@ -1199,9 +1199,9 @@ "Deactivating your account is a permanent action - be careful!": "Desativar sua conta é uma ação permanente - tenha cuidado!", "General": "Geral", "Credits": "Créditos", - "For help with using Riot, click here.": "Para ajuda com o uso do Riot, clique aqui.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Para obter ajuda com o uso do Riot, clique aqui ou inicie um bate-papo com nosso bot usando o botão abaixo.", - "Chat with Riot Bot": "Converse com o bot do Riot", + "For help with using %(brand)s, click here.": "Para ajuda com o uso do %(brand)s, clique aqui.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Para obter ajuda com o uso do %(brand)s, clique aqui ou inicie um bate-papo com nosso bot usando o botão abaixo.", + "Chat with %(brand)s Bot": "Converse com o bot do %(brand)s", "Help & About": "Ajuda & Sobre", "Bug reporting": "Relato de Erros", "FAQ": "FAQ", diff --git a/src/i18n/strings/ro.json b/src/i18n/strings/ro.json index 6c3059399f..dab9bb0aab 100644 --- a/src/i18n/strings/ro.json +++ b/src/i18n/strings/ro.json @@ -3,7 +3,7 @@ "This phone number is already in use": "Acest număr de telefon este deja utilizat", "Failed to verify email address: make sure you clicked the link in the email": "Adresa de e-mail nu a putut fi verificată: asigurați-vă că ați făcut click pe linkul din e-mail", "The platform you're on": "Platforma pe care te afli", - "The version of Riot.im": "Versiunea Riot.im", + "The version of %(brand)s": "Versiunea %(brand)s", "Whether or not you're logged in (we don't record your username)": "Indiferent dacă sunteți conectat sau nu (nu vă înregistrați numele de utilizator)", "Your language of choice": "Alegeți limba", "Which officially provided instance you are using, if any": "Ce instanță ați furnizat oficial instanței pe care o utilizați, dacă este cazul", @@ -16,7 +16,7 @@ "Your User Agent": "Agentul dvs. de utilizator", "Your device resolution": "Rezoluția dispozitivului", "Analytics": "Analizarea", - "The information being sent to us to help make Riot.im better includes:": "Informațiile care ne sunt trimise pentru a ne ajuta să facem mai bine Riot.im includ:", + "The information being sent to us to help make %(brand)s better includes:": "Informațiile care ne sunt trimise pentru a ne ajuta să facem mai bine %(brand)s includ:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "În cazul în care această pagină include informații care pot fi identificate, cum ar fi o cameră, un utilizator sau un ID de grup, aceste date sunt eliminate înainte de a fi trimise la server.", "Call Failed": "Apel eșuat", "Review Devices": "Examinați dispozitivele", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 41ee56d5e7..84cf5f4033 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -226,9 +226,9 @@ "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s удалил своё отображаемое имя (%(oldDisplayName)s).", "%(senderName)s removed their profile picture.": "%(senderName)s удалил свой аватар.", "%(senderName)s requested a VoIP conference.": "%(senderName)s запросил конференц-звонок.", - "Riot does not have permission to send you notifications - please check your browser settings": "У Riot нет разрешения на отправку уведомлений — проверьте настройки браузера", - "Riot was not given permission to send notifications - please try again": "Riot не получил разрешение на отправку уведомлений, пожалуйста, попробуйте снова", - "riot-web version:": "версия riot-web:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "У %(brand)s нет разрешения на отправку уведомлений — проверьте настройки браузера", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s не получил разрешение на отправку уведомлений, пожалуйста, попробуйте снова", + "%(brand)s version:": "версия %(brand)s:", "Room %(roomId)s not visible": "Комната %(roomId)s невидима", "Room Colour": "Цвет комнаты", "Rooms": "Комнаты", @@ -271,12 +271,12 @@ "Microphone": "Микрофон", "Start automatically after system login": "Автозапуск при входе в систему", "Analytics": "Аналитика", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot собирает анонимные данные, позволяющие нам улучшить приложение.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s собирает анонимные данные, позволяющие нам улучшить приложение.", "Default Device": "Устройство по умолчанию", "No Webcams detected": "Веб-камера не обнаружена", "Guests cannot join this room even if explicitly invited.": "Посторонние не смогут войти в эту комнату, даже если они будут приглашены.", "No media permissions": "Нет разрешённых носителей", - "You may need to manually permit Riot to access your microphone/webcam": "Вам необходимо предоставить Riot доступ к микрофону или веб-камере вручную", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Вам необходимо предоставить %(brand)s доступ к микрофону или веб-камере вручную", "Anyone": "Все", "Are you sure you want to leave the room '%(roomName)s'?": "Вы уверены, что хотите покинуть '%(roomName)s'?", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s удалил(а) имя комнаты.", @@ -339,7 +339,7 @@ "To continue, please enter your password.": "Чтобы продолжить, введите ваш пароль.", "I verify that the keys match": "Я подтверждаю, что ключи совпадают", "Unable to restore session": "Восстановление сессии не удалось", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Если вы использовали более новую версию Riot, то ваша сессия может быть несовместима с текущей. Закройте это окно и вернитесь к использованию более новой версии.", + "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.": "Если вы использовали более новую версию %(brand)s, то ваша сессия может быть несовместима с текущей. Закройте это окно и вернитесь к использованию более новой версии.", "Unknown Address": "Неизвестный адрес", "Unblacklist": "Разблокировать", "Blacklist": "Заблокировать", @@ -421,7 +421,7 @@ "(could not connect media)": "(сбой подключения)", "(no answer)": "(нет ответа)", "(unknown failure: %(reason)s)": "(неизвестная ошибка: %(reason)s)", - "Not a valid Riot keyfile": "Недействительный файл ключей Riot", + "Not a valid %(brand)s keyfile": "Недействительный файл ключей %(brand)s", "Your browser does not support the required cryptography extensions": "Ваш браузер не поддерживает требуемые криптографические расширения", "Authentication check failed: incorrect password?": "Ошибка аутентификации: возможно, неправильный пароль?", "Do you want to set an email address?": "Хотите указать email?", @@ -665,7 +665,7 @@ "collapse": "свернуть", "expand": "развернуть", "Old cryptography data detected": "Обнаружены старые криптографические данные", - "Data from an older version of Riot 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.": "Обнаружены данные из более старой версии Riot. Это приведет к сбою криптографии в более ранней версии. В этой версии не могут быть расшифрованы сообщения, которые использовались недавно при использовании старой версии. Это также может привести к сбою обмена сообщениями с этой версией. Если возникают неполадки, выйдите и снова войдите в систему. Чтобы сохранить журнал сообщений, экспортируйте и повторно импортируйте ключи.", + "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.": "Обнаружены данные из более старой версии %(brand)s. Это приведет к сбою криптографии в более ранней версии. В этой версии не могут быть расшифрованы сообщения, которые использовались недавно при использовании старой версии. Это также может привести к сбою обмена сообщениями с этой версией. Если возникают неполадки, выйдите и снова войдите в систему. Чтобы сохранить журнал сообщений, экспортируйте и повторно импортируйте ключи.", "Warning": "Внимание", "Showing flair for these communities:": "Комната принадлежит следующим сообществам:", "This room is not showing flair for any communities": "Эта комната не принадлежит каким-либо сообществам", @@ -683,10 +683,10 @@ "Minimize apps": "Свернуть приложения", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Конфиденциальность важна для нас, поэтому мы не собираем никаких личных или идентифицирующих данных для нашей аналитики.", "Learn more about how we use analytics.": "Подробнее о том, как мы используем аналитику.", - "The information being sent to us to help make Riot.im better includes:": "Информация, отправляемая нам, чтобы помочь нам сделать Riot.im лучше, включает в себя:", + "The information being sent to us to help make %(brand)s better includes:": "Информация, отправляемая нам, чтобы помочь нам сделать %(brand)s лучше, включает в себя:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Если на этой странице встречаются сведения личного характера, например имя комнаты, имя пользователя или группы, они удаляются перед отправкой на сервер.", "The platform you're on": "Используемая платформа", - "The version of Riot.im": "Версия Riot.im", + "The version of %(brand)s": "Версия %(brand)s", "Your language of choice": "Выбранный язык", "Your homeserver's URL": "URL-адрес сервера", "Your identity server's URL": "URL-адрес сервера идентификации", @@ -702,7 +702,7 @@ "Failed to add tag %(tagName)s to room": "Не удалось добавить тег %(tagName)s в комнату", "Clear filter": "Очистить фильтр", "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.": "Чтобы настроить фильтр, перетащите аватар сообщества на панель фильтров в левой части экрана. Вы можете нажать на аватар в панели фильтров в любое время, чтобы увидеть только комнаты и людей, связанных с этим сообществом.", - "Did you know: you can use communities to filter your Riot.im experience!": "Знаете ли вы: вы можете использовать сообщества, чтобы фильтровать в Riot.im!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Знаете ли вы: вы можете использовать сообщества, чтобы фильтровать в %(brand)s!", "Key request sent.": "Запрос ключа отправлен.", "Code": "Код", "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, журналы отладки могут помочь нам выявить проблему. Журналы отладки содержат данные об использовании приложения, включая ваше имя пользователя, идентификаторы или псевдонимы комнат или групп, которые вы посетили, а также имена других пользователей. Они не содержат сообщений.", @@ -720,7 +720,7 @@ "Hide Stickers": "Скрыть стикеры", "Show Stickers": "Показать стикеры", "Fetching third party location failed": "Не удалось извлечь местоположение третьей стороны", - "A new version of Riot is available.": "Доступна новая версия Riot.", + "A new version of %(brand)s is available.": "Доступна новая версия %(brand)s.", "I understand the risks and wish to continue": "Я понимаю риски и желаю продолжить", "Send Account Data": "Отправка данных учётной записи", "All notifications are currently disabled for all targets.": "Все оповещения для всех устройств отключены.", @@ -778,7 +778,7 @@ "Search…": "Поиск…", "You have successfully set a password and an email address!": "Вы успешно установили пароль и email!", "Remove %(name)s from the directory?": "Удалить %(name)s из каталога?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot использует многие передовые возможности браузера, некоторые из которых недоступны или являются экспериментальным в вашем текущем браузере.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s использует многие передовые возможности браузера, некоторые из которых недоступны или являются экспериментальным в вашем текущем браузере.", "Developer Tools": "Инструменты разработчика", "Preparing to send logs": "Подготовка к отправке журналов", "Explore Account Data": "Просмотр данных учётной записи", @@ -821,8 +821,8 @@ "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.": "Журналы отладки содержат данные об использовании приложения, включая ваше имя пользователя, идентификаторы или псевдонимы комнат или групп, которые вы посетили, а также имена других пользователей. Они не содержат сообщений.", "Unhide Preview": "Показать предварительный просмотр", "Unable to join network": "Не удается подключиться к сети", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Возможно, вы настроили их не в Riot, а в другом Matrix-клиенте. Настроить их в Riot не удастся, но они будут продолжать работать и здесь", - "Sorry, your browser is not able to run Riot.": "К сожалению, ваш браузер не способен запустить Riot.", + "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, а в другом Matrix-клиенте. Настроить их в %(brand)s не удастся, но они будут продолжать работать и здесь", + "Sorry, your browser is not able to run %(brand)s.": "К сожалению, ваш браузер не способен запустить %(brand)s.", "Messages in group chats": "Сообщения в конференциях", "Yesterday": "Вчера", "Error encountered (%(errorDetail)s).": "Обнаружена ошибка (%(errorDetail)s).", @@ -830,7 +830,7 @@ "Unable to fetch notification target list": "Не удалось получить список устройств для уведомлений", "Set Password": "Задать пароль", "Off": "Выключить", - "Riot does not know how to join a room on this network": "Riot не знает, как присоединиться к комнате в этой сети", + "%(brand)s does not know how to join a room on this network": "%(brand)s не знает, как присоединиться к комнате в этой сети", "Mentions only": "Только при упоминаниях", "Wednesday": "Среда", "You can now return to your account after signing out, and sign in on other devices.": "Теперь вы сможете вернуться к своей учётной записи после выхода и войти на других устройствах.", @@ -874,8 +874,8 @@ "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:": "Чтобы продолжить, введите пароль:", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Пожалуйста, помогите улучшить Riot.im, отправляя анонимные данные использования. При этом будут использоваться cookie (ознакомьтесь с нашейПолитикой cookie).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Пожалуйста, помогите улучшить Riot.im, отправляя анонимные данные использования. При этом будут использоваться cookie.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Пожалуйста, помогите улучшить %(brand)s, отправляя анонимные данные использования. При этом будут использоваться cookie (ознакомьтесь с нашейПолитикой cookie).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Пожалуйста, помогите улучшить %(brand)s, отправляя анонимные данные использования. При этом будут использоваться cookie.", "Yes, I want to help!": "Да, я хочу помочь!", "Can't leave Server Notices room": "Невозможно покинуть комнату сервера уведомлений", "This room is used for important messages from the Homeserver, so you cannot leave it.": "Эта комната используется для важных сообщений от сервера, поэтому вы не можете ее покинуть.", @@ -1016,7 +1016,7 @@ "Theme": "Тема", "Account management": "Управление учётной записью", "Deactivating your account is a permanent action - be careful!": "Деактивация вашей учётной записи — это необратимое действие. Будьте осторожны!", - "Chat with Riot Bot": "Чат с ботом Riot", + "Chat with %(brand)s Bot": "Чат с ботом %(brand)s", "Help & About": "Помощь & О программе", "FAQ": "Часто задаваемые вопросы", "Versions": "Версии", @@ -1067,7 +1067,7 @@ "Begin Verifying": "Начать проверку", "Incoming Verification Request": "Входящий запрос о проверке", "Clear cache and resync": "Очистить кэш и выполнить повторную синхронизацию", - "Updating Riot": "Обновление Riot", + "Updating %(brand)s": "Обновление %(brand)s", "Report bugs & give feedback": "Сообщайте об ошибках и оставляйте отзывы", "Go back": "Назад", "Failed to upgrade room": "Не удалось обновить комнату", @@ -1205,8 +1205,8 @@ "Missing media permissions, click the button below to request.": "Отсутствуют разрешения для доступа к камере/микрофону. Нажмите кнопку ниже, чтобы запросить их.", "Request media permissions": "Запросить доступ к медиа носителю", "Change room name": "Изменить название комнаты", - "For help with using Riot, click here.": "Для получения помощи по использованию Riot, нажмите здесь.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Для получения помощи по использованию Riot, нажмите здесь или начните чат с нашим ботом с помощью кнопки ниже.", + "For help with using %(brand)s, click here.": "Для получения помощи по использованию %(brand)s, нажмите здесь.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Для получения помощи по использованию %(brand)s, нажмите здесь или начните чат с нашим ботом с помощью кнопки ниже.", "Bug reporting": "Сообщить об ошибке", "Open Devtools": "Открыть инструменты разработчика", "Change room avatar": "Изменить аватар комнаты", @@ -1328,8 +1328,8 @@ "Notes": "Заметка", "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.": "Если есть дополнительный контекст, который может помочь в анализе проблемы, такой как то, что вы делали в то время, ID комнат, ID пользователей и т. д., пожалуйста, включите эти данные.", "Unable to load commit detail: %(msg)s": "Невозможно загрузить детали: %(msg)s", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Чтобы не потерять историю чата, вы должны экспортировать ключи от комнаты перед выходом из системы. Для этого вам нужно будет вернуться к более новой версии Riot", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "В прошлый раз вы использовали более новую версию Riot на сервере %(host)s. Чтобы снова использовать эту версию со сквозным шифрованием, вам нужно выйти и снова войти. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Чтобы не потерять историю чата, вы должны экспортировать ключи от комнаты перед выходом из системы. Для этого вам нужно будет вернуться к более новой версии %(brand)s", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "В прошлый раз вы использовали более новую версию %(brand)s на сервере %(host)s. Чтобы снова использовать эту версию со сквозным шифрованием, вам нужно выйти и снова войти. ", "Waiting for partner to accept...": "Ожидание подтверждения партнера...", "Nothing appearing? Not all clients support interactive verification yet. .": "Ничего не появляется? Еще не все клиенты поддерживают интерактивную проверку. .", "Waiting for %(userId)s to confirm...": "Ожидание подтверждения от %(userId)s...", @@ -1337,9 +1337,9 @@ "View Servers in Room": "Просмотр серверов в комнате", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Проверьте этого пользователя, чтобы отметить его как доверенного. Доверенные пользователи дают вам больше уверенности при использовании шифрованных сообщений.", "Waiting for partner to confirm...": "Ожидание подтверждения партнера...", - "You've previously used Riot 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, Riot needs to resync your account.": "Ранее вы использовали Riot на %(host)s с отложенной загрузкой участников. В этой версии отложенная загрузка отключена. Поскольку локальный кеш не совместим между этими двумя настройками, Riot необходимо повторно синхронизировать вашу учётную запись.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Если другая версия Riot все еще открыта на другой вкладке, закройте ее, так как использование Riot на том же хосте с включенной и отключенной ленивой загрузкой одновременно вызовет проблемы.", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot теперь использует в 3-5 раз меньше памяти, загружая информацию о других пользователях только когда это необходимо. Пожалуйста, подождите, пока мы ресинхронизируемся с сервером!", + "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.": "Ранее вы использовали %(brand)s на %(host)s с отложенной загрузкой участников. В этой версии отложенная загрузка отключена. Поскольку локальный кеш не совместим между этими двумя настройками, %(brand)s необходимо повторно синхронизировать вашу учётную запись.", + "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.": "Если другая версия %(brand)s все еще открыта на другой вкладке, закройте ее, так как использование %(brand)s на том же хосте с включенной и отключенной ленивой загрузкой одновременно вызовет проблемы.", + "%(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!": "%(brand)s теперь использует в 3-5 раз меньше памяти, загружая информацию о других пользователях только когда это необходимо. Пожалуйста, подождите, пока мы ресинхронизируемся с сервером!", "I don't want my encrypted messages": "Мне не нужны мои зашифрованные сообщения", "Manually export keys": "Экспортировать ключи вручную", "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Если вы заметили ошибку или хотите оставить отзыв, пожалуйста, сообщите нам на GitHub.", @@ -1415,8 +1415,8 @@ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Вы являетесь администратором этого сообщества. Вы не сможете вернуться без приглашения от другого администратора.", "Want more than a community? Get your own server": "Хотите больше, чем просто сообщество? Получите свой собственный сервер", "This homeserver does not support communities": "Этот сервер не поддерживает сообщества", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot не смог получить список протоколов с сервера.Сервер может быть слишком старым для поддержки сетей сторонних производителей.", - "Riot failed to get the public room list.": "Riot не смог получить список публичных комнат.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s не смог получить список протоколов с сервера.Сервер может быть слишком старым для поддержки сетей сторонних производителей.", + "%(brand)s failed to get the public room list.": "%(brand)s не смог получить список публичных комнат.", "The homeserver may be unavailable or overloaded.": "Сервер может быть недоступен или перегружен.", "Add room": "Добавить комнату", "You have %(count)s unread notifications in a prior version of this room.|other": "У вас есть %(count)s непрочитанных уведомлений в предыдущей версии этой комнаты.", @@ -1476,8 +1476,8 @@ "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.": "Если вы не убрали метод восстановления, злоумышленник может получить доступ к вашей учётной записи. Смените пароль учётной записи и сразу задайте новый способ восстановления в настройках.", "Cannot reach homeserver": "Не удаётся связаться с сервером", "Ensure you have a stable internet connection, or get in touch with the server admin": "Убедитесь, что у вас есть стабильное подключение к интернету, или свяжитесь с администратором сервера", - "Your Riot is misconfigured": "Ваш Riot неправильно настроен", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Попросите администратора Riot проверить конфигурационный файл на наличие неправильных или повторяющихся записей.", + "Your %(brand)s is misconfigured": "Ваш %(brand)s неправильно настроен", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Попросите администратора %(brand)s проверить конфигурационный файл на наличие неправильных или повторяющихся записей.", "Unexpected error resolving identity server configuration": "Неопределённая ошибка при разборе параметра сервера идентификации", "Use lowercase letters, numbers, dashes and underscores only": "Используйте только строчные буквы, цифры, тире и подчеркивания", "Cannot reach identity server": "Не удаётся связаться с сервером идентификации", @@ -1652,10 +1652,10 @@ "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?": "Деактивация этого пользователя приведет к его выходу из системы и запрету повторного входа. Кроме того, они оставит все комнаты, в которых он участник. Это действие безповоротно. Вы уверены, что хотите деактивировать этого пользователя?", "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). Вы можете попробовать передать эту информацию администратору комнаты.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Приглашение в %(roomName)s было отправлено на %(email)s, но этот адрес не связан с вашей учётной записью", - "Link this email with your account in Settings to receive invites directly in Riot.": "Свяжите этот адрес с вашей учетной записью в настройках, чтобы получать приглашения непосредственно в Riot.", + "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": "Это приглашение в %(roomName)s было отправлено на %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Используйте сервер идентификации в Настройках для получения приглашений непосредственно в Riot.", - "Share this email in Settings to receive invites directly in Riot.": "Введите адрес эл.почты в Настройках, чтобы получать приглашения прямо в Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Используйте сервер идентификации в Настройках для получения приглашений непосредственно в %(brand)s.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Введите адрес эл.почты в Настройках, чтобы получать приглашения прямо в %(brand)s.", "%(count)s unread messages including mentions.|other": "%(count)s непрочитанные сообщения, включая упоминания.", "Failed to deactivate user": "Не удалось деактивировать пользователя", "This client does not support end-to-end encryption.": "Этот клиент не поддерживает сквозное шифрование.", @@ -1718,7 +1718,7 @@ "Error upgrading room": "Ошибка обновления комнаты", "Match system theme": "Тема системы", "Show tray icon and minimize window to it on close": "Показать иконку в панели задач и свернуть окно при закрытии", - "The version of Riot": "Версия Riot", + "The version of %(brand)s": "Версия %(brand)s", "Show typing notifications": "Показывать уведомления о наборе", "Delete %(count)s sessions|other": "Удалить %(count)s сессий", "Enable desktop notifications for this session": "Включить уведомления для рабочего стола для этой сессии", @@ -1817,10 +1817,10 @@ "Show less": "Показать меньше", "Show more": "Показать больше", "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.": "Если вы не экспортируете ключи для этой комнаты и не импортируете их в будущем, смена пароля приведёт к сбросу всех ключей сквозного шифрования и сделает невозможным чтение истории чата. В будущем это будет улучшено.", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Используете ли вы Riot на устройстве с тач-дисплеем в качестве основного способа ввода", - "Whether you're using Riot as an installed Progressive Web App": "Используете ли вы Riot в виде установленного прогрессивного веб-приложения", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Используете ли вы %(brand)s на устройстве с тач-дисплеем в качестве основного способа ввода", + "Whether you're using %(brand)s as an installed Progressive Web App": "Используете ли вы %(brand)s в виде установленного прогрессивного веб-приложения", "Your user agent": "Ваш юзер-агент", - "The information being sent to us to help make Riot better includes:": "Информация, которая отправляется нам для улучшения Riot, включает в себя:", + "The information being sent to us to help make %(brand)s better includes:": "Информация, которая отправляется нам для улучшения %(brand)s, включает в себя:", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "В комнате присутствуют неизвестные сессии: если вы продолжите без подтверждения, возможно, кто-то сможет подслушать ваш звонок.", "Review Sessions": "Просмотреть сессии", "Unverified login. Was this you?": "Неподтверждённый вход. Это были вы?", @@ -1916,7 +1916,7 @@ "View rules": "Посмотреть правила", "You are currently subscribed to:": "Вы подписаны на:", "Security": "Безопасность", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Сессия, которую вы подтверждаете, не поддерживает проверку с помощью сканирования QR-кодов или смайлов, как в Riot. Попробуйте другой клиент.", + "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.": "Сессия, которую вы подтверждаете, не поддерживает проверку с помощью сканирования QR-кодов или смайлов, как в %(brand)s. Попробуйте другой клиент.", "Verify by scanning": "Подтверждение сканированием", "Ask %(displayName)s to scan your code:": "Попросите %(displayName)s отсканировать ваш код:", "Verify by emoji": "Подтверждение с помощью смайлов", @@ -2077,7 +2077,7 @@ "Any of the following data may be shared:": "Следующие сведения могут быть переданы:", "Your user ID": "ID пользователя", "Your theme": "Ваша тема", - "Riot URL": "Ссылка на Riot", + "%(brand)s URL": "Ссылка на %(brand)s", "Room ID": "ID комнаты", "Widget ID": "ID виджета", "Widget added by": "Виджет добавлен", @@ -2125,7 +2125,7 @@ "Securely cache encrypted messages locally for them to appear in search results, using ": "Кэшировать шифрованные сообщения локально, чтобы они выводились в результатах поиска, используя: ", " to store messages from ": " чтобы сохранить сообщения от ", "Securely cache encrypted messages locally for them to appear in search results.": "Безопасно кэшировать шифрованные сообщения локально, чтобы они появлялись в результатах поиска.", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Отсутствуют некоторые необходимые компоненты для Riot, чтобы безопасно кэшировать шифрованные сообщения локально. Если вы хотите попробовать эту возможность, соберите самостоятельно Riot Desktop с добавлением поисковых компонентов.", + "%(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 Desktop с добавлением поисковых компонентов.", "not stored": "не сохранено", "Backup has a valid signature from this session": "У резервной копии верная подпись этой сессии", "Backup has an invalid signature from this session": "У резервной копии неверная подпись этой сессии", @@ -2134,7 +2134,7 @@ "Backup has an invalid signature from verified session ": "У резервной копии невернаяподпись проверенной сессии ", "Backup has an invalid signature from unverified session ": "У резервной копии неверная подпись непроверенной сессии ", "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Ваш пароль был успешно изменён. Вы не будете получать уведомления в других сессия, пока вы не войдёте в них", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Добавьте пользователей и серверы, которых вы хотите игнорировать. Используйте звёздочки для совпадения с любыми символами. Например, @bot:* приведёт к игнорированию всех пользователей на любом сервере, у которых есть 'bot' в имени.", + "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.": "Добавьте пользователей и серверы, которых вы хотите игнорировать. Используйте звёздочки для совпадения с любыми символами. Например, @bot:* приведёт к игнорированию всех пользователей на любом сервере, у которых есть 'bot' в имени.", "This room is bridging messages to the following platforms. Learn more.": "Эта комната пересылает сообщения с помощью моста на следующие платформы. Подробнее", "This room isn’t bridging messages to any platforms. Learn more.": "Эта комната не пересылает никуда сообщения с помощью моста. Подробнее", "Your key share request has been sent - please check your other sessions for key share requests.": "Запрос ключа был отправлен - проверьте другие ваши сессии на предмет таких запросов.", diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json index 0756f8d3e8..89aabcdc2f 100644 --- a/src/i18n/strings/sk.json +++ b/src/i18n/strings/sk.json @@ -48,8 +48,8 @@ "Failed to invite users to community": "Do komunity sa nepodarilo pozvať používateľov", "Failed to invite users to %(groupId)s": "Do komunity %(groupId)s sa nepodarilo pozvať používateľov", "Failed to add the following rooms to %(groupId)s:": "Do komunity %(groupId)s sa nepodarilo pridať nasledujúce miestnosti:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot nemá udelené povolenie, aby vám mohol posielať oznámenia - Prosím, skontrolujte nastavenia vašeho prehliadača", - "Riot was not given permission to send notifications - please try again": "Aplikácii Riot nebolo udelené povolenie potrebné pre posielanie oznámení - prosím, skúste to znovu", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s nemá udelené povolenie, aby vám mohol posielať oznámenia - Prosím, skontrolujte nastavenia vašeho prehliadača", + "%(brand)s was not given permission to send notifications - please try again": "Aplikácii %(brand)s nebolo udelené povolenie potrebné pre posielanie oznámení - prosím, skúste to znovu", "Unable to enable Notifications": "Nie je možné povoliť oznámenia", "This email address was not found": "Túto emailovú adresu sa nepodarilo nájsť", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Zdá sa, že vaša emailová adresa nie je priradená k žiadnemu Matrix ID na tomto domovskom serveri.", @@ -128,7 +128,7 @@ "Server may be unavailable, overloaded, or you hit a bug.": "Server môže byť nedostupný, preťažený, alebo ste narazili na chybu.", "Unnamed Room": "Nepomenovaná miestnosť", "Your browser does not support the required cryptography extensions": "Váš prehliadač nepodporuje požadované kryptografické rozšírenia", - "Not a valid Riot keyfile": "Toto nie je správny súbor s kľúčami Riot", + "Not a valid %(brand)s keyfile": "Toto nie je správny súbor s kľúčami %(brand)s", "Authentication check failed: incorrect password?": "Kontrola overenia zlyhala: Nesprávne heslo?", "Failed to join room": "Nepodarilo sa vstúpiť do miestnosti", "Active call (%(roomName)s)": "Aktívny hovor (%(roomName)s)", @@ -438,7 +438,7 @@ "Ignore request": "Ignorovať žiadosť", "Encryption key request": "Žiadosť o šifrovacie kľúče", "Unable to restore session": "Nie je možné obnoviť reláciu", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Ak ste sa v minulosti prihlásili s novšou verziou programu Riot, vaša relácia nemusí byť kompatibilná s touto verziou. Zatvorte prosím toto okno a vráťte sa cez najnovšiu verziu Riot.", + "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.": "Ak ste sa v minulosti prihlásili s novšou verziou programu %(brand)s, vaša relácia nemusí byť kompatibilná s touto verziou. Zatvorte prosím toto okno a vráťte sa cez najnovšiu verziu %(brand)s.", "Invalid Email Address": "Nesprávna emailová adresa", "This doesn't appear to be a valid email address": "Zdá sa, že toto nie je platná emailová adresa", "Verification Pending": "Nedokončené overenie", @@ -552,13 +552,13 @@ "Import E2E room keys": "Importovať E2E šifrovacie kľúče miestností", "Cryptography": "Kryptografia", "Analytics": "Analytické údaje", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot zbiera anonymné analytické údaje, čo nám umožňuje aplikáciu ďalej zlepšovať.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s zbiera anonymné analytické údaje, čo nám umožňuje aplikáciu ďalej zlepšovať.", "Labs": "Experimenty", "Check for update": "Skontrolovať dostupnosť aktualizácie", "Reject all %(invitedRooms)s invites": "Odmietnuť všetky %(invitedRooms)s pozvania", "Start automatically after system login": "Spustiť automaticky po prihlásení do systému", "No media permissions": "Nepovolený prístup k médiám", - "You may need to manually permit Riot to access your microphone/webcam": "Mali by ste aplikácii Riot ručne udeliť právo pristupovať k mikrofónu a kamere", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Mali by ste aplikácii %(brand)s ručne udeliť právo pristupovať k mikrofónu a kamere", "No Microphones detected": "Neboli rozpoznané žiadne mikrofóny", "No Webcams detected": "Neboli rozpoznané žiadne kamery", "Default Device": "Predvolené zariadenie", @@ -572,7 +572,7 @@ "click to reveal": "Odkryjete kliknutím", "Homeserver is": "Domovský server je", "Identity Server is": "Server totožností je", - "riot-web version:": "Verzia riot-web:", + "%(brand)s version:": "Verzia %(brand)s:", "olm version:": "Verzia olm:", "Failed to send email": "Nepodarilo sa odoslať email", "The email address linked to your account must be entered.": "Musíte zadať emailovú adresu prepojenú s vašim účtom.", @@ -664,7 +664,7 @@ "collapse": "zbaliť", "expand": "rozbaliť", "Old cryptography data detected": "Nájdené zastaralé kryptografické údaje", - "Data from an older version of Riot 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.": "Boli nájdené údaje zo staršej verzie Riot. Toto spôsobí, že E2E šifrovanie nebude v staršej verzii Riot fungovať. Zašifrované správy prijaté a odoslané v poslednom čase cez staršiu verziu Riot nemusia byť čitateľné v tejto verzii Riot. Môže to tiež spôsobiť, že šifrované konverzácie nebudú s touto verziou Riot čitateľné. Ak spozorujete niektoré s týchto problémov, odhláste sa a opätovne sa prihláste prosím. Históriu šifrovaných konverzácií zachováte tak, že si exportujete a znovu importujete kľúče miestností.", + "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.": "Boli nájdené údaje zo staršej verzie %(brand)s. Toto spôsobí, že E2E šifrovanie nebude v staršej verzii %(brand)s fungovať. Zašifrované správy prijaté a odoslané v poslednom čase cez staršiu verziu %(brand)s nemusia byť čitateľné v tejto verzii %(brand)s. Môže to tiež spôsobiť, že šifrované konverzácie nebudú s touto verziou %(brand)s čitateľné. Ak spozorujete niektoré s týchto problémov, odhláste sa a opätovne sa prihláste prosím. Históriu šifrovaných konverzácií zachováte tak, že si exportujete a znovu importujete kľúče miestností.", "Warning": "Upozornenie", "This homeserver doesn't offer any login flows which are supported by this client.": "Tento domovský server neponúka žiadny prihlasovací mechanizmus podporovaný vašim klientom.", "Flair": "Príslušnosť ku komunitám", @@ -684,12 +684,12 @@ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Znovu odoslať správu alebo zrušiť správu teraz.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Vaše súkromie je pre nás dôležité, preto nezhromažďujeme žiadne osobné údaje alebo údaje, na základe ktorých je možné vás identifikovať.", "Learn more about how we use analytics.": "Zistite viac o tom, ako spracúvame analytické údaje.", - "The information being sent to us to help make Riot.im better includes:": "S cieľom vylepšovať aplikáciu Riot.im zbierame nasledujúce údaje:", + "The information being sent to us to help make %(brand)s better includes:": "S cieľom vylepšovať aplikáciu %(brand)s zbierame nasledujúce údaje:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Ak sa na stránke vyskytujú identifikujúce údaje, akými sú napríklad názov miestnosti, ID používateľa, miestnosti alebo skupiny, tieto sú pred odoslaním na server odstránené.", "The platform you're on": "Vami používaná platforma", - "The version of Riot.im": "Verzia Riot.im", + "The version of %(brand)s": "Verzia %(brand)s", "Your language of choice": "Váš uprednostňovaný jazyk", - "Which officially provided instance you are using, if any": "Cez ktorú oficiálne podporovanú inštanciu Riot.im ste pripojení (ak nehostujete Riot sami)", + "Which officially provided instance you are using, if any": "Cez ktorú oficiálne podporovanú inštanciu %(brand)s ste pripojení (ak nehostujete %(brand)s sami)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Či pri písaní správ používate rozbalenú lištu formátovania textu", "Your homeserver's URL": "URL adresa vami používaného domovského servera", "Your identity server's URL": "URL adresa vami používaného servera totožností", @@ -708,8 +708,8 @@ "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "Zmeny vykonané vo vašej komunite názov a obrázok nemusia byť nasledujúcich 30 minút viditeľné všetkými používateľmi.", "Join this community": "Vstúpiť do tejto komunity", "Leave this community": "Opustiť túto komunitu", - "Did you know: you can use communities to filter your Riot.im experience!": "Vedeli ste: Že prácu s Riot.im si môžete spríjemníť použitím komunít!", - "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.": "Ak si chcete nastaviť filter, pretiahnite obrázok komunity na panel filtrovania úplne na ľavej strane obrazovky. Potom môžete kedykoľvek kliknúť na obrázok komunity na tomto panely a Riot.im vám bude zobrazovať len miestnosti a ľudí z komunity, na ktorej obrázok ste klikli.", + "Did you know: you can use communities to filter your %(brand)s experience!": "Vedeli ste: Že prácu s %(brand)s si môžete spríjemníť použitím komunít!", + "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.": "Ak si chcete nastaviť filter, pretiahnite obrázok komunity na panel filtrovania úplne na ľavej strane obrazovky. Potom môžete kedykoľvek kliknúť na obrázok komunity na tomto panely a %(brand)s vám bude zobrazovať len miestnosti a ľudí z komunity, na ktorej obrázok ste klikli.", "Clear filter": "Zrušiť filter", "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.": "Ak ste nám poslali hlásenie o chybe cez Github, ladiace záznamy nám môžu pomôcť lepšie identifikovať chybu. Ladiace záznamy obsahujú údaje o používaní aplikácii, vrátane vašeho používateľského mena, názvy a aliasy miestností a komunít, ku ktorým ste sa pripojili a mená ostatných používateľov. Tieto záznamy neobsahujú samotný obsah vašich správ.", "Submit debug logs": "Odoslať ladiace záznamy", @@ -721,7 +721,7 @@ "Who can join this community?": "Kto môže vstúpiť do tejto komunity?", "Everyone": "Ktokoľvek", "Fetching third party location failed": "Nepodarilo sa získať umiestnenie tretej strany", - "A new version of Riot is available.": "Dostupná je nová verzia Riot.", + "A new version of %(brand)s is available.": "Dostupná je nová verzia %(brand)s.", "Send Account Data": "Odoslať Údaje Účtu", "All notifications are currently disabled for all targets.": "Momentálne sú zakázané všetky oznámenia pre všetky ciele.", "Uploading report": "Prebieha odovzdanie hlásenia", @@ -776,7 +776,7 @@ "Enter keywords separated by a comma:": "Zadajte kľúčové slová oddelené čiarkou:", "Forward Message": "Preposlať správu", "Remove %(name)s from the directory?": "Odstrániť miestnosť %(name)s z adresára?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot sa spolieha na mnohé pokročilé vlastnosti prehliadača internetu, a niektoré z nich sú vo vašom prehliadači experimentálne alebo nie sú k dispozícii vôbec.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s sa spolieha na mnohé pokročilé vlastnosti prehliadača internetu, a niektoré z nich sú vo vašom prehliadači experimentálne alebo nie sú k dispozícii vôbec.", "Event sent!": "Udalosť odoslaná!", "Preparing to send logs": "príprava odoslania záznamov", "Explore Account Data": "Preskúmať Údaje účtu", @@ -822,8 +822,8 @@ "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.": "Ladiace záznamy obsahujú údaje o používaní aplikácii, vrátane vašeho používateľského mena, názvy a aliasy miestností a komunít, ku ktorým ste sa pripojili a mená ostatných používateľov. Tieto záznamy neobsahujú samotný obsah vašich správ.", "Unhide Preview": "Zobraziť náhľad", "Unable to join network": "Nie je možné sa pripojiť k sieti", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Tieto nastavenia oznámení sa použijú aj napriek tomu, že ich nemôžete meniť cez Riot. Pravdepodobne ste si ich nastavili v inej aplikácii", - "Sorry, your browser is not able to run Riot.": "Prepáčte, vo vašom prehliadači nie je možné spustiť Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Tieto nastavenia oznámení sa použijú aj napriek tomu, že ich nemôžete meniť cez %(brand)s. Pravdepodobne ste si ich nastavili v inej aplikácii", + "Sorry, your browser is not able to run %(brand)s.": "Prepáčte, vo vašom prehliadači nie je možné spustiť %(brand)s.", "Messages in group chats": "Správy v skupinových konverzáciách", "Yesterday": "Včera", "Error encountered (%(errorDetail)s).": "Vyskytla sa chyba (%(errorDetail)s).", @@ -833,7 +833,7 @@ "Set Password": "Nastaviť Heslo", "An error occurred whilst saving your email notification preferences.": "Počas ukladania vašich nastavení oznamovania emailom sa vyskytla chyba.", "Off": "Zakázané", - "Riot does not know how to join a room on this network": "Riot nedokáže vstúpiť do miestnosti na tejto sieti", + "%(brand)s does not know how to join a room on this network": "%(brand)s nedokáže vstúpiť do miestnosti na tejto sieti", "Mentions only": "Len zmienky", "You can now return to your account after signing out, and sign in on other devices.": "Odteraz sa budete k svojmu účtu vedieť vrátiť aj po odhlásení, alebo tiež prihlásiť na iných zariadeniach.", "Enable email notifications": "Povoliť oznamovanie emailom", @@ -845,7 +845,7 @@ "View Source": "Zobraziť zdroj", "Event Content": "Obsah Udalosti", "Thank you!": "Ďakujeme!", - "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!": "Vo vašom súčasnom prehliadači nemusí Riot vizerať ani fungovať správne a niektoré alebo všetky vlastnosti môžu chýbať. Ak to chcete vyskúšať, môžete pokračovať, no pri riešení problémov s tým spojených si budete musieť poradiť na vlastnú päsť!", + "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!": "Vo vašom súčasnom prehliadači nemusí %(brand)s vizerať ani fungovať správne a niektoré alebo všetky vlastnosti môžu chýbať. Ak to chcete vyskúšať, môžete pokračovať, no pri riešení problémov s tým spojených si budete musieť poradiť na vlastnú päsť!", "Checking for an update...": "Kontrola dostupnosti aktualizácie…", "There are advanced notifications which are not shown here": "Niektoré pokročilé oznámenia nemôžu byť zobrazené", "Every page you use in the app": "Každú stránku v aplikácii, ktorú navštívite", @@ -866,8 +866,8 @@ "Send analytics data": "Odosielať analytické údaje", "Enable widget screenshots on supported widgets": "Umožniť zachytiť snímku obrazovky pre podporované widgety", "Muted Users": "Umlčaní používatelia", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Prosím pomôžte nám vylepšovať Riot.im odosielaním anonymných údajov o používaní. Na tento účel použijeme cookie (prečítajte si ako používame cookies).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Prosím pomôžte nám vylepšovať Riot.im odosielaním anonymných údajov o používaní. Na tento účel použijeme cookie.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Prosím pomôžte nám vylepšovať %(brand)s odosielaním anonymných údajov o používaní. Na tento účel použijeme cookie (prečítajte si ako používame cookies).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Prosím pomôžte nám vylepšovať %(brand)s odosielaním anonymných údajov o používaní. Na tento účel použijeme cookie.", "Yes, I want to help!": "Áno, chcem pomôcť", "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.": "Toto spôsobí, že váš účet nebude viac použiteľný. Nebudete sa môcť opätovne prihlásiť a nikto sa nebude môcť znovu zaregistrovať s rovnakým používateľským ID. Deaktiváciou účtu opustíte všetky miestnosti, do ktorých ste kedy vstúpili a vaše kontaktné údaje budú odstránené zo servera totožností. Túto akciu nie je možné vrátiť späť.", "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.": "Pri deaktivácii účtu predvolene neodstraňujeme vami odoslané správy. Ak si želáte uplatniť právo zabudnutia, zaškrtnite prosím zodpovedajúce pole nižšie.", @@ -944,8 +944,8 @@ "%(senderName)s removed the main address for this room.": "%(senderName)s odstránil hlavnú adresu tejto miestnosti.", "Unable to connect to Homeserver. Retrying...": "Nie je možné sa pripojiť k domovskému serveru. Prebieha pokus o opetovné pripojenie…", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Pred tým, než odošlete záznamy, musíte nahlásiť váš problém na GitHub. Uvedte prosím podrobný popis.", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot teraz vyžaduje 3-5× menej pamäte, pretože informácie o ostatných používateľoch načítava len podľa potreby. Prosím počkajte na dokončenie synchronizácie so serverom!", - "Updating Riot": "Prebieha aktualizácia Riot", + "%(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!": "%(brand)s teraz vyžaduje 3-5× menej pamäte, pretože informácie o ostatných používateľoch načítava len podľa potreby. Prosím počkajte na dokončenie synchronizácie so serverom!", + "Updating %(brand)s": "Prebieha aktualizácia %(brand)s", "Legal": "Právne", "Unable to load! Check your network connectivity and try again.": "Nie je možné načítať! Skontrolujte prístup na internet a skúste neskôr.", "Failed to invite users to the room:": "Používateľov sa nepodarilo pozvať do miestnosti:", @@ -1002,12 +1002,12 @@ "That doesn't look like a valid email address": "Zdá sa, že toto nie je platná emailová adresa", "The following users may not exist": "Nasledujúci používatelia pravdepodobne neexistujú", "Unable to load commit detail: %(msg)s": "Nie je možné načítať podrobnosti pre commit: %(msg)s", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Aby ste po odhlásení neprišli o možnosť čítať históriu šifrovaných konverzácií, mali by ste si ešte pred odhlásením exportovať šifrovacie kľúče miestností. Prosím vráťte sa k novšej verzii Riot a exportujte si kľúče", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Už ste použili novšiu verziu Riot na adrese %(host)s. Ak chcete znovu používať túto verziu aj s E2E šifrovaním, musíte sa odhlásiť a potom zas znovu prihlásiť. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Aby ste po odhlásení neprišli o možnosť čítať históriu šifrovaných konverzácií, mali by ste si ešte pred odhlásením exportovať šifrovacie kľúče miestností. Prosím vráťte sa k novšej verzii %(brand)s a exportujte si kľúče", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Už ste použili novšiu verziu %(brand)s na adrese %(host)s. Ak chcete znovu používať túto verziu aj s E2E šifrovaním, musíte sa odhlásiť a potom zas znovu prihlásiť. ", "Incompatible Database": "Nekompatibilná databáza", "Continue With Encryption Disabled": "Pokračovať s vypnutým šifrovaním", - "You've previously used Riot 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, Riot needs to resync your account.": "Použili ste aj Riot na adrese %(host)s so zapnutou voľbou Načítanie zoznamu členov pri prvom zobrazení. V tejto verzii je Načítanie zoznamu členov pri prvom zobrazení vypnuté. Keď že lokálna vyrovnávacia pamäť nie je vzájomne kompatibilná s takýmito nastaveniami, Riot potrebuje znovu synchronizovať údaje z vašeho účtu.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Ak máte Riot s iným nastavením otvorený na ďalšej karte, prosím zatvorte ju, pretože použitie Riot s rôznym nastavením na jednom zariadení vám spôsobí len problémy.", + "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.": "Použili ste aj %(brand)s na adrese %(host)s so zapnutou voľbou Načítanie zoznamu členov pri prvom zobrazení. V tejto verzii je Načítanie zoznamu členov pri prvom zobrazení vypnuté. Keď že lokálna vyrovnávacia pamäť nie je vzájomne kompatibilná s takýmito nastaveniami, %(brand)s potrebuje znovu synchronizovať údaje z vašeho účtu.", + "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.": "Ak máte %(brand)s s iným nastavením otvorený na ďalšej karte, prosím zatvorte ju, pretože použitie %(brand)s s rôznym nastavením na jednom zariadení vám spôsobí len problémy.", "Incompatible local cache": "Nekompatibilná lokálna vyrovnávacia pamäť", "Clear cache and resync": "Vymazať vyrovnávaciu pamäť a synchronizovať znovu", "Checking...": "Kontrola…", @@ -1200,9 +1200,9 @@ "Deactivating your account is a permanent action - be careful!": "Buďte opatrní, deaktivácia účtu je nezvratná akcia!", "General": "Všeobecné", "Credits": "Poďakovanie", - "For help with using Riot, click here.": "Pomoc pri používaní Riot môžete získať kliknutím sem.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Pomoc pri používaní Riot môžete získať kliknutím sem, alebo začnite konverzáciu s našim robotom klepnutím na tlačidlo nižšie.", - "Chat with Riot Bot": "Konverzácia s Riot Bot", + "For help with using %(brand)s, click here.": "Pomoc pri používaní %(brand)s môžete získať kliknutím sem.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Pomoc pri používaní %(brand)s môžete získať kliknutím sem, alebo začnite konverzáciu s našim robotom klepnutím na tlačidlo nižšie.", + "Chat with %(brand)s Bot": "Konverzácia s %(brand)s Bot", "Help & About": "Pomocník & O programe", "Bug reporting": "Hlásenie chýb", "FAQ": "Často kladené otázky (FAQ)", @@ -1379,8 +1379,8 @@ "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s odvolal pozvanie vstúpiť do miestnosti pre %(targetDisplayName)s.", "Cannot reach homeserver": "Nie je možné pripojiť sa k domovskému serveru", "Ensure you have a stable internet connection, or get in touch with the server admin": "Uistite sa, že máte stabilné pripojenie na internet, alebo kontaktujte správcu servera", - "Your Riot is misconfigured": "Váš Riot nie je nastavený správne", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Požiadajte správcu, aby skontroloval vaše nastavenia na nesprávne alebo viacnásobne uvedené voľby.", + "Your %(brand)s is misconfigured": "Váš %(brand)s nie je nastavený správne", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Požiadajte správcu, aby skontroloval vaše nastavenia na nesprávne alebo viacnásobne uvedené voľby.", "Cannot reach identity server": "Nie je možné pripojiť sa k serveru totožností", "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.": "Môžete sa zaregistrovať, ale niektoré vlastnosti nebudú dostupné, kým server totožností nebude opäť v prevádzke. Ak sa toto upozornenie zobrazuje neustále, skontrolujte správnosť nastavení alebo kontaktujte správcu servera.", "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.": "Môžete si obnoviť heslo, ale niektoré vlastnosti nebudú dostupné, kým server totožností nebude opäť v prevádzke. Ak sa toto upozornenie zobrazuje neustále, skontrolujte správnosť nastavení alebo kontaktujte správcu servera.", @@ -1515,11 +1515,11 @@ "Confirm adding this phone number by using Single Sign On to prove your identity.": "Potvrďte pridanie telefónneho čísla pomocou Jednotného prihlásenia.", "Confirm adding phone number": "Potvrdiť pridanie telefónneho čísla", "Click the button below to confirm adding this phone number.": "Kliknutím na tlačítko potvrdíte pridanie telefónneho čísla.", - "The version of Riot": "Verzia Riotu", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Či používate Riot na zariadení, ktorého hlavným vstupným mechanizmom je dotyk (mobil, tablet,...)", - "Whether you're using Riot as an installed Progressive Web App": "Či používate Riot ako nainštalovanú Progresívnu Webovú Aplikáciu", + "The version of %(brand)s": "Verzia %(brand)su", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Či používate %(brand)s na zariadení, ktorého hlavným vstupným mechanizmom je dotyk (mobil, tablet,...)", + "Whether you're using %(brand)s as an installed Progressive Web App": "Či používate %(brand)s ako nainštalovanú Progresívnu Webovú Aplikáciu", "Your user agent": "Identifikátor vášho prehliadača", - "The information being sent to us to help make Riot better includes:": "Informácie, ktoré nám posielate, aby sme zlepšili Riot, zahŕňajú:", + "The information being sent to us to help make %(brand)s better includes:": "Informácie, ktoré nám posielate, aby sme zlepšili %(brand)s, zahŕňajú:", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "V miestnosti je neznáma relácia: pokiaľ budete pokračovať bez jej overenia, bude schopná odpočúvať váš hovor.", "Review Sessions": "Overiť reláciu", "If you cancel now, you won't complete verifying the other user.": "Pokiaľ teraz proces zrušíte, nedokončíte overenie druhého používateľa.", @@ -1605,7 +1605,7 @@ "You can now close this window or log in to your new account.": "Teraz môžete toto okno zavrieť alebo sa prihlásiť do vášho nového účtu.", "Registration Successful": "Úspešná registrácia", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Potvrďte svoju identitu overením tohto účtu z jednej z vašich iných relácií, čím mu povolíte prístup k šifrovaným správam.", - "This requires the latest Riot on your other devices:": "Toto vyžaduje najnovší Riot na vašich ostatných zariadeniach:", + "This requires the latest %(brand)s on your other devices:": "Toto vyžaduje najnovší %(brand)s na vašich ostatných zariadeniach:", "Use Recovery Passphrase or Key": "Použite (dlhé) heslo pre obnovu zálohy alebo kľúč", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Vaša nová relácia je teraz overená. Má prístup k vašim šifrovaným správam a ostatný používatelia ju uvidia ako dôveryhodnú.", "Your new session is now verified. Other users will see it as trusted.": "Vaša nová relácia je teraz overená. Ostatný používatelia ju uvidia ako dôveryhodnú.", @@ -1635,7 +1635,7 @@ "Compare unique emoji": "Porovnajte jedinečnú kombináciu emoji", "Compare a unique set of emoji if you don't have a camera on either device": "Pokiaľ nemáte na svojich zariadeniach kameru, porovnajte jedinečnú kombináciu emoji", "Confirm the emoji below are displayed on both sessions, in the same order:": "Potvrďte, že nasledujúce emoji sú zobrazené na oboch reláciach v rovnakom poradí:", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Relácia, ktorú sa snažíte overiť, nepodporuje overovanie QR kódom a ani pomocou emoji, čo sú funkcie, ktoré Riot podporuje. Skúste použiť iného klienta.", + "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.": "Relácia, ktorú sa snažíte overiť, nepodporuje overovanie QR kódom a ani pomocou emoji, čo sú funkcie, ktoré %(brand)s podporuje. Skúste použiť iného klienta.", "QR Code": "QR kód", "Enter your password to sign in and regain access to your account.": "Prihláste sa zadaním hesla a znovuzískajte prístup k vášmu účtu.", "Forgotten your password?": "Zabudli ste heslo?", @@ -1708,8 +1708,8 @@ "Manage": "Spravovať", "Securely cache encrypted messages locally for them to appear in search results.": "Bezpečne cachovať šifrované správy lokálne, aby sa mohli zobraziť vo vyhľadávaní.", "Enable": "Povoliť", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riotu chýbajú niektoré komponenty potrebné na bezpečné cachovanie šifrovaných správ lokálne. Pokiaľ chcete experimentovať s touto funkciou, spravte si svoj vlastný Riot Desktop s pridanými vyhľadávacími komponentami.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riotu nemôže bezpečne cachovať šifrované správy lokálne keď beží v prehliadači. Použite Riot Desktop, aby sa šifrované správy zobrazili vo vyhľadávaní.", + "%(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)su chýbajú niektoré komponenty potrebné na bezpečné cachovanie šifrovaných správ lokálne. Pokiaľ chcete experimentovať s touto funkciou, spravte si svoj vlastný %(brand)s Desktop s pridanými vyhľadávacími komponentami.", + "%(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)su nemôže bezpečne cachovať šifrované správy lokálne keď beží v prehliadači. Použite %(brand)s Desktop, aby sa šifrované správy zobrazili vo vyhľadávaní.", "This session is backing up your keys. ": "Táto relácia zálohuje vaše kľúče. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Táto relácia nezálohuje vaše kľúče, ale už máte jednu existujúcu zálohu z ktorej sa môžete obnoviť a postupne pridávať.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Pred odhlásením pripojte túto reláciu k zálohe kľúčov, aby ste predišli strate kľúčov, ktoré môžu byť len v tejto relácií.", @@ -1728,8 +1728,8 @@ "Enable audible notifications for this session": "Povoliť zvukové notifikácie pre túto reláciu", "Size must be a number": "Veľkosť musí byť číslo", "Custom font size can only be between %(min)s pt and %(max)s pt": "Vlastná veľkosť písma môže byť len v rozmedzí %(min)s pt až %(max)s pt", - "Help us improve Riot": "Pomôžte nám zlepšovať Riot", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Posielať anonymné dáta o používaní, ktoré nám pomôžu zlepšiť Riot. Toto bude vyžadovať sušienku.", + "Help us improve %(brand)s": "Pomôžte nám zlepšovať %(brand)s", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Posielať anonymné dáta o používaní, ktoré nám pomôžu zlepšiť %(brand)s. Toto bude vyžadovať sušienku.", "I want to help": "Chcem pomôcť", "Your homeserver has exceeded its user limit.": "Na vašom domovskom serveri bol prekročený limit počtu používateľov.", "Your homeserver has exceeded one of its resource limits.": "Na vašom domovskom serveri bol prekročený jeden z limitov systémových zdrojov.", @@ -1738,6 +1738,6 @@ "Set password": "Nastaviť heslo", "To return to your account in future you need to set a password": "Aby ste sa k účtu mohli vrátiť aj neskôr, je potrebné nastaviť heslo", "Restart": "Reštartovať", - "Upgrade your Riot": "Upgradujte svoj Riot", - "A new version of Riot is available!": "Nová verzia Riotu je dostupná!" + "Upgrade your %(brand)s": "Upgradujte svoj %(brand)s", + "A new version of %(brand)s is available!": "Nová verzia %(brand)su je dostupná!" } diff --git a/src/i18n/strings/sl.json b/src/i18n/strings/sl.json index cba7f4c067..764b80e449 100644 --- a/src/i18n/strings/sl.json +++ b/src/i18n/strings/sl.json @@ -3,9 +3,9 @@ "This phone number is already in use": "Ta telefonska številka je že v uporabi", "Failed to verify email address: make sure you clicked the link in the email": "E-poštnega naslova ni bilo mogoče preveriti: preverite, ali ste kliknili povezavo v e-poštnem sporočilu", "The platform you're on": "Vaša platforma", - "The version of Riot.im": "Različica Riot.im", + "The version of %(brand)s": "Različica %(brand)s", "Dismiss": "Opusti", - "Chat with Riot Bot": "Klepetajte z Riot Botom", + "Chat with %(brand)s Bot": "Klepetajte z %(brand)s Botom", "Sign In": "Prijava", "powered by Matrix": "poganja Matrix", "Custom Server Options": "Možnosti strežnika po meri", diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index ed5deada2d..edb9f3352f 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -3,14 +3,14 @@ "This phone number is already in use": "Ky numër telefoni është tashmë në përdorim", "Failed to verify email address: make sure you clicked the link in the email": "S’u arrit të verifikohej adresë email: sigurohuni se keni klikuar lidhjen te email-i", "The platform you're on": "Platforma ku gjendeni", - "The version of Riot.im": "Versioni i Riot.im-it", + "The version of %(brand)s": "Versioni i %(brand)s-it", "Your language of choice": "Gjuha juaj e zgjedhur", "Which officially provided instance you are using, if any": "Cilën instancë të furnizuar zyrtarish po përdorni, në pastë", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Nëse po përdorni apo jo mënyrën Richtext të Përpunuesit të Teksteve të Pasur", "Your homeserver's URL": "URL e Shërbyesit tuaj Home", "Your identity server's URL": "URL e shërbyesit tuaj të identiteteve", "Analytics": "Analiza", - "The information being sent to us to help make Riot.im better includes:": "Të dhënat që na dërgohen për të na ndihmuar ta bëjmë më të mirë Riot.im-in përfshijnë:", + "The information being sent to us to help make %(brand)s better includes:": "Të dhënat që na dërgohen për të na ndihmuar ta bëjmë më të mirë %(brand)s-in përfshijnë:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Kur kjo faqe përfshin të dhëna të identifikueshme, të tilla si një ID dhome përdoruesi apo grupi, këto të dhëna hiqen përpara se të dërgohet te shërbyesi.", "Call Failed": "Thirrja Dështoi", "Review Devices": "Shqyrtoni Pajisje", @@ -68,8 +68,8 @@ "Failed to invite users to %(groupId)s": "S’u arrit të ftoheshin përdorues te %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "S’u arrit të shtoheshin dhomat vijuese te %(groupId)s:", "Unnamed Room": "Dhomë e Paemërtuar", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot-i s’ka leje t’ju dërgojë njoftime - Ju lutemi, kontrolloni rregullimet e shfletuesit tuaj", - "Riot was not given permission to send notifications - please try again": "Riot-it s’iu dha leje të dërgojë njoftime - ju lutemi, riprovoni", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s-i s’ka leje t’ju dërgojë njoftime - Ju lutemi, kontrolloni rregullimet e shfletuesit tuaj", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s-it s’iu dha leje të dërgojë njoftime - ju lutemi, riprovoni", "Unable to enable Notifications": "S’arrihet të aktivizohen njoftimet", "This email address was not found": "Kjo adresë email s’u gjet", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Adresa juaj email s’duket të jetë e përshoqëruar me një ID Matrix në këtë shërbyes Home.", @@ -98,7 +98,7 @@ "You are now ignoring %(userId)s": "Tani po e shpërfillni %(userId)s", "Unignored user": "U hoq shpërfillja për përdoruesin", "Fetching third party location failed": "Dështoi prurja e vendndodhjes së palës së tretë", - "A new version of Riot is available.": "Ka gati një version të ri Riot-it.", + "A new version of %(brand)s is available.": "Ka gati një version të ri %(brand)s-it.", "Send Account Data": "Dërgo të Dhëna Llogarie", "All notifications are currently disabled for all targets.": "Krejt njoftimet hëpërhë janë çaktivizuar për krejt objektivat.", "Uploading report": "Po ngarkohet raporti", @@ -167,7 +167,7 @@ "Forward Message": "Përcille Mesazhin", "You have successfully set a password and an email address!": "Keni caktuar me sukses një fjalëkalim dhe një adresë email!", "Remove %(name)s from the directory?": "Të hiqet %(name)s prej drejtorisë?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot-i përdor mjaft veçori të përparuara të shfletuesve, disa prej të cilave s’janë gati ose janë eksperimentale në shfletuesin tuaj të tanishëm.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s-i përdor mjaft veçori të përparuara të shfletuesve, disa prej të cilave s’janë gati ose janë eksperimentale në shfletuesin tuaj të tanishëm.", "Event sent!": "Akti u dërgua!", "Preparing to send logs": "Po përgatitet për dërgim regjistrash", "Unnamed room": "Dhomë e paemërtuar", @@ -221,8 +221,8 @@ "You must specify an event type!": "Duhet të përcaktoni një lloj akti!", "Unhide Preview": "Shfshihe Paraparjen", "Unable to join network": "S’arrihet të hyhet në rrjet", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Mund t’i keni formësuar në një tjetër klient nga Riot-i. S’mund t’i sintonizoni në Riot, por ata janë ende të vlefshëm", - "Sorry, your browser is not able to run Riot.": "Na ndjeni, shfletuesi juaj nuk është në gjendje të xhirojë Riot-in.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Mund t’i keni formësuar në një tjetër klient nga %(brand)s-i. S’mund t’i sintonizoni në %(brand)s, por ata janë ende të vlefshëm", + "Sorry, your browser is not able to run %(brand)s.": "Na ndjeni, shfletuesi juaj nuk është në gjendje të xhirojë %(brand)s-in.", "Messages in group chats": "Mesazhe në fjalosje në grup", "Yesterday": "Dje", "Error encountered (%(errorDetail)s).": "U has gabim (%(errorDetail)s).", @@ -234,7 +234,7 @@ "Register": "Regjistrohuni", "Off": "Off", "Edit": "Përpuno", - "Riot does not know how to join a room on this network": "Riot-i nuk di si të hyjë në një dhomë në këtë rrjet", + "%(brand)s does not know how to join a room on this network": "%(brand)s-i nuk di si të hyjë në një dhomë në këtë rrjet", "Mentions only": "Vetëm përmendje", "remove %(name)s from the directory.": "hiqe %(name)s prej drejtorie.", "You can now return to your account after signing out, and sign in on other devices.": "Mund të ktheheni te llogaria juaj, pasi të keni bërë daljen, dhe të bëni hyrjen nga pajisje të tjera.", @@ -502,7 +502,7 @@ "Sign out": "Dilni", "Success": "Sukses", "Cryptography": "Kriptografi", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot-i grumbullon të dhëna analitike anonime që të na lejojë ta përmirësojmë aplikacionin.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s-i grumbullon të dhëna analitike anonime që të na lejojë ta përmirësojmë aplikacionin.", "Check for update": "Kontrollo për përditësime", "No media permissions": "S’ka leje mediash", "No Microphones detected": "S’u pikasën Mikrofona", @@ -515,7 +515,7 @@ "Account": "Llogari", "Access Token:": "Token Hyrjesh:", "Identity Server is": "Shërbyes Identitetesh është", - "riot-web version:": "Version riot-web:", + "%(brand)s version:": "Version %(brand)s:", "olm version:": "version olm:", "The email address linked to your account must be entered.": "Duhet dhënë adresa email e lidhur me llogarinë tuaj.", "Return to login screen": "Kthehuni te skena e hyrjeve", @@ -774,7 +774,7 @@ "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)": "Të lutem, harro krejt mesazhet që kamë dërguar, kur të çaktivizohet llogaria ime (Kujdes: kjo do të bëjë që përdorues të ardhshëm të shohin një pamje jo të plotë të bisedave)", "To continue, please enter your password:": "Që të vazhdohet, ju lutemi, jepni fjalëkalimin tuaj:", "Incompatible local cache": "Fshehtinë vendore e papërputhshme", - "Updating Riot": "Riot-i po përditësohet", + "Updating %(brand)s": "%(brand)s-i po përditësohet", "Failed to upgrade room": "S’u arrit të përmirësohej dhoma", "The room upgrade could not be completed": "Përmirësimi i dhomës s’u plotësua", "Upgrade Room Version": "Përmirësoni Versionin e Dhomës", @@ -852,8 +852,8 @@ "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "Ndryshimet e bëra te emri dhe avatari i bashkësisë tuaj mund të mos shihen nga përdoruesit e tjera para deri 30 minutash.", "Can't leave Server Notices room": "Dhoma Njoftime Shërbyesi, s’braktiset dot", "For security, this session has been signed out. Please sign in again.": "Për hir të sigurisë, është bërë dalja nga ky sesion. Ju lutemi, ribëni hyrjen.", - "Data from an older version of Riot 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.": "Janë pikasur të dhëna nga një version i dikurshëm i Riot-it. Kjo do të bëjë që kriptografia skaj-më-skaj te versioni i dikurshëm të mos punojë si duhet. Mesazhet e fshehtëzuar skaj-më-skaj tani së fundi teksa përdorej versioni i dikurshëm mund të mos jenë të shfshehtëzueshëm në këtë version. Kjo mund bëjë edhe që mesazhet e shkëmbyera me këtë version të dështojnë. Nëse ju dalin probleme, bëni daljen dhe rihyni në llogari. Që të ruhet historiku i mesazheve, eksportoni dhe riimportoni kyçet tuaj.", - "Did you know: you can use communities to filter your Riot.im experience!": "E dinit se: mund t’i përdorni bashkësitë për të filtruar punimin tuaj në Riot.im?", + "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.": "Janë pikasur të dhëna nga një version i dikurshëm i %(brand)s-it. Kjo do të bëjë që kriptografia skaj-më-skaj te versioni i dikurshëm të mos punojë si duhet. Mesazhet e fshehtëzuar skaj-më-skaj tani së fundi teksa përdorej versioni i dikurshëm mund të mos jenë të shfshehtëzueshëm në këtë version. Kjo mund bëjë edhe që mesazhet e shkëmbyera me këtë version të dështojnë. Nëse ju dalin probleme, bëni daljen dhe rihyni në llogari. Që të ruhet historiku i mesazheve, eksportoni dhe riimportoni kyçet tuaj.", + "Did you know: you can use communities to filter your %(brand)s experience!": "E dinit se: mund t’i përdorni bashkësitë për të filtruar punimin tuaj në %(brand)s?", "Error whilst fetching joined communities": "Gabim teksa silleshin bashkësitë ku merret pjesë", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Ridërgojini krejt ose anulojini krejt tani. Për ridërgim ose anulim, mundeni edhe të përzgjidhni mesazhe individualë.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Ridërgojeni mesazhin ose anulojeni mesazhin tani.", @@ -876,13 +876,13 @@ "Please review and accept the policies of this homeserver:": "Ju lutemi, shqyrtoni dhe pranoni rregullat e këtij shërbyesi home:", "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Nëse nuk përcaktoni një adresë email, s’do të jeni në gjendje të bëni ricaktime të fjalëkalimit tuaj. Jeni i sigurt?", "Removing a room from the community will also remove it from the community page.": "Heqja e një dhome nga bashkësia do ta heqë atë edhe nga faqja e bashkësisë.", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Ju lutemi, ndihmoni të përmirësohet Riot.im duke dërguar të dhëna anonime përdorimi. Për këtë do të përdoret një cookie (ju lutemi, shihni Rregullat tona mbi Cookie-t).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Ju lutemi, ndihmoni të përmirësohet Riot.im duke dërguar të dhëna anonime përdorimi. Për këtë do të përdoret një cookie.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Ju lutemi, ndihmoni të përmirësohet %(brand)s duke dërguar të dhëna anonime përdorimi. Për këtë do të përdoret një cookie (ju lutemi, shihni Rregullat tona mbi Cookie-t).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Ju lutemi, ndihmoni të përmirësohet %(brand)s duke dërguar të dhëna anonime përdorimi. Për këtë do të përdoret një cookie.", "Please contact your service administrator to get this limit increased.": "Ju lutemi, që të shtohet ky kufi, lidhuni me përgjegjësin e shërbimit.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Nëse versioni tjetër i Riot-it është ende i hapur në një skedë tjetër, ju lutemi, mbylleni, ngaqë përdorimi njëkohësisht i Riot-it në të njëjtën strehë, në njërën anë me lazy loading të aktivizuar dhe në anën tjetër të çaktivizuar do të shkaktojë probleme.", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot-i tani përdor 3 deri 5 herë më pak kujtesë, duke ngarkuar të dhëna mbi përdorues të tjerë vetëm kur duhen. Ju lutemi, prisni, teksa njëkohësojmë të dhënat me shërbyesin!", + "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.": "Nëse versioni tjetër i %(brand)s-it është ende i hapur në një skedë tjetër, ju lutemi, mbylleni, ngaqë përdorimi njëkohësisht i %(brand)s-it në të njëjtën strehë, në njërën anë me lazy loading të aktivizuar dhe në anën tjetër të çaktivizuar do të shkaktojë probleme.", + "%(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!": "%(brand)s-i tani përdor 3 deri 5 herë më pak kujtesë, duke ngarkuar të dhëna mbi përdorues të tjerë vetëm kur duhen. Ju lutemi, prisni, teksa njëkohësojmë të dhënat me shërbyesin!", "Put a link back to the old room at the start of the new room so people can see old messages": "Vendosni në krye të dhomës së re një lidhje për te dhoma e vjetër, që njerëzit të mund të shohin mesazhet e vjetër", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Nëse më herët keni përdorur një version më të freskët të Riot-it, sesioni juaj mund të jetë i papërputhshëm me këtë version. Mbylleni këtë dritare dhe kthehuni te versioni më i ri.", + "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.": "Nëse më herët keni përdorur një version më të freskët të %(brand)s-it, sesioni juaj mund të jetë i papërputhshëm me këtë version. Mbylleni këtë dritare dhe kthehuni te versioni më i ri.", "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Spastrimi i gjërave të depozituara në shfletuesin tuaj mund ta ndreqë problemin, por kjo do të sjellë nxjerrjen tuaj nga llogari dhe do ta bëjë të palexueshëm çfarëdo historiku të fshehtëzuar të bisedës.", "If you already have a Matrix account you can log in instead.": "Nëse keni tashmë një llogari Matrix, mund të bëni hyrjen.", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Krijoni një bashkësi që bëni tok përdorues dhe dhoma! Krijoni një faqe hyrëse vetjake, që të ravijëzoni hapësirën tuaj në universin Matrix.", @@ -916,7 +916,7 @@ "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "S’arrihet të ngarkohet akti të cilit iu përgjigj, ose nuk ekziston, ose s’keni leje ta shihni.", "Try using one of the following valid address types: %(validTypesList)s.": "Provoni të përdorni një nga llojet e vlefshme të adresave më poshtë: %(validTypesList)s.", "Something went wrong whilst creating your community": "Diç shkoi ters teksa krijohej bashkësia juaj", - "You've previously used Riot 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, Riot needs to resync your account.": "Më parë përdornit Riot në %(host)s me lazy loading anëtarësh të aktivizuar. Në këtë version lazy loading është çaktivizuar. Ngaqë fshehtina vendore s’është e përputhshme mes këtyre dy rregullimeve, Riot-i lyp të rinjëkohësohet llogaria juaj.", + "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.": "Më parë përdornit %(brand)s në %(host)s me lazy loading anëtarësh të aktivizuar. Në këtë version lazy loading është çaktivizuar. Ngaqë fshehtina vendore s’është e përputhshme mes këtyre dy rregullimeve, %(brand)s-i lyp të rinjëkohësohet llogaria juaj.", "Update any local room aliases to point to the new room": "Përditësoni çfarëdo aliasesh dhomash vendore që të shpien te dhoma e re", "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "Ndalojuni përdoruesve të flasin në versionin e vjetër të dhomës, dhe postoni një mesazh që u këshillon atyre të hidhen te dhoma e re", "We encountered an error trying to restore your previous session.": "Hasëm një gabim teksa provohej të rikthehej sesioni juaj i dikurshëm.", @@ -937,11 +937,11 @@ "There's no one else here! Would you like to invite others or stop warning about the empty room?": "S’ka njeri këtu! Do të donit të ftoni të tjerë apo të reshtet së njoftuari për dhomë të zbrazët?", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "U provua të ngarkohej një pikë e caktuar në kronologjinë e kësaj dhome, por nuk keni leje për ta parë mesazhin në fjalë.", "Start automatically after system login": "Nisu vetvetiu pas hyrjes në sistem", - "You may need to manually permit Riot to access your microphone/webcam": "Lypset të lejoni dorazi Riot-in të përdorë mikrofonin/kamerën tuaj web", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Lypset të lejoni dorazi %(brand)s-in të përdorë mikrofonin/kamerën tuaj web", "No Audio Outputs detected": "S’u pikasën Sinjale Audio Në Dalje", "This homeserver doesn't offer any login flows which are supported by this client.": "Ky shërbyes home nuk ofron ndonjë mënyrë hyrjesh që mbulohet nga ky klient.", "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.": "Kartela e eksportuar do t’i lejojë kujtdo që e lexon të shfshehtëzojë çfarëdo mesazhesh të fshehtëzuar që mund të shihni, ndaj duhet të jeni i kujdesshëm për ta mbajtur të parrezikuar. Si ndihmë për këtë, duhet të jepni më poshtë një frazëkalim, që do të përdoret për të fshehtëzuar të dhënat e eksportuara. Importimi i të dhënave do të jetë i mundur vetëm duke përdorur të njëjtin frazëkalim.", - "Not a valid Riot keyfile": "S’është kartelë kyçesh Riot e vlefshme", + "Not a valid %(brand)s keyfile": "S’është kartelë kyçesh %(brand)s e vlefshme", "Revoke Moderator": "Shfuqizoje Si Moderator", "Historical": "Të dikurshme", "Flair": "Simbole", @@ -950,8 +950,8 @@ "Please review and accept all of the homeserver's policies": "Ju lutemi, shqyrtoni dhe pranoni krejt rregullat e këtij shërbyesi home", "Display your community flair in rooms configured to show it.": "Shfaqni simbolet e bashkësisë tuaj në dhoma të formësuara për t’i shfaqur ato.", "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.": "Jeni i sigurt se doni të hiqet (fshihet) ky akt? Mbani parasysh se nëse fshini emrin e një dhome ose ndryshimin e temës, kjo mund të sjellë zhbërjen e ndryshimit.", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Që të shmanget humbja e historikut të fjalosjes tuaj, duhet të eksportoni kyçet e dhomës tuaj përpara se të dilni nga llogari. Që ta bëni këtë, duhe të riktheheni te versioni më i ri i Riot-it", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Më parë përdorët një version më të ri të Riot-it në %(host)s. Që ta përdorni sërish këtë version me fshehtëzim skaj-më-skaj, duhet të dilni dhe rihyni te llogaria juaj. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Që të shmanget humbja e historikut të fjalosjes tuaj, duhet të eksportoni kyçet e dhomës tuaj përpara se të dilni nga llogari. Që ta bëni këtë, duhe të riktheheni te versioni më i ri i %(brand)s-it", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Më parë përdorët një version më të ri të %(brand)s-it në %(host)s. Që ta përdorni sërish këtë version me fshehtëzim skaj-më-skaj, duhet të dilni dhe rihyni te llogaria juaj. ", "Incompatible Database": "Bazë të dhënash e Papërputhshme", "Continue With Encryption Disabled": "Vazhdo Me Fshehtëzimin të Çaktivizuar", "Unable to load! Check your network connectivity and try again.": "S’arrihet të ngarkohet! Kontrolloni lidhjen tuaj në rrjet dhe riprovoni.", @@ -1107,8 +1107,8 @@ "Theme": "Temë", "Account management": "Administrim llogarish", "Deactivating your account is a permanent action - be careful!": "Çaktivizimi i llogarisë tuaj është një veprim i pakthyeshëm - hapni sytë!", - "For help with using Riot, click here.": "Për ndihmë rreth përdorimit të Riot-it, klikoni këtu.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Për ndihmë rreth përdorimit të Riot-it, klikoni këtu, ose nisni një fjalosje me robotin tonë duke përdorur butonin më poshtë.", + "For help with using %(brand)s, click here.": "Për ndihmë rreth përdorimit të %(brand)s-it, klikoni këtu.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Për ndihmë rreth përdorimit të %(brand)s-it, klikoni këtu, ose nisni një fjalosje me robotin tonë duke përdorur butonin më poshtë.", "Help & About": "Ndihmë & Rreth", "Bug reporting": "Njoftim të metash", "FAQ": "FAQ", @@ -1242,7 +1242,7 @@ "Anchor": "Spirancë", "Headphones": "Kufje", "Folder": "Dosje", - "Chat with Riot Bot": "Fjalosuni me Robotin Riot", + "Chat with %(brand)s Bot": "Fjalosuni me Robotin %(brand)s", "Recovery Key Mismatch": "Mospërputhje Kyçesh Rimarrjeje", "Incorrect Recovery Passphrase": "Frazëkalim Rimarrjeje i Pasaktë", "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "S’u shfshehtëzua dot kopjeruajtja me këtë frazëkalim: ju lutemi, verifikoni që dhatë frazëkalimin e duhur të rimarrjeve.", @@ -1416,7 +1416,7 @@ "Enter username": "Jepni emër përdoruesi", "Some characters not allowed": "Disa shenja nuk lejohen", "Create your Matrix account on ": "Krijoni llogarinë tuaj Matrix te ", - "Riot failed to get the public room list.": "Riot-i s’arriti të merrte listën e dhomave publike.", + "%(brand)s failed to get the public room list.": "%(brand)s-i s’arriti të merrte listën e dhomave publike.", "The homeserver may be unavailable or overloaded.": "Shërbyesi Home mund të jetë i pakapshëm ose i mbingarkuar.", "Add room": "Shtoni dhomë", "Your profile": "Profili juaj", @@ -1457,7 +1457,7 @@ "A widget would like to verify your identity": "Një widget do të donte të verifikonte identitetin tuaj", "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.": "Një widget që gjendet te %(widgetUrl)s do të donte të verifikonte identitetin tuaj. Përmes lejimit të kësaj, widget-i do të jetë në gjendje të verifiojë ID-në tuaj të përdoruesit, por pa mundur të kryejë veprime në këmbë tuajën.", "Unable to validate homeserver/identity server": "S’arrihet të vleftësohet shërbyesi Home/shërbyesi i identiteteve", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot-i s’arriti të merrte listë protokollesh nga shërbyesi Home. Shërbyesi Home mund të jetë shumë i vjetër për mbulim rrjetesh nga palë të treta.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s-i s’arriti të merrte listë protokollesh nga shërbyesi Home. Shërbyesi Home mund të jetë shumë i vjetër për mbulim rrjetesh nga palë të treta.", "You have %(count)s unread notifications in a prior version of this room.|other": "Keni %(count)s njoftime të palexuar në një version të mëparshëm të kësaj dhome.", "You have %(count)s unread notifications in a prior version of this room.|one": "Keni %(count)s njoftim të palexuar në një version të mëparshëm të kësaj dhome.", "Invalid base_url for m.identity_server": "Parametër base_url i i pavlefshëm për m.identity_server", @@ -1470,8 +1470,8 @@ "Browse": "Shfletoni", "Cannot reach homeserver": "S’kapet dot shërbyesi Home", "Ensure you have a stable internet connection, or get in touch with the server admin": "Sigurohuni se keni një lidhje të qëndrueshme internet, ose lidhuni me përgjegjësin e shërbyesit", - "Your Riot is misconfigured": "Riot-i juaj është i keqformësuar", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Kërkojini përgjegjësit të Riot-it tuaj të kontrollojë formësimin tuaj për zëra të pasaktë ose të përsëdytur.", + "Your %(brand)s is misconfigured": "%(brand)s-i juaj është i keqformësuar", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Kërkojini përgjegjësit të %(brand)s-it tuaj të kontrollojë formësimin tuaj për zëra të pasaktë ose të përsëdytur.", "Unexpected error resolving identity server configuration": "Gabim i papritur teksa ftillohej formësimi i shërbyesit të identiteteve", "Use lowercase letters, numbers, dashes and underscores only": "Përdorni vetëm shkronja të vogla, numra, vija ndarëse dhe nënvija", "Cannot reach identity server": "S’kapet dot shërbyesi i identiteteve", @@ -1588,10 +1588,10 @@ "Deactivate user": "Çaktivizoje përdoruesin", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "U shkaktua një gabim (%(errcode)s) teksa provohej të vleftësohej ftesa juaj. Mund të provonit t’ia jepni një përgjegjësi dhome këtë informacion.", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Kjo ftesë për %(roomName)s u dërgua te %(email)s që s’është i përshoqëruar me llogarinë tuaj", - "Link this email with your account in Settings to receive invites directly in Riot.": "Që të merrni ftesa drejt e në Riot, lidheni këtë email me llogarinë tuaj, te Rregullimet.", + "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Që të merrni ftesa drejt e në %(brand)s, lidheni këtë email me llogarinë tuaj, te Rregullimet.", "This invite to %(roomName)s was sent to %(email)s": "Kjo ftesë për %(roomName)s u dërgua te %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Që të merrni ftesa drejt e në Riot, përdorni një shërbyes identitetesh, te Rregullimet.", - "Share this email in Settings to receive invites directly in Riot.": "Që të merrni ftesa drejt e te Riot, ndajeni me të tjerët këtë email, te Rregullimet.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Që të merrni ftesa drejt e në %(brand)s, përdorni një shërbyes identitetesh, te Rregullimet.", + "Share this email in Settings to receive invites directly in %(brand)s.": "Që të merrni ftesa drejt e te %(brand)s, ndajeni me të tjerët këtë email, te Rregullimet.", "Error changing power level": "Gabim në ndryshimin e shkallës së pushtetit", "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Ndodhi një gabim gjatë ndryshimit të shkallës së pushtetit të përdoruesit. Sigurohuni se keni leje të mjaftueshme dhe riprovoni.", "Bold": "Të trasha", @@ -1736,7 +1736,7 @@ "View rules": "Shihni rregulla", "You are currently subscribed to:": "Jeni i pajtuar te:", "⚠ These settings are meant for advanced users.": "⚠ Këto rregullime janë menduar për përdorues të përparuar.", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Shtoni këtu përdorues dhe shërbyes që doni të shpërfillen. Që Riot të kërkojë për përputhje me çfarëdo shkronjash, përdorni yllthin. Për shembull, @bot:* do të shpërfillë krej përdoruesit që kanë emrin 'bot' në çfarëdo shërbyesi.", + "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.": "Shtoni këtu përdorues dhe shërbyes që doni të shpërfillen. Që %(brand)s të kërkojë për përputhje me çfarëdo shkronjash, përdorni yllthin. Për shembull, @bot:* do të shpërfillë krej përdoruesit që kanë emrin 'bot' në çfarëdo shërbyesi.", "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.": "Shpërfillja e personave kryhet përmes listash dëbimi, të cilat përmbajnë rregulla se cilët të dëbohen. Pajtimi te një listë dëbimesh do të thotë se përdoruesit/shërbyesit e bllokuar nga ajo listë do t’ju fshihen juve.", "Personal ban list": "Listë personale dëbimesh", "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.": "Lista juaj personale e dëbimeve mban krejt përdoruesit/shërbyesit prej të cilëve ju personalisht s’dëshironi të shihni mesazhe. Pas shpërfilljes së përdoruesit/shërbyesit tuaj të parë, te lista juaj e dhomave do të shfaqet një dhomë e re e quajtur 'Lista Ime e Dëbimeve' - qëndroni në këtë dhomë që ta mbani listën e dëbimeve në fuqi.", @@ -1761,7 +1761,7 @@ "Your avatar URL": "URL-ja e avatarit tuaj", "Your user ID": "ID-ja juaj e përdoruesit", "Your theme": "Tema juaj", - "Riot URL": "URL Riot-i", + "%(brand)s URL": "URL %(brand)s-i", "Room ID": "ID dhome", "Widget ID": "ID widget-i", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Përdorimi i këtij widget-i mund të sjellë ndarje të dhënash me %(widgetDomain)s & Përgjegjësin tuaj të Integrimeve.", @@ -1782,7 +1782,7 @@ "Integrations are disabled": "Integrimet janë të çaktivizuara", "Enable 'Manage Integrations' in Settings to do this.": "Që të bëhet kjo, aktivizoni “Administroni Integrime”, te Rregullimet.", "Integrations not allowed": "Integrimet s’lejohen", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Riot-i juah nuk ju lejon të përdorni një Përgjegjës Integrimesh për të bërë këtë. Ju lutemi, lidhuni me përgjegjësin.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "%(brand)s-i juah nuk ju lejon të përdorni një Përgjegjës Integrimesh për të bërë këtë. Ju lutemi, lidhuni me përgjegjësin.", "Reload": "Ringarkoje", "Take picture": "Bëni një foto", "Remove for everyone": "Hiqe për këdo", @@ -1815,7 +1815,7 @@ "Upgrade private room": "Përmirëso dhomë private", "Upgrade public room": "Përmirëso dhomë publike", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Përmirësimi i një dhome është një veprim i thelluar dhe zakonisht rekomandohet kur një dhomë është e papërdorshme, për shkak të metash, veçorish që i mungojnë ose cenueshmëri sigurie.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Kjo zakonisht prek vetëm mënyrën se si përpunohet dhoma te shërbyesi. Nëse keni probleme me Riot-in, ju lutemi, njoftoni një të metë.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Kjo zakonisht prek vetëm mënyrën se si përpunohet dhoma te shërbyesi. Nëse keni probleme me %(brand)s-in, ju lutemi, njoftoni një të metë.", "You'll upgrade this room from to .": "Do ta përmirësoni këtë dhomë nga .", "Upgrade": "Përmirësoje", "Enter secret storage passphrase": "Jepni frazëkalim për te depozitë e fshehtë", @@ -1951,14 +1951,14 @@ "Manage": "Administroni", "Securely cache encrypted messages locally for them to appear in search results.": "Ruaj lokalisht në mënyrë të sigurt në fshehtinë mesazhet që të shfaqen në përfundime kërkimi.", "Enable": "Aktivizoje", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot-it i mungojnë disa përbërës të domosdoshëm për ruajtje lokalisht në mënyrë të sigurt në fshehtinë mesazhe. Nëse do të donit të eksperimentonit me këtë veçori, montoni një Desktop vetjak Riot Desktop me shtim përbërësish kërkimi.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot-i s’mund të ruajë lokalisht në mënyrë të sigurt mesazhe në fshehtinë teksa xhirohet nën shfletues. Që mesazhet e fshehtëzuar të shihen në përfundime kërkimi, përdorni Riot Desktop.", + "%(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-it i mungojnë disa përbërës të domosdoshëm për ruajtje lokalisht në mënyrë të sigurt në fshehtinë mesazhe. Nëse do të donit të eksperimentonit me këtë veçori, montoni një Desktop vetjak %(brand)s Desktop me shtim përbërësish kërkimi.", + "%(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-i s’mund të ruajë lokalisht në mënyrë të sigurt mesazhe në fshehtinë teksa xhirohet nën shfletues. Që mesazhet e fshehtëzuar të shihen në përfundime kërkimi, përdorni %(brand)s Desktop.", "Message search": "Kërkim mesazhesh", "If disabled, messages from encrypted rooms won't appear in search results.": "Në u çaktivizoftë, mesazhet prej dhomash të fshehtëzuara s’do të duken në përfundime kërkimi.", "Disable": "Çaktivizoje", "Not currently downloading messages for any room.": "Aktualisht s’po shkarkohen mesazhe për ndonjë dhomë.", "Downloading mesages for %(currentRoom)s.": "Po shkarkohen mesazhe për %(currentRoom)s.", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot-i po ruan lokalisht në mënyrë të sigurt në fshehtinë mesazhet që të shfaqen në përfundime kërkimi:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s-i po ruan lokalisht në mënyrë të sigurt në fshehtinë mesazhet që të shfaqen në përfundime kërkimi:", "Space used:": "Hapësirë e përdorur:", "Indexed messages:": "Mesazhe të indeksuar:", "Number of rooms:": "Numër dhomash:", @@ -2137,12 +2137,12 @@ "Ask this user to verify their session, or manually verify it below.": "Kërkojini këtij përdoruesi të verifikojë sesionin e vet, ose ta verifikojë më poshtë dorazi.", "Manually Verify": "Verifikoje Dorazi", "Verify by scanning": "Verifikoje me skanim", - "The version of Riot": "Versioni i Riot-it", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Nëse po e përdorni Riot-in në një pajisje ku touch-i është mekanizmi parësor për input-e", - "Whether you're using Riot as an installed Progressive Web App": "Nëse po e përdorni Riot-in të instaluar si një Aplikacion Web Progresiv", + "The version of %(brand)s": "Versioni i %(brand)s-it", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Nëse po e përdorni %(brand)s-in në një pajisje ku touch-i është mekanizmi parësor për input-e", + "Whether you're using %(brand)s as an installed Progressive Web App": "Nëse po e përdorni %(brand)s-in të instaluar si një Aplikacion Web Progresiv", "Your user agent": "Agjenti juaj i përdoruesit", - "The information being sent to us to help make Riot better includes:": "Te të dhënat e dërguara te ne për të na ndihmuar ta bëjmë Riot-in më të mirë përfshihen:", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Sesioni që po provoni të verifikoni, nuk mbulon skanim kodesh QR apo verifikim emoji-sh, çka janë ato që Riot-i mbulon. Provoni me një tjetër klient.", + "The information being sent to us to help make %(brand)s better includes:": "Te të dhënat e dërguara te ne për të na ndihmuar ta bëjmë %(brand)s-in më të mirë përfshihen:", + "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.": "Sesioni që po provoni të verifikoni, nuk mbulon skanim kodesh QR apo verifikim emoji-sh, çka janë ato që %(brand)s-i mbulon. Provoni me një tjetër klient.", "You declined": "Hodhët poshtë", "%(name)s declined": "%(name)s hodhi poshtë", "accepting …": "po pranohet …", @@ -2225,7 +2225,7 @@ "a new cross-signing key signature": "një nënshkrim i ri kyçi cross-signing", "a device cross-signing signature": "një nënshkrim cross-signing pajisjeje", "a key signature": "një nënshkrim kyçi", - "Riot encountered an error during upload of:": "Riot-i hasi një gabim gjatë ngarkimit të:", + "%(brand)s encountered an error during upload of:": "%(brand)s-i hasi një gabim gjatë ngarkimit të:", "Upload completed": "Ngarkimi u plotësua", "Cancelled signature upload": "Ngarkim i anuluar nënshkrimi", "Unabled to upload": "S’u arrit të ngarkohej", @@ -2404,7 +2404,7 @@ "Successfully restored %(sessionCount)s keys": "U rikthyen me sukses %(sessionCount)s kyçe", "Verify this login": "Verifikoni këto kredenciale hyrjeje", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Ripohoni identitetin tuaj duke verifikuar këto kredenciale hyrjesh prej një nga sesionet tuaj të tjerë, duke i akorduar hyrje te mesazhet e fshehtëzuar.", - "This requires the latest Riot on your other devices:": "Kjo lyp Riot-in më të ri te pajisjet tuaja të tjera:", + "This requires the latest %(brand)s on your other devices:": "Kjo lyp %(brand)s-in më të ri te pajisjet tuaja të tjera:", "or another cross-signing capable Matrix client": "ose një tjetër klient Matrix i aftë për cross-signinganonymous usage data which helps us improve Riot. This will use a cookie.": "Dërgoni të dhëna anonime përdorimi të cilat na ndihmojnë të përmirësojmë Riot-in. Kjo do të përdorë një cookie.", + "Help us improve %(brand)s": "Ndihmonani të përmirësojmë %(brand)s-in", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Dërgoni të dhëna anonime përdorimi të cilat na ndihmojnë të përmirësojmë %(brand)s-in. Kjo do të përdorë një cookie.", "I want to help": "Dua të ndihmoj", "Your homeserver has exceeded its user limit.": "Shërbyesi juaj Home ka tejkaluar kufijtë e tij të përdorimit.", "Your homeserver has exceeded one of its resource limits.": "Shërbyesi juaj Home ka tejkaluar një nga kufijtë e tij të burimeve.", @@ -2448,8 +2448,8 @@ "Set password": "Caktoni fjalëkalim", "To return to your account in future you need to set a password": "Që të ktheheni te llogaria juaj në të ardhmen, duhet të caktoni një fjalëkalim", "Restart": "Rinise", - "Upgrade your Riot": "Përmirësoni Riot-in tuaj", - "A new version of Riot is available!": "Ka gati një version të ri të Riot-it!", + "Upgrade your %(brand)s": "Përmirësoni %(brand)s-in tuaj", + "A new version of %(brand)s is available!": "Ka gati një version të ri të %(brand)s-it!", "Use the improved room list (in development - refresh to apply changes)": "Përdorni listën e përmirësuar të dhomave (në zhvillim - që të aplikohen ndryshimet, rifreskojeni)", "Please verify the room ID or address and try again.": "Ju lutemi, verifikoni ID-në ose adresën e dhomës dhe riprovoni.", "Room ID or address of ban list": "ID dhome ose adresë prej liste ndalimi", @@ -2465,7 +2465,7 @@ "This address is available to use": "Kjo adresë është e lirë për përdorim", "This address is already in use": "Kjo adresë është e përdorur tashmë", "Set a room address to easily share your room with other people.": "Caktoni një adresë dhome që të ndani dhomën tuaj me persona të tjerë.", - "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Me këtë sesion, keni përdorur më herët një version më të ri të Riot-it. Që të ripërdorni këtë version me fshehtëzim skaj më skaj, do t’ju duhet të bëni daljen dhe të rihyni.", + "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Me këtë sesion, keni përdorur më herët një version më të ri të %(brand)s-it. Që të ripërdorni këtë version me fshehtëzim skaj më skaj, do t’ju duhet të bëni daljen dhe të rihyni.", "Address (optional)": "Adresë (opsionale)", "Delete the room address %(alias)s and remove %(name)s from the directory?": "Të fshihet adresa e dhomës %(alias)s dhe të hiqet %(name)s nga drejtoria?", "delete the address.": "fshije adresën.", @@ -2501,7 +2501,7 @@ "Dark": "E errët", "Use the improved room list (in development - will refresh to apply changes)": "Përdorni listën e përmirësuar të dhomave (në zhvillim - që të aplikohen ndryshimet, duhet rifreskuar)", "Customise your appearance": "Përshtatni dukjen tuaj", - "Appearance Settings only affect this Riot session.": "Rregullimet e Dukjes prekin vetëm këtë sesion Riot.", + "Appearance Settings only affect this %(brand)s session.": "Rregullimet e Dukjes prekin vetëm këtë sesion %(brand)s.", "Activity": "Veprimtari", "A-Z": "A-Z", "Recovery Key": "Kyç Rimarrjesh", diff --git a/src/i18n/strings/sr.json b/src/i18n/strings/sr.json index e5bd6d6f1a..8c38fc4ef8 100644 --- a/src/i18n/strings/sr.json +++ b/src/i18n/strings/sr.json @@ -48,8 +48,8 @@ "Failed to invite users to community": "Нисам успео да позовем кориснике у заједницу", "Failed to invite users to %(groupId)s": "Нисам успео да позовем кориснике у %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "Нисам успео да додам следеће собе у %(groupId)s:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot нема овлашћења за слање обавештења, проверите подешавања вашег прегледача", - "Riot was not given permission to send notifications - please try again": "Riot-у није дато овлашћење за слање обавештења, пробајте поново касније", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s нема овлашћења за слање обавештења, проверите подешавања вашег прегледача", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s-у није дато овлашћење за слање обавештења, пробајте поново касније", "Unable to enable Notifications": "Нисам успео да омогућим обавештења", "This email address was not found": "Ова мејл адреса није нађена", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Изгледа да ваша мејл адреса није повезана са Матрикс ИБ-јем на овом кућном серверу.", @@ -137,7 +137,7 @@ "Send": "Пошаљи", "Unnamed Room": "Неименована соба", "Your browser does not support the required cryptography extensions": "Ваш прегледач не подржава потребна криптографска проширења", - "Not a valid Riot keyfile": "Није исправана Riot кључ-датотека", + "Not a valid %(brand)s keyfile": "Није исправана %(brand)s кључ-датотека", "Authentication check failed: incorrect password?": "Провера идентитета није успела: нетачна лозинка?", "Failed to join room": "Нисам успео да уђем у собу", "Message Pinning": "Закачене поруке", @@ -486,7 +486,7 @@ "Ignore request": "Занемари захтев", "Encryption key request": "Захтев за кључ шифровања", "Unable to restore session": "Не могу да повратим сесију", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Ако сте претходно користили новије издање Riot-а, ваша сесија може бити некомпатибилна са овим издањем. Затворите овај прозор и вратите се на новије издање.", + "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.": "Ако сте претходно користили новије издање %(brand)s-а, ваша сесија може бити некомпатибилна са овим издањем. Затворите овај прозор и вратите се на новије издање.", "Invalid Email Address": "Неисправна мејл адреса", "This doesn't appear to be a valid email address": "Изгледа да ово није исправна мејл адреса", "Verification Pending": "Чека се на проверу", @@ -553,14 +553,14 @@ "For security, this session has been signed out. Please sign in again.": "Зарад безбедности, одјављени сте из ове сесије. Пријавите се поново.", "Old cryptography data detected": "Нађени су стари криптографски подаци", "The platform you're on": "Платформа коју користите", - "The version of Riot.im": "Riot.im издање", + "The version of %(brand)s": "%(brand)s издање", "Your language of choice": "Ваш жељени језик", "Which officially provided instance you are using, if any": "Коју званичну инстанцу користите, ако користите", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Да ли користите режим богатог текста у уређивачу богатог текста", "Your homeserver's URL": "Адреса вашег кућног сервера", "Your identity server's URL": "Адреса вашег идентитеског сервера", "Analytics": "Аналитика", - "The information being sent to us to help make Riot.im better includes:": "У податке које нам шаљете зарад побољшавања Riot.im-а спадају:", + "The information being sent to us to help make %(brand)s better includes:": "У податке које нам шаљете зарад побољшавања %(brand)s-а спадају:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Ако страница садржи поверљиве податке (као што је назив собе, корисника или ИБ-ја групе), ти подаци се уклањају пре слања на сервер.", "%(oldDisplayName)s changed their display name to %(displayName)s.": "Корисник %(oldDisplayName)s је променио приказно име у %(displayName)s.", "Failed to set direct chat tag": "Нисам успео да поставим ознаку директног ћаскања", @@ -568,7 +568,7 @@ "Failed to add tag %(tagName)s to room": "Нисам успео да додам ознаку %(tagName)s на собу", "In reply to ": "Као одговор за ", "This room is not public. You will not be able to rejoin without an invite.": "Ова соба није јавна. Нећете моћи да поново приступите без позивнице.", - "Data from an older version of Riot 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.": "Подаци из старијег издања Riot-а су нађени. Ово ће узроковати лош рад шифровања с краја на крај у старијем издању. Размењене поруке које су шифроване с краја на крај у старијем издању је можда немогуће дешифровати у овом издању. Такође, ово може узроковати неуспешно размењивање порука са овим издањем. Ако доживите проблеме, одјавите се и пријавите се поново. Да бисте задржали историјат поруке, извезите па поново увезите ваше кључеве.", + "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.": "Подаци из старијег издања %(brand)s-а су нађени. Ово ће узроковати лош рад шифровања с краја на крај у старијем издању. Размењене поруке које су шифроване с краја на крај у старијем издању је можда немогуће дешифровати у овом издању. Такође, ово може узроковати неуспешно размењивање порука са овим издањем. Ако доживите проблеме, одјавите се и пријавите се поново. Да бисте задржали историјат поруке, извезите па поново увезите ваше кључеве.", "Logout": "Одјава", "Your Communities": "Ваше заједнице", "Error whilst fetching joined communities": "Грешка приликом добављања списка са приступљеним заједницама", @@ -613,7 +613,7 @@ "": "<није подржано>", "Import E2E room keys": "Увези E2E кључеве собе", "Cryptography": "Криптографија", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot прикупља анонимне податке о коришћењу да бисмо побољшали апликацију.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s прикупља анонимне податке о коришћењу да бисмо побољшали апликацију.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Приватност је веома важна нама те не сакупљамо било какве податке личне природе у нашој аналитици.", "Learn more about how we use analytics.": "Сазнајте више о нашем начину употребе аналитике.", "Labs": "Лабораторије", @@ -621,7 +621,7 @@ "Reject all %(invitedRooms)s invites": "Одбиј све позивнице за собе %(invitedRooms)s", "Start automatically after system login": "Самостално покрећи након пријаве на систем", "No media permissions": "Нема овлашћења за медије", - "You may need to manually permit Riot to access your microphone/webcam": "Можда ћете морати да ручно доделите овлашћења Riot-у за приступ микрофону/веб камери", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Можда ћете морати да ручно доделите овлашћења %(brand)s-у за приступ микрофону/веб камери", "No Microphones detected": "Нема уочених микрофона", "No Webcams detected": "Нема уочених веб камера", "Default Device": "Подразумевани уређај", @@ -635,7 +635,7 @@ "click to reveal": "кликни за приказ", "Homeserver is": "Кућни сервер је", "Identity Server is": "Идентитетски сервер је", - "riot-web version:": "riot-web издање:", + "%(brand)s version:": "%(brand)s издање:", "olm version:": "olm издање:", "Failed to send email": "Нисам успео да пошаљем мејл", "The email address linked to your account must be entered.": "Морате унети мејл адресу која је везана за ваш налог.", @@ -701,12 +701,12 @@ "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Извезена датотека ће бити заштићена са фразом. Требало би да унесете фразу овде, да бисте дешифровали датотеку.", "File to import": "Датотека за увоз", "Import": "Увези", - "Did you know: you can use communities to filter your Riot.im experience!": "Да ли сте знали: можете користити заједнице за филтрирање вашег Riot.im искуства!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Да ли сте знали: можете користити заједнице за филтрирање вашег %(brand)s искуства!", "Clear filter": "Очисти филтер", "Key request sent.": "Захтев за дељење кључа послат.", "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.": "Да бисте поставили филтер, повуците аватар заједнице на површ филтрирања скроз на леву страну екрана. Можете кликнути на аватар у површи филтрирања било када да бисте видели само собе и особе везане за ту заједницу.", "Fetching third party location failed": "Добављање локације треће стране није успело", - "A new version of Riot is available.": "Ново издање RIot-а је доступно.", + "A new version of %(brand)s is available.": "Ново издање RIot-а је доступно.", "Send Account Data": "Пошаљи податке налога", "All notifications are currently disabled for all targets.": "Сва обавештења су тренутно онемогућена за све циљеве.", "Uploading report": "Отпремам извештај", @@ -760,7 +760,7 @@ "Enter keywords separated by a comma:": "Унесите кључне речи одвојене зарезима:", "Forward Message": "Проследи поруку", "Remove %(name)s from the directory?": "Уклонити %(name)s из фасцикле?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot користи напредне могућности прегледача од којих неке нису доступне или су у пробној фази, у вашем прегледачу.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s користи напредне могућности прегледача од којих неке нису доступне или су у пробној фази, у вашем прегледачу.", "Event sent!": "Догађај је послат!", "Explore Account Data": "Истражи податке налога", "All messages (noisy)": "Све поруке (гласно)", @@ -802,8 +802,8 @@ "Show message in desktop notification": "Прикажи поруку у стоном обавештењу", "Unhide Preview": "Откриј преглед", "Unable to join network": "Не могу да приступим мрежи", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Можда сте их подесили у неком другом клијенту а не Riot-у. Не можете их преправљати у Riot-у али се и даље примењују", - "Sorry, your browser is not able to run Riot.": "Нажалост, ваш прегледач не може да покреће Riot.", + "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-у али се и даље примењују", + "Sorry, your browser is not able to run %(brand)s.": "Нажалост, ваш прегледач не може да покреће %(brand)s.", "Messages in group chats": "Поруке у групним ћаскањима", "Yesterday": "Јуче", "Error encountered (%(errorDetail)s).": "Догодила се грешка (%(errorDetail)s).", @@ -813,7 +813,7 @@ "Set Password": "Постави лозинку", "An error occurred whilst saving your email notification preferences.": "Догодила се грешка при чувању ваших поставки мејл обавештења.", "Resend": "Поново пошаљи", - "Riot does not know how to join a room on this network": "Riot не зна како да приступи соби на овој мрежи", + "%(brand)s does not know how to join a room on this network": "%(brand)s не зна како да приступи соби на овој мрежи", "Mentions only": "Само спомињања", "You can now return to your account after signing out, and sign in on other devices.": "Можете се вратити у ваш налог након што се одјавите и пријавите поново, на другим уређајима.", "Enable email notifications": "Омогући мејл обавештења", @@ -864,8 +864,8 @@ "Send analytics data": "Пошаљи аналитичке податке", "Enable widget screenshots on supported widgets": "Омогући снимке екрана виџета у подржаним виџетима", "Muted Users": "Утишани корисници", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Помозите побољшавање Riot.im програма тако што ћете послати анонимне податке о коришћењу. Ово ће захтевати коришћење колачића (погледајте нашу политику о колачићима).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Помозите побољшавање Riot.im програма тако што ћете послати анонимне податке о коришћењу. Ово ће захтевати коришћење колачића.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Помозите побољшавање %(brand)s програма тако што ћете послати анонимне податке о коришћењу. Ово ће захтевати коришћење колачића (погледајте нашу политику о колачићима).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Помозите побољшавање %(brand)s програма тако што ћете послати анонимне податке о коришћењу. Ово ће захтевати коришћење колачића.", "Yes, I want to help!": "Да, желим помоћи!", "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Не могу да учитам догађај на који је послат одговор, или не постоји или немате овлашћење да га погледате.", "To continue, please enter your password:": "Да бисте наставили, унесите вашу лозинку:", diff --git a/src/i18n/strings/sr_Latn.json b/src/i18n/strings/sr_Latn.json index 810f2a97cf..5e9b826039 100644 --- a/src/i18n/strings/sr_Latn.json +++ b/src/i18n/strings/sr_Latn.json @@ -5,7 +5,7 @@ "Failed to verify email address: make sure you clicked the link in the email": "Neuspela provera adrese elektronske pošte: proverite da li ste kliknuli na link u poruci elektronske pošte", "Add Phone Number": "Dodajte broj telefona", "The platform you're on": "Platforma koju koristite", - "The version of Riot.im": "Verzija Riot.im", + "The version of %(brand)s": "Verzija %(brand)s", "Whether or not you're logged in (we don't record your username)": "Da li ste prijavljeni ili ne (ne beležimo vaše korisničko ime)", "Your language of choice": "Vaš izbor jezika", "Which officially provided instance you are using, if any": "Koju zvaničnu instancu koristite, ako koristite", @@ -14,8 +14,8 @@ "Your identity server's URL": "URL vašeg servera identiteta", "e.g. %(exampleValue)s": "npr. %(exampleValue)s", "Dismiss": "Odbaci", - "Your Riot is misconfigured": "Vaš Riot nije dobro podešen", - "Chat with Riot Bot": "Ćaskajte sa Riot botom", + "Your %(brand)s is misconfigured": "Vaš %(brand)s nije dobro podešen", + "Chat with %(brand)s Bot": "Ćaskajte sa %(brand)s botom", "Sign In": "Prijavite se", "powered by Matrix": "pokreće Matriks", "Custom Server Options": "Prilagođene opcije servera", @@ -47,8 +47,8 @@ "Unnamed Room": "Soba bez imena", "Error": "Greška", "Unable to load! Check your network connectivity and try again.": "Neuspelo učitavanje! Proverite vašu mrežu i pokušajte ponovo.", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot nema dozvolu da vam šalje obaveštenja. Molim proverite podešavanja vašeg internet pregledača", - "Riot was not given permission to send notifications - please try again": "Riot nije dobio dozvolu da šalje obaveštenja. Molim pokušajte ponovo", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s nema dozvolu da vam šalje obaveštenja. Molim proverite podešavanja vašeg internet pregledača", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s nije dobio dozvolu da šalje obaveštenja. Molim pokušajte ponovo", "This email address was not found": "Ova adresa elektronske pošte nije pronađena", "Registration Required": "Potrebna je registracija", "You need to register to do this. Would you like to register now?": "Morate biti registrovani da bi uradili ovo. Da li želite da se registrujete sad?", diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index 72bd0b10ec..32bf56d6d4 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -7,7 +7,7 @@ "No Microphones detected": "Ingen mikrofon hittades", "No Webcams detected": "Ingen webbkamera hittades", "No media permissions": "Inga mediebehörigheter", - "You may need to manually permit Riot to access your microphone/webcam": "Du måste manuellt tillåta Riot att komma åt din mikrofon/kamera", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Du måste manuellt tillåta %(brand)s att komma åt din mikrofon/kamera", "Default Device": "Standardenhet", "Microphone": "Mikrofon", "Camera": "Kamera", @@ -211,9 +211,9 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s begärde en VoIP-konferens.", "Results from DuckDuckGo": "Resultat från DuckDuckGo", "Return to login screen": "Tillbaka till login-skärmen", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot har inte tillstånd att skicka aviseringar - kontrollera webbläsarens inställningar", - "Riot was not given permission to send notifications - please try again": "Riot fick inte tillstånd att skicka aviseringar - försök igen", - "riot-web version:": "riot-web -version:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s har inte tillstånd att skicka aviseringar - kontrollera webbläsarens inställningar", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s fick inte tillstånd att skicka aviseringar - försök igen", + "%(brand)s version:": "%(brand)s -version:", "Room %(roomId)s not visible": "Rummet %(roomId)s är inte synligt", "Room Colour": "Rumsfärg", "%(roomName)s does not exist.": "%(roomName)s finns inte.", @@ -275,7 +275,7 @@ "Guests can join": "Gäster kan gå med i rummet", "No rooms to show": "Inga fler rum att visa", "This phone number is already in use": "Detta telefonnummer används redan", - "The version of Riot.im": "Versionen av Riot.im", + "The version of %(brand)s": "Versionen av %(brand)s", "Call Failed": "Samtal misslyckades", "Call Anyway": "Ring ändå", "Call": "Ring", @@ -305,7 +305,7 @@ "Dec": "dec", "Invite to Community": "Bjud in till community", "Unable to enable Notifications": "Det går inte att aktivera aviseringar", - "The information being sent to us to help make Riot.im better includes:": "Informationen som skickas till oss för att hjälpa Riot.im att bli bättre inkluderar:", + "The information being sent to us to help make %(brand)s better includes:": "Informationen som skickas till oss för att hjälpa %(brand)s att bli bättre inkluderar:", "Review Devices": "Granska enheter", "Answer Anyway": "Svara ändå", "VoIP is unsupported": "VoIP stöds ej", @@ -315,7 +315,7 @@ "You are not in this room.": "Du är inte i det här rummet.", "You do not have permission to do that in this room.": "Du har inte behörighet att göra det i det här rummet.", "Fetching third party location failed": "Det gick inte att hämta platsdata från tredje part", - "A new version of Riot is available.": "En ny version av Riot är tillgänglig.", + "A new version of %(brand)s is available.": "En ny version av %(brand)s är tillgänglig.", "All notifications are currently disabled for all targets.": "Alla aviseringar är för tillfället avstängda för alla mål.", "Uploading report": "Laddar upp rapport", "Sunday": "söndag", @@ -370,7 +370,7 @@ "Enter keywords separated by a comma:": "Skriv in nyckelord, separerade med kommatecken:", "Search…": "Sök…", "Remove %(name)s from the directory?": "Ta bort %(name)s från katalogen?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot använder flera avancerade webbläsaregenskaper, av vilka alla inte stöds eller är experimentella i din nuvarande webbläsare.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s använder flera avancerade webbläsaregenskaper, av vilka alla inte stöds eller är experimentella i din nuvarande webbläsare.", "Remember, you can always set an email address in user settings if you change your mind.": "Kom ihåg att du alltid kan välja en e-postadress i dina användarinställningar om du ändrar dig.", "All messages (noisy)": "Alla meddelanden (högljudd)", "Saturday": "lördag", @@ -408,8 +408,8 @@ "Show message in desktop notification": "Visa meddelande i skrivbordsavisering", "Unhide Preview": "Visa förhandsvisning", "Unable to join network": "Det gick inte att ansluta till nätverket", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du kan ha konfigurerat dem i en annan klient än Riot. Du kan inte ändra dem i Riot men de tillämpas ändå", - "Sorry, your browser is not able to run Riot.": "Beklagar, din webbläsare kan inte köra Riot.", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Du kan ha konfigurerat dem i en annan klient än %(brand)s. Du kan inte ändra dem i %(brand)s men de tillämpas ändå", + "Sorry, your browser is not able to run %(brand)s.": "Beklagar, din webbläsare kan inte köra %(brand)s.", "Messages in group chats": "Meddelanden i gruppchattar", "Yesterday": "igår", "Error encountered (%(errorDetail)s).": "Fel påträffat (%(errorDetail)s).", @@ -417,7 +417,7 @@ "Unable to fetch notification target list": "Det gick inte att hämta aviseringsmållistan", "Set Password": "Välj lösenord", "Off": "Av", - "Riot does not know how to join a room on this network": "Riot kan inte gå med i ett rum på det här nätverket", + "%(brand)s does not know how to join a room on this network": "%(brand)s kan inte gå med i ett rum på det här nätverket", "Mentions only": "Endast omnämnande", "Failed to remove tag %(tagName)s from room": "Det gick inte att radera taggen %(tagName)s från rummet", "You can now return to your account after signing out, and sign in on other devices.": "Du kan nu återgå till ditt konto efter att ha loggat ut och logga in på andra enheter.", @@ -557,7 +557,7 @@ "New Password": "Nytt lösenord", "Do you want to set an email address?": "Vill du ange en epostadress?", "Use compact timeline layout": "Använd kompakt tidslinjelayout", - "Not a valid Riot keyfile": "Inte en giltig Riot-nyckelfil", + "Not a valid %(brand)s keyfile": "Inte en giltig %(brand)s-nyckelfil", "Authentication check failed: incorrect password?": "Autentiseringskontroll misslyckades: felaktigt lösenord?", "Always show encryption icons": "Visa alltid krypteringsikoner", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s bytte avatar för %(roomName)s", @@ -661,7 +661,7 @@ "Refresh": "Uppdatera", "Unable to restore session": "Det gick inte att återställa sessionen", "We encountered an error trying to restore your previous session.": "Ett fel uppstod vid återställning av din tidigare session.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Om du nyligen har använt en senare version av Riot kan din session vara inkompatibel med den här versionen. Stäng det här fönstret och använd senare versionen istället.", + "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.": "Om du nyligen har använt en senare version av %(brand)s kan din session vara inkompatibel med den här versionen. Stäng det här fönstret och använd senare versionen istället.", "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Att rensa webbläsarens lagring kan lösa problemet, men då loggas du ut och krypterad chatthistorik blir oläslig.", "Collapse Reply Thread": "Dölj svarstråd", "Terms and Conditions": "Villkor", @@ -688,10 +688,10 @@ "e.g. %(exampleValue)s": "t.ex. %(exampleValue)s", "Can't leave Server Notices room": "Kan inte lämna serveraviseringsrummet", "This room is used for important messages from the Homeserver, so you cannot leave it.": "Detta rum används för viktiga meddelanden från hemservern, så du kan inte lämna det.", - "Data from an older version of Riot 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.": "Data från en äldre version av Riot has upptäckts. Detta ska ha orsakat att totalsträckskryptering inte fungerat i den äldre versionen. Krypterade meddelanden som nyligen har skickats medans den äldre versionen användes kanske inte kan dekrypteras i denna version. Detta kan även orsaka att meddelanden skickade med denna version inte fungerar. Om du upplever problem, logga ut och in igen. För att behålla meddelandehistoriken, exportera dina nycklar och importera dem igen.", + "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.": "Data från en äldre version av %(brand)s has upptäckts. Detta ska ha orsakat att totalsträckskryptering inte fungerat i den äldre versionen. Krypterade meddelanden som nyligen har skickats medans den äldre versionen användes kanske inte kan dekrypteras i denna version. Detta kan även orsaka att meddelanden skickade med denna version inte fungerar. Om du upplever problem, logga ut och in igen. För att behålla meddelandehistoriken, exportera dina nycklar och importera dem igen.", "Confirm Removal": "Bekräfta borttagning", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Vänligen hjälp till att förbättra Riot.im genom att skicka anonyma användardata. Detta kommer att använda en cookie (se vår Cookiepolicy).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Vänligen hjälp till att förbättra Riot.im genom att skicka anonyma användardata. Detta kommer att använda en cookie.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Vänligen hjälp till att förbättra %(brand)s genom att skicka anonyma användardata. Detta kommer att använda en cookie (se vår Cookiepolicy).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Vänligen hjälp till att förbättra %(brand)s genom att skicka anonyma användardata. Detta kommer att använda en cookie.", "Yes, I want to help!": "Ja, jag vill hjälpa till!", "%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)slämnade och gick med igen %(count)s gånger", "%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)slämnade och gick med igen", @@ -789,7 +789,7 @@ "You're not currently a member of any communities.": "Du är för närvarande inte medlem i någon community.", "Communities": "Communityn", "Your Communities": "Dina communityn", - "Did you know: you can use communities to filter your Riot.im experience!": "Visste du att: du kan använda communityn för att filtrera din Riot.im-upplevelse!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Visste du att: du kan använda communityn för att filtrera din %(brand)s-upplevelse!", "Error whilst fetching joined communities": "Fel vid hämtning av anslutna communityn", "Featured Rooms:": "Utvalda rum:", "Featured Users:": "Utvalda användare:", @@ -858,7 +858,7 @@ "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)": "Glöm alla meddelanden som jag har skickat när mitt konto inaktiveras (Varning: detta kommer att göra så att framtida användare får se ofullständiga konversationer)", "To continue, please enter your password:": "För att fortsätta, ange ditt lösenord:", "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.": "Om du har anmält en bugg via GitHub, kan felsökningsloggar hjälpa oss spåra problemet. Felsökningsloggarna innehåller användningsdata för applikationen inklusive ditt användarnamn, ID eller alias för rum och grupper du besökt och användarnamn för andra användare. De innehåller inte meddelanden.", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot samlar in anonym analysdata för att vi ska kunna förbättra applikationen.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s samlar in anonym analysdata för att vi ska kunna förbättra applikationen.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Integritet är viktig för oss, så vi samlar inte in några personliga eller identifierbara uppgifter för våra analyser.", "Learn more about how we use analytics.": "Läs mer om hur vi använder analysdata.", "Analytics": "Analysdata", @@ -947,7 +947,7 @@ "Add some now": "Lägg till några nu", "Please review and accept the policies of this homeserver:": "Granska och acceptera policyn för denna hemserver:", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Innan du skickar in loggar måste du skapa en GitHub-bugg för att beskriva problemet.", - "Updating Riot": "Uppdaterar Riot", + "Updating %(brand)s": "Uppdaterar %(brand)s", "Open Devtools": "Öppna Devtools", "Show developer tools": "Visa utvecklingsverktyg", "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Du är administratör för denna community. Du kommer inte kunna gå med igen utan en inbjudan från en annan administratör.", @@ -1099,9 +1099,9 @@ "Deactivating your account is a permanent action - be careful!": "Inaktivering av ditt konto är en permanent åtgärd - var försiktig!", "General": "Allmänt", "Credits": "Tack", - "For help with using Riot, click here.": "För hjälp med att använda Riot, klicka här.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "För hjälp med att använda Riot, klicka här eller starta en chatt med vår bot med knappen nedan.", - "Chat with Riot Bot": "Chatta med Riot Bot", + "For help with using %(brand)s, click here.": "För hjälp med att använda %(brand)s, klicka här.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "För hjälp med att använda %(brand)s, klicka här eller starta en chatt med vår bot med knappen nedan.", + "Chat with %(brand)s Bot": "Chatta med %(brand)s Bot", "Help & About": "Hjälp & Om", "Bug reporting": "Felrapportering", "FAQ": "FAQ", @@ -1238,7 +1238,7 @@ "Main address": "Huvudadress", "Error updating flair": "Fel vid uppdatering av emblem", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Det uppstod ett fel vid uppdatering av emblem för detta rum. Servern kanske inte tillåter det eller ett så inträffade tillfälligt fel.", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Du har tidigare använt en nyare version av Riot på %(host)s. För att använda denna version igen med totalsträckskryptering, måste du logga ut och in igen. ", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Du har tidigare använt en nyare version av %(brand)s på %(host)s. För att använda denna version igen med totalsträckskryptering, måste du logga ut och in igen. ", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verifiera denna användare för att markera den som betrodd. Att kunna lita på användare ger en extra sinnesfrid när man använder totalsträckskrypterade meddelanden.", "A widget would like to verify your identity": "En widget vill verifiera din identitet", "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.": "En widget på %(widgetUrl)s vill verifiera din identitet. Genom att tillåta detta kommer widgeten att kunna verifiera ditt användar-ID, men inte agera som dig.", @@ -1264,11 +1264,11 @@ "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Det gick inte att hitta profiler för de Matrix-IDn som anges nedan - vill du bjuda in dem ändå?", "GitHub issue": "GitHub-ärende", "Notes": "Noteringar", - "You've previously used Riot 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, Riot needs to resync your account.": "Du har tidigare använt Riot på %(host)s med lazy loading av medlemmar aktiverat. I den här versionen är lazy loading inaktiverat. Eftersom den lokala cachen inte är kompatibel mellan dessa två inställningar behöver Riot synkronisera om ditt konto.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Om den andra versionen av Riot fortfarande är öppen i en annan flik, stäng den eftersom användning av Riot på samma värd med både lazy loading aktiverad och inaktiverad samtidigt kommer att orsaka problem.", + "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.": "Du har tidigare använt %(brand)s på %(host)s med lazy loading av medlemmar aktiverat. I den här versionen är lazy loading inaktiverat. Eftersom den lokala cachen inte är kompatibel mellan dessa två inställningar behöver %(brand)s synkronisera om ditt konto.", + "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.": "Om den andra versionen av %(brand)s fortfarande är öppen i en annan flik, stäng den eftersom användning av %(brand)s på samma värd med både lazy loading aktiverad och inaktiverad samtidigt kommer att orsaka problem.", "Incompatible local cache": "Inkompatibel lokal cache", "Clear cache and resync": "Töm cache och synkronisera om", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot använder nu 3-5 gånger mindre minne, genom att bara ladda information om andra användare när det behövs. Vänta medan vi återsynkroniserar med servern!", + "%(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!": "%(brand)s använder nu 3-5 gånger mindre minne, genom att bara ladda information om andra användare när det behövs. Vänta medan vi återsynkroniserar med servern!", "I don't want my encrypted messages": "Jag vill inte ha mina krypterade meddelanden", "Manually export keys": "Exportera nycklar manuellt", "You'll lose access to your encrypted messages": "Du kommer att förlora åtkomst till dina krypterade meddelanden", @@ -1296,7 +1296,7 @@ "Cancel All": "Avbryt alla", "Upload Error": "Uppladdningsfel", "Name or Matrix ID": "Namn eller Martix-ID", - "Your Riot is misconfigured": "Riot är felkonfigurerat", + "Your %(brand)s is misconfigured": "%(brand)s är felkonfigurerat", "Call failed due to misconfigured server": "Anrop misslyckades på grund av felkonfigurerad server", "Try using turn.matrix.org": "Prova att använda turn.matrix.org", "A conference call could not be started because the integrations server is not available": "Ett konferenssamtal kunde inte startas eftersom integrationsservern inte är tillgänglig", @@ -1315,7 +1315,7 @@ "%(senderName)s made no change.": "%(senderName)s gjorde ingen ändring.", "Cannot reach homeserver": "Kan inte nå hemservern", "Ensure you have a stable internet connection, or get in touch with the server admin": "Se till att du har en stabil internetanslutning, eller kontakta serveradministratören", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Be din Riot-administratör att kontrollera din konfiguration efter felaktiga eller duplicerade poster.", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Be din %(brand)s-administratör att kontrollera din konfiguration efter felaktiga eller duplicerade poster.", "Cannot reach identity server": "Kan inte nå identitetsservern", "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.": "Du kan registrera dig, men vissa funktioner kommer inte att vara tillgängliga förrän identitetsservern är online igen. Om du fortsätter att se den här varningen, kontrollera din konfiguration eller kontakta en serveradministratör.", "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.": "Du kan återställa ditt lösenord, men vissa funktioner kommer inte att vara tillgängliga förrän identitetsservern är online igen. Om du fortsätter att se den här varningen, kontrollera din konfiguration eller kontakta en serveradministratör.", @@ -1497,7 +1497,7 @@ "Your avatar URL": "Din avatar-URL", "Your user ID": "Ditt användar-ID", "Your theme": "Ditt tema", - "Riot URL": "Riot-URL", + "%(brand)s URL": "%(brand)s-URL", "Room ID": "Rums-ID", "Widget ID": "Widget-ID", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Att använda denna widget kan dela data med %(widgetDomain)s och din Integrationshanterare.", @@ -1535,7 +1535,7 @@ "Integrations are disabled": "Integrationer är inaktiverade", "Enable 'Manage Integrations' in Settings to do this.": "Aktivera \"Hantera integrationer\" i Inställningar för att göra detta.", "Integrations not allowed": "Integrationer inte tillåtna", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Ditt Riot tillåter dig inte att använda en Integrationshanterare för att göra detta. Vänligen kontakta en administratör.", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Ditt %(brand)s tillåter dig inte att använda en Integrationshanterare för att göra detta. Vänligen kontakta en administratör.", "Your homeserver doesn't seem to support this feature.": "Din hemserver verkar inte stödja den här funktionen.", "Message edits": "Meddelandedigeringar", "Preview": "Förhandsvisa", @@ -1547,11 +1547,11 @@ "Service": "Tjänst", "Summary": "Sammanfattning", "Document": "Dokument", - "The version of Riot": "Version av Riot", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Om du använder Riot på en enhet där pekskärm är den primära inmatningsmekanismen", - "Whether you're using Riot as an installed Progressive Web App": "Om du använder Riot som en installerad progressiv webbapp", + "The version of %(brand)s": "Version av %(brand)s", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Om du använder %(brand)s på en enhet där pekskärm är den primära inmatningsmekanismen", + "Whether you're using %(brand)s as an installed Progressive Web App": "Om du använder %(brand)s som en installerad progressiv webbapp", "Your user agent": "Din användaragent", - "The information being sent to us to help make Riot better includes:": "Informationen som skickas till oss för att förbättra Riot inkluderar:", + "The information being sent to us to help make %(brand)s better includes:": "Informationen som skickas till oss för att förbättra %(brand)s inkluderar:", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Det finns okända sessioner i det här rummet: om du fortsätter utan att verifiera dem kommer det att vara möjligt för någon att lyssna på ditt samtal.", "Review Sessions": "Granska sessioner", "If you cancel now, you won't complete verifying the other user.": "Om du avbryter nu kommer du inte att verifiera den andra användaren.", @@ -1597,7 +1597,7 @@ "Upgrade private room": "Uppgradera privat rum", "Upgrade public room": "Uppgradera publikt rum", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Att uppgradera ett rum är en avancerad åtgärd och rekommenderas vanligtvis när ett rum är instabilt på grund av buggar, saknade funktioner eller säkerhetsproblem.", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Detta påverkar vanligtvis bara hur rummet bearbetas på servern. Om du har problem med Riot, rapportera ett fel.", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Detta påverkar vanligtvis bara hur rummet bearbetas på servern. Om du har problem med %(brand)s, rapportera ett fel.", "You'll upgrade this room from to .": "Du kommer att uppgradera detta rum från till .", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Detta gör att du kan återgå till ditt konto efter att du har loggat ut, och logga in på andra sessioner.", "Help": "Hjälp", diff --git a/src/i18n/strings/ta.json b/src/i18n/strings/ta.json index 9bc5ccbfaf..5048441a37 100644 --- a/src/i18n/strings/ta.json +++ b/src/i18n/strings/ta.json @@ -1,5 +1,5 @@ { - "A new version of Riot is available.": "Riot-ன் புதிய பதிப்பு உள்ளது.", + "A new version of %(brand)s is available.": "%(brand)s-ன் புதிய பதிப்பு உள்ளது.", "Advanced notification settings": "மேம்பட்ட அறிவிப்பிற்கான அமைப்புகள்", "All messages": "அனைத்து செய்திகள்", "All messages (noisy)": "அனைத்து செய்திகள் (உரக்க)", @@ -86,8 +86,8 @@ "Update": "புதுப்பி", "Uploaded on %(date)s by %(user)s": "%(date)s அன்று %(user)s ஆல் பதிவேற்றப்பட்டது", "Uploading report": "அறிக்கை பதிவேற்றப்படுகிறது", - "Riot does not know how to join a room on this network": "இந்த வலையமைப்பில் உள்ள அறையில் எப்படி சேர்வதென்று Riotற்க்கு தெரியவில்லை", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot பல மேம்பட்ட உலாவி வசதிகளைப் பயன்படுத்துகிறது, அதில் சிலவற்றைக் காணவில்லை அல்லது உங்கள் உலாவியில் பரிசோதனைக்காக உள்ளது.", + "%(brand)s does not know how to join a room on this network": "இந்த வலையமைப்பில் உள்ள அறையில் எப்படி சேர்வதென்று %(brand)sற்க்கு தெரியவில்லை", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s பல மேம்பட்ட உலாவி வசதிகளைப் பயன்படுத்துகிறது, அதில் சிலவற்றைக் காணவில்லை அல்லது உங்கள் உலாவியில் பரிசோதனைக்காக உள்ளது.", "There are advanced notifications which are not shown here": "இங்கு காண்பிக்கப்படாத மேம்பட்ட அறிவிப்புகள் உள்ளது", "The server may be unavailable or overloaded": "வழங்கி அளவுமீறிய சுமையில் உள்ளது அல்லது செயல்பாட்டில் இல்லை", "Unable to fetch notification target list": "அறிவிப்பு பட்டியலை பெற முடியவில்லை", @@ -133,7 +133,7 @@ "This phone number is already in use": "இந்த தொலைபேசி எண் ஏற்கனவே பயன்பாட்டில் உள்ளது", "Failed to verify email address: make sure you clicked the link in the email": "மின்னஞ்சல் முகவரியைச் சரிபார்க்கத் தவறிவிட்டது: மின்னஞ்சலில் உள்ள இணைப்பைக் கிளிக் செய்துள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்", "The platform you're on": "நீங்கள் இருக்கும் தளம்", - "The version of Riot.im": "Riot.im இன் பதிப்பு", + "The version of %(brand)s": "%(brand)s இன் பதிப்பு", "Whether or not you're logged in (we don't record your username)": "நீங்கள் உள்நுழைந்திருந்தாலும் இல்லாவிட்டாலும் (உங்கள் பயனர்பெயரை நாங்கள் பதிவு செய்ய மாட்டோம்)", "Your language of choice": "நீங்கள் விரும்பும் மொழி", "Which officially provided instance you are using, if any": "நீங்கள் பயன்படுத்தும் அதிகாரப்பூர்வமாக வழங்கப்பட்ட உதாரணம் ஏதேனும் இருந்தால்", @@ -143,12 +143,12 @@ "Your identity server's URL": "உங்கள் அடையாள சர்வரின் URL", "e.g. %(exampleValue)s": "உதாரணமாக %(exampleValue)s", "Every page you use in the app": "பயன்பாட்டில் நீங்கள் பயன்படுத்தும் ஒவ்வொரு பக்கமும்", - "Your Riot is misconfigured": "உங்கள் Riot தவறாக உள்ளமைக்கப்பட்டுள்ளது", + "Your %(brand)s is misconfigured": "உங்கள் %(brand)s தவறாக உள்ளமைக்கப்பட்டுள்ளது", "Sign In": "உள்நுழைக", "e.g. ": "உதாரணமாக ", "Your device resolution": "உங்கள் சாதனத் தீர்மானம்", "Analytics": "பகுப்பாய்வு", - "The information being sent to us to help make Riot.im better includes:": "Riot.im ஐ சிறப்பாகச் செய்ய எங்களுக்கு அனுப்பப்படும் தகவல்களில் பின்வருவன அடங்கும்:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s ஐ சிறப்பாகச் செய்ய எங்களுக்கு அனுப்பப்படும் தகவல்களில் பின்வருவன அடங்கும்:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "இந்த பக்கம் ஒரு அறை, பயனர் அல்லது குழு ஐடி போன்ற அடையாளம் காணக்கூடிய தகவல்களை உள்ளடக்கியது, அந்த தரவு சேவையகத்திற்கு அனுப்பப்படுவதற்கு முன்பு அகற்றப்படும்.", "Call Failed": "அழைப்பு தோல்வியுற்றது", "Review Devices": "சாதனங்களை மதிப்பாய்வு செய்யவும்", diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json index c5afde7e24..1f1281bcf3 100644 --- a/src/i18n/strings/te.json +++ b/src/i18n/strings/te.json @@ -10,7 +10,7 @@ "No Microphones detected": "మైక్రోఫోన్లు కనుగొనబడలేదు", "No Webcams detected": "వెబ్కామ్లు కనుగొనబడలేదు", "No media permissions": "మీడియా అనుమతులు లేవు", - "You may need to manually permit Riot to access your microphone/webcam": "రియోట్ను ను మీరు మాన్యువల్ గా మీ మైక్రోఫోన్ / వెబ్క్యామ్ను ప్రాప్యత చేయడానికి అనుమతించాలి", + "You may need to manually permit %(brand)s to access your microphone/webcam": "రియోట్ను ను మీరు మాన్యువల్ గా మీ మైక్రోఫోన్ / వెబ్క్యామ్ను ప్రాప్యత చేయడానికి అనుమతించాలి", "Default Device": "డిఫాల్ట్ పరికరం", "Microphone": "మైక్రోఫోన్", "Camera": "కెమెరా", @@ -110,8 +110,8 @@ "Incorrect verification code": "ధృవీకరణ కోడ్ సరిగా లెదు", "unknown error code": "తెలియని కోడ్ లోపం", "Please enter the code it contains:": "దయచేసి దాన్ని కలిగి ఉన్న కోడ్ను నమోదు చేయండి:", - "riot-web version:": "రయట్-వెబ్ సంస్కరణ:", - "Riot was not given permission to send notifications - please try again": "రయట్ కు ప్రకటనలను పంపడానికి అనుమతి లేదు - దయచేసి మళ్ళీ ప్రయత్నించండి", + "%(brand)s version:": "రయట్-వెబ్ సంస్కరణ:", + "%(brand)s was not given permission to send notifications - please try again": "రయట్ కు ప్రకటనలను పంపడానికి అనుమతి లేదు - దయచేసి మళ్ళీ ప్రయత్నించండి", "Unable to restore session": "సెషన్ను పునరుద్ధరించడానికి సాధ్యపడలేదు", "Remove": "తొలగించు", "Room directory": "గది వివరము", @@ -126,7 +126,7 @@ "Search": "శోధన", "Settings": "అమరికలు", "Fetching third party location failed": "మూడవ పార్టీ స్థానాన్ని పొందడం విఫలమైంది", - "A new version of Riot is available.": "కొత్త రిమోట్ వివరణము అందుబాటులో ఉంది.", + "A new version of %(brand)s is available.": "కొత్త రిమోట్ వివరణము అందుబాటులో ఉంది.", "Advanced notification settings": "ఆధునిక తాఖీదు అమరిక", "Sunday": "ఆదివారం", "Guests can join": "అతిథులు చేరవచ్చు", @@ -188,7 +188,7 @@ "Invite to this room": "ఈ గదికి ఆహ్వానించండి", "Thursday": "గురువారం", "Search…": "శోధన…", - "Sorry, your browser is not able to run Riot.": "క్షమించండి, మీ బ్రౌజర్ రియట్ని అమలు చేయలేరు.", + "Sorry, your browser is not able to run %(brand)s.": "క్షమించండి, మీ బ్రౌజర్ రియట్ని అమలు చేయలేరు.", "Messages in group chats": "సమూహ మాటామంతిలో సందేశాలు", "Yesterday": "నిన్న", "Error encountered (%(errorDetail)s).": "లోపం సంభవించింది (%(errorDetail)s).", @@ -208,7 +208,7 @@ "This phone number is already in use": "ఈ ఫోన్ నంబర్ ఇప్పటికే వాడుకం లో ఉంది", "Failed to verify email address: make sure you clicked the link in the email": "ఇమెయిల్ అడ్రస్ ని నిరూపించలేక పోయాము. ఈమెయిల్ లో వచ్చిన లింక్ ని నొక్కారా", "The platform you're on": "మీరు ఉన్న ప్లాట్ఫార్మ్", - "The version of Riot.im": "రయట్.ఐఎమ్ యొక్క వెర్సన్", + "The version of %(brand)s": "రయట్.ఐఎమ్ యొక్క వెర్సన్", "Your homeserver's URL": "మీ హోమ్ సర్వర్ యొక్క URL", "Your identity server's URL": "మీ ఐడెంటిటి సర్వర్ యొక్క URL", "e.g. %(exampleValue)s": "ఉ.దా. %(exampleValue)s 1", diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index 333beca311..e8e4f638bd 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -26,7 +26,7 @@ "Reason": "เหตุผล", "Register": "ลงทะเบียน", "Results from DuckDuckGo": "ผลจาก DuckDuckGo", - "riot-web version:": "เวอร์ชัน riot-web:", + "%(brand)s version:": "เวอร์ชัน %(brand)s:", "Cancel": "ยกเลิก", "Dismiss": "ไม่สนใจ", "Mute": "เงียบ", @@ -47,7 +47,7 @@ "Admin": "ผู้ดูแล", "No Webcams detected": "ไม่พบกล้องเว็บแคม", "No media permissions": "ไม่มีสิทธิ์เข้าถึงสื่อ", - "You may need to manually permit Riot to access your microphone/webcam": "คุณอาจต้องให้สิทธิ์ Riot เข้าถึงไมค์โครโฟนไมค์โครโฟน/กล้องเว็บแคม ด้วยตัวเอง", + "You may need to manually permit %(brand)s to access your microphone/webcam": "คุณอาจต้องให้สิทธิ์ %(brand)s เข้าถึงไมค์โครโฟนไมค์โครโฟน/กล้องเว็บแคม ด้วยตัวเอง", "Algorithm": "อัลกอริทึม", "Authentication": "การยืนยันตัวตน", "%(items)s and %(lastItem)s": "%(items)s และ %(lastItem)s", @@ -157,8 +157,8 @@ "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s ลบชื่อที่แสดงแล้ว (%(oldDisplayName)s)", "%(senderName)s removed their profile picture.": "%(senderName)s ลบรูปโปรไฟล์ของเขาแล้ว", "Return to login screen": "กลับไปยังหน้าลงชื่อเข้าใช้", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot ไม่มีสิทธิ์ส่งการแจ้งเตือน - กรุณาตรวจสอบการตั้งค่าเบราว์เซอร์ของคุณ", - "Riot was not given permission to send notifications - please try again": "Riot ไม่ได้รับสิทธิ์ส่งการแจ้งเตือน - กรุณาลองใหม่อีกครั้ง", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s ไม่มีสิทธิ์ส่งการแจ้งเตือน - กรุณาตรวจสอบการตั้งค่าเบราว์เซอร์ของคุณ", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s ไม่ได้รับสิทธิ์ส่งการแจ้งเตือน - กรุณาลองใหม่อีกครั้ง", "Room Colour": "สีห้อง", "Rooms": "ห้องสนทนา", "Save": "บันทึก", @@ -302,7 +302,7 @@ "Error decrypting image": "เกิดข้อผิดพลาดในการถอดรหัสรูป", "Error decrypting video": "เกิดข้อผิดพลาดในการถอดรหัสวิดิโอ", "Fetching third party location failed": "การเรียกข้อมูลตำแหน่งจากบุคคลที่สามล้มเหลว", - "A new version of Riot is available.": "มี Riot เวอร์ชั่นใหม่", + "A new version of %(brand)s is available.": "มี %(brand)s เวอร์ชั่นใหม่", "I understand the risks and wish to continue": "ฉันเข้าใจความเสี่ยงและต้องการดำเนินการต่อ", "Advanced notification settings": "ตั้งค่าการแจ้งเตือนขั้นสูง", "Uploading report": "กำลังอัปโหลดรายงาน", @@ -358,7 +358,7 @@ "Enter keywords separated by a comma:": "กรอกคีย์เวิร์ดทั้งหมด คั่นด้วยเครื่องหมายจุลภาค:", "Search…": "ค้นหา…", "Remove %(name)s from the directory?": "ถอด %(name)s ออกจากไดเรกทอรี?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot ใช้คุณสมบัติขั้นสูงในเบราว์เซอร์หลายประการ คุณสมบัติบางอย่างอาจยังไม่พร้อมใช้งานหรืออยู่ในขั้นทดลองในเบราว์เซอร์ปัจจุบันของคุณ", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s ใช้คุณสมบัติขั้นสูงในเบราว์เซอร์หลายประการ คุณสมบัติบางอย่างอาจยังไม่พร้อมใช้งานหรืออยู่ในขั้นทดลองในเบราว์เซอร์ปัจจุบันของคุณ", "Unnamed room": "ห้องที่ไม่มีชื่อ", "All messages (noisy)": "ทุกข้อความ (เสียงดัง)", "Saturday": "วันเสาร์", @@ -394,13 +394,13 @@ "Forward Message": "ส่งต่อข้อความ", "Unhide Preview": "แสดงตัวอย่าง", "Unable to join network": "ไม่สามารถเข้าร่วมเครือข่ายได้", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "คุณอาจมีการตั้งค่าจากไคลเอนต์อื่นนอกจาก Riot การตั้งต่าเหล่านั้นยังถูกใช้งานอยู่แต่คุณจะปรับแต่งจากใน Riot ไม่ได้", - "Sorry, your browser is not able to run Riot.": "ขออภัย เบราว์เซอร์ของคุณไม่สามารถ run Riot ได้", + "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 ไม่ได้", + "Sorry, your browser is not able to run %(brand)s.": "ขออภัย เบราว์เซอร์ของคุณไม่สามารถ run %(brand)s ได้", "Messages in group chats": "ข้อความในแชทกลุ่ม", "Yesterday": "เมื่อวานนี้", "Error encountered (%(errorDetail)s).": "เกิดข้อผิดพลาด (%(errorDetail)s)", "Low Priority": "ความสำคัญต่ำ", - "Riot does not know how to join a room on this network": "Riot ไม่รู้วิธีเข้าร่วมห้องในเครือข่ายนี้", + "%(brand)s does not know how to join a room on this network": "%(brand)s ไม่รู้วิธีเข้าร่วมห้องในเครือข่ายนี้", "Set Password": "ตั้งรหัสผ่าน", "Off": "ปิด", "Mentions only": "เมื่อถูกกล่าวถึงเท่านั้น", diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 7b5a0ac3ec..bfe9f2176f 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -12,7 +12,7 @@ "No Microphones detected": "Hiçbir Mikrofon bulunamadı", "No Webcams detected": "Hiçbir Web kamerası bulunamadı", "No media permissions": "Medya izinleri yok", - "You may need to manually permit Riot to access your microphone/webcam": "Riot'un mikrofonunuza / web kameranıza el le erişmesine izin vermeniz gerekebilir", + "You may need to manually permit %(brand)s to access your microphone/webcam": "%(brand)s'un mikrofonunuza / web kameranıza el le erişmesine izin vermeniz gerekebilir", "Default Device": "Varsayılan Cihaz", "Microphone": "Mikrofon", "Camera": "Kamera", @@ -212,9 +212,9 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s bir VoIP konferansı talep etti.", "Results from DuckDuckGo": "DuckDuckGo Sonuçları", "Return to login screen": "Giriş ekranına dön", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot size bildirim gönderme iznine sahip değil - lütfen tarayıcı ayarlarınızı kontrol edin", - "Riot was not given permission to send notifications - please try again": "Riot'a bildirim gönderme izni verilmedi - lütfen tekrar deneyin", - "riot-web version:": "riot-web versiyon:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s size bildirim gönderme iznine sahip değil - lütfen tarayıcı ayarlarınızı kontrol edin", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s'a bildirim gönderme izni verilmedi - lütfen tekrar deneyin", + "%(brand)s version:": "%(brand)s versiyon:", "Room %(roomId)s not visible": "%(roomId)s odası görünür değil", "Room Colour": "Oda Rengi", "%(roomName)s does not exist.": "%(roomName)s mevcut değil.", @@ -363,7 +363,7 @@ "Start automatically after system login": "Sisteme giriş yaptıktan sonra otomatik başlat", "Analytics": "Analitik", "Options": "Seçenekler", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot , uygulamayı iyileştirmemize izin vermek için anonim analitik toplar.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s , uygulamayı iyileştirmemize izin vermek için anonim analitik toplar.", "Passphrases must match": "Şifrenin eşleşmesi gerekir", "Passphrase must not be empty": "Şifrenin boş olmaması gerekir", "Export room keys": "Oda anahtarlarını dışa aktar", @@ -385,7 +385,7 @@ "To continue, please enter your password.": "Devam etmek için , lütfen şifrenizi girin.", "I verify that the keys match": "Anahtarların uyuştuğunu doğruluyorum", "Unable to restore session": "Oturum geri yüklenemiyor", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Eğer daha önce Riot'un daha yeni bir versiyonunu kullandıysanız , oturumunuz bu sürümle uyumsuz olabilir . Bu pencereyi kapatın ve daha yeni sürüme geri dönün.", + "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.": "Eğer daha önce %(brand)s'un daha yeni bir versiyonunu kullandıysanız , oturumunuz bu sürümle uyumsuz olabilir . Bu pencereyi kapatın ve daha yeni sürüme geri dönün.", "Unknown Address": "Bilinmeyen Adres", "Unblacklist": "Karaliste Dışı", "Blacklist": "Kara Liste", @@ -422,7 +422,7 @@ "This will be your account name on the homeserver, or you can pick a different server.": "Bu sizin Ana Sunucunuzdaki hesap adınız olacak , veya farklı sunucu seçebilirsiniz.", "If you already have a Matrix account you can log in instead.": "Eğer Matrix hesabınız varsa , bunun yerine Giriş Yapabilirsiniz .", "Your browser does not support the required cryptography extensions": "Tarayıcınız gerekli şifreleme uzantılarını desteklemiyor", - "Not a valid Riot keyfile": "Geçersiz bir Riot anahtar dosyası", + "Not a valid %(brand)s keyfile": "Geçersiz bir %(brand)s anahtar dosyası", "Authentication check failed: incorrect password?": "Kimlik doğrulama denetimi başarısız oldu : yanlış şifre ?", "Do you want to set an email address?": "Bir e-posta adresi ayarlamak ister misiniz ?", "This will allow you to reset your password and receive notifications.": "Bu şifrenizi sıfırlamanızı ve bildirimler almanızı sağlayacak.", @@ -432,7 +432,7 @@ "Ignore request": "İsteği yoksay", "Encryption key request": "Şifreleme anahtarı isteği", "Fetching third party location failed": "Üçüncü parti konumunu çekemedi", - "A new version of Riot is available.": "Riot'un yeni bir versiyonu mevcuttur.", + "A new version of %(brand)s is available.": "%(brand)s'un yeni bir versiyonu mevcuttur.", "All notifications are currently disabled for all targets.": "Tüm bildirimler şu anda tüm hedefler için devre dışı bırakılmıştır.", "Uploading report": "Rapor yükleniyor", "Sunday": "Pazar", @@ -481,7 +481,7 @@ "Enter keywords separated by a comma:": "Anahtar kelimeleri virgül ile ayırarak girin:", "I understand the risks and wish to continue": "Riskleri anlıyorum ve devam etmek istiyorum", "Remove %(name)s from the directory?": "%(name)s'i dizinden kaldırılsın mı ?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot geçerli tarayıcınızda mevcut olmayan veya denemelik olan birçok gelişmiş tarayıcı özelliği kullanıyor.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s geçerli tarayıcınızda mevcut olmayan veya denemelik olan birçok gelişmiş tarayıcı özelliği kullanıyor.", "Unnamed room": "İsimsiz oda", "All messages (noisy)": "Tüm mesajlar (uzun)", "Saturday": "Cumartesi", @@ -518,8 +518,8 @@ "Search…": "Arama…", "Unhide Preview": "Önizlemeyi Göster", "Unable to join network": "Ağa bağlanılamıyor", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Onları Riot dışında bir istemciden yapılandırmış olabilirsiniz . Onları Riot içersinide ayarlayamazsınız ama hala geçerlidirler", - "Sorry, your browser is not able to run Riot.": "Üzgünüz , tarayıcınız Riot'u çalıştıramıyor .", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Onları %(brand)s dışında bir istemciden yapılandırmış olabilirsiniz . Onları %(brand)s içersinide ayarlayamazsınız ama hala geçerlidirler", + "Sorry, your browser is not able to run %(brand)s.": "Üzgünüz , tarayıcınız %(brand)s'u çalıştıramıyor .", "Uploaded on %(date)s by %(user)s": "%(user)s tarafında %(date)s e yüklendi", "Messages in group chats": "Grup sohbetlerindeki mesajlar", "Yesterday": "Dün", @@ -527,7 +527,7 @@ "Unable to fetch notification target list": "Bildirim hedef listesi çekilemedi", "An error occurred whilst saving your email notification preferences.": "E-posta bildirim tercihlerinizi kaydetme işlemi sırasında bir hata oluştu.", "Off": "Kapalı", - "Riot does not know how to join a room on this network": "Riot bu ağdaki bir odaya nasıl gireceğini bilmiyor", + "%(brand)s does not know how to join a room on this network": "%(brand)s bu ağdaki bir odaya nasıl gireceğini bilmiyor", "Mentions only": "Sadece Mention'lar", "Failed to remove tag %(tagName)s from room": "Odadan %(tagName)s etiketi kaldırılamadı", "You can now return to your account after signing out, and sign in on other devices.": "Şimdi oturumunuzu iptal ettikten sonra başka cihazda oturum açarak hesabınıza dönebilirsiniz.", @@ -539,7 +539,7 @@ "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!": "Geçerli tarayıcınız ile birlikte , uygulamanın görünüş ve kullanım hissi tamamen hatalı olabilir ve bazı ya da tüm özellikler çalışmayabilir. Yine de denemek isterseniz devam edebilirsiniz ancak karşılaşabileceğiniz sorunlar karşısında kendi başınasınız !", "There are advanced notifications which are not shown here": "Burada gösterilmeyen gelişmiş bildirimler var", "The platform you're on": "Platformunuz", - "The version of Riot.im": "Riot.im'in sürümü", + "The version of %(brand)s": "%(brand)s'in sürümü", "Your language of choice": "Dil seçiminiz", "Which officially provided instance you are using, if any": "Hangi resmi destekli platformu kullanmaktasınız (eğer varsa)", "Add Email Address": "Eposta Adresi Ekle", @@ -602,14 +602,14 @@ "%(names)s and %(count)s others are typing …|one": "%(names)s ve bir diğeri yazıyor…", "%(names)s and %(lastPerson)s are typing …": "%(names)s ve %(lastPerson)s yazıyor…", "Cannot reach homeserver": "Ana sunucuya erişilemiyor", - "Your Riot is misconfigured": "Riot hatalı ayarlanmış", + "Your %(brand)s is misconfigured": "%(brand)s hatalı ayarlanmış", "Cannot reach identity server": "Kimlik sunucu erişilemiyor", "No homeserver URL provided": "Ana sunucu adresi belirtilmemiş", "Unexpected error resolving homeserver configuration": "Ana sunucu yapılandırması çözümlenirken beklenmeyen hata", "Unexpected error resolving identity server configuration": "Kimlik sunucu yapılandırması çözümlenirken beklenmeyen hata", "The message you are trying to send is too large.": "Göndermeye çalıştığın mesaj çok büyük.", "This homeserver has hit its Monthly Active User limit.": "Bu ana sunucu Aylık Aktif Kullanıcı limitine ulaştı.", - "Riot URL": "Riot Linki", + "%(brand)s URL": "%(brand)s Linki", "Room ID": "Oda ID", "More options": "Daha fazla seçenek", "Join": "Katıl", @@ -691,7 +691,7 @@ "Integrations not allowed": "Bütünleştirmelere izin verilmiyor", "Incompatible local cache": "Yerel geçici bellek uyumsuz", "Clear cache and resync": "Geçici belleği temizle ve yeniden eşle", - "Updating Riot": "Riot güncelleniyor", + "Updating %(brand)s": "%(brand)s güncelleniyor", "I don't want my encrypted messages": "Şifrelenmiş mesajlarımı istemiyorum", "Manually export keys": "Elle dışa aktarılmış anahtarlar", "You'll lose access to your encrypted messages": "Şifrelenmiş mesajlarınıza erişiminizi kaybedeceksiniz", @@ -851,7 +851,7 @@ "Whether or not you're logged in (we don't record your username)": "İster oturum açın yada açmayın (biz kullanıcı adınızı kaydetmiyoruz)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Zengin Metin Düzenleyicisinin Zengin metin modunu kullanıyor ya da kullanmıyorsunuz", "Your homeserver's URL": "Ana sunucunuzun URL’i", - "The information being sent to us to help make Riot.im better includes:": "Riot.im i daha iyi yapmamıza yardımcı olacak bize gönderdiğiniz bilgilerin içeriği:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s i daha iyi yapmamıza yardımcı olacak bize gönderdiğiniz bilgilerin içeriği:", "Try using turn.matrix.org": "turn.matrix.org i kullanarak dene", "You do not have permission to start a conference call in this room": "Bu odada bir konferans başlatmak için izniniz yok", "The file '%(fileName)s' failed to upload.": "%(fileName)s dosyası için yükleme başarısız.", @@ -1235,8 +1235,8 @@ "Set a new account password...": "Yeni bir hesap parolası belirle...", "Deactivating your account is a permanent action - be careful!": "Hesabınızı pasifleştirmek bir kalıcı eylemdir - dikkat edin!", "Deactivate account": "Hesabı pasifleştir", - "For help with using Riot, click here.": "Riot kullanarak yardım etmek için, buraya tıklayın.", - "Chat with Riot Bot": "Riot Bot ile Sohbet Et", + "For help with using %(brand)s, click here.": "%(brand)s kullanarak yardım etmek için, buraya tıklayın.", + "Chat with %(brand)s Bot": "%(brand)s Bot ile Sohbet Et", "Submit debug logs": "Hata ayıklama kayıtlarını gönder", "Something went wrong. Please try again or view your console for hints.": "Bir şeyler hatalı gitti. Lütfen yeniden deneyin veya ipuçları için konsolunuza bakın.", "Please verify the room ID or alias and try again.": "Lütfen odanın ID si veya lakabı doğrulayın ve yeniden deneyin.", @@ -1417,7 +1417,7 @@ "Set a room alias to easily share your room with other people.": "Odanızı diğer kişilerle kolayca paylaşabilmek için bir oda lakabı ayarların.", "Create a public room": "Halka açık bir oda oluşturun", "Make this room public": "Bu odayı halka açık yap", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Sohbet tarihçesini kaybetmemek için, çıkmadan önce odanızın anahtarlarını dışarıya aktarın. Bunu yapabilmek için Riotun daha yeni sürümü gerekli. Ulaşmak için geri gitmeye ihtiyacınız var", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Sohbet tarihçesini kaybetmemek için, çıkmadan önce odanızın anahtarlarını dışarıya aktarın. Bunu yapabilmek için %(brand)sun daha yeni sürümü gerekli. Ulaşmak için geri gitmeye ihtiyacınız var", "Continue With Encryption Disabled": "Şifreleme Kapalı Şekilde Devam Et", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "%(fileName)s dosyası anasunucunun yükleme boyutu limitini aşıyor", "Double check that your server supports the room version chosen and try again.": "Seçtiğiniz oda sürümünün sunucunuz tarafından desteklenip desteklenmediğini iki kez kontrol edin ve yeniden deneyin.", @@ -1433,7 +1433,7 @@ "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s bir çağrı başlattı. (Bu tarayıcı tarafından desteklenmiyor)", "%(senderName)s placed a video call.": "%(senderName)s bir görüntülü çağrı yaptı.", "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s bir görüntülü çağrı yaptı. (bu tarayıcı tarafından desteklenmiyor)", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Riot yöneticinize yapılandırmanızın hatalı ve mükerrer girdilerini kontrol etmesi için talepte bulunun.", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "%(brand)s yöneticinize yapılandırmanızın hatalı ve mükerrer girdilerini kontrol etmesi için talepte bulunun.", "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.": "Kayıt olabilirsiniz, fakat kimlik sunucunuz çevrimiçi olana kadar bazı özellikler mevcut olmayacak. Bu uyarıyı sürekli görüyorsanız, yapılandırmanızı kontrol edin veya sunucu yöneticinizle iletişime geçin.", "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.": "Parolanızı sıfırlayabilirsiniz, fakat kimlik sunucunuz çevrimiçi olana kadar bazı özellikler mevcut olmayacak. Bu uyarıyı sürekli görüyorsanız, yapılandırmanızı kontrol edin veya sunucu yöneticinizle iletişime geçin.", "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.": "Oturum açabilirsiniz, fakat kimlik sunucunuz çevrimiçi olana kadar bazı özellikler mevcut olmayacak. Bu uyarıyı sürekli görüyorsanız, yapılandırmanızı kontrol edin veya sunucu yöneticinizle iletişime geçin.", @@ -1537,7 +1537,7 @@ "Everyone in this room is verified": "Bu odadaki herkes doğrulanmış", "Some sessions for this user are not trusted": "Bu kullanıcı için bazı oturumlar güvenilir değil", "All sessions for this user are trusted": "Bu kullanıcı için tüm oturumlar güvenilir", - "The version of Riot": "Riot sürümü", + "The version of %(brand)s": "%(brand)s sürümü", "Your user agent": "Kullanıcı aracınız", "If you cancel now, you won't complete verifying the other user.": "Şimdi iptal ederseniz, diğer kullanıcıyı doğrulamayı tamamlamış olmayacaksınız.", "If you cancel now, you won't complete verifying your other session.": "Şimdi iptal ederseniz, diğer oturumu doğrulamış olmayacaksınız.", @@ -1729,7 +1729,7 @@ "%(inviter)s has invited you to join this community": "%(inviter)s sizi bu topluluğa katılmanız için davet etti", "This room is not public. You will not be able to rejoin without an invite.": "Bu oda açık bir oda değil. Davet almadan tekrar katılamayacaksınız.", "%(creator)s created and configured the room.": "%(creator)s odayı oluşturdu ve yapılandırdı.", - "Riot failed to get the public room list.": "Açık oda listesini getirirken Riot başarısız oldu.", + "%(brand)s failed to get the public room list.": "Açık oda listesini getirirken %(brand)s başarısız oldu.", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Bu odada bilinmeyen oturumlar mevcut: eğer doğrulamadan devam ederseniz, birilerinin çağrılarınıza göz atma durumu ortaya çıkabilir.", "If you cancel now, you won't complete your secret storage operation.": "Eğer şimdi iptal ederseniz, sır depolama operasyonunu tamamlamış olmayacaksınız.", "Show these rooms to non-members on the community page and room list?": "Bu odaları oda listesinde ve topluluğun sayfasında üye olmayanlara göster?", @@ -1753,10 +1753,10 @@ "Failed to re-authenticate": "Yeniden kimlik doğrulama başarısız", "A new recovery passphrase and key for Secure Messages have been detected.": "Yeni bir kurtarma parolası ve Güvenli Mesajlar için anahtar tespit edildi.", "Not currently indexing messages for any room.": "Şu an hiç bir odada mesaj indeksleme yapılmıyor.", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Riot'u ana giriş yöntemi dokunma olan bir cihazda kullanıyor olsanızda", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "%(brand)s'u ana giriş yöntemi dokunma olan bir cihazda kullanıyor olsanızda", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "'Breadcrumbs' özelliğini kullanıp kullanmadığınız (oda listesi üzerinde avatarlar)", - "Whether you're using Riot as an installed Progressive Web App": "Riot'u gelişmiş web uygulaması olarak yükleyip yüklemediğinizi", - "The information being sent to us to help make Riot better includes:": "Riot'u geliştirmemizde bize yardım etmek için gönderdiğiniz bilgiler şunları içeriyor:", + "Whether you're using %(brand)s as an installed Progressive Web App": "%(brand)s'u gelişmiş web uygulaması olarak yükleyip yüklemediğinizi", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s'u geliştirmemizde bize yardım etmek için gönderdiğiniz bilgiler şunları içeriyor:", "A call is currently being placed!": "Bir çağrı şu anda başlatılıyor!", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Şu anda dosya ile birlikte mesaj yollamak mümkün değil. Dosyayı mesajsız yüklemek ister misiniz?", "PM": "24:00", diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index 207ed0a8e6..c4dee59eb9 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -35,7 +35,7 @@ "Favourites": "Вибрані", "Fill screen": "На весь екран", "No media permissions": "Нема дозволів на відео/аудіо", - "You may need to manually permit Riot to access your microphone/webcam": "Можливо, вам треба дозволити Riot використання мікрофону/камери вручну", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Можливо, вам треба дозволити %(brand)s використання мікрофону/камери вручну", "Default Device": "Уставний пристрій", "Microphone": "Мікрофон", "Camera": "Камера", @@ -86,7 +86,7 @@ "This phone number is already in use": "Цей телефонний номер вже використовується", "Fetching third party location failed": "Не вдалось отримати стороннє місцеперебування", "Messages in one-to-one chats": "Повідомлення у чатах \"сам на сам\"", - "A new version of Riot is available.": "Доступне оновлення для Riot.", + "A new version of %(brand)s is available.": "Доступне оновлення для %(brand)s.", "Send Account Data": "Відправити данні аккаунта", "Advanced notification settings": "Додаткові налаштування сповіщень", "Uploading report": "Завантаження звіту", @@ -147,7 +147,7 @@ "Forward Message": "Переслати повідомлення", "You have successfully set a password and an email address!": "Пароль та адресу е-пошти успішно встановлено!", "Remove %(name)s from the directory?": "Прибрати %(name)s з каталогу?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot використовує багато новітніх функцій, деякі з яких не доступні або є експериментальними у вашому оглядачі.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s використовує багато новітніх функцій, деякі з яких не доступні або є експериментальними у вашому оглядачі.", "Developer Tools": "Інструменти розробника", "Preparing to send logs": "Підготовка до відправки журланлу", "Unnamed room": "Неназвана кімната", @@ -193,8 +193,8 @@ "Reply": "Відповісти", "Show message in desktop notification": "Показати повідомлення в сповіщення на робочому столі", "Unable to join network": "Неможливо приєднатись до мережі", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Можливо, ви налаштували їх не у Riot, а у іншому застосунку. Ви не можете регулювати їх у Riot, але вони все ще мають силу", - "Sorry, your browser is not able to run Riot.": "Вибачте, ваш оглядач не спроможний запустити Riot.", + "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, але вони все ще мають силу", + "Sorry, your browser is not able to run %(brand)s.": "Вибачте, ваш оглядач не спроможний запустити %(brand)s.", "Uploaded on %(date)s by %(user)s": "Завантажено %(date)s користувачем %(user)s", "Messages in group chats": "Повідомлення у групових чатах", "Yesterday": "Вчора", @@ -203,7 +203,7 @@ "Unable to fetch notification target list": "Неможливо отримати перелік цілей сповіщення", "Set Password": "Встановити пароль", "Off": "Вимкнено", - "Riot does not know how to join a room on this network": "Riot не знає як приєднатись до кімнати у цій мережі", + "%(brand)s does not know how to join a room on this network": "%(brand)s не знає як приєднатись до кімнати у цій мережі", "Mentions only": "Тільки згадки", "Failed to remove tag %(tagName)s from room": "Не вдалося прибрати з кімнати мітку %(tagName)s", "You can now return to your account after signing out, and sign in on other devices.": "Тепер ви можете повернутися до своєї обліковки після виходу з неї, та зайти з інших пристроїв.", @@ -225,7 +225,7 @@ "Profile": "Профіль", "click to reveal": "натисніть щоб побачити", "Homeserver is": "Домашній сервер —", - "The version of Riot.im": "Версія Riot.im", + "The version of %(brand)s": "Версія %(brand)s", "Your language of choice": "Обрана мова", "Which officially provided instance you are using, if any": "Яким офіційно наданим примірником ви користуєтесь (якщо користуєтесь)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Чи використовуєте ви режим форматованого тексту у редакторі Rich Text Editor", @@ -239,7 +239,7 @@ "Your User Agent": "Ваш користувацький агент", "Your device resolution": "Роздільна здатність вашого пристрою", "Analytics": "Аналітика", - "The information being sent to us to help make Riot.im better includes:": "Інформація, що надсилається нам, щоб допомогти зробити Riot.im кращим, включає в себе:", + "The information being sent to us to help make %(brand)s better includes:": "Інформація, що надсилається нам, щоб допомогти зробити %(brand)s кращим, включає в себе:", "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Введіть пароль для захисту експортованого файлу. Щоб розшифрувати файл потрібно буде ввести цей пароль.", "Call Failed": "Виклик не вдався", "Review Devices": "Перевірити пристрої", @@ -301,8 +301,8 @@ "Failed to invite users to community": "Не вдалося запросити користувачів до кімнати", "Failed to invite users to %(groupId)s": "Не вдалося запросити користувачів до %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "Не вдалося додати такі кімнати до %(groupId)s:", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot не має дозволу надсилати вам сповіщення — будь ласка, перевірте налаштування переглядача", - "Riot was not given permission to send notifications - please try again": "Riot не має дозволу надсилати сповіщення — будь ласка, спробуйте ще раз", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s не має дозволу надсилати вам сповіщення — будь ласка, перевірте налаштування переглядача", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s не має дозволу надсилати сповіщення — будь ласка, спробуйте ще раз", "Unable to enable Notifications": "Не вдалося увімкнути сповіщення", "This email address was not found": "Не знайдено адресу електронної пошти", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Схоже, ваша адреса електронної пошти не пов'язана з жодним ідентифікатор Matrix на цьому домашньому сервері.", @@ -398,7 +398,7 @@ "Please contact your service administrator to continue using the service.": "Будь ласка, зв'яжіться з адміністратором вашого сервісу, щоб продовжити користуватися цим сервісом.", "Unable to connect to Homeserver. Retrying...": "Не вдається приєднатися до домашнього сервера. Повторення спроби...", "Your browser does not support the required cryptography extensions": "Ваша веб-переглядачка не підтримує необхідних криптографічних функцій", - "Not a valid Riot keyfile": "Файл ключа Riot некоректний", + "Not a valid %(brand)s keyfile": "Файл ключа %(brand)s некоректний", "Authentication check failed: incorrect password?": "Помилка автентифікації: неправильний пароль?", "Sorry, your homeserver is too old to participate in this room.": "Вибачте, ваш домашній сервер занадто старий, щоб приєднатися до цієї кімнати.", "Please contact your homeserver administrator.": "Будь ласка, зв'яжіться з адміністратором вашого домашнього сервера.", @@ -467,7 +467,7 @@ "Failed to mute user": "Не вдалося заглушити користувача", "Failed to toggle moderator status": "Не вдалося перемкнути статус модератора", "Failed to change power level": "Не вдалося змінити рівень повноважень", - "Chat with Riot Bot": "Балачка з Riot-ботом", + "Chat with %(brand)s Bot": "Балачка з %(brand)s-ботом", "Whether or not you're logged in (we don't record your username)": "Незалежно від того, увійшли ви чи ні (ми не записуємо ваше ім'я користувача)", "A conference call could not be started because the integrations server is not available": "Конференц-дзвінок не можна розпочати оскільки інтеграційний сервер недоступний", "The file '%(fileName)s' failed to upload.": "Файл '%(fileName)s' не вийшло відвантажити.", @@ -512,7 +512,7 @@ "You cannot modify widgets in this room.": "Ви не можете змінювати віджети у цій кімнаті.", "Forces the current outbound group session in an encrypted room to be discarded": "Примусово відкидає поточний вихідний груповий сеанс у шифрованій кімнаті", "Sends the given message coloured as a rainbow": "Надсилає вказане повідомлення розфарбоване веселкою", - "Your Riot is misconfigured": "Ваш Riot налаштовано неправильно", + "Your %(brand)s is misconfigured": "Ваш %(brand)s налаштовано неправильно", "Join the discussion": "Приєднатися до обговорення", "Upload": "Відвантажити", "Upload file": "Відвантажити файл", @@ -522,8 +522,8 @@ "This room has been replaced and is no longer active.": "Ця кімната була замінена і не є активною.", "You do not have permission to post to this room": "У вас нема дозволу дописувати у цю кімнату", "Sign out": "Вийти", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Щоб уникнути втрати історії ваших листувань, ви маєте експортувати ключі кімнати перед виходом. Вам треба буде повернутися до новішої версії Riot аби зробити це", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Раніше ви використовували новішу версію Riot на %(host)s. Для повторного користування цією версією з наскрізним шифруванням вам треба буде вийти та зайти знову. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Щоб уникнути втрати історії ваших листувань, ви маєте експортувати ключі кімнати перед виходом. Вам треба буде повернутися до новішої версії %(brand)s аби зробити це", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Раніше ви використовували новішу версію %(brand)s на %(host)s. Для повторного користування цією версією з наскрізним шифруванням вам треба буде вийти та зайти знову. ", "Incompatible Database": "Несумісна база даних", "Continue With Encryption Disabled": "Продовжити із вимкненим шифруванням", "Unknown error": "Невідома помилка", @@ -571,11 +571,11 @@ "Confirm adding this phone number by using Single Sign On to prove your identity.": "Підтвердьте додавання цього телефонного номера через використання Single Sign On аби довести вашу ідентичність.", "Confirm adding phone number": "Підтвердити додавання телефонного номера", "Click the button below to confirm adding this phone number.": "Клацніть на кнопці нижче щоб підтвердити додавання цього телефонного номера.", - "The version of Riot": "Версія Riot", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Чи використовуєте ви Riot на пристрої, де основним засобом вводження є дотик", - "Whether you're using Riot as an installed Progressive Web App": "Чи використовуєте ви Riot як встановлений Progressive Web App", + "The version of %(brand)s": "Версія %(brand)s", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Чи використовуєте ви %(brand)s на пристрої, де основним засобом вводження є дотик", + "Whether you're using %(brand)s as an installed Progressive Web App": "Чи використовуєте ви %(brand)s як встановлений Progressive Web App", "Your user agent": "Ваш user agent", - "The information being sent to us to help make Riot better includes:": "Відсилана до нас інформація, що допомагає покращити Riot, містить:", + "The information being sent to us to help make %(brand)s better includes:": "Відсилана до нас інформація, що допомагає покращити %(brand)s, містить:", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "У цій кімнаті є невідомі сесії: якщо ви продовжите не звіряючи їх, то ваші розмови можуть бути прослухані.", "Review Sessions": "Переглянути сесії", "If you cancel now, you won't complete verifying the other user.": "Якщо ви скасуєте зараз, то не завершите звіряння іншого користувача.", @@ -604,8 +604,8 @@ "Deactivate account": "Знедіяти обліківку", "Legal": "Правова інформація", "Credits": "Подяки", - "For help with using Riot, click here.": "Якщо необхідна допомога у користуванні Riot'ом, клацніть тут.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Якщо необхідна допомога у користуванні Riot'ом, клацніть тут або розпочніть балачку з нашим ботом, клацнувши на кнопці нижче.", + "For help with using %(brand)s, click here.": "Якщо необхідна допомога у користуванні %(brand)s'ом, клацніть тут.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Якщо необхідна допомога у користуванні %(brand)s'ом, клацніть тут або розпочніть балачку з нашим ботом, клацнувши на кнопці нижче.", "Join the conversation with an account": "Приєднатись до бесіди з обліківкою", "Unable to restore session": "Неможливо відновити сесію", "We encountered an error trying to restore your previous session.": "Ми натрапили на помилку, намагаючись відновити вашу попередню сесію.", @@ -621,9 +621,9 @@ "Forget this room": "Забути цю кімнату", "Re-join": "Перепід'єднатись", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Це запрошення до %(roomName)s було надіслане на %(email)s, яка не пов'язана з вашою обліківкою", - "Link this email with your account in Settings to receive invites directly in Riot.": "Зв'яжіть цю е-пошту з вашою обліківкою у Налаштуваннях щоб отримувати сповіщення прямо у Riot.", + "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": "Це запрошення до %(roomName)s було надіслане на %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "Використовувати сервер ідентифікації у Налаштуваннях щоб отримувати запрошення прямо у Riot.", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "Використовувати сервер ідентифікації у Налаштуваннях щоб отримувати запрошення прямо у %(brand)s.", "Are you sure you want to deactivate your account? This is irreversible.": "Ви впевнені у тому, що бажаєте знедіяти вашу обліківку? Це є безповоротним.", "Confirm account deactivation": "Підтвердьте деактивацію обліківки", "To continue, please enter your password:": "Щоб продовжити, введіть, будь ласка, ваш пароль:", diff --git a/src/i18n/strings/vi.json b/src/i18n/strings/vi.json index 14575a61ff..7176f2a568 100644 --- a/src/i18n/strings/vi.json +++ b/src/i18n/strings/vi.json @@ -3,7 +3,7 @@ "This phone number is already in use": "Số điện thoại này hiện đã được sử dụng", "Failed to verify email address: make sure you clicked the link in the email": "Xác thực email thất bại: hãy đảm bảo bạn nhấp đúng đường dẫn đã gửi vào email", "The platform you're on": "Nền tảng bạn đang tham gia", - "The version of Riot.im": "Phiên bản của Riot.im", + "The version of %(brand)s": "Phiên bản của %(brand)s", "Your language of choice": "Ngôn ngữ bạn chọn", "Your homeserver's URL": "Đường dẫn Homeserver của bạn", "Whether or not you're logged in (we don't record your username)": "Dù bạn có đăng nhập hay không (chúng tôi không lưu tên đăng nhập của bạn)", @@ -16,7 +16,7 @@ "Your User Agent": "Trình duyệt của bạn", "Your device resolution": "Độ phân giải thiết bị", "Analytics": "Phân tích", - "The information being sent to us to help make Riot.im better includes:": "Thông tin gửi lên máy chủ giúp cải thiện Riot.im bao gồm:", + "The information being sent to us to help make %(brand)s better includes:": "Thông tin gửi lên máy chủ giúp cải thiện %(brand)s bao gồm:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Trường hợp trang này chứa thông tin định danh như phòng chat, người dùng hoặc mã nhóm, dữ liệu định danh sẽ được loại bỏ trước khi gửi lên máy chủ.", "Call Failed": "Cuộc gọi thất bại", "Review Devices": "Xác nhận thiết bị", @@ -93,8 +93,8 @@ "Error": "Lỗi", "Unable to load! Check your network connectivity and try again.": "Không thể tải! Kiểm tra kết nối và thử lại.", "Dismiss": "Bỏ qua", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot không có đủ quyền để gửi notification - vui lòng kiểm tra thiết lập trình duyệt", - "Riot was not given permission to send notifications - please try again": "Riot không được cấp quyền để gửi notification - vui lòng thử lại", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s không có đủ quyền để gửi notification - vui lòng kiểm tra thiết lập trình duyệt", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s không được cấp quyền để gửi notification - vui lòng thử lại", "Unable to enable Notifications": "Không thể bật Notification", "This email address was not found": "Địa chỉ email này không tồn tại trong hệ thống", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Email của bạn không được liên kết với một mã Matrix ID nào trên Homeserver này.", @@ -228,8 +228,8 @@ "%(names)s and %(lastPerson)s are typing …": "%(names)s và %(lastPerson)s đang gõ …", "Cannot reach homeserver": "Không thể kết nối tới máy chủ", "Ensure you have a stable internet connection, or get in touch with the server admin": "Đảm bảo bạn có kết nối Internet ổn địn, hoặc liên hệ Admin để được hỗ trợ", - "Your Riot is misconfigured": "Hệ thống Riot của bạn bị thiết lập sai", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Liên hệ Admin để kiểm tra thiết lập của bạn để sửa lỗi.", + "Your %(brand)s is misconfigured": "Hệ thống %(brand)s của bạn bị thiết lập sai", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Liên hệ Admin để kiểm tra thiết lập của bạn để sửa lỗi.", "Cannot reach identity server": "Không thể kết nối server định danh", "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.": "Bạn có thể đăng ký, nhưng một vài chức năng sẽ không sử đụng dược cho đến khi server định danh hoạt động trở lại. Nếu bạn thấy thông báo này, hãy kiểm tra thiết lập hoặc liên hệ 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.": "Bạn có thể đặt lại mật khẩu, nhưng một vài chức năng sẽ không sử đụng dược cho đến khi server định danh hoạt động trở lại. Nếu bạn thấy thông báo này, hãy kiểm tra thiết lập hoặc liên hệ Admin.", @@ -245,7 +245,7 @@ "%(items)s and %(count)s others|one": "%(items)s và một mục khác", "%(items)s and %(lastItem)s": "%(items)s và %(lastItem)s", "Your browser does not support the required cryptography extensions": "Trình duyệt của bạn không hỗ trợ chức năng mã hóa", - "Not a valid Riot keyfile": "Tệp khóa Riot không hợp lệ", + "Not a valid %(brand)s keyfile": "Tệp khóa %(brand)s không hợp lệ", "Authentication check failed: incorrect password?": "Kiểm tra đăng nhập thất bại: sai mật khẩu?", "Unrecognised address": "Không nhận ra địa chỉ", "You do not have permission to invite people to this room.": "Bạn không đủ quyền để mời người khác vào phòng chat.", diff --git a/src/i18n/strings/vls.json b/src/i18n/strings/vls.json index b08bc31e5d..4904541ade 100644 --- a/src/i18n/strings/vls.json +++ b/src/i18n/strings/vls.json @@ -3,7 +3,7 @@ "This phone number is already in use": "Dezen telefongnumero es al in gebruuk", "Failed to verify email address: make sure you clicked the link in the email": "Kostege ’t e-mailadresse nie verifieern: zorgt dervoor da je de koppelienge in den e-mail èt angeklikt", "The platform you're on": "’t Platform da je gebruukt", - "The version of Riot.im": "De versie van Riot.im", + "The version of %(brand)s": "De versie van %(brand)s", "Whether or not you're logged in (we don't record your username)": "Of da je al dan nie angemeld zyt (we sloan je gebruukersnoame nie ip)", "Your language of choice": "De deur joun gekoozn toale", "Which officially provided instance you are using, if any": "Welke officieel angeboodn instantie da je eventueel gebruukt", @@ -17,7 +17,7 @@ "Your User Agent": "Je gebruukersagent", "Your device resolution": "De resolutie van je toestel", "Analytics": "Statistische gegeevns", - "The information being sent to us to help make Riot.im better includes:": "D’informoasje da noar uus wor verstuurd vo Riot.im te verbetern betreft:", + "The information being sent to us to help make %(brand)s better includes:": "D’informoasje da noar uus wor verstuurd vo %(brand)s te verbetern betreft:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Woar da da blad hier identificeerboare informoasje bevat, gelyk e gespreks-, gebruukers- of groeps-ID, goan deze gegevens verwyderd wordn voorda ze noa de server gestuurd wordn.", "Call Failed": "Iproep mislukt", "Review Devices": "Toestelln noakykn", @@ -94,8 +94,8 @@ "Error": "Foute", "Unable to load! Check your network connectivity and try again.": "Loadn mislukt! Controleer je netwerktoegang en herprobeer ’t e ki.", "Dismiss": "Afwyzn", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot èt geen toestemmienge vo je meldiengn te verstuurn - controleert je browserinstelliengn", - "Riot was not given permission to send notifications - please try again": "Riot èt geen toestemmienge gekreegn ghed vo joun meldiengn te verstuurn - herprobeer ’t e ki", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s èt geen toestemmienge vo je meldiengn te verstuurn - controleert je browserinstelliengn", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s èt geen toestemmienge gekreegn ghed vo joun meldiengn te verstuurn - herprobeer ’t e ki", "Unable to enable Notifications": "Kostege meldiengn nie inschoakeln", "This email address was not found": "Dat e-mailadresse hier es nie gevoundn", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "’t Ziet ernoar uut da jen e-mailadresse ip dezen thuusserver nie an e Matrix-ID es gekoppeld.", @@ -235,7 +235,7 @@ "%(items)s and %(count)s others|one": "%(items)s en één ander", "%(items)s and %(lastItem)s": "%(items)s en %(lastItem)s", "Your browser does not support the required cryptography extensions": "Je browser oundersteunt de benodigde cryptografie-extensies nie", - "Not a valid Riot keyfile": "Geen geldig Riot-sleuterbestand", + "Not a valid %(brand)s keyfile": "Geen geldig %(brand)s-sleuterbestand", "Authentication check failed: incorrect password?": "Anmeldiengscontrole mislukt: verkeerd paswoord?", "Unrecognised address": "Adresse nie herkend", "You do not have permission to invite people to this room.": "J’en èt geen toestemmienge vo menschn in dit gesprek uut te nodign.", @@ -468,7 +468,7 @@ "Notification targets": "Meldiengsbestemmiengn", "Advanced notification settings": "Geavanceerde meldiengsinstelliengn", "There are advanced notifications which are not shown here": "Der zyn geavanceerde meldiengn dat hier nie getoogd wordn", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "J’è ze meuglik ingesteld in een andere cliënt als Riot. Je ku ze nie anpassn in Riot, moa ze zyn wel actief", + "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "J’è ze meuglik ingesteld in een andere cliënt als %(brand)s. Je ku ze nie anpassn in %(brand)s, moa ze zyn wel actief", "Show message in desktop notification": "Bericht toogn in bureaubladmeldienge", "Off": "Uut", "On": "An", @@ -499,9 +499,9 @@ "General": "Algemeen", "Legal": "Wettelik", "Credits": "Me dank an", - "For help with using Riot, click here.": "Klikt hier voor hulp by ’t gebruukn van Riot.", - "For help with using Riot, click here or start a chat with our bot using the button below.": "Klikt hier voor hulp by ’t gebruukn van Riot, of begint e gesprek met uzze robot me de knop hieroundern.", - "Chat with Riot Bot": "Chattn me Riot-robot", + "For help with using %(brand)s, click here.": "Klikt hier voor hulp by ’t gebruukn van %(brand)s.", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "Klikt hier voor hulp by ’t gebruukn van %(brand)s, of begint e gesprek met uzze robot me de knop hieroundern.", + "Chat with %(brand)s Bot": "Chattn me %(brand)s-robot", "Check for update": "Controleern ip updates", "Help & About": "Hulp & Info", "Bug reporting": "Foutmeldiengn", @@ -509,7 +509,7 @@ "Submit debug logs": "Foutipsporiengslogboekn indienn", "FAQ": "VGV", "Versions": "Versies", - "riot-web version:": "riot-web-versie:", + "%(brand)s version:": "%(brand)s-versie:", "olm version:": "olm-versie:", "Homeserver is": "Thuusserver es", "Identity Server is": "Identiteitsserver es", @@ -533,11 +533,11 @@ "Reject all %(invitedRooms)s invites": "Alle %(invitedRooms)s-uutnodigiengn weigern", "Key backup": "Sleuterback-up", "Security & Privacy": "Veiligheid & privacy", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot verzoamelt anonieme analysegegeevns da ’t meuglik moakn van de toepassienge te verbetern.", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s verzoamelt anonieme analysegegeevns da ’t meuglik moakn van de toepassienge te verbetern.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privacy es belangryk voor uus, dus me verzoameln geen persoonlike of identificeerboare gegeevns voor uzze gegeevnsanalyse.", "Learn more about how we use analytics.": "Leest meer over hoe da we joun gegeevns gebruukn.", "No media permissions": "Geen mediatoestemmiengn", - "You may need to manually permit Riot to access your microphone/webcam": "Je moe Riot wellicht handmoatig toestoan van je microfoon/webcam te gebruukn", + "You may need to manually permit %(brand)s to access your microphone/webcam": "Je moe %(brand)s wellicht handmoatig toestoan van je microfoon/webcam te gebruukn", "Missing media permissions, click the button below to request.": "Mediatoestemmiengn ountbreekn, klikt ip de knop hierounder vo deze an te vroagn.", "Request media permissions": "Mediatoestemmiengn verzoekn", "No Audio Outputs detected": "Geen geluudsuutgangn gedetecteerd", @@ -847,15 +847,15 @@ "Something went wrong when trying to get your communities.": "’t Ging etwa verkeerd by ’t iphoaln van je gemeenschappn.", "Display your community flair in rooms configured to show it.": "Toogt je gemeenschapsbadge in gesprekkn da doarvoorn ingesteld gewist zyn.", "You're not currently a member of any communities.": "Je zy vo de moment geen lid van e gemeenschap.", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Helpt mee me Riot.im te verbetern door anonieme gebruuksgegeevns te verstuurn. Dit goat een cookie gebruukn (bekykt hiervoorn uus cookiebeleid).", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Helpt mee me Riot.im te verbetern door anonieme gebruuksgegeevns te verstuurn. Dit goat een cookie gebruukn.", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Helpt mee me %(brand)s te verbetern door anonieme gebruuksgegeevns te verstuurn. Dit goat een cookie gebruukn (bekykt hiervoorn uus cookiebeleid).", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Helpt mee me %(brand)s te verbetern door anonieme gebruuksgegeevns te verstuurn. Dit goat een cookie gebruukn.", "Yes, I want to help!": "Joak, ’k willn ik helpn!", "You are not receiving desktop notifications": "J’ontvangt vo de moment geen bureaubladmeldiengn", "Enable them now": "Deze nu inschoakeln", "What's New": "Wuk es ’t er nieuw", "Update": "Bywerkn", "What's new?": "Wuk es ’t er nieuw?", - "A new version of Riot is available.": "Der es e nieuwe versie van Riot beschikboar.", + "A new version of %(brand)s is available.": "Der es e nieuwe versie van %(brand)s beschikboar.", "To return to your account in future you need to set a password": "Voor in de toekomst noa jen account were te keren es ’t nodig van e paswoord in te stelln", "Set Password": "Paswoord instelln", "Please contact your service administrator to get this limit increased.": "Gelieve contact ip te neemn me je dienstbeheerder vo deze limiet te verhoogn.", @@ -988,8 +988,8 @@ "Create": "Anmoakn", "Create Room": "Gesprek anmoakn", "Sign out": "Afmeldn", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Vo je gespreksgeschiedenisse nie kwyt te speeln, moe je je gesprekssleuters exporteern vooraleer da je jen afmeldt. Je goa moetn werekeern noa de nieuwere versie van Riot vo dit te doen", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "J’èt al e ki e nieuwere versie van Riot ip %(host)s gebruukt. Vo deze versie were met eind-tout-eind-versleuterienge te gebruukn, goa je je moetn afmeldn en were anmeldn. ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Vo je gespreksgeschiedenisse nie kwyt te speeln, moe je je gesprekssleuters exporteern vooraleer da je jen afmeldt. Je goa moetn werekeern noa de nieuwere versie van %(brand)s vo dit te doen", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "J’èt al e ki e nieuwere versie van %(brand)s ip %(host)s gebruukt. Vo deze versie were met eind-tout-eind-versleuterienge te gebruukn, goa je je moetn afmeldn en were anmeldn. ", "Incompatible Database": "Incompatibele database", "Continue With Encryption Disabled": "Verdergoan me versleuterienge uutgeschoakeld", "Unknown error": "Ounbekende foute", @@ -1030,12 +1030,12 @@ "Share without verifying": "Deeln zounder verificoasje", "Ignore request": "Verzoek negeern", "Encryption key request": "Verzoek vo versleuteriengssleuter", - "You've previously used Riot 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, Riot needs to resync your account.": "J’èt al e ki Riot ip %(host)s gebruukt me lui loadn van leedn ingeschoakeld. In deze versie is lui laden uutgeschoakeld. Me da de lokoale cache nie compatibel is tusschn deze twi instelliengn, moe Riot jen account hersynchroniseern.", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Indien dat d’andere versie van Riot nog in een ander tabblad is geopend, sluut je da best, want Riot ip dezelfsten host tegelykertyd me lui loadn ingeschoakeld en uutgeschoakeld gebruukn goa vo probleemn zorgn.", + "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.": "J’èt al e ki %(brand)s ip %(host)s gebruukt me lui loadn van leedn ingeschoakeld. In deze versie is lui laden uutgeschoakeld. Me da de lokoale cache nie compatibel is tusschn deze twi instelliengn, moe %(brand)s jen account hersynchroniseern.", + "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.": "Indien dat d’andere versie van %(brand)s nog in een ander tabblad is geopend, sluut je da best, want %(brand)s ip dezelfsten host tegelykertyd me lui loadn ingeschoakeld en uutgeschoakeld gebruukn goa vo probleemn zorgn.", "Incompatible local cache": "Incompatibele lokoale cache", "Clear cache and resync": "Cache wissn en hersynchroniseern", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot verbruukt nu 3-5x minder geheugn, deur informoasje over andere gebruukers alleene moa te loadn wanneer dan ’t nodig is. Eftjes geduld, we zyn an ’t hersynchroniseern me de server!", - "Updating Riot": "Riot wor bygewerkt", + "%(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!": "%(brand)s verbruukt nu 3-5x minder geheugn, deur informoasje over andere gebruukers alleene moa te loadn wanneer dan ’t nodig is. Eftjes geduld, we zyn an ’t hersynchroniseern me de server!", + "Updating %(brand)s": "%(brand)s wor bygewerkt", "I don't want my encrypted messages": "’k En willn ik myn versleuterde berichtn nie", "Manually export keys": "Sleuters handmatig exporteern", "You'll lose access to your encrypted messages": "Je goat de toegank tou je versleuterde berichtn kwytspeeln", @@ -1059,7 +1059,7 @@ "Refresh": "Herloadn", "Unable to restore session": "’t En is nie meuglik van de sessie t’herstelln", "We encountered an error trying to restore your previous session.": "’t Is e foute ipgetreedn by ’t herstelln van je vorige sessie.", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "A j’al e ki gebruuk gemakt èt van e recentere versie van Riot, is je sessie meugliks ounverenigboar me deze versie. Sluut deze veinster en goa were noa de recentere versie.", + "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.": "A j’al e ki gebruuk gemakt èt van e recentere versie van %(brand)s, is je sessie meugliks ounverenigboar me deze versie. Sluut deze veinster en goa were noa de recentere versie.", "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "’t Legen van den ipslag van je browser goa ’t probleem misschiens verhelpn, mo goa joun ook afmeldn en gans je versleuterde gespreksgeschiedenisse ounleesboar moakn.", "Verification Pending": "Verificoasje in afwachtienge", "Please check your email and click on the link it contains. Once this is done, click continue.": "Bekyk jen e-mails en klikt ip de koppelienge derin. Klikt van zodra da je da gedoan èt ip ‘Verdergoan’.", @@ -1223,8 +1223,8 @@ "Premium hosting for organisations Learn more": "Premium hosting voor organisoasjes Leest meer", "Other": "Overige", "Find other public servers or use a custom server": "Zoekt achter andere publieke servers, of gebruukt een angepaste server", - "Sorry, your browser is not able to run Riot.": "Sorry, je browser werkt nie me Riot.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot gebruukt veel geavanceerde browserfuncties, woavan enkele nie (of slechts experimenteel) in je browser beschikboar zyn.", + "Sorry, your browser is not able to run %(brand)s.": "Sorry, je browser werkt nie me %(brand)s.", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s gebruukt veel geavanceerde browserfuncties, woavan enkele nie (of slechts experimenteel) in je browser beschikboar zyn.", "Please install Chrome, Firefox, or Safari for the best experience.": "Installeert Chrome, Firefox, of Safari vo de beste gebruukservoarienge.", "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!": "Me jen huudigen browser kut de toepassienge der geheel verkeerd uutzien. ’t Is ook meuglik da nie alle functies werkn lyk of dan ze zoudn moetn. Je kut verdergoan a je ’t algelyk wil probeern, moa by probleemn zy je gy ’t dan ’t goa moetn iplossn!", "I understand the risks and wish to continue": "’k Verstoan de risico’s en ’k willn geirn verdergoan", @@ -1286,17 +1286,17 @@ "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Vo de %(homeserverDomain)s-thuusserver te bluuvn gebruukn, goa je de gebruuksvoorwoardn moetn leezn en anveirdn.", "Review terms and conditions": "Gebruuksvoorwoardn leezn", "Old cryptography data detected": "Oude cryptografiegegeevns gedetecteerd", - "Data from an older version of Riot 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.": "’t Zyn gegeevns van een oudere versie van Riot gedetecteerd gewist. Dit goa probleemn veroorzakt ghed èn me de eind-tout-eind-versleuterienge in d’oude versie. Eind-tout-eind-versleuterde berichtn da recent uutgewisseld gewist zyn me d’oude versie zyn meugliks nie t’ountsleutern in deze versie. Dit zoudt der ook voorn kunnn zorgn da berichtn da uutgewisseld gewist zyn in deze versie foaln. Meldt jen heran moest je probleemn ervoarn. Exporteert de sleuters en importeer z’achteraf were vo de berichtgeschiedenisse te behoudn.", + "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.": "’t Zyn gegeevns van een oudere versie van %(brand)s gedetecteerd gewist. Dit goa probleemn veroorzakt ghed èn me de eind-tout-eind-versleuterienge in d’oude versie. Eind-tout-eind-versleuterde berichtn da recent uutgewisseld gewist zyn me d’oude versie zyn meugliks nie t’ountsleutern in deze versie. Dit zoudt der ook voorn kunnn zorgn da berichtn da uutgewisseld gewist zyn in deze versie foaln. Meldt jen heran moest je probleemn ervoarn. Exporteert de sleuters en importeer z’achteraf were vo de berichtgeschiedenisse te behoudn.", "Logout": "Afmeldn", "Your Communities": "Je gemeenschappn", - "Did you know: you can use communities to filter your Riot.im experience!": "Wist je da: je gemeenschappn kun gebruukn vo je Riot.im-belevienge te filtern!", + "Did you know: you can use communities to filter your %(brand)s experience!": "Wist je da: je gemeenschappn kun gebruukn vo je %(brand)s-belevienge te filtern!", "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.": "Verslipt e gemeenschapsavatar noa ’t filterpaneel helegans links ip ’t scherm voor e filter in te stelln. Doarachter ku j’ip den avatar in ’t filterpaneel klikkn wanneer da je je wil beperkn tout de gesprekkn en menschn uut die gemeenschap.", "Error whilst fetching joined communities": "’t Is e foute ipgetreedn by ’t iphoaln van de gemeenschappn da je lid van zyt", "Create a new community": "Makt e nieuwe gemeenschap an", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Makt e gemeenschap an vo gebruukers en gesprekkn by makoar te briengn! Schep met e startblad ip moet jen eigen pleksje in ’t Matrix-universum.", "You have no visible notifications": "J’è geen zichtboare meldiengn", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot kostege de protocollyste nie iphoaln van de thuusserver. Meugliks is de thuusserver te oud vo derdepartynetwerkn t’oundersteunn.", - "Riot failed to get the public room list.": "Riot kostege de lyste met openboare gesprekkn nie verkrygn.", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s kostege de protocollyste nie iphoaln van de thuusserver. Meugliks is de thuusserver te oud vo derdepartynetwerkn t’oundersteunn.", + "%(brand)s failed to get the public room list.": "%(brand)s kostege de lyste met openboare gesprekkn nie verkrygn.", "The homeserver may be unavailable or overloaded.": "De thuusserver is meugliks ounbereikboar of overbelast.", "Delete the room alias %(alias)s and remove %(name)s from the directory?": "De bynoame %(alias)s verwydern en %(name)s uut de cataloog verwydern?", "Remove %(name)s from the directory?": "%(name)s uut de cataloog verwydern?", @@ -1305,7 +1305,7 @@ "delete the alias.": "verwydert de bynoame.", "The server may be unavailable or overloaded": "De server is meuglik ounbereikboar of overbelast", "Unable to join network": "Kostege nie toetreedn tout dit netwerk", - "Riot does not know how to join a room on this network": "Riot weet nie hoe da ’t moet deelneemn an e gesprek ip dit netwerk", + "%(brand)s does not know how to join a room on this network": "%(brand)s weet nie hoe da ’t moet deelneemn an e gesprek ip dit netwerk", "Room not found": "Gesprek nie gevoundn", "Couldn't find a matching Matrix room": "Kostege geen byhoornd Matrix-gesprek viendn", "Fetching third party location failed": "’t Iphoaln van de locoasje van de derde party is mislukt", @@ -1476,8 +1476,8 @@ "Browse": "Bloadern", "Cannot reach homeserver": "Kostege de thuusserver nie bereikn", "Ensure you have a stable internet connection, or get in touch with the server admin": "Zorgt da j’e stabiele internetverbiendienge èt, of neem contact op met de systeembeheerder", - "Your Riot is misconfigured": "Je Riot is verkeerd geconfigureerd gewist", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Vroagt an je Riot-beheerder van je configuroasje noa te kykn ip verkeerde of duplicoate items.", + "Your %(brand)s is misconfigured": "Je %(brand)s is verkeerd geconfigureerd gewist", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Vroagt an je %(brand)s-beheerder van je configuroasje noa te kykn ip verkeerde of duplicoate items.", "Unexpected error resolving identity server configuration": "Ounverwachte foute by ’t iplossn van d’identiteitsserverconfiguroasje", "Use lowercase letters, numbers, dashes and underscores only": "Gebruukt alleene moa letters, cyfers, streeptjes en underscores", "Cannot reach identity server": "Kostege den identiteitsserver nie bereikn", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 7eedfce238..9caa26e6ad 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -57,9 +57,9 @@ "Invalid Email Address": "邮箱地址格式错误", "Invalid file%(extra)s": "非法文件%(extra)s", "Return to login screen": "返回登录页面", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot 没有通知发送权限 - 请检查您的浏览器设置", - "Riot was not given permission to send notifications - please try again": "Riot 没有通知发送权限 - 请重试", - "riot-web version:": "riot-web 版本:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s 没有通知发送权限 - 请检查您的浏览器设置", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s 没有通知发送权限 - 请重试", + "%(brand)s version:": "%(brand)s 版本:", "Room %(roomId)s not visible": "聊天室 %(roomId)s 已隐藏", "Room Colour": "聊天室颜色", "Rooms": "聊天室", @@ -116,7 +116,7 @@ "No Microphones detected": "未检测到麦克风", "No Webcams detected": "未检测到摄像头", "No media permissions": "没有媒体存取权限", - "You may need to manually permit Riot to access your microphone/webcam": "你可能需要手动授权 Riot 使用你的麦克风或摄像头", + "You may need to manually permit %(brand)s to access your microphone/webcam": "你可能需要手动授权 %(brand)s 使用你的麦克风或摄像头", "Default Device": "默认设备", "Microphone": "麦克风", "Camera": "摄像头", @@ -311,7 +311,7 @@ "You are not in this room.": "您不在此聊天室中。", "You have no visible notifications": "没有可见的通知", "Unblacklist": "移出黑名单", - "Not a valid Riot keyfile": "不是有效的 Riot 密钥文件", + "Not a valid %(brand)s keyfile": "不是有效的 %(brand)s 密钥文件", "%(targetName)s accepted an invitation.": "%(targetName)s 已接受邀请。", "Publish this room to the public in %(domain)s's room directory?": "是否将此聊天室发布至 %(domain)s 的聊天室目录中?", "Manage Integrations": "管理集成", @@ -414,7 +414,7 @@ "Unknown Address": "未知地址", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s 删除了他们的昵称 (%(oldDisplayName)s).", "Unable to remove contact information": "无法移除联系人信息", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot 收集匿名的分析数据以允许我们改善它。", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s 收集匿名的分析数据以允许我们改善它。", "Please check your email to continue registration.": "请查看你的电子邮件以继续注册。", "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "如果不指定一个邮箱地址,您将无法重置你的密码。你确定吗?", "Add an Integration": "添加集成", @@ -422,7 +422,7 @@ "Ongoing conference call%(supportedText)s.": "正在进行的会议通话 %(supportedText)s.", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s 修改了 %(roomName)s 的头像", "This will be your account name on the homeserver, or you can pick a different server.": "这将会成为你在 主服务器上的账户名,或者你可以选择一个 不同的服务器。", - "Your browser does not support the required cryptography extensions": "你的浏览器不支持 Riot 所需的密码学特性", + "Your browser does not support the required cryptography extensions": "你的浏览器不支持 %(brand)s 所需的密码学特性", "Authentication check failed: incorrect password?": "身份验证失败:密码错误?", "This will allow you to reset your password and receive notifications.": "这将允许你重置你的密码和接收通知。", "Share without verifying": "不验证就分享", @@ -513,13 +513,13 @@ "Dark theme": "深色主题", "Room Notification": "聊天室通知", "The platform you're on": "您使用的平台是", - "The version of Riot.im": "Riot.im 的版本是", + "The version of %(brand)s": "%(brand)s 的版本是", "Your language of choice": "您选择的语言是", - "Which officially provided instance you are using, if any": "您正在使用的任何官方 Riot 实现(如果有的话)", + "Which officially provided instance you are using, if any": "您正在使用的任何官方 %(brand)s 实现(如果有的话)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "您是否正在使用富文本编辑器的富文本模式", "Your homeserver's URL": "您的主服务器的链接", "Your identity server's URL": "您的身份认证服务器的链接", - "The information being sent to us to help make Riot.im better includes:": "将要为帮助 Riot.im 发展而发送的信息包含:", + "The information being sent to us to help make %(brand)s better includes:": "将要为帮助 %(brand)s 发展而发送的信息包含:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "此页面中含有可用于识别您身份的信息,比如聊天室、用户或群组 ID,这些数据会在发送到服务器前被移除。", "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s", "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(monthName)s %(day)s %(time)s, %(weekDayName)s", @@ -636,7 +636,7 @@ "Community IDs cannot be empty.": "社区 ID 不能为空。", "Community IDs may only contain characters a-z, 0-9, or '=_-./'": "社区 ID 只能包含 a-z、0-9 或 “=_-./” 等字符", "Something went wrong whilst creating your community": "创建社区时出现问题", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "如果您之前使用过较新版本的 Riot,则您的会话可能与当前版本不兼容。请关闭此窗口并使用最新版本。", + "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.": "如果您之前使用过较新版本的 %(brand)s,则您的会话可能与当前版本不兼容。请关闭此窗口并使用最新版本。", "Showing flair for these communities:": "显示这些社区的个性徽章:", "This room is not showing flair for any communities": "此聊天室没有显示任何社区的个性徽章", "New community ID (e.g. +foo:%(localDomain)s)": "新社区 ID(例子:+foo:%(localDomain)s)", @@ -669,8 +669,8 @@ "Leave this community": "退出此社区", "Long Description (HTML)": "长描述(HTML)", "Old cryptography data detected": "检测到旧的加密数据", - "Data from an older version of Riot 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.": "已检测到旧版Riot的数据,这将导致端到端加密在旧版本中发生故障。在此版本中,使用旧版本交换的端对端加密消息可能无法解密。这也可能导致与此版本交换的消息失败。如果您遇到问题,请退出并重新登录。要保留历史消息,请先导出并在重新登录后导入您的密钥。", - "Did you know: you can use communities to filter your Riot.im experience!": "你知道吗:你可以将社区用作过滤器以增强你的 Riot.im 使用体验!", + "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.": "已检测到旧版%(brand)s的数据,这将导致端到端加密在旧版本中发生故障。在此版本中,使用旧版本交换的端对端加密消息可能无法解密。这也可能导致与此版本交换的消息失败。如果您遇到问题,请退出并重新登录。要保留历史消息,请先导出并在重新登录后导入您的密钥。", + "Did you know: you can use communities to filter your %(brand)s experience!": "你知道吗:你可以将社区用作过滤器以增强你的 %(brand)s 使用体验!", "Create a new community": "创建新社区", "Error whilst fetching joined communities": "获取已加入社区列表时出现错误", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "创建社区,将用户与聊天室整合在一起!搭建自定义社区主页以在 Matrix 宇宙之中标出您的私人空间。", @@ -698,7 +698,7 @@ "Something went wrong when trying to get your communities.": "获取你加入的社区时发生错误。", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "删除小挂件时将为聊天室中的所有成员删除。您确定要删除此小挂件吗?", "Fetching third party location failed": "获取第三方位置失败", - "A new version of Riot is available.": "Riot 有更新可用。", + "A new version of %(brand)s is available.": "%(brand)s 有更新可用。", "Send Account Data": "发送账户数据", "All notifications are currently disabled for all targets.": "目前所有通知都已禁用。", "Uploading report": "上传报告", @@ -753,7 +753,7 @@ "Forward Message": "转发消息", "You have successfully set a password and an email address!": "您已经成功设置了密码和邮箱地址!", "Remove %(name)s from the directory?": "是否从目录中移除 %(name)s?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot 使用了许多先进的浏览器功能,有些在你目前所用的浏览器上无法使用或仅为实验性的功能。", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s 使用了许多先进的浏览器功能,有些在你目前所用的浏览器上无法使用或仅为实验性的功能。", "Developer Tools": "开发者工具", "Preparing to send logs": "准备发送日志", "Remember, you can always set an email address in user settings if you change your mind.": "请记住,如果您改变想法,您永远可以在用户设置中设置电子邮件。", @@ -799,8 +799,8 @@ "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.": "调试日志包含使用数据(包括您的用户名,您访问过的聊天室 / 小组的 ID 或别名以及其他用户的用户名)。它们不包含聊天信息。", "Unhide Preview": "取消隐藏预览", "Unable to join network": "无法加入网络", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "您也许不曾在其他 Riot 之外的客户端设置它们。在 Riot 下你无法调整他们但仍然可用", - "Sorry, your browser is not able to run Riot.": "抱歉,您的浏览器 无法 运行 Riot.", + "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 下你无法调整他们但仍然可用", + "Sorry, your browser is not able to run %(brand)s.": "抱歉,您的浏览器 无法 运行 %(brand)s.", "Uploaded on %(date)s by %(user)s": "由 %(user)s 在 %(date)s 上传", "Messages in group chats": "群组聊天中的消息", "Yesterday": "昨天", @@ -809,7 +809,7 @@ "Unable to fetch notification target list": "无法获取通知目标列表", "Set Password": "设置密码", "Off": "关闭", - "Riot does not know how to join a room on this network": "Riot 不知道如何在此网络中加入聊天室", + "%(brand)s does not know how to join a room on this network": "%(brand)s 不知道如何在此网络中加入聊天室", "Mentions only": "只限提及", "You can now return to your account after signing out, and sign in on other devices.": "您可以在注销后回到您的账号,并在其他设备上登录。", "Enable email notifications": "启用电子邮件通知", @@ -828,7 +828,7 @@ "There's no one else here! Would you like to invite others or stop warning about the empty room?": "这里没有其他人了!你是想 邀请用户 还是 不再提示?", "You need to be able to invite users to do that.": "你需要有邀请用户的权限才能进行此操作。", "Missing roomId.": "找不到此聊天室 ID 所对应的聊天室。", - "Every page you use in the app": "您在 Riot 中使用的所有页面", + "Every page you use in the app": "您在 %(brand)s 中使用的所有页面", "e.g. ": "例如:", "Your User Agent": "您的 User Agent", "Your device resolution": "您设备的分辨率", @@ -861,8 +861,8 @@ "The phone number field must not be blank.": "必须输入手机号码。", "The password field must not be blank.": "必须输入密码。", "Display your community flair in rooms configured to show it.": "在启用“显示徽章”的聊天室中显示本社区的个性徽章。", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "请发送 匿名使用数据 以帮助我们改进 Riot.im。这将用到 Cookie(请看看我们的 Cookie 隐私政策)。", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "请发送 匿名使用数据 以帮助我们改进 Riot.im。这将用到 Cookie。", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "请发送 匿名使用数据 以帮助我们改进 %(brand)s。这将用到 Cookie(请看看我们的 Cookie 隐私政策)。", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "请发送 匿名使用数据 以帮助我们改进 %(brand)s。这将用到 Cookie。", "Yes, I want to help!": "好啊,我要帮助你们!", "Failed to remove widget": "移除小挂件失败", "An error ocurred whilst trying to remove the widget from the room": "尝试从聊天室中移除小部件时发生了错误", @@ -962,7 +962,7 @@ "Incompatible Database": "数据库不兼容", "Continue With Encryption Disabled": "在停用加密的情况下继续", "Checking...": "正在检查…", - "Updating Riot": "正在更新 Riot", + "Updating %(brand)s": "正在更新 %(brand)s", "Backup Restored": "备份已还原", "No backup found!": "找不到备份!", "Unable to restore backup": "无法还原备份", @@ -1142,9 +1142,9 @@ "Deactivating your account is a permanent action - be careful!": "停用您的账号是一项永久性操作 - 请小心!", "General": "通用", "Credits": "感谢", - "For help with using Riot, click here.": "对使用 Riot 的说明,请点击 这里。", - "For help with using Riot, click here or start a chat with our bot using the button below.": "对使用 Riot 的说明,请点击 这里 或者使用下面的按钮开始与我们的机器人聊聊。", - "Chat with Riot Bot": "与 Riot 机器人聊天", + "For help with using %(brand)s, click here.": "对使用 %(brand)s 的说明,请点击 这里。", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "对使用 %(brand)s 的说明,请点击 这里 或者使用下面的按钮开始与我们的机器人聊聊。", + "Chat with %(brand)s Bot": "与 %(brand)s 机器人聊天", "Help & About": "帮助及关于", "Bug reporting": "错误上报", "FAQ": "常见问题", @@ -1199,8 +1199,8 @@ "Invite anyway": "还是邀请", "Before submitting logs, you must create a GitHub issue to describe your problem.": "在提交日志之前,您必须 创建一个GitHub issue 来描述您的问题。", "Unable to load commit detail: %(msg)s": "无法加载提交详情:%(msg)s", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "为避免丢失聊天记录,您必须在登出前导出房间密钥。 您需要回到较新版本的 Riot 才能执行此操作", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "您之前在 %(host)s 使用过更新版本的 Riot 。为了使用带有端对端加密功能的此版本,您必须退出账号再重新登入。 ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "为避免丢失聊天记录,您必须在登出前导出房间密钥。 您需要回到较新版本的 %(brand)s 才能执行此操作", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "您之前在 %(host)s 使用过更新版本的 %(brand)s 。为了使用带有端对端加密功能的此版本,您必须退出账号再重新登入。 ", "Use Legacy Verification (for older clients)": "使用旧版验证 (针对旧版客户端)", "Verify by comparing a short text string.": "通过比较一段短文本字符串进行验证。", "Begin Verifying": "开始验证", @@ -1211,9 +1211,9 @@ "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "验证此用户并标记为受信任。在使用端到端加密消息时,信任用户可让您更加放心。", "Waiting for partner to confirm...": "等待对方确认中...", "Incoming Verification Request": "收到验证请求", - "You've previously used Riot 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, Riot needs to resync your account.": "您之前在 %(host)s 上开启了 Riot 的成员列表延迟加载设置。目前版本中延迟加载功能已被停用。因为本地缓存在这两个设置项上不相容,Riot 需要重新同步您的账号。", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "如果有其他版本的 Riot 仍然在另一个标签页中运行,请将其关闭,因为在同一主机上同时启用和禁用延迟加载将会发生问题。", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "通过仅在需要时加载其他用户的信息,Riot 现在使用的内存减少到了原来的三分之一至五分之一。 请等待与服务器重新同步!", + "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.": "您之前在 %(host)s 上开启了 %(brand)s 的成员列表延迟加载设置。目前版本中延迟加载功能已被停用。因为本地缓存在这两个设置项上不相容,%(brand)s 需要重新同步您的账号。", + "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.": "如果有其他版本的 %(brand)s 仍然在另一个标签页中运行,请将其关闭,因为在同一主机上同时启用和禁用延迟加载将会发生问题。", + "%(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!": "通过仅在需要时加载其他用户的信息,%(brand)s 现在使用的内存减少到了原来的三分之一至五分之一。 请等待与服务器重新同步!", "I don't want my encrypted messages": "我不想要我的加密消息", "Manually export keys": "手动导出密钥", "You'll lose access to your encrypted messages": "您将失去您的加密消息的访问权", @@ -1369,8 +1369,8 @@ "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.": "位于 %(widgetUrl)s 的小部件想要验证您的身份。在您允许后,小部件就可以验证您的用户 ID,但不能代您执行操作。", "Remember my selection for this widget": "记住我对此小部件的选择", "Deny": "拒绝", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot 无法从主服务器处获取协议列表。该主服务器上的软件可能过旧,不支持第三方网络。", - "Riot failed to get the public room list.": "Riot 无法获取公开聊天室列表。", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s 无法从主服务器处获取协议列表。该主服务器上的软件可能过旧,不支持第三方网络。", + "%(brand)s failed to get the public room list.": "%(brand)s 无法获取公开聊天室列表。", "The homeserver may be unavailable or overloaded.": "主服务器似乎不可用或过载。", "You have %(count)s unread notifications in a prior version of this room.|other": "您在此聊天室的先前版本中有 %(count)s 条未读通知。", "You have %(count)s unread notifications in a prior version of this room.|one": "您在此聊天室的先前版本中有 %(count)s 条未读通知。", @@ -1381,7 +1381,7 @@ "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "请联系您主服务器(%(homeserverDomain)s)的管理员设置 TURN 服务器来确保通话运作稳定。", "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.": "您也可以尝试使用turn.matrix.org公共服务器,但通话质量稍差,并且其将会得知您的 IP。您可以在设置中更改此选项。", "Try using turn.matrix.org": "尝试使用 turn.matrix.org", - "Your Riot is misconfigured": "您的 Riot 配置有错误", + "Your %(brand)s is misconfigured": "您的 %(brand)s 配置有错误", "Use Single Sign On to continue": "使用单点登陆继续", "Confirm adding this email address by using Single Sign On to prove your identity.": "确认添加此邮件地址,通过使用单点登陆来证明您的身份。", "Single Sign On": "单点登陆", @@ -1390,11 +1390,11 @@ "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.": "点击下面的按钮,确认添加此电话号码。", - "The version of Riot": "Riot版本", - "Whether you're using Riot on a device where touch is the primary input mechanism": "是否在触屏设备上使用Riot", - "Whether you're using Riot as an installed Progressive Web App": "您是否已经安装Riot作为一种渐进式的Web应用", + "The version of %(brand)s": "%(brand)s版本", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "是否在触屏设备上使用%(brand)s", + "Whether you're using %(brand)s as an installed Progressive Web App": "您是否已经安装%(brand)s作为一种渐进式的Web应用", "Your user agent": "您的代理用户", - "The information being sent to us to help make Riot better includes:": "发送信息给我们以帮助Riot:", + "The information being sent to us to help make %(brand)s better includes:": "发送信息给我们以帮助%(brand)s:", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "聊天室有未知会话:如果您选择继续而不是验证他们,则您的电话可能会被窃听。", "Review Sessions": "审查会议", "Replying With Files": "回复文件", @@ -1493,7 +1493,7 @@ "Done": "完成", "Cannot reach homeserver": "不可连接到主服务器", "Ensure you have a stable internet connection, or get in touch with the server admin": "确保您的网络连接稳定,或与服务器管理员联系", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "跟您的Riot管理员确认您的配置不正确或重复的条目。", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "跟您的%(brand)s管理员确认您的配置不正确或重复的条目。", "Cannot reach identity server": "不可连接到身份服务器", "Room name or address": "房间名称或地址", "Joins room with given address": "使用给定地址加入房间", diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 0400771bfb..706fc032b0 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -91,9 +91,9 @@ "%(senderName)s kicked %(targetName)s.": "%(senderName)s 把 %(targetName)s 踢出了聊天室。.", "Leave room": "離開聊天室", "Return to login screen": "返回到登入畫面", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot 未被允許向你推播通知 ── 請檢查您的瀏覽器設定", - "Riot was not given permission to send notifications - please try again": "Riot 未被允許向你推播通知 ── 請重試", - "riot-web version:": "riot-網頁版:", + "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s 未被允許向你推播通知 ── 請檢查您的瀏覽器設定", + "%(brand)s was not given permission to send notifications - please try again": "%(brand)s 未被允許向你推播通知 ── 請重試", + "%(brand)s version:": "riot-網頁版:", "Room %(roomId)s not visible": "聊天室 %(roomId)s 已隱藏", "Room Colour": "聊天室顏色", "Rooms": "聊天室", @@ -182,7 +182,7 @@ "No Microphones detected": "未偵測到麥克風", "No Webcams detected": "未偵測到網路攝影機", "No media permissions": "沒有媒體權限", - "You may need to manually permit Riot to access your microphone/webcam": "您可能需要手動允許 Riot 存取您的麥克風/網路攝影機", + "You may need to manually permit %(brand)s to access your microphone/webcam": "您可能需要手動允許 %(brand)s 存取您的麥克風/網路攝影機", "Alias (optional)": "別名(選擇性)", "Are you sure you want to leave the room '%(roomName)s'?": "您確定您要想要離開房間 '%(roomName)s' 嗎?", "Bans user with given id": "阻擋指定 ID 的使用者", @@ -380,7 +380,7 @@ "Start automatically after system login": "在系統登入後自動開始", "Analytics": "分析", "Options": "選項", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot 會收集匿名分析以讓我們可以改進此應用程式。", + "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s 會收集匿名分析以讓我們可以改進此應用程式。", "Passphrases must match": "通關密語必須符合", "Passphrase must not be empty": "通關密語不能為空", "Export room keys": "匯出房間金鑰", @@ -402,7 +402,7 @@ "To continue, please enter your password.": "要繼續,請輸入您的密碼。", "I verify that the keys match": "我驗證金鑰相符", "Unable to restore session": "無法復原工作階段", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "若您先前使用過較新版本的 Riot,您的工作階段可能與此版本不相容。關閉此視窗並回到較新的版本。", + "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.": "若您先前使用過較新版本的 %(brand)s,您的工作階段可能與此版本不相容。關閉此視窗並回到較新的版本。", "Unknown Address": "未知的地址", "Unblacklist": "解除黑名單", "Blacklist": "黑名單", @@ -421,7 +421,7 @@ "This will be your account name on the homeserver, or you can pick a different server.": "這將是您在家伺服器上的帳號名稱,或是您可以挑選一個不同的伺服器。", "If you already have a Matrix account you can log in instead.": "若您已經有 Matrix 帳號,您可以登入。", "Your browser does not support the required cryptography extensions": "您的瀏覽器不支援需要的加密擴充", - "Not a valid Riot keyfile": "不是有效的 Riot 金鑰檔案", + "Not a valid %(brand)s keyfile": "不是有效的 %(brand)s 金鑰檔案", "Authentication check failed: incorrect password?": "認證檢查失敗:不正確的密碼?", "Do you want to set an email address?": "您想要設定電子郵件地址嗎?", "This will allow you to reset your password and receive notifications.": "這讓您可以重設您的密碼與接收通知。", @@ -662,7 +662,7 @@ "Community %(groupId)s not found": "找不到社群 %(groupId)s", "Failed to load %(groupId)s": "載入 %(groupId)s 失敗", "Old cryptography data detected": "偵測到舊的加密資料", - "Data from an older version of Riot 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.": "偵測到來自舊版 Riot 的資料。這將會造成舊版的端到端加密失敗。在此版本中使用最近在舊版本交換的金鑰可能無法解密訊息。這也會造成與此版本的訊息交換失敗。若您遇到問題,請登出並重新登入。要保留訊息歷史,請匯出並重新匯入您的金鑰。", + "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.": "偵測到來自舊版 %(brand)s 的資料。這將會造成舊版的端到端加密失敗。在此版本中使用最近在舊版本交換的金鑰可能無法解密訊息。這也會造成與此版本的訊息交換失敗。若您遇到問題,請登出並重新登入。要保留訊息歷史,請匯出並重新匯入您的金鑰。", "Your Communities": "您的社群", "Error whilst fetching joined communities": "擷取已加入的社群時發生錯誤", "Create a new community": "建立新社群", @@ -683,10 +683,10 @@ "Stops ignoring a user, showing their messages going forward": "停止忽略使用者,顯示他們的訊息", "Notify the whole room": "通知整個聊天室", "Room Notification": "聊天室通知", - "The information being sent to us to help make Riot.im better includes:": "協助讓 Riot.im 變得更好的傳送給我們的資訊包含了:", + "The information being sent to us to help make %(brand)s better includes:": "協助讓 %(brand)s 變得更好的傳送給我們的資訊包含了:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "這個頁面包含了可識別的資訊,如聊天室、使用者或群組 ID,這些資料會在傳到伺服器前被刪除。", "The platform you're on": "您使用的平臺是", - "The version of Riot.im": "Riot.im 的版本", + "The version of %(brand)s": "%(brand)s 的版本", "Your language of choice": "您選擇的語言", "Which officially provided instance you are using, if any": "您正在使用的任何官方實體,如果有的話", "Whether or not you're using the Richtext mode of the Rich Text Editor": "您是否正在使用豐富文字編輯器的豐富文字模式", @@ -700,7 +700,7 @@ "Failed to set direct chat tag": "設定直接聊天標籤失敗", "Failed to remove tag %(tagName)s from room": "從聊天室移除標籤 %(tagName)s 失敗", "Failed to add tag %(tagName)s to room": "新增標籤 %(tagName)s 到聊天室失敗", - "Did you know: you can use communities to filter your Riot.im experience!": "您知道嗎:您可以使用社群來強化您的 Riot.im 使用體驗!", + "Did you know: you can use communities to filter your %(brand)s experience!": "您知道嗎:您可以使用社群來強化您的 %(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.": "要設定過濾器,拖曳社群大頭貼到位於螢幕最左邊的過濾器面板。您可以在任何時候在過濾器面板中的大頭貼上點按以檢視與該社群關聯的聊天室與夥伴。", "Clear filter": "清除過濾器", "Key request sent.": "金鑰請求已傳送。", @@ -721,7 +721,7 @@ "Who can join this community?": "誰可以加入此社群?", "Everyone": "每個人", "Fetching third party location failed": "抓取第三方位置失敗", - "A new version of Riot is available.": "Riot 釋出了新版本。", + "A new version of %(brand)s is available.": "%(brand)s 釋出了新版本。", "I understand the risks and wish to continue": "我了解風險並希望繼續", "Send Account Data": "傳送帳號資料", "Advanced notification settings": "進階通知設定", @@ -778,7 +778,7 @@ "Forward Message": "轉寄訊息", "You have successfully set a password and an email address!": "您已經成功設定密碼與電子郵件地址!", "Remove %(name)s from the directory?": "自目錄中移除 %(name)s?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot 使用了許多先進的瀏覽器功能,有些在你目前所用的瀏覽器上無法使用或僅為實驗中的功能。", + "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s 使用了許多先進的瀏覽器功能,有些在你目前所用的瀏覽器上無法使用或僅為實驗中的功能。", "Developer Tools": "開發者工具", "Preparing to send logs": "準備傳送除錯訊息", "Explore Account Data": "探索帳號資料", @@ -823,13 +823,13 @@ "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.": "除錯訊息包含應用程式的使用資料,包括您的使用者名稱、您所造訪的房間/群組的 ID 或別名、其他使用者的使用者名稱等,其中不包含訊息本身。", "Unhide Preview": "取消隱藏預覽", "Unable to join network": "無法加入網路", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "你也許不曾在其它 Riot 之外的客戶端設定它們。在 Riot 底下你無法調整它們但其仍然可用", - "Sorry, your browser is not able to run Riot.": "可惜,您的瀏覽器 無法 執行 Riot.", + "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 底下你無法調整它們但其仍然可用", + "Sorry, your browser is not able to run %(brand)s.": "可惜,您的瀏覽器 無法 執行 %(brand)s.", "Messages in group chats": "在群組聊天中的訊息", "Yesterday": "昨天", "Error encountered (%(errorDetail)s).": "遇到錯誤 (%(errorDetail)s)。", "Low Priority": "低優先度", - "Riot does not know how to join a room on this network": "Riot 不知道如何在此網路中加入聊天室", + "%(brand)s does not know how to join a room on this network": "%(brand)s 不知道如何在此網路中加入聊天室", "Set Password": "設定密碼", "Off": "關閉", "Mentions only": "僅提及", @@ -866,8 +866,8 @@ "Send analytics data": "傳送分析資料", "Muted Users": "已靜音的使用者", "e.g. %(exampleValue)s": "範例:%(exampleValue)s", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "請透過傳送匿名使用資料來協助改善 Riot.im。這將會使用 cookie(請參見我們的 Cookie 政策)。", - "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "請透過傳送匿名使用資料來協助改善 Riot.im。這將會使用 cookie。", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "請透過傳送匿名使用資料來協助改善 %(brand)s。這將會使用 cookie(請參見我們的 Cookie 政策)。", + "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "請透過傳送匿名使用資料來協助改善 %(brand)s。這將會使用 cookie。", "Yes, I want to help!": "是的,我想要協助!", "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。這將會造成您的帳號離開所有已參與的聊天室,並將會從識別伺服器上移除您帳號的所有詳細資訊。此動作是不可逆的。", "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.": "停用您的帳號預設不會讓我們忘記您已經傳送過的訊息。若您想要我們忘記您的訊息,請在下面的方框中打勾。", @@ -945,10 +945,10 @@ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s 為此聊天室設定了主要位置 %(address)s。", "%(senderName)s removed the main address for this room.": "%(senderName)s 移除了此聊天室的主要位置。", "Before submitting logs, you must create a GitHub issue to describe your problem.": "在遞交紀錄檔前,您必須建立 GitHub 議題以描述您的問題。", - "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot 現在僅使用三分之一到五分之一的記憶體,僅在需要時才會載入其他使用者的資訊。請等待我們與伺服器重新同步!", - "Updating Riot": "正在更新 Riot", - "You've previously used Riot 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, Riot needs to resync your account.": "您之前曾在 %(host)s 上使用 Riot 並啟用成員列表的延遲載入。在此版本中延遲載入已停用。由於本機快取在這兩個設定間不相容,Riot 必須重新同步您的帳號。", - "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "若其他分頁仍有不同版本的 Riot,請將其關閉,因為在同一個主機上同時啟用和停用延遲載入將會發生問題。", + "%(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!": "%(brand)s 現在僅使用三分之一到五分之一的記憶體,僅在需要時才會載入其他使用者的資訊。請等待我們與伺服器重新同步!", + "Updating %(brand)s": "正在更新 %(brand)s", + "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.": "您之前曾在 %(host)s 上使用 %(brand)s 並啟用成員列表的延遲載入。在此版本中延遲載入已停用。由於本機快取在這兩個設定間不相容,%(brand)s 必須重新同步您的帳號。", + "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.": "若其他分頁仍有不同版本的 %(brand)s,請將其關閉,因為在同一個主機上同時啟用和停用延遲載入將會發生問題。", "Incompatible local cache": "不相容的本機快取", "Clear cache and resync": "清除快取並重新同步", "Please review and accept the policies of this homeserver:": "請審閱並接受此家伺服器的政策:", @@ -962,8 +962,8 @@ "Backup version: ": "備份版本: ", "Algorithm: ": "演算法: ", "Please review and accept all of the homeserver's policies": "請審閱並接受家伺服器的所有政策", - "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "為了避免遺失您的聊天歷史,您必須在登出前匯出您的聊天室金鑰。您必須回到較新的 Riot 才能執行此動作", - "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "您先前在 %(host)s 上使用較新的 Riot 版本。要再次與此版本一同使用端到端加密,您將需要登出並再次登入。 ", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "為了避免遺失您的聊天歷史,您必須在登出前匯出您的聊天室金鑰。您必須回到較新的 %(brand)s 才能執行此動作", + "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "您先前在 %(host)s 上使用較新的 %(brand)s 版本。要再次與此版本一同使用端到端加密,您將需要登出並再次登入。 ", "Incompatible Database": "不相容的資料庫", "Continue With Encryption Disabled": "在停用加密的情況下繼續", "Enter a passphrase...": "輸入密碼……", @@ -1114,9 +1114,9 @@ "Theme": "主題", "Account management": "帳號管理", "Deactivating your account is a permanent action - be careful!": "停用您的帳號是永久動作,請小心!", - "For help with using Riot, click here.": "對於使用 Riot 的說明,點選這裡。", - "For help with using Riot, click here or start a chat with our bot using the button below.": "對於使用 Riot 的說明,點選這裡或是使用下面的按鈕開始與我們的機器人聊天。", - "Chat with Riot Bot": "與 Riot 機器人聊天", + "For help with using %(brand)s, click here.": "對於使用 %(brand)s 的說明,點選這裡。", + "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "對於使用 %(brand)s 的說明,點選這裡或是使用下面的按鈕開始與我們的機器人聊天。", + "Chat with %(brand)s Bot": "與 %(brand)s 機器人聊天", "Help & About": "說明與關於", "Bug reporting": "錯誤回報", "FAQ": "FAQ", @@ -1369,8 +1369,8 @@ "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.": "位於 %(widgetUrl)s 的小工具想要驗證您的身份。在您允許後,小工具就可以驗證您的使用者 ID,但不能像您一樣執行動作。", "Remember my selection for this widget": "記住我對這個小工具的選擇", "Deny": "拒絕", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot 從家伺服器取得協定清單失敗。家伺服器可能太舊了,所以不支援第三方網路。", - "Riot failed to get the public room list.": "Riot 取得公開聊天室清單失敗。", + "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s 從家伺服器取得協定清單失敗。家伺服器可能太舊了,所以不支援第三方網路。", + "%(brand)s failed to get the public room list.": "%(brand)s 取得公開聊天室清單失敗。", "The homeserver may be unavailable or overloaded.": "家伺服器似乎不可用或超載。", "You have %(count)s unread notifications in a prior version of this room.|other": "您在此聊天室的先前版本有 %(count)s 個未讀的通知。", "You have %(count)s unread notifications in a prior version of this room.|one": "您在此聊天室的先前版本有 %(count)s 個未讀的通知。", @@ -1476,8 +1476,8 @@ "Browse": "瀏覽", "Cannot reach homeserver": "無法連線至主伺服器", "Ensure you have a stable internet connection, or get in touch with the server admin": "請確定您有穩定的網路連線,或與伺服器管理員聯繫", - "Your Riot is misconfigured": "您的 Riot 沒有設定好", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "請要求您的 Riot 管理員檢查您的設定是否有不正確或重覆的項目。", + "Your %(brand)s is misconfigured": "您的 %(brand)s 沒有設定好", + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "請要求您的 %(brand)s 管理員檢查您的設定是否有不正確或重覆的項目。", "Unexpected error resolving identity server configuration": "解析身分識別伺服器設定時發生未預期的錯誤", "Use lowercase letters, numbers, dashes and underscores only": "僅能使用小寫字母、數字、破折號與底線", "Cannot reach identity server": "無法連線至身分識別伺服器", @@ -1615,10 +1615,10 @@ "Code block": "程式碼區塊", "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)。您可以試著傳遞這份資訊給聊天室的管理員。", "This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "這個 %(roomName)s 的邀請已傳送給與您帳號無關的 %(email)s", - "Link this email with your account in Settings to receive invites directly in Riot.": "在設定中連結此電子郵件與您的帳號以直接在 Riot 中接收邀請。", + "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": "此 %(roomName)s 的邀請已傳送給 %(email)s", - "Use an identity server in Settings to receive invites directly in Riot.": "在設定中使用身份識別伺服器以直接在 Riot 中接收邀請。", - "Share this email in Settings to receive invites directly in Riot.": "在設定中分享此電子郵件以直接在 Riot 中接收邀請。", + "Use an identity server in Settings to receive invites directly in %(brand)s.": "在設定中使用身份識別伺服器以直接在 %(brand)s 中接收邀請。", + "Share this email in Settings to receive invites directly in %(brand)s.": "在設定中分享此電子郵件以直接在 %(brand)s 中接收邀請。", "Please fill why you're reporting.": "請填寫為什麼您要回報。", "Report Content to Your Homeserver Administrator": "回報內容給您的家伺服器管理員", "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "回報此訊息將會傳送其獨一無二的「活動 ID」給您家伺服器的管理員。如果此聊天室中的訊息已加密,您的家伺服器管理員將無法閱讀訊息文字或檢視任何檔案或圖片。", @@ -1740,7 +1740,7 @@ "View rules": "檢視規則", "You are currently subscribed to:": "您目前已訂閱:", "⚠ These settings are meant for advanced users.": "⚠ 這些設定適用於進階使用者。", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "在此新增您想要忽略的使用者與伺服器。使用星號以讓 Riot 核對所有字元。舉例來說,@bot:* 將會忽略在任何伺服器上,所有有 'bot' 名稱的使用者。", + "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 核對所有字元。舉例來說,@bot:* 將會忽略在任何伺服器上,所有有 'bot' 名稱的使用者。", "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.": "忽略人們已透過封鎖清單完成,其中包含了誰要被封鎖的規則。訂閱封鎖清單代表被此清單封鎖的使用者/伺服器會對您隱藏。", "Personal ban list": "個人封鎖清單", "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.": "您的個人封鎖清單包含了您個人不想要看到的所有使用者/伺服器。在忽略您的第一個使用者/伺服器後,您的聊天室清單中會出現新的聊天室,其名為「我的封鎖清單」,留在這個聊天室裡面以讓封鎖清單生效。", @@ -1765,7 +1765,7 @@ "Your avatar URL": "您的大頭貼 URL", "Your user ID": "您的使用 ID", "Your theme": "您的佈景主題", - "Riot URL": "Riot URL", + "%(brand)s URL": "%(brand)s URL", "Room ID": "聊天室 ID", "Widget ID": "小工具 ID", "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "使用這個小工具可能會與 %(widgetDomain)s 以及您的整合管理員分享資料 。", @@ -1785,7 +1785,7 @@ "Integrations are disabled": "整合已停用", "Enable 'Manage Integrations' in Settings to do this.": "在設定中啟用「管理整合」以執行此動作。", "Integrations not allowed": "不允許整合", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "您的 Riot 不允許您使用整合管理員來執行此動作。請聯絡管理員。", + "Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "您的 %(brand)s 不允許您使用整合管理員來執行此動作。請聯絡管理員。", "Reload": "重新載入", "Take picture": "拍照", "Remove for everyone": "對所有人移除", @@ -1809,7 +1809,7 @@ "Upgrade private room": "升級私密聊天室", "Upgrade public room": "升級公開聊天室", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "升級聊天室為進階動作,通常建議在聊天室因為臭蟲而不穩定、缺少功能或安全漏洞等才升級。", - "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "這通常僅影響如何在伺服器上處理聊天室的方式。如果您遇到與 Riot 相關的問題,請回報臭蟲。", + "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "這通常僅影響如何在伺服器上處理聊天室的方式。如果您遇到與 %(brand)s 相關的問題,請回報臭蟲。", "You'll upgrade this room from to .": "您將要把此聊天室從 升級到 。", "Upgrade": "升級", "Notification settings": "通知設定", @@ -1984,8 +1984,8 @@ "Manage": "管理", "Securely cache encrypted messages locally for them to appear in search results.": "將加密的訊息安全地在本機快取以出現在顯示結果中。", "Enable": "啟用", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot 缺少某些在本機快取已加密訊習所需的元件。如果您想要實驗此功能,請加入搜尋元件並自行建構 Riot 桌面版。", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot 無法在網路瀏覽器中安全地在本機快取已加密的訊息。使用 Riot 桌面版來讓已加密的訊息出現在搜尋結果中。", + "%(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 桌面版。", + "%(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 桌面版來讓已加密的訊息出現在搜尋結果中。", "This session is backing up your keys. ": "此工作階段正在備份您的金鑰。 ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "此工作階段不會備份您的金鑰,但您已有既有的備份,您可以從那邊復原,或是稍後再做。", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "在登出前,請先將此工作階段連線到金鑰備份以避免遺失任何可能僅在此工作階段中的金鑰。", @@ -2104,7 +2104,7 @@ "Disable": "停用", "Not currently downloading messages for any room.": "目前未下載任何聊天室的訊息。", "Downloading mesages for %(currentRoom)s.": "正在下載 %(currentRoom)s 的訊息。", - "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot 正在安全地本機快取已加密的訊息以讓它們顯示在搜尋結果中:", + "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s 正在安全地本機快取已加密的訊息以讓它們顯示在搜尋結果中:", "Space used:": "已使用空間:", "Indexed messages:": "已索引的訊息:", "Number of rooms:": "聊天室數量:", @@ -2148,12 +2148,12 @@ "Ask this user to verify their session, or manually verify it below.": "要求此使用者驗證他們的工作階段,或在下方手動驗證。", "Manually Verify": "手動驗證", "Verify by scanning": "透過掃描來驗證", - "The version of Riot": "Riot 版本", - "Whether you're using Riot on a device where touch is the primary input mechanism": "您是否在以觸控為主要機制的裝置上使用 Riot", - "Whether you're using Riot as an installed Progressive Web App": "您是否使用 PWA 形式的 Riot", + "The version of %(brand)s": "%(brand)s 版本", + "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "您是否在以觸控為主要機制的裝置上使用 %(brand)s", + "Whether you're using %(brand)s as an installed Progressive Web App": "您是否使用 PWA 形式的 %(brand)s", "Your user agent": "您的使用者代理字串", - "The information being sent to us to help make Riot better includes:": "傳送給我們以協助改進 Riot 的資訊包含了:", - "The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "您嘗試驗證的工作階段不支援 Riot 支援的掃描 QR code 或顏文字驗證。請用其他客戶端試試看。", + "The information being sent to us to help make %(brand)s better includes:": "傳送給我們以協助改進 %(brand)s 的資訊包含了:", + "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 支援的掃描 QR code 或顏文字驗證。請用其他客戶端試試看。", "You declined": "您拒絕了", "%(name)s declined": "%(name)s 拒絕了", "accepting …": "正在接受……", @@ -2236,7 +2236,7 @@ "a new cross-signing key signature": "新的交叉簽署金鑰簽章", "a device cross-signing signature": "裝置交叉簽署簽章", "a key signature": "金鑰簽章", - "Riot encountered an error during upload of:": "Riot 在上傳以下內容時遇到錯誤:", + "%(brand)s encountered an error during upload of:": "%(brand)s 在上傳以下內容時遇到錯誤:", "Upload completed": "上傳完成", "Cancelled signature upload": "已取消簽章上傳", "Unabled to upload": "無法上傳", @@ -2400,7 +2400,7 @@ "Unable to query secret storage status": "無法查詢秘密儲存空間狀態", "Verify this login": "驗證此登入", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "透過驗證這個從您的其他工作階段而來的登入來確認您的身份,並授予其對加密訊息的存取權限。", - "This requires the latest Riot on your other devices:": "這需要在您的其他裝置上使用最新的 Riot:", + "This requires the latest %(brand)s on your other devices:": "這需要在您的其他裝置上使用最新的 %(brand)s:", "or another cross-signing capable Matrix client": "或另一個有交叉簽章功能的 Matrix 客戶端", "Use Recovery Passphrase or Key": "使用復原通關密語或金鑰", "Where you’re logged in": "您登入的地方", @@ -2463,13 +2463,13 @@ "This address is available to use": "此地址可用", "This address is already in use": "此地址已被使用", "Set a room address to easily share your room with other people.": "設定聊天室地址以輕鬆地與其他夥伴分享。", - "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "您先前在此工作階段中使用了較新版本的 Riot。要再次與此版本一同使用端到端加密,您必須先登出再登入。", + "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "您先前在此工作階段中使用了較新版本的 %(brand)s。要再次與此版本一同使用端到端加密,您必須先登出再登入。", "Address (optional)": "地址(選擇性)", "Delete the room address %(alias)s and remove %(name)s from the directory?": "刪除聊天室地址 %(alias)s 並從目錄移除 %(name)s?", "delete the address.": "刪除地址。", "Use a different passphrase?": "使用不同的通關密語?", - "Help us improve Riot": "協助我們改善 Riot", - "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "傳送匿名使用資料以協助我們改善 Riot。這將會使用 cookie。", + "Help us improve %(brand)s": "協助我們改善 %(brand)s", + "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "傳送匿名使用資料以協助我們改善 %(brand)s。這將會使用 cookie。", "I want to help": "我想要協助", "Your homeserver has exceeded its user limit.": "您的家伺服器已超過使用者限制。", "Your homeserver has exceeded one of its resource limits.": "您的家伺服器已超過其中一種資源限制。", @@ -2478,8 +2478,8 @@ "Set password": "設定密碼", "To return to your account in future you need to set a password": "要在日後取回您的帳號,您必須設定密碼", "Restart": "重新啟動", - "Upgrade your Riot": "升級您的 Riot", - "A new version of Riot is available!": "已有新版的 Riot!", + "Upgrade your %(brand)s": "升級您的 %(brand)s", + "A new version of %(brand)s is available!": "已有新版的 %(brand)s!", "New version available. Update now.": "有可用的新版本。立刻更新。", "Emoji picker": "顏文字挑選器", "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "您的伺服器管理員已在私人聊天室與直接訊息中預設停用端到端加密。", @@ -2511,7 +2511,7 @@ "Light": "淺色", "Dark": "暗色", "Customise your appearance": "自訂您的外觀", - "Appearance Settings only affect this Riot session.": "外觀設定僅會影響此 Riot 工作階段。", + "Appearance Settings only affect this %(brand)s session.": "外觀設定僅會影響此 %(brand)s 工作階段。", "Recovery Key": "復原金鑰", "This isn't the recovery key for your account": "這不是您帳號的復原金鑰", "This isn't a valid recovery key": "這不是有效的復原金鑰", From fa55f9fda24d27f31f9f0d3107e5981655abea38 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 10 Jul 2020 19:27:57 +0100 Subject: [PATCH 0868/1504] Prune translations for strings that no longer exist --- src/i18n/strings/ar.json | 4 - src/i18n/strings/az.json | 39 ----- src/i18n/strings/be.json | 3 - src/i18n/strings/bg.json | 202 +------------------------ src/i18n/strings/ca.json | 69 --------- src/i18n/strings/cs.json | 215 +-------------------------- src/i18n/strings/da.json | 55 +------ src/i18n/strings/de_DE.json | 211 +------------------------- src/i18n/strings/el.json | 66 --------- src/i18n/strings/en_US.json | 70 --------- src/i18n/strings/eo.json | 231 +---------------------------- src/i18n/strings/es.json | 158 +------------------- src/i18n/strings/et.json | 90 ------------ src/i18n/strings/eu.json | 234 +---------------------------- src/i18n/strings/fa.json | 6 - src/i18n/strings/fi.json | 209 +------------------------- src/i18n/strings/fr.json | 267 +-------------------------------- src/i18n/strings/gl.json | 102 +------------ src/i18n/strings/he.json | 12 -- src/i18n/strings/hi.json | 40 ----- src/i18n/strings/hu.json | 258 +------------------------------- src/i18n/strings/id.json | 30 ---- src/i18n/strings/is.json | 49 ------- src/i18n/strings/it.json | 262 +-------------------------------- src/i18n/strings/ja.json | 109 +------------- src/i18n/strings/jbo.json | 24 --- src/i18n/strings/kab.json | 2 - src/i18n/strings/ko.json | 137 +---------------- src/i18n/strings/lt.json | 122 +--------------- src/i18n/strings/lv.json | 68 --------- src/i18n/strings/ml.json | 8 +- src/i18n/strings/nb_NO.json | 85 +---------- src/i18n/strings/nl.json | 200 +------------------------ src/i18n/strings/nn.json | 133 +---------------- src/i18n/strings/oc.json | 2 - src/i18n/strings/pl.json | 108 +------------- src/i18n/strings/pt.json | 64 +------- src/i18n/strings/pt_BR.json | 96 ------------ src/i18n/strings/ro.json | 10 -- src/i18n/strings/ru.json | 163 +-------------------- src/i18n/strings/sk.json | 142 +----------------- src/i18n/strings/sq.json | 259 +------------------------------- src/i18n/strings/sr.json | 78 +--------- src/i18n/strings/sr_Latn.json | 5 - src/i18n/strings/sv.json | 114 +-------------- src/i18n/strings/ta.json | 13 -- src/i18n/strings/te.json | 15 -- src/i18n/strings/th.json | 38 +---- src/i18n/strings/tr.json | 138 +---------------- src/i18n/strings/uk.json | 55 +------ src/i18n/strings/vi.json | 22 --- src/i18n/strings/vls.json | 120 --------------- src/i18n/strings/zh_Hans.json | 126 +--------------- src/i18n/strings/zh_Hant.json | 268 +--------------------------------- 54 files changed, 46 insertions(+), 5560 deletions(-) diff --git a/src/i18n/strings/ar.json b/src/i18n/strings/ar.json index 2a67fd9258..75ab15a778 100644 --- a/src/i18n/strings/ar.json +++ b/src/i18n/strings/ar.json @@ -20,12 +20,10 @@ "The version of %(brand)s": "إصدارة %(brand)s", "Whether or not you're using the Richtext mode of the Rich Text Editor": "فيما إذا كنت تستخدم وضع النص الغني لمحرر النصوص الغني أم لا", "Your homeserver's URL": "عنوان خادوم المنزل", - "Your identity server's URL": "عنوان خادوم التعريف", "Analytics": "التحاليل", "The information being sent to us to help make %(brand)s better includes:": "تحتوي المعلومات التي تُرسل إلينا للمساعدة بتحسين جودة %(brand)s الآتي:", "Couldn't find a matching Matrix room": "لا يمكن إيجاد غرفة مايتركس متطابقة", "Unavailable": "غير متوفر", - "A new version of %(brand)s is available.": "هناك نسخة جديدة مِن رايوت متوفرة.", "All Rooms": "كل الغُرف", "All messages": "كل الرسائل", "All notifications are currently disabled for all targets.": "كل التنبيهات غير مفعلة حالياً للجميع.", @@ -42,7 +40,6 @@ "No update available.": "لا يوجد هناك أي تحديث.", "An error occurred whilst saving your email notification preferences.": "حدث خطأ ما أثناء عملية حفظ إعدادات الإشعارات عبر البريد الإلكتروني.", "Collecting app version information": "تجميع المعلومات حول نسخة التطبيق", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "إلغاء مُعرف الغرفة %(alias)s وحذف %(name)s من الدليل؟", "Changelog": "سِجل التغييرات", "Send Account Data": "إرسال بيانات الحساب", "Waiting for response from server": "في انتظار الرد مِن الخادوم", @@ -51,7 +48,6 @@ "Thank you!": "شكرًا !", "Advanced notification settings": "الإعدادات المتقدمة للإشعارات", "Call invitation": "دعوة لمحادثة", - "delete the alias.": "إلغاء المُعرف.", "Developer Tools": "أدوات التطوير", "Downloading update...": "عملية تنزيل التحديث جارية …", "State Key": "مفتاح الحالة", diff --git a/src/i18n/strings/az.json b/src/i18n/strings/az.json index c52c1fe9f6..5a8dec76f0 100644 --- a/src/i18n/strings/az.json +++ b/src/i18n/strings/az.json @@ -30,10 +30,8 @@ "Which officially provided instance you are using, if any": "Hansı rəsmən dəstəklənən müştəri tərəfindən siz istifadə edirsiniz ( əgər istifadə edirsinizsə)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Siz Rich Text Editor redaktorunda Richtext rejimindən istifadə edirsinizmi", "Your homeserver's URL": "Serverin URL-ünvanı", - "Your identity server's URL": "Eyniləşdirmənin serverinin URL-ünvanı", "Every page you use in the app": "Hər səhifə, hansını ki, siz proqramda istifadə edirsiniz", "e.g. ": "məs. ", - "Your User Agent": "Sizin istifadəçi agentiniz", "Your device resolution": "Sizin cihazınızın qətnaməsi", "The information being sent to us to help make %(brand)s better includes:": "%(brand)s'i daha yaxşı etmək üçün bizə göndərilən məlumatlar daxildir:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Əgər bu səhifədə şəxsi xarakterin məlumatları rast gəlinirsə, məsələn otağın, istifadəçinin adının və ya qrupun adı, onlar serverə göndərilmədən əvvəl silinirlər.", @@ -73,7 +71,6 @@ "Default": "Varsayılan olaraq", "Moderator": "Moderator", "Admin": "Administrator", - "Start a chat": "Danışığa başlamaq", "You need to be logged in.": "Siz sistemə girməlisiniz.", "You need to be able to invite users to do that.": "Bunun üçün siz istifadəçiləri dəvət etmək imkanına malik olmalısınız.", "Failed to send request.": "Sorğunu göndərməyi bacarmadı.", @@ -85,7 +82,6 @@ "To use it, just wait for autocomplete results to load and tab through them.": "Bu funksiyadan istifadə etmək üçün, avto-əlavənin pəncərəsində nəticələrin yükləməsini gözləyin, sonra burulma üçün Tab-dan istifadə edin.", "Changes your display nickname": "Sizin təxəllüsünüz dəyişdirir", "Invites user with given id to current room": "Verilmiş ID-lə istifadəçini cari otağa dəvət edir", - "Joins room with given alias": "Verilmiş təxəllüslə otağa daxil olur", "Leave room": "Otağı tərk etmək", "Kicks user with given id": "Verilmiş ID-lə istifadəçini çıxarır", "Bans user with given id": "Verilmiş ID-lə istifadəçini bloklayır", @@ -142,14 +138,10 @@ "Confirm password": "Yeni şifrə təsdiq edin", "Change Password": "Şifrəni dəyişdirin", "Authentication": "Müəyyənləşdirilmə", - "Device ID": "Qurğunun ID-i", "Failed to set display name": "Görünüş adını təyin etmək bacarmadı", "Notification targets": "Xəbərdarlıqlar üçün qurğular", "On": "Qoşmaq", "not specified": "qeyd edilmədi", - "Local addresses for this room:": "Sizin serverinizdə bu otağın ünvanları:", - "New address (e.g. #foo:%(localDomain)s)": "Yeni ünvan (məsələn, #nəsə:%(localDomain)s)", - "Blacklisted": "Qara siyahıda", "Disinvite": "Dəvəti geri çağırmaq", "Kick": "Qovmaq", "Failed to kick": "Qovmağı bacarmadı", @@ -157,13 +149,10 @@ "Ban": "Bloklamaq", "Failed to ban user": "İstifadəçini bloklamağı bacarmadı", "Failed to mute user": "İstifadəçini kəsməyi bacarmadı", - "Failed to toggle moderator status": "Moderatorun statusunu dəyişdirməyi bacarmadı", "Failed to change power level": "Hüquqların səviyyəsini dəyişdirməyi bacarmadı", "Are you sure?": "Siz əminsiniz?", "Unignore": "Blokdan çıxarmaq", "Ignore": "Bloklamaq", - "User Options": "Hərəkətlər", - "Direct chats": "Şəxsi çatlar", "Invited": "Dəvət edilmişdir", "Filter room members": "İştirakçılara görə axtarış", "Attachment": "Əlavə", @@ -202,7 +191,6 @@ "Today": "Bu gün", "Decrypt %(text)s": "Şifrini açmaq %(text)s", "Download %(text)s": "Yükləmək %(text)s", - "Message removed by %(userId)s": "%(userId)s mesajı silinmişdir", "Sign in with": "Seçmək", "Register": "Qeydiyyatdan keçmək", "Remove": "Silmək", @@ -212,7 +200,6 @@ "Create new room": "Otağı yaratmaq", "No results": "Nəticə yoxdur", "Home": "Başlanğıc", - "Could not connect to the integration server": "İnteqrasiyanın serverinə qoşulmağ mümkün deyil", "Manage Integrations": "İnteqrasiyaları idarə etmə", "%(items)s and %(lastItem)s": "%(items)s və %(lastItem)s", "Room directory": "Otaqların kataloqu", @@ -280,20 +267,6 @@ "Commands": "Komandalar", "Emoji": "Smaylar", "Users": "İstifadəçilər", - "unknown device": "naməlum cihaz", - "NOT verified": "Yoxlanmamışdır", - "verified": "yoxlanmış", - "Verification": "Yoxlama", - "Ed25519 fingerprint": "Ed25519 iz", - "User ID": "İstifadəçinin ID-i", - "Curve25519 identity key": "Kimlik açarı Curve25519", - "none": "heç kim", - "Claimed Ed25519 fingerprint key": "Ed25519-un rəqəmli izinin tələb edilən açarı", - "Algorithm": "Alqoritm", - "unencrypted": "şifrləməsiz", - "Decryption error": "Şifrələmə xətası", - "End-to-end encryption information": "İki tərəfi açıq şifrləmə haqqında məlumatlar", - "Event information": "Hadisə haqqında informasiya", "Confirm passphrase": "Şifrəni təsdiqləyin", "This email address is already in use": "Bu e-mail ünvanı istifadə olunur", "This phone number is already in use": "Bu telefon nömrəsi artıq istifadə olunur", @@ -301,13 +274,7 @@ "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "'Çörək parçaları' funksiyadan istifadə edmiirsiniz (otaqlar siyahısından yuxarıdakı avatarlar)", "Analytics": "Analitik", "Call Failed": "Uğursuz zəng", - "Review Devices": "Cihazları nəzərdən keçirin", - "Call Anyway": "Hər halda zəng edin", - "Answer Anyway": "Hər halda cavab verin", - "Call": "Zəng", - "Answer": "Cavab ver", "The remote side failed to pick up": "Qarşı tərəf ala bilmədi", - "A conference call could not be started because the integrations server is not available": "Birləşmə serverinin mövcud olmadığı üçün bir konfrans zəngini aça bilmədi", "Call in Progress": "Zəng edir", "A call is currently being placed!": "Hazırda zəng edilir!", "A call is already in progress!": "Zəng artıq edilir!", @@ -317,7 +284,6 @@ "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Bu anda bir faylla cavab vermək mümkün deyil. Bu faylı cavab vermədən yükləməyinizi istəyirsinizmi?", "Server may be unavailable, overloaded, or you hit a bug.": "Server, istifadə edilə bilməz, yüklənmiş ola bilər və ya bir səhv vurursunuz.", "The server does not support the room version specified.": "Server göstərilən otaq versiyasını dəstəkləmir.", - "Send anyway": "Hər halda göndər", "Send": "Göndər", "PM": "24:00", "AM": "12:00", @@ -328,7 +294,6 @@ "Invite to Community": "Cəmiyyətə dəvət edirik", "Which rooms would you like to add to this community?": "Bu cəmiyyətə hansı otaqları əlavə etmək istərdiniz?", "Show these rooms to non-members on the community page and room list?": "Bu otaqları icma səhifəsində və otaq siyahısında olmayanlara göstərin?", - "Room name or alias": "Otaq adı və ya ləqəb", "Add to community": "Cəmiyyətə əlavə edin", "Failed to invite users to community": "İstifadəçiləri cəmiyyətə dəvət etmək alınmadı", "Unnamed Room": "Adı açıqlanmayan otaq", @@ -338,8 +303,6 @@ "%(brand)s was not given permission to send notifications - please try again": "%(brand)s bildiriş göndərmək üçün icazə verilmədi - lütfən yenidən cəhd edin", "This email address was not found": "Bu e-poçt ünvanı tapılmadı", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "E-poçt adresiniz bu Ana serverdəki Matrix ID ilə əlaqəli görünmür.", - "Registration Required": "Qeydiyyat tələb olunur", - "You need to register to do this. Would you like to register now?": "Bunu etmək üçün qeydiyyatdan keçməlisiniz. İndi qeydiyyatdan keçmək istərdiniz?", "Restricted": "Məhduddur", "Failed to invite": "Dəvət alınmadı", "Failed to invite users to the room:": "İstifadəçiləri otağa dəvət etmək alınmadı:", @@ -357,7 +320,6 @@ "Gets or sets the room topic": "Otaq mövzusunu alır və ya təyin edir", "This room has no topic.": "Bu otağın mövzusu yoxdur.", "Sets the room name": "Otaq adını təyin edir", - "Unrecognised room alias:": "Tanınmamış otaq ləqəbi:", "Unbans user with given ID": "Verilmiş ID ilə istifadəçini qadağan etmək", "Define the power level of a user": "Bir istifadəçinin güc səviyyəsini müəyyənləşdirin", "Opens the Developer Tools dialog": "Geliştirici Alətlər dialoqunu açır", @@ -375,7 +337,6 @@ "Try using turn.matrix.org": "Turn.matrix.org istifadə edin", "The file '%(fileName)s' failed to upload.": "'%(fileName)s' faylı yüklənə bilmədi.", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "'%(fileName)s' faylı yükləmə üçün bu server ölçü həddini aşmışdır", - "Send cross-signing keys to homeserver": "Ev serveri üçün çarpaz imzalı açarları göndərin", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s", "Add rooms to the community": "Icmaya otaqlar əlavə edin", "Failed to invite the following users to %(groupId)s:": "Aşağıdakı istifadəçiləri %(groupId)s - ə dəvət etmək alınmadı:", diff --git a/src/i18n/strings/be.json b/src/i18n/strings/be.json index 0a3daab661..05e0baca4b 100644 --- a/src/i18n/strings/be.json +++ b/src/i18n/strings/be.json @@ -30,7 +30,6 @@ "On": "Уключыць", "remove %(name)s from the directory.": "выдаліць %(name)s з каталога.", "Off": "Выключыць", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Выдаліць псеўданім пакоя %(alias)s і выдаліць %(name)s з каталога?", "Invite to this room": "Запрасіць у гэты пакой", "Notifications on the following keywords follow rules which can’t be displayed here:": "Апавяшчэнні па наступных ключавых словах прытрымліваюцца правілаў, якія не могуць быць адлюстраваны тут:", "Mentions only": "Толькі згадкі", @@ -42,7 +41,6 @@ "No rooms to show": "Няма пакояў для паказу", "Download this file": "Спампаваць гэты файл", "Operation failed": "Не атрымалася выканаць аперацыю", - "delete the alias.": "выдаліць псеўданім.", "Forget": "Забыць", "Mute": "Без гуку", "Error saving email notification preferences": "Памылка захавання налад апавяшчэнняў па электроннай пошце", @@ -59,6 +57,5 @@ "An error occurred whilst saving your email notification preferences.": "Адбылася памылка падчас захавання налады апавяшчэнняў па электроннай пошце.", "Room not found": "Пакой не знойдзены", "Notify for all other messages/rooms": "Апавяшчаць для ўсіх іншых паведамленняў/пакояў", - "There are advanced notifications which are not shown here": "Ёсць пашыраныя апавяшчэння, якія не паказаныя тут", "The server may be unavailable or overloaded": "Сервер можа быць недаступны ці перагружаны" } diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json index 363951c314..3d86e54c17 100644 --- a/src/i18n/strings/bg.json +++ b/src/i18n/strings/bg.json @@ -63,19 +63,15 @@ "Which officially provided instance you are using, if any": "Кой официално-предоставен сървър използвате, ако има такъв", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Дали използвате Richtext режим на Rich Text Editor", "Your homeserver's URL": "Адресът на Вашия Home сървър", - "Your identity server's URL": "Адресът на Вашия сървър за самоличност", "Analytics": "Статистика", - "The information being sent to us to help make %(brand)s better includes:": "За да направим %(brand)s по-добър, информацията изпратена до нас включва:", + "The information being sent to us to help make %(brand)s better includes:": "Информацията, която се изпраща за да ни помогне да подобрим %(brand)s включва:", "Call Failed": "Неуспешно повикване", - "Call": "Позвъни", - "Answer": "Отговори", "You are already in a call.": "Вече сте в разговор.", "VoIP is unsupported": "Не се поддържа VoIP", "You cannot place VoIP calls in this browser.": "Не може да осъществите VoIP разговори в този браузър.", "You cannot place a call with yourself.": "Не може да осъществите разговор със себе си.", "Existing Call": "Съществуващ разговор", "Warning!": "Внимание!", - "Review Devices": "Преглед на устройства", "Upload Failed": "Качването е неуспешно", "PM": "PM", "AM": "AM", @@ -86,7 +82,6 @@ "Which rooms would you like to add to this community?": "Кои стаи бихте желали да добавите в тази общност?", "Show these rooms to non-members on the community page and room list?": "Показване на тези стаи на не-членове в страницата на общността и в списъка със стаи?", "Add rooms to the community": "Добави стаи в общността", - "Room name or alias": "Име или псевдоним на стая", "Add to community": "Добави в общност", "Failed to invite the following users to %(groupId)s:": "Следните потребители не могат да бъдат поканени в %(groupId)s:", "Failed to invite users to community": "Потребителите не могат да бъдат поканени в общността", @@ -101,7 +96,6 @@ "Restricted": "Ограничен", "Moderator": "Модератор", "Admin": "Администратор", - "Start a chat": "Започване на чат", "Failed to invite": "Неуспешна покана", "Failed to invite the following users to the %(roomName)s room:": "Следните потребителите не успяха да бъдат добавени в %(roomName)s:", "You need to be logged in.": "Трябва да влезете в профила си.", @@ -110,8 +104,6 @@ "Failed to send request.": "Неуспешно изпращане на заявката.", "This room is not recognised.": "Стаята не е разпозната.", "Power level must be positive integer.": "Нивото на достъп трябва да бъде позитивно число.", - "Call Anyway": "Позвъни въпреки това", - "Answer Anyway": "Отговори въпреки това", "Call Timeout": "Изтекло време за повикване", "The remote side failed to pick up": "Отсрещната страна не успя да отговори", "Unable to capture screen": "Неуспешно заснемане на екрана", @@ -122,7 +114,6 @@ "Missing user_id in request": "Липсва user_id в заявката", "/ddg is not a command": "/ddg не е команда", "To use it, just wait for autocomplete results to load and tab through them.": "За използване, изчакайте зареждането на списъка с предложения и изберете от него.", - "Unrecognised room alias:": "Непознат псевдоним на стая:", "Ignored user": "Игнориран потребител", "You are now ignoring %(userId)s": "Вече игнорирате %(userId)s", "Unignored user": "Неигнориран потребител", @@ -172,14 +163,12 @@ "%(widgetName)s widget removed by %(senderName)s": "Приспособлението %(widgetName)s беше премахнато от %(senderName)s", "Failure to create room": "Неуспешно създаване на стая", "Server may be unavailable, overloaded, or you hit a bug.": "Сървърът може би е претоварен, недостъпен или се натъкнахте на проблем.", - "Send anyway": "Изпрати въпреки това", "Unnamed Room": "Стая без име", "Your browser does not support the required cryptography extensions": "Вашият браузър не поддържа необходимите разширения за шифроване", "Not a valid %(brand)s keyfile": "Невалиден файл с ключ за %(brand)s", "Authentication check failed: incorrect password?": "Неуспешна автентикация: неправилна парола?", "Failed to join room": "Неуспешно присъединяване към стаята", "Message Pinning": "Функция за закачане на съобщения", - "Use compact timeline layout": "Използване на компактно оформление за списъка със съобщения", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Показване на времето в 12-часов формат (напр. 2:30pm)", "Always show message timestamps": "Винаги показвай часа на съобщението", "Autoplay GIFs and videos": "Автоматично възпроизвеждане на GIF-файлове и видеа", @@ -214,11 +203,8 @@ "Confirm password": "Потвърждаване на парола", "Change Password": "Смяна на парола", "Authentication": "Автентикация", - "Device ID": "Идентификатор на устройство", "Last seen": "Последно видян", "Failed to set display name": "Неуспешно задаване на име", - "Disable Notifications": "Изключване на известия", - "Enable Notifications": "Включване на известия", "Cannot add any more widgets": "Не могат да се добавят повече приспособления", "The maximum permitted number of widgets have already been added to this room.": "Максимално разрешеният брой приспособления е вече добавен към тази стая.", "Add a widget": "Добави приспособление", @@ -232,8 +218,6 @@ "%(senderName)s uploaded a file": "%(senderName)s качи файл", "Options": "Настройки", "Please select the destination room for this message": "Моля, изберете стаята, в която искате да изпратите това съобщение", - "Blacklisted": "В черния списък", - "device id: ": "идентификатор на устройството: ", "Disinvite": "Отмени поканата", "Kick": "Изгони", "Disinvite this user?": "Отмени поканата към този потребител?", @@ -245,7 +229,6 @@ "Ban this user?": "Блокирай този потребител?", "Failed to ban user": "Неуспешно блокиране на потребителя", "Failed to mute user": "Неуспешно заглушаване на потребителя", - "Failed to toggle moderator status": "Неуспешна промяна на статуса на модератора", "Failed to change power level": "Неуспешна промяна на нивото на достъп", "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.": "След като си намалите нивото на достъп, няма да можете да възвърнете тази промяна. Ако сте последния потребител с привилегии в тази стая, ще бъде невъзможно да възвърнете привилегии си.", "Are you sure?": "Сигурни ли сте?", @@ -253,11 +236,8 @@ "Unignore": "Премахни игнорирането", "Ignore": "Игнорирай", "Mention": "Спомени", - "Direct chats": "Директни чатове", - "User Options": "Опции на потребителя", "Invite": "Покани", "Unmute": "Премахни заглушаването", - "Make Moderator": "Направи модератор", "Admin Tools": "Инструменти на администратора", "and %(count)s others...|other": "и %(count)s други...", "and %(count)s others...|one": "и още един...", @@ -270,9 +250,7 @@ "Video call": "Видео повикване", "Upload file": "Качи файл", "Send an encrypted reply…": "Изпрати шифрован отговор…", - "Send a reply (unencrypted)…": "Отговори (нешифрованo)…", "Send an encrypted message…": "Изпрати шифровано съобщение…", - "Send a message (unencrypted)…": "Изпрати съобщение (нешифровано)…", "You do not have permission to post to this room": "Нямате разрешение да публикувате в тази стая", "Server error": "Сървърна грешка", "Server unavailable, overloaded, or something else went wrong.": "Сървърът е недостъпен, претоварен или нещо друго се обърка.", @@ -333,10 +311,7 @@ "Add a topic": "Добавете тема", "Jump to first unread message.": "Отиди до първото непрочетено съобщение.", "not specified": "неопределен", - "Remote addresses for this room:": "Отдалечени адреси на тази стая:", - "Local addresses for this room:": "Локалните адреси на тази стая са:", "This room has no local addresses": "Тази стая няма локални адреси", - "New address (e.g. #foo:%(localDomain)s)": "Нов адрес (напр. #foo:%(localDomain)s)", "Invalid community ID": "Невалиден идентификатор на общност", "'%(groupId)s' is not a valid community ID": "'%(groupId)s' е невалиден идентификатор на общност", "Flair": "Значка", @@ -383,7 +358,6 @@ "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Създайте общност, за да групирате потребители и стаи! Изградете персонализирана начална страница, за да маркирате своето пространство в Matrix Вселената.", "Jump to message": "Отиди до съобщението", "Jump to read receipt": "Отиди до потвърждението за прочитане", - "Revoke Moderator": "Премахване на правата на модератора", "Invalid file%(extra)s": "Невалиден файл%(extra)s", "Error decrypting image": "Грешка при разшифроване на снимка", "Error decrypting video": "Грешка при разшифроване на видео", @@ -393,10 +367,6 @@ "Copied!": "Копирано!", "Failed to copy": "Неуспешно копиране", "Add an Integration": "Добавяне на интеграция", - "Removed or unknown message type": "Премахнато или неизвестен тип съобщение", - "Message removed by %(userId)s": "Съобщението е премахнато от %(userId)s", - "Message removed": "Съобщението е премахнато", - "To continue, please enter your password.": "За да продължите, моля, въведете своята парола.", "An email has been sent to %(emailAddress)s": "Имейл беше изпратен на %(emailAddress)s", "Please check your email to continue registration.": "Моля, проверете имейла си, за да продължите регистрацията.", "Token incorrect": "Неправителен тоукън", @@ -424,17 +394,10 @@ "Delete widget": "Изтрий приспособлението", "Minimize apps": "Минимизирай приложенията", "Create new room": "Създай нова стая", - "Unblacklist": "Премахни от черния списък", - "Blacklist": "Добави в черен списък", - "Unverify": "Махни потвърждението", - "Verify...": "Потвърди...", "I have verified my email address": "Потвърдих имейл адреса си", - "NOT verified": "НЕ е потвърдено", - "verified": "потвърдено", "No results": "Няма резултати", "Communities": "Общности", "Home": "Начална страница", - "Could not connect to the integration server": "Неуспешно свързване със сървъра с интеграции", "Manage Integrations": "Управление на интеграциите", "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)sсе присъединиха %(count)s пъти", @@ -513,14 +476,8 @@ "Unknown error": "Неизвестна грешка", "Incorrect password": "Неправилна парола", "Deactivate Account": "Затвори акаунта", - "Start verification": "Започни потвърждението", "Verification Pending": "Очакване на потвърждение", - "Verification": "Потвърждение", - "I verify that the keys match": "Потвърждавам, че ключовете съвпадат", "An error has occurred.": "Възникна грешка.", - "Share without verifying": "Сподели без потвърждение", - "Ignore request": "Игнорирай поканата", - "Encryption key request": "Заявка за ключ за шифроване", "Unable to restore session": "Неуспешно възстановяване на сесията", "Invalid Email Address": "Невалиден имейл адрес", "This doesn't appear to be a valid email address": "Това не изглежда да е валиден имейл адрес", @@ -541,7 +498,6 @@ "If you already have a Matrix account you can log in instead.": "Ако вече имате Matrix профил, можете да влезете с него.", "Private Chat": "Личен чат", "Public Chat": "Публичен чат", - "Alias (optional)": "Псевдоним (по избор)", "Name": "Име", "You must register to use this functionality": "Трябва да се регистрирате, за да използвате тази функционалност", "You must join the room to see its files": "Трябва да се присъедините към стаята, за да видите файловете, които съдържа", @@ -579,7 +535,6 @@ "Sign out": "Изход", "Error whilst fetching joined communities": "Грешка при извличането на общности, към които сте присъединени", "You have no visible notifications": "Нямате видими известия", - "Scroll to bottom of page": "Отиди до края на страницата", "%(count)s of your messages have not been sent.|other": "Някои от Вашите съобщение не бяха изпратени.", "%(count)s of your messages have not been sent.|one": "Вашето съобщение не беше изпратено.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Изпрати всички отново или откажи всички сега. Също така може да изберете индивидуални съобщения, които да изпратите отново или да откажете.", @@ -593,7 +548,6 @@ "Search failed": "Търсенето е неуспешно", "Server may be unavailable, overloaded, or search timed out :(": "Сървърът може би е недостъпен, претоварен или времето за търсене изтече :(", "No more results": "Няма повече резултати", - "Unknown room %(roomId)s": "Неизвестна стая %(roomId)s", "Room": "Стая", "Failed to reject invite": "Неуспешно отхвърляне на поканата", "Reject all %(invitedRooms)s invites": "Отхвърли всички %(invitedRooms)s покани", @@ -608,8 +562,6 @@ "Uploading %(filename)s and %(count)s others|other": "Качване на %(filename)s и %(count)s други", "Uploading %(filename)s and %(count)s others|zero": "Качване на %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Качване на %(filename)s и %(count)s друг", - "Light theme": "Светла тема", - "Dark theme": "Тъмна тема", "Success": "Успешно", "": "<не се поддържа>", "Import E2E room keys": "Импортирай E2E ключове", @@ -657,7 +609,6 @@ "Define the power level of a user": "Променя нивото на достъп на потребителя", "Deops user with given id": "Отнема правата на потребител с даден идентификатор", "Invites user with given id to current room": "Поканва потребител с даден идентификатор в текущата стая", - "Joins room with given alias": "Присъединяване към стая с даден псевдоним", "Kicks user with given id": "Изгонва потребителя с даден идентификатор", "Changes your display nickname": "Сменя Вашия псевдоним", "Searches DuckDuckGo for results": "Търси в DuckDuckGo за резултати", @@ -669,17 +620,7 @@ "Notify the whole room": "Извести всички в стаята", "Room Notification": "Известие за стая", "Users": "Потребители", - "unknown device": "неизвестно устройство", - "Ed25519 fingerprint": "Ed25519 отпечатък", - "User ID": "Потребителски идентификатор", - "Curve25519 identity key": "Curve25519 ключ за самоличност", - "Algorithm": "Алгоритъм", - "unencrypted": "нешифрован", - "Decryption error": "Грешка при разшифроването", "Session ID": "Идентификатор на сесията", - "Claimed Ed25519 fingerprint key": "Заявен ключов отпечатък Ed25519", - "End-to-end encryption information": "Информация за шифроването от край до край", - "Event information": "Информация за събитието", "Passphrases must match": "Паролите трябва да съвпадат", "Passphrase must not be empty": "Паролата не трябва да е празна", "Export room keys": "Експортиране на ключове за стаята", @@ -696,7 +637,6 @@ "This will be your account name on the homeserver, or you can pick a different server.": "Това ще бъде името на профила Ви на Home сървъра, или можете да изберете друг сървър.", "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.": "Засечени са данни от по-стара версия на %(brand)s. Това ще доведе до неправилна работа на криптографията от край до край в по-старата версия. Шифрованите от край до край съобщения, които са били обменени наскоро (при използването на по-стара версия), може да не успеят да бъдат разшифровани в тази версия. Това също може да доведе до неуспех в обмяната на съобщения в тази версия. Ако имате проблеми, излезте и влезте отново в профила си. За да запазите историята на съобщенията, експортирайте и импортирайте отново Вашите ключове.", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Няма връзка с Home сървъра. Моля, проверете Вашата връзка. Уверете се, че SSL сертификатът на Home сървъра е надежден и че някое разширение на браузъра не блокира заявките.", - "none": "няма", "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.": "Този процес Ви позволява да експортирате във файл ключовете за съобщения в шифровани стаи. Така ще можете да импортирате файла в друг Matrix клиент, така че той също да може да разшифрова такива съобщения.", "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.": "Експортираният файл ще позволи на всеки, който може да го прочете, да разшифрова всяко шифровано съобщение, което можете да видите. Трябва да го държите на сигурно място. За да направите това, трябва да въведете парола по-долу, която ще се използва за шифроване на експортираните данни. Ще бъде възможно да се импортират данните само с използване на същата парола.", "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.": "Този процес позволява да импортирате ключове за шифроване, които преди сте експортирали от друг Matrix клиент. Тогава ще можете да разшифровате всяко съобщение, което другият клиент може да разшифрова.", @@ -721,7 +661,6 @@ "Who can join this community?": "Кой може да се присъедини към тази общност?", "Everyone": "Всеки", "Fetching third party location failed": "Неуспешно извличане на адреса на стаята от друга мрежа", - "A new version of %(brand)s is available.": "Налична е нова версия на %(brand)s.", "Send Account Data": "Изпращане на Account Data", "All notifications are currently disabled for all targets.": "В момента известията са изключени за всички цели.", "Uploading report": "Качване на доклада", @@ -740,8 +679,6 @@ "Send Custom Event": "Изпрати потребителско събитие", "Advanced notification settings": "Разширени настройки за известяване", "Failed to send logs: ": "Неуспешно изпращане на логове: ", - "delete the alias.": "изтрий псевдонима.", - "To return to your account in future you need to set a password": "За да се върнете в профила си в бъдеще, трябва да зададете парола", "Forget": "Забрави", "You cannot delete this image. (%(code)s)": "Не можете да изтриете тази снимка. (%(code)s)", "Cancel Sending": "Откажи изпращането", @@ -765,7 +702,6 @@ "No update available.": "Няма нова версия.", "Noisy": "Шумно", "Collecting app version information": "Събиране на информация за версията на приложението", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Изтриване на псевдонима %(alias)s на стаята и премахване на %(name)s от директорията?", "Enable notifications for this account": "Включване на известия за този профил", "Invite to this community": "Покани в тази общност", "Search…": "Търсене…", @@ -822,7 +758,6 @@ "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.": "Логовете за дебъгване съдържат данни за използване на приложението, включващи потребителското Ви име, идентификаторите или псевдонимите на стаите или групите, които сте посетили, и потребителските имена на други потребители. Те не съдържат съобщения.", "Unhide Preview": "Покажи отново прегледа", "Unable to join network": "Неуспешно присъединяване към мрежата", - "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, но важат въпреки това", "Sorry, your browser is not able to run %(brand)s.": "За жалост, Вашият браузър не може да пусне %(brand)s.", "Messages in group chats": "Съобщения в групови чатове", "Yesterday": "Вчера", @@ -847,11 +782,9 @@ "Thank you!": "Благодарим!", "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!": "С текущия Ви браузър, изглеждането и усещането на приложението може да бъде неточно, и някои или всички от функциите може да не функционират,работят......... Ако искате може да продължите така или иначе, но сте сами по отношение на евентуалните проблеми, които може да срещнете!", "Checking for an update...": "Проверяване за нова версия...", - "There are advanced notifications which are not shown here": "Съществуват разширени настройки за известия, които не са показани тук", "Missing roomId.": "Липсва идентификатор на стая.", "Every page you use in the app": "Всяка използвана страница от приложението", "e.g. ": "например: ", - "Your User Agent": "Вашият браузър", "Your device resolution": "Разделителната способност на устройството Ви", "Always show encryption icons": "Винаги показвай икони за шифроване", "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Не може да се зареди събитието, на което е отговорено. Или не съществува или нямате достъп да го видите.", @@ -866,9 +799,6 @@ "e.g. %(exampleValue)s": "напр. %(exampleValue)s", "Send analytics data": "Изпращане на статистически данни", "Muted Users": "Заглушени потребители", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Моля, помогнете за подобряването на %(brand)s като изпращате анонимни данни за ползване. Това ще използва бисквитка (моля, вижте нашата политика за бисквитки).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Моля, помогнете за подобряването на %(brand)s като изпращате анонимни данни за ползване. Това ще използва бисквитка.", - "Yes, I want to help!": "Да, искам да помогна!", "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.": "Това ще направи акаунта Ви неизползваем завинаги. Няма да можете да влезете пак, а регистрирането повторно на същия потребителски идентификатор няма да е възможно. Акаунтът Ви да напусне всички стаи, в които участва. Ще бъдат премахнати и данните за акаунта Ви от сървъра за самоличност. Действието е необратимо.", "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 е подобно на имейл системата. Нашето забравяне означава, че: изпратените от Вас съобщения няма да бъдат споделяни с нови или нерегистрирани потребители, но регистрираните потребители имащи достъп до тях ще продължат да имат достъп до своето копие.", @@ -912,9 +842,6 @@ "Please contact your service administrator to continue using the service.": "Моля, свържете се с администратора на услугата за да продължите да я използвате.", "This homeserver has hit its Monthly Active User limit.": "Този сървър е достигнал лимита си за активни потребители на месец.", "This homeserver has exceeded one of its resource limits.": "Този сървър е надвишил някой от лимитите си.", - "Please contact your service administrator to get this limit increased.": "Моля, свържете се с администратора на услугата за да се увеличи този лимит.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Този сървър е достигнал своя лимит за потребители на месец, така че някои потребители не биха успели да влязат.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Този сървър е достигнал някой от лимите си, така че някои потребители не биха успели да влязат.", "Upgrade Room Version": "Обнови версията на стаята", "Create a new room with the same name, description and avatar": "Създадем нова стая със същото име, описание и снимка", "Update any local room aliases to point to the new room": "Обновим всички локални адреси на стаята да сочат към новата", @@ -926,8 +853,6 @@ "Sorry, your homeserver is too old to participate in this room.": "Съжаляваме, вашият сървър е прекалено стар за да участва в тази стая.", "Please contact your homeserver administrator.": "Моля, свържете се се със сървърния администратор.", "Legal": "Юридически", - "Registration Required": "Нужна е регистрация", - "You need to register to do this. Would you like to register now?": "За да направите това е нужно да се регистрирате. Искате ли да се регистрирате сега?", "Unable to connect to Homeserver. Retrying...": "Неуспешно свързване със сървъра. Опитване отново...", "This room has been replaced and is no longer active.": "Тази стая е била заменена и вече не е активна.", "The conversation continues here.": "Разговора продължава тук.", @@ -937,11 +862,6 @@ "The room upgrade could not be completed": "Обновяването на тази стая не можа да бъде завършено", "Upgrade this room to version %(version)s": "Обновете тази стая до версия %(version)s", "Forces the current outbound group session in an encrypted room to be discarded": "Принудително прекратява текущата изходяща групова сесия в шифрована стая", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s добави %(addedAddresses)s като адрес за тази стая.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s добави %(addedAddresses)s като адреси за тази стая.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s премахна %(removedAddresses)s като адрес за тази стая.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s премахна %(removedAddresses)s като адреси за тази стая.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s добави %(addedAddresses)s и премахна %(removedAddresses)s като адреси за тази стая.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s настрой основния адрес на тази стая на %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s премахна основния адрес на тази стая.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Преди да изпратите логове, трябва да отворите доклад за проблем в Github.", @@ -1001,21 +921,16 @@ "Failed to load group members": "Неуспешно зареждане на членовете на групата", "That doesn't look like a valid email address": "Това не изглежда като валиден имейл адрес", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "За да избегнете загубата на чат история, трябва да експортирате ключовете на стаята преди да излезете от профила си. Ще трябва да се върнете към по-новата версия на %(brand)s за да направите това", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Преди време сте използвали по-нова версия на %(brand)s на %(host)s. За да използвате тази версия отново с шифроване от край до край, ще е необходимо да излезете от профила си и да влезете отново. ", "Incompatible Database": "Несъвместима база данни", "Continue With Encryption Disabled": "Продължи с изключено шифроване", "Checking...": "Проверяване...", "Unable to load backup status": "Неуспешно зареждане на състоянието на резервното копие", "Unable to restore backup": "Неуспешно възстановяване на резервно копие", "No backup found!": "Не е открито резервно копие!", - "Backup Restored": "Резервното копие е възстановено", "Failed to decrypt %(failedCount)s sessions!": "Неуспешно разшифроване на %(failedCount)s сесии!", - "Restored %(sessionCount)s session keys": "Възстановени бяха %(sessionCount)s сесийни ключа", - "Enter Recovery Passphrase": "Въведете парола за възстановяване", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Получете достъп до защитената история на съобщенията и настройте защитен чат, чрез въвеждане на паролата за възстановяване.", "Next": "Напред", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Ако сте забравили паролата за възстановяване, можете да използвате ключа за възстановяване или да настройте други варианти за възстановяване", - "Enter Recovery Key": "Въведете ключ за възстановяване", "This looks like a valid recovery key!": "Това изглежда като валиден ключ за възстановяване!", "Not a valid recovery key": "Не е валиден ключ за възстановяване", "Access your secure message history and set up secure messaging by entering your recovery key.": "Получете достъп до защитената история на съобщенията и настройте защитен чат, чрез въвеждане на ключа за възстановяване.", @@ -1024,23 +939,14 @@ "General failure": "Обща грешка", "Failed to perform homeserver discovery": "Неуспешно откриване на конфигурацията за сървъра", "Sign in with single sign-on": "Влезте посредством single-sign-on", - "Great! This passphrase looks strong enough.": "Чудесно! Паролата изглежда сигурна.", - "Enter a passphrase...": "Въведете парола...", "That matches!": "Това съвпада!", "That doesn't match.": "Това не съвпада.", "Go back to set it again.": "Върнете се за да настройте нова.", - "Repeat your passphrase...": "Повторете паролата...", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Като предпазна мярка, можете да го използвате за възстановяване на шифрованата история на съобщенията, в случай че сте забравили паролата за възстановяване.", - "As a safety net, you can use it to restore your encrypted message history.": "Като предпазна мярка, можете да го използвате за възстановяване на шифрованата история на съобщенията.", - "Your Recovery Key": "Вашия ключ за възстановяване", - "Copy to clipboard": "Копирай в клипборд", "Download": "Свали", "Print it and store it somewhere safe": "Принтирайте го и го съхранявайте на безопасно място", "Save it on a USB key or backup drive": "Запазете го на USB или резервен диск", "Copy it to your personal cloud storage": "Копирайте го в персонално облачно пространство", "Set up Secure Message Recovery": "Настрой Възстановяване на Защитени Съобщения", - "Keep it safe": "Пазете го в безопасност", - "Create Key Backup": "Създай резервно копие на ключа", "Unable to create key backup": "Неуспешно създаване на резервно копие на ключа", "Retry": "Опитай пак", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Без настроено Възстановяване на Защитени Съобщения, ще загубите защитената история на съобщенията когато излезете от профила си.", @@ -1055,7 +961,6 @@ "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.": "Ако не сте настройвали новия метод за възстановяване, вероятно някой се опитва да проникне в акаунта Ви. Веднага променете паролата на акаунта си и настройте нов метод за възстановяване от Настройки.", "Set up Secure Messages": "Настрой Защитени Съобщения", "Go to Settings": "Отиди в Настройки", - "Waiting for %(userId)s to confirm...": "Изчакване на %(userId)s да потвърди...", "Unrecognised address": "Неразпознат адрес", "User %(user_id)s may or may not exist": "Потребител %(user_id)s може да съществува или не", "Prompt before sending invites to potentially invalid matrix IDs": "Питай преди изпращане на покани към потенциално невалидни Matrix идентификатори", @@ -1127,7 +1032,6 @@ "Timeline": "Списък със съобщения", "Autocomplete delay (ms)": "Забавяне преди подсказки (милисекунди)", "Roles & Permissions": "Роли и привилегии", - "To link to this room, please add an alias.": "За да генерирате връзки към тази стая, въведете адрес за нея.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Промени в настройките за четене на историята касаят само за нови съобщения. Видимостта на съществуващата история не се променя.", "Security & Privacy": "Сигурност и поверителност", "Encryption": "Шифроване", @@ -1144,18 +1048,12 @@ "Room Name": "Име на стаята", "Room Topic": "Тема на стаята", "Join": "Присъедини се", - "Use Legacy Verification (for older clients)": "Използвай стар метод за потвърждение (за стари клиенти)", - "Verify by comparing a short text string.": "Потвърждение чрез сравняване на кратко текстово съобщение.", - "Begin Verifying": "Започни потвърждението", - "Waiting for partner to accept...": "Изчакване партньора да приеме...", - "Use two-way text verification": "Използвай двустранно текстово потвърждение", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Потвърди потребителя и го маркирай като доверен. Доверяването на потребители Ви дава допълнително спокойствие при използване на съобщения шифровани от край-до-край.", "Waiting for partner to confirm...": "Изчакване партньора да потвърди...", "Incoming Verification Request": "Входяща заявка за потвърждение", "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.": "За да се избегнат дублиращи се проблеми, моля първо прегледайте съществуващите проблеми (и гласувайте с +1) или създайте нов проблем, ако не сте намерили съществуващ.", "Report bugs & give feedback": "Съобщете за бъг и дайте обратна връзка", "Go back": "Върни се", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Резервното копие не можа да бъде разшифровано с този ключ: потвърдете, че сте въвели правилния ключ за възстановяване.", "Update status": "Обнови статуса", "Set status": "Настрой статус", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Може да използвате настройките за собствен сървър за да влезете в друг Matrix сървър, чрез указване на адреса му. Това Ви позволява да използвате приложението със съществуващ Matrix акаунт принадлежащ към друг сървър.", @@ -1261,9 +1159,6 @@ "Headphones": "Слушалки", "Folder": "Папка", "Pin": "Кабърче", - "Recovery Key Mismatch": "Ключа за възстановяване не съвпада", - "Incorrect Recovery Passphrase": "Неправилна парола за възстановяване", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Резервното копие не можа да бъде разшифровано с тази парола: потвърдете, че сте въвели правилната парола.", "This homeserver would like to make sure you are not a robot.": "Сървърът иска да потвърди, че не сте робот.", "Change": "Промени", "Couldn't load page": "Страницата не можа да бъде заредена", @@ -1283,22 +1178,14 @@ "Securely back up your keys to avoid losing them. Learn more.": "Правете защитено резервно копие на ключовете, за да не ги загубите. Научи повече.", "Not now": "Не сега", "Don't ask me again": "Не ме питай пак", - "Nothing appearing? Not all clients support interactive verification yet. .": "Нищо не се появява? Не всички клиенти поддържат интерактивно потвърждение. .", "I don't want my encrypted messages": "Не искам шифрованите съобщения", "Manually export keys": "Експортирай ключове ръчно", "You'll lose access to your encrypted messages": "Ще загубите достъп до шифрованите си съобщения", "Are you sure you want to sign out?": "Сигурни ли сте, че искате да излезете от профила?", "Warning: you should only set up key backup from a trusted computer.": "Внимание: настройването на резервно копие на ключовете трябва да се прави само от доверен компютър.", "Hide": "Скрий", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Ще съхраним шифровано копие на ключовете на сървърът ни. Предпазете резервното копие с парола.", "For maximum security, this should be different from your account password.": "За максимална сигурност, по-добре паролата да е различна от тази за акаунта Ви.", - "Set up with a Recovery Key": "Настрой с ключ за възстановяване", - "Please enter your passphrase a second time to confirm.": "Въведете паролата отново за потвърждение.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Ключът за възстановяване дава допълнителна сигурност - може да го използвате за да възстановите достъпа до шифрованите съобщения, в случай че забравите паролата.", "Your keys are being backed up (the first backup could take a few minutes).": "Прави се резервно копие на ключовете Ви (първото копие може да отнеме няколко минути).", - "Secure your backup with a passphrase": "Защитете резервното копие с парола", - "Confirm your passphrase": "Потвърдете паролата", - "Recovery key": "Ключ за възстановяване", "Success!": "Успешно!", "Allow Peer-to-Peer for 1:1 calls": "Позволи използването на директна връзка (P2P) за 1:1 повиквания", "Credits": "Благодарности", @@ -1308,14 +1195,9 @@ "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s изключи показването на значки в тази стая за следните групи: %(groups)s.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s включи показването на значки в тази стая за %(newGroups)s и изключи показването на значки за %(oldGroups)s.", "Show read receipts sent by other users": "Показвай индикация за прочитане от други потребители", - "Order rooms in the room list by most important first instead of most recent": "Подреждай списъка със стаи според важност, а не според новост", "Scissors": "Ножици", "Error updating main address": "Грешка при обновяване на основния адрес", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Случи се грешка при обновяването на основния адрес за стаята. Може да не е позволено от сървъра, или да се е случила друга временна грешка.", - "Error creating alias": "Грешка при създаване на псевдоним", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Случи се грешка при създаването на този псевдоним. Може да не е позволено от сървъра, или да се е случила друга временна грешка.", - "Error removing alias": "Грешка при премахването на псевдоним", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Случи се грешка при премахването на този псевдоним. Може да не е позволено от сървъра, или да се е случила друга временна грешка.", "Error updating flair": "Грешка при обновяването на значка", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Случи се грешка при обновяването на значките за тази стая. Може да не е позволено от сървъра, или да се е случила друга временна грешка.", "Room Settings - %(roomName)s": "Настройки на стая - %(roomName)s", @@ -1398,7 +1280,6 @@ "The homeserver may be unavailable or overloaded.": "Сървърът може да не е наличен или претоварен.", "You have %(count)s unread notifications in a prior version of this room.|other": "Имате %(count)s непрочетени известия в предишна версия на тази стая.", "You have %(count)s unread notifications in a prior version of this room.|one": "Имате %(count)s непрочетено известие в предишна версия на тази стая.", - "A conference call could not be started because the integrations server is not available": "Не може да бъде започнат конферентен разговор, защото сървърът за интеграции не е достъпен", "The server does not support the room version specified.": "Сървърът не поддържа указаната версия на стая.", "Name or Matrix ID": "Име или Matrix идентификатор", "Changes your avatar in this current room only": "Променя снимката Ви само в тази стая", @@ -1435,7 +1316,6 @@ "%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s не може да бъде прегледана предварително. Желаете ли да се влезете?", "This room doesn't exist. Are you sure you're at the right place?": "Стаята не съществува. Сигурни ли сте, че сте на правилното място?", "Try again later, or ask a room admin to check if you have access.": "Опитайте отново по-късно или помолете администратора да провери дали имате достъп.", - "Show recently visited rooms above the room list": "Покажи наскоро-посетените стаи над списъка със стаите", "Low bandwidth mode": "Режим на ниска пропускливост", "Uploaded sound": "Качен звук", "Sounds": "Звуци", @@ -1636,13 +1516,8 @@ "Read Marker lifetime (ms)": "Живот на маркера за прочитане (мсек)", "Read Marker off-screen lifetime (ms)": "Живот на маркера за прочитане извън екрана (мсек)", "Changes the avatar of the current room": "Променя снимката на текущата стая", - "Room alias": "Псевдоним на стаята", "e.g. my-room": "например my-room", - "Please provide a room alias": "Въведете псевдоним на стаята", - "This alias is available to use": "Този псевдоним е свободен за ползване", - "This alias is already in use": "Този псевдоним вече се използва", "Please enter a name for the room": "Въведете име на стаята", - "Set a room alias to easily share your room with other people.": "Въведете псевдоним на стаята за лесно споделяне с други хора.", "This room is private, and can only be joined by invitation.": "Това е частна стая и присъединяването става само с покана.", "Create a public room": "Създай публична стая", "Create a private room": "Създай частна стая", @@ -1724,7 +1599,6 @@ "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s започна гласово обаждане. (не се поддържа от този браузър)", "%(senderName)s placed a video call.": "%(senderName)s започна видео обаждане.", "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s започна видео обаждане. (не се поддържа от този браузър)", - "Enable local event indexing and E2EE search (requires restart)": "Включи локални индексиране на събития и E2EE търсене (изисква рестартиране)", "Match system theme": "Напасване със системната тема", "My Ban List": "Моя списък с блокирания", "This is your list of users/servers you have blocked - don't leave the room!": "Това е списък с хора/сървъри, които сте блокирали - не напускайте стаята!", @@ -1733,7 +1607,6 @@ "Cannot connect to integration manager": "Неуспешна връзка с мениджъра на интеграции", "The integration manager is offline or it cannot reach your homeserver.": "Мениджъра на интеграции е офлайн или не може да се свърже със сървъра ви.", "Clear notifications": "Изчисти уведомленията", - "Send cross-signing keys to homeserver": "Изпрати ключове за кръстосано-подписване към сървъра", "Error upgrading room": "Грешка при обновяване на стаята", "Double check that your server supports the room version chosen and try again.": "Проверете дали сървъра поддържа тази версия на стаята и опитайте пак.", "%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s премахна правилото блокиращо достъпа на потребители отговарящи на %(glob)s", @@ -1777,7 +1650,6 @@ "Error adding ignored user/server": "Грешка при добавяне на игнориран потребител/сървър", "Something went wrong. Please try again or view your console for hints.": "Нещо се обърка. Опитайте пак или вижте конзолата за информация какво не е наред.", "Error subscribing to list": "Грешка при абониране за списък", - "Please verify the room ID or alias and try again.": "Потвърдете идентификатора или адреса на стаята и опитайте пак.", "Error removing ignored user/server": "Грешка при премахване на игнориран потребител/сървър", "Error unsubscribing from list": "Грешка при отписването от списък", "Please try again or view your console for hints.": "Опитайте пак или вижте конзолата за информация какво не е наред.", @@ -1801,7 +1673,6 @@ "Subscribed lists": "Абонирани списъци", "Subscribing to a ban list will cause you to join it!": "Абонирането към списък ще направи така, че да се присъедините към него!", "If this isn't what you want, please use a different tool to ignore users.": "Ако това не е каквото искате, използвайте друг инструмент за игнориране на потребители.", - "Room ID or alias of ban list": "Идентификатор или име на стая списък за блокиране", "Subscribe": "Абонирай ме", "Cross-signing": "Кръстосано-подписване", "This message cannot be decrypted": "Съобщението не може да бъде дешифровано", @@ -1849,13 +1720,6 @@ "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Това обикновено влия само на това как стаята се обработва на сървъра. Ако имате проблеми с %(brand)s, съобщете за проблем.", "You'll upgrade this room from to .": "Ще обновите стаята от до .", "Upgrade": "Обнови", - "Enter secret storage passphrase": "Въведете парола за секретно складиране", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Неуспешен достъп до секретно складиране. Уверете се, че сте въвели правилната парола.", - "Warning: You should only access secret storage from a trusted computer.": "Внимание: Трябва да достъпвате секретно складиране само от доверен компютър.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Ако сте забравили паролата си, може да използвате ключ за възстановяване или да настройте опции за възстановяване.", - "Enter secret storage recovery key": "Въведете ключ за възстановяване на секретно складиране", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Неуспешен достъп до секретно складиране. Подсигурете се, че сте въвели правилния ключ за възстановяване.", - "If you've forgotten your recovery key you can .": "Ако сте забравили ключа си за възстановяване, може да .", "Warning: You should only set up key backup from a trusted computer.": "Внимание: Трябва да настройвате резервно копие на ключове само от доверен компютър.", "If you've forgotten your recovery key you can ": "Ако сте забравили ключа за възстановяване, може да ", "Notification settings": "Настройки на уведомленията", @@ -1867,14 +1731,9 @@ "User Status": "Потребителски статус", "Country Dropdown": "Падащо меню за избор на държава", "Verification Request": "Заявка за потвърждение", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Set up with a recovery key": "Настрой с ключ за възстановяване", - "As a safety net, you can use it to restore your access to encrypted messages if you forget your passphrase.": "Като предпазна мярка, ако забравите паролата, може да го използвате за да възстановите достъпа до шифрованите съобщения.", - "As a safety net, you can use it to restore your access to encrypted messages.": "Като предпазна мярка, може да го използвате за да възстановите достъпа до шифрованите съобщения.", - "Keep your recovery key somewhere very secure, like a password manager (or a safe).": "Съхранявайте ключа за възстановяване на сигурно място, като в password manager (или сейф).", "Your recovery key has been copied to your clipboard, paste it to:": "Ключа за възстановяване беше копиран в клиборд, поставете го в:", "Your recovery key is in your Downloads folder.": "Ключа за възстановяване е във вашата папка Изтегляния.", - "Storing secrets...": "Складиране на тайни...", "Unable to set up secret storage": "Неуспешна настройка на секретно складиране", "Show info about bridges in room settings": "Показвай информация за връзки с други мрежи в настройките на стаята", "This bridge is managed by .": "Тази връзка с друга мрежа се управлява от .", @@ -1885,13 +1744,9 @@ "Go": "Давай", "Failed to find the following users": "Неуспешно откриване на следните потребители", "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Следните потребители не съществуват или са невалидни и не могат да бъдат поканени: %(csvNames)s", - "The version of %(brand)s": "Версията на %(brand)s", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Дали използвате %(brand)s на устройство, на което основния механизъм за достъп е докосване", "Whether you're using %(brand)s as an installed Progressive Web App": "Дали използвате %(brand)s като инсталирано прогресивно уеб приложение (PWA)", "Your user agent": "Информация за браузъра ви", - "The information being sent to us to help make %(brand)s better includes:": "Информацията, която се изпраща за да ни помогне да подобрим %(brand)s включва:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "В тази стая има непознати сесии: ако продължите без да ги потвърдите, ще е възможно някой да подслуша обаждането ви.", - "Review Sessions": "Прегледай сесиите", "If you cancel now, you won't complete verifying the other user.": "Ако се откажете сега, няма да завършите верификацията на другия потребител.", "Use Single Sign On to continue": "Използвайте Single Sign On за да продължите", "Confirm adding this email address by using Single Sign On to prove your identity.": "Потвърдете добавянето на този имейл адрес като потвърдите идентичността си чрез Single Sign On.", @@ -1902,13 +1757,11 @@ "Confirm adding phone number": "Потвърдете добавянето на телефонен номер", "Click the button below to confirm adding this phone number.": "Кликнете бутона по-долу за да потвърдите добавянето на телефонния номер.", "If you cancel now, you won't complete verifying your other session.": "Ако се откажете сега, няма да завършите потвърждаването на другата ви сесия.", - "If you cancel now, you won't complete your secret storage operation.": "Ако се откажете сега, няма да завърши операцията по секретно складиране.", "Cancel entering passphrase?": "Откажете въвеждането на парола?", "Setting up keys": "Настройка на ключове", "Verify this session": "Потвърди тази сесия", "Encryption upgrade available": "Има обновление на шифроването", "Set up encryption": "Настрой шифроване", - "Unverified login. Was this you?": "Непотвърден вход. Вие ли бяхте?", "Sign In or Create Account": "Влезте или Създайте профил", "Use your account or create a new one to continue.": "Използвайте профила си или създайте нов за да продължите.", "Create Account": "Създай профил", @@ -1948,10 +1801,7 @@ "%(num)s hours from now": "след %(num)s часа", "about a day from now": "след около ден", "%(num)s days from now": "след %(num)s дни", - "Show a presence dot next to DMs in the room list": "Показвай точка за присъствие до директните съобщения в списъка със стаи", "Support adding custom themes": "Включи поддръжка за добавяне на собствени теми", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Включи кръстосано-подписване за потвърждаване на потребител, вместо на отделни сесии (в процес на разработка)", - "Show padlocks on invite only rooms": "Показвай катинари на стаите изискващи покана", "Show typing notifications": "Показвай уведомления за писане", "Never send encrypted messages to unverified sessions from this session": "Никога не изпращай шифровани съобщения към непотвърдени сесии от тази сесия", "Never send encrypted messages to unverified sessions in this room from this session": "Никога не изпращай шифровани съобщения към непотвърдени сесии в тази стая от тази сесия", @@ -1959,7 +1809,6 @@ "Show rooms with unread notifications first": "Показвай първи стаите с непрочетени уведомления", "Show shortcuts to recently viewed rooms above the room list": "Показвай преки пътища до скоро-прегледаните стаи над списъка със стаи", "Enable message search in encrypted rooms": "Включи търсенето на съобщения в шифровани стаи", - "Keep secret storage passphrase in memory for this session": "Съхрани паролата за секретното складиране в паметта за тази сесия", "How fast should messages be downloaded.": "Колко бързо да се изтеглят съобщенията.", "Manually verify all remote sessions": "Ръчно потвърждаване на всички отдалечени сесии", "If you cancel now, you won't complete your operation.": "Ако се откажете сега, няма да завършите операцията.", @@ -1971,8 +1820,6 @@ "Could not find user in room": "Неуспешно намиране на потребител в стаята", "Please supply a widget URL or embed code": "Укажете URL адрес на приспособление или код за вграждане", "Send a bug report with logs": "Изпратете доклад за грешка с логове", - "Enable cross-signing to verify per-user instead of per-session": "Включи кръстосано-подписване за верифициране на ниво потребител, вместо на ниво сесия", - "Keep recovery passphrase in memory for this session": "Запази паролата за възстановяване в паметта за тази сесия", "Verify this session by completing one of the following:": "Верифицирайте тази сесия чрез едно от следните действия:", "Scan this unique code": "Сканирайте този уникален код", "or": "или", @@ -1988,13 +1835,10 @@ "They don't match": "Не съвпадат", "To be secure, do this in person or use a trusted way to communicate.": "За да е по-сигурно, направете го на живо или използвайте доверен начин за комуникация.", "Lock": "Заключи", - "Unverified sessions currently have access to your account & messages": "Непотвърдени сесии в момента имат достъп до профила и съобщенията ви", "Later": "По-късно", "Review": "Прегледай", "Verify yourself & others to keep your chats safe": "Потвърдете себе си и останалите за да запазите чатовете си сигурни", "Other users may not trust it": "Други потребители може да не се доверят", - "Update your secure storage": "Обновете защитеното складиране", - "Verify the identity of the new login accessing your account & messages": "Потвърдете самоличността на новия вход достъпващ профила и съобщенията ви", "From %(deviceName)s (%(deviceId)s)": "От %(deviceName)s (%(deviceId)s)", "This bridge was provisioned by .": "Мостът е настроен от .", "Workspace: %(networkName)s": "Работна област: %(networkName)s", @@ -2014,9 +1858,6 @@ "Session backup key:": "Ключ за резервно копие на сесията:", "Homeserver feature support:": "Поддържани функции от сървъра:", "exists": "съществува", - "Secret Storage key format:": "Формат на ключа за секретно складиране:", - "outdated": "остарял", - "up to date": "обновен", "Your homeserver does not support session management.": "Сървърът ви не поддържа управление на сесии.", "Unable to load session list": "Неуспешно зареждане на списъка със сесии", "Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "Потвърдете изтриването на тези сесии използвайки Single Sign On, за да докажете самоличността си.", @@ -2036,7 +1877,6 @@ "Securely cache encrypted messages locally for them to appear in search results.": "Кеширай шифровани съобщения локално по сигурен начин за да се появяват в резултати от търсения.", "Enable": "Включи", "%(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 Desktop с добавени компоненти за търсене.", - "%(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 за да може шифровани съобщения да се появяват в резултати от търсения.", "This session is backing up your keys. ": "Тази сесия прави резервни копия на ключовете ви. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Тази сесия не прави резервни копия на ключовете, но имате съществуващо резервно копие, което да възстановите и към което да добавяте от тук нататък.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Свържете тази сесия с резервно копие на ключове преди да се отпишете от нея, за да не загубите ключове, които може би съществуват единствено в тази сесия.", @@ -2052,7 +1892,6 @@ "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 in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Резервно копие на ключа е съхранено в секретно складиране, но тази функция не е включена в сегашната сесия. Включете кръстосано-подписване в Labs за да модифицирате състоянието на резервното копие на ключа.", "Your keys are not being backed up from this session.": "На ключовете ви не се прави резервно копие от тази сесия.", "Enable desktop notifications for this session": "Включи уведомления на работния плот за тази сесия", "Enable audible notifications for this session": "Включи звукови уведомления за тази сесия", @@ -2079,10 +1918,6 @@ "Someone is using an unknown session": "Някой използва непозната сесия", "This room is end-to-end encrypted": "Тази стая е шифрована от-край-до-край", "Everyone in this room is verified": "Всички в тази стая са верифицирани", - "Some sessions for this user are not trusted": "Някои сесии на този потребител не са доверени", - "All sessions for this user are trusted": "Всички сесии на този потребител са доверени", - "Some sessions in this encrypted room are not trusted": "Някои сесии в тази шифрована стая не са доверени", - "All sessions in this encrypted room are trusted": "Всички сесии в тази шифрована стая са доверени", "Mod": "Модератор", "Your key share request has been sent - please check your other sessions for key share requests.": "Заявката ви за споделяне на ключ е изпратена - проверете останалите си сесии за заявки за споделяне на ключове.", "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.": "Заявките за споделяне на ключове се изпращат до другите ви сесии автоматично. Ако сте отказали заявката от другите ви сесии, кликнете тук за да изпратите заявка за тази сесия отново.", @@ -2092,8 +1927,6 @@ "Encrypted by a deleted session": "Шифровано от изтрита сесия", "Invite only": "Само с покани", "Scroll to most recent messages": "Отиди до най-скорошните съобщения", - "No sessions with registered encryption keys": "Няма сесии с регистрирани ключове за шифроване", - "Sessions": "Сесии", "Send a reply…": "Изпрати отговор…", "Send a message…": "Изпрати съобщение…", "Reject & Ignore user": "Откажи и игнорирай потребителя", @@ -2104,7 +1937,6 @@ "Send as message": "Изпрати като съобщение", "Mark all as read": "Маркирай всичко като прочетено", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Възникна грешка при обновяване на алтернативните адреси на стаята. Или не е позволено от сървъра или се е случила временна грешка.", - "You don't have permission to delete the alias.": "Нямате привилегия да изтриете този алтернативен адрес.", "Local address": "Локален адрес", "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.": "Публикуваните адреси могат да бъдат използвани от всеки човек, на кой да е сървър, за присъединяване към стаята. За да публикувате адрес, първо трябва да е настроен като локален адрес.", @@ -2193,11 +2025,8 @@ "Confirm account deactivation": "Потвърдете деактивирането на профила", "There was a problem communicating with the server. Please try again.": "Имаше проблем при комуникацията със сървъра. Опитайте пак.", "Verify session": "Потвърди сесията", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "За да потвърдите, че сесията е доверена, проверете, че ключа, който виждате в потребителските настройки на устройството съвпада с ключа по-долу:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "За да потвърдите, че сесията е доверена, свържете се със собственика й по друг начин (например на живо или по телефона) и ги попитайте дали ключът, който виждат в потребителските си настройки съвпада с ключа по-долу:", "Session name": "Име на сесията", "Session key": "Ключ за сесията", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Ако съвпада, натиснете бутона за потвърждение по-долу. Ако пък не, тогава някой прихваща сесията и вероятно искате да използвате бутона за блокиране вместо това.", "Verification Requests": "Заявки за верификация", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Верифицирането на този потребител ще маркира сесията им като доверена при вас, както и вашата като доверена при тях.", "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.": "Верифицирайте това устройство за да го маркирате като доверено. Доверявайки се на това устройство дава на вас и на другите потребители допълнително спокойствие при използването на от-край-до-край-шифровани съобщения.", @@ -2209,16 +2038,10 @@ "Recently Direct Messaged": "Скорошни директни чатове", "Start a conversation with someone using their name, username (like ) or email address.": "Започнете чат с някой посредством име, потребителско име (като ) или имейл адрес.", "Invite someone using their name, username (like ), email address or share this room.": "Поканете някой посредством име, потребителско име (като ), имейл адрес или като споделите тази стая.", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "Добавихте нова сесия '%(displayName)s', която изисква ключове за шифроване.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Непотвърдената ви сесия '%(displayName)s' изисква ключове за шифроване.", - "Loading session info...": "Зареждане на информация за сесията...", "Opens chat with the given user": "Отваря чат с дадения потребител", "Sends a message to the given user": "Изпраща съобщение до дадения потребител", "Font scaling": "Мащабиране на шрифта", - "Use the improved room list (in development - refresh to apply changes)": "Използвай подобрения списък със стаи (в процес на разработка - презаредете за да приложите промените)", - "Use IRC layout": "Използвай IRC изглед", "Font size": "Размер на шрифта", - "Custom font size": "Собствен размер на шрифта", "IRC display name width": "Ширина на IRC името", "Waiting for your other session to verify…": "Изчакване другата сесията да потвърди…", "Size must be a number": "Размера трябва да е число", @@ -2256,16 +2079,9 @@ "If you didn’t sign in to this session, your account may be compromised.": "Ако не сте се вписвали в тази сесия, профила ви може би е бил компрометиран.", "This wasn't me": "Не бях аз", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Това ще ви позволи да се върнете в профила си след излизането от него, както и да влизате от други сесии.", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "В момента блокирате непотвърдени сесии; за да изпратите съобщения до тях ще трябва да ги потвърдите.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Препоръчваме да минете през процеса на потвърждение за всяка една сесия и да проверите дали принадлежи на собственика си, но ако желаете, може да изпратите съобщението и без потвърждение.", - "Room contains unknown sessions": "Стаята съдържа непознати сесии", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "\"%(RoomName)s\" съдържа сесии, които не сте виждали досега.", - "Unknown sessions": "Непознати сесии", "Verify other session": "Потвърди другата сесия", "Enter recovery passphrase": "Въведете парола за възстановяване", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Неуспешен достъп до секретното складиране. Потвърдете, че сте въвели правилната парола за възстановяване.", - "Warning: You should only do this on a trusted computer.": "Внимание: трябва да правите това само от доверен компютър.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Въведете паролата си за възстановяване за да достъпите защитената история на съобщенията и самоличността си за кръстосано-подписване за потвърждаване на другите сесии.", "Room name or address": "Име на стая или адрес", "Joins room with given address": "Присъединява се към стая с дадения адрес", "Unrecognised room address:": "Неразпознат адрес на стая:", @@ -2297,9 +2113,7 @@ "This address is already in use": "Адресът вече се използва", "Set a room address to easily share your room with other people.": "Настройте адрес на стаята за да може лесно да я споделяте с други хора.", "You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Използвали сте и по-нова версия на %(brand)s от сегашната за тази сесия. За да използвате сегашната версия отново с шифроване от-край-до-край, ще е необходимо да излезете и да влезете отново.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Ако сте забравили паролата за възстановяване, може да използвате ключа за възстановяване или да настройте нови опции за възстановяване.", "Enter recovery key": "Въведете ключ за възстановяване", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Достъпете защитената история на съобщенията и самоличността за кръстосано-подписване за верифициране на други сесии, чрез въвеждане на ключа си за възстановяване.", "Restoring keys from backup": "Възстановяване на ключове от резервно копие", "Fetching keys from server...": "Изтегляне на ключове от сървъра...", "%(completed)s of %(total)s keys restored": "%(completed)s от %(total)s ключа са възстановени", @@ -2320,23 +2134,18 @@ "Self-verification request": "Заявка за само-потвърждение", "Delete the room address %(alias)s and remove %(name)s from the directory?": "Изтрий %(alias)s адреса на стаята и премахни %(name)s от директорията?", "delete the address.": "изтриване на адреса.", - "Message not sent due to unknown sessions being present": "Съобщението не е изпратено поради наличието на непознати сесии", - "Show sessions, send anyway or cancel.": "Покажи сесиите, изпрати така или иначе или откажи.", "Verify this login": "Потвърди тази сесия", "Session verified": "Сесията беше потвърдена", "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Промяната на паролата ще нулира всички ключове за шифроване от-край-до-край по всички ваши сесии, правейки шифрованата история на чата нечетима. Настройте резервно копие на ключовете или експортирайте ключовете на стаите от друга сесия преди да промените паролата си.", "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Администраторът на сървъра е изключил шифроване от край-до-край по подразбиране за лични стаи и за директни съобщения.", "Emoji picker": "Избор на емоджи", "People": "Хора", - "Show %(n)s more": "Покажи още %(n)s", "Switch to light mode": "Смени на светъл режим", "Switch to dark mode": "Смени на тъмен режим", "Switch theme": "Смени темата", "Security & privacy": "Сигурност и поверителност", "All settings": "Всички настройки", - "Archived rooms": "Архивирани стаи", "Feedback": "Обратна връзка", - "Account settings": "Настройки на профила", "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.": "Излязохте от всички сесии и вече няма да получавате push уведомления. За да включите уведомленията пак, влезте наново от всяко устройство.", "Syncing...": "Синхронизиране...", "Signing In...": "Влизане...", @@ -2344,7 +2153,6 @@ "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Потвърдете идентичността на този вход чрез верифицирането му от някоя от другите ви сесии, давайки достъп до шифрованите съобщения.", "This requires the latest %(brand)s on your other devices:": "Това изисква най-новата версия на %(brand)s на другите ви устройства:", "or another cross-signing capable Matrix client": "или друг Matrix клиент поддържащ кръстосано-подписване", - "Use Recovery Passphrase or Key": "Използвай парола за възстановяване или ключ", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Сесията ви е потвърдена. Тя има достъп до шифрованите ви съобщения. Други потребители я виждат като доверена.", "Your new session is now verified. Other users will see it as trusted.": "Новата ви сесия е потвърдена. Другите потребители ще я виждат като доверена.", "Without completing security on this session, it won’t have access to encrypted messages.": "Без да повишите сигурността на тази сесия, няма да имате достъп до шифрованите съобщения.", @@ -2358,10 +2166,8 @@ "Restore": "Възстанови", "You'll need to authenticate with the server to confirm the upgrade.": "Ще трябва да се автентикирате пред сървъра за да потвърдите обновяването.", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Обновете тази сесия, за да може да потвърждава други сесии, давайки им достъп до шифрованите съобщения и маркирайки ги като доверени за другите потребители.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Настройте парола за възстановяване за да защитите шифрованата информация и за да я възстановите, ако излезете от профила. По-добре е да използвате парола различна от тази за профила ви:", "Enter a recovery passphrase": "Въведете парола за възстановяване", "Great! This recovery passphrase looks strong enough.": "Чудесно! Тази парола за възстановяване изглежда достатъчно силна.", - "Back up encrypted message keys": "Правене на резервно копие на ключовете за шифроване", "Use a different passphrase?": "Използвай друга парола?", "Enter your recovery passphrase a second time to confirm it.": "Въведете паролата за възстановяване още веднъж за да потвърдите.", "Confirm your recovery passphrase": "Потвърдете паролата за възстановяване", @@ -2370,11 +2176,8 @@ "Your recovery key": "Ключът ви за възстановяване", "Copy": "Копирай", "Unable to query secret storage status": "Неуспешно допитване за състоянието на секретното складиране", - "You can now verify your other devices, and other users to keep your chats safe.": "Вече може да потвърждавате другите си устройства и другите потребители, за да пазите чатовете си сигурни.", "Upgrade your encryption": "Обновете шифроването", - "Confirm recovery passphrase": "Потвърдете паролата за възстановяване", "Make a copy of your recovery key": "Направете копие на ключа за възстановяване", - "You're done!": "Готови сте!", "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Ще съхраним шифровано копие на ключовете ви на сървъра. Защитете резервното копие с парола за възстановяване.", "Please enter your recovery passphrase a second time to confirm.": "Въведете паролата за възстановяване отново за да потвърдите.", "Repeat your recovery passphrase...": "Повторете паролата си за възстановяване...", @@ -2438,8 +2241,6 @@ "Enter": "Enter", "Space": "Space", "End": "End", - "sent an image.": "изпрати снимка.", - "You: %(message)s": "Вие: %(message)s", "No recently visited rooms": "Няма наскоро-посетени стаи", "Sort by": "Подреди по", "Activity": "Активност", @@ -2450,7 +2251,6 @@ "Light": "Светла", "Dark": "Тъмна", "Use the improved room list (will refresh to apply changes)": "Използвай подобрения списък със стаи (ще презареди за да се приложи промяната)", - "Enable IRC layout option in the appearance tab": "Включи опцията за IRC изглед в раздел Изглед", "Use custom size": "Използвай собствен размер", "Use a system font": "Използвай системния шрифт", "System font name": "Име на системния шрифт", diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json index 3df4c50d8a..6b954da9f2 100644 --- a/src/i18n/strings/ca.json +++ b/src/i18n/strings/ca.json @@ -6,9 +6,7 @@ "Microphone": "Micròfon", "Camera": "Càmera", "Advanced": "Avançat", - "Algorithm": "Algoritme", "Always show message timestamps": "Mostra sempre la marca de temps del missatge", - "Alias (optional)": "Àlies (opcional)", "Cancel": "Cancel·la", "Close": "Tanca", "Create new room": "Crea una sala nova", @@ -41,11 +39,6 @@ "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ó", "Call Failed": "No s'ha pogut realitzar la trucada", - "Review Devices": "Revisió de dispositius", - "Call Anyway": "Truca de totes maneres", - "Answer Anyway": "Contesta de totes maneres", - "Call": "Truca", - "Answer": "Contesta", "The remote side failed to pick up": "El costat remot no ha contestat", "Unable to capture screen": "No s'ha pogut capturar la pantalla", "Existing Call": "Trucada existent", @@ -87,7 +80,6 @@ "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?", "Add rooms to the community": "Afegeix sales a la comunitat", - "Room name or alias": "Nom de la sala o àlies", "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", @@ -102,7 +94,6 @@ "Restricted": "Restringit", "Moderator": "Moderador", "Admin": "Administrador", - "Start a chat": "Comença un xat", "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.", @@ -119,7 +110,6 @@ "Usage": "Ús", "/ddg is not a command": "/ddg no és un comandament", "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.", - "Unrecognised room alias:": "Àlies de sala no reconeguts:", "Ignored user": "Usuari ignorat", "You are now ignoring %(userId)s": "Esteu ignorant l'usuari %(userId)s", "Unignored user": "Usuari no ignorat", @@ -170,7 +160,6 @@ "%(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.", - "Send anyway": "Envia de totes maneres", "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", @@ -178,7 +167,6 @@ "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", - "Use compact timeline layout": "Utilitza el disseny compacte de la línia de temps", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostra les marques de temps en format de 12 hores (per exemple, 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", @@ -211,11 +199,8 @@ "Confirm password": "Confirma la contrasenya", "Change Password": "Canvia la contrasenya", "Authentication": "Autenticació", - "Device ID": "ID del dispositiu", "Last seen": "Vist per última vegada", "Failed to set display name": "No s'ha pogut establir el nom visible", - "Disable Notifications": "Desactiva les notificacions", - "Enable Notifications": "Activa les notificacions", "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í", @@ -228,8 +213,6 @@ "%(senderName)s uploaded a file": "%(senderName)s ha pujat un fitxer", "Options": "Opcions", "Please select the destination room for this message": "Si us plau, seleccioneu la sala destinatària per a aquest missatge", - "Blacklisted": "Llista negre", - "device id: ": "ID del dispositiu: ", "Disinvite": "Descarta la invitació", "Kick": "Fes fora", "Disinvite this user?": "Descartar la invitació per a aquest usuari?", @@ -242,7 +225,6 @@ "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 toggle moderator status": "No s'ha pogut canviar l'estat del moderador", "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?", @@ -252,11 +234,7 @@ "Jump to read receipt": "Vés a l'últim missatge llegit", "Mention": "Menciona", "Invite": "Convida", - "User Options": "Opcions d'usuari", - "Direct chats": "Xats directes", "Unmute": "No silenciïs", - "Revoke Moderator": "Revoca el moderador", - "Make Moderator": "Fes-lo moderador", "Admin Tools": "Eines d'administració", "and %(count)s others...|other": "i %(count)s altres...", "and %(count)s others...|one": "i un altre...", @@ -269,9 +247,7 @@ "Video call": "Trucada de vídeo", "Upload file": "Puja un fitxer", "Send an encrypted reply…": "Envia una resposta xifrada…", - "Send a reply (unencrypted)…": "Envia una resposta (sense xifrar)…", "Send an encrypted message…": "Envia un missatge xifrat…", - "Send a message (unencrypted)…": "Envia un missatge (sense xifrar)…", "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", @@ -334,10 +310,7 @@ "Jump to first unread message.": "Salta al primer missatge no llegit.", "Anyone who knows the room's link, including guests": "Qualsevol que conegui l'enllaç de la sala, inclosos els usuaris d'altres xarxes", "not specified": "sense especificar", - "Remote addresses for this room:": "Adreces remotes per a aquesta sala:", - "Local addresses for this room:": "Adreces locals d'aquesta sala:", "This room has no local addresses": "Aquesta sala no té adreces locals", - "New address (e.g. #foo:%(localDomain)s)": "Nova adreça (per exemple #foo:%(localDomain)s)", "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)", @@ -359,10 +332,6 @@ "Copied!": "Copiat!", "Failed to copy": "No s'ha pogut copiar", "Add an Integration": "Afegeix una integració", - "Removed or unknown message type": "El tipus de missatge ha sigut eliminat o és desconegut", - "Message removed by %(userId)s": "El missatge ha sigut eliminat per l'usuari %(userId)s", - "Message removed": "S'ha eliminat el missatge", - "To continue, please enter your password.": "Per poder continuar, si us plau, introduïu una contrasenya.", "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", @@ -398,17 +367,12 @@ "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "La supressió d'un giny l'elimina per a tots els usuaris d'aquesta sala. Esteu segur que voleu eliminar aquest giny?", "Delete widget": "Suprimeix el giny", "Minimize apps": "Minimitza les aplicacions", - "Blacklist": "Llista negre", - "Unverify": "Sense verificar", - "Verify...": "Verificar...", "No results": "Sense resultats", "Communities": "Comunitats", "Home": "Inici", - "Could not connect to the integration server": "No s'ha pogut connectar amb el servidor d'integració", "Manage Integrations": "Gestiona les integracions", "%(nameList)s %(transitionList)s": "%(transitionList)s%(nameList)s", "%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s han entrat", - "Unblacklist": "Treure de la llista negre", "%(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", @@ -489,12 +453,7 @@ "Unknown error": "S'ha produït un error desconegut", "Incorrect password": "Contrasenya incorrecta", "Deactivate Account": "Desactivar el compte", - "I verify that the keys match": "Verifico que les claus coincideixen", "An error has occurred.": "S'ha produït un error.", - "Start verification": "Inicia la verificació", - "Share without verifying": "Comparteix sense verificar", - "Ignore request": "Ignora la sol·licitud", - "Encryption key request": "Sol·licitud de claus", "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", @@ -567,7 +526,6 @@ "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", - "Scroll to bottom of page": "Desplaça't fins a la part inferior de la pàgina", "%(count)s of your messages have not been sent.|other": "Alguns dels vostres missatges no s'han enviat.", "%(count)s of your messages have not been sent.|one": "El vostre missatge no s'ha enviat.", "Warning": "Avís", @@ -579,7 +537,6 @@ "Search failed": "No s'ha pogut cercar", "Server may be unavailable, overloaded, or search timed out :(": "Pot ser que el servidor no estigui disponible, que estigui sobrecarregat o que s'ha esgotat el temps de cerca :(", "No more results": "No hi ha més resultats", - "Unknown room %(roomId)s": "La sala %(roomId)s és desconeguda", "Room": "Sala", "Failed to reject invite": "No s'ha pogut rebutjar la invitació", "Fill screen": "Emplena la pantalla", @@ -596,8 +553,6 @@ "There's no one else here! Would you like to invite others or stop warning about the empty room?": "No hi ha ningú més aquí! T'agradaria convidar algú o no avisar més que la sala està buida?", "Uploading %(filename)s and %(count)s others|other": "Pujant %(filename)s i %(count)s més", "Uploading %(filename)s and %(count)s others|zero": "Pujant %(filename)s", - "Light theme": "Tema clar", - "Dark theme": "Tema fosc", "Sign out": "Tanca la sessió", "Import E2E room keys": "Importar claus E2E de sala", "Cryptography": "Criptografia", @@ -606,14 +561,7 @@ "olm version:": "Versió d'olm:", "Incorrect username and/or password.": "Usuari i/o contrasenya incorrectes.", "The phone number entered looks invalid": "El número de telèfon introduït sembla erroni", - "none": "cap", - "Curve25519 identity key": "Clau de la identitat Curve25519", - "Claimed Ed25519 fingerprint key": "Empremta digital Ed25519 reclamada", "Session ID": "ID de la sessió", - "End-to-end encryption information": "Informació de xifratge d'extrem a extrem", - "Event information": "Informació d'esdeveniment", - "User ID": "ID de l'usuari", - "Decryption error": "Error de desxifratge", "Export room keys": "Exporta les claus de la sala", "Upload an avatar:": "Pujar un avatar:", "Confirm passphrase": "Introduïu una contrasenya", @@ -625,7 +573,6 @@ "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 identity server's URL": "L'URL del vostre servidor d'identitat", "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", @@ -636,7 +583,6 @@ "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", - "A new version of %(brand)s is available.": "Hi ha una versió nova del %(brand)s disponible.", "Send Account Data": "Envia les dades del compte", "Advanced notification settings": "Paràmetres avançats de notificacions", "Uploading report": "S'està enviant l'informe", @@ -657,8 +603,6 @@ "Send Custom Event": "Envia els esdeveniments personalitzats", "All notifications are currently disabled for all targets.": "Actualment totes les notificacions estan inhabilitades per a tots els objectius.", "Failed to send logs: ": "No s'han pogut enviar els logs: ", - "delete the alias.": "esborra l'alies.", - "To return to your account in future you need to set a password": "Per poder tornar al vostre compte en un futur, heu de set a password", "Forget": "Oblida", "You cannot delete this image. (%(code)s)": "No podeu eliminar aquesta imatge. (%(code)s)", "Cancel Sending": "Cancel·la l'enviament", @@ -684,7 +628,6 @@ "No update available.": "No hi ha cap actualització disponible.", "Noisy": "Sorollós", "Collecting app version information": "S'està recollint la informació de la versió de l'aplicació", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Voleu esborrar de la sala l'alies %(alias)s i retirar %(name)s del directori?", "Enable notifications for this account": "Habilita les notificacions per aquest compte", "Invite to this community": "Convida a aquesta comunitat", "Search…": "Cerca…", @@ -740,7 +683,6 @@ "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.": "Els logs de depuració contenen dades d'ús de l'aplicació que inclouen el teu nom d'usuari, les IDs o pseudònims de les sales o grups que has visitat i els noms d'usuari d'altres usuaris. No contenen missatges.", "Unhide Preview": "Mostra la previsualització", "Unable to join network": "No s'ha pogut unir-se a la xarxa", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "És possible que els hàgiu configurat en un client diferent de %(brand)s. No podeu modificar-los amb %(brand)s, però encara s'apliquen", "Sorry, your browser is not able to run %(brand)s.": "Disculpeu, el seu navegador not pot executar %(brand)s.", "Quote": "Cita", "Messages in group chats": "Missatges en xats de grup", @@ -765,11 +707,9 @@ "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...", - "There are advanced notifications which are not shown here": "Hi ha notificacions avançades que no es mostren aquí", "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 User Agent": "El vostre agent d'usuari", "Your device resolution": "La resolució del vostre 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.", @@ -779,15 +719,11 @@ "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.", - "Registration Required": "Es requereix registre", - "You need to register to do this. Would you like to register now?": "Us heu de registrar per fer això. Us voleu registrar ara?", "Failed to invite users to the room:": "No s'ha pogut convidar els usuaris a aquesta sala:", - "Waiting for %(userId)s to confirm...": "S'està esperant a que %(userId)s confirmi...", "Missing roomId.": "Manca l'ID de la 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", - "Joins room with given alias": "Us introdueix a la sala amb l'àlies donat", "Kicks user with given id": "Expulsa l'usuari amb l'id donat", "Bans user with given id": "Bandeja l'usuari amb l'id donat", "Ignores a user, hiding their messages from you": "Ignora un usuari, amagant-te els seus missatges", @@ -809,11 +745,6 @@ "%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s ha permès que els convidats puguin entrar a la sala.", "%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s ha prohibit l'entrada a la sala als visitants.", "%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s ha canviat l'accés dels visitants a %(rule)s", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s ha afegit %(addedAddresses)s com a adreces d'aquesta sala.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s ha afegit %(addedAddresses)s com a adreça d'aquesta sala.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s ha retirat %(removedAddresses)s com a adreces d'aquesta sala.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s ha retirat %(removedAddresses)s com a adreça d'aquesta sala.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s ha afegit %(addedAddresses)s i retirat %(removedAddresses)s com a adreces d'aquesta sala.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s ha canviat l'adreça principal d'aquesta sala a %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s ha retirat l'adreça principal d'aquesta sala.", "%(displayName)s is typing …": "%(displayName)s està escrivint…", diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index 5c88927408..cff7687599 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -68,7 +68,6 @@ "Microphone": "Mikrofon", "Camera": "Kamera", "Advanced": "Rozšířené", - "Algorithm": "Algoritmus", "Always show message timestamps": "Vždy zobrazovat časové značky zpráv", "Authentication": "Ověření", "A new password must be entered.": "Musíte zadat nové heslo.", @@ -95,7 +94,6 @@ "Command error": "Chyba příkazu", "Commands": "Příkazy", "Confirm password": "Potvrďte heslo", - "Could not connect to the integration server": "Nepodařilo se spojit se začleňovacím serverem", "Create Room": "Vytvořit místnost", "Cryptography": "Šifrování", "Current password": "Současné heslo", @@ -105,13 +103,8 @@ "Deactivate Account": "Deaktivovat účet", "Decline": "Odmítnout", "Decrypt %(text)s": "Dešifrovat %(text)s", - "Decryption error": "Chyba dešifrování", "Delete widget": "Vymazat widget", "Default": "Výchozí", - "Device ID": "ID zařízení", - "device id: ": "id zařízení: ", - "Direct chats": "Přímé zprávy", - "Disable Notifications": "Vypnout oznámení", "Disinvite": "Odvolat pozvání", "Download %(text)s": "Stáhnout %(text)s", "Drop File Here": "Přetáhněte soubor sem", @@ -120,13 +113,10 @@ "Email address": "E-mailová adresa", "Emoji": "Emoji", "Enable automatic language detection for syntax highlighting": "Zapnout automatické rozpoznávání jazyků pro zvýrazňování syntaxe", - "Enable Notifications": "Zapnout oznámení", "%(senderName)s ended the call.": "Uživatel %(senderName)s ukončil hovor.", - "End-to-end encryption information": "Informace o end-to-end šifrování", "Enter passphrase": "Zadejte heslo", "Error decrypting attachment": "Chyba při dešifrování přílohy", "Error: Problem communicating with the given homeserver.": "Chyba: problém v komunikaci s daným domovským serverem.", - "Event information": "Informace o události", "Existing Call": "Probíhající hovor", "Export": "Exportovat", "Export E2E room keys": "Exportovat end-to-end klíče místnosti", @@ -140,7 +130,6 @@ "Failed to reject invite": "Nepodařilo se odmítnout pozvánku", "Failed to send request.": "Odeslání žádosti se nezdařilo.", "Failed to set display name": "Nepodařilo se nastavit zobrazované jméno", - "Failed to toggle moderator status": "Změna statusu moderátora se nezdařila", "Failed to unban": "Přijetí zpět se nezdařilo", "Failed to upload profile picture!": "Nahrání profilového obrázku se nezdařilo", "Failure to create room": "Vytvoření místnosti se nezdařilo", @@ -177,10 +166,8 @@ "Kicks user with given id": "Vykopne uživatele s daným id", "Last seen": "Naposledy aktivní", "Leave room": "Opustit místnost", - "Local addresses for this room:": "Místní adresy této místnosti:", "Moderator": "Moderátor", "Name": "Název", - "New address (e.g. #foo:%(localDomain)s)": "Nová adresa (např. #neco:%(localDomain)s)", "New passwords don't match": "Nová hesla se neshodují", "New passwords must match each other.": "Nová hesla se musí shodovat.", "not specified": "neurčeno", @@ -188,7 +175,6 @@ "": "", "AM": "dop.", "PM": "odp.", - "NOT verified": "Neověřeno", "No display name": "Žádné zobrazované jméno", "No more results": "Žádné další výsledky", "No results": "Žádné výsledky", @@ -204,7 +190,6 @@ "Power level must be positive integer.": "Úroveň oprávnění musí být kladné celé číslo.", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (oprávnění %(powerLevelNumber)s)", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Tuto změnu nepůjde vrátit zpět, protože tomuto uživateli nastavujete stejnou úroveň oprávnění, jakou máte vy.", - "Alias (optional)": "Alias (nepovinný)", "Results from DuckDuckGo": "Výsledky z DuckDuckGo", "Return to login screen": "Vrátit k přihlašovací obrazovce", "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s není oprávněn posílat vám oznámení – zkontrolujte prosím nastavení svého prohlížeče", @@ -215,8 +200,6 @@ "%(roomName)s does not exist.": "%(roomName)s neexistuje.", "%(roomName)s is not accessible at this time.": "Místnost %(roomName)s není v tuto chvíli dostupná.", "Save": "Uložit", - "Scroll to bottom of page": "Přejít na konec stránky", - "Send anyway": "Přesto poslat", "Send Reset Email": "Poslat resetovací e-mail", "%(senderDisplayName)s sent an image.": "Uživatel %(senderDisplayName)s poslal obrázek.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "Uživatel %(senderName)s pozval uživatele %(targetDisplayName)s ke vstupu do místnosti.", @@ -232,7 +215,6 @@ "Sign out": "Odhlásit", "%(count)s of your messages have not been sent.|other": "Některé z vašich zpráv nebyly odeslány.", "Someone": "Někdo", - "Start a chat": "Zahájit konverzaci", "Start authentication": "Začít ověření", "Submit": "Odeslat", "Success": "Úspěch", @@ -263,7 +245,6 @@ "Click to unmute video": "Klepněte pro povolení videa", "Click to unmute audio": "Klepněte pro povolení zvuku", "Displays action": "Zobrazí akci", - "Ed25519 fingerprint": "Ed25519 otisk", "Fill screen": "Vyplnit obrazovku", "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s z %(fromPowerLevel)s na %(toPowerLevel)s", "This doesn't appear to be a valid email address": "Tato e-mailová adresa se zdá být neplatná", @@ -280,13 +261,9 @@ "%(senderName)s unbanned %(targetName)s.": "Uživatel %(senderName)s přijal zpět uživatele %(targetName)s.", "Unable to capture screen": "Nepodařilo se zachytit obrazovku", "Unable to enable Notifications": "Nepodařilo se povolit oznámení", - "unencrypted": "nešifrované", "unknown caller": "neznámý volající", - "unknown device": "neznámé zařízení", - "Unknown room %(roomId)s": "Neznámá místnost %(roomId)s", "Unmute": "Povolit", "Unnamed Room": "Nepojmenovaná místnost", - "Unrecognised room alias:": "Nerozpoznaný alias místnosti:", "Uploading %(filename)s and %(count)s others|zero": "Nahrávání souboru %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Nahrávání souboru %(filename)s a %(count)s dalších", "Uploading %(filename)s and %(count)s others|other": "Nahrávání souboru %(filename)s a %(count)s dalších", @@ -294,13 +271,9 @@ "Upload file": "Nahrát soubor", "Upload new:": "Nahrát nový:", "Usage": "Použití", - "Use compact timeline layout": "Použít kompaktní rozvržení časové osy", - "User ID": "ID uživatele", "Username invalid: %(errMessage)s": "Neplatné uživatelské jméno: %(errMessage)s", "Users": "Uživatelé", "Verification Pending": "Čeká na ověření", - "Verification": "Ověření", - "verified": "ověreno", "Verified key": "Ověřený klíč", "(no answer)": "(žádná odpověď)", "(unknown failure: %(reason)s)": "(neznámá chyba: %(reason)s)", @@ -311,7 +284,6 @@ "Which rooms would you like to add to this community?": "Které místnosti chcete přidat do této skupiny?", "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Varování: osoba, kterou přidáte do této skupiny, bude veřejně viditelná každému, kdo zná ID skupiny", "Add rooms to the community": "Přidat místnosti do skupiny", - "Room name or alias": "Název nebo alias místnosti", "Add to community": "Přidat do skupiny", "Failed to invite the following users to %(groupId)s:": "Následující uživatele se nepodařilo přidat do %(groupId)s:", "Failed to invite users to community": "Nepodařilo se pozvat uživatele do skupiny", @@ -364,8 +336,6 @@ "%(senderDisplayName)s changed the room avatar to ": "Uživatel %(senderDisplayName)s změnil avatar místnosti na ", "Copied!": "Zkopírováno!", "Failed to copy": "Nepodařilo se zkopírovat", - "Removed or unknown message type": "Zpráva odstraněna nebo neznámého typu", - "Message removed by %(userId)s": "Zprávu odstranil uživatel %(userId)s", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Smazáním widgetu ho odstraníte všem uživatelům v této místnosti. Opravdu chcete tento widget smazat?", "The maximum permitted number of widgets have already been added to this room.": "V této místnosti již bylo dosaženo limitu pro maximální počet widgetů.", "Drop file here to upload": "Přetažením sem nahrajete", @@ -375,12 +345,9 @@ "Community ID": "ID skupiny", "example": "příklad", "Create": "Vytvořit", - "User Options": "Volby uživatele", "Please select the destination room for this message": "Vyberte prosím pro tuto zprávu cílovou místnost", "Jump to read receipt": "Skočit na poslední potvrzení o přečtení", "Invite": "Pozvat", - "Revoke Moderator": "Odebrat moderátorství", - "Make Moderator": "Udělit moderátorství", "and %(count)s others...|one": "a někdo další...", "Hangup": "Zavěsit", "Jump to message": "Přeskočit na zprávu", @@ -398,9 +365,7 @@ "(~%(count)s results)|one": "(~%(count)s výsledek)", "Upload avatar": "Nahrát avatar", "Mention": "Zmínit", - "Blacklisted": "Na černé listině", "Invited": "Pozvaní", - "Joins room with given alias": "Vstoupí do místnosti s daným aliasem", "Leave Community": "Opustit skupinu", "Leave %(groupName)s?": "Opustit %(groupName)s?", "Leave": "Opustit", @@ -416,7 +381,6 @@ "Privileged Users": "Privilegovaní uživatelé", "No users have specific privileges in this room": "Žádní uživatelé v této místnosti nemají zvláštní privilegia", "Publish this room to the public in %(domain)s's room directory?": "Zapsat tuto místnost do veřejného adresáře místností na %(domain)s?", - "Remote addresses for this room:": "Vzdálené adresy této místnosti:", "Invalid community ID": "Neplatné ID skupiny", "'%(groupId)s' is not a valid community ID": "'%(groupId)s' není platné ID skupiny", "New community ID (e.g. +foo:%(localDomain)s)": "Nové ID skupiny (např. +neco:%(localDomain)s)", @@ -436,10 +400,8 @@ "URL Previews": "Náhledy webových adres", "%(senderDisplayName)s changed the avatar for %(roomName)s": "Uživatel %(senderDisplayName)s změnil avatar místnosti %(roomName)s", "Add an Integration": "Přidat začlenění", - "Message removed": "Zpráva odstraněna", "An email has been sent to %(emailAddress)s": "Na adresu %(emailAddress)s jsme poslali e-mail", "File to import": "Soubor k importu", - "none": "žádný", "Passphrases must match": "Hesla se musí shodovat", "Passphrase must not be empty": "Heslo nesmí být prázdné", "Export room keys": "Exportovat klíče místnosti", @@ -477,7 +439,6 @@ "URL previews are disabled by default for participants in this room.": "Ve výchozím nastavení jsou náhledy URL adres zakázané pro členy této místnosti.", "Invalid file%(extra)s": "Neplatný soubor%(extra)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?": "Budete přesměrováni na stránku třetí strany k ověření svého účtu pro používání s %(integrationsUrl)s. Chcete pokračovat?", - "To continue, please enter your password.": "Aby jste mohli pokračovat, zadejte prosím své heslo.", "Please check your email to continue registration.": "Pro pokračování v registraci prosím zkontrolujte své e-maily.", "Token incorrect": "Neplatný token", "A text message has been sent to %(msisdn)s": "Na číslo %(msisdn)s byla odeslána textová zpráva", @@ -501,10 +462,6 @@ "Display your community flair in rooms configured to show it.": "Zobrazovat příslušnost ke skupině v místnostech, které to mají nastaveno.", "You're not currently a member of any communities.": "V současnosti nejste členem žádné skupiny.", "Unknown Address": "Neznámá adresa", - "Unblacklist": "Odblokovat", - "Blacklist": "Zablokovat", - "Unverify": "Zrušit ověření", - "Verify...": "Ověřit...", "Manage Integrations": "Správa integrací", "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s%(count)s krát vstoupili", @@ -571,11 +528,6 @@ "Something went wrong whilst creating your community": "Něco se pokazilo během vytváření vaší skupiny", "Unknown error": "Neznámá chyba", "Incorrect password": "Nesprávné heslo", - "I verify that the keys match": "Ověřil jsem, klíče se shodují", - "Start verification": "Zahájit ověřování", - "Share without verifying": "Sdílet bez ověření", - "Ignore request": "Ignorovat žádost", - "Encryption key request": "Žádost o šifrovací klíč", "Unable to restore session": "Nelze obnovit relaci", "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.": "Pokud jste se v minulosti již přihlásili s novější verzi programu %(brand)s, vaše relace nemusí být kompatibilní s touto verzí. Zavřete prosím toto okno a přihlaste se znovu pomocí nové verze.", "Please check your email and click on the link it contains. Once this is done, click continue.": "Zkontrolujte svou e-mailovou schránku a klepněte na odkaz ve zprávě, kterou jsme vám poslali. V případě, že jste to už udělali, klepněte na tlačítko Pokračovat.", @@ -632,8 +584,6 @@ "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Kromě vás není v této místnosti nikdo jiný! Přejete si Pozvat další anebo Přestat upozorňovat na prázdnou místnost?", "Room": "Místnost", "Failed to load timeline position": "Bod v časové ose se nepodařilo načíst", - "Light theme": "Světlý vzhled", - "Dark theme": "Tmavý vzhled", "Analytics": "Analytické údaje", "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s sbírá anonymní analytické údaje, které nám umožňují aplikaci dále zlepšovat.", "Labs": "Experimentální funkce", @@ -655,16 +605,9 @@ "Stops ignoring a user, showing their messages going forward": "Přestane ignorovat uživatele a začne zobrazovat jeho zprávy", "Notify the whole room": "Oznámení pro celou místnost", "Room Notification": "Oznámení místnosti", - "Curve25519 identity key": "Klíč totožnosti Curve25519", - "Claimed Ed25519 fingerprint key": "Údajný klíč s otiskem Ed25519", "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.": "Tento proces vás provede importem šifrovacích klíčů, které jste si stáhli z jiného Matrix klienta. Po úspěšném naimportování budete v tomto klientovi moci dešifrovat všechny zprávy, které jste mohli dešifrovat v původním klientovi.", "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Stažený soubor je chráněn heslem. Soubor můžete naimportovat pouze pokud zadáte odpovídající heslo.", "Call Failed": "Hovor selhal", - "Review Devices": "Ověřit zařízení", - "Call Anyway": "Přesto zavolat", - "Answer Anyway": "Přesto přijmout", - "Call": "Hovor", - "Answer": "Přijmout", "Send": "Odeslat", "collapse": "sbalit", "expand": "rozbalit", @@ -672,7 +615,6 @@ "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.": "Byly nalezeny datové zprávy ze starší verze %(brand)s. Důsledkem bude, že end-to-end šifrování nebude ve starší verzi %(brand)s správně fungovat. Šifrované zprávy ze starší verze nemusí být čitelné v nové verzi. Může dojít i k selhání zasílaní zpráv s touto verzí %(brand)su. Pokud zaznamenáte některý z uvedených problému, odhlaste se a znovu přihlaste. Pro zachování historie zpráv exportujte a znovu importujte své klíče.", "Warning": "Varování", "Fetching third party location failed": "Nepodařilo se zjistit umístění třetí strany", - "A new version of %(brand)s is available.": "Je dostupná nová verze %(brand)su.", "I understand the risks and wish to continue": "Rozumím rizikům a přeji si pokračovat", "Send Account Data": "Poslat data o účtu", "Advanced notification settings": "Rozšířená nastavení oznámení", @@ -692,8 +634,6 @@ "Waiting for response from server": "Čekám na odezvu ze serveru", "Send Custom Event": "Odeslat vlastní událost", "All notifications are currently disabled for all targets.": "Veškerá oznámení jsou aktuálně pro všechny cíle vypnuty.", - "delete the alias.": "smazat alias.", - "To return to your account in future you need to set a password": "Abyste se mohli ke svému účtu v budoucnu vrátit, musíte si nastavit heslo", "Forget": "Zapomenout", "You cannot delete this image. (%(code)s)": "Tento obrázek nemůžete smazat. (%(code)s)", "Cancel Sending": "Zrušit odesílání", @@ -718,7 +658,6 @@ "No update available.": "Není dostupná žádná aktualizace.", "Resend": "Poslat znovu", "Collecting app version information": "Sbírání informací o verzi aplikace", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Smazat alias místnosti %(alias)s a odstranit %(name)s z adresáře?", "Keywords": "Klíčová slova", "Enable notifications for this account": "Zapnout oznámení na tomto účtu", "Invite to this community": "Pozvat do této skupiny", @@ -770,7 +709,6 @@ "Show message in desktop notification": "Zobrazovat zprávu v oznámení na ploše", "Unhide Preview": "Zobrazit náhled", "Unable to join network": "Nelze se připojit k síti", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Snad jste je nastavili v jiném klientu než %(brand)s. V %(brand)su je nemůžete upravit, ale přesto platí", "Sorry, your browser is not able to run %(brand)s.": "Omlouváme se, váš prohlížeč není schopný %(brand)s spustit.", "Uploaded on %(date)s by %(user)s": "Nahráno %(date)s uživatelem %(user)s", "Messages in group chats": "Zprávy ve skupinách", @@ -797,20 +735,17 @@ "Quote": "Citovat", "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!": "Vzhled a chování aplikace může být ve vašem aktuální prohlížeči nesprávné a některé nebo všechny funkce mohou být chybné. Chcete-li i přes to pokračovat, nebudeme vám bránit, ale se všemi problémy, na které narazíte, si musíte poradit sami!", "Checking for an update...": "Kontrola aktualizací...", - "There are advanced notifications which are not shown here": "Jsou k dispozici pokročilá oznámení, která zde nejsou zobrazena", "The platform you're on": "Vámi používaná platforma", - "The version of %(brand)s": "Verze %(brand)s", + "The version of %(brand)s": "Verze %(brand)su", "Your language of choice": "Váš jazyk", "Which officially provided instance you are using, if any": "Kterou oficiální instanci %(brand)s používáte (a jestli vůbec)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Zda při psaní zpráv používáte rozbalenou lištu formátování textu", "Your homeserver's URL": "URL vašeho domovského serveru", - "Your identity server's URL": "URL Vámi používaného serveru identity", "e.g. %(exampleValue)s": "např. %(exampleValue)s", "Every page you use in the app": "Každou stránku v aplikaci, kterou navštívíte", "e.g. ": "např. ", - "Your User Agent": "Řetězec User Agent Vašeho zařízení", "Your device resolution": "Rozlišení obrazovky vašeho zařízení", - "The information being sent to us to help make %(brand)s better includes:": "S cílem vylepšovat aplikaci %(brand)s shromažďujeme následující údaje:", + "The information being sent to us to help make %(brand)s better includes:": "Abychom mohli %(brand)s zlepšovat, posíláte nám následující informace:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "V případě, že se na stránce vyskytují identifikační údaje, jako například název místnosti, ID uživatele, místnosti a nebo skupiny, jsou tyto údaje před odesláním na server odstraněny.", "Call in Progress": "Probíhající hovor", "A call is currently being placed!": "Právě probíhá jiný hovor!", @@ -831,9 +766,7 @@ "Demote": "Degradovat", "Share Link to User": "Sdílet odkaz na uživatele", "Send an encrypted reply…": "Odeslat šifrovanou odpověď …", - "Send a reply (unencrypted)…": "Odeslat odpověď (nešifrovaně) …", "Send an encrypted message…": "Odeslat šifrovanou zprávu …", - "Send a message (unencrypted)…": "Odeslat zprávu (nešifrovaně) …", "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "%(displayName)s (%(userName)s) viděl %(dateTime)s", "Replying": "Odpovídá", "Share room": "Sdílet místnost", @@ -850,15 +783,9 @@ "The email field must not be blank.": "E-mail nemůže být prázdný.", "The phone number field must not be blank.": "Telefonní číslo nemůže být prázdné.", "The password field must not be blank.": "Heslo nemůže být prázdné.", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Prosím pomozte nám vylepšovat %(brand)s odesíláním anonymních údajů o používaní. Použijeme k tomu cookies (přečtěte si jak cookies používáme).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Prosím pomozte nám vylepšovat %(brand)s odesíláním anonymních údajů o používaní. Na tento účel použijeme cookie.", - "Yes, I want to help!": "Ano, chci pomoci!", "Please contact your service administrator to continue using the service.": "Pro další používání vašeho zařízení prosím kontaktujte prosím správce vaší služby.", "This homeserver has hit its Monthly Active User limit.": "Tento domovský server dosáhl svého měsíčního limitu pro aktivní uživatele.", "This homeserver has exceeded one of its resource limits.": "Tento domovský server překročil některý z limitů.", - "Please contact your service administrator to get this limit increased.": "Pro zvýšení tohoto limitu prosím kontaktujte správce své služby.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Tento domovský server dosáhl svého měsíčního limitu pro aktivní uživatele, proto se někteří uživatelé nebudou moci přihlásit.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Tento domovský server překročil některý z limitů, proto se někteří uživatelé nebudou moci přihlásit.", "Failed to remove widget": "Nepovedlo se odstranit widget", "An error ocurred whilst trying to remove the widget from the room": "Při odstraňování widgetu z místnosti nastala chyba", "Minimize apps": "Minimalizovat aplikace", @@ -934,13 +861,6 @@ "Failed to upgrade room": "Nepovedlo se upgradeovat místnost", "The room upgrade could not be completed": "Upgrade místnosti se nepovedlo dokončit", "Upgrade this room to version %(version)s": "Upgradování místnosti na verzi %(version)s", - "Use Legacy Verification (for older clients)": "Použít starší verzi ověření (funguje se staršími klienty)", - "Verify by comparing a short text string.": "Verfikujete porovnáním krátkého textu.", - "Begin Verifying": "Zahájit ověření", - "Waiting for partner to accept...": "Čekáme až partner přijme žádost...", - "Nothing appearing? Not all clients support interactive verification yet. .": "Nic se neděje? Ne všichni klienti klienti podporují interaktivní ověření. .", - "Waiting for %(userId)s to confirm...": "Čekáme až to %(userId)s potvrdí...", - "Use two-way text verification": "Použít oboustranné ověření", "Security & Privacy": "Zabezpečení", "Encryption": "Šifrování", "Once enabled, encryption cannot be disabled.": "Po zapnutí, už nepůjde šifrování vypnout.", @@ -953,7 +873,6 @@ "Room Topic": "Téma místnosti", "Room avatar": "Avatar místnosti", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Změny viditelnosti historie této místnosti ovlivní jenom nové zprávy. Viditelnost starších zpráv zůstane, jaká byla v době jejich odeslání.", - "To link to this room, please add an alias.": "K vytvoření odkazu je potřeba vyrobit místnosti alias.", "Roles & Permissions": "Role a oprávnění", "Room information": "Informace o místnosti", "Internal room ID:": "Interní ID:", @@ -1024,8 +943,6 @@ "Whether or not you're logged in (we don't record your username)": "Zda jste nebo nejste přihlášeni (vaše uživatelské jméno se nezaznamenává)", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Soubor '%(fileName)s' je větší než povoluje limit domovského serveru", "Unable to load! Check your network connectivity and try again.": "Stránku se nepovedlo načíst! Zkontrolujte prosím své připojení k internetu a zkuste to znovu.", - "Registration Required": "Je vyžadována registrace", - "You need to register to do this. Would you like to register now?": "Na toto potřebujete registraci. Chcete se zaregistrovat teď hned?", "Failed to invite users to the room:": "Nepovedlo se pozvat uživatele do místnosti:", "Upgrades a room to a new version": "Upgraduje místnost na novou verzi", "This room has no topic.": "Tato místnost nemá žádné specifické téma.", @@ -1037,11 +954,6 @@ "%(senderDisplayName)s has allowed guests to join the room.": "Uživatel %(senderDisplayName)s povolil přístup hostům.", "%(senderDisplayName)s has prevented guests from joining the room.": "Uživatel %(senderDisplayName)s zakázal přístup hostům.", "%(senderDisplayName)s changed guest access to %(rule)s": "Uživatel %(senderDisplayName)s změnil pravidlo pro přístup hostů na %(rule)s", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "Uživatel %(senderName)s přidal této místnosti nové adresy %(addedAddresses)s.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "Uživatel %(senderName)s přidal této místnosti novou adresu %(addedAddresses)s.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "Uživatel %(senderName)s odstranil této místnosti adresy %(removedAddresses)s.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "Uživatel %(senderName)s odstranil této místnosti adresu %(removedAddresses)s.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "Uživatel %(senderName)s přidal této místnosti adresy %(addedAddresses)s a odebral %(removedAddresses)s.", "%(senderName)s set the main address for this room to %(address)s.": "Uživatel %(senderName)s hlavní adresu této místnosti na %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s zrušil hlavní adresu této místnosti.", "%(displayName)s is typing …": "%(displayName)s píše …", @@ -1184,54 +1096,30 @@ "I don't want my encrypted messages": "Už své zašifrované zprávy nechci", "Checking...": "Kontroluji...", "Unable to load backup status": "Nepovedlo se načíst stav zálohy", - "Recovery Key Mismatch": "Klíč zálohy neodpovídá", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Tímto klíčem se nepovedlo zálohu rozšifrovat: zkontrolujte prosím, že jste zadali správný klíč.", - "Incorrect Recovery Passphrase": "Nesprávné obnovovací heslo", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "S tímto heslem se zálohu nepovedlo rozšifrovat: zkontrolujte prosím, že jste ho zadali správně.", "Unable to restore backup": "Nepovedlo se obnovit ze zálohy", "No backup found!": "Nenalezli jsme žádnou zálohu!", - "Backup Restored": "Záloha načtena", "Failed to decrypt %(failedCount)s sessions!": "Nepovedlo se rozšifrovat %(failedCount)s sezení!", - "Restored %(sessionCount)s session keys": "Obnovili jsme %(sessionCount)s klíčů", - "Enter Recovery Passphrase": "Zadejte heslo k záloze", "Warning: you should only set up key backup from a trusted computer.": "Varování: záloha by měla být prováděna na důvěryhodném počítači.", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Zadáním hesla k záloze získáte zpět přístup k šifrovaným zprávám a zabezpečené komunikaci.", "Next": "Další", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Pokud jste zapomněli své obnovovací heslo, použijte obnovovací klíč nebo nastavte další možnosti obnovení", - "Enter Recovery Key": "Zadejte obnovovací klíč", "This looks like a valid recovery key!": "To vypadá jako správný klíč!", "Not a valid recovery key": "To není správný klíč", "Access your secure message history and set up secure messaging by entering your recovery key.": "Zadejte obnovovací klíč pro přístupu k historii zpráv a zabezpečené komunikaci.", "Recovery Method Removed": "Záloha klíčů byla odstraněna", "Go to Settings": "Přejít do nastavení", - "Enter a passphrase...": "Zadejte silné heslo...", "For maximum security, this should be different from your account password.": "Z bezpečnostních důvodů by toto heslo mělo být jiné než přihlašovací heslo.", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Na našich serverech uložíme šifrovanou zálohu vašich klíčů. Zvolte si silné heslo (např. delší frázi) aby byla záloha v bezpečí.", - "Great! This passphrase looks strong enough.": "Super! Na první pohled to vypadá dostatečně silně.", "Keep going...": "Pokračujte...", - "Set up with a Recovery Key": "Nastavit obnovovací klíč", "That matches!": "To odpovídá!", "That doesn't match.": "To nesedí.", "Go back to set it again.": "Nastavit heslo znovu.", - "Please enter your passphrase a second time to confirm.": "Pro ověření zadejte heslo znovu.", - "Repeat your passphrase...": "Zopakute heslo...", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Tento klíč můžete použít jako záchranou síť k obnově zašifrované historie pokud byste zapomněl/a heslo k záloze.", - "As a safety net, you can use it to restore your encrypted message history.": "Tento klíč můžete použít jako záchranou síť k obnově zašifrované historie.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Obnovovací klíč je záchranná síť - lze použít k obnově šifrovaných zpráv i když zapomenete heslo.", - "Your Recovery Key": "Váš klíč pro obnovu zálohy", - "Copy to clipboard": "Zkopírovat do schránky", "Download": "Stáhnout", "Print it and store it somewhere safe": "Vytiskněte si ho a bezpečně ho uložte", "Save it on a USB key or backup drive": "Uložte ho na bezpečnou USB flash disk nebo zálohovací disk", "Copy it to your personal cloud storage": "Zkopírujte si ho na osobní cloudové úložiště", "Your keys are being backed up (the first backup could take a few minutes).": "Klíče se zálohují (první záloha může trvat pár minut).", - "Confirm your passphrase": "Potvrďte heslo", - "Recovery key": "Obnovovací klíč", - "Secure your backup with a passphrase": "Zabezpečte si zálohu silným heslem", - "Keep it safe": "Bezpečně ho uschovejte", "Starting backup...": "Začíná se zálohovat...", "Success!": "Úspěch!", - "Create Key Backup": "Vyrobit zálohu klíčů", "Unable to create key backup": "Nepovedlo se vyrobit zálohů klíčů", "Retry": "Zkusit znovu", "Set up Secure Messages": "Nastavit bezpečné obnovení zpráv", @@ -1255,7 +1143,6 @@ "Encrypted messages in group chats": "Šifrované zprávy ve skupinových konverzacích", "Open Devtools": "Otevřít nástroje pro vývojáře", "Credits": "Poděkování", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Už jste na adrese %(host)s použili novější verzi %(brand)su. Jestli chcete znovu používat tuto verzi i s end-to-end šifrováním, je potřeba se odhlásit a znovu přihlásit. ", "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.": "Na adrese %(host)s už jste použili %(brand)s se zapnutou volbou načítání členů místností až při prvním zobrazení. V této verzi je načítání členů až při prvním zobrazení vypnuté. Protože je s tímto nastavením lokální vyrovnávací paměť nekompatibilní, %(brand)s potřebuje znovu synchronizovat údaje z vašeho účtu.", "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.": "Pokud v jiné karťe otevřený jiný %(brand)s, prosím zavřete ji, protože si dvě různé verze můžou navzájem působit problémy.", "%(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!": "%(brand)s teď používá 3-5× méně paměti, protože si informace o ostatních uživatelích načítá až když je potřebuje. Prosím počkejte na dokončení synchronizace se serverem!", @@ -1307,7 +1194,6 @@ "User %(userId)s is already in the room": "Uživatel %(userId)s už je v této místnosti", "The user must be unbanned before they can be invited.": "Uživatel je vykázán, nelze ho pozvat.", "Show read receipts sent by other users": "Zobrazovat potvrzení o přijetí", - "Order rooms in the room list by most important first instead of most recent": "Seřadit místosti v seznamu podle důležitosti místo podle posledního použití", "Scissors": "Nůžky", "Accept all %(invitedRooms)s invites": "Přijmout pozvání do všech těchto místností: %(invitedRooms)s", "Change room avatar": "Změnit avatar místnosti", @@ -1328,10 +1214,6 @@ "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.": "Po zapnutí už nelze šifrování v této místnosti vypnout. Zprávy v šifrovaných místnostech mohou číst jenom členové místnosti, server se k obsahu nedostane. Šifrování místností nepodporuje většina botů a propojení. Více informací o šifrování.", "Error updating main address": "Nepovedlo se změnit hlavní adresu", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Nastala chyba při pokusu o nastavení hlavní adresy místnosti. Mohl to zakázat server, nebo to může být dočasná chyba.", - "Error creating alias": "Nepovedlo se vyrobit alias", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Nastala chyba při pokusu o nastavení aliasu místnosti. Mohl to zakázat server, nebo to může být dočasná chyba.", - "Error removing alias": "Nepovedlo se odebrat alias", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Nastala chyba při pokusu o odstranění aliasu místnosti. Je možné, že už neexistuje, nebo to může být dočasná chyba.", "Power level": "Úroveň oprávnění", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Abyste po odhlášení nepřišli o přístup k historii šifrovaných konverzací, měli byste si před odhlášením exportovat šifrovací klíče místností. Prosím vraťte se k novější verzi %(brand)su a exportujte si klíče", "Room Settings - %(roomName)s": "Nastavení místnosti - %(roomName)s", @@ -1342,7 +1224,6 @@ "Could not load user profile": "Nepovedlo se načíst profil uživatele", "Your Matrix account on %(serverName)s": "Váš účet Matrix na serveru %(serverName)s", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Zda používáte funkci \"breadcrumb\" (ikony nad seznamem místností)", - "A conference call could not be started because the integrations server is not available": "Nelze spustit konferenční hovor, protože začleňovací server není dostupný", "Replying With Files": "Odpovídání souborem", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Aktuálně nelze odpovědět souborem. Chcete soubor nahrát a poslat bez odpovídání?", "The file '%(fileName)s' failed to upload.": "Soubor '%(fileName)s' se nepodařilo nahrát.", @@ -1466,7 +1347,6 @@ "Homeserver URL does not appear to be a valid Matrix homeserver": "Na URL domovského serveru asi není funkční Matrix server", "Invalid base_url for m.identity_server": "Neplatná base_url pro m.identity_server", "Identity server URL does not appear to be a valid identity server": "Na URL serveru identit asi není funkční Matrix server", - "Show recently visited rooms above the room list": "Zobrazovat nedávno navštívené místnosti nad jejich seznamem", "Low bandwidth mode": "Mód nízké spotřeby dat", "Uploaded sound": "Zvuk nahrán", "Sounds": "Zvuky", @@ -1540,7 +1420,6 @@ "Removing…": "Odstaňování…", "Clear all data": "Smazat všechna data", "Please enter a name for the room": "Zadejte prosím název místnosti", - "Set a room alias to easily share your room with other people.": "Nastavte alias místnosti, abyste mohli místnost snadno sdílet s ostatními.", "This room is private, and can only be joined by invitation.": "Tato místnost je neveřejná a lze do ní vstoupit jen s pozvánkou.", "Create a public room": "Vytvořit veřejnou místnost", "Create a private room": "Vytvořit neveřejnou místnost", @@ -1662,11 +1541,7 @@ "%(severalUsers)smade no changes %(count)s times|one": "Uživatelé %(severalUsers)s neudělali žádnou změnu", "%(oneUser)smade no changes %(count)s times|other": "Uživatel %(oneUser)s neudělal %(count)s krát žádnou změnu", "%(oneUser)smade no changes %(count)s times|one": "Uživatel %(oneUser)s neudělal žádnou změnu", - "Room alias": "Alias místnosti", "e.g. my-room": "např. moje-mistnost", - "Please provide a room alias": "Zadejte prosím alias místnosti", - "This alias is available to use": "Tento alias je volný", - "This alias is already in use": "Tento alias už je používán", "Use bots, bridges, widgets and sticker packs": "Použít roboty, propojení, widgety a balíky samolepek", "Terms of Service": "Podmínky použití", "To continue you need to accept the terms of this service.": "Musíte souhlasit s podmínkami použití, abychom mohli pokračovat.", @@ -1743,7 +1618,6 @@ "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil pravidlo blokující servery odpovídající %(oldGlob)s na servery odpovídající %(newGlob)s z důvodu %(reason)s", "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil blokovací pravidlo odpovídající %(oldGlob)s na odpovídající %(newGlob)s z důvodu %(reason)s", "Try out new ways to ignore people (experimental)": "Vyzkošejte nové metody ignorování lidí (experimentální)", - "Enable local event indexing and E2EE search (requires restart)": "Povolit lokální indexování a vyhledávání v end-to-end šifrovaných zprávách (vyžaduje restart)", "Match system theme": "Nastavit podle vzhledu systému", "My Ban List": "Můj seznam zablokovaných", "This is your list of users/servers you have blocked - don't leave the room!": "Toto je váš seznam blokovaných uživatelů/serverů - neopouštějte tuto místnost!", @@ -1761,7 +1635,6 @@ "Error adding ignored user/server": "Chyba při přidávání ignorovaného uživatele/serveru", "Something went wrong. Please try again or view your console for hints.": "Něco se nepovedlo. Zkuste pro prosím znovu nebo se podívejte na detaily do konzole.", "Error subscribing to list": "Nepovedlo se založit odběr", - "Please verify the room ID or alias and try again.": "Zkontrolujte prosím ID místnosti a zkuste to znovu.", "Error removing ignored user/server": "Ignorovaný uživatel/server nejde odebrat", "Error unsubscribing from list": "Nepovedlo se zrušit odběr", "Please try again or view your console for hints.": "Zkuste to prosím znovu a nebo se podívejte na detailní chybu do konzole.", @@ -1783,7 +1656,6 @@ "Server or user ID to ignore": "Server nebo ID uživatele", "eg: @bot:* or example.org": "např.: @bot:* nebo example.org", "Subscribed lists": "Odebírané seznamy", - "Room ID or alias of ban list": "ID místnosti nebo alias seznamu blokování", "Subscribe": "Odebírat", "This message cannot be decrypted": "Zprávu nelze rozšifrovat", "Unencrypted": "Nešifrované", @@ -1825,13 +1697,6 @@ "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Toto běžně ovlivňuje pouze zpracovávání místnosti na serveru. Pokud máte problém s %(brand)sem, nahlaste nám ho prosím.", "You'll upgrade this room from to .": "Upgradujeme tuto místnost z na .", "Upgrade": "Upgradovat", - "Enter secret storage passphrase": "Zadejte tajné heslo k bezpečnému úložišti", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Nepovedlo se přistoupit k bezpečnému úložišti. Zkontrolujte prosím, že je zadané správné heslo.", - "Warning: You should only access secret storage from a trusted computer.": "Varování: Přistupujte k bezpečnému úložišti pouze z důvěryhodných počítačů.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Pokud si nepamatujete heslo, můžete použít svůj obnovovací klíč nebo si nastavte nové možnosti obnovení.", - "Enter secret storage recovery key": "Zadejte klíč k bezpečnému úložišti", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Nepovedlo se dostat k bezpečnému úložišti. Ověřte prosím, že je zadaný správný klíč.", - "If you've forgotten your recovery key you can .": "Pokud si nepamatujete obnovovací klíč, můžete si .", "Warning: You should only set up key backup from a trusted computer.": "Varování: Nastavujte zálohu jen z důvěryhodných počítačů.", "If you've forgotten your recovery key you can ": "Pokud si nepamatujete obnovovací klíč, můžete si ", "Notification settings": "Nastavení oznámení", @@ -1841,14 +1706,9 @@ "Remove for me": "Odstranit (jen pro mě)", "User Status": "Stav uživatele", "Verification Request": "Požadavek na ověření", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Set up with a recovery key": "Nastavit obnovovací klíč", - "As a safety net, you can use it to restore your access to encrypted messages if you forget your passphrase.": "Můžete jej použít jako záchranou síť na obnovení šifrovaných zpráv když zapomenete heslo.", - "As a safety net, you can use it to restore your access to encrypted messages.": "Můžete jej použít jako záchranou síť na obnovení šifrovaných zpráv.", - "Keep your recovery key somewhere very secure, like a password manager (or a safe).": "Uschovejte svůj klíč na velmi bezpečném místě, například ve správci hesel (nebo v trezoru).", "Your recovery key has been copied to your clipboard, paste it to:": "Váš obnovovací klíč byl zkopírován do schránky, vložte jej:", "Your recovery key is in your Downloads folder.": "Váš obnovovací klíč je ve složce Stažené.", - "Storing secrets...": "Ukládám tajná data...", "Unable to set up secret storage": "Nepovedlo se nastavit bezpečné úložiště", "The message you are trying to send is too large.": "Zpráva kterou se snažíte odeslat je příliš velká.", "not found": "nenalezeno", @@ -1862,20 +1722,15 @@ "Language Dropdown": "Menu jazyků", "Help": "Pomoc", "Country Dropdown": "Menu států", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "V místnosti jsou neověřené relace: pokud budete pokračovat bez ověření, bude možné váš hovor odposlouchávat.", "Verify this session": "Ověřit tuto relaci", "Encryption upgrade available": "Je dostupná aktualizace šifrování", "Set up encryption": "Nastavit šifrování", - "Unverified session": "Neověřená relace", "Verifies a user, session, and pubkey tuple": "Ověří uživatele, relaci a veřejné klíče", "Unknown (user, session) pair:": "Neznámý pár (uživatel, relace):", "Session already verified!": "Relace je už ověřená!", "WARNING: Session already verified, but keys do NOT MATCH!": "VAROVÁNÍ: Relace je už ověřená, ale klíče NEODPOVÍDAJÍ!", "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!": "VAROVÁNÍ: OVĚŘENÍ KLÍČŮ SELHALO! Podpisový klíč pro uživatele %(userId)s a relaci %(deviceId)s je \"%(fprint)s\", což neodpovídá klíči \"%(fingerprint)s\". Může to znamenat, že je vaše komunikace rušena!", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Zadaný podpisový klíč odpovídá klíči relace %(deviceId)s od uživatele %(userId)s. Relace byla označena za platnou.", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "Uživatel %(senderName)s přidal této místnosti adresu %(addedAddresses)s a %(count)s dalších", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "Uživatel %(senderName)s odstranil této místnosti adresu %(removedAddresses)s a %(count)s dalších", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "Uživatel %(senderName)s odstranil této místnosti %(countRemoved)s adres a přidal %(countAdded)s adres", "a few seconds ago": "před pár vteřinami", "about a minute ago": "před minutou", "%(num)s minutes ago": "před %(num)s minutami", @@ -1890,17 +1745,11 @@ "%(num)s hours from now": "za %(num)s hodin", "about a day from now": "asi za den", "%(num)s days from now": "za %(num)s dní", - "Show a presence dot next to DMs in the room list": "V seznamu místností zobrazovat informaci o přítomnosti", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Povolit cross-signing pro ověření uživatelů místo zařízení (experimentální)", "Show info about bridges in room settings": "Zobrazovat v nastavení místnosti informace o propojeních", - "Show padlocks on invite only rooms": "Zobrazovat zámek u místností vyžadujících pozvání", "Never send encrypted messages to unverified sessions from this session": "Nikdy neposílat šifrované zprávy neověřených zařízením", "Never send encrypted messages to unverified sessions in this room from this session": "Nikdy v této místnosti neposílat šifrované zprávy neověřeným relacím", "Enable message search in encrypted rooms": "Povolit vyhledávání v šifrovaných místnostech", - "Keep secret storage passphrase in memory for this session": "Pro toto přihlášení si uchovat heslo k bezpečnému úložišti", "How fast should messages be downloaded.": "Jak rychle se mají zprávy stahovat.", - "Confirm the emoji below are displayed on both devices, in the same order:": "Ověřte, že jsou následující emoji zobrazeny na obou zařízeních ve stejném pořadí:", - "Verify this device by confirming the following number appears on its screen.": "Ověřit zařízení potvrzením, že jsou následující čísla zobrazena na jeho obrazovce.", "Waiting for %(displayName)s to verify…": "Čekám až nás %(displayName)s ověří…", "They match": "Odpovídají", "They don't match": "Neodpovídají", @@ -1937,7 +1786,6 @@ "Manage": "Spravovat", "Securely cache encrypted messages locally for them to appear in search results.": "Bezpečně uchovávat zprávy na tomto zařízení aby se v nich dalo vyhledávat.", "Enable": "Povolit", - "%(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 neumí bezpečně uchovávat zprávy když běží v prohlížeči. Pokud chcete vyhledávat v šifrovaných zprávách, použijte %(brand)s Desktop.", "This session is backing up your keys. ": "Tato relace zálohuje vaše klíče. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Tato relace nezálohuje vaše klíče, ale už máte zálohu ze které je můžete obnovit.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Než se odhlásíte, připojte tuto relaci k záloze klíčů, abyste nepřišli o klíče, které mohou být jen v této relaci.", @@ -1952,7 +1800,6 @@ "Backup has an invalid signature from unverified session ": "Záloha má neplatný podpis z neověřené relace ", "Backup is not signed by any of your sessions": "Záloha nemá podpis z žádné vaší relace", "This backup is trusted because it has been restored on this session": "Záloze věříme, protože už byla v této relaci načtena", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Zálohovací klíč je uložen v bezpečném úložišti, ale jeho načtení není v této relaci povolené. Zapněte prosím cross-signing v Experimentálních funkcích abyste mohli modifikovat stav zálohy.", "Backup key stored: ": "Zálohovací klíč je uložen: ", "Your keys are not being backed up from this session.": "Vaše klíče nejsou z této relace zálohovány.", "Enable desktop notifications for this session": "Povolit v této relaci oznámení", @@ -1962,7 +1809,6 @@ "Session key:": "Klíč relace:", "Message search": "Vyhledávání ve zprávách", "Cross-signing": "Cross-signing", - "Sessions": "Relace", "A session's public name is visible to people you communicate with": "Lidé, se kterými komunikujete, mohou veřejný název zobrazit", "This room is bridging messages to the following platforms. Learn more.": "Tato místnost je propojena s následujícími platformami. Více informací", "This room isn’t bridging messages to any platforms. Learn more.": "Tato místnost není propojená s žádnými dalšími platformami. Více informací.", @@ -1973,10 +1819,6 @@ "Someone is using an unknown session": "Někdo používá neznámou relaci", "This room is end-to-end encrypted": "Místnost je šifrovaná end-to-end", "Everyone in this room is verified": "V této místnosti jsou všichni ověřeni", - "Some sessions for this user are not trusted": "Některé relace tohoto uživatele jsou nedůvěryhodné", - "All sessions for this user are trusted": "Všem relacím tohoto uživatele věříme", - "Some sessions in this encrypted room are not trusted": "Některé relace v této místnosti jsou nedůvěryhodné", - "All sessions in this encrypted room are trusted": "Všem relacím v této místosti věříme", "Mod": "Moderátor", "Your key share request has been sent - please check your other sessions for key share requests.": "Požadavek na sdílení klíčů byl odeslán - podívejte se prosím na své ostatní relace, jestli vám přišel.", "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.": "Požadavky na sdílení klíčů jsou vašim ostatním relacím odesílány automaticky. Pokud jste nějaký zamítli nebo ignorovali, tímto tlačítkem si ho můžete poslat znovu.", @@ -1985,7 +1827,6 @@ "Encrypted by an unverified session": "Šifrované neověřenou relací", "Encrypted by a deleted session": "Šifrované smazanou relací", "Invite only": "Pouze na pozvání", - "No sessions with registered encryption keys": "Žádné relace se šifrovacími klíči", "Send a reply…": "Odpovědět…", "Send a message…": "Napsat zprávu…", "Direct Messages": "Přímé zprávy", @@ -2015,8 +1856,6 @@ "If you can't scan the code above, verify by comparing unique emoji.": "Pokud vám skenování kódů nefunguje, ověřte se porovnáním emoji.", "You've successfully verified %(displayName)s!": "Úspěšně jste ověřili uživatele %(displayName)s!", "Got it": "Dobře", - "Verification timed out. Start verification again from their profile.": "Čas na ověření vypršel. Začněte znovu z druhého profilu.", - "%(displayName)s cancelled verification. Start verification again from their profile.": "Uživatel %(displayName)s zrušil ověření. Spustit ho můžete znovu z jeho profilu.", "Encryption enabled": "Šifrování je zapnuté", "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Zprávy v této místnosti jsou šifrované end-to-end. Více informací a možnost ověření uživatele najdete v jeho profilu.", "Encryption not enabled": "Šifrování je vypnuté", @@ -2024,11 +1863,8 @@ "Clear all data in this session?": "Smazat všechna data v této relaci?", "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Výmaz všech dat v relaci je nevratný. Pokud nemáte zálohované šifrovací klíče, přijdete o šifrované zprávy.", "Verify session": "Ověřit relaci", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Abychom ověřili, že je relace důvěryhodná, zkontrolujte prosím, že klíč v uživatelském nastavení na tom zařízení odpovídá následujícímu klíči:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Abychom ověřili, že tato relace je důvěryhodná, kontaktujte prosím jejího vlastníka nějakým dalším způsobem (osobně, telefonicky, apod.). Zkontrolujte spolu, že klíč v uživatelském nastavení na druhém zařízení odpovídá následujícímu klíči:", "Session name": "Název relace", "Session key": "Klíč relace", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Pokud odpovídá, zmáčkněte tlačítko ověřit. Pokud ne, druhé zařízení je pravděpodobně falešné a chcete ho zablokovat.", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Ověření uživatele označí jeho relace za důvěryhodné a vaše relace budou důvěryhodné pro něj.", "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.": "Ověření zařízení ho označí za důvěryhodné. Ověření konkrétního zařízení vám dát trochu klidu mysli navíc při používání šifrovaných zpráv.", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Ověření zařízení ho označí za důvěryhodné a uživatelé, kteří věří vám budou také tomuto zařízení důvěřovat.", @@ -2041,33 +1877,17 @@ "Recent Conversations": "Nedávné konverzace", "Suggestions": "Návrhy", "Recently Direct Messaged": "Nedávno kontaktovaní", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Pokud nemůžete někoho najít, zeptejte se na uživatelské jméno, pošlete jim svoje (%(userId)s) a nebo pošlete odkaz na svůj profil.", "Go": "Ok", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Pokud nemůžete někoho najít, zeptejte se na uživatelské jméno (např. @uzivatel:example.com) a nebo pošlete odkaz na tuto místnost.", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "Přidali jste novou relaci '%(displayName)s', která požaduje šifrovací klíče.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Vaše neověřená relace '%(displayName)s' požaduje šifrovací klíče.", - "Loading session info...": "Načítám informace o relaci...", "New session": "Nová relace", "Use this session to verify your new one, granting it access to encrypted messages:": "Použijte tuto relaci pro ověření nové a udělení jí přístupu k vašim šifrovaným zprávám:", "If you didn’t sign in to this session, your account may be compromised.": "Pokud jste se do této nové relace nepřihlásili, váš účet může být kompromitován.", "This wasn't me": "To jsem nebyl/a já", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Toto vám umožní se přihlásit do dalších relací a vrátit se ke svému účtu poté, co se odhlásíte.", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Máte zakázané posílání zpráv neověřeným relacím; abyste mohli zprávu odeslat, musíte je ověřit.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Doporučujeme projít ověřovací proces pro každou relaci abyste ověřili, že patří tomu, komu očekáváte. Můžete ale poslat zprávu i bez ověření, pokud chcete.", - "Room contains unknown sessions": "V místnosti jsou neověřené relace", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "V místnosti \"%(RoomName)s\" jsou relace, které jste ještě nikdy neviděli.", - "Unknown sessions": "Neznámá relace", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Zadejte svoje heslo a získejte přístup k bezpečnému úložišti historie zpráv a k identitě pro cross-signing pro snadné ověřování vašich relací.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Zadejte svůj obnovovací klíč a získejte přístup k bezpečnému úložišti historie zpráv a k identitě pro cross-signing pro snadné ověřování vašich relací.", "Recovery key mismatch": "Obnovovací klíč neodpovídá", "Incorrect recovery passphrase": "Nesprávné heslo pro obnovení", - "Backup restored": "Záloha byla nahrána", "Enter recovery passphrase": "Zadejte heslo pro obnovení zálohy", "Enter recovery key": "Zadejte obnovovací klíč", "Confirm your identity by entering your account password below.": "Potvrďte svou identitu zadáním hesla ke svému účtu.", - "Message not sent due to unknown sessions being present": "Zpráva nebyla odeslána, protože jsou v místnosti neznámé relace", - "Show sessions, send anyway or cancel.": "Zobrazit relace, i tak odeslat, a nebo zrušit.", - "Verify this session to grant it access to encrypted messages.": "Ověřte relaci, aby získala přístup k šifrovaným zprávám.", "Start": "Začít", "Session verified": "Relace je ověřena", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Vaše nová relace je teď ověřená. Má přístup k šifrovaným zprávám a ostatní uživatelé jí budou věřit.", @@ -2079,35 +1899,26 @@ "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.": "Všude jsme vás odhlásili, takže nedostáváte žádná oznámení. Můžete je znovu povolit tím, že se na všech svých zařízeních znovu přihlásíte.", "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.": "Získejte znovu přístup k účtu a obnovte si šifrovací klíče uložené v této relaci. Bez nich nebudete schopni číst zabezpečené zprávy na některých zařízeních.", "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.": "Varování: Vaše osobní data (včetně šifrovacích klíčů) jsou tu pořád uložena. Smažte je, pokud chcete tuto relaci zahodit, nebo se přihlaste pod jiný účet.", - "Sender session information": "Informace o relaci odesílatele", "If you cancel now, you won't complete verifying the other user.": "Pokud teď proces zrušíte, tak nebude druhý uživatel ověřen.", "If you cancel now, you won't complete verifying your other session.": "Pokud teď proces zrušíte, tak nebude druhá relace ověřena.", - "If you cancel now, you won't complete your secret storage operation.": "Pokud teď proces zrušíte, tak se nedokončí operace s bezpečným úložištěm.", "Cancel entering passphrase?": "Zrušit zadávání hesla?", "Setting up keys": "Příprava klíčů", "%(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)su chybí nějaké komponenty, které jsou potřeba pro vyhledávání v zabezpečených místnostech. Pokud chcete s touto funkcí experimentovat, tak si pořiďte vlastní %(brand)s Desktop s přidanými komponentami.", "Subscribing to a ban list will cause you to join it!": "Odebíráním seznamu zablokovaných uživatelů se přidáte do jeho místnosti!", "If this isn't what you want, please use a different tool to ignore users.": "Pokud to nechcete, tak prosím použijte jiný nástroj na blokování uživatelů.", - "You cancelled verification. Start verification again from their profile.": "Zrušili jste ověření. Můžete začít znovu z druhého profilu.", - "Complete security": "Dokončení ověření", "Restore your key backup to upgrade your encryption": "Pro aktualizaci šifrování obnovte klíče ze zálohy", "Restore": "Obnovit", "Enter your account password to confirm the upgrade:": "Potvrďte, že chcete aktualizaci provést zadáním svého uživatelského hesla:", "You'll need to authenticate with the server to confirm the upgrade.": "Server si vás potřebuje ověřit, abychom mohli provést aktualizaci.", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Aktualizujte tuto přihlášenou relaci abyste mohli ověřovat ostatní relace. Tím jim dáte přístup k šifrovaným konverzacím a ostatní uživatelé je jim budou automaticky věřit.", - "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Zapněte v této přihlášené relaci šifrování abyste mohli ověřovat ostatní relace. Tím jim dáte přístup k šifrovaným konverzacím a ostatní uživatelé je jim budou automaticky věřit.", "Show typing notifications": "Zobrazovat oznámení \"... právě píše...\"", "Reset cross-signing and secret storage": "Obnovit bezpečné úložiště a cross-signing", "Destroy cross-signing keys?": "Nenávratně smazat klíče pro cross-signing?", "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Smazání klíčů pro cross-signing je definitivní. Každý, kdo vás ověřil, teď uvidí bezpečnostní varování. Pokud jste zrovna neztratili všechna zařízení, ze kterých se můžete ověřit, tak to asi nechcete udělat.", "Clear cross-signing keys": "Smazat klíče pro cross-signing", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Zabezpečte si šifrovací klíče silným heslem. Pro lepší bezpečnost by mělo být jiné než vaše heslo k přihlášení:", - "Enter a passphrase": "Zadejte heslo", - "The version of %(brand)s": "Verze %(brand)su", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Zda používáte %(brand)s na dotykovém zařízení", "Whether you're using %(brand)s as an installed Progressive Web App": "Zda používáte %(brand)s jako nainstalovanou Progresivní Webovou Aplikaci", "Your user agent": "Identifikace vašeho prohlížeče", - "The information being sent to us to help make %(brand)s better includes:": "Abychom mohli %(brand)s zlepšovat, posíláte nám následující informace:", "Verify this session by completing one of the following:": "Ověřte tuto relaci dokončením jednoho z následujících:", "Scan this unique code": "Naskenujte tento jedinečný kód", "or": "nebo", @@ -2116,22 +1927,15 @@ "Not Trusted": "Nedůvěryhodné", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) se přihlásil do nové relace a neověřil ji:", "Ask this user to verify their session, or manually verify it below.": "Poproste tohoto uživatele aby svojí relaci ověřil a nebo jí níže můžete ověřit manuálně.", - "Manually Verify": "Ověřit manuálně", "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.": "Relace, kterou se snažíte ověřit, neumožňuje ověření QR kódem ani pomocí emoji, což je to, co %(brand)s podporuje. Zkuste použít jiného klienta.", "Verify by scanning": "Ověřte naskenováním", "You declined": "Odmítli jste", "%(name)s declined": "Uživatel %(name)s odmítl", - "accepting …": "přijímání …", - "declining …": "odmítání …", - "Back up my encryption keys, securing them with the same passphrase": "Zazálohovat šifrovací klíče zabezpečené tím stejným heslem", - "Enter your passphrase a second time to confirm it.": "Pro ověření zadejte své heslo podruhé.", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Uschovejte si kopii na bezpečném místě, například ve správci hesel nebo v trezoru.", "Your recovery key": "Váš obnovovací klíč", "Copy": "Zkopírovat", - "You can now verify your other devices, and other users to keep your chats safe.": "Teď můžete ověřit své ostatní zařízení a další uživatelé, aby vaše komunikace byla bezpečná.", "Upgrade your encryption": "Aktualizovat šifrování", "Make a copy of your recovery key": "Vytvořit kopii svého obnovovacího klíče", - "You're done!": "Hotovo!", "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.": "Bez nastavení Bezpečného Obnovení Zpráv nebudete moci obnovit historii šifrovaných zpráv pokud se odhlásíte nebo použijete jinou relaci.", "Create key backup": "Vytvořit zálohu klíčů", "This session is encrypting history using the new recovery method.": "Tato relace šifruje historii zpráv s podporou nového způsobu obnovení.", @@ -2139,13 +1943,10 @@ "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.": "Pokud se vám to stalo neúmyslně, můžete znovu nastavit zálohu zpráv pro tuto relaci. To znovu zašifruje historii zpráv novým způsobem.", "If disabled, messages from encrypted rooms won't appear in search results.": "Když je to zakázané, zprávy v šifrovaných místnostech se nebudou objevovat ve výsledcích vyhledávání.", "Disable": "Zakázat", - "Not currently downloading messages for any room.": "Aktuálně se nestahují žádné zprávy.", - "Downloading mesages for %(currentRoom)s.": "Stahují se zprávy pro %(currentRoom)s.", "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s si bezpečně uchovává šifrované zprávy lokálně, aby v nich mohl vyhledávat:", "Space used:": "Použitý prostor:", "Indexed messages:": "Indexované zprávy:", "Indexed rooms:": "Indexované místnosti:", - "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s z %(totalRooms)s", "Message downloading sleep time(ms)": "Čas na stažení zprávy (ms)", "Sign In or Create Account": "Přihlásit nebo vytvořit nový účet", "Use your account or create a new one to continue.": "Pro pokračování se přihlaste existujícím účtem, nebo si vytvořte nový.", @@ -2169,10 +1970,7 @@ "Displays information about a user": "Zobrazuje informace o uživateli", "Mark all as read": "Označit vše jako přečtené", "Not currently indexing messages for any room.": "Aktuálně neindexujeme žádné zprávy.", - "Currently indexing: %(currentRoom)s.": "Aktuálně indexujeme: %(currentRoom)s.", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s z %(totalRooms)s", - "Review Sessions": "Prověřit relace", - "Unverified login. Was this you?": "Neověřené přihlášeni. Jste to vy?", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s změnil/a jméno místnosti z %(oldRoomName)s na %(newRoomName)s.", "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s přidal/a této místnosti alternativní adresy %(addresses)s.", "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s přidal/a této místnosti alternativní adresu %(addresses)s.", @@ -2185,12 +1983,8 @@ "Interactively verify by Emoji": "Interaktivní ověření s emotikonami", "Support adding custom themes": "Umožnit přidání vlastního vzhledu", "Manually verify all remote sessions": "Manuálně ověřit všechny relace", - "Update your secure storage": "Aktualizovat vaše bezpečné úložistě", "cached locally": "uložen lokálně", "not found locally": "nenalezen lolálně", - "Secret Storage key format:": "Formát klíče Bezpečného Úložistě:", - "outdated": "zastaralý", - "up to date": "aktuální", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Individuálně ověřit každou uživatelovu relaci a označit jí za důvěryhodnou, bez důvěry v cross-signing.", "Invalid theme schema.": "Neplatné schéma vzhledu.", "Error downloading theme information.": "Nepovedlo se stáhnout informace o vzhledu.", @@ -2200,7 +1994,6 @@ "Keyboard Shortcuts": "Klávesové zkratky", "Scroll to most recent messages": "Přejít na poslední zprávy", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Nepovedlo se změnit alternativní adresy místnosti. Možná to server neumožňuje a nebo je to dočasná chyba.", - "You don't have permission to delete the alias.": "Nemáte oprávnění odebrat alias.", "Local address": "Lokální adresa", "Published Addresses": "Publikovaná adresa", "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.": "Publikovaná adresa může být použíta kýmkoli na libovolném serveru pro přidání se do místnosti. Abyste mohli adresu publikovat, musí být nejdříve nastavená jako lokální.", @@ -2249,8 +2042,6 @@ "Send a bug report with logs": "Zaslat hlášení o chybě", "You signed in to a new session without verifying it:": "Přihlásili jste se do nové relace, ale neoveřili jste ji:", "Verify your other session using one of the options below.": "Ověřte ostatní relací jedním z následujících způsobů.", - "Enable cross-signing to verify per-user instead of per-session": "Povolit cross-signing - ověřování uživatelů místo oveřování jednotlivých relací", - "Keep recovery passphrase in memory for this session": "V této relaci si heslo pro obnovení zálohy zapamatovat", "Click the button below to confirm deleting these sessions.|other": "Zmáčknutím tlačítka potvrdíte smazání těchto relací.", "Click the button below to confirm deleting these sessions.|one": "Zmáčknutím tlačítka potvrdíte smazání této relace.", "Delete sessions|other": "Smazat relace", @@ -2298,9 +2089,7 @@ "Room name or address": "Jméno nebo adresa místnosti", "Joins room with given address": "Přidat se do místnosti s danou adresou", "Unrecognised room address:": "Nerozpoznaná adresa místnosti:", - "Use IRC layout": "Používat rozložení IRC", "Font size": "Velikost písma", - "Custom font size": "Vlastní velikost písma", "IRC display name width": "šířka zobrazovného IRC jména", "unexpected type": "neočekávaný typ", "Session backup key:": "Klíč k záloze relace:", diff --git a/src/i18n/strings/da.json b/src/i18n/strings/da.json index 9334a79210..f44d724643 100644 --- a/src/i18n/strings/da.json +++ b/src/i18n/strings/da.json @@ -9,29 +9,12 @@ "New passwords must match each other.": "Nye adgangskoder skal matche hinanden.", "A new password must be entered.": "Der skal indtastes en ny adgangskode.", "The email address linked to your account must be entered.": "Den emailadresse, der tilhører til din adgang, skal indtastes.", - "unknown device": "ukendt enhed", - "NOT verified": "IKKE verificeret", - "Blacklisted": "blokeret", - "verified": "verificeret", "Name": "Navn", - "Device ID": "Enheds-ID", - "Verification": "Verifikation", - "Ed25519 fingerprint": "Ed25519 fingerprint", - "User ID": "Bruger ID", - "Curve25519 identity key": "Curve25519 identitetsnøgle", - "Claimed Ed25519 fingerprint key": "Påstået Ed25519 fingeraftryk nøgle", - "none": "ingen", - "Algorithm": "Algoritme", - "unencrypted": "ukrypteret", - "Decryption error": "Dekrypteringsfejl", "Session ID": "Sessions ID", - "End-to-end encryption information": "End-to-end krypterings oplysninger", - "Event information": "Hændelses information", "Displays action": "Viser handling", "Bans user with given id": "Forbyder bruger med givet id", "Deops user with given id": "Fjerner OP af bruger med givet id", "Invites user with given id to current room": "Inviterer bruger med givet id til nuværende rum", - "Joins room with given alias": "Deltager i rum med givet alias", "Kicks user with given id": "Smider bruger med givet id ud", "Changes your display nickname": "Ændrer dit viste navn", "Searches DuckDuckGo for results": "Søger på DuckDuckGo efter resultater", @@ -48,7 +31,6 @@ "Banned users": "Bortviste brugere", "Click here to fix": "Klik her for at rette", "Continue": "Fortsæt", - "Could not connect to the integration server": "Kunne ikke oprette forbindelse til integrationsserveren", "Create Room": "Opret rum", "Cryptography": "Kryptografi", "Deactivate Account": "Deaktiver brugerkonto", @@ -130,7 +112,6 @@ "Which rooms would you like to add to this community?": "Hvilke rum vil du tilføje til dette fællesskab?", "Show these rooms to non-members on the community page and room list?": "Vis disse rum til ikke-medlemmer på fællesskabssiden og rumlisten?", "Add rooms to the community": "Tilføj rum til fællesskabet", - "Room name or alias": "Rum navn eller alias", "Add to community": "Tilføj til fællesskab", "Failed to invite the following users to %(groupId)s:": "Kunne ikke invitere de følgende brugere til %(groupId)s:", "Failed to invite users to community": "Kunne ikke invitere brugere til fællesskab", @@ -143,7 +124,6 @@ "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Din emailadresse lader ikke til at være tilknyttet et Matrix ID på denne Homeserver.", "Restricted": "Begrænset", "Moderator": "Moderator", - "Start a chat": "Start en chat", "Operation failed": "Operation mislykkedes", "Failed to invite": "Kunne ikke invitere", "Failed to invite the following users to the %(roomName)s room:": "Kunne ikke invitere de følgende brugere til %(roomName)s rummet:", @@ -161,7 +141,6 @@ "Usage": "Brug", "/ddg is not a command": "/ddg er ikke en kommando", "To use it, just wait for autocomplete results to load and tab through them.": "For at bruge det skal du bare vente på at autocomplete resultaterne indlæses, og så bruge Tab for at bladre igennem dem.", - "Unrecognised room alias:": "Ugenkendt rum alias:", "Ignored user": "Ignoreret bruger", "You are now ignoring %(userId)s": "Du ignorerer nu %(userId)s", "Unignored user": "Holdt op med at ignorere bruger", @@ -198,7 +177,6 @@ "Submit debug logs": "Indsend debug-logfiler", "Online": "Online", "Fetching third party location failed": "Hentning af tredjeparts placering mislykkedes", - "A new version of %(brand)s is available.": "En ny version a %(brand)s er tilgængelig.", "Send Account Data": "Send Konto Data", "All notifications are currently disabled for all targets.": "Alle meddelelser er for øjeblikket deaktiveret for alle mål.", "Uploading report": "Uploader rapport", @@ -219,8 +197,6 @@ "Send Custom Event": "Send Brugerdefineret Begivenhed", "Off": "Slukket", "Advanced notification settings": "Avancerede notifikationsindstillinger", - "delete the alias.": "Slet aliaset.", - "To return to your account in future you need to set a password": "For at komme ind på din konto i fremtiden skal du indstille et password", "Forget": "Glem", "You cannot delete this image. (%(code)s)": "Du kan ikke slette dette billede. (%(code)s)", "Cancel Sending": "Stop Forsendelse", @@ -246,7 +222,6 @@ "No update available.": "Ingen opdatering tilgængelig.", "Noisy": "Støjende", "Collecting app version information": "Indsamler app versionsoplysninger", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Slet rumaliaset %(alias)s og fjern %(name)s fra kataloget?", "Keywords": "Søgeord", "Enable notifications for this account": "Aktivér underretninger for dette brugernavn", "Invite to this community": "Inviter til dette fællesskab", @@ -297,7 +272,6 @@ "Show message in desktop notification": "Vis besked i skrivebordsnotifikation", "Unhide Preview": "Vis Forhåndsvisning", "Unable to join network": "Kan ikke forbinde til netværket", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Du har muligvis konfigureret dem i en anden klient end %(brand)s. Du kan ikke tune dem i %(brand)s, men de gælder stadig", "Sorry, your browser is not able to run %(brand)s.": "Beklager, din browser kan ikke køre %(brand)s.", "Quote": "Citat", "Messages in group chats": "Beskeder i gruppechats", @@ -322,7 +296,6 @@ "Thank you!": "Tak!", "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!": "Med din nuværnde broser kan udseendet og fornemmelsen af programmet være helt forkert og nogle funktioner virker måske ikke. Hvis du alligevel vil prøve så kan du fortsætte, men det er på egen risiko!", "Checking for an update...": "Checker om der er en opdatering...", - "There are advanced notifications which are not shown here": "Der er avancerede meddelelser, som ikke vises her", "Logs sent": "Logfiler sendt", "Reply": "Besvar", "All messages (noisy)": "Alle meddelelser (højlydt)", @@ -331,33 +304,25 @@ "View Community": "Vis community", "Preparing to send logs": "Forbereder afsendelse af logfiler", "The platform you're on": "Den platform du bruger", - "The version of %(brand)s": "Versionen af %(brand)s", + "The version of %(brand)s": "%(brand)s versionen", "Whether or not you're logged in (we don't record your username)": "Om du er logget på eller ej (vi logger ikke dit brugernavn)", "Your language of choice": "Dit foretrukne sprog", "Which officially provided instance you are using, if any": "Hvilken officiel tilgængelig instans du bruger, hvis nogen", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Om du bruger Rich Text-tilstanden i editoren", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Om du bruger \"brødkrummer\"-funktionen (avatarer over rumlisten)", "Your homeserver's URL": "Din homeservers URL", - "Your identity server's URL": "Din identitetsservers URL", "e.g. %(exampleValue)s": "f.eks. %(exampleValue)s", "Every page you use in the app": "Hver side du bruger i appen", "e.g. ": "f.eks. ", - "Your User Agent": "Din user agent", "Your device resolution": "Din skærmopløsning", "Analytics": "Analyse data", - "The information being sent to us to help make %(brand)s better includes:": "Information som sendes til os for at kunne forbedre %(brand)s inkluderer:", + "The information being sent to us to help make %(brand)s better includes:": "Informationen der sendes til os for at hjælpe os med at gøre %(brand)s bedre inkluderer:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Hvis denne side indeholder identificerbar information, så som rum, bruger eller gruppe ID, bliver disse fjernet før dataene sendes til serveren.", "Call Failed": "Opkald mislykkedes", - "Review Devices": "Gennemse enheder", - "Call Anyway": "Ring op alligevel", - "Answer Anyway": "Svar alligevel", - "Call": "Ring", - "Answer": "Svar", "Call failed due to misconfigured server": "Opkaldet mislykkedes pga. fejlkonfigureret server", "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Bed administratoren af din homeserver (%(homeserverDomain)s) om at konfigurere en TURN server for at opkald virker pålideligt.", "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.": "Alternativt kan du prøve at bruge den offentlige server turn.matrix.org, men det er ikke lige så pålideligt, og din IP-adresse deles med den server. Du kan også administrere dette under Indstillinger.", "Try using turn.matrix.org": "Prøv at bruge turn.matrix.org", - "A conference call could not be started because the integrations server is not available": "Et gruppeopkald kunne ikke startes, fordi integrationsserveren ikke er tilgængelig", "Call in Progress": "Igangværende opkald", "A call is currently being placed!": "Et opkald er allerede ved at blive oprettet!", "A call is already in progress!": "Et opkald er allerede i gang!", @@ -370,13 +335,10 @@ "Server may be unavailable, overloaded, or you hit a bug.": "Serveren kan være utilgængelig, overbelastet, eller også har du fundet en fejl.", "The server does not support the room version specified.": "Serveren understøtter ikke den oplyste rumversion.", "Failure to create room": "Rummet kunne ikke oprettes", - "Send anyway": "Send alligevel", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s. %(monthName)s %(fullYear)s", "Name or Matrix ID": "Navn eller Matrix-ID", "Unnamed Room": "Unavngivet rum", "Unable to load! Check your network connectivity and try again.": "Kunne ikke hente! Tjek din netværksforbindelse og prøv igen.", - "Registration Required": "Registrering påkrævet", - "You need to register to do this. Would you like to register now?": "Du behøver registrere dig for at gøre dette. Vil du registrere nu?", "Failed to invite users to the room:": "Kunne ikke invitere brugere til rummet:", "Missing roomId.": "roomId mangler.", "Messages": "Beskeder", @@ -422,11 +384,6 @@ "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s aktiverede etiket for %(groups)s i dette rum.", "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s deaktiverede etiket for %(groups)s i dette rum.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s aktiverede etiket for %(newGroups)s og deaktiverede etiket for %(oldGroups)s i dette rum.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s tilføjede %(addedAddresses)s som adresser for dette rum.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s tilføjede %(addedAddresses)s som adresse for dette rum.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s fjernede %(removedAddresses)s som adresser for dette rum.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s fjernede %(removedAddresses)s som adresse for dette rum.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s fjernede %(addedAddresses)s og tilføjede %(removedAddresses)s som adresser for dette rum.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s satte hovedadressen af dette rum til %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s fjernede hovedadressen for dette rum.", "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s tilbagetrak invitationen til %(targetDisplayName)s om at deltage i rummet.", @@ -440,8 +397,6 @@ "%(senderName)s changed the pinned messages for the room.": "%(senderName)s ændrede de fastgjorte beskeder for rummet.", "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s widget tilføjet af %(senderName)s", "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s fjernet af %(senderName)s", - "Light theme": "Lyst tema", - "Dark theme": "Mørkt tema", "%(displayName)s is typing …": "%(displayName)s skriver …", "%(names)s and %(count)s others are typing …|other": "%(names)s og %(count)s andre skriver …", "%(names)s and %(count)s others are typing …|one": "%(names)s og en anden skriver …", @@ -515,9 +470,7 @@ "Render simple counters in room header": "Vis simple tællere i rumhovedet", "Multiple integration managers": "Flere integrationsmanagere", "Enable Emoji suggestions while typing": "Aktiver emoji forslag under indtastning", - "Use compact timeline layout": "Brug kompakt tidslinje", "Show a placeholder for removed messages": "Vis en pladsholder for fjernede beskeder", - "The version of %(brand)s": "%(brand)s versionen", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Hvorvidt du benytter %(brand)s på en enhed, hvor touch er den primære input-grænseflade", "Your user agent": "Din user agent", "Use Single Sign On to continue": "Brug Single Sign On til at fortsætte", @@ -530,9 +483,6 @@ "Confirm adding phone number": "Bekræft tilføjelse af telefonnummer", "Click the button below to confirm adding this phone number.": "Klik på knappen herunder for at bekræfte tilføjelsen af dette telefonnummer.", "Whether you're using %(brand)s as an installed Progressive Web App": "Om du anvender %(brand)s som en installeret Progressiv Web App", - "The information being sent to us to help make %(brand)s better includes:": "Informationen der sendes til os for at hjælpe os med at gøre %(brand)s bedre inkluderer:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Der er ukendte sessions i dette rum: Hvis du fortsætter uden at verificere dem, vil det være muligt for andre at smuglytte til dit opkald.", - "Review Sessions": "Overse sessions", "If you cancel now, you won't complete verifying the other user.": "Hvis du annullerer du, vil du ikke have færdiggjort verifikationen af den anden bruger.", "If you cancel now, you won't complete verifying your other session.": "Hvis du annullerer nu, vil du ikke have færdiggjort verifikationen af din anden session.", "If you cancel now, you won't complete your operation.": "Hvis du annullerer nu, vil du ikke færdiggøre din operation.", @@ -542,7 +492,6 @@ "Verify this session": "Verificér denne session", "Encryption upgrade available": "Opgradering af kryptering tilgængelig", "Set up encryption": "Opsæt kryptering", - "Unverified login. Was this you?": "Ikke-verificeret login. Var det dig?", "Identity server has no terms of service": "Identity serveren har ingen terms of service", "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.": "Denne handling kræver adgang til default identitets serveren for at validere en email adresse eller et telefonnummer, men serveren har ingen terms of service.", "Only continue if you trust the owner of the server.": "Fortsæt kun hvis du stoler på ejeren af denne server.", diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 4806fc10f8..f01b5837a2 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -9,29 +9,12 @@ "New passwords must match each other.": "Die neuen Passwörter müssen identisch sein.", "A new password must be entered.": "Es muss ein neues Passwort eingegeben werden.", "The email address linked to your account must be entered.": "Es muss die mit dem Benutzerkonto verbundene E-Mail-Adresse eingegeben werden.", - "unknown device": "Unbekanntes Gerät", - "NOT verified": "NICHT verifiziert", - "Blacklisted": "Blockiert", - "verified": "verifiziert", "Name": "Name", - "Device ID": "Geräte-ID", - "Verification": "Verifizierung", - "Ed25519 fingerprint": "Ed25519-Fingerprint", - "User ID": "Benutzer-ID", - "Curve25519 identity key": "Curve25519-Identitäts-Schlüssel", - "Claimed Ed25519 fingerprint key": "Geforderter Ed25519-Fingerprint-Schlüssel", - "none": "nicht vorhanden", - "Algorithm": "Algorithmus", - "unencrypted": "unverschlüsselt", - "Decryption error": "Fehler beim Entschlüsseln", "Session ID": "Sitzungs-ID", - "End-to-end encryption information": "Informationen zur Ende-zu-Ende-Verschlüsselung", - "Event information": "Ereignis-Information", "Displays action": "Zeigt Aktionen an", "Bans user with given id": "Verbannt den Benutzer mit der angegebenen ID", "Deops user with given id": "Setzt das Berechtigungslevel beim Benutzer mit der angegebenen ID zurück", "Invites user with given id to current room": "Lädt den Benutzer mit der angegebenen ID in den aktuellen Raum ein", - "Joins room with given alias": "Raum wird mit dem angegebenen Alias betreten", "Kicks user with given id": "Benutzer mit der angegebenen ID kicken", "Changes your display nickname": "Ändert deinen angezeigten Nicknamen", "Change Password": "Passwort ändern", @@ -93,13 +76,11 @@ "Signed Out": "Abgemeldet", "Sign out": "Abmelden", "Someone": "Jemand", - "Start a chat": "Chat starten", "Success": "Erfolg", "This doesn't appear to be a valid email address": "Dies scheint keine gültige E-Mail-Adresse zu sein", "This room is not accessible by remote Matrix servers": "Remote-Matrix-Server können auf diesen Raum nicht zugreifen", "Admin": "Administrator", "Server may be unavailable, overloaded, or you hit a bug.": "Server ist nicht verfügbar, überlastet oder du bist auf einen Softwarefehler gestoßen.", - "Could not connect to the integration server": "Konnte keine Verbindung zum Integrations-Server herstellen", "Labs": "Labor", "Unable to add email address": "E-Mail-Adresse konnte nicht hinzugefügt werden", "Unable to remove contact information": "Die Kontakt-Informationen konnten nicht gelöscht werden", @@ -218,7 +199,6 @@ "Click to mute video": "Klicken, um das Video stummzuschalten", "Command error": "Befehlsfehler", "Decrypt %(text)s": "%(text)s entschlüsseln", - "Direct chats": "Direkt-Chats", "Disinvite": "Einladung zurückziehen", "Download %(text)s": "%(text)s herunterladen", "Failed to ban user": "Verbannen des Benutzers fehlgeschlagen", @@ -232,13 +212,10 @@ "Incorrect verification code": "Falscher Verifizierungscode", "Join Room": "Dem Raum beitreten", "Kick": "Kicken", - "Local addresses for this room:": "Lokale Adressen dieses Raumes:", - "New address (e.g. #foo:%(localDomain)s)": "Neue Adresse (z. B. #foo:%(localDomain)s)", "not specified": "nicht spezifiziert", "No more results": "Keine weiteren Ergebnisse", "No results": "Keine Ergebnisse", "OK": "OK", - "Revoke Moderator": "Moderator-Status zurückziehen", "Search": "Suchen", "Search failed": "Suche ist fehlgeschlagen", "Server error": "Server-Fehler", @@ -249,17 +226,14 @@ "This room has no local addresses": "Dieser Raum hat keine lokale Adresse", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Es wurde versucht, einen bestimmten Punkt im Chatverlauf dieses Raumes zu laden. Dir fehlt jedoch die Berechtigung, die betreffende Nachricht zu sehen.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Es wurde versucht, einen bestimmten Punkt im Chatverlauf dieses Raumes zu laden, der Punkt konnte jedoch nicht gefunden werden.", - "Unknown room %(roomId)s": "Unbekannter Raum %(roomId)s", "You seem to be in a call, are you sure you want to quit?": "Du scheinst in einem Gespräch zu sein, bist du sicher, dass du aufhören willst?", "You seem to be uploading files, are you sure you want to quit?": "Du scheinst Dateien hochzuladen. Bist du sicher schließen zu wollen?", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Du wirst diese Änderung nicht rückgängig machen können, da der Benutzer dasselbe Berechtigungslevel wie du selbst erhalten wird.", - "Make Moderator": "Zum Moderator ernennen", "Room": "Raum", "Cancel": "Abbrechen", "Click to unmute video": "Klicken, um die Video-Stummschaltung zu deaktivieren", "Click to unmute audio": "Klicken, um den Ton wieder einzuschalten", "Failed to load timeline position": "Laden der Chat-Position fehlgeschlagen", - "Failed to toggle moderator status": "Umschalten des Moderator-Status fehlgeschlagen", "Autoplay GIFs and videos": "GIF-Dateien und Videos automatisch abspielen", "%(items)s and %(lastItem)s": "%(items)s und %(lastItem)s", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(day)s. %(monthName)s %(fullYear)s %(time)s", @@ -274,7 +248,6 @@ "olm version:": "Version von olm:", "Passwords can't be empty": "Passwortfelder dürfen nicht leer sein", "%(brand)s version:": "Version von %(brand)s:", - "Scroll to bottom of page": "Zum Seitenende springen", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Zeitstempel im 12-Stunden-Format anzeigen (z. B. 2:30pm)", "Email address": "E-Mail-Adresse", "Error decrypting attachment": "Fehler beim Entschlüsseln des Anhangs", @@ -296,11 +269,8 @@ "Confirm Removal": "Entfernen bestätigen", "Unknown error": "Unbekannter Fehler", "Incorrect password": "Ungültiges Passwort", - "To continue, please enter your password.": "Zum fortfahren bitte Passwort eingeben.", - "I verify that the keys match": "Ich bestätige, dass die Schlüssel identisch sind", "Unable to restore session": "Sitzungswiederherstellung fehlgeschlagen", "Unknown Address": "Unbekannte Adresse", - "Verify...": "Verifizieren...", "ex. @bob:example.com": "z. B. @bob:example.com", "Add User": "Benutzer hinzufügen", "Custom Server Options": "Benutzerdefinierte Server-Optionen", @@ -322,16 +292,12 @@ "Analytics": "Anonymisierte Analysedaten", "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s sammelt anonymisierte Analysedaten, um die Anwendung kontinuierlich verbessern zu können.", "Add an Integration": "Eine Integration hinzufügen", - "Removed or unknown message type": "Gelöschte Nachricht oder unbekannter Nachrichten-Typ", "URL Previews": "URL-Vorschau", "Offline": "Offline", "Online": "Online", " (unsupported)": " (nicht unterstützt)", "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.": "Dieser Prozess erlaubt es dir, die zuvor von einem anderen Matrix-Client exportierten Verschlüsselungs-Schlüssel zu importieren. Danach kannst du alle Nachrichten entschlüsseln, die auch bereits auf dem anderen Client entschlüsselt werden konnten.", "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.": "Wenn du zuvor eine aktuellere Version von %(brand)s verwendet hast, ist deine Sitzung eventuell inkompatibel mit dieser Version. Bitte schließe dieses Fenster und kehre zur aktuelleren Version zurück.", - "Blacklist": "Blockieren", - "Unblacklist": "Entblockieren", - "Unverify": "Verifizierung widerrufen", "Drop file here to upload": "Datei hier loslassen zum hochladen", "Idle": "Untätig", "Ongoing conference call%(supportedText)s.": "Laufendes Konferenzgespräch%(supportedText)s.", @@ -356,13 +322,9 @@ "Anyone": "Jeder", "Are you sure you want to leave the room '%(roomName)s'?": "Bist du sicher, dass du den Raum '%(roomName)s' verlassen möchtest?", "Custom level": "Benutzerdefiniertes Berechtigungslevel", - "device id: ": "Geräte-ID: ", "Publish this room to the public in %(domain)s's room directory?": "Diesen Raum im Raum-Verzeichnis von %(domain)s veröffentlichen?", "Register": "Registrieren", "Save": "Speichern", - "Remote addresses for this room:": "Remote-Adressen für diesen Raum:", - "Unrecognised room alias:": "Unbekannter Raum-Alias:", - "Use compact timeline layout": "Kompaktes Chatverlauf-Layout verwenden", "Verified key": "Verifizierter Schlüssel", "You have disabled URL previews by default.": "Du hast die URL-Vorschau standardmäßig deaktiviert.", "You have enabled URL previews by default.": "Du hast die URL-Vorschau standardmäßig aktiviert.", @@ -390,14 +352,11 @@ "Accept": "Akzeptieren", "Active call (%(roomName)s)": "Aktiver Anruf (%(roomName)s)", "Admin Tools": "Admin-Werkzeuge", - "Alias (optional)": "Alias (optional)", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Verbindung zum Heimserver fehlgeschlagen - bitte überprüfe die Internetverbindung und stelle sicher, dass dem SSL-Zertifikat deines Heimservers vertraut wird und dass Anfragen nicht durch eine Browser-Erweiterung blockiert werden.", "Close": "Schließen", "Custom": "Erweitert", "Decline": "Ablehnen", - "Disable Notifications": "Benachrichtigungen deaktivieren", "Drop File Here": "Lasse Datei hier los", - "Enable Notifications": "Benachrichtigungen aktivieren", "Failed to upload profile picture!": "Hochladen des Profilbild's fehlgeschlagen!", "Incoming call from %(name)s": "Eingehender Anruf von %(name)s", "Incoming video call from %(name)s": "Eingehender Videoanruf von %(name)s", @@ -410,7 +369,6 @@ "%(roomName)s does not exist.": "%(roomName)s existert nicht.", "%(roomName)s is not accessible at this time.": "%(roomName)s ist aktuell nicht zugreifbar.", "Seen by %(userName)s at %(dateTime)s": "Gesehen von %(userName)s um %(dateTime)s", - "Send anyway": "Trotzdem senden", "Start authentication": "Authentifizierung beginnen", "This room": "diesen Raum", "unknown caller": "Unbekannter Anrufer", @@ -428,10 +386,6 @@ "Do you want to set an email address?": "Möchtest du eine E-Mail-Adresse setzen?", "This will allow you to reset your password and receive notifications.": "Dies ermöglicht es dir, dein Passwort zurückzusetzen und Benachrichtigungen zu empfangen.", "Skip": "Überspringen", - "Start verification": "Verifizierung starten", - "Share without verifying": "Ohne Verifizierung verwenden", - "Ignore request": "Anforderung ignorieren", - "Encryption key request": "Anforderung von Verschlüsselungs-Schlüsseln", "Check for update": "Suche nach Updates", "Add a widget": "Widget hinzufügen", "Allow": "Erlauben", @@ -461,18 +415,14 @@ "Ignore": "Ignorieren", "You are now ignoring %(userId)s": "%(userId)s wird jetzt ignoriert", "You are no longer ignoring %(userId)s": "%(userId)s wird nicht mehr ignoriert", - "Message removed by %(userId)s": "Nachricht wurde von %(userId)s entfernt", "Leave": "Verlassen", "Failed to invite the following users to %(groupId)s:": "Die folgenden Benutzer konnten nicht in die Gruppe %(groupId)s eingeladen werden:", "Leave %(groupName)s?": "%(groupName)s verlassen?", "Add a Room": "Raum hinzufügen", "Add a User": "Benutzer hinzufügen", - "Light theme": "Helles Design", - "Dark theme": "Dunkles Design", "You have entered an invalid address.": "Du hast eine ungültige Adresse eingegeben.", "Matrix ID": "Matrix-ID", "Unignore": "Ignorieren aufheben", - "User Options": "Benutzer-Optionen", "Unignored user": "Benutzer nicht mehr ignoriert", "Ignored user": "Benutzer ignoriert", "Stops ignoring a user, showing their messages going forward": "Beendet das Ignorieren eines Benutzers, nachfolgende Nachrichten werden wieder angezeigt", @@ -486,7 +436,6 @@ "Add to summary": "Zur Übersicht hinzufügen", "Failed to add the following users to the summary of %(groupId)s:": "Die folgenden Benutzer konnten nicht zur Übersicht von %(groupId)s hinzugefügt werden:", "Which rooms would you like to add to this summary?": "Welche Räume möchtest du zu dieser Übersicht hinzufügen?", - "Room name or alias": "Raum-Name oder Alias", "Failed to add the following rooms to the summary of %(groupId)s:": "Die folgenden Räume konnten nicht zur Übersicht von %(groupId)s hinzugefügt werden:", "Failed to remove the room from the summary of %(groupId)s": "Der Raum konnte nicht aus der Übersicht von %(groupId)s entfernt werden", "The room '%(roomName)s' could not be removed from the summary.": "Der Raum '%(roomName)s' konnte nicht aus der Übersicht entfernt werden.", @@ -553,7 +502,6 @@ "Something went wrong whilst creating your community": "Beim Erstellen deiner Community ist ein Fehler aufgetreten", "And %(count)s more...|other": "Und %(count)s weitere...", "Delete Widget": "Widget löschen", - "Message removed": "Nachricht entfernt", "Mention": "Erwähnen", "Invite": "Einladen", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Das Löschen eines Widgets entfernt es für alle Nutzer in diesem Raum. Möchtest du dieses Widget wirklich löschen?", @@ -660,11 +608,6 @@ "Display your community flair in rooms configured to show it.": "Zeige deinen Community-Flair in den Räumen, die es erlauben.", "This homeserver doesn't offer any login flows which are supported by this client.": "Dieser Heimserver verfügt über keinen, von diesem Client unterstütztes Anmeldeverfahren.", "Call Failed": "Anruf fehlgeschlagen", - "Review Devices": "Geräte ansehen", - "Call Anyway": "Trotzdem anrufen", - "Answer Anyway": "Trotzdem annehmen", - "Call": "Anrufen", - "Answer": "Annehmen", "Send": "Senden", "collapse": "Verbergen", "expand": "Erweitern", @@ -672,22 +615,19 @@ "Warning": "Warnung", "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.": "Es wurden Daten von einer älteren Version von %(brand)s entdeckt. Dies wird zu Fehlern in der Ende-zu-Ende-Verschlüsselung der älteren Version geführt haben. Ende-zu-Ende verschlüsselte Nachrichten, die ausgetauscht wruden, während die ältere Version genutzt wurde, werden in dieser Version nicht entschlüsselbar sein. Es kann auch zu Fehlern mit Nachrichten führen, die mit dieser Version versendet werden. Wenn du Probleme feststellst, melde dich ab und wieder an. Um die Historie zu behalten, ex- und reimportiere deine Schlüssel.", "Send an encrypted reply…": "Verschlüsselte Antwort senden…", - "Send a reply (unencrypted)…": "Unverschlüsselte Antwort senden…", "Send an encrypted message…": "Verschlüsselte Nachricht senden…", - "Send a message (unencrypted)…": "Unverschlüsselte Nachricht senden…", "Replying": "Antwortet", "Minimize apps": "Apps minimieren", "%(count)s of your messages have not been sent.|one": "Deine Nachricht wurde nicht gesendet.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Alle erneut senden oder alle abbrechen. Du kannst auch einzelne Nachrichten erneut senden oder abbrechen.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Nachricht jetzt erneut senden oder senden abbrechen now.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privatsphäre ist uns wichtig, deshalb sammeln wir keine persönlichen oder identifizierbaren Daten für unsere Analysen.", - "The information being sent to us to help make %(brand)s better includes:": "Die Informationen, die an uns gesendet werden um %(brand)s zu verbessern enthalten:", + "The information being sent to us to help make %(brand)s better includes:": "Zu den Informationen, die uns zugesandt werden, um zu helfen, %(brand)s besser zu machen, gehören:", "The platform you're on": "Benutzte Plattform", - "The version of %(brand)s": "%(brand)s Version", + "The version of %(brand)s": "Die %(brand)s-Version", "Your language of choice": "Deine ausgewählte Sprache", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Ob du den Richtext-Modus des Editors benutzt oder nicht", "Your homeserver's URL": "Die URL deines Homeservers", - "Your identity server's URL": "Die URL deines Identitätsservers", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s", "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.": "Du wirst nicht in der Lage sein, die Änderung zurückzusetzen, da du dich degradierst. Wenn du der letze Nutzer mit Berechtigungen bist, wird es unmöglich sein die Privilegien zurückzubekommen.", "Community IDs cannot be empty.": "Community-IDs können nicht leer sein.", @@ -721,7 +661,6 @@ "Everyone": "Jeder", "Stickerpack": "Stickerpack", "Fetching third party location failed": "Das Abrufen des Drittanbieterstandorts ist fehlgeschlagen", - "A new version of %(brand)s is available.": "Eine neue Version von %(brand)s ist verfügbar.", "Send Account Data": "Benutzerkonto-Daten senden", "All notifications are currently disabled for all targets.": "Aktuell sind alle Benachrichtigungen für alle Ziele deaktiviert.", "Uploading report": "Lade Bericht hoch", @@ -739,8 +678,6 @@ "Send Custom Event": "Benutzerdefiniertes Event senden", "Advanced notification settings": "Erweiterte Benachrichtigungs-Einstellungen", "Failed to send logs: ": "Senden von Logs fehlgeschlagen: ", - "delete the alias.": "Lösche den Alias.", - "To return to your account in future you need to set a password": "Um in Zukunft auf dein Benutzerkonto zugreifen zu können, musst du ein Passwort setzen", "Forget": "Entfernen", "You cannot delete this image. (%(code)s)": "Das Bild kann nicht gelöscht werden. (%(code)s)", "Cancel Sending": "Senden abbrechen", @@ -765,7 +702,6 @@ "No update available.": "Kein Update verfügbar.", "Noisy": "Laut", "Collecting app version information": "App-Versionsinformationen werden abgerufen", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Soll der Raum-Alias %(alias)s gelöscht und der %(name)s aus dem Verzeichnis entfernt werden?", "Keywords": "Schlüsselwörter", "Enable notifications for this account": "Benachrichtigungen für dieses Benutzerkonto aktivieren", "Invite to this community": "In diese Community einladen", @@ -822,7 +758,6 @@ "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.": "Fehlerberichte enthalten Anwendungsdaten wie deinen Nutzernamen, Raum- und Gruppen-ID's und Aliase die du besucht hast sowie Nutzernamen anderer Nutzer. Sie enthalten keine Nachrichten.", "Unhide Preview": "Vorschau wieder anzeigen", "Unable to join network": "Es ist nicht möglich, dem Netzwerk beizutreten", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Du hast sie eventuell auf einem anderen Matrix-Client und nicht in %(brand)s konfiguriert. Sie können in %(brand)s nicht verändert werden, gelten aber trotzdem", "Sorry, your browser is not able to run %(brand)s.": "Es tut uns leid, aber dein Browser kann %(brand)s nicht ausführen.", "Messages in group chats": "Nachrichten in Gruppen-Chats", "Yesterday": "Gestern", @@ -847,11 +782,9 @@ "Uploaded on %(date)s by %(user)s": "Hochgeladen: %(date)s von %(user)s", "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!": "In deinem aktuell verwendeten Browser können Aussehen und Handhabung der Anwendung unter Umständen noch komplett fehlerhaft sein, so dass einige bzw. im Extremfall alle Funktionen nicht zur Verfügung stehen. Du kannst es trotzdem versuchen und fortfahren, bist dabei aber bezüglich aller auftretenden Probleme auf dich allein gestellt!", "Checking for an update...": "Nach Updates suchen...", - "There are advanced notifications which are not shown here": "Es existieren erweiterte Benachrichtigungen, welche hier nicht angezeigt werden", "Missing roomId.": "Fehlende Raum-ID.", "Every page you use in the app": "Jede Seite, die du in der App benutzt", "e.g. ": "z.B. ", - "Your User Agent": "Dein User-Agent", "Your device resolution": "Deine Bildschirmauflösung", "Popout widget": "Widget ausklinken", "Always show encryption icons": "Immer Verschlüsselungssymbole zeigen", @@ -866,9 +799,6 @@ "Send analytics data": "Analysedaten senden", "e.g. %(exampleValue)s": "z.B. %(exampleValue)s", "Muted Users": "Stummgeschaltete Benutzer", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Bitte hilf uns %(brand)s zu verbessern, in dem du anonyme Nutzungsdaten schickst. Dies wird ein Cookie benutzen (bitte beachte auch unsere Cookie-Richtlinie).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Bitte hilf uns %(brand)s zu verbessern, in dem du anonyme Nutzungsdaten schickst. Dies wird ein Cookie benutzen.", - "Yes, I want to help!": "Ja, ich möchte helfen!", "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.": "Dies wird deinen Account permanent unbenutzbar machen. Du wirst nicht in der Lage sein, dich anzumelden und keiner wird dieselbe Benutzer-ID erneut registrieren können. Alle Räume, in denen der Account ist, werden verlassen und deine Account-Daten werden vom Identitätsserver gelöscht. Diese Aktion ist unumkehrbar.", "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.": "Standardmäßig werden die von dir gesendeten Nachrichten beim Deaktiveren nicht gelöscht. Wenn du dies von uns möchtest, aktivere das Auswalfeld unten.", "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.": "Sie Sichtbarkeit der Nachrichten in Matrix ist vergleichbar mit E-Mails: Wenn wir deine Nachrichten vergessen heißt das, dass diese nicht mit neuen oder nicht registrierten Nutzern teilen werden, aber registrierte Nutzer, die bereits zugriff haben, werden Zugriff auf ihre Kopie behalten.", @@ -912,9 +842,6 @@ "Please contact your service administrator to continue using the service.": "Bitte kontaktiere deinen Systemadministrator um diesen Dienst weiter zu nutzen.", "This homeserver has hit its Monthly Active User limit.": "Dieser Heimserver hat sein Limit an monatlich aktiven Nutzern erreicht.", "This homeserver has exceeded one of its resource limits.": "Dieser Heimserver hat einen seiner Ressourcen-Limits überschritten.", - "Please contact your service administrator to get this limit increased.": "Bitte kontaktiere deinen Systemadministrator um dieses Limit zu erhöht zu bekommen.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Dieser Heimserver hat sein Limit an monatlich aktiven Nutzern erreicht, sodass einige Nutzer sich nicht anmelden können.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Dieser Heimserver hat einen seiner Ressourcen-Limits überschritten, sodass einige Benutzer nicht in der Lage sind sich anzumelden.", "Upgrade Room Version": "Raum-Version aufrüsten", "Create a new room with the same name, description and avatar": "Einen neuen Raum mit demselben Namen, Beschreibung und Profilbild erstellen", "Update any local room aliases to point to the new room": "Alle lokalen Raum-Aliase aktualisieren, damit sie auf den neuen Raum zeigen", @@ -934,16 +861,9 @@ "The room upgrade could not be completed": "Die Raum-Aufrüstung konnte nicht fertiggestellt werden", "Upgrade this room to version %(version)s": "Diesen Raum zur Version %(version)s aufrüsten", "Forces the current outbound group session in an encrypted room to be discarded": "Erzwingt, dass die aktuell ausgehende Gruppen-Sitzung in einem verschlüsseltem Raum verworfen wird", - "Registration Required": "Registrierung erforderlich", - "You need to register to do this. Would you like to register now?": "Du musst dich registrieren um dies zu tun. Möchtest du dich jetzt registrieren?", "Unable to connect to Homeserver. Retrying...": "Verbindung mit Heimserver nicht möglich. Versuche erneut...", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s fügte %(addedAddresses)s als Adresse zu diesem Raum hinzu.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s fügte %(addedAddresses)s als Adressen zu diesem Raum hinzu.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s entfernte %(removedAddresses)s als Adresse von diesem Raum.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s entfernte %(removedAddresses)s als Adressen von diesem Raum.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s setzte die Hauptadresse zu diesem Raum auf %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s entfernte die Hauptadresse von diesem Raum.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s fügte %(addedAddresses)s hinzu und entfernte %(removedAddresses)s als Adressen von diesem Raum.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Bevor du Log-Dateien übermittelst, musst du ein GitHub-Issue erstellen um dein Problem zu beschreiben.", "%(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!": "%(brand)s benutzt nun 3-5-mal weniger Arbeitsspeicher, indem Informationen über andere Nutzer erst bei Bedarf geladen werden. Bitte warte, während die Daten erneut mit dem Server abgeglichen werden!", "Updating %(brand)s": "Aktualisiere %(brand)s", @@ -963,27 +883,18 @@ "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Um zu vermeiden, dass Ihr Chat-Verlauf verloren geht, müssen Sie Ihre Raum-Schlüssel exportieren, bevor Sie sich abmelden. Dazu müssen Sie auf die neuere Version von %(brand)s zurückgehen", "Incompatible Database": "Inkompatible Datenbanken", "Continue With Encryption Disabled": "Mit deaktivierter Verschlüsselung fortfahren", - "Enter a passphrase...": "Passphrase eingeben...", "Next": "Weiter", "That matches!": "Das passt!", "That doesn't match.": "Das passt nicht.", "Go back to set it again.": "Gehe zurück und setze es erneut.", - "Repeat your passphrase...": "Wiederhole deine Passphrase...", - "Your Recovery Key": "Dein Wiederherstellungsschlüssel", - "Copy to clipboard": "In Zwischenablage kopieren", "Download": "Herunterladen", "Print it and store it somewhere safe": "Drucke ihn aus und lagere ihn an einem sicheren Ort", "Save it on a USB key or backup drive": "Speichere ihn auf einem USB-Schlüssel oder Sicherungsslaufwerk", "Copy it to your personal cloud storage": "Kopiere ihn in deinen persönlichen Cloud-Speicher", - "Keep it safe": "Lagere ihn sicher", - "Create Key Backup": "Erzeuge Schlüsselsicherung", "Unable to create key backup": "Konnte Schlüsselsicherung nicht erstellen", "Retry": "Erneut probieren", "Unable to restore backup": "Konnte Sicherung nicht wiederherstellen", "No backup found!": "Keine Sicherung gefunden!", - "Backup Restored": "Sicherung wiederhergestellt", - "Enter Recovery Passphrase": "Gebe Wiederherstellungs-Passphrase ein", - "Enter Recovery Key": "Gebe Wiederherstellungsschlüssel ein", "This looks like a valid recovery key!": "Dies sieht wie ein gültiger Wiederherstellungsschlüssel aus!", "Not a valid recovery key": "Kein valider Wiederherstellungsschlüssel", "There was an error joining the room": "Es gab einen Fehler beim Raum-Beitreten", @@ -1033,10 +944,8 @@ "Checking...": "Überprüfe...", "Unable to load backup status": "Konnte Backupstatus nicht laden", "Failed to decrypt %(failedCount)s sessions!": "Konnte %(failedCount)s Sitzungen nicht entschlüsseln!", - "Restored %(sessionCount)s session keys": "%(sessionCount)s Sitzungsschlüssel wiederhergestellt", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Greifen Sie auf Ihre sichere Nachrichtenhistorie zu und richten Sie einen sicheren Nachrichtenversand ein, indem Sie Ihre Wiederherstellungspassphrase eingeben.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Wenn du deinen Wiederherstellungspassphrase vergessen hast, kannst du deinen Wiederherstellungsschlüssel benutzen oder neue Wiederherstellungsoptionen einrichten", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Du hast kürzlich eine neuere Version von %(brand)s auf %(host)s verwendet. Um diese Version erneut mit Ende-zu-Ende-Verschlüsselung zu nutzen, musst du dich ab- und wieder anmelden. ", "Access your secure message history and set up secure messaging by entering your recovery key.": "Greifen Sie auf Ihren sicheren Nachrichtenverlauf zu und richten Sie durch Eingabe Ihres Wiederherstellungsschlüssels einen sicheren Nachrichtenversand ein.", "Set a new status...": "Setze einen neuen Status...", "Clear status": "Status löschen", @@ -1044,9 +953,6 @@ "Invalid identity server discovery response": "Ungültige Antwort beim Aufspüren des Identitätsservers", "General failure": "Allgemeiner Fehler", "Failed to perform homeserver discovery": "Fehler beim Aufspüren des Heimservers", - "Great! This passphrase looks strong enough.": "Gut! Diese Passphrase sieht stark genug aus.", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Als Sicherheitsnetz kannst du ihn benutzen um deine verschlüsselte Nachrichtenhistorie wiederherzustellen, falls du deine Wiederherstellungspassphrase vergessen hast.", - "As a safety net, you can use it to restore your encrypted message history.": "Als Sicherheitsnetz kannst du ihn benutzen um deine verschlüsselte Nachrichtenhistorie wiederherzustellen.", "Set up Secure Message Recovery": "Richte Sichere Nachrichten-Wiederherstellung ein", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Ohne Sichere Nachrichten-Wiederherstellung einzurichten, wirst du deine sichere Nachrichtenhistorie verlieren, wenn du dich abmeldest.", "If you don't want to set this up now, you can later in Settings.": "Wenn du dies jetzt nicht einrichten willst, kannst du dies später in den Einstellungen tun.", @@ -1055,7 +961,6 @@ "Set up Secure Messages": "Richte sichere Nachrichten ein", "Go to Settings": "Gehe zu Einstellungen", "Sign in with single sign-on": "Melden Sie sich mit Single Sign-On an", - "Waiting for %(userId)s to confirm...": "Warte auf Bestätigung für %(userId)s ...", "Unrecognised address": "Nicht erkannte Adresse", "User %(user_id)s may or may not exist": "Existenz der Benutzer %(user_id)s unsicher", "Prompt before sending invites to potentially invalid matrix IDs": "Nachfragen bevor Einladungen zu möglichen ungültigen Matrix IDs gesendet werden", @@ -1198,7 +1103,6 @@ "Timeline": "Chatverlauf", "Autocomplete delay (ms)": "Verzögerung zur Autovervollständigung (ms)", "Roles & Permissions": "Rollen & Berechtigungen", - "To link to this room, please add an alias.": "Um zu diesem Raum zu verlinken, füge bitte einen Alias hinzu.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Änderungen daran, wer den Chatverlauf lesen kann werden nur zukünftige Nachrichten in diesem Raum angewendet. Die Sichtbarkeit der existierenden Historie bleibt unverändert.", "Security & Privacy": "Sicherheit & Datenschutz", "Encryption": "Verschlüsselung", @@ -1215,11 +1119,6 @@ "Room Name": "Raum-Name", "Room Topic": "Raum-Thema", "Join": "Beitreten", - "Use Legacy Verification (for older clients)": "Legacy Verifizierung verwenden (für veraltete Clients)", - "Verify by comparing a short text string.": "Verifizieren durch Vergleichen eines kurzen Textes.", - "Begin Verifying": "Verifizierung beginnen", - "Waiting for partner to accept...": "Warte auf Annahme durch den Gesprächspartner...", - "Use two-way text verification": "Bidirektionale Textverifizierung verwenden", "Waiting for partner to confirm...": "Warte auf Bestätigung des Gesprächspartners...", "Incoming Verification Request": "Eingehende Verifikationsanfrage", "Allow Peer-to-Peer for 1:1 calls": "Erlaube Peer-to-Peer für 1:1-Anrufe", @@ -1231,9 +1130,6 @@ "Credits": "Danksagungen", "Starting backup...": "Starte Backup...", "Success!": "Erfolgreich!", - "Recovery key": "Wiederherstellungsschlüssel", - "Confirm your passphrase": "Bestätige deine Passphrase", - "Secure your backup with a passphrase": "Sichere dein Backup mit einer Passphrase", "Your keys are being backed up (the first backup could take a few minutes).": "Deine Schlüssel werden gesichert (Das erste Backup könnte ein paar Minuten in Anspruch nehmen).", "Voice & Video": "Sprach- & Videoanruf", "Never lose encrypted messages": "Verliere niemals verschlüsselte Nachrichten", @@ -1245,14 +1141,12 @@ "Are you sure you want to sign out?": "Bist du sicher, dass du dich abmelden möchtest?", "Manually export keys": "Manueller Schlüssel Export", "Composer": "Nachrichteneingabefeld", - "Nothing appearing? Not all clients support interactive verification yet. .": "Es ist nichts aufgetaucht? Noch nicht alle Clients unterstützen die interaktive Verifikation. .", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Überprüfen Sie diesen Benutzer, um ihn als vertrauenswürdig zu kennzeichnen. Benutzern zu vertrauen gibt Ihnen zusätzliche Sicherheit bei der Verwendung von Ende-zu-Ende-verschlüsselten Nachrichten.", "I don't want my encrypted messages": "Ich möchte meine verschlüsselten Nachrichten nicht", "You'll lose access to your encrypted messages": "Du wirst den Zugang zu deinen verschlüsselten Nachrichten verlieren", "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Wenn du Fehler bemerkst oder eine Rückmeldung geben möchtest, teile dies uns auf GitHub mit.", "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.": "Um doppelte Issues zu vermeiden, schauen Sie bitte zuerst die existierenden Issues an (und fügen Sie ein \"+1\" hinzu), oder erstellen Sie ein neues Issue, wenn Sie keines finden können.", "Report bugs & give feedback": "Melde Fehler & gebe Rückmeldungen", - "Recovery Key Mismatch": "Wiederherstellungsschlüssel passt nicht", "Update status": "Aktualisiere Status", "Set status": "Setze Status", "Hide": "Verberge", @@ -1286,17 +1180,10 @@ "Create account": "Konto anlegen", "Registration has been disabled on this homeserver.": "Registrierungen wurden auf diesem Heimserver deaktiviert.", "Keep going...": "Fortfahren...", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Wir werden deine Schlüsselsicherung verschlüsselt auf dem Server speichern. Schütze dafür deine Sicherung mit einer Passphrase.", "For maximum security, this should be different from your account password.": "Für maximale Sicherheit, sollte dies anders als dein Konto-Passwort sein.", - "Set up with a Recovery Key": "Wiederherstellungsschlüssel einrichten", - "Please enter your passphrase a second time to confirm.": "Bitte gebe deine Passphrase ein weiteres mal zur Bestätigung ein.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Dein Wiederherstellungsschlüssel ist ein Sicherungsnetz - Du kannst ihn benutzen um Zugang zu deinen verschlüsselten Nachrichten zu bekommen, wenn du deine Passphrase vergisst.", "A new recovery passphrase and key for Secure Messages have been detected.": "Eine neue Wiederherstellungspassphrase und -Schlüssel für sichere Nachrichten wurde festgestellt.", "Recovery Method Removed": "Wiederherstellungsmethode gelöscht", "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.": "Wenn du die Wiederherstellungsmethode nicht gelöscht hast, kann ein Angreifer versuchen Zugang zu deinem Konto zu bekommen. Ändere dein Passwort und richte sofort eine neue Wiederherstellungsmethode in den Einstellungen ein.", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Sicherung konnte mit diesem Schlüssel nicht entschlüsselt werden: Bitte stelle sicher, dass du den richtigen Wiederherstellungsschlüssel eingegeben hast.", - "Incorrect Recovery Passphrase": "Falsche Wiederherstellungspassphrase", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Sicherung konnte nicht mit dieser Passphrase entschlüsselt werden: Bitte stelle sicher, dass du die richtige Wiederherstellungspassphrase eingegeben hast.", "Warning: you should only set up key backup from a trusted computer.": "Warnung: Du solltest die Schlüsselsicherung nur auf einem vertrauenswürdigen Gerät einrichten.", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Du kannst die angepassten Serveroptionen benutzen um dich an einem anderen Matrixserver anzumelden indem du eine andere Heimserver-Adresse angibst. Dies erlaubt dir diese Anwendung mit einem anderen Matrixkonto auf einem anderen Heimserver zu nutzen.", "Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of modular.im.": "Gib die Adresse deines Modular-Heimservers an. Es kann deine eigene Domain oder eine Subdomain von modular.im sein.", @@ -1311,7 +1198,6 @@ "User %(userId)s is already in the room": "Nutzer %(userId)s ist bereits im Raum", "The user must be unbanned before they can be invited.": "Nutzer müssen entbannt werden, bevor sie eingeladen werden können.", "Show read receipts sent by other users": "Zeige Lesebestätigungen anderer Benutzer", - "Order rooms in the room list by most important first instead of most recent": "Sortiere Räume in der Raumliste nach Wichtigkeit und nicht nach letzter Aktivität", "Scissors": "Scheren", "Upgrade to your own domain": "Upgrade zu deiner eigenen Domain", "Accept all %(invitedRooms)s invites": "Akzeptiere alle %(invitedRooms)s Einladungen", @@ -1336,10 +1222,6 @@ "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.": "Sobald aktiviert, kann die Verschlüsselung für einen Raum nicht mehr deaktiviert werden. Nachrichten in einem verschlüsselten Raum können nur noch von Teilnehmern aber nicht mehr vom Server gelesen werden. Einige Bots und Brücken werden vielleicht nicht mehr funktionieren. Lerne mehr über Verschlüsselung", "Error updating main address": "Fehler beim Aktualisieren der Hauptadresse", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Es gab ein Problem beim Aktualisieren der Raum-Hauptadresse. Es kann sein, dass es vom Server verboten ist oder ein temporäres Problem auftrat.", - "Error creating alias": "Fehler beim Erstellen eines Aliases", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Es gab einen Fehler beim Erstellen eines Aliases. Entweder ist es dir vom Server nicht erlaubt oder es gab ein temporäres Problem.", - "Error removing alias": "Fehler beim entfernen eines Aliases", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Es gab einen Fehler beim Entfernen eines Aliases. Er existiert vielleicht nicht mehr oder es gab ein temporäres Problem.", "Error updating flair": "Konnte Abzeichen nicht aktualisieren", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Es gab ein Problem beim Aktualisieren des Abzeichens für diesen Raum. Es kann sein, dass der Server es nicht erlaubt oder ein temporäres Problem auftrat.", "Power level": "Berechtigungslevel", @@ -1356,7 +1238,6 @@ "Your %(brand)s is misconfigured": "Dein %(brand)s ist falsch konfiguriert", "You cannot modify widgets in this room.": "Du kannst in diesem Raum keine Widgets verändern.", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Ob du die \"Breadcrumbs\"-Funktion nutzt oder nicht (Avatare oberhalb der Raumliste)", - "A conference call could not be started because the integrations server is not available": "Ein Konferenzanruf konnte nicht gestartet werden, da der Integrationsserver nicht verfügbar ist", "The server does not support the room version specified.": "Der Server unterstützt die angegebene Raumversion nicht.", "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.": "Achtung: Ein Raum-Upgrade wird die Mitglieder des Raumes nicht automatisch auf die neue Version migrieren. Wir werden in der alten Raumversion einen Link zum neuen Raum posten - Raum-Mitglieder müssen dann auf diesen Link klicken um dem neuen Raum beizutreten.", "Replying With Files": "Mit Dateien antworten", @@ -1381,7 +1262,6 @@ "No homeserver URL provided": "Keine Heimserver-URL angegeben", "Unexpected error resolving homeserver configuration": "Ein unerwarteter Fehler ist beim Laden der Heimserver-Konfiguration aufgetreten", "The user's homeserver does not support the version of the room.": "Die Raumversion wird vom Heimserver des Benutzers nicht unterstützt.", - "Show recently visited rooms above the room list": "Zeige kürzlich besuchte Räume oberhalb der Raumliste", "Show hidden events in timeline": "Zeige versteckte Ereignisse in der Chronik", "Low bandwidth mode": "Modus für niedrige Bandbreite", "Reset": "Zurücksetzen", @@ -1474,11 +1354,6 @@ "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s hat einen Videoanruf getätigt. (Nicht von diesem Browser unterstützt)", "Verify this session": "Sitzung verifizieren", "Set up encryption": "Verschlüsselung einrichten", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s hat %(addedAddresses)s und %(count)s Adressen zu diesem Raum hinzugefügt", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s hat %(removedAddresses)s und %(count)s andere Adressen aus diesem Raum entfernt", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s hat %(countRemoved)s entfernt und %(countAdded)s Adressen zu diesem Raum hinzugefügt", - "%(senderName)s turned on end-to-end encryption.": "%(senderName)s hat die Ende-zu-Ende Verschlüsselung aktiviert.", - "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s hat die Ende-zu-Ende Verschlüsselung aktiviert (unbekannter Algorithmus %(algorithm)s).", "%(senderName)s updated an invalid ban rule": "%(senderName)s hat eine ungültige Bannregel aktualisiert", "The message you are trying to send is too large.": "Die Nachricht, die du versuchst zu senden, ist zu lang.", "a few seconds ago": "vor ein paar Sekunden", @@ -1531,7 +1406,6 @@ "Ignored/Blocked": "Ignoriert/Blockiert", "Something went wrong. Please try again or view your console for hints.": "Etwas ist schief gelaufen. Bitte versuche es erneut oder sieh für weitere Hinweise in deiner Konsole nach.", "Error subscribing to list": "Fehler beim Abonnieren der Liste", - "Please verify the room ID or alias and try again.": "Bitte überprüfe die Raum ID oder den Alias und versuche es erneut.", "Error removing ignored user/server": "Fehler beim Entfernen eines ignorierten Benutzers/Servers", "Error unsubscribing from list": "Fehler beim Deabonnieren der Liste", "Please try again or view your console for hints.": "Bitte versuche es erneut oder sieh für weitere Hinweise in deine Konsole.", @@ -1543,19 +1417,14 @@ "View rules": "Regeln betrachten", "You are currently subscribed to:": "Du abonnierst momentan:", "⚠ These settings are meant for advanced users.": "⚠ Diese Einstellungen sind für fortgeschrittene Nutzer gedacht.", - "The version of %(brand)s": "Die %(brand)s-Version", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Ob du %(brand)s auf einem Gerät verwendest, bei dem Berührung der primäre Eingabemechanismus ist", "Whether you're using %(brand)s as an installed Progressive Web App": "Ob Sie %(brand)s als installierte progressive Web-App verwenden", "Your user agent": "Dein User-Agent", - "The information being sent to us to help make %(brand)s better includes:": "Zu den Informationen, die uns zugesandt werden, um zu helfen, %(brand)s besser zu machen, gehören:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Es sind unbekannte Sitzungen in diesem Raum: Wenn du ohne Verifizierung fortfährst, wird es für jemanden möglich sein, deinen Anruf zu belauschen.", "If you cancel now, you won't complete verifying the other user.": "Wenn Sie jetzt abbrechen, werden Sie die Verifizierung des anderen Nutzers nicht beenden können.", "If you cancel now, you won't complete verifying your other session.": "Wenn Sie jetzt abbrechen, werden Sie die Verifizierung der anderen Sitzung nicht beenden können.", - "If you cancel now, you won't complete your secret storage operation.": "Wenn Sie jetzt abbrechen, werden Sie die Geheimlagerungsoperation nicht beenden können.", "Cancel entering passphrase?": "Eingabe der Passphrase abbrechen?", "Setting up keys": "Einrichten der Schlüssel", "Encryption upgrade available": "Verschlüsselungs-Update verfügbar", - "Unverified session": "Ungeprüfte Sitzung", "Verifies a user, session, and pubkey tuple": "Verifiziert einen Benutzer, eine Sitzung und Pubkey-Tupel", "Unknown (user, session) pair:": "Unbekanntes (Nutzer-, Sitzungs-) Paar:", "Session already verified!": "Sitzung bereits verifiziert!", @@ -1567,22 +1436,17 @@ "Delete %(count)s sessions|other": "Lösche %(count)s Sitzungen", "Backup is not signed by any of your sessions": "Die Sicherung ist von keiner Ihrer Sitzungen unterzeichnet", "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Ihr Passwort wurde erfolgreich geändert. Sie erhalten keine Push-Benachrichtigungen zu anderen Sitzungen, bis Sie sich wieder bei diesen anmelden", - "Sessions": "Sitzungen", "Notification sound": "Benachrichtigungston", "Set a new custom sound": "Setze einen neuen benutzerdefinierten Ton", "Browse": "Durchsuche", "Direct Messages": "Direktnachrichten", "You can use /help to list available commands. Did you mean to send this as a message?": "Sie können /help benutzen, um verfügbare Befehle aufzulisten. Wollten Sie dies als Nachricht senden?", "Direct message": "Direktnachricht", - "Set a room alias to easily share your room with other people.": "Setze ein Raum-Alias, um deinen Raum einfach mit anderen Personen zu teilen.", "Suggestions": "Vorschläge", "Recently Direct Messaged": "Kürzlich direkt verschickt", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Wenn Sie niemanden finden können, fragen Sie nach deren Benutzernamen, teilen Sie ihren Benutzernamen (%(userId)s) oder Profil-Link.", "Go": "Los", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Wenn Sie niemanden finden können, fragen Sie nach deren Benutzernamen (z.B. @benutzer:server.de) oder teilen Sie diesen Raum.", "Command Help": "Befehl Hilfe", "To help us prevent this in future, please send us logs.": "Um uns zu helfen, dies in Zukunft zu vermeiden, senden Sie uns bitte Logs.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Wir empfehlen Ihnen, den Verifizierungsprozess für jede Sitzung zu durchlaufen, um zu bestätigen, dass sie ihrem rechtmäßigen Eigentümer gehören, aber Sie können die Nachricht auch ohne Verifizierung erneut senden, wenn Sie dies bevorzugen.", "Notification settings": "Benachrichtigungseinstellungen", "Help": "Hilf uns", "Filter": "Filtern", @@ -1593,15 +1457,10 @@ "If disabled, messages from encrypted rooms won't appear in search results.": "Wenn deaktiviert, werden Nachrichten von verschlüsselten Räumen nicht in den Ergebnissen auftauchen.", "This user has not verified all of their sessions.": "Dieser Benutzer hat nicht alle seine Sitzungen verifiziert.", "You have verified this user. This user has verified all of their sessions.": "Sie haben diesen Benutzer verifiziert. Dieser Benutzer hat alle seine Sitzungen verifiziert.", - "Some sessions for this user are not trusted": "Einige Sitzungen für diesen Benutzer sind nicht vertrauenswürdig", - "All sessions for this user are trusted": "Alle Sitzungen für diesen Benutzer sind vertrauenswürdig", - "Some sessions in this encrypted room are not trusted": "Einige Sitzungen in diesem verschlüsselten Raum sind nicht vertrauenswürdig", - "All sessions in this encrypted room are trusted": "Alle Sitzungen in diesem verschlüsselten Raum sind vertrauenswürdig", "Your key share request has been sent - please check your other sessions for key share requests.": "Ihre Anfrage zur Schlüssel-Teilung wurde gesendet - bitte überprüfen Sie Ihre anderen Sitzungen auf Anfragen zur Schlüssel-Teilung.", "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.": "Anfragen zum Teilen von Schlüsseln werden automatisch an Ihre anderen Sitzungen gesendet. Wenn Sie die Anfragen zum Teilen von Schlüsseln in Ihren anderen Sitzungen abgelehnt oder abgewiesen haben, klicken Sie hier, um die Schlüssel für diese Sitzung erneut anzufordern.", "If your other sessions do not have the key for this message you will not be able to decrypt them.": "Wenn Ihre anderen Sitzungen nicht über den Schlüssel für diese Nachricht verfügen, können Sie sie nicht entschlüsseln.", "Re-request encryption keys from your other sessions.": "Fordern Sie Verschlüsselungsschlüssel aus Ihren anderen Sitzungen erneut an.", - "No sessions with registered encryption keys": "Keine Sitzungen mit registrierten Verschlüsselungsschlüsseln", "Room %(name)s": "Raum %(name)s", "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Ein Upgrade dieses Raums schaltet die aktuelle Instanz des Raums ab und erstellt einen aktualisierten Raum mit demselben Namen.", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) hat sich zu einer neuen Sitzung angemeldet, ohne sie zu verifizieren:", @@ -1630,18 +1489,9 @@ "Session name": "Name der Sitzung", "This will allow you to return to your account after signing out, and sign in on other sessions.": "So können Sie nach der Abmeldung zu Ihrem Konto zurückkehren und sich bei anderen Sitzungen anmelden.", "Use bots, bridges, widgets and sticker packs": "Benutze Bots, Bridges, Widgets und Sticker-Packs", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Sie blockieren derzeit nicht verifizierte Sitzungen; um Nachrichten an diese Sitzungen zu senden, müssen Sie sie verifizieren.", - "Room contains unknown sessions": "Raum enthält unbekannte Sitzungen", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "\"%(RoomName)s\" enthält Sitzungen, die Sie noch nie zuvor gesehen haben.", - "Unknown sessions": "Unbekannte Sitzungen", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Greifen Sie durch Eingabe Ihrer Passphrase auf Ihren sicheren Nachrichtenverlauf und Ihre Quersignatur-Identität zu, um andere Sitzungen zu überprüfen.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Greifen Sie durch Eingabe Ihres Wiederherstellungsschlüssels auf Ihren sicheren Nachrichtenverlauf und Ihre Quersignatur-Identität zur Überprüfung anderer Sitzungen zu.", - "Message not sent due to unknown sessions being present": "Nachricht wird nicht gesendet, da unbekannte Sitzungen vorhanden sind", - "Show sessions, send anyway or cancel.": "Sitzungen anzeigen, trotzdem senden oder abbrechen.", "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Wenn Sie Ihr Passwort ändern, werden alle End-to-End-Verschlüsselungsschlüssel für alle Ihre Sitzungen zurückgesetzt, sodass der verschlüsselte Chat-Verlauf nicht mehr lesbar ist. Richten Sie ein Schlüssel-Backup ein oder exportieren Sie Ihre Raumschlüssel aus einer anderen Sitzung, bevor Sie Ihr Passwort zurücksetzen.", "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.": "Sie wurden von allen Sitzungen abgemeldet und erhalten keine Push-Benachrichtigungen mehr. Um die Benachrichtigungen wieder zu aktivieren, melden Sie sich auf jedem Gerät erneut an.", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Aktualisieren Sie diese Sitzung, damit sie andere Sitzungen verifizieren kann, indem sie ihnen Zugang zu verschlüsselten Nachrichten gewährt und sie für andere Benutzer als vertrauenswürdig markiert.", - "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Richten Sie für diese Sitzung eine Verschlüsselung ein, damit sie andere Sitzungen verifizieren kann, indem sie ihnen Zugang zu verschlüsselten Nachrichten gewährt und sie für andere Benutzer als vertrauenswürdig markiert.", "Sign out and remove encryption keys?": "Abmelden und Verschlüsselungsschlüssel entfernen?", "Sign in to your Matrix account on ": "Melde dich bei deinem Matrix-Konto auf an", "Enter your password to sign in and regain access to your account.": "Gib dein Passwort ein, um dich anzumelden und wieder Zugang zu deinem Konto zu erhalten.", @@ -1659,7 +1509,6 @@ "Start": "Starte", "Discovery": "Kontakte", "Done": "Erledigt", - "Manually Verify": "Manuell verifizieren", "Trusted": "Vertrauenswürdig", "Not trusted": "Nicht vertrauenswürdig", "%(count)s verified sessions|one": "1 verifizierte Sitzung", @@ -1714,7 +1563,6 @@ "You're previewing %(roomName)s. Want to join it?": "Du betrachtest %(roomName)s. Willst du beitreten?", "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s hat die alternative Adresse 2%(addresses)s für diesen Raum hinzugefügt.", "%(senderName)s changed the addresses for this room.": "%(senderName)s hat die Adresse für diesen Raum geändert.", - "Review Sessions": "Sitzungen überprüfen", "Displays information about a user": "Zeigt Informationen über einen Benutzer", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s hat den Raumnamen von %(oldRoomName)s zu %(newRoomName)s geändert.", "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s hat die alternative Adresse %(addresses)s für diesen Raum hinzugefügt.", @@ -1767,9 +1615,7 @@ "Create a public room": "Erstelle einen öffentlichen Raum", "Show advanced": "Weitere Einstellungen anzeigen", "Verify session": "Sitzung verifizieren", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Um diese Sitzung zu verifizieren kontaktiere bitte den Benutzer über einen anderen Kanal (z.B. persönlich oder mit einem Telefonanruf) und frage ihn ob der Sitzungsschlüssel in seinen Benutzereinstellungen mit dem hier angezeigten übereinstimmt:", "Session key": "Sitzungsschlüssel", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Wenn die Sitzungsschlüssel übereinstimmen, drücke den Knopf zur Bestätigung. Stimmen sie nicht überein versucht jemand diese Sitzung abzufangen und du solltest diese Sitzung blockieren.", "Recent Conversations": "Letzte Unterhaltungen", "Report Content to Your Homeserver Administrator": "Inhalte an den Administrator deines Heimservers melden", "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Wenn du diese Nachricht meldest wird dessen einzigartige 'event ID' an den Administrator deines Heimservers übermittelt. Wenn die Nachrichten in diesem Raum verschlüsselt sind wird dein Administrator nicht in der Lage sein den Text zu lesen oder Medien einzusehen.", @@ -1780,13 +1626,11 @@ "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Gib eine E-Mail-Adresse an um dein Konto wiederherstellen zu können. Die E-Mail-Adresse kann auch genutzt werden um deinen Kontakt zu finden.", "Enter your custom homeserver URL What does this mean?": "Gib eine andere Heimserver-Adresse an Was bedeutet das?", "%(creator)s created and configured the room.": "%(creator)s hat den Raum erstellt und konfiguriert.", - "Sender session information": "Absender Sitzungsinformationen", "Set up with a recovery key": "Mit einem Wiederherstellungsschlüssel einrichten", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Bewahre ihn sicher auf, wie in einem Passwort-Manager oder einem Safe.", "Your recovery key": "Dein Wiederherstellungsschlüssel", "Copy": "In Zwischenablage kopieren", "Make a copy of your recovery key": "Speichere deinen Wiederherstellungsschlüssel", - "Unverified login. Was this you?": "Nicht verifizierte Anmeldung. Bist du es gewesen?", "Sends a message as html, without interpreting it as markdown": "Verschickt eine Nachricht im html-Format, ohne sie in Markdown zu formatieren", "Show rooms with unread notifications first": "Räume mit nicht gelesenen Benachrichtungen zuerst zeigen", "Show shortcuts to recently viewed rooms above the room list": "Kurzbefehlezu den kürzlich gesichteteten Räumen über der Raumliste anzeigen", @@ -1809,13 +1653,8 @@ "Manually Verify by Text": "Verifiziere manuell mit einem Text", "Interactively verify by Emoji": "Verifiziere interaktiv mit Emojis", "Support adding custom themes": "Unterstütze das Hinzufügen von benutzerdefinierten Designs", - "Enable cross-signing to verify per-user instead of per-session": "Aktiviere Cross-Signing um pro Benutzer statt pro Sitzung zu verifizieren", "Ask this user to verify their session, or manually verify it below.": "Bitte diese/n Nutzer!n, seine/ihre Sitzung zu verifizieren, oder verifiziere diese unten manuell.", - "Enable local event indexing and E2EE search (requires restart)": "Aktiviere lokale Ereignis-Indizierung und E2EE-Suche (erfordert Neustart)", "a few seconds from now": "in ein paar Sekunden", - "Show a presence dot next to DMs in the room list": "Verfügbarkeitspunkt neben den Direktnachrichten in der Raumliste anzeigen", - "Show padlocks on invite only rooms": "Zeige Schlösser an Räumen, welchen nur mit Einladung beigetreten werden kann", - "Keep recovery passphrase in memory for this session": "Behalte die Wiederherstellungspassphrase für diese Sitzung im Speicher", "Manually verify all remote sessions": "Verifiziere alle Remotesitzungen", "Confirm the emoji below are displayed on both sessions, in the same order:": "Bestätige, dass die unten angezeigten Emojis auf beiden Sitzungen in der selben Reihenfolge angezeigt werden:", "Verify this session by confirming the following number appears on its screen.": "Verfiziere diese Sitzung, indem du bestätigst, dass die folgende Nummer auf ihrem Bildschirm erscheint.", @@ -1833,7 +1672,6 @@ "Workspace: %(networkName)s": "Arbeitsbereich: %(networkName)s", "Channel: %(channelName)s": "Kanal: %(channelName)s", "Show less": "Weniger zeigen", - "Warning: You should only do this on a trusted computer.": "Achtung: Du solltest das nur auf einem vertrauenswürdigen Gerät tun.", "Warning: You should only set up key backup from a trusted computer.": "Achtung: Du solltest die Schlüsselsicherung nur auf einem vertrauenswürdigen Gerät einrichten.", "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.": "Melde dich an um die ausschließlich in dieser Sitzung gespeicherten Verschlüsselungsschlüssel wiederherzustellen. Du benötigst sie, um deine verschlüsselten Nachrichten in jeder Sitzung zu lesen.", "Forgotten your password?": "Passwort vergessen?", @@ -1854,7 +1692,6 @@ "You'll need to authenticate with the server to confirm the upgrade.": "Du musst dich am Server authentifizieren um die Aktualisierung zu bestätigen.", "Enter your recovery passphrase a second time to confirm it.": "Gib deine Wiederherstellungspassphrase zur Bestätigung erneut ein.", "Confirm your recovery passphrase": "Bestätige deine Wiederherstellungspassphrase", - "Confirm recovery passphrase": "Bestätige die Wiederherstellungspassphrase", "Please enter your recovery passphrase a second time to confirm.": "Bitte gib deine Wiederherstellungspassphrase ein zweites Mal ein um sie zu bestätigen.", "Review where you’re logged in": "Überprüfe, wo du eingeloggt bist", "New login. Was this you?": "Neue Anmeldung. Warst du das?", @@ -1875,7 +1712,6 @@ "Subscribed lists": "Abonnierte Listen", "Subscribing to a ban list will cause you to join it!": "Eine Verbotsliste abonnieren bedeutet ihr beizutreten!", "If this isn't what you want, please use a different tool to ignore users.": "Wenn dies nicht das ist, was du willst, verwende ein anderes Tool, um Benutzer!nnen zu ignorieren.", - "Room ID or alias of ban list": "Raum-ID oder -Alias der Sperrliste", "Subscribe": "Abonnieren", "Always show the window menu bar": "Fenstermenüleiste immer anzeigen", "Show tray icon and minimize window to it on close": "Taskleistensymbol anzeigen und Fenster beim Schließen dorthin minimieren", @@ -1894,7 +1730,6 @@ "Verify your other session using one of the options below.": "Verifiziere deine andere Sitzung mit einer der folgenden Optionen.", "You signed in to a new session without verifying it:": "Du hast dich in einer neuen Sitzung angemeldet ohne sie zu verifizieren:", "Other users may not trust it": "Andere Benutzer vertrauen ihr vielleicht nicht", - "Update your secure storage": "Aktualisiere deinen sicheren Speicher", "Upgrade": "Hochstufen", "Verify the new login accessing your account: %(name)s": "Verifiziere die neue Anmeldung an deinem Konto: %(name)s", "From %(deviceName)s (%(deviceId)s)": "Von %(deviceName)s (%(deviceId)s)", @@ -1918,16 +1753,12 @@ "in account data": "in den Kontodaten", "Homeserver feature support:": "Heimserverunterstützung:", "exists": "existiert", - "Secret Storage key format:": "Sicherer Speicher Schlüssel Format:", - "outdated": "abgelaufen", - "up to date": "aktuell", "Delete sessions|other": "Lösche Sitzungen", "Delete sessions|one": "Lösche Sitzung", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Sitzungen eines Benutzers einzeln verifizieren. Geräten, die ein Benutzer als vertrauenswürdig markiert hat, wird nicht automatisch vertraut (cross-signing).", "Securely cache encrypted messages locally for them to appear in search results, using ": "Der Zwischenspeicher für die lokale Suche in verschlüsselten Nachrichten benötigt ", " to store messages from ": " um Nachrichten aus ", "%(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 benötigt weitere Komponenten um verschlüsselte Nachrichten lokal zu durchsuchen. Wenn du diese Funktion testen möchtest kannst du dir deine eigene Version von %(brand)s Desktop mit der integrierten Suchfunktion bauen.", - "%(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 kann verschlüsselte Nachrichten nicht lokal durchsuchen während es im Browser läuft. Verwende %(brand)s Desktop damit verschlüsselte Nachrichten mit der Suchfunktion gefunden werden.", "Backup has a valid signature from this user": "Die Sicherung hat eine gültige Signatur dieses Benutzers", "Backup has a invalid signature from this user": "Die Sicherung hat eine ungültige Signatur dieses Benutzers", "Backup has a valid signature from verified session ": "Die Sicherung hat eine gültige Signatur von einer verifizierten Sitzung ", @@ -2004,7 +1835,6 @@ "Failed to connect to integration manager": "Fehler beim Verbinden mit dem Integrationsserver", "Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "Konnte die Einladung nicht zurückziehen. Der Server hat ein vorübergehendes Problem oder du besitzt nicht die nötigen Rechte um die Einladung zurückzuziehen.", "Mark all as read": "Alle als gelesen markieren", - "You don't have permission to delete the alias.": "Du hast nicht die nötigen Rechte um den Alias zu löschen.", "Local address": "Lokale Adresse", "Published Addresses": "Öffentliche Adresse", "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.": "Öffentliche Adressen können von jedem verwendet werden um den Raum zu betreten. Um eine Adresse zu veröffentlichen musst du zunächst eine lokale Adresse anlegen.", @@ -2093,11 +1923,7 @@ "%(severalUsers)smade no changes %(count)s times|one": "%(severalUsers)shaben keine Änderung vorgenommen", "%(oneUser)smade no changes %(count)s times|other": "%(oneUser)shat %(count)s mal keine Änderung vorgenommen", "%(oneUser)smade no changes %(count)s times|one": "%(oneUser)shat keine Änderung vorgenommen", - "Room alias": "Raum Alias", "Some characters not allowed": "Manche Zeichen sind nicht erlaubt", - "Please provide a room alias": "Bitte lege einen Raum Alias an", - "This alias is available to use": "Dieser Alias kann verwendet werden", - "This alias is already in use": "Dieser Alias wird bereits verwendet", "Enter a server name": "Gibt einen Servernamen ein", "Looks good": "Das sieht gut aus", "Can't find this server or its room list": "Kann diesen Server oder seine Raumliste nicht finden", @@ -2134,9 +1960,6 @@ "Something went wrong trying to invite the users.": "Beim Einladen der Benutzer ist ein Fehler aufgetreten.", "Failed to find the following users": "Kann die folgenden Benutzer nicht finden", "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Die folgenden Benutzer konnten nicht eingeladen werden, da sie nicht existieren oder ungültig sind: %(csvNames)s", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "Du hast eine neue Sitzung '%(displayName)s' hinzugefügt, die deine Verschlüsselungsschlüssel anfordert.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Deine nicht verifizierte Sitzung '%(displayName)s' fordert deine Verschlüsselungsschlüssel an.", - "Loading session info...": "Lade Sitzungsinformationen...", "a new master key signature": "Eine neue Hauptschlüssel Signatur", "a new cross-signing key signature": "Eine neue cross-signing Schlüssel Signatur", "a device cross-signing signature": "Eine Geräte Schlüssel Signatur", @@ -2194,7 +2017,6 @@ "Take picture": "Foto machen", "User Status": "Benutzerstatus", "Country Dropdown": "Landauswahl", - "If you've forgotten your recovery key you can .": "Wenn du deinen Wiederherstellungsschlüssel vergessen hast, kannst du .", "Recovery key mismatch": "Nicht übereinstimmende Wiederherstellungsschlüssel", "Incorrect recovery passphrase": "Falsche Wiederherstellungspassphrase", "If you've forgotten your recovery key you can ": "Wenn du deine Wiederherstellungsschlüssel vergessen hast, kannst du ", @@ -2222,7 +2044,6 @@ "Jump to first unread room.": "Zum ersten ungelesenen Raum springen.", "Jump to first invite.": "Zur ersten Einladung springen.", "You have %(count)s unread notifications in a prior version of this room.|other": "Du hast %(count)s ungelesene Benachrichtigungen in einer früheren Version dieses Raums.", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Session verified": "Sitzung verifiziert", "Failed to get autodiscovery configuration from server": "Abrufen der Autodiscovery-Konfiguration vom Server fehlgeschlagen", "Invalid base_url for m.homeserver": "Ungültige base_url für m.homeserver", @@ -2250,7 +2071,6 @@ "%(severalUsers)smade no changes %(count)s times|other": "%(severalUsers)s haben %(count)s mal nichts geändert", "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Das Löschen von Cross-Signing-Schlüsseln ist dauerhaft. Jeder, mit dem du dich verifiziert hast, bekommt Sicherheitswarnungen angezeigt. Du möchtest dies mit ziemlicher Sicherheit nicht tun, es sei denn, du hast jedes Gerät verloren, von dem aus du ein Cross-Signing durchführen kannst.", "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Das Löschen aller Daten aus dieser Sitzung ist dauerhaft. Verschlüsselte Nachrichten gehen verloren, sofern deine Schlüssel nicht gesichert wurden.", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Um zu Überprüfen, ob dieser Sitzung vertraut werden kann, vergewissere dich, ob der in den Benutzereinstellungen auf diesem Gerät angezeigte Schlüssel mit dem folgenden übereinstimmt:", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Wenn du diesen Benutzer verifizierst werden seine Sitzungen für dich und deine Sitzungen für ihn als vertrauenswürdig markiert.", "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.": "Verifiziere dieses Gerät, um es als vertrauenswürdig zu markieren. Das Vertrauen in dieses Gerät gibt dir und anderen Benutzern zusätzliche Sicherheit, wenn ihr Ende-zu-Ende verschlüsselte Nachrichten verwendet.", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Verifiziere dieses Gerät und es wird es als vertrauenswürdig markiert. Benutzer, die sich bei dir verifiziert haben, werden diesem Gerät auch vertrauen.", @@ -2276,7 +2096,6 @@ "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Einige Sitzungsdaten, einschließlich der Verschlüsselungsschlüssel, fehlen. Melde dich ab, wieder an und stelle die Schlüssel aus der Sicherung wieder her um dies zu beheben.", "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.": "Ein Widget unter %(widgetUrl)s möchte deine Identität überprüfen. Wenn du dies zulässt, kann das Widget deine Nutzer-ID überprüfen, jedoch keine Aktionen in deinem Namen ausführen.", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Der sichere Speicher konnte nicht geladen werden. Bitte stelle sicher dass du die richtige Wiederherstellungspassphrase eingegeben hast.", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Zugriff auf sicheren Speicher nicht möglich. Bitte überprüfe, ob du den richtigen Wiederherstellungsschlüssel eingegeben hast.", "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "Die Sicherung konnte nicht mit dem angegebenen Wiederherstellungsschlüssel entschlüsselt werden: Bitte überprüfe ob du den richtigen Wiederherstellungsschlüssel eingegeben hast.", "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Die Sicherung konnte mit diesem Wiederherstellungsschlüssel nicht entschlüsselt werden: Bitte überprüfe ob du den richtigen Wiederherstellungspassphrase eingegeben hast.", "Nice, strong password!": "Super, ein starkes Passwort!", @@ -2288,7 +2107,6 @@ "No identity server is configured: add one in server settings to reset your password.": "Kein Identitätsserver konfiguriert: Füge einen in den Servereinstellungen hinzu, um dein Kennwort zurückzusetzen.", "Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).": "Dein neues Konto (%(newAccountId)s) ist registriert, aber du hast dich bereits in mit einem anderen Konto (%(loggedInUserId)s) angemeldet.", "This requires the latest %(brand)s on your other devices:": "Dies benötigt die neuste Version von %(brand)s auf deinen anderen Geräten:", - "Use Recovery Passphrase or Key": "Benutze deine Wiederherstellungspassphrase oder den Wiederherstellungsschlüssel", "Failed to re-authenticate due to a homeserver problem": "Erneute Authentifizierung aufgrund eines Problems im Heimserver fehlgeschlagen", "Failed to re-authenticate": "Erneute Authentifizierung fehlgeschlagen", "Command Autocomplete": "Auto-Vervollständigung aktivieren", @@ -2296,7 +2114,6 @@ "DuckDuckGo Results": "DuckDuckGo Ergebnisse", "Great! This recovery passphrase looks strong enough.": "Super! Diese Wiederherstellungspassphrase sieht stark genug aus.", "Enter a recovery passphrase": "Gib eine Wiederherstellungspassphrase ein", - "Back up encrypted message keys": "Sichere die Verschlüsselungsschlüssel", "Emoji Autocomplete": "Emoji-Auto-Vervollständigung", "Room Autocomplete": "Raum-Auto-Vervollständigung", "User Autocomplete": "Nutzer-Auto-Vervollständigung", @@ -2304,11 +2121,8 @@ "Restore": "Wiederherstellen", "Your recovery key has been copied to your clipboard, paste it to:": "Dein Wiederherstellungsschlüssel wurde in die Zwischenablage kopiert. Füge ihn ein in:", "Your recovery key is in your Downloads folder.": "Dein Wiederherstellungsschlüssel ist in deinem Download-Ordner.", - "You can now verify your other devices, and other users to keep your chats safe.": "Du kannst jetzt deine anderen Geräte und andere Benutzer verifizieren, um deine Chats zu schützen.", "Upgrade your encryption": "Deine Verschlüsselung aktualisieren", - "You're done!": "Du bist fertig!", "Unable to set up secret storage": "Sicherer Speicher kann nicht eingerichtet werden", - "Enter a recovery passphrase...": "Gib eine Wiederherstellungspassphrase ein...", "Repeat your recovery passphrase...": "Gib die Wiederherstellungspassphrase erneut ein...", "Secure your backup with a recovery passphrase": "Verschlüssele deine Sicherung mit einer Wiederherstellungspassphrase", "Create key backup": "Schlüsselsicherung erstellen", @@ -2334,18 +2148,14 @@ "Indexed messages:": "Indizierte Nachrichten:", "Indexed rooms:": "Indizierte Räume:", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s von %(totalRooms)s", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Setze eine Wiederherstellungspassphrase um deine verschlüsselten Nachrichten nach dem Abmelden wiederherstellen zu können. Diese sollte sich von deinem Kontopasswort unterscheiden:", "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Der Wiederherstellungsschlüssel ist ein Sicherheitsnetz - du kannst damit deine verschlüsselten Nachrichten wiederherstellen wenn du deine Wiederherstellungspassphrase vergessen hast.", "Unable to query secret storage status": "Status des sicheren Speichers kann nicht gelesen werden", "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Wir werden eine verschlüsselte Kopie deiner Schlüssel auf unserem Server speichern. Schütze deine Sicherung mit einer Wiederherstellungspassphrase.", "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.": "Ohne eine Schlüsselsicherung kann dein verschlüsselter Nachrichtenverlauf nicht wiederhergestellt werden wenn du dich abmeldest oder eine andere Sitzung verwendest.", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Der Sicherungsschlüssel ist im sicheren Speicher gespeichert, aber diese Funktion ist in dieser Sitzung nicht aktiviert. Aktiviere Cross-Signing in Labs, um den Status der Schlüsselsicherung zu ändern.", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Es gab einen Fehler beim Ändern des Raum-Aliases. Entweder erlaubt es der Server nicht oder es gab ein temporäres Problem.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Wenn du deine Wiederherstellungspassphrase vergessen hast kannst du deinen Wiederherstellungsschlüssel verwenden oder neue Wiederherstellungsoptionen anlegen.", "Self-verification request": "Selbstverifikationsanfrage", "or another cross-signing capable Matrix client": "oder einen anderen Matrix Client der Cross-signing fähig ist", "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s verwendet einen sicheren Zwischenspeicher für verschlüsselte Nachrichten, damit sie in den Suchergebnissen angezeigt werden:", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Erhalte Zugriff auf deine verschlüsselten Nachrichten und deine Cross-Signing Identität um andere Sitzungen zu verifizieren indem du deine Wiederherstellungspassphrase eingibst.", "Liberate your communication": "Liberate your communication", "Message downloading sleep time(ms)": "Wartezeit zwischen dem Herunterladen von Nachrichten (ms)", "Navigate recent messages to edit": "Letzte Nachrichten zur Bearbeitung ansehen", @@ -2377,10 +2187,7 @@ "Confirm encryption setup": "Bestätige die Einrichtung der Verschlüsselung", "Click the button below to confirm setting up encryption.": "Klick die Schaltfläche unten um die Einstellungen der Verschlüsselung zu bestätigen.", "Font scaling": "Schriftskalierung", - "Use the improved room list (in development - refresh to apply changes)": "Verwende die verbesserte Raumliste (in Entwicklung - neu laden um die Änderungen anzuwenden)", - "Use IRC layout": "Verwende das IRC Layout", "Font size": "Schriftgröße", - "Custom font size": "Eigene Schriftgröße", "IRC display name width": "Breite des IRC Anzeigenamens", "Size must be a number": "Größe muss eine Zahl sein", "Custom font size can only be between %(min)s pt and %(max)s pt": "Eigene Schriftgröße kann nur eine Zahl zwischen %(min)s pt und %(max)s pt sein", @@ -2409,7 +2216,6 @@ "Please verify the room ID or address and try again.": "Bitte überprüfe die Raum-ID oder -adresse und versuche es erneut.", "To link to this room, please add an address.": "Um den Raum zu verlinken, füge bitte eine Adresse hinzu.", "Emoji picker": "Emoji Auswahl", - "Show %(n)s more": "%(n)s weitere anzeigen", "Error creating address": "Fehler beim Anlegen der Adresse", "There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Es gab einen Fehler beim Anlegen der Adresse. Entweder erlaubt es der Server nicht oder es gab ein temporäres Problem.", "You don't have permission to delete the address.": "Du hast nicht die Berechtigung die Adresse zu löschen.", @@ -2433,12 +2239,8 @@ "Switch theme": "Design ändern", "Security & privacy": "Sicherheit & Datenschutz", "All settings": "Alle Einstellungen", - "Archived rooms": "Archivierte Räume", "Feedback": "Feedback", - "Account settings": "Konto-Einstellungen", "Room ID or address of ban list": "Raum-ID oder Adresse der Verbotsliste", - "sent an image.": "hat ein Bild gesendet.", - "You: %(message)s": "Du: %(message)s", "No recently visited rooms": "Keine kürzlich besuchten Räume", "Sort by": "Sortieren nach", "Unread rooms": "Ungelesene Räume", @@ -2452,17 +2254,9 @@ "Room options": "Raumoptionen", "Activity": "Aktivität", "A-Z": "A-Z", - "Recovery Key": "Wiederherstellungsschlüssel", - "This isn't the recovery key for your account": "Das ist nicht der Wiederherstellungsschlüssel für dein Konto", - "This isn't a valid recovery key": "Das ist kein gültiger Wiederherstellungsschlüssel", "Looks good!": "Sieht gut aus!", "Use Recovery Key or Passphrase": "Verwende einen Wiederherstellungsschlüssel oder deine Passphrase", "Use Recovery Key": "Verwende einen Wiederherstellungsschlüssel", - "Enter your Recovery Key or enter a Recovery Passphrase to continue.": "Gib deinen Wiederherstellungsschlüssel oder eine Wiederherstellungspassphrase ein um fortzufahren.", - "Enter your Recovery Key to continue.": "Gib deinen Wiederherstellungsschlüssel ein um fortzufahren.", - "Create a Recovery Key": "Erzeuge einen Wiederherstellungsschlüssel", - "Upgrade your Recovery Key": "Aktualisiere deinen Wiederherstellungsschlüssel", - "Store your Recovery Key": "Speichere deinen Wiederherstellungsschlüssel", "Light": "Hell", "Dark": "Dunkel", "Use the improved room list (will refresh to apply changes)": "Verwende die verbesserte Raumliste (lädt die Anwendung neu)", @@ -2471,7 +2265,6 @@ "Message layout": "Nachrichtenlayout", "Compact": "Kompakt", "Modern": "Modern", - "Enable IRC layout option in the appearance tab": "Option für IRC Layout in den Erscheinungsbild-Einstellungen aktivieren", "Use a system font": "Verwende die System-Schriftart", "System font name": "System-Schriftart", "Customise your appearance": "Verändere das Erscheinungsbild", diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index 9056b4292e..118c87e153 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -19,7 +19,6 @@ "Microphone": "Μικρόφωνο", "Camera": "Κάμερα", "Advanced": "Προχωρημένα", - "Algorithm": "Αλγόριθμος", "Authentication": "Πιστοποίηση", "A new password must be entered.": "Ο νέος κωδικός πρόσβασης πρέπει να εισαχθεί.", "%(senderName)s answered the call.": "Ο χρήστης %(senderName)s απάντησε την κλήση.", @@ -38,7 +37,6 @@ "and %(count)s others...|one": "και ένας ακόμα...", "and %(count)s others...|other": "και %(count)s άλλοι...", "Anyone who knows the room's link, including guests": "Οποιοσδήποτε γνωρίζει τον σύνδεσμο του δωματίου, συμπεριλαμβανομένων των επισκεπτών", - "Blacklisted": "Στη μαύρη λίστα", "Change Password": "Αλλαγή κωδικού πρόσβασης", "%(senderName)s changed their profile picture.": "Ο %(senderName)s άλλαξε τη φωτογραφία του προφίλ του.", "%(senderDisplayName)s changed the room name to %(roomName)s.": "Ο %(senderDisplayName)s άλλαξε το όνομα του δωματίου σε %(roomName)s.", @@ -52,26 +50,18 @@ "Create Room": "Δημιουργία δωματίου", "Cryptography": "Κρυπτογραφία", "Current password": "Τωρινός κωδικός πρόσβασης", - "Curve25519 identity key": "Κλειδί ταυτότητας Curve25519", "Custom level": "Προσαρμοσμένο επίπεδο", "/ddg is not a command": "/ddg δεν αναγνωρίζεται ως εντολή", "Deactivate Account": "Απενεργοποίηση λογαριασμού", "Decrypt %(text)s": "Αποκρυπτογράφηση %(text)s", - "Decryption error": "Σφάλμα αποκρυπτογράφησης", "Default": "Προεπιλογή", - "Device ID": "Αναγνωριστικό συσκευής", - "device id: ": "αναγνωριστικό συσκευής: ", - "Direct chats": "Απευθείας συνομιλίες", "Disinvite": "Ανάκληση πρόσκλησης", "Download %(text)s": "Λήψη %(text)s", - "Ed25519 fingerprint": "Αποτύπωμα Ed25519", "Email": "Ηλεκτρονική διεύθυνση", "Email address": "Ηλεκτρονική διεύθυνση", "Emoji": "Εικονίδια", "%(senderName)s ended the call.": "%(senderName)s τερμάτισε την κλήση.", - "End-to-end encryption information": "Πληροφορίες σχετικά με τη κρυπτογράφηση από άκρο σε άκρο (End-to-end encryption)", "Error decrypting attachment": "Σφάλμα κατά την αποκρυπτογράφηση της επισύναψης", - "Event information": "Πληροφορίες συμβάντος", "Existing Call": "Υπάρχουσα κλήση", "Export": "Εξαγωγή", "Export E2E room keys": "Εξαγωγή κλειδιών κρυπτογράφησης για το δωμάτιο", @@ -110,7 +100,6 @@ "Labs": "Πειραματικά", "Leave room": "Αποχώρηση από το δωμάτιο", "%(targetName)s left the room.": "Ο χρήστης %(targetName)s έφυγε από το δωμάτιο.", - "Local addresses for this room:": "Τοπική διεύθυνση για το δωμάτιο:", "Logout": "Αποσύνδεση", "Low priority": "Χαμηλής προτεραιότητας", "Click here to fix": "Κάνε κλικ εδώ για διόρθωση", @@ -121,10 +110,8 @@ "Join Room": "Είσοδος σε δωμάτιο", "Moderator": "Συντονιστής", "Name": "Όνομα", - "New address (e.g. #foo:%(localDomain)s)": "Νέα διεύθυνση (e.g. #όνομα:%(localDomain)s)", "New passwords don't match": "Οι νέοι κωδικοί πρόσβασης είναι διαφορετικοί", "New passwords must match each other.": "Οι νέοι κωδικοί πρόσβασης πρέπει να ταιριάζουν.", - "none": "κανένα", "(not supported by this browser)": "(δεν υποστηρίζεται από τον περιηγητή)", "": "<δεν υποστηρίζεται>", "No more results": "Δεν υπάρχουν αποτελέσματα", @@ -145,7 +132,6 @@ "Sign in": "Συνδέση", "Sign out": "Αποσύνδεση", "Someone": "Κάποιος", - "Start a chat": "Έναρξη συνομιλίας", "This email address is already in use": "Η διεύθυνση ηλ. αλληλογραφίας χρησιμοποιείται ήδη", "This email address was not found": "Δεν βρέθηκε η διεύθυνση ηλ. αλληλογραφίας", "Success": "Επιτυχία", @@ -161,7 +147,6 @@ "Add": "Προσθήκη", "Admin Tools": "Εργαλεία διαχειριστή", "No media permissions": "Χωρίς δικαιώματα πολυμέσων", - "Alias (optional)": "Ψευδώνυμο (προαιρετικό)", "Ban": "Αποκλεισμός", "Banned users": "Αποκλεισμένοι χρήστες", "Call Timeout": "Λήξη χρόνου κλήσης", @@ -172,12 +157,9 @@ "Click to unmute audio": "Κάντε κλικ για άρση σίγασης του ήχου", "Custom": "Προσαρμοσμένο", "Decline": "Απόρριψη", - "Disable Notifications": "Απενεργοποίηση ειδοποιήσεων", "Drop File Here": "Αποθέστε εδώ το αρχείο", - "Enable Notifications": "Ενεργοποίηση ειδοποιήσεων", "Enter passphrase": "Εισαγωγή συνθηματικού", "Failed to set display name": "Δεν ήταν δυνατό ο ορισμός του ονόματος εμφάνισης", - "Failed to toggle moderator status": "Δεν ήταν δυνατή η εναλλαγή κατάστασης του συντονιστή", "Failed to upload profile picture!": "Δεν ήταν δυνατή η αποστολή της εικόνας προφίλ!", "Home": "Αρχική", "Last seen": "Τελευταία εμφάνιση", @@ -190,17 +172,14 @@ "Profile": "Προφίλ", "Public Chat": "Δημόσια συνομιλία", "Reason": "Αιτία", - "Revoke Moderator": "Ανάκληση συντονιστή", "%(targetName)s rejected the invitation.": "Ο %(targetName)s απέρριψε την πρόσκληση.", "Reject invitation": "Απόρριψη πρόσκλησης", - "Remote addresses for this room:": "Απομακρυσμένες διευθύνσεις για το δωμάτιο:", "Results from DuckDuckGo": "Αποτελέσματα από DuckDuckGo", "Return to login screen": "Επιστροφή στην οθόνη σύνδεσης", "Room %(roomId)s not visible": "Το δωμάτιο %(roomId)s δεν είναι ορατό", "%(roomName)s does not exist.": "Το %(roomName)s δεν υπάρχει.", "Searches DuckDuckGo for results": "Γίνεται αναζήτηση στο DuckDuckGo για αποτελέσματα", "Seen by %(userName)s at %(dateTime)s": "Διαβάστηκε από τον/την %(userName)s στις %(dateTime)s", - "Send anyway": "Αποστολή ούτως ή άλλως", "Send Reset Email": "Αποστολή μηνύματος επαναφοράς", "%(senderDisplayName)s sent an image.": "Ο %(senderDisplayName)s έστειλε μια φωτογραφία.", "Session ID": "Αναγνωριστικό συνεδρίας", @@ -217,19 +196,14 @@ "Unban": "Άρση αποκλεισμού", "%(senderName)s unbanned %(targetName)s.": "Ο χρήστης %(senderName)s έδιωξε τον χρήστη %(targetName)s.", "Unable to enable Notifications": "Αδυναμία ενεργοποίησης των ειδοποιήσεων", - "unencrypted": "μη κρυπτογραφημένο", "unknown caller": "άγνωστος καλών", - "unknown device": "άγνωστη συσκευή", - "Unknown room %(roomId)s": "Άγνωστο δωμάτιο %(roomId)s", "Unmute": "Άρση σίγασης", "Unnamed Room": "Ανώνυμο δωμάτιο", - "Unrecognised room alias:": "Μη αναγνωρίσιμο ψευδώνυμο:", "Upload avatar": "Αποστολή προσωπικής εικόνας", "Upload Failed": "Απέτυχε η αποστολή", "Upload file": "Αποστολή αρχείου", "Upload new:": "Αποστολή νέου:", "Usage": "Χρήση", - "User ID": "Αναγνωριστικό χρήστη", "Username invalid: %(errMessage)s": "Μη έγκυρο όνομα χρήστη: %(errMessage)s", "Users": "Χρήστες", "Video call": "Βιντεοκλήση", @@ -264,7 +238,6 @@ "Upload an avatar:": "Αποστολή προσωπικής εικόνας:", "This server does not support authentication with a phone number.": "Αυτός ο διακομιστής δεν υποστηρίζει πιστοποίηση με αριθμό τηλεφώνου.", "An error occurred: %(error_string)s": "Προέκυψε ένα σφάλμα: %(error_string)s", - "Make Moderator": "Ορισμός συντονιστή", "Room": "Δωμάτιο", "(~%(count)s results)|one": "(~%(count)s αποτέλεσμα)", "(~%(count)s results)|other": "(~%(count)s αποτελέσματα)", @@ -281,11 +254,8 @@ "Confirm Removal": "Επιβεβαίωση αφαίρεσης", "Unknown error": "Άγνωστο σφάλμα", "Incorrect password": "Λανθασμένος κωδικός πρόσβασης", - "To continue, please enter your password.": "Για να συνεχίσετε, παρακαλούμε πληκτρολογήστε τον κωδικό πρόσβασής σας.", "Unable to restore session": "Αδυναμία επαναφοράς συνεδρίας", "Unknown Address": "Άγνωστη διεύθυνση", - "Blacklist": "Μαύρη λίστα", - "Verify...": "Επιβεβαίωση...", "ex. @bob:example.com": "π.χ @bob:example.com", "Add User": "Προσθήκη χρήστη", "Token incorrect": "Εσφαλμένο διακριτικό", @@ -304,7 +274,6 @@ "Username available": "Διαθέσιμο όνομα χρήστη", "Username not available": "Μη διαθέσιμο όνομα χρήστη", "Something went wrong!": "Κάτι πήγε στραβά!", - "Could not connect to the integration server": "Αδυναμία σύνδεσης στον διακομιστή ενσωμάτωσης", "Error: Problem communicating with the given homeserver.": "Σφάλμα: πρόβλημα κατά την επικοινωνία με τον ορισμένο διακομιστή.", "Failed to ban user": "Δεν ήταν δυνατό ο αποκλεισμός του χρήστη", "Failed to change power level": "Δεν ήταν δυνατή η αλλαγή του επιπέδου δύναμης", @@ -325,7 +294,6 @@ "%(senderName)s made future room history visible to unknown (%(visibility)s).": "Ο %(senderName)s έκανε το μελλοντικό ιστορικό του δωματίου δημόσιο άγνωστο (%(visibility)s).", "Missing user_id in request": "Λείπει το user_id στο αίτημα", "not specified": "μη καθορισμένο", - "NOT verified": "ΧΩΡΙΣ επαλήθευση", "No display name": "Χωρίς όνομα", "No users have specific privileges in this room": "Κανένας χρήστης δεν έχει συγκεκριμένα δικαιώματα σε αυτό το δωμάτιο", "Only people who have been invited": "Μόνο άτομα που έχουν προσκληθεί", @@ -335,7 +303,6 @@ "%(brand)s does not have permission to send you notifications - please check your browser settings": "Το %(brand)s δεν έχει δικαιώματα για αποστολή ειδοποιήσεων - παρακαλούμε ελέγξτε τις ρυθμίσεις του περιηγητή σας", "%(brand)s was not given permission to send notifications - please try again": "Δεν δόθηκαν δικαιώματα αποστολής ειδοποιήσεων στο %(brand)s - παρακαλούμε προσπαθήστε ξανά", "%(roomName)s is not accessible at this time.": "Το %(roomName)s δεν είναι προσβάσιμο αυτή τη στιγμή.", - "Scroll to bottom of page": "Μετάβαση στο τέλος της σελίδας", "Server may be unavailable, overloaded, or search timed out :(": "Ο διακομιστής μπορεί να είναι μη διαθέσιμος, υπερφορτωμένος, ή να έχει λήξει η αναζήτηση :(", "Server may be unavailable, overloaded, or you hit a bug.": "Ο διακομιστής μπορεί να είναι μη διαθέσιμος, υπερφορτωμένος, ή να πέσατε σε ένα σφάλμα.", "Server unavailable, overloaded, or something else went wrong.": "Ο διακομιστής μπορεί να είναι μη διαθέσιμος, υπερφορτωμένος, ή κάτι άλλο να πήγε στραβά.", @@ -346,8 +313,6 @@ "Uploading %(filename)s and %(count)s others|other": "Γίνεται αποστολή του %(filename)s και %(count)s υπολοίπων", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (δύναμη %(powerLevelNumber)s)", "Verification Pending": "Εκκρεμεί επιβεβαίωση", - "Verification": "Επιβεβαίωση", - "verified": "επαληθεύτηκε", "Verified key": "Επιβεβαιωμένο κλειδί", "VoIP conference finished.": "Ολοκληρώθηκε η συνδιάσκεψη VoIP.", "VoIP conference started.": "Ξεκίνησησε η συνδιάσκεψη VoIP.", @@ -366,10 +331,8 @@ "Analytics": "Αναλυτικά δεδομένα", "%(brand)s collects anonymous analytics to allow us to improve the application.": "Το %(brand)s συλλέγει ανώνυμα δεδομένα επιτρέποντας μας να βελτιώσουμε την εφαρμογή.", "Failed to invite": "Δεν ήταν δυνατή η πρόσκληση", - "I verify that the keys match": "Επιβεβαιώνω πως ταιριάζουν τα κλειδιά", "Please check your email to continue registration.": "Παρακαλούμε ελέγξτε την ηλεκτρονική σας αλληλογραφία για να συνεχίσετε με την εγγραφή.", "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Αν δεν ορίσετε μια διεύθυνση ηλεκτρονικής αλληλογραφίας, δεν θα θα μπορείτε να επαναφέρετε τον κωδικό πρόσβασης σας. Είστε σίγουροι;", - "Removed or unknown message type": "Αφαιρέθηκε ή άγνωστος τύπος μηνύματος", " (unsupported)": " (μη υποστηριζόμενο)", "%(senderDisplayName)s changed the room avatar to ": "Ο %(senderDisplayName)s άλλαξε την εικόνα του δωματίου σε ", "You may need to manually permit %(brand)s to access your microphone/webcam": "Μπορεί να χρειαστεί να ορίσετε χειροκίνητα την πρόσβαση του %(brand)s στο μικρόφωνο/κάμερα", @@ -393,7 +356,6 @@ "Failed to invite the following users to the %(roomName)s room:": "Δεν ήταν δυνατή η πρόσκληση των παρακάτω χρηστών στο δωμάτιο %(roomName)s:", "Deops user with given id": "Deop χρήστη με το συγκεκριμένο αναγνωριστικό", "Join as voice or video.": "Συμμετάσχετε με φωνή ή βίντεο.", - "Joins room with given alias": "Συνδέεστε στο δωμάτιο με δοσμένο ψευδώνυμο", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Εμφάνιση χρονικών σημάνσεων σε 12ωρη μορφή ώρας (π.χ. 2:30 μ.μ.)", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Η διεύθυνση της ηλ. αλληλογραφίας σας δεν φαίνεται να συσχετίζεται με μια ταυτότητα Matrix σε αυτόν τον Διακομιστή Φιλοξενίας.", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Δεν θα μπορέσετε να αναιρέσετε αυτήν την αλλαγή καθώς προωθείτε τον χρήστη να έχει το ίδιο επίπεδο δύναμης με τον εαυτό σας.", @@ -407,16 +369,12 @@ "Failed to kick": "Δεν ήταν δυνατή η απομάκρυνση", "(no answer)": "(χωρίς απάντηση)", "(unknown failure: %(reason)s)": "(άγνωστο σφάλμα: %(reason)s)", - "Unblacklist": "Άρση αποκλεισμού", - "Unverify": "Άρση επιβεβαίωσης", "Ongoing conference call%(supportedText)s.": "Κλήση συνδιάσκεψης σε εξέλιξη %(supportedText)s.", "Your browser does not support the required cryptography extensions": "Ο περιηγητής σας δεν υποστηρίζει τα απαιτούμενα πρόσθετα κρυπτογράφησης", "Not a valid %(brand)s keyfile": "Μη έγκυρο αρχείο κλειδιού %(brand)s", "Authentication check failed: incorrect password?": "Αποτυχία ελέγχου πιστοποίησης: λανθασμένος κωδικός πρόσβασης;", - "Claimed Ed25519 fingerprint key": "Απαιτήθηκε κλειδί αποτυπώματος Ed25519", "Displays action": "Εμφανίζει την ενέργεια", "To use it, just wait for autocomplete results to load and tab through them.": "Για να το χρησιμοποιήσετε, απλά περιμένετε μέχρι να φορτωθούν τα αποτέλεσμα αυτόματης συμπλήρωσης. Έπειτα επιλέξτε ένα από αυτά χρησιμοποιώντας τον στηλοθέτη.", - "Use compact timeline layout": "Χρήση συμπαγούς διάταξης χρονολογίου", "(could not connect media)": "(αδυναμία σύνδεσης με το πολυμέσο)", "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.": "Αυτή η διαδικασία σας επιτρέπει να εξαγάγετε τα κλειδιά για τα μηνύματα που έχετε λάβει σε κρυπτογραφημένα δωμάτια σε ένα τοπικό αρχείο. Στη συνέχεια, θα μπορέσετε να εισάγετε το αρχείο σε άλλο πρόγραμμα του Matrix, έτσι ώστε το πρόγραμμα να είναι σε θέση να αποκρυπτογραφήσει αυτά τα μηνύματα.", "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.": "Το αρχείο εξαγωγής θα επιτρέψει σε οποιονδήποτε που μπορεί να το διαβάσει να αποκρυπτογραφήσει κρυπτογραφημένα μηνύματα που εσείς μπορείτε να δείτε, οπότε θα πρέπει να είστε προσεκτικοί για να το κρατήσετε ασφαλές. Για να βοηθήσετε με αυτό, θα πρέπει να εισαγάγετε ένα συνθηματικό, το οποία θα χρησιμοποιηθεί για την κρυπτογράφηση των εξαγόμενων δεδομένων. Η εισαγωγή δεδομένων θα είναι δυνατή χρησιμοποιώντας μόνο το ίδιο συνθηματικό.", @@ -427,13 +385,8 @@ "Do you want to set an email address?": "Θέλετε να ορίσετε μια διεύθυνση ηλεκτρονικής αλληλογραφίας;", "This will allow you to reset your password and receive notifications.": "Αυτό θα σας επιτρέψει να επαναφέρετε τον κωδικό πρόσβαση σας και θα μπορείτε να λαμβάνετε ειδοποιήσεις.", "Skip": "Παράβλεψη", - "Start verification": "Έναρξη επιβεβαίωσης", - "Share without verifying": "Κοινή χρήση χωρίς επιβεβαίωση", - "Ignore request": "Παράβλεψη αιτήματος", - "Encryption key request": "Αίτημα κλειδιού κρυπτογράφησης", "Check for update": "Έλεγχος για ενημέρωση", "Fetching third party location failed": "Η λήψη τοποθεσίας απέτυχε", - "A new version of %(brand)s is available.": "Μία νέα έκδοση του %(brand)s είναι διαθέσιμη.", "All notifications are currently disabled for all targets.": "Όλες οι ειδοποιήσεις είναι προς το παρόν απενεργοποιημένες για όλες τις συσκευές.", "Uploading report": "Αποστολή αναφοράς", "Sunday": "Κυριακή", @@ -453,8 +406,6 @@ "Leave": "Αποχώρηση", "Uploaded on %(date)s by %(user)s": "Απεστάλη στις %(date)s από %(user)s", "Advanced notification settings": "Προχωρημένες ρυθμίσεις ειδοποιήσεων", - "delete the alias.": "διέγραψε το ψευδώνυμο.", - "To return to your account in future you need to set a password": "Για να επιστρέψετε στον λογαριασμό σας μελλοντικα πρέπει να ορίσετε έναν κωδικό πρόσβασης", "Forget": "Παράλειψη", "World readable": "Εμφανές σε όλους", "You cannot delete this image. (%(code)s)": "Δεν μπορείτε να διαγράψετε αυτή την εικόνα. (%(code)s)", @@ -479,7 +430,6 @@ "No update available.": "Δεν υπάρχει διαθέσιμη ενημέρωση.", "Noisy": "Δυνατά", "Collecting app version information": "Συγκέντρωση πληροφοριών σχετικά με την έκδοση της εφαρμογής", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Διαγραφή του ψευδώνυμου %(alias)s και αφαίρεση του %(name)s από το ευρετήριο;", "Keywords": "Λέξεις κλειδιά", "Enable notifications for this account": "Ενεργοποίηση ειδοποιήσεων για τον λογαριασμό", "Messages containing keywords": "Μηνύματα που περιέχουν λέξεις κλειδιά", @@ -524,7 +474,6 @@ "Search…": "Αναζήτηση…", "Unhide Preview": "Προεπισκόπηση", "Unable to join network": "Δεν είναι δυνατή η σύνδεση στο δίκτυο", - "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 αλλά ισχύουν κανονικά", "Sorry, your browser is not able to run %(brand)s.": "Λυπούμαστε, αλλά ο περιηγητές σας δεν υποστηρίζεται από το %(brand)s.", "Messages in group chats": "Μηνύματα σε ομαδικές συνομιλίες", "Yesterday": "Χθές", @@ -545,8 +494,6 @@ "Quote": "Παράθεση", "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!": "Με τον τρέχον περιηγητή, η εμφάνιση και η αίσθηση της εφαρμογής ενδέχεται να είναι εντελώς εσφαλμένη και ορισμένες ή όλες οι λειτουργίες ενδέχεται να μην λειτουργούν. Εάν θέλετε να το δοκιμάσετε ούτως ή άλλως μπορείτε να συνεχίσετε, αλλά είστε μόνοι σας σε ό, τι αφορά τα προβλήματα που μπορεί να αντιμετωπίσετε!", "Checking for an update...": "Γίνεται έλεγχος για ενημέρωση...", - "There are advanced notifications which are not shown here": "Υπάρχουν προχωρημένες ειδοποιήσεις οι οποίες δεν εμφανίζονται εδώ", - "Your identity server's URL": "Το URL του διακομιστή ταυτοποίησής σας", "The platform you're on": "Η πλατφόρμα στην οποία βρίσκεστε", "The version of %(brand)s": "Η έκδοση του %(brand)s", "Your language of choice": "Η γλώσσα επιλογής σας", @@ -557,11 +504,6 @@ "The information being sent to us to help make %(brand)s better includes:": "Οι πληροφορίες που στέλνονται σε εμάς με σκοπό την βελτίωση του %(brand)s περιλαμβάνουν:", "Call Failed": "Η κλήση απέτυχε", "e.g. %(exampleValue)s": "π.χ. %(exampleValue)s", - "Review Devices": "Ανασκόπηση συσκευών", - "Call Anyway": "Πραγματοποίηση Κλήσης όπως και να 'χει", - "Answer Anyway": "Απάντηση όπως και να 'χει", - "Call": "Κλήση", - "Answer": "Απάντηση", "AM": "ΠΜ", "PM": "ΜΜ", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s", @@ -577,7 +519,6 @@ "Failed to invite users to %(groupId)s": "Αποτυχία πρόσκλησης χρηστών στο %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "Αποτυχία προσθήκης στο %(groupId)s των δωματίων:", "Show these rooms to non-members on the community page and room list?": "Εμφάνιση αυτών των δωματίων σε μη-μέλη στην σελίδα της κοινότητας και στη λίστα δωματίων;", - "Room name or alias": "Όνομα η ψευδώνυμο δωματίου", "Restricted": "Περιορισμένο/η", "Unable to create widget.": "Αδυναμία δημιουργίας γραφικού στοιχείου.", "You are not in this room.": "Δεν είστε μέλος αυτού του δωματίου.", @@ -600,11 +541,8 @@ "Disinvite this user?": "Απόσυρση της πρόσκλησης αυτού του χρήστη;", "Mention": "Αναφορά", "Invite": "Πρόσκληση", - "User Options": "Επιλογές Χρήστη", "Send an encrypted reply…": "Αποστολή κρυπτογραφημένης απάντησης…", - "Send a reply (unencrypted)…": "Αποστολή απάντησης (μη κρυπτογραφημένης)…", "Send an encrypted message…": "Αποστολή κρυπτογραφημένου μηνύματος…", - "Send a message (unencrypted)…": "Αποστολή μηνύματος (μη κρυπτογραφημένου)…", "Unpin Message": "Ξεκαρφίτσωμα μηνύματος", "Jump to message": "Πηγαίντε στο μήνυμα", "No pinned messages.": "Κανένα καρφιτσωμένο μήνυμα.", @@ -626,13 +564,11 @@ "Which officially provided instance you are using, if any": "Ποιά επίσημα παρεχόμενη έκδοση χρησιμοποιείτε, εάν χρησιμοποιείτε κάποια", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Χωρίς να έχει σημασία εάν χρησιμοποιείτε την λειτουργία \"Πλούσιο Κείμενο\" του Επεξεργαστή Πλουσίου Κειμένου", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Χωρίς να έχει σημασία εάν χρησιμοποιείτε το χαρακτηριστικό 'ψίχουλα' (τα άβαταρ πάνω από την λίστα δωματίων)", - "Your User Agent": "Ο Πράκτορας Χρήστη σας", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Όπου αυτή η σελίδα περιέχει αναγνωρίσιμες πληροφορίες, όπως ταυτότητα δωματίου, χρήστη ή ομάδας, αυτά τα δεδομένα αφαιρούνται πριν πραγματοποιηθεί αποστολή στον διακομιστή.", "Call failed due to misconfigured server": "Η κλήση απέτυχε λόγω της λανθασμένης διάρθρωσης του διακομιστή", "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Παρακαλείστε να ρωτήσετε τον διαχειριστή του διακομιστή φιλοξενίας σας (%(homeserverDomain)s) να ρυθμίσουν έναν διακομιστή πρωτοκόλλου TURN ώστε οι κλήσεις να λειτουργούν απρόσκοπτα.", "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.": "Εναλλακτικά, δοκιμάστε να χρησιμοποιήσετε τον δημόσιο διακομιστή στο turn.matrix.org, αλλά δεν θα είναι το ίδιο απρόσκοπτο, και θα κοινοποιεί την διεύθυνση IP σας με τον διακομιστή. Μπορείτε επίσης να το διαχειριστείτε στις Ρυθμίσεις.", "Try using turn.matrix.org": "Δοκιμάστε το turn.matrix.org", - "A conference call could not be started because the integrations server is not available": "Μια κλήση συνδιάσκεψης δεν μπορούσε να ξεκινήσει διότι ο διακομιστής ενσωμάτωσης είναι μη διαθέσιμος", "Call in Progress": "Κλήση σε Εξέλιξη", "A call is currently being placed!": "Μια κλήση πραγματοποιείτε τώρα!", "A call is already in progress!": "Μια κλήση είναι σε εξέλιξη ήδη!", @@ -649,8 +585,6 @@ "Only continue if you trust the owner of the server.": "Συνεχίστε μόνο εάν εμπιστεύεστε τον ιδιοκτήτη του διακομιστή.", "Trust": "Εμπιστοσύνη", "Unable to load! Check your network connectivity and try again.": "Αδυναμία φόρτωσης! Ελέγξτε την σύνδεση του δικτύου και προσπαθήστε ξανά.", - "Registration Required": "Απαιτείτε Εγγραφή", - "You need to register to do this. Would you like to register now?": "Χρειάζεται να γίνει εγγραφή για αυτό. Θα θέλατε να κάνετε εγγραφή τώρα;", "Failed to invite users to the room:": "Αποτυχία πρόσκλησης χρηστών στο δωμάτιο:", "Missing roomId.": "Λείπει η ταυτότητα δωματίου.", "Messages": "Μηνύματα", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index fd24ddc486..a4249a93eb 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -16,7 +16,6 @@ "Microphone": "Microphone", "Camera": "Camera", "Advanced": "Advanced", - "Algorithm": "Algorithm", "Always show message timestamps": "Always show message timestamps", "Authentication": "Authentication", "%(items)s and %(lastItem)s": "%(items)s and %(lastItem)s", @@ -37,7 +36,6 @@ "Ban": "Ban", "Banned users": "Banned users", "Bans user with given id": "Bans user with given id", - "Blacklisted": "Blacklisted", "Call Timeout": "Call Timeout", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.", "Change Password": "Change Password", @@ -47,7 +45,6 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s removed the room name.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s changed the topic to \"%(topic)s\".", "Changes your display nickname": "Changes your display nickname", - "Claimed Ed25519 fingerprint key": "Claimed Ed25519 fingerprint key", "Click here to fix": "Click here to fix", "Click to mute audio": "Click to mute audio", "Click to mute video": "Click to mute video", @@ -58,35 +55,26 @@ "Commands": "Commands", "Confirm password": "Confirm password", "Continue": "Continue", - "Could not connect to the integration server": "Could not connect to the integration server", "Create Room": "Create Room", "Cryptography": "Cryptography", "Current password": "Current password", - "Curve25519 identity key": "Curve25519 identity key", "Custom level": "Custom level", "/ddg is not a command": "/ddg is not a command", "Deactivate Account": "Deactivate Account", "Decrypt %(text)s": "Decrypt %(text)s", - "Decryption error": "Decryption error", "Deops user with given id": "Deops user with given id", "Default": "Default", "Delete widget": "Delete widget", - "Device ID": "Device ID", - "device id: ": "device id: ", - "Direct chats": "Direct chats", "Disinvite": "Disinvite", "Displays action": "Displays action", "Download %(text)s": "Download %(text)s", - "Ed25519 fingerprint": "Ed25519 fingerprint", "Edit": "Edit", "Email": "Email", "Email address": "Email address", "Emoji": "Emoji", "%(senderName)s ended the call.": "%(senderName)s ended the call.", - "End-to-end encryption information": "End-to-end encryption information", "Error": "Error", "Error decrypting attachment": "Error decrypting attachment", - "Event information": "Event information", "Existing Call": "Existing Call", "Export": "Export", "Export E2E room keys": "Export E2E room keys", @@ -106,7 +94,6 @@ "Failed to send email": "Failed to send email", "Failed to send request.": "Failed to send request.", "Failed to set display name": "Failed to set display name", - "Failed to toggle moderator status": "Failed to toggle moderator status", "Failed to unban": "Failed to unban", "Failed to verify email address: make sure you clicked the link in the email": "Failed to verify email address: make sure you clicked the link in the email", "Failure to create room": "Failure to create room", @@ -136,7 +123,6 @@ "Sign in with": "Sign in with", "Join Room": "Join Room", "%(targetName)s joined the room.": "%(targetName)s joined the room.", - "Joins room with given alias": "Joins room with given alias", "Jump to first unread message.": "Jump to first unread message.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s kicked %(targetName)s.", "Kick": "Kick", @@ -144,7 +130,6 @@ "Labs": "Labs", "Ignore": "Ignore", "Unignore": "Unignore", - "User Options": "User Options", "You are now ignoring %(userId)s": "You are now ignoring %(userId)s", "You are no longer ignoring %(userId)s": "You are no longer ignoring %(userId)s", "Unignored user": "Unignored user", @@ -154,7 +139,6 @@ "Leave room": "Leave room", "%(targetName)s left the room.": "%(targetName)s left the room.", "Publish this room to the public in %(domain)s's room directory?": "Publish this room to the public in %(domain)s's room directory?", - "Local addresses for this room:": "Local addresses for this room:", "Logout": "Logout", "Low priority": "Low priority", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s made future room history visible to all room members, from the point they are invited.", @@ -168,15 +152,12 @@ "Moderator": "Moderator", "Mute": "Mute", "Name": "Name", - "New address (e.g. #foo:%(localDomain)s)": "New address (e.g. #foo:%(localDomain)s)", "New passwords don't match": "New passwords don't match", "New passwords must match each other.": "New passwords must match each other.", - "none": "none", "not specified": "not specified", "Notifications": "Notifications", "(not supported by this browser)": "(not supported by this browser)", "": "", - "NOT verified": "NOT verified", "No more results": "No more results", "No results": "No results", "No users have specific privileges in this room": "No users have specific privileges in this room", @@ -194,11 +175,9 @@ "Privileged Users": "Privileged Users", "Profile": "Profile", "Reason": "Reason", - "Revoke Moderator": "Revoke Moderator", "Register": "Register", "%(targetName)s rejected the invitation.": "%(targetName)s rejected the invitation.", "Reject invitation": "Reject invitation", - "Remote addresses for this room:": "Remote addresses for this room:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s removed their display name (%(oldDisplayName)s).", "%(senderName)s removed their profile picture.": "%(senderName)s removed their profile picture.", "Remove": "Remove", @@ -212,7 +191,6 @@ "Room Colour": "Room Color", "Rooms": "Rooms", "Save": "Save", - "Scroll to bottom of page": "Scroll to bottom of page", "Search": "Search", "Search failed": "Search failed", "Searches DuckDuckGo for results": "Searches DuckDuckGo for results", @@ -233,7 +211,6 @@ "Sign out": "Sign out", "%(count)s of your messages have not been sent.|other": "Some of your messages have not been sent.", "Someone": "Someone", - "Start a chat": "Start a chat", "Submit": "Submit", "Success": "Success", "This email address is already in use": "This email address is already in use", @@ -255,22 +232,14 @@ "%(senderName)s unbanned %(targetName)s.": "%(senderName)s unbanned %(targetName)s.", "Unable to capture screen": "Unable to capture screen", "Unable to enable Notifications": "Unable to enable Notifications", - "unencrypted": "unencrypted", - "unknown device": "unknown device", "unknown error code": "unknown error code", - "Unknown room %(roomId)s": "Unknown room %(roomId)s", "Unmute": "Unmute", - "Unrecognised room alias:": "Unrecognized room alias:", "Upload avatar": "Upload avatar", "Upload Failed": "Upload Failed", "Upload file": "Upload file", "Usage": "Usage", - "Use compact timeline layout": "Use compact timeline layout", - "User ID": "User ID", "Users": "Users", "Verification Pending": "Verification Pending", - "Verification": "Verification", - "verified": "verified", "Verified key": "Verified key", "Video call": "Video call", "Voice call": "Voice call", @@ -323,7 +292,6 @@ "Upload an avatar:": "Upload an avatar:", "This server does not support authentication with a phone number.": "This server does not support authentication with a phone number.", "An error occurred: %(error_string)s": "An error occurred: %(error_string)s", - "Make Moderator": "Make Moderator", "There are no visible files in this room": "There are no visible files in this room", "Room": "Room", "Connectivity to the server has been lost.": "Connectivity to the server has been lost.", @@ -355,15 +323,9 @@ "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.": "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.", "Unknown error": "Unknown error", "Incorrect password": "Incorrect password", - "To continue, please enter your password.": "To continue, please enter your password.", - "I verify that the keys match": "I verify that the keys match", "Unable to restore session": "Unable to restore session", "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.": "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.", "Unknown Address": "Unknown Address", - "Unblacklist": "Unblacklist", - "Blacklist": "Blacklist", - "Unverify": "Unverify", - "Verify...": "Verify...", "ex. @bob:example.com": "ex. @bob:example.com", "Add User": "Add User", "Custom Server Options": "Custom Server Options", @@ -378,7 +340,6 @@ "Error decrypting video": "Error decrypting video", "Add an Integration": "Add an Integration", "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?": "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?", - "Removed or unknown message type": "Removed or unknown message type", "URL Previews": "URL Previews", "Drop file here to upload": "Drop file here to upload", " (unsupported)": " (unsupported)", @@ -393,13 +354,10 @@ "Accept": "Accept", "Add": "Add", "Admin Tools": "Admin Tools", - "Alias (optional)": "Alias (optional)", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.", "Close": "Close", "Custom": "Custom", "Decline": "Decline", - "Disable Notifications": "Disable Notifications", - "Enable Notifications": "Enable Notifications", "Create new room": "Create new room", "Room directory": "Room directory", "Start chat": "Start chat", @@ -419,7 +377,6 @@ "%(roomName)s does not exist.": "%(roomName)s does not exist.", "%(roomName)s is not accessible at this time.": "%(roomName)s is not accessible at this time.", "Seen by %(userName)s at %(dateTime)s": "Seen by %(userName)s at %(dateTime)s", - "Send anyway": "Send anyway", "Start authentication": "Start authentication", "The phone number entered looks invalid": "The phone number entered looks invalid", "This room": "This room", @@ -446,10 +403,6 @@ "Do you want to set an email address?": "Do you want to set an email address?", "This will allow you to reset your password and receive notifications.": "This will allow you to reset your password and receive notifications.", "Skip": "Skip", - "Start verification": "Start verification", - "Share without verifying": "Share without verifying", - "Ignore request": "Ignore request", - "Encryption key request": "Encryption key request", "Check for update": "Check for update", "Allow": "Allow", "Cannot add any more widgets": "Cannot add any more widgets", @@ -461,7 +414,6 @@ "Unable to create widget.": "Unable to create widget.", "You are not in this room.": "You are not in this room.", "You do not have permission to do that in this room.": "You do not have permission to do that in this room.", - "Message removed by %(userId)s": "Message removed by %(userId)s", "Example": "Example", "Create": "Create", "Pinned Messages": "Pinned Messages", @@ -473,7 +425,6 @@ "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget removed by %(senderName)s", "%(senderName)s changed the pinned messages for the room.": "%(senderName)s changed the pinned messages for the room.", "Fetching third party location failed": "Fetching third party location failed", - "A new version of %(brand)s is available.": "A new version of %(brand)s is available.", "All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.", "Uploading report": "Uploading report", "Sunday": "Sunday", @@ -491,8 +442,6 @@ "Waiting for response from server": "Waiting for response from server", "Leave": "Leave", "Advanced notification settings": "Advanced notification settings", - "delete the alias.": "delete the alias.", - "To return to your account in future you need to set a password": "To return to your account in future you need to set a password", "Forget": "Forget", "World readable": "World readable", "You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)", @@ -518,7 +467,6 @@ "Resend": "Resend", "Files": "Files", "Collecting app version information": "Collecting app version information", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?", "Keywords": "Keywords", "Unpin Message": "Unpin Message", "Enable notifications for this account": "Enable notifications for this account", @@ -565,7 +513,6 @@ "Forward Message": "Forward Message", "Unhide Preview": "Unhide Preview", "Unable to join network": "Unable to join network", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply", "Sorry, your browser is not able to run %(brand)s.": "Sorry, your browser is not able to run %(brand)s.", "Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s", "Messages in group chats": "Messages in group chats", @@ -587,27 +534,19 @@ "View Source": "View Source", "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!": "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!", "Checking for an update...": "Checking for an update...", - "There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here", "The platform you're on": "The platform you're on", "The version of %(brand)s": "The version of %(brand)s", "Your language of choice": "Your language of choice", "Which officially provided instance you are using, if any": "Which officially provided instance you are using, if any", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Whether or not you're using the Richtext mode of the Rich Text Editor", "Your homeserver's URL": "Your homeserver's URL", - "Your identity server's URL": "Your identity server's URL", "e.g. %(exampleValue)s": "e.g. %(exampleValue)s", "Every page you use in the app": "Every page you use in the app", "e.g. ": "e.g. ", - "Your User Agent": "Your User Agent", "Your device resolution": "Your device resolution", "The information being sent to us to help make %(brand)s better includes:": "The information being sent to us to help make %(brand)s better includes:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.", "Call Failed": "Call Failed", - "Review Devices": "Review Devices", - "Call Anyway": "Call Anyway", - "Answer Anyway": "Answer Anyway", - "Call": "Call", - "Answer": "Answer", "Call in Progress": "Call in Progress", "A call is currently being placed!": "A call is currently being placed!", "A call is already in progress!": "A call is already in progress!", @@ -621,14 +560,11 @@ "Which rooms would you like to add to this community?": "Which rooms would you like to add to this community?", "Show these rooms to non-members on the community page and room list?": "Show these rooms to non-members on the community page and room list?", "Add rooms to the community": "Add rooms to the community", - "Room name or alias": "Room name or alias", "Add to community": "Add to community", "Failed to invite the following users to %(groupId)s:": "Failed to invite the following users to %(groupId)s:", "Failed to invite users to community": "Failed to invite users to community", "Failed to invite users to %(groupId)s": "Failed to invite users to %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "Failed to add the following rooms to %(groupId)s:", - "Registration Required": "Registration Required", - "You need to register to do this. Would you like to register now?": "You need to register to do this. Would you like to register now?", "Restricted": "Restricted", "Missing roomId.": "Missing roomId.", "Opens the Developer Tools dialog": "Opens the Developer Tools dialog", @@ -642,7 +578,6 @@ "Unrecognised address": "Unrecognized address", "Whether or not you're logged in (we don't record your username)": "Whether or not you're logged in (we don't record your username)", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)", - "A conference call could not be started because the integrations server is not available": "A conference call could not be started because the integrations server is not available", "Replying With Files": "Replying With Files", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "At this time it is not possible to reply with a file. Would you like to upload this file without replying?", "The file '%(fileName)s' failed to upload.": "The file '%(fileName)s' failed to upload.", @@ -671,11 +606,6 @@ "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s enabled flair for %(groups)s in this room.", "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s disabled flair for %(groups)s in this room.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s added %(addedAddresses)s as addresses for this room.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s added %(addedAddresses)s as an address for this room.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s removed %(removedAddresses)s as addresses for this room.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s removed %(removedAddresses)s as an address for this room.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s set the main address for this room to %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s removed the main address for this room.", "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.", diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 2886da0dc7..b587815454 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -46,7 +46,6 @@ "Which rooms would you like to add to this community?": "Kiujn ĉambrojn vi volas aldoni al ĉi tiu komunumo?", "Show these rooms to non-members on the community page and room list?": "Montri tiujn ĉambrojn al malanoj en la komunuma paĝo kaj ĉambrolisto?", "Add rooms to the community": "Aldoni ĉambrojn al la komunumo", - "Room name or alias": "Nomo aŭ kromnomo de ĉambro", "Add to community": "Aldoni al komunumo", "Failed to invite the following users to %(groupId)s:": "Malsukcesis inviti jenajn uzantojn al %(groupId)s:", "Failed to invite users to community": "Malsukcesis inviti novajn uzantojn al komunumo", @@ -61,7 +60,6 @@ "Restricted": "Limigita", "Moderator": "Ĉambrestro", "Admin": "Administranto", - "Start a chat": "Komenci babilon", "Operation failed": "Ago malsukcesis", "Failed to invite": "Invito malsukcesis", "Failed to invite the following users to the %(roomName)s room:": "Malsukcesis inviti la jenajn uzantojn al la ĉambro %(roomName)s:", @@ -79,7 +77,6 @@ "Usage": "Uzo", "/ddg is not a command": "/ddg ne estas komando", "To use it, just wait for autocomplete results to load and tab through them.": "Por uzi ĝin, atendu aperon de sugestaj rezultoj, kaj tabu tra ili.", - "Unrecognised room alias:": "Nerekonita ĉambra kromnomo:", "Ignored user": "Malatentata uzanto", "You are now ignoring %(userId)s": "Vi nun malatentas uzanton %(userId)s", "Unignored user": "Reatentata uzanto", @@ -135,17 +132,10 @@ "Authentication check failed: incorrect password?": "Aŭtentikiga kontrolo malsukcesis: ĉu pro malĝusta pasvorto?", "Failed to join room": "Malsukcesis aliĝi al ĉambro", "Message Pinning": "Fikso de mesaĝoj", - "Use compact timeline layout": "Uzi densan okazordan aranĝon", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Montri tempindikojn en 12-hora formo (ekz. 2:30 post.)", "Always show message timestamps": "Ĉiam montri mesaĝajn tempindikojn", "Autoplay GIFs and videos": "Memfare ludi GIF-bildojn kaj filmojn", "Call Failed": "Voko malsukcesis", - "Review Devices": "Kontroli aparatojn", - "Call Anyway": "Tamen voki", - "Answer Anyway": "Tamen respondi", - "Call": "Voki", - "Answer": "Respondi", - "Send anyway": "Tamen sendi", "Send": "Sendi", "Enable automatic language detection for syntax highlighting": "Ŝalti memagan rekonon de lingvo por sintaksa markado", "Automatically replace plain text Emoji": "Memfare anstataŭigi tekstajn mienetojn", @@ -180,11 +170,8 @@ "Confirm password": "Konfirmu pasvorton", "Change Password": "Ŝanĝi pasvorton", "Authentication": "Aŭtentikigo", - "Device ID": "Aparata identigilo", "Last seen": "Laste vidita", "Failed to set display name": "Malsukcesis agordi vidigan nomon", - "Disable Notifications": "Malŝalti sciigojn", - "Enable Notifications": "Ŝalti sciigojn", "Cannot add any more widgets": "Pluaj fenestraĵoj ne aldoneblas", "The maximum permitted number of widgets have already been added to this room.": "La maksimuma permesata nombro de fenestraĵoj jam aldoniĝis al tiu ĉambro.", "Add a widget": "Aldoni fenestraĵon", @@ -198,8 +185,6 @@ "%(senderName)s uploaded a file": "%(senderName)s alŝutis dosieron", "Options": "Agordoj", "Please select the destination room for this message": "Bonvolu elekti celan ĉambron por tiu mesaĝo", - "Blacklisted": "Senpova legi ĉifritajn mesaĝojn", - "device id: ": "aparata identigilo: ", "Disinvite": "Malinviti", "Kick": "Forpeli", "Disinvite this user?": "Ĉu malinviti ĉi tiun uzanton?", @@ -211,7 +196,6 @@ "Ban this user?": "Ĉu forbari ĉi tiun uzanton?", "Failed to ban user": "Malsukcesis forbari uzanton", "Failed to mute user": "Malsukcesis silentigi uzanton", - "Failed to toggle moderator status": "Malsukcesis baskuligi estrecon", "Failed to change power level": "Malsukcesis ŝanĝi povnivelon", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Tiun ĉi ŝanĝon vi ne povos malfari, ĉar vi donas al la uzanto la saman povnivelon, kiun havas vi mem.", "Are you sure?": "Ĉu vi certas?", @@ -222,12 +206,8 @@ "Jump to read receipt": "Salti al legokonfirmo", "Mention": "Mencio", "Invite": "Inviti", - "User Options": "Agordoj de uzanto", - "Direct chats": "Rektaj babiloj", "Unmute": "Malsilentigi", "Mute": "Silentigi", - "Revoke Moderator": "Forigi estrajn rajtojn", - "Make Moderator": "Kunestrigi", "Admin Tools": "Estriloj", "and %(count)s others...|other": "kaj %(count)s aliaj…", "and %(count)s others...|one": "kaj unu alia…", @@ -311,10 +291,7 @@ "Jump to first unread message.": "Salti al unua nelegita mesaĝo.", "Close": "Fermi", "not specified": "nespecifita", - "Remote addresses for this room:": "Foraj adresoj de ĉi tiu ĉambro:", - "Local addresses for this room:": "Lokaj adresoj por ĉi tiu ĉambro:", "This room has no local addresses": "Ĉi tiu ĉambro ne havas lokajn adresojn", - "New address (e.g. #foo:%(localDomain)s)": "Nova adreso (ekz-e #io:%(localDomain)s)", "Invalid community ID": "Nevalida komunuma identigilo", "'%(groupId)s' is not a valid community ID": "'%(groupId)s' ne estas valida komunuma identigilo", "New community ID (e.g. +foo:%(localDomain)s)": "Nova komunuma identigilo (ekz-e +io:%(localDomain)s)", @@ -335,9 +312,6 @@ "Copied!": "Kopiita!", "Failed to copy": "Malsukcesis kopii", "Add an Integration": "Aldoni kunigon", - "Removed or unknown message type": "Forigita aŭ nekonata tipo de mesaĝo", - "Message removed by %(userId)s": "Mesaĝo forigita de %(userId)s", - "Message removed": "Mesaĝo forigita", "Custom Server Options": "Propraj servilaj elektoj", "Dismiss": "Rezigni", "powered by Matrix": "funkciigata de Matrix", @@ -348,7 +322,6 @@ "Leave": "Foriri", "Register": "Registri", "Add rooms to this community": "Aldoni ĉambrojn al ĉi tiu komunumo", - "To continue, please enter your password.": "Por daŭrigi, bonvolu enigi vian pasvorton.", "An email has been sent to %(emailAddress)s": "Retletero sendiĝis al %(emailAddress)s", "Please check your email to continue registration.": "Bonvolu kontroli vian retpoŝton por daŭrigi la registriĝon.", "Token incorrect": "Malĝusta ĵetono", @@ -380,11 +353,9 @@ "Delete Widget": "Forigi fenestraĵon", "Delete widget": "Forigi fenestraĵon", "Create new room": "Krei novan ĉambron", - "Verify...": "Kontroli…", "No results": "Neniuj rezultoj", "Communities": "Komunumoj", "Home": "Hejmo", - "Could not connect to the integration server": "Malsukcesis konektiĝi al la kuniga servilo", "Manage Integrations": "Administri kunigojn", "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s%(count)s-foje aliĝis", @@ -470,13 +441,8 @@ "Unknown error": "Nekonata eraro", "Incorrect password": "Malĝusta pasvorto", "Deactivate Account": "Malaktivigi konton", - "I verify that the keys match": "Mi kontrolas, ke la ŝlosiloj akordas", "An error has occurred.": "Okazis eraro.", "OK": "Bone", - "Start verification": "Komenci kontrolon", - "Share without verifying": "Kunhavigi sen kontrolo", - "Ignore request": "Malatenti peton", - "Encryption key request": "Peto por ĉifra ŝlosilo", "Unable to restore session": "Salutaĵo ne rehaveblas", "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.": "Se vi antaŭe uzis pli novan version de %(brand)s, via salutaĵo eble ne akordos kun ĉi tiu versio. Fermu ĉi tiun fenestron kaj revenu al la pli nova versio.", "Invalid Email Address": "Malvalida retpoŝtadreso", @@ -489,13 +455,10 @@ "Skip": "Preterpasi", "An error occurred: %(error_string)s": "Okazis eraro: %(error_string)s", "This will be your account name on the homeserver, or you can pick a different server.": "Tio ĉi estos la nomo de via konto sur la hejmservilo , aŭ vi povas elekti alian servilon.", - "Blacklist": "Malpermesi malĉifradon", - "Unverify": "Malkontroli", "If you already have a Matrix account you can log in instead.": "Se vi jam havas Matrix-konton, vi povas saluti anstataŭe.", "Private Chat": "Privata babilo", "Public Chat": "Publika babilo", "Custom": "Propra", - "Alias (optional)": "Kromnomo (malnepra)", "Name": "Nomo", "You must register to use this functionality": "Vi devas registriĝî por uzi tiun ĉi funkcion", "You must join the room to see its files": "Vi devas aliĝi al la ĉambro por vidi tie dosierojn", @@ -546,7 +509,6 @@ "Create a new community": "Krei novan komunumon", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Kreu komunumon por kunigi uzantojn kaj ĉambrojn! Fari propran hejmpaĝon por montri vian spacon en la universo de Matrix.", "You have no visible notifications": "Neniuj videblaj sciigoj", - "Scroll to bottom of page": "Rulumi al susbo de la paĝo", "Connectivity to the server has been lost.": "Konekto al la servilo perdiĝis.", "Sent messages will be stored until your connection has returned.": "Senditaj mesaĝoj konserviĝos ĝis via konekto refunkcios.", "Active call": "Aktiva voko", @@ -556,7 +518,6 @@ "Search failed": "Serĉo malsukcesis", "Server may be unavailable, overloaded, or search timed out :(": "Aŭ la servilo estas neatingebla aŭ troŝarĝita, aŭ la serĉo eltempiĝis :(", "No more results": "Neniuj pliaj rezultoj", - "Unknown room %(roomId)s": "Nekonata ĉambro %(roomId)s", "Room": "Ĉambro", "Failed to reject invite": "Malsukcesis rifuzi inviton", "Fill screen": "Plenigi ekranon", @@ -570,8 +531,6 @@ "Uploading %(filename)s and %(count)s others|other": "Alŝutante dosieron %(filename)s kaj %(count)s aliajn", "Uploading %(filename)s and %(count)s others|zero": "Alŝutante dosieron %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Alŝutante dosieron %(filename)s kaj %(count)s alian", - "Light theme": "Hela haŭto", - "Dark theme": "Malhela haŭto", "Sign out": "Adiaŭi", "Success": "Sukceso", "Unable to remove contact information": "Ne povas forigi kontaktajn informojn", @@ -624,7 +583,6 @@ "Define the power level of a user": "Difini la povnivelon de uzanto", "Deops user with given id": "Senestrigas uzanton kun donita identigilo", "Invites user with given id to current room": "Invitas uzanton per identigilo al la nuna ĉambro", - "Joins room with given alias": "Aliĝas al ĉambro per kromnomo", "Kicks user with given id": "Forpelas uzanton kun la donita identigilo", "Changes your display nickname": "Ŝanĝas vian vidigan nomon", "Searches DuckDuckGo for results": "Serĉas rezultojn per DuckDuckGo", @@ -636,20 +594,7 @@ "Notify the whole room": "Sciigi la tutan ĉambron", "Room Notification": "Ĉambra sciigo", "Users": "Uzantoj", - "unknown device": "nekonata aparato", - "NOT verified": "nekontrolita", - "verified": "kontrolita", - "Verification": "Kontrolo", - "Ed25519 fingerprint": "Premsigno laŭ Ed25519", - "User ID": "Identigaĵo de uzanto", - "Curve25519 identity key": "Identiga ŝlosilo laŭ Curve25519", - "Claimed Ed25519 fingerprint key": "Asertita premsigno laŭ Ed25519", - "Algorithm": "Algoritmo", - "unencrypted": "neĉifritaj", - "Decryption error": "Malĉifra eraro", "Session ID": "Identigilo de salutaĵo", - "End-to-end encryption information": "Informoj pri tutvoja ĉifrado", - "Event information": "Informoj pri okazaĵo", "Passphrases must match": "Pasfrazoj devas akordi", "Passphrase must not be empty": "Pasfrazoj maldevas esti malplenaj", "Export room keys": "Elporti ĉambrajn ŝlosilojn", @@ -664,21 +609,16 @@ "File to import": "Enportota dosiero", "Import": "Enporti", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Forigo de fenestraĵo efektiviĝos por ĉiuj uzantoj en ĉi tiu ĉambro. Ĉu vi certe volas ĝin forigi?", - "Unblacklist": "Repermesi malĉifradon", - "none": "neniu", - "The version of %(brand)s": "Tiu ĉi versio de %(brand)s", + "The version of %(brand)s": "La versio de %(brand)s", "Your language of choice": "Via preferata lingvo", - "The information being sent to us to help make %(brand)s better includes:": "Informoj sendataj al ni por plibonigi la servon %(brand)s inkluzivas:", + "The information being sent to us to help make %(brand)s better includes:": "La informoj sendataj al ni por plibonigi %(brand)son inkluzivas:", "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s ŝanĝis sian vidigan nomon al %(displayName)s.", "Send an encrypted reply…": "Sendi ĉifritan respondon…", - "Send a reply (unencrypted)…": "Sendi respondon (neĉifritan)…", "Send an encrypted message…": "Sendi ĉifritan mesaĝon…", - "Send a message (unencrypted)…": "Sendi mesaĝon (neĉifritan)…", "Replying": "Respondante", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privato gravas al ni, tial ni ne kolektas personajn aŭ spureblajn datumojn por nia analizo.", "Learn more about how we use analytics.": "Lernu pli pri nia uzo de analiziloj.", "Your homeserver's URL": "URL de via hejmservilo", - "Your identity server's URL": "URL de via identiga servilo", "The platform you're on": "Via platformo", "Which officially provided instance you are using, if any": "Kiun oficiale disponeblan nodon vi uzas, se iun ajn", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Ĉu vi uzas la riĉtekstan reĝimon de la riĉteksta redaktilo aŭ ne", @@ -687,7 +627,6 @@ "Failed to add tag %(tagName)s to room": "Malsukcesis aldoni etikedon %(tagName)s al ĉambro", "Submit debug logs": "Sendi sencimigan protokolon", "Fetching third party location failed": "Malsukcesis trovi lokon de ekstera liveranto", - "A new version of %(brand)s is available.": "Nova versio de %(brand)s haveblas.", "I understand the risks and wish to continue": "Mi komprenas la riskon kaj volas pluiĝi", "Send Account Data": "Sendi kontajn informojn", "Advanced notification settings": "Specialaj agordoj de sciigoj", @@ -706,8 +645,6 @@ "Waiting for response from server": "Atendante respondon el la servilo", "Send Custom Event": "Sendi propran okazon", "All notifications are currently disabled for all targets.": "Ĉiuj sciigoj nun estas malŝaltitaj por ĉiuj aparatoj.", - "delete the alias.": "forigi la kromnomon.", - "To return to your account in future you need to set a password": "Por reveni al via konto estonte, vi devas agordi pasvorton", "Forget": "Forgesi", "You cannot delete this image. (%(code)s)": "Vi ne povas forigi tiun ĉi bildon. (%(code)s)", "Cancel Sending": "Nuligi sendon", @@ -732,7 +669,6 @@ "No update available.": "Neniuj ĝisdatigoj haveblas.", "Resend": "Resendi", "Collecting app version information": "Kolektante informon pri versio de la aplikaĵo", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Ĉu forigi la ĉambran kromnomon %(alias)s kaj forigi %(name)s de la listo de ĉambroj?", "Enable notifications for this account": "Ŝalti sciigojn por tiu ĉi konto", "Invite to this community": "Inviti al tiu ĉi komunumo", "Messages containing keywords": "Mesaĝoj enhavantaj ŝlosilovortojn", @@ -786,7 +722,6 @@ "Show message in desktop notification": "Montradi mesaĝojn en labortablaj sciigoj", "Unhide Preview": "Malkaŝi antaŭrigardon", "Unable to join network": "Ne povas konektiĝi al la reto", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Vi eble agordis ilin en alia kliento. Vi ne povas agordi ilin en %(brand)s, sed ili ankoraŭ validas", "Sorry, your browser is not able to run %(brand)s.": "Pardonon, via foliumilo ne kapablas funkciigi klienton %(brand)s.", "Uploaded on %(date)s by %(user)s": "Alŝutita je %(date)s de %(user)s", "Messages in group chats": "Mesaĝoj en grupaj babiloj", @@ -811,7 +746,6 @@ "Event Content": "Enhavo de okazo", "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!": "Kun via nuna foliumilo, la aspekto kaj funkciado de la aplikaĵo povas esti tute malĝusta, kaj kelkaj aŭ ĉiu funkcioj eble ne tute funkcios. Se vi tamen volas provi, vi povas daŭrigi, sed vi ricevos nenian subtenon se vi renkontos problemojn!", "Checking for an update...": "Serĉante ĝisdatigojn…", - "There are advanced notifications which are not shown here": "Ekzistas specialaj sciigoj, kiuj ne montriĝas ĉi tie", "Logs sent": "Protokolo sendiĝis", "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.": "Sencimigaj protokoloj enhavas informojn pri uzo de aplikaĵo, inkluzive vian uzantonomon, la identigilojn aŭ nomojn de la ĉambroj aŭ grupoj kiujn vi vizitis, kaj la uzantonomojn de aliaj uzantoj. Ili ne enhavas mesaĝojn.", "Failed to send logs: ": "Malsukcesis sendi protokolon: ", @@ -819,7 +753,6 @@ "e.g. %(exampleValue)s": "ekz. %(exampleValue)s", "Every page you use in the app": "Ĉiu paĝo kiun vi uzas en la aplikaĵo", "e.g. ": "ekz. ", - "Your User Agent": "Via klienta aplikaĵo", "Your device resolution": "La distingumo de via aparato", "Call in Progress": "Voko farata", "A call is already in progress!": "Voko estas jam farata!", @@ -827,14 +760,7 @@ "Send analytics data": "Sendi statistikajn datumojn", "Key request sent.": "Peto de ŝlosilo sendita.", "Permission Required": "Necesas permeso", - "Registration Required": "Necesas registriĝo", - "You need to register to do this. Would you like to register now?": "Por fari ĉi tion, vi bezonas registriĝi. Ĉu vi volas registriĝi nun?", "Missing roomId.": "Mankas identigilo de la ĉambro.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s aldonis %(addedAddresses)s kiel adresojn por la ĉambro.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s aldonis %(addedAddresses)s kiel adreson por la ĉambro.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s forigis %(removedAddresses)s kiel adresojn por la ĉambro.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s forigis %(removedAddresses)s kiel adreson por la ĉambro.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s aldonis %(addedAddresses)s kaj forigis %(removedAddresses)s kiel adresojn por la ĉambro.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s agordis la ĉefan adreson por la ĉambro al %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s forigis la ĉefan adreson de la ĉambro.", "Please contact your service administrator to continue using the service.": "Bonvolu kontakti administranton de la servo por daŭre uzadi la servon.", @@ -1010,7 +936,6 @@ "Room avatar": "Profilbildo de ĉambro", "Room Name": "Nomo de ĉambro", "Room Topic": "Temo de ĉambro", - "Yes, I want to help!": "Jes. Mi volas helpi!", "Failed to remove widget": "Malsukcesis forigi fenestraĵon", "Join": "Aliĝi", "Invite anyway": "Tamen inviti", @@ -1067,17 +992,13 @@ "General failure": "Ĝenerala fiasko", "Create account": "Krei konton", "Create your account": "Krei vian konton", - "Great! This passphrase looks strong enough.": "Bonege! Ĉi tiu pasfrazo ŝajnas sufiĉe forta.", "Keep going...": "Daŭrigu…", - "Enter a passphrase...": "Enigu pasfrazon…", "That matches!": "Tio akordas!", "That doesn't match.": "Tio ne akordas.", - "Repeat your passphrase...": "Ripetu vian pasfrazon...", "Download": "Elŝuti", "Success!": "Sukceso!", "Retry": "Reprovi", "Set up": "Agordi", - "A conference call could not be started because the integrations server is not available": "Grupa voko ne povis komenciĝi, ĉar la kuniga servilo estas neatingebla", "Replying With Files": "Respondado kun dosieroj", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Nun ne eblas respondi kun dosiero. Ĉu vi volas alŝuti la dosieron sen respondo?", "The file '%(fileName)s' failed to upload.": "Malsukcesis alŝuti dosieron « %(fileName)s ».", @@ -1123,7 +1044,6 @@ "Send typing notifications": "Sendi sciigojn pri tajpado", "Allow Peer-to-Peer for 1:1 calls": "Permesi samtavolan teĥnikon por duopaj vokoj", "Prompt before sending invites to potentially invalid matrix IDs": "Averti antaŭ ol sendi invitojn al eble nevalidaj Matrix-identigiloj", - "Order rooms in the room list by most important first instead of most recent": "Ordigi ĉambrojn en listo de ĉambroj laŭ graveco anstataŭ freŝeco", "Messages containing my username": "Mesaĝoj enhavantaj mian uzantnomon", "When rooms are upgraded": "Kiam ĉambroj gradaltiĝas", "The other party cancelled the verification.": "La alia kontrolano nuligis la kontrolon.", @@ -1170,10 +1090,6 @@ "Invited by %(sender)s": "Invitita de %(sender)s", "Error updating main address": "Ĝisdatigo de la ĉefa adreso eraris", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Ĝisdatigo de la ĉefa adreso de la ĉambro eraris. Aŭ la servilo tion ne permesas, aŭ io misfunkciis.", - "Error creating alias": "Kreo de kromnomo eraris", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Kreo de tiu kromnomo eraris. Aŭ la servilo tion ne permesas, aŭ io misfunkciis.", - "Error removing alias": "Forigo de kromnomo eraris", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Forigo de tiu kromnomo eraris. Aŭ ĝi ne plu ekzistas, aŭ io misfunkciis.", "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.": "En ĉifritaj ĉambroj, kiel ĉi tiu, antaŭrigardoj al URL-oj estas implicite malŝaltitaj por certigi, ke via hejmservilo (kie la antaŭrigardoj estas generataj) ne povas kolekti informojn pri ligiloj en ĉi tiu ĉambro.", "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.": "Kiam iu metas URL-on en sian mesaĝon, antaŭrigardo al tiu URL povas montriĝi, por doni pliajn informojn pri tiu ligilo, kiel ekzemple la titolon, priskribon, kaj bildon el la retejo.", "reacted with %(shortName)s": "reagis per %(shortName)s", @@ -1181,11 +1097,6 @@ "Click here to see older messages.": "Klaku ĉi tien por vidi pli malnovajn mesaĝojn.", "edited": "redaktita", "Failed to load group members": "Malsukcesis enlegi grupanojn", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Bonvolu helpi plibonigi projekton %(brand)s per sendado de sennomaj datumoj pri uzado. Tio funkciados per kuketo (bonvolu vidi nian Politikon pri kuketoj).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Bonvolu helpi plibonigi projekton %(brand)s per sendado de sennomaj datumoj pri uzado. Tio funkciados per kuketo.", - "Please contact your service administrator to get this limit increased.": "Bonvolu kontakti vian administranton por plialtigi ĉi tiun limon.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Ĉi tiu hejmservilo atingis sian monatan limon de aktivaj uzantoj, do iuj uzantoj ne povos saluti.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Ĉi tiu hejmservilo pasis trans unu el siaj rimedaj limoj, do iuj uzantoj ne povos saluti.", "An error ocurred whilst trying to remove the widget from the room": "Forigo de la fenestraĵo el la ĉambro eraris", "Minimize apps": "Plejetigi aplikaĵojn", "Maximize apps": "Plejgrandigi aplikaĵojn", @@ -1238,12 +1149,6 @@ "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.": "Malaktivigo de via konto implicite ne forgesigas viajn mesaĝojn al ni. Se vi volas, ke ni ilin forgesu, bonvolu marki la suban markbutonon.", "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.": "Videbleco de mesaĝoj en Matrix similas tiun de retpoŝto. Nia forgeso de viaj mesaĝoj signifas, ke ili haviĝos al neniu nova aŭ neregistrita uzanto, sed registritaj uzantoj, kiuj jam havas viajn mesaĝojn, ankoraŭ povos aliri siajn kopiaĵojn.", "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)": "Bonvolu dum malaktivigo forgesi ĉiujn mesaĝojn, kiujn mi sendis. (Averto: tio vidigos al osaj uzantoj neplenajn interparolojn.)", - "Use Legacy Verification (for older clients)": "Uzi malnovecan kontrolon (por malnovaj klientoj)", - "Verify by comparing a short text string.": "Kontrolu per komparo de mallonga teksto.", - "Begin Verifying": "Komenci kontrolon", - "Waiting for partner to accept...": "Atendante akcepton de kunulo…", - "Nothing appearing? Not all clients support interactive verification yet. .": "Ĉu neniu aperas? Ankoraŭ ne ĉiuj klientoj subtenas interagan kontrolon. .", - "Waiting for %(userId)s to confirm...": "Atendante konfirmon de %(userId)s…", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Kontrolu ĉi tiun uzanton por marki ĝin fidata. Fidado devas vin trankviligi dum uzado de tutvoja ĉifrado.", "Waiting for partner to confirm...": "Atendas konfirmon de kunulo…", "Incoming Verification Request": "Venas kontrolpeto", @@ -1313,9 +1218,7 @@ "Log in to your new account.": "Saluti per via nova konto.", "You can now close this window or log in to your new account.": "Vi nun povas fermi ĉi tiun fenestron, aŭ saluti per via nova konto.", "Registration Successful": "Registro sukcesis", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Ni konservos ĉifritan kopiaĵon de viaj ŝlosiloj sur nia servilo. Protektu vian savkopion per pasfrazo por ĝin sekurigi.", "For maximum security, this should be different from your account password.": "Por plej granda sekureco, ĝi malsamu la pasvorton al via konto.", - "Please enter your passphrase a second time to confirm.": "Bonvolu vian pasfrazon konfirme enigi duan fojon.", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Ĉu vi uzas la funkcion « spuroj » (profilbildoj super la listo de ĉambroj)", "Adds a custom widget by URL to the room": "Aldonas propran fenestraĵon al la ĉambro per URL", "You cannot modify widgets in this room.": "Vi ne rajtas modifi fenestraĵojn en ĉi tiu ĉambro.", @@ -1342,7 +1245,6 @@ "Short keyboard patterns are easy to guess": "Mallongaj ripetoj de klavoj estas facile diveneblaj", "Enable Community Filter Panel": "Ŝalti komunume filtran panelon", "Enable widget screenshots on supported widgets": "Ŝalti bildojn de fenestraĵoj por subtenataj fenestraĵoj", - "Show recently visited rooms above the room list": "Montri freŝe vizititajn ĉambrojn super la listo de ĉambroj", "Show hidden events in timeline": "Montri kaŝitajn okazojn en historio", "Low bandwidth mode": "Reĝimo de malmulta kapacito", "Start using Key Backup": "Ekuzi Savkopiadon de ŝlosiloj", @@ -1370,7 +1272,6 @@ "Removing…": "Forigante…", "I don't want my encrypted messages": "Mi ne volas miajn ĉifritajn mesaĝojn", "No backup found!": "Neniu savkopio troviĝis!", - "Backup Restored": "Savkopio rehavita", "Resend edit": "Resendi redakton", "Go to Settings": "Iri al agordoj", "Flair": "Etikedo", @@ -1378,7 +1279,6 @@ "Send %(eventType)s events": "Sendi okazojn de tipo « %(eventType)s »", "Select the roles required to change various parts of the room": "Elektu la rolojn postulatajn por ŝanĝado de diversaj partoj de la ĉambro", "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.": "Post ŝalto, ĉifrado de ĉambro ne povas esti malŝaltita. Mesaĝoj senditaj al ĉifrata ĉambro ne estas videblaj por la servilo, nur por la partoprenantoj de la ĉambro. Ŝalto de ĉifrado eble malfunkciigos iujn robotojn kaj pontojn. Eksciu plion pri ĉifrado.", - "To link to this room, please add an alias.": "Por ligili al la ĉambro, bonvolu aldoni kromnomon.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Ŝanĝoj al legebleco de historio nur efektiviĝos por osaj mesaĝoj de ĉi tiu ĉambro. La videbleco de jama historio ne ŝanĝiĝos.", "Encryption": "Ĉifrado", "Once enabled, encryption cannot be disabled.": "Post ŝalto, ne plu eblas malŝalti ĉifradon.", @@ -1400,7 +1300,6 @@ "Clear all data": "Vakigi ĉiujn datumojn", "Community IDs cannot be empty.": "Identigilo de komunumo ne estu malplena.", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Por eviti perdon de via babila historio, vi devas elporti la ŝlosilojn de viaj ĉambroj antaŭ adiaŭo. Por tio vi bezonos reveni al la pli nova versio de %(brand)s", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Vi antaŭe uzis pli novan version de %(brand)s je %(host)s. Por ree uzi ĉi tiun version kun ĉifrado, vi devos adiaŭi kaj resaluti. ", "Incompatible Database": "Neakorda datumbazo", "View Servers in Room": "Montri servilojn en ĉambro", "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.": "Vi antaŭe uzis %(brand)s-on je %(host)s kun ŝaltita malfrua enlegado de anoj. En ĉi tiu versio, malfrua enlegado estas malŝaltita. Ĉar la loka kaŝmemoro de ambaŭ versioj ne akordas, %(brand)s bezonas respeguli vian konton.", @@ -1421,18 +1320,11 @@ "Missing session data": "Mankas datumoj de salutaĵo", "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Iuj datumoj de salutaĵo, inkluzive viajn ĉifrajn ŝlosilojn, mankas. Por tion korekti, resalutu, kaj rehavu la ŝlosilojn el savkopio.", "Your browser likely removed this data when running low on disk space.": "Via foliumilo probable forigos ĉi tiujn datumojn kiam al ĝi mankos spaco sur disko.", - "Recovery Key Mismatch": "Malakordo de rehava ŝlosilo", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Savkopio ne povas esti malĉifrita per ĉi tiu ŝlosilo: bonvolu kontroli, ke vi enigis la ĝustan rehavan ŝlosilon.", - "Incorrect Recovery Passphrase": "Malĝusta rehava pasfrazo", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Savkopio ne sukcesis malĉifriĝi per ĉi tiu pasfrazo: bonvolu kontroli, ĉu vi enigis la ĝustan rehavan pasfrazon.", "Unable to restore backup": "Ne povas rehavi savkopion", "Failed to decrypt %(failedCount)s sessions!": "Malsukcesis malĉifri%(failedCount)s salutaĵojn!", - "Restored %(sessionCount)s session keys": "Rehavis %(sessionCount)s ŝlosilojn de salutaĵo", - "Enter Recovery Passphrase": "Enigu rehavan pasfrazon", "Warning: you should only set up key backup from a trusted computer.": "Averto: vi agordu ŝlosilan savkopion nur per fidata komputilo.", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Aliru vian sekuran mesaĝan historion kaj agordu sekuran mesaĝadon per enigo de via rehava pasfrazo.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Se vi forgesis vian rehavan pasfrazon, vi povas uzi viajn rehavan ŝlosilonagordi novajn rehavajn elektojn", - "Enter Recovery Key": "Enigu rehavan ŝlosilon", "This looks like a valid recovery key!": "Ŝajnas esti valida rehava ŝlosilo!", "Not a valid recovery key": "Ne estas valida rehava ŝlosilo", "Access your secure message history and set up secure messaging by entering your recovery key.": "Aliru vian sekuran mesaĝan historion kaj agordu sekuran mesaĝadon per enigo de via rehava ŝlosilo.", @@ -1478,7 +1370,6 @@ "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.": "Vi ne povos malfari tiun ŝanĝon, ĉar vi malrangaltigas vin mem; se vi estas la lasta povohava uzanto en la ĉambro, estos neeble vian povon rehavi.", "Demote": "Malrangaltigi", "Power level": "Povnivelo", - "Use two-way text verification": "Uzi duflankan tekstan kontrolon", "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:": "Gradaltigo de ĉi tiu ĉambro bezonas fermi ĝin, kaj krei novan por anstataŭi ĝin. Por plejbonigi sperton de la ĉambranoj, ni:", "Invalid homeserver discovery response": "Nevalida eltrova respondo de hejmservilo", "Failed to get autodiscovery configuration from server": "Malsukcesis akiri agordojn de memaga eltrovado de la servilo", @@ -1491,24 +1382,13 @@ "Enter your password to sign in and regain access to your account.": "Enigu vian pasvorton por saluti kaj rehavi aliron al via konto.", "Sign in and regain access to your account.": "Saluti kaj rehavi aliron al via konto.", "You cannot sign in to your account. Please contact your homeserver admin for more information.": "Vi ne povas saluti per via konto. Bonvolu kontakti administranton de via hejmservilo por akiri pliajn informojn.", - "Set up with a Recovery Key": "Agordi per rehava ŝlosilo", "Go back to set it again.": "Reiru por reagordi ĝin.", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Asekure vi povas uzi ĝin por rehavi vian historion de ĉifritaj mesaĝoj se vi forgesos vian rehavan pasfrazon.", - "As a safety net, you can use it to restore your encrypted message history.": "Asekure vi povas uzi ĝin por rehavi vian historion de ĉifritaj mesaĝoj.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Via rehava ŝlosilo estas asekuro – vi povos uzi ĝin por rehavi aliron al viaj ĉifritaj mesaĝoj, se vi forgesos vian pasfrazon.", - "Your Recovery Key": "Via rehava ŝlosilo", - "Copy to clipboard": "Kopii al tondujo", "Print it and store it somewhere safe": "Presu ĝin kaj konservu ĝin en sekura loko", "Save it on a USB key or backup drive": "Konservu ĝin en poŝmemorilo aŭ savkopia disko", "Copy it to your personal cloud storage": "Kopiu ĝin al via persona enreta konservejo", "Your keys are being backed up (the first backup could take a few minutes).": "Viaj ŝlosiloj estas savkopiataj (la unua savkopio povas daŭri kelkajn minutojn).", "Set up Secure Message Recovery": "Agordi sekuran rehavon de mesaĝoj", - "Secure your backup with a passphrase": "Sekurigi vian savkopion per pasfrazo", - "Confirm your passphrase": "Konfirmu vian pasfrazon", - "Recovery key": "Rehava ŝlosilo", - "Keep it safe": "Sekurigu ĝin", "Starting backup...": "Komencante savkopion…", - "Create Key Backup": "Krei savkopion de ŝlosiloj", "Unable to create key backup": "Ne povas krei savkopion de ŝlosiloj", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Sen agordo de Sekura rehavo de mesaĝoj, vi perdos vian sekuran historion de mesaĝoj per adiaŭo.", "Bulk options": "Amasaj elektebloj", @@ -1675,16 +1555,11 @@ "Quick Reactions": "Rapidaj reagoj", "Cancel search": "Nuligi serĉon", "Please create a new issue on GitHub so that we can investigate this bug.": "Bonvolu raporti novan problemon je GitHub, por ke ni povu ĝin esplori.", - "Room alias": "Kromnomo de ĉambro", "e.g. my-room": "ekzemple mia-chambro", - "Please provide a room alias": "Bonvolu doni kromnomon de ĉambro", - "This alias is available to use": "Ĉi tiu kromnomo estas disponebla", - "This alias is already in use": "Ĉi tiu kromnomo jam estas uzata", "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Uzu identigan servilon por inviti per retpoŝto. Uzu la norman (%(defaultIdentityServerName)s) aŭ administru per Agordoj.", "Use an identity server to invite by email. Manage in Settings.": "Uzu identigan servilon por inviti per retpoŝto. Administru per Agordoj.", "Close dialog": "Fermi interagujon", "Please enter a name for the room": "Bonvolu enigi nomon por la ĉambro", - "Set a room alias to easily share your room with other people.": "Agordu kromnomon de la ĉambro por facile ĝin kunhavigi al aliaj homoj.", "This room is private, and can only be joined by invitation.": "Ĉi tiu ĉambro estas privata, kaj eblas aliĝi nur per invito.", "Create a public room": "Krei publikan ĉambron", "Create a private room": "Krei privatan ĉambron", @@ -1728,7 +1603,6 @@ "Decline (%(counter)s)": "Malakcepti (%(counter)s)", "Clear notifications": "Vakigi sciigojn", "Error subscribing to list": "Eraris abono al listo", - "Please verify the room ID or alias and try again.": "Bonvolu kontroli la identigilon aŭ kromnomon de la ĉambro kaj reprovu.", "Error removing ignored user/server": "Eraris forigo de la malatentata uzanto/servilo", "Error unsubscribing from list": "Eraris malabono de la listo", "Please try again or view your console for hints.": "Bonvolu reprovi aŭ serĉi helpilojn en via konzolo.", @@ -1750,11 +1624,6 @@ "Widgets do not use message encryption.": "Fenestraĵoj ne uzas ĉifradon de mesaĝoj.", "Widget added by": "Fenestraĵon aldonis", "This widget may use cookies.": "Ĉi tiu fenestraĵo povas uzi kuketojn.", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s aldonis %(addedAddresses)s kaj %(count)s aliajn adresojn al ĉi tiu ĉambro", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s forigis %(removedAddresses)s kaj %(count)s aliajn adresojn el ĉi tiu ĉambro", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s forigis %(countRemoved)s kaj aldonis %(countAdded)s adresojn al ĉi tiu ĉambro", - "%(senderName)s turned on end-to-end encryption.": "%(senderName)s ŝaltis tutvojan ĉifradon.", - "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s ŝaltis tutvojan ĉifradon (nerekonita algoritmo %(algorithm)s).", "a few seconds ago": "antaŭ kelkaj sekundoj", "about a minute ago": "antaŭ ĉirkaŭ minuto", "%(num)s minutes ago": "antaŭ %(num)s minutoj", @@ -1812,21 +1681,14 @@ "Start": "Komenci", "Done": "Fini", "Go Back": "Reiri", - "Verify other users in their profile.": "Kontrolu aliajn uzantojn en iliaj profiloj.", "Upgrade your encryption": "Gradaltigi vian ĉifradon", - "Encryption upgraded": "Ĉifrado gradaltigita", - "Encryption setup complete": "Agordo de ĉifrado finita", - "The version of %(brand)s": "La versio de %(brand)s", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Ĉu vi uzas %(brand)son per aparato, kies ĉefa enigilo estas tuŝado", - "The information being sent to us to help make %(brand)s better includes:": "La informoj sendataj al ni por plibonigi %(brand)son inkluzivas:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Nekonataj salutaĵoj ĉeestas la ĉambron; se vi daŭrigos ne kontrolinte ilin, iu povos subaŭskulti vian vokon.", "If you cancel now, you won't complete verifying the other user.": "Se vi nuligos nun, vi ne finos kontrolon de la alia uzanto.", "If you cancel now, you won't complete verifying your other session.": "Se vi nuligos nun, vi ne finos kontrolon de via alia salutaĵo.", "Cancel entering passphrase?": "Ĉu nuligi enigon de pasfrazo?", "Setting up keys": "Agordo de klavoj", "Verify this session": "Kontroli ĉi tiun salutaĵon", "Encryption upgrade available": "Ĝisdatigo de ĉifrado haveblas", - "Unverified session": "Nekontrolita salutaĵo", "Sign In or Create Account": "Salutu aŭ kreu konton", "Use your account or create a new one to continue.": "Por daŭrigi, uzu vian konton aŭ kreu novan.", "Create Account": "Krei konton", @@ -1853,8 +1715,6 @@ "or": "aŭ", "Compare unique emoji": "Komparu unikajn bildsignojn", "Compare a unique set of emoji if you don't have a camera on either device": "Komparu unikan aron de bildsignoj se vi ne havas kameraon sur la alia aparato", - "Confirm the emoji below are displayed on both devices, in the same order:": "Konfirmu, ke la ĉi-subaj bildsignoj estas montrataj sur ambaŭ aparatoj, samorde:", - "Verify this device by confirming the following number appears on its screen.": "Kontrolu ĉi tiun aparaton per kontrolo, ke la jena nombro aperas sur ĝia ekrano.", "Waiting for %(displayName)s to verify…": "Atendas kontrolon de %(displayName)s…", "Cancelling…": "Nuligante…", "They match": "Ili akordas", @@ -1865,14 +1725,9 @@ "Show less": "Montri pli", "Show more": "Montri malpli", "Help": "Helpo", - "Message not sent due to unknown sessions being present": "Mesaĝo ne sendiĝis pro ĉeesto de nekonataj salutaĵoj", - "Show sessions, send anyway or cancel.": "Montri salutaĵojn, tamen sendinuligi.", - "Complete security": "Plena sekureco", - "Verify this session to grant it access to encrypted messages.": "Kontrolu ĉi tiun salutaĵon por doni al ĝi aliron al la ĉifritaj mesaĝoj.", "Session verified": "Salutaĵo kontroliĝis", "Copy": "Kopii", "Your user agent": "Via klienta aplikaĵo", - "If you cancel now, you won't complete your secret storage operation.": "Se vi nuligos nun, vi ne finos la operacion de la sekreta deponejo.", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s ŝanĝis nomon de la ĉambro de %(oldRoomName)s al %(newRoomName)s.", "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s aldonis la alternativajn adresojn %(addresses)s por ĉi tiu ĉambro.", "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s aldonis alternativan adreson %(addresses)s por ĉi tiu ĉambro.", @@ -1901,14 +1756,8 @@ "Not Trusted": "Nefidata", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) salutis novan salutaĵon ne kontrolante ĝin:", "Ask this user to verify their session, or manually verify it below.": "Petu, ke ĉi tiu la uzanto kontrolu sian salutaĵon, aŭ kontrolu ĝin permane sube.", - "Manually Verify": "Permane kontroli", - "Show a presence dot next to DMs in the room list": "Montri punkton de ĉeesteco apud rektaj ĉambroj en la listo de ĉambroj", "Support adding custom themes": "Subteni aldonadon de propraj haŭtoj", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Ŝalti transirajn subskribojn por kontroli uzantojn anstataŭ aparatojn (ankoraŭ evoluigate)", - "Enable local event indexing and E2EE search (requires restart)": "Ŝalti lokan indeksadon de okazoj kaj serĉon en tutvoja ĉifrado (bezonas restartigon)", "Show info about bridges in room settings": "Montri informon pri pontoj en agordoj de ĉambro", - "Show padlocks on invite only rooms": "Montri serurojn sur ĉambroj por invititaj", - "Keep secret storage passphrase in memory for this session": "Teni pasfrazon de sekreta deponejo en memoro dum ĉi tiu salutaĵo", "Review": "Rekontroli", "This bridge was provisioned by .": "Ĉi tiu ponto estas provizita de .", "This bridge is managed by .": "Ĉi tiu ponto estas administrata de .", @@ -1940,7 +1789,6 @@ "Securely cache encrypted messages locally for them to appear in search results.": "Sekure kaŝmemori ĉifritajn mesaĝojn loke, por aperigi ilin en serĉrezultoj.", "Enable": "Ŝalti", "%(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 malhavas kelkajn partojn bezonajn por sekura loka kaŝmemorado de ĉirfitaj mesaĝoj. Se vi volas eksperimenti pri ĉi tiu kapablo, kunmetu propran klienton «%(brand)s Dekstop» kun aldonitaj serĉopartoj.", - "%(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 ne povas sekure loke kaŝmemori ĉifritajn mesaĝojn, rulate en reta foliumilo. Uzu la klienton %(brand)s Desktop por aperigi ĉirfritajn mesaĝojn en serĉorezultoj.", "Connecting to integration manager...": "Konektante al kunigilo…", "This session is backing up your keys. ": "Ĉi tiu salutaĵo savkopias viajn ŝlosilojn. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Ĉi tiu salutaĵo ne savkopias viajn ŝlosilojn, sed vi jam havas savkopion, el kiu vi povas rehavi datumojn, kaj ilin kreskigi plue.", @@ -1957,7 +1805,6 @@ "Backup has an invalid signature from unverified session ": "Savkopio havas nevalidan subskribon de nekontrolita salutaĵo ", "Backup is not signed by any of your sessions": "Savkopio estas subskribita de neniu el viaj salutaĵoj", "This backup is trusted because it has been restored on this session": "Ĉi tiu savkopio estas fidata, ĉar ĝi estis rehavita en ĉi tiu salutaĵo", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Savkopia ŝlosilo estas deponita en sekreta deponejo, sed tiu funkcio ne estas ŝaltita en ĉi tiu salutaĵo. Bonvolu ŝalti transirajn subskribojn en Laboratorio por modifi la staton de savkopiado.", "Backup key stored: ": "Savkopia ŝlosilo deponita: ", "Your keys are not being backed up from this session.": "Viaj ŝlosiloj ne estas savkopiataj el ĉi tiu salutaĵo.", "Enable desktop notifications for this session": "Ŝalti labortablajn sciigojn por ĉi tiu salutaĵo", @@ -1989,12 +1836,10 @@ "eg: @bot:* or example.org": "ekz: @bot:* aŭ ekzemplo.org", "Subscribing to a ban list will cause you to join it!": "Abono de listo de forbaroj aligos vin al ĝi!", "If this isn't what you want, please use a different tool to ignore users.": "Se vi ne volas tion, bonvolu uzi alian ilon por malatenti uzantojn.", - "Room ID or alias of ban list": "Identigilo de ĉambro aŭ kromnomo de listo de forbaroj", "Session ID:": "Identigilo de salutaĵo:", "Session key:": "Ŝlosilo de salutaĵo:", "Message search": "Serĉado de mesaĝoj", "Cross-signing": "Transiraj subskriboj", - "Sessions": "Salutaĵoj", "A session's public name is visible to people you communicate with": "Publika nomo de salutaĵo estas videbla al homoj, kun kiuj vi komunikas", "This room is bridging messages to the following platforms. Learn more.": "Ĉi tiu ĉambro transpontigas mesaĝojn al la jenaj platformoj. Eksciu plion.", "This room isn’t bridging messages to any platforms. Learn more.": "Ĉi tiu ĉambro transpontigas mesaĝojn al neniu platformo. Eksciu plion.", @@ -2003,10 +1848,6 @@ "You have not verified this user.": "Vi ne kontrolis tiun ĉi uzanton.", "You have verified this user. This user has verified all of their sessions.": "Vi kontrolis tiun ĉi uzanton. Ĝi kontrolis ĉiomon da siaj salutaĵoj.", "Someone is using an unknown session": "Iu uzas nekonatan salutaĵon", - "Some sessions for this user are not trusted": "Iuj salutaĵoj de ĉi tiu uzanto ne estas fidataj", - "All sessions for this user are trusted": "Ĉiuj salutaĵoj de ĉi tiu uzanto estas fidataj", - "Some sessions in this encrypted room are not trusted": "Iuj salutaĵoj en ĉi tiu ĉifrita ĉambro ne estas fidataj", - "All sessions in this encrypted room are trusted": "Ĉiuj salutaĵoj en ĉi tiu ĉifrita ĉambro estas fidataj", "Your key share request has been sent - please check your other sessions for key share requests.": "Via peto pri havigo de ŝlosilo estas sendita – bonvolu kontroli viajn aliajn salutaĵojn je petojn pri havigo de ŝlosiloj.", "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.": "Petoj pri havigo de ŝlosiloj estas memage sendataj al viaj aliaj salutaĵoj. Se vi rifuzis aŭ forigis la peton pri havigo de ŝlosiloj en aliaj viaj salutaĵoj, klaku ĉi tien por ree peti ŝlosilojn por ĉi tiu salutaĵo.", "If your other sessions do not have the key for this message you will not be able to decrypt them.": "Se viaj aliaj salutaĵoj ne havas la ŝlosilon por ĉi tiu mesaĝo, vi ne povos ilin malĉifri.", @@ -2015,17 +1856,11 @@ "Encrypted by a deleted session": "Ĉifrita de forigita salutaĵo", "Invite only": "Nur por invititaj", "Close preview": "Fermi antaŭrigardon", - "No sessions with registered encryption keys": "Neniuj salutaĵoj kun registritaj ĉifraj ŝlosiloj", "Unrecognised command: %(commandText)s": "Nerekonita komando: %(commandText)s", "You can use /help to list available commands. Did you mean to send this as a message?": "Vi povas komandi /help por listigi uzeblajn komandojn. Ĉu vi intencis sendi ĉi tion kiel mesaĝon?", "Hint: Begin your message with // to start it with a slash.": "Helpeto: Komencu vian mesaĝon per // por komenci ĝin per suprenstreko.", "Mark all as read": "Marki ĉion legita", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Eraris ĝisdatigo de la alternativaj adresoj de la ĉambro. Eble la servilo ne permesas tion, aŭ io dumtempe ne funkcias.", - "You don't have permission to delete the alias.": "Vi ne havas permeson forigi la kromnomon.", - "Alternative addresses for this room:": "Alternativaj adresoj de ĉi tiu ĉambro:", - "This room has no alternative addresses": "Ĉi tiu ĉambro ne havas alternativajn adresojn", - "New address (e.g. #foo:domain)": "Nova adreso (ekz. #foo:domain)", - "Local addresses (unmoderated content)": "Lokaj adresoj (nereguligata enhavo)", "Waiting for %(displayName)s to accept…": "Atendante akcepton de %(displayName)s…", "Accepting…": "Akceptante…", "Messages in this room are end-to-end encrypted.": "Mesaĝoj en ĉi tiu ĉambro estas tutvoje ĉifrataj.", @@ -2051,9 +1886,6 @@ "Verify by comparing unique emoji.": "Kontrolu per komparo de unikaj bildsignoj.", "You've successfully verified %(displayName)s!": "Vi sukcese kontrolis uzanton %(displayName)s!", "Got it": "Komprenite", - "Verification timed out. Start verification again from their profile.": "Kontrolo atingis tempolimon. Rekomencu la kontrolon de ĝia profilo.", - "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s nuligis la kontrolon. Rekomencu ĝin de ĝia profilo.", - "You cancelled verification. Start verification again from their profile.": "Vi nuligis la kontrolon. Rekomencu ĝin de ĝia profilo.", "Encryption enabled": "Ĉifrado estas ŝaltita", "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Mesaĝoj en ĉi tiu ĉambro estas tutvoje ĉifrataj. Eksciu plion kaj kontrolu ĉi tiun uzanton per ĝia profilo.", "Encryption not enabled": "Ĉifrado ne estas ŝaltita", @@ -2074,11 +1906,8 @@ "Clear all data in this session?": "Ĉu vakigi ĉiujn datumojn en ĉi tiu salutaĵo?", "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Vakigo de ĉiuj datumoj el ĉi tiu salutaĵo estas porĉiama. Ĉifritaj mesaĝoj perdiĝos, malse iliaj ŝlosiloj savkopiiĝis.", "Verify session": "Kontroli salutaĵon", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Por kontroli, ke ĉi tiu salutaĵo estas fidinda, bonvolu kontroli, ke la ŝlosilo, kiun vi vidas en Agordoj de uzanto en tiu aparato, akordas kun la suba:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Por kontroli, ke ĉi tiu salutaĵo estas fidinda, bonvolu kontakti ĝian posedanton alimaniere (ekz. persone aŭ telefone), kaj demandu al ĝi, ĉu la ŝlosilo, kiun ĝi vidas en siaj Agordoj de uzanto por ĉi tiu salutaĵo akordas kun la suba:", "Session name": "Nomo de salutaĵo", "Session key": "Ŝlosilo de salutaĵo", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Se ĝi akordas, premu la kontrolan butonon sube. Se ne, iu alia spionas la salutaĵon kaj vi probable volos premi la forlistigan butonon anstataŭe.", "Verification Requests": "Petoj de kontrolo", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Kontrolo de tiu ĉi uzanto markos ĝian salutaĵon fidata, kaj ankaŭ markos vian salutaĵon fidata por ĝi.", "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.": "Kontrolu ĉi tiun aparaton por marki ĝin fidata. Fidado povas pacigi la menson de vi kaj aliaj uzantoj dum uzado de tutvoje ĉifrataj mesaĝoj.", @@ -2093,12 +1922,7 @@ "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "La jenaj uzantoj eble ne ekzistas aŭ ne validas, kaj ne povas invitiĝi: %(csvNames)s", "Recent Conversations": "Freŝaj interparoloj", "Recently Direct Messaged": "Freŝaj rektaj ĉambroj", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Se vi ne povas iun trovi, petu ĝian uzantonomon, kaj havigu al ĝi vian uzantonomon (%(userId)s) aŭ ligilon al profilo.", "Go": "Iri", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Se vi ne povas iun trovi, petu ĝian uzantonomon (ekz. @uzanto:servilo.net), aŭ prezentu al ĝi tiun ĉi ĉambron.", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "Vi aldonis novas salutaĵon «%(displayName)s», kiu petas ĉifrajn ŝlosilojn.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Via nekontrolita salutaĵo «%(displayName)s» petas ĉifrajn ŝlosilojn.", - "Loading session info...": "Enlegante informojn pri salutaĵo…", "Your account is not secure": "Via konto ne estas sekura", "Your password": "Via pasvorto", "This session, or the other session": "Ĉi tiu salutaĵo, aŭ la alia salutaĵo", @@ -2112,24 +1936,9 @@ "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Ĉi tio kutime influas nur traktadon de la ĉambro de la servilo. Se vi spertas problemojn pri %(brand)s, bonvolu raporti problemon.", "You'll upgrade this room from to .": "Vi gradaltigos ĉi tiun ĉambron de al .", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Ĉi tio ebligos saluti aliajn salutaĵojn, kaj reveni al via konto post adiaŭo.", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Vi nun forlistigas nekontrolitajn salutaĵojn; por sendi mesaĝojn al tiuj salutaĵoj, vi devas ilin kontroli.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Ni rekomendas, ke vi trairu la kontrolon de ĉiu salutaĵo por konfirmi, ke ili apartenas al siaj ĝustaj posedantoj, sed laŭplaĉe vi povas ankaŭ sendi la mesaĝon sen kontrolo.", - "Room contains unknown sessions": "Ĉambro enhavas nekonatajn salutaĵojn", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "«%(RoomName)s» enhavas salutaĵojn, kiujn vi ne vidis antaŭe.", - "Unknown sessions": "Nekonataj salutaĵoj", "Verification Request": "Kontrolpeto", - "Enter secret storage passphrase": "Enigu pasfrazon de sekreta deponejo", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Ne povis atingi sekretan deponejon. Bonvolu kontroli, ke vi enigis la ĝustan pasfrazon.", - "Warning: You should only access secret storage from a trusted computer.": "Averto: vi aliru sekretan deponejon nur de fidata komputilo.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Aliru viajn sekuran historion de mesaĝoj kaj identecon de transiraj subskriboj por kontrolo de aliaj salutaĵoj per enigo de via pasfrazo.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Se vi forgesis vian pasfrazon, vi povas uzi vian rehavan ŝlosilonreagordi rehavon.", - "Enter secret storage recovery key": "Enigu rehavan ŝlosilon de la sekreta deponejo", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Ne povas atingi sekretan deponejon. Bonvolu kontroli, ke vi enigis la ĝustan rehavan ŝlosilon.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Aliru vian sekuran historion de mesaĝoj kaj vian identecon de transiraj subskriboj por kontrolo de aliaj salutaĵoj per enigo de via rehava ŝlosilo.", - "If you've forgotten your recovery key you can .": "Se vi forgesis vian rehavan ŝlosilon, vi povas .", "Recovery key mismatch": "Malakordo de rehavaj ŝlosiloj", "Incorrect recovery passphrase": "Malĝusta rehava pasfrazo", - "Backup restored": "Savkopio rehavita", "Enter recovery passphrase": "Enigu la rehavan pasfrazon", "Enter recovery key": "Enigu la rehavan ŝlosilon", "Warning: You should only set up key backup from a trusted computer.": "Averto: savkopiadon de ŝlosiloj vi starigu nur el fidata komputilo.", @@ -2141,7 +1950,6 @@ "Country Dropdown": "Landa falmenuo", "Confirm your identity by entering your account password below.": "Konfirmu vian identecon per enigo de la pasvorto de via konto sube.", "Missing captcha public key in homeserver configuration. Please report this to your homeserver administrator.": "Mankas publika ŝlosilo por testo de homeco en hejmservila agordaro. Bonvolu raporti tion al la administranto de via hejmservilo.", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Via nova salutaĵo nun estas kontrolita. Ĝi povas atingi viajn ĉifritajn mesaĝojn, kaj aliaj uzantoj vidos ĝin fidata.", "Your new session is now verified. Other users will see it as trusted.": "Via nova salutaĵo nun estas kontrolita. Aliaj uzantoj vidos ĝin fidata.", "Without completing security on this session, it won’t have access to encrypted messages.": "Sen plenigo de sekureco en ĉi tiu salutaĵo, ĝi ne povos atingi ĉifritajn mesaĝojn.", @@ -2149,25 +1957,17 @@ "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.": "Vi adiaŭis ĉiujn viajn salutaĵojn kaj ne plu ricevados pasivajn sciigojn. Por reŝalti sciigojn, vi resalutu per ĉiu el viaj aparatoj.", "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.": "Reprenu aliron al via konto kaj rehavu ĉifrajn ŝlosilojn deponitajn en ĉi tiu salutaĵo. Sen ili, vi ne povos legi ĉiujn viajn sekurajn mesaĝojn en iu ajn salutaĵo.", "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.": "Viaj personaj datumoj (inkluzive ĉifrajn ŝlosilojn) estas ankorŭ deponitaj en ĉi tiu salutaĵo. Vakigu ĝin, se vi ne plu uzos ĉi tiun salutaĵon, aŭ volas saluti alian konton.", - "Sender session information": "Informoj pri salutaĵo de sendinto", "Enter your account password to confirm the upgrade:": "Enigu pasvorton de via konto por konfirmi la gradaltigon:", "Restore your key backup to upgrade your encryption": "Rehavu vian savkopion de ŝlosiloj por gradaltigi vian ĉifradon", "Restore": "Rehavi", "You'll need to authenticate with the server to confirm the upgrade.": "Vi devos aŭtentikigi kun la servilo por konfirmi la gradaltigon.", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Gradaltigu ĉi tiun salutaĵon por ebligi al ĝi kontroladon de aliaj salutaĵoj, donante al ili aliron al ĉifritaj mesaĵoj, kaj markante ilin fidataj por aliaj uzantoj.", - "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Starigu ĉifradon en ĉi tiu salutaĵo por ebligi al ĝi kontroladon de aliaj salutaĵoj, donante al ili aliron al ĉifritaj mesaĵoj, kaj markante ilin fidataj por aliaj uzantoj.", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Sekurigu viajn ĉifrajn ŝlosilojn per pasfrazo. Por plejgranda sekureco, ĝi malsamu la pasvorton de via konto:", - "Enter a passphrase": "Enigu pasfrazon", - "Back up my encryption keys, securing them with the same passphrase": "Savkopiu miajn ĉifrajn ŝlosilojn, sekurigante ilin per la sama pasfrazo", "Set up with a recovery key": "Starigi kun rehava ŝlosilo", - "Enter your passphrase a second time to confirm it.": "Enigu vian pasfrazon duan fojon por konfirmi ĝin.", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Tenu ĝian kopion en sekura loko, ekzemple mastrumilo de pasvortoj, aŭ eĉ sekurkesto.", "Your recovery key": "Via rehava ŝlosilo", "Your recovery key has been copied to your clipboard, paste it to:": "Via rehava ŝlosilo estis kopiita al via tondujo, algluu ĝin al:", "Your recovery key is in your Downloads folder.": "Via rehava ŝlosilo estas en via dosierujo kun Elŝutoj.", - "You can now verify your other devices, and other users to keep your chats safe.": "Vi nun povas kontroli aliajn viajn aparatojn, kaj aliajn uzantojn, por teni viajn babilojn sekurajn.", "Make a copy of your recovery key": "Fari kopionde via rehava ŝlosilo", - "You're done!": "Vi finis!", "Unable to set up secret storage": "Ne povas starigi sekretan deponejon", "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.": "Sen Sekura rehavo de mesaĝoj, vi ne povos rehavi vian historion de ĉifritaj mesaĝoj se vi adiaŭos aŭ uzos alian salutaĵon.", "Create key backup": "Krei savkopion de ŝlosiloj", @@ -2177,7 +1977,6 @@ "If disabled, messages from encrypted rooms won't appear in search results.": "Post malŝalto, mesaĝoj el ĉifritaj ĉambroj ne aperos en serĉorezultoj.", "Disable": "Malŝalti", "Not currently indexing messages for any room.": "Mesaĝoj estas indeksataj en neniu ĉambro.", - "Currently indexing: %(currentRoom)s.": "Nun indeksante: %(currentRoom)s.", "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s sekure loke kaŝmemoras ĉifritajn mesaĝojn por aperigi ilin en serĉorezultoj:", "Space used:": "Spaco uzita:", "Indexed messages:": "Indeksitaj masaĝoj:", @@ -2208,18 +2007,12 @@ "Add a new server...": "Aldoni novan servilon…", "%(networkName)s rooms": "Ĉambroj de %(networkName)s", "Matrix rooms": "Ĉambroj de Matrix", - "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "Malfermi jaman salutaĵon kaj kontroli ĉi tiun per ĝi, permesante al ĝi aliron al ĉifritaj mesaĝoj.", - "Waiting…": "Atendante…", - "If you can’t access one, ": "Se vi ne povas iun atingi, ", "Manually Verify by Text": "Permane kontroli tekste", "Interactively verify by Emoji": "Interage kontroli bildosigne", "Self signing private key:": "Memsubskriba privata ŝlosilo:", "cached locally": "kaŝmemorita loke", "not found locally": "ne trovita loke", "User signing private key:": "Uzantosubskriba privata ŝlosilo:", - "Secret Storage key format:": "Ŝlosila formo de sekreta deponejo:", - "outdated": "eksdata", - "up to date": "ĝisdata", "Keyboard Shortcuts": "Klavkombinoj", "Start a conversation with someone using their name, username (like ) or email address.": "Komencu interparolon kun iu per ĝia nomo, uzantonomo (kiel ), aŭ retpoŝtadreso.", "a new master key signature": "nova ĉefŝlosila subskribo", @@ -2229,7 +2022,6 @@ "%(brand)s encountered an error during upload of:": "%(brand)s eraris dum alŝuto de:", "Upload completed": "Alŝuto finiĝis", "Cancelled signature upload": "Alŝuto de subskribo nuliĝis", - "Unabled to upload": "Ne povas alŝuti", "Signature upload success": "Alŝuto de subskribo sukcesis", "Signature upload failed": "Alŝuto de subskribo malsukcesis", "Confirm by comparing the following with the User Settings in your other session:": "Konfirmu per komparo de la sekva kun la agardoj de uzanto en via alia salutaĵo:", @@ -2276,10 +2068,7 @@ "Space": "Spaco", "End": "Finen-klavo", "Whether you're using %(brand)s as an installed Progressive Web App": "Ĉu vi uzas %(brand)son kiel Progresan retan aplikaĵon", - "Review Sessions": "Rekontroli salutaĵojn", - "Unverified login. Was this you?": "Nekontrolita salutaĵo. Ĉu tio estis vi?", "Manually verify all remote sessions": "Permane kontroli ĉiujn forajn salutaĵojn", - "Update your secure storage": "Ĝisdatigi vian sekuran deponejon", "Session backup key:": "Savkopia ŝlosilo de salutaĵo:", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Unuope kontroli ĉiun salutaĵon de uzanto por marki ĝin fidata, ne fidante transire subskribitajn aparatojn.", "Invalid theme schema.": "Nevalida skemo de haŭto.", @@ -2310,8 +2099,6 @@ "Send a bug report with logs": "Sendi erarraporton kun protokolo", "You signed in to a new session without verifying it:": "Vi salutis novan salutaĵon sen kontrolo:", "Verify your other session using one of the options below.": "Kontrolu vian alian salutaĵon per unu el la ĉi-subaj elektebloj.", - "Enable cross-signing to verify per-user instead of per-session": "Permesi transirajn subskribojn por kontroli unuopajn uzantojn anstataŭ salutaĵojn", - "Keep recovery passphrase in memory for this session": "Teni rehavan pasfrazon en memoro dum ĉi tiu salutaĵo", "Confirm the emoji below are displayed on both sessions, in the same order:": "Konfirmu, ke la ĉi-subaj bildsignoj aperas samorde en ambaŭ salutaĵoj:", "Verify this session by confirming the following number appears on its screen.": "Kontrolu ĉi tiun salutaĵon per konfirmo, ke la jena nombro aperas sur ĝia ekrano.", "Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Atendante konfirmon de via alia salutaĵo, %(deviceName)s (%(deviceId)s)…", @@ -2353,8 +2140,6 @@ "Unable to upload": "Ne povas alŝuti", "Verify other session": "Kontroli alian salutaĵon", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Ne povas aliri sekretan deponejon. Bonvolu kontroli, ke vi enigis la ĝustan rehavan pasfrazon.", - "Warning: You should only do this on a trusted computer.": "Averto: vi faru ĉi tion nur per fidata komputilo.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Se vi forgesis vian rehavan pasfrazon, vi povas uzi vian rehavan ŝlosilonagordi novajn rehavajn elekteblojn.", "Restoring keys from backup": "Rehavo de ŝlosiloj el savkopio", "Fetching keys from server...": "Akirante ŝlosilojn el servilo…", "%(completed)s of %(total)s keys restored": "%(completed)s el %(total)s ŝlosiloj rehaviĝis", @@ -2376,19 +2161,13 @@ "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Konfirmu vian identecon per kontrolo de ĉi tiu saluto el unu el viaj aliaj salutaĵoj, permesante al ĝi legadon de ĉifritaj mesaĝoj.", "This requires the latest %(brand)s on your other devices:": "Ĉi tio bezonas la plej freŝan version de %(brand)s en viaj aliaj aparatoj:", "or another cross-signing capable Matrix client": "aŭ alian Matrix-klienton kapablan je transiraj subskriboj", - "Use Recovery Passphrase or Key": "Uzi rehavajn pasfrazon aŭ ŝlosilon", "Great! This recovery passphrase looks strong enough.": "Bonege! Ĉi tiu rehava pasfrazo ŝajnas sufiĉe forta.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Agordu rehavan pasfrazon por sekurigi ĉifritajn informojn kaj rehavi ilin post adiaŭo. Ĝi malsamu al la pasvorto de via konto:", "Enter a recovery passphrase": "Enigu rehavan pasfrazon", - "Back up encrypted message keys": "Savkopii ŝlosilojn al ĉifritaj mesaĝoj", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Atingu vian sekuran historion de mesaĝoj kaj vian transire subskriban identecon per enigo de via rehava pasfrazo.", "Enter your recovery passphrase a second time to confirm it.": "Enigu vian rehavan pasfrazon duafoje por konfirmi ĝin.", "Confirm your recovery passphrase": "Konfirmi vian rehavan pasfrazon", "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Via rehava ŝlosilo asekuras vin – vi povas ĝin uzi por rehavi aliron al viaj ĉifritaj mesaĝoj se vi forgesas vian rehavan pasfrazon.", "Unable to query secret storage status": "Ne povis peti staton de sekreta deponejo", - "Confirm recovery passphrase": "Konfirmi rehavan pasfrazon", "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Ni deponos ĉifritan kopion de viaj ŝlosiloj en nia servilo. Sekurigu vian savkopion per rehava pasfrazo.", - "Enter a recovery passphrase...": "Enigu rehavan pasfrazon…", "Please enter your recovery passphrase a second time to confirm.": "Bonvolu enigi vian rehavan pasfrazon duafoje por konfirmi.", "Repeat your recovery passphrase...": "Ripetu vian rehavan pasfrazon…", "Secure your backup with a recovery passphrase": "Sekurigu vian savkopion per rehava pasfrazo", @@ -2411,16 +2190,13 @@ "Jump to oldest unread message": "Iri al plej malnova nelegita mesaĝo", "Upload a file": "Alŝuti dosieron", "Create room": "Krei ĉambron", - "Use IRC layout": "Uzi aranĝon de IRC", "IRC display name width": "Larĝo de vidiga nomo de IRC", "Font scaling": "Skalado de tiparoj", "Font size": "Grando de tiparo", - "Custom font size": "Propra grando de tiparo", "Size must be a number": "Grando devas esti nombro", "Custom font size can only be between %(min)s pt and %(max)s pt": "Propra grando de tiparo povas interi nur %(min)s punktojn kaj %(max)s punktojn", "Use between %(min)s pt and %(max)s pt": "Uzi inter %(min)s punktoj kaj %(max)s punktoj", "Appearance": "Aspekto", - "Use the improved room list (in development - refresh to apply changes)": "Uzi la plibonigitan liston de ĉambroj (ankoraŭ evoluigate – aktualigu la paĝon por efektivigi ŝanĝojn)", "Room name or address": "Nomo aŭ adreso de ĉambro", "Joins room with given address": "Aligas al ĉambro kun donita adreso", "Unrecognised room address:": "Nerekonita adreso de ĉambro:", @@ -2456,6 +2232,5 @@ "Upgrade your %(brand)s": "Gradaltigi vian %(brand)son", "A new version of %(brand)s is available!": "Nova versio de %(brand)s estas disponebla!", "New version available. Update now.": "Nova versio estas disponebla. Ĝisdatigu nun.", - "Emoji picker": "Elektilo de bildsignoj", - "Show %(n)s more": "Montri %(n)s pliajn" + "Emoji picker": "Elektilo de bildsignoj" } diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index d53679934c..a1262738d4 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -5,7 +5,6 @@ "Access Token:": "Token de Acceso:", "Admin": "Administrador", "Advanced": "Avanzado", - "Algorithm": "Algoritmo", "Always show message timestamps": "Siempre mostrar las marcas temporales de mensajes", "Authentication": "Autenticación", "%(items)s and %(lastItem)s": "%(items)s y %(lastItem)s", @@ -24,7 +23,6 @@ "Ban": "Vetar", "Banned users": "Usuarios vetados", "Bans user with given id": "Veta al usuario con la ID dada", - "Blacklisted": "Prohibido", "Call Timeout": "Tiempo de Espera de Llamada", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "No se puede conectar al servidor doméstico via HTTP, cuando es necesario un enlace HTTPS en la barra de direcciones de tu navegador. Ya sea usando HTTPS o habilitando los scripts inseguros.", "Change Password": "Cambiar Contraseña", @@ -33,7 +31,6 @@ "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s cambió el nombre de la sala a %(roomName)s.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s cambió el tema a \"%(topic)s\".", "Changes your display nickname": "Cambia tu apodo público", - "Claimed Ed25519 fingerprint key": "Clave de huella digital Ed25519 reclamada", "Click here to fix": "Haz clic aquí para arreglar", "Click to mute audio": "Haz clic para silenciar el audio", "Click to mute video": "Haz clic para silenciar el vídeo", @@ -44,31 +41,23 @@ "Commands": "Comandos", "Confirm password": "Confirmar contraseña", "Continue": "Continuar", - "Could not connect to the integration server": "No se pudo conectar al servidor de integración", "Create Room": "Crear Sala", "Cryptography": "Criptografía", "Current password": "Contraseña actual", - "Curve25519 identity key": "Clave de identidad Curve25519", "/ddg is not a command": "/ddg no es un comando", "Deactivate Account": "Desactivar Cuenta", "Decrypt %(text)s": "Descifrar %(text)s", - "Decryption error": "Error de descifrado", "Deops user with given id": "Degrada al usuario con la ID dada", "Default": "Por Defecto", - "Device ID": "ID de Dispositivo", - "Direct chats": "Conversaciones directas", "Disinvite": "Deshacer invitación", "Displays action": "Muestra la acción", "Download %(text)s": "Descargar %(text)s", - "Ed25519 fingerprint": "Huella digital Ed25519", "Email": "Correo electrónico", "Email address": "Dirección de correo electrónico", "Emoji": "Emoticones", "%(senderName)s ended the call.": "%(senderName)s finalizó la llamada.", - "End-to-end encryption information": "Información de cifrado de extremo a extremo", "Error": "Error", "Error decrypting attachment": "Error al descifrar adjunto", - "Event information": "Información de eventos", "Existing Call": "Llamada Existente", "Export E2E room keys": "Exportar claves de salas con Cifrado de Extremo a Extremo", "Failed to ban user": "Bloqueo del usuario falló", @@ -85,7 +74,6 @@ "Failed to send email": "No se pudo enviar el correo electrónico", "Failed to send request.": "El envío de la solicitud falló.", "Failed to set display name": "No se pudo establecer el nombre público", - "Failed to toggle moderator status": "Falló al cambiar estatus de moderador", "Failed to unban": "No se pudo quitar veto", "Failed to verify email address: make sure you clicked the link in the email": "No se pudo verificar la dirección de correo electrónico: asegúrate de hacer clic en el enlace del correo electrónico", "Failure to create room": "No se pudo crear sala", @@ -112,14 +100,12 @@ "Sign in with": "Quiero iniciar sesión con", "Join Room": "Unirse a la Sala", "%(targetName)s joined the room.": "%(targetName)s se unió a la sala.", - "Joins room with given alias": "Se une a la sala con el alias dado", "%(senderName)s kicked %(targetName)s.": "%(senderName)s expulsó a %(targetName)s.", "Kick": "Expulsar", "Kicks user with given id": "Expulsa al usuario con la ID dada", "Labs": "Laboratorios", "Leave room": "Salir de la sala", "%(targetName)s left the room.": "%(targetName)s salió de la sala.", - "Local addresses for this room:": "Direcciones locales para esta sala:", "Logout": "Cerrar Sesión", "Low priority": "Prioridad baja", "Accept": "Aceptar", @@ -130,15 +116,11 @@ "Default Device": "Dispositivo por defecto", "Microphone": "Micrófono", "Camera": "Cámara", - "Alias (optional)": "Alias (opcional)", "Anyone": "Todos", "Close": "Cerrar", "Custom": "Personalizado", "Custom level": "Nivel personalizado", "Decline": "Rechazar", - "device id: ": "ID de dispositivo: ", - "Disable Notifications": "Deshabilitar Notificaciones", - "Enable Notifications": "Habilitar Notificaciones", "Enter passphrase": "Ingresar frase de contraseña", "Error: Problem communicating with the given homeserver.": "Error: No es posible comunicar con el servidor doméstico indicado.", "Export": "Exportar", @@ -177,19 +159,15 @@ "Failed to invite the following users to the %(roomName)s room:": "No se pudo invitar a los siguientes usuarios a la sala %(roomName)s:", "Unknown error": "Error desconocido", "Incorrect password": "Contraseña incorrecta", - "To continue, please enter your password.": "Para continuar, ingresa tu contraseña por favor.", - "I verify that the keys match": "Verifico que las claves coinciden", "Unable to restore session": "No se puede recuperar la sesión", "Room Colour": "Color de la sala", "%(roomName)s does not exist.": "%(roomName)s no existe.", "%(roomName)s is not accessible at this time.": "%(roomName)s no es accesible en este momento.", "Rooms": "Salas", "Save": "Guardar", - "Scroll to bottom of page": "Bajar al final de la página", "Search": "Buscar", "Search failed": "Falló la búsqueda", "Seen by %(userName)s at %(dateTime)s": "Visto por %(userName)s el %(dateTime)s", - "Send anyway": "Enviar de todos modos", "Send Reset Email": "Enviar Correo Electrónico de Restauración", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s envió una imagen.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s invitó a %(targetDisplayName)s a unirse a la sala.", @@ -206,7 +184,6 @@ "Sign out": "Cerrar sesión", "%(count)s of your messages have not been sent.|other": "Algunos de sus mensajes no han sido enviados.", "Someone": "Alguien", - "Start a chat": "Iniciar una conversación", "Start authentication": "Iniciar autenticación", "Submit": "Enviar", "Success": "Éxito", @@ -226,15 +203,12 @@ "Moderator": "Moderador", "Mute": "Silenciar", "Name": "Nombre", - "New address (e.g. #foo:%(localDomain)s)": "Dirección nueva (ej. #foo:%(localDomain)s)", "New passwords don't match": "Las contraseñas nuevas no coinciden", "New passwords must match each other.": "Las contraseñas nuevas deben coincidir.", - "none": "ninguno", "not specified": "sin especificar", "Notifications": "Notificaciones", "(not supported by this browser)": "(no soportado por este navegador)", "": "", - "NOT verified": "SIN verificar", "No display name": "Sin nombre público", "No more results": "No hay más resultados", "No results": "No hay resultados", @@ -254,11 +228,9 @@ "Profile": "Perfil", "Public Chat": "Sala pública", "Reason": "Motivo", - "Revoke Moderator": "Eliminar Moderador", "Register": "Registrar", "%(targetName)s rejected the invitation.": "%(targetName)s rechazó la invitación.", "Reject invitation": "Rechazar invitación", - "Remote addresses for this room:": "Direcciones remotas para esta sala:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s eliminó su nombre público (%(oldDisplayName)s).", "%(senderName)s removed their profile picture.": "%(senderName)s eliminó su imagen de perfil.", "Remove": "Eliminar", @@ -287,10 +259,7 @@ "Room directory": "Directorio de salas", "Custom Server Options": "Opciones de Servidor Personalizado", "unknown error code": "Código de error desconocido", - "Start verification": "Iniciar verificación", "Skip": "Omitir", - "Share without verifying": "Compartir sin verificar", - "Ignore request": "Ignorar solicitud", "Do you want to set an email address?": "¿Quieres poner una dirección de correo electrónico?", "This will allow you to reset your password and receive notifications.": "Esto te permitirá reiniciar tu contraseña y recibir notificaciones.", "Authentication check failed: incorrect password?": "La verificación de autenticación falló: ¿contraseña incorrecta?", @@ -311,8 +280,6 @@ "Unable to capture screen": "No es posible capturar la pantalla", "Unable to enable Notifications": "No es posible habilitar las Notificaciones", "unknown caller": "Persona que llama desconocida", - "unknown device": "dispositivo desconocido", - "Unknown room %(roomId)s": "Sala desconocida %(roomId)s", "Unnamed Room": "Sala sin nombre", "Uploading %(filename)s and %(count)s others|zero": "Subiendo %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Subiendo %(filename)s y otros %(count)s", @@ -322,13 +289,9 @@ "Upload file": "Subir archivo", "Upload new:": "Subir nuevo:", "Usage": "Uso", - "Use compact timeline layout": "Usar diseño de cronología compacto", - "User ID": "ID de Usuario", "Username invalid: %(errMessage)s": "Nombre de usuario no válido: %(errMessage)s", "Users": "Usuarios", "Verification Pending": "Verificación Pendiente", - "Verification": "Verificación", - "verified": "verificado", "Verified key": "Clave verificada", "Video call": "Llamada de vídeo", "Voice call": "Llamada de voz", @@ -353,9 +316,7 @@ "The maximum permitted number of widgets have already been added to this room.": "La cantidad máxima de widgets permitida ha sido alcanzada en esta sala.", "To use it, just wait for autocomplete results to load and tab through them.": "Para utilizarlo, tan solo espera a que se carguen los resultados de autocompletar y navega entre ellos.", "%(senderName)s unbanned %(targetName)s.": "%(senderName)s le quitó el veto a %(targetName)s.", - "unencrypted": "sin cifrar", "Unmute": "Dejar de silenciar", - "Unrecognised room alias:": "Alias de sala no reconocido:", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (nivel de permisos %(powerLevelNumber)s)", "You cannot place VoIP calls in this browser.": "No puedes realizar llamadas VoIP en este navegador.", "You do not have permission to post to this room": "No tienes permiso para publicar en esta sala", @@ -386,11 +347,6 @@ "Aug": "Ago", "Add rooms to this community": "Agregar salas a esta comunidad", "Call Failed": "La Llamada Falló", - "Review Devices": "Revisar Dispositivos", - "Call Anyway": "Llamar de todos modos", - "Answer Anyway": "Contestar de Todos Modos", - "Call": "Llamar", - "Answer": "Contestar", "Sep": "Sep", "Oct": "Oct", "Nov": "Nov", @@ -400,11 +356,10 @@ "Online": "En línea", "Submit debug logs": "Enviar registros de depuración", "The platform you're on": "La plataforma en la que te encuentras", - "The version of %(brand)s": "La versión de %(brand)s", + "The version of %(brand)s": "La version de %(brand)s", "Your language of choice": "El idioma de tu elección", "Your homeserver's URL": "La URL de tu servidor doméstico", - "Your identity server's URL": "La URL de tu servidor de identidad", - "The information being sent to us to help make %(brand)s better includes:": "La información que se nos envía para ayudar a mejorar %(brand)s incluye:", + "The information being sent to us to help make %(brand)s better includes:": "La información que se nos envía para ayudarnos a mejorar %(brand)s incluye:", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Estés utilizando o no el modo de Texto Enriquecido del Editor de Texto Enriquecido", "Who would you like to add to this community?": "¿A quién te gustaría añadir a esta comunidad?", "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Advertencia: cualquier persona que añadas a una comunidad será públicamente visible a cualquiera que conozca la ID de la comunidad", @@ -412,7 +367,6 @@ "Invite to Community": "Invitar a la Comunidad", "Which rooms would you like to add to this community?": "¿Qué salas te gustaría añadir a esta comunidad?", "Fetching third party location failed": "Falló la obtención de la ubicación de un tercero", - "A new version of %(brand)s is available.": "Una nueva versión de %(brand)s está disponible.", "I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar", "Send Account Data": "Enviar Datos de la Cuenta", "Advanced notification settings": "Ajustes avanzados de notificaciones", @@ -436,8 +390,6 @@ "Send Custom Event": "Enviar evento personalizado", "All notifications are currently disabled for all targets.": "Las notificaciones están deshabilitadas para todos los objetivos.", "Failed to send logs: ": "Error al enviar registros: ", - "delete the alias.": "eliminar el alias.", - "To return to your account in future you need to set a password": "Para regresar a tu cuenta en el futuro debes establecer una contraseña", "Forget": "Olvidar", "World readable": "Legible por todo el mundo", "You cannot delete this image. (%(code)s)": "No puedes eliminar esta imagen. (%(code)s)", @@ -463,7 +415,6 @@ "No update available.": "No hay actualizaciones disponibles.", "Noisy": "Ruidoso", "Collecting app version information": "Recolectando información de la versión de la aplicación", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "¿Borrar el alias de la sala %(alias)s y eliminar %(name)s del directorio?", "Keywords": "Palabras clave", "Enable notifications for this account": "Habilitar notificaciones para esta cuenta", "Invite to this community": "Invitar a esta comunidad", @@ -520,7 +471,6 @@ "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.": "Los registros de depuración contienen datos de uso de la aplicación como nombre de usuario, ID o alias de las salas o grupos que hayas visitado (y nombres de usuario de otros usuarios). No contienen mensajes.", "Unhide Preview": "Mostrar Vista Previa", "Unable to join network": "No se puede unir a la red", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Es posible que los hayas configurado en un cliente que no sea %(brand)s. No puedes ajustarlos en %(brand)s, pero todavía se aplican", "Sorry, your browser is not able to run %(brand)s.": "¡Lo sentimos! Su navegador no puede ejecutar %(brand)s.", "Messages in group chats": "Mensajes en conversaciones en grupo", "Yesterday": "Ayer", @@ -547,9 +497,7 @@ "Quote": "Citar", "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!": "En su navegador actual, la apariencia y comportamiento de la aplicación puede ser completamente incorrecta, y algunas de las características podrían no funcionar. Si aún desea probarlo puede continuar, pero ¡no podremos ofrecer soporte por cualquier problema que pudiese tener!", "Checking for an update...": "Comprobando actualizaciones...", - "There are advanced notifications which are not shown here": "Hay notificaciones avanzadas que no se muestran aquí", "Every page you use in the app": "Cada página que utilizas en la aplicación", - "Your User Agent": "Tu Agente de Usuario", "Your device resolution": "La resolución de tu dispositivo", "Which officially provided instance you are using, if any": "Qué instancia proporcionada oficialmente estás utilizando, si estás utilizando alguna", "e.g. %(exampleValue)s": "ej. %(exampleValue)s", @@ -566,7 +514,6 @@ "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s", "Show these rooms to non-members on the community page and room list?": "¿Mostrar estas salas a los que no son miembros en la página de la comunidad y la lista de salas?", "Add rooms to the community": "Añadir salas a la comunidad", - "Room name or alias": "Nombre o alias de sala", "Add to community": "Añadir a la comunidad", "Failed to invite the following users to %(groupId)s:": "No se pudo invitar a los siguientes usuarios a %(groupId)s:", "Failed to invite users to community": "No se pudo invitar usuarios a la comunidad", @@ -618,12 +565,8 @@ "Mention": "Mencionar", "Invite": "Invitar", "Share Link to User": "Compartir Enlace al Usuario", - "User Options": "Opciones de Usuario", - "Make Moderator": "Convertir a Moderador", "Send an encrypted reply…": "Enviar una respuesta cifrada…", - "Send a reply (unencrypted)…": "Enviar una respuesta (sin cifrar)…", "Send an encrypted message…": "Enviar un mensaje cifrado…", - "Send a message (unencrypted)…": "Enviar un mensaje (sin cifrar)…", "Jump to message": "Ir a mensaje", "No pinned messages.": "No hay mensajes con chincheta.", "Loading...": "Cargando...", @@ -675,9 +618,6 @@ "Failed to copy": "Falló la copia", "Add an Integration": "Añadir una Integración", "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á a punto de ir a un sitio de terceros de modo que pueda autenticar su cuenta para usarla con %(integrationsUrl)s. ¿Desea continuar?", - "Removed or unknown message type": "Tipo de mensaje desconocido o eliminado", - "Message removed by %(userId)s": "Mensaje eliminado por %(userId)s", - "Message removed": "Mensaje eliminado", "An email has been sent to %(emailAddress)s": "Se envió un correo electrónico a %(emailAddress)s", "Please check your email to continue registration.": "Por favor consulta tu correo electrónico para continuar con el registro.", "Token incorrect": "Token incorrecto", @@ -706,9 +646,6 @@ "Something went wrong when trying to get your communities.": "Algo fue mal cuando se intentó obtener sus comunidades.", "Display your community flair in rooms configured to show it.": "Muestra la insignia de su comunidad en las salas configuradas a tal efecto.", "You're not currently a member of any communities.": "Actualmente no es miembro de una comunidad.", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Por favor, ayude a mejorar %(brand)s enviando información anónima de uso. Esto usará una cookie (por favor, vea nuestra Política de cookies).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Por favor, ayude a mejorar %(brand)s enviando información anónima de uso. Esto usará una cookie.", - "Yes, I want to help!": "Sí, ¡quiero ayudar!", "Unknown Address": "Dirección desconocida", "Delete Widget": "Eliminar Componente", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Al borrar un widget se elimina para todos usuarios de la sala. ¿Está seguro?", @@ -716,10 +653,6 @@ "An error ocurred whilst trying to remove the widget from the room": "Ocurrió un error mientras se intentaba eliminar el widget de la sala", "Minimize apps": "Minimizar apps", "Popout widget": "Widget en ventana externa", - "Unblacklist": "Dejar de Prohibir", - "Blacklist": "Prohibir", - "Unverify": "Anular Verificación", - "Verify...": "Verificar...", "Communities": "Comunidades", "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s se unieron %(count)s veces", @@ -800,7 +733,6 @@ "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 visibilidad de mensajes en Matrix es similar a la del correo electrónico. Que olvidemos tus mensajes implica que los mensajes que hayas enviado no se compartirán con ningún usuario nuevo o no registrado, pero aquellos usuarios registrados que ya tengan acceso a estos mensajes seguirán teniendo acceso a su 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)": "Por favor, olvida todos los mensajes enviados al desactivar mi cuenta. (Advertencia: esto provocará que los usuarios futuros vean conversaciones incompletas)", "To continue, please enter your password:": "Para continuar, ingresa tu contraseña por favor:", - "Encryption key request": "Solicitud de clave de cifrado", "Clear Storage and Sign Out": "Borrar Almacenamiento y Cerrar Sesión", "Send Logs": "Enviar Registros", "Refresh": "Refrescar", @@ -885,8 +817,6 @@ "There's no one else here! Would you like to invite others or stop warning about the empty room?": "¡No hay nadie aquí! ¿Le gustaría invitar a otros o dejar de advertir sobre la sala vacía?", "Room": "Sala", "Clear filter": "Borrar filtro", - "Light theme": "Tema claro", - "Dark theme": "Tema oscuro", "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.": "Si has enviado un error a GitHub, estos registros pueden ayudar a localizar el problema. Contienen información de uso de la aplicación, incluido el nombre de usuario, IDs o alias de las salas o grupos visitados y los nombres de otros usuarios. No contienen mensajes.", "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s recopila análisis de estadísticas anónimas para permitirnos mejorar la aplicación.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "La privacidad es importante, por lo que no se recopila información personal o identificable en los análisis de estadísticas.", @@ -911,9 +841,6 @@ "Please contact your service administrator to continue using the service.": "Por favor, contacta al administrador de tu servicio para continuar utilizando el servicio.", "This homeserver has hit its Monthly Active User limit.": "Este servidor doméstico ha alcanzado su límite Mensual de Usuarios Activos.", "This homeserver has exceeded one of its resource limits.": "Este servidor doméstico ha excedido uno de sus límites de recursos.", - "Please contact your service administrator to get this limit increased.": "Por favor, contacta al administrador de tu servicio para aumentar este límite.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Este servidor doméstico ha alcanzado su límite Mensual de Usuarios Activos, por lo que algunos usuarios no podrán iniciar sesión.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Este servidor doméstico ha excedido uno de sus límites de recursos, por lo que algunos usuarios no podrán iniciar sesión.", "Upgrade Room Version": "Actualizar Versión de la Sala", "Create a new room with the same name, description and avatar": "Crear una sala nueva con el mismo nombre, descripción y avatar", "Update any local room aliases to point to the new room": "Actualizar los alias locales de la sala para que apunten a la nueva", @@ -935,13 +862,6 @@ "Upgrade this room to version %(version)s": "Actualiza esta sala a la versión %(version)s", "Legal": "Legal", "Unable to connect to Homeserver. Retrying...": "No es posible conectarse al Servidor Doméstico. Volviendo a intentar...", - "Registration Required": "Se Requiere Registro", - "You need to register to do this. Would you like to register now?": "Necesitas registrarte para hacer esto. ¿Te gustaría registrarte ahora?", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s añadió %(addedAddresses)s como direcciones para esta sala.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s añadió %(addedAddresses)s como una dirección para esta sala.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s eliminó %(removedAddresses)s como direcciones para esta sala.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s eliminó %(removedAddresses)s como una dirección para esta sala.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s añadió %(addedAddresses)s y eliminó %(removedAddresses)s como direcciones para esta sala.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s estableció la dirección principal para esta sala como %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s eliminó la dirección principal para esta sala.", "%(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!": "%(brand)s ahora utiliza de 3 a 5 veces menos memoria, porque solo carga información sobre otros usuarios cuando es necesario. Por favor, ¡aguarda mientras volvemos a sincronizar con el servidor!", @@ -1131,7 +1051,6 @@ "Room list": "Lista de salas", "Autocomplete delay (ms)": "Retardo autocompletado (ms)", "Roles & Permissions": "Roles & Permisos", - "To link to this room, please add an alias.": "Para enlazar a esta sala, debes crear un alias.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Los cambios que se hagan sobre quien puede leer el historial se aplicarán solo a nuevos mensajes en esta sala. La visibilidad del historial actual no cambiará.", "Security & Privacy": "Seguridad y privacidad", "Encryption": "Cifrado", @@ -1161,16 +1080,8 @@ "Before submitting logs, you must create a GitHub issue to describe your problem.": "Antes de enviar logs, debes crear un GitHub issue para describir el problema.", "Unable to load commit detail: %(msg)s": "No se pudo cargar el detalle del commit: %(msg)s", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Para evitar perder tu historial de chat, debes exportar las claves de la sala antes de salir. Debes volver a la versión actual de %(brand)s para esto", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Has usado anteriormente una versión reciente de %(brand)s en %(host)s. Para usar esta versión otra vez con cifrado de extremo a extremo, necesitarás salir y entrar otra vez. ", "Incompatible Database": "Base de datos incompatible", "Continue With Encryption Disabled": "Seguir con cifrado desactivado", - "Use Legacy Verification (for older clients)": "Usar verificación obsoleta (para clientes antiguos)", - "Verify by comparing a short text string.": "Verificar usando un texto pequeño.", - "Begin Verifying": "Comenzar la verificación", - "Waiting for partner to accept...": "Esperando a que empiece el compañero...", - "Nothing appearing? Not all clients support interactive verification yet. .": "¿No aparece nada? No todos los clientes soportan la verificación interactiva aún. .", - "Waiting for %(userId)s to confirm...": "Esperando a que confirme %(userId)s...", - "Use two-way text verification": "Usar verificación de texto en dos sentidos", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verifica ese usuario para marcar como confiable. Confiar en usuarios aporta mucha tranquilidad en los mensajes cifrados de extremo a extremo.", "Waiting for partner to confirm...": "Esperando que confirme el compañero...", "Incoming Verification Request": "Petición de verificación entrante", @@ -1182,7 +1093,6 @@ "Your %(brand)s is misconfigured": "Tu %(brand)s tiene un error de configuración", "Whether or not you're logged in (we don't record your username)": "Hayas o no iniciado sesión (no guardamos tu nombre de usuario)", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Uses o no los 'breadcrumbs' (iconos sobre la lista de salas)", - "A conference call could not be started because the integrations server is not available": "No se pudo iniciar la conferencia porque el servidor de integraciones no está disponible", "Replying With Files": "Respondiendo con archivos", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "En este momento no es posible responder con un archivo. ¿Te gustaría subir el archivo sin responder?", "The file '%(fileName)s' failed to upload.": "Falló en subir el archivo '%(fileName)s'.", @@ -1215,8 +1125,6 @@ "The user must be unbanned before they can be invited.": "El usuario debe ser desbloqueado antes de poder ser invitado.", "The user's homeserver does not support the version of the room.": "El servidor del usuario no soporta la versión de la sala.", "Show read receipts sent by other users": "Mostrar las confirmaciones de lectura enviadas por otros usuarios", - "Order rooms in the room list by most important first instead of most recent": "Ordenar la lista de salas por importancia en vez de por reciente", - "Show recently visited rooms above the room list": "Mostrar salas visitadas recientemente sobre la lista de salas", "Show hidden events in timeline": "Mostrar eventos ocultos en la línea de tiempo", "Low bandwidth mode": "Modo de ancho de banda bajo", "Got It": "Entendido", @@ -1254,7 +1162,6 @@ "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s hizo una llamada de vídeo (no soportada por este navegador)", "%(name)s (%(userId)s)": "%(name)s (%(userId)s)", "Try out new ways to ignore people (experimental)": "Pruebe nuevas formas de ignorar a usuarios (experimental)", - "Enable local event indexing and E2EE search (requires restart)": "Active el indexado de eventos locales y la búsqueda E2EE (necesita reiniciar)", "Match system theme": "Usar el tema del sistema", "Show previews/thumbnails for images": "Mostrar vistas previas para las imágenes", "When rooms are upgraded": "Cuando las salas son actualizadas", @@ -1276,21 +1183,16 @@ "Jump to first unread room.": "Saltar a la primera sala sin leer.", "You have %(count)s unread notifications in a prior version of this room.|other": "Tiene %(count)s notificaciones sin leer en una versión anterior de esta sala.", "You have %(count)s unread notifications in a prior version of this room.|one": "Tiene %(count)s notificaciones sin leer en una versión anterior de esta sala.", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Hay sesiones desconocidas en esta sala: si continúas sin verificarlas, será posible que alguien escuche secretamente tu llamada.", "Setting up keys": "Configurando claves", "Verify this session": "Verificar esta sesión", "Encryption upgrade available": "Mejora de encriptación disponible", "Set up encryption": "Configurar la encriptación", - "Unverified session": "Sesión sin verificar", "Verifies a user, session, and pubkey tuple": "Verifica a un usuario, sesión y tupla de clave pública", "Unknown (user, session) pair:": "Par (usuario, sesión) desconocido:", "Session already verified!": "¡La sesión ya ha sido verificada!", "WARNING: Session already verified, but keys do NOT MATCH!": "ATENCIÓN: ¡La sesión ya ha sido verificada, pero las claves NO CONCUERDAN!", "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!": "¡ATENCIÓN: LA VERIFICACIÓN DE LA CLAVE HA FALLADO! La clave de firma para %(userId)s y sesión %(deviceId)s es \"%(fprint)s\", la cual no coincide con la clave proporcionada \"%(fingerprint)s\". ¡Esto podría significar que tus comunicaciones están siendo interceptadas!", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "La clave de firma que proporcionaste coincide con la clave de firma que recibiste de la sesión %(deviceId)s de %(userId)s. Sesión marcada como verificada.", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s añadió %(addedAddresses)s y %(count)s otras direcciones a esta sala", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s eliminó %(removedAddresses)s y %(count)s otras direcciones de esta sala", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s eliminó %(countRemoved)s y añadió %(countAdded)s direcciones a esta sala", "%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s eliminó la regla que bloquea a usuarios que coinciden con %(glob)s", "%(senderName)s removed the rule banning rooms matching %(glob)s": "%(senderName)s eliminó la regla que bloquea a salas que coinciden con %(glob)s", "%(senderName)s removed the rule banning servers matching %(glob)s": "%(senderName)s eliminó la regla que bloquea a servidores que coinciden con %(glob)s", @@ -1333,12 +1235,7 @@ "Recent Conversations": "Conversaciones recientes", "Suggestions": "Sugerencias", "Recently Direct Messaged": "Enviado Mensaje Directo recientemente", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Si no encuentras a alguien, pídele su usuario, comparte tu usuario (%(userId)s) o enlace de perfil.", "Go": "Ir", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Si no encuentras a alguien, pídele su usuario (p.ej. @user:server.com) o comparte esta sala.", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "Has añadido una nueva sesión '%(displayName)s', la cual está pidiendo claves de encriptación.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Tu sesión no verificada '%(displayName)s' esta pidiendo claves de encriptación.", - "Loading session info...": "Cargando información de sesión...", "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.": "Has usado %(brand)s anteriormente en %(host)s con carga diferida de usuarios habilitada. En esta versión la carga diferida está deshabilitada. Como el caché local no es compatible entre estas dos configuraciones, %(brand)s necesita resincronizar tu cuenta.", "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.": "Si la otra versión de %(brand)s esta todavía abierta en otra pestaña, por favor, ciérrala, ya que usar %(brand)s en el mismo host con la opción de carga diferida habilitada y deshabilitada simultáneamente causará problemas.", "Incompatible local cache": "Caché local incompatible", @@ -1382,9 +1279,6 @@ "Summary": "Resumen", "Document": "Documento", "Next": "Siguiente", - "Room contains unknown sessions": "La sala contiene sesiones desconocidas", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "\"%(RoomName)s\" contiene sesiones que no has visto antes.", - "Unknown sessions": "Sesiones desconocidas", "Upload files (%(current)s of %(total)s)": "Subir archivos (%(current)s de %(total)s)", "Upload files": "Subir archivos", "Upload all": "Subir todo", @@ -1406,7 +1300,6 @@ "Ignored/Blocked": "Ignorado/Bloqueado", "Error adding ignored user/server": "Error al añadir usuario/servidor ignorado", "Error subscribing to list": "Error al suscribirse a la lista", - "Please verify the room ID or alias and try again.": "Por favor, verifica el ID de la sala o el alias e inténtalo de nuevo.", "Error removing ignored user/server": "Error al eliminar usuario/servidor ignorado", "Error unsubscribing from list": "Error al cancelar la suscripción a la lista", "None": "Ninguno", @@ -1422,12 +1315,9 @@ "Personal ban list": "Lista de bloqueo personal", "Server or user ID to ignore": "Servidor o ID de usuario a ignorar", "eg: @bot:* or example.org": "p. ej.: @bot:* o ejemplo.org", - "The version of %(brand)s": "La version de %(brand)s", "Your user agent": "Tu agente de usuario", - "The information being sent to us to help make %(brand)s better includes:": "La información que se nos envía para ayudarnos a mejorar %(brand)s incluye:", "If you cancel now, you won't complete verifying the other user.": "Si cancelas ahora, no completarás la verificación del otro usuario.", "If you cancel now, you won't complete verifying your other session.": "Si cancelas ahora, no completarás la verificación de tu otra sesión.", - "If you cancel now, you won't complete your secret storage operation.": "Si cancelas ahora, no completarás tu operación de almacén secreto.", "Cancel entering passphrase?": "¿Cancelar la introducción de frase de contraseña?", "%(senderName)s updated the rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s actualizó la regla bloqueando salas que coinciden con %(glob)s por %(reason)s", "%(senderName)s updated the rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s actualizó la regla bloqueando servidores que coinciden con %(glob)s por %(reason)s", @@ -1459,7 +1349,6 @@ "Never send encrypted messages to unverified sessions from this session": "No enviar nunca mensajes cifrados a sesiones sin verificar desde esta sesión", "Never send encrypted messages to unverified sessions in this room from this session": "No enviar nunca mensajes cifrados a sesiones sin verificar en esta sala desde esta sesión", "Enable message search in encrypted rooms": "Habilitar la búsqueda de mensajes en salas cifradas", - "Keep secret storage passphrase in memory for this session": "Mantener la frase de contraseña en memoria para esta sesión", "How fast should messages be downloaded.": "Con qué rapidez deben ser descargados los mensajes.", "Verify this session by completing one of the following:": "Verifica esta sesión completando uno de los siguientes:", "Scan this unique code": "Escanea este código único", @@ -1467,8 +1356,6 @@ "Compare unique emoji": "Comparar emoji único", "Compare a unique set of emoji if you don't have a camera on either device": "Comparar un conjunto de emojis si no tienes cámara en ninguno de los dispositivos", "Start": "Inicio", - "Confirm the emoji below are displayed on both devices, in the same order:": "Confirma que los emojis a continuación son mostrados en ambos dispositivos, en el mismo orden:", - "Verify this device by confirming the following number appears on its screen.": "Verifica este dispositivo confirmando que el siguiente número aparece en su pantalla.", "Waiting for %(displayName)s to verify…": "Esperando la verificación de %(displayName)s …", "Review": "Revise", "in secret storage": "en almacén secreto", @@ -1483,7 +1370,6 @@ "This session is backing up your keys. ": "Esta sesión está haciendo una copia de seguridad de tus claves. ", "not stored": "no almacenado", "Message search": "Busqueda de mensajes", - "Sessions": "Sesiones", "Upgrade this room to the recommended room version": "Actualizar esta sala a la versión de sala recomendada", "this room": "esta sala", "View older messages in %(roomName)s.": "Ver mensajes más antiguos en %(roomName)s.", @@ -1536,7 +1422,6 @@ "Disconnect from the identity server ?": "¿Desconectarse del servidor de identidad ?", "Disconnect": "Desconectarse", "You should:": "Deberías:", - "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s de %(totalRooms)s", "Use Single Sign On to continue": "Procede con Registro Único para continuar", "Confirm adding this email address by using Single Sign On to prove your identity.": "Confirma la adición de esta dirección de correo electrónico usando el Registro Único para probar tu identidad.", "Single Sign On": "Registro Único", @@ -1548,7 +1433,6 @@ "Click the button below to confirm adding this phone number.": "Haga clic en el botón de abajo para confirmar la adición de este número de teléfono.", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Si estés usando %(brand)s en un dispositivo donde una pantalla táctil es el principal mecanismo de entrada", "Whether you're using %(brand)s as an installed Progressive Web App": "Si estás usando %(brand)s como una Aplicación Web Progresiva instalada", - "Review Sessions": "Sesiones de revisión", "If you cancel now, you won't complete your operation.": "Si cancela ahora, no completará la operación.", "Review where you’re logged in": "Revise dónde hizo su registro", "New login. Was this you?": "Nuevo registro. ¿Fuiste tú?", @@ -1581,21 +1465,18 @@ "Interactively verify by Emoji": "Verifica interactivamente con unEmoji", "Done": "Listo", "Support adding custom themes": "Soporta la adición de temas personalizados", - "Enable cross-signing to verify per-user instead of per-session": "Habilitar la firma cruzada para verificar por usuario en lugar de por sesión", "Show info about bridges in room settings": "Mostrar información sobre puentes en la configuración de salas", "Order rooms by name": "Ordenar las salas por nombre", "Show rooms with unread notifications first": "Mostrar primero las salas con notificaciones no leídas", "Show shortcuts to recently viewed rooms above the room list": "Mostrar atajos a las salas recientemente vistas por encima de la lista de salas", "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Permitir el servidor de respaldo de asistencia de llamadas turn.matrix.org cuando su servidor doméstico no lo ofrece (su dirección IP se compartiría durante una llamada)", "Send read receipts for messages (requires compatible homeserver to disable)": "Enviar recibos de lectura de mensajes (requiere un servidor local compatible para desactivarlo)", - "Keep recovery passphrase in memory for this session": "Guarde la contraseña de recuperación en la memoria para esta sesión", "Manually verify all remote sessions": "Verifica manualmente todas las sesiones remotas", "Confirm the emoji below are displayed on both sessions, in the same order:": "Confirma que los emoji de abajo se muestran en el mismo orden en ambas sesiones:", "Verify this session by confirming the following number appears on its screen.": "Verifique esta sesión confirmando que el siguiente número aparece en su pantalla.", "Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Esperando a que su otra sesión, %(deviceName)s (%(deviceId)s), verifica…", "Cancelling…": "Anulando …", "Verify all your sessions to ensure your account & messages are safe": "Verifica todas tus sesiones abiertas para asegurarte de que tu cuenta y tus mensajes estén seguros", - "Update your secure storage": "Actualice su almacenamiento seguro", "Set up": "Configurar", "Verify the new login accessing your account: %(name)s": "Verifique el nuevo ingreso que está accediendo a su cuenta: %(name)s", "From %(deviceName)s (%(deviceId)s)": "De %(deviceName)s (%(deviceId)s)", @@ -1618,9 +1499,6 @@ "Session backup key:": "Llave / Código de respaldo de la sesión:", "Homeserver feature support:": "Características apoyadas por servidor local:", "exists": "existe", - "Secret Storage key format:": "Formato del código de almacenamiento secreto:", - "outdated": "no actual", - "up to date": "actualizado", "Your homeserver does not support session management.": "Su servidor local no soporta la gestión de sesiones.", "Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "Confirme eliminar estas sesiones, probando su identidad con el Registro Único.", "Confirm deleting these sessions by using Single Sign On to prove your identity.|one": "Confirme eliminar esta sesión, probando su identidad con el Registro Único.", @@ -1634,7 +1512,6 @@ " to store messages from ": " para almacenar mensajes de ", "Securely cache encrypted messages locally for them to appear in search results.": "Almacenar localmente, de manera segura, a los mensajes cifrados localmente para que aparezcan en los resultados de búsqueda.", "%(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)s le faltan algunos componentes necesarios para el almacenamiento seguro de mensajes cifrados a nivel local. Si quieres experimentar con esta característica, construye un Escritorio %(brand)s personalizado con componentes de búsqueda añadidos.", - "%(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 no puede guardar de forma segura en la memoria caché a mensajes encriptados localmente, mientras se ejecuta en un navegador web. Use %(brand)s Desktop para que los mensajes encriptados aparezcan en los resultados de la búsqueda.", "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 sesión no ha creado una copia de seguridad de tus llaves, pero tienes una copia de seguridad existente de la que puedes restaurar y añadir para proceder.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Conecte esta sesión a la copia de seguridad de las claves antes de firmar y así evitar perder las claves que sólo existen en esta sesión.", "Connect this session to Key Backup": "Conecte esta sesión a la copia de respaldo de tu clave", @@ -1648,7 +1525,6 @@ "Backup has a valid signature from unverified session ": "La copia de seguridad tiene una firma de válida de sesión no verificada ", "Backup has an invalid signature from verified session ": "La copia de seguridad tiene una firma de no válida de sesión verificada ", "Backup has an invalid signature from unverified session ": "La copia de seguridad tiene una firma de no válida de sesión no verificada ", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "La clave de respaldo se guardó en un almacenamiento secreto, pero esta función no está habilitada en esta sesión. Por favor, habilite la firma cruzada en Labs para modificar el estado de respaldo de la clave.", "Upgrade to your own domain": "Actualizar a su propio dominio", "Identity Server URL must be HTTPS": "La URL del servidor de identidad debe ser tipo HTTPS", "Not a valid Identity Server (status code %(code)s)": "No es un servidor de identidad válido (código de estado %(code)s)", @@ -1680,7 +1556,6 @@ "Subscribed lists": "Listados a que subscribiste", "Subscribing to a ban list will cause you to join it!": "¡Suscribirse a una lista negra hará unirte a ella!", "If this isn't what you want, please use a different tool to ignore users.": "Si esto no es lo que quieres, por favor usa una herramienta diferente para ignorar usuarios.", - "Room ID or alias of ban list": "Identificación (ID) de la habitación o alias de la lista negra", "Subscribe": "Suscribir", "Always show the window menu bar": "Siempre mostrar la barra de menú de la ventana", "Show tray icon and minimize window to it on close": "Mostrar el icono en el Área de Notificación y minimizar la ventana al cerrarla", @@ -1717,10 +1592,6 @@ "Someone is using an unknown session": "Alguien está usando una sesión desconocida", "This room is end-to-end encrypted": "Esta sala usa encriptación de extremo a extremo", "Everyone in this room is verified": "Todos los participantes en esta sala están verificados", - "Some sessions for this user are not trusted": "Algunas sesiones para este usuario no son de confianza", - "All sessions for this user are trusted": "Todas las sesiones para este usuario son de confianza", - "Some sessions in this encrypted room are not trusted": "Algunas sesiones en esta sala encriptada no son de confianza", - "All sessions in this encrypted room are trusted": "Todas las sesiones en esta sala encriptada son de confianza", "Edit message": "Editar mensaje", "Mod": "Mod", "Your key share request has been sent - please check your other sessions for key share requests.": "Su solicitud de intercambio de claves ha sido enviada. Por favor, compruebe en sus otras sesiones si hay solicitudes de intercambio de claves.", @@ -1735,12 +1606,8 @@ "%(oneUser)smade no changes %(count)s times|other": "%(oneUser)s %(count)s veces no efectuó cambios", "%(oneUser)smade no changes %(count)s times|one": "%(oneUser)s no efectuó cambios", "Power level": "Nivel de poder", - "Room alias": "Alias (apodo) de la sala", "e.g. my-room": "p.ej. mi-sala", "Some characters not allowed": "Algunos caracteres no están permitidos", - "Please provide a room alias": "Por favor, proporcione un alias (apodo) para la sala", - "This alias is available to use": "Este alias (apodo) está disponible", - "This alias is already in use": "Este alias (apodo) ya está en uso", "Sign in with single sign-on": "Ingresar con un Registro Único", "Enter a server name": "Introduzca un nombre de servidor", "Looks good": "Se ve bien", @@ -1772,7 +1639,6 @@ "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "La eliminación de todos los datos de esta sesión es definitiva. Los mensajes encriptados se perderán a menos que se haya hecho una copia de seguridad de sus claves.", "Clear all data": "Borrar todos los datos", "Please enter a name for the room": "Por favor, introduzca un nombre para la sala", - "Set a room alias to easily share your room with other people.": "Fijar un alias (apodo) para su sala para compartirla con mayor facilidadn con otras personas.", "This room is private, and can only be joined by invitation.": "Esta sala es privada, y sólo se puede acceder a ella por invitación.", "Enable end-to-end encryption": "Habilitar la encriptación de extremo a extremo", "You can’t disable this later. Bridges & most bots won’t work yet.": "No puedes deshabilitar esto después. Los puentes y la mayoría de los bots no funcionarán todavía.", @@ -1790,11 +1656,8 @@ "Confirm account deactivation": "Confirmar la desactivación de la cuenta", "There was a problem communicating with the server. Please try again.": "Hubo un problema de comunicación con el servidor. Por favor, inténtelo de nuevo.", "Verify session": "Verificar sesión", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Para verificar que se puede confiar en esta sesión, comprueba que la clave que ves en la Configuración del Usuario de ese dispositivo coincide con la clave que aparece a continuación:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Para verificar que se puede confiar en esta sesión, póngase en contacto con su dueño por algún otro medio (por ejemplo, en persona o por teléfono) y pregúntele si el código que ve en su Configuración de usuario para esta sesión coincide con el código abajo:", "Session name": "Nombre de sesión", "Session key": "Código de sesión", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Si coincide, presione el botón de verificación de abajo. Si no, entonces otra persona está interceptando esta sesión y probablemente quieras presionar el botón de la lista negra en su lugar.", "View Servers in Room": "Ver servidores en la sala", "Verification Requests": "Solicitudes de verificación", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Verificar que este usuario marcará su sesión como de confianza, y también que marcará su sesión como de confianza para él.", @@ -1858,7 +1721,6 @@ "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?": "Desactivando a este usuario, este será desconectado y no podrá volver a ingresar. Además, saldrá de todas las salas a que se había unido. Esta acción no puede ser revertida. ¿Está seguro de desactivar este usuario?", "Deactivate user": "Desactivar usuario", "Failed to deactivate user": "Error en desactivar usuario", - "No sessions with registered encryption keys": "No hay sesiones con claves de cifrado registradas", "Remove recent messages": "Eliminar mensajes recientes", "Send a reply…": "Enviar una respuesta …", "Send a message…": "Enviar un mensaje…", @@ -1896,11 +1758,6 @@ "Error updating main address": "Error al actualizar la dirección principal", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Hubo un error al actualizar la dirección principal de la sala. Posiblemente el servidor no lo permita o se produjo 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.": "Hubo un error al actualizar la dirección alternativa de la sala. Posiblemente el servidor no lo permita o se produjo un error temporal.", - "Error creating alias": "Error al crear el alias (apodo)", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Hubo un error al crear ese alias (apodo). Posiblemente no lo permita el servidor o puede que se haya producido un error temporal.", - "You don't have permission to delete the alias.": "No tienes permiso para borrar el alias (apodo).", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Se produjo un error al eliminar ese alias (apodo). Tal vez ya no exista o puede haberse producido un error temporal.", - "Error removing alias": "Error al eliminar el alias (apodo)", "Local address": "Dirección local", "Published Addresses": "Direcciones publicadas", "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.": "Las direcciones publicadas pueden ser usadas por cualquier usuario en cualquier servidor para unirse a tu salas. Para publicar una dirección, primero hay que establecerla como una dirección local.", @@ -2038,22 +1895,14 @@ "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Reportar este mensaje enviará su único 'event ID' al administrador de su servidor doméstico. Si los mensajes en esta sala están encriptados, el administrador de tu servidor no podrá leer el texto del mensaje ni ver ningún archivo o imagen.", "Command Help": "Ayuda del comando", "Integration Manager": "Administrador de integración", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Actualmente está incluyendo sesiones no verificadas en la lista negra; para enviar mensajes a estas sesiones debe verificarlas primero.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Le recomendamos que pase por el proceso de verificación de cada sesión para confirmar que pertenecen a su legítimo propietario, pero puede reenviar el mensaje sin verificarlo si lo prefiere.", "Verify other session": "Verifique otra sesión", "Verification Request": "Solicitud de verificación", "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.": "Un widget localizado en %(widgetUrl)s desea verificar su identidad. Permitiendo esto, el widget podrá verificar su identidad de usuario, pero no realizar acciones como usted.", "Enter recovery passphrase": "Introduzca la contraseña de recuperación", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "No se puede acceder al almacenamiento secreto. Por favor, compruebe que ha introducido la frase de recuperación correcta.", - "Warning: You should only do this on a trusted computer.": "Advertencia: Sólo debes hacer esto en un ordenador de su confianza.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Acceda a su historial de mensajes seguros y a su identidad de firma cruzada para verificar otras sesiones, introduciendo su frase de recuperación.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Si has olvidado tu contraseña de recuperación puedes usar tu clave de recuperación o configurar nuevas opciones de recuperación .", "Enter recovery key": "Introduzca la clave de recuperación", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "No se puede acceder al almacenamiento secreto. Por favor, compruebe que haya introducido la clave de recuperación correcta.", "This looks like a valid recovery key!": "¡Esto tiene pinta de una llave de recuperación válida!", "Not a valid recovery key": "Clave de recuperación no válida", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Acceda a su historial de mensajes seguros y a su identidad de firma cruzada para verificar otras sesiones, introduciendo su clave de recuperación.", - "If you've forgotten your recovery key you can .": "Si has olvidado tu clave de recuperación puedes .", "Restoring keys from backup": "Restaurando las claves desde copia de seguridad", "Fetching keys from server...": "Obteniendo las claves desde el servidor...", "%(completed)s of %(total)s keys restored": "%(completed)s de %(total)s llaves restauradas", @@ -2161,11 +2010,8 @@ "Find a room… (e.g. %(exampleRoom)s)": "Encuentre una sala... (p.ej. %(exampleRoom)s)", "If you can't find the room you're looking for, ask for an invite or Create a new room.": "Si no puedes encontrar la habitación que buscas, solicite una invitación o Crea una nueva sala.", "Explore rooms": "Explorar salas", - "Message not sent due to unknown sessions being present": "Mensaje no enviado debido a la presencia de sesiones desconocidas", - "Show sessions, send anyway or cancel.": "Mostrar sessiones, enviar de todas formas ocancelar.", "Jump to first invite.": "Salte a la primera invitación.", "Add room": "Añadir sala", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Guest": "Invitado", "Your profile": "Su perfil", "Could not load user profile": "No se pudo cargar el perfil de usuario", diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 30a7b94fb5..5f067f9545 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -18,17 +18,10 @@ "Unable to load! Check your network connectivity and try again.": "Laadimine ei õnnestunud! Kontrolli oma võrguühendust ja proovi uuesti.", "Dismiss": "Loobu", "Call Failed": "Kõne ebaõnnestus", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Selles jututoas on teadmata sessioone: kui sa jätkad ilma nende verifitseerimiseta, siis kolmas osapool võib kuulata seda kõnet pealt.", - "Review Sessions": "Vaata sessioonid üle", - "Call Anyway": "Helista ikkagi", - "Answer Anyway": "Vasta ikkagi", - "Call": "Helista", - "Answer": "Vasta", "Call Timeout": "Kõne aegumine", "The remote side failed to pick up": "Teine osapool ei võtnud kõnet vastu", "Call failed due to misconfigured server": "Kõne ebaõnnestus valesti seadistatud serveri tõttu", "Cancel": "Loobu", - "Send anyway": "Saada siiski", "Send": "Saada", "Jan": "jaan", "Feb": "veeb", @@ -65,7 +58,6 @@ "Verify this session by confirming the following number appears on its screen.": "Verifitseeri see sessioon tehes kindlaks, et järgnev number kuvatakse tema ekraanil.", "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "%(brand)s'i kasutamisega seotud abiteabe otsimiseks klõpsi seda viidet või vajutades järgnevat nuppu alusta vestlust meie robotiga.", "Chat with %(brand)s Bot": "Vestle %(brand)s'i robotiga", - "Start a chat": "Alusta vestlust", "Invite to this room": "Kutsu siia jututuppa", "Voice call": "Häälkõne", "Video call": "Videokõne", @@ -75,8 +67,6 @@ "Send a reply…": "Saada vastus…", "Send an encrypted message…": "Saada krüptitud sõnum…", "Send a message…": "Saada sõnum…", - "Send a reply (unencrypted)…": "Saada krüptimata vastus…", - "Send a message (unencrypted)…": "Saada krüpteerimata sõnum…", "The conversation continues here.": "Vestlus jätkub siin.", "Recent rooms": "Hiljutised jututoad", "No rooms to show": "Ei saa kuvada ühtegi jututuba", @@ -108,10 +98,6 @@ "Encryption enabled": "Krüptimine on kasutusel", "Add rooms to this community": "Lisa siia kogukonda jututubasid", "Create new room": "Loo uus jututuba", - "Unblacklist": "Eemalda mustast nimekirjast", - "Blacklist": "Kanna musta nimekirja", - "Unverify": "Tühista verifitseerimine", - "Verify...": "Verifitseeri...", "Join": "Liitu", "No results": "Tulemusi pole", "Please create a new issue on GitHub so that we can investigate this bug.": "Selle vea uurimiseks palun loo uus veateade meie GitHub'is.", @@ -205,7 +191,6 @@ "Share Message": "Jaga sõnumit", "Source URL": "Lähteaadress", "Collapse Reply Thread": "Ahenda vastuste jutulõnga", - "End-to-end encryption information": "Läbiva krüptimise teave", "Notification settings": "Teavituste seadistused", "All messages (noisy)": "Kõik sõnumid (lärmakas)", "All messages": "Kõik sõnumid", @@ -234,7 +219,6 @@ "Failed to remove the room from the summary of %(groupId)s": "Jututoa eemaldamine %(groupId)s kogukonna ülevaatelehelt ebaõnnestus", "Failed to remove a user from the summary of %(groupId)s": "Kasutaja eemaldamine %(groupId)s kogukonna ülevaatelehelt ebaõnnestus", "Create a Group Chat": "Loo rühmavestlus", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Kas kustutame jututoa aliase %(alias)s ja eemaldame %(name)s kataloogist?", "Remove %(name)s from the directory?": "Eemalda %(name)s kataloogist?", "Remove from Directory": "Eemalda kataloogist", "remove %(name)s from the directory.": "eemalda %(name)s kataloogist.", @@ -271,17 +255,13 @@ "Server or user ID to ignore": "Serverid või kasutajate tunnused, mida soovid eirata", "Ignore": "Eira", "If this isn't what you want, please use a different tool to ignore users.": "Kui tulemus pole see mida soovisid, siis pruugi muud vahendit kasutajate eiramiseks.", - "Sessions": "Sessioonid", "Mention": "Maini", "Share Link to User": "Jaga viidet kasutaja kohta", - "User Options": "Kasutaja valikud", - "Direct chats": "Isiklikud sõnumid", "Admin Tools": "Haldustoimingud", "Online": "Võrgus", "Reject & Ignore user": "Hülga ja eira kasutaja", "%(count)s unread messages including mentions.|one": "1 lugemata mainimine.", "Filter results": "Filtreeri tulemusi", - "Ignore request": "Eira taotlust", "Report bugs & give feedback": "Teata vigadest ja anna tagasisidet", "Report Content to Your Homeserver Administrator": "Teata sisust Sinu koduserveri haldurile", "Send report": "Saada veateade", @@ -309,10 +289,6 @@ "Summary": "Kokkuvõte", "Document": "Dokument", "Next": "Järgmine", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Sa parasjagu oled kõik verifitseerimata sessioonid kandnud musta nimekirja. Sinna sõnumite saatmiseks sa pead nad enne verifitseerima.", - "Room contains unknown sessions": "Jututoas on tundmatuid sessioone", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "\"%(RoomName)s\" sisaldab sessioone, mida sa ei ole varem näinud.", - "Unknown sessions": "Tundmatud sessioonid", "Report Content": "Teata sisust haldurile", "powered by Matrix": "põhineb Matrix'il", "Custom Server Options": "Serveri kohaldatud seadistused", @@ -381,24 +357,17 @@ "edited": "muudetud", "Can't load this message": "Selle sõnumi laadimine ei õnnestu", "Submit logs": "Saada rakenduse logid", - "Removed or unknown message type": "Kustutatud või tundmatu sõnumi tüüp", - "Message removed by %(userId)s": "Kasutaja %(userId)s poolt kustutatud sõnum", - "Message removed": "Sõnum on kustutatud", "Invite to this community": "Kutsu selle kogukonna liikmeks", "Something went wrong!": "Midagi läks nüüd valesti!", "The visibility of '%(roomName)s' in %(groupId)s could not be updated.": "Jututoa %(roomName)s nähtavust %(groupId)s kogukonnas ei õnnestunud värskendada.", "Visibility in Room List": "Nähtavus jututubade loendis", "Visible to everyone": "Nähtav kõigile", "Something went wrong when trying to get your communities.": "Sinu kogukondade laadimisel läks midagi nüüd viltu.", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Palun aita %(brand)s'it paremaks teha saates arendajatele anonüümset kasutusteavet. See eeldab küpsise kasutamist (palun vaata meie küpsiste kasutuse reegleid).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Palun aita %(brand)s'it paremaks teha saates anonüümset kasutusteavet. See eeldab küpsise kasutamist.", - "Yes, I want to help!": "Jah, ma soovin aidata!", "You are not receiving desktop notifications": "Sa hetkel ei saa oma arvuti töölauakeskkonna teavitusi", "Enable them now": "Võta need nüüd kasutusele", "What's New": "Meie uudised", "Update": "Uuenda", "What's new?": "Mida on meil uut?", - "A new version of %(brand)s is available.": "Uus %(brand)s'i versioon on saadaval.", "Your server": "Sinu server", "Matrix": "Matrix", "Add a new server": "Lisa uus server", @@ -415,9 +384,7 @@ "Sign out": "Logi välja", "Incompatible Database": "Mitteühilduv andmebaas", "Continue With Encryption Disabled": "Jätka ilma krüptimiseta", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Sinu verifitseerimata sessioon '%(displayName)s' soovib saada krüptimisvõtmeid.", "If you can't find the room you're looking for, ask for an invite or Create a new room.": "Kui sa ei leia otsitavat jututuba, siis palu sinna kutset või loo uus jututuba.", - "device id: ": "seadme tunnus: ", "%(duration)ss": "%(duration)s sekund(it)", "%(duration)sm": "%(duration)s minut(it)", "%(duration)sh": "%(duration)s tund(i)", @@ -451,7 +418,6 @@ "This room": "See jututuba", "Joining room …": "Liitun jututoaga …", "Loading …": "Laen …", - "Device ID": "Seadme tunnus", "e.g. %(exampleValue)s": "näiteks %(exampleValue)s", "Could not find user in room": "Jututoast ei leidnud kasutajat", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Näita ajatempleid 12-tunnises vomingus (näiteks 2:30pl)", @@ -459,7 +425,6 @@ "New community ID (e.g. +foo:%(localDomain)s)": "Uus kogukonna tunnus (näiteks +midagi:%(localDomain)s)", "e.g. my-room": "näiteks minu-jututuba", "Can't find this server or its room list": "Ei leia seda serverit ega tema jututubade loendit", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Kui sa ei leia kedagi, siis küsi tema kasutajanime (näiteks @kasutaja:server.ee) või jaga seda jututuba.", "Couldn't find a matching Matrix room": "Ei leidnud vastavat Matrix'i jututuba", "Find a room…": "Leia jututuba…", "Find a room… (e.g. %(exampleRoom)s)": "Otsi jututuba… (näiteks %(exampleRoom)s)", @@ -488,7 +453,6 @@ "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Hoiatus: kõik kogukonda lisatud kasutajad on nähtavad kõigile, kes teavad kogukonna tunnust", "Name or Matrix ID": "Nimi või Matrix'i tunnus", "Invite to Community": "Kutsu kogukonda", - "Room name or alias": "Jututoa nimi või alias", "Add to community": "Lisa kogukonda", "Failed to invite the following users to %(groupId)s:": "Järgnevate kasutajate kutsumine %(groupId)s liikmeks ebaõnnestus:", "Failed to invite users to community": "Kasutajate kutsumine kogukonda ebaõnnestus", @@ -501,7 +465,6 @@ "%(name)s is requesting verification": "%(name)s soovib verifitseerimist", "Securely cache encrypted messages locally for them to appear in search results.": "Turvaliselt puhverda krüptitud sõnumid kohalikku arvutisse ja võimalda kasutada neid otsingus.", "%(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 on puudu need komponendid, mis võimaldavad otsida kohalikest turvaliselt puhverdatud krüptitud sõnumitest. Kui sa tahaksid sellist funktsionaalsust katsetada, siis pead kompileerima %(brand)s'i variandi, kus need komponendid on lisatud.", - "%(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 ei saa veebibrauserist käivitades otsida turvaliselt kohalikult puhverdatud krüptitud sõnumite hulgast. Selliste sõnumite hulgast otsimiseks kasuta %(brand)s'i töölauaversiooni.", "Message search": "Otsing sõnumite seast", "Search…": "Otsi…", "Cancel search": "Tühista otsing", @@ -525,11 +488,9 @@ "about a day from now": "umbes päeva pärast", "%(num)s days from now": "%(num)s päeva pärast", "Are you sure?": "Kas sa oled kindel?", - "No sessions with registered encryption keys": "Puuduvad registreeritud krüptimisvõtmetega sessioonid", "Jump to read receipt": "Hüppa lugemisteatise juurde", "Invite": "Kutsu", "Unmute": "Eemalda summutamine", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "See koduserver on saavutanud igakuise aktiivsete kasutajate piiri ja seega osad kasutajad ei saa sisse logida.", "Create a public room": "Loo avalik jututuba", "Create a private room": "Loo omavaheline jututuba", "Name": "Nimi", @@ -585,10 +546,6 @@ "Muted Users": "Summutatud kasutajad", "This room is end-to-end encrypted": "See jututuba on läbivalt krüptitud", "Everyone in this room is verified": "Kõik kasutajad siin nututoas on verifitseeritud", - "Some sessions for this user are not trusted": "Mõned selle kasutaja sessioonid ei ole usaldusväärsed", - "All sessions for this user are trusted": "Kõik selle kasutaja sessioonid on usaldusväärsed", - "Some sessions in this encrypted room are not trusted": "Mõned sessioonid selles krüptitud jututoas ei ole usaldusväärsed", - "All sessions in this encrypted room are trusted": "Kõik sessioonid selles krüptitud jututoas on usaldusväärsed", "Edit message": "Muuda sõnumit", "%(senderName)s sent an image": "%(senderName)s saatis pildi", "%(senderName)s sent a video": "%(senderName)s saatis video", @@ -726,8 +683,6 @@ "%(senderName)s removed their profile picture.": "%(senderName)s eemaldas om profiilipildi.", "%(senderName)s changed their profile picture.": "%(senderName)s muutis oma profiilipilti.", "%(senderName)s set a profile picture.": "%(senderName)s määras oma profiilipildi.", - "Light theme": "Hele teema", - "Dark theme": "Tume teema", "%(name)s (%(userId)s)": "%(name)s (%(userId)s)", "Your browser does not support the required cryptography extensions": "Sinu brauser ei toeta vajalikke krüptoteeke", "Not a valid %(brand)s keyfile": "See ei ole sobilik võtmefail %(brand)s'i jaoks", @@ -772,7 +727,6 @@ "Add theme": "Lisa teema", "Theme": "Teema", "Start verification again from their profile.": "Alusta verifitseerimist uuesti nende profiilist.", - "To return to your account in future you need to set a password": "Selleks et hiljemgi oma kontot kasutada, sa pead määrama salasõna", "Set Password": "Määra salasõna", "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Allpool loetletud Matrix'i kasutajatunnustele ei leidunud profiile. Kas sa ikkagi tahaksid neile kutse saata?", "To continue, please enter your password:": "Jätkamiseks palun sisesta oma salasõna:", @@ -819,7 +773,6 @@ "URL previews are enabled by default for participants in this room.": "URL'ide eelvaated on vaikimisi kasutusel selles jututoas osalejate jaoks.", "URL previews are disabled by default for participants in this room.": "URL'ide eelvaated on vaikimisi lülitatud välja selles jututoas osalejate jaoks.", "Enable Emoji suggestions while typing": "Näita kirjutamise ajal emoji-soovitusi", - "Use compact timeline layout": "Kasuta tihedat ajajoone paigutust", "Show a placeholder for removed messages": "Näita kustutatud sõnumite asemel kohatäidet", "Show join/leave messages (invites/kicks/bans unaffected)": "Näita jututubade liitumise ja lahkumise teateid (ei käi kutsete, müksamiste ja keelamiste kohta)", "Show avatar changes": "Näita avataride muutusi", @@ -924,7 +877,6 @@ "Review": "Vaata üle", "Verify yourself & others to keep your chats safe": "Selleks et sinu vestlused oleks turvatud, verifitseeri end ja teisi", "Other users may not trust it": "Teised kasutajad ei pruugi seda usaldada", - "Update your secure storage": "Uuenda rakenduse sisemist turvalist salvestust", "Set up": "Võta kasutusele", "Upgrade": "Uuenda", "Verify": "Verifitseeri", @@ -951,7 +903,6 @@ "Retry": "Proovi uuesti", "Upgrade your encryption": "Uuenda oma krüptimist", "Make a copy of your recovery key": "Tee oma taastevõtmest koopia", - "You're done!": "Valmis!", "Go to Settings": "Ava seadistused", "Set up Secure Messages": "Võta kasutusele krüptitud sõnumid", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s / %(totalRooms)s", @@ -965,12 +916,10 @@ "%(count)s of your messages have not been sent.|other": "Mõned sinu sõnumid on saatmata.", "%(count)s of your messages have not been sent.|one": "Sinu sõnum on saatmata.", "You seem to be in a call, are you sure you want to quit?": "Tundub, et sul parasjagu on kõne pooleli. Kas sa kindlasti soovid väljuda?", - "Unknown room %(roomId)s": "Tundmatu jututuba %(roomId)s", "Room": "Jututuba", "Failed to reject invite": "Kutse tagasilükkamine ei õnnestunud", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Üritasin laadida teatud hetke selle jututoa ajajoonelt, kuid sul ei ole õigusi selle sõnumi nägemiseks.", "Failed to load timeline position": "Asukoha laadimine ajajoonel ei õnnestunud", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Guest": "Külaline", "Uploading %(filename)s and %(count)s others|other": "Laen üles %(filename)s ning %(count)s muud faili", "Uploading %(filename)s and %(count)s others|zero": "Laen üles %(filename)s", @@ -1019,14 +968,6 @@ "Emoji": "Emoji", "Notify the whole room": "Teavita kogu jututuba", "Users": "Kasutajad", - "unknown device": "tundmatu seade", - "NOT verified": "EI OLE verifitseeritud", - "verified": "verifitseeritud", - "Verification": "Verifitseerimine", - "Ed25519 fingerprint": "Ed25519 sõrmejälg", - "User ID": "Kasutajatunnus", - "Algorithm": "Algoritm", - "unencrypted": "krüptimata", "Terms and Conditions": "Kasutustingimused", "Logout": "Logi välja", "Your Communities": "Sinu kogukonnad", @@ -1038,7 +979,6 @@ "Room not found": "Jututuba ei leidunud", "Preview": "Eelvaade", "View": "Näita", - "Message not sent due to unknown sessions being present": "Sõnum on saatmata, sest jutuoas on tundmatud sessioonid", "You can't send any messages until you review and agree to our terms and conditions.": "Sa ei saa saata ühtego sõnumit enne, kui oled läbi lugenud ja nõustunud meie kasutustingimustega.", "Couldn't load page": "Lehe laadimine ei õnnestunud", "You must register to use this functionality": "Selle funktsionaalsuse kasutamiseks pead sa registreeruma", @@ -1110,11 +1050,6 @@ "Error updating main address": "Viga põhiaadressi uuendamisel", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Jututoa põhiaadressi uuendamisel tekkis viga. See kas pole serveris lubatud või tekkis mingi ajutine viga.", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Jututoa lisaaadressi uuendamisel tekkis viga. See kas pole serveris lubatud või tekkis mingi ajutine viga.", - "Error creating alias": "Viga aliase loomisel", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Aliase loomisel tekkis viga. See kas pole serveris lubatud või tekkis mingi ajutine viga.", - "You don't have permission to delete the alias.": "Sul pole õigusi aliase kustutamiseks.", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Selle aliase eemaldamisel tekkis viga. Teda kas pole enam olemas või tekkis mingi ajutine viga.", - "Error removing alias": "Viga aliase eemaldamisel", "Main address": "Põhiaadress", "not specified": "määratlemata", "Rejecting invite …": "Hülgan kutset …", @@ -1166,7 +1101,6 @@ "Only room administrators will see this warning": "Vaid administraatorid näevad seda hoiatust", "You can use /help to list available commands. Did you mean to send this as a message?": "Kirjutades /help saad vaadata käskude loendit. Või soovisid seda saata sõnumina?", "Hint: Begin your message with // to start it with a slash.": "Vihje: kui soovid alustada sõnumit kaldkriipsuga, siis kirjuta //.", - "To link to this room, please add an alias.": "Viitamaks sellele jututoale, palun määra talle alias.", "Only people who have been invited": "Vaid kutsutud kasutajad", "Anyone who knows the room's link, apart from guests": "Kõik, kes teavad jututoa viidet, välja arvatud külalised", "Anyone who knows the room's link, including guests": "Kõik, kes teavad jututoa viidet, kaasa arvatud külalised", @@ -1229,12 +1163,6 @@ "Preparing to send logs": "Valmistun logikirjete saatmiseks", "Failed to send logs: ": "Logikirjete saatmine ei õnnestunud: ", "Verify session": "Verifitseeri sessioon", - "Use Legacy Verification (for older clients)": "Kasuta vanematüübilist verifitseerimist (vähem-moodsa klient-tarkvara jaoks)", - "Verify by comparing a short text string.": "Verifitseeri kasutades lühikeste sõnede võrdlemist.", - "Begin Verifying": "Alusta verifitseerimist", - "Waiting for partner to accept...": "Ootan, et teine osapool nõustuks…", - "Nothing appearing? Not all clients support interactive verification yet. .": "Mitte midagi ei kuvata? Kõik Matrix'i kliendid ei toeta veel interaktiivset verifitseerimist. .", - "Waiting for %(userId)s to confirm...": "Ootan kinnitust kasutajalt %(userId)s…", "Skip": "Jäta vahele", "Token incorrect": "Vigane tunnusluba", "%(oneUser)schanged their name %(count)s times|one": "Kasutaja %(oneUser)s muutis oma nime", @@ -1249,11 +1177,6 @@ "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Järgmisi kasutajanimesid pole olemas või on vigaselt kirjas ning seega ei saa neile kutset saata: %(csvNames)s", "Recently Direct Messaged": "Viimased otsesõnumite saajad", "Invite someone using their name, username (like ), email address or share this room.": "Kutsu kedagi tema nime, kasutajanime (nagu ), e-posti aadressi alusel või jaga seda jututuba.", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "Sa oled lisanud uue sessiooni '%(displayName)s', mis küsib krüptimisvõtmeid.", - "Start verification": "Alusta verifitseerimist", - "Share without verifying": "Jaga ilma verifitseerimata", - "Loading session info...": "Laen sessiooniteavet…", - "Encryption key request": "Krüptimisvõtmete päring", "Upload completed": "Üleslaadimine valmis", "%(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!": "%(brand)s kasutab varasemaga võrreldes 3-5 korda vähem mälu, sest laeb teavet kasutajate kohta vaid siis, kui vaja. Palun oota hetke, kuni sünkroniseerime andmeid serveriga!", "Updating %(brand)s": "Uuenda %(brand)s'it", @@ -1335,7 +1258,6 @@ "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!": "Sinu praeguse brauseriga meie rakenduse välimus ja toimivus võivad olla täitsa valed ning mõni funktsionaalsus ei pruugi toimida üldse. Kui soovid katsetada, siis loomulikult võid jätkata, kuid erinevate tekkivate vigadega pead ise hakkama saama!", "Fetching third party location failed": "Kolmanda osapoole asukoha tuvastamine ei õnnestunud", "Unable to look up room ID from server": "Jututoa tunnuse otsimine serverist ei õnnestunud", - "Show sessions, send anyway or cancel.": "Näita sessioone, saada ikkagi või tühista.", "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Sinu sõnumit ei saadetud, kuna see koduserver on ületanud on ületanud ressursipiirangu. Teenuse kasutamiseks palun võta ühendust serveri haldajaga.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Saada kõik uuesti või tühista kõigi saatmine. Samuti võid sa valida saatmiseks või saatmise tühistamiseks üksikuid sõnumeid.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Saada sõnum uuesti või tühista sõnumi saatmine.", @@ -1436,7 +1358,6 @@ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s muutis uueks teemaks \"%(topic)s\".", "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s uuendas seda jututuba.", "%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s muutis selle jututoa avalikuks kõigile, kes teavad tema aadressi.", - "sent an image.": "saatis ühe pildi.", "Light": "Hele", "Dark": "Tume", "You signed in to a new session without verifying it:": "Sa logisid sisse uude sessiooni ilma seda verifitseerimata:", @@ -1454,14 +1375,10 @@ "Your homeserver does not support session management.": "Sinu koduserver ei toeta sessioonide haldust.", "Unable to load session list": "Sessioonide laadimine ei õnnestunud", "Identity server URL does not appear to be a valid identity server": "Isikutuvastusserveri aadress ei tundu viitama kehtivale isikutuvastusserverile", - "This isn't the recovery key for your account": "See ei ole sinu konto taastevõti", - "This isn't a valid recovery key": "See ei ole nõuetekohane taastevõti", "Looks good!": "Tundub õige!", "Use Recovery Key or Passphrase": "Kasuta taastevõtit või paroolifraasi", "Use Recovery Key": "Kasuta taastevõtit", "or another cross-signing capable Matrix client": "või mõnda teist Matrix'i klienti, mis oskab risttunnustamist", - "Enter your Recovery Key or enter a Recovery Passphrase to continue.": "Jätkamiseks sisesta oma taastevõti või taastamise paroolifraas.", - "Enter your Recovery Key to continue.": "Jätkamiseks sisesta oma taastevõti.", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Sinu uus sessioon on nüüd verifitseeritud. Selles sessioonis saad lugeda oma krüptitud sõnumeid ja teiste kasutajate jaoks on ta usaldusväärne.", "Your new session is now verified. Other users will see it as trusted.": "Sinu uus sessioon on nüüd verifitseeritud. Teiste kasutajate jaoks on ta usaldusväärne.", "Without completing security on this session, it won’t have access to encrypted messages.": "Kui sa pole selle sessiooni turvaprotseduure lõpetanud, siis sul puudub ligipääs oma krüptitud sõnumitele.", @@ -1477,7 +1394,6 @@ "Room Autocomplete": "Jututubade nimede automaatne lõpetamine", "User Autocomplete": "Kasutajanimede automaatne lõpetamine", "Enter recovery key": "Sisesta taastevõti", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Ei õnnestu lugeda krüptitud salvestusruumi. Palun kontrolli, kas sa sisestasid õige taastevõtme.", "This looks like a valid recovery key!": "See tundub olema õige taastevõti!", "Not a valid recovery key": "Ei ole sobilik taastevõti", "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Palu, et sinu %(brand)s'u haldur kontrolliks sinu seadistusi võimalike vigaste või topeltkirjete osas.", @@ -1528,16 +1444,13 @@ "Restart": "Käivita uuesti", "Upgrade your %(brand)s": "Uuenda oma %(brand)s'it", "A new version of %(brand)s is available!": "Uus %(brand)s'i versioon on saadaval!", - "You: %(message)s": "Sina: %(message)s", "There was an error joining the room": "Jututoaga liitumisel tekkis viga", "Sorry, your homeserver is too old to participate in this room.": "Vabandust, sinu koduserver on siin jututoas osalemiseks liiga vana.", "Please contact your homeserver administrator.": "Palun võta ühendust koduserveri haldajaga.", "Failed to join room": "Jututoaga liitumine ei õnnestunud", "Font scaling": "Fontide skaleerimine", "Custom user status messages": "Kasutajate kohandatud olekuteated", - "Use IRC layout": "Kasuta IRC-tüüpi paigutust", "Font size": "Fontide suurus", - "Custom font size": "Fontide kohandatud suurus", "Enable automatic language detection for syntax highlighting": "Kasuta süntaksi esiletõstmisel automaatset keeletuvastust", "Cross-signing private keys:": "Privaatvõtmed risttunnustamise jaoks:", "Identity Server URL must be HTTPS": "Isikutuvastusserveri URL peab kasutama HTTPS-protokolli", @@ -1683,9 +1596,7 @@ "Switch theme": "Vaheta teemat", "Security & privacy": "Turvalisus ja privaatsus", "All settings": "Kõik seadistused", - "Archived rooms": "Arhiveeritud jututoad", "Feedback": "Tagasiside", - "Account settings": "Kasutajakonto seadistused", "Use Single Sign On to continue": "Jätkamiseks kasuta ühekordset sisselogimist", "Confirm adding this email address by using Single Sign On to prove your identity.": "Kinnita selle e-posti aadressi lisamine kasutades ühekordset sisselogimist oma isiku tuvastamiseks.", "Single Sign On": "SSO Ühekordne sisselogimine", @@ -1775,7 +1686,6 @@ "You changed the room topic": "Sina muutsid jututoa teemat", "%(senderName)s changed the room topic": "%(senderName)s muutis jututoa teemat", "Use the improved room list (will refresh to apply changes)": "Kasuta parandaatud jututubade loendit (muudatuse jõustamine eeldab andmete uuesti laadimist)", - "Enable IRC layout option in the appearance tab": "Näita välimuse seadistustes IRC-tüüpi paigutuse valikut", "Use custom size": "Kasuta kohandatud suurust", "Use a more compact ‘Modern’ layout": "Kasuta veel kompaktsemat \"moodsat\" paigutust", "Cross-signing public keys:": "Avalikud võtmed risttunnustamise jaoks:", diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index bdce2b9fd3..1cc07eeaae 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -68,7 +68,6 @@ "Please check your email and click on the link it contains. Once this is done, click continue.": "Irakurri zure e-maila eta egin klik dakarren estekan. Behin eginda, egin klik Jarraitu botoian.", "This email address is already in use": "E-mail helbide hau erabilita dago", "This phone number is already in use": "Telefono zenbaki hau erabilita dago", - "none": "bat ere ez", "Who can read history?": "Nork irakurri dezake historiala?", "Who can access this room?": "Nor sartu daiteke gelara?", "Anyone": "Edonork", @@ -78,16 +77,7 @@ "Banned users": "Debekatutako erabiltzaileak", "Labs": "Laborategia", "This room has no local addresses": "Gela honek ez du tokiko helbiderik", - "End-to-end encryption information": "Muturretik muturrerako zifratzearen informazioa", - "Event information": "Gertaeraren informazioa", - "Curve25519 identity key": "Curve25519 identitate gakoa", - "Claimed Ed25519 fingerprint key": "Aldarrikatutako Ed25519 hatz-marka gakoa", - "Algorithm": "Algoritmoa", "Session ID": "Saioaren IDa", - "Decryption error": "Deszifratze errorea", - "Device ID": "Gailuaren IDa", - "Verification": "Egiaztaketa", - "Ed25519 fingerprint": "Ed25519 hatz-marka", "Export E2E room keys": "Esportatu E2E geletako gakoak", "Export room keys": "Esportatu gelako gakoak", "Export": "Esportatu", @@ -96,14 +86,7 @@ "Import E2E room keys": "Inportatu E2E geletako gakoak", "Import room keys": "Inportatu gelako gakoak", "Import": "Inportatu", - "Blacklisted": "Blokeatuta", - "unknown device": "gailu ezezaguna", - "Unverify": "Kendu egiaztaketa", - "Blacklist": "Blokeatu", - "Unblacklist": "Desblokeatu", - "I verify that the keys match": "Gakoak bat datozela egiaztatu dut", "Someone": "Norbait", - "Start a chat": "Hasi txat bat", "Start authentication": "Hasi autentifikazioa", "Success": "Arrakasta", "For security, this session has been signed out. Please sign in again.": "Segurtasunagatik saio hau amaitu da. Hasi saioa berriro.", @@ -126,7 +109,6 @@ "Default Device": "Lehenetsitako gailua", "Microphone": "Mikrofonoa", "Camera": "Kamera", - "Alias (optional)": "Ezizena (aukerakoa)", "An error has occurred.": "Errore bat gertatu da.", "Are you sure?": "Ziur zaude?", "Are you sure you want to leave the room '%(roomName)s'?": "Ziur '%(roomName)s' gelatik atera nahi duzula?", @@ -147,7 +129,6 @@ "Command error": "Aginduaren errorea", "Commands": "Aginduak", "Confirm password": "Berretsi pasahitza", - "Could not connect to the integration server": "Ezin izan da integrazio zerbitzarira konektatu", "Create Room": "Sortu gela", "Current password": "Oraingo pasahitza", "Custom": "Pertsonalizatua", @@ -157,9 +138,6 @@ "Decline": "Ukatu", "Decrypt %(text)s": "Deszifratu %(text)s", "Default": "Lehenetsia", - "device id: ": "gailuaren id-a: ", - "Direct chats": "Txat zuzenak", - "Disable Notifications": "Desgaitu jakinarazpenak", "Displays action": "Ekintza bistaratzen du", "Drop File Here": "Jaregin fitxategia hona", "%(items)s and %(lastItem)s": "%(items)s eta %(lastItem)s", @@ -169,7 +147,6 @@ "Disinvite": "Kendu gonbidapena", "Download %(text)s": "Deskargatu %(text)s", "Emoji": "Emoji", - "Enable Notifications": "Gaitu jakinarazpenak", "%(senderName)s ended the call.": "%(senderName)s erabiltzaileak deia amaitu du.", "Error decrypting attachment": "Errorea eranskina deszifratzean", "Error: Problem communicating with the given homeserver.": "Errorea: Arazoa emandako hasiera zerbitzariarekin komunikatzeko.", @@ -187,7 +164,6 @@ "Failed to send email": "Huts egin du e-maila bidaltzean", "Failed to send request.": "Huts egin du eskaera bidaltzean.", "Failed to set display name": "Huts egin du pantaila-izena ezartzean", - "Failed to toggle moderator status": "Huts egin du moderatzaile rola aldatzean", "Failed to unban": "Huts egin du debekua kentzean", "Failed to upload profile picture!": "Huts egin du profileko argazkia igotzean!", "Failure to create room": "Huts egin du gela sortzean", @@ -213,12 +189,10 @@ "Sign in with": "Hasi saioa hau erabilita:", "Join as voice or video.": "Elkartu ahotsa edo bideoa erabiliz.", "%(targetName)s joined the room.": "%(targetName)s erabiltzailea gelara elkartu da.", - "Joins room with given alias": "Gelara emandako ezizenarekin elkartu da", "%(senderName)s kicked %(targetName)s.": "%(senderName)s erabiltzaileak %(targetName)s kanporatu du.", "Kick": "Kanporatu", "Kicks user with given id": "Kanporatu emandako ID-a duen erabiltzailea", "%(targetName)s left the room.": "%(targetName)s erabiltzailea gelatik atera da.", - "Local addresses for this room:": "Gela honen tokiko helbideak:", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s erabiltzaileak etorkizuneko gelaren historiala ikusgai jarri du gelako kide guztientzat, gonbidapena egiten zaienetik.", "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s erabiltzaileak etorkizuneko gelaren historiala ikusgai jarri du gelako kide guztientzat, elkartzen direnetik.", "%(senderName)s made future room history visible to all room members.": "%(senderName)s erabiltzaileak etorkizuneko gelaren historiala ikusgai jarri du gelako kide guztientzat.", @@ -227,13 +201,11 @@ "Manage Integrations": "Kudeatu integrazioak", "Missing room_id in request": "Gelaren ID-a falta da eskaeran", "Missing user_id in request": "Erabiltzailearen ID-a falta da eskaeran", - "New address (e.g. #foo:%(localDomain)s)": "Helbide berria (adib. #foo:%(localDomain)s)", "New passwords don't match": "Pasahitz berriak ez datoz bat", "New passwords must match each other.": "Pasahitz berriak berdinak izan behar dira.", "not specified": "zehaztu gabe", "(not supported by this browser)": "(nabigatzaile honek ez du euskarririk)", "": "", - "NOT verified": "EZ egiaztatuta", "No display name": "Pantaila izenik ez", "No more results": "Emaitza gehiagorik ez", "No users have specific privileges in this room": "Ez dago gela honetan baimen zehatzik duen erabiltzailerik", @@ -247,11 +219,9 @@ "Profile": "Profila", "Public Chat": "Txat publikoa", "Reason": "Arrazoia", - "Revoke Moderator": "Kendu moderatzaile baimena", "%(targetName)s rejected the invitation.": "%(targetName)s erabiltzaileak gonbidapena baztertu du.", "Reject invitation": "Baztertu gonbidapena", "Reject all %(invitedRooms)s invites": "Baztertu %(invitedRooms)s gelarako gonbidapen guztiak", - "Remote addresses for this room:": "Gela honen urruneko helbideak:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s erabiltzaileak bere pantaila-izena kendu du (%(oldDisplayName)s).", "%(senderName)s removed their profile picture.": "%(senderName)s erabiltzaileak bere profileko argazkia kendu du.", "%(senderName)s requested a VoIP conference.": "%(senderName)s erabiltzaileak VoIP konferentzia bat eskatu du.", @@ -263,11 +233,9 @@ "Room Colour": "Gelaren kolorea", "%(roomName)s does not exist.": "Ez dago %(roomName)s izeneko gela.", "%(roomName)s is not accessible at this time.": "%(roomName)s ez dago eskuragarri orain.", - "Scroll to bottom of page": "Korritu orria behera arte", "Search failed": "Bilaketak huts egin du", "Searches DuckDuckGo for results": "DuckDuckGo-n bilatzen ditu emaitzak", "Seen by %(userName)s at %(dateTime)s": "%(userName)s erabiltzaileak ikusia %(dateTime)s(e)an", - "Send anyway": "Bidali hala ere", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s erabiltzaileak irudi bat bidali du.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s erabiltzaileak gelara elkartzeko gonbidapen bat bidali dio %(targetDisplayName)s erbiltzaileari.", "Server error": "Zerbitzari-errorea", @@ -295,12 +263,9 @@ "%(senderName)s unbanned %(targetName)s.": "%(senderName)s erabiltzaileak debekua kendu dio %(targetName)s erabiltzaileari.", "Unable to capture screen": "Ezin izan da pantaila-argazkia atera", "Unable to enable Notifications": "Ezin izan dira jakinarazpenak gaitu", - "unencrypted": "zifratu gabe", "unknown caller": "deitzaile ezezaguna", - "Unknown room %(roomId)s": "%(roomId)s gela ezezaguna da", "Unmute": "Audioa aktibatu", "Unnamed Room": "Izen gabeko gela", - "Unrecognised room alias:": "Gelaren ezizen ezezaguna:", "Uploading %(filename)s and %(count)s others|zero": "%(filename)s igotzen", "Uploading %(filename)s and %(count)s others|one": "%(filename)s eta beste %(count)s igotzen", "Uploading %(filename)s and %(count)s others|other": "%(filename)s eta beste %(count)s igotzen", @@ -309,12 +274,9 @@ "Upload file": "Igo fitxategia", "Upload new:": "Igo berria:", "Usage": "Erabilera", - "Use compact timeline layout": "Erabili denbora-lerro diseinu konpaktua", - "User ID": "Erabiltzaile ID-a", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (power %(powerLevelNumber)s)", "Username invalid: %(errMessage)s": "Erabiltzaile-izen baliogabea: %(errMessage)s", "Users": "Erabiltzaileak", - "verified": "egiaztatuta", "Verified key": "Egiaztatutako gakoa", "Video call": "Bideo-deia", "Voice call": "Ahots-deia", @@ -364,7 +326,6 @@ "Upload an avatar:": "Igo abatarra:", "This server does not support authentication with a phone number.": "Zerbitzari honek ez du telefono zenbakia erabiliz autentifikatzea onartzen.", "An error occurred: %(error_string)s": "Errore bat gertatu da: %(error_string)s", - "Make Moderator": "Bihurtu moderatzaile", "There are no visible files in this room": "Ez dago fitxategi ikusgairik gela honetan", "Sent messages will be stored until your connection has returned.": "Bidalitako mezuak zure konexioa berreskuratu arte gordeko dira.", "(~%(count)s results)|one": "(~%(count)s emaitza)", @@ -389,11 +350,9 @@ "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.": "Ziur gertaera hau kendu (ezabatu) nahi duzula? Jakin gelaren izenaren edo mintzagaiaren aldaketa ezabatzen baduzu, aldaketa desegin daitekeela.", "Unknown error": "Errore ezezaguna", "Incorrect password": "Pasahitz okerra", - "To continue, please enter your password.": "Jarraitzeko sartu zure pasahitza.", "Unable to restore session": "Ezin izan da saioa berreskuratu", "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.": "Aurretik %(brand)s bertsio berriago bat erabili baduzu, zure saioa bertsio honekin bateraezina izan daiteke. Itxi leiho hau eta itzuli bertsio berriagora.", "Unknown Address": "Helbide ezezaguna", - "Verify...": "Egiaztatu…", "ex. @bob:example.com": "adib. @urko:adibidea.eus", "Add User": "Gehitu erabiltzailea", "Please check your email to continue registration.": "Egiaztatu zure e-maila erregistroarekin jarraitzeko.", @@ -404,7 +363,6 @@ "Error decrypting image": "Errorea audioa deszifratzean", "Error decrypting video": "Errorea bideoa deszifratzean", "Add an Integration": "Gehitu integrazioa", - "Removed or unknown message type": "Kenduta edo mezu mota ezezaguna", "URL Previews": "URL-en aurrebistak", "Drop file here to upload": "Jaregin fitxategia hona igotzeko", " (unsupported)": " (euskarririk gabe)", @@ -424,10 +382,6 @@ "Authentication check failed: incorrect password?": "Autentifikazio errorea: pasahitz okerra?", "Do you want to set an email address?": "E-mail helbidea ezarri nahi duzu?", "This will allow you to reset your password and receive notifications.": "Honek zure pasahitza berrezarri eta jakinarazpenak jasotzea ahalbidetuko dizu.", - "Start verification": "Hasi egiaztaketa", - "Share without verifying": "Partekatu egiaztatu gabe", - "Ignore request": "Ezikusi eskaera", - "Encryption key request": "Zifratze-gakoa eskatuta", "Deops user with given id": "Emandako ID-a duen erabiltzailea mailaz jaisten du", "Add a widget": "Gehitu trepeta bat", "Allow": "Baimendu", @@ -460,7 +414,6 @@ "Cancel": "Utzi", "Ignore": "Ezikusi", "Unignore": "Ez ezikusi", - "User Options": "Erabiltzaile-aukerak", "You are now ignoring %(userId)s": "%(userId)s ezikusten ari zara", "You are no longer ignoring %(userId)s": "Ez zaude jada %(userId)s ezikusten", "Unignored user": "Ez ezikusitako erabiltzailea", @@ -468,15 +421,9 @@ "Stops ignoring a user, showing their messages going forward": "Utzi erabiltzailea ezikusteari, erakutsi bere mezuak", "Ignores a user, hiding their messages from you": "Ezikusi erabiltzailea, ezkutatu bere mezuak zuretzat", "Banned by %(displayName)s": "%(displayName)s erabiltzaileak debekatuta", - "Message removed by %(userId)s": "%(userId)s erabiltzaileak kendu du mezua", "Unpin Message": "Desfinkatu mezua", "Add rooms to this community": "Gehitu gelak komunitate honetara", "Call Failed": "Deiak huts egin du", - "Review Devices": "Berrikusi gailuak", - "Call Anyway": "Deitu hala ere", - "Answer Anyway": "Erantzun hala ere", - "Call": "Deitu", - "Answer": "Erantzun", "Who would you like to add to this community?": "Nor gehitu nahi duzu komunitate honetara?", "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Abisua: komunitate batera gehitzen duzun edozein pertsona publikoki ikusgai egongo da komunitatearen ID-a dakien edonorentzat", "Invite new community members": "Gonbidatu kide berriak komunitatera", @@ -484,7 +431,6 @@ "Which rooms would you like to add to this community?": "Zeintzuk gela gehitu nahi dituzu komunitate honetara?", "Show these rooms to non-members on the community page and room list?": "Erakutsi gela hauek kide ez direnei komunitatearen orrian eta gelen zerrendan?", "Add rooms to the community": "Gehitu gelak komunitatera", - "Room name or alias": "Gelaren izena edo ezizena", "Add to community": "Gehitu komunitatera", "Failed to invite the following users to %(groupId)s:": "Huts egin du honako erabiltzaile hauek %(groupId)s komunitatera gonbidatzean:", "Failed to invite users to community": "Huts egin du erabiltzaileak komunitatera gonbidatzean", @@ -563,7 +509,6 @@ "New community ID (e.g. +foo:%(localDomain)s)": "Komunitatearen ID berria (adib +izena:%(localDomain)s)", "URL previews are enabled by default for participants in this room.": "URLen aurrebistak gaituta daude gela honetako partaideentzat.", "URL previews are disabled by default for participants in this room.": "URLen aurrebistak desgaituta daude gela honetako partaideentzat.", - "Message removed": "Mezua kendu da", "An email has been sent to %(emailAddress)s": "e-maila bidali da hona: %(emailAddress)s", "A text message has been sent to %(msisdn)s": "Testu mezu bat bidali da hona: %(msisdn)s", "Remove from community": "Kendu komunitatetik", @@ -667,8 +612,6 @@ "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.": "%(brand)s bertsio zahar batek datuak antzeman dira. Honek bertsio zaharrean muturretik muturrerako zifratzea ez funtzionatzea eragingo du. Azkenaldian bertsio zaharrean bidali edo jasotako zifratutako mezuak agian ezin izango dira deszifratu bertsio honetan. Honek ere Bertsio honekin egindako mezu trukeak huts egitea ekar dezake. Arazoak badituzu, amaitu saioa eta hasi berriro saioa. Mezuen historiala gordetzeko, esportatu eta berriro inportatu zure gakoak.", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Sortu komunitate bat erabiltzaileak eta gelak biltzeko! Sortu zure hasiera orria eta markatu zure espazioa Matrix unibertsoan.", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Ez dago beste inor hemen! Beste batzuk gonbidatu nahi dituzu edo gela hutsik dagoela abisatzeari utzi?", - "Light theme": "Azal argia", - "Dark theme": "Azal iluna", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "%(emailAddress)s helbidera e-mail bat bidali da. Behin dakarren esteka jarraituta, egin klik behean.", "This homeserver doesn't offer any login flows which are supported by this client.": "Hasiera zerbitzari honek ez du bezero honek onartzen duen fluxurik eskaintzen.", "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.": "Ezin izango duzu hau aldatu zure burua mailaz jaisten ari zarelako, zu bazara gelan baimenak dituen azken erabiltzailea ezin izango dira baimenak berreskuratu.", @@ -676,9 +619,7 @@ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Birbidali guztiak edo baztertu guztiak orain. Mezuak banaka birbidali edo baztertu ditzakezu ere.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Birbidali mezua edo baztertu mezua orain.", "Send an encrypted reply…": "Bidali zifratutako erantzun bat…", - "Send a reply (unencrypted)…": "Bidali erantzun bat (zifratu gabea)…", "Send an encrypted message…": "Bidali zifratutako mezu bat…", - "Send a message (unencrypted)…": "Bidali mezu bat (zifratu gabea)…", "Replying": "Erantzuten", "Minimize apps": "Minimizatu aplikazioak", "The platform you're on": "Zauden plataforma", @@ -686,12 +627,11 @@ "Your language of choice": "Zure aukerako hizkuntza", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Pribatutasuna garrantzitsua da guretzat, beraz ez dugu datu pertsonalik edo identifikagarririk jasotzen gure estatistiketan.", "Learn more about how we use analytics.": "Ikasi gehiago estatistikei ematen diegun erabileraz.", - "The information being sent to us to help make %(brand)s better includes:": "%(brand)s hobetzeko bidaltzen zaigun informazioan hau dago:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s hobetzeko bidaltzen zaigun informazioa honakoa da, besteren artean:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Orri honek informazio identifikagarria badu ere, esaterako gela, erabiltzailea edo talde ID-a, datu hauek ezabatu egiten dira zerbitzarira bidali aurretik.", "Which officially provided instance you are using, if any": "Erabiltzen ari zaren instantzia ofiziala, balego", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Testu editorean testu aberatsa modua erabiltzen duzun", "Your homeserver's URL": "Zure hasiera zerbitzariaren URL-a", - "Your identity server's URL": "Zure identitate zerbitzariaren URL-a", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(fullYear)s(e)ko %(monthName)sk %(day)sa", "This room is not public. You will not be able to rejoin without an invite.": "Gela hau ez da publikoa. Ezin izango zara berriro elkartu gonbidapenik gabe.", "Community IDs cannot be empty.": "Komunitate ID-ak ezin dira hutsik egon.", @@ -721,7 +661,6 @@ "Who can join this community?": "Nor elkartu daiteke komunitate honetara?", "Everyone": "Edonor", "Fetching third party location failed": "Huts egin du hirugarrengoen kokalekua eskuratzean", - "A new version of %(brand)s is available.": "%(brand)s bertsio berri bat dago eskuragarri.", "Send Account Data": "Bidali kontuaren datuak", "All notifications are currently disabled for all targets.": "Une honetan jakinarazpen guztiak helburu guztietarako desgaituta daude.", "Uploading report": "Txostena igotzen", @@ -738,8 +677,6 @@ "Send Custom Event": "Bidali gertaera pertsonalizatua", "Advanced notification settings": "Jakinarazpen aurreratuen ezarpenak", "Failed to send logs: ": "Huts egin du egunkariak bidaltzean: ", - "delete the alias.": "ezabatu ezizena.", - "To return to your account in future you need to set a password": "Etorkizunean kontura itzuli ahal izateko pasahitz bat ezarri behar duzu", "Forget": "Ahaztu", "You cannot delete this image. (%(code)s)": "Ezin duzu irudi hau ezabatu. (%(code)s)", "Cancel Sending": "Utzi bidaltzeari", @@ -765,7 +702,6 @@ "Resend": "Birbidali", "Files": "Fitxategiak", "Collecting app version information": "Aplikazioaren bertsio-informazioa biltzen", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Ezabatu gelaren %(alias)s ezizena eta kendu %(name)s direktoriotik?", "Keywords": "Hitz gakoak", "Enable notifications for this account": "Gaitu jakinarazpenak kontu honetarako", "Invite to this community": "Gonbidatu komunitate honetara", @@ -822,7 +758,6 @@ "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.": "Arazte-egunkariek aplikazioak darabilen datuak dauzkate, zure erabiltzaile izena barne, bisitatu dituzun gelen ID-ak edo ezizenak eta beste erabiltzaileen izenak. Ez dute mezurik.", "Unhide Preview": "Ez ezkutatu aurrebista", "Unable to join network": "Ezin izan da sarera elkartu", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Agian %(brand)s ez beste bezero batean konfiguratu dituzu. Ezin dituzu %(brand)s bidez doitu, baina aplikagarriak dira", "Sorry, your browser is not able to run %(brand)s.": "Zure nabigatzaileak ez du %(brand)s erabiltzeko gaitasunik.", "Uploaded on %(date)s by %(user)s": "%(user)s erabiltzaileak %(date)s (e)an igota", "Messages in group chats": "Talde txatetako mezuak", @@ -847,11 +782,9 @@ "Thank you!": "Eskerrik asko!", "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!": "Zure oraingo nabigatzailearekin aplikazioaren itxura eta portaera guztiz okerra izan daiteke, eta funtzio batzuk ez dira ibiliko. Hala ere aurrera jarraitu dezakezu saiatu nahi baduzu, baina zure erantzukizunaren menpe geratzen dira aurkitu ditzakezun arazoak!", "Checking for an update...": "Eguneraketarik dagoen egiaztatzen…", - "There are advanced notifications which are not shown here": "Hemen erakusten ez diren jakinarazpen aurreratuak daude", "Missing roomId.": "Gelaren ID-a falta da.", "Every page you use in the app": "Aplikazioan erabilitako orri oro", "e.g. ": "adib. ", - "Your User Agent": "Zure erabiltzaile-agentea", "Your device resolution": "Zure gailuaren bereizmena", "Always show encryption icons": "Erakutsi beti zifratze ikonoak", "Popout widget": "Laster-leiho trepeta", @@ -870,9 +803,6 @@ "Review terms and conditions": "Irakurri termino eta baldintzak", "To continue, please enter your password:": "Jarraitzeko, sartu zure pasahitza:", "e.g. %(exampleValue)s": "adib. %(exampleValue)s", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Hobetu %(brand)s erabilera-datu anonimoak bidaliz. Honek coockie bat erabiliko du (Ikusi gure Cookie politika).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Hobetu %(brand)s erabilera-datu anonimoak bidaliz. Honek cookie bat erabiliko du.", - "Yes, I want to help!": "Bai, lagundu nahi dut!", "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.": "Honek kontua behin betirako erabilgaitza bihurtuko du. Ezin izango duzu saioa hasi, eta ezin izango du beste inork ID hori erabili. Kontua dagoen gela guztietatik aterako da, eta kontuaren xehetasunak identitate-zerbitzaritik ezabatuko dira. Ekintza hau ezin da desegin.", "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.": "Kontua desaktibatzean ez dira zuk bidalitako mezuak ahaztuko. Mezuak ahaztea nahi baduzu markatu beheko kutxa.", "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-eko mezuen ikusgaitasuna e-mail sistemaren antekoa da. Guk zure mezuak ahaztean ez dizkiogu erabiltzaile berriei edo izena eman ez dutenei erakutsiko, baina jada zure mezuak jaso dituzten erregistratutako erabiltzaileen bere kopia izaten jarraituko dute.", @@ -918,9 +848,6 @@ "Please contact your service administrator to continue using the service.": "Jarri kontaktuan zerbitzuaren administratzailearekin zerbitzu hau erabiltzen jarraitzeko.", "This homeserver has hit its Monthly Active User limit.": "Hasiera zerbitzari honek bere hilabeteko erabiltzaile aktiboen muga gainditu du.", "This homeserver has exceeded one of its resource limits.": "Hasiera zerbitzari honek bere baliabide mugetako bat gainditu du.", - "Please contact your service administrator to get this limit increased.": "Jarri kontaktuan zerbitzuaren administratzailearekin muga hau areagotzeko.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Hasiera zerbitzari honek hilabeteko erabiltzaile aktiboen muga jo du erabiltzaile batzuk ezin izango dute saioa hasi.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Hasiera zerbitzari honek bere baliabide mugetako bat jo du erabiltzaile batzuk ezin izango dute saioa hasi.", "Failed to upgrade room": "Huts egin du gela eguneratzea", "The room upgrade could not be completed": "Ezin izan da gelaren eguneraketa osatu", "Upgrade this room to version %(version)s": "Eguneratu gela hau %(version)s bertsiora", @@ -934,14 +861,7 @@ "Legal": "Legala", "Please contact your service administrator to continue using this service.": "Jarri kontaktuan zerbitzuaren administratzailearekin zerbitzu hau erabiltzen jarraitzeko.", "Forces the current outbound group session in an encrypted room to be discarded": "Uneko irteerako talde saioa zifratutako gela batean baztertzera behartzen du", - "Registration Required": "Erregistratzea ezinbestekoa da", - "You need to register to do this. Would you like to register now?": "Hau egiteko erregistratu egin behar zara. Orain erregistratu nahi duzu?", "Unable to connect to Homeserver. Retrying...": "Ezin izan da hasiera zerbitzarira konektatu. Berriro saiatzen…", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s erabiltzaileak %(addedAddresses)s gehitu du gelako helbide gisa.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s erabiltzaileak %(addedAddresses)s helbideak gehitu dizkio gela honi.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s erabiltzileak %(removedAddresses)s helbideak kendu ditu gela honetatik.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s erabiltzaileak %(removedAddresses)s helbideak kendu ditu gela honetatik.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s erabiltzaileak %(addedAddresses)s helbideak gehitu eta %(removedAddresses)s helbideak kendu ditu gela honetatik.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s erabiltzileak %(address)s ezarri du gela honetako helbide nagusi gisa.", "%(senderName)s removed the main address for this room.": "%(senderName)s erabiltzaileak gela honen helbide nagusia kendu du.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Egunkariak bidali aurretik, GitHub arazo bat sortu behar duzu gertatzen zaizuna azaltzeko.", @@ -963,37 +883,25 @@ "Algorithm: ": "Algoritmoa: ", "Please review and accept all of the homeserver's policies": "Berrikusi eta onartu hasiera-zerbitzariaren politika guztiak", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Zure txaten historiala ez galtzeko, zure gelako gakoak esportatu behar dituzu saioa amaitu aurretik. %(brand)s-en bertsio berriagora bueltatu behar zara hau egiteko", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "%(brand)s-en bertsio berriago bat erabili duzu %(host)s zerbitzarian. Bertsio hau berriro erabiltzeko muturretik muturrerako zifratzearekin, saioa amaitu eta berriro hasi beharko duzu. ", "Incompatible Database": "Datu-base bateraezina", "Continue With Encryption Disabled": "Jarraitu zifratzerik gabe", - "Enter a passphrase...": "Sartu pasa-esaldi bat...", "Next": "Hurrengoa", "That matches!": "Bat dator!", "That doesn't match.": "Ez dator bat.", "Go back to set it again.": "Joan atzera eta berriro ezarri.", - "Repeat your passphrase...": "Errepikatu zure pasa-esaldia...", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Aukeran, berreskuratze pasa-esaldia ahazten baduzu, zure zifratutako mezuen historiala berreskuratzeko erabili dezakezu.", - "Your Recovery Key": "Zure berreskuratze gakoa", - "Copy to clipboard": "Kopiatu arbelera", "Download": "Deskargatu", "Print it and store it somewhere safe": "Inprimatu ezazu eta gorde toki seguruan", "Save it on a USB key or backup drive": "Gorde ezazu USB giltza batean edo babes-kopien diskoan", "Copy it to your personal cloud storage": "Kopiatu ezazu zure hodeiko biltegi pertsonalean", "Set up Secure Message Recovery": "Ezarri mezu seguruen berreskuratzea", - "Keep it safe": "Gorde toki seguruan", - "Create Key Backup": "Sortu gakoaren babes-kopia", "Unable to create key backup": "Ezin izan da gakoaren babes-kopia sortu", "Retry": "Berriro saiatu", "Unable to load backup status": "Ezin izan da babes-kopiaren egoera kargatu", "Unable to restore backup": "Ezin izan da babes-kopia berrezarri", "No backup found!": "Ez da babes-kopiarik aurkitu!", - "Backup Restored": "Babes-kopia berrezarrita", "Failed to decrypt %(failedCount)s sessions!": "Ezin izan dira %(failedCount)s saio deszifratu!", - "Restored %(sessionCount)s session keys": "%(sessionCount)s saio gako berrezarrita", - "Enter Recovery Passphrase": "Sartu berreskuratze pasa-esaldia", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Atzitu zure mezu seguruen historiala eta ezarri mezularitza segurua zure berreskuratze pasa-esaldia sartuz.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Zure berreskuratze pasa-esaldia ahaztu baduzu berreskuratze gakoa erabili dezakezu edo berreskuratze aukera berriak ezarri ditzakezu", - "Enter Recovery Key": "Sartu berreskuratze gakoa", "This looks like a valid recovery key!": "Hau baliozko berreskuratze gako bat dirudi!", "Not a valid recovery key": "Ez da baliozko berreskuratze gako bat", "Access your secure message history and set up secure messaging by entering your recovery key.": "Atzitu zure mezu seguruen historiala eta ezarri mezularitza segurua zure berreskuratze gakoa sartuz.", @@ -1031,8 +939,6 @@ "User %(user_id)s does not exist": "Ez dago %(user_id)s erabiltzailerik", "Unknown server error": "Zerbitzari errore ezezaguna", "Failed to load group members": "Huts egin du taldeko kideak kargatzean", - "Great! This passphrase looks strong enough.": "Ongi! Pasaesaldi hau nahiko gogorra ematen du.", - "As a safety net, you can use it to restore your encrypted message history.": "Badaezpada, zure zifratutako mezuen historiala berreskuratzeko erabili dezakezu.", "Show a reminder to enable Secure Message Recovery in encrypted rooms": "Erakutsi mezu seguruen berreskuratzea gaitzeko oroigarri bat zifratutako geletan", "Don't ask again": "Ez galdetu berriro", "Set up": "Ezarri", @@ -1055,7 +961,6 @@ "Unable to load commit detail: %(msg)s": "Ezin izan dira xehetasunak kargatu: %(msg)s", "Invalid identity server discovery response": "Baliogabeko erantzuna identitate zerbitzariaren bilaketan", "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.": "Ez baduzu berreskuratze sistema berria ezarri, erasotzaile bat zure kontua atzitzen saiatzen egon daiteke. Aldatu zure kontuaren pasahitza eta ezarri berreskuratze metodo berria berehala ezarpenetan.", - "Waiting for %(userId)s to confirm...": "%(userId)s erabiltzaileak berretsi dezan itxaroten…", "User %(user_id)s may or may not exist": "%(user_id)s erabiltzailea existitu daiteke edo ez", "Unrecognised address": "Helbide ezezaguna", "Prompt before sending invites to potentially invalid matrix IDs": "Galdetu baliogabeak izan daitezkeen matrix ID-eetara gonbidapenak bidali aurretik", @@ -1140,11 +1045,8 @@ "Room avatar": "Gelaren abatarra", "Room Name": "Gelaren izena", "Room Topic": "Gelaren mintzagaia", - "Verify by comparing a short text string.": "Egiaztatu testu-kate labur bat konparatuz.", - "Begin Verifying": "Hasi egiaztaketa", "Report bugs & give feedback": "Eman akatsen berri eta egin iruzkinak", "Go back": "Joan atzera", - "Recovery Key Mismatch": "Berreskuratze gakoak ez datoz bat", "Update status": "Eguneratu egoera", "Set status": "Ezarri egoera", "This homeserver would like to make sure you are not a robot.": "Hasiera-zerbitzari honek robota ez zarela egiaztatu nahi du.", @@ -1189,7 +1091,6 @@ "Timeline": "Denbora-lerroa", "Autocomplete delay (ms)": "Automatikoki osatzeko atzerapena (ms)", "Roles & Permissions": "Rolak eta baimenak", - "To link to this room, please add an alias.": "Gela honetara estekatzeko, gehitu ezizen bat.", "Security & Privacy": "Segurtasuna eta pribatutasuna", "Encryption": "Zifratzea", "Once enabled, encryption cannot be disabled.": "Behin gaituta, zifratzea ezin da desgaitu.", @@ -1199,7 +1100,6 @@ "Voice & Video": "Ahotsa eta bideoa", "Main address": "Helbide nagusia", "Join": "Elkartu", - "Incorrect Recovery Passphrase": "Berreskuratze pasaesaldi okerra", "Premium": "Ordainpekoa", "Premium hosting for organisations Learn more": "Elkarteentzako ordainpeko ostatua ikasi gehiago", "Sign in instead": "Hasi saioa horren ordez", @@ -1263,18 +1163,11 @@ "Never lose encrypted messages": "Ez galdu inoiz zifratutako mezuak", "Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Gela honetako mezuak muturretik muturrerako zifratzeaz babestuak daude. Zuek eta hartzaileek besterik ez daukazue mezu horiek irakurtzeko giltza.", "Composer": "Idazlekua", - "Secure your backup with a passphrase": "Babestu zure babes-kopia pasaesaldi batekin", - "Confirm your passphrase": "Berretsi pasaesaldia", - "Recovery key": "Berreskuratze gakoa", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Historiala nork irakurri dezakeen aldatzea gelak honetara aurrerantzean bidalitako mezuei besterik ez zaie aplikatuko. Badagoen historialaren ikusgaitasuna ez da aldatuko.", "Bulk options": "Aukera masiboak", "Securely back up your keys to avoid losing them. Learn more.": "Egin zure gakoen babes-kopia segurua hauek ez galtzeko. Ikasi gehiago.", "Not now": "Orain ez", "Don't ask me again": "Ez galdetu berriro", - "Use Legacy Verification (for older clients)": "Erabili egiaztaketa zaharra (bezero zaharrentzat)", - "Waiting for partner to accept...": "Kideak onartu bitartean zain…", - "Nothing appearing? Not all clients support interactive verification yet. .": "Ez da ezer agertzen? Bezero guztiek ez dute egiaztaketa interaktiborako euskarria. .", - "Use two-way text verification": "Erabili bi zentzutako testu egiaztaketa", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Egiaztatu erabiltzaile hau fidagarritzat markatzeko. Honek bakea ematen dizu muturretik muturrerako zifratutako mezuak erabiltzean.", "Waiting for partner to confirm...": "Kideak baieztatzearen zain…", "Incoming Verification Request": "Jasotako egiaztaketa eskaria", @@ -1284,8 +1177,6 @@ "Are you sure you want to sign out?": "Ziur saioa amaitu nahi duzula?", "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Akatsen bat aurkitzen baduzu edo iruzkinen bat baduzu, emaguzu berri GitHub bidez.", "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.": "Bikoiztutako txostenak ekiditeko, dauden txostenak aurretik (eta gehitu +1) edo sortu txosten berria aurkitzen ez baduzu.", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Ezin izn da babes-kopia deszifratu gako honekin: egiaztatu berreskuratze gako egokia sartu duzula.", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Ezin izan da babes-kopia deszifratu pasaesaldi honekin: egiaztatu berreskuratze pasaesaldia ondo idatzi duzula.", "Warning: you should only set up key backup from a trusted computer.": "Abisua:: Gakoen babeskopia fidagarria den gailu batetik egin beharko zenuke beti.", "Hide": "Ezkutatu", "This homeserver does not support communities": "Hasiera-zerbitzari honek ez du komunitateetarako euskarria", @@ -1293,11 +1184,7 @@ "This homeserver does not support login using email address.": "Hasiera-zerbitzari honek ez du e-mail helbidea erabiliz saioa hastea onartzen.", "Registration has been disabled on this homeserver.": "Izen ematea desaktibatuta dago hasiera-zerbitzari honetan.", "Unable to query for supported registration methods.": "Ezin izan da onartutako izen emate metodoei buruz galdetu.", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Zure gakoen kopia zifratu bat gordeko dugu gure zerbitzarietan. Babestu zure babes-kopia pasaesaldi batekin.", "For maximum security, this should be different from your account password.": "Segurtasun hobe baterako, hau eta zure ohiko pasahitza desberdinak izan beharko lirateke.", - "Set up with a Recovery Key": "Ezarri berreskuratze gakoarekin", - "Please enter your passphrase a second time to confirm.": "Sartu zure pasaesaldia berriro baieztatzeko.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Berreskuratze gakoa badaezpadako bat da, zure zifratutako mezuetara sarbidea berreskuratzeko erabili dezakezu pasaesaldia ahaztuz gero.", "Your keys are being backed up (the first backup could take a few minutes).": "Zure gakoen babes-kopia egiten ari da (lehen babes-kopiak minutu batzuk behar ditzake).", "Success!": "Ongi!", "A new recovery passphrase and key for Secure Messages have been detected.": "Berreskuratze pasaesaldi eta mezu seguruen gako berriak antzeman dira.", @@ -1312,7 +1199,6 @@ "User %(userId)s is already in the room": "%(userId)s erabiltzailea gelan dago jada", "The user must be unbanned before they can be invited.": "Erabiltzaileari debekua kendu behar zaio gonbidatu aurretik.", "Show read receipts sent by other users": "Erakutsi beste erabiltzaileek bidalitako irakurragiriak", - "Order rooms in the room list by most important first instead of most recent": "Ordenatu gelak gelen zerrendan garrantzitsuenak hasieran jarriz, eta ez eguneratutako azkenak", "Scissors": "Artaziak", "Upgrade to your own domain": "Eguneratu zure domeinu propiora", "Accept all %(invitedRooms)s invites": "Onartu %(invitedRooms)s gelako gonbidapen guztiak", @@ -1337,10 +1223,6 @@ "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.": "Behin aktibatuta, ezin zaio gelari zifratzea kendu. Zerbitzariak ezin ditu zifratutako gela batetara bidalitako mezuak ikusi, gelako partaideek besterik ezin dituzte ikusi. Zifratzea aktibatzeak bot eta zubi batzuk ongi ez funtzionatzea ekarri dezake. Ikasi gehiago zifratzeari buruz.", "Error updating main address": "Errorea helbide nagusia eguneratzean", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Errore bat gertatu da gelaren helbide nagusia eguneratzean. Agian zerbitzariak ez du hau baimentzen, edo une bateko hutsegitea izan da.", - "Error creating alias": "Errorea aliasa sortzean", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Errore bat gertatu da alias hori sortzean. Agian zerbitzariak ez du onartzen, edo une bateko hutsegitea izan da.", - "Error removing alias": "Errorea aliasa kentzean", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Errore bat gertatu da alias hori kentzean. Agien ez da jada existitzen edo une bateko hutsegitea izan da.", "Error updating flair": "Errorea ikurra eguneratzean", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Errorea gertatu da gela honen ikurra eguneratzean. Agian zerbitzariak ez du baimentzen, edo une bateko hutsegitea izan da.", "Power level": "Botere maila", @@ -1368,7 +1250,6 @@ "You have %(count)s unread notifications in a prior version of this room.|one": "Irakurri gabeko %(count)s jakinarazpen duzu gela honen aurreko bertsio batean.", "Replying With Files": "Fitxategiekin erantzutea", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "'Ogi puskak' ezaugarria erabiltzen duzun ala ez (gelen zerrenda gaineko abatarrak)", - "A conference call could not be started because the integrations server is not available": "Ezin izan da konferentzia dei bat hasi integrazio zerbitzaria ez dagoelako eskuragarri", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Une honetan ezin da fitxategi batekin erantzun. Fitxategia igo nahi duzu erantzun gabe?", "The file '%(fileName)s' failed to upload.": "Huts egin du '%(fileName)s' fitxategia igotzean.", "The server does not support the room version specified.": "Zerbitzariak ez du emandako gela-bertsioa onartzen.", @@ -1388,7 +1269,6 @@ "Unexpected error resolving homeserver configuration": "Ustekabeko errorea hasiera-zerbitzariaren konfigurazioa ebaztean", "Unexpected error resolving identity server configuration": "Ustekabeko errorea identitate-zerbitzariaren konfigurazioa ebaztean", "The user's homeserver does not support the version of the room.": "Erabiltzailearen hasiera-zerbitzariak ez du gelaren bertsioa onartzen.", - "Show recently visited rooms above the room list": "Erakutsi bisitatutako azken gelak gelen zerrendaren goialdean", "Show hidden events in timeline": "Erakutsi gertaera ezkutuak denbora-lerroan", "Low bandwidth mode": "Banda-zabalera gutxiko modua", "When rooms are upgraded": "Gelak eguneratzean", @@ -1629,16 +1509,11 @@ "Unread mentions.": "Irakurri gabeko aipamenak.", "Show image": "Erakutsi irudia", "Please create a new issue on GitHub so that we can investigate this bug.": "Sortu txosten berri bat GitHub zerbitzarian arazo hau ikertu dezagun.", - "Room alias": "Gelaren ezizena", "e.g. my-room": "adib. nire-gela", - "Please provide a room alias": "Sartu gelaren ezizena", - "This alias is available to use": "Ezizen hau eskuragarri dago", - "This alias is already in use": "Ezizen hau jada hartuta dago", "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Erabili identitate-zerbitzari bat e-mail bidez gonbidatzeko. Erabili lehenetsitakoa (%(defaultIdentityServerName)s) edo gehitu bat Ezarpenak atalean.", "Use an identity server to invite by email. Manage in Settings.": "Erabili identitate-zerbitzari bat e-mail bidez gonbidatzeko. Kudeatu Ezarpenak atalean.", "Close dialog": "Itxi elkarrizketa-koadroa", "Please enter a name for the room": "Sartu gelaren izena", - "Set a room alias to easily share your room with other people.": "Ezarri ezizen bat gelarentzat besteekin erraz partekatzeko.", "This room is private, and can only be joined by invitation.": "Gela hau pribatua da, eta gonbidapena behar da elkartzeko.", "Create a public room": "Sortu gela publikoa", "Create a private room": "Sortu gela pribatua", @@ -1724,7 +1599,6 @@ "%(senderName)s placed a video call.": "%(senderName)s erabiltzaileak bideo-dei bat abiatu du.", "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s erabiltzaileak bideo-dei bat abiatu du. (Nabigatzaile honek ez du onartzen)", "Try out new ways to ignore people (experimental)": "Probatu jendea ez entzuteko modu berriak (esperimentala)", - "Enable local event indexing and E2EE search (requires restart)": "Gaitu gertaera lokalen indexazioa eta E2EE bilaketa (berrabiarazi behar da)", "Match system theme": "Bat egin sistemako azalarekin", "My Ban List": "Nire debeku-zerrenda", "This is your list of users/servers you have blocked - don't leave the room!": "Hau blokeatu dituzun erabiltzaile edo zerbitzarien zerrenda da, ez atera gelatik!", @@ -1742,7 +1616,6 @@ "Error adding ignored user/server": "Errorea ezikusitako erabiltzaile edo zerbitzaria gehitzean", "Something went wrong. Please try again or view your console for hints.": "Okerren bat egon da. Saiatu berriro edo bilatu aztarnak kontsolan.", "Error subscribing to list": "Errorea zerrendara harpidetzean", - "Please verify the room ID or alias and try again.": "Egiaztatu gelaren ID-a edo ezizena eta saiatu berriro.", "Error removing ignored user/server": "Errorea ezikusitako erabiltzaile edo zerbitzaria kentzean", "Error unsubscribing from list": "Errorea zerrendatik harpidetza kentzean", "Please try again or view your console for hints.": "Saiatu berriro edo bilatu aztarnak kontsolan.", @@ -1766,7 +1639,6 @@ "Subscribed lists": "Harpidetutako zerrendak", "Subscribing to a ban list will cause you to join it!": "Debeku-zerrenda batera harpidetzeak zu elkartzea ekarriko du!", "If this isn't what you want, please use a different tool to ignore users.": "Hau ez bada zuk nahi duzuna, erabili beste tresnaren bat erabiltzaileak ezikusteko.", - "Room ID or alias of ban list": "Debeku-zerrendaren gela ID-a edo ezizena", "Subscribe": "Harpidetu", "Failed to connect to integration manager": "Huts egin du integrazio kudeatzailera konektatzean", "Trusted": "Konfiantzazkoa", @@ -1800,8 +1672,6 @@ "Remove for everyone": "Kendu denentzat", "Remove for me": "Kendu niretzat", "Verification Request": "Egiaztaketa eskaria", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", - "Send cross-signing keys to homeserver": "Bidali zeharkako sinaduraren gakoak hasiera-zerbitzarira", "Error upgrading room": "Errorea gela eguneratzean", "Double check that your server supports the room version chosen and try again.": "Egiaztatu zure zerbitzariak aukeratutako gela bertsioa onartzen duela eta saiatu berriro.", "%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s erabiltzaileak %(glob)s adierazpenarekin bat datozen erabiltzaileak debekatzen zituen araua kendu du", @@ -1853,24 +1723,13 @@ "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Orokorrean honek zerbitzariak gela nola prozesatzen duen da duen eragin bakarra. RIot-ekin arazoak badituzu, eman akats baten berri.", "You'll upgrade this room from to .": "Gela hau bertsiotik bertsiora eguneratuko duzu.", "Upgrade": "Eguneratu", - "Enter secret storage passphrase": "Sartu biltegi sekretuko pasaesaldia", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Ezin izan da biltegi sekretura sartu. Egiaztatu pasaesaldi zuzena idatzi duzula.", - "Warning: You should only access secret storage from a trusted computer.": "Abisua: Biltegi sekretura ordenagailu fidagarri batetik konektatu beharko zinateke beti.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Zure pasa-esaldia ahaztu baduzu berreskuratze gakoa erabili dezakezu edo berreskuratze aukera berriak ezarri ditzakezu.", - "Enter secret storage recovery key": "Sartu biltegi sekretuko berreskuratze-gakoa", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Ezin izan da biltegi sekretura sartu. Egiaztatu berreskuratze-gako zuzena sartu duzula.", - "If you've forgotten your recovery key you can .": "Zure berreskuratze-gakoa ahaztu baduzu ditzakezu.", "Warning: You should only set up key backup from a trusted computer.": "Abisua:: Gakoen babes-kopia fidagarria den gailu batetik egin beharko zenuke beti.", "If you've forgotten your recovery key you can ": "Zure berreskuratze-gakoa ahaztu baduzu ditzakezu", "Notification settings": "Jakinarazpenen ezarpenak", "User Status": "Erabiltzaile-egoera", "Set up with a recovery key": "Ezarri berreskuratze gakoarekin", - "As a safety net, you can use it to restore your access to encrypted messages if you forget your passphrase.": "Aukeran, berreskuratze pasa-esaldia ahazten baduzu, zure zifratutako mezuak berreskuratzeko erabili dezakezu.", - "As a safety net, you can use it to restore your access to encrypted messages.": "Badaezpada, zure zifratutako mezuen historiala berreskuratzeko erabili dezakezu.", - "Keep your recovery key somewhere very secure, like a password manager (or a safe).": "Gorde zure berreskuratze gakoa toki oso seguruan, esaterako pasahitz kudeatzaile batean (edo gordailu kutxan).", "Your recovery key has been copied to your clipboard, paste it to:": "Zure berreskuratze gakoa arbelera kopiatu da, itsatsi hemen:", "Your recovery key is in your Downloads folder.": "Zure berreskuratze gakoa zure Deskargak karpetan dago.", - "Storing secrets...": "Sekretuak gordetzen...", "Unable to set up secret storage": "Ezin izan da biltegi sekretua ezarri", "The message you are trying to send is too large.": "Bidali nahi duzun mezua handiegia da.", "Language Dropdown": "Hizkuntza menua", @@ -1885,7 +1744,6 @@ "Suggestions": "Proposamenak", "Failed to find the following users": "Ezin izan dira honako erabiltzaile hauek aurkitu", "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Honako erabiltzaile hauek agian ez dira existitzen edo baliogabeak dira, eta ezin dira gonbidatu: %(csvNames)s", - "Show a presence dot next to DMs in the room list": "Erakutsi presentzia puntua mezu zuzenen ondoan gelen zerrendan", "Lock": "Blokeatu", "Restore": "Berrezarri", "a few seconds ago": "duela segundo batzuk", @@ -1909,19 +1767,11 @@ "Something went wrong trying to invite the users.": "Okerren bat egon da erabiltzaileak gonbidatzen saiatzean.", "We couldn't invite those users. Please check the users you want to invite and try again.": "Ezin izan ditugu erabiltzaile horiek gonbidatu. Egiaztatu gonbidatu nahi dituzun erabiltzaileak eta saiatu berriro.", "Recently Direct Messaged": "Berriki mezu zuzena bidalita", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Ez baduzu baten bat aurkitzen, eskatu bere erabiltzaile-izena (adib. @erabiltzailea:zerbitzaria.eus) edo partekatu gela hau.", - "Complete security": "Segurtasun osoa", - "Verify this session to grant it access to encrypted messages.": "Egiaztatu saio hau zifratutako mezuetara sarbidea emateko.", "Start": "Hasi", "Session verified": "Saioa egiaztatuta", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Zure saio berria orain egiaztatuta dago. Zure zifratutako mezuetara sarbidea du, eta beste erabiltzaileek fidagarri gisa ikusiko zaituzte.", "Done": "Egina", "Go Back": "Joan atzera", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s erabiltzaileak %(addedAddresses)s helbideak eta beste %(count)s gehitu dizkio gela honi", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s erabiltzaileak %(removedAddresses)s helbideak eta beste %(count)s kendu dizkio gela honi", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s erabiltzaileak %(countRemoved)s helbide kendu eta %(countAdded)s gehitu dizkio gela honi", - "%(senderName)s turned on end-to-end encryption.": "%(senderName)s erabiltzaileak muturretik muturrera zifratzea aktibatu du.", - "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s erabiltzaileak muturretik muturrera zifratzea gaitu du (%(algorithm)s algoritmo ezezaguna).", "This room is end-to-end encrypted": "Gela hau muturretik muturrera zifratuta dago", "Everyone in this room is verified": "Gelako guztiak egiaztatuta daude", "Invite only": "Gonbidapenez besterik ez", @@ -1936,37 +1786,23 @@ "Verify User": "Egiaztatu erabiltzailea", "For extra security, verify this user by checking a one-time code on both of your devices.": "Segurtasun gehiagorako, egiaztatu erabiltzaile hau aldi-bakarrerako kode bat bi gailuetan egiaztatuz.", "Start Verification": "Hasi egiaztaketa", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Ez baduzu baten bat aurkitzen, eskatu bere erabiltzaile-izena, partekatu zurea (%(userId)s) edo partekatu profilaren esteka.", "Enter your account password to confirm the upgrade:": "Sartu zure kontuaren pasa-hitza eguneraketa baieztatzeko:", "You'll need to authenticate with the server to confirm the upgrade.": "Zerbitzariarekin autentifikatu beharko duzu eguneraketa baieztatzeko.", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Babestu zure zifratze gakoak pasa-esaldi batekin. Segurtasun gorenerako hau eta zure kontuaren pasahitza desberdinak izan beharko lukete:", - "Enter a passphrase": "Sartu pasa-esaldia", - "Enter your passphrase a second time to confirm it.": "Sartu zure pasa-esaldia berriro hau baieztatzeko.", - "Verify other users in their profile.": "Egiaztatu beste erabiltzaileak bere profiletan.", "Upgrade your encryption": "Eguneratu zure zifratzea", "Set up encryption": "Ezarri zifratzea", - "Encryption upgraded": "Zifratzea eguneratuta", - "Encryption setup complete": "Zifratzearen ezarpena egina", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Saio ezezagunak daude gela honetan: egiaztatu gabe aurrera jarraitzen baduzu, baten batek zure deian kuxkuxeatu lezake.", "Setting up keys": "Gakoak ezartzen", "Verify this session": "Egiaztatu saio hau", "Encryption upgrade available": "Zifratze eguneratzea eskuragarri", - "Unverified session": "Egiaztatu gabeko saioa", "Verifies a user, session, and pubkey tuple": "Erabiltzaile, saio eta gako-publiko tupla egiaztatzen du", "Unknown (user, session) pair:": "(Erabiltzaile, saio) bikote ezezaguna:", "Session already verified!": "Saioa jada egiaztatu da!", "WARNING: Session already verified, but keys do NOT MATCH!": "ABISUA: Saioa jada egiaztatu da, baina gakoak EZ DATOZ BAT!", "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!": "ABISUA: GAKO EGIAZTAKETAK HUTS EGIN DU! %(userId)s eta %(deviceId)s saioaren sinatze gakoa %(fprint)s da, eta ez dator bat emandako %(fingerprint)s gakoarekin. Honek esan nahi lezake norbaitek zure komunikazioan esku sartzen ari dela!", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Eman duzun sinatze gakoa bat dator %(userId)s eta %(deviceId)s saioarentzat jaso duzun sinatze-gakoarekin. Saioa egiaztatu gisa markatu da.", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Gaitu zeharkako sinatzea erabiltzaileko egiaztatzeko eta ez saioko (garapenean)", - "Show padlocks on invite only rooms": "Erakutsi giltzarrapoak soilik gonbidapenarekin diren geletan", "Never send encrypted messages to unverified sessions from this session": "Ez bidali inoiz zifratutako mezuak egiaztatu gabeko saioetara saio honetatik", "Never send encrypted messages to unverified sessions in this room from this session": "Ez bidali inoiz zifratutako mezuak egiaztatu gabeko saioetara gela honetan saio honetatik", "Enable message search in encrypted rooms": "Gaitu mezuen bilaketa gela zifratuetan", - "Keep secret storage passphrase in memory for this session": "Mantendu biltegi sekretuko pasa-esaldia memorian saio honetan", "How fast should messages be downloaded.": "Zeinen azkar deskargatu behar diren mezuak.", - "Confirm the emoji below are displayed on both devices, in the same order:": "Baieztatu azpiko emojiak bi gailuetan ikusten direla, ordena berean:", - "Verify this device by confirming the following number appears on its screen.": "Egiaztatu gailu hau honako zenbakia bere pantailan agertzen dela baieztatuz.", "Waiting for %(displayName)s to verify…": "%(displayName)s egiaztatu bitartean zain…", "They match": "Bat datoz", "They don't match": "Ez datoz bat", @@ -2006,7 +1842,6 @@ "Session ID:": "Saioaren ID-a:", "Session key:": "Saioaren gakoa:", "Message search": "Mezuen bilaketa", - "Sessions": "Saioak", "A session's public name is visible to people you communicate with": "Saio baten izen publikoa zurekin komunikatzen den jendeak ikusi dezake", "This room is bridging messages to the following platforms. Learn more.": "Gela honek honako plataformetara kopiatzen ditu mezuak. Argibide gehiago.", "This room isn’t bridging messages to any platforms. Learn more.": "Gela honek ez ditu mezuak beste plataformatara kopiatzen. Argibide gehiago.", @@ -2014,10 +1849,6 @@ "This user has not verified all of their sessions.": "Erabiltzaile honek ez ditu bere saio guztiak egiaztatu.", "You have not verified this user.": "Ez duzu erabiltzaile hau egiaztatu.", "Someone is using an unknown session": "Baten batek saio ezezagun bat erabiltzen du", - "Some sessions for this user are not trusted": "Erabiltzaile honen saio batzuk ez dira fidagarritzat jotzen", - "All sessions for this user are trusted": "Erabiltzaile honen saio guztiak fidagarritzat jotzen dira", - "Some sessions in this encrypted room are not trusted": "Zifratutako gela honetako saio batzuk ez dira fidagarritzat jotzen", - "All sessions in this encrypted room are trusted": "Zifratutako gela honetako saio guztiak fidagarritzat jotzen dira", "Encrypted by an unverified session": "Egiaztatu gabeko saio batek zifratua", "Encrypted by a deleted session": "Ezabatutako saio batek zifratua", "Your messages are not secure": "Zure mezuak ez daude babestuta", @@ -2034,9 +1865,6 @@ "If you can't scan the code above, verify by comparing unique emoji.": "Ezin baduzu goiko kodea eskaneatu, egiaztatu emoji bakanak konparatuz.", "You've successfully verified %(displayName)s!": "Ongi egiaztatu duzu %(displayName)s!", "Got it": "Ulertuta", - "Verification timed out. Start verification again from their profile.": "Egiaztaketarako denbora-muga agortu da. Hasi egiaztaketa berriro bere profiletik.", - "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s erabiltzaileak egiaztaketa ezeztatu du. Hasi egiaztaketa berriro bere profiletik.", - "You cancelled verification. Start verification again from their profile.": "Egiaztaketa ezeztatu duzu. Hasi egiaztaketa berriro bere profiletik.", "Encryption enabled": "Zifratzea gaituta", "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Gela honetako mezuak muturretik muturrera zifratuta daude. Ikasi gehiago eta egiaztatu erabiltzaile hau bere erabiltzaile profilean.", "Encryption not enabled": "Zifratzea gaitu gabe", @@ -2044,41 +1872,27 @@ "Clear all data in this session?": "Garbitu saio honetako datu guztiak?", "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Saio honetako datuak garbitzea behin betirako da. Zifratutako mezuak galdu egingo dira gakoen babes-kopia egin ez bada.", "Verify session": "Egiaztatu saioa", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Saio hau fidagarritzat jo daitekeela egiaztatzeko, egiaztatu gailu horretako erabiltzaile ezarpenetan ikusten duzun gakoa beheko honekin bat datorrela:", "Session name": "Saioaren izena", "Session key": "Saioaren gakoa", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Bat badator, sakatu beheko egiaztatu botoia. Ez badator bat, beste inor saioa antzematen ari da eta zerrenda beltzean sartu beharko zenuke.", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Erabiltzaile hau egiaztatzean bere saioa fidagarritzat joko da, eta zure saioak beretzat fidagarritzat ere.", - "Loading session info...": "Saioaren informazioa kargatzen…", "New session": "Saio berria", "Use this session to verify your new one, granting it access to encrypted messages:": "Erabili saio hau berria egiaztatzeko, honela mezu zifratuetara sarbidea emanez:", "If you didn’t sign in to this session, your account may be compromised.": "Ez baduzu saio hau zuk hasi, agian baten bat zure kontuan sartu da.", "This wasn't me": "Ez naiz ni izan", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Honekin zure kontura itzuli ahalko zara beste saioak amaitu eta berriro hasita.", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Egiaztatu gabeko saioak zerrenda beltzean sartzen ari zara, saio hauetara mezuak bidaltzeko egiaztatu behar dituzu.", - "Room contains unknown sessions": "Gelak saio ezezagunak ditu", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "%(RoomName)s gelan aurretik ikusi ez dituzun saioak daude.", - "Unknown sessions": "Saio ezezagunak", "Recovery key mismatch": "Berreskuratze gakoak ez datoz bat", "Incorrect recovery passphrase": "Berreskuratze pasa-esaldi okerra", - "Backup restored": "Babes-kopia berreskuratuta", "Enter recovery passphrase": "Sartu berreskuratze pasa-esaldia", "Enter recovery key": "Sartu berreskuratze gakoa", "Confirm your identity by entering your account password below.": "Baieztatu zure identitatea zure kontuaren pasahitza azpian idatziz.", - "Message not sent due to unknown sessions being present": "Ez da mezua bidali saio ezezagunak daudelako", "Your new session is now verified. Other users will see it as trusted.": "Zure saioa egiaztatuta dago orain. Beste erabiltzaileek fidagarri gisa ikusiko dute.", "Without completing security on this session, it won’t have access to encrypted messages.": "Saio honetan segurtasuna ezarri ezean, ez du zifratutako mezuetara sarbiderik izango.", - "Sender session information": "Igorlearen saioaren informazioa", - "Back up my encryption keys, securing them with the same passphrase": "Egin nire zifratze gakoen babes-kopia, babestu pasa-esaldi berberarekin", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Gorde kopia bat toki seguruan, esaterako pasahitz kudeatzaile batean edo gordailu kutxan.", "Your recovery key": "Zure berreskuratze gakoa", "Copy": "Kopiatu", - "You can now verify your other devices, and other users to keep your chats safe.": "Orain zure beste gailuak eta beste erabiltzaileak egiaztatu ditzakezu txatak seguru mantentzeko.", "Make a copy of your recovery key": "Egin zure berreskuratze gakoaren kopia", - "You're done!": "Bukatu duzu!", "If you cancel now, you won't complete verifying the other user.": "Orain ezeztatzen baduzu, ez duzu beste erabiltzailearen egiaztaketa burutuko.", "If you cancel now, you won't complete verifying your other session.": "Orain ezeztatzen baduzu, ez duzu beste zure beste saioaren egiaztaketa burutuko.", - "If you cancel now, you won't complete your secret storage operation.": "Orain ezeztatzen baduzu, ez duzu zure biltegi sekretuko eragiketa burutuko.", "Cancel entering passphrase?": "Ezeztatu pasa-esaldiaren sarrera?", "Securely cache encrypted messages locally for them to appear in search results.": "Gorde zifratutako mezuak cachean modu seguruan bilaketen emaitzetan agertu daitezen.", "You have verified this user. This user has verified all of their sessions.": "Erabiltzaile hau egiaztatu duzu. Erabiltzaile honek bere saio guztiak egiaztatu ditu.", @@ -2087,21 +1901,13 @@ "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.": "Automatikoki bidaltzen dira gako partekatze eskaerak zure beste saioetara. Beste saioetan gako partekatze eskaera ukatu edo baztertu baduzu, sakatu hemen saio honentzat gakoak berriro eskatzeko.", "If your other sessions do not have the key for this message you will not be able to decrypt them.": "Zure beste saioek ez badute mezu honen gakoa ezin izango duzu deszifratu.", "Re-request encryption keys from your other sessions.": "Eskatu berriro zifratze gakoak zure beste saioei.", - "No sessions with registered encryption keys": "Ez dago zifratze gako hori duen saiorik", "Waiting for %(displayName)s to accept…": "%(displayName)s(e)k onartu bitartean zain…", "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Zuon mezuak babestuta daude eta soilik zuk eta hartzaileak dituzue hauek irekitzeko giltza.", "One of the following may be compromised:": "Hauetakoren bat konprometituta egon daiteke:", "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.": "Egiztatu gailu hau fidagarri gisa markatzeko. Gailu hau fidagarritzat jotzeak lasaitasuna ematen du muturretik-muturrera zifratutako mezuak erabiltzean.", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Gailu hau egiaztatzean fidagarri gisa markatuko da, eta egiaztatu zaituzten erabiltzaileek fidagarri gisa ikusiko dute.", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "'%(displayName)s' saio berria gehitu duzu, eta zifratze gakoak eskatzen ari da.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Zure egiaztatu gabeko '%(displayName)s' saioa zifratze gakoak eskatzen ari da.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Egiaztaketa prozesua saio bakoitzeko egitea aholkatzen dizugu, benetan jabearenak direla baieztatzeko, baina egiaztaketa egin gabe mezua bidali dezakezu ere.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Atzitu zure mezu seguruen historiala eta zeharkako sinatzerako identitatea beste saioak egiaztatzeko zure pasa-esaldia sartuz.", - "Show sessions, send anyway or cancel.": "Erakutsi saioak, bidali edonola ere edo ezeztatu.", - "The information being sent to us to help make %(brand)s better includes:": "%(brand)s hobetzeko bidaltzen zaigun informazioa honakoa da, besteren artean:", "Verify this session by completing one of the following:": "Egiaztatu saio hau hauetako bat osatuz:", "or": "ala", - "The version of %(brand)s": "%(brand)s bertsioa", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Sarrera mekanismo nagusia ukimena den gailu bat erabiltzen duzun", "Whether you're using %(brand)s as an installed Progressive Web App": "%(brand)s instalatutako aplikazio progresibo gisa erabiltzen duzun", "Your user agent": "Zure erabiltzaile-agentea", @@ -2123,14 +1929,11 @@ "Securely cache encrypted messages locally for them to appear in search results, using ": "Gorde zifratutako mezuak cachean modu seguruan bilaketen emaitzetan agertu daitezen, hau erabiliz ", " to store messages from ": " hemengo mezuak gordetzeko ", "%(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-ek zifratutako mezuak cache lokalean modu seguruan gordetzeko elementu batzuk faltan ditu. Ezaugarri honekin esperimentatu nahi baduzu, konpilatu pertsonalizatutako %(brand)s Desktop bilaketa osagaiekin.", - "%(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-ek ezin ditu zifratutako mezuak cache lokalean gorde web nabigatzaile batetik badabil. Erabili %(brand)s Desktop zifratutako mezuak bilaketen emaitzetan agertzeko.", "Backup has a signature from unknown session with ID %(deviceId)s": "Babes-kopiak %(deviceId)s ID-a duen erabiltzaile ezezagun baten sinadura du", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Babes-kopiaren gakoa biltegi sekretuan gorde da, baina ezaugarri hau ez dago saio honetan aktibatuta. Gaitu zeharkako sinatzea Laborategia atalean gakoen babes-kopiaren egoera aldatzeko.", "Accepting…": "Onartzen…", "Not Trusted": "Ez konfiantzazkoa", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) erabiltzaileak saio berria hasi du hau egiaztatu gabe:", "Ask this user to verify their session, or manually verify it below.": "Eskatu erabiltzaile honi saioa egiaztatu dezala, edo egiaztatu eskuz azpian.", - "Manually Verify": "Eskuzko egiaztaketa", "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.": "Egiaztatu nahi duzun saioak ez du QR kodea eskaneatzea onartzen, ezta emoji egiaztaketa, eta hau da %(brand)s-ek onartzen duena. Saiatu beste bezero batekin.", "Verify by scanning": "Egiaztatu eskaneatuz", "You declined": "Ukatu egin duzu", @@ -2140,21 +1943,18 @@ "Destroy cross-signing keys?": "Suntsitu zeharkako sinatzerako gakoak?", "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Zeharkako sinatzerako gakoak ezabatzea behin betiko da. Egiaztatu dituzunak segurtasun abisu bat jasoko dute. Ziur aski ez duzu hau egin nahi, zeharkako sinatzea ahalbidetzen dizun gailu oro galdu ez baduzu.", "Clear cross-signing keys": "Garbitu zeharkako sinatzerako gakoak", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Saio hau fidagarritzat jo daitekeela egiaztatzeko, jarri jabearekin kontaktuan beste bide batetik (adib. aurrez aurre edo telefonoz deituz) eta galdetu saio honentzat erabiltzaile ezarpenetan ikusten duten gakoa beheko honekin bat datorren:", "Verification Requests": "Egiaztatze eskaerak", "Your account is not secure": "Zure kontua ez da segurua", "Your password": "Zure pasahitza", "This session, or the other session": "Saio hau, edo beste saioa", "The internet connection either session is using": "Saioetako batek darabilen internet konexioa", "We recommend you change your password and recovery key in Settings immediately": "Pasahitza eta ezarpenetako berreskuratze gakoa berehala aldatzea aholkatzen dizugu", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Atzitu zure mezu seguruen historiala eta zeharkako sinatzerako identitatea beste saioak egiaztatzeko zure berreskuratze gakoa sartuz.", "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Zure pasahitza aldatzeak zure saio guztietako muturretik-muturrerako zifratzerako gakoak berrezarriko ditu, eta aurretik zifratutako mezuen historiala ezin izango da irakurri. Ezarri gakoen babes-kopia edo esportatu zure geletako gakoak beste saio batetik pasahitza aldatu aurretik.", "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.": "Saio guztiak amaitu dituzu eta ez duzu push jakinarazpenik jasoko. Jakinarazpenak berriro aktibatzeko, hasi saioa gailuetan.", "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.": "Berreskuratu zure kontura sarbidea eta saio honetan gordetako zifratze gakoak. Horiek gabe, ezin izango dituzu zure mezu seguruak beste saioetan irakurri.", "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.": "Abisua: Zure datu pertsonalak (zure zifratze gakoak barne) saio honetan daude oraindik. Garbitu ezazu saio hau erabiltzen bukatu duzunean, edo beste kontu batekin saioa hasi nahi duzunean.", "Restore your key backup to upgrade your encryption": "Berreskuratu zure gakoen babes-kopia zure zifratzea eguneratzeko", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Eguneratu saio hau beste saioak egiaztatu ahal ditzan, zifratutako mezuetara sarbidea emanez eta beste erabiltzaileei fidagarri gisa agertu daitezen.", - "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Ezarri zifratzea saio honetan beste saioak egiaztatu ahal ditzan, zifratutako mezuetara sarbidea emanez eta beste erabiltzaileei fidagarri gisa agertu daitezen.", "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.": "Mezuen berreskuratze segurua ezartzen ez baduzu, ezin izango duzu zifratutako mezuen historiala berreskuratu saioa amaitzen baduzu edo beste saio bat erabiltzen baduzu.", "Create key backup": "Sortu gakoen babes-kopia", "This session is encrypting history using the new recovery method.": "Saio honek historiala zifratzen du berreskuratze metodo berria erabiliz.", @@ -2162,21 +1962,16 @@ "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.": "Nahi gabe egin baduzu hau, Mezu seguruak ezarri ditzakezu saio honetan eta saioaren mezuen historiala berriro zifratuko da berreskuratze metodo berriarekin.", "If disabled, messages from encrypted rooms won't appear in search results.": "Desgaituz gero, zifratutako geletako mezuak ez dira bilaketen emaitzetan agertuko.", "Disable": "Desgaitu", - "Not currently downloading messages for any room.": "Orain ez da inolako gelatik mezurik deskargatzen ari.", - "Downloading mesages for %(currentRoom)s.": "%(currentRoom)s gelako mezuak deskargatzen.", "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s-ek zifratutako mezuak cache lokalean gordetzen ditu modu seguruan bilaketen emaitzen ager daitezen:", "Space used:": "Erabilitako espazioa:", "Indexed messages:": "Indexatutako mezuak:", "Indexed rooms:": "Indexatutako gelak:", - "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s / %(totalRooms)s", "Message downloading sleep time(ms)": "Mezuen deskargaren itxarote tartea (ms)", "Displays information about a user": "Erabiltzaileari buruzko informazioa erakusten du", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Matrix-ekin lotutako segurtasun arazo baten berri emateko, irakurri Segurtasun ezagutarazte gidalerroak.", "Mark all as read": "Markatu denak irakurrita gisa", "Not currently indexing messages for any room.": "Orain ez da inolako gelako mezurik indexatzen.", - "Currently indexing: %(currentRoom)s.": "Orain indexatzen: %(currentRoom)s.", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s / %(totalRooms)s", - "Review Sessions": "Berrikusi saioak", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s erabiltzaileak gelaren izena aldatu du%(oldRoomName)s izatetik %(newRoomName)s izatera.", "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s erabiltzaileak %(addresses)s ordezko helbideak gehitu dizkio gela honi.", "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s erabiltzaileak %(addresses)s helbideak gehitu dizkio gela honi.", @@ -2193,7 +1988,6 @@ "Add theme": "Gehitu azala", "Scroll to most recent messages": "Korritu azken mezuetara", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Errore bat gertatu da gelaren ordezko helbideak eguneratzean. Agian zerbitzariak ez du onartzen edo une bateko akatsa izan da.", - "You don't have permission to delete the alias.": "Ez duzu ezizena ezabatzeko baimenik.", "Local address": "Helbide lokala", "Published Addresses": "Argitaratutako helbideak", "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.": "Argitaratutako helbideak edonork erabili ditzake edozein zerbitzaritik zure gelara elkartzeko. Helbide bat argitaratzeko aurretik helbide lokal gisa ezarri behar da.", @@ -2216,9 +2010,6 @@ "Add a new server...": "Gehitu zerbitzari berria...", "%(networkName)s rooms": "%(networkName)s(e)ko gelak", "Matrix rooms": "Matrix gelak", - "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "Ireki badagoen saio bat eta erabili hura hau egiaztatzeko, mezu zifratuetara sarbidea emanez.", - "Waiting…": "Itxaroten…", - "If you can’t access one, ": "Ezin baduzu bat atzitu, ", "Manually Verify by Text": "Egiaztatu eskuz testu bidez", "Interactively verify by Emoji": "Egiaztatu interaktiboki Emoji bidez", "Keyboard Shortcuts": "Teklatu lasterbideak", @@ -2230,7 +2021,6 @@ "%(brand)s encountered an error during upload of:": "%(brand)sek errorea aurkitu du hau igotzean:", "Upload completed": "Igoera burututa", "Cancelled signature upload": "Sinadura igoera ezeztatuta", - "Unabled to upload": "Ezin izan da igo", "Signature upload success": "Sinaduren igoera ongi burutu da", "Signature upload failed": "Sinaduren igoerak huts egin du", "Confirm by comparing the following with the User Settings in your other session:": "Berretsi honako hau zure beste saioaren erabiltzaile-ezarpenetan agertzen denarekin alderatuz:", @@ -2277,14 +2067,10 @@ "Space": "Zuriune-barra", "End": "Amaiera", "Manually verify all remote sessions": "Egiaztatu eskuz urruneko saio guztiak", - "Update your secure storage": "Eguneratu zure biltegi segurua", "Self signing private key:": "Norberak sinatutako gako pribatua:", "cached locally": "cache lokalean", "not found locally": "ez da lokalean aurkitu", "User signing private key:": "Erabiltzaileak sinatzeko gako pribatua:", - "Secret Storage key format:": "Biltegi sekretuaren gakoaren formatua:", - "outdated": "zaharkitua", - "up to date": "egunean", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Egiaztatu erabiltzaile baten saio bakoitza hau fidagarri gisa markatzeko, ez dira zeharka sinatutako gailuak fidagarritzat jotzen.", "In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "Gela zifratuetan, zuon mezuak babestuta daude, zuk zeuk eta hartzaileak bakarrik duzue hauek deszifratzeko gako bakanak.", "Verify all users in a room to ensure it's secure.": "Egiaztatu gela bateko erabiltzaile guztiak segurua dela baieztatzeko.", @@ -2292,7 +2078,6 @@ "Verified": "Egiaztatuta", "Verification cancelled": "Egiaztaketa ezeztatuta", "Compare emoji": "Konparatu emojiak", - "Unverified login. Was this you?": "Egiaztatu gabeko saioa. Zu izan zara?", "Session backup key:": "Saioaren babes-kopia gakoa:", "Sends a message as html, without interpreting it as markdown": "Bidali mezua html gisa, markdown balitz aztertu gabe", "Sign in with SSO": "Hasi saioa SSO-rekin", @@ -2350,17 +2135,12 @@ "Could not find user in room": "Ezin izan da erabiltzailea gelan aurkitu", "Please supply a widget URL or embed code": "Eman trepetaren URLa edo txertatu kodea", "Send a bug report with logs": "Bidali akats txostena egunkariekin", - "Enable cross-signing to verify per-user instead of per-session": "Gaitu zeharkako sinadura erabiltzaileko edo saioko egiaztatzeko", - "Keep recovery passphrase in memory for this session": "Mantendu berreskuratze pasa-esaldia memorian saio honentzat", "Can't load this message": "Ezin izan da mezu hau kargatu", "Submit logs": "Bidali egunkariak", "Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Oroigarria: Ez dugu zure nabigatzailearentzako euskarririk, ezin da zure esperientzia nolakoa izango den aurreikusi.", "Unable to upload": "Ezin izan da igo", "Verify other session": "Egiaztatu beste saioa", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Ezin izan da biltegi sekretura sartu. Egiaztatu berreskuratze pasa-esaldi zuzena sartu duzula.", - "Warning: You should only do this on a trusted computer.": "Abisua:: Hau fidagarritzat jotzen duzun ordenagailu batetik egin beharko zenuke beti.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Atzitu zure mezu seguruen historiala eta zeharkako sinatzerako identitatea beste saioak egiaztatzeko zure berreskuratze pasa-esaldia sartuz.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Zure berreskuratze pasa-esaldia ahaztu baduzu berreskuratze-gakoa erabili dezakezu edo berreskuratze aukera berriak ezarri ditzakezu.", "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "Ezin izan da babes-kopia deszifratu berreskuratze-gako honekin: egiaztatu berreskuratze-gako egokia sartu duzula.", "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Ezin izan da babes-kopia deszifratu berreskuratze pasa-esaldi honekin: egiaztatu berreskuratze berreskuratze pasa-esaldia ondo idatzi duzula.", "Verify this login": "Egiaztatu saio hau", @@ -2370,18 +2150,13 @@ "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Baieztatu zure identitatea saio hau zure beste saio batetik egiaztatuz, mezu zifratuetara sarbidea emanez.", "This requires the latest %(brand)s on your other devices:": "Honek zure beste gailuetan azken %(brand)s bertsioa eskatzen du:", "or another cross-signing capable Matrix client": "edo zeharkako sinadurarako gai den beste Matrix bezero bat", - "Use Recovery Passphrase or Key": "Erabili berreskuratze pasa-esaldia edo gakoa", "Great! This recovery passphrase looks strong enough.": "Bikain! Berreskuratze pasa-esaldi hau sendoa dirudi.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Ezarri berreskuratze pasa-esaldia zifratutako informazioa babesteko eta, saioa amaitzekotan, berreskuratzeko. Hau ez luke zure kontuaren pasahitzaren berdina izan behar:", "Enter a recovery passphrase": "Sartu berreskuratze pasa-esaldia", - "Back up encrypted message keys": "Egin zifratutako mezuen gakoen babes-kopia", "Enter your recovery passphrase a second time to confirm it.": "Sartu zure berreskuratze pasa-esaldia berriro baieztatzeko.", "Confirm your recovery passphrase": "Berretsi berreskuratze pasa-esaldia", "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Zure berreskuratze-gakoa badaezpadakoa da, pasa-esaldia ahazten baduzu zure zifratutako mezuak berreskuratzeko erabili dezakezu.", "Unable to query secret storage status": "Ezin izan da biltegi sekretuaren egoera kontsultatu", - "Confirm recovery passphrase": "Berretsi berreskuratze pasa-esaldia", "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Zure gakoen kopia zifratu bat gordeko dugu gure zerbitzarian. Babestu zure babes-kopia berreskuratze pasa-esaldi batekin.", - "Enter a recovery passphrase...": "Sartu berreskuratze pasa-esaldia...", "Please enter your recovery passphrase a second time to confirm.": "Sartu zure berreskuratze pasa-esaldia berriro baieztatzeko.", "Repeat your recovery passphrase...": "Errepikatu zure berreskuratze pasa-esaldia...", "Secure your backup with a recovery passphrase": "Babestu zure babeskopia berreskuratze pasa-esaldi batekin", @@ -2393,10 +2168,7 @@ "You signed in to a new session without verifying it:": "Saio berria hasi duzu hau egiaztatu gabe:", "Verify your other session using one of the options below.": "Egiaztatu zure beste saioa beheko aukeretako batekin.", "Font scaling": "Letren eskalatzea", - "Use the improved room list (in development - refresh to apply changes)": "Erabili gelen zerrenda hobetua (garapenean, freskatu aldaketak aplikatzedko)", - "Use IRC layout": "Erabili IRC diseinua", "Font size": "Letra-tamaina", - "Custom font size": "Letra-tamaina pertsonalizatua", "IRC display name width": "IRC-ko pantaila izenaren zabalera", "Waiting for your other session to verify…": "Zure beste saioak egiaztatu bitartean zain…", "Verify all your sessions to ensure your account & messages are safe": "Egiaztatu zure saio guztiak kontua eta mezuak seguru daudela bermatzeko", @@ -2429,7 +2201,6 @@ "Room name or address": "Gelaren izena edo helbidea", "Joins room with given address": "Emandako helbidea duen gelara elkartzen da", "Unrecognised room address:": "Gela helbide ezezaguna:", - "sent an image.": "irudi bat bidali du.", "Help us improve %(brand)s": "Lagundu gaitzazu %(brand)s hobetzen", "Send anonymous usage data which helps us improve %(brand)s. This will use a cookie.": "Bidali erabilera datu anonimoak %(brand)s hobetzen laguntzeko. Honek cookie bat darabil.", "I want to help": "Lagundu nahi dut", @@ -2442,7 +2213,6 @@ "Restart": "Berrasi", "Upgrade your %(brand)s": "Eguneratu zure %(brand)s", "A new version of %(brand)s is available!": "%(brand)s bertsio berria eskuragarri dago!", - "You: %(message)s": "Zu: %(message)s", "New version available. Update now.": "Bertsio berri eskuragarri. Eguneratu orain.", "Please verify the room ID or address and try again.": "Egiaztatu gelaren ID-a edo helbidea eta saiatu berriro.", "Room ID or address of ban list": "Debeku zerrendaren gelaren IDa edo helbidea", @@ -2483,8 +2253,6 @@ "Switch theme": "Aldatu azala", "Security & privacy": "Segurtasuna eta pribatutasuna", "All settings": "Ezarpen guztiak", - "Archived rooms": "Artxibatutako gelak", "Feedback": "Iruzkinak", - "Account settings": "Kontuaren ezarpenak", "Use a different passphrase?": "Erabili pasa-esaldi desberdin bat?" } diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json index 3d9bdd3be1..17f4b54f28 100644 --- a/src/i18n/strings/fa.json +++ b/src/i18n/strings/fa.json @@ -1,7 +1,6 @@ { "Fetching third party location failed": "تطبیق اطلاعات از منابع‌ دسته سوم با شکست مواجه شد", "Messages in one-to-one chats": "پیام‌های درون چت‌های یک‌به‌یک", - "A new version of %(brand)s is available.": "نسخه‌ی جدید از رایوت موجود است.", "Advanced notification settings": "تنظیمات پیشرفته برای آگاه‌سازی‌ها", "Uploading report": "در حال بارگذاری گزارش", "Sunday": "یکشنبه", @@ -23,8 +22,6 @@ "OK": "باشه", "All notifications are currently disabled for all targets.": "همه‌ی آگاه‌سازی‌ها برای تمام هدف‌ها غیرفعال‌اند.", "Operation failed": "عملیات شکست خورد", - "delete the alias.": "نام مستعار را پاک کن.", - "To return to your account in future you need to set a password": "برای بازگشتِ دوباره به اکانتان در آینده نیاز به ثبت یک پسورد دارید", "Forget": "فراموش کن", "World readable": "خواندن جهانی", "Mute": "سکوت", @@ -51,7 +48,6 @@ "No update available.": "هیچ به روزرسانی جدیدی موجود نیست.", "Noisy": "پرسروصدا", "Collecting app version information": "درحال جمع‌آوری اطلاعات نسخه‌ی برنامه", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "آیا مطمئنید که می‌خواهید نام مستعار گپ %(alias)s را پاک و %(name)s را از فهرست حذف کنید؟", "Cancel": "لغو", "Enable notifications for this account": "آگاه سازی با رایانامه را برای این اکانت فعال کن", "Messages containing keywords": "پیا‌م‌های دارای این کلیدواژه‌ها ", @@ -100,7 +96,6 @@ "Search…": "جستجو…", "Unhide Preview": "پیش‌نمایش را نمایان کن", "Unable to join network": "خطا در ورود به شبکه", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "ممکن است شما این تنظیمات را در کارخواهی به جز رایوت اعمال کرده باشید. شما نمی‌توانید انها را تغییر دهید اما آنها همچنان تاثیر خود را دارند", "Sorry, your browser is not able to run %(brand)s.": "متاسفانه مرورگر شما نمی‌تواند رایوت را اجرا کند.", "Uploaded on %(date)s by %(user)s": "آپلود شده در تاریخ %(date)s توسط %(user)s", "Messages in group chats": "پیام‌های درون چت‌های گروهی", @@ -127,7 +122,6 @@ "Custom Server Options": "تنظیمات سفارشی برای سرور", "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!": "با مرورگر کنونی شما، ظاهر و حس استفاده از برنامه ممکن است کاملا اشتباه باشد و برخی یا همه‌ی ویژگی‌ها ممکن است کار نکنند. می‌توانید به استفاده ادامه دهید اما مسئولیت هر مشکلی که به آن بربخورید بر عهده‌ی خودتان است!", "Checking for an update...": "درحال بررسی به‌روزرسانی‌ها...", - "There are advanced notifications which are not shown here": "آگاه‌سازی‌های پیشرفته‌ای هستند که در اینجا نشان داده نشده‌اند", "This email address is already in use": "این آدرس ایمیل در حال حاضر در حال استفاده است", "This phone number is already in use": "این شماره تلفن در حال استفاده است" } diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 8c0ea16f3b..786cf8c741 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -33,10 +33,8 @@ "Microphone": "Mikrofoni", "Camera": "Kamera", "Advanced": "Edistynyt", - "Algorithm": "Algoritmi", "Always show message timestamps": "Näytä aina viestien aikaleimat", "Authentication": "Autentikointi", - "Alias (optional)": "Alias (valinnainen)", "%(items)s and %(lastItem)s": "%(items)s ja %(lastItem)s", "A new password must be entered.": "Sinun täytyy syöttää uusi salasana.", "%(senderName)s answered the call.": "%(senderName)s vastasi puheluun.", @@ -72,7 +70,6 @@ "Command error": "Komentovirhe", "Commands": "Komennot", "Confirm password": "Varmista salasana", - "Could not connect to the integration server": "Integraatiopalvelimeen yhdistäminen epäonnistui", "Create Room": "Luo huone", "Cryptography": "Salaus", "Current password": "Nykyinen salasana", @@ -81,25 +78,16 @@ "/ddg is not a command": "/ddg ei ole komento", "Deactivate Account": "Deaktivoi tili", "Decline": "Hylkää", - "Decryption error": "Virhe salauksen purkamisessa", "Default": "Oletus", - "Device ID": "Laitetunniste", - "device id: ": "laitetunniste: ", - "Direct chats": "Suorat keskustelut", - "Disable Notifications": "Ota ilmoitukset pois käytöstä", "Disinvite": "Peru kutsu", "Download %(text)s": "Lataa %(text)s", "Drop File Here": "Pudota tiedosto tähän", - "Ed25519 fingerprint": "Ed25519-sormenjälki", "Edit": "Muokkaa", "Email": "Sähköposti", "Email address": "Sähköpostiosoite", "Emoji": "Emoji", - "Enable Notifications": "Ota ilmoitukset käyttöön", - "End-to-end encryption information": "Osapuolten välisen salauksen tiedot", "Enter passphrase": "Syötä salalause", "Error decrypting attachment": "Virhe purettaessa liitteen salausta", - "Event information": "Tapahtumatiedot", "Export": "Vie", "Export E2E room keys": "Tallenna osapuolten välisen salauksen huoneavaimet", "Failed to ban user": "Porttikiellon antaminen epäonnistui", @@ -114,7 +102,6 @@ "Failed to send email": "Sähköpostin lähettäminen epäonnistui", "Failed to send request.": "Pyynnön lähettäminen epäonnistui.", "Failed to set display name": "Näyttönimen asettaminen epäonnistui", - "Failed to toggle moderator status": "Moderaattoriasetuksen muuttaminen epäonnistui", "Failed to unban": "Porttikiellon poistaminen epäonnistui", "Failed to upload profile picture!": "Profiilikuvan lataaminen epäonnistui!", "Failed to verify email address: make sure you clicked the link in the email": "Sähköpostin vahvistus epäonnistui: varmista, että klikkasit sähköpostissa olevaa linkkiä", @@ -140,14 +127,12 @@ "Invites user with given id to current room": "Kutsuu tunnuksen mukaisen käyttäjän huoneeseen", "Sign in with": "Tunnistus", "Join Room": "Liity huoneeseen", - "Joins room with given alias": "Liittyy aliaksen mukaiseen huoneeseen", "Jump to first unread message.": "Hyppää ensimmäiseen lukemattomaan viestiin.", "Kick": "Poista huoneesta", "Kicks user with given id": "Poistaa tunnuksen mukaisen käyttäjän huoneesta", "Labs": "Laboratorio", "Last seen": "Viimeksi nähty", "Leave room": "Poistu huoneesta", - "Local addresses for this room:": "Tämän huoneen paikalliset osoitteet:", "Logout": "Kirjaudu ulos", "Low priority": "Alhainen prioriteetti", "Manage Integrations": "Hallinnoi integraatioita", @@ -160,7 +145,6 @@ "": "", "AM": "ap.", "PM": "ip.", - "NOT verified": "EI varmennettu", "No display name": "Ei näyttönimeä", "No more results": "Ei enempää tuloksia", "No results": "Ei tuloksia", @@ -183,17 +167,14 @@ "Room Colour": "Huoneen väri", "Rooms": "Huoneet", "Save": "Tallenna", - "Scroll to bottom of page": "Vieritä sivun loppuun", "Search failed": "Haku epäonnistui", "Searches DuckDuckGo for results": "Hakee DuckDuckGo:n avulla", - "Send anyway": "Lähetä silti", "Server error": "Palvelinvirhe", "Session ID": "Istuntotunniste", "Sign in": "Kirjaudu sisään", "Sign out": "Kirjaudu ulos", "%(count)s of your messages have not been sent.|other": "Osaa viesteistäsi ei ole lähetetty.", "Someone": "Joku", - "Start a chat": "Aloita keskustelu", "Submit": "Lähetä", "This email address is already in use": "Tämä sähköpostiosoite on jo käytössä", "This email address was not found": "Sähköpostiosoitetta ei löytynyt", @@ -202,16 +183,11 @@ "This room": "Tämä huone", "This room is not accessible by remote Matrix servers": "Tähän huoneeseen ei pääse ulkopuolisilta Matrix-palvelimilta", "Unban": "Poista porttikielto", - "unencrypted": "salaamaton", "unknown caller": "tuntematon soittaja", - "unknown device": "tuntematon laite", - "Unknown room %(roomId)s": "Tuntematon huone %(roomId)s", "Unmute": "Poista mykistys", "Unnamed Room": "Nimeämätön huone", - "Unrecognised room alias:": "Tuntematon huonealias:", "Uploading %(filename)s and %(count)s others|zero": "Ladataan %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Ladataan %(filename)s ja %(count)s muuta", - "Blacklisted": "Estetyt", "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s vaihtoi huoneen nimeksi %(roomName)s.", "Enable automatic language detection for syntax highlighting": "Ota automaattinen kielentunnistus käyttöön syntaksikorostusta varten", "%(senderName)s ended the call.": "%(senderName)s lopetti puhelun.", @@ -221,7 +197,6 @@ "Home": "Etusivu", "Invalid file%(extra)s": "Virheellinen tiedosto%(extra)s", "%(senderName)s invited %(targetName)s.": "%(senderName)s kutsui käyttäjän %(targetName)s.", - "none": "Ei mikään", "No users have specific privileges in this room": "Kellään käyttäjällä ei ole erityisiä oikeuksia", "%(senderName)s requested a VoIP conference.": "%(senderName)s pyysi VoIP-konferenssia.", "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s asetti näyttönimekseen %(displayName)s.", @@ -230,8 +205,6 @@ "This phone number is already in use": "Puhelinnumero on jo käytössä", "Username invalid: %(errMessage)s": "Käyttäjätunnus ei kelpaa: %(errMessage)s", "Users": "Käyttäjät", - "Verification": "Varmennus", - "verified": "varmennettu", "Verified key": "Varmennettu avain", "Video call": "Videopuhelu", "Voice call": "Äänipuhelu", @@ -294,10 +267,8 @@ "Confirm Removal": "Varmista poistaminen", "Unknown error": "Tuntematon virhe", "Incorrect password": "Virheellinen salasana", - "I verify that the keys match": "Varmistin, että avaimet vastaavat toisiaan", "Unable to restore session": "Istunnon palautus epäonnistui", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s poisti huoneen nimen.", - "Curve25519 identity key": "Curve25519 tunnistusavain", "Decrypt %(text)s": "Pura %(text)s", "Displays action": "Näyttää toiminnan", "Error: Problem communicating with the given homeserver.": "Virhe: Ongelma yhteydenpidossa kotipalvelimeen.", @@ -309,10 +280,7 @@ "Publish this room to the public in %(domain)s's room directory?": "Julkaise tämä huone verkkotunnuksen %(domain)s huoneluettelossa?", "Missing room_id in request": "room_id puuttuu kyselystä", "Missing user_id in request": "user_id puuttuu kyselystä", - "New address (e.g. #foo:%(localDomain)s)": "Uusi osoite (esim. #foo:%(localDomain)s)", - "Revoke Moderator": "Poista moderaattorioikeudet", "%(targetName)s rejected the invitation.": "%(targetName)s hylkäsi kutsun.", - "Remote addresses for this room:": "Tämän huoneen etäosoitteet:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s poisti näyttönimensä (%(oldDisplayName)s).", "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)silla ei ole oikeuksia lähettää sinulle ilmoituksia. Ole hyvä ja tarkista selaimen asetukset", "%(brand)s was not given permission to send notifications - please try again": "%(brand)s ei saanut lupaa lähettää ilmoituksia - yritä uudelleen", @@ -339,8 +307,6 @@ "Upload file": "Lataa tiedosto", "Upload new:": "Lataa uusi:", "Usage": "Käyttö", - "Use compact timeline layout": "Käytä tiivistä aikajanaa", - "User ID": "Käyttäjätunnus", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s vaihtoi aiheeksi \"%(topic)s\".", "Define the power level of a user": "Määritä käyttäjän oikeustaso", "Failed to change power level": "Oikeustason muuttaminen epäonnistui", @@ -372,10 +338,7 @@ "Oct": "loka", "Nov": "marras", "Dec": "joulu", - "To continue, please enter your password.": "Ole hyvä ja syötä salasanasi jatkaaksesi.", "Unknown Address": "Tuntematon osoite", - "Unverify": "Kumoa varmennus", - "Verify...": "Varmenna...", "ex. @bob:example.com": "esim. @erkki:esimerkki.com", "Add User": "Lisää käyttäjä", "Please enter the code it contains:": "Ole hyvä ja syötä sen sisältämä koodi:", @@ -384,7 +347,6 @@ "Error decrypting image": "Virhe purettaessa kuvan salausta", "Error decrypting video": "Virhe purettaessa videon salausta", "Add an Integration": "Lisää integraatio", - "Removed or unknown message type": "Poistettu tai tuntematon viestityyppi", "URL Previews": "URL-esikatselut", "Drop file here to upload": "Pudota tiedosto tähän ladataksesi sen palvelimelle", " (unsupported)": " (ei tuettu)", @@ -400,10 +362,6 @@ "Do you want to set an email address?": "Haluatko asettaa sähköpostiosoitteen?", "This will allow you to reset your password and receive notifications.": "Tämä sallii sinun uudelleenalustaa salasanasi ja vastaanottaa ilmoituksia.", "Skip": "Ohita", - "Start verification": "Aloita varmennus", - "Share without verifying": "Jaa ilman varmennusta", - "Ignore request": "Jätä pyyntö huomioimatta", - "Encryption key request": "Salausavainpyyntö", "Example": "Esimerkki", "Create": "Luo", "Failed to upload image": "Kuvan lataaminen epäonnistui", @@ -423,7 +381,6 @@ "Which rooms would you like to add to this community?": "Mitkä huoneet haluaisit lisätä tähän yhteisöön?", "Show these rooms to non-members on the community page and room list?": "Näytetäänkö nämä huoneet ei-jäsenille yhteisön sivulla ja huoneluettelossa?", "Add rooms to the community": "Lisää huoneita tähän yhteisöön", - "Room name or alias": "Huoneen nimi tai alias", "Add to community": "Lisää yhteisöön", "Failed to invite the following users to %(groupId)s:": "Seuraavien käyttäjien kutsuminen ryhmään %(groupId)s epäonnistui:", "Failed to invite users to community": "Käyttäjien kutsuminen yhteisöön epäonnistui", @@ -458,8 +415,6 @@ "Jump to read receipt": "Hyppää lukukuittaukseen", "Mention": "Mainitse", "Invite": "Kutsu", - "User Options": "Käyttäjä-asetukset", - "Make Moderator": "Anna moderaattorioikeudet", "Admin Tools": "Ylläpitotyökalut", "Unpin Message": "Poista viestin kiinnitys", "Jump to message": "Hyppää viestiin", @@ -484,8 +439,6 @@ "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s poisti huoneen kuvan.", "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s vaihtoi huoneen kuvaksi ", "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?": "Sinut ohjataan kolmannen osapuolen sivustolle, jotta voit autentikoida tilisi käyttääksesi palvelua %(integrationsUrl)s. Haluatko jatkaa?", - "Message removed by %(userId)s": "Käyttäjän %(userId)s poistama viesti", - "Message removed": "Viesti poistettu", "An email has been sent to %(emailAddress)s": "Sähköpostia lähetetty osoitteeseen %(emailAddress)s", "Please check your email to continue registration.": "Ole hyvä ja tarkista sähköpostisi jatkaaksesi.", "A text message has been sent to %(msisdn)s": "Tekstiviesti lähetetty numeroon %(msisdn)s", @@ -555,8 +508,6 @@ "You're not currently a member of any communities.": "Et ole minkään yhteisön jäsen tällä hetkellä.", "Error whilst fetching joined communities": "Virhe ladatessa listaa yhteisöistä joihin olet liittynyt", "Create a new community": "Luo uusi yhteisö", - "Light theme": "Vaalea teema", - "Dark theme": "Tumma teema", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Viesti on lähetetty osoitteeseen %(emailAddress)s. Klikkaa alla sen jälkeen kun olet seurannut viestin sisältämää linkkiä.", "Please note you are logging into the %(hs)s server, not matrix.org.": "Huomaa että olet kirjautumassa palvelimelle %(hs)s, etkä palvelimelle matrix.org.", "Upload an avatar:": "Lataa profiilikuva:", @@ -566,11 +517,6 @@ "Notify the whole room": "Ilmoita koko huoneelle", "Room Notification": "Huoneilmoitus", "Call Failed": "Puhelu epäonnistui", - "Review Devices": "Näytä laitteet", - "Call Anyway": "Soita silti", - "Answer Anyway": "Vastaa silti", - "Call": "Soita", - "Answer": "Vastaa", "Call Timeout": "Puhelun aikakatkaisu", "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s", "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s %(day)s. %(monthName)s %(time)s", @@ -604,8 +550,6 @@ "Token incorrect": "Väärä tunniste", "Something went wrong when trying to get your communities.": "Jokin meni pieleen yhteisöjäsi haettaessa.", "Delete Widget": "Poista pienoisohjelma", - "Unblacklist": "Poista estolistalta", - "Blacklist": "Estolista", "%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s liittyivät", "%(oneUser)sjoined %(count)s times|other": "%(oneUser)s liittyi %(count)s kertaa", "%(oneUser)sjoined %(count)s times|one": "%(oneUser)s liittyi", @@ -663,7 +607,6 @@ "Warning": "Varoitus", "Access Token:": "Pääsykoodi:", "Fetching third party location failed": "Kolmannen osapuolen paikan haku epäonnistui", - "A new version of %(brand)s is available.": "Uusi %(brand)s-versio on saatavilla.", "Send Account Data": "Lähetä tilin tiedot", "All notifications are currently disabled for all targets.": "Tällä hetkellä kaikki ilmoitukset on kytketty pois kaikilta kohteilta.", "Uploading report": "Ladataan raporttia", @@ -682,8 +625,6 @@ "Waiting for response from server": "Odotetaan vastausta palvelimelta", "Send Custom Event": "Lähetä mukautettu tapahtuma", "Advanced notification settings": "Lisäasetukset ilmoituksille", - "delete the alias.": "poista alias.", - "To return to your account in future you need to set a password": "Jotta voit jatkossa palata tilillesi, sinun pitää asettaa salasana", "Forget": "Unohda", "You cannot delete this image. (%(code)s)": "Et voi poistaa tätä kuvaa. (%(code)s)", "Cancel Sending": "Peruuta lähetys", @@ -707,7 +648,6 @@ "No update available.": "Ei päivityksiä saatavilla.", "Resend": "Lähetä uudelleen", "Collecting app version information": "Haetaan sovelluksen versiotietoja", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Poista huonealias %(alias)s ja poista %(name)s luettelosta?", "Keywords": "Avainsanat", "Enable notifications for this account": "Ota käyttöön ilmoitukset tälle tilille", "Invite to this community": "Kutsu tähän yhteisöön", @@ -760,7 +700,6 @@ "Show message in desktop notification": "Näytä viestit ilmoituskeskuksessa", "Unhide Preview": "Näytä esikatselu", "Unable to join network": "Verkkoon liittyminen epäonnistui", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Olet saattanut muuttaa niitä muussa asiakasohjelmassa kuin %(brand)sissa. Et voi muuttaa niitä %(brand)sissa mutta ne pätevät silti", "Sorry, your browser is not able to run %(brand)s.": "Valitettavasti %(brand)s ei toimi selaimessasi.", "Uploaded on %(date)s by %(user)s": "Ladattu %(date)s käyttäjän %(user)s toimesta", "Messages in group chats": "Viestit ryhmäkeskusteluissa", @@ -788,22 +727,18 @@ "Thank you!": "Kiitos!", "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!": "Nykyisellä selaimellasi ohjelman ulkonäkö voi olla täysin virheellinen, ja jotkut tai kaikki ominaisuudet eivät vättämättä toimi. Voit jatkaa jos haluat kokeilla, mutta et voi odottaa saavasi apua mahdollisesti ilmeneviin ongelmiin!", "Checking for an update...": "Tarkistetaan päivityksen saatavuutta...", - "There are advanced notifications which are not shown here": "Tässä ei näytetä edistyneitä ilmoituksia", "Your language of choice": "Kielivalintasi", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Yksityisyydensuoja on meille tärkeää, joten emme kerää mitään henkilökohtaista tai yksilöivää tietoa analytiikkaamme varten.", "Send an encrypted reply…": "Lähetä salattu vastaus…", - "Send a reply (unencrypted)…": "Lähetä vastaus (salaamaton)…", "Send an encrypted message…": "Lähetä salattu viesti…", - "Send a message (unencrypted)…": "Lähetä viesti (salaamaton)…", "In reply to ": "Vastauksena käyttäjälle ", "This room is not public. You will not be able to rejoin without an invite.": "Tämä huone ei ole julkinen. Tarvitset kutsun liittyäksesi huoneeseen.", "%(count)s of your messages have not been sent.|one": "Viestiäsi ei lähetetty.", "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s vaihtoi näyttönimekseen %(displayName)s.", "Learn more about how we use analytics.": "Lue lisää analytiikkakäytännöistämme.", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Täällä ei ole muita! Haluaisitko kutsua muita tai poistaa varoituksen tyhjästä huoneesta?", - "The version of %(brand)s": "%(brand)s:n versio", + "The version of %(brand)s": "%(brand)sin versio", "Your homeserver's URL": "Kotipalvelimesi osoite", - "Your identity server's URL": "Identiteettipalvelimesi osoite", "e.g. %(exampleValue)s": "esim. %(exampleValue)s", "Every page you use in the app": "Jokainen sivu, jota käytät sovelluksessa", "e.g. ": "esim. ", @@ -817,10 +752,6 @@ "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s päivitti tämän huoneen.", "%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s salli vieraiden liittyvän huoneeseen.", "%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s on estänyt vieraiden liittymisen huoneeseen.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s lisäsi osoitteet %(addedAddresses)s tähän huoneeseen.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s lisäsi osoitteen %(addedAddresses)s tälle huoneelle.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s poisti osoitteen %(removedAddresses)s tältä huoneelta.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s poisti osoitteet %(removedAddresses)s tältä huoneelta.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s asetti tälle huoneelle pääosoitteen %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s poisti tämän huoneen pääosoitteen.", "Please contact your service administrator to continue using the service.": "Ota yhteyttä palvelun ylläpitäjään jatkaaksesi palvelun käyttöä.", @@ -961,9 +892,6 @@ "Retry": "Yritä uudelleen", "Success!": "Onnistui!", "Starting backup...": "Aloitetaan varmuuskopiointia...", - "Recovery key": "Palautusavain", - "Keep it safe": "Pidä se turvassa", - "Copy to clipboard": "Kopioi leikepöydälle", "Download": "Lataa", "Create account": "Luo tili", "Sign in with single sign-on": "Kirjaudu sisään käyttäen kertakirjautumista", @@ -992,9 +920,7 @@ "Share Message": "Jaa viesti", "Not a valid recovery key": "Ei kelvollinen palautusavain", "This looks like a valid recovery key!": "Tämä vaikuttaa kelvolliselta palautusavaimelta!", - "Enter Recovery Key": "Kirjoita palautusavain", "Next": "Seuraava", - "Backup Restored": "Varmuuskopio palautettu", "No backup found!": "Varmuuskopiota ei löytynyt!", "Unable to restore backup": "Varmuuskopion palauttaminen ei onnistu", "Link to selected message": "Linkitä valittuun viestiin", @@ -1016,8 +942,6 @@ "Invite anyway and never warn me again": "Kutsu silti, äläkä varoita minua enää uudelleen", "That doesn't look like a valid email address": "Tämä ei vaikuta kelvolliselta sähköpostiosoitteelta", "Join": "Liity", - "Yes, I want to help!": "Kyllä, haluan auttaa!", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Auta parantamaan %(brand)s:ää lähettämällä käyttötietoja anonyymisti. Tässä hyödynnetään evästettä.", "Failed to load group members": "Ryhmän jäsenten lataaminen epäonnistui", "Click here to see older messages.": "Napsauta tästä nähdäksesi vanhemmat viestit.", "This room is a continuation of another conversation.": "Tämä huone on jatkumo toisesta keskustelusta.", @@ -1035,7 +959,6 @@ "Email Address": "Sähköpostiosoite", "Yes": "Kyllä", "No": "Ei", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Auta parantamaan %(brand)s:ää lähettämällä käyttötietoja anonyymisti. Tämä vaatii toimiakseen evästeen (lue evästekäytäntö).", "Elephant": "Norsu", "Add an email address to configure email notifications": "Lisää sähköpostiosoite määrittääksesi sähköposti-ilmoitukset", "Chat with %(brand)s Bot": "Keskustele %(brand)s-botin kanssa", @@ -1049,22 +972,18 @@ "The platform you're on": "Alusta, jolla olet", "Whether or not you're logged in (we don't record your username)": "Oletko kirjautunut vai et (emme tallenna käyttäjätunnustasi)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Käytätkö muotoillun tekstin tilaa muotoilueditorissa vai et", - "Your User Agent": "Selaintunnisteesi", - "The information being sent to us to help make %(brand)s better includes:": "Tietoihin, jotka lähetetään %(brand)s:ään palvelun parantamiseksi, sisältyy:", + "The information being sent to us to help make %(brand)s better includes:": "Tietoihin, joita lähetetään %(brand)sin kehittäjille sovelluksen kehittämiseksi sisältyy:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Kohdissa, joissa tämä sivu sisältää yksilöivää tietoa, kuten huoneen, käyttäjän tai ryhmän tunnuksen, kyseinen tieto poistetaan ennen palvelimelle lähettämistä.", "A call is currently being placed!": "Puhelua ollaan aloittamassa!", "A call is already in progress!": "Puhelu on jo meneillään!", "Permission Required": "Lisäoikeuksia tarvitaan", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Tiedoston '%(fileName)s' koko ylittää tämän kotipalvelimen lähetettyjen tiedostojen ylärajan", "Unable to load! Check your network connectivity and try again.": "Lataaminen epäonnistui! Tarkista verkkoyhteytesi ja yritä uudelleen.", - "Registration Required": "Rekisteröityminen vaaditaan", - "You need to register to do this. Would you like to register now?": "Tämä toiminto edellyttää rekisteröitymistä. Haluaisitko rekisteröityä?", "Failed to invite users to the room:": "Käyttäjien kutsuminen huoneeseen epäonnistui:", "%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s teki tästä huoneesta julkisesti luettavan linkin kautta.", "%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s muutti huoneeseen pääsyn vaatimaan kutsun.", "%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s vaihtoi liittymisen ehdoksi säännön %(rule)s", "%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s vaihtoi vieraiden pääsyn tilaan %(rule)s", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s lisäsi osoitteet %(addedAddresses)s ja poisti osoitteet %(removedAddresses)s tältä huoneelta.", "%(displayName)s is typing …": "%(displayName)s kirjoittaa…", "%(names)s and %(count)s others are typing …|other": "%(names)s ja %(count)s muuta kirjoittavat…", "%(names)s and %(count)s others are typing …|one": "%(names)s ja yksi muu kirjoittavat…", @@ -1128,7 +1047,6 @@ "Bug reporting": "Virheiden raportointi", "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.": "Jos olet ilmoittanut virheestä Githubin kautta, debug-lokit voivat auttaa meitä ongelman jäljittämisessä. Debug-lokit sisältävät sovelluksen käyttödataa sisältäen käyttäjätunnuksen, vierailemiesi huoneiden tai ryhmien tunnukset tai aliakset ja muiden käyttäjien käyttäjätunnukset. Debug-lokit eivät sisällä viestejä.", "Autocomplete delay (ms)": "Automaattisen täydennyksen viive (ms)", - "To link to this room, please add an alias.": "Lisää alias linkittääksesi tähän huoneeseen.", "Ignored users": "Hiljennetyt käyttäjät", "Bulk options": "Massatoimintoasetukset", "Key backup": "Avainvarmuuskopio", @@ -1147,7 +1065,6 @@ "Show read receipts sent by other users": "Näytä muiden käyttäjien lukukuittaukset", "Show a reminder to enable Secure Message Recovery in encrypted rooms": "Näytä muistutus suojatun viestien palautuksen käyttöönotosta salatuissa huoneissa", "Show avatars in user and room mentions": "Näytä profiilikuvat käyttäjä- ja huonemaininnoissa", - "Order rooms in the room list by most important first instead of most recent": "Järjestä huonelista tärkein ensin viimeisimmän sijasta", "Got It": "Ymmärretty", "Scissors": "Sakset", "Which officially provided instance you are using, if any": "Mitä virallisesti saatavilla olevaa instanssia käytät, jos mitään", @@ -1175,16 +1092,9 @@ "Add some now": "Lisää muutamia", "Error updating main address": "Pääosoitteen päivityksessä tapahtui virhe", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Huoneen pääosoitteen päivityksessä tapahtui virhe. Se ei välttämättä ole sallittua tällä palvelimella tai kyseessä on väliaikainen virhe.", - "Error creating alias": "Aliaksen luonnissa tapahtui virhe", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Aliaksen luonnissa tapahtui virhe. Se ei välttämättä ole sallittua tällä palvelimella tai kyseessä on väliaikainen virhe.", - "Error removing alias": "Aliaksen poistossa tapahtui virhe", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Aliaksen poistossa tapahtui virhe. Se ei välttämättä ole enää olemassa tai kyseessä on väliaikainen virhe.", "Error updating flair": "Tyylin päivittämisessä tapahtui virhe", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Huoneen tyylin päivittämisessä tapahtui virhe. Palvelin ei välttämättä salli sitä tai kyseessä on tilapäinen virhe.", "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.": "Salatuissa huoneissa, kuten tässä, osoitteiden esikatselut ovat oletuksena pois käytöstä, jotta kotipalvelimesi (missä osoitteiden esikatselut luodaan) ei voi kerätä tietoa siitä, mitä linkkejä näet tässä huoneessa.", - "Please contact your service administrator to get this limit increased.": "Ota yhteyttä ylläpitäjääsi tämän rajan kasvattamiseksi.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Tämä kotipalvelin on saavuttanut kuukausittaisten aktiivisten käyttäjien rajansa, joten osa käyttäjistä ei pysty kirjautumaan sisään.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Tämä kotipalvelin on ylittänyt yhden resurssirajoistaan, joten osa käyttäjistä ei pysty kirjautumaan sisään.", "Failed to remove widget": "Sovelman poisto epäonnistui", "An error ocurred whilst trying to remove the widget from the room": "Sovelman poistossa huoneesta tapahtui virhe", "Minimize apps": "Pienennä sovellukset", @@ -1222,18 +1132,10 @@ "Unable to load commit detail: %(msg)s": "Commitin tietojen hakeminen epäonnistui: %(msg)s", "Community IDs cannot be empty.": "Yhteisön ID:t eivät voi olla tyhjänä.", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Jotta et menetä keskusteluhistoriaasi, sinun täytyy tallentaa huoneen avaimet ennen kuin kirjaudut ulos. Joudut käyttämään uudempaa %(brand)sin versiota tätä varten", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Olet aikaisemmin käyttänyt uudempaa %(brand)sin versiota koneella %(host)s. Jotta voit käyttää tätä versiota osapuolten välisellä salauksella, sinun täytyy kirjautua ulos ja kirjautua takaisin sisään. ", "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.": "Tämä tekee tilistäsi lopullisesti käyttökelvottoman. Et voi kirjautua sisään, eikä kukaan voi rekisteröidä samaa käyttäjätunnusta. Tilisi poistuu kaikista huoneista, joihin se on liittynyt, ja tilisi tiedot poistetaan identiteettipalvelimeltasi. Tämä toimenpidettä ei voi kumota.", "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.": "Tilisi poistaminen käytöstä ei oletuksena saa meitä unohtamaan lähettämiäsi viestejä. Jos haluaisit meidän unohtavan viestisi, rastita alla oleva ruutu.", "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.": "Viestien näkyvyys Matrixissa on samantapainen kuin sähköpostissa. Vaikka se, että unohdamme viestisi, tarkoittaa, ettei viestejäsi jaeta enää uusille tai rekisteröitymättömille käyttäjille, käyttäjät, jotka ovat jo saaneet viestisi pystyvät lukemaan jatkossakin omaa kopiotaan viesteistäsi.", "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)": "Unohda kaikki viestit, jotka olen lähettänyt, kun tilini on poistettu käytöstä (b>Varoitus: tästä seuraa, että tulevat käyttäjät näkevät epätäydellisen version keskusteluista)", - "Use Legacy Verification (for older clients)": "Käytä vanhentunutta varmennustapaa (vanhemmille asiakasohjelmille)", - "Verify by comparing a short text string.": "Varmenna vertaamalla lyhyttä merkkijonoa.", - "Begin Verifying": "Aloita varmentaminen", - "Waiting for partner to accept...": "Odotetaan, että toinen osapuoli hyväksyy...", - "Nothing appearing? Not all clients support interactive verification yet. .": "Näytölle ei ilmesty mitään? Kaikki asiakasohjelmat eivät vielä tue interaktiivista varmentamista. .", - "Waiting for %(userId)s to confirm...": "Odotetaan, että %(userId)s hyväksyy...", - "Use two-way text verification": "Käytä kahdensuuntaista tekstivarmennusta", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Varmenna tämä käyttäjä merkitäksesi hänet luotetuksi. Käyttäjiin luottaminen antaa sinulle ylimääräistä mielenrauhaa käyttäessäsi osapuolten välistä salausta.", "Waiting for partner to confirm...": "Odotetaan, että toinen osapuoli varmistaa...", "Incoming Verification Request": "Saapuva varmennuspyyntö", @@ -1250,13 +1152,7 @@ "A username can only contain lower case letters, numbers and '=_-./'": "Käyttäjätunnus voi sisältää vain pieniä kirjaimia, numeroita ja merkkejä ”=_-./”", "COPY": "Kopioi", "Unable to load backup status": "Varmuuskopioinnin tilan lataaminen epäonnistui", - "Recovery Key Mismatch": "Palautusavaimet eivät täsmää", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Varmuuskopiota ei voitu purkaa tällä avaimella. Tarkastathan, että syötit oikean palautusavaimen.", - "Incorrect Recovery Passphrase": "Väärä palautuksen salalause", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Varmuuskopiota ei voitu purkaa tällä salalauseella. Tarkastathan, että syötit oikean palautuksen salalauseen.", "Failed to decrypt %(failedCount)s sessions!": "%(failedCount)s istunnon purkaminen epäonnistui!", - "Restored %(sessionCount)s session keys": "%(sessionCount)s istunnon avainta palautettu", - "Enter Recovery Passphrase": "Syötä palautuksen salalause", "Warning: you should only set up key backup from a trusted computer.": "Varoitus: sinun pitäisi ottaa avainvarmuuskopio käyttöön vain luotetulla tietokoneella.", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Pääse turvattuun viestihistoriaasi ja ota käyttöön turvallinen viestintä syöttämällä palautuksen salalauseesi.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Jos olet unohtanut palautuksen salalauseesi, voit käyttää palautusavaintasi tai ottaa käyttöön uuden palautustavan", @@ -1309,15 +1205,11 @@ "Registration has been disabled on this homeserver.": "Rekisteröityminen on poistettu käytöstä tällä kotipalvelimella.", "Unable to query for supported registration methods.": "Tuettuja rekisteröitymistapoja ei voitu kysellä.", "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Viety tiedosto suojataan salasanalla. Syötä salasana tähän purkaaksesi tiedoston salauksen.", - "Great! This passphrase looks strong enough.": "Mahtavaa! Salasana näyttää tarpeeksi vahvalta.", "Keep going...": "Jatka...", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Tallennamme salatun kopion avaimistasi palvelimellemme. Suojaa varmuuskopio salasanalla.", "For maximum security, this should be different from your account password.": "Parhaan turvallisuuden takaamiseksi tämän tulisi olla eri kuin tilisi salasana.", - "Enter a passphrase...": "Syötä salasana...", "That matches!": "Täsmää!", "That doesn't match.": "Ei täsmää.", "Go back to set it again.": "Palaa asettamaan se uudelleen.", - "Repeat your passphrase...": "Toista salasana...", "Print it and store it somewhere safe": "Tulosta se ja säilytä sitä turvallisessa paikassa", "Save it on a USB key or backup drive": "Tallenna se muistitikulle tai varmuuskopiolevylle", "Copy it to your personal cloud storage": "Kopioi se henkilökohtaiseen pilvitallennustilaasi", @@ -1354,17 +1246,7 @@ "Invalid identity server discovery response": "Epäkelpo identiteettipalvelimen etsinnän vastaus", "Failed to perform homeserver discovery": "Kotipalvelimen etsinnän suoritus epäonnistui", "This homeserver doesn't offer any login flows which are supported by this client.": "Tämä kotipalvelin ei tarjoa yhtään kirjautumistapaa, jota tämä asiakasohjelma tukisi.", - "Claimed Ed25519 fingerprint key": "Väitetty Ed25519-avaimen sormenjälki", - "Set up with a Recovery Key": "Ota palautusavain käyttöön", - "Please enter your passphrase a second time to confirm.": "Syötä salalauseesi toisen kerran varmistukseksi.", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Voit käyttää sitä turvaverkkona palauttaaksesi salatun keskusteluhistoriasi, mikäli unohdat palautuksen salalauseesi.", - "As a safety net, you can use it to restore your encrypted message history.": "Voit käyttää sitä turvaverkkona palauttaaksesi salatun keskusteluhistoriasi.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Palautusavaimesi on turvaverkko – voit käyttää sitä palauttaaksesi pääsyn salattuihin viesteihisi, mikäli unohdat salalauseesi.", - "Your Recovery Key": "Palautusavaimesi", "Set up Secure Message Recovery": "Ota käyttöön salattujen viestien palautus", - "Secure your backup with a passphrase": "Turvaa varmuuskopiosi salalauseella", - "Confirm your passphrase": "Varmista salalauseesi", - "Create Key Backup": "Luo avainvarmuuskopio", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Mikäli et ota käyttöön salattujen viestien palautusta, menetät salatun viestihistoriasi, kun kirjaudut ulos.", "If you don't want to set this up now, you can later in Settings.": "Jos et halua ottaa tätä käyttöön nyt, voit tehdä sen myöhemmin asetuksissa.", "Set up": "Ota käyttöön", @@ -1437,7 +1319,6 @@ "Some characters not allowed": "Osaa merkeistä ei sallita", "Homeserver URL does not appear to be a valid Matrix homeserver": "Kotipalvelimen osoite ei näytä olevan kelvollinen Matrix-kotipalvelin", "Identity server URL does not appear to be a valid identity server": "Identiteettipalvelimen osoite ei näytä olevan kelvollinen identiteettipalvelin", - "A conference call could not be started because the integrations server is not available": "Konferenssipuhelua ei voitu aloittaa, koska integraatiopalvelin ei ole käytettävissä", "When rooms are upgraded": "Kun huoneet päivitetään", "Rejecting invite …": "Hylätään kutsua …", "You were kicked from %(roomName)s by %(memberName)s": "%(memberName)s poisti sinut huoneesta %(roomName)s", @@ -1468,7 +1349,6 @@ "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.": "Voit palauttaa salasanasi, mutta osa toiminnoista on pois käytöstä kunnes identiteettipalvelin on jälleen toiminnassa. Jos tämä varoitus toistuu, tarkista asetuksesi tai ota yhteyttä palvelimen ylläpitäjään.", "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.": "Voit kirjautua, mutta osa toiminnoista on pois käytöstä kunnes identiteettipalvelin on jälleen toiminnassa. Jos tämä varoitus toistuu, tarkista asetuksesi tai ota yhteyttä palvelimen ylläpitäjään.", "Unexpected error resolving identity server configuration": "Odottamaton virhe selvitettäessä identiteettipalvelimen asetuksia", - "Show recently visited rooms above the room list": "Näytä hiljattain vieraillut huoneet huonelistan yläpuolella", "Low bandwidth mode": "Matalan kaistanleveyden tila", "Uploaded sound": "Ladattu ääni", "Sounds": "Äänet", @@ -1617,13 +1497,8 @@ "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?": "Käyttäjän deaktivoiminen kirjaa hänet ulos ja estää häntä kirjautumasta takaisin sisään. Lisäksi hän poistuu kaikista huoneista, joissa hän on. Tätä toimintoa ei voi kumota. Oletko varma, että haluat deaktivoida tämän käyttäjän?", "Deactivate user": "Deaktivoi käyttäjä", "Link this email with your account in Settings to receive invites directly in %(brand)s.": "Linkitä tämä sähköposti tilisi kanssa asetuksissa, jotta voit saada kutsuja suoraan %(brand)sissa.", - "Room alias": "Huoneen alias", "e.g. my-room": "esim. oma-huone", - "Please provide a room alias": "Anna huoneen alias", - "This alias is available to use": "Alias on käytettävissä", - "This alias is already in use": "Alias on jo käytössä", "Please enter a name for the room": "Syötä huoneelle nimi", - "Set a room alias to easily share your room with other people.": "Aseta huoneelle alias, jotta voit helposti jakaa huoneesi muiden kanssa.", "This room is private, and can only be joined by invitation.": "Tämä huone on yksityinen ja siihen voi liittyä vain kutsulla.", "Create a public room": "Luo julkinen huone", "Create a private room": "Luo yksityinen huone", @@ -1684,7 +1559,6 @@ "My Ban List": "Tekemäni estot", "This is your list of users/servers you have blocked - don't leave the room!": "Tämä on luettelo käyttäjistä ja palvelimista, jotka olet estänyt - älä poistu huoneesta!", "Something went wrong. Please try again or view your console for hints.": "Jotain meni vikaan. Yritä uudelleen tai katso vihjeitä konsolista.", - "Please verify the room ID or alias and try again.": "Varmista huoneen tunnus tai alias ja yritä uudelleen.", "Please try again or view your console for hints.": "Yritä uudelleen tai katso vihjeitä konsolista.", "⚠ These settings are meant for advanced users.": "⚠ Nämä asetukset on tarkoitettu edistyneille käyttäjille.", "eg: @bot:* or example.org": "esim. @bot:* tai esimerkki.org", @@ -1719,7 +1593,6 @@ "Use an identity server to invite by email. Manage in Settings.": "Voit käyttää identiteettipalvelinta sähköpostikutsujen lähettämiseen.", "Multiple integration managers": "Useita integraatiolähteitä", "Try out new ways to ignore people (experimental)": "Kokeile uusia tapoja käyttäjien huomiotta jättämiseen (kokeellinen)", - "Enable local event indexing and E2EE search (requires restart)": "Ota käyttöön paikallinen tapahtumaindeksointi ja paikallinen haku salatuista viesteistä (vaatii uudelleenlatauksen)", "Match system theme": "Käytä järjestelmän teemaa", "Decline (%(counter)s)": "Hylkää (%(counter)s)", "Connecting to integration manager...": "Yhdistetään integraatioiden lähteeseen...", @@ -1750,7 +1623,6 @@ "Subscribed lists": "Tilatut listat", "Subscribing to a ban list will cause you to join it!": "Estolistan käyttäminen saa sinut liittymään listalle!", "If this isn't what you want, please use a different tool to ignore users.": "Jos tämä ei ole mitä haluat, käytä eri työkalua käyttäjien huomiotta jättämiseen.", - "Room ID or alias of ban list": "Huoneen tunnus tai estolistan alias", "Integration Manager": "Integraatioiden lähde", "Read Marker lifetime (ms)": "Viestin luetuksi merkkaamisen kesto (ms)", "Read Marker off-screen lifetime (ms)": "Viestin luetuksi merkkaamisen kesto, kun %(brand)s ei ole näkyvissä (ms)", @@ -1791,7 +1663,6 @@ "Remove for everyone": "Poista kaikilta", "Remove for me": "Poista minulta", "Verification Request": "Varmennuspyyntö", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Failed to get autodiscovery configuration from server": "Automaattisen etsinnän asetusten hakeminen palvelimelta epäonnistui", "Invalid base_url for m.homeserver": "Epäkelpo base_url palvelimelle m.homeserver", "Invalid base_url for m.identity_server": "Epäkelpo base_url palvelimelle m.identity_server", @@ -1803,7 +1674,6 @@ "Customise your experience with experimental labs features. Learn more.": "Muokkaa kokemustasi kokeellisilla laboratio-ominaisuuksia. Tutki vaihtoehtoja.", "Error upgrading room": "Virhe päivitettäessä huonetta", "Double check that your server supports the room version chosen and try again.": "Tarkista, että palvelimesi tukee valittua huoneversiota ja yritä uudelleen.", - "Send cross-signing keys to homeserver": "Lähetä ristivarmennuksen tarvitsemat avaimet kotipalvelimelle", "%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s poisti porttikiellon käyttäjiltä, jotka täsmäsivät sääntöön %(glob)s", "%(senderName)s removed the rule banning rooms matching %(glob)s": "%(senderName)s poisti huoneita estävän säännön %(glob)s", "%(senderName)s removed the rule banning servers matching %(glob)s": "%(senderName)s poisti palvelimia estävän säännön %(glob)s", @@ -1855,13 +1725,6 @@ "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Tämä yleensä vaikuttaa siihen, miten huonetta käsitellään palvelimella. Jos sinulla on ongelmia %(brand)stisi kanssa, ilmoita virheestä.", "You'll upgrade this room from to .": "Olat päivittämässä tätä huonetta versiosta versioon .", "Upgrade": "Päivitä", - "Enter secret storage passphrase": "Syötä salavaraston salalause", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Salavavaraston avaaminen epäonnistui. Varmista, että syötit oikean salalauseen.", - "Warning: You should only access secret storage from a trusted computer.": "Varoitus: sinun pitäisi käyttää salavarastoa vain luotetulta tietokoneelta.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Jos olet unohtanut salalauseesi, voit käyttää palautusavaintasi tai asettaa uusia palautusvaihtoehtoja.", - "Enter secret storage recovery key": "Syötä salavaraston palautusavain", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Salavaraston käyttö epäonnistui. Varmista, että syötit oikean palautusavaimen.", - "If you've forgotten your recovery key you can .": "Jos olet unohtanut palautusavaimesi, voit .", "Warning: You should only set up key backup from a trusted computer.": "Varoitus: sinun pitäisi ottaa avainten varmuuskopiointi käyttöön vain luotetulla tietokoneella.", "If you've forgotten your recovery key you can ": "Jos olet unohtanut palautusavaimesi, voit ", "Notification settings": "Ilmoitusasetukset", @@ -1869,27 +1732,18 @@ "User Status": "Käyttäjän tila", "Country Dropdown": "Maapudotusvalikko", "Set up with a recovery key": "Ota käyttöön palautusavaimella", - "As a safety net, you can use it to restore your access to encrypted messages if you forget your passphrase.": "Turvaverkkona, voit käyttää sitä palauttamaan pääsysi salattuihin viesteihin, jos unohdat salalauseesi.", - "As a safety net, you can use it to restore your access to encrypted messages.": "Turvaverkkona, voit käyttää sitä palauttamaan pääsysi salattuihin viesteihisi.", - "Keep your recovery key somewhere very secure, like a password manager (or a safe).": "Pidä palautusavaimesi jossain hyvin turvallisessa paikassa, kuten salasananhallintasovelluksessa (tai kassakaapissa).", "Your recovery key has been copied to your clipboard, paste it to:": "Palautusavaimesi on kopioitu leikepöydällesi. Liitä se:", "Your recovery key is in your Downloads folder.": "Palautusavaimesi on Lataukset-kansiossasi.", - "Storing secrets...": "Tallennetaan salaisuuksia...", "Unable to set up secret storage": "Salavaraston käyttöönotto epäonnistui", "Show more": "Näytä lisää", "Recent Conversations": "Viimeaikaiset keskustelut", "Direct Messages": "Yksityisviestit", "Go": "Mene", "Lock": "Lukko", - "The version of %(brand)s": "%(brand)sin versio", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Käytätkö %(brand)sia laitteella, jossa kosketus on ensisijainen syöttömekanismi", "Whether you're using %(brand)s as an installed Progressive Web App": "Käytätkö %(brand)sia asennettuna PWA:na (Progressive Web App)", - "The information being sent to us to help make %(brand)s better includes:": "Tietoihin, joita lähetetään %(brand)sin kehittäjille sovelluksen kehittämiseksi sisältyy:", "Cancel entering passphrase?": "Peruuta salalauseen syöttäminen?", "Encryption upgrade available": "Salauksen päivitys saatavilla", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s lisäsi osoitteet %(addedAddresses)s ja %(count)s muuta osoitetta tähän huoneeseen", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s poisti osoitteet %(removedAddresses)s ja %(count)s muuta osoitetta tästä huoneesta", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s poisti %(countRemoved)s ja lisäsi %(countAdded)s osoitetta tähän huoneeseen", "a few seconds ago": "muutama sekunti sitten", "about a minute ago": "noin minuutti sitten", "%(num)s minutes ago": "%(num)s minuuttia sitten", @@ -1901,7 +1755,6 @@ "Show typing notifications": "Näytä kirjoitusilmoitukset", "or": "tai", "Start": "Aloita", - "Confirm the emoji below are displayed on both devices, in the same order:": "Varmista, että alla olevat emojit näkyvät molemmilla laitteilla, samassa järjestyksessä:", "To be secure, do this in person or use a trusted way to communicate.": "Turvallisuuden varmistamiseksi tee tämä kasvokkain tai käytä luotettua viestintätapaa.", "Later": "Myöhemmin", "Show less": "Näytä vähemmän", @@ -1917,7 +1770,6 @@ "Done": "Valmis", "Got it": "Asia selvä", "Failed to find the following users": "Seuraavia käyttäjiä ei löytynyt", - "Backup restored": "Varmuuskopio palautettu", "Go Back": "Takaisin", "Copy": "Kopioi", "Upgrade your encryption": "Päivitä salauksesi", @@ -1937,17 +1789,12 @@ "Clear all data in this session?": "Poista kaikki tämän istunnon tiedot?", "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Kaikkien tämän istunnon tietojen poistaminen on pysyvää. Salatut viestit menetetään, ellei niiden avaimia ole varmuuskopioitu.", "Session name": "Istunnon nimi", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "Lisäsit uuden istunnon '%(displayName)s', joka pyytää salausavaimia.", - "Loading session info...": "Ladataan istunnon tietoja...", "New session": "Uusi istunto", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Raportoidaksesi Matrixiin liittyvän tietoturvaongelman, lue Matrix.orgin tietoturvaongelmien julkaisukäytäntö.", "Message search": "Viestihaku", - "Sessions": "Istunnot", "This room is bridging messages to the following platforms. Learn more.": "Tämä huone siltaa viestejä seuraaville alustoille. Lue lisää.", "Re-request encryption keys from your other sessions.": "Pyydä uudelleen salausavaimia muista istunnoistasi.", "Mark all as read": "Merkitse kaikki luetuiksi", - "Alternative addresses for this room:": "Tämän huoneen vaihtoehtoiset osoitteet:", - "This room has no alternative addresses": "Tällä huoneella ei ole vaihtoehtoisia osoitteita", "Accepting…": "Hyväksytään…", "One of the following may be compromised:": "Jokin seuraavista saattaa olla vaarantunut:", "Your homeserver": "Kotipalvelimesi", @@ -1964,24 +1811,15 @@ "Suggestions": "Ehdotukset", "Your account is not secure": "Tilisi ei ole turvallinen", "Your password": "Salasanasi", - "Room contains unknown sessions": "Huoneessa on tuntemattomia istuntoja", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "\"%(RoomName)s\" sisältää istuntoja, joita et ole nähnyt aiemmin.", "Incorrect recovery passphrase": "Virheellinen palautuksen salalause", "Enter recovery passphrase": "Syötä palautuksen salalause", "Enter recovery key": "Syötä palautusavain", "Confirm your identity by entering your account password below.": "Vahvista henkilöllisyytesi syöttämällä tilisi salasana alle.", - "Message not sent due to unknown sessions being present": "Viestiä ei lähetetty, koska läsnä on tuntemattomia istuntoja", - "Show sessions, send anyway or cancel.": "Näytä istunnot, lähetä silti tai peruuta.", - "Sender session information": "Tietoa lähettäjän istunnosta", "Enter your account password to confirm the upgrade:": "Syötä tilisi salasana vahvistaaksesi päivityksen:", "Restore": "Palauta", - "Enter a passphrase": "Syötä salalause", - "Back up my encryption keys, securing them with the same passphrase": "Varmuuskopioi salausavaimeni, suojaten ne samalla salalauseella", - "Enter your passphrase a second time to confirm it.": "Syötä salalauseesi uudestaan vahvistaaksesi sen.", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Säilytä sitä turvallisessa paikassa, kuten salasanojen hallintaohjelmassa tai jopa kassakaapissa.", "Your recovery key": "Palautusavaimesi", "Make a copy of your recovery key": "Tee kopio palautusavaimestasi", - "You're done!": "Valmis!", "Not currently indexing messages for any room.": "Minkään huoneen viestejä ei tällä hetkellä indeksoida.", "Space used:": "Käytetty tila:", "Indexed messages:": "Indeksoidut viestit:", @@ -1990,7 +1828,6 @@ "Your user agent": "Käyttäjäagenttisi", "Verify this session": "Vahvista tämä istunto", "Set up encryption": "Ota salaus käyttöön", - "Unverified session": "Vahvistamaton istunto", "Sign In or Create Account": "Kirjaudu sisään tai luo tili", "Use your account or create a new one to continue.": "Käytä tiliäsi tai luo uusi jatkaaksesi.", "Create Account": "Luo tili", @@ -1998,7 +1835,6 @@ "WARNING: Session already verified, but keys do NOT MATCH!": "VAROITUS: Istunto on jo vahvistettu, mutta avaimet EIVÄT VASTAA!", "Not Trusted": "Ei luotettu", "Ask this user to verify their session, or manually verify it below.": "Pyydä tätä käyttäjää vahvistamaan istuntonsa, tai vahvista se manuaalisesti alla.", - "Manually Verify": "Manuaalisesti vahvista", "a few seconds from now": "muutama sekunti sitten", "about a minute from now": "noin minuutti sitten", "%(num)s minutes from now": "%(num)s minuuttia sitten", @@ -2006,15 +1842,11 @@ "%(num)s hours from now": "%(num)s tuntia sitten", "about a day from now": "noin päivä sitten", "%(num)s days from now": "%(num)s päivää sitten", - "Show padlocks on invite only rooms": "Näytä lukko vain-kutsu huoneissa", "Never send encrypted messages to unverified sessions from this session": "Älä koskaan lähetä salattuja viestejä vahvistamattomiin istuntoihin tästä istunnosta", "Never send encrypted messages to unverified sessions in this room from this session": "Älä lähetä salattuja viestejä vahvistamattomiin istuntoihin tässä huoneessa tässä istunnossa", "Order rooms by name": "Suodata huoneet nimellä", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Tässä huoneessa on tuntemattomia istuntoja: jos jatkat varmentamatta niitä, saattaa olla, että joku kuuntelee puheluasi.", - "Review Sessions": "Tarkasta istunnot", "If you cancel now, you won't complete verifying the other user.": "Jo peruutat nyt, toista käyttäjää ei varmenneta.", "If you cancel now, you won't complete verifying your other session.": "Jos peruutat nyt, toista istuntoasi ei varmenneta.", - "If you cancel now, you won't complete your secret storage operation.": "Jos peruutat nyt, salavarasto-toimintoa ei suoriteta.", "Setting up keys": "Otetaan avaimet käyttöön", "Verifies a user, session, and pubkey tuple": "Varmentaa käyttäjän, istunnon ja julkiset avaimet", "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!": "VAROITUS: AVAIMEN VARMENTAMINEN EPÄONNISTUI! Käyttäjän %(userId)s ja laitteen %(deviceId)s istunnon allekirjoitusavain on ”%(fprint)s”, mikä ei täsmää annettuun avaimeen ”%(fingerprint)s”. Tämä voi tarkoittaa, että yhteyksiänne peukaloidaan!", @@ -2029,19 +1861,15 @@ "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s muutti tämän huoneen pää- sekä vaihtoehtoisia osoitteita.", "%(senderName)s changed the addresses for this room.": "%(senderName)s muutti tämän huoneen osoitteita.", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) kirjautui uudella istunnolla varmentamatta sitä:", - "Show a presence dot next to DMs in the room list": "Näytä huonelistassa piste läsnäolon merkiksi yksityisviestien vieressä", "Support adding custom themes": "Tue mukaututettujen teemojen lisäämistä", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Ota ristivarmennus käyttöön varmentaaksesi käyttäjät istuntojen sijaan (kehitysversio)", "Show rooms with unread notifications first": "Näytä ensin huoneet, joissa on lukemattomia viestejä", "Show shortcuts to recently viewed rooms above the room list": "Näytä oikotiet viimeiseksi katsottuihin huoneisiin huoneluettelon yläpuolella", "Enable message search in encrypted rooms": "Ota viestihaku salausta käyttävissä huoneissa käyttöön", - "Keep secret storage passphrase in memory for this session": "Pidä salavaraston salalause muistissa tämän istunnon ajan", "How fast should messages be downloaded.": "Kuinka nopeasti viestit pitäisi ladata.", "Verify this session by completing one of the following:": "Varmenna tämä istunto tekemällä yhden seuraavista:", "Scan this unique code": "Skannaa tämä uniikki koodi", "Compare unique emoji": "Vertaa uniikkia emojia", "Compare a unique set of emoji if you don't have a camera on either device": "Vertaa kokoelmaa uniikkeja emojeja, jos kummassakaan laitteessa ei ole kameraa", - "Verify this device by confirming the following number appears on its screen.": "Varmenna tämä laite varmistamalla, että seuraava numero ilmestyy sen näytölle.", "Waiting for %(displayName)s to verify…": "Odotetaan käyttäjän %(displayName)s varmennusta…", "Cancelling…": "Peruutetaan…", "They match": "Ne täsmäävät", @@ -2053,8 +1881,6 @@ "This bridge is managed by .": "Tätä siltaa hallinnoi käyttäjä .", "Workspace: %(networkName)s": "Työtila: %(networkName)s", "Channel: %(channelName)s": "Kanava: %(channelName)s", - "outdated": "vanhentunut", - "up to date": "ajan tasalla", "Delete %(count)s sessions|other": "Poista %(count)s istuntoa", "Enable": "Ota käyttöön", "Backup is not signed by any of your sessions": "Mikään istuntosi ei ole allekirjoittanut varmuuskopiota", @@ -2062,7 +1888,6 @@ "Add theme": "Lisää teema", "Scroll to most recent messages": "Vieritä tuoreimpiin viesteihin", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Huoneen vaihtoehtoisten osoitteiden päivittämisessä tapahtui virhe. Palvelin ei ehkä salli sitä tai kyseessä oli tilapäinen virhe.", - "You don't have permission to delete the alias.": "Sinulla ei ole lupaa poistaa aliasta.", "Local address": "Paikallinen osoite", "Local Addresses": "Paikalliset osoitteet", "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Aseta osoitteita tälle huoneelle, jotta käyttäjät löytävät tämän huoneen kotipalvelimeltasi (%(localDomain)s)", @@ -2082,8 +1907,6 @@ "Add a new server...": "Lisää uusi palvelin...", "If you didn’t sign in to this session, your account may be compromised.": "Jos et kirjautunut tähän istuntoon, käyttäjätilisi saattaa olla vaarantunut.", "This wasn't me": "Tämä en ollut minä", - "Unknown sessions": "Tuntemattomat istunnot", - "Waiting…": "Odotetaan…", "Disable": "Poista käytöstä", "Calls": "Puhelut", "Room List": "Huoneluettelo", @@ -2137,7 +1960,6 @@ "Send a Direct Message": "Lähetä yksityisviesti", "Explore Public Rooms": "Selaa julkisia huoneita", "Create a Group Chat": "Luo ryhmäkeskustelu", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Suojaa salausavaimesi salalauseella. Parhaan turvallisuuden takaamiseksi sen tulisi olla eri kuin käyttäjätilisi salasana:", "Super": "Super", "Cancel replying to a message": "Peruuta viestiin vastaaminen", "Jump to room search": "Siirry huonehakuun", @@ -2153,11 +1975,9 @@ "Submit logs": "Lähetä lokit", "Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Muistutus: Selaintasi ei tueta, joten voit kohdata yllätyksiä.", "There was a problem communicating with the server. Please try again.": "Palvelinyhteydessä oli ongelma. Yritä uudelleen.", - "Warning: You should only do this on a trusted computer.": "Varoitus: Tee tämä ainoastaan luotetulla tietokoneella.", "Syncing...": "Synkronoidaan...", "Signing In...": "Kirjaudutaan sisään...", "If you've joined lots of rooms, this might take a while": "Jos olet liittynyt moniin huoneisiin, tässä voi kestää hetken", - "Use your other device to continue…": "Jatka toisella laitteellasi…", "Click the button below to confirm adding this email address.": "Klikkaa alapuolella olevaa painiketta lisätäksesi tämän sähköpostiosoitteen.", "Click the button below to confirm adding this phone number.": "Klikkaa alapuolella olevaa painiketta lisätäksesi tämän puhelinnumeron.", "If you cancel now, you won't complete your operation.": "Jos peruutat, toimintoa ei suoriteta loppuun.", @@ -2194,9 +2014,6 @@ "Sends a message to the given user": "Lähettää viestin annetulle käyttäjälle", "Manually Verify by Text": "Varmenna käsin tekstillä", "Interactively verify by Emoji": "Varmenna interaktiivisesti emojilla", - "Use IRC layout": "Käytä IRC-asettelua", - "Enable cross-signing to verify per-user instead of per-session": "Ota ristivarmennus käyttöön varmentaaksesi käyttäjät istuntojen sijaan", - "Keep recovery passphrase in memory for this session": "Pidä palautuksen salalause muistissa tämän istunnon ajan", "Manually verify all remote sessions": "Varmenna kaikki etäistunnot käsin", "IRC display name width": "IRC-näyttönimen leveys", "Verify this session by confirming the following number appears on its screen.": "Varmenna tämä istunto varmistamalla, että seuraava numero ilmestyy sen näytölle.", @@ -2211,7 +2028,6 @@ "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Varmenna jokainen käyttäjän istunto erikseen, äläkä luota ristivarmennettuihin laitteisiin.", "Securely cache encrypted messages locally for them to appear in search results.": "Pidä salatut viestit turvallisessa välimuistissa, jotta ne näkyvät hakutuloksissa.", "%(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)sissa ei ole joitain komponentteja, joita tarvitaan viestien turvalliseen välimuistitallennukseen. Jos haluat kokeilla tätä ominaisuutta, käännä mukautettu %(brand)s Desktop, jossa on mukana hakukomponentit.", - "%(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 ei voi tallentaa viestejä turvalliseen välimuistiin pyöriessään selaimessa. Käytä Electron-pohjaista %(brand)s Desktop-sovellusta nähdäksesi salatut viestit hakutuloksissa.", "This session is backing up your keys. ": "Tämä istunto varmuuskopioi avaimesi. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Tämä istunto ei varmuuskopioi avaimiasi, mutta sillä on olemassaoleva varmuuskopio, jonka voit palauttaa ja lisätä jatkaaksesi.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Yhdistä tämä istunto avainten varmuuskopiointiin ennen uloskirjautumista, jotta et menetä avaimia, jotka ovat vain tässä istunnossa.", @@ -2221,7 +2037,6 @@ "Backup has an invalid signature from verified session ": "Varmuuskopiossa on epäkelpo allekirjoitus varmennetusta istunnosta ", "Backup has an invalid signature from unverified session ": "Varmuuskopiossa on epäkelpo allekirjoitus varmentamattomasta istunnosta ", "This backup is trusted because it has been restored on this session": "Tähän varmuuskopioon luotetaan, koska se on palautettu tässä istunnossa", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Vara-avain on salavarastossa, mutta salavarasto ei ole käytössä tässä istunnossa. Ota ristivarmennus käyttöön Laboratoriosta muokkaaksesi avainten varmuuskopioinnin tilaa.", "Your keys are not being backed up from this session.": "Avaimiasi ei varmuuskopioida tästä istunnosta.", "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Salasanasi on onnistuneesti vaihdettu. Et saa ilmoituksia muilla laitteillasi ennen kuin kirjaudut niillä takaisin sisään", "Invalid theme schema.": "Epäkelpo teeman skeema.", @@ -2236,16 +2051,11 @@ "You have verified this user. This user has verified all of their sessions.": "Olet varmentanut tämän käyttäjän. Tämä käyttäjä on varmentanut kaikki istuntonsa.", "This room is end-to-end encrypted": "Tämä huone käyttää osapuolten välistä salausta", "Everyone in this room is verified": "Kaikki tämän huoneen käyttäjät on varmennettu", - "Some sessions for this user are not trusted": "Osaan tämän käyttäjän istunnoista ei luoteta", - "All sessions for this user are trusted": "Kaikkiin tämän käyttäjän istunnoista luotetaan", - "Some sessions in this encrypted room are not trusted": "Osaan tämän salausta käyttävän huoneen istunnoista ei luoteta", - "All sessions in this encrypted room are trusted": "Kaikkiin tämän salausta käyttävän huoneen istuntoihin luotetaan", "Your key share request has been sent - please check your other sessions for key share requests.": "Avainten jakopyyntösi on lähetetty. Tarkista muut istuntosi avainten jakopyyntöjen varalta.", "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.": "Avainten jakopyynnöt lähetetään muille istunnoillesi automaattisesti. Jos hylkäsit tai jätit huomiotta avainten jakopyynnön toisessa istunnossasi, klikkaa tästä pyytääksesi avaimia uudelleen.", "If your other sessions do not have the key for this message you will not be able to decrypt them.": "Jos muissa laitteissasi ei ole avainta tämän viestin purkamiseen, niillä istunnoilla ei voi lukea tätä viestiä.", "Encrypted by an unverified session": "Salattu varmentamattoman istunnon toimesta", "Encrypted by a deleted session": "Salattu poistetun istunnon toimesta", - "No sessions with registered encryption keys": "Yhdelläkään istunnolla ei ole rekisteröityjä salausavaimia", "Create room": "Luo huone", "Reject & Ignore user": "Hylkää ja jätä käyttäjä huomiotta", "Start Verification": "Aloita varmennus", @@ -2266,7 +2076,6 @@ "You've successfully verified %(displayName)s!": "Olet varmentanut käyttäjän %(displayName)s!", "Verified": "Varmennettu", "Font size": "Fonttikoko", - "Custom font size": "Mukautettu fonttikoko", "Size must be a number": "Koon täytyy olla luku", "Custom font size can only be between %(min)s pt and %(max)s pt": "Mukautetun fonttikoon täytyy olla vähintään %(min)s pt ja enintään %(max)s pt", "Use between %(min)s pt and %(max)s pt": "Käytä kokoa väliltä %(min)s pt ja %(max)s pt", @@ -2277,7 +2086,6 @@ "Previous/next unread room or DM": "Edellinen/seuraava lukematon huone tai yksityisviesti", "Previous/next room or DM": "Edellinen/seuraava huone tai yksityisviesti", "Toggle this dialog": "Tämä valintaikkuna päälle/pois", - "Use the improved room list (in development - refresh to apply changes)": "Käytä parannettua huoneluetteloa (kehitysversio — päivitä sivu ottaaksesi muutokset käyttöön)", "Start verification again from the notification.": "Aloita varmennus uudelleen ilmoituksesta.", "Start verification again from their profile.": "Aloita varmennus uudelleen hänen profiilista.", "Verification timed out.": "Varmennuksessa kesti liikaa.", @@ -2292,10 +2100,7 @@ "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Ristivarmennuksen avainten tuhoamista ei voi kumota. Jokainen, jonka olet varmentanut, tulee näkemään turvallisuushälytyksiä. Et todennäköisesti halua tehdä tätä, ellet ole hukannut kaikkia laitteitasi, joista pystyt ristivarmentamaan.", "Clear cross-signing keys": "Tyhjennä ristivarmennuksen avaimet", "Enable end-to-end encryption": "Ota osapuolten välinen salaus käyttöön", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Jotta tähän istuntoon voitaisiin luottaa, tarkista, että käyttäjän asetuksissa näkyvä avain täsmää alapuolella olevaan avaimeen:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Jotta tähän istuntoon voitaisiin luottaa, ota yhteyttä sen omistajaan jotain muuta kautta (esim. kasvotusten tai puhelimitse) ja kysy, että täsmääkö hänen käyttäjäasetuksissa näkemänsä istunnon avain alla olevaan:", "Session key": "Istunnon tunnus", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Jos se täsmää, paina varmennuspainiketta alapuolella. Jos se ei täsmää, joku häiritsee tätä istuntoa ja haluat luultavasti painaa estä -painiketta sen sijaan.", "Verification Requests": "Varmennuspyynnöt", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Tämän käyttäjän varmentaminen merkitsee hänen istuntonsa luotetuksi, ja myös merkkaa sinun istuntosi luotetuksi hänen laitteissaan.", "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.": "Varmenna tämä laite merkataksesi se luotetuksi. Tähän laitteeseen luottaminen antaa sinulle ja muille käyttäjille ylimääräistä mielenrauhaa, kun käytätte osapuolten välistä salausta.", @@ -2307,7 +2112,6 @@ "Recently Direct Messaged": "Viimeaikaiset yksityisviestit", "Start a conversation with someone using their name, username (like ) or email address.": "Aloita keskustelu jonkun kanssa käyttäen hänen nimeä, käyttäjätunnus (kuten ) tai sähköpostiosoitetta.", "Invite someone using their name, username (like ), email address or share this room.": "Kutsu tähän huoneeseen käyttäen nimeä, käyttäjätunnusta (kuten ), sähköpostiosoitetta tai jaa tämä huone.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Varmentamaton istuntosi '%(displayName)s' pyytää salausavaimia.", "%(brand)s encountered an error during upload of:": "%(brand)s kohtasi virheen lähettäessään:", "Upload completed": "Lähetys valmis", "Cancelled signature upload": "Allekirjoituksen lähetys peruutettu", @@ -2341,10 +2145,8 @@ "This address is already in use": "Tämä osoite on jo käytössä", "Set a room address to easily share your room with other people.": "Aseta huoneelle osoite, jotta voit jakaa huoneen helposti muille.", "Address (optional)": "Osoite (valinnainen)", - "sent an image.": "lähetti kuvan.", "Light": "Vaalea", "Dark": "Tumma", - "You: %(message)s": "Sinä: %(message)s", "Emoji picker": "Emojivalitsin", "No recently visited rooms": "Ei hiljattain vierailtuja huoneita", "People": "Ihmiset", @@ -2357,17 +2159,10 @@ "Switch to dark mode": "Vaihda tummaan teemaan", "Switch theme": "Vaihda teemaa", "All settings": "Kaikki asetukset", - "Archived rooms": "Arkistoidut huoneet", "Feedback": "Palaute", - "Account settings": "Tilin asetukset", - "Recovery Key": "Palautusavain", - "This isn't the recovery key for your account": "Tämä ei ole tilisi palautusavain", - "This isn't a valid recovery key": "Tämä ei ole kelvollinen palautusavain", "Looks good!": "Hyvältä näyttää!", "Use Recovery Key or Passphrase": "Käytä palautusavainta tai salalausetta", "Use Recovery Key": "Käytä palautusavainta", - "Create a Recovery Key": "Luo palautusavain", - "Upgrade your Recovery Key": "Päivitä palautusavaimesi", "You joined the call": "Liityit puheluun", "%(senderName)s joined the call": "%(senderName)s liittyi puheluun", "Call in progress": "Puhelu käynnissä", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 0113270570..161d3f5dec 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -1,14 +1,10 @@ { - "Direct chats": "Discussions directes", "Disinvite": "Désinviter", "Displays action": "Affiche l'action", "Download %(text)s": "Télécharger %(text)s", - "Ed25519 fingerprint": "Empreinte Ed25519", "Emoji": "Émojis", "%(senderName)s ended the call.": "%(senderName)s a terminé l’appel.", - "End-to-end encryption information": "Informations sur le chiffrement de bout en bout", "Error": "Erreur", - "Event information": "Informations de l'événement", "Existing Call": "Appel en cours", "Export E2E room keys": "Exporter les clés de chiffrement de salon", "Failed to ban user": "Échec du bannissement de l'utilisateur", @@ -23,7 +19,6 @@ "Account": "Compte", "Admin": "Administrateur", "Advanced": "Avancé", - "Algorithm": "Algorithme", "%(items)s and %(lastItem)s": "%(items)s et %(lastItem)s", "and %(count)s others...|other": "et %(count)s autres...", "and %(count)s others...|one": "et un autre...", @@ -38,7 +33,6 @@ "Ban": "Bannir", "Banned users": "Utilisateurs bannis", "Bans user with given id": "Bannit l'utilisateur à partir de son identifiant", - "Blacklisted": "Sur liste noire", "Call Timeout": "L’appel a dépassé le délai d'attente maximal", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Impossible de se connecter au serveur d'accueil en HTTP si l'URL dans la barre de votre explorateur est en HTTPS. Utilisez HTTPS ou activez le support des scripts non-vérifiés.", "Change Password": "Changer le mot de passe", @@ -47,7 +41,6 @@ "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s a changé le nom du salon en %(roomName)s.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s a changé le sujet du salon en \"%(topic)s\".", "Changes your display nickname": "Change votre nom affiché", - "Claimed Ed25519 fingerprint key": "Clé d'empreinte Ed25519 déclarée", "Click here to fix": "Cliquer ici pour réparer", "Click to mute audio": "Cliquer pour couper le son", "Click to mute video": "Cliquer ici pour couper la vidéo", @@ -58,17 +51,13 @@ "Commands": "Commandes", "Confirm password": "Confirmer le mot de passe", "Continue": "Continuer", - "Could not connect to the integration server": "Impossible de se connecter au serveur d'intégration", "Create Room": "Créer un salon", "Cryptography": "Chiffrement", "Current password": "Mot de passe actuel", - "Curve25519 identity key": "Clé d’identité Curve25519", "/ddg is not a command": "/ddg n'est pas une commande", "Deactivate Account": "Fermer le compte", "Decrypt %(text)s": "Déchiffrer %(text)s", - "Decryption error": "Erreur de déchiffrement", "Deops user with given id": "Retire le rang d’opérateur d’un utilisateur à partir de son identifiant", - "Device ID": "Identifiant de l'appareil", "Failed to join room": "Échec de l’inscription au salon", "Failed to kick": "Échec de l'expulsion", "Failed to leave room": "Échec du départ du salon", @@ -79,7 +68,6 @@ "Failed to send email": "Échec de l’envoi de l’e-mail", "Failed to send request.": "Échec de l'envoi de la requête.", "Failed to set display name": "Échec de l'enregistrement du nom affiché", - "Failed to toggle moderator status": "Échec de l’activation du statut de modérateur", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s a accepté l’invitation de %(displayName)s.", "Access Token:": "Jeton d’accès :", "Always show message timestamps": "Toujours afficher l'heure des messages", @@ -111,14 +99,12 @@ "Sign in with": "Se connecter avec", "Join Room": "Rejoindre le salon", "%(targetName)s joined the room.": "%(targetName)s a rejoint le salon.", - "Joins room with given alias": "Rejoint le salon avec l'alias renseigné", "%(senderName)s kicked %(targetName)s.": "%(senderName)s a expulsé %(targetName)s.", "Kick": "Expulser", "Kicks user with given id": "Expulse l'utilisateur à partir de son identifiant", "Labs": "Labo", "Leave room": "Quitter le salon", "%(targetName)s left the room.": "%(targetName)s a quitté le salon.", - "Local addresses for this room:": "Adresses locales pour ce salon :", "Logout": "Se déconnecter", "Low priority": "Priorité basse", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s a rendu l'historique visible à tous les membres du salon, depuis le moment où ils ont été invités.", @@ -131,14 +117,11 @@ "Missing user_id in request": "Absence du user_id dans la requête", "Moderator": "Modérateur", "Name": "Nom", - "New address (e.g. #foo:%(localDomain)s)": "Nouvelle adresse (par ex. #foo:%(localDomain)s)", "New passwords don't match": "Les mots de passe ne correspondent pas", "New passwords must match each other.": "Les nouveaux mots de passe doivent être identiques.", - "none": "aucun", "not specified": "non spécifié", "(not supported by this browser)": "(non supporté par ce navigateur)", "": "", - "NOT verified": "NON vérifié", "No more results": "Fin des résultats", "No results": "Pas de résultat", "unknown error code": "code d’erreur inconnu", @@ -162,7 +145,6 @@ "Privileged Users": "Utilisateurs privilégiés", "Profile": "Profil", "Reason": "Raison", - "Revoke Moderator": "Révoquer le modérateur", "%(targetName)s rejected the invitation.": "%(targetName)s a rejeté l’invitation.", "Reject invitation": "Rejeter l'invitation", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s a supprimé son nom affiché (%(oldDisplayName)s).", @@ -175,7 +157,6 @@ "Room %(roomId)s not visible": "Le salon %(roomId)s n'est pas visible", "Room Colour": "Couleur du salon", "Rooms": "Salons", - "Scroll to bottom of page": "Aller en bas de la page", "Search": "Rechercher", "Search failed": "Échec de la recherche", "Searches DuckDuckGo for results": "Recherche des résultats dans DuckDuckGo", @@ -195,7 +176,6 @@ "Sign out": "Se déconnecter", "%(count)s of your messages have not been sent.|other": "Certains de vos messages n’ont pas été envoyés.", "Someone": "Quelqu'un", - "Start a chat": "Commencer une discussion", "Submit": "Soumettre", "Success": "Succès", "This email address is already in use": "Cette adresse e-mail est déjà utilisée", @@ -217,19 +197,13 @@ "%(senderName)s unbanned %(targetName)s.": "%(senderName)s a révoqué le bannissement de %(targetName)s.", "Unable to capture screen": "Impossible de faire une capture d'écran", "Unable to enable Notifications": "Impossible d'activer les notifications", - "unencrypted": "non chiffré", - "unknown device": "appareil inconnu", - "Unknown room %(roomId)s": "Salon inconnu %(roomId)s", "Unmute": "Activer le son", "Upload avatar": "Télécharger une photo de profil", "Upload Failed": "Échec de l’envoi", "Upload file": "Envoyer un fichier", "Usage": "Utilisation", - "User ID": "Identifiant d'utilisateur", "Users": "Utilisateurs", "Verification Pending": "Vérification en attente", - "Verification": "Vérification", - "verified": "vérifié", "Video call": "Appel vidéo", "Voice call": "Appel vocal", "VoIP conference finished.": "Téléconférence VoIP terminée.", @@ -276,7 +250,6 @@ "Upload an avatar:": "Envoyer un avatar :", "This server does not support authentication with a phone number.": "Ce serveur ne prend pas en charge l’authentification avec un numéro de téléphone.", "An error occurred: %(error_string)s": "Une erreur est survenue : %(error_string)s", - "Make Moderator": "Nommer modérateur", "There are no visible files in this room": "Il n'y a pas de fichier visible dans ce salon", "Room": "Salon", "Connectivity to the server has been lost.": "La connectivité au serveur a été perdue.", @@ -306,15 +279,9 @@ "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.": "Voulez-vous vraiment supprimer cet événement ? Notez que si vous supprimez le changement du nom ou du sujet d’un salon, il est possible que ce changement soit annulé.", "Unknown error": "Erreur inconnue", "Incorrect password": "Mot de passe incorrect", - "To continue, please enter your password.": "Pour continuer, veuillez saisir votre mot de passe.", - "I verify that the keys match": "J’ai vérifié que les clés correspondaient", "Unable to restore session": "Impossible de restaurer la session", "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.": "Si vous avez utilisé une version plus récente de %(brand)s précédemment, votre session risque d’être incompatible avec cette version. Fermez cette fenêtre et retournez à la version plus récente.", "Unknown Address": "Adresse inconnue", - "Unblacklist": "Supprimer de la liste noire", - "Blacklist": "Ajouter à la liste noire", - "Unverify": "Annuler la vérification", - "Verify...": "Vérifier...", "ex. @bob:example.com": "ex. @bob:exemple.com", "Add User": "Ajouter l'utilisateur", "Custom Server Options": "Options de serveur personnalisées", @@ -339,7 +306,6 @@ "Jump to first unread message.": "Aller au premier message non lu.", "Options": "Options", "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?": "Vous êtes sur le point d’accéder à un site tiers afin de pouvoir vous identifier pour utiliser %(integrationsUrl)s. Voulez-vous continuer ?", - "Removed or unknown message type": "Type de message inconnu ou supprimé", "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s a changé l’avatar du salon en ", "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s a supprimé l'avatar du salon.", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s a changé l’avatar de %(roomName)s", @@ -347,8 +313,6 @@ "Import": "Importer", "Incorrect username and/or password.": "Nom d’utilisateur et/ou mot de passe incorrect.", "Results from DuckDuckGo": "Résultats de DuckDuckGo", - "Unrecognised room alias:": "Alias de salon non reconnu :", - "Use compact timeline layout": "Utiliser l'affichage compact de l'historique", "Verified key": "Clé vérifiée", "No Microphones detected": "Aucun micro détecté", "No Webcams detected": "Aucune webcam détectée", @@ -361,9 +325,7 @@ "Anyone": "N'importe qui", "Are you sure you want to leave the room '%(roomName)s'?": "Voulez-vous vraiment quitter le salon \"%(roomName)s\" ?", "Custom level": "Rang personnalisé", - "device id: ": "identifiant de l'appareil : ", "Register": "S'inscrire", - "Remote addresses for this room:": "Adresses distantes pour ce salon :", "Save": "Enregistrer", "You have disabled URL previews by default.": "Vous avez désactivé les aperçus d’URL par défaut.", "You have enabled URL previews by default.": "Vous avez activé les aperçus d’URL par défaut.", @@ -386,14 +348,11 @@ "If you already have a Matrix account you can log in instead.": "Si vous avez déjà un compte Matrix vous pouvez vous connecter à la place.", "Accept": "Accepter", "Active call (%(roomName)s)": "Appel en cours (%(roomName)s)", - "Alias (optional)": "Alias (facultatif)", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Impossible de se connecter au serveur d’accueil - veuillez vérifier votre connexion, assurez-vous que le certificat SSL de votre serveur d’accueil est un certificat de confiance, et qu’aucune extension du navigateur ne bloque les requêtes.", "Close": "Fermer", "Custom": "Personnaliser", "Decline": "Refuser", - "Disable Notifications": "Désactiver les notifications", "Drop File Here": "Déposer le fichier Ici", - "Enable Notifications": "Activer les notifications", "Failed to upload profile picture!": "Échec de l'envoi de l'image de profil !", "Incoming call from %(name)s": "Appel entrant de %(name)s", "Incoming video call from %(name)s": "Appel vidéo entrant de %(name)s", @@ -404,7 +363,6 @@ "%(roomName)s does not exist.": "%(roomName)s n'existe pas.", "%(roomName)s is not accessible at this time.": "%(roomName)s n'est pas accessible pour le moment.", "Seen by %(userName)s at %(dateTime)s": "Vu par %(userName)s à %(dateTime)s", - "Send anyway": "Envoyer quand même", "Start authentication": "Commencer une authentification", "This room": "Ce salon", "unknown caller": "appelant inconnu", @@ -426,10 +384,6 @@ "Do you want to set an email address?": "Souhaitez-vous configurer une adresse e-mail ?", "This will allow you to reset your password and receive notifications.": "Ceci vous permettra de réinitialiser votre mot de passe et de recevoir des notifications.", "Skip": "Passer", - "Start verification": "Commencer la vérification", - "Share without verifying": "Partager sans vérifier", - "Ignore request": "Ignorer la requête", - "Encryption key request": "Requête de clé de chiffrement", "Check for update": "Rechercher une mise à jour", "Add a widget": "Ajouter un widget", "Allow": "Autoriser", @@ -462,7 +416,6 @@ "Invite new community members": "Inviter de nouveaux membres dans cette communauté", "Which rooms would you like to add to this community?": "Quels salons souhaitez-vous ajouter à cette communauté ?", "Add rooms to the community": "Ajouter des salons à la communauté", - "Room name or alias": "Nom du salon ou alias", "Add to community": "Ajouter à la communauté", "Failed to invite the following users to %(groupId)s:": "Échec de l'invitation des utilisateurs à %(groupId)s :", "Failed to invite users to community": "Échec de l'invitation d'utilisateurs à la communauté", @@ -479,7 +432,6 @@ "Unignore": "Ne plus ignorer", "Ignore": "Ignorer", "Invite": "Inviter", - "User Options": "Options d'utilisateur", "Admin Tools": "Outils d'administration", "Unpin Message": "Dépingler le message", "Jump to message": "Aller au message", @@ -507,8 +459,6 @@ "Members only (since they were invited)": "Seulement les membres (depuis leur invitation)", "Members only (since they joined)": "Seulement les membres (depuis leur arrivée)", "New community ID (e.g. +foo:%(localDomain)s)": "Nouvel identifiant de communauté (par ex. +foo:%(localDomain)s)", - "Message removed by %(userId)s": "Message supprimé par %(userId)s", - "Message removed": "Message supprimé", "An email has been sent to %(emailAddress)s": "Un e-mail a été envoyé à %(emailAddress)s", "A text message has been sent to %(msisdn)s": "Un message a été envoyé à %(msisdn)s", "Remove from community": "Supprimer de la communauté", @@ -621,8 +571,6 @@ "Create a new community": "Créer une nouvelle communauté", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Créez une communauté pour grouper des utilisateurs et des salons ! Construisez une page d'accueil personnalisée pour distinguer votre espace dans l'univers Matrix.", "Mirror local video feed": "Inverser horizontalement la vidéo locale (effet miroir)", - "Light theme": "Thème clair", - "Dark theme": "Thème sombre", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Un e-mail a été envoyé à %(emailAddress)s. Après avoir suivi le lien présent dans celui-ci, cliquez ci-dessous.", "Ignores a user, hiding their messages from you": "Ignore un utilisateur, en masquant ses messages", "Stops ignoring a user, showing their messages going forward": "N'ignore plus un utilisateur, en affichant ses messages à partir de maintenant", @@ -662,11 +610,6 @@ "expand": "développer", "collapse": "réduire", "Call Failed": "L'appel a échoué", - "Review Devices": "Passer en revue les appareils", - "Call Anyway": "Appeler malgré tout", - "Answer Anyway": "Répondre malgré tout", - "Call": "Appel", - "Answer": "Répondre", "Send": "Envoyer", "Old cryptography data detected": "Anciennes données de chiffrement détectées", "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.": "Nous avons détecté des données d'une ancienne version de %(brand)s. Le chiffrement de bout en bout n'aura pas fonctionné correctement sur l'ancienne version. Les messages chiffrés échangés récemment dans l'ancienne version ne sont peut-être pas déchiffrables dans cette version. Les échanges de message avec cette version peuvent aussi échouer. Si vous rencontrez des problèmes, déconnectez-vous puis reconnectez-vous. Pour conserver l'historique des messages, exportez puis réimportez vos clés de chiffrement.", @@ -676,14 +619,12 @@ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Tout renvoyer ou tout annuler maintenant. Vous pouvez aussi choisir des messages individuels à renvoyer ou annuler.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Renvoyer le message ou annuler le message maintenant.", "Send an encrypted reply…": "Envoyer une réponse chiffrée…", - "Send a reply (unencrypted)…": "Envoyer une réponse (non chiffrée)…", "Send an encrypted message…": "Envoyer un message chiffré…", - "Send a message (unencrypted)…": "Envoyer un message (non chiffré)…", "Replying": "Répond", "Minimize apps": "Minimiser les applications", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Le respect de votre vie privée est important pour nous, donc nous ne collectons aucune donnée personnelle ou permettant de vous identifier pour nos statistiques.", "Learn more about how we use analytics.": "En savoir plus sur notre utilisation des statistiques.", - "The information being sent to us to help make %(brand)s better includes:": "Les informations qui nous sont envoyées pour nous aider à améliorer %(brand)s comprennent :", + "The information being sent to us to help make %(brand)s better includes:": "Les informations qui nous sont envoyées et qui nous aident à améliorer %(brand)s comportent :", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Si la page contient des informations permettant de vous identifier, comme un salon, un identifiant d'utilisateur ou de groupe, ces données sont enlevées avant qu'elle ne soit envoyée au serveur.", "The platform you're on": "La plateforme que vous utilisez", "The version of %(brand)s": "La version de %(brand)s", @@ -691,7 +632,6 @@ "Which officially provided instance you are using, if any": "L'instance officielle que vous utilisez, si vous en utilisez une", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Si vous utilisez le mode « texte enrichi » de l'éditeur de texte enrichi", "Your homeserver's URL": "L'URL de votre serveur d'accueil", - "Your identity server's URL": "L'URL de votre serveur d'identité", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s %(day)s %(monthName)s %(fullYear)s", "This room is not public. You will not be able to rejoin without an invite.": "Ce salon n'est pas public. Vous ne pourrez pas y revenir sans invitation.", "Community IDs cannot be empty.": "Les identifiants de communauté ne peuvent pas être vides.", @@ -721,7 +661,6 @@ "Who can join this community?": "Qui peut rejoindre cette communauté ?", "Everyone": "Tout le monde", "Fetching third party location failed": "Échec de la récupération de la localisation tierce", - "A new version of %(brand)s is available.": "Une nouvelle version de %(brand)s est disponible.", "Send Account Data": "Envoyer les données du compte", "All notifications are currently disabled for all targets.": "Toutes les notifications sont désactivées pour tous les appareils.", "Uploading report": "Envoi du rapport", @@ -738,8 +677,6 @@ "Waiting for response from server": "En attente d’une réponse du serveur", "Send Custom Event": "Envoyer l'événement personnalisé", "Advanced notification settings": "Paramètres de notification avancés", - "delete the alias.": "supprimer l'alias.", - "To return to your account in future you need to set a password": "Pour pouvoir retrouver votre compte dans le futur, vous devez définir un mot de passe", "Forget": "Oublier", "You cannot delete this image. (%(code)s)": "Vous ne pouvez pas supprimer cette image. (%(code)s)", "Cancel Sending": "Annuler l'envoi", @@ -764,7 +701,6 @@ "No update available.": "Aucune mise à jour disponible.", "Resend": "Renvoyer", "Collecting app version information": "Récupération des informations de version de l’application", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Supprimer l'alias %(alias)s du salon et supprimer %(name)s du répertoire ?", "Keywords": "Mots-clés", "Enable notifications for this account": "Activer les notifications pour ce compte", "Invite to this community": "Inviter à cette communauté", @@ -818,7 +754,6 @@ "Show message in desktop notification": "Afficher le message dans les notifications de bureau", "Unhide Preview": "Dévoiler l'aperçu", "Unable to join network": "Impossible de rejoindre le réseau", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Vous les avez probablement configurées dans un autre client que %(brand)s. Vous ne pouvez pas les configurer dans %(brand)s mais elles s'appliquent quand même", "Sorry, your browser is not able to run %(brand)s.": "Désolé, %(brand)s n'est pas supporté par votre navigateur.", "Uploaded on %(date)s by %(user)s": "Téléchargé le %(date)s par %(user)s", "Messages in group chats": "Messages dans les discussions de groupe", @@ -843,7 +778,6 @@ "Thank you!": "Merci !", "When I'm invited to a room": "Quand je suis invité dans un salon", "Checking for an update...": "Recherche de mise à jour...", - "There are advanced notifications which are not shown here": "Il existe une configuration avancée des notifications qui ne peut être affichée ici", "Logs sent": "Journaux envoyés", "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.": "Les journaux de débogage contiennent des données d'usage de l'application qui incluent votre nom d'utilisateur, les identifiants ou alias des salons ou groupes auxquels vous avez rendu visite ainsi que les noms des autres utilisateurs. Ils ne contiennent aucun message.", "Failed to send logs: ": "Échec lors de l'envoi des journaux : ", @@ -852,7 +786,6 @@ "Popout widget": "Détacher le widget", "Every page you use in the app": "Toutes les pages que vous utilisez dans l'application", "e.g. ": "par ex. ", - "Your User Agent": "Votre user agent", "Your device resolution": "La résolution de votre appareil", "Always show encryption icons": "Toujours afficher les icônes de chiffrement", "Send Logs": "Envoyer les journaux", @@ -874,9 +807,6 @@ "e.g. %(exampleValue)s": "par ex. %(exampleValue)s", "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é des messages dans Matrix est la même que celle des e-mails. Quand nous oublions vos messages, cela signifie que les messages que vous avez envoyés ne seront partagés avec aucun nouvel utilisateur ou avec les utilisateurs non enregistrés, mais les utilisateurs enregistrés qui ont déjà eu accès à ces messages en conserveront leur propre copie.", "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)": "Veuillez oublier tous les messages que j'ai envoyé quand mon compte sera désactivé (Avertissement : les futurs utilisateurs verront des conversations incomplètes)", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Veuillez aider %(brand)s à s'améliorer en envoyant des données d'utilisation anonymes. Cela utilisera un cookie (veuillez voir notre politique de cookie).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Veuillez aider %(brand)s à s'améliorer en envoyant des données d'utilisation anonymes. Cela utilisera un cookie.", - "Yes, I want to help!": "Oui, je veux aider !", "Can't leave Server Notices room": "Impossible de quitter le salon des Annonces du serveur", "This room is used for important messages from the Homeserver, so you cannot leave it.": "Ce salon est utilisé pour les messages importants du serveur d'accueil, donc vous ne pouvez pas en partir.", "No Audio Outputs detected": "Aucune sortie audio détectée", @@ -912,9 +842,6 @@ "Please contact your service administrator to continue using the service.": "Veuillez contacter l'administrateur de votre service pour continuer à l'utiliser.", "This homeserver has hit its Monthly Active User limit.": "Ce serveur d'accueil a atteint sa limite mensuelle d'utilisateurs actifs.", "This homeserver has exceeded one of its resource limits.": "Ce serveur d'accueil a dépassé une de ses limites de ressources.", - "Please contact your service administrator to get this limit increased.": "Veuillez contacter l'administrateur de votre service pour augmenter cette limite.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Ce serveur d'accueil a atteint sa limite mensuelle d'utilisateurs actifs donc certains utilisateurs ne pourront pas se connecter.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Ce serveur d'accueil a atteint une de ses limites de ressources donc certains utilisateurs ne pourront pas se connecter.", "Upgrade Room Version": "Mettre à niveau la version du salon", "Create a new room with the same name, description and avatar": "Créer un salon avec le même nom, la même description et le même avatar", "Update any local room aliases to point to the new room": "Mettre à jour tous les alias du salon locaux pour qu'ils dirigent vers le nouveau salon", @@ -934,14 +861,7 @@ "The room upgrade could not be completed": "La mise à niveau du salon n'a pas pu être effectuée", "Upgrade this room to version %(version)s": "Mettre à niveau ce salon vers la version %(version)s", "Forces the current outbound group session in an encrypted room to be discarded": "Force la session de groupe sortante actuelle dans un salon chiffré à être rejetée", - "Registration Required": "Enregistrement nécessaire", - "You need to register to do this. Would you like to register now?": "Vous devez vous enregistrer pour faire cela. Voulez-vous créer un compte maintenant ?", "Unable to connect to Homeserver. Retrying...": "Impossible de se connecter au serveur d'accueil. Reconnexion...", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s a ajouté %(addedAddresses)s comme adresse pour ce salon.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s a ajouté %(addedAddresses)s comme adresses pour ce salon.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s a supprimé %(removedAddresses)s comme adresse pour ce salon.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s a supprimé %(removedAddresses)s comme adresses pour ce salon.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s a ajouté %(addedAddresses)s et supprimé %(removedAddresses)s comme adresses pour ce salon.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s à défini l'adresse principale pour ce salon comme %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s a supprimé l'adresse principale de ce salon.", "%(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!": "%(brand)s utilise maintenant 3 à 5 fois moins de mémoire, en ne chargeant les informations des autres utilisateurs que quand elles sont nécessaires. Veuillez patienter pendant que l'on se resynchronise avec le serveur !", @@ -958,7 +878,6 @@ "Show developer tools": "Afficher les outils de développeur", "Please review and accept all of the homeserver's policies": "Veuillez lire et accepter toutes les politiques du serveur d'accueil", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Pour éviter de perdre l'historique de vos discussions, vous devez exporter vos clés avant de vous déconnecter. Vous devez revenir à une version plus récente de %(brand)s pour pouvoir le faire", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Vous avez utilisé une version plus récente de %(brand)s sur %(host)s. Pour utiliser à nouveau cette version avec le chiffrement de bout en bout, vous devez vous déconnecter et vous reconnecter. ", "Incompatible Database": "Base de données incompatible", "Continue With Encryption Disabled": "Continuer avec le chiffrement désactivé", "Sign in with single sign-on": "Se connecter avec l'authentification unique", @@ -967,34 +886,23 @@ "Unable to load key backup status": "Impossible de charger l'état de sauvegarde des clés", "Backup version: ": "Version de la sauvegarde : ", "Algorithm: ": "Algorithme : ", - "Enter a passphrase...": "Saisissez un mot de passe…", "Next": "Suivant", "That matches!": "Ça correspond !", "That doesn't match.": "Ça ne correspond pas.", "Go back to set it again.": "Retournez en arrière pour la redéfinir.", - "Repeat your passphrase...": "Répétez votre mot de passe…", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Par précaution, vous pouvez l'utiliser pour restaurer l'historique de vos messages chiffrés si vous oubliez votre phrase de récupération.", - "Your Recovery Key": "Votre clé de récupération", - "Copy to clipboard": "Copier dans le presse-papier", "Download": "Télécharger", "Print it and store it somewhere safe": "Imprimez-la et conservez-la dans un endroit sûr", "Save it on a USB key or backup drive": "Sauvegardez-la sur une clé USB ou un disque de sauvegarde", "Copy it to your personal cloud storage": "Copiez-la dans votre espace de stockage personnel en ligne", "Set up Secure Message Recovery": "Configurer la récupération de messages sécurisée", - "Keep it safe": "Conservez-la en lieu sûr", - "Create Key Backup": "Créer la sauvegarde des clés", "Unable to create key backup": "Impossible de créer la sauvegarde des clés", "Retry": "Réessayer", "Unable to load backup status": "Impossible de charger l'état de la sauvegarde", "Unable to restore backup": "Impossible de restaurer la sauvegarde", "No backup found!": "Aucune sauvegarde n'a été trouvée !", - "Backup Restored": "Sauvegarde restaurée", "Failed to decrypt %(failedCount)s sessions!": "Le déchiffrement de %(failedCount)s sessions a échoué !", - "Restored %(sessionCount)s session keys": "%(sessionCount)s clés de session ont été restaurées", - "Enter Recovery Passphrase": "Saisissez la phrase secrète de récupération", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Accédez à l'historique sécurisé de vos messages et configurez la messagerie sécurisée en renseignant votre phrase de récupération.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Si vous avez oublié votre phrase de récupération vous pouvez utiliser votre clé de récupération ou configurer de nouvelles options de récupération", - "Enter Recovery Key": "Saisissez la clé de récupération", "This looks like a valid recovery key!": "Cela ressemble à une clé de récupération valide !", "Not a valid recovery key": "Ce n'est pas une clé de récupération valide", "Access your secure message history and set up secure messaging by entering your recovery key.": "Accédez à l'historique sécurisé de vos messages et configurez la messagerie sécurisée en renseignant votre clé de récupération.", @@ -1025,8 +933,6 @@ "Names and surnames by themselves are easy to guess": "Les noms et prénoms seuls sont faciles à deviner", "Common names and surnames are easy to guess": "Les noms et prénoms répandus sont faciles à deviner", "Use a longer keyboard pattern with more turns": "Utilisez un schéma plus long et avec plus de variations", - "Great! This passphrase looks strong enough.": "Super ! Ce mot de passe a l'air assez fort.", - "As a safety net, you can use it to restore your encrypted message history.": "En cas de problème, vous pouvez l'utiliser pour restaurer l'historique de vos messages chiffrés.", "Failed to load group members": "Échec du chargement des membres du groupe", "Failed to invite users to the room:": "Échec de l'invitation d'utilisateurs dans le salon :", "There was an error joining the room": "Une erreur est survenue en rejoignant le salon", @@ -1062,7 +968,6 @@ "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Impossible de trouver les profils pour les identifiants Matrix listés ci-dessous. Voulez-vous quand même les inviter ?", "Invite anyway and never warn me again": "Inviter quand même et ne plus me prévenir", "Invite anyway": "Inviter quand même", - "Waiting for %(userId)s to confirm...": "Nous attendons que %(userId)s confirme…", "Whether or not you're logged in (we don't record your username)": "Si vous êtes connecté ou pas (votre nom d'utilisateur n'est pas enregistré)", "Upgrades a room to a new version": "Met à niveau un salon vers une nouvelle version", "Sets the room name": "Défini le nom du salon", @@ -1127,7 +1032,6 @@ "Autocomplete delay (ms)": "Délai pour l'autocomplétion (ms)", "Chat with %(brand)s Bot": "Discuter avec le bot %(brand)s", "Roles & Permissions": "Rôles & Permissions", - "To link to this room, please add an alias.": "Pour partager ce salon, veuillez créer un alias.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Les modifications concernant l'accès à l'historique ne s'appliqueront qu'aux futurs messages de ce salon. La visibilité de l'historique existant ne sera pas modifiée.", "Security & Privacy": "Sécurité & Vie privée", "Encryption": "Chiffrement", @@ -1144,18 +1048,12 @@ "Room Name": "Nom du salon", "Room Topic": "Sujet du salon", "Join": "Rejoindre", - "Use Legacy Verification (for older clients)": "Utiliser l'ancienne vérification (pour les vieux logiciels)", - "Verify by comparing a short text string.": "Vérifier en comparant une chaîne de caractères courte.", - "Begin Verifying": "Commencer la vérification", - "Waiting for partner to accept...": "Nous attendons que le partenaire accepte…", - "Use two-way text verification": "Utiliser la vérification textuelle bidirectionnelle", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Vérifier cet utilisateur pour le marquer comme fiable. Faire confiance aux utilisateurs vous permet d’être serein quand vous utilisez des messages chiffrés de bout en bout.", "Waiting for partner to confirm...": "Nous attendons que le partenaire confirme…", "Incoming Verification Request": "Demande de vérification entrante", "Go back": "Revenir en arrière", "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.": "Pour éviter la duplication de problèmes, veuillez voir les problèmes existants d'abord (et ajouter un +1) ou créer un nouveau problème si vous ne le trouvez pas.", "Report bugs & give feedback": "Rapporter des anomalies & Donner son avis", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "La sauvegarde n'a pas pu être déchiffrée avec cette clé : veuillez vérifier que vous avez saisi la bonne clé de récupération.", "Update status": "Mettre à jour le statut", "Set status": "Définir le statut", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Vous pouvez utiliser les options de serveur personnalisé pour vous connecter à d'autres serveurs Matrix en renseignant un autre URL de serveur d'accueil. Cela vous permet d'utiliser cette application avec un compte Matrix existant sur un autre serveur d'accueil.", @@ -1261,9 +1159,6 @@ "Headphones": "Écouteurs", "Folder": "Dossier", "Pin": "Épingle", - "Recovery Key Mismatch": "La clé de récupération ne correspond pas", - "Incorrect Recovery Passphrase": "Phrase de passe de récupération incorrecte", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "La sauvegarde n'a pas pu être déchiffrée avec ce mot de passe : vérifiez que vous avez saisi le bon mot de passe de récupération.", "This homeserver would like to make sure you are not a robot.": "Ce serveur d'accueil veut s'assurer que vous n'êtes pas un robot.", "Change": "Changer", "Couldn't load page": "Impossible de charger la page", @@ -1283,22 +1178,14 @@ "Securely back up your keys to avoid losing them. Learn more.": "Sauvegardez vos clés de façon sécurisée pour éviter de les perdre. En savoir plus.", "Not now": "Pas maintenant", "Don't ask me again": "Ne plus me demander", - "Nothing appearing? Not all clients support interactive verification yet. .": "Rien n'apparaît ? Certains clients ne prennent pas encore en charge la vérification interactive. .", "I don't want my encrypted messages": "Je ne veux pas de mes messages chiffrés", "Manually export keys": "Exporter manuellement les clés", "You'll lose access to your encrypted messages": "Vous perdrez l’accès à vos messages chiffrés", "Are you sure you want to sign out?": "Voulez-vous vraiment vous déconnecter ?", "Warning: you should only set up key backup from a trusted computer.": "Attention : vous ne devriez configurer la sauvegarde des clés que depuis un ordinateur de confiance.", "Hide": "Masquer", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Nous conserverons une copie chiffrée de vos clés sur notre serveur. Protégez votre sauvegarde avec un mot de passe pour qu'elle reste sécurisée.", "For maximum security, this should be different from your account password.": "Pour une sécurité maximale, ceci devrait être différent du mot de passe de votre compte.", - "Set up with a Recovery Key": "Configurer une clé de récupération", - "Please enter your passphrase a second time to confirm.": "Veuillez saisir votre mot de passe une seconde fois pour le confirmer.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Votre clé de récupération est une mesure de précaution. Vous pouvez l’utiliser pour restaurer l’accès à vos messages chiffrés si vous oubliez votre mot de passe.", "Your keys are being backed up (the first backup could take a few minutes).": "Vous clés sont en cours de sauvegarde (la première sauvegarde peut prendre quelques minutes).", - "Secure your backup with a passphrase": "Protégez votre sauvegarde avec un mot de passe", - "Confirm your passphrase": "Confirmez votre mot de passe", - "Recovery key": "Clé de récupération", "Success!": "Terminé !", "Allow Peer-to-Peer for 1:1 calls": "Autoriser les connexions pair-à-pair pour les appels individuels", "Credits": "Crédits", @@ -1308,14 +1195,9 @@ "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s a désactivé le badge pour %(groups)s dans ce salon.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s a activé le badge pour %(newGroups)s et désactivé le badge pour %(oldGroups)s dans ce salon.", "Show read receipts sent by other users": "Afficher les accusés de lecture envoyés par les autres utilisateurs", - "Order rooms in the room list by most important first instead of most recent": "Trier les salons dans la liste des salons avec le plus important en premier plutôt que le plus récent", "Scissors": "Ciseaux", "Error updating main address": "Erreur lors de la mise à jour de l’adresse principale", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Une erreur est survenue lors de la mise à jour de l’adresse principale de salon. Ce n’est peut-être pas autorisé par le serveur ou une erreur temporaire est survenue.", - "Error creating alias": "Erreur lors de la création de l’alias", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Une erreur est survenue lors de la création de cet alias. Ce n’est peut-être pas autorisé par le serveur ou une erreur temporaire est survenue.", - "Error removing alias": "Erreur lors de la suppression de l’alias", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Une erreur est survenue lors de la suppression de cet alias. Il n’existe peut-être plus ou une erreur temporaire est survenue.", "Error updating flair": "Erreur lors de la mise à jour du badge", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Une erreur est survenue lors de la mise à jour du badge pour ce salon. Ce serveur ne l’autorise peut-être pas ou une erreur temporaire est survenue.", "Room Settings - %(roomName)s": "Paramètres du salon – %(roomName)s", @@ -1398,7 +1280,6 @@ "Upload %(count)s other files|one": "Envoyer %(count)s autre fichier", "Cancel All": "Tout annuler", "Upload Error": "Erreur d’envoi", - "A conference call could not be started because the integrations server is not available": "L’appel en téléconférence n’a pas pu être lancé car les intégrations du serveur ne sont pas disponibles", "The server does not support the room version specified.": "Le serveur ne prend pas en charge la version de salon spécifiée.", "Name or Matrix ID": "Nom ou identifiant Matrix", "Changes your avatar in this current room only": "Change votre avatar seulement dans le salon actuel", @@ -1467,7 +1348,6 @@ "Create your Matrix account on ": "Créez votre compte Matrix sur ", "Your Matrix account on ": "Votre compte Matrix sur ", "Low bandwidth mode": "Mode faible bande passante", - "Show recently visited rooms above the room list": "Afficher les salons visités récemment au dessus de la liste des salons", "Uploaded sound": "Son téléchargé", "Sounds": "Sons", "Notification sound": "Son de notification", @@ -1636,14 +1516,9 @@ "Read Marker lifetime (ms)": "Durée de vie du repère de lecture (ms)", "Read Marker off-screen lifetime (ms)": "Durée de vie du repère de lecture en dehors de l’écran (ms)", "Changes the avatar of the current room": "Change l’avatar du salon actuel", - "Room alias": "Alias du salon", "e.g. my-room": "par ex. mon-salon", - "Please provide a room alias": "Veuillez renseigner un alias de salon", - "This alias is available to use": "Cet alias est disponible", - "This alias is already in use": "Cet alias est déjà utilisé", "Close dialog": "Fermer la boîte de dialogue", "Please enter a name for the room": "Veuillez renseigner un nom pour le salon", - "Set a room alias to easily share your room with other people.": "Définissez un alias de salon pour partager facilement votre salon avec d’autres personnes.", "This room is private, and can only be joined by invitation.": "Ce salon est privé et ne peut être rejoint que sur invitation.", "Create a public room": "Créer un salon public", "Create a private room": "Créer un salon privé", @@ -1725,7 +1600,6 @@ "Error adding ignored user/server": "Erreur lors de l’ajout de l’utilisateur/du serveur ignoré", "Something went wrong. Please try again or view your console for hints.": "Une erreur est survenue. Réessayez ou consultez votre console pour des indices.", "Error subscribing to list": "Erreur lors de l’inscription à la liste", - "Please verify the room ID or alias and try again.": "Vérifiez l’identifiant ou l’alias du salon et réessayez.", "Error removing ignored user/server": "Erreur lors de la suppression de l’utilisateur/du serveur ignoré", "Error unsubscribing from list": "Erreur lors de la désinscription de la liste", "Please try again or view your console for hints.": "Réessayez ou consultez votre console pour des indices.", @@ -1749,7 +1623,6 @@ "Subscribed lists": "Listes souscrites", "Subscribing to a ban list will cause you to join it!": "En vous inscrivant à une liste de bannissement, vous la rejoindrez !", "If this isn't what you want, please use a different tool to ignore users.": "Si ce n’est pas ce que vous voulez, utilisez un autre outil pour ignorer les utilisateurs.", - "Room ID or alias of ban list": "Identifiant ou alias du salon de la liste de bannissement", "Subscribe": "S’inscrire", "You have ignored this user, so their message is hidden. Show anyways.": "Vous avez ignoré cet utilisateur, donc ses messages sont cachés. Les montrer quand même.", "Custom (%(level)s)": "Personnalisé (%(level)s)", @@ -1772,7 +1645,6 @@ "Using this widget may share data with %(widgetDomain)s.": "L’utilisation de ce widget pourrait partager des données avec %(widgetDomain)s.", "Widget added by": "Widget ajouté par", "This widget may use cookies.": "Ce widget pourrait utiliser des cookies.", - "Enable local event indexing and E2EE search (requires restart)": "Activer l’indexation des événements locaux et la recherche des données chiffrées de bout en bout (nécessite un redémarrage)", "Connecting to integration manager...": "Connexion au gestionnaire d’intégrations…", "Cannot connect to integration manager": "Impossible de se connecter au gestionnaire d’intégrations", "The integration manager is offline or it cannot reach your homeserver.": "Le gestionnaire d’intégrations est hors ligne ou il ne peut pas joindre votre serveur d’accueil.", @@ -1793,7 +1665,6 @@ "Decline (%(counter)s)": "Refuser (%(counter)s)", "Manage integrations": "Gérer les intégrations", "Verification Request": "Demande de vérification", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Match system theme": "S’adapter au thème du système", "%(senderName)s placed a voice call.": "%(senderName)s a passé un appel vocal.", "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s a passé un appel vocal. (pas pris en charge par ce navigateur)", @@ -1818,7 +1689,6 @@ " reacted with %(content)s": " ont réagi avec %(content)s", " wants to chat": " veut discuter", "Start chatting": "Commencer à discuter", - "Send cross-signing keys to homeserver": "Envoyer les clés de signature croisée au serveur d’accueil", "Cross-signing public keys:": "Clés publiques de signature croisée :", "not found": "non trouvé", "Cross-signing private keys:": "Clés privées de signature croisée :", @@ -1843,22 +1713,11 @@ "Secret storage public key:": "Clé publique du coffre secret :", "in account data": "dans les données du compte", "Cross-signing": "Signature croisée", - "Enter secret storage passphrase": "Saisir le mot de passe du coffre secret", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Impossible d’accéder au coffre secret. Vérifiez que le mot de passe saisi est correct.", - "Warning: You should only access secret storage from a trusted computer.": "Attention : Vous devriez uniquement accéder au coffre secret depuis un ordinateur de confiance.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Si vous avez oublié votre mot de passe, vous pouvez utiliser votre clé de récupération ou définir de nouvelles options de récupération.", - "Enter secret storage recovery key": "Saisir la clé de récupération du coffre secret", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Impossible d’accéder au coffre secret. Vérifiez que vous avez saisi la bonne clé de récupération.", - "If you've forgotten your recovery key you can .": "Si vous avez oublié votre clé de récupération vous pouvez .", "Warning: You should only set up key backup from a trusted computer.": "Attention : Vous ne devriez configurer la sauvegarde de clés que depuis un ordinateur de confiance.", "If you've forgotten your recovery key you can ": "Si vous avez oublié votre clé de récupération, vous pouvez ", "Set up with a recovery key": "Configurer avec une clé de récupération", - "As a safety net, you can use it to restore your access to encrypted messages if you forget your passphrase.": "Par mesure de sécurité, vous pouvez l’utiliser pour récupérer l’accès aux messages chiffrés si vous oubliez votre phrase de passe.", - "As a safety net, you can use it to restore your access to encrypted messages.": "Par mesure de sécurité, vous pouvez l’utiliser pour récupérer l’accès à vos messages chiffrés.", - "Keep your recovery key somewhere very secure, like a password manager (or a safe).": "Conservez votre clé de récupération dans un endroit très sécurisé, comme un gestionnaire de mots de passe (ou un coffre-fort).", "Your recovery key has been copied to your clipboard, paste it to:": "Votre clé de récupération a été copiée dans votre presse-papiers, collez-la pour :", "Your recovery key is in your Downloads folder.": "Votre clé de récupération est dans votre dossier de Téléchargements.", - "Storing secrets...": "Sauvegarde des secrets…", "Unable to set up secret storage": "Impossible de configurer le coffre secret", "Cross-signing and secret storage are enabled.": "La signature croisée et le coffre secret sont activés.", "Cross-signing and secret storage are not yet set up.": "La signature croisée et le coffre secret ne sont pas encore configurés.", @@ -1885,7 +1744,6 @@ "Suggestions": "Suggestions", "Failed to find the following users": "Impossible de trouver les utilisateurs suivants", "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Les utilisateurs suivant n’existent peut-être pas ou ne sont pas valides, et ne peuvent pas être invités : %(csvNames)s", - "Show a presence dot next to DMs in the room list": "Afficher une pastille de présence à côté des messages directs dans la liste des salons", "Lock": "Cadenas", "Restore": "Restaurer", "a few seconds ago": "il y a quelques secondes", @@ -1907,9 +1765,6 @@ "Something went wrong trying to invite the users.": "Une erreur est survenue en essayant d’inviter les utilisateurs.", "We couldn't invite those users. Please check the users you want to invite and try again.": "Impossible d’inviter ces utilisateurs. Vérifiez les utilisateurs que vous souhaitez inviter et réessayez.", "Recently Direct Messaged": "Messages directs récents", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "S’il y a quelqu’un que vous n’arrivez pas à trouver, demandez-lui son nom d’utilisateur (par ex. @utilisateur:serveur.com) ou partagez ce salon.", - "Complete security": "Compléter la sécurité", - "Verify this session to grant it access to encrypted messages.": "Vérifiez cette session pour l’autoriser à accéder à vos messages chiffrés.", "Start": "Commencer", "Session verified": "Session vérifiée", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Votre nouvelle session est maintenant vérifiée. Elle a accès à vos messages chiffrés et les autres utilisateurs la verront comme fiable.", @@ -1925,28 +1780,16 @@ "You can use /help to list available commands. Did you mean to send this as a message?": "Vous pouvez utiliser /help pour obtenir la liste des commandes disponibles. Vouliez-vous envoyer un message ?", "Hint: Begin your message with // to start it with a slash.": "Astuce : Votre message doit démarrer par // pour commencer par une barre oblique.", "Send as message": "Envoyer comme message", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s a ajouté %(addedAddresses)s et %(count)s autres adresses à ce salon", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s a supprimé %(removedAddresses)s et %(count)s autres adresses de ce salon", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s a supprimé %(countRemoved)s et ajouté %(countAdded)s adresses à ce salon", "Reject & Ignore user": "Rejeter et ignorer l’utilisateur", "Enter your account password to confirm the upgrade:": "Saisissez le mot de passe de votre compte pour confirmer la mise à niveau :", "You'll need to authenticate with the server to confirm the upgrade.": "Vous devrez vous identifier avec le serveur pour confirmer la mise à niveau.", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Sécurisez vos clés de chiffrement avec un mot de passe. Pour une sécurité maximale, il devrait être différent du mot de passe de votre compte :", - "Enter a passphrase": "Saisissez un mot de passe", - "Enter your passphrase a second time to confirm it.": "Saisissez votre mot de passe une seconde fois pour le confirmer.", - "Verify other users in their profile.": "Vérifiez d’autres utilisateurs dans leur profil.", "Upgrade your encryption": "Mettre à niveau votre chiffrement", "Set up encryption": "Configurer le chiffrement", - "Encryption upgraded": "Chiffrement mis à niveau", - "Encryption setup complete": "Configuration du chiffrement terminé", - "%(senderName)s turned on end-to-end encryption.": "%(senderName)s a activé le chiffrement de bout en bout.", - "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s a activé le chiffrement de bout en bout (algorithme %(algorithm)s non reconnu).", "This room is end-to-end encrypted": "Ce salon est chiffré de bout en bout", "Everyone in this room is verified": "Tout le monde dans ce salon est vérifié", "Invite only": "Uniquement sur invitation", "Send a reply…": "Envoyer une réponse…", "Send a message…": "Envoyer un message…", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Si vous n’arrivez pas à trouver quelqu’un, demandez-lui son nom d’utilisateur, partagez votre nom d’utilisateur (%(userId)s) ou votre lien de profil.", "Verify this session": "Vérifier cette session", "Encryption upgrade available": "Mise à niveau du chiffrement disponible", "Enable message search in encrypted rooms": "Activer la recherche de messages dans les salons chiffrés", @@ -1958,16 +1801,12 @@ "Securely cache encrypted messages locally for them to appear in search results.": "Mettre en cache les messages chiffrés localement et de manière sécurisée pour qu’ils apparaissent dans les résultats de recherche.", "Enable": "Activer", "%(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.": "Il manque quelques composants à %(brand)s pour mettre en cache les messages chiffrés localement de manière sécurisée. Si vous voulez essayer cette fonctionnalité, construisez %(brand)s Desktop vous-même en ajoutant les composants de recherche.", - "%(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 ne peut pas mettre en cache les messages chiffrés localement de manière sécurisée dans un navigateur web. Utilisez %(brand)s Desktop pour que les messages chiffrés apparaissent dans les résultats de recherche.", "Message search": "Recherche de message", "If disabled, messages from encrypted rooms won't appear in search results.": "Si l’option est désactivée, les messages des salons chiffrés n’apparaîtront pas dans les résultats de recherche.", "Disable": "Désactiver", - "Not currently downloading messages for any room.": "Aucun téléchargement de message en cours pour les salons.", - "Downloading mesages for %(currentRoom)s.": "Téléchargement des messages pour %(currentRoom)s.", "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s met en cache les messages chiffrés localement et de manière sécurisée pour qu’ils apparaissent dans les résultats de recherche :", "Space used:": "Espace utilisé :", "Indexed messages:": "Messages indexés :", - "Number of rooms:": "Nombre de salons :", "Waiting for %(displayName)s to verify…": "Nous attendons que %(displayName)s vérifie…", "They match": "Ils correspondent", "They don't match": "Ils ne correspondent pas", @@ -1991,33 +1830,21 @@ "If you can't scan the code above, verify by comparing unique emoji.": "Si vous ne pouvez pas scanner le code ci-dessus, vérifiez en comparant des émojis uniques.", "You've successfully verified %(displayName)s!": "Vous avez vérifié %(displayName)s !", "Got it": "Compris", - "Verification timed out. Start verification again from their profile.": "La vérification a expiré. Recommencez la vérification depuis son profil.", - "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s a annulé la vérification. Recommencez la vérification depuis son profil.", - "You cancelled verification. Start verification again from their profile.": "Vous avez annulé la vérification. Recommencez la vérification depuis son profil.", "New session": "Nouvelle session", "Use this session to verify your new one, granting it access to encrypted messages:": "Utilisez cette session pour vérifier la nouvelle, ce qui lui permettra d’accéder aux messages chiffrés :", "If you didn’t sign in to this session, your account may be compromised.": "Si vous ne vous êtes pas connecté à cette session, votre compte est peut-être compromis.", "This wasn't me": "Ce n’était pas moi", "Your new session is now verified. Other users will see it as trusted.": "Votre nouvelle session est maintenant vérifiée. Les autres utilisateurs la verront comme fiable.", "Restore your key backup to upgrade your encryption": "Restaurez votre sauvegarde de clés pour mettre à niveau votre chiffrement", - "Back up my encryption keys, securing them with the same passphrase": "Sauvegarder mes clés de chiffrement, en les sécurisant avec le même mot de passe", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Il y a des sessions inconnues dans ce salon : si vous continuez sans les vérifier, quelqu’un pourra espionner votre appel.", - "Unverified session": "Session non vérifiée", "Verifies a user, session, and pubkey tuple": "Vérifie un utilisateur, une session et une collection de clés publiques", "Unknown (user, session) pair:": "Paire (utilisateur, session) inconnue :", "Session already verified!": "Session déjà vérifiée !", "WARNING: Session already verified, but keys do NOT MATCH!": "ATTENTION : La session a déjà été vérifiée mais les clés NE CORRESPONDENT PAS !", "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!": "ATTENTION : ÉCHEC DE LA VÉRIFICATION DE CLÉ ! La clé de signature pour %(userId)s et la session %(deviceId)s est « %(fprint)s » que ne correspond pas à la clé fournie « %(fingerprint)s ». Cela pourrait signifier que vos communications sont interceptées !", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "La clé de signature que vous avez fournie correspond à celle que vous avez reçue de la session %(deviceId)s de %(userId)s. Session marquée comme vérifiée.", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Activer la signature croisée pour vérifier par utilisateur plutôt que par session (en développement)", - "Show padlocks on invite only rooms": "Afficher des cadenas sur les salons accessibles uniquement par invitation", "Never send encrypted messages to unverified sessions from this session": "Ne jamais envoyer de messages chiffrés aux sessions non vérifiées depuis cette session", "Never send encrypted messages to unverified sessions in this room from this session": "Ne jamais envoyer des messages chiffrés aux sessions non vérifiées dans ce salon depuis cette session", - "Keep secret storage passphrase in memory for this session": "Conserver le mot de passe du coffre secret en mémoire pour cette session", - "Confirm the emoji below are displayed on both devices, in the same order:": "Confirmez que les émojis ci-dessous sont affichés sur les deux appareils, dans le même ordre :", - "Verify this device by confirming the following number appears on its screen.": "Vérifiez cet appareil en confirmant que le nombre suivant apparaît sur son écran.", "To be secure, do this in person or use a trusted way to communicate.": "Pour être sûr, faites cela en personne ou utilisez un moyen de communication fiable.", - "Verify your other sessions easier": "Vérifiez vos autres sessions plus facilement", "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.": "Changer votre mot de passe réinitialisera toutes les clés de chiffrement sur toutes les sessions, ce qui rendra l’historique de vos messages illisible, sauf si vous exportez d’abord vos clés de chiffrement et si vous les réimportez ensuite. Dans l’avenir, ce processus sera amélioré.", "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Votre compte à une identité de signature croisée dans le coffre secret, mais cette session ne lui fait pas encore confiance.", "in memory": "en mémoire", @@ -2038,23 +1865,16 @@ "Backup has an invalid signature from unverified session ": "La sauvegarde a une session non valide de la session non vérifiée ", "Backup is not signed by any of your sessions": "La sauvegarde n’est signée par aucune de vos sessions", "This backup is trusted because it has been restored on this session": "Cette sauvegarde est fiable car elle a été restaurée sur cette session", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Une sauvegarde de clés est stockée dans le coffre secret, mais cette fonctionnalité n’est pas activée sur cette session. Activez la signature croisée dans le Labo pour modifier l’état de la sauvegarde de clés.", "Your keys are not being backed up from this session.": "Vos clés ne sont pas sauvegardées sur cette session.", "Enable desktop notifications for this session": "Activer les notifications de bureau pour cette session", "Enable audible notifications for this session": "Activer les notifications sonores pour cette session", "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Votre mot de passe a été modifié. Vous ne recevrez plus de notifications push sur les autres sessions tant que vous ne vous y serez pas reconnecté", "Session ID:": "Identifiant de session :", "Session key:": "Clé de session :", - "Sessions": "Sessions", "A session's public name is visible to people you communicate with": "Le nom public d’une session est visible par les personnes avec lesquelles vous communiquez", "This user has not verified all of their sessions.": "Cet utilisateur n’a pas vérifié toutes ses sessions.", - "You have not verified this user. This user has verified all of their sessions.": "Vous n’avez pas vérifié cet utilisateur. Cet utilisateur a vérifié toutes ses sessions.", "You have verified this user. This user has verified all of their sessions.": "Vous avez vérifié cet utilisateur. Cet utilisateur a vérifié toutes ses sessions.", "Someone is using an unknown session": "Quelqu'un utilise une session inconnue", - "Some sessions for this user are not trusted": "Certaines sessions de cet utilisateur ne sont pas fiables", - "All sessions for this user are trusted": "Toutes les sessions de cet utilisateur sont fiables", - "Some sessions in this encrypted room are not trusted": "Certaines sessions dans ce salon chiffré ne sont pas fiables", - "All sessions in this encrypted room are trusted": "Toutes les sessions dans ce salon chiffré sont fiables", "Mod": "Modo", "Your key share request has been sent - please check your other sessions for key share requests.": "Votre demande de partage de clé a été envoyée − vérifiez les demandes de partage de clé sur vos autres sessions.", "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.": "Les demandes de partage de clé sont envoyées à vos autres sessions automatiquement. Si vous avez rejeté ou ignoré la demande de partage de clé sur vos autres sessions, cliquez ici pour redemander les clés pour cette session.", @@ -2062,7 +1882,6 @@ "Re-request encryption keys from your other sessions.": "Redemander les clés de chiffrement à vos autres sessions.", "Encrypted by an unverified session": "Chiffré par une session non vérifiée", "Encrypted by a deleted session": "Chiffré par une session supprimée", - "No sessions with registered encryption keys": "Aucune session avec les clés de chiffrement enregistrées", "Yours, or the other users’ session": "Votre session ou celle de l’autre utilisateur", "%(count)s sessions|other": "%(count)s sessions", "%(count)s sessions|one": "%(count)s session", @@ -2074,36 +1893,18 @@ "Clear all data in this session?": "Supprimer toutes les données de cette session ?", "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "La suppression de toutes les données de cette session est permanente. Les messages chiffrés seront perdus sauf si les clés ont été sauvegardées.", "Verify session": "Vérifier la session", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Pour vérifier que vous pouvez faire confiance à cette session, vérifiez que la clé que vous voyez dans les paramètres de l’utilisateur sur cet appareil correspond à la clé ci-dessous :", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Pour vérifier que vous pouvez faire confiance à cette session, contactez son propriétaire en utilisant un autre moyen (par ex. en personne ou en l’appelant) et demandez-lui si la clé dans ses paramètres de l’utilisateur pour cette session correspond à la clé ci-dessous :", "Session name": "Nom de la session", "Session key": "Clé de la session", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Si elle correspond, cliquez sur le bouton Vérifier ci-dessous. Si ce n’est pas le cas, quelqu'un est en train d’intercepter cette session et vous devriez plutôt cliquer sur le bouton Ajouter à la liste noire.", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Vérifier cet utilisateur marquera sa session comme fiable, et marquera aussi votre session comme fiable pour lui.", "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.": "Vérifier cet appareil le marquera comme fiable. Faire confiance à cette appareil vous permettra à vous et aux autres utilisateurs d’être sereins lors de l’utilisation de messages chiffrés.", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Vérifier cet appareil le marquera comme fiable, et les utilisateurs qui ont vérifié avec vous feront confiance à cet appareil.", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "Vous avez ajouté une nouvelle session « %(displayName)s » qui demande les clés de chiffrement.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Votre session non vérifiée « %(displayName)s » demande des clés de chiffrement.", - "Loading session info...": "Chargement des informations de la session…", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Cela vous permettra de revenir sur votre compte après vous être déconnecté, et de vous connecter sur d’autres sessions.", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Vous avez placé les sessions non vérifiées sur liste noire ; pour leur envoyer des messages vous devez les vérifier.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Nous vous recommandons d’accomplir le processus de vérification pour chaque session afin de vérifier qu’elles correspondent à leur propriétaire légitime, mais vous pouvez renvoyer ce message sans vérifier si vous préférez.", - "Room contains unknown sessions": "Le salon contient des sessions inconnues", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "« %(RoomName)s » contient des sessions que vous n’avez jamais vues auparavant.", - "Unknown sessions": "Sessions inconnues", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Accédez à l’historique de vos messages sécurisés et à votre identité de signature croisée pour vérifier d’autres sessions en renseignant votre mot de passe.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Accédez à l’historique de vos messages sécurisés et à votre identité de signature croisée pour vérifier d’autres sessions en renseignant votre clé de récupération.", - "Message not sent due to unknown sessions being present": "Message non envoyé à cause de la présence de sessions inconnues", - "Show sessions, send anyway or cancel.": "Afficher les sessions, envoyer quand même ou annuler.", "Without completing security on this session, it won’t have access to encrypted messages.": "Sans compléter la sécurité sur cette session, elle n’aura pas accès aux messages chiffrés.", "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Modifier votre mot de passe réinitialisera toutes les clés de chiffrement de bout en bout sur toutes vos sessions, ce qui rendra l’historique de vos messages chiffrés illisible. Configurez la sauvegarde de clés ou exportez vos clés de salon depuis une autre session avant de réinitialiser votre mot de passe.", "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.": "Vous avez été déconnecté de toutes les sessions et vous ne recevrez plus de notifications. Pour réactiver les notifications, reconnectez-vous sur chaque appareil.", "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.": "Récupérez l’accès à votre compte et restaurez les clés de chiffrement dans cette session. Sans elles, vous ne pourrez pas lire tous vos messages chiffrés dans n’importe quelle session.", "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.": "Attention : Vos données personnelles (y compris les clés de chiffrement) seront stockées dans cette session. Effacez-les si vous n’utilisez plus cette session ou si vous voulez vous connecter à un autre compte.", - "Sender session information": "Informations de session de l’expéditeur", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Mettez à niveau cette session pour l’autoriser à vérifier d’autres sessions, ce qui leur permettra d’accéder aux messages chiffrés et de les marquer comme fiables pour les autres utilisateurs.", - "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Configurez le chiffrement sur cette session pour lui permettre de vérifier d’autres sessions, ce qui leur permettra d’accéder aux messages chiffrés et de les marquer comme fiables pour les autres utilisateurs.", - "This session can now verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Cette session peut à présent vérifier d’autres sessions, ce qui leur permettra d’accéder aux messages chiffrés et de les marquer comme fiables pour les autres utilisateurs.", "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.": "Si vous ne configurez pas la récupération de messages sécurisée, vous ne pourrez pas restaurer l’historique de vos messages chiffrés si vous vous déconnectez ou si vous utilisez une autre session.", "This session is encrypting history using the new recovery method.": "Cette session chiffre l’historique en utilisant la nouvelle méthode de récupération.", "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Cette session a détecté que votre mot de passe et votre clé de récupération pour les messages chiffrés ont été supprimés.", @@ -2112,28 +1913,21 @@ "You have not verified this user.": "Vous n’avez pas vérifié cet utilisateur.", "Recovery key mismatch": "La clé de récupération ne correspond pas", "Incorrect recovery passphrase": "Mot de passe de récupération incorrecte", - "Backup restored": "Sauvegarde restaurée", "Enter recovery passphrase": "Saisir le mot de passe de récupération", "Enter recovery key": "Saisir la clé de récupération", "Confirm your identity by entering your account password below.": "Confirmez votre identité en saisissant le mot de passe de votre compte ci-dessous.", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Gardez-en une copie en lieu sûr, comme un gestionnaire de mots de passe ou même un coffre.", "Your recovery key": "Votre clé de récupération", "Copy": "Copier", - "You can now verify your other devices, and other users to keep your chats safe.": "Vous pouvez à présent vérifier vos autres appareils et les autres utilisateurs afin que vos discussions restent sûres.", "Make a copy of your recovery key": "Faire une copie de votre clé de récupération", - "You're done!": "Vous avez terminé !", "Create key backup": "Créer une sauvegarde de clé", "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.": "Si vous l’avez fait accidentellement, vous pouvez configurer les messages sécurisés sur cette session ce qui re-chiffrera l’historique des messages de cette session avec une nouvelle méthode de récupération.", "How fast should messages be downloaded.": "À quelle fréquence les messages doivent être téléchargés.", - "of ": "sur ", "Message downloading sleep time(ms)": "Temps d’attente de téléchargement des messages (ms)", "Cancel entering passphrase?": "Annuler la saisie du mot de passe ?", - "If you cancel now, you won't complete your secret storage operation!": "Si vous annulez maintenant, vous ne terminerez pas votre opération du coffre secret !", "Indexed rooms:": "Salons indexés :", - "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s sur %(totalRooms)s", "If you cancel now, you won't complete verifying the other user.": "Si vous annuler maintenant, vous ne terminerez pas la vérification de l’autre utilisateur.", "If you cancel now, you won't complete verifying your other session.": "Si vous annulez maintenant, vous ne terminerez pas la vérification de votre autre session.", - "If you cancel now, you won't complete your secret storage operation.": "Si vous annulez maintenant, vous ne terminerez pas votre opération sur le coffre secret.", "Show typing notifications": "Afficher les notifications de saisie", "Reset cross-signing and secret storage": "Réinitialiser la signature croisée et le coffre secret", "Destroy cross-signing keys?": "Détruire les clés de signature croisée ?", @@ -2147,18 +1941,13 @@ "Not Trusted": "Non fiable", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) s’est connecté à une nouvelle session sans la vérifier :", "Ask this user to verify their session, or manually verify it below.": "Demandez à cet utilisateur de vérifier sa session, ou vérifiez-la manuellement ci-dessous.", - "Manually Verify": "Vérifier manuellement", "Verify by scanning": "Vérifier en scannant", - "The version of %(brand)s": "La version de %(brand)s", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Si vous utilisez %(brand)s sur un appareil où le toucher est le mécanisme primaire de saisie", "Whether you're using %(brand)s as an installed Progressive Web App": "Si vous utilisez %(brand)s en tant qu’application web progressive (PWA)", "Your user agent": "Votre agent utilisateur", - "The information being sent to us to help make %(brand)s better includes:": "Les informations qui nous sont envoyées et qui nous aident à améliorer %(brand)s comportent :", "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.": "La session que vous essayez de vérifier ne prend pas en charge les codes QR ou la vérification d’émojis, qui sont les méthodes prises en charge par %(brand)s. Essayez avec un autre client.", "You declined": "Vous avez refusé", "%(name)s declined": "%(name)s a refusé", - "accepting …": "nous acceptons…", - "declining …": "nous refusons…", "Your homeserver does not support cross-signing.": "Votre serveur d’accueil ne prend pas en charge la signature croisée.", "Homeserver feature support:": "Prise en charge de la fonctionnalité par le serveur d’accueil :", "exists": "existant", @@ -2182,7 +1971,6 @@ "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Pour signaler un problème de sécurité lié à Matrix, consultez la politique de divulgation de sécurité de Matrix.org.", "Mark all as read": "Tout marquer comme lu", "Not currently indexing messages for any room.": "N’indexe aucun message en ce moment.", - "Currently indexing: %(currentRoom)s.": "En ce moment, indexe : %(currentRoom)s.", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s sur %(totalRooms)s", "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s a ajouté les adresses alternatives %(addresses)s pour ce salon.", "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s a ajouté l’adresse alternative %(addresses)s pour ce salon.", @@ -2191,10 +1979,6 @@ "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s a modifié les adresses alternatives de ce salon.", "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s a modifié l’adresse principale et les adresses alternatives pour ce salon.", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Une erreur est survenue lors de la mise à jour des adresses alternatives du salon. Ce n’est peut-être pas permis par le serveur ou une défaillance temporaire est survenue.", - "Alternative addresses for this room:": "Adresses alternatives pour ce salon :", - "This room has no alternative addresses": "Ce salon n’a pas d’adresse alternative", - "New address (e.g. #foo:domain)": "Nouvelle adresse (par ex. #foo:domaine)", - "Local addresses (unmoderated content)": "Adresses locales (contenu non modéré)", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s a changé le nom du salon de %(oldRoomName)s en %(newRoomName)s.", "%(senderName)s changed the addresses for this room.": "%(senderName)s a changé les adresses de ce salon.", "Support adding custom themes": "Autoriser l’ajout de thèmes personnalisés", @@ -2203,8 +1987,6 @@ "Theme added!": "Thème ajouté !", "Custom theme URL": "URL personnalisée pour le thème", "Add theme": "Ajouter le thème", - "You don't have permission to delete the alias.": "Vous n'avez pas la permission de supprimer l'alias.", - "Review Sessions": "Vérifier les sessions", "Scroll to most recent messages": "Sauter aux messages les plus récents", "Local address": "Adresse locale", "Published Addresses": "Adresses publiées", @@ -2214,9 +1996,6 @@ "New published address (e.g. #alias:server)": "Nouvelles adresses publiées (par ex. #alias:serveur)", "Local Addresses": "Adresses locales", "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Définissez les adresses de ce salon pour que les utilisateurs puissent trouver ce salon avec votre serveur d’accueil (%(localDomain)s)", - "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "Ouvrez une session existante et utilisez-la pour vérifier celle-ci, ce qui lui permettra d’avoir accès aux messages chiffrés.", - "Waiting…": "Patientez…", - "If you can’t access one, ": "Si vous n’avez accès à aucune session, ", "Enter a server name": "Saisissez le nom d’un serveur", "Looks good": "Ça a l’air correct", "Can't find this server or its room list": "Impossible de trouver ce serveur ou sa liste de salons", @@ -2240,7 +2019,6 @@ "%(brand)s encountered an error during upload of:": "%(brand)s a rencontré une erreur pendant l’envoi de :", "Upload completed": "Envoi terminé", "Cancelled signature upload": "Envoi de signature annulé", - "Unabled to upload": "Envoi impossible", "Signature upload success": "Succès de l’envoi de signature", "Signature upload failed": "Échec de l’envoi de signature", "Navigation": "Navigation", @@ -2255,7 +2033,6 @@ "Toggle Bold": "(Dés)activer le gras", "Toggle Italics": "(Dés)activer l’italique", "Toggle Quote": "(Dés)activer la citation", - "Toggle Markdown": "(Dés)activer le Markdown", "New line": "Nouvelle ligne", "Navigate recent messages to edit": "Parcourir les messages récents pour éditer", "Jump to start/end of the composer": "Sauter au début/à la fin du compositeur", @@ -2289,12 +2066,7 @@ "Previous/next unread room or DM": "Salon ou message direct non lu précédent/suivant", "Previous/next room or DM": "Salon ou message direct précédent/suivant", "Toggle right panel": "Afficher/masquer le panneau de droite", - "Secret Storage key format:": "Format de clé du coffre secret :", - "outdated": "obsolète", - "up to date": "à jour", - "Unverified login. Was this you?": "Connexion non vérifiée. Était-ce vous ?", "Manually verify all remote sessions": "Vérifier manuellement toutes les sessions à distance", - "Update your secure storage": "Mettre à jour votre coffre sécurisé", "Self signing private key:": "Clé privée d’auto-signature :", "cached locally": "mise en cache localement", "not found locally": "non trouvée localement", @@ -2362,32 +2134,20 @@ "Failed to set topic": "Échec du changement de sujet", "Command failed": "La commande a échoué", "Could not find user in room": "Impossible de trouver l’utilisateur dans le salon", - "Use an existing session to verify this one, granting it access to encrypted messages.": "Utilisez une session existante pour vérifier celle-ci, ce qui lui permettra d’avoir accès aux messages chiffrés.", - "Use your other device to continue…": "Utilisez votre autre appareil pour continuer…", "Syncing...": "Synchronisation…", "Signing In...": "Authentification…", "If you've joined lots of rooms, this might take a while": "Si vous avez rejoint beaucoup de salons, cela peut prendre du temps", "If you cancel now, you won't complete your operation.": "Si vous annulez maintenant, vous ne pourrez par terminer votre opération.", - "Enable cross-signing to verify per-user instead of per-session": "Activez la signature croisée pour vérifier par utilisateur plutôt que par session", - "Keep recovery passphrase in memory for this session": "Conserver la phrase secrète de récupération en mémoire pour cette session", "Verify other session": "Vérifier une autre session", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Impossible d’accéder au coffre secret. Vérifiez que vous avez renseigné la bonne phrase secrète de récupération.", - "Warning: You should only do this on a trusted computer.": "Attention : Vous devriez faire cela depuis un ordinateur fiable.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Accédez à l’historique des messages sécurisés et à votre identité de signature croisée en vérifiant d’autres sessions en renseignant votre phrase secrète de récupération.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Si vous avez oublié votre phrase secrète de récupération, vous pouvez utiliser votre clé de récupération ou définir de nouvelles options de récupération.", "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "La sauvegarde n’a pas pu être déchiffrée avec cette clé de récupération : vérifiez que vous avez renseigné la bonne clé de récupération.", "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "La sauvegarde n’a pas pu être déchiffrée avec cette phrase secrète de récupération : vérifiez que vous avez renseigné la bonne phrase secrète de récupération.", - "If you can’t access one, ": "Si vous ne pouvez pas, ", "Great! This recovery passphrase looks strong enough.": "Super ! Cette phrase secrète de récupération a l’air suffisamment robuste.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Définissez une phrase secrète de récupération pour sécuriser les informations chiffrées et les récupérer si vous vous déconnectez. Elle devrait être différente du mot de passe de votre compte :", "Enter a recovery passphrase": "Saisir une phrase secrète de récupération", - "Back up encrypted message keys": "Sauvegarder les clés des messages chiffrés", "Enter your recovery passphrase a second time to confirm it.": "Saisissez à nouveau votre phrase secrète de récupération pour la confirmer.", "Confirm your recovery passphrase": "Confirmer votre phrase secrète de récupération", "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Votre clé de récupération est un filet de sécurité : vous pouvez l’utiliser pour récupérer l’accès à vos messages chiffrés si vous oubliez votre phrase secrète de récupération.", - "Confirm recovery passphrase": "Confirmer la phrase secrète de récupération", "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Nous conserverons une copie chiffrée de vos clés sur notre serveur. Protégez votre sauvegarde avec une phrase secrète de récupération.", - "Enter a recovery passphrase...": "Saisir une phrase secrète de récupération…", "Please enter your recovery passphrase a second time to confirm.": "Saisissez à nouveau votre phrase secrète de récupération pour la confirmer.", "Repeat your recovery passphrase...": "Répéter votre phrase secrète de récupération…", "Secure your backup with a recovery passphrase": "Protégez votre sauvegarde avec une phrase secrète de récupération", @@ -2403,13 +2163,9 @@ "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Confirmez votre identité en vérifiant cette connexion depuis une de vos autres sessions, cela lui permettra d’avoir accès aux messages chiffrés.", "This requires the latest %(brand)s on your other devices:": "Ceci nécessite la dernière version de %(brand)s sur vos autres appareils :", "or another cross-signing capable Matrix client": "ou un autre client Matrix compatible avec la signature croisée", - "Use Recovery Passphrase or Key": "Utiliser la phrase secrète ou la clé de récupération", "Where you’re logged in": "Où vous vous êtes connecté", "Manage the names of and sign out of your sessions below or verify them in your User Profile.": "Gérez les noms et déconnectez-vous de vos sessions ci-dessous ou vérifiez-les dans votre profil utilisateur.", "Review where you’re logged in": "Vérifier où vous vous êtes connecté", - "Verify your other sessions": "Vérifier vos autres sessions", - "Unverified sessions currently have access to your account & messages": "Des sessions non vérifiées ont accès à votre compte et messages", - "Verify the identity of the new login accessing your account & messages": "Vérifiez l'identité de la nouvelle connexion accédant à votre compte et messages", "New login. Was this you?": "Nouvelle connexion. Était-ce vous ?", "Verify all your sessions to ensure your account & messages are safe": "Vérifiez toutes vos sessions pour vous assurer que votre compte et messages sont sécurisés", "Verify the new login accessing your account: %(name)s": "Vérifiez la nouvelle connexion accédant à votre compte : %(name)s", @@ -2436,17 +2192,14 @@ "Dismiss read marker and jump to bottom": "Ignorer le signet de lecture et aller en bas", "Jump to oldest unread message": "Aller au plus vieux message non lu", "Upload a file": "Envoyer un fichier", - "Use IRC layout": "Utiliser la mise en page d’IRC", "IRC display name width": "Largeur du nom affiché IRC", "Create room": "Créer un salon", "Font scaling": "Mise à l’échelle de la police", "Font size": "Taille de la police", - "Custom font size": "Taille personnalisée de la police", "Size must be a number": "La taille doit être un nombre", "Custom font size can only be between %(min)s pt and %(max)s pt": "La taille de police personnalisée doit être comprise entre %(min)s pt et %(max)s pt", "Use between %(min)s pt and %(max)s pt": "Utiliser entre %(min)s pt et %(max)s pt", "Appearance": "Apparence", - "Use the improved room list (in development - refresh to apply changes)": "Utiliser la liste de salons améliorée (en développement − actualisez pour appliquer les changements)", "Room name or address": "Nom ou adresse du salon", "Joins room with given address": "Rejoint le salon à l’adresse donnée", "Unrecognised room address:": "Adresse de salon non reconnue :", @@ -2484,18 +2237,13 @@ "New version available. Update now.": "Nouvelle version disponible. Faire la mise à niveau maintenant.", "Emoji picker": "Sélecteur d’émojis", "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "L’administrateur de votre serveur a désactivé le chiffrement de bout en bout par défaut dans les salons privés et les messages directs.", - "Show %(n)s more": "En montrer %(n)s de plus", "People": "Personnes", "Switch to light mode": "Passer au mode clair", "Switch to dark mode": "Passer au mode sombre", "Switch theme": "Changer le thème", "Security & privacy": "Sécurité & vie privée", "All settings": "Tous les paramètres", - "Archived rooms": "Salons archivés", "Feedback": "Commentaire", - "Account settings": "Paramètres du compte", - "sent an image.": "a envoyé une image.", - "You: %(message)s": "Vous : %(message)s", "No recently visited rooms": "Aucun salon visité récemment", "Sort by": "Trier par", "Unread rooms": "Salons non lus", @@ -2513,23 +2261,10 @@ "Dark": "Sombre", "Customise your appearance": "Personnalisez l’apparence", "Appearance Settings only affect this %(brand)s session.": "Les paramètres d’apparence affecteront uniquement cette session de %(brand)s.", - "Recovery Key": "Clé de récupération", - "This isn't the recovery key for your account": "Ce n’est pas la clé de récupération pour votre compte", - "This isn't a valid recovery key": "Ce n’est pas une clé de récupération valide", "Looks good!": "Ça a l’air correct !", "Use Recovery Key or Passphrase": "Utiliser la clé ou la phrase secrète de récupération", "Use Recovery Key": "Utiliser la clé de récupération", - "Enter your Recovery Key or enter a Recovery Passphrase to continue.": "Saisissez votre clé de récupération ou une phrase secrète de récupération pour continuer.", - "Enter your Recovery Key to continue.": "Saisissez votre clé de récupération pour continuer.", - "Upgrade your Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you'll need it to unlock your data.": "Mettez à niveau votre clé de récupération pour stocker vos clés et secrets de chiffrement avec les données de votre compte. Si vous n’avez plus accès à cette connexion, vous en aurez besoin pour déverrouiller vos données.", - "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.": "Stockez votre clé de récupération dans un endroit sûr, elle peut être utilisée pour déverrouiller vos messages et vos données chiffrés.", - "Create a Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you’ll need it to unlock your data.": "Créez une clé de récupération pour stocker vos clé et secrets de chiffrement avec les données de votre compte. Si vous n’avez plus accès à cette connexion, vous en aurez besoin pour déverrouiller vos données.", - "Create a Recovery Key": "Créer une clé de récupération", - "Upgrade your Recovery Key": "Mettre à jour votre clé de récupération", - "Store your Recovery Key": "Stocker votre clé de récupération", - "Use the improved room list (in development - will refresh to apply changes)": "Utiliser la liste de salons améliorée (en développement − actualisera pour appliquer les changements)", "Use the improved room list (will refresh to apply changes)": "Utiliser la liste de salons améliorée (actualisera pour appliquer les changements)", - "Enable IRC layout option in the appearance tab": "Activer l’option de mise en page IRC dans l’onglet d’apparence", "Use custom size": "Utiliser une taille personnalisée", "Hey you. You're the best!": "Eh vous. Vous êtes les meilleurs !", "Message layout": "Mise en page des messages", diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 27f5b922e3..4d8ac49349 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -11,11 +11,6 @@ "You cannot place a call with yourself.": "Non podes facer unha chamada a ti mesma.", "Warning!": "Aviso!", "Call Failed": "Fallou a chamada", - "Review Devices": "Revisar dispositivos", - "Call Anyway": "Chamar igualmente", - "Answer Anyway": "Responder igualmente", - "Call": "Chamar", - "Answer": "Resposta", "Call Timeout": "Tempo de resposta de chamada", "Upload Failed": "Fallou o envío", "Sun": "Dom", @@ -49,7 +44,6 @@ "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?", "Add rooms to the community": "Engadir salas á comunidade", - "Room name or alias": "Nome da sala ou alcume", "Add to community": "Engadir á comunidade", "Failed to invite the following users to %(groupId)s:": "Fallo ao convidar ás seguintes usuarias a %(groupId)s:", "Failed to invite users to community": "Houbo un fallo convidando usuarias á comunidade", @@ -64,7 +58,6 @@ "Restricted": "Restrinxido", "Moderator": "Moderador", "Admin": "Administrador", - "Start a chat": "Iniciar unha conversa", "Operation failed": "Fallou a operación", "Failed to invite": "Fallou o convite", "Failed to invite the following users to the %(roomName)s room:": "Houbo un fallo convidando as seguintes usuarias á sala %(roomName)s:", @@ -82,7 +75,6 @@ "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.", - "Unrecognised room alias:": "Alcumes de sala non recoñecidos:", "Ignored user": "Usuaria ignorada", "You are now ignoring %(userId)s": "Agora está a ignorar %(userId)s", "Unignored user": "Usuarias non ignoradas", @@ -132,7 +124,6 @@ "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s eliminado por %(senderName)s", "Failure to create room": "Fallou a creación da sala", "Server may be unavailable, overloaded, or you hit a bug.": "O servidor podería non estar dispoñible, con sobrecarga ou ter un fallo.", - "Send anyway": "Enviar de todos os xeitos", "Send": "Enviar", "Unnamed Room": "Sala sen nome", "Your browser does not support the required cryptography extensions": "O seu navegador non soporta as extensións de criptografía necesarias", @@ -140,7 +131,6 @@ "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", - "Use compact timeline layout": "Utilizar a disposición compacta da liña temporal", "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", @@ -176,11 +166,8 @@ "Confirm password": "Confirme o contrasinal", "Change Password": "Cambiar contrasinal", "Authentication": "Autenticación", - "Device ID": "ID de dispositivo", "Last seen": "Visto por última vez", "Failed to set display name": "Fallo ao establecer o nome público", - "Disable Notifications": "Desactivar notificacións", - "Enable Notifications": "Activar ass notificacións", "%(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", @@ -196,8 +183,6 @@ "%(senderName)s uploaded a file": "%(senderName)s subiu un ficheiro", "Options": "Axustes", "Please select the destination room for this message": "Escolla por favor a sala de destino para esta mensaxe", - "Blacklisted": "Omitidos", - "device id: ": "id dispositivo: ", "Disinvite": "Retirar convite", "Kick": "Expulsar", "Disinvite this user?": "Retirar convite a esta usuaria?", @@ -209,7 +194,6 @@ "Ban this user?": "¿Bloquear a esta usuaria?", "Failed to ban user": "Fallo ao bloquear usuaria", "Failed to mute user": "Fallo ó silenciar usuaria", - "Failed to toggle moderator status": "Fallo ao mudar a estado de moderador", "Failed to change power level": "Fallo ao cambiar o nivel de permisos", "Are you sure?": "Está segura?", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Non poderá desfacer este cambio xa que lle estará promocionando e outorgándolle a outra persoa os mesmos permisos que os seus.", @@ -218,12 +202,8 @@ "Jump to read receipt": "Ir ao resgardo de lectura", "Mention": "Mención", "Invite": "Convidar", - "User Options": "Axustes de usuaria", - "Direct chats": "Conversa directa", "Unmute": "Non acalar", "Mute": "Acalar", - "Revoke Moderator": "Quitar Moderador", - "Make Moderator": "Facer Moderador", "Admin Tools": "Ferramentas de administración", "and %(count)s others...|other": "e %(count)s outras...", "and %(count)s others...|one": "e outra máis...", @@ -236,9 +216,7 @@ "Video call": "Chamada de vídeo", "Upload file": "Subir ficheiro", "Send an encrypted reply…": "Enviar unha resposta cifrada…", - "Send a reply (unencrypted)…": "Enviar unha resposta (non cifrada)…", "Send an encrypted message…": "Enviar unha mensaxe cifrada…", - "Send a message (unencrypted)…": "Enviar unha mensaxe (non cifrada)…", "You do not have permission to post to this room": "Non ten permiso para comentar nesta sala", "Server error": "Fallo no servidor", "Server unavailable, overloaded, or something else went wrong.": "Servidor non dispoñible, sobrecargado, ou outra cousa puido fallar.", @@ -313,10 +291,7 @@ "Jump to first unread message.": "Ir a primeira mensaxe non lida.", "Close": "Pechar", "not specified": "non indicado", - "Remote addresses for this room:": "Enderezos remotos para esta sala:", - "Local addresses for this room:": "O enderezo local para esta sala:", "This room has no local addresses": "Esta sala non ten enderezos locais", - "New address (e.g. #foo:%(localDomain)s)": "Novos enderezos (ex. #foo:%(localDomain)s)", "Invalid community ID": "ID da comunidade non válido", "'%(groupId)s' is not a valid community ID": "'%(groupId)s' non é un ID de comunidade válido", "New community ID (e.g. +foo:%(localDomain)s)": "Novo ID da comunidade (ex. +foo:%(localDomain)s)", @@ -339,12 +314,8 @@ "Failed to copy": "Fallo ao copiar", "Add an Integration": "Engadir unha integración", "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?": "Vai ser redirixido a unha web de terceiros para poder autenticar a súa conta e así utilizar %(integrationsUrl)s. Quere continuar?", - "Removed or unknown message type": "Tipo de mensaxe descoñecida ou eliminada", - "Message removed by %(userId)s": "Mensaxe eliminada por %(userId)s", - "Message removed": "Mensaxe eliminada", "Custom Server Options": "Opcións personalizadas do servidor", "Dismiss": "Rexeitar", - "To continue, please enter your password.": "Para continuar, por favor introduza o seu contrasinal.", "An email has been sent to %(emailAddress)s": "Enviouse un correo a %(emailAddress)s", "Please check your email to continue registration.": "Comprobe o seu correo para continuar co rexistro.", "Token incorrect": "Testemuño incorrecto", @@ -384,14 +355,9 @@ "Minimize apps": "Minimizar apps", "Edit": "Editar", "Create new room": "Crear unha nova sala", - "Unblacklist": "Quitar da lista negra", - "Blacklist": "Por na lista negra", - "Unverify": "Retirar verificación", - "Verify...": "Verificar...", "No results": "Sen resultados", "Communities": "Comunidades", "Home": "Inicio", - "Could not connect to the integration server": "Non se puido conectar ao servidor de integración", "Manage Integrations": "Xestionar integracións", "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s uníronse %(count)s veces", @@ -473,13 +439,8 @@ "Unknown error": "Fallo descoñecido", "Incorrect password": "Contrasinal incorrecto", "Deactivate Account": "Desactivar conta", - "I verify that the keys match": "Certifico que coinciden as chaves", "An error has occurred.": "Algo fallou.", "OK": "OK", - "Start verification": "Iniciar verificación", - "Share without verifying": "Compartir sen verificar", - "Ignore request": "Ignorar petición", - "Encryption key request": "Petición de chave de cifrado", "Unable to restore session": "Non se puido restaurar a sesión", "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.": "Se anteriormente utilizaches unha versión máis recente de %(brand)s, a túa sesión podería non ser compatible con esta versión. Pecha esta ventá e volve á versión máis recente.", "Invalid Email Address": "Enderezo de correo non válido", @@ -500,7 +461,6 @@ "Private Chat": "Conversa privada", "Public Chat": "Conversa pública", "Custom": "Personalizada", - "Alias (optional)": "Alias (opcional)", "Name": "Nome", "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", @@ -553,7 +513,6 @@ "Create a new community": "Crear unha nova comunidade", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Crea unha comunidade para agrupar usuarias e salas! Pon unha páxina de inicio personalizada para destacar o teu lugar no universo Matrix.", "You have no visible notifications": "Non ten notificacións visibles", - "Scroll to bottom of page": "Desprácese ate o final da páxina", "%(count)s of your messages have not been sent.|other": "Algunha das súas mensaxes non foron enviadas.", "%(count)s of your messages have not been sent.|one": "A súa mensaxe non foi enviada.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Reenviar todo ou bencancelar todo. Tamén pode seleccionar mensaxes individuais para reenviar ou cancelar.", @@ -568,7 +527,6 @@ "Search failed": "Fallou a busca", "Server may be unavailable, overloaded, or search timed out :(": "O servidor podería non estar dispoñible, sobrecargado, ou caducou a busca :(", "No more results": "Sen máis resultados", - "Unknown room %(roomId)s": "Sala descoñecida %(roomId)s", "Room": "Sala", "Failed to reject invite": "Fallo ao rexeitar o convite", "Fill screen": "Encher pantalla", @@ -582,8 +540,6 @@ "Uploading %(filename)s and %(count)s others|other": "Subindo %(filename)s e %(count)s máis", "Uploading %(filename)s and %(count)s others|zero": "Subindo %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Subindo %(filename)s e %(count)s máis", - "Light theme": "Decorado claro", - "Dark theme": "Decorado escuro", "Sign out": "Desconectar", "Failed to change password. Is your password correct?": "Fallo ao cambiar o contrasinal. É correcto o contrasinal?", "Success": "Parabéns", @@ -640,7 +596,6 @@ "Bans user with given id": "Prohibe a usuaria co ID indicado", "Define the power level of a user": "Define o nivel de permisos de unha usuaria", "Invites user with given id to current room": "Convida a usuaria co id proporcionado a sala actual", - "Joins room with given alias": "Únese a sala co alias proporcionado", "Kicks user with given id": "Expulsa usuaria co id proporcionado", "Changes your display nickname": "Cambia o alcume mostrado", "Searches DuckDuckGo for results": "Buscar en DuckDuckGo por resultados", @@ -652,21 +607,7 @@ "Notify the whole room": "Notificar a toda a sala", "Room Notification": "Notificación da sala", "Users": "Usuarias", - "unknown device": "dispositivo descoñecido", - "NOT verified": "Non validado", - "verified": "validado", - "Verification": "Validación", - "Ed25519 fingerprint": "pegada Ed25519", - "User ID": "ID de usuaria", - "Curve25519 identity key": "Chave de identidade Curve25519", - "none": "nada", - "Claimed Ed25519 fingerprint key": "Chave de pegada pedida Ed25519", - "Algorithm": "Algoritmo", - "unencrypted": "non cifrado", - "Decryption error": "Fallo ao descifrar", "Session ID": "ID de sesión", - "End-to-end encryption information": "Información do cifrado extremo-a-extremo", - "Event information": "Información do evento", "Passphrases must match": "As frases de paso deben coincidir", "Passphrase must not be empty": "A frase de paso non pode quedar baldeira", "Export room keys": "Exportar chaves da sala", @@ -680,7 +621,7 @@ "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "O ficheiro exportado estará protexido con unha frase de paso. Debe introducir aquí esa frase de paso para descifrar o ficheiro.", "File to import": "Ficheiro a importar", "Import": "Importar", - "The information being sent to us to help make %(brand)s better includes:": "A información enviada a %(brand)s para axudarnos a mellorar inclúe:", + "The information being sent to us to help make %(brand)s better includes:": "A información que nos envías para mellorar %(brand)s inclúe:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Se esta páxina inclúe información identificable como ID de grupo, usuaria ou sala, estes datos son eliminados antes de ser enviados ó servidor.", "The platform you're on": "A plataforma na que está", "The version of %(brand)s": "A versión de %(brand)s", @@ -688,7 +629,6 @@ "Which officially provided instance you are using, if any": "Se a houbese, que instancia oficial está a utilizar", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Se utiliza o modo Richtext ou non do editor de texto enriquecido", "Your homeserver's URL": "O URL do seu servidor de inicio", - "Your identity server's URL": "O URL da súa identidade no servidor", "In reply to ": "En resposta a ", "This room is not public. You will not be able to rejoin without an invite.": "Esta sala non é pública. Non poderá volver a ela sen un convite.", "This room is not showing flair for any communities": "Esta sala non mostra popularidade para as comunidades", @@ -721,7 +661,6 @@ "Who can join this community?": "Quen pode unirse a esta comunidade?", "Everyone": "Todo o mundo", "Fetching third party location failed": "Fallo ao obter a localización de terceiros", - "A new version of %(brand)s is available.": "Está dispoñible unha nova versión de %(brand)s.", "Send Account Data": "Enviar datos da conta", "All notifications are currently disabled for all targets.": "Todas as notificacións están desactivadas para todos os destinos.", "Uploading report": "Informe da subida", @@ -738,8 +677,6 @@ "Send Custom Event": "Enviar evento personalizado", "Advanced notification settings": "Axustes avanzados de notificación", "Failed to send logs: ": "Fallo ao enviar os informes: ", - "delete the alias.": "borrar alcume.", - "To return to your account in future you need to set a password": "Para volver a súa conta no futuro debe establecer un contrasinal>/u>", "Forget": "Esquecer", "You cannot delete this image. (%(code)s)": "Non pode eliminar esta imaxe. (%(code)s)", "Cancel Sending": "Cancelar o envío", @@ -765,7 +702,6 @@ "Resend": "Volver a enviar", "Files": "Ficheiros", "Collecting app version information": "Obtendo información sobre a versión da app", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Eliminar o alcume da sala %(alias)s e borrar %(name)s do directorio?", "Keywords": "Palabras chave", "Enable notifications for this account": "Activar notificacións para esta conta", "Invite to this community": "Convidar a esta comunidade", @@ -822,7 +758,6 @@ "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.": "Os informes de depuración conteñen datos de utilización da aplicación como o teu nome de usuaria, os IDs ou alias de salas e grupos que visitachese os nomes de usuaria doutras usuarias. Non conteñen mensaxes.", "Unhide Preview": "Desagochar a vista previa", "Unable to join network": "Non se puido conectar ca rede", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Pode que os configurases nun cliente diferente de %(brand)s. Non podes establecelos desde %(brand)s pero aínda así aplicaranse", "Sorry, your browser is not able to run %(brand)s.": "Desculpe, o seu navegador non pode executar %(brand)s.", "Uploaded on %(date)s by %(user)s": "Subido a %(date)s por %(user)s", "Messages in group chats": "Mensaxes en grupos de chat", @@ -847,10 +782,8 @@ "Thank you!": "Grazas!", "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!": "Co teu navegador actual a aparencia e uso da aplicación poderían estar totalmente falseadas, e algunhas características poderían non funcionar. Se queres podes continuar, pero debes ser consciente de que pode haber fallos!", "Checking for an update...": "Comprobando as actualizacións...", - "There are advanced notifications which are not shown here": "Existen notificacións avanzadas que non se mostran aquí", "Every page you use in the app": "Cada páxina que use na aplicación", "e.g. ": "p.ex. ", - "Your User Agent": "Axente de usuario", "Your device resolution": "Resolución do dispositivo", "Missing roomId.": "Falta o ID da sala.", "Always show encryption icons": "Mostra sempre iconas de cifrado", @@ -868,9 +801,6 @@ "Share Link to User": "Compartir a ligazón coa usuaria", "Share room": "Compartir sala", "Muted Users": "Usuarias silenciadas", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Axuda a mellorar %(brand)s enviando os datos anónimos de uso. Usaremos unha cookie (le aquí a nosa Política de Cookies).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Axuda a mellorar %(brand)s enviando datos anónimos de uso. Esto usará unha cookie.", - "Yes, I want to help!": "Si, quero axudar!", "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:", @@ -911,9 +841,6 @@ "Please contact your service administrator to continue using the service.": "Por favor contacte coa administración do servizo para seguir utilizando o servizo.", "This homeserver has hit its Monthly Active User limit.": "Este servidor acadou o límite mensual de usuarias activas.", "This homeserver has exceeded one of its resource limits.": "Este servidor excedeu un dos seus límites de recursos.", - "Please contact your service administrator to get this limit increased.": "Por favor contacte coa administración do servizo para incrementar este límite.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Este servidor acadou o Límite Mensual de usuarias activas polo que algunhas usuarias non poderán conectar.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Este servidor excedeu un dos límites de recursos polo que algunhas usuarias no poderán conectar.", "Failed to remove widget": "Fallo ao eliminar o widget", "An error ocurred whilst trying to remove the widget from the room": "Algo fallou mentras se intentaba eliminar o widget da sala", "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.": "A súa mensaxe non foi enviada porque este servidor acadou o Límite Mensual de Usuaria Activa. Por favor contacte coa administración do servizo para continuar utilizando o servizo.", @@ -931,12 +858,10 @@ "Confirm adding phone number": "Confirma a adición do teléfono", "Click the button below to confirm adding this phone number.": "Preme no botón inferior para confirmar que engades este número.", "Add Phone Number": "Engadir novo Número", - "The version of %(brand)s": "A versión de %(brand)s", "Whether or not you're logged in (we don't record your username)": "Se estás conectada ou non (non rexistramos o teu nome de usuaria)", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Se estás conectada utilizando %(brand)s nun dispositivo maiormente táctil", "Whether you're using %(brand)s as an installed Progressive Web App": "Se estás a usar %(brand)s como unha Progressive Web App instalada", "Your user agent": "User Agent do navegador", - "The information being sent to us to help make %(brand)s better includes:": "A información que nos envías para mellorar %(brand)s inclúe:", "Please install Chrome, Firefox, or Safari for the best experience.": "Instala Chrome, Firefox, ou Safari para ter unha mellor experiencia.", "Sign In or Create Account": "Conéctate ou Crea unha Conta", "Sign In": "Conectar", @@ -946,7 +871,6 @@ "Sign Up": "Rexistro", "Sign in with single sign-on": "Conectar usando Single Sign On", "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "O eliminación das chaves de sinatura cruzada é permanente. Calquera a quen verificases con elas verá alertas de seguridade. Seguramente non queres facer esto, a menos que perdeses todos os dispositivos nos que podías asinar.", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Usaches anteriormente unha versión máis recente de %(brand)s en %(host)s. Para usar esta versión de novo con cifrado E2E, tes que desconectar e conectar outra vez. ", "Confirm your account deactivation by using Single Sign On to prove your identity.": "Confirma a desactivación da túa conta usando Single Sign On para probar a túa identidade.", "To continue, use Single Sign On to prove your identity.": "Para continuar, usa Single Sign On para probar a túa identidade.", "Are you sure you want to sign out?": "Tes a certeza de querer desconectar?", @@ -964,8 +888,6 @@ "You cannot sign in to your account. Please contact your homeserver admin for more information.": "Non podes conectar a conta. Contacta coa administración do teu servidor para máis información.", "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.": "Aviso: os teus datos personais (incluíndo chaves de cifrado) aínda están gardadas nesta sesión. Pechaa se remataches de usar esta sesión, ou se quere conectar con outra conta.", "Unable to load! Check your network connectivity and try again.": "Non cargou! Comproba a conexión á rede e volta a intentalo.", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Hai sesións descoñecidas nesta sala: se continúas sen verificalas será posible para alguén fisgar na túa chamada.", - "Review Sessions": "Revisar Sesións", "Call failed due to misconfigured server": "Fallou a chamada porque o servidor está mal configurado", "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Contacta coa administración do teu servidor (%(homeserverDomain)s) para configurar un servidor TURN para que as chamadas funcionen de xeito fiable.", "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.": "De xeito alternativo, podes intentar usar o servidor público turn.matrix.org, pero non é tan fiable, e compartirá o teu enderezo IP con ese servidor. Podes xestionar esto en Axustes.", @@ -1254,11 +1176,8 @@ "Theme": "Decorado", "Language and region": "Idioma e rexión", "Your theme": "O teu decorado", - "Use the improved room list (in development - refresh to apply changes)": "Usar a lista mellorada de salas (en desenvolvemento - actualiza para aplicar)", "Support adding custom themes": "Permitir engadir decorados personalizados", - "Use IRC layout": "Usar disposición IRC", "Font size": "Tamaño da letra", - "Custom font size": "Tamaño letra personalizado", "Enable Emoji suggestions while typing": "Activar suxestión de Emoji ao escribir", "Show a placeholder for removed messages": "Resaltar o lugar das mensaxes eliminadas", "Show avatar changes": "Mostrar cambios de avatar", @@ -1285,7 +1204,6 @@ "Send read receipts for messages (requires compatible homeserver to disable)": "Enviar resgardos de lectura para as mensaxes (require servidor compatible para desactivar)", "Show previews/thumbnails for images": "Mostrar miniaturas/vista previa das imaxes", "Enable message search in encrypted rooms": "Activar a busca de mensaxes en salas cifradas", - "Keep recovery passphrase in memory for this session": "Manter a frase de paso de recuperación en memoria para esta sesión", "How fast should messages be downloaded.": "Velocidade á que deberían descargarse as mensaxes.", "Manually verify all remote sessions": "Verificar manualmente todas as sesións remotas", "IRC display name width": "Ancho do nome mostrado de IRC", @@ -1435,7 +1353,6 @@ "Securely cache encrypted messages locally for them to appear in search results.": "Gardar de xeito seguro mensaxes cifradas na caché local para que aparezan nos resultados de buscas.", "Enable": "Activar", "%(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.": "Falta un compoñente de %(brand)s requerido para almacenar localmente mensaxes cifradas na caché. Se queres experimentar con esta función, compila unha versión personalizada de %(brand)s Desktop cos compoñentes de busca engadidos.", - "%(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 non pode gardar de xeito seguro localmente as mensaxes cifradas se se executa nun navegador. Usa %(brand)s Desktop para que as mensaxes cifradas aparezan nas buscas.", "Connecting to integration manager...": "Conectando co xestor de integración...", "Cannot connect to integration manager": "Non se puido conectar co xestor de intregración", "The integration manager is offline or it cannot reach your homeserver.": "O xestor de integración non está en liña ou non é accesible desde o teu servidor.", @@ -1592,8 +1509,6 @@ "Developer options": "Opcións desenvolvemento", "Open Devtools": "Open Devtools", "This room is bridging messages to the following platforms. Learn more.": "Esta sala está enviando mensaxes ás seguintes plataformas. Coñece máis.", - "sent an image.": "enviou unha imaxe.", - "You: %(message)s": "Ti: %(message)s", "This room isn’t bridging messages to any platforms. Learn more.": "Esta sala non está enviando mensaxes a outras plataformas. Saber máis.", "Bridges": "Pontes", "Uploaded sound": "Audio subido", @@ -1781,7 +1696,6 @@ "Trusted": "Confiable", "Not trusted": "Non confiable", "%(count)s verified sessions|other": "%(count)s sesións verificadas", - "Use the improved room list (in development - will refresh to apply changes)": "Usar a lista de salas mellorada (desenvolvemento - actualizar para aplicar)", "%(count)s verified sessions|one": "1 sesión verificada", "Hide verified sessions": "Agochar sesións verificadas", "%(count)s sessions|other": "%(count)s sesións", @@ -1963,7 +1877,6 @@ "Verification Requests": "Solicitudes de Verificación", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verifica esta usuaria para marcala como confiable. Ao confiar nas usuarias proporcionache tranquilidade extra cando usas cifrado de extremo-a-extremo.", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Ao verificar esta usuaria marcarás a súa sesión como confiable, e tamén marcará a túa sesión como confiable para elas.", - "Enable IRC layout option in the appearance tab": "Activar opción de disposición IRC na pestana de aparencia", "Use custom size": "Usar tamaño personalizado", "Use a system font": "Usar tipo de letra do sistema", "System font name": "Nome da letra do sistema", @@ -2085,15 +1998,9 @@ "Deny": "Denegar", "Enter recovery passphrase": "Escribe a frase de paso de recuperación", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Non se pode acceder ao almacenaxe segredo. Verifica que escribiches a frase de paso correta.", - "Warning: You should only do this on a trusted computer.": "Aviso: Só deberías facer esto nunha computadora de confianza.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Accede ó teu historial seguro de mensaxes e á túa identidade de sinatura-cruzada para verificar outras sesión escribindo a frase de paso de recuperación.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Se esqueceches a túa frase de paso de recuperación podes usar a chave de recuperación ou establecer novas opcións de recuperación.", "Enter recovery key": "Escribe a chave de recuperación", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Non se accedeu ó almacenaxe segredo. Verifica que escribiches a chave de recuperación correcta.", "This looks like a valid recovery key!": "Semella unha chave de recuperación válida!", "Not a valid recovery key": "Non é unha chave de recuperación válida", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Accede ó teu historial de mensaxes seguras e á identidade de sinatura-cruzada para verificar outras sesión escribindo a achave de recuperación.", - "If you've forgotten your recovery key you can .": "Se esqueceches a chave de recuperación podes .", "Restoring keys from backup": "Restablecendo chaves desde a copia", "Fetching keys from server...": "Obtendo chaves desde o servidor...", "%(completed)s of %(total)s keys restored": "%(completed)s de %(total)s chaves restablecidas", @@ -2200,9 +2107,7 @@ "Switch theme": "Cambiar decorado", "Security & privacy": "Seguridade & privacidade", "All settings": "Todos os axustes", - "Archived rooms": "Salas arquivadas", "Feedback": "Comenta", - "Account settings": "Axustes da conta", "Could not load user profile": "Non se cargou o perfil da usuaria", "Verify this login": "Verifcar esta conexión", "Session verified": "Sesión verificada", @@ -2263,10 +2168,8 @@ "Restore": "Restablecer", "You'll need to authenticate with the server to confirm the upgrade.": "Debes autenticarte no servidor para confirmar a actualización.", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Actualiza esta sesión para permitirlle que verifique as outras sesións, outorgándolles acceso ás mensaxes cifradas e marcándoas como confiables para outras usuarias.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Establece unha frase de paso de recuperación para asegurar a información cifrada e recuperala se te desconectas. Esta frase debería ser diferente ó contrasinal da conta:", "Enter a recovery passphrase": "Escribe a frase de paso de recuperación", "Great! This recovery passphrase looks strong enough.": "Ben! Esta frase de paso de recuperación semella ser forte.", - "Back up encrypted message keys": "Fai copia das chaves das mensaxes cifradas", "Set up with a recovery key": "Configura cunha chave de recuperación", "That matches!": "Concorda!", "Use a different passphrase?": "¿Usar unha frase de paso diferente?", @@ -2286,11 +2189,8 @@ "Copy it to your personal cloud storage": "Copiaa no almacenaxe personal na nube", "Unable to query secret storage status": "Non se obtivo o estado do almacenaxe segredo", "Retry": "Reintentar", - "You can now verify your other devices, and other users to keep your chats safe.": "Xa podes verificar os teus outros dispositivos e a outras usuarias para manter conversas seguras.", "Upgrade your encryption": "Mellora o teu cifrado", - "Confirm recovery passphrase": "Confirma a frase de paso de recuperación", "Make a copy of your recovery key": "Fai unha copia da túa chave de recuperación", - "You're done!": "Feito!", "Unable to set up secret storage": "Non se configurou un almacenaxe segredo", "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Imos gardar unha copia cifrada das túas chaves no noso servidor. Asegura a copia cunha frase de paso de recuperación.", "For maximum security, this should be different from your account password.": "Para máxima seguridade, esta debería ser diferente ó contrasinal da túa conta.", diff --git a/src/i18n/strings/he.json b/src/i18n/strings/he.json index b4584e347e..b17fc5abc5 100644 --- a/src/i18n/strings/he.json +++ b/src/i18n/strings/he.json @@ -3,11 +3,6 @@ "This phone number is already in use": "מספר הטלפון הזה כבר בשימוש", "Failed to verify email address: make sure you clicked the link in the email": "אימות כתובת הדוא\"ל נכשלה: וודא שלחצת על הקישור בדוא\"ל", "Call Failed": "השיחה נכשלה", - "Review Devices": "סקירת מכשירים", - "Call Anyway": "התקשר בכל זאת", - "Answer Anyway": "ענה בכל זאת", - "Call": "התקשר", - "Answer": "ענה", "The remote side failed to pick up": "הצד המרוחק לא ענה", "Unable to capture screen": "כישלון בצילום המסך", "Existing Call": "שיחה קיימת", @@ -45,7 +40,6 @@ "Which rooms would you like to add to this community?": "אילו חדרים תרצה להוסיף לקהילה?", "Show these rooms to non-members on the community page and room list?": "הצג חדרים אלה לחסרי-חשבון על דף הקהילה ורשימת החדרים?", "Add rooms to the community": "הוסף חדרים לקהילה", - "Room name or alias": "שם חדר או כינוי", "Warning": "התראה", "Submit debug logs": "הזן יומני ניפוי שגיאה (דבאג)", "Edit": "ערוך", @@ -78,7 +72,6 @@ "Guests can join": "אורחים יכולים להצטרף", "No rooms to show": "אין חדרים להצגה", "Fetching third party location failed": "נסיון להביא מיקום צד שלישי נכשל", - "A new version of %(brand)s is available.": "יצאה גרסה חדשה של %(brand)s.", "Send Account Data": "שלח נתוני משתמש", "All notifications are currently disabled for all targets.": "התראות מנוטרלות לכלל המערכת.", "Uploading report": "מעדכן דוח", @@ -98,8 +91,6 @@ "Send Custom Event": "שלח אירוע מותאם אישית", "Advanced notification settings": "הגדרות מתקדמות להתראות", "Failed to send logs: ": "כשל במשלוח יומנים: ", - "delete the alias.": "מחיקת כינוי.", - "To return to your account in future you need to set a password": "להשתמש בחשבונך בעתיד, עליך להגדיר סיסמא", "Forget": "שכח", "You cannot delete this image. (%(code)s)": "אי אפשר למחוק את התמונה. (%(code)s)", "Cancel Sending": "ביטול שליחה", @@ -124,7 +115,6 @@ "No update available.": "אין עדכון זמין.", "Resend": "שלח מחדש", "Collecting app version information": "אוסף מידע על גרסת היישום", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "מחק כינוי %(alias)s של החדר והסר את %(name)s מהרשימה?", "Keywords": "מילות מפתח", "Enable notifications for this account": "אפשר התראות לחשבון זה", "Invite to this community": "הזמן לקהילה זו", @@ -181,7 +171,6 @@ "You must specify an event type!": "חובה להגדיר סוג ארוע!", "Unhide Preview": "הצג מחדש תצוגה מקדימה", "Unable to join network": "לא ניתן להצטרף לרשת", - "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 אבל הם עדיין תקפים", "Sorry, your browser is not able to run %(brand)s.": "מצטערים, הדפדפן שלך הוא אינו יכול להריץ את %(brand)s.", "Uploaded on %(date)s by %(user)s": "עודכן ב %(date)s ע\"י %(user)s", "Messages in group chats": "הודעות בקבוצות השיחה", @@ -207,6 +196,5 @@ "Thank you!": "רב תודות!", "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!": "באמצעות הדפדפן הנוכחי שלך המראה של היישום יכול להיות שגוי לחלוטין וחלק מהאפשרויות לא תתפקדנה. אם תרצה לנסות בכל זאת תוכל אבל אז כל האחריות עליך!", "Checking for an update...": "בודק עדכונים...", - "There are advanced notifications which are not shown here": "ישנן התראות מתקדמות אשר אינן מוצגות כאן", "Your %(brand)s is misconfigured": "ה %(brand)s שלך מוגדר באופן שגוי" } diff --git a/src/i18n/strings/hi.json b/src/i18n/strings/hi.json index c076b7684a..c506c97715 100644 --- a/src/i18n/strings/hi.json +++ b/src/i18n/strings/hi.json @@ -1,5 +1,4 @@ { - "A new version of %(brand)s is available.": "रायट के एक नया वर्शन उपलब्ध है।", "All messages": "सारे संदेश", "All Rooms": "सारे कमरे", "Please set a password!": "कृपया एक पासवर्ड सेट करें!", @@ -14,12 +13,10 @@ "Which officially provided instance you are using, if any": "क्या आप कोई अधिकृत संस्करण इस्तेमाल कर रहे हैं? अगर हां, तो कौन सा", "Your homeserver's URL": "आपके होमसर्वर का यूआरएल", "Every page you use in the app": "हर पृष्ठ जिसका आप इस एप में इस्तेमाल करते हैं", - "Your User Agent": "आपका उपभोक्ता प्रतिनिधि", "Custom Server Options": "कस्टम सर्वर विकल्प", "Dismiss": "खारिज", "powered by Matrix": "मैट्रिक्स द्वारा संचालित", "Whether or not you're using the Richtext mode of the Rich Text Editor": "चाहे आप रिच टेक्स्ट एडिटर के रिच टेक्स्ट मोड का उपयोग कर रहे हों या नहीं", - "Your identity server's URL": "आपका आइडेंटिटी सर्वर का URL", "e.g. %(exampleValue)s": "उदाहरणार्थ %(exampleValue)s", "e.g. ": "उदाहरणार्थ ", "Your device resolution": "आपके यंत्र का रेसोलुशन", @@ -27,11 +24,6 @@ "The information being sent to us to help make %(brand)s better includes:": "%(brand)s को बेहतर बनाने के लिए हमें भेजी गई जानकारी में निम्नलिखित शामिल हैं:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "जहां इस पृष्ठ में पहचान योग्य जानकारी शामिल है, जैसे कि रूम, यूजर या समूह आईडी, वह डाटा सर्वर को भेजे से पहले हटा दिया जाता है।", "Call Failed": "कॉल विफल", - "Review Devices": "डिवाइस की समीक्षा करें", - "Call Anyway": "वैसे भी कॉल करें", - "Answer Anyway": "वैसे भी जवाब दें", - "Call": "कॉल", - "Answer": "उत्तर", "Call Timeout": "कॉल टाइमआउट", "The remote side failed to pick up": "दूसरी पार्टी ने जवाब नहीं दिया", "Unable to capture screen": "स्क्रीन कैप्चर करने में असमर्थ", @@ -40,7 +32,6 @@ "VoIP is unsupported": "VoIP असमर्थित है", "You cannot place VoIP calls in this browser.": "आप इस ब्राउज़र में VoIP कॉल नहीं कर सकते हैं।", "You cannot place a call with yourself.": "आप अपने साथ कॉल नहीं कर सकते हैं।", - "Could not connect to the integration server": "इंटीग्रेशन सर्वर से संपर्क नहीं हो सका", "Call in Progress": "कॉल चालू हैं", "A call is currently being placed!": "वर्तमान में एक कॉल किया जा रहा है!", "A call is already in progress!": "कॉल पहले ही प्रगति पर है!", @@ -79,7 +70,6 @@ "Which rooms would you like to add to this community?": "आप इस समुदाय में कौन से रूम जोड़ना चाहते हैं?", "Show these rooms to non-members on the community page and room list?": "क्या आप इन मैट्रिक्स रूम को कम्युनिटी पृष्ठ और रूम लिस्ट के गैर सदस्यों को दिखाना चाहते हैं?", "Add rooms to the community": "कम्युनिटी में रूम जोड़े", - "Room name or alias": "रूम का नाम या उपनाम", "Add to community": "कम्युनिटी में जोड़ें", "Failed to invite the following users to %(groupId)s:": "निम्नलिखित उपयोगकर्ताओं को %(groupId)s में आमंत्रित करने में विफल:", "Failed to invite users to community": "उपयोगकर्ताओं को कम्युनिटी में आमंत्रित करने में विफल", @@ -90,14 +80,11 @@ "Unable to enable Notifications": "अधिसूचनाएं सक्षम करने में असमर्थ", "This email address was not found": "यह ईमेल पता नहीं मिला था", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "आपका ईमेल पता इस होमसर्वर पर मैट्रिक्स आईडी से जुड़ा प्रतीत नहीं होता है।", - "Registration Required": "पंजीकरण आवश्यक", - "You need to register to do this. Would you like to register now?": "ऐसा करने के लिए आपको पंजीकरण करने की आवश्यकता है। क्या आप अभी पंजीकरण करना चाहते हैं?", "Register": "पंजीकरण करें", "Default": "डिफ़ॉल्ट", "Restricted": "वर्जित", "Moderator": "मध्यस्थ", "Admin": "व्यवस्थापक", - "Start a chat": "एक चैट शुरू करें", "Operation failed": "कार्रवाई विफल", "Failed to invite": "आमंत्रित करने में विफल", "Failed to invite the following users to the %(roomName)s room:": "निम्नलिखित उपयोगकर्ताओं को %(roomName)s रूम में आमंत्रित करने में विफल:", @@ -120,9 +107,7 @@ "To use it, just wait for autocomplete results to load and tab through them.": "इसका उपयोग करने के लिए, बस स्वत: पूर्ण परिणामों को लोड करने और उनके माध्यम से टैब के लिए प्रतीक्षा करें।", "Changes your display nickname": "अपना प्रदर्शन उपनाम बदलता है", "Invites user with given id to current room": "दिए गए आईडी के साथ उपयोगकर्ता को वर्तमान रूम में आमंत्रित करता है", - "Joins room with given alias": "दिए गए उपनाम के साथ रूम में शामिल हो जाता है", "Leave room": "रूम छोड़ें", - "Unrecognised room alias:": "अपरिचित रूम उपनाम:", "Kicks user with given id": "दिए गए आईडी के साथ उपयोगकर्ता को निर्वासन(किक) करता हैं", "Bans user with given id": "दिए गए आईडी के साथ उपयोगकर्ता को प्रतिबंध लगाता है", "Ignores a user, hiding their messages from you": "उपयोगकर्ता को अनदेखा करें और स्वयं से संदेश छुपाएं", @@ -161,11 +146,6 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s ने रूम का नाम हटा दिया।", "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s कमरे का नाम बदलकर %(roomName)s कर दिया।", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s ने एक छवि भेजी।", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s ने इस रूम के लिए पते के रूप में %(addedAddresses)s को जोड़ा।", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s ने इस रूम के लिए एक पते के रूप में %(addedAddresses)s को जोड़ा।", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s ने इस कमरे के लिए पते के रूप में %(removedAddresses)s को हटा दिया।", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s ने इस कमरे के लिए एक पते के रूप में %(removedAddresses)s को हटा दिया।", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s ने इस कमरे के लिए पते के रूप में %(addedAddresses)s को जोड़ा और %(removedAddresses)s को हटा दिया।", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s ने इस कमरे के लिए मुख्य पता %(address)s पर सेट किया।", "%(senderName)s removed the main address for this room.": "%(senderName)s ने इस कमरे के लिए मुख्य पता हटा दिया।", "Someone": "कोई", @@ -189,7 +169,6 @@ "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s विजेट %(senderName)s द्वारा हटा दिया गया", "Failure to create room": "रूम बनाने में विफलता", "Server may be unavailable, overloaded, or you hit a bug.": "सर्वर अनुपलब्ध, अधिभारित हो सकता है, या अपने एक सॉफ्टवेयर गर्बरी को पाया।", - "Send anyway": "वैसे भी भेजें", "Send": "भेजें", "Unnamed Room": "अनाम रूम", "This homeserver has hit its Monthly Active User limit.": "इस होमसर्वर ने अपनी मासिक सक्रिय उपयोगकर्ता सीमा को प्राप्त कर लिया हैं।", @@ -203,7 +182,6 @@ "Please contact your homeserver administrator.": "कृपया अपने होमसर्वर व्यवस्थापक से संपर्क करें।", "Failed to join room": "रूम में शामिल होने में विफल", "Message Pinning": "संदेश पिनिंग", - "Use compact timeline layout": "कॉम्पैक्ट टाइमलाइन लेआउट का प्रयोग करें", "Show timestamps in 12 hour format (e.g. 2:30pm)": "१२ घंटे प्रारूप में टाइमस्टैम्प दिखाएं (उदहारण:२:३० अपराह्न बजे)", "Always show message timestamps": "हमेशा संदेश टाइमस्टैम्प दिखाएं", "Autoplay GIFs and videos": "जीआईएफ और वीडियो को स्वत: प्ले करें", @@ -254,14 +232,10 @@ "Confirm password": "पासवर्ड की पुष्टि कीजिये", "Change Password": "पासवर्ड बदलें", "Authentication": "प्रमाणीकरण", - "Device ID": "यंत्र आईडी", "Last seen": "अंतिम बार देखा गया", "Failed to set display name": "प्रदर्शन नाम सेट करने में विफल", - "Disable Notifications": "नोटीफिकेशन निष्क्रिय करें", - "Enable Notifications": "सूचनाएं सक्षम करें", "Delete Backup": "बैकअप हटाएं", "Unable to load key backup status": "कुंजी बैकअप स्थिति लोड होने में असमर्थ", - "Verify...": "सत्यापित करें ...", "Backup version: ": "बैकअप संस्करण: ", "Algorithm: ": "कलन विधि: ", "Error saving email notification preferences": "ईमेल अधिसूचना प्राथमिकताओं को सहेजने में त्रुटि", @@ -282,7 +256,6 @@ "Unable to fetch notification target list": "अधिसूचना लक्ष्य सूची लाने में असमर्थ", "Notification targets": "अधिसूचना के लक्ष्य", "Advanced notification settings": "उन्नत अधिसूचना सेटिंग्स", - "There are advanced notifications which are not shown here": "उन्नत सूचनाएं हैं जो यहां दिखाई नहीं दी गई हैं", "Failed to invite users to the room:": "रूम में उपयोगकर्ताओं को आमंत्रित करने में विफल:", "There was an error joining the room": "रूम में शामिल होने में एक त्रुटि हुई", "Use a few words, avoid common phrases": "कम शब्दों का प्रयोग करें, सामान्य वाक्यांशों से बचें", @@ -317,7 +290,6 @@ "Messages containing @room": "@Room युक्त संदेश", "Encrypted messages in one-to-one chats": "एक एक के साथ चैट में एन्क्रिप्टेड संदेश", "Encrypted messages in group chats": "समूह चैट में एन्क्रिप्टेड संदेश", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "हो सकता है कि आपने उन्हें रायट के अलावा किसी अन्य ग्राहक में कॉन्फ़िगर किया हो। आप उन्हें रायट में ट्यून नहीं कर सकते लेकिन वे अभी भी आवेदन करते हैं", "Show message in desktop notification": "डेस्कटॉप अधिसूचना में संदेश दिखाएं", "Off": "बंद", "On": "चालू", @@ -337,8 +309,6 @@ "Options": "विकल्प", "Key request sent.": "कुंजी अनुरोध भेजा गया।", "Please select the destination room for this message": "कृपया इस संदेश के लिए गंतव्य रूम का चयन करें", - "Blacklisted": "काली सूची में डाला गया", - "device id: ": "डिवाइस आईडी: ", "Disinvite": "आमंत्रित नहीं करना", "Kick": "किक", "Disinvite this user?": "इस उपयोगकर्ता को आमंत्रित नहीं करें?", @@ -353,7 +323,6 @@ "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": "अवनत", "Failed to mute user": "उपयोगकर्ता को म्यूट करने में विफल", - "Failed to toggle moderator status": "मॉडरेटर स्थिति टॉगल करने में विफल", "Failed to change power level": "पावर स्तर बदलने में विफल", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "आप इस परिवर्तन को पूर्ववत नहीं कर पाएंगे क्योंकि आप उपयोगकर्ता को अपने आप से समान शक्ति स्तर रखने के लिए प्रोत्साहित कर रहे हैं।", "Are you sure?": "क्या आपको यकीन है?", @@ -363,12 +332,8 @@ "Mention": "उल्लेख", "Invite": "आमंत्रण", "Share Link to User": "उपयोगकर्ता को लिंक साझा करें", - "User Options": "उपयोगकर्ता विकल्प", - "Direct chats": "प्रत्यक्ष चैट", "Unmute": "अनम्यूट", "Mute": "म्यूट", - "Revoke Moderator": "मॉडरेटर को रद्द करें", - "Make Moderator": "मॉडरेटर बनायें", "Admin Tools": "व्यवस्थापक उपकरण", "Close": "बंद", "and %(count)s others...|other": "और %(count)s अन्य ...", @@ -382,9 +347,7 @@ "Video call": "वीडियो कॉल", "Upload file": "फाइल अपलोड करें", "Send an encrypted reply…": "एक एन्क्रिप्टेड उत्तर भेजें …", - "Send a reply (unencrypted)…": "एक उत्तर भेजें (अनएन्क्रिप्टेड) …", "Send an encrypted message…": "एक एन्क्रिप्टेड संदेश भेजें …", - "Send a message (unencrypted)…": "एक संदेश भेजें (अनएन्क्रिप्टेड) …", "This room has been replaced and is no longer active.": "इस रूम को बदल दिया गया है और अब सक्रिय नहीं है।", "The conversation continues here.": "वार्तालाप यहां जारी है।", "You do not have permission to post to this room": "आपको इस रूम में पोस्ट करने की अनुमति नहीं है", @@ -562,7 +525,6 @@ "Phone numbers": "फोन नंबर", "Language and region": "भाषा और क्षेत्र", "Theme": "थीम", - "Dark theme": "डार्क थीम", "Account management": "खाता प्रबंधन", "Deactivating your account is a permanent action - be careful!": "अपने खाते को निष्क्रिय करना एक स्थायी कार्रवाई है - सावधान रहें!", "Deactivate Account": "खाता निष्क्रिय करें", @@ -592,9 +554,7 @@ "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s ने फ्लेयर %(groups)s के लिए अक्षम कर दिया।", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s ने इस कमरे में %(newGroups)s के लिए फ्लेयर सक्षम किया और %(oldGroups)s के लिए फ्लेयर अक्षम किया।", "Show read receipts sent by other users": "अन्य उपयोगकर्ताओं द्वारा भेजी गई रसीदें दिखाएं", - "Order rooms in the room list by most important first instead of most recent": "कक्ष सूचि में सभी कक्षों को हाल के कक्षों के बजाय सबसे महत्वपूर्ण वाले कक्ष पहले रखे", "Scissors": "कैंची", - "Light theme": "लाइट थीम", "Timeline": "समयसीमा", "Room list": "कक्ष सूचि", "Autocomplete delay (ms)": "स्वत: पूर्ण विलंब (ms)", diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index b5b3b0b887..9605505354 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -32,10 +32,8 @@ "Microphone": "Mikrofon", "Camera": "Kamera", "Advanced": "Speciális", - "Algorithm": "Algoritmus", "Always show message timestamps": "Üzenet időbélyeg folyamatos megjelenítése", "Authentication": "Azonosítás", - "Alias (optional)": "Becenév (opcionális)", "Failed to change password. Is your password correct?": "Nem sikerült megváltoztatni a jelszót. Helyesen írtad be a jelszavadat?", "Continue": "Folytatás", "Create new room": "Új szoba létrehozása", @@ -60,7 +58,6 @@ "Ban": "Kitilt", "Banned users": "Kitiltott felhasználók", "Bans user with given id": "Kitiltja a megadott azonosítójú felhasználót", - "Blacklisted": "Fekete listára téve", "Call Timeout": "Hívás időtúllépés", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Nem lehet kapcsolódni a Matrix szerverhez - ellenőrizd a kapcsolatot, biztosítsd, hogy a Matrix szerver tanúsítványa hiteles legyen, és a böngésző kiterjesztések ne blokkolják a kéréseket.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Nem lehet csatlakozni a Matrix szerverhez HTTP-n keresztül ha HTTPS van a böngésző címsorában. Vagy használj HTTPS-t vagy engedélyezd a nem biztonságos script-et.", @@ -71,7 +68,6 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s törölte a szoba nevét.", "%(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", - "Claimed Ed25519 fingerprint key": "Igényelt Ed25519 ujjlenyomat kulcs", "Click here to fix": "A javításhoz kattints ide", "Click to mute audio": "Hang némításhoz kattints ide", "Click to mute video": "A videó kikapcsoláshoz kattints ide", @@ -81,38 +77,27 @@ "Command error": "Parancs hiba", "Commands": "Parancsok", "Confirm password": "Jelszó megerősítése", - "Could not connect to the integration server": "Az integrációs szerverhez nem lehet kapcsolódni", "Create Room": "Szoba készítése", "Cryptography": "Titkosítás", "Current password": "Jelenlegi jelszó", - "Curve25519 identity key": "Curve25519 azonosítási kulcs", "Custom": "Egyedi", "Custom level": "Egyedi szint", "/ddg is not a command": "A /ddg nem egy parancs", "Deactivate Account": "Fiók bezárása", "Decline": "Elutasít", "Decrypt %(text)s": "%(text)s visszafejtése", - "Decryption error": "Visszafejtési hiba", "Default": "Alapértelmezett", - "Device ID": "Készülék azonosító", - "device id: ": "készülék azonosító: ", - "Direct chats": "Közvetlen csevegés", - "Disable Notifications": "Értesítések tiltása", "Disinvite": "Meghívás visszavonása", "Displays action": "Tevékenységek megjelenítése", "Download %(text)s": "%(text)s letöltése", "Drop File Here": "Ide húzd a fájlt", - "Ed25519 fingerprint": "Ed25519 ujjlenyomat", "Email": "E-mail", "Email address": "E-mail cím", "Emoji": "Emodzsi", - "Enable Notifications": "Értesítések bekapcsolása", "%(senderName)s ended the call.": "%(senderName)s befejezte a hívást.", - "End-to-end encryption information": "Ponttól pontig való titkosítási információk", "Enter passphrase": "Jelmondat megadása", "Error decrypting attachment": "Csatolmány visszafejtése sikertelen", "Error: Problem communicating with the given homeserver.": "Hiba: Probléma van a Matrix szerverrel való kommunikációval.", - "Event information": "Esemény információ", "Existing Call": "Hívás folyamatban", "Export": "Mentés", "Export E2E room keys": "E2E szoba kulcsok mentése", @@ -129,7 +114,6 @@ "Failed to send email": "E-mail nem sikerült elküldeni", "Failed to send request.": "A kérést nem sikerült elküldeni.", "Failed to set display name": "Megjelenítési nevet nem sikerült beállítani", - "Failed to toggle moderator status": "Moderátor státuszt nem sikerült átállítani", "Failed to unban": "Kizárás visszavonása sikertelen", "Failed to upload profile picture!": "Profil kép feltöltése sikertelen!", "Failed to verify email address: make sure you clicked the link in the email": "E-mail cím ellenőrzése sikertelen: ellenőrizd, hogy az e-mailben lévő hivatkozásra kattintottál", @@ -164,7 +148,6 @@ "Join as voice or video.": "Csatlakozás hanggal vagy videóval.", "Join Room": "Belépés a szobába", "%(targetName)s joined the room.": "%(targetName)s belépett a szobába.", - "Joins room with given alias": "A megadott becenévvel belépett a szobába", "Jump to first unread message.": "Ugrás az első olvasatlan üzenetre.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s kizárta: %(targetName)s.", "Kick": "Elküld", @@ -173,7 +156,6 @@ "Last seen": "Utoljára láttuk", "Leave room": "Szoba elhagyása", "%(targetName)s left the room.": "%(targetName)s elhagyta a szobát.", - "Local addresses for this room:": "A szoba helyi címe:", "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.", @@ -186,14 +168,11 @@ "Missing user_id in request": "A kérésből hiányzik a user_id", "Moderator": "Moderátor", "Name": "Név", - "New address (e.g. #foo:%(localDomain)s)": "Új cím (e.g. #foo:%(localDomain)s)", "New passwords don't match": "Az új jelszavak nem egyeznek", "New passwords must match each other.": "Az új jelszavaknak meg kell egyezniük egymással.", - "none": "semmi", "not specified": "nincs meghatározva", "(not supported by this browser)": "(ebben a böngészőben nem támogatott)", "": "", - "NOT verified": "NEM ellenőrzött", "No display name": "Nincs megjelenítési név", "No more results": "Nincs több találat", "No results": "Nincs találat", @@ -211,11 +190,9 @@ "Profile": "Profil", "Public Chat": "Nyilvános csevegés", "Reason": "Ok", - "Revoke Moderator": "Moderátor visszahívása", "Register": "Regisztráció", "%(targetName)s rejected the invitation.": "%(targetName)s elutasította a meghívót.", "Reject invitation": "Meghívó elutasítása", - "Remote addresses for this room:": "A szoba távoli címei:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s törölte a megjelenítési nevet (%(oldDisplayName)s).", "%(senderName)s removed their profile picture.": "%(senderName)s törölte a profil képét.", "%(senderName)s requested a VoIP conference.": "%(senderName)s VoIP konferenciát kezdeményez.", @@ -230,11 +207,9 @@ "%(roomName)s is not accessible at this time.": "%(roomName)s jelenleg nem érhető el.", "Rooms": "Szobák", "Save": "Mentés", - "Scroll to bottom of page": "Az oldal aljára görget", "Search failed": "Keresés sikertelen", "Searches DuckDuckGo for results": "Keresés DuckDuckGóval", "Seen by %(userName)s at %(dateTime)s": "%(userName)s %(dateTime)s időpontban látta", - "Send anyway": "Küld mindenképpen", "Send Reset Email": "Visszaállítási e-mail küldése", "%(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.", @@ -251,7 +226,6 @@ "Sign out": "Kijelentkezés", "%(count)s of your messages have not been sent.|other": "Néhány üzeneted nem lett elküldve.", "Someone": "Valaki", - "Start a chat": "Csevegés indítása", "Start authentication": "Azonosítás indítása", "Submit": "Elküld", "Success": "Sikeres", @@ -276,13 +250,9 @@ "%(senderName)s unbanned %(targetName)s.": "%(senderName)s visszaengedte %(targetName)s felhasználót.", "Unable to capture screen": "A képernyő felvétele sikertelen", "Unable to enable Notifications": "Az értesítések engedélyezése sikertelen", - "unencrypted": "titkosítatlan", "unknown caller": "ismeretlen hívó", - "unknown device": "ismeretlen eszköz", - "Unknown room %(roomId)s": "Ismeretlen szoba %(roomId)s", "Unmute": "Némítás kikapcsolása", "Unnamed Room": "Névtelen szoba", - "Unrecognised room alias:": "Ismeretlen szoba becenév:", "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", "Uploading %(filename)s and %(count)s others|other": "%(filename)s és még %(count)s db másik feltöltése", @@ -291,14 +261,10 @@ "Upload file": "Fájl feltöltése", "Upload new:": "Új feltöltése:", "Usage": "Használat", - "Use compact timeline layout": "Egyszerű idővonal séma használata", - "User ID": "Felhasználói azonosító", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (szint: %(powerLevelNumber)s)", "Username invalid: %(errMessage)s": "Felhasználói név érvénytelen: %(errMessage)s", "Users": "Felhasználók", "Verification Pending": "Ellenőrzés függőben", - "Verification": "Ellenőrzés", - "verified": "ellenőrizve", "Verified key": "Ellenőrzött kulcs", "Video call": "Videó hívás", "Voice call": "Hang hívás", @@ -352,7 +318,6 @@ "Upload an avatar:": "Avatar kép feltöltése:", "This server does not support authentication with a phone number.": "Ez a szerver nem támogatja a telefonszámmal való azonosítást.", "An error occurred: %(error_string)s": "Hiba történt: %(error_string)s", - "Make Moderator": "Legyen moderátor", "There are no visible files in this room": "Ebben a szobában láthatólag nincsenek fájlok", "Room": "Szoba", "Connectivity to the server has been lost.": "A szerverrel a kapcsolat megszakadt.", @@ -380,14 +345,8 @@ "Confirm Removal": "Törlés megerősítése", "Unknown error": "Ismeretlen hiba", "Incorrect password": "Helytelen jelszó", - "To continue, please enter your password.": "A folytatáshoz, kérlek add meg a jelszavadat.", - "I verify that the keys match": "Megerősítem, hogy a kulcsok egyeznek", "Unable to restore session": "A kapcsolatot nem lehet visszaállítani", "Unknown Address": "Ismeretlen cím", - "Unblacklist": "Tiltólistáról kivesz", - "Blacklist": "Tiltólistára", - "Unverify": "Azonosítás visszavonása", - "Verify...": "Ellenőrzés...", "ex. @bob:example.com": "pl.: @bob:example.com", "Add User": "Felhasználó hozzáadás", "Please check your email to continue registration.": "Ellenőrizd az e-mailedet a regisztráció folytatásához.", @@ -397,7 +356,6 @@ "Error decrypting image": "Hiba a kép visszafejtésénél", "Error decrypting video": "Hiba a videó visszafejtésénél", "Add an Integration": "Integráció hozzáadása", - "Removed or unknown message type": "Eltávolított üzenet vagy ismeretlen üzenet típus", "URL Previews": "URL előnézet", "Drop file here to upload": "Feltöltéshez húzz ide egy fájlt", " (unsupported)": " (nem támogatott)", @@ -427,10 +385,6 @@ "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?", "This will be your account name on the homeserver, or you can pick a different server.": "Ez lesz a felhasználói neved a Matrix szerveren, vagy választhatsz egy másik szervert.", "Skip": "Kihagy", - "Start verification": "Ellenőrzés megkezdése", - "Share without verifying": "Megosztás ellenőrzés nélkül", - "Ignore request": "Kérés figyelmen kívül hagyása", - "Encryption key request": "Titkosítási kulcs kérés", "Check for update": "Frissítések keresése", "Add a widget": "Kisalkalmazás hozzáadása", "Allow": "Engedélyez", @@ -460,7 +414,6 @@ "Failed to copy": "Sikertelen másolás", "Ignore": "Figyelmen kívül hagy", "Unignore": "Figyelembe vesz", - "User Options": "Felhasználói beállítások", "You are now ignoring %(userId)s": "Most figyelmen kívül hagyod: %(userId)s", "You are no longer ignoring %(userId)s": "Ismét figyelembe veszed: %(userId)s", "Unignored user": "Figyelembe vett felhasználó", @@ -468,7 +421,6 @@ "Stops ignoring a user, showing their messages going forward": "A felhasználó újbóli figyelembe vétele, és az üzenetei megjelenítése a jövőben", "Ignores a user, hiding their messages from you": "Figyelmen kívül hagy egy felhasználót, elrejtve előled az üzeneteit", "Banned by %(displayName)s": "Kitiltotta: %(displayName)s", - "Message removed by %(userId)s": "Üzenetet törölte: %(userId)s", "Description": "Leírás", "Unable to accept invite": "A meghívót nem lehet elfogadni", "Leave": "Elhagy", @@ -482,14 +434,11 @@ "Add to summary": "Összefoglalóhoz adás", "Failed to add the following users to the summary of %(groupId)s:": "Az alábbi felhasználókat nem sikerült hozzáadni a(z) %(groupId)s csoport összefoglalójához:", "Which rooms would you like to add to this summary?": "Melyik szobákat szeretnéd hozzáadni ehhez az összefoglalóhoz?", - "Room name or alias": "Szoba neve vagy beceneve", "Failed to add the following rooms to the summary of %(groupId)s:": "Az alábbi szobákat nem sikerült hozzáadni a(z) %(groupId)s csoport összefoglalójához:", "Failed to remove the room from the summary of %(groupId)s": "Az alábbi szobákat nem sikerült eltávolítani a(z) %(groupId)s csoport összefoglalójából", "The room '%(roomName)s' could not be removed from the summary.": "Nem sikerült törölni az összefoglalóból ezt a szobát: '%(roomName)s'.", "Failed to remove a user from the summary of %(groupId)s": "Nem sikerült törölni az összefoglalóból ezt a felhasználót: %(groupId)s", "The user '%(displayName)s' could not be removed from the summary.": "Nem sikerült törölni az összefoglalóból a(z) %(displayName)s felhasználót.", - "Light theme": "Világos téma", - "Dark theme": "Sötét téma", "Unknown": "Ismeretlen", "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ó", @@ -554,7 +503,6 @@ "Something went wrong whilst creating your community": "Valami nem sikerült a közösség létrehozásánál", "Mention": "Említ", "Invite": "Meghív", - "Message removed": "Üzenet eltávolítva", "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?", "Mirror local video feed": "Helyi videó folyam tükrözése", @@ -662,11 +610,6 @@ "collapse": "becsuk", "expand": "kinyit", "Call Failed": "Sikertelen hívás", - "Review Devices": "Eszközök áttekintése", - "Call Anyway": "Hívás mindenképpen", - "Answer Anyway": "Felvétel mindenképpen", - "Call": "Hívás", - "Answer": "Felvétel", "Send": "Elküldés", "Old cryptography data detected": "Régi titkosítási adatot találhatók", "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.": "Régebbi %(brand)s verzióból származó adatok találhatók. Ezek hibás működéshez vezethettek a végponttól-végpontig titkosításban régebbi verzióknál. A nemrég küldött/fogadott titkosított üzenetek ha a régi adatokat használták lehetséges hogy nem lesznek visszafejthetők ebben a verzióban. Ha problémákba ütközöl jelentkezz ki és vissza. A régi üzenetek elérésének biztosításához mentsd ki a kulcsokat és töltsd be újra.", @@ -676,14 +619,12 @@ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Újraküldöd mind vagy elveted mind. Az üzeneteket egyenként is elküldheted vagy elvetheted.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Üzenet újraküldése vagy üzenet elvetése most.", "Send an encrypted reply…": "Titkosított válasz küldése…", - "Send a reply (unencrypted)…": "Válasz küldése (titkosítatlanul)…", "Send an encrypted message…": "Titkosított üzenet küldése…", - "Send a message (unencrypted)…": "Üzenet küldése (titkosítás nélkül)…", "Replying": "Válaszolni", "Minimize apps": "Alkalmazás összecsukása", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "A személyes adatok védelme fontos számunkra, így mi nem gyűjtünk személyes és személyhez köthető adatokat az analitikánkhoz.", "Learn more about how we use analytics.": "Tudj meg többet arról hogyan használjuk az analitikai adatokat.", - "The information being sent to us to help make %(brand)s better includes:": "Az adatok amiket a %(brand)s javításához felhasználunk az alábbiak:", + "The information being sent to us to help make %(brand)s better includes:": "Az alábbi információk kerülnek elküldésre, amivel jobbá tehetjük a %(brand)sot:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Minden azonosításra alkalmas adat, mint a szoba-, felhasználó- vagy csoportazonosítók, eltávolításra kerülnek, mielőtt elküldenénk a kiszolgálónak.", "The platform you're on": "A platform amit használsz", "The version of %(brand)s": "%(brand)s verziója", @@ -691,7 +632,6 @@ "Which officially provided instance you are using, if any": "Melyik hivatalosan nyújtott példányt használod", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Használod-e a Richtext módot a szerkesztőben vagy nem", "Your homeserver's URL": "A Matrix kiszolgálód URL-je", - "Your identity server's URL": "Az azonosítási szerver URL-t", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(fullYear)s. %(monthName)s %(day)s, %(weekDayName)s", "This room is not public. You will not be able to rejoin without an invite.": "Ez a szoba nem nyilvános. Kilépés után csak újabb meghívóval tudsz újra belépni a szobába.", "Community IDs cannot be empty.": "A közösségi azonosító nem lehet üres.", @@ -721,7 +661,6 @@ "Who can join this community?": "Ki tud csatlakozni ehhez a közösséghez?", "Everyone": "Mindenki", "Fetching third party location failed": "Nem sikerült lekérdezni a harmadik fél helyét", - "A new version of %(brand)s is available.": "Elérhető egy új %(brand)s verzió.", "Send Account Data": "Fiókadatok küldése", "All notifications are currently disabled for all targets.": "Minden céleszközön minden értesítés tiltva van.", "Uploading report": "Jelentés feltöltése", @@ -739,8 +678,6 @@ "Send Custom Event": "Egyéni esemény elküldése", "Advanced notification settings": "Haladó értesítési beállítások", "Failed to send logs: ": "Hiba a napló küldésénél: ", - "delete the alias.": "becenév törlése.", - "To return to your account in future you need to set a password": "Hogy később visszaléphess a fiókodba, be kell állítanod egy jelszót", "Forget": "Elfelejt", "You cannot delete this image. (%(code)s)": "Nem törölheted ezt a képet. (%(code)s)", "Cancel Sending": "Küldés megszakítása", @@ -765,7 +702,6 @@ "No update available.": "Nincs elérhető frissítés.", "Noisy": "Hangos", "Collecting app version information": "Alkalmazás verzió információk összegyűjtése", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Törlöd a szoba nevét (%(alias)s) és eltávolítod a listából ezt: %(name)s?", "Keywords": "Kulcsszavak", "Enable notifications for this account": "Értesítések engedélyezése ehhez a fiókhoz", "Invite to this community": "Meghívás ebbe a közösségbe", @@ -821,7 +757,6 @@ "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.": "A hibakereső napló alkalmazás használati adatokat tartalmaz beleértve a felhasználói nevedet, az általad meglátogatott szobák és csoportok azonosítóit alternatív neveit és más felhasználói neveket. Csevegés üzenetek szövegét nem tartalmazza.", "Unhide Preview": "Előnézet mutatása", "Unable to join network": "Nem sikerült kapcsolódni a hálózathoz", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Egy másik, nem %(brand)s-klienssel állítothattad be. A %(brand)sban módosítani nem tudod ezeket, de érvényben vannak", "Sorry, your browser is not able to run %(brand)s.": "Elnézést, a böngésződben nem fut a %(brand)s.", "Uploaded on %(date)s by %(user)s": "Feltöltötte %(user)s ekkor: %(date)s", "Messages in group chats": "Csoportszobák üzenetei", @@ -847,12 +782,10 @@ "Thank you!": "Köszönjük!", "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!": "Ebben a böngészőben az alkalmazás felülete tele lehet hibával, és az is lehet, hogy egyáltalán nem működik. Ha így is ki szeretnéd próbálni, megteheted, de ha valami gondod van, nem tudunk segíteni!", "Checking for an update...": "Frissítés keresése...", - "There are advanced notifications which are not shown here": "Vannak itt nem látható, haladó értesítések", "Missing roomId.": "Hiányzó szobaazonosító.", "Popout widget": "Kiugró kisalkalmazás", "Every page you use in the app": "Minden oldal, amit az alkalmazásban használsz", "e.g. ": "pl.: ", - "Your User Agent": "Felhasználói ügynököd", "Your device resolution": "Eszközöd felbontása", "Always show encryption icons": "Titkosítási ikon folyamatos megjelenítése", "Send Logs": "Naplók küldése", @@ -874,9 +807,6 @@ "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)", "e.g. %(exampleValue)s": "pl. %(exampleValue)s", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Kérlek segíts javítani a %(brand)s-et azzal, hogy anonim felhasználási adatokat küldesz. Ez sütit (cookie) fog használni (lásd a sütire vonatkozó szabályozásunkat).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Kérlek segíts javítani a %(brand)s-et azzal, hogy anonim felhasználási adatokat küldesz. Ez sütit (cookie) fog használni.", - "Yes, I want to help!": "Igen, segítek!", "Can't leave Server Notices room": "Nem lehet elhagyni a Szerver Üzenetek szobát", "This room is used for important messages from the Homeserver, so you cannot leave it.": "Ez a szoba fontos szerverüzenetek közlésére jött létre, nem tudsz kilépni belőle.", "No Audio Outputs detected": "Nem található hang kimenet", @@ -912,9 +842,6 @@ "Please contact your service administrator to continue using the service.": "A szolgáltatás további használata érdekében kérlek vedd fel a kapcsolatot a szolgáltatás adminisztrátorával.", "This homeserver has hit its Monthly Active User limit.": "A Matrix szerver elérte a havi aktív felhasználói korlátot.", "This homeserver has exceeded one of its resource limits.": "A Matrix szerver túllépte valamelyik erőforrás korlátját.", - "Please contact your service administrator to get this limit increased.": "A korlát emelése érdekében kérlek vedd fel a kapcsolatot a szolgáltatás adminisztrátorával.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Ez a Matrix szerver elérte a havi aktív felhasználói korlátját néhány felhasználó nem fog tudni bejelentkezni.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Ez a Matrix szerver túllépte valamelyik erőforrás korlátját így néhány felhasználó nem tud majd bejelentkezni.", "Upgrade Room Version": "Szoba verziójának fejlesztése", "Create a new room with the same name, description and avatar": "Készíts egy új szobát ugyanazzal a névvel, leírással és profilképpel", "Update any local room aliases to point to the new room": "Állíts át minden helyi alternatív nevet erre a szobára", @@ -934,14 +861,7 @@ "The room upgrade could not be completed": "A szoba fejlesztését nem sikerült befejezni", "Upgrade this room to version %(version)s": "A szoba fejlesztése %(version)s verzióra", "Forces the current outbound group session in an encrypted room to be discarded": "A jelenlegi csoport munkamenet törlését kikényszeríti a titkosított szobában", - "Registration Required": "Regisztrációt igényel", - "You need to register to do this. Would you like to register now?": "Hogy ezt megtedd regisztrálnod kell. Szeretnél regisztrálni?", "Unable to connect to Homeserver. Retrying...": "A Matrix szerverrel nem lehet felvenni a kapcsolatot. Újrapróbálkozás...", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s szoba címnek beállította: %(addedAddresses)s.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s szoba címnek hozzáadta: %(addedAddresses)s.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s törölte a szoba címek közül: %(removedAddresses)s.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s törölte a szoba címek közül: %(removedAddresses)s.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s hozzáadta a szoba címekhez: %(addedAddresses)s és törölte a címek közül: %(removedAddresses)s.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s elsődleges szoba címnek beállította: %(address)s.", "%(senderName)s removed the main address for this room.": "A szoba elsődleges címét %(senderName)s törölte.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Mielőtt a naplót elküldöd, egy Github jegyet kell nyitni amiben leírod a problémádat.", @@ -958,7 +878,6 @@ "Show developer tools": "Fejlesztői eszközök megjelenítése", "Please review and accept all of the homeserver's policies": "Kérlek nézd át és fogadd el a Matrix szerver felhasználási feltételeit", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Hogy a régi üzenetekhez továbbra is hozzáférhess kijelentkezés előtt ki kell mentened a szobák titkosító kulcsait. Ehhez a %(brand)s egy frissebb verzióját kell használnod", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Előzőleg a %(brand)s egy frissebb verzióját használtad itt: %(host)s. Ki-, és vissza kell jelentkezned, hogy megint ezt a verziót használhasd végponttól végpontig titkosításhoz. ", "Incompatible Database": "Nem kompatibilis adatbázis", "Continue With Encryption Disabled": "Folytatás a titkosítás kikapcsolásával", "Sign in with single sign-on": "Bejelentkezés „egyszeri bejelentkezéssel”", @@ -967,34 +886,23 @@ "Unable to load key backup status": "A mentett kulcsok állapotát nem lehet lekérdezni", "Backup version: ": "Mentés verzió: ", "Algorithm: ": "Algoritmus: ", - "Enter a passphrase...": "Add meg a jelmondatot...", "Next": "Következő", "That matches!": "Egyeznek!", "That doesn't match.": "Nem egyeznek.", "Go back to set it again.": "Lépj vissza és állítsd be újra.", - "Repeat your passphrase...": "Ismételd meg a jelmondatot...", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Mint egy biztonsági háló, ha elfelejted a Helyreállítási jelmondatot felhasználhatod, hogy hozzáférj a régi titkosított üzeneteidhez.", - "Your Recovery Key": "A Helyreállítási kulcsod", - "Copy to clipboard": "Másolás a vágólapra", "Download": "Letölt", "Print it and store it somewhere safe": "Nyomtad ki és tárold biztonságos helyen", "Save it on a USB key or backup drive": "Mentsd el egy Pendrive-ra vagy a biztonsági mentésekhez", "Copy it to your personal cloud storage": "Másold fel a személyes felhődbe", "Set up Secure Message Recovery": "Biztonságos Üzenet Visszaállítás beállítása", - "Keep it safe": "Tartsd biztonságban", - "Create Key Backup": "Kulcs mentés készítése", "Unable to create key backup": "Kulcs mentés sikertelen", "Retry": "Újra", "Unable to load backup status": "A mentés állapotát nem lehet lekérdezni", "Unable to restore backup": "A mentést nem lehet visszaállítani", "No backup found!": "Mentés nem található!", - "Backup Restored": "Mentés visszaállítva", "Failed to decrypt %(failedCount)s sessions!": "%(failedCount)s kapcsolatot nem lehet visszafejteni!", - "Restored %(sessionCount)s session keys": "%(sessionCount)s kapcsolati kulcsok visszaállítva", - "Enter Recovery Passphrase": "Add meg a Helyreállítási jelmondatot", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "A helyreállítási jelmondattal hozzáférsz a régi titkosított üzeneteidhez és beállíthatod a biztonságos üzenetküldést.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Ha elfelejtetted a helyreállítási jelmondatodat használhatod a helyreállítási kulcsodat vagy új helyreállítási paramétereket állíthatsz be", - "Enter Recovery Key": "Add meg a Helyreállítási kulcsot", "This looks like a valid recovery key!": "Ez érvényes helyreállítási kulcsnak tűnik!", "Not a valid recovery key": "Nem helyreállítási kulcs", "Access your secure message history and set up secure messaging by entering your recovery key.": "A helyreállítási kulcs megadásával hozzáférhetsz a régi biztonságos üzeneteidhez és beállíthatod a biztonságos üzenetküldést.", @@ -1025,8 +933,6 @@ "A word by itself is easy to guess": "Egy szót magában könnyű kitalálni", "Names and surnames by themselves are easy to guess": "Neveket egymagukban könnyű kitalálni", "Common names and surnames are easy to guess": "Elterjedt neveket könnyű kitalálni", - "Great! This passphrase looks strong enough.": "Szuper! Ez a jelmondat elég erősnek látszik.", - "As a safety net, you can use it to restore your encrypted message history.": "Használhatod egy biztonsági hálóként a titkosított üzenetek visszaállításához.", "Failed to load group members": "A közösség tagságokat nem sikerült betölteni", "Failed to invite users to the room:": "A felhasználók meghívása a szobába sikertelen:", "You do not have permission to invite people to this room.": "Nincs jogosultságod embereket meghívni ebbe a szobába.", @@ -1058,7 +964,6 @@ "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", - "Waiting for %(userId)s to confirm...": "Várakozás %(userId)s felhasználóra, hogy megerősítse...", "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", @@ -1126,7 +1031,6 @@ "Timeline": "Idővonal", "Autocomplete delay (ms)": "Automatikus kiegészítés késleltetése (ms)", "Roles & Permissions": "Szerepek & Jogosultságok", - "To link to this room, please add an alias.": "A szobához való összekötéshez adj hozzá egy alternatív nevet.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "A üzenetek olvashatóságának változtatása csak az új üzenetekre lesz érvényes. A régi üzenetek láthatósága nem fog változni.", "Security & Privacy": "Biztonság & Adatvédelem", "Encryption": "Titkosítás", @@ -1143,18 +1047,12 @@ "Room Name": "Szoba neve", "Room Topic": "Szoba témája", "Join": "Belép", - "Use Legacy Verification (for older clients)": "Hagyományos hitelesítés használata (régi kliensekhez)", - "Verify by comparing a short text string.": "Rövid szöveggel való hitelesítés.", - "Begin Verifying": "Hitelesítés megkezdése", - "Waiting for partner to accept...": "Várjuk, hogy a partner elfogadja...", - "Use two-way text verification": "Kétirányú hitelesítés", "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.", "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.", "Report bugs & give feedback": "Hibajelentés & visszajelzés küldése", "Go back": "Vissza", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "A mentést nem lehet visszafejteni ezzel a kulccsal: kérlek ellenőrizd, hogy a megfelelő visszaállítási kulcsot adtad meg.", "Update status": "Állapot frissítése", "Set status": "Állapot beállítása", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Az egyedi szerver beállítással beléphetsz másik Matrix szerverbe ha megadod annak URL-jét. Ezzel használhatod az alkalmazást megy másik Matrix szerveren meglévő felhasználói fiókkal.", @@ -1261,9 +1159,6 @@ "Headphones": "Fejhallgató", "Folder": "Dosszié", "Pin": "Gombostű", - "Recovery Key Mismatch": "Visszaállítási Kulcs eltérés", - "Incorrect Recovery Passphrase": "Visszaállítási jelmondat hiba", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "A mentést nem lehet visszafejteni a jelmondattal: kérlek ellenőrizd, hogy helyesen adtad meg a visszaállítási jelmondatot.", "This homeserver would like to make sure you are not a robot.": "A Matrix szerver meg kíván győződni arról, hogy nem vagy robot.", "Change": "Változtat", "Couldn't load page": "Az oldal nem tölthető be", @@ -1283,22 +1178,14 @@ "Securely back up your keys to avoid losing them. Learn more.": "Mentsd el megfelelően a kulcsaidat a szerverre, hogy ne vesszenek el. Tudj meg erről többet.", "Not now": "Most nem", "Don't ask me again": "Ne kérdezz többet", - "Nothing appearing? Not all clients support interactive verification yet. .": "Nem jelent meg semmi? Az interaktív hitelesítést még nem minden kliens támogatja. .", "I don't want my encrypted messages": "Nincs szükségem a titkosított üzeneteimre", "Manually export keys": "Kulcsok kézi mentése", "You'll lose access to your encrypted messages": "Elveszted a hozzáférést a titkosított üzeneteidhez", "Are you sure you want to sign out?": "Biztos, hogy ki akarsz jelentkezni?", "Warning: you should only set up key backup from a trusted computer.": "Figyelmeztetés: csak biztonságos számítógépről állíts be kulcs mentést.", "Hide": "Eltakar", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "A kulcsaid másolatát titkosítva tároljuk a Matrix szerveren. Védd a mentésedet jelmondattal, hogy biztonságban legyen.", "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.", - "Set up with a Recovery Key": "Beállítás Visszaállítási Kulccsal", - "Please enter your passphrase a second time to confirm.": "Kérlek add meg a jelmondatot másodszor is a biztonság kedvéért.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "A Visszaállítási Kulcs egy olyan biztonsági elem amivel visszaállíthatod a hozzáférésed a titkosított üzenetekhez még akkor is, ha a jelmondatot elfelejtetted.", "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).", - "Secure your backup with a passphrase": "Védd a mentést egy jelmondattal", - "Confirm your passphrase": "Erősítsd meg a jelmondatot", - "Recovery key": "Visszaállítási Kulcs", "Success!": "Sikeres!", "Allow Peer-to-Peer for 1:1 calls": "Ponttól-pontig kapcsolat engedélyezése az 1:1 hívásokban", "Credits": "Közreműködők", @@ -1308,14 +1195,9 @@ "%(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.", "Show read receipts sent by other users": "Mások által küldött olvasási visszajelzések mutatása", - "Order rooms in the room list by most important first instead of most recent": "Szobák fontosság szerinti rendezése a szobák listájában az utoljára érkezett üzenet helyett", "Scissors": "Ollók", "Error updating main address": "Az elsődleges cím frissítése sikertelen", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "A szoba elsődleges címének frissítésénél hiba történt. Vagy nincs engedélyezve a szerveren vagy átmeneti hiba történt.", - "Error creating alias": "Alternatív név készítése sikertelen", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Az alternatív név készítésénél hiba történt. Lehet, hogy nincs engedélyezve a szerveren vagy átmeneti hiba történt.", - "Error removing alias": "Alternatív név törlése sikertelen", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Az alternatív név törlésénél hiba történt. Lehet, hogy már nem is létezik vagy átmeneti hiba történt.", "Error updating flair": "Kitűző frissítése sikertelen", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "A kitűző a szobában való frissítésekor hiba történt. Lehet, hogy a szerver nem engedélyezi vagy átmeneti hiba történt.", "Room Settings - %(roomName)s": "Szoba beállítások: %(roomName)s", @@ -1451,7 +1333,6 @@ "Homeserver URL does not appear to be a valid Matrix homeserver": "A matrix URL nem tűnik érvényesnek", "Invalid base_url for m.identity_server": "Érvénytelen base_url az m.identity_server -hez", "Identity server URL does not appear to be a valid identity server": "Az Azonosító szerver URL nem tűnik érvényesnek", - "A conference call could not be started because the integrations server is not available": "A konferencia hívást nem lehet elkezdeni mert az integrációs szerver nem érhető el", "Name or Matrix ID": "Név vagy Matrix azonosító", "Unbans user with given ID": "Visszaengedi a megadott azonosítójú felhasználót", "reacted with %(shortName)s": "ezzel reagált: %(shortName)s", @@ -1472,7 +1353,6 @@ "Your %(brand)s is misconfigured": "A %(brand)sod hibásan van beállítva", "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Kérd meg a %(brand)s adminisztrátorodat, hogy ellenőrizze a beállításaidat hibás vagy duplikált bejegyzéseket keresve.", "Unexpected error resolving identity server configuration": "Az azonosítási szerver beállításainak feldolgozásánál váratlan hiba történt", - "Show recently visited rooms above the room list": "Legutóbb meglátogatott szobák megjelenítése a szobalista felett", "Uploaded sound": "Feltöltött hang", "Sounds": "Hangok", "Notification sound": "Értesítési hang", @@ -1636,13 +1516,8 @@ "Read Marker lifetime (ms)": "Olvasás visszajelzés érvényesség (ms)", "Read Marker off-screen lifetime (ms)": "Olvasás visszajelzés érvényessége képernyőn kívül (ms)", "Changes the avatar of the current room": "Megváltoztatja a profilképed a jelenlegi szobában", - "Room alias": "Szoba álnév", "e.g. my-room": "pl.: szobam", - "Please provide a room alias": "Kérlek adj meg egy álnevet a szobához", - "This alias is available to use": "Az álnév használható", - "This alias is already in use": "Az álnév már használatban van", "Please enter a name for the room": "Kérlek adj meg egy nevet a szobához", - "Set a room alias to easily share your room with other people.": "A szoba emberekkel való könnyebb megosztásához állíts be álnevet.", "This room is private, and can only be joined by invitation.": "A szoba zárt, csak meghívóval lehet belépni.", "Create a public room": "Nyilvános szoba készítése", "Create a private room": "Zárt szoba készítése", @@ -1725,7 +1600,6 @@ "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.", "Error subscribing to list": "A listára való feliratkozásnál hiba történt", - "Please verify the room ID or alias and try again.": "Kérünk ellenőrizd a szoba azonosítóját vagy alternatív nevét és próbáld újra.", "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.", @@ -1749,7 +1623,6 @@ "Subscribed lists": "Feliratkozott listák", "Subscribing to a ban list will cause you to join it!": "A feliratkozás egy tiltó listára azzal jár, hogy csatlakozol hozzá!", "If this isn't what you want, please use a different tool to ignore users.": "Ha nem ez az amit szeretnél, kérlek használj más eszközt a felhasználók figyelmen kívül hagyásához.", - "Room ID or alias of ban list": "Tiltó lista szoba azonosítója vagy alternatív neve", "Subscribe": "Feliratkozás", "You have ignored this user, so their message is hidden. Show anyways.": "Ezt a felhasználót figyelmen kívül hagyod, így az üzenetei el lesznek rejtve. Mindenképpen megmutat.", "Custom (%(level)s)": "Egyéni (%(level)s)", @@ -1772,7 +1645,6 @@ "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.", - "Enable local event indexing and E2EE search (requires restart)": "Helyi esemény indexálás és végponttól végpontig titkosított események keresésének engedélyezése (újraindítás szükséges)", "More options": "További beállítások", "Reload": "Újratölt", "Take picture": "Fénykép készítés", @@ -1793,7 +1665,6 @@ "Decline (%(counter)s)": "Elutasítás (%(counter)s)", "Manage integrations": "Integrációk kezelése", "Verification Request": "Ellenőrzési kérés", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "%(senderName)s placed a voice call.": "%(senderName)s hanghívást kezdeményezett.", "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s hanghívást kezdeményezett. (ebben a böngészőben nem támogatott)", "%(senderName)s placed a video call.": "%(senderName)s videóhívást kezdeményezett.", @@ -1818,7 +1689,6 @@ " reacted with %(content)s": " ezzel reagáltak: %(content)s", " wants to chat": " csevegni szeretne", "Start chatting": "Beszélgetés elkezdése", - "Send cross-signing keys to homeserver": "Kereszt-aláírás kulcsok küldése a matrix szervernek", "Cross-signing public keys:": "Eszközök közti hitelesítés nyilvános kulcsai:", "not found": "nem található", "Cross-signing private keys:": "Eszközök közti hitelesítés privát kulcsai:", @@ -1826,22 +1696,11 @@ "Secret storage public key:": "Biztonsági tároló nyilvános kulcs:", "in account data": "fiók adatokban", "Cross-signing": "Eszközök közti aláírás", - "Enter secret storage passphrase": "Add meg a jelmondatot a biztonsági tárolóhoz", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "A biztonsági tárolóhoz nem lehet hozzáférni. Kérlek ellenőrizd, hogy jó jelmondatot adtál-e meg.", - "Warning: You should only access secret storage from a trusted computer.": "Figyelem: Csak biztonságos eszközről férj hozzá a biztonságos tárolóhoz.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Ha elfelejtetted a jelmondatodat használd a visszaállítási kulcsod vagy állíts be új visszaállítási lehetőséget.", - "Enter secret storage recovery key": "Add meg a visszaállítási kulcsot a biztonsági tárolóhoz", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "A biztonsági tárolóhoz nem lehet hozzáférni. Kérlek ellenőrizd, hogy jó visszaállítási kulcsot adtál-e meg.", - "If you've forgotten your recovery key you can .": "Ha elfelejtetted a visszaállítási kulcsot .", "Warning: You should only set up key backup from a trusted computer.": "Figyelmeztetés: Csak biztonságos számítógépről állíts be kulcs mentést.", "If you've forgotten your recovery key you can ": "Ha elfelejtetted a visszaállítási kulcsot ", "Set up with a recovery key": "Beállítás visszaállítási kulccsal", - "As a safety net, you can use it to restore your access to encrypted messages if you forget your passphrase.": "Mint egy biztonsági háló, ha elfelejted a jelmondatot akkor felhasználhatod ahhoz, hogy hozzáférj a titkosított üzeneteidhez.", - "As a safety net, you can use it to restore your access to encrypted messages.": "Használhatod egy biztonsági hálóként a titkosított üzenetekhez való hozzáférés visszaállításához.", - "Keep your recovery key somewhere very secure, like a password manager (or a safe).": "A Visszaállítási Kulcsot tartsd biztonságos helyen, mint pl. egy jelszókezelő (vagy széf).", "Your recovery key has been copied to your clipboard, paste it to:": "A visszaállítási kulcsod a vágólapra lett másolva, illeszd be ide:", "Your recovery key is in your Downloads folder.": "A visszaállítási kulcsod a Letöltések mappában van.", - "Storing secrets...": "Titkok tárolása...", "Unable to set up secret storage": "A biztonsági tárolót nem sikerült beállítani", "%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s törölte azt a szabályt amivel ilyen felhasználók voltak kitiltva: %(glob)s", "%(senderName)s removed the rule banning rooms matching %(glob)s": "%(senderName)s törölte azt a szabályt amivel ilyen szobák voltak kitiltva: %(glob)s", @@ -1885,7 +1744,6 @@ "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", - "Show a presence dot next to DMs in the room list": "Jelenlét pötty mutatása a Közvetlen beszélgetések mellett a szobák listájában", "Lock": "Zár", "a few seconds ago": "néhány másodperce", "about a minute ago": "percekkel ezelőtt", @@ -1902,8 +1760,6 @@ "about a day from now": "egy nap múlva", "%(num)s days from now": "%(num)s nap múlva", "Restore": "Visszaállít", - "Complete security": "Biztonság beállítása", - "Verify this session to grant it access to encrypted messages.": "A titkosított üzenetekhez való hozzáféréshez hitelesítsd ezt a munkamenetet.", "Start": "Indít", "Session verified": "Munkamenet hitelesítve", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Ez a munkameneted hitelesítve van. A titkosított üzenetekhez hozzáférése van és más felhasználók megbízhatónak látják.", @@ -1916,7 +1772,6 @@ "Something went wrong trying to invite the users.": "Valami nem sikerült a felhasználók meghívásával.", "We couldn't invite those users. Please check the users you want to invite and try again.": "Ezeket a felhasználókat nem tudtuk meghívni. Ellenőrizd azokat a felhasználókat akiket meg szeretnél hívni és próbáld újra.", "Recently Direct Messaged": "Nemrég küldött Közvetlen Üzenetek", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Ha nem találsz valakit, akkor kérdezd meg a Matrix címét (pl.: @felhasználó:szerver.com) vagy oszd meg ezt a szobát.", "Verify User": "Felhasználó ellenőrzése", "For extra security, verify this user by checking a one-time code on both of your devices.": "A biztonság fokozásáért ellenőrizd ezt a felhasználót egy egyszeri kód egyeztetésével mindkettőtök készülékén.", "Start Verification": "Ellenőrzés elindítása", @@ -1925,29 +1780,18 @@ "You can use /help to list available commands. Did you mean to send this as a message?": "Használhatod a /help-et az elérhető parancsok kilistázásához. Ezt üzenetként akartad küldeni?", "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", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s szoba címnek, %(count)s másikkal együtt, hozzáadta: %(addedAddresses)s", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s %(count)s másikkal együtt törölte a szoba címek közül: %(removedAddresses)s", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s %(countRemoved)s darabot törölt és %(countAdded)s darabot hozzáadott a szoba címekhez", "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", "Invite only": "Csak meghívóval", "Send a reply…": "Válasz küldése…", "Send a message…": "Üzenet küldése…", "Reject & Ignore user": "Felhasználó elutasítása és figyelmen kívül hagyása", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Ha nem találsz valakit, kérdezd meg a Matrix címét, vagy add meg neki a te Matrix címed (%(userId)s), vagy a profil hivatkozásod.", "Enter your account password to confirm the upgrade:": "A fejlesztés megerősítéséhez add meg a fiók jelszavadat:", "You'll need to authenticate with the server to confirm the upgrade.": "Azonosítanod kell magad a szerveren a fejlesztés megerősítéséhez.", - "Enter a passphrase": "Jelmondat bevitele", - "Enter your passphrase a second time to confirm it.": "Add meg a jelmondatot másodszor is a biztonság kedvéért.", - "Verify other users in their profile.": "Más felhasználók ellenőrzése a profiljukban.", "Upgrade your encryption": "Titkosításod fejlesztése", "Set up encryption": "Titkosítás beállítása", - "Encryption upgraded": "Titkosítás fejlesztve", - "Encryption setup complete": "Titkosítás beállítása kész", "Verify this session": "Munkamenet ellenőrzése", "Encryption upgrade available": "A titkosítási fejlesztés elérhető", - "%(senderName)s turned on end-to-end encryption.": "%(senderName)s bekapcsolta a végpontok közötti titkosítást.", - "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s bekapcsolta a végpontok közötti titkosítást (ismeretlen algoritmus: %(algorithm)s).", "Enable message search in encrypted rooms": "Üzenetek keresésének engedélyezése titkosított szobákban", "Review": "Átnéz", "This bridge was provisioned by .": "Ezt a hidat az alábbi felhasználó készítette: .", @@ -1961,7 +1805,6 @@ "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 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 %(brand)s a web böngészőben nem tud biztonságosan titkosított üzenetet helyben elmenteni. Hogy a titkosított üzenetekre tudjál keresni használj Asztali %(brand)s klienst.", "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.", @@ -1970,31 +1813,20 @@ "Use this session to verify your new one, granting it access to encrypted messages:": "Az új munkamenet ellenőrzéséhez használd ezt, amivel hozzáférést adsz a titkosított üzenetekhez:", "If you didn’t sign in to this session, your account may be compromised.": "Ha nem te jelentkeztél be ebbe a munkamenetbe akkor a fiókodat feltörték.", "This wasn't me": "Nem én voltam", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Helyezd biztonságba a titkosítási kulcsaidat egy jelmondattal. A maximális biztonság érdekében ez térjen el a felhasználói fióknál használt jelszótól:", "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", - "Not currently downloading messages for any room.": "Jelenleg egy szobából sem folyik üzenet letöltés.", - "Downloading mesages for %(currentRoom)s.": "Üzenetek letöltése innen: %(currentRoom)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:", "Indexed messages:": "Indexált üzenetek:", - "Number of rooms:": "Szobák száma:", "Restore your key backup to upgrade your encryption": "A titkosítás fejlesztéséhez allítsd vissza a kulcs mentést", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Ismeretlen munkamenetek vannak a szobában: ha ellenőrzés nélkül folytatod lehet, hogy valaki belehallgat a hívásodba.", "Setting up keys": "Kulcsok beállítása", - "Unverified session": "Ellenőrizetlen munkamenet", "Verifies a user, session, and pubkey tuple": "Felhasználó, munkamenet és nyilvános kulcs hármas ellenőrzése", "Unknown (user, session) pair:": "Ismeretlen (felhasználó, munkamenet) páros:", "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!", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Kereszt-aláírás engedélyezése a felhasználó alapú azonosításhoz a munkamenet alapú helyett (fejlesztés alatt)", - "Show padlocks on invite only rooms": "Lakat mutatása azoknál a szobáknál amikbe csak meghívóval lehet belépni", "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", - "Keep secret storage passphrase in memory for this session": "A biztonsági tároló jelmondatát ebben a munkamenetben tartsa a memóriában", "How fast should messages be downloaded.": "Milyen gyorsan legyenek az üzenetek letöltve.", - "Confirm the emoji below are displayed on both devices, in the same order:": "Erősítsd meg, hogy az emodzsik alul mind a két eszközön ugyanazok ugyanabban a sorrendben:", - "Verify this device by confirming the following number appears on its screen.": "Ellenőrizd az eszközt azzal, hogy megerősíted az alábbi számok jelentek meg a képernyőjén.", "Waiting for %(displayName)s to verify…": "%(displayName)s felhasználóra várakozás az ellenőrzéshez…", "They match": "Egyeznek", "They don't match": "Nem egyeznek", @@ -2022,23 +1854,17 @@ "Backup has an invalid signature from unverified session ": "A mentés érvénytelen aláírást tartalmaz ellenőrizetlen munkamenetből ", "Backup is not signed by any of your sessions": "A mentés nem tartalmaz aláírást egyetlen munkamenetedből sem", "This backup is trusted because it has been restored on this session": "Ez a mentés megbízható mert ebben a munkamenetben lett visszaállítva", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "A mentési kulcs a biztonsági tárolóban van elmentve, de ebben a munkamenetben ez a lehetőség nincs engedélyezve. Kérlek engedélyezd az eszközök közötti hitelesítést a Laborokban a kulcs mentés állapotának megváltoztatásához.", "Your keys are not being backed up from this session.": "A kulcsaid nem kerülnek elmentésre erről a munkamenetről.", "Enable desktop notifications for this session": "Asztali értesítések engedélyezése ebben a munkamenetben", "Enable audible notifications for this session": "Hallható értesítések engedélyezése ebben a munkamenetben", "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "A jelszavad sikeresen megváltozott. Addig nem kapsz push értesítéseket más munkamenetekben amíg nem jelentkezel vissza bennük", "Session ID:": "Munkamenet azonosító:", "Session key:": "Munkamenet kulcs:", - "Sessions": "Munkamenetek", "A session's public name is visible to people you communicate with": "A munkamenet nyilvános neve megjelenik azoknál az embereknél, akikkel beszélgetsz", "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", - "Some sessions for this user are not trusted": "Ennek a felhasználónak néhány munkamenete nem megbízható", - "All sessions for this user are trusted": "A felhasználónak minden munkamenete megbízható", - "Some sessions in this encrypted room are not trusted": "Ebben a titkosított szobában nem minden munkamenet megbízható", - "All sessions in this encrypted room are trusted": "Ebben a titkosított szobában minden munkamenet megbízható", "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.", @@ -2046,7 +1872,6 @@ "Re-request encryption keys from your other sessions.": "Titkosítási kulcsok újrakérése a többi munkamenetből.", "Encrypted by an unverified session": "Ellenőrizetlen munkamenet titkosította", "Encrypted by a deleted session": "Törölt munkamenet által lett titkosítva", - "No sessions with registered encryption keys": "Nincs munkamenet regisztrált titkosítási kulcsokkal", "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 not secure": "Az üzeneteid nincsenek biztonságban", @@ -2064,9 +1889,6 @@ "If you can't scan the code above, verify by comparing unique emoji.": "Ha nem tudod beolvasni az alábbi kódot, ellenőrizd az egyedi emodzsik összehasonlításával.", "You've successfully verified %(displayName)s!": "Sikeresen ellenőrizted a felhasználót: %(displayName)s!", "Got it": "Értem", - "Verification timed out. Start verification again from their profile.": "Ellenőrzés időtúllépés. Kezd újra az ellenőrzést a másik felhasználó profiljából.", - "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s törölte az ellenőrzést. Kezd újra az ellenőrzést a felhasználó profiljából.", - "You cancelled verification. Start verification again from their profile.": "Törölted az ellenőrzést. Kezd újra az ellenőrzést a felhasználó profiljából.", "Encryption enabled": "Titkosítás bekapcsolva", "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Ebben a szobában az üzenetek végpontok között titkosítottak. További információkért és ellenőrzéshez nyisd meg a felhasználó profilját.", "Encryption not enabled": "Titkosítás nincs engedélyezve", @@ -2074,62 +1896,38 @@ "Clear all data in this session?": "Minden adat törlése ebben a munkamenetben?", "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Az adatok törlése ebből a munkamenetből végleges. A titkosított üzenetek elvesznek hacsak nincsenek elmentve a kulcsai.", "Verify session": "Munkamenet ellenőrzése", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "A munkamenet megbízhatóságának eldöntéséhez ellenőrizd a kulcsot a Felhasználói Beállításokban ezen az eszközön, hogy megegyezik-e az alábbi kulccsal:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "A munkamenet megbízhatóságának eldöntéséhez vedd fel a kapcsolatot a tulajdonosával valami másik módon (pl. személyesen vagy telefonhívással) és kérdezd meg, hogy a Felhasználói Beállításokban ugyanazt a kulcsot látja-e mint ami alul van:", "Session name": "Munkamenet neve", "Session key": "Munkamenet kulcs", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Ha egyezik akkor nyomd meg az ellenőriz gombot alul. Ha nem akkor valaki lehallgatja a munkamenetet és valószínű, hogy inkább a tiltólista gombra kellene kattintani.", "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.", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "Új munkamenetet adtál hozzá '%(displayName)s' néven ami kéri a titkosítási kulcsokat.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Az ellenőrizetlen munkameneted '%(displayName)s' néven titkosítási kulcsokat kér.", - "Loading session info...": "Munkamenet információk betöltése...", "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.", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Jelenleg tiltólistán vannak az ellenőrizetlen munkamenetek; hogy üzeneteket tudj küldeni ezekbe a munkamenetekbe ellenőrizned kell őket.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Javasoljuk, hogy minden munkamenetet ellenőrizz, hogy a tényleges tulajdonosához tartoznak vagy újraküldheted az üzenetet ha akarod anélkül, hogy ellenőriznéd őket.", - "Room contains unknown sessions": "A szoba ismeretlen munkameneteket tartalmaz", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "\"%(RoomName)s\" még nem látott munkameneteket tartalmaz.", - "Unknown sessions": "Ismeretlen munkamenetek", "Cancel entering passphrase?": "Megszakítod a jelmondat bevitelét?", - "If you cancel now, you won't complete your secret storage operation!": "Ha most megszakítod, akkor nem fejezed be a biztonságos tárolóval kapcsolatos műveletet!", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "A jelmondat megadásával hozzáférhetsz a biztonságos üzeneteidhez és az eszközök közötti hitelesítéshez használt személyazonosságodhoz, hogy más munkameneteket hitelesíthess.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "A visszaállítási kulcs megadásával hozzáférhetsz a biztonságos üzeneteidhez és az eszközök közötti hitelesítéshez használt személyazonosságodhoz, hogy más munkameneteket hitelesíthess.", "Recovery key mismatch": "A visszaállítási kulcs nem megfelelő", "Incorrect recovery passphrase": "A visszaállítási jelmondat helytelen", - "Backup restored": "Mentés visszaállítva", "Enter recovery passphrase": "Visszaállítási jelmondat megadása", "Enter recovery key": "Visszaállítási kulcs megadása", "Confirm your identity by entering your account password below.": "A fiók jelszó megadásával erősítsd meg a személyazonosságodat.", - "Message not sent due to unknown sessions being present": "Ismeretlen munkamenet miatt az üzenet nem került elküldésre", - "Show sessions, send anyway or cancel.": "Munkamenetek megmutatása, küldés mindenképpen vagy küldés megszakítása.", "Your new session is now verified. Other users will see it as trusted.": "Az új munkameneted ellenőrizve. Mások megbízhatónak fogják látni.", "Without completing security on this session, it won’t have access to encrypted messages.": "Amíg a biztonság nincs beállítva a munkameneten nem fér hozzá a titkosított üzenetekhez.", "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "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.", "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.", - "Sender session information": "Küldő munkamenet információ", "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.", - "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Állítsd be a titkosítást ezen a munkameneten, 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.", - "Back up my encryption keys, securing them with the same passphrase": "Mentsd el a titkosítási kulcsaimat és védd őket ugyanazzal a jelmondattal", "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", - "You can now verify your other devices, and other users to keep your chats safe.": "Már ellenőrizheted a többi eszközödet és más felhasználókat, hogy a beszélgetéseidet biztonságban tudhasd.", "Make a copy of your recovery key": "Készíts másolatot a visszaállítási kulcsodról", - "You're done!": "Kész!", "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.", "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:", - "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s / %(totalRooms)s", "Message downloading sleep time(ms)": "Üzenet letöltés alvási idő (ms)", "If you cancel now, you won't complete verifying the other user.": "A másik felhasználó ellenőrzését nem fejezed be, ha ezt most megszakítod.", "If you cancel now, you won't complete verifying your other session.": "A másik munkameneted ellenőrzését nem fejezed be, ha ezt most megszakítod.", - "If you cancel now, you won't complete your secret storage operation.": "A Biztonsági tárolóval kapcsolatos műveletet nem fejezed be ha ezt most megszakítod.", "Show typing notifications": "Gépelés visszajelzés megjelenítése", "Verify this session by completing one of the following:": "Ellenőrizd ezt a munkamenetet az alábbiak egyikével:", "Scan this unique code": "Ennek az egyedi kódnak a beolvasása", @@ -2139,22 +1937,17 @@ "Not Trusted": "Megbízhatatlan", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) új munkamenetbe lépett be anélkül, hogy ellenőrizte volna:", "Ask this user to verify their session, or manually verify it below.": "Kérd meg a felhasználót, hogy hitelesítse a munkamenetét vagy ellenőrizd kézzel alább.", - "Manually Verify": "Manuális ellenőrzés", "Verify by scanning": "Ellenőrzés kód beolvasással", "Destroy cross-signing keys?": "Megsemmisíted az eszközök közti hitelesítés kulcsait?", "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Eszközök közti hitelesítési kulcsok törlése végleges. Mindenki akit ezzel hitelesítettél biztonsági figyelmeztetéseket fog látni. Hacsak nem vesztetted el az összes eszközödet amivel eszközök közti hitelesítést tudsz végezni, nem valószínű, hogy ezt szeretnéd tenni.", "Clear cross-signing keys": "Eszközök közti hitelesítési kulcsok törlése", "Reset cross-signing and secret storage": "Eszközök közti hitelesítés és biztonsági tároló alaphelyzetbe állítása", - "The version of %(brand)s": "%(brand)s verziója", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Olyan eszközön használod-e a %(brand)sot, ahol az érintés az elsődleges beviteli mód", "Whether you're using %(brand)s as an installed Progressive Web App": "Progresszív webalkalmazásként használod-e a %(brand)sot", "Your user agent": "Felhasználói ügynök", - "The information being sent to us to help make %(brand)s better includes:": "Az alábbi információk kerülnek elküldésre, amivel jobbá tehetjük a %(brand)sot:", "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.": "Az ellenőrizni kívánt munkamenet nem támogatja se a QR kód beolvasást se az emodzsi ellenőrzést, amit a %(brand)s támogat. Próbáld meg egy másik klienssel.", "You declined": "Elutasítottad", "%(name)s declined": "%(name)s elutasította", - "accepting …": "elfogadás …", - "declining …": "elutasítás …", "Cancelling…": "Megszakítás…", "Your homeserver does not support cross-signing.": "A matrix szervered nem támogatja az eszközök közti hitelesítést.", "Homeserver feature support:": "Matrix szerver támogatott szolgáltatások:", @@ -2178,7 +1971,6 @@ "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.", "Mark all as read": "Mindent olvasottnak jelöl", "Not currently indexing messages for any room.": "Jelenleg egyik szoba indexelése sem történik.", - "Currently indexing: %(currentRoom)s.": "Indexelés alatt jelenleg: %(currentRoom)s.", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s / %(totalRooms)s", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s a szoba nevét megváltoztatta erről: %(oldRoomName)s erre: %(newRoomName)s.", "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s egy alternatív nevet (%(addresses)s) adott hozzá a szobához.", @@ -2189,27 +1981,18 @@ "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s ennek a szobának megváltoztatta az elsődleges és az alternatív címét.", "%(senderName)s changed the addresses for this room.": "%(senderName)s megváltoztatta ennek a szobának a címét.", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "A szoba címének megváltoztatásakor hiba történt. Lehet, hogy a szerver nem engedélyezi vagy átmeneti hiba történt.", - "Alternative addresses for this room:": "A szoba alternatív címei:", - "This room has no alternative addresses": "A szobának nincsen alternatív címe", - "New address (e.g. #foo:domain)": "Új cím (pl.: #foo:domain)", - "Local addresses (unmoderated content)": "Helyi cím (nem moderált tartalom)", - "You don't have permission to delete the alias.": "Ezt az alternatív nevet nincs jogod törölni.", "Support adding custom themes": "Egyedi téma támogatás hozzáadása", "Invalid theme schema.": "Téma séma érvénytelen.", "Error downloading theme information.": "A téma információk letöltése sikertelen.", "Theme added!": "Téma hozzáadva!", "Custom theme URL": "Egyedi téma URL", "Add theme": "Téma hozzáadása", - "Review Sessions": "Munkamenetek átnézése", "Manually Verify by Text": "Manuális szöveges ellenőrzés", "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ó", "User signing private key:": "Titkos felhasználó aláíró kulcs:", - "Secret Storage key format:": "Biztonsági tároló kulcs formátum:", - "outdated": "lejárt", - "up to date": "friss", "Keyboard Shortcuts": "Billentyűzet kombinációk", "Scroll to most recent messages": "A legfrissebb üzenethez görget", "Local address": "Helyi cím", @@ -2227,9 +2010,7 @@ "Remove server": "Szerver törlése", "Matrix": "Matrix", "Add a new server": "Új szerver hozzáadása", - "Unverified login. Was this you?": "Ellenőrizetlen bejelentkezés. Te voltál?", "Manually verify all remote sessions": "Az összes távoli munkamenet manuális ellenőrzése", - "Update your secure storage": "A biztonsági tárolód frissítése", "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)", @@ -2252,15 +2033,11 @@ "%(brand)s encountered an error during upload of:": "%(brand)s hibába ütközött a feltöltés közben:", "Upload completed": "A feltöltés befejeződött", "Cancelled signature upload": "Az aláírás feltöltése megszakítva", - "Unabled to upload": "A feltöltés nem lehetséges", "Signature upload success": "Az aláírások feltöltése sikeres", "Signature upload failed": "Az aláírások feltöltése sikertelen", "Confirm by comparing the following with the User Settings in your other session:": "Erősítsd meg a felhasználói beállítások összehasonlításával a többi munkamenetedben:", "Confirm this user's session by comparing the following with their User Settings:": "Ezt a munkamenetet hitelesítsd az ő felhasználói beállításának az összehasonlításával:", "If they don't match, the security of your communication may be compromised.": "Ha nem egyeznek akkor a kommunikációtok biztonsága veszélyben lehet.", - "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "Nyiss meg egy meglévő munkamenetet és használd ennek az ellenőrzéséhez, hogy a titkosított üzenetekhez hozzáférhessen.", - "Waiting…": "Várakozik…", - "If you can’t access one, ": "Ha nem érsz el egyet sem, ", "Navigation": "Navigálás", "Calls": "Hívások", "Room List": "Szoba lista", @@ -2351,8 +2128,6 @@ "Failed to set topic": "A téma beállítása sikertelen", "Command failed": "A parancs sikertelen", "Could not find user in room": "A felhasználó nem található a szobában", - "Enable cross-signing to verify per-user instead of per-session": "A felhasználó alapú ellenőrzéshez a munkamenet alapú helyett engedélyezd az eszközök közötti hitelesítést", - "Keep recovery passphrase in memory for this session": "A visszaállítási jelmondat memóriában tartása ebben a munkamenetben", "Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "Erősítsd meg az egyszeri bejelentkezéssel, hogy ezeket a munkameneteteket törlöd.", "Confirm deleting these sessions by using Single Sign On to prove your identity.|one": "Erősítsd meg egyszeri bejelentkezéssel, hogy ezt a munkamenetet törlöd.", "Can't load this message": "Ezt az üzenetet nem sikerült betölteni", @@ -2363,27 +2138,17 @@ "Unable to upload": "Nem lehet feltölteni", "Verify other session": "Más munkamenetek ellenőrzése", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "A biztonsági tárolóhoz nem lehet hozzáférni. Kérlek ellenőrizd, hogy jó visszaállítási jelmondatot adtál-e meg.", - "Warning: You should only do this on a trusted computer.": "Figyelmeztetés: Ezt csak megbízható számítógépen tedd meg.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "A visszaállítási jelmondat megadásával hozzáférhetsz a titkosított üzeneteidhez és az eszközök közötti aláírásnál használt személyazonosságodhoz hogy más munkameneteket ellenőrizhess.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Ha elfelejtetted a visszaállítási jelmondatodat, akkor használhatod a visszaállítási kulcsot vagy új visszaállítási lehetőséget állíthatsz be.", "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "Ezzel a visszaállítási kulccsal a mentést nem lehet visszafejteni: kérlek ellenőrizd, hogy a visszaállítási kulcsot jól adtad-e meg.", "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", - "Use an existing session to verify this one, granting it access to encrypted messages.": "A titkosított üzenetekhez való hozzáféréshez nyiss meg egy létező munkamenetet és használd ennek a hitelesítésére.", - "If you can’t access one, ": "Ha nem érsz el egyet sem, ", - "Use your other device to continue…": "A folytatáshoz használd a más eszközödet…", "Great! This recovery passphrase looks strong enough.": "Nagyszerű! Ez a visszaállítási jelmondat elég erősnek tűnik.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Helyezd biztonságba a titkosított információkat, hogy kijelentkezés után is vissza tudd állítani, a visszaállítási jelmondat beállításával. Ez legyen a fiók jelszótól különböző:", "Enter a recovery passphrase": "Visszaállítási jelmondat megadása", - "Back up encrypted message keys": "Titkosított üzenetek kulcsainak mentése", "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.", "Confirm your recovery passphrase": "Visszaállítási jelmondat megerősítése", "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "A visszaállítási kulcs egy biztonsági háló - arra az esetre ha elfelejted a visszaállítási jelmondatot a titkosított üzenetekhez való hozzáférést vissza tudd állítani.", - "Confirm recovery passphrase": "Visszaállítási jelmondat megerősítése", "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "A kulcsaidat titkosított formában tároljuk a szerverünkön. Helyezd biztonságba a mentéseded a visszaállítási jelmondattal.", - "Enter a recovery passphrase...": "Visszaállítási jelmondat megadása…", "Please enter your recovery passphrase a second time to confirm.": "A megerősítéshez kérlek add meg a visszaállítási jelmondatot még egyszer.", "Repeat your recovery passphrase...": "Ismételd meg a visszaállítási jelmondatot…", "Secure your backup with a recovery passphrase": "Védd a mentést a visszaállítási jelmondattal", @@ -2394,7 +2159,6 @@ "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Erősítsd meg ebben a bejelentkezésben a személyazonosságodat egy másik munkamenetből, hogy hozzáférhess a titkosított üzenetekhez.", "This requires the latest %(brand)s on your other devices:": "A %(brand)s legújabb kliensére van ehhez szükséged a többi eszközödön:", "or another cross-signing capable Matrix client": "vagy másik eszközök közötti hitelesítésre alkalmas Matrix kliensre", - "Use Recovery Passphrase or Key": "Használd a Visszaállítási Jelmondatot vagy Kulcsot", "Unable to query secret storage status": "A biztonsági tároló állapotát nem lehet lekérdezni", "Review where you’re logged in": "Tekintsd át hol vagy bejelentkezve", "New login. Was this you?": "Új bejelentkezés. Te voltál?", @@ -2429,10 +2193,7 @@ "Joins room with given address": "Megadott címmel csatlakozik a szobához", "Unrecognised room address:": "Ismeretlen szoba cím:", "Font scaling": "Betű nagyítás", - "Use the improved room list (in development - refresh to apply changes)": "Fejlesztett szobalista használata (fejlesztés alatt - frissíts a változások életbe léptetéséhez)", - "Use IRC layout": "IRC kinézet használata", "Font size": "Betűméret", - "Custom font size": "Egyedit betűméret", "IRC display name width": "IRC megjelenítési név szélessége", "Size must be a number": "A méretnek számnak kell lennie", "Custom font size can only be between %(min)s pt and %(max)s pt": "Az egyedi betűméret csak %(min)s pont és %(max)s pont között lehet", @@ -2471,8 +2232,6 @@ "Delete the room address %(alias)s and remove %(name)s from the directory?": "Törlöd a szoba címét: %(alias)s és eltávolítod a könyvtárból ezt: %(name)s?", "delete the address.": "cím törlése.", "Use a different passphrase?": "Másik jelmondat használata?", - "sent an image.": "kép elküldve.", - "You: %(message)s": "Te: %(message)s", "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "A szerver adminisztrátorod alapesetben kikapcsolta a végpontok közötti titkosítást a közvetlen beszélgetésekben.", "Emoji picker": "Emodzsi választó", "No recently visited rooms": "Nincsenek nemrégiben meglátogatott szobák", @@ -2492,32 +2251,17 @@ "Switch theme": "Kinézet váltása", "Security & privacy": "Biztonság és adatvédelem", "All settings": "Minden beállítás", - "Archived rooms": "Archivált szobák", "Feedback": "Visszajelzés", - "Account settings": "Fiók beállítása", "Light": "Világos", "Dark": "Sötét", "Customise your appearance": "Szabd személyre a megjelenítést", "Appearance Settings only affect this %(brand)s session.": "A megjelenítési beállítások csak erre a munkamenetre vonatkoznak.", "Activity": "Aktivitás", "A-Z": "A-Z", - "Recovery Key": "Visszaállítási Kulcs", - "This isn't the recovery key for your account": "Ez nem a fiókod visszaállítási kulcsa", - "This isn't a valid recovery key": "Ez nem egy érvényes visszaállítási kulcs", "Looks good!": "Jól néz ki!", "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", - "Enter your Recovery Key or enter a Recovery Passphrase to continue.": "A továbblépéshez add meg a Visszaállítási kulcsot vagy a Visszaállítási jelmondatot.", - "Enter your Recovery Key to continue.": "A továbblépéshez add meg a Visszaállítási Kulcsot.", - "Upgrade your Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you'll need it to unlock your data.": "Fejleszd a Visszaállítási kulcsot, hogy a fiók adatokkal tárolhasd a titkosítási kulcsokat és jelszavakat. Szükséged lesz rá hogy hozzáférj az adataidhoz ha elveszted a hozzáférésed ehhez a bejelentkezéshez.", - "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.": "A Visszaállítási kulcsot tárold biztonságos helyen mivel felhasználható a titkosított üzenetekhez és adatokhoz való hozzáféréshez.", - "Create a Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you’ll need it to unlock your data.": "Készíts Visszaállítási kulcsot, hogy a fiók adatokkal tárolhasd a titkosítási kulcsokat és jelszavakat. Szükséged lesz rá hogy hozzáférj az adataidhoz ha elveszted a hozzáférésed ehhez a bejelentkezéshez.", - "Create a Recovery Key": "Visszaállítási kulcs készítése", - "Upgrade your Recovery Key": "A Visszaállítási kulcs fejlesztése", - "Store your Recovery Key": "Visszaállítási kulcs tárolása", - "Use the improved room list (in development - will refresh to apply changes)": "Használd a fejlesztett szoba listát (fejlesztés alatt - a változások a frissítés után aktiválódnak)", "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)", - "Enable IRC layout option in the appearance tab": "IRC kinézet lehetőségének megjelenítése a kinézet fülön", "Use custom size": "Egyedi méret használata", "Use a system font": "Rendszer betűtípus használata", "System font name": "Rendszer betűtípus neve", diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index 10de3230f6..2de350bae3 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -7,7 +7,6 @@ "No media permissions": "Tidak ada izin media", "Microphone": "Mikrofon", "Camera": "Kamera", - "Alias (optional)": "Alias (pilihan)", "Are you sure?": "Anda yakin?", "An error has occurred.": "Telah terjadi kesalahan.", "Are you sure you want to reject the invitation?": "Anda yakin menolak undangannya?", @@ -20,18 +19,13 @@ "Create Room": "Buat Ruang", "Current password": "Password sekarang", "Deactivate Account": "Nonaktifkan Akun", - "Device ID": "ID Perangkat", "Email": "Email", "Email address": "Alamat email", - "Enable Notifications": "Aktifkan Notifikasi", - "Algorithm": "Algoritma", "Attachment": "Lampiran", "Command error": "Perintah gagal", "Decline": "Tolak", "Default": "Bawaan", - "Direct chats": "Obrolan langsung", "Download %(text)s": "Unduh %(text)s", - "Event information": "Informasi Event", "Export": "Ekspor", "Failed to join room": "Gagal gabung ruang", "Failed to leave room": "Gagal meninggalkan ruang", @@ -51,7 +45,6 @@ "Name": "Nama", "New passwords don't match": "Password baru tidak cocok", "": "", - "NOT verified": "TIDAK terverifikasi", "No results": "Tidak ada hasil", "OK": "OK", "Operation failed": "Operasi gagal", @@ -69,7 +62,6 @@ "Save": "Simpan", "Search": "Cari", "Search failed": "Pencarian gagal", - "Send anyway": "Kirim saja", "Send Reset Email": "Kirim Email Atur Ulang", "Server error": "Server bermasalah", "Session ID": "ID Sesi", @@ -83,12 +75,7 @@ "This room": "Ruang ini", "Unable to add email address": "Tidak dapat menambahkan alamat email", "Unable to verify email address.": "Tidak dapat memverifikasi alamat email.", - "unencrypted": "tidak terenkripsi", "unknown error code": "kode kesalahan tidak diketahui", - "unknown device": "perangkat tidak diketahui", - "User ID": "ID Pengguna", - "Verification": "Verifikasi", - "verified": "terverifikasi", "Verification Pending": "Verifikasi Tertunda", "Video call": "Panggilan Video", "Voice call": "Panggilan Suara", @@ -133,7 +120,6 @@ "%(senderName)s answered the call.": "%(senderName)s telah menjawab panggilan.", "Anyone who knows the room's link, including guests": "Siapa pun yang tahu tautan ruang, termasuk tamu", "Anyone who knows the room's link, apart from guests": "Siapa pun yang tahu tautan ruang, selain tamu", - "Blacklisted": "Didaftarhitamkan", "%(senderName)s banned %(targetName)s.": "%(senderName)s telah memblokir %(targetName)s.", "Banned users": "Pengguna yang diblokir", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Tidak dapat terhubung ke server Home - harap cek koneksi anda, pastikan sertifikat SSL server Home Anda terpercaya, dan ekstensi dari browser tidak memblokir permintaan.", @@ -145,15 +131,11 @@ "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s telah mengubah nama ruang menjadi %(roomName)s.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s telah mengubah topik menjadi \"%(topic)s\".", "click to reveal": "Klik untuk menampilkan", - "Could not connect to the integration server": "Tidak dapat terhubung ke server integrasi", "Cryptography": "Kriptografi", "Decrypt %(text)s": "Dekrip %(text)s", - "Decryption error": "Dekripsi gagal", - "device id: ": "id perangkat: ", "Ban": "Blokir", "Bans user with given id": "Blokir pengguna dengan id", "Fetching third party location failed": "Gagal mengambil lokasi pihak ketiga", - "A new version of %(brand)s is available.": "%(brand)s versi baru telah tersedia.", "All notifications are currently disabled for all targets.": "Semua notifikasi saat ini dinonaktifkan untuk semua target.", "Uploading report": "Unggah laporan", "Sunday": "Minggu", @@ -172,8 +154,6 @@ "Waiting for response from server": "Menunggu respon dari server", "Leave": "Tinggalkan", "Advanced notification settings": "Pengaturan notifikasi lanjutan", - "delete the alias.": "hapus alias.", - "To return to your account in future you need to set a password": "Untuk kembali ke akun di lain waktu, Anda perlu mengisi password", "Forget": "Lupakan", "World readable": "Terpublikasi Umum", "You cannot delete this image. (%(code)s)": "Anda tidak dapat menghapus gambar ini. (%(code)s)", @@ -201,7 +181,6 @@ "Resend": "Kirim Ulang", "Files": "Files", "Collecting app version information": "Mengumpukan informasi versi aplikasi", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Hapus alias ruang %(alias)s dan hapus %(name)s dari direktori?", "Enable notifications for this account": "Aktifkan notifikasi untuk akun ini", "Messages containing keywords": "Pesan mengandung kata kunci", "Room not found": "Ruang tidak ditemukan", @@ -251,7 +230,6 @@ "Show message in desktop notification": "Tampilkan pesan pada desktop", "Unhide Preview": "Tampilkan Pratinjau", "Unable to join network": "Tidak dapat bergabung di jaringan", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Anda mungkin sudah konfigurasi di klien selain %(brand)s. Anda tidak dapat setel di %(brand)s tetap berlaku", "Sorry, your browser is not able to run %(brand)s.": "Maaf, browser Anda tidak dapat menjalankan %(brand)s.", "Uploaded on %(date)s by %(user)s": "Diunggah pada %(date)s oleh %(user)s", "Messages in group chats": "Pesan di obrolan grup", @@ -277,28 +255,20 @@ "Thank you!": "Terima kasih!", "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!": "Dengan browser ini, tampilan dari aplikasi mungkin tidak sesuai, dan beberapa atau bahkan semua fitur mungkin tidak berjalan. Jika Anda ingin tetap mencobanya, Anda bisa melanjutkan, tapi Anda tanggung sendiri jika muncul masalah yang terjadi!", "Checking for an update...": "Cek pembaruan...", - "There are advanced notifications which are not shown here": "Ada notifikasi lanjutan yang tidak ditampilkan di sini", "This email address is already in use": "Alamat email ini telah terpakai", "This phone number is already in use": "Nomor telepon ini telah terpakai", "Failed to verify email address: make sure you clicked the link in the email": "Gagal memverifikasi alamat email: pastikan Anda telah menekan link di dalam email", "The version of %(brand)s": "Versi %(brand)s", "Your language of choice": "Pilihan bahasamu", "Your homeserver's URL": "URL Homeserver Anda", - "Your identity server's URL": "URL Server Identitas Anda", "e.g. %(exampleValue)s": "", "Every page you use in the app": "Setiap halaman yang digunakan di app", "e.g. ": "e.g. ", - "Your User Agent": "User Agent Anda", "Your device resolution": "Resolusi perangkat Anda", "Analytics": "Analitik", "The information being sent to us to help make %(brand)s better includes:": "Informasi yang dikirim membantu kami memperbaiki %(brand)s, termasuk:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Apabila terdapat informasi yang dapat digunakan untuk pengenalan pada halaman ini, seperti ruang, pengguna, atau ID grup, kami akan menghapusnya sebelum dikirim ke server.", "Call Failed": "Panggilan Gagal", - "Review Devices": "Telaah Perangkat", - "Call Anyway": "Tetap Panggil", - "Answer Anyway": "Tetap Jawab", - "Call": "Panggilan", - "Answer": "Jawab", "Call Timeout": "Masa Berakhir Panggilan", "The remote side failed to pick up": "Gagal jawab oleh pihak lain", "Unable to capture screen": "Tidak dapat menangkap tampilan", diff --git a/src/i18n/strings/is.json b/src/i18n/strings/is.json index 9400be8a3a..43b286aa2a 100644 --- a/src/i18n/strings/is.json +++ b/src/i18n/strings/is.json @@ -4,13 +4,8 @@ "Failed to verify email address: make sure you clicked the link in the email": "Gat ekki sannprófað tölvupóstfang: gakktu úr skugga um að þú hafir smellt á tengilinn í tölvupóstinum", "e.g. %(exampleValue)s": "t.d. %(exampleValue)s", "e.g. ": "t.d. ", - "Your User Agent": "Kennisstrengur þinn", "Your device resolution": "Skjáupplausn tækisins þíns", "Analytics": "Greiningar", - "Call Anyway": "hringja samt", - "Answer Anyway": "Svara samt", - "Call": "Samtal", - "Answer": "Svara", "The remote side failed to pick up": "Ekki var svarað á fjartengda endanum", "VoIP is unsupported": "Enginn stuðningur við VoIP", "Warning!": "Aðvörun!", @@ -40,12 +35,10 @@ "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(time)s", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s", - "Room name or alias": "Nafn eða samnefni spjallrásar", "Default": "Sjálfgefið", "Restricted": "Takmarkað", "Moderator": "Umsjónarmaður", "Admin": "Stjórnandi", - "Start a chat": "Hefja spjall", "Operation failed": "Aðgerð tókst ekki", "You need to be logged in.": "Þú þarft að vera skráð/ur inn.", "Unable to create widget.": "Gat ekki búið til viðmótshluta.", @@ -63,7 +56,6 @@ "Someone": "Einhver", "(not supported by this browser)": "(Ekki stutt af þessum vafra)", "(no answer)": "(ekkert svar)", - "Send anyway": "Senda samt", "Send": "Senda", "Unnamed Room": "Nafnlaus spjallrás", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Birta tímamerki á 12 stunda sniði (t.d. 2:30 fh)", @@ -98,9 +90,7 @@ "Confirm password": "Staðfestu lykilorðið", "Change Password": "Breyta lykilorði", "Authentication": "Auðkenning", - "Device ID": "Auðkenni tækis", "Last seen": "Sást síðast", - "Enable Notifications": "Virkja tilkynningar", "Error saving email notification preferences": "Villa við að vista valkosti pósttilkynninga", "An error occurred whilst saving your email notification preferences.": "Villa kom upp við að vista valkosti tilkynninga í tölvupósti.", "Keywords": "Stikkorð", @@ -128,8 +118,6 @@ "%(senderName)s sent a video": "%(senderName)s sendi myndskeið", "%(senderName)s uploaded a file": "%(senderName)s sendi inn skrá", "Options": "Valkostir", - "Blacklisted": "Á bannlista", - "device id: ": "Auðkenni tækis: ", "Kick": "Sparka", "Unban": "Afbanna", "Ban": "Banna", @@ -140,11 +128,8 @@ "Ignore": "Hunsa", "Mention": "Minnst á", "Invite": "Bjóða", - "User Options": "User Options", - "Direct chats": "Beint spjall", "Unmute": "Kveikja á hljóði", "Mute": "Þagga hljóð", - "Make Moderator": "Gera að umsjónarmanni", "Admin Tools": "Kerfisstjóratól", "Invited": "Boðið", "Filter room members": "Sía meðlimi spjallrásar", @@ -154,7 +139,6 @@ "Video call": "_Myndsímtal", "Upload file": "Hlaða inn skrá", "Send an encrypted message…": "Senda dulrituð skilaboð…", - "Send a message (unencrypted)…": "Senda skilaboð (ódulrituð)…", "You do not have permission to post to this room": "Þú hefur ekki heimild til að senda skilaboð á þessa spjallrás", "Server error": "Villa á þjóni", "Command error": "Skipanavilla", @@ -217,7 +201,6 @@ "Copied!": "Afritað", "Custom Server Options": "Sérsniðnir valkostir vefþjóns", "Dismiss": "Hunsa", - "To continue, please enter your password.": "Til að halda áfram, settu inn lykilorðið þitt.", "Please check your email to continue registration.": "Skoðaðu tölvupóstinn þinn til að geta haldið áfram með skráningu.", "Code": "Kóði", "powered by Matrix": "keyrt með Matrix", @@ -228,13 +211,11 @@ "Remove": "Fjarlægja", "Something went wrong!": "Eitthvað fór úrskeiðis!", "Filter community rooms": "Sía spjallrásir samfélags", - "Yes, I want to help!": "Já, ég vil hjálpa til", "You are not receiving desktop notifications": "Þú færð ekki tilkynningar á skjáborði", "Enable them now": "Virkja þetta núna", "What's New": "Nýtt á döfinni", "Update": "Uppfæra", "What's new?": "Hvað er nýtt á döfinni?", - "A new version of %(brand)s is available.": "Ný útgáfa af %(brand)s er tiltæk.", "Set Password": "Setja lykilorð", "Error encountered (%(errorDetail)s).": "Villa fannst (%(errorDetail)s).", "Checking for an update...": "Athuga með uppfærslu...", @@ -243,10 +224,6 @@ "Warning": "Aðvörun", "Allow": "Leyfa", "Edit": "Breyta", - "Unblacklist": "Taka af bannlista", - "Blacklist": "Bannlisti", - "Unverify": "Afturkalla sannvottun", - "Verify...": "Sannreyna...", "No results": "Engar niðurstöður", "Communities": "Samfélög", "Home": "Heim", @@ -280,17 +257,12 @@ "Incorrect password": "Rangt lykilorð", "Deactivate Account": "Gera notandaaðgang óvirkann", "To continue, please enter your password:": "Til að halda áfram, settu inn lykilorðið þitt:", - "I verify that the keys match": "Ég staðfesti að dulritunarlyklarnir samsvari", "Back": "Til baka", "Send Account Data": "Senda upplýsingar um notandaaðgang", "Filter results": "Sía niðurstöður", "Toolbox": "Verkfærakassi", "Developer Tools": "Forritunartól", "An error has occurred.": "Villa kom upp.", - "Start verification": "Hefja sannvottun", - "Share without verifying": "Deila án sannvottunar", - "Ignore request": "Hunsa beiðni", - "Encryption key request": "Beiðni um dulritunarlykil", "Sign out": "Skrá út", "Send Logs": "Senda atvikaskrár", "Refresh": "Endurlesa", @@ -306,7 +278,6 @@ "(HTTP status %(httpStatus)s)": "(HTTP staða %(httpStatus)s)", "Please set a password!": "Stilltu lykilorð!", "Custom": "Sérsniðið", - "Alias (optional)": "Samnefni (valfrjálst)", "You cannot delete this message. (%(code)s)": "Þú getur ekki eytt þessum skilaboðum. (%(code)s)", "Resend": "Endursenda", "Cancel Sending": "Hætta við sendingu", @@ -350,8 +321,6 @@ "Room": "Spjallrás", "Fill screen": "Fylla skjáinn", "Clear filter": "Hreinsa síu", - "Light theme": "Ljóst þema", - "Dark theme": "Dökkt þema", "Success": "Tókst", "Import E2E room keys": "Flytja inn E2E dulritunarlykla spjallrásar", "Cryptography": "Dulritun", @@ -380,21 +349,7 @@ "Upload an avatar:": "Hlaða inn auðkennismynd:", "Commands": "Skipanir", "Users": "Notendur", - "unknown device": "óþekkt tæki", - "NOT verified": "EKKI sannreynt", - "verified": "sannreynt", - "Verification": "Sannvottun", - "Ed25519 fingerprint": "Ed25519 fingrafar", - "User ID": "Notandaauðkenni", - "Curve25519 identity key": "Curve25519 auðkennislykill", - "none": "ekkert", - "Claimed Ed25519 fingerprint key": "Tilkynnti Ed25519 fingrafarslykil", - "Algorithm": "Reiknirit", - "unencrypted": "ódulritað", - "Decryption error": "Afkóðunarvilla", "Session ID": "Auðkenni setu", - "End-to-end encryption information": "Enda-í-enda dulritunarupplýsingar", - "Event information": "Upplýsingar um atburð", "Export room keys": "Flytja út dulritunarlykla spjallrásar", "Enter passphrase": "Settu inn lykilsetningu (passphrase)", "Confirm passphrase": "Staðfestu lykilsetningu", @@ -406,8 +361,6 @@ "The version of %(brand)s": "Útgáfan af %(brand)s", "Your language of choice": "Tungumálið þitt", "Your homeserver's URL": "Vefslóð á heimaþjóninn þinn", - "Your identity server's URL": "Vefslóð á auðkenningarþjóninn þinn", - "Review Devices": "Yfirfara tæki", "Call Timeout": "Tímamörk hringingar", "Unable to capture screen": "Get ekki tekið skjámynd", "Invite to Community": "Bjóða í samfélag", @@ -478,9 +431,7 @@ "Reject invitation": "Hafna boði", "Are you sure you want to reject the invitation?": "Ertu viss um að þú viljir hafna þessu boði?", "Failed to reject invitation": "Mistókst að hafna boði", - "Scroll to bottom of page": "Skruna neðst á síðu", "No more results": "Ekki fleiri niðurstöður", - "Unknown room %(roomId)s": "Óþekkt spjallrás %(roomId)s", "Failed to reject invite": "Mistókst að hafna boði", "Click to unmute video": "Smelltu til að virkja hljóð í myndskeiði", "Click to mute video": "Smelltu til að þagga niður í myndskeiði", diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index e54b148d79..0aa3bb57b4 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -35,10 +35,8 @@ "Microphone": "Microfono", "Camera": "Videocamera", "Advanced": "Avanzato", - "Algorithm": "Algoritmo", "Always show message timestamps": "Mostra sempre il timestamps dei messaggi", "Authentication": "Autenticazione", - "Alias (optional)": "Alias (opzionale)", "Add a widget": "Aggiungi un widget", "Edit": "Modifica", "This email address is already in use": "Questo indirizzo e-mail è già in uso", @@ -76,8 +74,6 @@ "Rooms": "Stanze", "The remote side failed to pick up": "Dall'altro lato non è giunta risposta", "Unable to capture screen": "Impossibile catturare la schermata", - "Call": "Chiama", - "Answer": "Rispondi", "Invite to Community": "Invita alla community", "Unpin Message": "Sblocca messaggio", "Add rooms to this community": "Aggiungi stanze a questa community", @@ -90,14 +86,10 @@ "Which officially provided instance you are using, if any": "Quale istanza ufficialmente fornita stai usando, se ne usi una", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Se stai usando o meno la modalità richtext dell'editor con testo arricchito", "Your homeserver's URL": "L'URL del tuo server home", - "Your identity server's URL": "L'URL del tuo server identità", "Analytics": "Statistiche", - "The information being sent to us to help make %(brand)s better includes:": "Le informazioni inviate per aiutarci a migliorare %(brand)s includono:", + "The information being sent to us to help make %(brand)s better includes:": "Le informazioni che ci vengono inviate per aiutarci a migliorare %(brand)s includono:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Se questa pagina include informazioni identificabili, come una stanza, un utente o un ID di un gruppo, tali dati saranno rimossi prima di essere inviati al server.", "Call Failed": "Chiamata fallita", - "Review Devices": "Controlla i dispositivi", - "Call Anyway": "Chiama comunque", - "Answer Anyway": "Rispondi comunque", "Call Timeout": "Tempo di attesa della chiamata", "Existing Call": "Chiamata esistente", "You are already in a call.": "Partecipi già ad una chiamata.", @@ -113,7 +105,6 @@ "Which rooms would you like to add to this community?": "Quali stanze vuoi aggiungere a questa comunità?", "Show these rooms to non-members on the community page and room list?": "Mostrare queste stanze ai non membri nella pagina comunità e all'elenco stanze?", "Add rooms to the community": "Aggiungi stanze alla comunità", - "Room name or alias": "Nome stanza o alias", "Add to community": "Aggiungi alla comunità", "Failed to invite the following users to %(groupId)s:": "Invito ad unirsi in %(groupId)s fallito per i seguenti utenti:", "Failed to invite users to community": "Invito degli utenti alla comunità fallito", @@ -127,7 +118,6 @@ "Default": "Predefinito", "Restricted": "Limitato", "Moderator": "Moderatore", - "Start a chat": "Inizia una conversazione", "Failed to invite": "Invito fallito", "Failed to invite the following users to the %(roomName)s room:": "Invito nella stanza %(roomName)s fallito per i seguenti utenti:", "You need to be logged in.": "Devi aver eseguito l'accesso.", @@ -143,7 +133,6 @@ "Usage": "Utilizzo", "/ddg is not a command": "/ddg non è un comando", "To use it, just wait for autocomplete results to load and tab through them.": "Per usarlo, attendi l'autocompletamento dei risultati e selezionali con tab.", - "Unrecognised room alias:": "Alias della stanza non riconosciuto:", "Ignored user": "Utente ignorato", "You are now ignoring %(userId)s": "Ora stai ignorando %(userId)s", "Unignored user": "Utente non più ignorato", @@ -188,14 +177,12 @@ "%(widgetName)s widget removed by %(senderName)s": "Widget %(widgetName)s rimosso da %(senderName)s", "Failure to create room": "Creazione della stanza fallita", "Server may be unavailable, overloaded, or you hit a bug.": "Il server potrebbe essere non disponibile, sovraccarico o hai trovato un errore.", - "Send anyway": "Invia comunque", "Send": "Invia", "Unnamed Room": "Stanza senza nome", "Your browser does not support the required cryptography extensions": "Il tuo browser non supporta l'estensione crittografica richiesta", "Not a valid %(brand)s keyfile": "Non è una chiave di %(brand)s valida", "Authentication check failed: incorrect password?": "Controllo di autenticazione fallito: password sbagliata?", "Failed to join room": "Accesso alla stanza fallito", - "Use compact timeline layout": "Usa impaginazione cronologia compatta", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostra gli orari nel formato 12 ore (es. 2:30pm)", "Autoplay GIFs and videos": "Riproduzione automatica di GIF e video", "Enable automatic language detection for syntax highlighting": "Attiva la rilevazione automatica della lingua per l'evidenziazione della sintassi", @@ -226,11 +213,8 @@ "New Password": "Nuova password", "Confirm password": "Conferma password", "Change Password": "Modifica password", - "Device ID": "ID dispositivo", "Last seen": "Visto l'ultima volta", "Failed to set display name": "Impostazione nome visibile fallita", - "Disable Notifications": "Disattiva le notifiche", - "Enable Notifications": "Attiva le notifiche", "Cannot add any more widgets": "Impossibile aggiungere altri widget", "The maximum permitted number of widgets have already been added to this room.": "Il numero massimo consentito di widget è già stato raggiunto in questa stanza.", "Drop File Here": "Trascina file qui", @@ -243,8 +227,6 @@ "Options": "Opzioni", "Key request sent.": "Richiesta chiave inviata.", "Please select the destination room for this message": "Seleziona la stanza di destinazione per questo messaggio", - "Blacklisted": "In lista nera", - "device id: ": "ID dispositivo: ", "Disinvite": "Revoca invito", "Kick": "Butta fuori", "Disinvite this user?": "Revocare l'invito a questo utente?", @@ -256,7 +238,6 @@ "Ban this user?": "Bandire questo utente?", "Failed to ban user": "Ban utente fallito", "Failed to mute user": "Impossibile silenziare l'utente", - "Failed to toggle moderator status": "Cambio di stato moderatore fallito", "Failed to change power level": "Cambio di livello poteri fallito", "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.": "Non potrai annullare questa modifica dato che ti stai declassando, se sei l'ultimo utente privilegiato nella stanza sarà impossibile ottenere di nuovo i privilegi.", "Are you sure?": "Sei sicuro?", @@ -265,11 +246,7 @@ "Ignore": "Ignora", "Mention": "Cita", "Invite": "Invita", - "User Options": "Opzioni utente", - "Direct chats": "Conversazioni dirette", "Unmute": "Togli silenzio", - "Revoke Moderator": "Declassa moderatore", - "Make Moderator": "Promuovi a moderatore", "and %(count)s others...|other": "e altri %(count)s ...", "and %(count)s others...|one": "e un altro...", "Invited": "Invitato", @@ -281,9 +258,7 @@ "Video call": "Chiamata video", "Upload file": "Invia file", "Send an encrypted reply…": "Invia una risposta criptata…", - "Send a reply (unencrypted)…": "Invia una risposta (non criptata)…", "Send an encrypted message…": "Invia un messaggio criptato…", - "Send a message (unencrypted)…": "Invia un messaggio (non criptato)…", "You do not have permission to post to this room": "Non hai il permesso di inviare in questa stanza", "Server error": "Errore del server", "Server unavailable, overloaded, or something else went wrong.": "Server non disponibile, sovraccarico o qualcos'altro è andato storto.", @@ -346,10 +321,7 @@ "Permissions": "Autorizzazioni", "Jump to first unread message.": "Salta al primo messaggio non letto.", "not specified": "non specificato", - "Remote addresses for this room:": "Indirizzi remoti di questa stanza:", - "Local addresses for this room:": "Indirizzi locali di questa stanza:", "This room has no local addresses": "Questa stanza non ha indirizzi locali", - "New address (e.g. #foo:%(localDomain)s)": "Nuovo indirizzo (es. #foo:%(localDomain)s)", "Invalid community ID": "ID comunità non valido", "'%(groupId)s' is not a valid community ID": "'%(groupId)s' non è un ID comunità valido", "Showing flair for these communities:": "Predisposizione della stanza per queste comunità:", @@ -375,10 +347,6 @@ "Failed to copy": "Copia fallita", "Add an Integration": "Aggiungi un'integrazione", "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?": "Stai per essere portato in un sito di terze parti per autenticare il tuo account da usare con %(integrationsUrl)s. Vuoi continuare?", - "Removed or unknown message type": "Tipo messaggio rimosso o sconosciuto", - "Message removed by %(userId)s": "Messaggio rimosso da %(userId)s", - "Message removed": "Messaggio rimosso", - "To continue, please enter your password.": "Per continuare, inserisci la tua password.", "An email has been sent to %(emailAddress)s": "È stata inviata un'email a %(emailAddress)s", "Please check your email to continue registration.": "Controlla la tua email per continuare la registrazione.", "Token incorrect": "Token errato", @@ -415,14 +383,9 @@ "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "L'eliminazione di un widget lo rimuove per tutti gli utenti della stanza. Sei sicuro di eliminare il widget?", "Delete widget": "Elimina widget", "Minimize apps": "Riduci le app", - "Unblacklist": "Togli dalla lista nera", - "Blacklist": "Lista nera", - "Unverify": "Togli la verifica", - "Verify...": "Verifica...", "No results": "Nessun risultato", "Communities": "Comunità", "Home": "Inizio", - "Could not connect to the integration server": "Impossibile connettersi al server di integrazione", "Manage Integrations": "Gestisci integrazioni", "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)ssono entrati %(count)s volte", @@ -503,12 +466,7 @@ "Unknown error": "Errore sconosciuto", "Incorrect password": "Password sbagliata", "Deactivate Account": "Disattiva l'account", - "I verify that the keys match": "Confermo che le chiavi coincidono", "An error has occurred.": "Si è verificato un errore.", - "Start verification": "Inizia la verifica", - "Share without verifying": "Condividi senza verificare", - "Ignore request": "Ignora la richiesta", - "Encryption key request": "Richiesta chiave di cifratura", "Unable to restore session": "Impossibile ripristinare la sessione", "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.": "Se hai usato precedentemente una versione più recente di %(brand)s, la tua sessione potrebbe essere incompatibile con questa versione. Chiudi questa finestra e torna alla versione più recente.", "Invalid Email Address": "Indirizzo email non valido", @@ -584,7 +542,6 @@ "Create a new community": "Crea una nuova comunità", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Crea una comunità per raggruppare utenti e stanze! Crea una pagina iniziale personalizzata per stabilire il tuo spazio nell'universo di Matrix.", "You have no visible notifications": "Non hai alcuna notifica visibile", - "Scroll to bottom of page": "Scorri in fondo alla pagina", "%(count)s of your messages have not been sent.|other": "Alcuni dei tuoi messaggi non sono stati inviati.", "%(count)s of your messages have not been sent.|one": "Il tuo messaggio non è stato inviato.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Reinvia tutti o annulla tutti adesso. Puoi anche selezionare i singoli messaggi da reinviare o annullare.", @@ -598,7 +555,6 @@ "Search failed": "Ricerca fallita", "Server may be unavailable, overloaded, or search timed out :(": "Il server potrebbe essere non disponibile, sovraccarico o la ricerca è scaduta :(", "No more results": "Nessun altro risultato", - "Unknown room %(roomId)s": "Stanza %(roomId)s sconosciuta", "Room": "Stanza", "Failed to reject invite": "Rifiuto dell'invito fallito", "Fill screen": "Riempi schermo", @@ -613,8 +569,6 @@ "Uploading %(filename)s and %(count)s others|other": "Invio di %(filename)s e altri %(count)s", "Uploading %(filename)s and %(count)s others|zero": "Invio di %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Invio di %(filename)s e altri %(count)s", - "Light theme": "Tema chiaro", - "Dark theme": "Tema scuro", "Sign out": "Disconnetti", "Success": "Successo", "Unable to remove contact information": "Impossibile rimuovere le informazioni di contatto", @@ -663,7 +617,6 @@ "Define the power level of a user": "Definisce il livello di poteri di un utente", "Deops user with given id": "Toglie privilegi all'utente per ID", "Invites user with given id to current room": "Invita l'utente per ID alla stanza attuale", - "Joins room with given alias": "Entra nella stanza con l'alias definito", "Kicks user with given id": "Caccia un utente per ID", "Changes your display nickname": "Modifica il tuo nick visualizzato", "Searches DuckDuckGo for results": "Cerca risultati su DuckDuckGo", @@ -676,20 +629,7 @@ "Notify the whole room": "Notifica l'intera stanza", "Room Notification": "Notifica della stanza", "Users": "Utenti", - "unknown device": "dispositivo sconosciuto", - "NOT verified": "NON verificato", - "verified": "verificato", - "Verification": "Verifica", - "Ed25519 fingerprint": "Impronta ed25519", - "User ID": "ID utente", - "Curve25519 identity key": "Chiave di identità curve25519", - "none": "nessuno", - "Claimed Ed25519 fingerprint key": "Chiave di impronta ed25519 dichiarata", - "unencrypted": "non criptato", - "Decryption error": "Errore di decifrazione", "Session ID": "ID sessione", - "End-to-end encryption information": "Informazioni di cifratura end-to-end", - "Event information": "Informazioni evento", "Passphrases must match": "Le password devono coincidere", "Passphrase must not be empty": "La password non può essere vuota", "Export room keys": "Esporta chiavi della stanza", @@ -718,7 +658,6 @@ "Who can join this community?": "Chi può unirsi a questa comunità?", "Everyone": "Tutti", "Fetching third party location failed": "Rilevazione posizione di terze parti fallita", - "A new version of %(brand)s is available.": "È disponibile una nuova versione di %(brand)s.", "Send Account Data": "Invia dati account", "Advanced notification settings": "Impostazioni di notifica avanzate", "Uploading report": "Sto caricando il report", @@ -736,8 +675,6 @@ "Send Custom Event": "Invia evento personalizzato", "All notifications are currently disabled for all targets.": "Tutte le notifiche sono disabilitate per tutti gli obbiettivi.", "Failed to send logs: ": "Invio dei log fallito: ", - "delete the alias.": "elimina l'alias.", - "To return to your account in future you need to set a password": "Per tornare nel tuo account in futuro devi impostare una password", "Forget": "Dimentica", "You cannot delete this image. (%(code)s)": "Non puoi eliminare quest'immagine. (%(code)s)", "Cancel Sending": "Annulla invio", @@ -762,7 +699,6 @@ "No update available.": "Nessun aggiornamento disponibile.", "Resend": "Reinvia", "Collecting app version information": "Raccolta di informazioni sulla versione dell'applicazione", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Eliminare l'alias %(alias)s e rimuovere %(name)s dalla lista?", "Keywords": "Parole chiave", "Enable notifications for this account": "Abilita le notifiche per questo account", "Invite to this community": "Invita a questa comunità", @@ -820,7 +756,6 @@ "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.": "I log di debug contengono dati di utilizzo dell'applicazione inclusi il nome utente, gli ID o alias delle stanze o gruppi visitati e i nomi degli altri utenti. Non contengono messaggi.", "Unhide Preview": "Mostra anteprima", "Unable to join network": "Impossibile collegarsi alla rete", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Potresti averli configurati in un client diverso da %(brand)s. Non puoi cambiarli in %(brand)s ma sono comunque applicati", "Sorry, your browser is not able to run %(brand)s.": "Spiacenti, ma il tuo browser non è in grado di utilizzare %(brand)s.", "Uploaded on %(date)s by %(user)s": "Caricato il %(date)s da %(user)s", "Messages in group chats": "Messaggi nelle chat di gruppo", @@ -844,10 +779,8 @@ "Unable to fetch notification target list": "Impossibile ottenere la lista di obiettivi notifiche", "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!": "Con il tuo attuale browser, l'aspetto e la sensazione generale dell'applicazione potrebbero essere completamente sbagliati e alcune delle funzionalità potrebbero non funzionare. Se vuoi provare comunque puoi continuare, ma non riceverai aiuto per qualsiasi problema tu possa riscontrare!", "Checking for an update...": "Controllo aggiornamenti...", - "There are advanced notifications which are not shown here": "Ci sono notifiche avanzate che non sono mostrate qui", "Every page you use in the app": "Ogni pagina che usi nell'app", "e.g. ": "es. ", - "Your User Agent": "Il tuo User Agent", "Your device resolution": "La risoluzione del dispositivo", "Missing roomId.": "ID stanza mancante.", "Always show encryption icons": "Mostra sempre icone di cifratura", @@ -861,9 +794,6 @@ "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Eliminare l'archiviazione del browser potrebbe risolvere il problema, ma verrai disconnesso e la cronologia delle chat criptate sarà illeggibile.", "Collapse Reply Thread": "Riduci finestra di risposta", "e.g. %(exampleValue)s": "es. %(exampleValue)s", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Per favore aiuta a migliorare %(brand)s inviando dati di utilizzo anonimi. Verrà usato un cookie (vedi la nostra politica sui cookie).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Per favore aiutaci a migliorare %(brand)s inviando dati di utilizzo anonimi. Verrà usato un cookie.", - "Yes, I want to help!": "Sì, voglio aiutare!", "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.", @@ -912,9 +842,6 @@ "Please contact your service administrator to continue using the service.": "Contatta l'amministratore del servizio per continuare ad usarlo.", "This homeserver has hit its Monthly Active User limit.": "Questo homeserver ha raggiunto il suo limite di utenti attivi mensili.", "This homeserver has exceeded one of its resource limits.": "Questo homeserver ha oltrepassato uno dei suoi limiti di risorse.", - "Please contact your service administrator to get this limit increased.": "Contatta l'amministratore del servizio per fare aumentare questo limite.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Questo homeserver ha raggiunto il suo limite di utenti attivi mensili, perciò alcuni utenti non potranno accedere.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Questo homeserver ha oltrepassato uno dei suoi limiti di risorse, perciò alcuni utenti non potranno accedere.", "Upgrade Room Version": "Aggiorna versione stanza", "Create a new room with the same name, description and avatar": "Creeremo una nuova stanza con lo stesso nome, descrizione e avatar", "Update any local room aliases to point to the new room": "Aggiorneremo qualsiasi alias di stanza in modo che punti a quella nuova", @@ -934,14 +861,7 @@ "Failed to upgrade room": "Aggiornamento stanza fallito", "The room upgrade could not be completed": "Non è stato possibile completare l'aggiornamento della stanza", "Upgrade this room to version %(version)s": "Aggiorna questa stanza alla versione %(version)s", - "Registration Required": "Registrazione necessaria", - "You need to register to do this. Would you like to register now?": "Devi registrarti per eseguire questa azione. Vuoi registrarti ora?", "Unable to connect to Homeserver. Retrying...": "Impossibile connettersi all'homeserver. Riprovo...", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s ha aggiunto %(addedAddresses)s come indirizzo per questa stanza.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s ha aggiunto %(addedAddresses)s come indirizzi per questa stanza.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s ha rimosso %(removedAddresses)s tra gli indirizzi di questa stanza.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s ha rimosso %(removedAddresses)s tra gli indirizzi di questa stanza.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s ha aggiunto %(addedAddresses)s e rimosso %(removedAddresses)s tra gli indirizzi di questa stanza.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s ha messo %(address)s come indirizzo principale per questa stanza.", "%(senderName)s removed the main address for this room.": "%(senderName)s ha rimosso l'indirizzo principale di questa stanza.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Prima di inviare i log, devi creare una segnalazione su GitHub per descrivere il tuo problema.", @@ -993,20 +913,15 @@ "Algorithm: ": "Algoritmo: ", "Please review and accept all of the homeserver's policies": "Si prega di rivedere e accettare tutte le politiche dell'homeserver", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Per evitare di perdere la cronologia della chat, devi esportare le tue chiavi della stanza prima di uscire. Dovrai tornare alla versione più recente di %(brand)s per farlo", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Hai usato in precedenza una versione più recente di %(brand)s su %(host)s. Per usare di nuovo questa versione con cifratura end-to-end, dovrai disconnettere e riaccedere. ", "Incompatible Database": "Database non compatibile", "Continue With Encryption Disabled": "Continua con la cifratura disattivata", "Unable to load backup status": "Impossibile caricare lo stato del backup", "Unable to restore backup": "Impossibile ripristinare il backup", "No backup found!": "Nessun backup trovato!", - "Backup Restored": "Backup ripristinato", "Failed to decrypt %(failedCount)s sessions!": "Decifrazione di %(failedCount)s sessioni fallita!", - "Restored %(sessionCount)s session keys": "Ripristinate le chiavi di %(sessionCount)s sessioni", - "Enter Recovery Passphrase": "Inserisci la password di recupero", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Accedi alla cronologia sicura dei messaggi e imposta la messaggistica sicura inserendo la tua password di recupero.", "Next": "Avanti", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Se hai dimenticato la password di recupero puoi usare la tua chiave di recupero o impostare nuove opzioni di recupero", - "Enter Recovery Key": "Inserisci la chiave di recupero", "This looks like a valid recovery key!": "Sembra essere una chiave di recupero valida!", "Not a valid recovery key": "Non è una chiave di recupero valida", "Access your secure message history and set up secure messaging by entering your recovery key.": "Accedi alla cronologia sicura dei messaggi e imposta la messaggistica sicura inserendo la tua chiave di recupero.", @@ -1014,23 +929,14 @@ "Failed to perform homeserver discovery": "Ricerca dell'homeserver fallita", "Invalid homeserver discovery response": "Risposta della ricerca homeserver non valida", "Sign in with single sign-on": "Accedi con single sign-on", - "Great! This passphrase looks strong enough.": "Ottimo! Questa password sembra abbastanza forte.", - "Enter a passphrase...": "Inserisci una password...", "That matches!": "Corrisponde!", "That doesn't match.": "Non corrisponde.", "Go back to set it again.": "Torna per reimpostare.", - "Repeat your passphrase...": "Ripeti la password...", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Come rete di sicurezza, puoi usarla per ripristinare la cronologia dei messaggi cifrati se dimentichi la password di recupero.", - "As a safety net, you can use it to restore your encrypted message history.": "Come rete di sicurezza, puoi usarla per ripristinare la cronologia dei messaggi cifrati.", - "Your Recovery Key": "La tua chiave di recupero", - "Copy to clipboard": "Copia negli appunti", "Download": "Scarica", "Print it and store it somewhere safe": "Stampala e conservala in un luogo sicuro", "Save it on a USB key or backup drive": "Salvala in una chiave USB o disco di backup", "Copy it to your personal cloud storage": "Copiala nel tuo archivio cloud personale", "Set up Secure Message Recovery": "Imposta ripristino sicuro dei messaggi", - "Keep it safe": "Tienila al sicuro", - "Create Key Backup": "Crea backup chiave", "Unable to create key backup": "Impossibile creare backup della chiave", "Retry": "Riprova", "Show a reminder to enable Secure Message Recovery in encrypted rooms": "Mostra un promemoria per attivare il ripristino sicuro dei messaggi nelle stanze cifrate", @@ -1055,7 +961,6 @@ "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 hai impostato il nuovo metodo di recupero, un aggressore potrebbe tentare di accedere al tuo account. Cambia la password del tuo account e imposta immediatamente un nuovo metodo di recupero nelle impostazioni.", "Set up Secure Messages": "Imposta i messaggi sicuri", "Go to Settings": "Vai alle impostazioni", - "Waiting for %(userId)s to confirm...": "In attesa che %(userId)s confermi...", "Unrecognised address": "Indirizzo non riconosciuto", "User %(user_id)s may or may not exist": "L'utente %(user_id)s potrebbe non esistere", "Prompt before sending invites to potentially invalid matrix IDs": "Chiedi prima di inviare inviti a possibili ID matrix non validi", @@ -1100,7 +1005,6 @@ "Send typing notifications": "Invia notifiche di scrittura", "Enable Community Filter Panel": "Attiva il pannello dei filtri di comunità", "Allow Peer-to-Peer for 1:1 calls": "Permetti il peer-to-peer per chiamate 1:1", - "Order rooms in the room list by most important first instead of most recent": "Ordina le stanze nell'elenco per importanza, non per più recente", "Messages containing my username": "Messaggi contenenti il mio nome utente", "The other party cancelled the verification.": "L'altra parte ha annullato la verifica.", "Verified!": "Verificato!", @@ -1246,7 +1150,6 @@ "Select the roles required to change various parts of the room": "Seleziona i ruoli necessari per cambiare varie parti della stanza", "Enable encryption?": "Attivare la cifratura?", "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.": "Una volta attivata, la cifratura di una stanza non può essere disattivata. I messaggi inviati in una stanza cifrata non possono essere letti dal server, solo dai partecipanti della stanza. L'attivazione della cifratura può impedire il corretto funzionamento di bot e bridge. Maggiori informazioni sulla cifratura.", - "To link to this room, please add an alias.": "Per creare un collegamento alla stanza, aggiungi un alias.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Le modifiche a chi può leggere la cronologia si applicheranno solo ai messaggi futuri in questa stanza. La visibilità della cronologia esistente rimarrà invariata.", "Encryption": "Cifratura", "Once enabled, encryption cannot be disabled.": "Una volta attivata, la cifratura non può essere disattivata.", @@ -1258,10 +1161,6 @@ "Don't ask me again": "Non chiedermelo più", "Error updating main address": "Errore di aggiornamento indirizzo principale", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Si è verificato un errore aggiornando l'indirizzo principale della stanza. Potrebbe non essere permesso dal server o un problema temporaneo.", - "Error creating alias": "Errore creazione alias", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Si è verificato un errore nella creazione di quell'alias. Potrebbe non essere permesso dal server o si è verificato un errore temporaneo.", - "Error removing alias": "Errore rimozione alias", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Si è verificato un errore nella rimozione di quell'alias. Potrebbe non esistere più o si è verificato un errore temporaneo.", "Main address": "Indirizzo principale", "Error updating flair": "Errore aggiornamento predisposizione", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Si è verificato un errore nell'aggiornamento della predisposizione di questa stanza. Potrebbe non essere permesso dal server o si è verificato un errore temporaneo.", @@ -1270,12 +1169,6 @@ "Room Topic": "Argomento stanza", "Join": "Entra", "Power level": "Livello poteri", - "Use Legacy Verification (for older clients)": "Usa verifica obsoleta (per i vecchi client)", - "Verify by comparing a short text string.": "Verifica confrontando una piccola porzione di testo.", - "Begin Verifying": "Inizia la verifica", - "Waiting for partner to accept...": "In attesa che il partner accetti...", - "Nothing appearing? Not all clients support interactive verification yet. .": "Non compare niente? Non tutti i client supportano ancora la verifica interattiva. .", - "Use two-way text verification": "Usa la verifica testuale bidirezionale", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verifica questo utente per contrassegnarlo come affidabile. La fiducia degli utenti offre una maggiore tranquillità quando si utilizzano messaggi cifrati end-to-end.", "Waiting for partner to confirm...": "In attesa che il partner confermi...", "Incoming Verification Request": "Richiesta di verifica in arrivo", @@ -1289,10 +1182,6 @@ "Go back": "Torna", "Room Settings - %(roomName)s": "Impostazioni stanza - %(roomName)s", "A username can only contain lower case letters, numbers and '=_-./'": "Un nome utente può contenere solo minuscole, numeri e '=_-./'", - "Recovery Key Mismatch": "La chiave di ripristino non corrisponde", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Il backup non può essere decifrato con questa chiave: verifica di aver inserito la chiave di ripristino corretta.", - "Incorrect Recovery Passphrase": "Password di recupero sbagliata", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Il backup non può essere decifrato con questa password: verifica di aver inserito la password di ripristino corretta.", "Warning: you should only set up key backup from a trusted computer.": "Attenzione: dovresti impostare il backup chiavi solo da un computer fidato.", "Share Permalink": "Condividi permalink", "Update status": "Stato aggiornamento", @@ -1338,15 +1227,8 @@ "Unable to query for supported registration methods.": "Impossibile richiedere i metodi di registrazione supportati.", "Create your account": "Crea il tuo account", "Keep going...": "Continua...", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Salveremo una copia cifrata delle tue chiavi sul nostro server. Proteggi il tuo backup con una password per tenerlo al sicuro.", "For maximum security, this should be different from your account password.": "Per la massima sicurezza, questa dovrebbe essere diversa dalla password del tuo account.", - "Set up with a Recovery Key": "Imposta con una chiave di ripristino", - "Please enter your passphrase a second time to confirm.": "Inserisci la tua password un'altra volta per confermare.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "La tua chiave di recupero è come una rete di sicurezza - puoi usarla per recuperare l'accesso ai tuoi messaggi cifrati se dimentichi la tua password.", "Your keys are being backed up (the first backup could take a few minutes).": "Il backup delle chiavi è in corso (il primo backup potrebbe richiedere qualche minuto).", - "Secure your backup with a passphrase": "Proteggi il tuo backup con una password", - "Confirm your passphrase": "Conferma la tua password", - "Recovery key": "Chiave di ripristino", "Starting backup...": "Avvio del backup...", "Success!": "Completato!", "A new recovery passphrase and key for Secure Messages have been detected.": "Sono state rilevate una nuova password di ripristino e una chiave per i messaggi sicuri.", @@ -1375,7 +1257,6 @@ "You have %(count)s unread notifications in a prior version of this room.|other": "Hai %(count)s notifiche non lette in una versione precedente di questa stanza.", "You have %(count)s unread notifications in a prior version of this room.|one": "Hai %(count)s notifiche non lette in una versione precedente di questa stanza.", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Che tu stia usando o meno la funzione 'breadcrumbs' (avatar sopra l'elenco delle stanze)", - "A conference call could not be started because the integrations server is not available": "Non è stato possibile avviare una conferenza perchè il server di integrazione non è disponibile", "Replying With Files": "Risposta con dei file", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Al momento non è possibile rispondere con un file. Vorresti inviare questo file senza rispondere?", "The file '%(fileName)s' failed to upload.": "Invio del file '%(fileName)s' fallito.", @@ -1467,7 +1348,6 @@ "Create your Matrix account on ": "Crea il tuo account Matrix su ", "Your Matrix account on ": "Il tuo account Matrix su ", "Low bandwidth mode": "Modalità larghezza di banda bassa", - "Show recently visited rooms above the room list": "Mostra le stanze visitate di recente sopra l'elenco stanze", "Uploaded sound": "Suono inviato", "Sounds": "Suoni", "Notification sound": "Suoni di notifica", @@ -1620,14 +1500,9 @@ "Send read receipts for messages (requires compatible homeserver to disable)": "Invia notifiche di lettura per i messaggi (richiede homeserver compatibile per disattivare)", "Verify the link in your inbox": "Verifica il link nella tua posta in arrivo", "Complete": "Completa", - "Room alias": "Alias stanza", "e.g. my-room": "es. mia-stanza", - "Please provide a room alias": "Inserisci un alias per la stanza", - "This alias is available to use": "Questo alias è disponibile", - "This alias is already in use": "Questo alias è già in uso", "Close dialog": "Chiudi finestra", "Please enter a name for the room": "Inserisci un nome per la stanza", - "Set a room alias to easily share your room with other people.": "Imposta un alias stanza per condividerla facilmente con gli altri.", "This room is private, and can only be joined by invitation.": "Questa stanza è privata ed è accessibile solo tramite invito.", "Create a public room": "Crea una stanza pubblica", "Create a private room": "Crea una stanza privata", @@ -1713,7 +1588,6 @@ "Error adding ignored user/server": "Errore di aggiunta utente/server ignorato", "Something went wrong. Please try again or view your console for hints.": "Qualcosa è andato storto. Riprova o controlla la console per suggerimenti.", "Error subscribing to list": "Errore di iscrizione alla lista", - "Please verify the room ID or alias and try again.": "Verifica l'ID della stanza o l'alias e riprova.", "Error removing ignored user/server": "Errore di rimozione utente/server ignorato", "Error unsubscribing from list": "Errore di disiscrizione dalla lista", "Please try again or view your console for hints.": "Riprova o controlla la console per suggerimenti.", @@ -1737,7 +1611,6 @@ "Subscribed lists": "Liste sottoscritte", "Subscribing to a ban list will cause you to join it!": "Iscriversi ad una lista di ban implica di unirsi ad essa!", "If this isn't what you want, please use a different tool to ignore users.": "Se non è ciò che vuoi, usa uno strumento diverso per ignorare utenti.", - "Room ID or alias of ban list": "ID stanza o alias della lista di ban", "Subscribe": "Iscriviti", "Message Actions": "Azioni messaggio", "You have ignored this user, so their message is hidden. Show anyways.": "Hai ignorato questo utente, perciò il suo messaggio è nascosto. Mostra comunque.", @@ -1770,7 +1643,6 @@ "Using this widget may share data with %(widgetDomain)s.": "Usando questo widget i dati possono essere condivisi con %(widgetDomain)s.", "Widget added by": "Widget aggiunto da", "This widget may use cookies.": "Questo widget può usare cookie.", - "Enable local event indexing and E2EE search (requires restart)": "Attiva l'indicizzazione di eventi locali e la ricerca E2EE (richiede riavvio)", "Connecting to integration manager...": "Connessione al gestore di integrazioni...", "Cannot connect to integration manager": "Impossibile connettere al gestore di integrazioni", "The integration manager is offline or it cannot reach your homeserver.": "Il gestore di integrazioni è offline o non riesce a raggiungere il tuo homeserver.", @@ -1793,7 +1665,6 @@ "Manage integrations": "Gestisci integrazioni", "Ignored/Blocked": "Ignorati/Bloccati", "Verification Request": "Richiesta verifica", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Match system theme": "Usa il tema di sistema", "%(senderName)s placed a voice call.": "%(senderName)s ha effettuato una chiamata vocale.", "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s ha effettuato una chiamata vocale. (non supportata da questo browser)", @@ -1833,7 +1704,6 @@ "%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ha modificato una regola che bandiva stanze corrispondenti a %(oldGlob)s per corrispondere a %(newGlob)s perchè %(reason)s", "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ha modificato una regola che bandiva server corrispondenti a %(oldGlob)s per corrispondere a %(newGlob)s perchè %(reason)s", "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ha modificato una regola di ban che corrispondeva a %(oldGlob)s per corrispondere a %(newGlob)s perchè %(reason)s", - "Send cross-signing keys to homeserver": "Invia chiavi di firma incrociata all'homeserver", "Cross-signing public keys:": "Chiavi pubbliche di firma incrociata:", "not found": "non trovato", "Cross-signing private keys:": "Chiavi private di firma incrociata:", @@ -1843,9 +1713,6 @@ "Cross-signing": "Firma incrociata", " wants to chat": " vuole chattare", "Start chatting": "Inizia a chattare", - "Enter secret storage passphrase": "Inserisci la password dell'archivio segreto", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Impossibile accedere all'archivio segreto. Controlla di avere inserito la password corretta.", - "Warning: You should only access secret storage from a trusted computer.": "Attenzione: dovresti accedere all'archivio segreto solo da un computer fidato.", "Cross-signing and secret storage are enabled.": "La firma incrociata e l'archivio segreto sono attivi.", "Cross-signing and secret storage are not yet set up.": "La firma incrociata e l'archivio segreto non sono ancora impostati.", "not stored": "non salvato", @@ -1856,19 +1723,11 @@ "Hide verified sessions": "Nascondi sessioni verificate", "%(count)s verified sessions|other": "%(count)s sessioni verificate", "%(count)s verified sessions|one": "1 sessione verificata", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Se hai dimenticato la password puoi usare la tua chiave di recupero o impostare nuove opzioni di recupero.", - "Enter secret storage recovery key": "Inserisci la chiave di recupero dell'archivio segreto", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Impossibile accedere all'archivio segreto. Controlla di avere inserito la chiave di recupero corretta.", - "If you've forgotten your recovery key you can .": "Se hai dimenticato la tua chiave di recupero puoi .", "Warning: You should only set up key backup from a trusted computer.": "Attenzione: dovresti impostare il backup chiavi solo da un computer fidato.", "If you've forgotten your recovery key you can ": "Se hai dimenticato la tua chiave di recupero puoi ", "Set up with a recovery key": "Imposta con una chiave di recupero", - "As a safety net, you can use it to restore your access to encrypted messages if you forget your passphrase.": "Come àncora di salvezza, puoi usarla per recuperare l'accesso ai tuoi messaggi cifrati se dimentichi la password.", - "As a safety net, you can use it to restore your access to encrypted messages.": "Come àncora di salvezza, puoi usarla per recuperare l'accesso ai tuoi messaggi cifrati.", - "Keep your recovery key somewhere very secure, like a password manager (or a safe).": "Tieni la chiave di recupero in un posto molto sicuro, come un gestore di password (o una cassaforte).", "Your recovery key has been copied to your clipboard, paste it to:": "La tua chiave di recupero è stata copiata negli appunti, incollala in:", "Your recovery key is in your Downloads folder.": "La chiave di recupero è nella tua cartella Scaricati.", - "Storing secrets...": "Memorizzo i segreti...", "Unable to set up secret storage": "Impossibile impostare un archivio segreto", "Close preview": "Chiudi anteprima", "Language Dropdown": "Lingua a tendina", @@ -1896,7 +1755,6 @@ "%(num)s hours from now": "%(num)s ore da adesso", "about a day from now": "circa un giorno da adesso", "%(num)s days from now": "%(num)s giorni da adesso", - "Show a presence dot next to DMs in the room list": "Mostra un punto di presenza accanto ai mess. diretti nell'elenco stanza", "Lock": "Lucchetto", "Bootstrap cross-signing and secret storage": "Inizializza firma incrociata e archivio segreto", "Failed to find the following users": "Impossibile trovare i seguenti utenti", @@ -1909,9 +1767,6 @@ "Something went wrong trying to invite the users.": "Qualcosa è andato storto provando ad invitare gli utenti.", "We couldn't invite those users. Please check the users you want to invite and try again.": "Impossibile invitare quegli utenti. Ricontrolla gli utenti che vuoi invitare e riprova.", "Recently Direct Messaged": "Contattati direttamente di recente", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Se non riesci a trovare qualcuno, chiedi il nome utente (es. @utente:server.it) o condividi questa stanza.", - "Complete security": "Sicurezza completa", - "Verify this session to grant it access to encrypted messages.": "Verifica questa sessione per concederle accesso ai messaggi cifrati.", "Start": "Inizia", "Session verified": "Sessione verificata", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "La tua sessione ora è verificata. Ha accesso ai tuoi messaggi cifrati e gli altri utenti la vedranno come fidata.", @@ -1920,9 +1775,6 @@ "Verify User": "Verifica utente", "For extra security, verify this user by checking a one-time code on both of your devices.": "Per maggiore sicurezza, verifica questo utente controllando un codice univoco sui vostri dispositivi.", "Start Verification": "Inizia la verifica", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s ha aggiunto %(addedAddresses)s e %(count)s altri indirizzi a questa stanza", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s ha rimosso %(removedAddresses)s e %(count)s altri indirizzi da questa stanza", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s ha rimosso %(countRemoved)s e aggiunto %(countAdded)s indirizzi a questa stanza", "This room is end-to-end encrypted": "Questa stanza è cifrata end-to-end", "Everyone in this room is verified": "Tutti in questa stanza sono verificati", "Invite only": "Solo a invito", @@ -1936,18 +1788,10 @@ "Send as message": "Invia come messaggio", "Enter your account password to confirm the upgrade:": "Inserisci la password del tuo account per confermare l'aggiornamento:", "You'll need to authenticate with the server to confirm the upgrade.": "Dovrai autenticarti con il server per confermare l'aggiornamento.", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Proteggi le chiavi di cifratura con una password. Per massima sicurezza questa dovrebbe essere diversa da quella del tuo account:", - "Enter a passphrase": "Inserisci una password", - "Enter your passphrase a second time to confirm it.": "Inserisci di nuovo la tua password per confermarla.", - "Verify other users in their profile.": "Verifica gli altri utenti nel loro profilo.", "Upgrade your encryption": "Aggiorna la tua cifratura", "Set up encryption": "Imposta la cifratura", - "Encryption upgraded": "Cifratura aggiornata", - "Encryption setup complete": "Impostazione cifratura completata", "Verify this session": "Verifica questa sessione", "Encryption upgrade available": "Aggiornamento cifratura disponibile", - "%(senderName)s turned on end-to-end encryption.": "%(senderName)s ha attivato la cifratura end-to-end.", - "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s ha attivato la cifratura end-to-end (algoritmo %(algorithm)s sconosciuto).", "Enable message search in encrypted rooms": "Attiva la ricerca messaggi nelle stanze cifrate", "Waiting for %(displayName)s to verify…": "In attesa della verifica da %(displayName)s …", "They match": "Corrispondono", @@ -1964,19 +1808,15 @@ "Securely cache encrypted messages locally for them to appear in search results.": "Tieni in cache localmente i messaggi cifrati in modo sicuro affinché appaiano nei risultati di ricerca.", "Enable": "Attiva", "%(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)s mancano alcuni componenti richiesti per tenere in cache i messaggi cifrati in modo sicuro. Se vuoi sperimentare questa funzionalità, compila un %(brand)s Desktop personale con i componenti di ricerca aggiunti.", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Ci sono sessioni sconosciute in questa stanza: se procedi senza verificarle, sarà possibile per qualcuno origliare la tua chiamata.", - "Unverified session": "Sessione non verificata", "Verifies a user, session, and pubkey tuple": "Verifica un utente, una sessione e una tupla pubblica", "Unknown (user, session) pair:": "Coppia (utente, sessione) sconosciuta:", "Session already verified!": "Sessione già verificata!", "WARNING: Session already verified, but keys do NOT MATCH!": "ATTENZIONE: sessione già verificata, ma le chiavi NON CORRISPONDONO!", "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!": "ATTENZIONE: VERIFICA CHIAVI FALLITA! La chiave per %(userId)s e per la sessione %(deviceId)s è \"%(fprint)s\" la quale non corriponde con la chiave \"%(fingerprint)s\" fornita. Ciò può significare che le comunicazioni vengono intercettate!", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "La chiave che hai fornito corrisponde alla chiave che hai ricevuto dalla sessione di %(userId)s %(deviceId)s. Sessione contrassegnata come verificata.", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Attiva la firma incrociata per la verifica per-utente invece di per-sessione (in sviluppo)", "Never send encrypted messages to unverified sessions from this session": "Non inviare mai messaggi cifrati a sessioni non verificate da questa sessione", "Never send encrypted messages to unverified sessions in this room from this session": "Non inviare mai messaggi cifrati a sessioni non verificate in questa stanza da questa sessione", "To be secure, do this in person or use a trusted way to communicate.": "Per sicurezza, fatelo di persona o usate un metodo fidato per comunicare.", - "Verify your other sessions easier": "Verifica facilmente le tue altre sessioni", "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.": "Il cambio della password reimposterà qualsiasi chiave di cifratura end-to-end in tutte le sessioni, rendendo illeggibile la cronologia di chat, a meno che prima non esporti le chiavi della stanza e le reimporti dopo. In futuro questa cosa verrà migliorata.", "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Il tuo account ha un'identità a firma incrociata nell'archivio segreto, ma non è ancora fidata da questa sessione.", "in memory": "in memoria", @@ -1984,7 +1824,6 @@ "Unable to load session list": "Impossibile caricare l'elenco sessioni", "Delete %(count)s sessions|other": "Elimina %(count)s sessioni", "Delete %(count)s sessions|one": "Elimina %(count)s sessione", - "%(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 non può conservare in cache i messaggi cifrati in modo sicuro nella versione browser. Usa %(brand)s Desktop affinché i messaggi cifrati appaiano nei risultati di ricerca.", "This session is backing up your keys. ": "Questa sessione sta facendo il backup delle tue chiavi. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Questa sessione non sta facendo il backup delle tue chiavi, ma hai un backup esistente dal quale puoi ripristinare e che puoi usare da ora in poi.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Connetti questa sessione al backup chiavi prima di disconnetterti per non perdere eventuali chiavi che possono essere solo in questa sessione.", @@ -2000,15 +1839,9 @@ "This backup is trusted because it has been restored on this session": "Questo backup è fidato perchè è stato ripristinato in questa sessione", "Space used:": "Spazio usato:", "Indexed messages:": "Messaggi indicizzati:", - "Number of rooms:": "Numero di stanze:", "Setting up keys": "Configurazione chiavi", - "Show padlocks on invite only rooms": "Mostra lucchetto nelle stanze solo a invito", - "Keep secret storage passphrase in memory for this session": "Tieni in memoria la password dell'archivio segreto per questa sessione", "How fast should messages be downloaded.": "Quanto veloce devono essere scaricati i messaggi.", - "Confirm the emoji below are displayed on both devices, in the same order:": "Conferma che le emoji sottostanti sono mostrate in entrambi i dispositivi, nello stesso ordine:", - "Verify this device by confirming the following number appears on its screen.": "Verifica questo dispositivo confermando che il seguente numero appare sullo schermo.", "Verify yourself & others to keep your chats safe": "Verifica te stesso e gli altri per mantenere sicure le chat", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Backup chiavi salvato nell'archivio segreto, ma questa funzione non è attiva in questa sessione. Attiva la firma incrociata in Laboratori per modificare lo stato del backup chiavi.", "Your keys are not being backed up from this session.": "Il backup chiavi non viene fatto per questa sessione.", "Enable desktop notifications for this session": "Attiva le notifiche desktop per questa sessione", "Enable audible notifications for this session": "Attiva le notifiche audio per questa sessione", @@ -2016,7 +1849,6 @@ "Session ID:": "ID sessione:", "Session key:": "Chiave sessione:", "Message search": "Ricerca messaggio", - "Sessions": "Sessioni", "A session's public name is visible to people you communicate with": "Il nome pubblico di una sessione è visibile alle persone con cui comunichi", "This room is bridging messages to the following platforms. Learn more.": "Questa stanza fa un bridge dei messaggi con le seguenti piattaforme. Maggiori informazioni.", "This room isn’t bridging messages to any platforms. Learn more.": "Questa stanza non fa un bridge dei messaggi con alcuna piattaforma. Maggiori informazioni.", @@ -2025,17 +1857,12 @@ "You have not verified this user.": "Non hai verificato questo utente.", "You have verified this user. This user has verified all of their sessions.": "Hai verificato questo utente. Questo utente ha verificato tutte le sue sessioni.", "Someone is using an unknown session": "Qualcuno sta usando una sessione sconosciuta", - "Some sessions for this user are not trusted": "Alcune sessioni di questo utente non sono fidate", - "All sessions for this user are trusted": "Tutte le sessioni di questo utente sono fidate", - "Some sessions in this encrypted room are not trusted": "Alcune sessioni in questa stanza cifrata non sono fidate", - "All sessions in this encrypted room are trusted": "Tutte le sessioni in questa stanza cifrata sono fidate", "Your key share request has been sent - please check your other sessions for key share requests.": "La tua richiesta di condivisione chiavi è stata inviata - controlla le tue altre sessioni per le richieste.", "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.": "Le richieste di condivisione chiavi vengono inviate alle tue altre sessioni automaticamente. Se sulle altre sessioni l'hai rifiutata o annullata, clicca qui per chiedere di nuovo le chiavi per questa sessione.", "If your other sessions do not have the key for this message you will not be able to decrypt them.": "Se le altre sessioni non hanno la chiave per questo messaggio non sarai in grado di decifrarlo.", "Re-request encryption keys from your other sessions.": "Chiedi di nuovo le chiavi di cifratura dalle altre sessioni.", "Encrypted by an unverified session": "Cifrato da una sessione non verificata", "Encrypted by a deleted session": "Cifrato da una sessione eliminata", - "No sessions with registered encryption keys": "Nessuna sessione con chiavi di cifratura registrate", "Waiting for %(displayName)s to accept…": "In attesa che %(displayName)s accetti…", "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "I tuoi messaggi sono protetti e solo tu ed il destinatario avete le chiavi univoche per sbloccarli.", "Your messages are not secure": "I tuoi messaggi non sono sicuri", @@ -2053,9 +1880,6 @@ "If you can't scan the code above, verify by comparing unique emoji.": "Se non riesci a scansionare il codice sopra, verifica confrontando emoji specifiche.", "You've successfully verified %(displayName)s!": "Hai verificato correttamente %(displayName)s!", "Got it": "Capito", - "Verification timed out. Start verification again from their profile.": "Verifica scaduta. Inizia di nuovo la verifica dal suo profilo.", - "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s ha annullato la verifica. Inizia di nuovo la verifica dal suo profilo.", - "You cancelled verification. Start verification again from their profile.": "Hai annullato la verifica. Inizia di nuovo la verifica dal suo profilo.", "Encryption enabled": "Cifratura attivata", "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "I messaggi in questa stanza sono cifrati end-to-end. Maggiori info e verifica di questo utente nel suo profilo.", "Encryption not enabled": "Cifratura non attivata", @@ -2063,55 +1887,33 @@ "Clear all data in this session?": "Svuotare tutti i dati in questa sessione?", "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Lo svuotamento dei dati di questa sessione è permanente. I messaggi cifrati andranno persi a meno non si abbia un backup delle loro chiavi.", "Verify session": "Verifica sessione", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Per verficare che questa sessione sia fidata, controlla che la chiave che vedi nelle impostazioni utente su quel dispositivo corrisponda a questa sotto:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Per verificare che questa sessione sia fidata, contatta il suo proprietario usando altri metodi (es. di persona o per telefono) e chiedi se la chiave che vede nelle sue impostazioni utente di questa sessione corrisponde con questa sotto:", "Session name": "Nome sessione", "Session key": "Chiave sessione", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Se corrisponde, premi il pulsante di verifica sottostante. Se non corrisponde, qualcuno sta intercettando questa sessione e dovresti invece premere il pulsante della lista nera.", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "La verifica di questo utente contrassegnerà come fidata la sua sessione a te e viceversa.", "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 questo dispositivo per segnarlo come fidato. Fidarsi di questo dispositivo offre a te e agli altri utenti una maggiore tranquillità nell'uso di messaggi cifrati end-to-end.", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "La verifica di questo dispositivo lo segnerà come fidato e gli utenti che si sono verificati con te si fideranno di questo dispositivo.", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Se non riesci a trovare qualcuno, chiedigli il nome utente, condividi il tuo (%(userId)s) o il collegamento al profilo.", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "Hai aggiunto una nuova sessione '%(displayName)s', che sta chiedendo le chiavi di cifratura.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "La tua sessione non verificata '%(displayName)s' sta chiedendo le chiavi di cifratura.", - "Loading session info...": "Caricamento info di sessione...", "New session": "Nuova sessione", "Use this session to verify your new one, granting it access to encrypted messages:": "Usa questa sessione per verificare quella nuova, dandole accesso ai messaggi cifrati:", "If you didn’t sign in to this session, your account may be compromised.": "Se non hai fatto l'accesso a questa sessione, il tuo account potrebbe essere compromesso.", "This wasn't me": "Non ero io", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Ciò ti permetterà di tornare al tuo account dopo la disconnessione e di accedere in altre sessioni.", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Stai attualmente bloccando sessioni non verificate; per inviare messaggi a queste sessioni devi verificarle.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Ti consigliamo di eseguire il processo di verifica per ogni sessione per confermare l'appartenenza al loro legittimo proprietario, ma puoi reinviare il messaggio senza la verifica se lo preferisci.", - "Room contains unknown sessions": "La stanza contiene sessioni sconosciute", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "\"%(RoomName)s\" contiene sessioni che non hai mai visto prima.", - "Unknown sessions": "Sessioni sconosciute", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Accedi alla tua cronologia di messaggi sicuri e all'identità a firma incrociata per verificare altre sessioni inserendo la tua password.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Accedi alla tua cronologia di messaggi sicuri e all'identità a firma incrociata per verificare altre sessioni inserendo la tua chiave di recupero.", "Recovery key mismatch": "La chiave di recupero non corrisponde", "Incorrect recovery passphrase": "Password di recupero errata", - "Backup restored": "Backup ripristinato", "Enter recovery passphrase": "Inserisci password di recupero", "Enter recovery key": "Inserisci chiave di recupero", "Confirm your identity by entering your account password below.": "Conferma la tua identità inserendo la password dell'account sotto.", - "Message not sent due to unknown sessions being present": "Messaggio non inviato a causa della presenza di sessioni sconosciute", - "Show sessions, send anyway or cancel.": "Mostra le sessioni, invia comunque o annulla.", "Your new session is now verified. Other users will see it as trusted.": "La tua nuova sessione è ora verificata. Gli altri utenti la vedranno come fidata.", "Without completing security on this session, it won’t have access to encrypted messages.": "Senza completare la sicurezza di questa sessione, essa non avrà accesso ai messaggi cifrati.", "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "La modifica della password reimposterà qualsiasi chiave di cifratura end-to-end su tutte le sessioni, rendendo illeggibile la cronologia delle chat cifrate. Configura il Backup Chiavi o esporta le tue chiavi della stanza da un'altra sessione prima di reimpostare la password.", "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.": "Sei stato disconnesso da tutte le sessioni e non riceverai più notifiche push. Per riattivare le notifiche, riaccedi su ogni dispositivo.", "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.": "Riprendi l'accesso al tuo account e recupera le chiavi di cifratura memorizzate in questa sessione. Senza di esse, non sarai in grado di leggere tutti i tuoi messaggi sicuri in qualsiasi sessione.", "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.": "Attenzione: i tuoi dati personali (incluse le chiavi di cifratura) sono ancora memorizzati in questa sessione. Cancellali se hai finito di usare questa sessione o se vuoi accedere ad un altro account.", - "Sender session information": "Informazioni sessione del mittente", "Restore your key backup to upgrade your encryption": "Ripristina il tuo backup chiavi per aggiornare la cifratura", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Aggiorna questa sessione per consentirle di verificare altre sessioni, garantendo loro l'accesso ai messaggi cifrati e contrassegnandole come fidate per gli altri utenti.", - "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Imposta la cifratura su questa sessione per consentirle di verificare le altre sessioni, garantendo loro l'accesso ai messaggi cifrati e contrassegnandole come fidate per gli altri utenti.", - "Back up my encryption keys, securing them with the same passphrase": "Fai il backup delle mie chiavi di cifratura, proteggendole con la stessa password", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Conservane una copia in un luogo sicuro, come un gestore di password o una cassaforte.", "Your recovery key": "La tua chiave di recupero", "Copy": "Copia", - "You can now verify your other devices, and other users to keep your chats safe.": "Ora puoi verificare i tuoi altri dispositivi e gli altri utenti per tenere al sicuro le tue chat.", "Make a copy of your recovery key": "Fai una copia della chiave di recupero", - "You're done!": "Hai finito!", "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.": "Senza configurare il Recupero Messaggi Sicuri, non potrai ripristinare la cronologia di messaggi cifrati se ti disconnetti o se usi un'altra sessione.", "Create key backup": "Crea backup chiavi", "This session is encrypting history using the new recovery method.": "Questa sessione sta cifrando la cronologia usando il nuovo metodo di recupero.", @@ -2119,23 +1921,16 @@ "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.": "Se l'hai fatto accidentalmente, puoi configurare Messaggi Sicuri su questa sessione che cripterà nuovamente la cronologia dei messaggi con un nuovo metodo di recupero.", "If disabled, messages from encrypted rooms won't appear in search results.": "Se disattivato, i messaggi delle stanze cifrate non appariranno nei risultati di ricerca.", "Disable": "Disattiva", - "Not currently downloading messages for any room.": "Nessuno scaricamento di messaggi in corso per alcuna stanza.", - "Downloading mesages for %(currentRoom)s.": "Scaricamento messaggi per %(currentRoom)s.", "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s sta tenendo in cache localmente i messaggi cifrati in modo sicuro affinché appaiano nei risultati di ricerca:", - "of ": "di ", "Message downloading sleep time(ms)": "Tempo di attesa scaricamento messaggi (ms)", "If you cancel now, you won't complete verifying the other user.": "Se adesso annulli, non completerai la verifica dell'altro utente.", "If you cancel now, you won't complete verifying your other session.": "Se adesso annulli, non completerai la verifica dell'altra tua sessione.", - "If you cancel now, you won't complete your secret storage operation.": "Se adesso annulli, non completerai l'operazione dell'archivio segreto.", "Cancel entering passphrase?": "Annullare l'inserimento della password?", "Mod": "Moderatore", "Indexed rooms:": "Stanze indicizzate:", - "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s di %(totalRooms)s", - "The version of %(brand)s": "La versione di %(brand)s", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Se stai usando %(brand)s su un dispositivo dove il tocco è il metodo di input principale", "Whether you're using %(brand)s as an installed Progressive Web App": "Se stai usando %(brand)s installato come Web App Progressiva", "Your user agent": "Il tuo user agent", - "The information being sent to us to help make %(brand)s better includes:": "Le informazioni che ci vengono inviate per aiutarci a migliorare %(brand)s includono:", "Show typing notifications": "Mostra notifiche di scrittura", "Verify this session by completing one of the following:": "Verifica questa sessione completando una delle seguenti cose:", "Scan this unique code": "Scansiona questo codice univoco", @@ -2146,7 +1941,6 @@ "Not Trusted": "Non fidato", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) ha fatto l'accesso con una nuova sessione senza verificarla:", "Ask this user to verify their session, or manually verify it below.": "Chiedi a questo utente di verificare la sua sessione o verificala manualmente sotto.", - "Manually Verify": "Verifica manualmente", "Verify by scanning": "Verifica con la scansione", "Destroy cross-signing keys?": "Distruggere le chiavi di firma incrociata?", "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "L'eliminazione delle chiavi di firma incrociata è permanente. Chiunque si sia verificato con te vedrà avvisi di sicurezza. Quasi sicuramente non vuoi fare questa cosa, a meno che tu non abbia perso tutti i dispositivi da cui puoi fare l'accesso.", @@ -2154,8 +1948,6 @@ "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.": "La sessione che stai cercando di verificare non supporta la scansione del codice QR o la verifica emoji, che sono supportate da %(brand)s. Prova con un client diverso.", "You declined": "Hai rifiutato", "%(name)s declined": "%(name)s ha rifiutato", - "accepting …": "accettazione …", - "declining …": "rifiuto …", "Your homeserver does not support cross-signing.": "Il tuo homeserver non supporta la firma incrociata.", "Homeserver feature support:": "Funzioni supportate dall'homeserver:", "exists": "esiste", @@ -2179,7 +1971,6 @@ "The internet connection either session is using": "La connessione internet di una sessione", "We recommend you change your password and recovery key in Settings immediately": "Ti consigliamo di cambiare immediatamente la password e la chiave di recupero nelle impostazioni", "Not currently indexing messages for any room.": "Attualmente non si stanno indicizzando i messaggi di alcuna stanza.", - "Currently indexing: %(currentRoom)s.": "Attualmente si indicizzano: %(currentRoom)s.", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s di %(totalRooms)s", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s ha cambiato il nome della stanza da %(oldRoomName)s a %(newRoomName)s.", "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s ha aggiunto gli indirizzi alternativi %(addresses)s per questa stanza.", @@ -2190,18 +1981,12 @@ "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s ha cambiato gli indirizzi principali ed alternativi per questa stanza.", "%(senderName)s changed the addresses for this room.": "%(senderName)s ha cambiato gli indirizzi per questa stanza.", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Si è verificato un errore aggiornando gli indirizzi alternativi della stanza. Potrebbe non essere consentito dal server o essere un errore temporaneo.", - "Alternative addresses for this room:": "Indirizzi alternativi per questa stanza:", - "This room has no alternative addresses": "Questa stanza non ha indirizzi alternativi", - "New address (e.g. #foo:domain)": "Nuovo indirizzo (es. #abc:dominio)", - "Local addresses (unmoderated content)": "Indirizzi locali (contenuto non moderato)", "Support adding custom themes": "Supporta l'aggiunta di temi personalizzati", "Invalid theme schema.": "Schema del tema non valido.", "Error downloading theme information.": "Errore scaricando informazioni sul tema.", "Theme added!": "Tema aggiunto!", "Custom theme URL": "URL tema personalizzato", "Add theme": "Aggiungi tema", - "You don't have permission to delete the alias.": "Non hai l'autorizzazione per eliminare l'alias.", - "Review Sessions": "Controlla sessioni", "Scroll to most recent messages": "Scorri ai messaggi più recenti", "Local address": "Indirizzo locale", "Published Addresses": "Indirizzi pubblicati", @@ -2211,9 +1996,6 @@ "New published address (e.g. #alias:server)": "Nuovo indirizzo pubblicato (es. #alias:server)", "Local Addresses": "Indirizzi locali", "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Imposta gli indirizzi per la stanza affinché gli utenti la trovino attraverso il tuo homeserver (%(localDomain)s)", - "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "Apri una sessione esistente e usala per verificare questa, dandole accesso ai messaggi cifrati.", - "Waiting…": "In attesa…", - "If you can’t access one, ": "Se non puoi accedere a nessuna, ", "Enter a server name": "Inserisci il nome di un server", "Looks good": "Sembra giusto", "Can't find this server or its room list": "Impossibile trovare questo server o l'elenco delle sue stanze", @@ -2237,7 +2019,6 @@ "%(brand)s encountered an error during upload of:": "%(brand)s ha riscontrato un errore durante l'invio di:", "Upload completed": "Invio completato", "Cancelled signature upload": "Invio della firma annullato", - "Unabled to upload": "Impossibile inviare", "Signature upload success": "Firma inviata correttamente", "Signature upload failed": "Invio della firma fallito", "Navigation": "Navigazione", @@ -2252,7 +2033,6 @@ "Toggle Bold": "Grassetto sì/no", "Toggle Italics": "Corsivo sì/no", "Toggle Quote": "Cita sì/no", - "Toggle Markdown": "Markdown sì/no", "New line": "Nuova riga", "Navigate recent messages to edit": "Naviga i messaggi recenti da modificare", "Jump to start/end of the composer": "Salta all'inizio/fine del compositore", @@ -2279,9 +2059,6 @@ "End": "Fine", "Manually Verify by Text": "Verifica manualmente con testo", "Interactively verify by Emoji": "Verifica interattivamente con emoji", - "Secret Storage key format:": "Formato chiave di archivio segreto:", - "outdated": "non aggiornato", - "up to date": "aggiornato", "Confirm by comparing the following with the User Settings in your other session:": "Conferma confrontando il seguente con le impostazioni utente nell'altra sessione:", "Confirm this user's session by comparing the following with their User Settings:": "Conferma questa sessione confrontando il seguente con le sue impostazioni utente:", "If they don't match, the security of your communication may be compromised.": "Se non corrispondono, la sicurezza delle tue comunicazioni potrebbe essere compromessa.", @@ -2289,9 +2066,7 @@ "Previous/next unread room or DM": "Stanza o msg non letti successivi/precedenti", "Previous/next room or DM": "Stanza o msg successivi/precedenti", "Toggle right panel": "Apri/chiudi pannello a destra", - "Unverified login. Was this you?": "Accesso non verificato. Eri tu?", "Manually verify all remote sessions": "Verifica manualmente tutte le sessioni remote", - "Update your secure storage": "Aggiorna la tua archiviazione sicura", "Self signing private key:": "Chiave privata di auto-firma:", "cached locally": "in cache locale", "not found locally": "non trovato in locale", @@ -2359,39 +2134,27 @@ "Failed to set topic": "Impostazione argomento fallita", "Command failed": "Comando fallito", "Could not find user in room": "Utente non trovato nella stanza", - "Use an existing session to verify this one, granting it access to encrypted messages.": "Usa una sessione esistente per verificare questa, dandole l'accesso ai messaggi cifrati.", - "Use your other device to continue…": "Usa il tuo altro dispositivo per continuare…", "Syncing...": "Sincronizzazione...", "Signing In...": "Accesso...", "If you've joined lots of rooms, this might take a while": "Se sei dentro a molte stanze, potrebbe impiegarci un po'", "If you cancel now, you won't complete your operation.": "Se annulli adesso, non completerai l'operazione.", "Please supply a widget URL or embed code": "Inserisci un URL del widget o un codice di incorporamento", "Send a bug report with logs": "Invia una segnalazione di errore con i registri", - "Enable cross-signing to verify per-user instead of per-session": "Attiva la firma incrociata per verificare per-utente invece di per-sessione", - "Keep recovery passphrase in memory for this session": "Tieni la password di ripristino in memoria per questa sessione", "Can't load this message": "Impossibile caricare questo messaggio", "Submit logs": "Invia registri", "Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Promemoria: il tuo browser non è supportato, perciò la tua esperienza può essere imprevedibile.", "Unable to upload": "Impossibile inviare", "Verify other session": "Verifica l'altra sessione", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Impossibile accedere all'archivio segreto. Verifica di avere inserito la password di ripristino giusta.", - "Warning: You should only do this on a trusted computer.": "Attenzione: dovresti farlo solo con un computer fidato.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Accedi alla cronologia dei messaggi sicuri e all'identità di firma incrociata per verificare altre sessioni inserendo la password di ripristino.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Se hai dimenticato la password di ripristino puoi usare la chiave di ripristino o configurare nuove opzioni di recupero.", "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "Impossibile decifrare il backup con questa chiave di ripristino: verifica di avere inserito la chiave di ripristino giusta.", "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Impossibile decifrare il backup con questa password di ripristino: verifica di avere inserito la password di ripristino giusta.", - "If you can’t access one, ": "Se non riesci ad accedere, ", "Great! This recovery passphrase looks strong enough.": "Ottimo! Questa password di ripristino sembra abbastanza robusta.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Imposta una password di ripristino per proteggere le informazioni cifrate e recuperarle se ti disconnetti. Dovrebbe essere diversa dalla password dell'account:", "Enter a recovery passphrase": "Inserisci una password di ripristino", - "Back up encrypted message keys": "Fai un backup delle chiavi dei messaggi cifrati", "Enter your recovery passphrase a second time to confirm it.": "Inserisci di nuovo la password di ripristino per confermarla.", "Confirm your recovery passphrase": "Conferma la password di ripristino", "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "La chiave di ripristino è come una rete di sicurezza - puoi usarla per recuperare l'accesso ai messaggi cifrati se dimentichi la password di ripristino.", "Unable to query secret storage status": "Impossibile rilevare lo stato dell'archivio segreto", - "Confirm recovery passphrase": "Conferma la password di ripristino", "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Salveremo una copia cifrata delle tue chiavi sul nostro server. Proteggi il tuo backup con una password di ripristino.", - "Enter a recovery passphrase...": "Inserisci una password di ripristino...", "Please enter your recovery passphrase a second time to confirm.": "Inserisci di nuovo la password di ripristino per confermarla.", "Repeat your recovery passphrase...": "Ripeti la password di ripristino...", "Secure your backup with a recovery passphrase": "Proteggi il backup con una password di ripristino", @@ -2400,9 +2163,7 @@ "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Conferma la tua identità verificando questo accesso da una delle tue altre sessioni, dandogli l'accesso ai messaggi cifrati.", "This requires the latest %(brand)s on your other devices:": "È richiesta l'ultima versione di %(brand)s sui tuoi altri dispositivi:", "or another cross-signing capable Matrix client": "o un altro client Matrix che supporti la firma incrociata", - "Use Recovery Passphrase or Key": "Usa la password di ripristino o la chiave", "Review where you’re logged in": "Controlla dove hai fatto l'accesso", - "Verify your other sessions": "Verifica le tue altre sessioni", "Where you’re logged in": "Dove hai fatto l'accesso", "Manage the names of and sign out of your sessions below or verify them in your User Profile.": "Gestisci i nomi e disconnettiti dalle tue sessioni sotto o verificale nel tuo profilo utente.", "New login. Was this you?": "Nuovo accesso. Eri tu?", @@ -2431,17 +2192,14 @@ "Dismiss read marker and jump to bottom": "Scarta il segno di lettura e salta alla fine", "Jump to oldest unread message": "Salta al messaggio non letto più vecchio", "Upload a file": "Invia un file", - "Use IRC layout": "Usa il layout IRC", "IRC display name width": "Larghezza nome di IRC", "Create room": "Crea stanza", "Font scaling": "Ridimensionamento carattere", "Font size": "Dimensione carattere", - "Custom font size": "Dimensione carattere personalizzata", "Size must be a number": "La dimensione deve essere un numero", "Custom font size can only be between %(min)s pt and %(max)s pt": "La dimensione del carattere personalizzata può solo essere tra %(min)s pt e %(max)s pt", "Use between %(min)s pt and %(max)s pt": "Usa tra %(min)s pt e %(max)s pt", "Appearance": "Aspetto", - "Use the improved room list (in development - refresh to apply changes)": "Usa l'elenco stanze migliorato (in sviluppo - ricarica per applicare le modifiche)", "Room name or address": "Nome stanza o indirizzo", "Joins room with given address": "Accede alla stanza con l'indirizzo dato", "Unrecognised room address:": "Indirizzo stanza non riconosciuto:", @@ -2480,17 +2238,12 @@ "Emoji picker": "Selettore emoji", "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "L'amministratore del server ha disattivato la crittografia end-to-end in modo predefinito nelle stanze private e nei messaggi diretti.", "People": "Persone", - "Show %(n)s more": "Mostra altri %(n)s", "Switch to light mode": "Passa alla modalità chiara", "Switch to dark mode": "Passa alla modalità scura", "Switch theme": "Cambia tema", "Security & privacy": "Sicurezza e privacy", "All settings": "Tutte le impostazioni", - "Archived rooms": "Stanze archiviate", "Feedback": "Feedback", - "Account settings": "Impostazioni account", - "sent an image.": "ha inviato un'immagine.", - "You: %(message)s": "Tu: %(message)s", "No recently visited rooms": "Nessuna stanza visitata di recente", "Sort by": "Ordina per", "Unread rooms": "Stanze non lette", @@ -2507,23 +2260,10 @@ "Dark": "Scuro", "Customise your appearance": "Personalizza l'aspetto", "Appearance Settings only affect this %(brand)s session.": "Le impostazioni dell'aspetto hanno effetto solo in questa sessione di %(brand)s.", - "Recovery Key": "Chiave di recupero", - "This isn't the recovery key for your account": "Questa non è la chiave di recupero del tuo account", - "This isn't a valid recovery key": "Questa non è una chiave di ripristino valida", "Looks good!": "Sembra giusta!", "Use Recovery Key or Passphrase": "Usa la chiave o password di recupero", "Use Recovery Key": "Usa chiave di recupero", - "Use the improved room list (in development - will refresh to apply changes)": "Usa l'elenco di stanze migliorato (in sviluppo - verrà ricaricato per applicare le modifiche)", - "Enter your Recovery Key or enter a Recovery Passphrase to continue.": "Inserisci la tua chiave di recupero o una password di recupero per continuare.", - "Enter your Recovery Key to continue.": "Inserisci la tua chiave di recupero per continuare.", - "Upgrade your Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you'll need it to unlock your data.": "Aggiorna la tua chiave di recupero per memorizzare le chiavi di cifratura e i segreti con i dati del tuo account. Se perdi l'accesso a questo login, ti servirà per sbloccare i tuoi dati.", - "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.": "Conserva la tua chiave di recupero in un posto sicuro, può essere usata per sbloccare i tuoi messaggi e dati cifrati.", - "Create a Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you’ll need it to unlock your data.": "Crea un chiave di recupero per memorizzare le chiavi di cifratura e i segreti con i dati del tuo account. Se perdi l'accesso a questo login, ti servirà per sbloccare i tuoi dati.", - "Create a Recovery Key": "Crea una chiave di recupero", - "Upgrade your Recovery Key": "Aggiorna la chiave di recupero", - "Store your Recovery Key": "Salva la chiave di recupero", "Use the improved room list (will refresh to apply changes)": "Usa l'elenco stanze migliorato (verrà ricaricato per applicare le modifiche)", - "Enable IRC layout option in the appearance tab": "Attiva l'opzione per il layout IRC nella scheda dell'aspetto", "Use custom size": "Usa dimensione personalizzata", "Hey you. You're the best!": "Ehi tu. Sei il migliore!", "Message layout": "Layout messaggio", diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index 8ae5c9a5f0..3c786fcfd2 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -7,7 +7,6 @@ "Close": "閉じる", "Create Room": "部屋を作成", "Current password": "現在のパスワード", - "Direct chats": "対話", "Favourite": "お気に入り", "Favourites": "お気に入り", "Invited": "招待中", @@ -29,7 +28,6 @@ "Show timestamps in 12 hour format (e.g. 2:30pm)": "発言時刻を12時間形式で表示 (例 2:30PM)", "Upload avatar": "アイコン画像を変更", "Upload file": "ファイルのアップロード", - "Use compact timeline layout": "会話表示の行間を狭くする", "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)sはアプリケーションを改善するために匿名の分析情報を収集しています。", "Add": "追加", "No Microphones detected": "マイクが見つかりません", @@ -62,17 +60,15 @@ "This phone number is already in use": "この電話番号は既に使われています", "Failed to verify email address: make sure you clicked the link in the email": "メールアドレスの認証に失敗しました。メール中のリンクをクリックしたか、確認してください", "The platform you're on": "利用中のプラットフォーム", - "The version of %(brand)s": "%(brand)sのバージョン", + "The version of %(brand)s": "%(brand)s のバージョン", "Your language of choice": "選択した言語", "Which officially provided instance you are using, if any": "どの公式に提供されたインスタンスを利用していますか(もしあれば)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "リッチテキストエディタのリッチテキストモードを利用しているか否か", "Your homeserver's URL": "あなたのホームサーバーの URL", - "Your identity server's URL": "あなたのアイデンティティサーバーの URL", "Analytics": "分析", "The information being sent to us to help make %(brand)s better includes:": "%(brand)sをよりよくするために私達に送信される情報は以下を含みます:", "Thursday": "木曜日", "Messages in one-to-one chats": "1対1のチャットでのメッセージ", - "A new version of %(brand)s is available.": "新しいバージョンの%(brand)sが利用可能です。", "All Rooms": "全ての部屋", "You cannot delete this message. (%(code)s)": "あなたはこの発言を削除できません (%(code)s)", "Send": "送信", @@ -134,8 +130,6 @@ "Send Custom Event": "カスタムイベントを送信する", "All notifications are currently disabled for all targets.": "現在すべての対象についての全通知が無効です。", "Failed to send logs: ": "ログの送信に失敗しました: ", - "delete the alias.": "エイリアスを削除する。", - "To return to your account in future you need to set a password": "今後アカウントを回復するには、 パスワードを設定 する必要があります", "You cannot delete this image. (%(code)s)": "この画像を消すことはできません。 (%(code)s)", "Cancel Sending": "送信を取り消す", "Remember, you can always set an email address in user settings if you change your mind.": "利用者設定でいつでもメールアドレスを設定できます。", @@ -148,7 +142,6 @@ "Source URL": "ソースのURL", "Filter results": "絞り込み結果", "Noisy": "音量大", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "部屋のエイリアス %(alias)s を削除し、ディレクトリから %(name)s を消去しますか?", "Invite to this community": "このコミュニティに招待する", "View Source": "ソースコードを表示する", "Back": "戻る", @@ -183,7 +176,6 @@ "Show message in desktop notification": "デスクトップ通知にメッセージ内容を表示する", "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.": "デバッグログはあなたのユーザ名、訪問した部屋やグループのIDやエイリアス、他のユーザのユーザ名を含むアプリの使用データを含みます。メッセージは含みません。", "Unable to join network": "ネットワークに接続できません", - "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で設定することはできませんが、引き続き使用可能です", "Error encountered (%(errorDetail)s).": "エラーが発生しました (%(errorDetail)s)。", "Event Type": "イベントの形式", "What's New": "新着", @@ -198,14 +190,9 @@ "Event Content": "イベントの内容", "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!": "現在ご使用のブラウザでは、アプリの外見や使い心地が正常でない可能性があります。また、一部または全部の機能がご使用いただけない可能性があります。このままご使用いただけますが、問題が発生した場合は対応しかねます!", "Checking for an update...": "アップデートを確認しています…", - "There are advanced notifications which are not shown here": "ここに表示されない詳細な通知があります", - "Call": "通話", - "Answer": "応答", "e.g. ": "凡例: ", "Your device resolution": "端末の解像度", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "このページに部屋、ユーザー、グループIDなどの識別可能な情報が含まれている場合、そのデータはサーバーに送信される前に削除されます。", - "Answer Anyway": "とにかく応答", - "Call Anyway": "とにかく通話", "Call Timeout": "通話タイムアウト", "The remote side failed to pick up": "相手が応答しませんでした", "Unable to capture screen": "画面をキャプチャできません", @@ -214,7 +201,6 @@ "VoIP is unsupported": "VoIPはサポートされていません", "You cannot place VoIP calls in this browser.": "このブラウザにはVoIP通話はできません。", "You cannot place a call with yourself.": "自分自身に電話をかけることはできません。", - "Could not connect to the integration server": "統合サーバーに接続できません", "Call in Progress": "発信中", "A call is currently being placed!": "現在発信中です!", "A call is already in progress!": "既に発信しています!", @@ -253,7 +239,6 @@ "Which rooms would you like to add to this community?": "このコミュニティに追加したい部屋はどれですか?", "Show these rooms to non-members on the community page and room list?": "コミュニティページとルームリストのメンバー以外にこれらの部屋を公開しますか?", "Add rooms to the community": "コミュニティに部屋を追加します", - "Room name or alias": "部屋名またはエイリアス", "Add to community": "コミュニティに追加", "Failed to invite the following users to %(groupId)s:": "次のユーザーを %(groupId)s に招待できませんでした:", "Failed to invite users to community": "ユーザーをコミュニティに招待できませんでした", @@ -264,13 +249,10 @@ "Unable to enable Notifications": "通知を有効にできません", "This email address was not found": "このメールアドレスが見つかりませんでした", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "あなたのメールアドレスは、このホームサーバー上のマトリックスIDと関連付けられていないようです。", - "Registration Required": "登録が必要です", - "You need to register to do this. Would you like to register now?": "これを行うには登録する必要があります。 今すぐ登録しますか?", "Default": "既定値", "Restricted": "制限", "Moderator": "仲裁者", "Admin": "管理者", - "Start a chat": "チャットを開始する", "Failed to invite": "招待できませんでした", "Failed to invite the following users to the %(roomName)s room:": "次のユーザーを %(roomName)s の部屋に招待できませんでした:", "You need to be logged in.": "ログインする必要があります。", @@ -291,9 +273,7 @@ "To use it, just wait for autocomplete results to load and tab through them.": "それを使用するには、結果が完全にロードされるのを待ってから、Tabキーを押してください。", "Changes your display nickname": "表示されるニックネームを変更", "Invites user with given id to current room": "指定されたIDを持つユーザーを現在のルームに招待する", - "Joins room with given alias": "指定された別名で部屋に参加する", "Leave room": "部屋を退出", - "Unrecognised room alias:": "認識されない部屋の別名:", "Kicks user with given id": "与えられたIDを持つユーザーを追放する", "Bans user with given id": "指定されたIDでユーザーをブロックする", "Ignores a user, hiding their messages from you": "ユーザーを無視し、自分からのメッセージを隠す", @@ -331,11 +311,6 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s が部屋名を削除しました。", "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s が部屋名を %(roomName)s に変更しました。", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s が画像を送信しました。", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s はこの部屋のアドレスとして %(addedAddresses)s を追加しました。", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s はこの部屋のアドレスとして %(addedAddresses)s を追加しました。", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s はこの部屋のアドレスとして %(removedAddresses)s を削除しました。", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s はこの部屋のアドレスとして %(removedAddresses)s を削除しました。", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s はこの部屋のアドレスとして %(addedAddresses)s を追加し、%(removedAddresses)s を削除しました。", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s が、この部屋のメインアドレスを %(address)s に設定しました。", "%(senderName)s removed the main address for this room.": "%(senderName)s がこの部屋のメインアドレスを削除しました。", "Someone": "誰か", @@ -359,7 +334,6 @@ "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s ウィジェットが %(senderName)s によって削除されました", "Failure to create room": "部屋の作成に失敗しました", "Server may be unavailable, overloaded, or you hit a bug.": "サーバーが使用できない、オーバーロードされている、またはバグが発生した可能性があります。", - "Send anyway": "とにかく送る", "Unnamed Room": "名前のない部屋", "This homeserver has hit its Monthly Active User limit.": "このホームサーバーは、月間アクティブユーザー制限を超えています。", "This homeserver has exceeded one of its resource limits.": "このホームサーバーは、リソース制限の1つを超えています。", @@ -402,11 +376,8 @@ "Password": "パスワード", "Confirm password": "確認のパスワード", "Authentication": "認証", - "Device ID": "端末ID", "Last seen": "最近の使用履歴", "Failed to set display name": "表示名の設定に失敗しました", - "Disable Notifications": "通知を無効にする", - "Enable Notifications": "通知を有効にする", "Off": "オフ", "On": "オン", "Cannot add any more widgets": "ウィジェットを追加できません", @@ -424,8 +395,6 @@ "Options": "オプション", "Key request sent.": "キーリクエストが送信されました。", "Please select the destination room for this message": "このメッセージを送り先部屋を選択してください", - "Blacklisted": "ブラックリストに載せた", - "device id: ": "端末id: ", "Disinvite": "招待拒否", "Kick": "追放する", "Disinvite this user?": "このユーザーを招待拒否しますか?", @@ -433,25 +402,19 @@ "Failed to kick": "追放できませんでした", "e.g. %(exampleValue)s": "例えば %(exampleValue)s", "Every page you use in the app": "アプリで使用するすべてのページ", - "Your User Agent": "ユーザーエージェント", "Call Failed": "呼び出しに失敗しました", - "Review Devices": "端末を確認する", "Automatically replace plain text Emoji": "自動的にプレーンテキスト絵文字を置き換える", "Demote yourself?": "自身を降格しますか?", "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": "降格", "Failed to mute user": "ユーザーのミュートに失敗しました", - "Failed to toggle moderator status": "モデレータステータスを切り替えることができませんでした", "Failed to change power level": "権限レベルの変更に失敗しました", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "この変更を元に戻すことはできません。そのユーザーが自分と同じ権限レベルを持つように促します。", "Ignore": "無視", "Jump to read receipt": "既読へジャンプ", "Invite": "招待", "Share Link to User": "ユーザーへのリンクを共有する", - "User Options": "ユーザーオプション", "Unmute": "ミュート解除", - "Revoke Moderator": "モデレーターを取り消す", - "Make Moderator": "モデレーターにする", "Admin Tools": "管理者ツール", "and %(count)s others...|other": "そして、他 %(count)s ...", "and %(count)s others...|one": "そして、もう1つ...", @@ -461,9 +424,7 @@ "Voice call": "音声通話", "Video call": "ビデオ通話", "Send an encrypted reply…": "暗号化された返信を送信する…", - "Send a reply (unencrypted)…": "(暗号化されていない) 返信を送信する…", "Send an encrypted message…": "暗号化されたメッセージを送信する…", - "Send a message (unencrypted)…": "(暗号化されていない) メッセージを送信する…", "This room has been replaced and is no longer active.": "この部屋は交換されており、もうアクティブではありません。", "The conversation continues here.": "会話はここで続けられます。", "You do not have permission to post to this room": "この部屋に投稿する権限がありません", @@ -531,10 +492,7 @@ "Show Stickers": "ステッカーを表示", "Jump to first unread message.": "最初の未読メッセージにジャンプします。", "not specified": "指定なし", - "Remote addresses for this room:": "この部屋のリモートアドレス:", - "Local addresses for this room:": "この部屋のローカルアドレス:", "This room has no local addresses": "この部屋にはローカルアドレスはありません", - "New address (e.g. #foo:%(localDomain)s)": "新しいアドレス (例 #foo:%(localDomain)s)", "Invalid community ID": "無効なコミュニティID", "'%(groupId)s' is not a valid community ID": "'%(groupId)s' は有効なコミュニティIDではありません", "Showing flair for these communities:": "次のコミュニティのバッジを表示:", @@ -564,10 +522,6 @@ "Failed to copy": "コピーに失敗しました", "Add an Integration": "統合を追加する", "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 で使用するためにアカウントを認証できるようになります。続行しますか?", - "Removed or unknown message type": "削除されたまたは未知のメッセージタイプ", - "Message removed by %(userId)s": "%(userId)s によってメッセージが削除されました", - "Message removed": "メッセージが削除された", - "To continue, please enter your password.": "続行するには、パスワードを入力してください。", "Please review and accept the policies of this homeserver:": "このホームサーバーのポリシーを確認し、同意してください:", "An email has been sent to %(emailAddress)s": "電子メールが %(emailAddress)s に送信されました", "Please check your email to continue registration.": "登録を続行するにはメールをご確認ください。", @@ -603,12 +557,6 @@ "Display your community flair in rooms configured to show it.": "表示するよう設定した部屋であなたのコミュニティ バッジを表示", "Show developer tools": "開発者ツールを表示", "You're not currently a member of any communities.": "あなたは現在、どのコミュニティのメンバーでもありません。", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "匿名利用データを送信して、%(brand)sの改善を支援してください。 これはCookieを使用します (クッキーポリシーをご覧ください)>。", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "匿名利用データを送信して、%(brand)sの改善を支援してください。 これはクッキーを使用します。", - "Yes, I want to help!": "はい、協力します!", - "Please contact your service administrator to get this limit increased.": "この制限を増やすには、サービス管理者にお問い合わせください。", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "このホームサーバーは月間アクティブユーザー数の上限に達しているため、一部のユーザーはログインできません。", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "このホームサーバーはリソース制限の1つを超えており、一部のユーザーはログインできません。", "Unknown Address": "不明な住所", "Allow": "許可", "Delete Widget": "ウィジェットを削除", @@ -618,9 +566,6 @@ "An error ocurred whilst trying to remove the widget from the room": "ウィジェットをその部屋から削除しようとしているときにエラーが発生しました", "Minimize apps": "アプリを最小化する", "Popout widget": "ウィジェットをポップアウト", - "Unblacklist": "ブラックリスト解除", - "Blacklist": "ブラックリスト", - "Verify...": "検証する...", "No results": "結果がありません", "Communities": "コミュニティ", "Home": "ホーム", @@ -708,12 +653,7 @@ "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:": "続行するには、パスワードを入力してください:", - "I verify that the keys match": "キーが一致することを確認します", "An error has occurred.": "エラーが発生しました。", - "Start verification": "検証を開始する", - "Share without verifying": "検証せずに共有する", - "Ignore request": "要求を無視する", - "Encryption key request": "暗号化キー要求", "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.": "以前 %(host)s にて、メンバーの遅延ロードを有効にした%(brand)sを使用していました。このバージョンでは、遅延ロードは無効です。ローカルキャッシュはこれらの2つの設定の間で互換性がないため、%(brand)sはアカウントを再同期する必要があります。", "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.": "他のバージョンの%(brand)sがまだ別のタブで開いている場合は、同じホスト上で%(brand)sを使用するように閉じてください。遅延ロードが同時に有効と無効になっていると問題が発生します。", "Incompatible local cache": "互換性のないローカルキャッシュ", @@ -728,7 +668,6 @@ "Update any local room aliases to point to the new room": "新しいルームを指すようにローカルルームのエイリアスを更新する", "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "古いバージョンの部屋でのユーザーの発言を停止し、新しい部屋に移動するようユーザーに通知するメッセージを投稿する", "Mention": "記載", - "Unverify": "未検証", "%(severalUsers)shad their invitations withdrawn %(count)s times|other": "%(severalUsers)s が %(count)s 回招待を撤回した", "was unbanned %(count)s times|one": "ブロック解除されました", "Put a link back to the old room at the start of the new room so people can see old messages": "新しい部屋の始めに古い部屋にリンクを張って、人々が古いメッセージを見ることができるようにする", @@ -765,7 +704,6 @@ "Private Chat": "プライベートチャット", "Public Chat": "パブリックチャット", "Custom": "カスタム", - "Alias (optional)": "エイリアス (オプション)", "Reject invitation": "招待を拒否する", "Are you sure you want to reject the invitation?": "招待を拒否しますか?", "Unable to reject invite": "招待を拒否できません", @@ -835,7 +773,6 @@ "Create a new community": "新しいコミュニティを作成する", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "ユーザーと部屋をグループ化するコミュニティを作成してください! Matrixユニバースにあなたの空間を目立たせるためにカスタムホームページを作成してください。", "You have no visible notifications": "表示される通知はありません", - "Scroll to bottom of page": "ページの一番下にスクロールする", "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 exceeded a resource limit. Please contact your service administrator to continue using the service.": "このホームサーバーがリソース制限を超えたため、メッセージは送信されませんでした。 サービスを引き続き使用するには、サービス管理者にお問い合わせください。", @@ -852,7 +789,6 @@ "Search failed": "検索に失敗しました", "Server may be unavailable, overloaded, or search timed out :(": "サーバーが使用できない、オーバーロードされている、または検索がタイムアウトしているようです :(", "No more results": "もう結果はありません", - "Unknown room %(roomId)s": "未知の部屋 %(roomId)s", "Room": "部屋", "Failed to reject invite": "招待を拒否できませんでした", "Click to unmute video": "ビデオの音消解除するにはクリックしてください", @@ -919,21 +855,7 @@ "Notify the whole room": "部屋全体に通知する", "Room Notification": "ルーム通知", "Users": "ユーザー", - "unknown device": "未知の端末", - "NOT verified": "検証されていない", - "verified": "検証済み", - "Verification": "検証", - "Ed25519 fingerprint": "Ed25519フィンガープリント", - "User ID": "ユーザーID", - "Curve25519 identity key": "Curve25519 ID鍵", - "none": "無し", - "Claimed Ed25519 fingerprint key": "Claimed Ed25519フィンガープリント鍵", - "Algorithm": "アルゴリズム", - "unencrypted": "暗号化されていない", - "Decryption error": "復号化エラー", "Session ID": "セッション ID", - "End-to-end encryption information": "エンドツーエンド暗号化情報", - "Event information": "イベント情報", "Passphrases must match": "パスフレーズは一致する必要があります", "Passphrase must not be empty": "パスフレーズは空であってはいけません", "Export room keys": "ルームキーのエクスポート", @@ -953,12 +875,9 @@ "Open Devtools": "開発ツールを開く", "Flair": "バッジ", "Fill screen": "フィルスクリーン", - "Light theme": "ライトテーマ", - "Dark theme": "ダークテーマ", "Unignore": "無視しない", "Unable to load! Check your network connectivity and try again.": "ロードできません! ネットワーク通信を確認の上もう一度お試しください。", "Failed to invite users to the room:": "部屋にユーザーを招待できませんでした:", - "Waiting for %(userId)s to confirm...": "%(userId)s の確認を待っています...", "You do not have permission to invite people to this room.": "この部屋にユーザーを招待する権限がありません。", "Unknown server error": "不明なサーバーエラー", "No need for symbols, digits, or uppercase letters": "記号、数字、大文字を含む必要はありません", @@ -986,7 +905,6 @@ "Add Phone Number": "電話番号の追加", "Call failed due to misconfigured server": "サーバの誤設定により呼び出し失敗", "Try using turn.matrix.org": "turn.matrix.orgで試してみる", - "A conference call could not be started because the integrations server is not available": "統合サーバーが利用できないので電話会議を開始できませんでした", "Replying With Files": "ファイルを添付して返信", "The file '%(fileName)s' failed to upload.": "ファイル '%(fileName)s' のアップロードに失敗しました。", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "ファイル '%(fileName)s' はこのホームサーバのアップロードのサイズ上限を超えています", @@ -1052,7 +970,6 @@ "Enable big emoji in chat": "チャットで大きな絵文字を有効にする", "Send typing notifications": "入力中通知を送信する", "Enable Community Filter Panel": "コミュニティーフィルターパネルを有効にする", - "Show recently visited rooms above the room list": "最近訪問した部屋をリストの上位に表示する", "Low bandwidth mode": "低帯域通信モード", "Public Name": "公開名", "Upgrade to your own domain": "あなた自身のドメインにアップグレード", @@ -1165,21 +1082,12 @@ "You'll upgrade this room from to .": "このルームをからにアップグレードします。", "Warning: You should only set up key backup from a trusted computer.": "警告: 信頼できるコンピュータからのみキーのバックアップをセットアップしてください。", "For maximum security, this should be different from your account password.": "セキュリティの効果を高めるために、アカウントのパスワードと別のものを設定するべきです。", - "Enter a passphrase...": "パスワードを入力...", "That matches!": "同じです!", - "Please enter your passphrase a second time to confirm.": "確認のために、パスワードをもう一度入力してください。", - "Repeat your passphrase...": "パスワードを再度入力...", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "リカバリキーは安全網です - パスワードを忘れた際は、リカバリキーを使って復元できます。", - "Copy to clipboard": "クリップボードにコピー", "Download": "ダウンロード", "Your recovery key has been copied to your clipboard, paste it to:": "リカバリキーがクリップボードにコピーされました。ペーストして:", "Print it and store it somewhere safe": "印刷して安全な場所に保管しましょう", "Save it on a USB key or backup drive": "USB メモリーやバックアップ用のドライブに保存しましょう", "Copy it to your personal cloud storage": "個人のクラウドストレージにコピーしましょう", - "Confirm your passphrase": "パスワードを確認", - "Recovery key": "リカバリキー", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "キーの暗号化されたコピーがサーバーに保存されます。バックアップを保護するために、パスワードを設定してください。", - "Secure your backup with a passphrase": "バックアップをパスワードで保護", "Display Name": "表示名", "Profile picture": "プロフィール画像", "Encryption enabled": "暗号化が有効です", @@ -1195,11 +1103,9 @@ "Session ID:": "セッション ID:", "Session key:": "セッション鍵:", "Cross-signing": "クロス署名", - "Sessions": "セッション", "A session's public name is visible to people you communicate with": "各セッションの公開名は、あなたの連絡先のユーザーが閲覧できます。", "Session name": "セッション名", "Session key": "セッション鍵", - "Sender session information": "送信者のセッション情報", "Never send encrypted messages to unverified sessions from this session": "このセッションでは、未検証のセッションに対して暗号化されたメッセージを送信しない", "Never send encrypted messages to unverified sessions in this room from this session": "このセッションでは、この部屋の未検証のセッションに対して暗号化されたメッセージを送信しない", "Encrypted messages in one-to-one chats": "1対1のチャットでの暗号化されたメッセージ", @@ -1208,10 +1114,6 @@ "Enable desktop notifications for this session": "このセッションでデスクトップ通知を行う", "Email addresses": "メールアドレス", "This room is end-to-end encrypted": "この部屋はエンドツーエンド暗号化されています", - "Some sessions for this user are not trusted": "このユーザーの一部のセッションは信頼されていません", - "All sessions for this user are trusted": "このユーザーの全てのセッションを信頼しています", - "Some sessions in this encrypted room are not trusted": "この暗号化された部屋の一部のセッションは信頼されていません", - "All sessions in this encrypted room are trusted": "この暗号化された部屋の全てのセッションを信頼しています", "Encrypted by an unverified session": "未検証のセッションによる暗号化", "Close preview": "プレビューを閉じる", "Direct Messages": "ダイレクトメッセージ", @@ -1226,7 +1128,6 @@ "Clear all data": "全てのデータを削除", "Create a public room": "公開された部屋を作成", "Make this room public": "この部屋を公開する", - "Loading session info...": "セッション情報を読み込み中...", "Message edits": "メッセージの編集履歴", "Report Content to Your Homeserver Administrator": "あなたのホームサーバーの管理者にコンテンツを報告", "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "このメッセージを報告すると、このメッセージの一意の「イベントID」があなたのホームサーバーの管理者に送信されます。この部屋内のメッセージが暗号化されている場合、ホームサーバーの管理者はメッセージのテキストを読んだり、ファイルや画像を表示することはできません。", @@ -1239,7 +1140,6 @@ "Help": "ヘルプ", "Filter rooms…": "部屋を検索…", "Preview": "プレビュー", - "The version of %(brand)s": "%(brand)s のバージョン", "Your user agent": "あなたの User Agent", "Bold": "太字", "Italics": "イタリック体", @@ -1328,9 +1228,6 @@ "in account data": "アカウントデータ内", "Homeserver feature support:": "ホームサーバーの対応状況:", "exists": "対応している", - "Secret Storage key format:": "機密ストレージ鍵の形式:", - "outdated": "最新版でない", - "up to date": "最新版", "Your homeserver does not support session management.": "あなたのホームサーバーはセッション管理に対応していません。", "Unable to load session list": "セッション一覧を読み込めません", "Securely cache encrypted messages locally for them to appear in search results, using ": "検索結果を表示するため、暗号化されたメッセージをローカルに安全にキャッシュしています。 キャッシュの保存に ", @@ -1410,7 +1307,6 @@ "Show shortcuts to recently viewed rooms above the room list": "最近表示した部屋のショートカットを部屋リストの上に表示", "Show previews/thumbnails for images": "画像のプレビュー/サムネイルを表示", "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "あなたのアカウントではクロス署名の認証情報がシークレットストレージに保存されていますが、このセッションでは信頼されていません。", - "%(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 を利用してください。", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "このセッションではキーをバックアップしていません。ですが、あなたは復元に使用したり今後キーを追加したりできるバックアップを持っています。", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "このセッションのみにあるキーを失なわないために、セッションをキーバックアップに接続しましょう。", "Connect this session to Key Backup": "このセッションをキーバックアップに接続", @@ -1421,10 +1317,7 @@ "Join the discussion": "話し合いに参加", "%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s はプレビューできません。部屋に参加しますか?", "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "他のユーザーがあなたのホームサーバー (%(localDomain)s) を通じてこの部屋を見つけられるよう、アドレスを設定しましょう", - "Warning: You should only do this on a trusted computer.": "警告: 信頼できるコンピュータでのみこれを実行するべきです。", "Enter recovery key": "リカバリキーを入力", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "暗号化されたメッセージへアクセスしたりクロス署名認証情報で他のセッションを承認するにはリカバリキーを入力してください。", - "If you've forgotten your recovery key you can .": "リカバリキーを忘れた場合はできます。", "Verify this login": "このログインを承認", "Signing In...": "サインインしています...", "If you've joined lots of rooms, this might take a while": "たくさんの部屋に参加している場合は、時間がかかる可能性があります", diff --git a/src/i18n/strings/jbo.json b/src/i18n/strings/jbo.json index 89e44240e8..5adb662b43 100644 --- a/src/i18n/strings/jbo.json +++ b/src/i18n/strings/jbo.json @@ -8,21 +8,14 @@ "Which officially provided instance you are using, if any": "le klesi poi ca'irselzau se sabji poi do pilno", "Whether or not you're using the Richtext mode of the Rich Text Editor": "lo du'u xu kau do pilno la .markdaun. lo nu ciski", "Your homeserver's URL": "le urli be le do samtcise'u", - "Your identity server's URL": "le urli be le do prenu datni samtcise'u", "e.g. %(exampleValue)s": "mu'a zoi gy. %(exampleValue)s .gy.", "Every page you use in the app": "ro lo pagbu poi do pilno pe le samtci", "e.g. ": "mu'a zoi urli. .urli", - "Your User Agent": "le datni be lo do kibyca'o", "Your device resolution": "le ni vidnysle", "Analytics": "lo se lanli datni", "The information being sent to us to help make %(brand)s better includes:": ".i ti liste lo datni poi se dunda fi lo favgau te zu'e lo nu xagzengau la nu zunti", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": ".i pu lo nu benji fi lo samtcise'u cu vimcu lo datni poi termi'u no'u mu'a lo termi'u be lo kumfa pe'a .o nai lo pilno .o nai lo girzu", "Call Failed": ".i pu fliba lo nu fonjo'e", - "Review Devices": "za'u re'u viska lo liste be lo samtciselse'u", - "Call Anyway": "je'e fonjo'e", - "Answer Anyway": "je'e spuda", - "Call": "fonjo'e", - "Answer": "spuda", "You are already in a call.": ".i do ca'o pu zvati lo nu fonjo'e", "VoIP is unsupported": ".i na kakne tu'a la .voip.", "You cannot place VoIP calls in this browser.": ".i le kibyca'o na kakne tu'a la .voip.", @@ -38,9 +31,7 @@ "The remote side failed to pick up": ".i lo se fonjo'e na pu spuda", "Unable to capture screen": ".i na kakne lo nu benji lo vidvi be lo vidni", "Existing Call": ".i ca'o pu fonjo'e", - "Could not connect to the integration server": ".i na kakne lo nu co'a samjo'e le jmina samtcise'u", "Server may be unavailable, overloaded, or you hit a bug.": ".i la'a cu'i lo samtcise'u cu spofu gi'a mutce gunka .i ja samcfi", - "Send anyway": "je'e benji", "Send": "benji", "Sun": "nondei", "Mon": "pavdei", @@ -74,7 +65,6 @@ "Which rooms would you like to add to this community?": ".i do djica lo nu jmina ma poi kumfa pe'a po'u le girzu", "Show these rooms to non-members on the community page and room list?": ".i .au pei le kumfa cu gubni zvati le girzu pagbu .e le liste be lo'i kumfa pe'a", "Add rooms to the community": "jmina lo kumfa pe'a le girzu", - "Room name or alias": "lo cmene ja datcme be lo kumfa", "Add to community": "jmina fi le girzu", "Failed to invite the following users to %(groupId)s:": "lo pilno poi fliba lo nu vi'ecpe ke'a la'o ny. %(groupId)s .ny.", "Failed to invite users to community": ".i pu fliba lo nu vi'ecpe lo pilno le girzu", @@ -86,14 +76,11 @@ "Unable to enable Notifications": ".i na kakne lo nu co'a kakne lo nu benji lo sajgau", "This email address was not found": ".i na pu facki fi le ve samymri", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": ".i za'a le ve samymri be fo do cu ckini no lo judri be fi la nacmeimei be'o pe le samtcise'u", - "Registration Required": ".i .ei do se cmeveigau", - "You need to register to do this. Would you like to register now?": ".i lo nu cmeveigau do sarcu ti .i do ca .au pei cmeveigau do", "Register": "cmeveigau", "Default": "lo zmiselcu'a", "Restricted": "li so'u", "Moderator": "li so'i", "Admin": "li ro", - "Start a chat": "lo nu co'a tavla", "Power level must be positive integer.": ".i .ei lo ni vlipa cu kacna'u", "%(senderName)s changed the power level of %(powerLevelDiffText)s.": ".i la'o ly. %(senderName)s .ly. gafygau %(powerLevelDiffText)s", "Failed to change power level": ".i pu fliba lo nu gafygau lo ni vlipa", @@ -117,9 +104,7 @@ "/ddg is not a command": "zoi ny. /ddg .ny. na nu minde", "Changes your display nickname": ".i galfi le do cmene", "Invites user with given id to current room": ".i vi'ecpe lo pilno poi se judri ti ku le kumfa pe'a", - "Joins room with given alias": ".i drata judri le kumfa pe'a", "Leave room": "cliva le kumfa pe'a", - "Unrecognised room alias:": "lo drata judri poi na se sanji", "Kicks user with given id": ".i rinka lo nu lo pilno poi se judri ti cu cliva", "Bans user with given id": ".i rinka lo nu lo pilno poi se judri ti cu vitno cliva", "Ignores a user, hiding their messages from you": ".i rinka lo nu no'e jundi lo pilno gi'e mipri lo notci be fi py. do", @@ -158,11 +143,6 @@ "%(senderDisplayName)s removed the room name.": ".i la'o ly. %(senderDisplayName)s .ly. vimcu lo cmene be le kumfa pe'a", "%(senderDisplayName)s changed the room name to %(roomName)s.": ".i la'o ly. %(senderDisplayName)s .ly. gafygau lo cmene be le kumfa zoi ly. %(roomName)s .ly.", "%(senderDisplayName)s sent an image.": ".i la'o ly. %(senderDisplayName)s .ly. mrilu lo pixra", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": ".i la'o ly. %(senderName)s .ly. jmina zoi ny. %(addedAddresses)s .ny. lo'i judri be le kumfa pe'a", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": ".i la'o ly. %(senderName)s .ly. jmina zoi ny. %(addedAddresses)s .ny. lo'i judri be le kumfa pe'a", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": ".i la'o ly. %(senderName)s .ly. vimcu zoi ny. %(removedAddresses)s .ny. lo'i judri be le kumfa pe'a", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": ".i la'o ly. %(senderName)s .ly. vimcu zoi ny. %(removedAddresses)s .ny. lo'i judri be le kumfa pe'a", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": ".i la'o ly. %(senderName)s .ly. jmina zoi ny. %(addedAddresses)s .ny. lo'i judri be le kumfa pe'a gi'e vimcu zoi ny. %(removedAddresses)s .ny. jy.", "%(senderName)s set the main address for this room to %(address)s.": ".i la'o ly. %(senderName)s .ly. gafygau lo ralju cmene be le kumfa pe'a zoi ny. %(address)s .ny.", "%(senderName)s removed the main address for this room.": ".i la'o ly. %(senderName)s .ly. vimcu lo ralju cmene be le kumfa pe'a", "Someone": "da poi prenu", @@ -193,7 +173,6 @@ "Please contact your homeserver administrator.": ".i .e'o ko tavla lo admine be le samtcise'u", "Failed to join room": ".i pu fliba lo nu cmibi'o le kumfa pe'a", "Message Pinning": "lo du'u xu kau kakne lo nu mrilu lo vitno notci", - "Use compact timeline layout": "lo du'u xu kau lo liste be lo notci cu tagji", "Show timestamps in 12 hour format (e.g. 2:30pm)": "lo du'u xu kau lo tcika cu se tarmi mu'a lu ti'u li re pi'e ci no su'i pa re li'u", "Always show message timestamps": "lo du'u xu kau do ro roi viska ka'e lo tcika be tu'a lo notci", "Autoplay GIFs and videos": "lo du'u xu kau lo vidvi cu zmiku cfari", @@ -243,11 +222,8 @@ "Confirm password": "lo za'u re'u japyvla poi cnino", "Change Password": "galfi lo japyvla", "Authentication": "lo nu facki lo du'u do du ma kau", - "Device ID": "lo judri be lo samtciselse'u", "Last seen": "lo ro re'u nu viska", "Failed to set display name": ".i pu fliba lo nu galfi lo cmene", - "Disable Notifications": "na sajgau", - "Enable Notifications": "sajgau", "Error saving email notification preferences": ".i pu fliba lo nu co'a vreji lo se cuxna pe lo nu samymri", "An error occurred whilst saving your email notification preferences.": ".i pu fliba lo nu co'a vreji lo se cuxna pe lo nu samymri sajgau", "Keywords": "lo midvla", diff --git a/src/i18n/strings/kab.json b/src/i18n/strings/kab.json index a2cc7e23e7..a0b05ceee6 100644 --- a/src/i18n/strings/kab.json +++ b/src/i18n/strings/kab.json @@ -61,7 +61,6 @@ "Update": "Leqqem", "Restart": "Ales tanekra", "Font size": "Tuɣzi n tsefsit", - "Custom font size": "Tiddi n tsefsit yugnen", "Decline": "Agwi", "Accept": "Qbel", "or": "neɣ", @@ -437,7 +436,6 @@ "What's new?": "D acu-t umaynut?", "Upgrade your %(brand)s": "Leqqem %(brand)s inek/inem", "A new version of %(brand)s is available!": "Lqem amaynut n %(brand)s yella!", - "You: %(message)s": "Kečč/kemm: %(message)s", "There was an error joining the room": "Tella-d tuccḍa deg unekcum ɣer texxamt", "Sorry, your homeserver is too old to participate in this room.": "Suref-aɣ, asebter-ik/im agejdan d aqbur aṭas akken ad yettekki deg texxamt-a.", "Please contact your homeserver administrator.": "Ttxil-k/m nermes anedbal-ik/im n usebter agejdan.", diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index adf01bb6ed..6789cfaec8 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -28,10 +28,8 @@ "Microphone": "마이크", "Camera": "카메라", "Advanced": "고급", - "Algorithm": "알고리즘", "Always show message timestamps": "항상 메시지의 시간을 보이기", "Authentication": "인증", - "Alias (optional)": "별칭 (선택)", "A new password must be entered.": "새 비밀번호를 입력해주세요.", "An error has occurred.": "오류가 발생했습니다.", "Anyone": "누구나", @@ -41,17 +39,12 @@ "Autoplay GIFs and videos": "GIF와 동영상을 자동으로 재생하기", "Ban": "출입 금지", "Banned users": "출입 금지된 사용자", - "Blacklisted": "블랙리스트 대상", "Change Password": "비밀번호 바꾸기", "Changes your display nickname": "표시 별명 변경하기", "Confirm password": "비밀번호 확인", "Create Room": "방 만들기", "Custom": "사용자 지정", - "Device ID": "기기 ID", "Default": "기본", - "device id: ": "기기 ID: ", - "Direct chats": "다이렉트 대화", - "Disable Notifications": "알림 끄기", "Email": "이메일", "Email address": "이메일 주소", "Failed to forget room %(errCode)s": "%(errCode)s 방 지우기에 실패함", @@ -81,7 +74,6 @@ "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s님이 방 이름을 %(roomName)s(으)로 바꿨습니다.", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s님이 방 이름을 제거했습니다.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s님이 주제를 \"%(topic)s\"(으)로 바꿨습니다.", - "Claimed Ed25519 fingerprint key": "Ed25519 핑거프린트 키가 필요함", "Click here to fix": "해결하려면 여기를 누르세요", "Click to mute audio": "소리를 끄려면 클릭", "Click to mute video": "영상 소리를 끄려면 클릭", @@ -90,30 +82,23 @@ "Click to unmute audio": "소리를 켜려면 클릭", "Command error": "명령어 오류", "Commands": "명령어", - "Could not connect to the integration server": "통합 서버에 연결할 수 없음", "Cryptography": "암호화", "Current password": "현재 비밀번호", - "Curve25519 identity key": "Curve25519 ID 키", "Custom level": "맞춤 등급", "/ddg is not a command": "/ddg는 명령어가 아닙니다", "Deactivate Account": "계정 비활성화", "Decline": "거절", "Decrypt %(text)s": "%(text)s 복호화", - "Decryption error": "암호 복호화 오류", "Deops user with given id": "받은 ID로 사용자의 등급을 낮추기", "Disinvite": "초대 취소", "Displays action": "활동 표시하기", "Download %(text)s": "%(text)s 다운로드", "Drop File Here": "여기에 파일을 놓아주세요", - "Ed25519 fingerprint": "Ed25519 핑거프린트", "Emoji": "이모지", - "Enable Notifications": "알림 켜기", "%(senderName)s ended the call.": "%(senderName)s님이 전화를 끊었습니다.", - "End-to-end encryption information": "종단간 암호화 정보", "Enter passphrase": "암호 입력", "Error decrypting attachment": "첨부 파일 복호화 중 오류", "Error: Problem communicating with the given homeserver.": "오류: 지정한 홈서버와 통신에 문제가 있습니다.", - "Event information": "이벤트 정보", "Existing Call": "기존 전화", "Export": "내보내기", "Export E2E room keys": "종단간 암호화 방 열쇠 내보내기", @@ -130,7 +115,6 @@ "Failed to send email": "이메일 보내기에 실패함", "Failed to send request.": "요청을 보내지 못했습니다.", "Failed to set display name": "표시 이름을 설정하지 못함", - "Failed to toggle moderator status": "조정자 상태 설정에 실패함", "Failed to unban": "출입 금지 풀기에 실패함", "Failed to upload profile picture!": "프로필 사진 업로드에 실패함!", "Failed to verify email address: make sure you clicked the link in the email": "이메일 주소를 인증하지 못했습니다. 메일에 나온 주소를 눌렀는지 확인해 보세요", @@ -166,7 +150,6 @@ "Join as voice or video.": "음성 또는 영상으로 참가하세요.", "Join Room": "방에 참가", "%(targetName)s joined the room.": "%(targetName)s님이 방에 참가했습니다.", - "Joins room with given alias": "받은 별칭으로 방에 들어가기", "Jump to first unread message.": "읽지 않은 첫 메시지로 건너뜁니다.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s님이 %(targetName)s님을 추방했습니다.", "Kick": "추방", @@ -175,7 +158,6 @@ "Last seen": "마지막으로 본 순간", "Leave room": "방 떠나기", "%(targetName)s left the room.": "%(targetName)s님이 방을 떠났습니다.", - "Local addresses for this room:": "이 방의 로컬 주소:", "Logout": "로그아웃", "Low priority": "중요하지 않음", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s님이 이후 방 구성원 모두, 초대받은 시점부터 방의 기록을 볼 수 있게 했습니다.", @@ -188,14 +170,11 @@ "Missing user_id in request": "요청에서 user_id이(가) 빠짐", "Moderator": "조정자", "Name": "이름", - "New address (e.g. #foo:%(localDomain)s)": "새 주소 (예: #foo:%(localDomain)s)", "New passwords don't match": "새 비밀번호가 맞지 않음", "New passwords must match each other.": "새 비밀번호는 서로 같아야 합니다.", - "none": "없음", "not specified": "지정되지 않음", "(not supported by this browser)": "(이 브라우저에서 지원하지 않습니다)", "": "<지원하지 않음>", - "NOT verified": "인증하지 않음", "No display name": "표시 이름 없음", "No more results": "더 이상 결과 없음", "No results": "결과 없음", @@ -217,11 +196,9 @@ "%(senderName)s set a profile picture.": "%(senderName)s님이 프로필 사진을 설정했습니다.", "Public Chat": "공개 대화", "Reason": "이유", - "Revoke Moderator": "조정자 철회", "Register": "등록", "%(targetName)s rejected the invitation.": "%(targetName)s님이 초대를 거절했습니다.", "Reject invitation": "초대 거절", - "Remote addresses for this room:": "이 방의 원격 주소:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s님이 표시 이름 (%(oldDisplayName)s)을(를) 제거했습니다.", "%(senderName)s requested a VoIP conference.": "%(senderName)s님이 VoIP 회의를 요청했습니다.", "Results from DuckDuckGo": "DuckDuckGo에서 검색한 결과", @@ -235,11 +212,9 @@ "%(roomName)s is not accessible at this time.": "현재는 %(roomName)s에 들어갈 수 없습니다.", "Rooms": "방", "Save": "저장", - "Scroll to bottom of page": "화면 맨 아래로 이동", "Search failed": "검색 실패함", "Searches DuckDuckGo for results": "DuckDuckGo에서 검색하기", "Seen by %(userName)s at %(dateTime)s": "%(userName)s님이 %(dateTime)s에 확인함", - "Send anyway": "무시하고 보내기", "Send Reset Email": "초기화 이메일 보내기", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s님이 사진을 보냈습니다.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "방에 들어오라고 %(senderName)s님이 %(targetDisplayName)s님에게 초대를 보냈습니다.", @@ -255,7 +230,6 @@ "Sign out": "로그아웃", "%(count)s of your messages have not been sent.|other": "일부 메시지를 보내지 못했습니다.", "Someone": "다른 사람", - "Start a chat": "대화 시작하기", "Start authentication": "인증 시작", "Submit": "제출", "Success": "성공", @@ -280,13 +254,9 @@ "%(senderName)s unbanned %(targetName)s.": "%(senderName)s님이 %(targetName)s님에 대한 출입 금지를 풀었습니다.", "Unable to capture screen": "화면을 찍을 수 없음", "Unable to enable Notifications": "알림을 사용할 수 없음", - "unencrypted": "암호화하지 않음", "unknown caller": "알 수 없는 발신자", - "unknown device": "알 수 없는 기기", - "Unknown room %(roomId)s": "알 수 없는 방 %(roomId)s", "Unmute": "음소거 끄기", "Unnamed Room": "이름 없는 방", - "Unrecognised room alias:": "인식할 수 없는 방 별칭:", "Uploading %(filename)s and %(count)s others|zero": "%(filename)s을(를) 올리는 중", "Uploading %(filename)s and %(count)s others|one": "%(filename)s 외 %(count)s개를 올리는 중", "Uploading %(filename)s and %(count)s others|other": "%(filename)s 외 %(count)s개를 올리는 중", @@ -295,13 +265,9 @@ "Upload file": "파일 업로드", "Upload new:": "새로 업로드:", "Usage": "사용", - "Use compact timeline layout": "간단한 타임라인 구성 사용", - "User ID": "사용자 ID", "Username invalid: %(errMessage)s": "잘못된 사용자 이름: %(errMessage)s", "Users": "사용자", "Verification Pending": "인증을 기다리는 중", - "Verification": "인증", - "verified": "인증함", "Verified key": "인증한 열쇠", "Video call": "영상 통화", "Voice call": "음성 통화", @@ -354,7 +320,6 @@ "Upload an avatar:": "아바타 업로드:", "This server does not support authentication with a phone number.": "이 서버는 전화번호 인증을 지원하지 않습니다.", "An error occurred: %(error_string)s": "오류가 발생함: %(error_string)s", - "Make Moderator": "조정자 임명", "There are no visible files in this room": "이 방에는 보여줄 수 있는 파일이 없습니다", "Room": "방", "Connectivity to the server has been lost.": "서버 연결이 끊어졌습니다.", @@ -380,20 +345,14 @@ "Confirm Removal": "삭제 확인", "Unknown error": "알 수 없는 오류", "Incorrect password": "맞지 않는 비밀번호", - "To continue, please enter your password.": "계속하려면, 비밀번호를 입력해주세요.", "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.": "이 과정으로 암호화한 방에서 받은 메시지의 키를 로컬 파일로 내보낼 수 있습니다. 그런 다음 나중에 다른 Matrix 클라이언트에서 파일을 가져와서, 해당 클라이언트에서도 이 메시지를 복호화할 수 있도록 할 수 있습니다.", "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.": "내보낸 파일이 있으면 누구든 암호화한 메시지를 복호화해서 읽을 수 있으므로, 보안에 신경을 써야 합니다. 이런 이유로 내보낸 파일을 암호화하도록 아래에 암호를 입력하는 것을 추천합니다. 같은 암호를 사용해야 데이터를 불러올 수 있을 것입니다.", "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.": "이 과정으로 다른 Matrix 클라이언트에서 내보낸 암호화 키를 가져올 수 있습니다. 그런 다음 이전 클라이언트에서 복호화할 수 있는 모든 메시지를 복호화할 수 있습니다.", "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "내보낸 파일이 암호로 보호되어 있습니다. 파일을 복호화하려면, 여기에 암호를 입력해야 합니다.", "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.": "이 이벤트를 감추길(삭제하길) 원하세요? 방 이름을 삭제하거나 주제를 바꾸면, 다시 생길 수도 있습니다.", - "I verify that the keys match": "열쇠가 맞는지 인증합니다", "Unable to restore session": "세션을 복구할 수 없음", "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.": "이전에 최근 버전의 %(brand)s을 썼다면, 세션이 이 버전과 맞지 않을 것입니다. 창을 닫고 최근 버전으로 돌아가세요.", "Unknown Address": "알 수 없는 주소", - "Unblacklist": "블랙리스트 제외", - "Blacklist": "블랙리스트 등록", - "Unverify": "인증 취소", - "Verify...": "인증하기...", "ex. @bob:example.com": "예: @bob:example.com", "Add User": "사용자 추가", "Please check your email to continue registration.": "등록하려면 이메일을 확인해주세요.", @@ -405,7 +364,6 @@ "Error decrypting video": "영상 복호화 중 오류", "Add an Integration": "통합 추가", "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에서 쓸 수 있도록 계정을 인증하려고 다른 사이트로 이동하고 있습니다. 계속하겠습니까?", - "Removed or unknown message type": "감췄거나 알 수 없는 메시지 유형", "URL Previews": "URL 미리보기", "Drop file here to upload": "업로드할 파일을 여기에 놓으세요", " (unsupported)": " (지원하지 않음)", @@ -428,13 +386,8 @@ "Do you want to set an email address?": "이메일 주소를 설정하시겠어요?", "This will allow you to reset your password and receive notifications.": "이렇게 하면 비밀번호를 다시 설정하고 알림을 받을 수 있습니다.", "Skip": "건너뛰기", - "Start verification": "인증 시작", - "Share without verifying": "인증하지 않고 공유", - "Ignore request": "요청 무시하기", - "Encryption key request": "암호화 키 요청", "Edit": "편집", "Fetching third party location failed": "제 3자 위치를 가져오지 못함", - "A new version of %(brand)s is available.": "%(brand)s의 새 버전을 사용할 수 있습니다.", "All notifications are currently disabled for all targets.": "현재 모든 알림이 모든 대상에 대해 꺼져있습니다.", "Uploading report": "신고 업로드 중", "Sunday": "일요일", @@ -452,8 +405,6 @@ "Waiting for response from server": "서버에서 응답을 기다리는 중", "Leave": "떠나기", "Advanced notification settings": "고급 알림 설정", - "delete the alias.": "별칭을 삭제합니다.", - "To return to your account in future you need to set a password": "나중에 계정으로 돌아가려면 비밀번호를 설정해야 함", "Forget": "지우기", "World readable": "모두가 읽을 수 있음", "You cannot delete this image. (%(code)s)": "이 사진을 삭제할 수 없습니다. (%(code)s)", @@ -479,7 +430,6 @@ "Noisy": "소리", "Files": "파일", "Collecting app version information": "앱 버전 정보를 수집하는 중", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "방 별칭 %(alias)s을(를) 삭제하고 목록에서 %(name)s 방을 제거하겠습니까?", "Enable notifications for this account": "이 계정의 알림 사용하기", "Messages containing keywords": "키워드가 적힌 메시지", "Room not found": "방을 찾을 수 없음", @@ -529,7 +479,6 @@ "Show message in desktop notification": "컴퓨터 알림에서 내용 보이기", "Unhide Preview": "미리 보기를 숨기지 않기", "Unable to join network": "네트워크에 들어갈 수 없음", - "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에서 바꿀 수는 없지만, 여전히 적용되어 있습니다", "Sorry, your browser is not able to run %(brand)s.": "죄송합니다. 쓰고 계신 브라우저에서는 %(brand)s를 사용할 수 없습니다.", "Uploaded on %(date)s by %(user)s": "%(user)s님이 %(date)s에 업로드함", "Messages in group chats": "그룹 대화 메시지", @@ -551,7 +500,6 @@ "Unable to fetch notification target list": "알림 대상 목록을 가져올 수 없음", "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!": "현재 쓰는 브라우저로는, 응용 프로그램의 보고 느끼는 경험이 완전히 안 맞을수도 있고, 일부 혹은 전체 기능이 제대로 작동하지 않을 수 있습니다. 이 브라우저를 계속 사용하고 싶다면 사용해도 되지만 발생하는 문제는 스스로 해결해야 합니다!", "Checking for an update...": "업데이트를 확인하는 중...", - "There are advanced notifications which are not shown here": "여기에는 보이지 않는 고급 알림이 있습니다", "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s님이 표시 이름을 %(displayName)s(으)로 바꿨습니다.", "%(senderName)s changed the pinned messages for the room.": "%(senderName)s가 방의 고정된 메시지를 바꿨습니다.", "%(severalUsers)schanged their name %(count)s times|other": "%(severalUsers)s이 이름을 %(count)s번 바꿨습니다", @@ -575,25 +523,18 @@ "Showing flair for these communities:": "이 커뮤니티에 재능을 공개 중:", "This room is not showing flair for any communities": "이 방은 모든 커뮤니티에 재능을 공개하지 않음", "The platform you're on": "당신이 사용 중인 플랫폼", - "The version of %(brand)s": "%(brand)s 버전", + "The version of %(brand)s": "%(brand)s의 버전", "Your language of choice": "선택한 언어", "Which officially provided instance you are using, if any": "공식적으로 제공하는 인스턴스를 사용하는 지 여부", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Rich Text Editor의 Richtext mode를 사용하고 있는지 여부", "Your homeserver's URL": "당신의 홈서버 URL", - "Your identity server's URL": "당신의 ID 서버 URL", "e.g. %(exampleValue)s": "예시: %(exampleValue)s", "Every page you use in the app": "앱에서 이용하는 모든 페이지", "e.g. ": "예시: ", - "Your User Agent": "사용자 에이전트", "Your device resolution": "기기 해상도", - "The information being sent to us to help make %(brand)s better includes:": "%(brand)s을 발전시키기 위해 저희에게 보내는 정보는 다음을 포함합니다:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s을 개선하기 위해 당사에 전송되는 정보에는 다음과 같은 것들이 포함됩니다:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "이 페이지에서 방, 사용자, 혹은 그룹 ID와 같은 식별 가능한 정보를 포함하는 부분이 있는 데이터는 서버에 보내지기 전에 제거됩니다.", "Call Failed": "전화 실패", - "Review Devices": "기기 검증하기", - "Call Anyway": "무시하고 걸기", - "Answer Anyway": "무시하고 받기", - "Call": "전화하기", - "Answer": "받기", "Call in Progress": "전화 거는 중", "A call is already in progress!": "이미 전화가 진행 중입니다!", "PM": "오후", @@ -606,7 +547,6 @@ "Which rooms would you like to add to this community?": "어떤 방을 이 커뮤니티에 추가하고 싶으세요?", "Show these rooms to non-members on the community page and room list?": "이 방을 커뮤니티 페이지와 방 목록에 있는 구성원이 아닌 사람들에게 공개할까요?", "Add rooms to the community": "커뮤니티에 방 추가하기", - "Room name or alias": "방 이름 또는 별칭", "Add to community": "커뮤니티에 추가하기", "Failed to invite the following users to %(groupId)s:": "다음 사용자를 %(groupId)s에 초대하지 못했습니다:", "Failed to invite users to community": "사용자를 커뮤니티에 초대하지 못했습니다", @@ -628,8 +568,6 @@ "%(widgetName)s widget modified by %(senderName)s": "%(senderName)s님이 수정한 %(widgetName)s 위젯", "%(widgetName)s widget added by %(senderName)s": "%(senderName)s님이 추가한 %(widgetName)s 위젯", "%(widgetName)s widget removed by %(senderName)s": "%(senderName)s님이 제거한 %(widgetName)s 위젯", - "Message removed by %(userId)s": "%(userId)s님에 의해 감춰진 메시지", - "Message removed": "메시지 감춰짐", "Remove from community": "커뮤니티에서 제거", "Remove this user from community?": "이 사용자를 커뮤니티에서 제거하겠습니까?", "Failed to remove user from community": "사용자를 커뮤니티에서 제거에 실패함", @@ -677,11 +615,8 @@ "Loading...": "로딩 중...", "Unpin Message": "메시지 고정 풀기", "No pinned messages.": "고정된 메시지가 없습니다.", - "Send a message (unencrypted)…": "(암호화 안 된) 메시지를 보내세요…", "Send an encrypted message…": "암호화된 메시지를 보내세요…", "Send an encrypted reply…": "암호화된 메시지를 보내세요…", - "Send a reply (unencrypted)…": "(암호화 안 된) 답장을 보내세요…", - "User Options": "사용자 옵션", "Share Link to User": "사용자에게 링크 공유", "Invite": "초대", "Mention": "언급", @@ -759,7 +694,6 @@ "Failed to remove the room from the summary of %(groupId)s": "%(groupId)s의 요약에서 방을 제거하는데 실패함", "Failed to remove a user from the summary of %(groupId)s": "%(groupId)s의 요약에 사용자를 제거하는데 실패함", "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 서버에서 계정 세부 정보도 제거됩니다. 이 결정은 돌이킬 수 없습니다.", - "Yes, I want to help!": "네, 돕고 싶어요!", "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를 통해 버그를 신고한다면, 디버그 로그가 문제를 해결하는데 도움을 줍니다. 디버그 로그에는 사용자 이름과 방문했던 방이나 그룹의 ID와 별칭, 그리고 다른 사용자의 사용자 이름이 포함됩니다. 대화 내용은 포함되지 않습니다.", "Delete widget": "위젯 삭제", "Minimize apps": "앱 최소화", @@ -777,11 +711,8 @@ "You must specify an event type!": "이벤트 종류를 지정해야 합니다!", "Send Custom Event": "맞춤 이벤트 보내기", "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "응답한 이벤트를 불러오지 못했습니다, 존재하지 않거나 볼 수 있는 권한이 없습니다.", - "Light theme": "밝은 테마", - "Dark theme": "어두운 테마", "A text message has been sent to %(msisdn)s": "%(msisdn)s님에게 문자 메시지를 보냈습니다", "Something went wrong when trying to get your communities.": "커뮤니티를 받는 중 잘못되었습니다.", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "익명의 이용자 데이터를 보내 %(brand)s을 개선하도록 도와주세요. 이 과정에서 쿠키를 사용합니다.", "Allow": "허용", "Visible to everyone": "모두에게 보여짐", "Only visible to community members": "커뮤니티 구성원에게만 보여짐", @@ -876,8 +807,6 @@ "Add users to the community summary": "커뮤니티 요약에 사용자 추가", "Who would you like to add to this summary?": "이 요약에 누구를 추가하겠습니까?", "Link to most recent message": "가장 최근 메시지로 연결", - "Registration Required": "계정 등록 필요", - "You need to register to do this. Would you like to register now?": "계정을 등록해야합니다. 지금 계정을 만드시겠습니까?", "This homeserver has hit its Monthly Active User limit.": "이 홈서버가 월 간 활성 사용자 수 한도를 초과했습니다.", "Please contact your service administrator to continue using the service.": "서비스를 계속 사용하려면 서비스 관리자에게 연락해주세요.", "Unable to connect to Homeserver. Retrying...": "홈서버에 연결할 수 없습니다. 다시 시도하는 중...", @@ -890,8 +819,6 @@ "Only room administrators will see this warning": "방 관리자만이 이 경고를 볼 수 있음", "This room is a continuation of another conversation.": "이 방은 다른 대화방의 연장선입니다.", "Click here to see older messages.": "여길 눌러 오래된 메시지를 보세요.", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "익명의 이용자 데이터를 보내 %(brand)s을 개선하도록 도와주세요. 이 과정에서 쿠키를 사용합니다 (우리의 쿠키 정책을 살펴보세요).", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "이 홈서버는 월 간 활성 사용자 수 한도를 초과했기 때문에 일부 사용자는 로그인할 수 없습니다.", "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", "%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s이 %(count)s번 떠나고 다시 참가했습니다", "In reply to ": "관련 대화 ", @@ -920,7 +847,6 @@ "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "전화가 안정적으로 작동하도록 TURN 서버를 설정하려면 당신의 홈서버 (%(homeserverDomain)s) 관리자에게 물어보세요 .", "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.": "대신, turn.matrix.org에서 공개 서버를 사용할 수 있습니다, 하지만 신뢰를 가질 수 없고 IP 주소를 서버와 공유하게 됩니다. 설정에서 이를 관리할 수도 있습니다.", "Try using turn.matrix.org": "turn.matrix.org를 사용해보세요", - "A conference call could not be started because the integrations server is not available": "통합 서버를 사용할 수 없기 때문에 회의 전화를 시작할 수 없습니다", "Replying With Files": "파일과 함께 답장하기", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "현재는 파일과 함께 답장할 수 없습니다. 답장 없이 파일을 업로드하는 것은 어떤가요?", "The file '%(fileName)s' failed to upload.": "'%(fileName)s' 파일 업로드에 실패했습니다.", @@ -960,11 +886,6 @@ "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s님이 이 방에서 %(groups)s에 대한 재능을 활성화했습니다.", "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s님이 이 방에서 %(groups)s에 대한 재능을 비활성화했습니다.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s님이 이 방에서 %(oldGroups)s에 대한 재능을 비활성화하고 %(newGroups)s에 대한 재능을 활성화했습니다.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s님이 이 방의 주소로 %(addedAddresses)s을(를) 추가했습니다.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s님이 이 방의 주소로 %(addedAddresses)s을(를) 추가했습니다.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s님이 이 방의 주소인 %(removedAddresses)s을(를) 제거했습니다.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s님이 이 방의 주소인 %(removedAddresses)s을(를) 제거했습니다.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s님이 이 방의 주소인 %(removedAddresses)s을(를) 제거하고 %(addedAddresses)s을(를) 추가했습니다.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s님이 이 방의 메인 주소를 %(address)s(으)로 설정했습니다.", "%(senderName)s removed the main address for this room.": "%(senderName)s님이 이 방의 메인 주소를 제거했습니다.", "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "방에 들어오라고 %(senderName)s님이 %(targetDisplayName)s님에게 보낸 초대를 취소했습니다.", @@ -1106,8 +1027,6 @@ "Allow Peer-to-Peer for 1:1 calls": "1:1 전화를 위해 P2P 허용", "Prompt before sending invites to potentially invalid matrix IDs": "잠재적으로 올바르지 않은 Matrix ID로 초대를 보내기 전에 확인", "Show developer tools": "개발 도구 보이기", - "Order rooms in the room list by most important first instead of most recent": "가장 최근에서 가장 중요한 순으로 방 목록에서 방을 정렬", - "Show recently visited rooms above the room list": "최근 방문한 방 순으로 방 목록에 보이기", "Show hidden events in timeline": "타임라인에서 숨겨진 이벤트 보이기", "Low bandwidth mode": "낮은 대역폭 모드", "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 주소가 공유됨)", @@ -1234,7 +1153,6 @@ "Select the roles required to change various parts of the room": "방의 여러 부분을 변경하는 데 필요한 규칙을 선택", "Enable encryption?": "암호화를 켜겠습니까?", "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.": "일단 켜면, 방에 대한 암호화는 끌 수 없습니다. 암호화된 방에서 보낸 메시지는 서버에서 볼 수 없고, 오직 방의 참가자만 볼 수 있습니다. 암호화를 켜면 많은 봇과 브릿지가 올바르게 작동하지 않을 수 있습니다. 암호화에 대해 더 자세히 알아보기.", - "To link to this room, please add an alias.": "이 방에 연결하려면, 별칭을 추가해주세요.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "기록을 읽을 수 있는 사람의 변경 사항은 이 방에서 오직 이후 메시지부터 적용됩니다. 존재하는 기록의 가시성은 변하지 않습니다.", "Encryption": "암호화", "Once enabled, encryption cannot be disabled.": "일단 켜면, 암호화는 끌 수 없습니다.", @@ -1297,10 +1215,6 @@ "Invited by %(sender)s": "%(sender)s님에게 초대받음", "Error updating main address": "기본 주소 업데이트 중 오류", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "방의 기본 주소를 업데이트하는 중 오류가 발생했습니다. 서버가 허용하지 않거나 일시적인 오류 발생일 수 있습니다.", - "Error creating alias": "별칭 만드는 중 오류", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "별칭을 만드는 중 오류가 발생했습니다. 서버가 허용하지 않거나 일시적인 오류 발생일 수 있습니다.", - "Error removing alias": "별칭 삭제 중 오류", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "별칭을 삭제하는 중 오류가 발생했습니다. 더 이상 존재하지 않거나 일시적인 오류 발생일 수 있습니다.", "Main address": "기본 주소", "Error updating flair": "재능 업데이트 중 오류", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "재능을 업데이트하는 중 오류가 발생했습니다. 서버가 허용하지 않거나 일시적인 오류 발생일 수 있습니다.", @@ -1312,8 +1226,6 @@ "Edited at %(date)s. Click to view edits.": "%(date)s에 편집함. 클릭해서 편집 보기.", "edited": "편집됨", "Failed to load group members": "그룹 구성원을 불러오는 데 실패함", - "Please contact your service administrator to get this limit increased.": "한도를 높이려면 서비스 관리자와 연락해주세요.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "이 홈서버는 리소스 한도를 초과했기 때문에 일부 사용자는 로그인할 수 없습니다.", "Maximize apps": "앱 최대화", "Join": "참가", "Yes": "네", @@ -1348,17 +1260,9 @@ "Removing…": "제거 중…", "Clear all data": "모든 데이터 지우기", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "대화 기록을 잃지 않으려면, 로그아웃하기 전에 방 키를 내보내야 합니다. 이 작업을 수행하려면 최신 버전의 %(brand)s으로 가야 합니다", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "이전에 %(host)s에서 %(brand)s의 최신 버전을 사용했습니다. 종단간 암호화로 이 버전을 다시 사용하려면, 로그아웃한 후 다시 로그인하세요. ", "Incompatible Database": "호환하지 않는 데이터베이스", "Continue With Encryption Disabled": "암호화를 끈 채 계속하기", "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에서 메시지 가시성은 이메일과 유사합니다. 메시지를 지우면 보낸 메시지는 신규 또는 등록하지 않은 사용자와 공유되지 않습니다, 하지만 이미 메시지에 접근한 등록한 사용자는 그 사본에 여전히 접근할 수 있습니다.", - "Use Legacy Verification (for older clients)": "옛날 인증 방식 사용 (오래된 클라이언트 용)", - "Verify by comparing a short text string.": "짧은 문장을 비교하는 것으로 인증하기.", - "Begin Verifying": "인증 시작", - "Waiting for partner to accept...": "상대방이 수락하기를 기다리는 중...", - "Nothing appearing? Not all clients support interactive verification yet. .": "아무것도 안 나타나나요? 아직 모든 클라이언트가 상호작용 인증을 지원하지 않습니다. .", - "Waiting for %(userId)s to confirm...": "%(userId)s님이 확인하기를 기다리는 중...", - "Use two-way text verification": "양방향 문자 인증 사용", "Explore Room State": "방 상태 탐색", "View Servers in Room": "방에 있는 서버 보기", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "이 사용자를 신뢰할 수 있도록 인증합니다. 종단간 암호화 메시지를 사용할 때 사용자를 신뢰하면 안심이 듭니다.", @@ -1416,20 +1320,12 @@ "Remember my selection for this widget": "이 위젯에 대해 내 선택 기억하기", "Deny": "거부", "Unable to load backup status": "백업 상태 불러올 수 없음", - "Recovery Key Mismatch": "복구 키가 맞지 않음", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "이 키로 백업을 복호화할 수 없음: 맞는 복구 키를 입력해서 인증해주세요.", - "Incorrect Recovery Passphrase": "맞지 않은 복구 암호", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "이 암호로 백업을 복호화할 수 없음: 맞는 암호를 입력해서 입증해주세요.", "Unable to restore backup": "백업을 복구할 수 없음", "No backup found!": "백업을 찾을 수 없습니다!", - "Backup Restored": "백업 복구됨", "Failed to decrypt %(failedCount)s sessions!": "%(failedCount)s개의 세션 복호화에 실패했습니다!", - "Restored %(sessionCount)s session keys": "%(sessionCount)s개의 세션 키 복구됨", - "Enter Recovery Passphrase": "복구 암호 입력", "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": "복구 암호를 잊어버렸다면 복구 키를 사용하거나 새 복구 옵션을 설정할 수 있음", - "Enter Recovery Key": "복구 키 입력", "This looks like a valid recovery key!": "올바른 복구 키입니다!", "Not a valid recovery key": "올바르지 않은 복구 키", "Access your secure message history and set up secure messaging by entering your recovery key.": "복구 키를 입력해서 보안 메시지 기록에 접근하고 보안 메시지 설정하기.", @@ -1541,34 +1437,18 @@ "You cannot sign in to your account. Please contact your homeserver admin for more information.": "계정에 로그인할 수 없습니다. 자세한 정보는 홈서버 관리자에게 연락하세요.", "You're signed out": "로그아웃됬습니다", "Clear personal data": "개인 정보 지우기", - "Great! This passphrase looks strong enough.": "멋져요! 이 암호는 충분히 강합니다.", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "우리의 서버에 암호화된 키의 사본을 저장합니다. 보안을 유지하기 위해 백업을 암호로 보호하세요.", "For maximum security, this should be different from your account password.": "보안을 최대화하려면, 암호는 계정 비밀번호와 달라야 할 것입니다.", - "Enter a passphrase...": "암호를 입력하세요...", - "Set up with a Recovery Key": "복구 키로 설정", "That matches!": "맞습니다!", "That doesn't match.": "맞지 않습니다.", "Go back to set it again.": "돌아가서 다시 설정하기.", - "Please enter your passphrase a second time to confirm.": "확인하기 위해 비밀번호를 다시 입력해주세요.", - "Repeat your passphrase...": "암호를 다시 입력하세요...", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "안전망처럼, 복구 암호를 잊어버렸다면 복구 키를 사용해 암호화된 메시지 기록을 복구할 수 있습니다.", - "As a safety net, you can use it to restore your encrypted message history.": "안전망처럼, 복구 암호를 사용해 암호화된 메시지 기록을 복구할 수 있습니다.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "복구 키는 안전망과 같습니다 - 복구 암호를 잊어버렸다면 복구 키를 사용해 암호화된 메시지에 접근할 수 있습니다.", - "Your Recovery Key": "당신의 복구 키", - "Copy to clipboard": "클립보드로 복사", "Download": "다운로드", "Print it and store it somewhere safe": "인쇄한 후 안전한 장소에 보관", "Save it on a USB key or backup drive": "USB 키나 백업 드라이브에 저장", "Copy it to your personal cloud storage": "개인 클라우드 저장소에 복사", "Your keys are being backed up (the first backup could take a few minutes).": "키를 백업했습니다 (처음 백업에는 시간이 걸릴 수 있습니다).", "Set up Secure Message Recovery": "보안 메시지 복구 설정", - "Secure your backup with a passphrase": "암호로 백업 보호", - "Confirm your passphrase": "암호 확인", - "Recovery key": "복구 키", - "Keep it safe": "안전하게 유지하세요", "Starting backup...": "백업 시작 중...", "Success!": "성공!", - "Create Key Backup": "키 백업 만들기", "Unable to create key backup": "키 백업을 만들 수 없음", "Retry": "다시 시도", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "보안 메시지 복구를 설정하지 않으면, 로그아웃할 때 보안 메시지 기록을 잃게 됩니다.", @@ -1636,13 +1516,8 @@ "Read Marker lifetime (ms)": "이전 대화 경계선 표시 시간 (ms)", "Read Marker off-screen lifetime (ms)": "이전 대화 경계선 사라지는 시간 (ms)", "Changes the avatar of the current room": "현재 방의 아바타 변경하기", - "Room alias": "방 별칭", "e.g. my-room": "예: my-room", - "Please provide a room alias": "방 별칭을 제공해주세요", - "This alias is available to use": "이 별칭은 사용할 수 있습니다", - "This alias is already in use": "이 별칭은 이미 사용 중입니다", "Please enter a name for the room": "방 이름을 입력해주세요", - "Set a room alias to easily share your room with other people.": "다른 사람들과 방을 쉽게 공유할 수 있도록 방 별칭을 설정하세요.", "This room is private, and can only be joined by invitation.": "이 방은 개인입니다, 오직 초대로만 참가할 수 있습니다.", "Create a public room": "공개 방 만들기", "Create a private room": "개인 방 만들기", @@ -1725,7 +1600,6 @@ "Error adding ignored user/server": "무시한 사용자/서버 추가 중 오류", "Something went wrong. Please try again or view your console for hints.": "무언가 잘못되었습니다. 다시 시도하거나 콘솔을 통해 원인을 알아봐주세요.", "Error subscribing to list": "목록으로 구독하는 중 오류", - "Please verify the room ID or alias and try again.": "방 ID나 별칭을 확인한 후 다시 시도해주세요.", "Error removing ignored user/server": "무시한 사용자/서버를 지우는 중 오류", "Error unsubscribing from list": "목록에서 구독 해제 중 오류", "Please try again or view your console for hints.": "다시 시도하거나 콘솔을 통해 원인을 알아봐주세요.", @@ -1750,7 +1624,6 @@ "Subscribed lists": "구독 목록", "Subscribing to a ban list will cause you to join it!": "차단 목록을 구독하면 차단 목록에 참여하게 됩니다!", "If this isn't what you want, please use a different tool to ignore users.": "이것을 원한 것이 아니라면, 사용자를 무시하는 다른 도구를 사용해주세요.", - "Room ID or alias of ban list": "방 ID 또는 차단 목록의 별칭", "Subscribe": "구독", "Trusted": "신뢰함", "Not trusted": "신뢰하지 않음", @@ -1772,26 +1645,20 @@ "Using this widget may share data with %(widgetDomain)s.": "이 위젯을 사용하면 %(widgetDomain)s와(과) 데이터를 공유합니다.", "Widget added by": "위젯을 추가했습니다", "This widget may use cookies.": "이 위젯은 쿠키를 사용합니다.", - "Enable local event indexing and E2EE search (requires restart)": "로컬 이벤트 인덱싱 및 종단간 암호화 켜기 (다시 시작해야 합니다)", "Decline (%(counter)s)": "거절 (%(counter)s)", "Connecting to integration manager...": "통합 관리자로 연결 중...", "Cannot connect to integration manager": "통합 관리자에 연결할 수 없음", "The integration manager is offline or it cannot reach your homeserver.": "통합 관리자가 오프라인이거나 당신의 홈서버에서 접근할 수 없습니다.", - "The version of %(brand)s": "%(brand)s의 버전", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "터치가 기본 입력 방식인 기기에서 %(brand)s을 사용하는지 여부", "Whether you're using %(brand)s as an installed Progressive Web App": "%(brand)s을 설치형 프로그레시브 웹 앱으로 사용하는지 여부", "Your user agent": "사용자 에이전트", - "The information being sent to us to help make %(brand)s better includes:": "%(brand)s을 개선하기 위해 당사에 전송되는 정보에는 다음과 같은 것들이 포함됩니다:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "이 방에는 알 수 없는 세션들이 있습니다: 검증 없이 진행하면 누군가 당신의 전화를 도청할 수도 있습니다.", "If you cancel now, you won't complete verifying the other user.": "지금 취소하면 다른 사용자 확인이 완료될 수 없습니다.", "If you cancel now, you won't complete verifying your other session.": "지금 취소하면 당신의 다른 세션을 검증할 수 없습니다.", - "If you cancel now, you won't complete your secret storage operation.": "지금 취소하면 보안 저장 작업을 완료할 수 없습니다.", "Cancel entering passphrase?": "암호 입력을 취소하시겠습니까?", "Setting up keys": "키 설정", "Verify this session": "이 세션 검증", "Encryption upgrade available": "암호화 업그레이드 가능", "Set up encryption": "암호화 설정", - "Unverified session": "검증되지 않은 세션", "Error upgrading room": "방 업그레이드 오류", "Double check that your server supports the room version chosen and try again.": "서버가 선택한 방 버전을 지원하는지 확인한 뒤에 다시 시도해주세요.", "Verifies a user, session, and pubkey tuple": "사용자, 세션, 공개키 튜플을 검증합니다", diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json index 0221f07ee1..8afb99abb6 100644 --- a/src/i18n/strings/lt.json +++ b/src/i18n/strings/lt.json @@ -8,11 +8,9 @@ "Which officially provided instance you are using, if any": "Kurią oficialiai teikiamą instanciją naudojate, jei tokių yra", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Ar jūs naudojate Raiškiojo Teksto Redaktoriaus Raiškiojo Teksto režimą ar ne", "Your homeserver's URL": "Jūsų serverio URL", - "Your identity server's URL": "Jūsų tapatybės serverio URL", "Analytics": "Statistika", - "The information being sent to us to help make %(brand)s better includes:": "Informacija, siunčiama mums, kad padėtų tobulinti %(brand)s, apima:", + "The information being sent to us to help make %(brand)s better includes:": "Informacija, siunčiama mums siekiant pagerinti %(brand)s, yra:", "Fetching third party location failed": "Nepavyko gauti trečios šalies vietos", - "A new version of %(brand)s is available.": "Yra prieinama nauja %(brand)s versija.", "I understand the risks and wish to continue": "Suprantu šią riziką ir noriu tęsti", "Send Account Data": "Siųsti paskyros duomenis", "Advanced notification settings": "Išplėstiniai pranešimų nustatymai", @@ -36,8 +34,6 @@ "Send Custom Event": "Siųsti pasirinktinį įvykį", "All notifications are currently disabled for all targets.": "Šiuo metu visi pranešimai visiems objektams yra išjungti.", "Operation failed": "Operacija nepavyko", - "delete the alias.": "ištrinti slapyvardį.", - "To return to your account in future you need to set a password": "Ateityje, norėdami grįžti prie savo paskyros turite nusistatyti slaptažodį", "Forget": "Pamiršti", "World readable": "Visiems skaitomas", "Mute": "Nutildyti", @@ -68,7 +64,6 @@ "No update available.": "Nėra galimų atnaujinimų.", "Noisy": "Triukšmingas", "Collecting app version information": "Renkama programėlės versijos informacija", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Ar ištrinti kambarį %(alias)s ir %(name)s kambario pavadinimą iš katalogo?", "Keywords": "Raktažodžiai", "Unpin Message": "Atsegti žinutę", "Enable notifications for this account": "Įjungti pranešimus šiai paskyrai", @@ -131,7 +126,6 @@ "Reply": "Atsakyti", "Show message in desktop notification": "Rodyti žinutes darbalaukio pranešimuose", "Reject": "Atmesti", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Jūs turbūt juos sukonfigūravote kitoje programėlėje nei %(brand)s. Negalite jų koreguoti %(brand)s programėlėje, bet jie vistiek yra taikomi", "Sorry, your browser is not able to run %(brand)s.": "Atleiskite, jūsų naršyklė negali paleisti %(brand)s.", "Quote": "Cituoti", "Messages in group chats": "Žinutės grupės pokalbiuose", @@ -164,19 +158,13 @@ "Thank you!": "Ačiū!", "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!": "Naudojant šią naršyklę aplikacija gali atrodyti ir reaguoti neteisingai. Kai kurios arba visos funkcijos gali neveikti. Jei vis tiek norite pabandyti gali tęsti, tačiau iškilusios problemos yra jūsų pačių reikalas!", "Checking for an update...": "Tikrinama ar yra atnaujinimų...", - "There are advanced notifications which are not shown here": "Yra išplėstinių pranešimų, kurie čia nėra rodomi", "e.g. %(exampleValue)s": "pvz., %(exampleValue)s", "e.g. ": "pvz., ", "Your device resolution": "Jūsų įrenginio raiška", "Call Failed": "Skambutis nepavyko", - "Call Anyway": "Vis tiek skambinti", - "Answer Anyway": "Vis tiek atsiliepti", - "Call": "Skambinti", - "Answer": "Atsiliepti", "Unable to capture screen": "Nepavyko nufotografuoti ekrano", "You are already in a call.": "Jūs jau dalyvaujate skambutyje.", "VoIP is unsupported": "VoIP yra nepalaikoma", - "Could not connect to the integration server": "Nepavyko prisijungti prie integracijos serverio", "Permission Required": "Reikalingas leidimas", "Upload Failed": "Įkėlimas nepavyko", "Sun": "Sek", @@ -219,7 +207,6 @@ "Unable to enable Notifications": "Nepavyko įjungti pranešimų", "This email address was not found": "Šis el. pašto adresas nebuvo rastas", "Admin": "Administratorius", - "Start a chat": "Pradėti pokalbį", "Failed to invite": "Nepavyko pakviesti", "Failed to invite the following users to the %(roomName)s room:": "Nepavyko pakviesti šių vartotojų į kambarį %(roomName)s:", "You need to be logged in.": "Turite būti prisijungę.", @@ -253,7 +240,6 @@ "%(senderName)s answered the call.": "%(senderName)s atsiliepė į skambutį.", "(unknown failure: %(reason)s)": "(nežinoma klaida: %(reason)s)", "%(senderName)s ended the call.": "%(senderName)s užbaigė skambutį.", - "Send anyway": "Vis tiek siųsti", "Unnamed Room": "Bevardis kambarys", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Rodyti laiko žymes 12 valandų formatu (pvz. 2:30pm)", "Always show message timestamps": "Visada rodyti žinučių laiko žymes", @@ -275,10 +261,7 @@ "Current password": "Dabartinis slaptažodis", "Password": "Slaptažodis", "New Password": "Naujas slaptažodis", - "Device ID": "Įrenginio ID", "Failed to set display name": "Nepavyko nustatyti rodomo vardo", - "Disable Notifications": "Išjungti pranešimus", - "Enable Notifications": "Įjungti pranešimus", "Cannot add any more widgets": "Nepavyksta pridėti daugiau valdiklių", "Add a widget": "Pridėti valdiklį", "Drop File Here": "Vilkite failą čia", @@ -289,21 +272,17 @@ "%(senderName)s uploaded a file": "%(senderName)s įkėlė failą", "Options": "Parinktys", "Key request sent.": "Rakto užklausa išsiųsta.", - "device id: ": "įrenginio id: ", "Failed to mute user": "Nepavyko nutildyti naudotoją", "Are you sure?": "Ar tikrai?", "Ignore": "Ignoruoti", "Invite": "Pakviesti", - "User Options": "Vartotojo parinktys", "Admin Tools": "Administratoriaus įrankiai", "Attachment": "Priedas", "Voice call": "Balso skambutis", "Video call": "Vaizdo skambutis", "Upload file": "Įkelti failą", "Send an encrypted reply…": "Siųsti šifruotą atsakymą…", - "Send a reply (unencrypted)…": "Siųsti atsakymą (nešifruotą)…", "Send an encrypted message…": "Siųsti šifruotą žinutę…", - "Send a message (unencrypted)…": "Siųsti žinutę (nešifruotą)…", "Server error": "Serverio klaida", "Command error": "Komandos klaida", "Loading...": "Įkeliama...", @@ -326,9 +305,7 @@ "Permissions": "Leidimai", "Advanced": "Išplėstiniai", "Add a topic": "Pridėti temą", - "Local addresses for this room:": "Vietiniai šio kambario adresai:", "This room has no local addresses": "Šis kambarys neturi jokių vietinių adresų", - "New address (e.g. #foo:%(localDomain)s)": "Naujas adresas (pvz., #betkoks:%(localDomain)s)", "Invalid community ID": "Neteisingas bendruomenės ID", "'%(groupId)s' is not a valid community ID": "\"%(groupId)s\" nėra teisingas bendruomenės ID", "New community ID (e.g. +foo:%(localDomain)s)": "Naujas bendruomenės ID (pvz., +betkoks:%(localDomain)s)", @@ -341,9 +318,6 @@ "Error decrypting video": "Klaida iššifruojant vaizdo įrašą", "Copied!": "Nukopijuota!", "Failed to copy": "Nepavyko nukopijuoti", - "Message removed by %(userId)s": "Žinutę pašalino %(userId)s", - "Message removed": "Žinutė pašalinta", - "To continue, please enter your password.": "Norėdami tęsti, įveskite savo slaptažodį.", "An email has been sent to %(emailAddress)s": "El. laiškas buvo išsiųstas į %(emailAddress)s", "Please check your email to continue registration.": "Norėdami tęsti registraciją, patikrinkite savo el. paštą.", "A text message has been sent to %(msisdn)s": "Tekstinė žinutė buvo išsiųsta į %(msisdn)s", @@ -362,13 +336,11 @@ "Something went wrong!": "Kažkas nutiko!", "Visibility in Room List": "Matomumas kambarių sąraše", "Visible to everyone": "Matomas visiems", - "Yes, I want to help!": "Taip, aš noriu padėti!", "Unknown Address": "Nežinomas adresas", "Allow": "Leisti", "Delete Widget": "Ištrinti valdiklį", "Delete widget": "Ištrinti valdiklį", "Failed to remove widget": "Nepavyko pašalinti valdiklio", - "Scroll to bottom of page": "Slinkti į puslapio apačią", "%(count)s of your messages have not been sent.|other": "Kai kurios iš jūsų žinučių nebuvo išsiųstos.", "%(count)s of your messages have not been sent.|one": "Jūsų žinutė nebuvo išsiųsta.", "Connectivity to the server has been lost.": "Jungiamumas su šiuo serveriu buvo prarastas.", @@ -380,7 +352,6 @@ "Search failed": "Paieška nepavyko", "Server may be unavailable, overloaded, or search timed out :(": "Gali būti, kad serveris neprieinamas, perkrautas arba pasibaigė paieškai skirtas laikas :(", "No more results": "Daugiau nėra jokių rezultatų", - "Unknown room %(roomId)s": "Nežinomas kambarys %(roomId)s", "Room": "Kambarys", "Failed to reject invite": "Nepavyko atmesti pakvietimo", "Fill screen": "Užpildyti ekraną", @@ -392,8 +363,6 @@ "Uploading %(filename)s and %(count)s others|other": "Įkeliamas %(filename)s ir dar %(count)s failai", "Uploading %(filename)s and %(count)s others|zero": "Įkeliamas %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Įkeliamas %(filename)s ir dar %(count)s failas", - "Light theme": "Šviesi tema", - "Dark theme": "Tamsi tema", "Success": "Pavyko", "Unable to remove contact information": "Nepavyko pašalinti kontaktinės informacijos", "": "", @@ -427,16 +396,7 @@ "Results from DuckDuckGo": "Rezultatai iš DuckDuckGo", "Notify the whole room": "Pranešti visam kambariui", "Users": "Naudotojai", - "unknown device": "nežinomas įrenginys", - "Ed25519 fingerprint": "Ed25519 kontrolinis kodas", - "User ID": "Naudotojo ID", - "Curve25519 identity key": "Curve25519 tapatybės raktas", - "none": "nėra", - "Algorithm": "Algoritmas", - "Decryption error": "Iššifravimo klaida", "Session ID": "Seanso ID", - "End-to-end encryption information": "Ištisinio šifravimo informacija", - "Event information": "Įvykio informacija", "Passphrases must match": "Slaptafrazės privalo sutapti", "Passphrase must not be empty": "Slaptafrazė negali būti tuščia", "Export room keys": "Eksportuoti kambario raktus", @@ -447,14 +407,10 @@ "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Eksportavimo failas bus apsaugotas slaptafraze. Norėdami iššifruoti failą, čia turėtumėte įvesti slaptafrazę.", "File to import": "Failas, kurį importuoti", "Import": "Importuoti", - "Your User Agent": "Jūsų vartotojo agentas", - "Review Devices": "Peržiūrėti įrenginius", "You do not have permission to start a conference call in this room": "Jūs neturite leidimo šiame kambaryje pradėti konferencinį pokalbį", - "Room name or alias": "Kambario pavadinimas ar slapyvardis", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Neatrodo, kad jūsų el. pašto adresas šiame serveryje būtų susietas su Matrix ID.", "Missing room_id in request": "Užklausoje trūksta room_id", "Missing user_id in request": "Užklausoje trūksta user_id", - "Unrecognised room alias:": "Neatpažintas kambario slapyvardis:", "VoIP conference started.": "VoIP konferencija pradėta.", "VoIP conference finished.": "VoIP konferencija užbaigta.", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s pašalino kambario pavadinimą.", @@ -463,7 +419,6 @@ "%(widgetName)s widget removed by %(senderName)s": "%(senderName)s pašalino %(widgetName)s valdiklį", "Failure to create room": "Nepavyko sukurti kambarį", "Server may be unavailable, overloaded, or you hit a bug.": "Serveris gali būti neprieinamas, per daug apkrautas, arba susidūrėte su klaida.", - "Use compact timeline layout": "Naudoti kompaktišką laiko juostos išdėstymą", "Autoplay GIFs and videos": "Automatiškai atkurti GIF ir vaizdo įrašus", "This event could not be displayed": "Nepavyko parodyti šio įvykio", "Kick": "Išmesti", @@ -474,7 +429,6 @@ "Unban this user?": "Atblokuoti šį naudotoją?", "Ban this user?": "Užblokuoti šį naudotoją?", "Failed to ban user": "Nepavyko užblokuoti naudotoją", - "Failed to toggle moderator status": "Nepavyko perjungti moderatoriaus būseną", "Invited": "Pakviestas", "Filter room members": "Filtruoti kambario dalyvius", "Server unavailable, overloaded, or something else went wrong.": "Serveris neprieinamas, perkrautas arba nutiko kažkas kito.", @@ -506,7 +460,6 @@ "Authentication": "Tapatybės nustatymas", "The maximum permitted number of widgets have already been added to this room.": "Į šį kambarį jau yra pridėtas didžiausias leidžiamas valdiklių skaičius.", "Please select the destination room for this message": "Pasirinkite šiai žinutei paskirties kambarį", - "Make Moderator": "Padaryti moderatoriumi", "Hangup": "Padėti ragelį", "No pinned messages.": "Nėra jokių prisegtų žinučių.", "Online for %(duration)s": "Prisijungęs %(duration)s", @@ -530,7 +483,6 @@ "Demote yourself?": "Pažeminti save?", "Demote": "Pažeminti", "Share Link to User": "Dalintis nuoroda į vartotoją", - "Direct chats": "Privatūs pokalbiai", "The conversation continues here.": "Pokalbis tęsiasi čia.", "Jump to message": "Pereiti prie žinutės", "Favourites": "Mėgstami", @@ -538,7 +490,6 @@ "This room is not accessible by remote Matrix servers": "Šis kambarys nėra pasiekiamas nuotoliniams Matrix serveriams", "Who can read history?": "Kas gali skaityti istoriją?", "Only room administrators will see this warning": "Šį įspėjimą matys tik kambario administratoriai", - "Remote addresses for this room:": "Nuotoliniai šio kambario adresai:", "You have enabled URL previews by default.": "Jūs esate įjungę URL nuorodų peržiūras kaip numatytasias.", "You have disabled URL previews by default.": "Jūs esate išjungę URL nuorodų peržiūras kaip numatytasias.", "URL previews are enabled by default for participants in this room.": "URL nuorodų peržiūros yra įjungtos kaip numatytasios šio kambario dalyviams.", @@ -581,7 +532,6 @@ "Incorrect password": "Neteisingas slaptažodis", "To continue, please enter your password:": "Norėdami tęsti, įveskite savo slaptažodį:", "An error has occurred.": "Įvyko klaida.", - "Ignore request": "Nepaisyti užklausos", "Failed to upgrade room": "Nepavyko atnaujinti kambarį", "The room upgrade could not be completed": "Nepavyko užbaigti kambario naujinimo", "Sign out": "Atsijungti", @@ -591,8 +541,6 @@ "Invalid Email Address": "Neteisingas el. pašto adresas", "You cannot place VoIP calls in this browser.": "Negalite inicijuoti VoIP skambučių šioje naršyklėje.", "You cannot place a call with yourself.": "Negalite skambinti patys sau.", - "Registration Required": "Reikalinga registracija", - "You need to register to do this. Would you like to register now?": "Norėdami tai atlikti, turite užsiregistruoti. Ar norėtumėte užsiregistruoti dabar?", "Missing roomId.": "Trūksta kambario ID.", "Leave room": "Išeiti iš kambario", "(could not connect media)": "(nepavyko prijungti medijos)", @@ -615,19 +563,10 @@ "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s pakeitė kambario %(roomName)s pseudoportretą", "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s pašalino kambario pseudoportretą.", "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s pakeitė kambario pseudoportretą į ", - "Removed or unknown message type": "Žinutė pašalinta arba yra nežinomo tipo", "Filter community members": "Filtruoti bendruomenės dalyvius", "Removing a room from the community will also remove it from the community page.": "Pašalinus kambarį iš bendruomenės, taip pat pašalins jį iš bendruomenės puslapio.", "Filter community rooms": "Filtruoti bendruomenės kambarius", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Padėkite patobulinti %(brand)s, siųsdami anoniminius naudojimosi duomenis. Tai panaudos slapuką (žiūrėkite mūsų Slapukų politiką).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Padėkite patobulinti %(brand)s, siųsdami anoniminius naudojimosi duomenis. Tai naudos slapuką.", - "Please contact your service administrator to get this limit increased.": "Norėdami padidinti šį limitą, susisiekite su savo paslaugų administratoriumi.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Šis namų serveris pasiekė savo mėnesinį aktyvių naudotojų limitą, taigi, kai kurie naudotojai negalės prisijungti.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Šis namų serveris viršijo vieno iš savo išteklių limitą, taigi, kai kurie naudotojai negalės prisijungti.", "An error ocurred whilst trying to remove the widget from the room": "Bandant pašalinti valdiklį iš kambario įvyko klaida", - "Blacklist": "Blokuoti", - "Unblacklist": "Atblokuoti", - "Verify...": "Patvirtinti...", "Communities": "Bendruomenės", "Home": "Pradžia", "%(severalUsers)sleft %(count)s times|other": "%(severalUsers)s išėjo %(count)s kartų(-us)", @@ -646,16 +585,10 @@ "Moderator": "Moderatorius", "Ignores a user, hiding their messages from you": "Ignoruoja vartotoją, slepiant nuo jūsų jo žinutes", "Stops ignoring a user, showing their messages going forward": "Sustabdo vartotojo ignoravimą, rodant jums jo tolimesnes žinutes", - "Revoke Moderator": "Panaikinti moderatorių", "Invites": "Pakvietimai", "Historical": "Istoriniai", "Every page you use in the app": "Kiekvienas puslapis, kurį jūs naudojate programoje", "Call Timeout": "Skambučio laikas baigėsi", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s pridėjo %(addedAddresses)s, kaip šio kambario adresus.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s pridėjo %(addedAddresses)s, kaip šio kambario adresą.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s pašalino %(removedAddresses)s, kaip šio kambario adresus.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s pašalino %(removedAddresses)s, kaip šio kambario adresą.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s pridėjo %(addedAddresses)s ir pašalino %(removedAddresses)s, kaip šio kambario adresus.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s nustatė pagrindinį šio kambario adresą į %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s pašalino pagrindinį šio kambario adresą.", "Disinvite": "Atšaukti pakvietimą", @@ -706,7 +639,6 @@ "Preparing to send logs": "Ruošiamasi išsiųsti žurnalus", "Incompatible Database": "Nesuderinama duomenų bazė", "Deactivate Account": "Deaktyvuoti paskyrą", - "I verify that the keys match": "Aš patvirtinu, kad raktai sutampa", "Incompatible local cache": "Nesuderinamas vietinis podėlis", "Updating %(brand)s": "Atnaujinama %(brand)s", "This doesn't appear to be a valid email address": "Tai nepanašu į teisingą el. pašto adresą", @@ -723,7 +655,6 @@ "If you already have a Matrix account you can log in instead.": "Jeigu jau turite Matrix paskyrą, tuomet vietoj to, galite prisijungti.", "Unable to restore backup": "Nepavyko atkurti atsarginės kopijos", "No backup found!": "Nerasta jokios atsarginės kopijos!", - "Backup Restored": "Atsarginė kopija atkurta", "Failed to decrypt %(failedCount)s sessions!": "Nepavyko iššifruoti %(failedCount)s seansų!", "Next": "Toliau", "Private Chat": "Privatus pokalbis", @@ -743,9 +674,6 @@ "Failed to perform homeserver discovery": "Nepavyko atlikti serverio radimo", "Error: Problem communicating with the given homeserver.": "Klaida: Problemos susisiekiant su nurodytu namų serveriu.", "This server does not support authentication with a phone number.": "Šis serveris nepalaiko tapatybės nustatymo telefono numeriu.", - "Great! This passphrase looks strong enough.": "Puiku! Ši slapta frazė atrodo pakankamai stipri.", - "Your Recovery Key": "Jūsų atkūrimo raktas", - "Copy to clipboard": "Kopijuoti į iškarpinę", "Download": "Atsisiųsti", "Retry": "Bandyti dar kartą", "Add Email Address": "Pridėti el. pašto adresą", @@ -764,7 +692,6 @@ "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Paprašykite savo serverio administratoriaus (%(homeserverDomain)s) sukonfiguruoti TURN serverį, kad skambučiai veiktų patikimai.", "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.": "Alternatyviai, jūs galite bandyti naudoti viešą serverį turn.matrix.org, bet tai nebus taip patikima, ir tai atskleis jūsų IP adresą šiam serveriui. Jūs taip pat galite tvarkyti tai Nustatymuose.", "Try using turn.matrix.org": "Bandykite naudoti turn.matrix.org", - "A conference call could not be started because the integrations server is not available": "Konferencinio skambučio nebuvo galima pradėti, nes nėra integracijų serverio", "Call in Progress": "Vykstantis skambutis", "A call is currently being placed!": "Šiuo metu skambinama!", "Replying With Files": "Atsakyti su failais", @@ -799,7 +726,6 @@ "Use an identity server": "Naudoti tapatybės serverį", "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Norėdami pakviesti nurodydami el. paštą, naudokite tapatybės serverį. Tam, kad toliau būtų naudojamas numatytasis tapatybės serveris %(defaultIdentityServerName)s, spauskite tęsti, arba tvarkykite nustatymuose.", "Use an identity server to invite by email. Manage in Settings.": "Norėdami pakviesti nurodydami el. paštą, naudokite tapatybės serverį. Tvarkykite nustatymuose.", - "Joins room with given alias": "Prisijungia prie kambario su nurodytu slapyvardžiu", "Unbans user with given ID": "Atblokuoja vartotoją su nurodytu id", "Ignored user": "Ignoruojamas vartotojas", "Unignored user": "Nebeignoruojamas vartotojas", @@ -906,8 +832,6 @@ "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.": "Jei jūs pateikėte pranešimą apie klaidą per GitHub, derinimo žurnalai (debug logs) gali padėti mums surasti problemą. Derinimo žurnaluose yra programos naudojimo duomenys, įskaitant jūsų vartotojo vardą, ID ar kitus kambarių arba grupių, kuriuose jūs lankėtės, pavadinimus ir kitų vartotojų vardus. Juose nėra žinučių.", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (galia %(powerLevelNumber)s)", "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.": "Derinimo žurnaluose yra programos naudojimo duomenys, įskaitant jūsų vartotojo vardą, ID ar kitus kambarių arba grupių, kuriuose jūs lankėtės, pavadinimus ir kitų vartotojų vardus. Juose nėra žinučių.", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Jei jūs negalite kažkieno surasti, paklauskite jų vartotojo vardo, pasidalinkite savo vartotojo vardu (%(userId)s) arba profilio nuoroda.", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Jei jūs negalite kažkieno surasti, paklauskite jų vartotojo vardo (pvz.: @vartotojas:serveris.lt) arba pasidalinkite šiuo kambariu.", "A username can only contain lower case letters, numbers and '=_-./'": "Vartotojo vardą gali sudaryti tik mažosios raidės, skaičiai ir '=_-./'", "The username field must not be blank.": "Vartotojo vardo laukelis negali būti tuščias.", "Username": "Vartotojo vardas", @@ -1022,7 +946,6 @@ "Back up your keys before signing out to avoid losing them.": "Prieš atsijungdami sukurkite atsarginę savo raktų kopiją, kad išvengtumėte jų praradimo.", "Start using Key Backup": "Pradėti naudoti atsarginę raktų kopiją", "Display Name": "Rodomas Vardas", - "Please verify the room ID or alias and try again.": "Prašome patikrinti kambario ID arba slapyvardį ir bandyti dar kartą.", "Room %(name)s": "Kambarys %(name)s", "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Atnaujinimas išjungs dabartinę kambario instanciją ir sukurs atnaujintą kambarį tuo pačiu pavadinimu.", "Other published addresses:": "Kiti paskelbti adresai:", @@ -1037,14 +960,11 @@ "%(name)s wants to verify": "%(name)s nori patvirtinti", "Your display name": "Jūsų rodomas vardas", "Rotate Left": "Pasukti Kairėn", - "Room alias": "Kambario slapyvardis", "e.g. my-room": "pvz.: mano-kambarys", - "Please provide a room alias": "Įveskite kambario slapyvardį", "Enter a server name": "Įveskite serverio pavadinimą", "Enter the name of a new server you want to explore.": "Įveskite naujo, norimo žvalgyti serverio pavadinimą.", "Server name": "Serverio pavadinimas", "Please enter a name for the room": "Įveskite kambario pavadinimą", - "Set a room alias to easily share your room with other people.": "Nustatykite kambario slapyvardį, kad galėtumėte nesunkiai pasidalinti juo su kitais.", "This room is private, and can only be joined by invitation.": "Šis kambarys yra privatus, prie jo prisijungti galima tik su pakvietimu.", "Create a private room": "Sukurti privatų kambarį", "Name": "Pavadinimas", @@ -1057,7 +977,6 @@ "I don't want my encrypted messages": "Man nereikalingos užšifruotos žinutės", "You'll lose access to your encrypted messages": "Jūs prarasite prieigą prie savo užšifruotų žinučių", "New session": "Naujas seansas", - "Enter secret storage passphrase": "Įveskite slaptos saugyklos slaptafrazę", "Enter recovery passphrase": "Įveskite atgavimo slaptafrazę", "Warning: you should only set up key backup from a trusted computer.": "Įspėjimas: atsarginę raktų kopiją sukurkite tik iš patikimo kompiuterio.", "Warning: You should only set up key backup from a trusted computer.": "Įspėjimas: Atsarginę raktų kopiją sukurkite tik iš patikimo kompiuterio.", @@ -1066,14 +985,7 @@ "Add room": "Sukurti kambarį", "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Slaptažodžio keitimas iš naujo nustatys visų jūsų seansų šifravimo raktus, todėl užšifruota pokalbių istorija taps neperskaitoma. Sukurkite atsarginę raktų kopiją arba eksportuokite savo kambarių raktus iš kito seanso prieš iš naujo nustatydami slaptažodį.", "Set a display name:": "Nustatyti rodomą vardą:", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Apsaugokite savo šifravimo raktus slaptafraze. Maksimaliam saugumui užtikrinti ji turi skirtis nuo jūsų paskyros slaptažodžio:", - "Enter a passphrase": "Įveskite slaptafrazę", - "Enter your passphrase a second time to confirm it.": "Įveskite slaptafrazę antrą kartą, kad ją patvirtintumėte.", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Mes saugosime užšifruotą jūsų raktų kopiją mūsų serveryje. Apsaugokite savo atsarginę kopiją slaptafraze, kad ji būtų saugi.", "For maximum security, this should be different from your account password.": "Maksimaliam saugumui užtikrinti ji turi skirtis nuo jūsų paskyros slaptažodžio.", - "Enter a passphrase...": "Įveskite slaptafrazę...", - "Please enter your passphrase a second time to confirm.": "Įveskite slaptafrazę antrą kartą, kad ją patvirtintumėte.", - "Secure your backup with a passphrase": "Apsaugokite savo atsarginę kopiją slaptafraze", "Set up encryption": "Nustatyti šifravimą", "COPY": "Kopijuoti", "Enter recovery key": "Įveskite atgavimo raktą", @@ -1083,9 +995,7 @@ "Signing In...": "Prijungiama...", "If you've joined lots of rooms, this might take a while": "Jei esate prisijungę prie daug kambarių, tai gali užtrukti", "Without completing security on this session, it won’t have access to encrypted messages.": "Neužbaigus saugumo šiame seanse, jis neturės prieigos prie šifruotų žinučių.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Nustatykite atgavimo slaptafrazę, kad apsaugotumėte šifruotą informaciją ir atgautumėte ją jei atsijungsite. Ji turi skirtis nuo jūsų paskyros slaptažodžio:", "Enter a recovery passphrase": "Įveskite atgavimo slaptafrazę", - "Back up encrypted message keys": "Padaryti atsargines šifruotų žinučių raktų kopijas", "Set up with a recovery key": "Nustatyti su atgavimo raktu", "Enter your recovery passphrase a second time to confirm it.": "Įveskite atgavimo slaptafrazę antrą kartą, kad ją patvirtintumėte.", "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Jūsų atgavimo raktas yra atsarginė saugumo priemonė - jūs galite jį naudoti prieigos prie jūsų šifruotų žinučių atkūrimui, jei pamiršite savo atgavimo slaptafrazę.", @@ -1127,16 +1037,12 @@ "Homeserver URL": "Serverio URL", "Homeserver URL does not appear to be a valid Matrix homeserver": "Serverio adresas neatrodo esantis tinkamas Matrix serveris", "This homeserver does not support login using email address.": "Šis serveris nepalaiko prisijungimo naudojant el. pašto adresą.", - "Review Sessions": "Peržiūrėti seansus", "Setting up keys": "Raktų nustatymas", "Review where you’re logged in": "Peržiūrėkite kur esate prisijungę", "Verify all your sessions to ensure your account & messages are safe": "Patvirtinkite visus savo seansus, kad užtikrintumėte savo paskyros ir žinučių saugumą", "Review": "Peržiūrėti", "Message deleted": "Žinutė ištrinta", "Message deleted by %(name)s": "Žinutė, ištrinta %(name)s", - "Warning: You should only do this on a trusted computer.": "Įspėjimas: Tai atlikite tik saugiame kompiuteryje.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Pasiekite savo saugių žinučių istoriją ir kryžminio pasirašymo tapatybę, naudojamą kitų seansų patvirtinimui, įvesdami savo atgavimo slaptafrazę.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Jei pamiršote savo atgavimo slaptafrazę jūs galite naudoti savo atgavimo raktą arba nustatyti naujus atgavimo nustatymus.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Jei pamiršote savo atgavimo slaptafrazę jūs galite naudoti savo atgavimo raktą arba nustatyti naujas atgavimo parinktis", "Confirm your identity by entering your account password below.": "Patvirtinkite savo tapatybę žemiau įvesdami savo paskyros slaptažodį.", "Use an email address to recover your account": "Naudokite el. pašto adresą, kad prireikus galėtumėte atgauti paskyrą", @@ -1151,9 +1057,6 @@ "Print it and store it somewhere safe": "Atsispausdinti jį ir laikyti saugioje vietoje", "Save it on a USB key or backup drive": "Išsaugoti jį USB rakte arba atsarginių kopijų diske", "Copy it to your personal cloud storage": "Nukopijuoti jį į savo asmeninę debesų saugyklą", - "You can now verify your other devices, and other users to keep your chats safe.": "Jūs dabar galite patvirtinti kitus savo įrenginius ir kitus vartotojus, kad jūsų pokalbiai būtų saugūs.", - "Confirm recovery passphrase": "Patvirtinkite atgavimo slaptafrazę", - "You're done!": "Atlikta!", "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.": "Pakeitus slaptažodį šiuo metu, visuose seansuose bus iš naujo nustatyti visapusio šifravimo raktai, tad šifruotų pokalbių istorija taps neperskaitoma, nebent jūs eksportuosite savo kambarių raktus ir po to importuosite juos atgal. Ateityje ši funkcija bus pataisyta.", "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Jūsų slaptažodis buvo sėkmingai pakeistas. Jūs kituose seansuose negausite pranešimų, kol iš naujo prie jų neprisijungsite", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "El. laiškas buvo išsiųstas į %(emailAddress)s. Kai paspausite jame esančią nuorodą, tada spauskite žemiau.", @@ -1200,7 +1103,6 @@ "Deactivate user?": "Deaktyvuoti vartotoją?", "Deactivate user": "Deaktyvuoti vartotoją", "Failed to deactivate user": "Nepavyko deaktyvuoti vartotojo", - "Sessions": "Seansai", "Try again later, or ask a room admin to check if you have access.": "Pabandykite vėliau arba paprašykite kambario administratoriaus patikrinti, ar turite prieigą.", "%(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.": "Bandant patekti į kambarį buvo gauta klaida: %(errcode)s. Jei manote, kad matote šį pranešimą per klaidą, prašome apie ją pranešti.", "Error updating flair": "Klaida atnaujinant ženkliuką", @@ -1234,9 +1136,6 @@ "You can’t disable this later. Bridges & most bots won’t work yet.": "Jūs negalėsite vėliau to išjungti. Tiltai ir dauguma bot'ų dar nėra palaikomi.", "Are you sure you want to deactivate your account? This is irreversible.": "Ar tikrai norite deaktyvuoti savo paskyrą? Tai yra negrįžtama.", "Verify session": "Patvirtinti seansą", - "Verify by comparing a short text string.": "Patvirtinkite palygindami trumpą teksto eilutę.", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Norėdami patvirtinti, kad šis seansas yra patikimas, susisiekite su jo savininku kokiu nors kitu būdu (pvz.: asmeniškai arba telefono skambučiu) ir paklauskite ar jų Vartotojo Nustatymuose matomas šio seanso raktas sutampa su raktu esančiu žemiau:", - "Start verification": "Pradėti patvirtinimą", "Are you sure you want to sign out?": "Ar tikrai norite atsijungti?", "Use this session to verify your new one, granting it access to encrypted messages:": "Panaudoti šį seansą naujo patvirtinimui, suteikant jam prieigą prie šifruotų žinučių:", "If you didn’t sign in to this session, your account may be compromised.": "Jei jūs nesijungėte prie šios sesijos, jūsų paskyra gali būti sukompromituota.", @@ -1247,7 +1146,6 @@ "Report Content to Your Homeserver Administrator": "Pranešti apie turinį serverio administratoriui", "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Pranešant apie šią netinkamą žinutę, serverio administratoriui bus nusiųstas unikalus 'įvykio ID'. Jei žinutės šiame kambaryje yra šifruotos, serverio administratorius negalės perskaityti žinutės teksto ar peržiūrėti failų arba paveikslėlių.", "Send report": "Siųsti pranešimą", - "Unknown sessions": "Nežinomi seansai", "Verify other session": "Patvirtinti kitą seansą", "Are you sure you want to reject the invitation?": "Ar tikrai norite atmesti pakvietimą?", "Share Permalink": "Dalintis nuoroda", @@ -1260,7 +1158,6 @@ "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Identifikuokite save patvirtindami šį prisijungimą viename iš kitų jūsų seansų ir suteikdami jam prieigą prie šifruotų žinučių.", "This requires the latest %(brand)s on your other devices:": "Tam reikia naujausios %(brand)s versijos kituose jūsų įrenginiuose:", "or another cross-signing capable Matrix client": "arba kito kryžminį pasirašymą palaikančio Matrix kliento", - "Use Recovery Passphrase or Key": "Naudoti atgavimo slaptafrazę arba raktą", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Atnaujinkite šį seansą, kad jam būtų leista patvirtinti kitus seansus, suteikiant jiems prieigą prie šifruotų žinučių ir juos pažymint kaip patikimus kitiems vartotojams.", "Use Single Sign On to continue": "Norėdami tęsti naudokite Vieno Prisijungimo sistemą", "Confirm adding this email address by using Single Sign On to prove your identity.": "Patvirtinkite šio el. pašto adreso pridėjimą naudodami Vieno Prisijungimo sistemą, patvirtinančią jūsų tapatybę.", @@ -1269,7 +1166,6 @@ "Confirm adding this phone number by using Single Sign On to prove your identity.": "Patvirtinkite šio telefono numerio pridėjimą naudodami Vieno Prisijungimo sistemą, patvirtinančią jūsų tapatybę.", "Confirm adding phone number": "Patvirtinkite telefono numerio pridėjimą", "Click the button below to confirm adding this phone number.": "Paspauskite žemiau esantį mygtuką, kad patvirtintumėte šio numerio pridėjimą.", - "The version of %(brand)s": "%(brand)s versija", "Match system theme": "Suderinti su sistemos tema", "Identity Server URL must be HTTPS": "Tapatybės serverio URL privalo būti HTTPS", "Not a valid Identity Server (status code %(code)s)": "Netinkamas tapatybės serveris (statuso kodas %(code)s)", @@ -1319,7 +1215,6 @@ "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Ar naudojate %(brand)s įrenginyje, kuriame pagrindinis įvesties mechanizmas yra lietimas", "Session already verified!": "Seansas jau patvirtintas!", "WARNING: Session already verified, but keys do NOT MATCH!": "ĮSPĖJIMAS: Seansas jau patvirtintas, bet raktai NESUTAMPA!", - "Enable cross-signing to verify per-user instead of per-session": "Įjunkite kryžminį pasirašymą, kad patvirtintumėte vartotoją, o ne seansą", "Enable Emoji suggestions while typing": "Įjungti jaustukų pasiūlymus rašant", "Show a reminder to enable Secure Message Recovery in encrypted rooms": "Rodyti priminimą įjungti saugių žinučių atgavimą šifruotuose kambariuose", "Enable automatic language detection for syntax highlighting": "Įjungti automatinį kalbos aptikimą sintaksės paryškinimui", @@ -1422,7 +1317,6 @@ "Backup has a valid signature from unverified session ": "Atsarginė kopija turi galiojantį nepatvirtinto seanso parašą", "Backup has an invalid signature from verified session ": "Atsarginė kopija turi negaliojantį patvirtinto seanso parašą", "Backup has an invalid signature from unverified session ": "Atsarginė kopija turi negaliojantį nepatvirtinto seanso parašą", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Atsarginė rakto kopija saugoma slaptoje saugykloje, bet ši funkcija nėra įjungta šiame seanse. Įjunkite kryžminį pasirašymą Laboratorijose, kad galėtumėte keisti atsarginės rakto kopijos būseną.", "Enable desktop notifications for this session": "Įjungti darbalaukio pranešimus šiam seansui", "Enable audible notifications for this session": "Įjungti garsinius pranešimus šiam seansui", "wait and try again later": "palaukite ir bandykite vėliau dar kartą", @@ -1454,18 +1348,14 @@ "Destroy cross-signing keys?": "Sunaikinti kryžminio pasirašymo raktus?", "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Kryžminio pasirašymo raktų ištrinimas yra neatšaukiamas. Visi, kurie buvo jais patvirtinti, matys saugumo įspėjimus. Jūs greičiausiai nenorite to daryti, nebent praradote visus įrenginius, iš kurių galite patvirtinti kryžminiu pasirašymu.", "Clear cross-signing keys": "Valyti kryžminio pasirašymo raktus", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Tam, kad patvirtintumėte šio seanso patikimumą, patikrinkite ar raktas, kurį matote Vartotojo Nustatymuose tame įrenginyje, sutampa su raktu esančiu žemiau:", "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.": "Patvirtinkite šį įrenginį, kad pažymėtumėte jį kaip patikimą. Pasitikėjimas šiuo įrenginiu suteikia jums ir kitiems vartotojams papildomos ramybės, kai naudojate visapusiškai užšifruotas žinutes.", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Šio įrenginio patvirtinimas pažymės jį kaip patikimą ir vartotojai, kurie patvirtino su jumis, pasitikės šiuo įrenginiu.", "a new cross-signing key signature": "naujas kryžminio pasirašymo rakto parašas", "a device cross-signing signature": "įrenginio kryžminio pasirašymo parašas", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Pasiekite savo saugių žinučių istoriją ir kryžminio pasirašymo tapatybę, naudojamą kitų seansų patvirtinimui, įvesdami savo atgavimo raktą.", "Session verified": "Seansas patvirtintas", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Neįmanoma prisijungti prie serverio per HTTP, kai naršyklės juostoje yra HTTPS URL. Naudokite HTTPS arba įjunkite nesaugias rašmenas.", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Jūsų naujas seansas buvo patvirtintas. Jis turi prieigą prie jūsų šifruotų žinučių ir kiti vartotojai matys jį kaip patikimą.", "Your new session is now verified. Other users will see it as trusted.": "Jūsų naujas seansas dabar yra patvirtintas. Kiti vartotojai matys jį kaip patikimą.", - "NOT verified": "Nepatvirtinta", - "verified": "patvirtinta", "If you don't want to set this up now, you can later in Settings.": "Jei jūs dabar nenorite to nustatyti, galite padaryti tai vėliau Nustatymuose.", "Done": "Atlikta", "No media permissions": "Nėra medijos leidimų", @@ -1476,7 +1366,6 @@ "Yes": "Taip", "Interactively verify by Emoji": "Patvirtinti interaktyviai, naudojant jaustukus", "The message you are trying to send is too large.": "Žinutė, kurią jūs bandote siųsti, yra per didelė.", - "Use the improved room list (in development - refresh to apply changes)": "Naudoti patobulintą kambarių sąrašą (tobulinama - atnaujinkite, kad pritaikytumėte pakeitimus)", "Show a placeholder for removed messages": "Rodyti pašalintų žinučių žymeklį", "Show join/leave messages (invites/kicks/bans unaffected)": "Rodyti prisijungimo/išėjimo žinutes (pakvietimai/išmetimai/draudimai nepaveikti)", "Show avatar changes": "Rodyti pseudoportretų pakeitimus", @@ -1498,7 +1387,6 @@ "Verify this user by confirming the following emoji appear on their screen.": "Patvirtinkite šį vartotoją, įsitikindami, kad šie jaustukai rodomi jo ekrane.", "⚠ These settings are meant for advanced users.": "⚠ Šie nustatymai yra skirti pažengusiems vartotojams.", "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.": "Jūsų asmeniniame draudimų sąraše yra visi vartotojai/serveriai, iš kurių jūs asmeniškai nenorite matyti pranešimų. Po pirmojo jūsų vartotojo/serverio ignoravimo, jūsų kambarių sąraše pasirodys naujas kambarys pavadinimu 'Mano Draudimų Sąrašas' - likite šiame kambaryje, kad draudimų sąrašas veiktų.", - "Room ID or alias of ban list": "Kambario ID arba draudimų sąrašo slapyvardis", "Room list": "Kambarių sąrašas", "Composer": "Rašymas", "Autocomplete delay (ms)": "Automatinio užbaigimo vėlinimas (ms)", @@ -1542,10 +1430,8 @@ "Unable to reject invite": "Nepavyko atmesti pakvietimo", "Whether you're using %(brand)s as an installed Progressive Web App": "Ar naudojate %(brand)s kaip įdiegtą progresyviąją žiniatinklio programą", "Your user agent": "Jūsų vartotojo agentas", - "The information being sent to us to help make %(brand)s better includes:": "Informacija, siunčiama mums siekiant pagerinti %(brand)s, yra:", "Invite only": "Tik pakviestiems", "You can only join it with a working invite.": "Jūs galite prisijungti tik su veikiančiu pakvietimu.", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Šiame kambaryje yra nežinomų seansų: jei jūs tęsite jų nepatvirtinę, bus galimybė kažkam slapta pasiklausyti jūsų skambučio.", "If you cancel now, you won't complete your operation.": "Jei atšauksite dabar, jūs neužbaigsite savo operacijos.", "Cancel entering passphrase?": "Atšaukti slaptafrazės įvedimą?", "Room name or address": "Kambario pavadinimas arba adresas", @@ -1571,8 +1457,6 @@ "You sent a verification request": "Jūs išsiuntėte patvirtinimo užklausą", "Widgets do not use message encryption.": "Valdikliai nenaudoja žinučių šifravimo.", "Continue With Encryption Disabled": "Tęsti išjungus šifravimą", - "Waiting for partner to accept...": "Laukiama kol partneris sutiks...", - "Waiting for %(userId)s to confirm...": "Laukiama kol %(userId)s patvirtins...", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Patvirtinkite šį vartotoją, kad pažymėtumėte jį kaip patikimą. Pažymint vartotojus kaip patikimus suteikia papildomos ramybės naudojant visapusiškai užšifruotas žinutes.", "Waiting for partner to confirm...": "Laukiama kol partneris patvirtins...", "Start a conversation with someone using their name, username (like ) or email address.": "Pradėkite pokalbį su kuo nors naudodami jų vardą, vartotojo vardą (kaip ) arba el. pašto adresą.", @@ -1623,7 +1507,6 @@ "Show developer tools": "Rodyti vystytojo įrankius", "Low bandwidth mode": "Žemo duomenų pralaidumo režimas", "Send read receipts for messages (requires compatible homeserver to disable)": "Siųsti žinučių perskaitymo kvitus (norint išjungti reikalingas suderinamas serveris)", - "Keep recovery passphrase in memory for this session": "Šiam seansui atgavimo slaptafrazę laikyti atmintyje", "How fast should messages be downloaded.": "Kaip greitai žinutės turi būti parsiųstos.", "Manually verify all remote sessions": "Rankiniu būdu patvirtinti visus nuotolinius seansus", "well formed": "gerai suformuotas", @@ -1639,7 +1522,6 @@ "in account data": "paskyros duomenyse", "Homeserver feature support:": "Serverio funkcijų palaikymas:", "exists": "yra", - "%(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 negali saugiai podėlyje talpinti užšifruotų žinučių, kol veikia interneto naršyklėje. Naudokite %(brand)s Desktop, kad užšifruotos žinutės būtų rodomos paieškos rezultatuose.", "This session is backing up your keys. ": "Šis seansas kuria atsargines jūsų raktų kopijas. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Šis seansas nekuria atsarginių raktų kopijų, bet jūs jau turite atsarginę kopiją iš kurios galite atkurti ir pridėti.", "All keys backed up": "Atsarginė kopija sukurta visiems raktams", @@ -1653,7 +1535,6 @@ "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Šio seanso duomenų išvalymas yra negrįžtamas. Šifruotos žinutės bus prarastos, nebent buvo sukurta jų raktų atsarginė kopija.", "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Trūksta kai kurių seanso duomenų, įskaitant šifruotų žinučių raktus. Atsijunkite ir prisijunkite, kad tai išspręstumėte, atkurdami raktus iš atsarginės kopijos.", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Nepavyko pasiekti slaptos saugyklos. Patikrinkite, ar įvedėte teisingą atgavimo slaptafrazę.", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Nepavyko pasiekti slaptos saugyklos. Patikrinkite, ar įvedėte teisingą atgavimo raktą.", "Restoring keys from backup": "Raktų atkūrimas iš atsarginės kopijos", "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "Atsarginės kopijos nepavyko iššifruoti naudojant šį atgavimo raktą: patikrinkite, ar įvedėte teisingą atgavimo raktą.", "Unable to query secret storage status": "Slaptos saugyklos būsenos užklausa neįmanoma", @@ -1706,7 +1587,6 @@ "Integration Manager": "Integracijų tvarkytuvas", "This looks like a valid recovery key!": "Tai panašu į galiojantį atgavimo raktą!", "Not a valid recovery key": "Negaliojantis atgavimo raktas", - "If you've forgotten your recovery key you can .": "Jei pamiršote savo atgavimo raktą, galite .", "Recovery key mismatch": "Atgavimo rakto neatitikimas", "Incorrect recovery passphrase": "Neteisinga atgavimo slaptafrazė", "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Nepavyko iššifruoti atsarginės kopijos naudojant šią atgavimo slaptafrazę: patikrinkite, ar įvedėte teisingą atgavimo slaptafrazę.", diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index 27f07a46f5..943dab5b11 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -17,10 +17,8 @@ "Microphone": "Mikrofons", "Camera": "Kamera", "Advanced": "Papildus", - "Algorithm": "Algoritms", "Always show message timestamps": "Vienmēr rādīt ziņojumu laika zīmogu", "Authentication": "Autentifikācija", - "Alias (optional)": "Aizstājējvārds (neobligāts)", "%(items)s and %(lastItem)s": "%(items)s un %(lastItem)s", "A new password must be entered.": "Nepieciešams ievadīt jauno paroli.", "%(senderName)s answered the call.": "%(senderName)s atbildēja zvanam.", @@ -37,7 +35,6 @@ "Ban": "Nobanot/liegt pieeju", "Banned users": "Banotie/bloķētie lietotāji (kuriem liegta pieeja)", "Bans user with given id": "Bloķē (liedz pieeju) lietotāju pēc uzdotā ID (nobano)", - "Blacklisted": "Melnajā sarakstā iekļautie", "Call Timeout": "Savienojuma gaidīšanas noilgums", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Neizdodas savienoties ar bāzes serveri. Pārbaudi tīkla savienojumu un pārliecinies, ka bāzes servera SSL sertifikāts ir uzticams, kā arī pārlūkā instalētie paplašinājumi nebloķē pieprasījumus.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Neizdodas savienoties ar bāzes serveri izmantojot HTTP protokolu, kad Tava pārlūka adreses laukā norādīts HTTPS protokols. Tā vietā izmanto HTTPS vai iespējo nedrošos skriptus.", @@ -48,7 +45,6 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s dzēsa istabas nosaukumu.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s nomainīja tēmas nosaukumu uz \"%(topic)s\".", "Changes your display nickname": "Nomaina Tavu publisko segvārdu (niku)", - "Claimed Ed25519 fingerprint key": "Ed25519 pieprasītā nospieduma (fingerprint) atslēga", "Click here to fix": "Klikšķini šeit, lai salabotu", "Click to mute audio": "Klikšķini, lai audio skaņu izslēgtu", "Click to mute video": "Klikšķini, lai video skaņu izslēgtu", @@ -60,40 +56,29 @@ "Commands": "Komandas", "Confirm password": "Apstiprini paroli", "Continue": "Turpināt", - "Could not connect to the integration server": "Neizdevās savienoties ar Integrācijas serveri", "Create Room": "Izveidot istabu", "Cryptography": "Kriptogrāfija", "Current password": "Pašreizējā parole", - "Curve25519 identity key": "Curve25519 identifikācijas atslēga", "Custom": "Pielāgots", "Custom level": "Īpašais līmenis", "/ddg is not a command": "/ddg nav komanda", "Deactivate Account": "Deaktivēt kontu", "Decline": "Noraidīt", "Decrypt %(text)s": "Atšifrēt %(text)s", - "Decryption error": "Atšifrēšanas kļūda", "Deops user with given id": "Atceļ operatora statusu lietotājam ar norādīto Id", "Default": "Noklusējuma", - "Device ID": "Ierīces Id", - "device id: ": "ierīces id: ", - "Direct chats": "Tiešie čati", - "Disable Notifications": "Izslēgt paziņojumus", "Disinvite": "Atsaukt", "Displays action": "Parāda darbību", "Download %(text)s": "Lejupielādēt tekstu: %(text)s", "Drop File Here": "Ievelc failu šeit", - "Ed25519 fingerprint": "Ed25519 nospiedums (fingerprint), zīmju virkne", "Email": "Epasts", "Email address": "Epasta adrese", "Emoji": "Emocīši (emoji)", - "Enable Notifications": "Ieslēgt paziņojumus", "%(senderName)s ended the call.": "%(senderName)s beidza zvanu.", - "End-to-end encryption information": "\"End-to-End\" (ierīce-ierīce) šifrēšanas informācija", "Enter passphrase": "Ievadi paroles frāzi", "Error": "Kļūda", "Error decrypting attachment": "Kļūda atšifrējot pielikumu", "Error: Problem communicating with the given homeserver.": "Kļūda: Saziņas problēma ar norādīto bāzes serveri.", - "Event information": "Notikuma informācija", "Existing Call": "Pašreizējā saruna (zvans)", "Export": "Eksportēt", "Export E2E room keys": "Eksportēt E2E istabas atslēgas", @@ -114,7 +99,6 @@ "Failed to send email": "Neizdevās nosūtīt epastu", "Failed to send request.": "Neizdevās nosūtīt pieprasījumu.", "Failed to set display name": "Neizdevās iestatīt redzamo vārdu", - "Failed to toggle moderator status": "Neizdevās nomainīt moderatora statusu", "Failed to unban": "Neizdevās atbanot/atbloķēt (atcelt pieejas liegumu)", "Failed to upload profile picture!": "Neizdevās augšuplādēt profila attēlu!", "Failed to verify email address: make sure you clicked the link in the email": "Neizdevās apstiprināt epasta adresi. Pārbaudi, vai Tu esi noklikšķinājis/usi saiti epasta ziņā", @@ -150,7 +134,6 @@ "Join as voice or video.": "Pievienoties kā AUDIO vai VIDEO.", "Join Room": "Pievienoties istabai", "%(targetName)s joined the room.": "%(targetName)s pievienojās istabai.", - "Joins room with given alias": "Pievienojas istabai ar minēto aliasi (pseidonīmu)", "Jump to first unread message.": "Pāriet uz pirmo neizlasīto ziņu.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s iespēra (kick) %(targetName)s.", "Kick": "Izspert/padzīt no istabas (kick)", @@ -159,7 +142,6 @@ "Last seen": "Pēdējo reizi redzēts/a", "Leave room": "Doties prom no istabas", "%(targetName)s left the room.": "%(targetName)s devās prom no istabas.", - "Local addresses for this room:": "Šīs istabas lokālās adreses:", "Logout": "Izrakstīties", "Low priority": "Zemas prioritātes", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s padarīja istabas ziņu turpmāko vēsturi redzamu visiem istabas biedriem no brīža, kad tie tika uzaicināti.", @@ -173,15 +155,12 @@ "Moderator": "Moderators", "Mute": "Noklusināt (izslēgt skaņu)", "Name": "Vārds", - "New address (e.g. #foo:%(localDomain)s)": "Jaunā adrese (piemēram #kautkas:%(localDomain)s)", "New passwords don't match": "Jaunās paroles nesakrīt", "New passwords must match each other.": "Jaunajām parolēm ir jāsakrīt vienai ar otru.", - "none": "neviens", "not specified": "nav noteikts", "Notifications": "Paziņojumi", "(not supported by this browser)": "(netiek atbalstīts šajā pārlūkā)", "": "", - "NOT verified": "NAV verificēts", "No display name": "Nav publiski redzamā vārda", "No more results": "Nav tālāko rezultātu", "No results": "Nav rezultātu", @@ -200,11 +179,9 @@ "Profile": "Profils", "Public Chat": "Publiskais čats", "Reason": "Iemesls", - "Revoke Moderator": "Atcelt moderatoru", "Register": "Reģistrēties", "%(targetName)s rejected the invitation.": "%(targetName)s noraidīja uzaicinājumu.", "Reject invitation": "Noraidīt uzaicinājumu", - "Remote addresses for this room:": "Attālinātā adrese šai istabai:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s dzēsa attēlojamo/redzamo vārdu (%(oldDisplayName)s).", "%(senderName)s removed their profile picture.": "%(senderName)s dzēsa profila attēlu.", "Remove": "Dzēst", @@ -226,7 +203,6 @@ "%(senderName)s set a profile picture.": "%(senderName)s uzstādīja profila attēlu.", "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s nomainīja attēlojamo/redzamo vārdu uz: %(displayName)s.", "%(senderName)s unbanned %(targetName)s.": "%(senderName)s atcēla pieejas ierobežojumu (atbanoja) %(targetName)s.", - "Unknown room %(roomId)s": "Nezināma istaba %(roomId)s", "Uploading %(filename)s and %(count)s others|zero": "Tiek augšuplādēts %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Tiek augšuplādēts %(filename)s un %(count)s citi", "Uploading %(filename)s and %(count)s others|other": "Tiek augšuplādēts %(filename)s un %(count)s citi", @@ -249,11 +225,9 @@ "Room Colour": "Istabas krāsa", "Rooms": "Istabas", "Save": "Saglabāt", - "Scroll to bottom of page": "Aizritināt uz lapas apakšu", "Search": "Meklēt", "Search failed": "Meklēšana neizdevās", "Searches DuckDuckGo for results": "Meklēšanai izmanto DuckDuckGo", - "Send anyway": "Nosūtīt jebkurā gadījumā", "Send Reset Email": "Nosūtīt atiestatīšanas epastu", "Server error": "Servera kļūda", "Server may be unavailable, overloaded, or search timed out :(": "Serveris izskatās nesasniedzams, ir pārslogots, vai arī meklēšana beigusies ar savienojuma noildzi :(", @@ -267,7 +241,6 @@ "Sign out": "Izrakstīties", "%(count)s of your messages have not been sent.|other": "Dažas no tavām ziņām netika nosūtītas.", "Someone": "Kāds", - "Start a chat": "Sākt čatu", "Start authentication": "Sākt autentifikāciju", "Submit": "Iesniegt", "Success": "Izdevās", @@ -290,9 +263,7 @@ "Unable to verify email address.": "Nav iespējams apstiprināt epasta adresi.", "Unban": "Atbanot/atcelt pieejas liegumu", "Unable to capture screen": "Neizdevās uzņemt ekrānattēlu", - "unencrypted": "nešifrēts", "unknown caller": "nezināms zvanītājs", - "unknown device": "nezināma ierīce", "unknown error code": "nezināms kļūdas kods", "Unmute": "Ieslēgt skaņu", "Unnamed Room": "Istaba bez nosaukuma", @@ -301,20 +272,14 @@ "Custom Server Options": "Iestatāmās servera opcijas", "Dismiss": "Atteikt", "You have enabled URL previews by default.": "URL priekšskats pēc noklusējuma Tev iriespējots .", - "Unrecognised room alias:": "Neatpazīta istabas aliase:", "Upload avatar": "Augšuplādēt avataru (profila attēlu)", "Upload Failed": "Augšupielāde (nosūtīšana) neizdevās", "Upload file": "Augšuplādēt failu", "Upload new:": "Augšuplādēt jaunu:", "Usage": "Lietojums", - "Use compact timeline layout": "Izmanto kompaktu laikpaziņojumu skatu", - "User ID": "Lietotāja Id", "Users": "Lietotāji", "Verification Pending": "Gaida verifikāciju", - "Verification": "Verifikācija", - "verified": "verificēts", "Verified key": "Verificēta atslēga", - "Start verification": "Sākt verifikāciju", "Video call": "VIDEO zvans", "Voice call": "AUDIO zvans", "VoIP conference finished.": "VoIP konference beidzās.", @@ -359,7 +324,6 @@ "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s nomainīja istabas avataru uz ", "Upload an avatar:": "Augšuplādē avataru (profila attēlu):", "This server does not support authentication with a phone number.": "Šis serveris neatbalsta autentifikāciju pēc telefona numura.", - "Make Moderator": "Piešķirt moderatora statusu", "There are no visible files in this room": "Nav redzamu failu šajā istabā", "Room": "Istaba", "Connectivity to the server has been lost.": "Savienojums ar serveri pārtrūka.", @@ -389,15 +353,9 @@ "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.": "Vai tiešām vēlies dzēst šo notikumu? Ņem vērā, ka istabas nosaukuma vai tēmas nosaukuma maiņa var ietekmēt (atsaukt) izmaiņas.", "Unknown error": "Nezināma kļūda", "Incorrect password": "Nepareiza parole", - "To continue, please enter your password.": "Lai turpinātu, ievadi savu paroli.", - "I verify that the keys match": "Es apstiprinu, ka atslēgas sakrīt", "Unable to restore session": "Nav iespējams atjaunot sesiju", "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.": "Ja Tu iepriekš izmantoji jaunāku %(brand)s versiju, tava sesija var nebūt saderīga ar šo versiju. Aizver šo logu un atgriezies jaunākajā versijā.", "Unknown Address": "Nezināma adrese", - "Unblacklist": "Atbloķēšanas saraksts", - "Blacklist": "Melnais saraksts", - "Unverify": "Atverificēt", - "Verify...": "Verificē...", "ex. @bob:example.com": "piemēram, @valters:smaidu.lv", "Add User": "Pievienot lietotāju", "Please check your email to continue registration.": "Lūdzu pārbaudi savu epastu lai turpinātu reģistrāciju.", @@ -409,7 +367,6 @@ "Error decrypting image": "Kļūda atšifrējot attēlu", "Error decrypting video": "Kļūda atšifrējot video", "Add an Integration": "Pievienot integrāciju", - "Removed or unknown message type": "Dzēsts vai nezināms ziņas tips", "URL Previews": "URL priekšskats", "Drop file here to upload": "Ievelc failu šeit lai augšuplādētu", " (unsupported)": " (netiek atbalstīts)", @@ -427,9 +384,6 @@ "Authentication check failed: incorrect password?": "Autentifikācijas pārbaude neizdevās. Nepareiza parole?", "Do you want to set an email address?": "Vai vēlies norādīt epasta adresi?", "Skip": "Izlaist", - "Share without verifying": "Kopīgot bez verificēšanas", - "Ignore request": "Ignorēt pieprasījumu", - "Encryption key request": "Šifrēšanas atslēgas pieprasījums", "Add a widget": "Pievienot vidžetu", "Allow": "Atļaut", "and %(count)s others...|other": "un vēl %(count)s citi...", @@ -469,15 +423,9 @@ "Which officially provided instance you are using, if any": "Kuru oficiāli izlaisto versiju izmantojat (ja to darat)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Neatkarīgi no tā, vai izmantojat Richtext režīmu redaktorā Rich Text Editor", "Your homeserver's URL": "Bāzes servera URL adrese", - "Your identity server's URL": "Tava Identitātes servera URL adrese", "The information being sent to us to help make %(brand)s better includes:": "Informācija, kura mums tiek nosūtīta, lai ļautu padarīt %(brand)s labāku, ietver:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Ja šī lapa ietver identificējamu informāciju, tādu kā istaba, lietotājs, grupas Id, šie dati tiek noņemti pirms nosūtīšanas uz serveri.", "Call Failed": "Zvans neizdevās", - "Review Devices": "Ierīču pārskats", - "Call Anyway": "Vienalga zvanīt", - "Answer Anyway": "Vienalga atbildēt", - "Call": "Zvans", - "Answer": "Atbildēt", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s", "Who would you like to add to this community?": "Kurus cilvēkus Tu vēlētos pievienot šai kopienai?", "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Brīdinājums: ikviens, kurš tiek pievienots kopienai būs publiski redzams visiem, kuri zin kopienas Id", @@ -486,7 +434,6 @@ "Which rooms would you like to add to this community?": "Kuras istabas vēlies pievienot šai kopienai?", "Show these rooms to non-members on the community page and room list?": "Vai ne-biedriem rādīt kopienas lapā un istabu sarakstā šīs istabas?", "Add rooms to the community": "Istabu pievienošana kopienai", - "Room name or alias": "Istabas nosaukums vai aliase", "Add to community": "Pievienot kopienai", "Failed to invite the following users to %(groupId)s:": "Neizdevās uzaicināt sekojošus lietotājus grupā %(groupId)s:", "Failed to invite users to community": "Neizdevās uzaicināt lietotājus komūnā", @@ -518,11 +465,8 @@ "Jump to read receipt": "Pāriet uz izlasīšanas apstiprinājumu", "Mention": "Pieminējums/atsauce", "Invite": "Uzaicināt", - "User Options": "Lietotāja uzstādījumi/opcijas", "Send an encrypted reply…": "sūtīt šifrētu atbildi…", - "Send a reply (unencrypted)…": "sūtīt NEšifrētu atbildi…", "Send an encrypted message…": "rakstīt ziņu (šifrētu)…", - "Send a message (unencrypted)…": "rakstīt ziņu (NEšifrētu)…", "Jump to message": "Pāriet uz ziņu", "No pinned messages.": "Nav piekabinātu ziņu.", "Loading...": "Ielāde...", @@ -556,8 +500,6 @@ "URL previews are disabled by default for participants in this room.": "ULR priešskats šīs istabas dalībniekiem pēc noklusējuma ir atspējots.", "Copied!": "Nokopēts!", "Failed to copy": "Nokopēt neizdevās", - "Message removed by %(userId)s": "Ziņu dzēsis %(userId)s", - "Message removed": "Ziņa dzēsta", "An email has been sent to %(emailAddress)s": "Vēstule tika nosūtīta uz %(emailAddress)s", "A text message has been sent to %(msisdn)s": "Teksta ziņa tika nosūtīta uz %(msisdn)s", "Remove from community": "Izdzēst no kopienas", @@ -657,8 +599,6 @@ "%(count)s of your messages have not been sent.|one": "Tava ziņa netika nosūtīta.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Atkārtoti sūtīt ziņu vai atcelt sūtīšanu.", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Šeit neviena nav. Ja vēlies kādu uzaicināt vai atslēgt paziņojumu par tukšu istabu?", - "Light theme": "Gaiša ādiņa", - "Dark theme": "Tumša ādiņa", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privātumu augstu respektējam, tādēļ analītikas mērķiem nevācam nekādus personas un identificējamus datus.", "Learn more about how we use analytics.": "Sīkāk par to, kā tiek izmantota analītika.", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Epasts ir nosūtīts uz %(emailAddress)s. Izmanto epastā nosūtīto tīmekļa saiti un tad noklikšķini zemāk.", @@ -710,7 +650,6 @@ "Opens the Developer Tools dialog": "Atver Izstrādātāja instrumentus", "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Skatījis %(displayName)s (%(userName)s) %(dateTime)s", "Fetching third party location failed": "Neizdevās iegūt trešās puses atrašanās vietu", - "A new version of %(brand)s is available.": "Pieejama jauna %(brand)s versija.", "Send Account Data": "Sūtīt konta datus", "All notifications are currently disabled for all targets.": "Visiem saņēmējiem visi paziņojumi ir atspējoti.", "Uploading report": "Augšuplādē atskaiti", @@ -727,8 +666,6 @@ "Send Custom Event": "Sūtīt individuālu notikumu", "Advanced notification settings": "Paziņojumu papildus iestatījumi", "Failed to send logs: ": "Neizdevās nosūtīt logfailus: ", - "delete the alias.": "dzēst aliasi/aizstājējvārdu.", - "To return to your account in future you need to set a password": "Lai nākotnē atgrieztos savā kontā, nepieciešams iestatīt paroli", "Forget": "Aizmirst", "You cannot delete this image. (%(code)s)": "Šo attēlu nevar izdzēst (%(code)s)", "Cancel Sending": "Atcelt sūtīšanu", @@ -754,7 +691,6 @@ "Resend": "Nosūtīt atkārtoti", "Files": "Faili", "Collecting app version information": "Tiek iegūta programmas versijas informācija", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Dzēst istabas aliasi/aizstājējvārdu %(alias)s un dzēst %(name)s no kataloga?", "Keywords": "Atslēgvārdi", "Enable notifications for this account": "Iespējot paziņojumus šim kontam", "Invite to this community": "Uzaicināt šajā kopienā", @@ -811,7 +747,6 @@ "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.": "Atutošanas logfaili satur programmas datus, ieskaitot Tavu lietotājvārdu, istabu/grupu ID vai aliases, kuras esi apmeklējis un citu lietotāju lietotājvārdus. Tie nesatur pašas ziņas.", "Unhide Preview": "Rādīt priekšskatījumu", "Unable to join network": "Nav iespējams pievienoties tīklam", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Droši vien Tu konfigurēji tās kādā citā Matrix klientā, nevis %(brand)s. Nav iespējams tos pārkonfigurēt ar %(brand)s, bet tie joprojām tiek izmantoti", "Sorry, your browser is not able to run %(brand)s.": "Atvaino, diemžēl tavs tīmekļa pārlūks nespēj darbināt %(brand)s.", "Uploaded on %(date)s by %(user)s": "Augšuplādēja %(user)s %(date)s", "Messages in group chats": "Ziņas grupas čatos", @@ -836,7 +771,6 @@ "Thank you!": "Tencinam!", "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!": "Tavā pašreizējā pārlūkā aplikācijas izskats un uzvedība var būt pilnīgi neatbilstoša, kā arī dažas no visām funkcijām var nedarboties. Ja vēlies turpināt izmantot šo pārlūku, Tu vari arī turpināt, apzinoties, ka šajā gadījumā esi viens/a ar iespējamo problēmu!", "Checking for an update...": "Lūkojos pēc aktualizācijas...", - "There are advanced notifications which are not shown here": "Pastāv papildus paziņojumi, kuri šeit netiek rādīti", "e.g. %(exampleValue)s": "piemēram %(exampleValue)s", "e.g. ": "piemēram ", "Your device resolution": "Tavas iekārtas izšķirtspēja", @@ -844,8 +778,6 @@ "Whether or not you're logged in (we don't record your username)": "Esat vai neesat pieteicies (mēs nesaglabājam jūsu lietotājvārdu)", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Neatkarīgi no tā, vai izmantojat funkciju \"breadcrumbs\" (avatari virs istabu saraksta)", "Every page you use in the app": "Katra lapa, ko lietojat lietotnē", - "Your User Agent": "Jūsu lietotāja aģents", - "A conference call could not be started because the integrations server is not available": "Konferences zvanu nevarēja sākt, jo integrācijas serveris nav pieejams", "Call in Progress": "Notiek zvans", "A call is currently being placed!": "Pašlaik notiek saruna!", "A call is already in progress!": "Zvans jau notiek!", diff --git a/src/i18n/strings/ml.json b/src/i18n/strings/ml.json index f6d875eea6..60c850e0b3 100644 --- a/src/i18n/strings/ml.json +++ b/src/i18n/strings/ml.json @@ -23,7 +23,6 @@ "Microphone": "മൈക്രോഫോൺ", "Camera": "ക്യാമറ", "Fetching third party location failed": "തേഡ് പാര്‍ട്ടി ലൊക്കേഷന്‍ ഫെച്ച് ചെയ്യാന്‍ കഴിഞ്ഞില്ല", - "A new version of %(brand)s is available.": "റയട്ടിന്റെ ഒരു പുതിയ പതിപ്പ് ലഭ്യമാണ്.", "All notifications are currently disabled for all targets.": "അറിയിപ്പുകളെല്ലാം നിര്‍ത്തിയിരിയ്ക്കുന്നു.", "Uploading report": "റിപ്പോര്‍ട്ട് അപ്ലോഡ് ചെയ്യുന്നു", "Sunday": "ഞായര്‍", @@ -41,8 +40,6 @@ "Waiting for response from server": "സെര്‍വറില്‍ നിന്നുള്ള പ്രതികരണത്തിന് കാക്കുന്നു", "Leave": "വിടവാങ്ങുക", "Advanced notification settings": "അറിയപ്പുകളുടെ സങ്കീര്‍ണമായ സജ്ജീകരണങ്ങള്‍", - "delete the alias.": "ഏലിയാസ് നീക്കം ചെയ്യുക.", - "To return to your account in future you need to set a password": "വീണ്ടും ഈ അക്കൌണ്ട് ഉപയോഗിക്കണമെങ്കില്‍ ഒരു രഹസ്യവാക്ക് സെറ്റ് ചെയ്യുക", "Forget": "മറക്കുക", "World readable": "ആർക്കും വായിക്കാവുന്നത്", "You cannot delete this image. (%(code)s)": "നിങ്ങള്‍ക്ക് ഈ ചിത്രം നീക്കം ചെയ്യാനാകില്ല. (%(code)s)", @@ -67,7 +64,6 @@ "Resend": "വീണ്ടും അയയ്ക്കുക", "Files": "ഫയലുകള്‍", "Collecting app version information": "ആപ്പ് പതിപ്പു വിവരങ്ങള്‍ ശേഖരിക്കുന്നു", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "റൂം ഏലിയാസ് %(alias)s നീക്കം ചെയ്യുകയും %(name)s കള്‍ ഡയറക്ടറിയില്‍ നിന്നും നീക്കം ചെയ്യുകയും ചെയ്യുക ?", "Keywords": "കീവേഡുകള്‍", "Enable notifications for this account": "ഈ അക്കൌണ്ടില്‍ നോട്ടിഫിക്കേഷനുകള്‍ ഇനേബിള്‍ ചെയ്യുക", "Messages containing keywords": "കീവേഡുകള്‍അടങ്ങിയ സന്ദേശങ്ങള്‍ക്ക്", @@ -114,7 +110,6 @@ "Back": "തിരികെ", "Unhide Preview": "പ്രിവ്യു കാണിക്കുക", "Unable to join network": "നെറ്റ്‍വര്‍ക്കില്‍ ജോയിന്‍ ചെയ്യാന്‍ കഴിയില്ല", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "ഇവ റയട്ടല്ലാതെ മറ്റൊരു ക്ലയന്റില്‍ വച്ച് കോണ്‍ഫിഗര്‍ ചെയ്തതാകാം. റയട്ടില്‍ അവ ലഭിക്കില്ല, എങ്കിലും അവ നിലവിലുണ്ട്", "Sorry, your browser is not able to run %(brand)s.": "ക്ഷമിക്കണം, നിങ്ങളുടെ ബ്രൌസര്‍ റയട്ട് പ്രവര്‍ത്തിപ്പിക്കാന്‍ പര്യാപ്തമല്ല.", "Uploaded on %(date)s by %(user)s": "%(date)s ല്‍ %(user)s അപ്ലോഡ് ചെയ്തത്", "Messages in group chats": "ഗ്രൂപ്പ് ചാറ്റുകളിലെ സന്ദേശങ്ങള്‍ക്ക്", @@ -135,6 +130,5 @@ "Failed to change settings": "സജ്ജീകരണങ്ങള്‍ മാറ്റുന്നവാന്‍ സാധിച്ചില്ല", "View Source": "സോഴ്സ് കാണുക", "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!": "നിങ്ങളുടെ ഇപ്പോളത്തെ ബ്രൌസര്‍ റയട്ട് പ്രവര്‍ത്തിപ്പിക്കാന്‍ പൂര്‍ണമായും പര്യാപത്മല്ല. പല ഫീച്ചറുകളും പ്രവര്‍ത്തിക്കാതെയിരിക്കാം. ഈ ബ്രൌസര്‍ തന്നെ ഉപയോഗിക്കണമെങ്കില്‍ മുന്നോട്ട് പോകാം. പക്ഷേ നിങ്ങള്‍ നേരിടുന്ന പ്രശ്നങ്ങള്‍ നിങ്ങളുടെ ഉത്തരവാദിത്തത്തില്‍ ആയിരിക്കും!", - "Checking for an update...": "അപ്ഡേറ്റ് ഉണ്ടോ എന്ന് തിരയുന്നു...", - "There are advanced notifications which are not shown here": "ഇവിടെ കാണിക്കാത്ത നൂതന നോട്ടിഫിക്കേഷനുകള്‍ ഉണ്ട്" + "Checking for an update...": "അപ്ഡേറ്റ് ഉണ്ടോ എന്ന് തിരയുന്നു..." } diff --git a/src/i18n/strings/nb_NO.json b/src/i18n/strings/nb_NO.json index be186b58c5..97a5e75b04 100644 --- a/src/i18n/strings/nb_NO.json +++ b/src/i18n/strings/nb_NO.json @@ -4,7 +4,7 @@ "This phone number is already in use": "Dette mobilnummeret er allerede i bruk", "Failed to verify email address: make sure you clicked the link in the email": "Klarte ikke verifisere e-postadressen: dobbelsjekk at du trykket på lenken i e-posten", "The platform you're on": "Platformen du befinner deg på", - "The version of %(brand)s": "Versjonen av %(brand)s", + "The version of %(brand)s": "%(brand)s-versjonen", "Your language of choice": "Ditt valgte språk", "Your homeserver's URL": "Din hjemmetjeners URL", "Fetching third party location failed": "Kunne ikke hente tredjeparts lokalisering", @@ -23,7 +23,6 @@ "On": "På", "Leave": "Forlat", "All notifications are currently disabled for all targets.": "Alle varsler er deaktivert for alle mottakere.", - "delete the alias.": "Slett aliaset.", "Forget": "Glem", "World readable": "Lesbar for alle", "You cannot delete this image. (%(code)s)": "Du kan ikke slette dette bildet. (%(code)s)", @@ -40,7 +39,6 @@ "Failed to add tag %(tagName)s to room": "Kunne ikke legge til tagg %(tagName)s til rom", "Members": "Medlemmer", "Noisy": "Bråkete", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Slett rom alias %(alias)s og fjern %(name)s fra katalogen?", "Enable notifications for this account": "Aktiver varsler for denne konto", "Messages containing keywords": "Meldinger som inneholder nøkkelord", "When I'm invited to a room": "Når jeg blir invitert til et rom", @@ -97,26 +95,18 @@ "Custom Server Options": "Server-instillinger", "Quote": "Sitat", "Saturday": "Lørdag", - "There are advanced notifications which are not shown here": "Det er avanserte varsler som ikke vises her", "Dismiss": "Avvis", "Whether or not you're logged in (we don't record your username)": "Om du er logget inn eller ikke (vi lagrer ikke brukernavnet ditt)", "Which officially provided instance you are using, if any": "Hvilken offisielle leverte instans som du bruker, hvis noen", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Om du bruker rik-tekstmodus i rik-tekstfeltet", - "Your identity server's URL": "Din identitetstjeners URL", "e.g. %(exampleValue)s": "f.eks. %(exampleValue)s", "Every page you use in the app": "Alle sider du bruker i appen", "e.g. ": "f.eks. ", - "Your User Agent": "Din brukeragent", "Your device resolution": "Din enhets skjermoppløsing", "Analytics": "Statistikk", "The information being sent to us to help make %(brand)s better includes:": "Informasjonen som blir sendt til oss for å hjelpe oss med å lage %(brand)s bedre inkluderer:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Hvor denne siden inkluderer identifiserende informasjon, sånn som navnet på rommet, brukeren, og gruppe ID, men denne informasjonen blir fjernet før den blir sendt til tjeneren.", "Call Failed": "Oppringning mislyktes", - "Review Devices": "Se over enheter", - "Call Anyway": "Ring likevel", - "Answer Anyway": "Svar likevel", - "Call": "Ring", - "Answer": "Svar", "Call Timeout": "Oppringningen be tidsavbrutt", "The remote side failed to pick up": "Den andre svarte ikke", "Unable to capture screen": "Klarte ikke ta opp skjermen", @@ -125,7 +115,6 @@ "VoIP is unsupported": "VoIP er ikke støttet", "You cannot place VoIP calls in this browser.": "Du kan ikke ringe via VoIP i denne nettleseren.", "You cannot place a call with yourself.": "Du kan ikke ringe deg selv.", - "Could not connect to the integration server": "Kunne ikke kople til integrasjons-tjeneren", "Call in Progress": "Samtale pågår", "A call is currently being placed!": "En samtale holder allerede på å starte", "A call is already in progress!": "En samtale er allerede i gang!", @@ -135,7 +124,6 @@ "Upload Failed": "Opplasting feilet", "Failure to create room": "Klarte ikke å opprette rommet", "Server may be unavailable, overloaded, or you hit a bug.": "Tjeneren kan være utilgjengelig, overbelastet, eller du fant en feil.", - "Send anyway": "Send likevel", "Send": "Send", "Sun": "Søn", "Mon": "Man", @@ -169,7 +157,6 @@ "Which rooms would you like to add to this community?": "Hvilke rom vil du legge til i dette samfunnet?", "Show these rooms to non-members on the community page and room list?": "Vis disse rommene til ikke-medlemmer på samfunn-siden og i rom-listen?", "Add rooms to the community": "Legg til rom i samfunnet", - "Room name or alias": "Rom-navn eller alias", "Add to community": "Legg til i samfunn", "Failed to invite the following users to %(groupId)s:": "Klarte ikke invitere disse brukerne til %(groupId)s:", "Failed to invite users to community": "Klarte ikke å invitere brukere til samfunnet", @@ -182,14 +169,11 @@ "Unable to enable Notifications": "Klarte ikke slå på Varslinger", "This email address was not found": "Denne e-post adressen ble ikke funnet", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "E-post adressen din ser ikke ut til å være koplet til en Matrix-ID på denne hjemmetjeneren.", - "Registration Required": "Registrering påkrevd", - "You need to register to do this. Would you like to register now?": "Du må registrere deg for å gjøre dette. Vil du registrere deg nå?", "Register": "Registrer", "Default": "Standard", "Restricted": "Begrenset", "Moderator": "Moderator", "Admin": "Admin", - "Start a chat": "Start en samtale", "Operation failed": "Operasjon mislyktes", "Failed to invite": "Klarte ikke invitere", "Failed to invite users to the room:": "Klarte ikke invitere brukere til rommet:", @@ -220,7 +204,6 @@ "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.": "Alternativt kan du prøve å bruke felles tjeneren turn.matrix.org, men dette vil ikke bli like stabilt. I tillegg vil din IP adresse bli delt med denne tjeneren. Dette kan du endre i Innstillinger.", "Try using turn.matrix.org": "Prøv å bruke turn.matrix.org", "OK": "OK", - "A conference call could not be started because the integrations server is not available": "En konferansesamtale kunne ikke startes fordi integrasjons-tjeneren er ikke tilgjengelig", "Replying With Files": "Sender svar som fil", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Det er ikke mulig å svare med en fil akkurat nå. Ønsker du å laste opp denne filen uten å svare?", "Continue": "Fortsett", @@ -239,9 +222,7 @@ "This room has no topic.": "Dette rommet har ingen overskrift.", "Sets the room name": "Setter rommets navn", "Invites user with given id to current room": "Inviterer brukeren med gitt id til dette rommet", - "Joins room with given alias": "Går inn i rommet med gitt alias", "Leave room": "Forlat rommet", - "Unrecognised room alias:": "Ukjent rom alias:", "Kicks user with given id": "Sparker ut bruker med gitt id", "Bans user with given id": "Nekter tilgang til bruker med gitt id", "Unbans user with given ID": "Gir tilbake tilgang til bruker med gitt ID", @@ -268,7 +249,6 @@ "%(targetName)s accepted an invitation.": "%(targetName)s aksepterte en invitasjon.", "Add Email Address": "Legg til E-postadresse", "Add Phone Number": "Legg til telefonnummer", - "The version of %(brand)s": "%(brand)s-versjonen", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Hvorvidt du bruker %(brand)s på en enhet som primært mottar inndata gjennom touchskjerm", "Your user agent": "Brukeragenten din", "Cancel": "Avbryt", @@ -279,8 +259,6 @@ "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s sendte et bilde.", "Someone": "Noen", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s sendte en invitasjon til %(targetDisplayName)s om å bli med i rommet.", - "Light theme": "Lyst tema", - "Dark theme": "Mørkt tema", "Done": "Fullført", "%(displayName)s is typing …": "%(displayName)s skriver …", "%(names)s and %(count)s others are typing …|other": "%(names)s og %(count)s andre skriver …", @@ -364,7 +342,6 @@ "Composer": "Komposør", "Timeline": "Tidslinje", "Security & Privacy": "Sikkerhet og personvern", - "Sessions": "Økter", "Camera": "Kamera", "Reset": "Nullstill", "Browse": "Bla", @@ -396,7 +373,6 @@ "Send an encrypted reply…": "Send et kryptert svar …", "Send an encrypted message…": "Send en kryptert beskjed …", "Send a message…": "Send en melding …", - "Send a message (unencrypted)…": "Send en melding (ukryptert) …", "Bold": "Fet", "Italics": "Kursiv", "Strikethrough": "Gjennomstreking", @@ -441,7 +417,6 @@ "Quick Reactions": "Hurtigreaksjoner", "Cancel search": "Avbryt søket", "More options": "Flere alternativer", - "Blacklist": "Svarteliste", "Join": "Bli med", "Yes": "Ja", "No": "Nei", @@ -530,10 +505,6 @@ "Commands": "Kommandoer", "Emoji": "Emoji", "Users": "Brukere", - "verified": "bekreftet", - "User ID": "Brukerens ID", - "none": "ingen", - "Algorithm": "Algoritme", "Export": "Eksporter", "Import": "Importer", "Restore": "Gjenopprett", @@ -543,10 +514,8 @@ "Success!": "Suksess!", "Set up": "Sett opp", "Disable": "Slå av", - "Review Sessions": "Gå gjennom økter", "Identity server has no terms of service": "Identitetstjeneren har ingen brukervilkår", "Enable Emoji suggestions while typing": "Skru på emoji-forslag mens du skriver", - "Use compact timeline layout": "Bruk det kompakte tidslinjeoppsettet", "Show a placeholder for removed messages": "Vis en stattholder for fjernede meldinger", "Show join/leave messages (invites/kicks/bans unaffected)": "Vis meldinger om innvielser/forlatinger (ekskl. invitasjoner/sparkinger/bannlysninger)", "Show avatar changes": "Vis avatarendringer", @@ -699,7 +668,6 @@ " (unsupported)": " (ikke støttet)", "Edit message": "Rediger meldingen", "Unencrypted": "Ukryptert", - "device id: ": "enhets-id: ", "Disinvite": "Trekk tilbake invitasjon", "Kick": "Spark ut", "Deactivate user?": "Vil du deaktivere brukeren?", @@ -747,7 +715,6 @@ "Declining …": "Avslår …", "edited": "redigert", "You're not currently a member of any communities.": "Du er ikke medlem av noen samfunn for øyeblikket.", - "Yes, I want to help!": "Ja, jeg vil hjelpe til!", "What's new?": "Hva er nytt?", "Set Password": "Bestem passord", "Your user ID": "Din bruker-ID", @@ -793,7 +760,6 @@ "Upload Error": "Opplastingsfeil", "Verification Request": "Verifiseringsforespørsel", "No backup found!": "Ingen sikkerhetskopier ble funnet!", - "Backup restored": "Sikkerhetskopien ble gjenopprettet", "Update status": "Oppdater statusen", "Country Dropdown": "Nedfallsmeny over land", "Server Name": "Tjenernavn", @@ -820,9 +786,7 @@ "Search failed": "Søket mislyktes", "No more results": "Ingen flere resultater", "Fill screen": "Fyll skjermen", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Your profile": "Din profil", - "Waiting…": "Venter …", "Session verified": "Økten er verifisert", "Sign in instead": "Logg inn i stedet", "I have verified my email address": "Jeg har verifisert E-postadressen min", @@ -832,11 +796,6 @@ "You're signed out": "Du er logget av", "Results from DuckDuckGo": "Resultater fra DuckDuckGo", "DuckDuckGo Results": "DuckDuckGo-resultater", - "unknown device": "ukjent enhet", - "Device ID": "Enhets-ID", - "Verification": "Verifisering", - "unencrypted": "ukryptert", - "Event information": "Hendelsesinformasjon", "File to import": "Filen som skal importeres", "Your recovery key": "Din gjenopprettingsnøkkel", "Upgrade your encryption": "Oppgrader krypteringen din", @@ -919,10 +878,8 @@ "Who can read history?": "Hvem kan lese historikken?", "Scroll to most recent messages": "Hopp bort til de nyeste meldingene", "Share Link to User": "Del en lenke til brukeren", - "User Options": "Brukerinnstillinger", "Filter room members": "Filtrer rommets medlemmer", "Send a reply…": "Send et svar …", - "Send a reply (unencrypted)…": "Send et svar (ukryptert) …", "Code block": "Kodefelt", "Replying": "Svarer på", "Room %(name)s": "Rom %(name)s", @@ -955,7 +912,6 @@ "Encryption enabled": "Kryptering er skrudd på", "Encryption not enabled": "Kryptering er ikke skrudd på", "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s endret rommets avatar til ", - "Message removed": "Meldingen ble fjernet", "Something went wrong!": "Noe gikk galt!", "Visible to everyone": "Synlig for alle", "Checking for an update...": "Leter etter en oppdatering …", @@ -966,8 +922,6 @@ "Your avatar URL": "Din avatars URL", "Widget added by": "Modulen ble lagt til av", "Create new room": "Opprett et nytt rom", - "Unverify": "Av-verifiser", - "Verify...": "Verifiser …", "Language Dropdown": "Språk-nedfallsmeny", "Manage Integrations": "Behandle integreringer", "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", @@ -984,8 +938,6 @@ "%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)s endret avatarene sine", "%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)s endret avataren sin", "Custom level": "Tilpasset nivå", - "Room alias": "Rom-alias", - "Please provide a room alias": "Vennligst skriv inn et rom-alias", "And %(count)s more...|other": "Og %(count)s til...", "Remove server": "Fjern tjeneren", "Matrix": "Matrix", @@ -995,7 +947,6 @@ "Send logs": "Send loggbøker", "Create Community": "Opprett et samfunn", "Please enter a name for the room": "Vennligst skriv inn et navn for rommet", - "Set a room alias to easily share your room with other people.": "Velg et rom-alias for å dele rommet ditt enkelt med andre.", "This room is private, and can only be joined by invitation.": "Dette rommet er privat, og man kan kun bli med etter invitasjon.", "Create a public room": "Opprett et offentlig rom", "Create a private room": "Opprett et privat rom", @@ -1047,7 +998,6 @@ "Registration Successful": "Registreringen var vellykket", "Create your account": "Opprett kontoen din", "Forgotten your password?": "Har du glemt passordet ditt?", - "Blacklisted": "Svartelistet", "Export room keys": "Eksporter romnøkler", "Import room keys": "Importer romnøkler", "Go to Settings": "Gå til Innstillinger", @@ -1080,9 +1030,6 @@ "They match": "De samsvarer", "They don't match": "De samsvarer ikke", "in memory": "i minnet", - "outdated": "utdatert", - "Disable Notifications": "Skru av varsler", - "Enable Notifications": "Skru på varsler", "Delete Backup": "Slett sikkerhetskopien", "Restore from Backup": "Gjenopprett fra sikkerhetskopi", "Remove %(email)s?": "Vil du fjerne %(email)s?", @@ -1125,18 +1072,14 @@ "was unbanned %(count)s times|one": "fikk bannlysningen sin opphevet", "Clear all data": "Tøm alle data", "Verify session": "Verifiser økten", - "Start verification": "Begynn verifisering", "Upload completed": "Opplasting fullført", "Unable to upload": "Mislyktes i å laste opp", "Username not available": "Brukernavnet er utilgjengelig", "Username available": "Brukernavnet er tilgjengelig", - "Unknown sessions": "Ukjente økter", - "Alias (optional)": "Alias (valgfritt)", "Remove for everyone": "Fjern for alle", "Remove for me": "Fjern for meg", "Syncing...": "Synkroniserer ...", "Signing In...": "Logger inn …", - "NOT verified": "IKKE verifisert", "Calls": "Samtaler", "Room List": "Romliste", "Never send encrypted messages to unverified sessions from this session": "Aldri send krypterte meldinger til uverifiserte økter fra denne økten", @@ -1152,15 +1095,12 @@ "Session backup key:": "Øktsikkerhetskopieringsnøkkel:", "Secret storage public key:": "Offentlig nøkkel for hemmelig lagring:", "Homeserver feature support:": "Hjemmetjener-funksjonsstøtte:", - "Secret Storage key format:": "Nøkkelformatet for hemmelig lagring:", - "%(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 kan ikke lagre krypterte meldinger sikkert når den kjøres i en nettleser. Bruk %(brand)s Desktop for at krypterte meldinger skal dukke opp i søkeresultater.", "Read Marker lifetime (ms)": "Lesemarkørens visningstid (ms)", "Read Marker off-screen lifetime (ms)": "Lesemarkørens visningstid utenfor skjermen (ms)", "Cross-signing": "Kryssignering", "Where you’re logged in": "Der du er pålogget", "Manage the names of and sign out of your sessions below or verify them in your User Profile.": "Behandle navnene til samt logge av dine økter nedenfor eller verifiser dem i brukerprofilen din.", "Learn more about how we use analytics.": "Lær mer om hvordan vi bruker statistikker.", - "To link to this room, please add an alias.": "For å lenke til dette rommet, vennligst legg til et alias.", "Showing flair for these communities:": "Viser merkeskilt for disse samfunnene:", "URL previews are enabled by default for participants in this room.": "URL-forhåndsvisninger er skrudd på som standard for deltakerene i dette rommet.", "URL previews are disabled by default for participants in this room.": "URL-forhåndsvisninger er skrudd av som standard for deltakerene i dette rommet.", @@ -1243,8 +1183,6 @@ "Ban this user?": "Vil du bannlyse denne brukeren?", "Demote yourself?": "Vil du degradere deg selv?", "Demote": "Degrader", - "Revoke Moderator": "Trekk tilbake moderatorstatus", - "Make Moderator": "Gjør til moderator", "and %(count)s others...|other": "og %(count)s andre …", "and %(count)s others...|one": "og én annen …", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (styrkenivå %(powerLevelNumber)s)", @@ -1274,20 +1212,14 @@ "Error decrypting audio": "Feil under dekryptering av lyd", "Decrypt %(text)s": "Dekrypter %(text)s", "You verified %(name)s": "Du verifiserte %(name)s", - "A new version of %(brand)s is available.": "En ny versjon av %(brand)s er tilgjengelig.", "were kicked %(count)s times|other": "ble sparket ut %(count)s ganger", "was kicked %(count)s times|other": "ble sparket ut %(count)s ganger", "Some characters not allowed": "Noen tegn er ikke tillatt", - "This alias is available to use": "Dette aliaset er tilgjengelig for bruk", - "This alias is already in use": "Dette aliaset er allerede i bruk", "You have entered an invalid address.": "Du har skrevet inn en ugyldig adresse.", "Invite anyway": "Inviter likevel", "Enable end-to-end encryption": "Aktiver start-til-mål-kryptering", "You can’t disable this later. Bridges & most bots won’t work yet.": "Du kan ikke skru dette av senere. Broer og mange botter vil ikke fungere enda.", - "Begin Verifying": "Begynn verifiseringen", "View Servers in Room": "Vis tjenerne i rommet", - "Ignore request": "Ignorer forespørselen", - "Loading session info...": "Laster inn økt-infoen …", "a key signature": "en nøkkelsignatur", "Send Logs": "Send loggbøker", "Command Help": "Kommandohjelp", @@ -1312,16 +1244,11 @@ "Set a display name:": "Velg et visningsnavn:", "Continue with previous account": "Fortsett med tidligere konto", "Clear personal data": "Tøm personlige data", - "Ed25519 fingerprint": "Ed25519-fingeravtrykk", - "Curve25519 identity key": "Curve25519-identitetsnøkkel", - "Decryption error": "Dekrypteringsfeil", "Passphrases must match": "Passfrasene må samsvare", "Passphrase must not be empty": "Passfrasen kan ikke være tom", "Confirm passphrase": "Bekreft passfrasen", "Great! This recovery passphrase looks strong enough.": "Strålende! Denne gjenopprettingspassfrasen ser solid nok ut.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Velg en gjenopprettingspassfrase til å sikre kryptert informasjon og å gjenopprette det hvis du logger av. Dette burde noe annet enn kontopassordet ditt:", "Enter a recovery passphrase": "Skriv inn en gjenopprettingspassfrase", - "Back up encrypted message keys": "Sikkerhetskopier krypterte meldingsnøkler", "Set up with a recovery key": "Sett det opp med en gjenopprettingsnøkkel", "That matches!": "Det samsvarer!", "That doesn't match.": "Det samsvarer ikke.", @@ -1335,11 +1262,7 @@ "Print it and store it somewhere safe": "Skriv den ut og lagre den på et sikkert sted", "Save it on a USB key or backup drive": "Lagre den på en USB-pinne eller backup-harddisk", "Copy it to your personal cloud storage": "Kopier den til din personlige skylagring", - "You can now verify your other devices, and other users to keep your chats safe.": "Du kan nå verifisere de andre enhetene dine, samt andre brukere for å holde samtalene dine trygge.", - "Confirm recovery passphrase": "Bekreft gjenopprettingspassfrasen", "Make a copy of your recovery key": "Lag en kopi av gjenopprettingsnøkkelen din", - "You're done!": "Du har gjort alt klart!", - "Enter a recovery passphrase...": "Skriv inn en gjenopprettingspassfrase …", "Please enter your recovery passphrase a second time to confirm.": "Skriv inn gjenopprettingspassfrasen din en andre gang for å bekrefte.", "Repeat your recovery passphrase...": "Gjenta gjenopprettingspassfrasen din …", "Other users may not trust it": "Andre brukere kan kanskje mistro den", @@ -1357,7 +1280,6 @@ "Dismiss read marker and jump to bottom": "Avføy lesekvitteringen og hopp ned til bunnen", "If you cancel now, you won't complete verifying your other session.": "Hvis du avbryter nå, vil du ikke ha fullført verifiseringen av den andre økten din.", "Room name or address": "Rommets navn eller adresse", - "sent an image.": "sendte et bilde.", "Light": "Lys", "Dark": "Mørk", "Verify your other session using one of the options below.": "Verifiser den andre økten din med en av metodene nedenfor.", @@ -1369,11 +1291,8 @@ "Encryption upgrade available": "Krypteringsoppdatering tilgjengelig", "Verify the new login accessing your account: %(name)s": "Verifiser den nye påloggingen som vil ha tilgang til kontoen din: %(name)s", "Restart": "Start på nytt", - "You: %(message)s": "Du: %(message)s", "Font scaling": "Skrifttypeskalering", - "Use IRC layout": "Bruk IRC-oppsett", "Font size": "Skriftstørrelse", - "Custom font size": "Tilpasset skriftstørrelse", "You've successfully verified this user.": "Du har vellykket verifisert denne brukeren.", "Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Venter på at den andre økten din, %(deviceName)s (%(deviceId)s), skal verifisere …", "Waiting for your other session to verify…": "Venter på at den andre økten din skal verifisere …", @@ -1474,9 +1393,7 @@ "Switch to dark mode": "Bytt til mørk modus", "Switch theme": "Bytt tema", "All settings": "Alle innstillinger", - "Archived rooms": "Arkiverte rom", "Feedback": "Tilbakemelding", - "Account settings": "Kontoinnstillinger", "Emoji Autocomplete": "Auto-fullfør emojier", "Confirm encryption setup": "Bekreft krypteringsoppsett", "Create key backup": "Opprett nøkkelsikkerhetskopi", diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 44745e7095..2dce8b0a5b 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -5,7 +5,6 @@ "Access Token:": "Toegangstoken:", "Admin": "Beheerder", "Advanced": "Geavanceerd", - "Algorithm": "Algoritme", "Always show message timestamps": "Altijd tijdstempels van berichten tonen", "Authentication": "Authenticatie", "%(items)s and %(lastItem)s": "%(items)s en %(lastItem)s", @@ -24,7 +23,6 @@ "Ban": "Verbannen", "Banned users": "Verbannen gebruikers", "Bans user with given id": "Verbant de gebruiker met de gegeven ID", - "Blacklisted": "Geblokkeerd", "Call Timeout": "Oproeptime-out", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Kan geen verbinding maken met de thuisserver via HTTP wanneer er een HTTPS-URL in uw browserbalk staat. Gebruik HTTPS of schakel onveilige scripts in.", "Change Password": "Wachtwoord veranderen", @@ -43,7 +41,6 @@ "Commands": "Opdrachten", "Confirm password": "Bevestig wachtwoord", "Continue": "Doorgaan", - "Could not connect to the integration server": "Verbinding met de integratieserver is mislukt", "Cancel": "Annuleren", "Accept": "Aannemen", "Active call (%(roomName)s)": "Actieve oproep (%(roomName)s)", @@ -57,7 +54,6 @@ "Default Device": "Standaardapparaat", "Microphone": "Microfoon", "Camera": "Camera", - "Alias (optional)": "Bijnaam (optioneel)", "Anyone": "Iedereen", "Are you sure you want to leave the room '%(roomName)s'?": "Weet u zeker dat u het gesprek ‘%(roomName)s’ wilt verlaten?", "Close": "Sluiten", @@ -81,11 +77,9 @@ "Failed to change password. Is your password correct?": "Wijzigen van wachtwoord is mislukt. Is uw wachtwoord juist?", "Moderator": "Moderator", "Name": "Naam", - "none": "geen", "not specified": "niet opgegeven", "(not supported by this browser)": "(niet ondersteund door deze browser)", "": "", - "NOT verified": "NIET geverifieerd", "No display name": "Geen weergavenaam", "No more results": "Geen resultaten meer", "No results": "Geen resultaten", @@ -100,12 +94,9 @@ "Profile": "Profiel", "Public Chat": "Openbaar gesprek", "Reason": "Reden", - "Revoke Moderator": "Moderator degraderen", "Register": "Registreren", "%(targetName)s rejected the invitation.": "%(targetName)s heeft de uitnodiging geweigerd.", "Reject invitation": "Uitnodiging weigeren", - "Remote addresses for this room:": "Externe adressen voor dit gesprek:", - "Start a chat": "Gesprek beginnen", "Start authentication": "Authenticatie starten", "Submit": "Bevestigen", "Success": "Klaar", @@ -138,36 +129,25 @@ "Current password": "Huidig wachtwoord", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s heeft de gespreksnaam verwijderd.", "Create Room": "Gesprek aanmaken", - "Curve25519 identity key": "Curve25519-identiteitssleutel", "/ddg is not a command": "/ddg is geen opdracht", "Deactivate Account": "Account sluiten", "Decline": "Weigeren", "Decrypt %(text)s": "%(text)s ontsleutelen", - "Decryption error": "Ontsleutelingsfout", - "Device ID": "Apparaats-ID", - "device id: ": "apparaats-ID: ", - "Direct chats": "Tweegesprekken", - "Disable Notifications": "Meldingen uitschakelen", "Disinvite": "Uitnodiging intrekken", "Download %(text)s": "%(text)s downloaden", "Drop File Here": "Versleep het bestand naar hier", - "Ed25519 fingerprint": "Ed25519-vingerafdruk", "Email": "E-mailadres", "Email address": "E-mailadres", - "Claimed Ed25519 fingerprint key": "Geclaimde Ed25519-vingerafdrukssleutel", "Custom": "Aangepast", "Custom level": "Aangepast niveau", "Deops user with given id": "Ontmachtigt gebruiker met de gegeven ID", "Default": "Standaard", "Displays action": "Toont actie", "Emoji": "Emoticons", - "Enable Notifications": "Meldingen inschakelen", "%(senderName)s ended the call.": "%(senderName)s heeft opgehangen.", - "End-to-end encryption information": "Info over eind-tot-eind-versleuteling", "Enter passphrase": "Voer wachtwoord in", "Error decrypting attachment": "Fout bij het ontsleutelen van de bijlage", "Error: Problem communicating with the given homeserver.": "Fout: probleem bij communicatie met de gegeven thuisserver.", - "Event information": "Gebeurtenisinformatie", "Existing Call": "Bestaande oproep", "Export": "Wegschrijven", "Export E2E room keys": "E2E-gesprekssleutels wegschrijven", @@ -183,7 +163,6 @@ "Failed to send email": "Versturen van e-mail is mislukt", "Failed to send request.": "Versturen van verzoek is mislukt.", "Failed to set display name": "Instellen van weergavenaam is mislukt", - "Failed to toggle moderator status": "Aanpassen van moderatorstatus is mislukt", "Failed to unban": "Ontbannen mislukt", "Failed to upload profile picture!": "Uploaden van profielfoto is mislukt!", "Failed to verify email address: make sure you clicked the link in the email": "Kan het e-mailadres niet verifiëren: zorg ervoor dat u de koppeling in de e-mail heeft aangeklikt", @@ -218,13 +197,11 @@ "Join as voice or video.": "Deelnemen met spraak of video.", "Join Room": "Gesprek toetreden", "%(targetName)s joined the room.": "%(targetName)s is tot het gesprek toegetreden.", - "Joins room with given alias": "Neemt met de gegeven bijnaam aan het gesprek deel", "Jump to first unread message.": "Spring naar het eerste ongelezen bericht.", "Labs": "Experimenteel", "Last seen": "Laatst gezien", "Leave room": "Gesprek verlaten", "%(targetName)s left the room.": "%(targetName)s heeft het gesprek verlaten.", - "Local addresses for this room:": "Lokale adressen voor dit gesprek:", "Logout": "Afmelden", "Low priority": "Lage prioriteit", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s heeft de toekomstige gespreksgeschiedenis zichtbaar gemaakt voor alle gespreksleden, vanaf het moment dat ze uitgenodigd zijn.", @@ -235,7 +212,6 @@ "Manage Integrations": "Integraties beheren", "Missing room_id in request": "room_id ontbreekt in verzoek", "Missing user_id in request": "user_id ontbreekt in verzoek", - "New address (e.g. #foo:%(localDomain)s)": "Nieuw adres (bv. #foo:%(localDomain)s)", "New passwords don't match": "Nieuwe wachtwoorden komen niet overeen", "New passwords must match each other.": "Nieuwe wachtwoorden moeten overeenkomen.", "Only people who have been invited": "Alleen personen die zijn uitgenodigd", @@ -256,11 +232,9 @@ "%(roomName)s is not accessible at this time.": "%(roomName)s is op dit moment niet toegankelijk.", "Rooms": "Groepsgesprekken", "Save": "Opslaan", - "Scroll to bottom of page": "Scroll naar de onderkant van de pagina", "Search failed": "Zoeken mislukt", "Searches DuckDuckGo for results": "Zoekt op DuckDuckGo voor resultaten", "Seen by %(userName)s at %(dateTime)s": "Gezien door %(userName)s om %(dateTime)s", - "Send anyway": "Alsnog versturen", "Send Reset Email": "E-mail voor opnieuw instellen versturen", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s heeft een afbeelding gestuurd.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s heeft %(targetDisplayName)s in het gesprek uitgenodigd.", @@ -301,13 +275,9 @@ "%(senderName)s unbanned %(targetName)s.": "%(senderName)s heeft %(targetName)s ontbannen.", "Unable to capture screen": "Kan geen schermafdruk maken", "Unable to enable Notifications": "Kan meldingen niet inschakelen", - "unencrypted": "onversleuteld", "unknown caller": "onbekende beller", - "unknown device": "onbekend apparaat", - "Unknown room %(roomId)s": "Onbekend gesprek %(roomId)s", "Unmute": "Niet dempen", "Unnamed Room": "Naamloos gesprek", - "Unrecognised room alias:": "Onbekende gespreksbijnaam:", "Uploading %(filename)s and %(count)s others|zero": "%(filename)s wordt geüpload", "Uploading %(filename)s and %(count)s others|one": "%(filename)s en %(count)s ander worden geüpload", "Uploading %(filename)s and %(count)s others|other": "%(filename)s en %(count)s andere worden geüpload", @@ -316,14 +286,10 @@ "Upload file": "Bestand uploaden", "Upload new:": "Upload er een nieuwe:", "Usage": "Gebruik", - "Use compact timeline layout": "Compacte tijdlijnindeling gebruiken", - "User ID": "Gebruikers-ID", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (macht %(powerLevelNumber)s)", "Username invalid: %(errMessage)s": "Ongeldige gebruikersnaam: %(errMessage)s", "Users": "Gebruikers", "Verification Pending": "Verificatie in afwachting", - "Verification": "Verificatie", - "verified": "geverifieerd", "Verified key": "Geverifieerde sleutel", "Video call": "Video-oproep", "Voice call": "Spraakoproep", @@ -353,7 +319,6 @@ "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "U zult deze veranderingen niet terug kunnen draaien, daar u de gebruiker tot uw eigen niveau promoveert.", "This server does not support authentication with a phone number.": "Deze server biedt geen ondersteuning voor authenticatie met een telefoonnummer.", "An error occurred: %(error_string)s": "Er is een fout opgetreden: %(error_string)s", - "Make Moderator": "Benoemen tot moderator", "There are no visible files in this room": "Er zijn geen zichtbare bestanden in dit gesprek", "Room": "Gesprek", "Connectivity to the server has been lost.": "De verbinding met de server is verbroken.", @@ -385,15 +350,9 @@ "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.": "Weet u zeker dat u deze gebeurtenis wilt verwijderen? Besef wel dat het verwijderen van een van een gespreksnaams- of onderwerpswijziging die wijziging mogelijk teniet doet.", "Unknown error": "Onbekende fout", "Incorrect password": "Onjuist wachtwoord", - "To continue, please enter your password.": "Voer uw wachtwoord in om verder te gaan.", - "Blacklist": "Blokkeren", - "Unblacklist": "Deblokkeren", - "I verify that the keys match": "Ik verklaar dat de sleutels overeenkomen", "Unable to restore session": "Sessieherstel lukt niet", "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.": "Als u reeds een recentere versie van %(brand)s heeft gebruikt is uw sessie mogelijk onverenigbaar met deze versie. Sluit dit venster en ga terug naar die recentere versie.", "Unknown Address": "Onbekend adres", - "Unverify": "Ontverifiëren", - "Verify...": "Verifiëren…", "ex. @bob:example.com": "bv. @jan:voorbeeld.com", "Add User": "Gebruiker toevoegen", "Please check your email to continue registration.": "Bekijk uw e-mail om verder te gaan met de registratie.", @@ -405,7 +364,6 @@ "Error decrypting video": "Fout bij het ontsleutelen van de video", "Add an Integration": "Voeg een integratie toe", "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?": "U wordt zo dadelijk naar een derdepartijwebsite gebracht zodat u de account kunt legitimeren voor gebruik met %(integrationsUrl)s. Wilt u doorgaan?", - "Removed or unknown message type": "Verwijderd of onbekend berichttype", "URL Previews": "URL-voorvertoningen", "Drop file here to upload": "Versleep het bestand naar hier om het te uploaden", " (unsupported)": " (niet ondersteund)", @@ -428,10 +386,6 @@ "Do you want to set an email address?": "Wilt u een e-mailadres instellen?", "This will allow you to reset your password and receive notifications.": "Zo kunt u een nieuw wachtwoord instellen en meldingen ontvangen.", "Skip": "Overslaan", - "Start verification": "Verificatie starten", - "Share without verifying": "Delen zonder verificatie", - "Ignore request": "Verzoek negeren", - "Encryption key request": "Verzoek voor versleutelingssleutel", "Define the power level of a user": "Bepaal het machtsniveau van een gebruiker", "Add a widget": "Widget toevoegen", "Allow": "Toestaan", @@ -461,21 +415,15 @@ "Unpin Message": "Bericht losmaken", "Add rooms to this community": "Voeg gesprekken toe aan deze gemeenschap", "Call Failed": "Oproep mislukt", - "Call": "Bellen", - "Answer": "Beantwoorden", "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Let op: elke persoon die u toevoegt aan een gemeenschap zal publiek zichtbaar zijn voor iedereen die de gemeenschaps-ID kent", "Invite new community members": "Nodig nieuwe gemeenschapsleden uit", "Which rooms would you like to add to this community?": "Welke gesprekken wilt u toevoegen aan deze gemeenschap?", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Widgets verwijderen geldt voor alle deelnemers aan dit gesprek. Weet u zeker dat u deze widget wilt verwijderen?", "Delete Widget": "Widget verwijderen", - "Review Devices": "Apparaten nakijken", - "Call Anyway": "Toch bellen", - "Answer Anyway": "Toch beantwoorden", "Who would you like to add to this community?": "Wie wilt u toevoegen aan deze gemeenschap?", "Invite to Community": "Uitnodigen tot gemeenschap", "Show these rooms to non-members on the community page and room list?": "Deze gesprekken tonen aan niet-leden op de gemeenschapspagina en gesprekslijst?", "Add rooms to the community": "Voeg gesprekken toe aan de gemeenschap", - "Room name or alias": "Gespreks(bij)naam", "Add to community": "Toevoegen aan gemeenschap", "Failed to invite the following users to %(groupId)s:": "Uitnodigen van volgende gebruikers tot %(groupId)s is mislukt:", "Failed to invite users to community": "Uitnodigen van gebruikers tot de gemeenschap is mislukt", @@ -507,11 +455,8 @@ "Jump to read receipt": "Naar het laatst gelezen bericht gaan", "Mention": "Vermelden", "Invite": "Uitnodigen", - "User Options": "Gebruikersopties", "Send an encrypted reply…": "Verstuur een versleuteld antwoord…", - "Send a reply (unencrypted)…": "Verstuur een antwoord (onversleuteld)…", "Send an encrypted message…": "Verstuur een versleuteld bericht…", - "Send a message (unencrypted)…": "Verstuur een bericht (onversleuteld)…", "Jump to message": "Naar bericht springen", "No pinned messages.": "Geen vastgeprikte berichten.", "Loading...": "Bezig met laden…", @@ -543,8 +488,6 @@ "New community ID (e.g. +foo:%(localDomain)s)": "Nieuwe gemeenschaps-ID (bv. +foo:%(localDomain)s)", "URL previews are enabled by default for participants in this room.": "URL-voorvertoningen zijn voor leden van dit gesprek standaard ingeschakeld.", "URL previews are disabled by default for participants in this room.": "URL-voorvertoningen zijn voor leden van dit gesprek standaard uitgeschakeld.", - "Message removed by %(userId)s": "Bericht verwijderd door %(userId)s", - "Message removed": "Bericht verwijderd", "An email has been sent to %(emailAddress)s": "Er is een e-mail naar %(emailAddress)s verstuurd", "A text message has been sent to %(msisdn)s": "Er is een sms naar %(msisdn)s verstuurd", "Remove from community": "Verwijderen uit gemeenschap", @@ -674,8 +617,6 @@ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Bericht opnieuw versturen of bericht annuleren.", "Warning": "Let op", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Er is niemand anders hier! Wilt u anderen uitnodigen of de waarschuwing over het lege gesprek stoppen?", - "Light theme": "Licht thema", - "Dark theme": "Donker thema", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privacy is belangrijk voor ons, dus we verzamelen geen persoonlijke of identificeerbare gegevens voor onze gegevensanalyse.", "Learn more about how we use analytics.": "Lees meer over hoe we uw gegevens gebruiken.", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Er is een e-mail naar %(emailAddress)s verstuurd. Klik hieronder van zodra u de koppeling erin hebt gevolgd.", @@ -685,7 +626,7 @@ "Stops ignoring a user, showing their messages going forward": "Stopt het negeren van een gebruiker, hierdoor worden de berichten van de gebruiker weer zichtbaar", "Notify the whole room": "Laat dit aan het hele groepsgesprek weten", "Room Notification": "Groepsgespreksmelding", - "The information being sent to us to help make %(brand)s better includes:": "De naar ons verstuurde informatie om %(brand)s te verbeteren behelst:", + "The information being sent to us to help make %(brand)s better includes:": "De informatie die naar ons wordt verstuurd om %(brand)s te verbeteren bevat:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Waar deze pagina identificeerbare informatie bevat, zoals een gespreks-, gebruikers- of groeps-ID, zullen deze gegevens verwijderd worden voordat ze naar de server gestuurd worden.", "The platform you're on": "Het platform dat u gebruikt", "The version of %(brand)s": "De versie van %(brand)s", @@ -693,7 +634,6 @@ "Which officially provided instance you are using, if any": "Welke officieel aangeboden instantie u eventueel gebruikt", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Of u de tekstverwerker al dan niet in de modus voor opgemaakte tekst gebruikt", "Your homeserver's URL": "De URL van uw thuisserver", - "Your identity server's URL": "De URL van uw identiteitsserver", "In reply to ": "Als antwoord op ", "This room is not public. You will not be able to rejoin without an invite.": "Dit is geen openbaar gesprek. Slechts op uitnodiging zult u opnieuw kunnen toetreden.", "were unbanned %(count)s times|one": "zijn ontbannen", @@ -722,7 +662,6 @@ "Submit debug logs": "Foutopsporingslogboeken indienen", "Opens the Developer Tools dialog": "Opent het dialoogvenster met ontwikkelaarsgereedschap", "Fetching third party location failed": "Het ophalen van de locatie van de derde partij is mislukt", - "A new version of %(brand)s is available.": "Er is een nieuwe versie van %(brand)s beschikbaar.", "I understand the risks and wish to continue": "Ik begrijp de risico’s en wil graag verdergaan", "Send Account Data": "Accountgegevens versturen", "All notifications are currently disabled for all targets.": "Alle meldingen voor alle bestemmingen zijn momenteel uitgeschakeld.", @@ -740,8 +679,6 @@ "Waiting for response from server": "Wachten op antwoord van de server", "Send Custom Event": "Aangepaste gebeurtenis versturen", "Advanced notification settings": "Geavanceerde meldingsinstellingen", - "delete the alias.": "verwijder de bijnaam.", - "To return to your account in future you need to set a password": "Om uw account te kunnen blijven gebruiken dient u een wachtwoord in te stellen", "Forget": "Vergeten", "You cannot delete this image. (%(code)s)": "U kunt deze afbeelding niet verwijderen. (%(code)s)", "Cancel Sending": "Versturen annuleren", @@ -766,7 +703,6 @@ "No update available.": "Geen update beschikbaar.", "Noisy": "Lawaaierig", "Collecting app version information": "App-versieinformatie wordt verzameld", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "De bijnaam %(alias)s verwijderen en %(name)s uit de catalogus verwijderen?", "Keywords": "Trefwoorden", "Enable notifications for this account": "Meldingen inschakelen voor deze account", "Invite to this community": "Uitnodigen in deze gemeenschap", @@ -817,7 +753,6 @@ "Show message in desktop notification": "Bericht tonen in bureaubladmelding", "Unhide Preview": "Voorvertoning weergeven", "Unable to join network": "Kon niet toetreden tot dit netwerk", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "U heeft ze mogelijk ingesteld in een andere cliënt dan %(brand)s. U kunt ze niet aanpassen in %(brand)s, maar ze zijn wel actief", "Sorry, your browser is not able to run %(brand)s.": "Sorry, uw browser werkt niet met %(brand)s.", "Uploaded on %(date)s by %(user)s": "Geüpload door %(user)s op %(date)s", "Messages in group chats": "Berichten in groepsgesprekken", @@ -843,7 +778,6 @@ "Thank you!": "Bedankt!", "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!": "Met uw huidige browser kan de toepassing er volledig onjuist uitzien. Tevens is het mogelijk dat niet alle functies naar behoren werken. U kunt doorgaan als u het toch wilt proberen, maar bij problemen bent u volledig op uzelf aangewezen!", "Checking for an update...": "Bezig met controleren op updates…", - "There are advanced notifications which are not shown here": "Er zijn geavanceerde meldingen die hier niet getoond worden", "Logs sent": "Logboeken verstuurd", "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.": "Foutopsporingslogboeken bevatten gebruiksgegevens over de toepassing, inclusief uw gebruikersnaam, de ID’s of bijnamen van de gesprekken en groepen die u heeft bezocht, evenals de gebruikersnamen van andere gebruikers. Ze bevatten geen berichten.", "Failed to send logs: ": "Versturen van logboeken mislukt: ", @@ -851,16 +785,12 @@ "e.g. %(exampleValue)s": "bv. %(exampleValue)s", "Every page you use in the app": "Iedere bladzijde die u in de toepassing gebruikt", "e.g. ": "bv. ", - "Your User Agent": "Uw gebruikersagent", "Your device resolution": "De resolutie van uw apparaat", "Missing roomId.": "roomId ontbreekt.", "Always show encryption icons": "Versleutelingspictogrammen altijd tonen", "Send analytics data": "Statistische gegevens (analytics) versturen", "Enable widget screenshots on supported widgets": "Widget-schermafbeeldingen inschakelen op ondersteunde widgets", "Muted Users": "Gedempte gebruikers", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Help %(brand)s te verbeteren door anonieme gebruiksgegevens te versturen. Dit zal een cookie gebruiken (bekijk hiervoor ons cookiebeleid).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Help %(brand)s te verbeteren door anonieme gebruiksgegevens te versturen. Dit zal een cookie gebruiken.", - "Yes, I want to help!": "Ja, ik wil helpen!", "Popout widget": "Widget in nieuw venster openen", "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Kan de gebeurtenis waarop gereageerd was niet laden. Wellicht bestaat die niet, of heeft u geen toestemming die te bekijken.", "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.": "Dit zal uw account voorgoed onbruikbaar maken. U zult zich niet meer kunnen aanmelden, en niemand anders zal zich met dezelfde gebruikers-ID kunnen registreren. Hierdoor zal uw account alle gesprekken waaraan ze deelneemt verlaten, en worden de accountgegevens verwijderd van de identiteitsserver. Deze stap is onomkeerbaar.", @@ -910,8 +840,6 @@ "Audio Output": "Geluidsuitgang", "Ignored users": "Genegeerde gebruikers", "Bulk options": "Bulkopties", - "Registration Required": "Registratie vereist", - "You need to register to do this. Would you like to register now?": "Hiervoor dient u zich te registreren. Wilt u dat nu doen?", "This homeserver has hit its Monthly Active User limit.": "Deze thuisserver heeft zijn limiet voor maandelijks actieve gebruikers bereikt.", "This homeserver has exceeded one of its resource limits.": "Deze thuisserver heeft één van zijn systeembronlimieten overschreden.", "Whether or not you're logged in (we don't record your username)": "Of u al dan niet aangemeld bent (we slaan uw gebruikersnaam niet op)", @@ -934,11 +862,6 @@ "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s heeft badges voor %(groups)s in dit gesprek ingeschakeld.", "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s heeft badges voor %(groups)s in dit gesprek uitgeschakeld.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s heeft badges in dit gesprek voor %(newGroups)s in-, en voor %(oldGroups)s uitgeschakeld.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s heeft de adressen %(addedAddresses)s aan dit gesprek toegekend.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s heeft %(addedAddresses)s als gespreksadres toegevoegd.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s heeft het gespreksadres %(removedAddresses)s verwijderd.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s heeft de gespreksadressen %(removedAddresses)s verwijderd.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s heeft de gespreksadressen %(addedAddresses)s toegevoegd, en %(removedAddresses)s verwijderd.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s heeft %(address)s als hoofdadres voor dit gesprek ingesteld.", "%(senderName)s removed the main address for this room.": "%(senderName)s heeft het hoofdadres voor dit gesprek verwijderd.", "%(displayName)s is typing …": "%(displayName)s is aan het typen…", @@ -1001,7 +924,6 @@ "Allow Peer-to-Peer for 1:1 calls": "Peer-to-peer toestaan voor tweegesprekken", "Prompt before sending invites to potentially invalid matrix IDs": "Bevestiging vragen voordat uitnodigingen naar mogelijk ongeldige Matrix-ID’s worden verstuurd", "Show developer tools": "Ontwikkelgereedschap tonen", - "Order rooms in the room list by most important first instead of most recent": "Gesprekken in de gesprekkenlijst sorteren op belang in plaats van laatste gebruik", "Messages containing my username": "Berichten die mijn gebruikersnaam bevatten", "Messages containing @room": "Berichten die ‘@room’ bevatten", "Encrypted messages in one-to-one chats": "Versleutelde berichten in tweegesprekken", @@ -1155,7 +1077,6 @@ "Select the roles required to change various parts of the room": "Selecteer de rollen vereist om verschillende delen van het gesprek te wijzigen", "Enable encryption?": "Versleuteling inschakelen?", "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.": "Gespreksversleuteling is onomkeerbaar. Berichten in versleutelde gesprekken zijn niet leesbaar voor de server; enkel voor de gespreksdeelnemers. Veel robots en overbruggingen werken niet correct in versleutelde gesprekken. Lees meer over versleuteling.", - "To link to this room, please add an alias.": "Voeg een bijnaam toe om naar dit gesprek te verwijzen.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Wijzigingen aan wie de geschiedenis kan lezen gelden enkel voor toekomstige berichten in dit gesprek. De zichtbaarheid van de bestaande geschiedenis blijft ongewijzigd.", "Encryption": "Versleuteling", "Once enabled, encryption cannot be disabled.": "Eenmaal ingeschakeld kan versleuteling niet meer worden uitgeschakeld.", @@ -1171,10 +1092,6 @@ "Add some now": "Voeg er nu een paar toe", "Error updating main address": "Fout bij bijwerken van hoofdadres", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Er is een fout opgetreden bij het bijwerken van het hoofdadres van het gesprek. Dit wordt mogelijk niet toegestaan door de server, of er is een tijdelijk probleem opgetreden.", - "Error creating alias": "Fout bij aanmaken van bijnaam", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Er is een fout opgetreden bij het aanmaken van die bijnaam. Dit wordt mogelijk niet toegestaan door de server, of er is een tijdelijk probleem opgetreden.", - "Error removing alias": "Fout bij verwijderen van bijnaam", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Er is een fout opgetreden bij het verwijderen van die bijnaam. Mogelijk bestaat die niet meer, of er is een tijdelijke fout opgetreden.", "Main address": "Hoofdadres", "Error updating flair": "Fout bij bijwerken van badge", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Er is een fout opgetreden bij het bijwerken van de badge voor dit gesprek. Wellicht ondersteunt de server dit niet, of er is een tijdelijke fout opgetreden.", @@ -1184,9 +1101,6 @@ "This room is a continuation of another conversation.": "Dit gesprek is een voortzetting van een ander gesprek.", "Click here to see older messages.": "Klik hier om oudere berichten te bekijken.", "Failed to load group members": "Laden van groepsleden is mislukt", - "Please contact your service administrator to get this limit increased.": "Gelieve contact op te nemen met uw dienstbeheerder om deze limiet te verhogen.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Deze thuisserver heeft zijn limiet voor maandelijks actieve gebruikers bereikt, waardoor sommige gebruikers zich niet zullen kunnen aanmelden.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Deze thuisserver heeft één van zijn systeembronlimieten overschreden, waardoor sommige gebruikers zich niet zullen kunnen aanmelden.", "Join": "Deelnemen", "Power level": "Machtsniveau", "That doesn't look like a valid email address": "Dit is geen geldig e-mailadres", @@ -1197,16 +1111,8 @@ "Before submitting logs, you must create a GitHub issue to describe your problem.": "Vooraleer u logboeken indient, dient u uw probleem te melden op GitHub.", "Unable to load commit detail: %(msg)s": "Kan commitdetail niet laden: %(msg)s", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Schrijf om uw gespreksgeschiedenis niet te verliezen vóór het afmelden uw gesprekssleutels weg. Dat moet vanuit de nieuwere versie van %(brand)s", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "U heeft eerder een nieuwere versie van %(brand)s op %(host)s gebruikt. Om deze versie opnieuw met eind-tot-eind-versleuteling te gebruiken, zult u zich moeten afmelden en opnieuw aanmelden. ", "Incompatible Database": "Incompatibele database", "Continue With Encryption Disabled": "Verdergaan met versleuteling uitgeschakeld", - "Use Legacy Verification (for older clients)": "Verouderde verificatie gebruiken (voor oudere cliënten)", - "Verify by comparing a short text string.": "Verifieer door een korte tekenreeks te vergelijken.", - "Begin Verifying": "Verificatie beginnen", - "Waiting for partner to accept...": "Aan het wachten op partner…", - "Nothing appearing? Not all clients support interactive verification yet. .": "Verschijnt er niets? Nog niet alle cliënten bieden ondersteuning voor interactieve verificatie. .", - "Waiting for %(userId)s to confirm...": "Wachten op bevestiging van %(userId)s…", - "Use two-way text verification": "Tweerichtingstekstverificatie gebruiken", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verifieer deze gebruiker om hem/haar als vertrouwd te markeren. Gebruikers vertrouwen geeft u extra gemoedsrust bij het gebruik van eind-tot-eind-versleutelde berichten.", "Waiting for partner to confirm...": "Wachten op bevestiging van partner…", "Incoming Verification Request": "Inkomend verificatieverzoek", @@ -1236,21 +1142,13 @@ "A username can only contain lower case letters, numbers and '=_-./'": "Een gebruikersnaam mag enkel kleine letters, cijfers en ‘=_-./’ bevatten", "Checking...": "Bezig met controleren…", "Unable to load backup status": "Kan back-upstatus niet laden", - "Recovery Key Mismatch": "Herstelsleutel komt niet overeen", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "De back-up kon met deze sleutel niet ontsleuteld worden: controleer of u de juiste herstelsleutel heeft ingevoerd.", - "Incorrect Recovery Passphrase": "Onjuist herstelwachtwoord", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "De back-up kon met dit wachtwoord niet ontsleuteld worden: controleer of u het juiste herstelwachtwoord heeft ingevoerd.", "Unable to restore backup": "Kan back-up niet terugzetten", "No backup found!": "Geen back-up gevonden!", - "Backup Restored": "Back-up hersteld", "Failed to decrypt %(failedCount)s sessions!": "Ontsleutelen van %(failedCount)s sessies is mislukt!", - "Restored %(sessionCount)s session keys": "%(sessionCount)s sessiesleutels hersteld", - "Enter Recovery Passphrase": "Voer het herstelwachtwoord in", "Warning: you should only set up key backup from a trusted computer.": "Let op: stel sleutelback-up enkel in op een vertrouwde computer.", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Verkrijg toegang tot uw beveiligde berichtgeschiedenis en stel beveiligd chatten in door uw herstelwachtwoord in te voeren.", "Next": "Volgende", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Als u uw herstelwachtwoord vergeten bent, kunt u uw herstelsleutel gebruiken of nieuwe herstelopties instellen", - "Enter Recovery Key": "Voer de herstelsleutel in", "This looks like a valid recovery key!": "Dit is een geldige herstelsleutel!", "Not a valid recovery key": "Geen geldige herstelsleutel", "Access your secure message history and set up secure messaging by entering your recovery key.": "Verkrijg toegang tot uw beveiligde berichtgeschiedenis en stel beveiligd chatten in door uw herstelsleutel in te voeren.", @@ -1310,35 +1208,19 @@ "Registration has been disabled on this homeserver.": "Registratie is uitgeschakeld op deze thuisserver.", "Unable to query for supported registration methods.": "Kan ondersteunde registratiemethoden niet opvragen.", "Create your account": "Maak uw account aan", - "Great! This passphrase looks strong enough.": "Top! Dit wachtwoord ziet er sterk genoeg uit.", "Keep going...": "Doe verder…", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "We bewaren een versleutelde kopie van uw sleutels op onze server. Bescherm uw back-up met een wachtwoord om deze veilig te houden.", "For maximum security, this should be different from your account password.": "Voor maximale veiligheid zou dit moeten verschillen van uw accountwachtwoord.", - "Enter a passphrase...": "Voer een wachtwoord in…", - "Set up with a Recovery Key": "Instellen met herstelsleutel", "That matches!": "Dat komt overeen!", "That doesn't match.": "Dat komt niet overeen.", "Go back to set it again.": "Ga terug om het opnieuw in te stellen.", - "Please enter your passphrase a second time to confirm.": "Voer uw wachtwoord nogmaals in om te bevestigen.", - "Repeat your passphrase...": "Herhaal uw wachtwoord…", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Als veiligheidsnet kunt u dit gebruiken om uw versleutelde berichtgeschiedenis te herstellen indien u uw herstelwachtwoord zou vergeten.", - "As a safety net, you can use it to restore your encrypted message history.": "Als veiligheidsnet kunt u het gebruiken om uw versleutelde berichtgeschiedenis te herstellen.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Uw herstelsleutel is een veiligheidsnet - u kunt hem gebruiken om de toegang tot uw versleutelde berichten te herstellen indien u uw wachtwoord zou vergeten.", - "Your Recovery Key": "Uw herstelsleutel", - "Copy to clipboard": "Kopiëren naar klembord", "Download": "Downloaden", "Print it and store it somewhere safe": "Druk hem af en bewaar hem op een veilige plaats", "Save it on a USB key or backup drive": "Sla hem op op een USB-stick of een back-upschijf", "Copy it to your personal cloud storage": "Kopieer hem naar uw persoonlijke cloudopslag", "Your keys are being backed up (the first backup could take a few minutes).": "Er wordt een back-up van uw sleutels gemaakt (de eerste back-up kan enkele minuten duren).", "Set up Secure Message Recovery": "Veilig berichtherstel instellen", - "Secure your backup with a passphrase": "Beveilig uw back-up met een wachtwoord", - "Confirm your passphrase": "Bevestig uw wachtwoord", - "Recovery key": "Herstelsleutel", - "Keep it safe": "Bewaar hem op een veilige plaats", "Starting backup...": "Back-up wordt gestart…", "Success!": "Klaar!", - "Create Key Backup": "Sleutelback-up aanmaken", "Unable to create key backup": "Kan sleutelback-up niet aanmaken", "Retry": "Opnieuw proberen", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Zonder veilig berichtherstel in te stellen, zult u uw versleutelde berichtgeschiedenis verliezen wanneer u zich afmeldt.", @@ -1398,7 +1280,6 @@ "Upload %(count)s other files|one": "%(count)s overig bestand versturen", "Cancel All": "Alles annuleren", "Upload Error": "Fout bij versturen van bestand", - "A conference call could not be started because the integrations server is not available": "Daar de integratieserver onbereikbaar is kon het groepsaudiogesprek niet gestart worden", "The server does not support the room version specified.": "De server ondersteunt deze versie van gesprekken niet.", "Name or Matrix ID": "Naam of Matrix-ID", "Changes your avatar in this current room only": "Verandert uw avatar enkel in het huidige gesprek", @@ -1467,7 +1348,6 @@ "Invalid base_url for m.identity_server": "Ongeldige base_url voor m.identity_server", "Identity server URL does not appear to be a valid identity server": "De identiteitsserver-URL lijkt geen geldige identiteitsserver", "Low bandwidth mode": "Lagebandbreedtemodus", - "Show recently visited rooms above the room list": "Recent bezochte gesprekken bovenaan de gesprekslijst weergeven", "Uploaded sound": "Geüpload-geluid", "Sounds": "Geluiden", "Notification sound": "Meldingsgeluid", @@ -1645,14 +1525,9 @@ "Unread mentions.": "Ongelezen vermeldingen.", "Show image": "Afbeelding tonen", "Please create a new issue on GitHub so that we can investigate this bug.": "Maak een nieuw rapport aan op GitHub opdat we dit probleem kunnen onderzoeken.", - "Room alias": "Gespreksbijnaam", "e.g. my-room": "bv. mijn-gesprek", - "Please provide a room alias": "Geef een gespreksbijnaam op", - "This alias is available to use": "Deze bijnaam is beschikbaar", - "This alias is already in use": "Deze bijnaam is al in gebruik", "Close dialog": "Dialoog sluiten", "Please enter a name for the room": "Geef een naam voor het gesprek op", - "Set a room alias to easily share your room with other people.": "Stel een gespreksbijnaam in om het gesprek eenvoudig met anderen te delen.", "This room is private, and can only be joined by invitation.": "Dit gesprek is privé, en kan enkel op uitnodiging betreden worden.", "Create a public room": "Maak een openbaar gesprek aan", "Create a private room": "Maak een privégesprek aan", @@ -1674,14 +1549,12 @@ "Your email address hasn't been verified yet": "Uw e-mailadres is nog niet geverifieerd", "Click the link in the email you received to verify and then click continue again.": "Open de koppeling in de ontvangen verificatie-e-mail, en klik dan op ‘Doorgaan’.", "%(creator)s created and configured the room.": "Gesprek gestart en ingesteld door %(creator)s.", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Dit gesprek bevat onbekende sessies. Tenzij u die verifieert zou iemand u kunnen afluisteren.", "Setting up keys": "Sleutelconfiguratie", "Verify this session": "Deze sessie verifiëren", "Encryption upgrade available": "Er is een bijgewerkte versleuteling beschikbaar", "You can use /help to list available commands. Did you mean to send this as a message?": "Typ /help om alle opdrachten te zien. Was het uw bedoeling dit als bericht te sturen?", "Help": "Hulp", "Set up encryption": "Versleuteling instellen", - "Unverified session": "Ongeverifieerde sessie", "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.": "Dit vergt validatie van een e-mailadres of telefoonnummer middels de standaardidentiteitsserver , maar die server heeft geen gebruiksvoorwaarden.", "Trust": "Vertrouwen", "Custom (%(level)s)": "Aangepast (%(level)s)", @@ -1693,9 +1566,6 @@ "WARNING: Session already verified, but keys do NOT MATCH!": "PAS OP: de sessie is al geverifieerd, maar de sleutels komen NIET OVEREEN!", "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!": "PAS OP: sleutelverificatie MISLUKT! De combinatie %(userId)s + sessie %(deviceId)s is ondertekend met ‘%(fprint)s’ - maar de opgegeven sleutel is ‘%(fingerprint)s’. Wellicht worden uw berichten onderschept!", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "De door u verschafte en de van %(userId)ss sessie %(deviceId)s verkregen sleutels komen overeen. De sessie is daarmee geverifieerd.", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s heeft %(addedAddresses)s en %(count)s andere adressen aan dit gesprek toegevoegd", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s heeft dit gesprek ontdaan van %(removedAddresses)s en %(count)s andere adressen", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s heeft dit gesprek ontdaan van %(countRemoved)s adressen, en er %(countAdded)s toegevoegd", "%(senderName)s placed a voice call.": "%(senderName)s probeert u te bellen.", "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s poogt u te bellen, maar uw browser ondersteunt dat niet", "%(senderName)s placed a video call.": "%(senderName)s doet een video-oproep.", @@ -1734,21 +1604,14 @@ "%(num)s days from now": "over %(num)s dagen", "%(name)s (%(userId)s)": "%(name)s (%(userId)s)", "Try out new ways to ignore people (experimental)": "Nieuwe manieren om mensen te negeren uitproberen (nog in ontwikkeling)", - "Show a presence dot next to DMs in the room list": "Toon aanwezigheid bij tweegesprekken in de gesprekkenlijst", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Gebruik gebruikersverificatie in plaats van sessieverificatie (nog in ontwikkeling)", - "Enable local event indexing and E2EE search (requires restart)": "Indexeer gebeurtenissen lokaal en maak zo E2EE-zoeken mogelijk (vergt een herstart)", "Show info about bridges in room settings": "Toon bruginformatie in gespreksinstellingen", - "Show padlocks on invite only rooms": "Toon hangsloten op besloten gesprekken", "Match system theme": "Aanpassen aan systeemthema", "Never send encrypted messages to unverified sessions from this session": "Zend vanaf deze sessie nooit versleutelde berichten naar ongeverifieerde sessies", "Never send encrypted messages to unverified sessions in this room from this session": "Zend vanaf deze sessie nooit versleutelde berichten naar ongeverifieerde sessies in dit gesprek", "Enable message search in encrypted rooms": "Sta zoeken in versleutelde gesprekken toe", - "Keep secret storage passphrase in memory for this session": "Onthoud in deze sessie het wachtwoord voor sleutelopslag", "How fast should messages be downloaded.": "Ophaalfrequentie van berichten.", "My Ban List": "Mijn banlijst", "This is your list of users/servers you have blocked - don't leave the room!": "Dit is de lijst van door u geblokkeerde servers/gebruikers. Verlaat dit gesprek niet!", - "Confirm the emoji below are displayed on both devices, in the same order:": "Bevestig dat beide apparaten dezelfde emoji’s in dezelfde volgorde tonen:", - "Verify this device by confirming the following number appears on its screen.": "Verifieer dit apparaat door te bevestigen dat het scherm het volgende getal toont.", "Waiting for %(displayName)s to verify…": "Wachten tot %(displayName)s geverifieerd heeft…", "They match": "Ze komen overeen", "They don't match": "Ze komen niet overeen", @@ -1775,14 +1638,11 @@ "Unable to load session list": "Kan sessielijst niet laden", "Delete %(count)s sessions|other": "%(count)s sessies verwijderen", "Delete %(count)s sessions|one": "%(count)s sessie verwijderen", - "The version of %(brand)s": "De versie van %(brand)s", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Of u %(brand)s op een apparaat gebruikt waarop een aanraakscherm de voornaamste invoermethode is", "Whether you're using %(brand)s as an installed Progressive Web App": "Of u %(brand)s gebruikt als een geïnstalleerde Progressive-Web-App", "Your user agent": "Uw gebruikersagent", - "The information being sent to us to help make %(brand)s better includes:": "De informatie die naar ons wordt verstuurd om %(brand)s te verbeteren bevat:", "If you cancel now, you won't complete verifying the other user.": "Als u nu annuleert zult u de andere gebruiker niet verifiëren.", "If you cancel now, you won't complete verifying your other session.": "Als u nu annuleert zult u uw andere sessie niet verifiëren.", - "If you cancel now, you won't complete your secret storage operation.": "Als u nu annuleert zal de sleutelopslag worden afgebroken.", "Cancel entering passphrase?": "Wachtwoordinvoer annuleren?", "Show typing notifications": "Typmeldingen weergeven", "Verify this session by completing one of the following:": "Verifieer deze sessie door een van het volgende te doen:", @@ -1803,7 +1663,6 @@ "Error adding ignored user/server": "Fout bij het toevoegen van een genegeerde gebruiker/server", "Something went wrong. Please try again or view your console for hints.": "Er is iets fout gegaan. Probeer het opnieuw of bekijk de console om voor meer informatie.", "Error subscribing to list": "Fout bij het abonneren op de lijst", - "Please verify the room ID or alias and try again.": "Controleer de gespreks-ID of -(bij)naam en probeer het opnieuw.", "Error removing ignored user/server": "Fout bij het verwijderen van genegeerde gebruiker/server", "Error unsubscribing from list": "Fout bij het opzeggen van een abonnement op de lijst", "Please try again or view your console for hints.": "Probeer het opnieuw of bekijk de console voor meer informatie.", @@ -1823,7 +1682,6 @@ "Subscribed lists": "Abonnementen op lijsten", "Subscribing to a ban list will cause you to join it!": "Wanneer u zich abonneert op een banlijst zal u eraan worden toegevoegd!", "If this isn't what you want, please use a different tool to ignore users.": "Als u dit niet wilt kunt u een andere methode gebruiken om gebruikers te negeren.", - "Room ID or alias of ban list": "Gespreks-ID of (bij)naam van banlijst", "Subscribe": "Abonneren", "Enable desktop notifications for this session": "Bureaubladmeldingen inschakelen voor deze sessie", "Enable audible notifications for this session": "Meldingen met geluid inschakelen voor deze sessie", @@ -1842,7 +1700,6 @@ "Session ID:": "Sessie-ID:", "Session key:": "Sessiesleutel:", "Message search": "Berichten zoeken", - "Sessions": "Sessies", "A session's public name is visible to people you communicate with": "De publieke naam van een sessie is zichtbaar voor de mensen waarmee u communiceert", "This room is bridging messages to the following platforms. Learn more.": "Dit gesprek wordt overbrugd naar de volgende platformen. Lees meer", "This room isn’t bridging messages to any platforms. Learn more.": "Dit gesprek wordt niet overbrugd naar andere platformen. Lees meer.", @@ -1853,10 +1710,6 @@ "Someone is using an unknown session": "Iemand gebruikt een onbekende sessie", "This room is end-to-end encrypted": "Dit gesprek is eind-tot-eind-versleuteld", "Everyone in this room is verified": "Iedereen in dit gesprek is geverifieerd", - "Some sessions for this user are not trusted": "Sommige sessies van deze gebruiker zijn niet vertrouwd", - "All sessions for this user are trusted": "Alle sessies van deze gebruiker zijn vertrouwd", - "Some sessions in this encrypted room are not trusted": "Sommige sessies in dit versleutelde gesprek zijn niet vertrouwd", - "All sessions in this encrypted room are trusted": "Alle sessies in dit versleutelde gesprek zijn vertrouwd", "Mod": "Mod", "rooms.": "gesprekken.", "Recent rooms": "Actuele gesprekken", @@ -1906,9 +1759,7 @@ "Show shortcuts to recently viewed rooms above the room list": "Snelkoppelingen naar de gesprekken die u recent heeft bekeken bovenaan de gesprekslijst weergeven", "Cancelling…": "Bezig met annuleren…", "%(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.": "In %(brand)s ontbreken enige modulen vereist voor het veilig lokaal bewaren van versleutelde berichten. Wilt u deze functie uittesten, compileer dan een aangepaste versie van %(brand)s Desktop die de zoekmodulen bevat.", - "%(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.": "Als %(brand)s in een webbrowser draait kan het versleutelde berichten niet veilig lokaal bewaren. Gebruik %(brand)s Desktop om versleutelde berichten doorzoekbaar te maken.", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Deze sessie maakt geen back-ups van uw sleutels, maar u beschikt over een reeds bestaande back-up waaruit u kunt herstellen en waaraan u nieuwe sleutels vanaf nu kunt toevoegen.", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Er is een back-upsleutel opgeslagen in de geheime opslag, maar deze functie is niet ingeschakeld voor deze sessie. Schakel kruiselings ondertekenen in in de experimentele instellingen om de sleutelback-upstatus te wijzigen.", "Customise your experience with experimental labs features. Learn more.": "Personaliseer uw ervaring met experimentele functies. Klik hier voor meer informatie.", "Cross-signing": "Kruiselings ondertekenen", "Your key share request has been sent - please check your other sessions for key share requests.": "Uw sleuteldeelverzoek is verstuurd - controleer de sleuteldeelverzoeken op uw andere sessies.", @@ -1922,7 +1773,6 @@ "Invite only": "Enkel op uitnodiging", "Close preview": "Voorbeeld sluiten", "Failed to deactivate user": "Deactiveren van gebruiker is mislukt", - "No sessions with registered encryption keys": "Geen sessies met geregistreerde versleutelingssleutels", "Send a reply…": "Verstuur een antwoord…", "Send a message…": "Verstuur een bericht…", "Room %(name)s": "Gesprek %(name)s", @@ -1954,7 +1804,6 @@ "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s%(userId)s heeft zich aangemeld bij een nieuwe sessie zonder deze te verifiëren:", "Ask this user to verify their session, or manually verify it below.": "Vraag deze gebruiker haar/zijn sessie te verifiëren, of verifieer die hieronder handmatig.", "Done": "Klaar", - "Manually Verify": "Handmatig verifiëren", "Trusted": "Vertrouwd", "Not trusted": "Niet vertrouwd", "%(count)s verified sessions|other": "%(count)s geverifieerde sessies", @@ -1976,9 +1825,6 @@ "Verify by comparing unique emoji.": "Verifieer door unieke emoji te vergelijken.", "You've successfully verified %(displayName)s!": "U heeft %(displayName)s geverifieerd!", "Got it": "Ik snap het", - "Verification timed out. Start verification again from their profile.": "De verificatie is verlopen. Begin het verificatieproces opnieuw via het profiel van de gebruiker.", - "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s heeft de verificatie geannuleerd. Begin het verificatieproces opnieuw via het profiel van de gebruiker.", - "You cancelled verification. Start verification again from their profile.": "U heeft de verificatie geannuleerd. Begin het verificatieproces opnieuw via het profiel van de gebruiker.", "Encryption enabled": "Versleuteling ingeschakeld", "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "De berichten in dit gesprek worden eind-tot-eind-versleuteld. Kom hier meer over te weten en verifieer de gebruiker via zijn/haar gebruikersprofiel.", "Encryption not enabled": "Versleuteling niet ingeschakeld", @@ -2033,11 +1879,8 @@ "Clear all data in this session?": "Alle gegevens in deze sessie verwijderen?", "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Het verwijderen van alle gegevens in deze sessie is onherroepelijk. Versleutelde berichten zullen verloren gaan, tenzij u een back-up van hun sleutels heeft.", "Verify session": "Sessie verifiëren", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Controleer of de sleutel in de gebruikersinstellingen op het apparaat overeenkomt met onderstaande sleutel om te verifiëren dat de sessie vertrouwd kan worden:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Neem contact op met de eigenaar op een andere manier (bv. onder vier ogen of met een telefoongesprek) en vraag of de sleutel in zijn/haar gebruikersinstellingen overeenkomt met onderstaande sleutel om te verifiëren dat de sessie vertrouwd kan worden:", "Session name": "Sessienaam", "Session key": "Sessiesleutel", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Als hij overeenkomt, klik dan op de knop ‘Verifiëren’. Zo niet is het mogelijk dat iemand deze sessie onderschept, en wilt u waarschijnlijk op de knop ‘Blokkeren’ klikken.", "Verification Requests": "Verificatieverzoeken", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Deze gebruiker verifiëren zal de sessie als vertrouwd markeren voor u en voor hem/haar.", "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.": "Verifieer dit apparaat om het als vertrouwd te markeren. Door dit apparaat te vertrouwen geeft u extra gemoedsrust aan uzelf en andere gebruikers bij het gebruik van eind-tot-eind-versleutelde berichten.", @@ -2055,12 +1898,7 @@ "Recent Conversations": "Recente gesprekken", "Suggestions": "Suggesties", "Recently Direct Messaged": "Recente tweegesprekken", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Als u iemand niet kunt vinden, vraag dan zijn/haar gebruikersnaam, deel uw eigen gebruikersnaam (%(userId)s) of profielkoppeling.", "Go": "Start", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Als u iemand niet kunt vinden, vraag dan zijn/haar gebruikersnaam (bv. @user:server.com) of deel dit gesprek.", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "U heeft een nieuwe sessie ‘%(displayName)s’ toegevoegd, die om versleutelingssleutels vraagt.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Uw ongeverifieerde sessie ‘%(displayName)s’ vraagt om versleutelingssleutels.", - "Loading session info...": "Sessie-info wordt geladen…", "Your account is not secure": "Uw account is onveilig", "Your password": "Uw wachtwoord", "This session, or the other session": "Deze sessie, of de andere sessie", @@ -2077,24 +1915,9 @@ "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Dit heeft meestal enkel een invloed op de manier waarop het gesprek door de server verwerkt wordt. Als u problemen met uw %(brand)s ondervindt, dien dan een foutmelding in.", "You'll upgrade this room from to .": "U werkt dit gesprek bij van naar .", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Daardoor kunt u na afmelding terugkeren tot uw account, en u bij andere sessies aanmelden.", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "U blokkeert momenteel niet-geverifieerde sessies; om berichten te sturen naar deze sessies moet u ze verifiëren.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "We raden u aan om het verificatieproces voor elke sessie te doorlopen om te bevestigen dat ze aan hun rechtmatige eigenaar toebehoren, maar u kunt het bericht ook opnieuw versturen zonder verificatie indien u dit wenst.", - "Room contains unknown sessions": "Gesprek bevat onbekende sessies", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "‘%(RoomName)s’ bevat sessies die u nog niet eerder gezien heeft.", - "Unknown sessions": "Onbekende sessies", "Verification Request": "Verificatieverzoek", - "Enter secret storage passphrase": "Voer het wachtwoord voor de geheime opslag in", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Kan geen toegang verkrijgen tot geheime opslag. Controleer of u het juiste wachtwoord heeft ingevoerd.", - "Warning: You should only access secret storage from a trusted computer.": "Let op: open de geheime opslag enkel op een computer die u vertrouwt.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Verkrijg de toegang tot uw beveiligde berichtgeschiedenis en uw identiteit voor kruiselings ondertekenen voor het verifiëren van andere sessies door uw wachtwoord in te voeren.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Als u uw wachtwoord vergeten bent, kunt u uw herstelsleutel gebruiken of nieuwe herstelopties instellen.", - "Enter secret storage recovery key": "Voer de herstelsleutel voor de geheime opslag in", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Kan geen toegang verkrijgen tot geheime opslag. Controleer of u de juiste herstelsleutel heeft ingevoerd.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Verkrijg de toegang tot uw beveiligde berichtgeschiedenis en uw identiteit voor kruiselings ondertekenen voor het verifiëren van andere sessies door uw herstelsleutel in te voeren.", - "If you've forgotten your recovery key you can .": "Als u uw herstelsleutel vergeten bent, kunt u .", "Recovery key mismatch": "Herstelsleutel komt niet overeen", "Incorrect recovery passphrase": "Onjuist herstelwachtwoord", - "Backup restored": "Back-up teruggezet", "Enter recovery passphrase": "Voer het herstelwachtwoord in", "Enter recovery key": "Voer de herstelsleutel in", "Warning: You should only set up key backup from a trusted computer.": "Let op: stel sleutelback-up enkel in op een vertrouwde computer.", @@ -2108,13 +1931,8 @@ "Country Dropdown": "Landselectie", "Confirm your identity by entering your account password below.": "Bevestig uw identiteit door hieronder uw accountwachtwoord in te voeren.", "No identity server is configured so you cannot add an email address in order to reset your password in the future.": "Er is geen identiteitsserver geconfigureerd, dus u kunt geen e-mailadres toevoegen om in de toekomst een nieuw wachtwoord in te stellen.", - "Message not sent due to unknown sessions being present": "Bericht niet verstuurd, er zijn onbekende sessies aanwezig", - "Show sessions, send anyway or cancel.": "Sessies tonen, toch versturen of annuleren.", "Jump to first unread room.": "Ga naar het eerste ongelezen gesprek.", "Jump to first invite.": "Ga naar de eerste uitnodiging.", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", - "Complete security": "Vervolledig de beveiliging", - "Verify this session to grant it access to encrypted messages.": "Verifieer deze sessie om toegang te verkrijgen tot uw versleutelde berichten.", "Session verified": "Sessie geverifieerd", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Uw nieuwe sessie is nu geverifieerd. Ze heeft nu toegang tot uw versleutelde berichten, en de sessie zal voor andere gebruikers als vertrouwd gemarkeerd worden.", "Your new session is now verified. Other users will see it as trusted.": "Uw nieuwe sessie is nu geverifieerd. Ze zal voor andere gebruikers als vertrouwd gemarkeerd worden.", @@ -2126,27 +1944,19 @@ "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.": "Let op: uw persoonlijke gegevens (waaronder versleutelingssleutels) zijn nog steeds opgeslagen in deze sessie. Wis ze wanneer u klaar bent met deze sessie, of wanneer u zich wilt aanmelden met een andere account.", "Command Autocomplete": "Opdrachten automatisch aanvullen", "DuckDuckGo Results": "DuckDuckGo-resultaten", - "Sender session information": "Sessie-informatie van afzender", "Enter your account password to confirm the upgrade:": "Voer uw accountwachtwoord in om het bijwerken te bevestigen:", "Restore your key backup to upgrade your encryption": "Herstel uw sleutelback-up om uw versleuteling bij te werken", "Restore": "Herstellen", "You'll need to authenticate with the server to confirm the upgrade.": "U zult zich moeten aanmelden bij de server om het bijwerken te bevestigen.", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Werk deze sessie bij om er andere sessies mee te verifiëren, waardoor deze ook de toegang verkrijgen tot uw versleutelde berichten en voor andere gebruikers als vertrouwd gemarkeerd worden.", - "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Stel versleuteling in voor deze sessie om er andere sessies mee te verifiëren, waardoor deze ook de toegang verkrijgen tot uw versleutelde berichten en voor andere gebruikers als vertrouwd gemarkeerd worden.", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Beveilig uw versleutelingssleutels met een wachtwoord. Voor een optimale beveiliging moet dit verschillen van uw accountwachtwoord:", - "Enter a passphrase": "Voer een wachtwoord in", - "Back up my encryption keys, securing them with the same passphrase": "Maak een back-up van mijn versleutelingssleutels, en beveilig ze met hetzelfde wachtwoord", "Set up with a recovery key": "Instellen met een herstelsleutel", - "Enter your passphrase a second time to confirm it.": "Voer uw wachtwoord nogmaals in ter bevestiging.", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Bewaar een kopie op een veilige plaats, zoals in een wachtwoordbeheerder of een kluis.", "Your recovery key": "Uw herstelsleutel", "Copy": "Kopiëren", "Your recovery key has been copied to your clipboard, paste it to:": "Uw herstelsleutel is gekopieerd naar uw klembord, plak hem en:", "Your recovery key is in your Downloads folder.": "Uw herstelsleutel bevindt zich in uw Downloads-map.", - "You can now verify your other devices, and other users to keep your chats safe.": "U kunt nu uw andere apparaten evenals andere gebruikers verifiëren om uw gesprekken te beveiligen.", "Upgrade your encryption": "Werk uw versleuteling bij", "Make a copy of your recovery key": "Maak een kopie van uw herstelsleutel", - "You're done!": "Klaar!", "Unable to set up secret storage": "Kan geheime opslag niet instellen", "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.": "Zonder veilig berichtherstel in te stellen zult u uw versleutelde berichtgeschiedenis niet kunnen herstellen als u zich afmeldt of een andere sessie gebruikt.", "Create key backup": "Sleutelback-up aanmaken", @@ -2154,19 +1964,14 @@ "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Deze sessie heeft gedetecteerd dat uw herstelwachtwoord en -sleutel voor beveiligde berichten verwijderd zijn.", "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.": "Als u dit per ongeluk heeft gedaan, kunt u beveiligde berichten op deze sessie instellen, waarmee de berichtgeschiedenis van deze sessie opnieuw zal versleuteld worden aan de hand van een nieuwe herstelmethode.", "Disable": "Uitschakelen", - "Not currently downloading messages for any room.": "Er worden momenteel geen berichten gedownload.", - "Downloading mesages for %(currentRoom)s.": "Er worden berichten gedownload voor %(currentRoom)s.", "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s bewaart versleutelde berichten veilig in het lokale cachegeheugen om ze in uw zoekresultaten te laten verschijnen:", "Space used:": "Gebruikte ruimte:", "Indexed messages:": "Geïndexeerde berichten:", - "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s van %(totalRooms)s", "Message downloading sleep time(ms)": "Wachttijd voor downloaden van berichten (ms)", "Mark all as read": "Alles markeren als gelezen", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Bekijk eerst het beveiligingsopenbaarmakingsbeleid van Matrix.org als u een probleem met de beveiliging van Matrix wilt melden.", "Not currently indexing messages for any room.": "Er worden momenteel voor geen enkel gesprek berichten geïndexeerd.", - "Currently indexing: %(currentRoom)s.": "Wordt geïndexeerd: %(currentRoom)s.", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s van %(totalRooms)s", - "Unverified login. Was this you?": "Ongeverifieerde aanmelding. Was u dit?", "Where you’re logged in": "Waar u aangemeld bent", "Manage the names of and sign out of your sessions below or verify them in your User Profile.": "Beheer hieronder de namen van uw sessies en meld ze af. Of verifieer ze in uw gebruikersprofiel.", "Use Single Sign On to continue": "Ga verder met Eenmalige Aanmelding", @@ -2177,7 +1982,6 @@ "Confirm adding this phone number by using Single Sign On to prove your identity.": "Bevestig uw identiteit met Eenmalige Aanmelding om dit telefoonnummer toe te voegen.", "Confirm adding phone number": "Bevestig toevoegen van het telefoonnummer", "Click the button below to confirm adding this phone number.": "Klik op de knop hieronder om het toevoegen van dit telefoonnummer te bevestigen.", - "Review Sessions": "Sessies nazien", "If you cancel now, you won't complete your operation.": "Als u de operatie afbreekt kunt u haar niet voltooien.", "Review where you’re logged in": "Kijk na waar u aangemeld bent", "New login. Was this you?": "Nieuwe aanmelding - was u dat?", @@ -2204,7 +2008,6 @@ "Opens chat with the given user": "Start een tweegesprek met die gebruiker", "Sends a message to the given user": "Zendt die gebruiker een bericht", "Font scaling": "Lettergrootte", - "Use the improved room list (in development - refresh to apply changes)": "Gebruik de verbeterde gesprekslijst (in ontwikkeling - ververs om veranderingen te zien)", "Verify all your sessions to ensure your account & messages are safe": "Controleer al uw sessies om zeker te zijn dat uw account & berichten veilig zijn", "Verify the new login accessing your account: %(name)s": "Verifieer de nieuwe aanmelding op uw account: %(name)s", "Confirm your account deactivation by using Single Sign On to prove your identity.": "Bevestig uw intentie deze account te sluiten door met Single Sign On uw identiteit te bewijzen.", @@ -2219,7 +2022,6 @@ "Your homeserver has exceeded its user limit.": "Uw thuisserver heeft het maximaal aantal gebruikers overschreden.", "Your homeserver has exceeded one of its resource limits.": "Uw thuisserver heeft een van zijn limieten overschreden.", "Ok": "Oké", - "sent an image.": "heeft een plaatje gestuurd.", "Light": "Helder", "Dark": "Donker", "Set password": "Stel wachtwoord in", diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json index e529805efc..5a4f30b5c4 100644 --- a/src/i18n/strings/nn.json +++ b/src/i18n/strings/nn.json @@ -1,21 +1,15 @@ { "This phone number is already in use": "Dette telefonnummeret er allereie i bruk", - "The version of %(brand)s": "Utgåva av %(brand)s", + "The version of %(brand)s": "Gjeldande versjon av %(brand)s", "Your homeserver's URL": "Heimtenaren din si nettadresse", "Your device resolution": "Eininga di sin oppløysing", - "The information being sent to us to help make %(brand)s better includes:": "Informasjonen som vert send til oss for å gjera %(brand)s betre er mellom anna:", + "The information being sent to us to help make %(brand)s better includes:": "Informasjon sendt til oss for å forbetre %(brand)s inkluderar:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Der denne sida inneheld gjenkjenneleg informasjon, slik som ein rom-, brukar- eller gruppeID, vert denne informasjonen sletta før han sendast til tenar.", "Call Failed": "Oppringjing Mislukkast", - "Review Devices": "Sjå Over Einingar", - "Call Anyway": "Ring Likevel", - "Answer Anyway": "Svar Likevel", - "Call": "Ring", - "Answer": "Svar", "You are already in a call.": "Du er allereie i ei samtale.", "VoIP is unsupported": "VoIP er ikkje støtta", "You cannot place VoIP calls in this browser.": "Du kan ikkje utføra samtalar med VoIP i denne nettlesaren.", "You cannot place a call with yourself.": "Du kan ikkje samtala med deg sjølv.", - "Could not connect to the integration server": "Kunne ikkje kopla til integreringstenaren", "Call in Progress": "Ei Samtale er i Gang", "A call is currently being placed!": "Ei samtale held allereie på å starta!", "A call is already in progress!": "Ei samtale er i gang allereie!", @@ -54,7 +48,6 @@ "Which rooms would you like to add to this community?": "Kva rom vil du leggja til i dette fellesskapet?", "Show these rooms to non-members on the community page and room list?": "Vis desse romma til ikkje-medlem på fellesskapssida og romkatalogen?", "Add rooms to the community": "Legg til rom i fellesskapet", - "Room name or alias": "Romnamn eller alias", "Add to community": "Legg til i fellesskapet", "Failed to invite the following users to %(groupId)s:": "Fekk ikkje til å invitera følgjande brukarar i %(groupId)s:", "Failed to invite users to community": "Fekk ikkje til å invitera brukarar til fellesskapet.", @@ -69,7 +62,6 @@ "Restricted": "Avgrensa", "Moderator": "Moderator", "Admin": "Administrator", - "Start a chat": "Start ein samtale", "Operation failed": "Handling mislukkast", "Failed to invite": "Fekk ikkje til å invitera", "Failed to invite the following users to the %(roomName)s room:": "Fekk ikkje til å invitera følgjande brukarar til %(roomName)s:", @@ -92,9 +84,7 @@ "/ddg is not a command": "/ddg er ikkje ein kommando", "Changes your display nickname": "Forandrar kallenamnet ditt", "Invites user with given id to current room": "Inviter brukarar med fylgjande ID inn i gjeldande rom", - "Joins room with given alias": "Gjeng inn i eit rom med det gjevne aliaset", "Leave room": "Forlat rommet", - "Unrecognised room alias:": "Ukjend romalias:", "Kicks user with given id": "Sparkar brukarar med gjeven ID", "Bans user with given id": "Stengjer brukarar med den gjevne IDen ute", "Ignores a user, hiding their messages from you": "Overser ein brukar, slik at meldingane deira ikkje synast for deg", @@ -107,18 +97,14 @@ "This email address is already in use": "Denne e-postadressa er allereie i bruk", "The platform you're on": "Platformen du er på", "Failed to verify email address: make sure you clicked the link in the email": "Fekk ikkje til å stadfesta e-postadressa: sjå til at du klikka på den rette lenkja i e-posten", - "Your identity server's URL": "Din identitetstenar si nettadresse", "Every page you use in the app": "Alle sider du brukar i programmet", "e.g. ": "t.d. ", - "Your User Agent": "Din Brukaragent", "Analytics": "Statistikk", "Unable to capture screen": "Klarte ikkje ta opp skjermen", "Existing Call": "Samtale er i gang", "To use it, just wait for autocomplete results to load and tab through them.": "For å bruka den, vent på at resultata fyller seg ut og tab gjennom dei.", "Deops user with given id": "AvOPar brukarar med den gjevne IDen", "Opens the Developer Tools dialog": "Opnar Utviklarverktøy-tekstboksen", - "Unverify": "Fjern verifikasjon", - "Verify...": "Godkjenn...", "Which officially provided instance you are using, if any": "Kva offisielt gjevne instanse du brukar, viss nokon", "The remote side failed to pick up": "Den andre sida tok ikkje røret", "Verified key": "Godkjend nøkkel", @@ -168,7 +154,6 @@ "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget fjerna av %(senderName)s", "Failure to create room": "Klarte ikkje å laga rommet", "Server may be unavailable, overloaded, or you hit a bug.": "Tenaren er kanskje utilgjengeleg, overlasta elles så traff du ein bug.", - "Send anyway": "Send likevel", "Send": "Send", "Unnamed Room": "Rom utan namn", "Your browser does not support the required cryptography extensions": "Nettlesaren din støttar ikkje dei naudsynte kryptografiske utvidingane", @@ -176,13 +161,10 @@ "Authentication check failed: incorrect password?": "Authentiseringsforsøk mislukkast: feil passord?", "Failed to join room": "Fekk ikkje til å gå inn i rom", "Message Pinning": "Meldingsfesting", - "Use compact timeline layout": "Bruk kompakt utforming for historikk", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Vis tidspunkt i 12-timarsform (t.d. 2:30pm)", "Always show message timestamps": "Vis alltid meldingstidspunkt", "Autoplay GIFs and videos": "Spel av GIFar og videoar med ein gong", "Always show encryption icons": "Vis alltid krypteringsikon", - "Disable Notifications": "Skru Varsel av", - "Enable Notifications": "Skru Varsel på", "Automatically replace plain text Emoji": "Erstatt Emojiar i klartekst av seg sjølv", "Mirror local video feed": "Spegl den lokale videofeeden", "Send analytics data": "Send statistikkdata", @@ -226,7 +208,6 @@ "Confirm password": "Stadfest passord", "Change Password": "Endra Passord", "Authentication": "Authentisering", - "Device ID": "EiningsID", "Last seen": "Sist sedd", "Failed to set display name": "Fekk ikkje til å setja visningsnamn", "Error saving email notification preferences": "Klarte ikkje å lagra varslingsinnstillingar for e-post", @@ -247,7 +228,6 @@ "Unable to fetch notification target list": "Klarte ikkje å henta varselmållista", "Notification targets": "Varselmål", "Advanced notification settings": "Avanserte varslingsinnstillingar", - "There are advanced notifications which are not shown here": "Det finst avanserte varslingar som ikkje er synlege her", "Show message in desktop notification": "Vis meldinga i eit skriverbordsvarsel", "Off": "Av", "On": "På", @@ -266,8 +246,6 @@ "Options": "Innstillingar", "Key request sent.": "Nykelforespurnad er send.", "Please select the destination room for this message": "Vel kva rom som skal få denne meldinga", - "Blacklisted": "Svartelista", - "device id: ": "einingsID: ", "Disinvite": "Fjern invitasjon", "Kick": "Spark ut", "Disinvite this user?": "Fjern invitasjonen for denne brukaren?", @@ -282,7 +260,6 @@ "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.": "Du kan ikkje gjera om på denne endringa sidan du senkar tilgangsnivået ditt. Viss du er den siste privilegerte brukaren i rommet vil det bli umogleg å få tilbake tilgangsrettane.", "Demote": "Degrader", "Failed to mute user": "Fekk ikkje til å dempe brukaren", - "Failed to toggle moderator status": "Fekk ikkje til å skifte moderatorstatus", "Failed to change power level": "Fekk ikkje til å endra tilgangsnivået", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Du kan ikkje angre denne endringa, fordi brukaren du forfremmar vil få same tilgangsnivå som du har no.", "Are you sure?": "Er du sikker?", @@ -292,12 +269,8 @@ "Invite": "Inviter", "Enable inline URL previews by default": "Skru URL-førehandsvising i tekstfeltet på", "Share Link to User": "Del ei lenke til brukaren", - "User Options": "Brukarinnstillingar", - "Direct chats": "Direktesamtalar", "Unmute": "Fjern demping", "Mute": "Demp", - "Revoke Moderator": "Fjern Moderatorrettigheit", - "Make Moderator": "Gjer til Moderator", "Admin Tools": "Administratorverktøy", "and %(count)s others...|other": "og %(count)s andre...", "and %(count)s others...|one": "og ein annan...", @@ -309,9 +282,7 @@ "Video call": "Videosamtale", "Upload file": "Last opp fil", "Send an encrypted reply…": "Send eit kryptert svar…", - "Send a reply (unencrypted)…": "Send eit svar (ukryptert)…", "Send an encrypted message…": "Send ei kryptert melding…", - "Send a message (unencrypted)…": "Send ei melding (ukryptert)…", "You do not have permission to post to this room": "Du har ikkje lov til å senda meldingar i dette rommet", "Server error": "Noko gjekk gale med tenaren", "Server unavailable, overloaded, or something else went wrong.": "Tenar utilgjengeleg, overlasta eller har eit anna problem.", @@ -393,10 +364,7 @@ "Show Stickers": "Vis klistremerker", "Jump to first unread message.": "Hopp til den fyrste uleste meldinga.", "Close": "Lukk", - "Remote addresses for this room:": "Fjernadresser for dette rommet:", - "Local addresses for this room:": "Lokaladresser for dette rommet:", "This room has no local addresses": "Dette rommet har ingen lokale adresser", - "New address (e.g. #foo:%(localDomain)s)": "Ny adresse (t.d. #foo:%(localDomain)s)", "Invalid community ID": "Ugyldig fellesskaps-ID", "'%(groupId)s' is not a valid community ID": "'%(groupId)s' er ikkje ein gyldig fellesskaps-ID", "Flair": "Etikett", @@ -430,11 +398,7 @@ "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s endra romavataren til ", "Copied!": "Kopiert!", "Failed to copy": "Noko gjekk gale med kopieringa", - "Removed or unknown message type": "Fjerna eller ukjend meldingssort", - "Message removed by %(userId)s": "Meldinga vart fjerna av %(userId)s", - "Message removed": "Meldinga vart fjerna", "Dismiss": "Avvis", - "To continue, please enter your password.": "For å gå fram, ver venleg og skriv passordet ditt inn.", "An email has been sent to %(emailAddress)s": "En epost vart send til %(emailAddress)s", "Please check your email to continue registration.": "Ver venleg og sjekk eposten din for å gå vidare med påmeldinga.", "A text message has been sent to %(msisdn)s": "Ei tekstmelding vart send til %(msisdn)s", @@ -468,14 +432,11 @@ "Something went wrong when trying to get your communities.": "Noko gjekk gale under innlasting av fellesskapa du er med i.", "Display your community flair in rooms configured to show it.": "Vis fellesskaps-etiketten din i rom som er stilt inn til å visa det.", "You're not currently a member of any communities.": "Du er for tida ikkje medlem i nokon fellesskap.", - "Yes, I want to help!": "Ja, eg vil vera til nytte!", "You are not receiving desktop notifications": "Du fær ikkje skrivebordsvarsel", "Enable them now": "Skru dei på no", "What's New": "Kva er nytt", "Update": "Oppdatering", "What's new?": "Kva er nytt?", - "A new version of %(brand)s is available.": "Ein ny versjon av %(brand)s er tilgjengeleg.", - "To return to your account in future you need to set a password": "For å gå tilbake til brukaren din i framtida må du setja eit passord", "Set Password": "Set Passord", "Error encountered (%(errorDetail)s).": "Noko gjekk gale (%(errorDetail)s).", "Checking for an update...": "Ser etter oppdateringar...", @@ -491,8 +452,6 @@ "An error ocurred whilst trying to remove the widget from the room": "Noko gjekk gale med fjerninga av widgeten frå rommet", "Edit": "Gjer om", "Create new room": "Lag nytt rom", - "Unblacklist": "Fjern frå svartelista", - "Blacklist": "Legg til i svartelista", "No results": "Ingen resultat", "Communities": "Fellesskap", "Home": "Heim", @@ -594,7 +553,6 @@ "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.": "Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine tyder at meldingar du har send ikkje vil verta delt med nye, ikkje-innmeldte brukarar, men brukare som er meldt på som allereie har tilgang til desse meldingane vil fortsatt kunne sjå kopien deira.", "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)": "Ver venleg og gløym alle meldingane eg har send når brukaren min vert avliven (Åtvaring: dette gjer at framtidige brukarar ikkje fær eit fullstendig oversyn av samtalene)", "To continue, please enter your password:": "For å gå fram, ver venleg og skriv passordet ditt inn:", - "I verify that the keys match": "Eg stadfestar at nyklane samsvarar", "Back": "Attende", "Event sent!": "Hending send!", "Event Type": "Hendingsort", @@ -605,10 +563,6 @@ "Toolbox": "Verktøykasse", "Developer Tools": "Utviklarverktøy", "An error has occurred.": "Noko gjekk gale.", - "Start verification": "Start verifikasjon", - "Share without verifying": "Del utan å godkjenna", - "Ignore request": "Ignorer førespurnad", - "Encryption key request": "Krypteringsnykel-førespurnad", "Sign out": "Logg ut", "Clear Storage and Sign Out": "Tøm Lager og Logg Ut", "Send Logs": "Send Loggar", @@ -648,7 +602,6 @@ "COPY": "KOPIER", "Private Chat": "Lukka Samtale", "Public Chat": "Offentleg Samtale", - "Alias (optional)": "Alias (valfritt)", "Reject invitation": "Sei nei til innbyding", "Are you sure you want to reject the invitation?": "Er du sikker på at du vil seia nei til innbydinga?", "Unable to reject invite": "Klarte ikkje å seia nei til innbydinga", @@ -745,17 +698,14 @@ "Notifications": "Varsel", "Invite to this community": "Inviter til dette fellesskapet", "The server may be unavailable or overloaded": "Tenaren er kanskje utilgjengeleg eller overlasta", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Slette rommaliaset %(alias)s og fjern %(name)s frå romkatalogen?", "Remove %(name)s from the directory?": "Fjern %(name)s frå romkatalogen?", "Remove from Directory": "Fjern frå romkatalog", "remove %(name)s from the directory.": "fjern %(name)s frå romkatalogen.", - "delete the alias.": "slett aliaset.", "Unable to join network": "Klarte ikkje å bli med i nettverket", "%(brand)s does not know how to join a room on this network": "%(brand)s veit ikkje korleis den kan bli med i rom på dette nettverket", "Room not found": "Fann ikkje rommet", "Couldn't find a matching Matrix room": "Kunne ikkje finna eit samsvarande Matrix-rom", "Fetching third party location failed": "Noko gjekk gale under henting av tredjepartslokasjon", - "Scroll to bottom of page": "Blad til botnen", "You can't send any messages until you review and agree to our terms and conditions.": "Du kan ikkje senda meldingar før du les over og godkjenner våre bruksvilkår.", "%(count)s of your messages have not been sent.|other": "Nokre av meldingane dine vart ikkje sende.", "%(count)s of your messages have not been sent.|one": "Meldinga di vart ikkje send.", @@ -769,7 +719,6 @@ "You seem to be in a call, are you sure you want to quit?": "Det ser ut til at du er i ein samtale, er du sikker på at du vil avslutte?", "Search failed": "Søket feila", "No more results": "Ingen fleire resultat", - "Unknown room %(roomId)s": "Ukjend rom %(roomId)s", "Room": "Rom", "Failed to reject invite": "Fekk ikkje til å avstå invitasjonen", "Fill screen": "Fyll skjermen", @@ -783,8 +732,6 @@ "Uploading %(filename)s and %(count)s others|other": "Lastar opp %(filename)s og %(count)s andre", "Uploading %(filename)s and %(count)s others|zero": "Lastar opp %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Lastar opp %(filename)s og %(count)s andre", - "Light theme": "Lyst tema", - "Dark theme": "Mørkt tema", "Success": "Suksess", "Unable to remove contact information": "Klarte ikkje å fjerna kontaktinfo", "": "", @@ -838,20 +785,7 @@ "Notify the whole room": "Varsle heile rommet", "Room Notification": "Romvarsel", "Users": "Brukarar", - "unknown device": "ukjend eining", - "NOT verified": "IKKJE godkjend", - "verified": "godkjend", - "Verification": "Verifikasjon", - "Ed25519 fingerprint": "Ed25519-fingeravtrykk", - "User ID": "Brukar-ID", - "Curve25519 identity key": "Curve25519-identitetsnøkkel", - "none": "ingen", - "Algorithm": "Algoritme", - "unencrypted": "ikkje-kryptert", - "Decryption error": "Noko gjekk gale med dekrypteringa", "Session ID": "Økt-ID", - "End-to-end encryption information": "Ende-til-ende-krypteringsinfo", - "Event information": "Hendingsinfo", "Passphrases must match": "Passfrasane må vere identiske", "Passphrase must not be empty": "Passfrasefeltet kan ikkje stå tomt", "Enter passphrase": "Skriv inn passfrase", @@ -860,7 +794,6 @@ "Call Timeout": "Tidsavbrot i Samtala", "Enable automatic language detection for syntax highlighting": "Skru automatisk måloppdaging på for syntax-understreking", "Export E2E room keys": "Hent E2E-romnøklar ut", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Det kan henda at du stilte dei inn på ein annan klient enn %(brand)s. Du kan ikkje stilla på dei i %(brand)s men dei gjeld framleis", "Jump to read receipt": "Hopp til lesen-lappen", "Filter room members": "Filtrer rommedlemmar", "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.": "Når nokon legg ein URL med i meldinga si, kan ei URL-førehandsvising visast for å gje meir info om lenkja slik som tittelen, skildringa, og eit bilete frå nettsida.", @@ -869,8 +802,6 @@ "Filter community members": "Filtrer fellesskapssmedlemmar", "Custom Server Options": "Tilpassa tenar-innstillingar", "Filter community rooms": "Filtrer rom i fellesskapet", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Hjelp oss å forbetra %(brand)s ved å senda anonym brukardata. Dette brukar informasjonskapslar (les gjerne vår Cookie-policy).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Hjelp oss å forbetra %(brand)s ved å senda anonym brukardata. Dette brukar informasjonskapslar (cookies).", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Om du brukar Riktekst-innstillinga på Riktekstfeltet", "This room is not accessible by remote Matrix servers": "Rommet er ikkje tilgjengeleg for andre Matrix-heimtenarar", "Add an Integration": "Legg tillegg til", @@ -895,7 +826,6 @@ "Profile": "Brukar", "Access Token:": "Tilgangs-token:", "This homeserver doesn't offer any login flows which are supported by this client.": "Heimetenaren tilbyr ingen innloggingsmetodar som er støtta av denne klienten.", - "Claimed Ed25519 fingerprint key": "Gjorde krav på Ed25519-fingeravtrykksnøkkel", "Export room keys": "Eksporter romnøklar", "Export": "Eksporter", "Import room keys": "Importer romnøklar", @@ -963,34 +893,18 @@ "You cannot sign in to your account. Please contact your homeserver admin for more information.": "Du har ikkje muligheit til å logge på kontoen din. Kontakt systemadministratoren for meir informasjon.", "You're signed out": "Du er no avlogga", "Clear personal data": "Fjern personlege data", - "Great! This passphrase looks strong enough.": "Flott! Denne passfrasen virkar til å vere sterk nok.", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Vi vil lagre ein kryptert kopi av nøklane dine på vår server. Vern sikkerheitskopien din med ein passfrase.", "For maximum security, this should be different from your account password.": "For maksimal sikkerheit, bør dette vere noko anna enn kontopassordet ditt.", - "Enter a passphrase...": "Skriv inn ein passfrase...", - "Set up with a Recovery Key": "Sett opp med ein gjenopprettingsnøkkel", "That matches!": "Dette stemmer!", "That doesn't match.": "Dette stemmer ikkje.", "Go back to set it again.": "Gå tilbake for å sette den på nytt.", - "Please enter your passphrase a second time to confirm.": "Skriv inn passfrasen din ein gong til for å stadfeste.", - "Repeat your passphrase...": "Gjenta din passfrase...", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Som eit sikkerheitsnett, kan du bruke den til å gjenopprette den krypterte meldingshistorikken i tilfelle du gløymer gjennopprettingsnøkkelen.", - "As a safety net, you can use it to restore your encrypted message history.": "Som eit sikkerheitsnett, kan du bruke den til å gjenopprette den krypterte meldingshistorikken.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Gjennopprettingsnøkkelen eit sikkerheitsnett, kan du bruke den til å gjenopprette den krypterte meldingshistorikken i tilfelle du gløymer passfrasen.", - "Your Recovery Key": "Gjenopprettingsnøkkelen din", - "Copy to clipboard": "Kopier til utklippstavle", "Download": "Last ned", "Print it and store it somewhere safe": "Skriv ut og ta vare på den på ein trygg stad", "Save it on a USB key or backup drive": "Lagre til ein USB-pinne eller sikkerheitskopidisk", "Copy it to your personal cloud storage": "Kopier den til personleg skylagring", "Your keys are being backed up (the first backup could take a few minutes).": "Nøklane dine blir sikkerheitskopiert (den første kopieringa kan ta nokre minutt).", "Set up Secure Message Recovery": "Sett opp sikker gjenoppretting for meldingar", - "Secure your backup with a passphrase": "Gjer sikkerheitskopien trygg med ein passfrase", - "Confirm your passphrase": "Stadfest passfrasen din", - "Recovery key": "Gjenopprettingsnøkkel", - "Keep it safe": "Lagre den trygt", "Starting backup...": "Startar sikkerheitskopiering...", "Success!": "Suksess!", - "Create Key Backup": "Lag sikkerheitskopi av nøkkel", "Unable to create key backup": "Klarte ikkje å lage sikkerheitskopi av nøkkelen", "Retry": "Prøv om att", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Utan å sette opp sikker gjenoppretting for meldingar (Secure Message Recovery) vil meldingshistorikken gå tapt når du loggar av.", @@ -1010,14 +924,11 @@ "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Spør administratoren for din heimetenar%(homeserverDomain)s om å setje opp ein \"TURN-server\" slik at talesamtalar fungerer på rett måte.", "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.": "Alternativt, kan du prøva å nytta den offentlege tenaren på turn.matrix.org, men det kan vera mindre stabilt og IP-adressa di vil bli delt med den tenaren. Du kan og endra på det under Innstillingar.", "Try using turn.matrix.org": "Prøv med å nytta turn.matrix.org", - "A conference call could not be started because the integrations server is not available": "Ein konferansesamtale kunne ikkje starta fordi integrasjons-tenaren er utilgjengeleg", "Replying With Files": "Send svar med filer", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Nett no er det ikkje mogleg å senda svar med ei fil. Vil du lasta opp denne fila utan å senda svaret?", "The file '%(fileName)s' failed to upload.": "Fila '%(fileName)s' vart ikkje lasta opp.", "The server does not support the room version specified.": "Tenaren støttar ikkje den spesifikke versjonen av rommet.", "Name or Matrix ID": "Namn eller Matrix ID", - "Registration Required": "Registrering er obligatorisk", - "You need to register to do this. Would you like to register now?": "Du må registrera for å gjera dette. Ynskjer du å registrera no?", "Failed to invite users to the room:": "Fekk ikkje til å invitera brukarar til rommet:", "Messages": "Meldingar", "Actions": "Handlingar", @@ -1046,22 +957,17 @@ "Displays list of commands with usages and descriptions": "Viser ei liste over kommandoar med bruksområde og skildringar", "%(senderName)s made no change.": "%(senderName)s utførde ingen endring.", "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s oppgraderte dette rommet.", - "The version of %(brand)s": "Gjeldande versjon av %(brand)s", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Om du brukar %(brand)s på ein innretning som er satt opp for touch-skjerm", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Om du nyttar funksjonen 'breadcrumbs' (avatarane over romkatalogen)", "Whether you're using %(brand)s as an installed Progressive Web App": "Om din %(brand)s er installert som ein webapplikasjon (Progressive Web App)", "Your user agent": "Din nettlesar (User-Agent)", - "The information being sent to us to help make %(brand)s better includes:": "Informasjon sendt til oss for å forbetre %(brand)s inkluderar:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Det er ukjende økter i dette rommet: om går vidare utan å verifisere dei, kan andre avlytte samtalen.", "If you cancel now, you won't complete verifying the other user.": "Om du avbryter no, vil dette stoppe verifikasjonsprosessen for den andre brukaren.", "If you cancel now, you won't complete verifying your other session.": "Om du avbryter no, vil dette stoppe verifikasjonsprosessen for den andre økta.", - "If you cancel now, you won't complete your secret storage operation.": "Om du avbryter no, vil dette stoppe opprettinga av det hemmelege lageret.", "Cancel entering passphrase?": "Avbryte inntasting av passfrase ?", "Setting up keys": "Setter opp nøklar", "Verify this session": "Stadfest denne økta", "Encryption upgrade available": "Kryptering kan oppgraderast", "Set up encryption": "Sett opp kryptering", - "Unverified session": "Uverifisert sesjon", "Identity server has no terms of service": "Identitetstenaren manglar bruksvilkår", "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.": "Denne handlinga krev kommunikasjon mot (standard identitetstenar) for å verifisere e-post eller telefonnummer, men tenaren manglar bruksvilkår.", "Only continue if you trust the owner of the server.": "Gå vidare så lenge du har tillit til eigar av tenaren.", @@ -1084,14 +990,6 @@ "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s satte etikett for %(groups)s i dette rommet.", "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s deaktiverte etikettar for %(groups)s i dette rommet.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s har aktivert etikettar for %(newGroups)s, og deaktivert etikettar for %(oldGroups)s i dette rommet.", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s la til %(addedAddresses)s og %(count)s andre adresser i dette rommet", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s la til %(addedAddresses)s som adresser for dette rommet.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s la til %(addedAddresses)s som adresse for dette rommet.", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s fjerna %(removedAddresses)s og %(count)s andre som adresse for dette rommet", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s fjerna %(removedAddresses)s som adresser for dette rommet.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s fjerna %(removedAddresses)s som adresse for dette rommet.", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s fjerna %(countRemoved)s og la til %(countAdded)s adresser for dette rommet", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s la til %(addedAddresses)s og tok vekk %(removedAddresses)s som adresser for dette rommet.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s satte standardadressa for dette rommet til %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s fjerna standardadressa for dette rommet.", "%(senderName)s placed a voice call.": "%(senderName)s starta ein talesamtale.", @@ -1106,7 +1004,6 @@ "Sends the given emote coloured as a rainbow": "Sendar emojien med regnbogefargar", "You do not have permission to invite people to this room.": "Du har ikkje lov til å invitera andre til dette rommet.", "The user must be unbanned before they can be invited.": "Blokkeringa av brukaren må fjernast før dei kan bli inviterte.", - "Show padlocks on invite only rooms": "Vis hengelås på lukka rom (invite-only)", "Show join/leave messages (invites/kicks/bans unaffected)": "Vis bli-med/forlat meldingar (ekskluderer invitasjonar/utkasting/blokkeringar)", "Prompt before sending invites to potentially invalid matrix IDs": "Spør før utsending av invitasjonar til potensielle ugyldige Matrix-IDar", "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.": "Ved å fjerne koplinga mot din identitetstenar, vil ikkje brukaren din bli oppdaga av andre brukarar, og du kan heller ikkje invitera andre med e-post eller telefonnummer.", @@ -1139,7 +1036,6 @@ "Deactivate user?": "Deaktivere brukar?", "Deactivate user": "Deaktiver brukar", "Failed to deactivate user": "Fekk ikkje til å deaktivere brukaren", - "No sessions with registered encryption keys": "Ingen økter med registrerte krypteringsnøklar", "Remove recent messages": "Fjern nyare meldingar", "Send a reply…": "Send eit svar…", "Send a message…": "Send melding…", @@ -1204,11 +1100,6 @@ "Error updating main address": "Feil under oppdatering av hovedadresse", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Det skjedde ein feil under oppdatering av hovudadressa for rommet. Det kan hende at dette er ein mellombels feil, eller at det ikkje er tillate på tenaren.", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Feil under oppdatering av alternativ adresse. Det kan hende at dette er mellombels, eller at det ikkje er tillate på tenaren.", - "Error creating alias": "Feil under oppretting av alias", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Det skjedde ein feil under oppretting av dette aliaset. Det kan hende at dette er midlertidig, eller at det ikkje er tillate på serveren.", - "You don't have permission to delete the alias.": "Du har ikkje lov å slette aliaset.", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Det skjedde ein feil under fjerning av aliaset. Det kan hende at dette er midlertidig, eller at det ikkje eksisterar lengre.", - "Error removing alias": "Feil ved fjerning av alias", "Main address": "Hovudadresse", "Local address": "Lokal adresse", "Published Addresses": "Publisert adresse", @@ -1225,7 +1116,6 @@ "Room avatar": "Rom-avatar", "Power level": "Tilgangsnivå", "Voice & Video": "Tale & Video", - "Show a presence dot next to DMs in the room list": "Vis ein status-dot ved sida av DM-ar i romkatalogen", "Show info about bridges in room settings": "Vis info om bruer under rominnstillingar", "Show display name changes": "Vis endringar for visningsnamn", "Match system theme": "Følg systemtema", @@ -1273,7 +1163,6 @@ "Can't find this server or its room list": "Klarde ikkje å finna tenaren eller romkatalogen til den", "Upload completed": "Opplasting fullført", "Cancelled signature upload": "Kansellerte opplasting av signatur", - "Unabled to upload": "Klarte ikkje å laste opp", "Room Settings - %(roomName)s": "Rominnstillingar - %(roomName)s", "%(brand)s failed to get the public room list.": "%(brand)s fekk ikkje til å hente offentleg romkatalog.", "Room List": "Romkatalog", @@ -1323,11 +1212,9 @@ "Use Single Sign On to continue": "Bruk Single-sign-on for å fortsette", "Confirm adding this email address by using Single Sign On to prove your identity.": "Stadfest at du legger til denne e-postadressa, ved å bruke Single-sign-on for å stadfeste identiteten din.", "Single Sign On": "Single-sign-on", - "Review Sessions": "Sjå gjennom økter", "Capitalization doesn't help very much": "Store bokstavar hjelp dessverre lite", "Predictable substitutions like '@' instead of 'a' don't help very much": "Forutsigbare teiknbytte som '@' istaden for 'a' hjelp dessverre lite", "Try out new ways to ignore people (experimental)": "Prøv ut nye måtar å ignorere folk på (eksperimentelt)", - "Keep secret storage passphrase in memory for this session": "Hald passfrase for hemmeleg lager i systemminnet for denne økta", "Cross-signing and secret storage are enabled.": "Krysssignering og hemmeleg lager er aktivert.", "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Kontoen din har ein kryss-signert identitet det hemmelege lageret, økta di stolar ikkje på denne enno.", "Cross-signing and secret storage are not yet set up.": "Krysssignering og hemmeleg lager er endå ikkje sett opp.", @@ -1335,7 +1222,6 @@ "Bootstrap cross-signing and secret storage": "Førebur krysssignering og hemmeleg lager", "in secret storage": "i hemmeleg lager", "Secret storage public key:": "Public-nøkkel for hemmeleg lager:", - "Secret Storage key format:": "Nøkkel-format for hemmeleg lager:", "Keyboard Shortcuts": "Tastatursnarvegar", "Ignored users": "Ignorerte brukarar", "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.": "Legg til brukarar og tenarar du vil ignorera her. Bruk stjerne/wildcard (*) for at markere eitkvart teikn. Til dømes, @bot* vil ignorere alle brukarar med namn 'bot' på uansett tenar.", @@ -1348,15 +1234,7 @@ "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.": "For å unngå duplikate feilrapportar, sjekk eksisterande innmeldte feil fyrst (og legg på ein +1) eller meld inn ny feil viss du ikkje finn den der.", "Command Help": "Kommandohjelp", "To help us prevent this in future, please send us logs.": "For å bistå med å forhindre dette i framtida, gjerne send oss loggar.", - "Enter secret storage passphrase": "Skriv inn passfrase for hemmeleg lager", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "Tilgang til hemmeleg lager vart feila. Sjekk at du har skrive inn korrekt passfrase.", - "Warning: You should only access secret storage from a trusted computer.": "Åtvaring: Du bør berre nytte hemmeleg lager frå ei sikker,personleg datamaskin.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Skriv inn passfrasen din for å få tilgang til sikker samtalehistorikk og identiet nytta ved krysssignering for å verifisere andre økter.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Om du har gløymt passfrasen din kan du bruke gjennopprettingsnøkkel eller opprette nye gjenopprettingsalternativ.", - "Enter secret storage recovery key": "Skriv inn gjenopprettingsnøkkel for hemmeleg lagring", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Fekk ikkje tilgang til hemmeleg lager. Sjekk at du skreiv inn korrekt gjenopprettingsnøkkel.", "Incorrect recovery passphrase": "Feil gjenopprettingspassfrase", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Fekk ikkje til å dekryptere sikkerheitkopien med denne passfrasen: sjekk at du har skrive inn korrekt gjenopprettingspassfrase.", "Enter recovery passphrase": "Skriv inn gjennopprettingspassfrase", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Få tilgang til sikker meldingshistorikk og sett opp sikker meldingsutveksling, ved å skrive inn gjennopprettingspassfrasen.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Har du gløymt gjennopprettingspassfrasen kan du bruke gjennopprettingsnøkkel eller sette opp nye gjennopprettingsval", @@ -1370,15 +1248,8 @@ "Find a room…": "Finn eit rom…", "Find a room… (e.g. %(exampleRoom)s)": "Finn eit rom... (t.d. %(exampleRoom)s)", "If you can't find the room you're looking for, ask for an invite or Create a new room.": "Om du ikkje kan finne rommet du ser etter, spør etter ein invitasjon eller opprett eit nytt rom.", - "Message not sent due to unknown sessions being present": "Meldinga vart ikkje sendt fordi ukjende økter er tilstades", - "Show sessions, send anyway or cancel.": "Vis økter, send likevel elleravbryt.", "Jump to first unread room.": "Hopp til fyrste uleste rom.", "Jump to first invite.": "Hopp til fyrste invitasjon.", - "If you can’t access one, ": "Har du ikkje tilgang til ein, ", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Hald krypteringsnøkklane dine sikre med ein passfrase. For maksimal sikkerheit bør denne vere forskjellig frå kontopassordet ditt:", - "Enter a passphrase": "Skriv inn ein passfrase", - "Back up my encryption keys, securing them with the same passphrase": "Sikkerheitskopier mine krypteringsnøklar, sikre dei med same passfrase", - "Enter your passphrase a second time to confirm it.": "Stadfest passfrasen ved å skrive den inn ein gong til.", "Unable to set up secret storage": "Oppsett av hemmeleg lager feila", "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Denne økta har oppdaga at gjenopprettingspassfrasen og nøkkelen for sikre meldingar vart fjerna.", "Toggle microphone mute": "Slå av/på demping av mikrofon", diff --git a/src/i18n/strings/oc.json b/src/i18n/strings/oc.json index ccbbb98988..124439a802 100644 --- a/src/i18n/strings/oc.json +++ b/src/i18n/strings/oc.json @@ -4,8 +4,6 @@ "The platform you're on": "La plataforma ont sètz", "The version of %(brand)s": "La version de %(brand)s", "Your language of choice": "La lenga que volètz", - "User Options": "Opcions utilizaire", - "Start a chat": "Començar una discussion", "Unmute": "Restablir lo son", "Mute": "Copar lo son", "Admin Tools": "Aisinas d’administrator", diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index a0601ec6f5..3d9fdfad79 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -1,6 +1,4 @@ { - "Ignore request": "Zignoruj żądanie", - "Start verification": "Rozpocznij weryfikację", "Skip": "Pomiń", "This will allow you to reset your password and receive notifications.": "To pozwoli Ci zresetować Twoje hasło i otrzymać powiadomienia.", "Your browser does not support the required cryptography extensions": "Twoja przeglądarka nie wspiera wymaganych rozszerzeń kryptograficznych", @@ -8,9 +6,7 @@ "Username not available": "Nazwa użytkownika niedostępna", "Username available": "Nazwa użytkownika dostępna", "Add User": "Dodaj użytkownika", - "Verify...": "Zweryfikuj...", "Unknown Address": "Nieznany adres", - "To continue, please enter your password.": "Aby kontynuować, proszę wprowadzić swoje hasło.", "Incorrect password": "Nieprawidłowe hasło", "Unknown error": "Nieznany błąd", "Options": "Opcje", @@ -42,7 +38,6 @@ "Who can read history?": "Kto może czytać historię?", "Warning!": "Uwaga!", "Users": "Użytkownicy", - "User ID": "ID użytkownika", "Usage": "Użycie", "Upload file": "Prześlij plik", "Unban": "Odbanuj", @@ -51,7 +46,6 @@ "Add": "Dodaj", "Microphone": "Mikrofon", "Camera": "Kamera", - "Algorithm": "Algorytm", "Are you sure?": "Czy jesteś pewien?", "Attachment": "Załącznik", "Banned users": "Zbanowani użytkownicy", @@ -92,7 +86,6 @@ "Advanced": "Zaawansowane", "Always show message timestamps": "Zawsze pokazuj znaczniki czasu wiadomości", "Authentication": "Uwierzytelnienie", - "Alias (optional)": "Alias (opcjonalnie)", "%(items)s and %(lastItem)s": "%(items)s i %(lastItem)s", "A new password must be entered.": "Musisz wprowadzić nowe hasło.", "%(senderName)s answered the call.": "%(senderName)s odebrał połączenie.", @@ -106,7 +99,6 @@ "%(senderName)s banned %(targetName)s.": "%(senderName)s zbanował(a) %(targetName)s.", "Ban": "Zbanuj", "Bans user with given id": "Blokuje użytkownika o podanym ID", - "Blacklisted": "Umieszczono na czarnej liście", "Add a widget": "Dodaj widżet", "Allow": "Pozwól", "and %(count)s others...|other": "i %(count)s innych...", @@ -121,7 +113,6 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s usunął(-ęła) nazwę pokoju.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s zmienił(a) temat na \"%(topic)s\".", "Changes your display nickname": "Zmienia Twój wyświetlany pseudonim", - "Claimed Ed25519 fingerprint key": "Zażądano odcisk klucza Ed25519", "Click here to fix": "Kliknij tutaj, aby naprawić", "Click to mute audio": "Kliknij, aby wyciszyć dźwięk", "Click to mute video": "Kliknij, aby wyłączyć obraz", @@ -130,39 +121,28 @@ "Click to unmute audio": "Kliknij, aby włączyć dźwięk", "Command error": "Błąd polecenia", "Commands": "Polecenia", - "Could not connect to the integration server": "Nie można połączyć się z serwerem integracji", - "Curve25519 identity key": "Klucz tożsamości Curve25519", "Custom": "Własny", "Custom level": "Własny poziom", "/ddg is not a command": "/ddg nie jest poleceniem", "Deactivate Account": "Dezaktywuj konto", "Decline": "Odrzuć", "Decrypt %(text)s": "Odszyfruj %(text)s", - "Decryption error": "Błąd odszyfrowywania", "Delete widget": "Usuń widżet", "Default": "Domyślny", "Define the power level of a user": "Określ poziom uprawnień użytkownika", - "Device ID": "Identyfikator urządzenia", - "device id: ": "identyfikator urządzenia: ", - "Direct chats": "Rozmowy bezpośrednie", - "Disable Notifications": "Wyłącz powiadomienia", "Disinvite": "Anuluj zaproszenie", "Displays action": "Wyświetla akcję", "Download %(text)s": "Pobierz %(text)s", "Drop File Here": "Upuść plik tutaj", - "Ed25519 fingerprint": "Odcisk Ed25519", "Edit": "Edytuj", "Email": "E-mail", "Email address": "Adres e-mail", "Emoji": "Emoji", "Enable automatic language detection for syntax highlighting": "Włącz automatyczne rozpoznawanie języka dla podświetlania składni", - "Enable Notifications": "Włącz powiadomienia", "%(senderName)s ended the call.": "%(senderName)s zakończył(a) połączenie.", - "End-to-end encryption information": "Informacje o szyfrowaniu end-to-end", "Enter passphrase": "Wpisz frazę", "Error decrypting attachment": "Błąd odszyfrowywania załącznika", "Error: Problem communicating with the given homeserver.": "Błąd: wystąpił problem podczas komunikacji z podanym serwerem.", - "Event information": "Informacje zdarzenia", "Existing Call": "Istniejące połączenie", "Export": "Eksport", "Export E2E room keys": "Eksportuj klucze E2E pokojów", @@ -179,7 +159,6 @@ "Failed to send email": "Nie udało się wysłać wiadomości e-mail", "Failed to send request.": "Nie udało się wysłać żądania.", "Failed to set display name": "Nie udało się ustawić wyświetlanej nazwy", - "Failed to toggle moderator status": "Nie udało się przełączyć na stan moderatora", "Failed to unban": "Nie udało się odbanować", "Failed to upload profile picture!": "Nie udało się wgrać zdjęcia profilowego!", "Failed to verify email address: make sure you clicked the link in the email": "Nie udało się zweryfikować adresu e-mail: upewnij się że kliknąłeś w link w e-mailu", @@ -214,7 +193,6 @@ "Join as voice or video.": "Dołącz głosowo lub przez wideo.", "Join Room": "Dołącz do pokoju", "%(targetName)s joined the room.": "%(targetName)s dołączył(a) do pokoju.", - "Joins room with given alias": "Dołącz do pokoju o podanym aliasie", "Jump to first unread message.": "Przeskocz do pierwszej nieprzeczytanej wiadomości.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s wyrzucił %(targetName)s.", "Kick": "Wyrzuć", @@ -224,7 +202,6 @@ "Leave room": "Opuść pokój", "%(targetName)s left the room.": "%(targetName)s opuścił(a) pokój.", "Publish this room to the public in %(domain)s's room directory?": "Czy opublikować ten pokój dla ogółu w spisie pokojów domeny %(domain)s?", - "Local addresses for this room:": "Lokalne adresy dla tego pokoju:", "Logout": "Wyloguj", "Low priority": "Niski priorytet", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s uczynił(a) przyszłą historię pokoju widoczną dla wszyscy członkowie pokoju, od momentu ich zaproszenia.", @@ -237,16 +214,13 @@ "Missing user_id in request": "Brakujące user_id w żądaniu", "Moderator": "Moderator", "Name": "Nazwa", - "New address (e.g. #foo:%(localDomain)s)": "Nowy adres (np. #foo:%(localDomain)s)", "New passwords don't match": "Nowe hasła nie zgadzają się", "New passwords must match each other.": "Nowe hasła muszą się zgadzać.", - "none": "żaden", "not specified": "nieokreślony", "(not supported by this browser)": "(niewspierany przez tę przeglądarkę)", "": "", "AM": "AM", "PM": "PM", - "NOT verified": "NIEzweryfikowany", "No display name": "Brak nazwy ekranowej", "No more results": "Nie ma więcej wyników", "No results": "Brak wyników", @@ -264,11 +238,9 @@ "Profile": "Profil", "Public Chat": "Rozmowa publiczna", "Reason": "Powód", - "Revoke Moderator": "Usuń prawa moderatorskie", "Register": "Rejestracja", "%(targetName)s rejected the invitation.": "%(targetName)s odrzucił zaproszenie.", "Reject invitation": "Odrzuć zaproszenie", - "Remote addresses for this room:": "Adresy zdalne dla tego pokoju:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s usunął(-ęła) swoją wyświetlaną nazwę (%(oldDisplayName)s).", "%(senderName)s removed their profile picture.": "%(senderName)s usunął(-ęła) swoje zdjęcie profilowe.", "%(senderName)s requested a VoIP conference.": "%(senderName)s zażądał(a) grupowego połączenia głosowego VoIP.", @@ -284,11 +256,9 @@ "%(roomName)s is not accessible at this time.": "%(roomName)s nie jest dostępny w tym momencie.", "Rooms": "Pokoje", "Save": "Zapisz", - "Scroll to bottom of page": "Przewiń do końca strony", "Search failed": "Wyszukiwanie nie powiodło się", "Searches DuckDuckGo for results": "Używa DuckDuckGo dla wyników", "Seen by %(userName)s at %(dateTime)s": "Widziane przez %(userName)s o %(dateTime)s", - "Send anyway": "Wyślij mimo to", "Send Reset Email": "Wyślij e-mail resetujący hasło", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s wysłał obraz.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s wysłał(a) zaproszenie do %(targetDisplayName)s do dołączenia do pokoju.", @@ -305,7 +275,6 @@ "Sign out": "Wyloguj", "%(count)s of your messages have not been sent.|other": "Niektóre z twoich wiadomości nie zostały wysłane.", "Someone": "Ktoś", - "Start a chat": "Rozpocznij chat", "Start authentication": "Rozpocznij uwierzytelnienie", "Submit": "Wyślij", "Success": "Sukces", @@ -331,11 +300,8 @@ "Unable to enable Notifications": "Nie można włączyć powiadomień", "To use it, just wait for autocomplete results to load and tab through them.": "Żeby tego użyć, należy poczekać na załadowanie się autouzupełnienia i naciskać przycisk \"Tab\", by wybierać.", "unknown caller": "nieznany dzwoniący", - "unknown device": "nieznane urządzenie", - "Unknown room %(roomId)s": "Nieznany pokój %(roomId)s", "Unmute": "Wyłącz wyciszenie", "Unnamed Room": "Pokój bez nazwy", - "Unrecognised room alias:": "Nierozpoznany alias pokoju:", "Uploading %(filename)s and %(count)s others|zero": "Przesyłanie %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Przesyłanie %(filename)s oraz %(count)s innych", "Uploading %(filename)s and %(count)s others|other": "Przesyłanie %(filename)s oraz %(count)s innych", @@ -345,8 +311,6 @@ "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (moc uprawnień administratorskich %(powerLevelNumber)s)", "Username invalid: %(errMessage)s": "Niepoprawna nazwa użytkownika: %(errMessage)s", "Verification Pending": "Oczekuje weryfikacji", - "Verification": "Weryfikacja", - "verified": "zweryfikowany", "Verified key": "Zweryfikowany klucz", "Video call": "Rozmowa wideo", "Voice call": "Rozmowa głosowa", @@ -381,14 +345,12 @@ "Offline": "Niedostępny(-a)", "Add an Integration": "Dodaj integrację", "Token incorrect": "Niepoprawny token", - "unencrypted": "niezaszyfrowany", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Nie będziesz mógł cofnąć tej zmiany, ponieważ nadajesz użytkownikowi uprawnienia administratorskie równe Twoim.", "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(day)s %(monthName)s %(time)s", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s %(time)s", "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s", "Upload an avatar:": "Prześlij awatar:", "An error occurred: %(error_string)s": "Wystąpił błąd: %(error_string)s", - "Make Moderator": "Nadaj uprawnienia moderatora", "Sent messages will be stored until your connection has returned.": "Wysłane wiadomości będą przechowywane aż do momentu odzyskania połączenia.", "(~%(count)s results)|one": "(~%(count)s wynik)", "(~%(count)s results)|other": "(~%(count)s wyników)", @@ -411,13 +373,11 @@ "Failed to invite the following users to the %(roomName)s room:": "Wysłanie zaproszenia do następujących użytkowników do pokoju %(roomName)s nie powiodło się:", "Confirm Removal": "Potwierdź usunięcie", "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.": "Jesteś pewien że chcesz usunąć to wydarzenie? Pamiętaj, że jeśli usuniesz nazwę pokoju lub aktualizację tematu pokoju, zmiana może zostać cofnięta.", - "I verify that the keys match": "Upewnię się, że klucze się zgadzają", "Unable to restore session": "Przywrócenie sesji jest niemożliwe", "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.": "Jeśli wcześniej używałeś/aś nowszej wersji %(brand)s, Twoja sesja może być niekompatybilna z tą wersją. Zamknij to okno i powróć do nowszej wersji.", "%(brand)s collects anonymous analytics to allow us to improve the application.": "%(brand)s zbiera anonimowe dane analityczne, aby umożliwić nam rozwijanie aplikacji.", "ex. @bob:example.com": "np. @jan:example.com", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Nastąpiła próba załadowania danego punktu w historii tego pokoju, lecz nie masz uprawnień, by zobaczyć określoną wiadomość.", - "Use compact timeline layout": "Użyj kompaktowego stylu linii czasu", "You have enabled URL previews by default.": "Masz domyślnie włączone podglądy linków.", "Please check your email to continue registration.": "Sprawdź swój e-mail, aby kontynuować rejestrację.", "Please enter the code it contains:": "Wpisz kod, który jest tam zawarty:", @@ -425,7 +385,6 @@ "Error decrypting audio": "Błąd deszyfrowania audio", "Error decrypting image": "Błąd deszyfrowania obrazu", "Error decrypting video": "Błąd deszyfrowania wideo", - "Removed or unknown message type": "Usunięto lub nieznany typ wiadomości", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Próbowano załadować konkretny punkt na osi czasu w tym pokoju, ale nie nie można go znaleźć.", "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.": "Wyeksportowany plik pozwoli każdej osobie będącej w stanie go odczytać na deszyfrację jakichkolwiek zaszyfrowanych wiadomości, które możesz zobaczyć, tak więc zalecane jest zachowanie ostrożności. Aby w tym pomóc, powinieneś/aś wpisać hasło poniżej; hasło to będzie użyte do zaszyfrowania wyeksportowanych danych. Późniejsze zaimportowanie tych danych będzie możliwe tylko po uprzednim podaniu owego hasła.", " (unsupported)": " (niewspierany)", @@ -439,15 +398,10 @@ "Not a valid %(brand)s keyfile": "Niepoprawny plik klucza %(brand)s", "Authentication check failed: incorrect password?": "Próba autentykacji nieudana: nieprawidłowe hasło?", "Do you want to set an email address?": "Czy chcesz ustawić adres e-mail?", - "Share without verifying": "Udostępnij bez weryfikacji", - "Encryption key request": "Żądanie klucza szyfrującego", "Example": "Przykład", "Drop file here to upload": "Upuść plik tutaj, aby go przesłać", "Automatically replace plain text Emoji": "Automatycznie zastępuj tekstowe emotikony", "Failed to upload image": "Przesyłanie obrazka nie powiodło się", - "Unblacklist": "Usuń z czarnej listy", - "Blacklist": "Dodaj do czarnej listy", - "Unverify": "Usuń weryfikację", "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?": "Za chwilę zostaniesz przekierowany/a na zewnętrzną stronę w celu powiązania Twojego konta z %(integrationsUrl)s. Czy chcesz kontynuować?", "URL Previews": "Podglądy linków", "Ongoing conference call%(supportedText)s.": "Połączenie grupowe %(supportedText)s w toku.", @@ -460,18 +414,13 @@ "Add rooms to this community": "Dodaj pokoje do tej społeczności", "Invite to Community": "Zaproś do Społeczności", "Which rooms would you like to add to this community?": "Które pokoje chcesz dodać do tej społeczności?", - "Room name or alias": "Nazwa pokoju lub alias", "Add to community": "Dodaj do społeczności", - "Call": "Zadzwoń", "Submit debug logs": "Wyślij dzienniki błędów", - "The version of %(brand)s": "Wersja %(brand)s", + "The version of %(brand)s": "Wersja %(brand)sa", "Your language of choice": "Twój wybrany język", "Your homeserver's URL": "Adres URL Twojego serwera domowego", - "Your identity server's URL": "Adres URL Twojego Serwera Tożsamości", - "The information being sent to us to help make %(brand)s better includes:": "Informacje przesyłane do nas, by poprawić %(brand)s zawierają:", + "The information being sent to us to help make %(brand)s better includes:": "Informacje przesyłane do nas w celu poprawy jakości %(brand)sa zawierają:", "The platform you're on": "Platforma na której jesteś", - "Answer": "Odbierz", - "Review Devices": "Przegląd urządzeń", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s", "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Uwaga: każda osoba dodana do Społeczności będzie publicznie widoczna dla każdego, go zna identyfikator społeczności", "Invite new community members": "Zaproś nowych członków Społeczności", @@ -504,11 +453,8 @@ "Ignore": "Ignoruj", "Mention": "Wspomnij", "Invite": "Zaproś", - "User Options": "Opcje Użytkownika", "Send an encrypted reply…": "Wyślij zaszyfrowaną odpowiedź…", - "Send a reply (unencrypted)…": "Wyślij odpowiedź (nieszyfrowaną)…", "Send an encrypted message…": "Wyślij zaszyfrowaną wiadomość…", - "Send a message (unencrypted)…": "Wyślij wiadomość (niezaszyfrowaną)…", "Jump to message": "Skocz do wiadomości", "No pinned messages.": "Brak przypiętych wiadomości.", "Loading...": "Ładowanie...", @@ -523,7 +469,6 @@ "Unnamed room": "Pokój bez nazwy", "Guests can join": "Goście mogą dołączyć", "Fetching third party location failed": "Pobranie lokalizacji zewnętrznej nie powiodło się", - "A new version of %(brand)s is available.": "Dostępna jest nowa wersja %(brand)s.", "Send Account Data": "Wyślij dane konta", "All notifications are currently disabled for all targets.": "Wszystkie powiadomienia są obecnie wyłączone dla wszystkich celów.", "Uploading report": "Raport wysyłania", @@ -543,8 +488,6 @@ "Send Custom Event": "Wyślij niestandardowe wydarzenie", "Advanced notification settings": "Zaawansowane ustawienia powiadomień", "Failed to send logs: ": "Niepowodzenie wysyłki zapisu rozmów ", - "delete the alias.": "usunąć alias.", - "To return to your account in future you need to set a password": "Aby wrócić do swojego konta w przyszłości musisz ustawić hasło ", "Forget": "Zapomnij", "World readable": "Całkowicie publiczne", "You cannot delete this image. (%(code)s)": "Nie możesz usunąć tego obrazka. (%(code)s)", @@ -571,7 +514,6 @@ "Noisy": "Głośny", "Files": "Pliki", "Collecting app version information": "Zbieranie informacji o wersji aplikacji", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Usuń alias %(alias)s i usuń %(name)s z katalogu?", "Keywords": "Słowa kluczowe", "Enable notifications for this account": "Włącz powiadomienia na tym koncie", "Invite to this community": "Zaproś do tej społeczności", @@ -629,7 +571,6 @@ "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.": "Dziennik błędów zawiera dane użytkowania aplikacji, w tym: twoją nazwę użytkownika, numery ID, aliasy pokojów i grup które odwiedzałeś i loginy innych użytkowników. Nie zawiera wiadomości.", "Unhide Preview": "Odkryj podgląd", "Unable to join network": "Nie można dołączyć do sieci", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Możliwe, że skofigurowałeś je w innym kliencie, niż %(brand)s. Nie możesz ich zmieniać w %(brand)s, ale nadal mają zastosowanie", "Sorry, your browser is not able to run %(brand)s.": "Przepraszamy, Twoja przeglądarka nie jest w stanie uruchomić %(brand)s.", "Uploaded on %(date)s by %(user)s": "Wysłano %(date)s przez %(user)s", "Messages in group chats": "Wiadomości w czatach grupowych", @@ -655,7 +596,6 @@ "Thank you!": "Dziękujemy!", "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!": "Z Twoją obecną przeglądarką, wygląd oraz wrażenia z używania aplikacji mogą być niepoprawne, a niektóre funkcje wcale nie działać. Kontynuuj jeśli chcesz spróbować, jednak trudno będzie pomóc w przypadku błędów, które mogą nastąpić!", "Checking for an update...": "Sprawdzanie aktualizacji...", - "There are advanced notifications which are not shown here": "Masz zaawansowane powiadomienia, nie pokazane tutaj", "e.g. %(exampleValue)s": "np. %(exampleValue)s", "Always show encryption icons": "Zawsze wyświetlaj ikony szyfrowania", "Send analytics data": "Wysyłaj dane analityczne", @@ -668,14 +608,9 @@ "Members only (since they joined)": "Tylko członkowie (od kiedy dołączyli)", "Copied!": "Skopiowano!", "Failed to copy": "Kopiowanie nieudane", - "Message removed by %(userId)s": "Wiadomość usunięta przez %(userId)s", - "Message removed": "Wiadomość usunięta", "An email has been sent to %(emailAddress)s": "E-mail został wysłany do %(emailAddress)s", "A text message has been sent to %(msisdn)s": "Wysłano wiadomość tekstową do %(msisdn)s", "Code": "Kod", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Pomóż nam ulepszyć %(brand)s wysyłając anonimowe dane analityczne. Spowoduje to użycie pliku cookie (zobacz naszą Politykę plików cookie).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Pomóż nam ulepszyć %(brand)s wysyłając anonimowe dane analityczne. Spowoduje to użycie pliku cookie.", - "Yes, I want to help!": "Tak, chcę pomóc!", "Delete Widget": "Usuń widżet", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Usunięcie widżetu usuwa go dla wszystkich użytkowników w tym pokoju. Czy na pewno chcesz usunąć ten widżet?", "Communities": "Społeczności", @@ -691,7 +626,6 @@ "Which officially provided instance you are using, if any": "Jakiej oficjalnej instancji używasz, jeżeli w ogóle", "Every page you use in the app": "Każda strona, której używasz w aplikacji", "e.g. ": "np. ", - "Your User Agent": "Identyfikator Twojej przeglądarki (User Agent)", "Your device resolution": "Twoja rozdzielczość ekranu", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Dane identyfikujące, takie jak: pokój, identyfikator użytkownika lub grupy, są usuwane przed wysłaniem na serwer.", "Who would you like to add to this community?": "Kogo chcesz dodać do tej społeczności?", @@ -810,8 +744,6 @@ "%(count)s of your messages have not been sent.|one": "Twoja wiadomość nie została wysłana.", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Nikogo tu nie ma! Czy chcesz zaprosić inne osoby lub przestać ostrzegać o pustym pokoju?", "Clear filter": "Wyczyść filtr", - "Light theme": "Jasny motyw", - "Dark theme": "Ciemny motyw", "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.": "Jeśli zgłosiłeś błąd za pośrednictwem GitHuba, dzienniki błędów mogą nam pomóc wyśledzić problem. Dzienniki błędów zawierają dane o użytkowaniu aplikacji, w tym nazwę użytkownika, identyfikatory lub aliasy odwiedzonych pomieszczeń lub grup oraz nazwy użytkowników innych użytkowników. Nie zawierają wiadomości.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Prywatność jest dla nas ważna, dlatego nie gromadzimy żadnych danych osobowych ani danych identyfikujących w naszych analizach.", "Learn more about how we use analytics.": "Dowiedz się więcej co analizujemy.", @@ -822,8 +754,6 @@ "This homeserver doesn't offer any login flows which are supported by this client.": "Ten serwer domowy nie oferuje żadnych trybów logowania wspieranych przez Twojego klienta.", "Notify the whole room": "Powiadom cały pokój", "Room Notification": "Powiadomienia pokoju", - "Call Anyway": "Zadzwoń mimo to", - "Answer Anyway": "Odpowiedz mimo to", "Demote yourself?": "Zdegradować siebie?", "Demote": "Zdegraduj", "Hide Stickers": "Ukryj Naklejki", @@ -844,18 +774,11 @@ "Whether or not you're using the Richtext mode of the Rich Text Editor": "Niezależnie od tego, czy używasz trybu Richtext edytora tekstu w formacie RTF", "Call in Progress": "Łączenie w toku", "Permission Required": "Wymagane Uprawnienia", - "Registration Required": "Wymagana Rejestracja", - "You need to register to do this. Would you like to register now?": "Musisz się zarejestrować, aby to zrobić. Czy chcesz się teraz zarejestrować?", "A call is currently being placed!": "W tej chwili trwa rozmowa!", "A call is already in progress!": "Połączenie już trwa!", "You do not have permission to start a conference call in this room": "Nie posiadasz uprawnień do rozpoczęcia rozmowy grupowej w tym pokoju", "Unignored user": "Nieignorowany użytkownik", "Forces the current outbound group session in an encrypted room to be discarded": "Wymusza odrzucenie bieżącej sesji grupy wychodzącej w zaszyfrowanym pokoju", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s dodał(a) %(addedAddresses)s jako adres tego pokoju.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s dodał(a) %(addedAddresses)s jako adres tego pokoju.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s usunął(-ęła) %(removedAddresses)s jako adres tego pokoju.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s usunął(-ęła) %(removedAddresses)s jako adres tego pokoju.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s dodał %(addedAddresses)s i %(removedAddresses)s usunął adresy z tego pokoju.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s ustawił(a) główny adres dla tego pokoju na %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s usunął(-ęła) główny adres tego pokoju.", "This homeserver has hit its Monthly Active User limit.": "Ten serwer osiągnął miesięczny limit aktywnego użytkownika.", @@ -875,8 +798,6 @@ "Stickerpack": "Pakiet naklejek", "This room is a continuation of another conversation.": "Ten pokój jest kontynuacją innej rozmowy.", "Click here to see older messages.": "Kliknij tutaj, aby zobaczyć starsze wiadomości.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Ten serwer osiągnął miesięczny limit aktywnych użytkowników, więc niektórzy użytkownicy nie będą mogli się zalogować.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Ten serwer przekroczył jeden z limitów, więc niektórzy użytkownicy nie będą mogli się zalogować.", "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s dołączyli(-ły) %(count)s razy", "%(oneUser)sjoined %(count)s times|other": "%(oneUser)s dołączył(a) %(count)s razy", "%(oneUser)sjoined %(count)s times|one": "%(oneUser)s dołączył(a)", @@ -956,19 +877,13 @@ "Capitalization doesn't help very much": "Kapitalizacja nie pomaga bardzo", "This is a top-10 common password": "To jest 10 najpopularniejszych haseł", "This is a top-100 common password": "To jest 100 najpopularniejszych haseł", - "Enter Recovery Key": "Wprowadź Klucz Odzyskiwania", "This looks like a valid recovery key!": "To wygląda na prawidłowy klucz odzyskiwania!", "Not a valid recovery key": "Nieprawidłowy klucz odzyskiwania", "If you don't want to set this up now, you can later in Settings.": "Jeśli nie chcesz tego teraz ustawiać, możesz to zrobić później w Ustawieniach.", "Retry": "Ponów", - "Create Key Backup": "Stwórz kopię zapasową klucza", "Unable to create key backup": "Nie można utworzyć kopii zapasowej klucza", "Download": "Pobierz", - "Copy to clipboard": "Skopiuj do schowka", - "Your Recovery Key": "Twój Klucz Odzyskiwania", - "Enter a passphrase...": "Wprowadź hasło…", "Next": "Następny", - "Backup Restored": "Przywrócono Kopię Zapasową", "No backup found!": "Nie znaleziono kopii zapasowej!", "Checking...": "Sprawdzanie…", "Create a new room with the same name, description and avatar": "Utwórz nowy pokój o tej samej nazwie, opisie i awatarze", @@ -1090,9 +1005,6 @@ "Room Name": "Nazwa pokoju", "Room Topic": "Temat pokoju", "Power level": "Poziom uprawnień", - "Verify by comparing a short text string.": "Weryfikuj, porównując krótki ciąg tekstu.", - "Begin Verifying": "Rozpocznij weryfikację", - "Waiting for partner to accept...": "Czekanie, aż partner zaakceptuje…", "Room Settings - %(roomName)s": "Ustawienia pokoju - %(roomName)s", "Doesn't look like a valid phone number": "To nie wygląda na poprawny numer telefonu", "Globe": "Ziemia", @@ -1127,7 +1039,6 @@ "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "W tej chwili odpowiadanie plikiem nie jest możliwe. Czy chcesz przesłać ten plik bez odpowiadania?", "Help & About": "Pomoc i o aplikacji", "Save it on a USB key or backup drive": "Zapisz w pamięci USB lub na dysku kopii zapasowej", - "Show recently visited rooms above the room list": "Pokaż ostatnio odwiedzone pokoje nad listą pokoi", "General": "Ogólne", "Sounds": "Dźwięki", "Notification sound": "Dźwięk powiadomień", @@ -1140,7 +1051,6 @@ "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Niezależnie od tego, czy korzystasz z funkcji \"okruchy\" (awatary nad listą pokoi)", "Call failed due to misconfigured server": "Połączenie nie udało się przez błędną konfigurację serwera", "Try using turn.matrix.org": "Spróbuj użyć serwera turn.matrix.org", - "A conference call could not be started because the integrations server is not available": "Połączenie konferencyjne nie może zostać rozpoczęte ponieważ serwer integracji jest niedostępny", "The file '%(fileName)s' failed to upload.": "Nie udało się przesłać pliku '%(fileName)s'.", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Plik '%(fileName)s' przekracza limit rozmiaru dla tego serwera głównego", "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Poproś swojego administratora %(brand)s by sprawdzić Twoją konfigurację względem niewłaściwych lub zduplikowanych elementów.", @@ -1200,7 +1110,6 @@ "Enable Community Filter Panel": "Aktywuj Panel Filtrów Społeczności", "Allow Peer-to-Peer for 1:1 calls": "Pozwól na połączenia 1:1 w technologii Peer-to-Peer", "Prompt before sending invites to potentially invalid matrix IDs": "Powiadamiaj przed wysłaniem zaproszenia do potencjalnie nieprawidłowych ID matrix", - "Order rooms in the room list by most important first instead of most recent": "Kolejkuj pokoje na liście pokojów od najważniejszych niż od najnowszych", "Show hidden events in timeline": "Pokaż ukryte wydarzenia na linii czasowej", "Low bandwidth mode": "Tryb wolnej przepustowości", "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Pozwól na awaryjny serwer wspomagania połączeń turn.matrix.org, gdy Twój serwer domowy takiego nie oferuje (Twój adres IP będzie udostępniony podczas połączenia)", @@ -1290,7 +1199,6 @@ "Do not use an identity server": "Nie używaj serwera tożsamości", "Clear cache and reload": "Wyczyść pamięć podręczną i przeładuj", "Something went wrong. Please try again or view your console for hints.": "Coś poszło nie tak. Spróbuj ponownie lub sprawdź konsolę przeglądarki dla wskazówek.", - "Please verify the room ID or alias and try again.": "Zweryfikuj poprawność ID pokoju lub nazwy zastępczej i spróbuj ponownie.", "Please try again or view your console for hints.": "Spróbuj ponownie lub sprawdź konsolę przeglądarki dla wskazówek.", "Personal ban list": "Osobista lista zablokowanych", "Server or user ID to ignore": "ID serwera lub użytkownika do zignorowania", @@ -1346,12 +1254,8 @@ "%(oneUser)smade no changes %(count)s times|other": "%(oneUser)snie wykonał(a) zmian %(count)s razy", "%(oneUser)smade no changes %(count)s times|one": "%(oneUser)snie wykonał(a) zmian", "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Nie zdołano wczytać zdarzenia, na które odpowiedziano, może ono nie istnieć lub nie masz uprawnienia, by je zobaczyć.", - "Room alias": "Nazwa zastępcza pokoju", "e.g. my-room": "np. mój-pokój", "Some characters not allowed": "Niektóre znaki niedozwolone", - "Please provide a room alias": "Proszę podać nazwę zastępczą pokoju", - "This alias is available to use": "Ta nazwa zastępcza jest dostępna do użycia", - "This alias is already in use": "Ta nazwa zastępcza jest już w użyciu", "Report bugs & give feedback": "Zgłoś błędy & sugestie", "Filter rooms…": "Filtruj pokoje…", "Find a room…": "Znajdź pokój…", @@ -1372,7 +1276,6 @@ "Never send encrypted messages to unverified sessions from this session": "Nigdy nie wysyłaj zaszyfrowanych wiadomości do niezweryfikowanych sesji z tej sesji", "Enable desktop notifications for this session": "Włącz powiadomienia na pulpicie dla tej sesji", "Enable audible notifications for this session": "Włącz powiadomienia dźwiękowe dla tej sesji", - "Sessions": "Sesje", "Direct Messages": "Wiadomości bezpośrednie", "Create Account": "Utwórz konto", "Sign In": "Zaloguj się", @@ -1417,7 +1320,6 @@ "Confirm": "Potwierdź", "Sign In or Create Account": "Zaloguj się lub utwórz konto", "Use your account or create a new one to continue.": "Użyj konta lub utwórz nowe, aby kontynuować.", - "No sessions with registered encryption keys": "Brak sesji z zarejestrowanymi kluczami szyfrującymi", "No": "Nie", "Yes": "Tak", "React": "Zareaguj", @@ -1442,7 +1344,6 @@ "Server name": "Nazwa serwera", "Add a new server...": "Dodaj nowy serwer…", "Please enter a name for the room": "Proszę podać nazwę pokoju", - "Set a room alias to easily share your room with other people.": "Ustaw alias pokoju, aby łatwo udostępniać swój pokój innym osobom.", "This room is private, and can only be joined by invitation.": "Ten pokój jest prywatny i można do niego dołączyć tylko za zaproszeniem.", "Enable end-to-end encryption": "Włącz szyfrowanie end-to-end", "Create a public room": "Utwórz publiczny pokój", @@ -1568,7 +1469,6 @@ "Reject & Ignore user": "Odrzuć i zignoruj użytkownika", "Show image": "Pokaż obraz", "Verify session": "Zweryfikuj sesję", - "Loading session info...": "Ładowanie informacji o sesji…", "Upload completed": "Przesyłanie zakończone", "Message edits": "Edycje wiadomości", "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Jeśli napotkasz jakieś błędy lub masz opinię, którą chcesz się podzielić, daj nam znać na GitHubie.", @@ -1578,12 +1478,10 @@ "Send a Direct Message": "Wyślij wiadomość bezpośrednią", "Explore Public Rooms": "Przeglądaj publiczne pokoje", "Create a Group Chat": "Utwórz czat grupowy", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Log in to your new account.": "Zaloguj się do nowego konta.", "Registration Successful": "Pomyślnie zarejestrowano", "DuckDuckGo Results": "Wyniki z DuckDuckGo", "Enter your account password to confirm the upgrade:": "Wprowadź hasło do konta, aby potwierdzić aktualizację:", - "You're done!": "Jesteś gotów!", "Autocomplete": "Autouzupełnienie", "Toggle Bold": "Przełącz pogrubienie", "Toggle Italics": "Przełącz kursywę", @@ -1594,9 +1492,7 @@ "Click the button below to confirm adding this email address.": "Naciśnij przycisk poniżej aby zatwierdzić dodawanie adresu e-mail.", "Confirm adding phone number": "Potwierdź dodanie numeru telefonu", "Click the button below to confirm adding this phone number.": "Naciśnij przycisk poniżej aby potwierdzić dodanie tego numeru telefonu.", - "The version of %(brand)s": "Wersja %(brand)sa", "Your user agent": "Twój user agent", - "The information being sent to us to help make %(brand)s better includes:": "Informacje przesyłane do nas w celu poprawy jakości %(brand)sa zawierają:", "Sends a message as html, without interpreting it as markdown": "Wysyła wiadomość w formacie html, bez interpretowania jej jako markdown", "Error upgrading room": "Błąd podczas aktualizacji pokoju", "Double check that your server supports the room version chosen and try again.": "Sprawdź ponownie czy Twój serwer wspiera wybraną wersję pokoju i spróbuj ponownie.", diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index 680cdd583a..f72edc150d 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -2,7 +2,6 @@ "Account": "Conta", "Admin": "Administrador", "Advanced": "Avançado", - "Algorithm": "Algoritmo", "New passwords don't match": "As novas senhas não conferem", "A new password must be entered.": "Uma nova senha precisa ser informada.", "Anyone who knows the room's link, apart from guests": "Qualquer pessoa que tenha o link da sala, exceto visitantes", @@ -10,30 +9,21 @@ "Are you sure you want to reject the invitation?": "Você tem certeza que deseja rejeitar este convite?", "Banned users": "Usuárias/os banidas/os", "Bans user with given id": "Banir usuários com o identificador informado", - "Blacklisted": "Bloqueado", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s mudou o tópico para \"%(topic)s\".", "Changes your display nickname": "Troca o seu apelido", - "Claimed Ed25519 fingerprint key": "Chave reivindicada da Impressão Digital Ed25519", "Click here to fix": "Clique aqui para resolver isso", "Commands": "Comandos", "Confirm password": "Confirme a nova senha", "Continue": "Continuar", - "Could not connect to the integration server": "Não foi possível conectar ao servidor de integrações", "Create Room": "Criar Sala", "Cryptography": "Criptografia", "Current password": "Senha atual", - "Curve25519 identity key": "Chave de Indetificação Curve25519", "Deactivate Account": "Desativar conta", - "Decryption error": "Erro de descriptografia", "Default": "Padrão", "Deops user with given id": "Retirar função de moderador do usuário com o identificador informado", - "Device ID": "Identificador do dispositivo", "Displays action": "Visualizar atividades", - "Ed25519 fingerprint": "Impressão Digital Ed25519", "Emoji": "Emoji", - "End-to-end encryption information": "Informação criptografada ponta-a-ponta", "Error": "Erro", - "Event information": "Informação do evento", "Export E2E room keys": "Exportar chaves ponta-a-ponta da sala", "Failed to change password. Is your password correct?": "Falha ao alterar a palavra-passe. A sua palavra-passe está correta?", "Failed to leave room": "Falha ao tentar deixar a sala", @@ -55,7 +45,6 @@ "Invites": "Convidar", "Invites user with given id to current room": "Convidar usuários com um dado identificador para esta sala", "Sign in with": "Quero entrar", - "Joins room with given alias": "Entra na sala com o nome informado", "Kicks user with given id": "Remove usuário com o identificador informado", "Labs": "Laboratório", "Leave room": "Sair da sala", @@ -65,10 +54,8 @@ "Moderator": "Moderador/a", "Name": "Nome", "New passwords must match each other.": "As novas senhas informadas precisam ser idênticas.", - "none": "nenhum", "Notifications": "Notificações", "": "", - "NOT verified": "NÃO verificado", "No users have specific privileges in this room": "Nenhum/a usuário/a possui privilégios específicos nesta sala", "Only people who have been invited": "Apenas pessoas que tenham sido convidadas", "Password": "Senha", @@ -83,7 +70,6 @@ "Return to login screen": "Retornar à tela de login", "Room Colour": "Cores da sala", "Rooms": "Salas", - "Scroll to bottom of page": "Ir para o fim da página", "Searches DuckDuckGo for results": "Buscar por resultados no buscador DuckDuckGo", "Send Reset Email": "Enviar email para redefinição de senha", "Server may be unavailable, overloaded, or you hit a bug.": "O servidor pode estar indisponível ou sobrecarregado, ou então você encontrou uma falha no sistema.", @@ -93,7 +79,6 @@ "Sign in": "Entrar", "Sign out": "Sair", "Someone": "Alguém", - "Start a chat": "Começar uma conversa", "Success": "Sucesso", "The email address linked to your account must be entered.": "O endereço de email relacionado a sua conta precisa ser informado.", "This doesn't appear to be a valid email address": "Este não aparenta ser um endereço de email válido", @@ -102,16 +87,11 @@ "Unable to remove contact information": "Não foi possível remover informação de contato", "Unable to verify email address.": "Não foi possível verificar o endereço de email.", "Unban": "Desfazer banimento", - "unencrypted": "não criptografado", - "unknown device": "dispositivo desconhecido", "unknown error code": "código de erro desconhecido", "Upload avatar": "Enviar icone de perfil de usuário", "Upload file": "Enviar arquivo", - "User ID": "Identificador de Usuário", "Users": "Usuários", "Verification Pending": "Verificação pendente", - "Verification": "Verificação", - "verified": "verificado", "Video call": "Chamada de vídeo", "Voice call": "Chamada de voz", "VoIP conference finished.": "Conferência VoIP encerrada.", @@ -226,7 +206,6 @@ "Click to unmute audio": "Clique para retirar áudio do mudo", "Command error": "Erro de comando", "Decrypt %(text)s": "Descriptografar %(text)s", - "Direct chats": "Conversas pessoais", "Disinvite": "Desconvidar", "Download %(text)s": "Baixar %(text)s", "Failed to ban user": "Não foi possível banir o/a usuário/a", @@ -237,19 +216,15 @@ "Failed to mute user": "Não foi possível remover notificações da/do usuária/o", "Failed to reject invite": "Não foi possível rejeitar o convite", "Failed to set display name": "Houve falha ao definir o nome público", - "Failed to toggle moderator status": "Houve falha ao alterar o status de moderador/a", "Fill screen": "Tela cheia", "Incorrect verification code": "Código de verificação incorreto", "Join Room": "Ingressar na sala", "Jump to first unread message.": "Ir diretamente para a primeira das mensagens não lidas.", "Kick": "Remover", - "Local addresses for this room:": "Endereço local desta sala:", - "New address (e.g. #foo:%(localDomain)s)": "Novo endereço (p.ex: #algo:%(localDomain)s)", "not specified": "não especificado", "No more results": "Não há mais resultados", "No results": "Sem resultados", "OK": "OK", - "Revoke Moderator": "Retirar status de moderador", "Search": "Pesquisar", "Search failed": "Busca falhou", "Server error": "Erro no servidor", @@ -260,11 +235,9 @@ "This room has no local addresses": "Esta sala não tem endereços locais", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas parece que você não tem permissões para ver a mensagem em questão.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas não o encontrei.", - "Unknown room %(roomId)s": "A sala %(roomId)s é desconhecida", "You seem to be in a call, are you sure you want to quit?": "Parece que você está em uma chamada. Tem certeza que quer sair?", "You seem to be uploading files, are you sure you want to quit?": "Parece que você está enviando arquivos. Tem certeza que quer sair?", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Você não poderá desfazer esta mudança, pois estará dando a este(a) usuário(a) o mesmo nível de permissões que você.", - "Make Moderator": "Tornar moderador(a)", "Room": "Sala", "Cancel": "Cancelar", "Ban": "Banir", @@ -305,15 +278,9 @@ "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.": "Você tem certeza que quer apagar este evento? Note que se você apaga o nome de uma sala ou uma mudança de tópico, esta ação não poderá ser desfeita.", "Unknown error": "Erro desconhecido", "Incorrect password": "Senha incorreta", - "To continue, please enter your password.": "Para continuar, por favor insira a sua senha.", - "I verify that the keys match": "Eu confirmo que as chaves são iguais", "Unable to restore session": "Não foi possível restaurar a sessão", "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.": "Se você já usou antes uma versão mais recente do %(brand)s, a sua sessão pode ser incompatível com esta versão. Feche esta janela e tente abrir com a versão mais recente.", "Unknown Address": "Endereço desconhecido", - "Unblacklist": "Tirar da lista de bloqueados", - "Blacklist": "Colocar na lista de bloqueados", - "Unverify": "Des-verificar", - "Verify...": "Verificar...", "ex. @bob:example.com": "p.ex: @joao:exemplo.com", "Add User": "Adicionar usuária(o)", "Custom Server Options": "Opções para Servidor Personalizado", @@ -327,7 +294,6 @@ "Error decrypting image": "Erro ao descriptografar a imagem", "Error decrypting video": "Erro ao descriptografar o vídeo", "Add an Integration": "Adicionar uma integração", - "Removed or unknown message type": "Mensagem removida ou de tipo desconhecido", "URL Previews": "Pré-visualização de links", "Drop file here to upload": "Arraste um arquivo aqui para enviar", " (unsupported)": " (não suportado)", @@ -344,8 +310,6 @@ "Incorrect username and/or password.": "Nome de usuária(o) e/ou senha incorreto.", "Invited": "Convidada(o)", "Results from DuckDuckGo": "Resultados de DuckDuckGo", - "Unrecognised room alias:": "Apelido de sala não reconhecido:", - "Use compact timeline layout": "Usar o layout de linha do tempo compacta", "Verified key": "Chave verificada", "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s removeu a imagem da sala.", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s alterou a imagem da sala %(roomName)s", @@ -361,13 +325,10 @@ "Anyone": "Qualquer pessoa", "Are you sure you want to leave the room '%(roomName)s'?": "Você tem certeza que deseja sair da sala '%(roomName)s'?", "Custom level": "Nível personalizado", - "device id: ": "id do dispositivo: ", "Register": "Registre-se", - "Remote addresses for this room:": "Endereços remotos para esta sala:", "Save": "Salvar", "You have disabled URL previews by default.": "Você desabilitou pré-visualizações de links por padrão.", "You have enabled URL previews by default.": "Você habilitou pré-visualizações de links por padrão.", - "Send anyway": "Enviar de qualquer maneira", "This room": "Esta sala", "Create new room": "Criar nova sala", "No display name": "Sem nome público de usuária(o)", @@ -380,7 +341,6 @@ "Uploading %(filename)s and %(count)s others|zero": "Enviando o arquivo %(filename)s", "Admin Tools": "Ferramentas de administração", "Incoming video call from %(name)s": "Chamada de vídeo de %(name)s recebida", - "Alias (optional)": "Apelido (opcional)", "Active call (%(roomName)s)": "Chamada ativa (%(roomName)s)", "Error: Problem communicating with the given homeserver.": "Erro: problema de comunicação com o Servidor de Base fornecido.", "Failed to upload profile picture!": "Falha ao enviar a imagem de perfil!", @@ -391,7 +351,6 @@ "Drop File Here": "Arraste o arquivo aqui", "Seen by %(userName)s at %(dateTime)s": "Visto por %(userName)s em %(dateTime)s", "%(roomName)s does not exist.": "%(roomName)s não existe.", - "Enable Notifications": "Habilitar notificações", "Username not available": "Nome de usuária(o) indisponível", "(~%(count)s results)|other": "(~%(count)s resultados)", "unknown caller": "a pessoa que está chamando é desconhecida", @@ -399,7 +358,6 @@ "(~%(count)s results)|one": "(~%(count)s resultado)", "New Password": "Nova senha", "Username invalid: %(errMessage)s": "Nome de usuária(o) inválido: %(errMessage)s", - "Disable Notifications": "Desabilitar notificações", "Incoming voice call from %(name)s": "Chamada de voz de %(name)s recebida", "If you already have a Matrix account you can log in instead.": "Se você já tem uma conta Matrix, pode também fazer login.", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Não foi possível conectar ao Servidor de Base. Por favor, confira sua conectividade à internet, garanta que o certificado SSL do Servidor de Base é confiável, e que uma extensão do navegador não esteja bloqueando as requisições de rede.", @@ -445,10 +403,6 @@ "Do you want to set an email address?": "Deseja definir um endereço de e-mail?", "This will allow you to reset your password and receive notifications.": "Isto irá permitir-lhe redefinir a sua palavra-passe e receber notificações.", "Skip": "Saltar", - "Start verification": "Iniciar verificação", - "Share without verifying": "Partilhar sem verificar", - "Ignore request": "Ignorar pedido", - "Encryption key request": "Pedido de chave de encriptação", "Example": "Exemplo", "Create": "Criar", "Featured Rooms:": "Salas em destaque:", @@ -459,7 +413,6 @@ "%(widgetName)s widget removed by %(senderName)s": "Widget %(widgetName)s removido por %(senderName)s", "%(widgetName)s widget modified by %(senderName)s": "Widget %(widgetName)s modificado por %(senderName)s", "Ignore": "Ignorar", - "User Options": "Opções de Utilizador", "Ignored user": "Utilizador ignorado", "Description": "Descrição", "Leave": "Sair", @@ -474,9 +427,7 @@ "Stops ignoring a user, showing their messages going forward": "Deixa de ignorar um utilizador, mostrando as suas mensagens daqui para a frente", "Ignores a user, hiding their messages from you": "Ignora um utilizador, deixando de mostrar as mensagens dele", "Banned by %(displayName)s": "Banido por %(displayName)s", - "Message removed by %(userId)s": "Mensagem removida por %(userId)s", "Fetching third party location failed": "Falha ao obter localização de terceiros", - "A new version of %(brand)s is available.": "Uma nova versão do %(brand)s está disponível.", "I understand the risks and wish to continue": "Entendo os riscos e pretendo continuar", "Advanced notification settings": "Configurações avançadas de notificação", "Uploading report": "A enviar o relatório", @@ -496,8 +447,6 @@ "Uploaded on %(date)s by %(user)s": "Enviada em %(date)s por %(user)s", "Send Custom Event": "Enviar evento personalizado", "All notifications are currently disabled for all targets.": "Todas as notificações estão atualmente desativadas para todos os casos.", - "delete the alias.": "apagar o apelido da sala.", - "To return to your account in future you need to set a password": "Para voltar à sua conta no futuro, necessita de definir uma palavra-passe", "Forget": "Esquecer", "World readable": "Público", "You cannot delete this image. (%(code)s)": "Não pode apagar esta imagem. (%(code)s)", @@ -525,7 +474,6 @@ "Noisy": "Barulhento", "Files": "Ficheiros", "Collecting app version information": "A recolher informação da versão da app", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Apagar o apelido %(alias)s da sala e remover %(name)s da lista pública?", "Keywords": "Palavras-chave", "Enable notifications for this account": "Ativar notificações para esta conta", "Messages containing keywords": "Mensagens contendo palavras-chave", @@ -573,7 +521,6 @@ "Back": "Voltar", "Unhide Preview": "Mostrar a pré-visualização novamente", "Unable to join network": "Não foi possível juntar-se à rede", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Pode ter configurado num outro cliente sem ser o %(brand)s. Não pode ajustá-las no %(brand)s, mas ainda assim elas aplicam-se", "Sorry, your browser is not able to run %(brand)s.": "Desculpe, o seu navegador não é capaz de executar o %(brand)s.", "Messages in group chats": "Mensagens em salas", "Yesterday": "Ontem", @@ -599,36 +546,27 @@ "Quote": "Citar", "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!": "Com o seu navegador atual, a aparência e sensação de uso da aplicação podem estar completamente incorretas, e algumas das funcionalidades poderão não funcionar. Se quiser tentar de qualquer maneira pode continuar, mas está por sua conta com algum problema que possa encontrar!", "Checking for an update...": "A procurar uma atualização...", - "There are advanced notifications which are not shown here": "Existem notificações avançadas que não são exibidas aqui", "Add Email Address": "Adicione adresso de e-mail", "Add Phone Number": "Adicione número de telefone", "The platform you're on": "A plataforma em que se encontra", - "The version of %(brand)s": "A versão do RIOT.im", + "The version of %(brand)s": "A versão do %(brand)s", "Whether or not you're logged in (we don't record your username)": "Tenha ou não, iniciado sessão (não iremos guardar o seu nome de utilizador)", "Your language of choice": "O seu idioma que escolheu", "Which officially provided instance you are using, if any": "Qual instância oficial está utilizando, se for o caso", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Se está a usar o modo de texto enriquecido do editor de texto enriquecido", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Se usa a funcionalidade 'breadcrumbs' (avatares em cima da lista de salas", "Your homeserver's URL": "O URL do seu servidor de início", - "Your identity server's URL": "O URL do seu servidor de identidade", "e.g. %(exampleValue)s": "ex. %(exampleValue)s", "Every page you use in the app": "Todas as páginas que usa na aplicação", "e.g. ": "ex. ", - "Your User Agent": "O seu Agente de Utilizador", "Your device resolution": "A resolução do seu dispositivo", "The information being sent to us to help make %(brand)s better includes:": "As informações que estão sendo enviadas para ajudar a melhorar o %(brand)s incluem:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Quando esta página contém informação de que permitam a sua identificação, como uma sala, ID de utilizador ou de grupo, estes dados são removidos antes de serem enviados ao servidor.", "Call Failed": "A chamada falhou", - "Review Devices": "Rever dispositivos", - "Call Anyway": "Ligar na mesma", - "Answer Anyway": "Responder na mesma", - "Call": "Ligar", - "Answer": "Responder", "Call failed due to misconfigured server": "Chamada falhada devido a um erro de configuração do servidor", "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Peça ao administrador do seu servidor inicial (%(homeserverDomain)s) de configurar um servidor TURN para que as chamadas funcionem fiavelmente.", "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.": "Alternativamente, pode tentar usar o servidor público em turn.matrix.org, mas não será tão fiável e partilhará o seu IP com esse servidor. Também pode gerir isso nas definições.", "Try using turn.matrix.org": "Tente utilizar turn.matrix.org", - "The version of %(brand)s": "A versão do %(brand)s", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Quer esteja a usar o %(brand)s num dispositivo onde o touch é o mecanismo de entrada primário", "Whether you're using %(brand)s as an installed Progressive Web App": "Quer esteja a usar o %(brand)s como uma Progressive Web App (PWA)", "Your user agent": "O seu user agent" diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 91f81e0beb..d4bb0ef012 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -2,7 +2,6 @@ "Account": "Conta", "Admin": "Administrador/a", "Advanced": "Avançado", - "Algorithm": "Algoritmo", "New passwords don't match": "As novas senhas não conferem", "A new password must be entered.": "Uma nova senha precisa ser informada.", "Anyone who knows the room's link, apart from guests": "Qualquer pessoa que tenha o link da sala, exceto visitantes", @@ -10,30 +9,21 @@ "Are you sure you want to reject the invitation?": "Você tem certeza que deseja rejeitar este convite?", "Banned users": "Usuárias/os banidas/os", "Bans user with given id": "Banir usuários com o identificador informado", - "Blacklisted": "Bloqueado", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s mudou o tópico para \"%(topic)s\".", "Changes your display nickname": "Troca o seu apelido", - "Claimed Ed25519 fingerprint key": "Chave reivindicada da Impressão Digital Ed25519", "Click here to fix": "Clique aqui para resolver isso", "Commands": "Comandos", "Confirm password": "Confirme a nova senha", "Continue": "Continuar", - "Could not connect to the integration server": "Não foi possível conectar ao servidor de integrações", "Create Room": "Criar Sala", "Cryptography": "Criptografia", "Current password": "Senha atual", - "Curve25519 identity key": "Chave de Indetificação Curve25519", "Deactivate Account": "Desativar conta", - "Decryption error": "Erro de descriptografia", "Default": "Padrão", "Deops user with given id": "Retirar função de moderador do usuário com o identificador informado", - "Device ID": "Identificador do dispositivo", "Displays action": "Visualizar atividades", - "Ed25519 fingerprint": "Impressão Digital Ed25519", "Emoji": "Emoji", - "End-to-end encryption information": "Informação criptografada ponta-a-ponta", "Error": "Erro", - "Event information": "Informação do evento", "Export E2E room keys": "Exportar chaves ponta-a-ponta da sala", "Failed to change password. Is your password correct?": "Não foi possível mudar a senha. A sua senha está correta?", "Failed to leave room": "Falha ao tentar deixar a sala", @@ -55,7 +45,6 @@ "Invites": "Convidar", "Invites user with given id to current room": "Convidar usuários com um dado identificador para esta sala", "Sign in with": "Quero entrar", - "Joins room with given alias": "Entra na sala com o nome informado", "Kicks user with given id": "Remove usuário com o identificador informado", "Labs": "Laboratório", "Leave room": "Sair da sala", @@ -65,10 +54,8 @@ "Moderator": "Moderador/a", "Name": "Nome", "New passwords must match each other.": "As novas senhas informadas precisam ser idênticas.", - "none": "nenhum", "Notifications": "Notificações", "": "", - "NOT verified": "NÃO verificado", "No users have specific privileges in this room": "Nenhum/a usuário/a possui privilégios específicos nesta sala", "Only people who have been invited": "Apenas pessoas que tenham sido convidadas", "Password": "Senha", @@ -83,7 +70,6 @@ "Return to login screen": "Retornar à tela de login", "Room Colour": "Cores da sala", "Rooms": "Salas", - "Scroll to bottom of page": "Ir para o fim da página", "Searches DuckDuckGo for results": "Buscar por resultados no buscador DuckDuckGo", "Send Reset Email": "Enviar email para redefinição de senha", "Server may be unavailable, overloaded, or you hit a bug.": "O servidor pode estar indisponível ou sobrecarregado, ou então você encontrou uma falha no sistema.", @@ -93,7 +79,6 @@ "Sign in": "Entrar", "Sign out": "Sair", "Someone": "Alguém", - "Start a chat": "Começar uma conversa", "Success": "Sucesso", "The email address linked to your account must be entered.": "O endereço de email relacionado a sua conta precisa ser informado.", "This doesn't appear to be a valid email address": "Este não aparenta ser um endereço de email válido", @@ -102,16 +87,11 @@ "Unable to remove contact information": "Não foi possível remover informação de contato", "Unable to verify email address.": "Não foi possível verificar o endereço de email.", "Unban": "Desfazer banimento", - "unencrypted": "não criptografado", - "unknown device": "dispositivo desconhecido", "unknown error code": "código de erro desconhecido", "Upload avatar": "Enviar uma imagem de perfil", "Upload file": "Enviar arquivo", - "User ID": "Identificador de Usuário", "Users": "Usuários", "Verification Pending": "Verificação pendente", - "Verification": "Verificação", - "verified": "verificado", "Video call": "Chamada de vídeo", "Voice call": "Chamada de voz", "VoIP conference finished.": "Conferência VoIP encerrada.", @@ -226,7 +206,6 @@ "Click to unmute audio": "Clique para retirar áudio do mudo", "Command error": "Erro de comando", "Decrypt %(text)s": "Descriptografar %(text)s", - "Direct chats": "Conversas pessoais", "Disinvite": "Desconvidar", "Download %(text)s": "Baixar %(text)s", "Failed to ban user": "Não foi possível banir o/a usuário/a", @@ -237,19 +216,15 @@ "Failed to mute user": "Não foi possível remover notificações da/do usuária/o", "Failed to reject invite": "Não foi possível rejeitar o convite", "Failed to set display name": "Houve falha ao definir o nome público", - "Failed to toggle moderator status": "Houve falha ao alterar o status de moderador/a", "Fill screen": "Tela cheia", "Incorrect verification code": "Código de verificação incorreto", "Join Room": "Ingressar na sala", "Jump to first unread message.": "Ir diretamente para a primeira das mensagens não lidas.", "Kick": "Remover", - "Local addresses for this room:": "Endereço local desta sala:", - "New address (e.g. #foo:%(localDomain)s)": "Novo endereço (p.ex: #algo:%(localDomain)s)", "not specified": "não especificado", "No more results": "Não há mais resultados", "No results": "Sem resultados", "OK": "Ok", - "Revoke Moderator": "Retirar status de moderador", "Search": "Buscar", "Search failed": "Busca falhou", "Server error": "Erro no servidor", @@ -260,11 +235,9 @@ "This room has no local addresses": "Esta sala não tem endereços locais", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas parece que você não tem permissões para ver a mensagem em questão.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas não o encontrei.", - "Unknown room %(roomId)s": "A sala %(roomId)s é desconhecida", "You seem to be in a call, are you sure you want to quit?": "Parece que você está em uma chamada. Tem certeza que quer sair?", "You seem to be uploading files, are you sure you want to quit?": "Parece que você está enviando arquivos. Tem certeza que quer sair?", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Você não poderá desfazer esta mudança, pois estará dando a este(a) usuário(a) o mesmo nível de permissões que você.", - "Make Moderator": "Tornar moderador(a)", "Room": "Sala", "Cancel": "Cancelar", "Ban": "Banir", @@ -305,15 +278,9 @@ "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.": "Você tem certeza que quer apagar este evento? Note que se você apaga o nome de uma sala ou uma mudança de tópico, esta ação não poderá ser desfeita.", "Unknown error": "Erro desconhecido", "Incorrect password": "Senha incorreta", - "To continue, please enter your password.": "Para continuar, por favor insira a sua senha.", - "I verify that the keys match": "Eu confirmo que as chaves são iguais", "Unable to restore session": "Não foi possível restaurar a sessão", "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.": "Se você já usou antes uma versão mais recente do %(brand)s, a sua sessão pode ser incompatível com esta versão. Feche esta janela e tente abrir com a versão mais recente.", "Unknown Address": "Endereço desconhecido", - "Unblacklist": "Tirar da lista de bloqueados", - "Blacklist": "Colocar na lista de bloqueados", - "Unverify": "Des-verificar", - "Verify...": "Verificar...", "ex. @bob:example.com": "p.ex: @joao:exemplo.com", "Add User": "Adicionar usuária(o)", "Custom Server Options": "Opções para Servidor Personalizado", @@ -327,7 +294,6 @@ "Error decrypting image": "Erro ao descriptografar a imagem", "Error decrypting video": "Erro ao descriptografar o vídeo", "Add an Integration": "Adicionar uma integração", - "Removed or unknown message type": "Mensagem removida ou de tipo desconhecido", "URL Previews": "Pré-visualização de links", "Drop file here to upload": "Arraste um arquivo aqui para enviar", " (unsupported)": " (não suportado)", @@ -344,8 +310,6 @@ "Incorrect username and/or password.": "Nome de usuária(o) e/ou senha incorreto.", "Invited": "Convidada(o)", "Results from DuckDuckGo": "Resultados de DuckDuckGo", - "Unrecognised room alias:": "Apelido de sala não reconhecido:", - "Use compact timeline layout": "Usar o layout de linha do tempo compacta", "Verified key": "Chave verificada", "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s removeu a imagem da sala.", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s alterou a imagem da sala %(roomName)s", @@ -361,9 +325,7 @@ "Anyone": "Qualquer pessoa", "Are you sure you want to leave the room '%(roomName)s'?": "Você tem certeza que deseja sair da sala '%(roomName)s'?", "Custom level": "Nível personalizado", - "device id: ": "id do dispositivo: ", "Register": "Registre-se", - "Remote addresses for this room:": "Endereços remotos para esta sala:", "Save": "Salvar", "You have disabled URL previews by default.": "Você desabilitou pré-visualizações de links por padrão.", "You have enabled URL previews by default.": "Você habilitou pré-visualizações de links por padrão.", @@ -389,14 +351,11 @@ "Accept": "Aceitar", "Active call (%(roomName)s)": "Chamada ativa (%(roomName)s)", "Admin Tools": "Ferramentas de administração", - "Alias (optional)": "Apelido (opcional)", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Não foi possível conectar ao Servidor de Base. Por favor, confira sua conectividade à internet, garanta que o certificado SSL do Servidor de Base é confiável, e que uma extensão do navegador não esteja bloqueando as requisições de rede.", "Close": "Fechar", "Custom": "Personalizado", "Decline": "Recusar", - "Disable Notifications": "Desabilitar notificações", "Drop File Here": "Arraste o arquivo aqui", - "Enable Notifications": "Habilitar notificações", "Failed to upload profile picture!": "Falha ao enviar a imagem de perfil!", "Incoming call from %(name)s": "Recebendo chamada de %(name)s", "Incoming video call from %(name)s": "Recebendo chamada de vídeo de %(name)s", @@ -409,7 +368,6 @@ "%(roomName)s does not exist.": "%(roomName)s não existe.", "%(roomName)s is not accessible at this time.": "%(roomName)s não está acessível neste momento.", "Seen by %(userName)s at %(dateTime)s": "Visto por %(userName)s em %(dateTime)s", - "Send anyway": "Enviar de qualquer maneira", "Start authentication": "Iniciar autenticação", "This room": "Esta sala", "unknown caller": "a pessoa que está chamando é desconhecida", @@ -427,10 +385,6 @@ "Do you want to set an email address?": "Você deseja definir um endereço de e-mail?", "This will allow you to reset your password and receive notifications.": "Isso permitirá que você redefina sua senha e receba notificações.", "Skip": "Pular", - "Start verification": "Iniciar a verificação", - "Share without verifying": "Compartilhar sem verificar", - "Ignore request": "Ignorar o pedido", - "Encryption key request": "Solicitação de chave de criptografia", "Invite to Community": "Convidar à comunidade", "Restricted": "Restrito", "Add to community": "Adicionar à comunidade", @@ -452,15 +406,9 @@ "Which officially provided instance you are using, if any": "Qual instância oficial você está usando, se for o caso", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Se você está usando o editor de texto visual", "Your homeserver's URL": "A URL do seu Servidor de Base (homeserver)", - "Your identity server's URL": "A URL do seu servidor de identidade", "The information being sent to us to help make %(brand)s better includes:": "As informações que estão sendo enviadas para ajudar a melhorar o %(brand)s incluem:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Quando esta página tem informação de identificação, como uma sala, ID de usuária/o ou de grupo, estes dados são removidos antes de serem enviados ao servidor.", "Call Failed": "A chamada falhou", - "Review Devices": "Revisar dispositivos", - "Call Anyway": "Ligar assim mesmo", - "Answer Anyway": "Responder assim mesmo", - "Call": "Ligar", - "Answer": "Responder", "PM": "PM", "AM": "AM", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s de %(monthName)s de%(fullYear)s", @@ -469,7 +417,6 @@ "Invite new community members": "Convidar novos integrantes para a comunidade", "Which rooms would you like to add to this community?": "Quais salas você quer adicionar a esta comunidade?", "Show these rooms to non-members on the community page and room list?": "Exibir estas salas para não integrantes na página da comunidade e na lista de salas?", - "Room name or alias": "Nome da sala ou apelido", "Unable to create widget.": "Não foi possível criar o widget.", "You are now ignoring %(userId)s": "Você está agora ignorando %(userId)s", "Unignored user": "Usuária/o não está sendo mais ignorada/o", @@ -502,11 +449,8 @@ "Jump to read receipt": "Ir para a confirmação de leitura", "Mention": "Mencionar", "Invite": "Convidar", - "User Options": "Opções de usuária/o", "Send an encrypted reply…": "Enviar uma resposta criptografada…", - "Send a reply (unencrypted)…": "Enviar uma resposta (não criptografada)…", "Send an encrypted message…": "Enviar mensagem criptografada…", - "Send a message (unencrypted)…": "Enviar mensagem (não criptografada)…", "Jump to message": "Pular para mensagem", "No pinned messages.": "Não há mensagens fixas.", "Loading...": "Carregando...", @@ -541,8 +485,6 @@ "URL previews are disabled by default for participants in this room.": "Pré-visualizações de links estão desativadas por padrão para participantes desta sala.", "Copied!": "Copiado!", "Failed to copy": "Não foi possível copiar", - "Message removed by %(userId)s": "Mensagem removida por %(userId)s", - "Message removed": "Mensagem removida", "An email has been sent to %(emailAddress)s": "Um email foi enviado para %(emailAddress)s", "A text message has been sent to %(msisdn)s": "Uma mensagem de texto foi enviada para %(msisdn)s", "Remove from community": "Remover da comunidade", @@ -685,8 +627,6 @@ "Warning": "Atenção", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Não há mais ninguém aqui! Você deseja convidar outras pessoas ou remover este alerta sobre a sala vazia?", "Clear filter": "Remover filtro", - "Light theme": "Tema claro", - "Dark theme": "Tema escuro", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "A privacidade é importante para nós, portanto nós não coletamos nenhum dado pessoa ou identificável para nossas estatísticas.", "Learn more about how we use analytics.": "Saiba mais sobre como nós usamos os dados estatísticos.", "Check for update": "Verificar atualizações", @@ -705,7 +645,6 @@ "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 criar um filtro, arraste a imagem de uma comunidade sobre o painel de filtros na extrema esquerda da sua tela. Você pode clicar na imagem de uma comunidade no painel de filtros a qualquer momento para ver apenas as salas e pessoas associadas com esta comunidade.", "Key request sent.": "Requisição de chave enviada.", "Fetching third party location failed": "Falha ao acessar localização de terceiros", - "A new version of %(brand)s is available.": "Uma nova versão do %(brand)s está disponível.", "I understand the risks and wish to continue": "Entendo os riscos e desejo continuar", "Send Account Data": "Enviar Dados da Conta", "Advanced notification settings": "Configurações avançadas de notificação", @@ -723,8 +662,6 @@ "Uploaded on %(date)s by %(user)s": "Enviada em %(date)s por %(user)s", "Send Custom Event": "Enviar Evento Customizado", "All notifications are currently disabled for all targets.": "Todas as notificações estão atualmente desabilitadas para todos os casos.", - "delete the alias.": "apagar o apelido da sala.", - "To return to your account in future you need to set a password": "Para poder, futuramente, retornar à sua conta, você precisa definir uma senha", "Forget": "Esquecer", "You cannot delete this image. (%(code)s)": "Você não pode apagar esta imagem. (%(code)s)", "Cancel Sending": "Cancelar o envio", @@ -750,7 +687,6 @@ "Noisy": "Barulhento", "Files": "Arquivos", "Collecting app version information": "Coletando informação sobre a versão do app", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Apagar o apelido %(alias)s da sala e remover %(name)s da lista pública?", "Keywords": "Palavras-chave", "Enable notifications for this account": "Ativar notificações para esta conta", "Invite to this community": "Convidar para essa comunidade", @@ -801,7 +737,6 @@ "Show message in desktop notification": "Mostrar mensagens na notificação", "Unhide Preview": "Mostrar a pré-visualização", "Unable to join network": "Não foi possível conectar na rede", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Você pode te-las configurado em outro cliente além do %(brand)s. Você não pode ajustá-las no %(brand)s, mas ainda assim elas se aplicam aqui", "Sorry, your browser is not able to run %(brand)s.": "Perdão. O seu navegador não é capaz de rodar o %(brand)s.", "Messages in group chats": "Mensagens em salas", "Yesterday": "Ontem", @@ -827,10 +762,8 @@ "Quote": "Citar", "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!": "Com o seu navegador atual, a aparência e sensação de uso da aplicação podem estar completamente incorretas, e algumas das funcionalidades poderão não funcionar. Se você quiser tentar de qualquer maneira, pode continuar, mas aí vai ter que se virar sozinho(a) com os problemas que porventura encontrar!", "Checking for an update...": "Verificando se há atualizações...", - "There are advanced notifications which are not shown here": "Existem opções avançadas que não são exibidas aqui", "Every page you use in the app": "Toda a página que você usa no aplicativo", "e.g. ": "ex. ", - "Your User Agent": "Seu Agente de Usuário", "Your device resolution": "Sua resolução de dispositivo", "Call in Progress": "Chamada em andamento", "A call is currently being placed!": "Uma chamada está sendo feita atualmente!", @@ -838,16 +771,10 @@ "Permission Required": "Permissão Exigida", "You do not have permission to start a conference call in this room": "Você não tem permissão para iniciar uma chamada de conferência nesta sala", "Unable to load! Check your network connectivity and try again.": "Incapaz de carregar! Verifique sua conectividade de rede e tente novamente.", - "Registration Required": "Registro requerido", - "You need to register to do this. Would you like to register now?": "Você precisa se registrar para fazer isso. Você gostaria de se registrar agora?", "Failed to invite users to the room:": "Não foi possível convidar usuários para a sala:", "Missing roomId.": "RoomId ausente.", "Opens the Developer Tools dialog": "Abre a caixa de diálogo Ferramentas do desenvolvedor", "Forces the current outbound group session in an encrypted room to be discarded": "Força a atual sessão de grupo de saída em uma sala criptografada a ser descartada", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s adicionado %(addedAddresses)s como endereço para esta sala.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s adicionado %(addedAddresses)s como um endereço para esta sala.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s removido %(removedAddresses)s como endereços para esta sala.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s removido %(removedAddresses)s como um endereço para esta sala.", "e.g. %(exampleValue)s": "ex. %(exampleValue)s", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s definiu o endereço principal desta sala para %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s removeu o endereço principal para esta sala.", @@ -874,7 +801,6 @@ "Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Repetições como \"abcabcabc\" são apenas um pouco mais difíceis de adivinhar que \"abc\"", "Sequences like abc or 6543 are easy to guess": "Sequências como abc ou 6543 são fáceis de adivinhar", "Recent years are easy to guess": "Os últimos anos são fáceis de adivinhar", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s adicionou %(addedAddresses)s e removeu %(removedAddresses)s como endereços para esta sala.", "Dates are often easy to guess": "As datas costumam ser fáceis de adivinhar", "This is a top-10 common password": "Esta é uma das top-10 senhas mais comuns", "This is a top-100 common password": "Esta é uma das top-100 senhas mais comuns", @@ -932,12 +858,6 @@ "The phone number field must not be blank.": "O campo do número de telefone não pode estar em branco.", "The password field must not be blank.": "O campo da senha não pode ficar em branco.", "Failed to load group members": "Falha ao carregar membros do grupo", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Por favor, ajude a melhorar o %(brand)s enviando dados de uso anônimo. Isso usará um cookie (consulte nossa Política de cookies).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Por favor, ajude a melhorar o %(brand)s enviando dados de uso anônimo. Isto irá usar um cookie.", - "Yes, I want to help!": "Sim, quero ajudar!", - "Please contact your service administrator to get this limit increased.": "Por favor, entre em contato com o administrador do serviço para aumentar esse limite.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Este homeserver atingiu seu limite de usuário ativo mensal, então alguns usuários não poderão efetuar login.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Este homeserver excedeu um dos seus limites de recursos, de modo que alguns usuários não poderão efetuar login.", "Failed to remove widget": "Falha ao remover o widget", "An error ocurred whilst trying to remove the widget from the room": "Ocorreu um erro ao tentar remover o widget da sala", "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Não é possível carregar o evento que foi respondido, ele não existe ou você não tem permissão para visualizá-lo.", @@ -950,7 +870,6 @@ "Before submitting logs, you must create a GitHub issue to describe your problem.": "Antes de enviar os registros, você deve criar uma questão no GitHub para descrever seu problema.", "Unable to load commit detail: %(msg)s": "Não é possível carregar os detalhes do commit: %(msg)s", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Para evitar perder seu histórico de bate-papo, você deve exportar as chaves do seu quarto antes de fazer logout. Você precisará voltar para a versão mais recente do %(brand)s para fazer isso", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Você já usou uma versão mais recente do %(brand)s em %(host)s. Para usar essa versão novamente com criptografia de ponta a ponta, você precisará sair e voltar novamente. ", "Incompatible Database": "Banco de dados incompatível", "Continue With Encryption Disabled": "Continuar com criptografia desativada", "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.": "Isso tornará sua conta permanentemente inutilizável. Você não poderá efetuar login e ninguém poderá registrar novamente o mesmo ID de usuário. Isso fará com que sua conta deixe todas as salas nas quais está participando e removerá os detalhes da sua conta do seu servidor de identidade. Esta ação é irreversível.", @@ -987,11 +906,9 @@ "Unable to load backup status": "Não é possível carregar o status do backup", "Unable to restore backup": "Não é possível restaurar o backup", "No backup found!": "Nenhum backup encontrado!", - "Backup Restored": "Backup restaurado", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Acesse seu histórico de mensagens seguras e configure mensagens seguras digitando sua frase secreta de recuperação.", "Next": "Próximo", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Se você esqueceu sua frase secreata de recuperação, você pode usar sua chave de recuperação ou configurar novas opções de recuperação", - "Enter Recovery Key": "Digite a chave de recuperação", "This looks like a valid recovery key!": "Isso parece uma chave de recuperação válida!", "Not a valid recovery key": "Não é uma chave de recuperação válida", "Access your secure message history and set up secure messaging by entering your recovery key.": "Acesse seu histórico seguro de mensagens e configure mensagens seguras inserindo sua chave de recuperação.", @@ -999,8 +916,6 @@ "Popout widget": "Widget Popout", "Send Logs": "Enviar relatos de problemas", "Failed to decrypt %(failedCount)s sessions!": "Falha ao descriptografar as sessões de %(failedCount)s!", - "Restored %(sessionCount)s session keys": "Chaves de sessão %(sessionCount)s restauradas", - "Enter Recovery Passphrase": "Digite a frase secreta de recuperação", "Set a new status...": "Definir um novo status ...", "Collapse Reply Thread": "Recolher grupo de respostas", "Clear status": "Limpar status", @@ -1030,23 +945,14 @@ "Please contact your service administrator to continue using this service.": "Por favor, entre em contato com o seu administrador de serviços para continuar usando este serviço.", "Failed to perform homeserver discovery": "Falha ao executar a descoberta do homeserver", "Sign in with single sign-on": "Entre com o logon único", - "Great! This passphrase looks strong enough.": "Ótimo! Esta frase secreta parece forte o suficiente.", - "Enter a passphrase...": "Digite uma frase secreta ...", "That matches!": "Isto corresponde!", "That doesn't match.": "Isto não corresponde.", "Go back to set it again.": "Volte e configure novamente.", - "Repeat your passphrase...": "Repita sua frase se recuperação...", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Como uma rede de segurança, você pode usá-la para restaurar seu histórico de mensagens criptografadas se esquecer sua frase secreta de recuperação.", - "As a safety net, you can use it to restore your encrypted message history.": "Como uma rede de segurança, você pode usá-la para restaurar seu histórico de mensagens criptografadas.", - "Your Recovery Key": "Sua chave de recuperação", - "Copy to clipboard": "Copiar para área de transferência", "Download": "Baixar", "Print it and store it somewhere safe": "Imprima-o e armazene-o em algum lugar seguro", "Save it on a USB key or backup drive": "Salve isto em uma chave USB ou unidade de backup", "Copy it to your personal cloud storage": "Copie isto para seu armazenamento em nuvem pessoal", "Set up Secure Message Recovery": "Configurar Recuperação Segura de Mensagens", - "Keep it safe": "Mantenha isto seguro", - "Create Key Backup": "Criar backup de chave", "Unable to create key backup": "Não é possível criar backup de chave", "Retry": "Tentar novamente", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Sem configurar a Recuperação Segura de Mensagens, você perderá seu histórico de mensagens seguras quando fizer logout.", @@ -1058,7 +964,6 @@ "Unrecognised address": "Endereço não reconhecido", "User %(user_id)s may or may not exist": "Usuário %(user_id)s pode existir ou não", "The following users may not exist": "Os seguintes usuários podem não existir", - "Waiting for %(userId)s to confirm...": "Aguardando que %(userId)s confirme...", "Prompt before sending invites to potentially invalid matrix IDs": "Avisar antes de enviar convites para IDs da Matrix potencialmente inválidas", "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Não é possível encontrar perfis para os IDs da Matrix listados abaixo - você gostaria de convidá-los mesmo assim?", "Invite anyway and never warn me again": "Convide mesmo assim e nunca mais me avise", @@ -1096,7 +1001,6 @@ "Send typing notifications": "Enviar notificações de digitação", "Enable Community Filter Panel": "Ativar painel de filtro da comunidade", "Allow Peer-to-Peer for 1:1 calls": "Permitir Peer-to-Peer para chamadas 1:1", - "Order rooms in the room list by most important first instead of most recent": "Ordene as salas na lista pela primeira mais importante, em vez da mais recente", "Messages containing my username": "Mensagens contendo meu nome de usuário", "The other party cancelled the verification.": "A outra parte cancelou a verificação.", "Verified!": "Verificado!", diff --git a/src/i18n/strings/ro.json b/src/i18n/strings/ro.json index dab9bb0aab..aa87d0a912 100644 --- a/src/i18n/strings/ro.json +++ b/src/i18n/strings/ro.json @@ -9,21 +9,14 @@ "Which officially provided instance you are using, if any": "Ce instanță ați furnizat oficial instanței pe care o utilizați, dacă este cazul", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Indiferent dacă utilizați sau nu modul Richtext mod din Rich Text Editor", "Your homeserver's URL": "Adresa URL a Serverului de bază", - "Your identity server's URL": "Adresa URL a serverului dvs. de identitate", "e.g. %(exampleValue)s": "ex %(exampleValue)s", "Every page you use in the app": "Fiecare pagină pe care o utilizați în aplicație", "e.g. ": "ex. ", - "Your User Agent": "Agentul dvs. de utilizator", "Your device resolution": "Rezoluția dispozitivului", "Analytics": "Analizarea", "The information being sent to us to help make %(brand)s better includes:": "Informațiile care ne sunt trimise pentru a ne ajuta să facem mai bine %(brand)s includ:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "În cazul în care această pagină include informații care pot fi identificate, cum ar fi o cameră, un utilizator sau un ID de grup, aceste date sunt eliminate înainte de a fi trimise la server.", "Call Failed": "Apel eșuat", - "Review Devices": "Examinați dispozitivele", - "Call Anyway": "Sună oricum", - "Answer Anyway": "Răspunsul Oricum", - "Call": "Sună", - "Answer": "Răspunde", "Call Timeout": "Durata apelurilor", "The remote side failed to pick up": "Partea de la distanță nu a reușit să se ridice", "Unable to capture screen": "Imposibil de captat ecran", @@ -32,7 +25,6 @@ "VoIP is unsupported": "VoIP nu este acceptat", "You cannot place VoIP calls in this browser.": "Nu puteți efectua apeluri VoIP în acest browser.", "You cannot place a call with yourself.": "Nu poți apela cu tine însuți.", - "Could not connect to the integration server": "Nu s-a putut conecta la serverul de integrare", "Call in Progress": "Apel în curs", "A call is currently being placed!": "Un apel este în curs de plasare!", "A call is already in progress!": "Un apel este deja în curs!", @@ -42,7 +34,6 @@ "Upload Failed": "Încărcarea eșuată", "Failure to create room": "Eșecul de a crea spațiu", "Server may be unavailable, overloaded, or you hit a bug.": "Serverul poate fi indisponibil, supraîncărcat sau ați lovit un bug.", - "Send anyway": "Trimite oricum", "Send": "Trimite", "Sun": "Dum", "Mon": "Lun", @@ -76,7 +67,6 @@ "Which rooms would you like to add to this community?": "Ce camere doriți să adăugați la această comunitate?", "Show these rooms to non-members on the community page and room list?": "Arătați aceste camere către ne-membri pe pagina de comunitate și lista de camere?", "Add rooms to the community": "Adăugați camere la comunitate", - "Room name or alias": "Numele camerei sau aliasul", "Add to community": "Adăugați la comunitate", "Failed to invite the following users to %(groupId)s:": "Nu a putut fi invitat următorii utilizatori %(groupId)s", "Failed to invite users to community": "Nu a fost posibilă invitarea utilizatorilor la comunitate", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 84cf5f4033..37444a675e 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -2,34 +2,24 @@ "Account": "Учётная запись", "Admin": "Администратор", "Advanced": "Подробности", - "Algorithm": "Алгоритм", "A new password must be entered.": "Введите новый пароль.", "Anyone who knows the room's link, apart from guests": "Все, у кого есть ссылка на эту комнату, кроме гостей", "Anyone who knows the room's link, including guests": "Все, у кого есть ссылка на эту комнату, включая гостей", "Are you sure you want to reject the invitation?": "Вы уверены что хотите отклонить приглашение?", "Banned users": "Заблокированные пользователи", "Bans user with given id": "Блокирует пользователя с заданным ID", - "Blacklisted": "В черном списке", "Changes your display nickname": "Изменяет ваш псевдоним", - "Claimed Ed25519 fingerprint key": "Требуемый ключ цифрового отпечатка Ed25519", "Click here to fix": "Нажмите здесь, чтобы исправить это", "Commands": "Команды", "Continue": "Продолжить", - "Could not connect to the integration server": "Не удалось подключиться к серверу интеграции", "Create Room": "Создать комнату", "Cryptography": "Криптография", - "Curve25519 identity key": "Ключ идентификации Curve25519", "Deactivate Account": "Деактивировать учётную запись", - "Decryption error": "Ошибка расшифровки", "Default": "По умолчанию", "Deops user with given id": "Снимает полномочия оператора с пользователя с заданным ID", - "Device ID": "ID устройства", "Displays action": "Отображение действий", - "Ed25519 fingerprint": "Ed25519 отпечаток", "Emoji": "Смайлы", - "End-to-end encryption information": "Сведения о сквозном шифровании", "Error": "Ошибка", - "Event information": "Информация о событии", "Export E2E room keys": "Экспорт ключей шифрования", "Failed to change password. Is your password correct?": "Не удалось сменить пароль. Вы правильно ввели текущий пароль?", "Failed to leave room": "Не удалось выйти из комнаты", @@ -51,7 +41,6 @@ "Invites": "Приглашения", "Invites user with given id to current room": "Приглашает пользователя с заданным ID в текущую комнату", "Sign in with": "Войти с помощью", - "Joins room with given alias": "Входит в комнату с заданным псевдонимом", "Kicks user with given id": "Выгоняет пользователя с заданным ID", "Labs": "Лаборатория", "Leave room": "Покинуть комнату", @@ -61,10 +50,8 @@ "Moderator": "Модератор", "Name": "Имя", "New passwords must match each other.": "Новые пароли должны совпадать.", - "none": "никто", "Notifications": "Уведомления", "": "<не поддерживается>", - "NOT verified": "НЕ проверено", "No users have specific privileges in this room": "Ни один пользователь не имеет особых прав в этой комнате", "Password": "Пароль", "Permissions": "Права доступа", @@ -73,21 +60,15 @@ "Return to login screen": "Вернуться к экрану входа", "Send Reset Email": "Отправить письмо со ссылкой для сброса пароля", "Settings": "Настройки", - "Start a chat": "Начать разговор", "Unable to add email address": "Не удается добавить email", "Unable to remove contact information": "Не удалось удалить контактную информацию", "Unable to verify email address.": "Не удалось проверить email.", "Unban": "Разблокировать", - "unencrypted": "без шифрования", - "unknown device": "неизвестное устройство", "unknown error code": "неизвестный код ошибки", "Upload avatar": "Загрузить аватар", "Upload file": "Отправить файл", - "User ID": "ID пользователя", "Users": "Пользователи", "Verification Pending": "В ожидании подтверждения", - "Verification": "Проверка", - "verified": "проверенный", "Video call": "Видеовызов", "Voice call": "Голосовой вызов", "VoIP conference finished.": "Конференц-звонок окончен.", @@ -178,7 +159,6 @@ "Click to unmute video": "Щелкните, чтобы включить видео", "Click to unmute audio": "Щелкните, чтобы включить звук", "Decrypt %(text)s": "Расшифровать %(text)s", - "Direct chats": "Личные чаты", "Disinvite": "Отозвать приглашение", "Download %(text)s": "Скачать %(text)s", "Failed to ban user": "Не удалось заблокировать пользователя", @@ -203,13 +183,10 @@ "Failed to mute user": "Не удалось заглушить пользователя", "Failed to reject invite": "Не удалось отклонить приглашение", "Failed to set display name": "Не удалось задать отображаемое имя", - "Failed to toggle moderator status": "Не удалось переключить статус модератора", "Fill screen": "Заполнить экран", "Incorrect verification code": "Неверный код подтверждения", "Join Room": "Войти в комнату", "Kick": "Выгнать", - "Local addresses for this room:": "Адреса этой комнаты на вашем сервере:", - "New address (e.g. #foo:%(localDomain)s)": "Новый адрес (например, #чтонибудь:%(localDomain)s)", "New passwords don't match": "Новые пароли не совпадают", "not specified": "не задан", "No more results": "Больше никаких результатов", @@ -232,7 +209,6 @@ "Room %(roomId)s not visible": "Комната %(roomId)s невидима", "Room Colour": "Цвет комнаты", "Rooms": "Комнаты", - "Scroll to bottom of page": "Перейти к нижней части страницы", "Search": "Поиск", "Search failed": "Поиск не удался", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s отправил(а) изображение.", @@ -251,10 +227,8 @@ "This room is not recognised.": "Эта комната не опознана.", "This doesn't appear to be a valid email address": "Похоже, это недействительный адрес email", "This phone number is already in use": "Этот номер телефона уже используется", - "Unknown room %(roomId)s": "Неизвестная комната %(roomId)s", "You seem to be uploading files, are you sure you want to quit?": "Похоже, вы отправляете файлы, вы уверены, что хотите выйти?", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s %(time)s", - "Make Moderator": "Сделать модератором", "Room": "Комната", "Cancel": "Отмена", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Не удается подключиться к домашнему серверу через HTTP, так как в адресной строке браузера указан адрес HTTPS. Используйте HTTPS или включите небезопасные скрипты.", @@ -265,7 +239,6 @@ "powered by Matrix": "основано на Matrix", "Add a topic": "Задать тему", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Отображать время в 12-часовом формате (напр. 2:30 ПП)", - "Use compact timeline layout": "Использовать компактный вид списка сообщений", "No Microphones detected": "Микрофоны не обнаружены", "Camera": "Камера", "Microphone": "Микрофон", @@ -281,7 +254,6 @@ "Are you sure you want to leave the room '%(roomName)s'?": "Вы уверены, что хотите покинуть '%(roomName)s'?", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s удалил(а) имя комнаты.", "Custom level": "Специальные права", - "device id: ": "ID устройства: ", "Email address": "Email", "Error decrypting attachment": "Ошибка расшифровки вложения", "Export": "Экспорт", @@ -291,9 +263,7 @@ "Invited": "Приглашен", "Jump to first unread message.": "Перейти к первому непрочитанному сообщению.", "Privileged Users": "Привилегированные пользователи", - "Revoke Moderator": "Отозвать права модератора", "Register": "Зарегистрироваться", - "Remote addresses for this room:": "Адреса этой комнаты на других серверах:", "Results from DuckDuckGo": "Результаты от DuckDuckGo", "Save": "Сохранить", "Searches DuckDuckGo for results": "Для поиска используется DuckDuckGo", @@ -309,7 +279,6 @@ "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Попытка загрузить выбранный интервал истории чата этой комнаты не удалась, так как у вас нет разрешений на просмотр.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Попытка загрузить выбранный интервал истории чата этой комнаты не удалась, так как запрошенный элемент не найден.", "Unmute": "Вернуть право речи", - "Unrecognised room alias:": "Нераспознанный псевдоним комнаты:", "Verified key": "Ключ проверен", "You have disabled URL previews by default.": "Предпросмотр ссылок по умолчанию выключен для вас.", "You have enabled URL previews by default.": "Предпросмотр ссылок по умолчанию включен для вас.", @@ -336,15 +305,9 @@ "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.": "Вы действительно хотите удалить это событие? Обратите внимание, что если это смена названия комнаты или темы, то удаление отменит это изменение.", "Unknown error": "Неизвестная ошибка", "Incorrect password": "Неверный пароль", - "To continue, please enter your password.": "Чтобы продолжить, введите ваш пароль.", - "I verify that the keys match": "Я подтверждаю, что ключи совпадают", "Unable to restore session": "Восстановление сессии не удалось", "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.": "Если вы использовали более новую версию %(brand)s, то ваша сессия может быть несовместима с текущей. Закройте это окно и вернитесь к использованию более новой версии.", "Unknown Address": "Неизвестный адрес", - "Unblacklist": "Разблокировать", - "Blacklist": "Заблокировать", - "Unverify": "Отозвать доверие", - "Verify...": "Сверить ключи...", "ex. @bob:example.com": "например @bob:example.com", "Add User": "Добавить пользователя", "Please check your email to continue registration.": "Чтобы продолжить регистрацию, проверьте электронную почту.", @@ -356,7 +319,6 @@ "Error decrypting video": "Ошибка расшифровки видео", "Add an Integration": "Добавить интеграцию", "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. Продолжить?", - "Removed or unknown message type": "Сообщение удалено или имеет неизвестный тип", "URL Previews": "Предпросмотр содержимого ссылок", "Drop file here to upload": "Перетащите файл сюда для отправки", " (unsupported)": " (не поддерживается)", @@ -389,11 +351,8 @@ "Accept": "Принять", "Active call (%(roomName)s)": "Текущий вызов (%(roomName)s)", "Admin Tools": "Инструменты администратора", - "Alias (optional)": "Псевдоним (опционально)", "Close": "Закрыть", - "Disable Notifications": "Отключить уведомления", "Drop File Here": "Перетащите файл сюда", - "Enable Notifications": "Включить оповещения", "Failed to upload profile picture!": "Не удалось загрузить аватар!", "Incoming call from %(name)s": "Входящий вызов от %(name)s", "Incoming video call from %(name)s": "Входящий видеовызов от %(name)s", @@ -411,7 +370,6 @@ "%(roomName)s does not exist.": "%(roomName)s не существует.", "%(roomName)s is not accessible at this time.": "%(roomName)s на данный момент недоступна.", "Seen by %(userName)s at %(dateTime)s": "Прочитано %(userName)s в %(dateTime)s", - "Send anyway": "Отправить в любом случае", "unknown caller": "неизвестный абонент", "Unnamed Room": "Комната без названия", "Upload new:": "Загрузить новый:", @@ -427,10 +385,6 @@ "Do you want to set an email address?": "Хотите указать email?", "This will allow you to reset your password and receive notifications.": "Это позволит при необходимости сбросить пароль и получать уведомления.", "Skip": "Пропустить", - "Start verification": "Начать проверку", - "Share without verifying": "Поделиться без проверки", - "Ignore request": "Игнорировать запрос", - "Encryption key request": "Запрос ключа шифрования", "Check for update": "Проверить наличие обновлений", "Add a widget": "Добавить виджет", "Allow": "Принять", @@ -460,7 +414,6 @@ "Failed to copy": "Не удалось скопировать", "Ignore": "Игнорировать", "Unignore": "Перестать игнорировать", - "User Options": "Действия", "You are now ignoring %(userId)s": "Теперь вы игнорируете %(userId)s", "You are no longer ignoring %(userId)s": "Вы больше не игнорируете %(userId)s", "Unignored user": "Пользователь убран из списка игнорирования", @@ -468,7 +421,6 @@ "Stops ignoring a user, showing their messages going forward": "Прекращает игнорирование пользователя, показывая их будущие сообщения", "Ignores a user, hiding their messages from you": "Игнорирует пользователя, скрывая сообщения от вас", "Banned by %(displayName)s": "Заблокирован(а) %(displayName)s", - "Message removed by %(userId)s": "Сообщение удалено %(userId)s", "Description": "Описание", "Unable to accept invite": "Невозможно принять приглашение", "Leave": "Покинуть", @@ -486,7 +438,6 @@ "Add to summary": "Добавить в сводку", "Failed to add the following users to the summary of %(groupId)s:": "Не удалось добавить следующих пользователей в сводку %(groupId)s:", "Which rooms would you like to add to this summary?": "Какие комнаты вы хотите добавить в эту сводку?", - "Room name or alias": "Название или псевдоним комнаты", "Pinned Messages": "Закреплённые сообщения", "%(senderName)s changed the pinned messages for the room.": "%(senderName)s изменил(а) закреплённые в этой комнате сообщения.", "Failed to add the following rooms to the summary of %(groupId)s:": "Не удалось добавить следующие комнаты в сводку %(groupId)s:", @@ -494,8 +445,6 @@ "The room '%(roomName)s' could not be removed from the summary.": "Комнату '%(roomName)s' не удалось удалить из сводки.", "Failed to remove a user from the summary of %(groupId)s": "Не удалось удалить пользователя из сводки %(groupId)s", "The user '%(displayName)s' could not be removed from the summary.": "Пользователя '%(displayName)s' не удалось удалить из сводки.", - "Light theme": "Светлая тема", - "Dark theme": "Тёмная тема", "Unknown": "Неизвестно", "Failed to add the following rooms to %(groupId)s:": "Не удалось добавить эти комнаты в %(groupId)s:", "Matrix ID": "Matrix ID", @@ -554,7 +503,6 @@ "And %(count)s more...|other": "Еще %(count)s…", "Delete Widget": "Удалить виджет", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Удаление виджета действует для всех участников этой комнаты. Вы действительно хотите удалить этот виджет?", - "Message removed": "Сообщение удалено", "Mirror local video feed": "Зеркально отражать видео со своей камеры", "Invite": "Пригласить", "Mention": "Упомянуть", @@ -656,11 +604,6 @@ "Something went wrong when trying to get your communities.": "Что-то пошло не так при попытке получить список ваших сообществ.", "This homeserver doesn't offer any login flows which are supported by this client.": "Этот домашний сервер не поддерживает метод входа, поддерживаемый клиентом.", "Call Failed": "Звонок не удался", - "Review Devices": "Проверка устройств", - "Call Anyway": "Позвонить в любом случае", - "Answer Anyway": "Ответить в любом случае", - "Call": "Позвонить", - "Answer": "Ответить", "Send": "Отправить", "collapse": "свернуть", "expand": "развернуть", @@ -676,20 +619,17 @@ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Отправить все или отменить все сейчас. Можно также выбрать отдельные сообщения для отправки или отмены.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Отправить или отменить сообщение сейчас.", "Send an encrypted reply…": "Отправить зашифрованный ответ…", - "Send a reply (unencrypted)…": "Отправить ответ (нешифрованный)…", "Send an encrypted message…": "Отправить зашифрованное сообщение…", - "Send a message (unencrypted)…": "Отправить сообщение (нешифрованное)…", "Replying": "Отвечает", "Minimize apps": "Свернуть приложения", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Конфиденциальность важна для нас, поэтому мы не собираем никаких личных или идентифицирующих данных для нашей аналитики.", "Learn more about how we use analytics.": "Подробнее о том, как мы используем аналитику.", - "The information being sent to us to help make %(brand)s better includes:": "Информация, отправляемая нам, чтобы помочь нам сделать %(brand)s лучше, включает в себя:", + "The information being sent to us to help make %(brand)s better includes:": "Информация, которая отправляется нам для улучшения %(brand)s, включает в себя:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Если на этой странице встречаются сведения личного характера, например имя комнаты, имя пользователя или группы, они удаляются перед отправкой на сервер.", "The platform you're on": "Используемая платформа", "The version of %(brand)s": "Версия %(brand)s", "Your language of choice": "Выбранный язык", "Your homeserver's URL": "URL-адрес сервера", - "Your identity server's URL": "URL-адрес сервера идентификации", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s", "Which officially provided instance you are using, if any": "Каким официально поддерживаемым клиентом вы пользуетесь (если пользуетесь)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Используете ли вы режим Richtext в редакторе Rich Text Editor", @@ -720,7 +660,6 @@ "Hide Stickers": "Скрыть стикеры", "Show Stickers": "Показать стикеры", "Fetching third party location failed": "Не удалось извлечь местоположение третьей стороны", - "A new version of %(brand)s is available.": "Доступна новая версия %(brand)s.", "I understand the risks and wish to continue": "Я понимаю риски и желаю продолжить", "Send Account Data": "Отправка данных учётной записи", "All notifications are currently disabled for all targets.": "Все оповещения для всех устройств отключены.", @@ -740,8 +679,6 @@ "Send Custom Event": "Отправить произвольное событие", "Advanced notification settings": "Дополнительные параметры уведомлений", "Failed to send logs: ": "Не удалось отправить журналы: ", - "delete the alias.": "удалить псевдоним.", - "To return to your account in future you need to set a password": "Чтобы вы могли использовать свою учётную запись позже, вам необходимо задать пароль", "Forget": "Забыть", "You cannot delete this image. (%(code)s)": "Вы не можете удалить это изображение. (%(code)s)", "Cancel Sending": "Отменить отправку", @@ -767,7 +704,6 @@ "No update available.": "Нет доступных обновлений.", "Resend": "Переотправить", "Collecting app version information": "Сбор информации о версии приложения", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Удалить псевдоним комнаты %(alias)s и удалить %(name)s из каталога?", "Keywords": "Ключевые слова", "Enable notifications for this account": "Включить уведомления для этой учётной записи", "Invite to this community": "Пригласить в это сообщество", @@ -821,7 +757,6 @@ "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.": "Журналы отладки содержат данные об использовании приложения, включая ваше имя пользователя, идентификаторы или псевдонимы комнат или групп, которые вы посетили, а также имена других пользователей. Они не содержат сообщений.", "Unhide Preview": "Показать предварительный просмотр", "Unable to join network": "Не удается подключиться к сети", - "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, а в другом Matrix-клиенте. Настроить их в %(brand)s не удастся, но они будут продолжать работать и здесь", "Sorry, your browser is not able to run %(brand)s.": "К сожалению, ваш браузер не способен запустить %(brand)s.", "Messages in group chats": "Сообщения в конференциях", "Yesterday": "Вчера", @@ -846,13 +781,11 @@ "Quote": "Цитата", "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!": "В текущем браузере внешний вид приложения может быть полностью неверным, а некоторые или все функции могут не работать. Если вы хотите попробовать в любом случае, то можете продолжить, но с теми проблемами, с которыми вы можете столкнуться вам придется разбираться самостоятельно!", "Checking for an update...": "Проверка обновлений…", - "There are advanced notifications which are not shown here": "Существуют дополнительные уведомления, которые не показаны здесь", "Missing roomId.": "Отсутствует идентификатор комнаты.", "You don't currently have any stickerpacks enabled": "У вас нет стикеров", "Popout widget": "Всплывающий виджет", "Every page you use in the app": "Каждая страница, которую вы используете в приложении", "e.g. ": "напр. ", - "Your User Agent": "Ваш пользовательский агент", "Your device resolution": "Разрешение вашего устройства", "Always show encryption icons": "Всегда показывать значки шифрования", "Send Logs": "Отправить логи", @@ -874,9 +807,6 @@ "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:": "Чтобы продолжить, введите пароль:", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Пожалуйста, помогите улучшить %(brand)s, отправляя анонимные данные использования. При этом будут использоваться cookie (ознакомьтесь с нашейПолитикой cookie).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Пожалуйста, помогите улучшить %(brand)s, отправляя анонимные данные использования. При этом будут использоваться cookie.", - "Yes, I want to help!": "Да, я хочу помочь!", "Can't leave Server Notices room": "Невозможно покинуть комнату сервера уведомлений", "This room is used for important messages from the Homeserver, so you cannot leave it.": "Эта комната используется для важных сообщений от сервера, поэтому вы не можете ее покинуть.", "No Audio Outputs detected": "Аудиовыход не обнаружен", @@ -910,15 +840,12 @@ "System Alerts": "Системные оповещения", "Only room administrators will see this warning": "Только администраторы комнат увидят это предупреждение", "Please contact your service administrator to continue using the service.": "Пожалуйста, обратитесь к вашему администратору, чтобы продолжить использование сервиса.", - "Please contact your service administrator to get this limit increased.": "Пожалуйста, обратитесь к вашему администратору, чтобы увеличить этот лимит.", "Upgrade Room Version": "Обновление версии комнаты", "Create a new room with the same name, description and avatar": "Создадим новую комнату с тем же именем, описанием и аватаром", "Update any local room aliases to point to the new room": "Обновим локальные псевдонимы комнат", "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "Остановим общение пользователей в старой версии комнаты и опубликуем сообщение, в котором пользователям рекомендуется перейти в новую комнату", "Put a link back to the old room at the start of the new room so people can see old messages": "Разместим ссылку на старую комнату, чтобы люди могли видеть старые сообщения", "Please contact your service administrator to continue using this service.": "Пожалуйста, обратитесь к вашему администратору, чтобы продолжить использовать этот сервис.", - "Registration Required": "Требуется регистрация", - "You need to register to do this. Would you like to register now?": "Вам необходимо зарегистрироваться для этого действия. Вы хотели бы зарегистрировать сейчас?", "Whether or not you're logged in (we don't record your username)": "Независимо от того, вошли вы или нет (мы не записываем ваше имя пользователя)", "Unable to load! Check your network connectivity and try again.": "Не удалось загрузить! Проверьте подключение к сети и попробуйте снова.", "Failed to invite users to the room:": "Не удалось пригласить пользователей в комнату:", @@ -926,11 +853,6 @@ "Sets the room name": "Устанавливает название комнаты", "Forces the current outbound group session in an encrypted room to be discarded": "Принудительно отбрасывает текущую групповую сессию для отправки сообщений в зашифрованную комнату", "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s модернизировал эту комнату.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s добавил %(addedAddresses)s к списку адресов комнаты.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s добавил %(addedAddresses)s к списку адресов комнаты.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s удалил %(removedAddresses)s из списка адресов комнаты.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s удалил %(removedAddresses)s из списка адресов комнаты.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s добавил %(addedAddresses)s и удалил %(removedAddresses)s из списка адресов комнаты.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s установил %(address)s в качестве главного адреса комнаты.", "%(senderName)s removed the main address for this room.": "%(senderName)s удалил главный адрес комнаты.", "%(displayName)s is typing …": "%(displayName)s печатает…", @@ -1040,8 +962,6 @@ "This room is a continuation of another conversation.": "Эта комната является продолжением другого разговора.", "Click here to see older messages.": "Нажмите, чтобы увидеть старые сообщения.", "Failed to load group members": "Не удалось загрузить участников группы", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Из-за ежемесячного ограничения активных пользователей сервера некоторые из пользователей не смогут войти в систему.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Превышен один из ресурсных лимитов сервера, по этому некоторые пользователи не смогут залогиниться.", "Join": "Войти", "That doesn't look like a valid email address": "Это не похоже на адрес электронной почты", "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.": "Ваше сообщение не было отправлено, потому что этот домашний сервер превысил месячный лимит активных пользователей. обратитесь к администратору службы, чтобы продолжить использование службы.", @@ -1062,9 +982,6 @@ "Before submitting logs, you must create a GitHub issue to describe your problem.": "Перед отправкой логов необходимо создать GitHub issue, для описания проблемы.", "Incompatible Database": "Несовместимая база данных", "Continue With Encryption Disabled": "Продолжить с отключенным шифрованием", - "Use Legacy Verification (for older clients)": "Использовать устаревшую верификацию (для старых клиентов)", - "Verify by comparing a short text string.": "Проверьте, сравнив короткую текстовую строку.", - "Begin Verifying": "Начать проверку", "Incoming Verification Request": "Входящий запрос о проверке", "Clear cache and resync": "Очистить кэш и выполнить повторную синхронизацию", "Updating %(brand)s": "Обновление %(brand)s", @@ -1077,14 +994,8 @@ "Unable to load backup status": "Невозможно загрузить статус резервной копии", "Unable to restore backup": "Невозможно восстановить резервную копию", "No backup found!": "Резервных копий не найдено!", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Невозможно расшифровать резервную копию этим ключом: убедитесь, что вы ввели правильный ключ восстановления.", - "Backup Restored": "Резервная копия восстановлена", - "Enter Recovery Passphrase": "Введите парольную фразу восстановления", "Starting backup...": "Запуск резервного копирования...", - "Keep it safe": "Храните надёжно", - "Copy to clipboard": "Скопировать в буфер обмена", "Download": "Скачать", - "Your Recovery Key": "Ваш ключ восстановления", "Create your account": "Создать учётную запись", "Username": "Имя пользователя", "Not sure of your password? Set a new one": "Не уверены в пароле? Установите новый", @@ -1106,7 +1017,6 @@ "A new recovery passphrase and key for Secure Messages have been detected.": "Обнаружена новая парольная фраза восстановления и ключ для безопасных сообщений.", "New Recovery Method": "Новый метод восстановления", "If you don't want to set this up now, you can later in Settings.": "Это можно сделать позже в настройках.", - "Create Key Backup": "Создать ключ резервного копирования", "Set up Secure Message Recovery": "Настройка безопасного восстановления сообщений", "Copy it to your personal cloud storage": "Скопируйте в персональное облачное хранилище", "Save it on a USB key or backup drive": "Сохраните на USB-диске или на резервном диске", @@ -1188,7 +1098,6 @@ "User %(userId)s is already in the room": "Пользователь %(userId)s уже находится в комнате", "The user must be unbanned before they can be invited.": "Пользователь должен быть разблокирован прежде чем может быть приглашён.", "Allow Peer-to-Peer for 1:1 calls": "Разрешить прямое соединение (p2p) для прямых звонков (один на один)", - "Order rooms in the room list by most important first instead of most recent": "Сортировать список комнат по важности вместо активности", "Verify this user by confirming the following emoji appear on their screen.": "Проверьте собеседника, убедившись, что на его экране отображаются следующие символы (смайлы).", "Unable to find a supported verification method.": "Невозможно определить поддерживаемый метод верификации.", "Scissors": "Ножницы", @@ -1227,7 +1136,6 @@ "A username can only contain lower case letters, numbers and '=_-./'": "Имя пользователя может содержать только буквы нижнего регистра, цифры и знаки '=_-./'", "Composer": "Редактор", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Используете ли вы функцию \"хлебные крошки\" (аватары над списком комнат) или нет", - "A conference call could not be started because the integrations server is not available": "Конференц-вызов не может быть запущен, так как сервер интеграции недоступен", "Replying With Files": "Ответ файлами", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "На данный момент не возможнo ответить с файлом. Хотите загрузить этот файл без ответа?", "The file '%(fileName)s' failed to upload.": "Файл '%(fileName)s' не был загружен.", @@ -1263,7 +1171,6 @@ "Send %(eventType)s events": "Отправить %(eventType)s события", "Select the roles required to change various parts of the room": "Выберите роли, которые смогут менять различные параметры комнаты", "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.": "После включения шифрования в комнате оно не может быть отключено. Сообщения, отправленные в шифрованной комнате, смогут прочитать только участники комнаты, но не сервер. Включенное шифрование может помешать корректной работе многим ботам и мостам. Подробнее о шифровании.", - "To link to this room, please add an alias.": "Для ссылки на эту комнату, пожалуйста, добавьте псевдоним.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Изменения в том, кто может читать историю, будут применяться только к будущим сообщениям в этой комнате. Существующие истории останутся без изменений.", "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s включено для %(groups)s в этой комнате.", "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s выключено для %(groups)s в этой комнате.", @@ -1307,10 +1214,6 @@ "Revoke invite": "Отозвать приглашение", "Invited by %(sender)s": "Приглашен %(sender)s", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "При обновлении основного адреса комнаты произошла ошибка. Возможно, это не разрешено сервером или произошел временный сбой.", - "Error creating alias": "Ошибка при создании псевдонима", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Произошла ошибка при создании этого псевдонима. Возможно, это не разрешено сервером или произошёл временный сбой.", - "Error removing alias": "Ошибка удаления псевдонима", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Произошла ошибка при удалении этого псевдонима. Возможно, он больше не существует или произошла временная ошибка.", "Error updating flair": "Ошибка обновления стиля", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "При обновлении стиля для этой комнаты произошла ошибка. Сервер может не разрешить это или произошла временная ошибка.", "reacted with %(shortName)s": "отреагировал с %(shortName)s", @@ -1329,11 +1232,6 @@ "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.": "Если есть дополнительный контекст, который может помочь в анализе проблемы, такой как то, что вы делали в то время, ID комнат, ID пользователей и т. д., пожалуйста, включите эти данные.", "Unable to load commit detail: %(msg)s": "Невозможно загрузить детали: %(msg)s", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Чтобы не потерять историю чата, вы должны экспортировать ключи от комнаты перед выходом из системы. Для этого вам нужно будет вернуться к более новой версии %(brand)s", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "В прошлый раз вы использовали более новую версию %(brand)s на сервере %(host)s. Чтобы снова использовать эту версию со сквозным шифрованием, вам нужно выйти и снова войти. ", - "Waiting for partner to accept...": "Ожидание подтверждения партнера...", - "Nothing appearing? Not all clients support interactive verification yet. .": "Ничего не появляется? Еще не все клиенты поддерживают интерактивную проверку. .", - "Waiting for %(userId)s to confirm...": "Ожидание подтверждения от %(userId)s...", - "Use two-way text verification": "Использовать двустороннюю проверку текста", "View Servers in Room": "Просмотр серверов в комнате", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Проверьте этого пользователя, чтобы отметить его как доверенного. Доверенные пользователи дают вам больше уверенности при использовании шифрованных сообщений.", "Waiting for partner to confirm...": "Ожидание подтверждения партнера...", @@ -1364,16 +1262,11 @@ "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.": "Виджет расположенный в %(widgetUrl)s, хотел бы подтвердить вашу личность. Разрешая это, виджет сможет проверять ваш ID пользователя, но не выполнять действия как вы.", "Remember my selection for this widget": "Запомнить мой выбор для этого виджета", "Deny": "Отказать", - "Recovery Key Mismatch": "Несоответствие ключа восстановления", - "Incorrect Recovery Passphrase": "Неверный пароль восстановления", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Невозможно расшифровать резервную копию с помощью этой парольной фразы: убедитесь, что вы ввели правильную парольную фразу для восстановления.", "Failed to decrypt %(failedCount)s sessions!": "Не удалось расшифровать %(failedCount)s сессии!", - "Restored %(sessionCount)s session keys": "Восстановлены %(sessionCount)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.": "Получите доступ к своей истории защищенных сообщений и настройте безопасный обмен сообщениями, введя пароль для восстановления.", "Next": "Далее", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Если вы забыли пароль для восстановления, вы можете использовать свой ключ восстановления или , чтобы настроить новые параметры восстановления", - "Enter Recovery Key": "Введите ключ восстановления", "This looks like a valid recovery key!": "Это похоже на действительный ключ восстановления!", "Not a valid recovery key": "Недействительный ключ восстановления", "Access your secure message history and set up secure messaging by entering your recovery key.": "Получите доступ к своей истории защищенных сообщений и настройте безопасный обмен сообщениями, введя свой ключ восстановления.", @@ -1432,7 +1325,6 @@ "Set a new password": "Установить новый пароль", "Invalid homeserver discovery response": "Неверный ответ при попытке обнаружения домашнего сервера", "Failed to get autodiscovery configuration from server": "Не удалось получить конфигурацию автообнаружения с сервера", - "Show recently visited rooms above the room list": "Показать недавно посещённые комнаты над списком комнат", "Invalid base_url for m.homeserver": "Неверный base_url для m.homeserver", "Homeserver URL does not appear to be a valid Matrix homeserver": "URL-адрес сервера не является действительным URL-адресом сервера Матрица", "Invalid identity server discovery response": "Неверный ответ на запрос идентификации сервера", @@ -1445,11 +1337,7 @@ "Create account": "Создать учётную запись", "Registration has been disabled on this homeserver.": "Регистрация на этом сервере отключена.", "Unable to query for supported registration methods.": "Невозможно запросить поддерживаемые методы регистрации.", - "Great! This passphrase looks strong enough.": "Отлично! Этот пароль выглядит достаточно сильной.", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Мы будем хранить зашифрованную копию ваших ключей на нашем сервере. Защитите свою резервную копию паролем, чтобы сохранить ее в безопасности.", "For maximum security, this should be different from your account password.": "Для максимальной безопасности он должен отличаться от пароля вашей учётной записи.", - "Enter a passphrase...": "Введите пароль....", - "Set up with a Recovery Key": "Настройка с ключом восстановления", "That matches!": "Они совпадают!", "That doesn't match.": "Они не совпадают.", "Uploaded sound": "Загруженный звук", @@ -1459,15 +1347,7 @@ "Set a new custom sound": "Установка нового пользовательского звука", "Browse": "Просматривать", "Go back to set it again.": "Задать другой пароль.", - "Please enter your passphrase a second time to confirm.": "Пожалуйста, введите ваш пароль еще раз для подтверждения.", - "Repeat your passphrase...": "Повторите ваш пароль...", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Как сеть безопасности, вы можете использовать ее для восстановления истории зашифрованных сообщений, если вы забыли свой пароль восстановления.", - "As a safety net, you can use it to restore your encrypted message history.": "Как сеть безопасности, вы можете использовать ее для восстановления истории зашифрованных сообщений.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Ключ восстановления - это сеть безопасности, с помощью которой можно восстановить доступ к зашифрованным сообщениям, если вы забудете пароль.", "Print it and store it somewhere safe": "Распечатайте его и храните в безопасном месте", - "Secure your backup with a passphrase": "Защитите вашу резервную копию паролем", - "Confirm your passphrase": "Подтвердите свой пароль", - "Recovery key": "Ключ восстановления", "Success!": "Успешно!", "Unable to create key backup": "Невозможно создать резервную копию ключа", "Retry": "Попробуйте снова", @@ -1563,8 +1443,6 @@ "Filter": "Поиск", "Filter rooms…": "Поиск комнат…", "If you can't find the room you're looking for, ask for an invite or Create a new room.": "Если не удаётся найти комнату, то можно запросить приглашение или Создать новую комнату.", - "Room alias": "Псевдоним комнаты", - "Set a room alias to easily share your room with other people.": "Присвоить комнате адрес, чтобы было проще приглашать в неё людей.", "Create a public room": "Создать публичную комнату", "Create a private room": "Создать приватную комнату", "Topic (optional)": "Тема (опционально)", @@ -1634,9 +1512,6 @@ "Unread mentions.": "Непрочитанные упоминания.", "Show image": "Показать изображение", "e.g. my-room": "например, моя-комната", - "Please provide a room alias": "Пожалуйста, укажите псевдоним комнаты", - "This alias is available to use": "Этот псевдоним доступен для использования", - "This alias is already in use": "Этот псевдоним уже используется", "Close dialog": "Закрыть диалог", "Please enter a name for the room": "Пожалуйста, введите название комнаты", "This room is private, and can only be joined by invitation.": "Эта комната приватная, в неё можно войти только по приглашению.", @@ -1714,11 +1589,9 @@ "Ignored/Blocked": "Игнорируемые/Заблокированные", "Error adding ignored user/server": "Ошибка добавления игнорируемого пользователя/сервера", "Error subscribing to list": "Ошибка при подписке на список", - "Send cross-signing keys to homeserver": "Отправка ключей перекрестной подписи на домашний сервер", "Error upgrading room": "Ошибка обновления комнаты", "Match system theme": "Тема системы", "Show tray icon and minimize window to it on close": "Показать иконку в панели задач и свернуть окно при закрытии", - "The version of %(brand)s": "Версия %(brand)s", "Show typing notifications": "Показывать уведомления о наборе", "Delete %(count)s sessions|other": "Удалить %(count)s сессий", "Enable desktop notifications for this session": "Включить уведомления для рабочего стола для этой сессии", @@ -1727,16 +1600,13 @@ "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Используйте Менеджер интеграциями для управления ботами, виджетами и стикерами.", "Manage integrations": "Управление интеграциями", "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Менеджеры интеграции получают данные конфигурации и могут изменять виджеты, отправлять приглашения в комнаты и устанавливать уровни доступа от вашего имени.", - "Sessions": "Сессии", "Direct Messages": "Диалоги", "%(count)s sessions|other": "%(count)s сессий", "Hide sessions": "Скрыть сессии", "Enable 'Manage Integrations' in Settings to do this.": "Включите «Управление интеграциями» в настройках, чтобы сделать это.", - "Unknown sessions": "Неизвестные сессии", "Help": "Помощь", "If you cancel now, you won't complete verifying your other session.": "Если вы отмените сейчас, вы не завершите проверку вашей другой сессии.", "Verify this session": "Проверьте эту сессию", - "Unverified session": "Непроверенная сессия", "Verifies a user, session, and pubkey tuple": "Проверяет пользователя, сессию и публичные ключи", "Unknown (user, session) pair:": "Неизвестная (пользователь:сессия) пара:", "Session already verified!": "Сессия уже подтверждена!", @@ -1748,7 +1618,6 @@ "Subscribe": "Подписаться", "A session's public name is visible to people you communicate with": "Публичное имя сессии видны людям, с которыми вы общаетесь", "If you cancel now, you won't complete verifying the other user.": "Если вы сейчас отмените, у вас не будет завершена проверка других пользователей.", - "If you cancel now, you won't complete your secret storage operation.": "Если вы сейчас отмените, вы не завершите операцию секретного хранения.", "Cancel entering passphrase?": "Отмена ввода пароль?", "Setting up keys": "Настройка ключей", "Encryption upgrade available": "Доступно обновление шифрования", @@ -1757,9 +1626,6 @@ "WARNING: Session already verified, but keys do NOT MATCH!": "ВНИМАНИЕ:Сессия уже подтверждена, но ключи НЕ совпадают!", "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!": "ВНИМАНИЕ: ПРОВЕРКА КЛЮЧА НЕ ПРОШЛА! Ключом подписи для %(userId)s и сессии %(deviceId)s является \"%(fprint)s\", что не соответствует указанному ключу \"%(fingerprint)s\". Это может означать, что ваши сообщения перехватываются!", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Ключ подписи, который вы предоставили, соответствует ключу подписи, который вы получили от %(userId)s's сессии %(deviceId)s. Сессия отмечена как подтверждена.", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s добавил %(addedAddresses)s и %(count)s другие адреса к этой комнате", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s удалил %(removedAddresses)s и %(count)s другие адреса из этой комнаты", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s удалил %(countRemoved)s и добавил %(countAdded)s адреса к этой комнате", "%(senderName)s placed a voice call.": "%(senderName)s сделал голосовой вызов.", "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s сделал голосовой вызов. (не поддерживается этим браузером)", "%(senderName)s placed a video call.": "%(senderName)s сделал видео вызов.", @@ -1780,13 +1646,8 @@ "%(num)s hours from now": "%(num)s часов спустя", "about a day from now": "примерно через день", "%(num)s days from now": "%(num)s дней спустя", - "Show a presence dot next to DMs in the room list": "Показать точку присутствия рядом с DMs в списке комнат", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Включение перекрестной подписи для проверки в расчете на одного пользователя, а не за сессию (в разработке)", - "Enable local event indexing and E2EE search (requires restart)": "Включить локальное индексирование событий и E2EE поиска (требуется перезапуск)", "Show info about bridges in room settings": "Показать информацию о мостах в настройках комнаты", - "Show padlocks on invite only rooms": "Показывать замки по приглашению только комнаты", "Enable message search in encrypted rooms": "Включить поиск сообщений в зашифрованных комнатах", - "Keep secret storage passphrase in memory for this session": "Храните в памяти секретную парольную фразу для этого сеанса", "How fast should messages be downloaded.": "Как быстро сообщения должны быть загружены.", "This is your list of users/servers you have blocked - don't leave the room!": "Это список пользователей/серверов, которые вы заблокировали - не покидайте комнату!", "Verify this session by completing one of the following:": "Проверьте эту сессию, выполнив одно из следующих действий:", @@ -1795,8 +1656,6 @@ "Compare unique emoji": "Сравнитe уникальныe смайлики", "Compare a unique set of emoji if you don't have a camera on either device": "Сравните уникальный набор смайликов, если у вас нет камеры ни на одном из устройств", "Start": "Начать", - "Confirm the emoji below are displayed on both devices, in the same order:": "Подтвердите, что смайлики, приведенные ниже, отображаются на обоих устройствах в одном и том же порядке:", - "Verify this device by confirming the following number appears on its screen.": "Проверьте это устройство, подтвердив, что на его экране появляется следующий номер.", "Waiting for %(displayName)s to verify…": "Ожидание %(displayName)s для проверки…", "Cancelling…": "Отмена…", "They match": "Они совпадают", @@ -1820,10 +1679,6 @@ "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Используете ли вы %(brand)s на устройстве с тач-дисплеем в качестве основного способа ввода", "Whether you're using %(brand)s as an installed Progressive Web App": "Используете ли вы %(brand)s в виде установленного прогрессивного веб-приложения", "Your user agent": "Ваш юзер-агент", - "The information being sent to us to help make %(brand)s better includes:": "Информация, которая отправляется нам для улучшения %(brand)s, включает в себя:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "В комнате присутствуют неизвестные сессии: если вы продолжите без подтверждения, возможно, кто-то сможет подслушать ваш звонок.", - "Review Sessions": "Просмотреть сессии", - "Unverified login. Was this you?": "Неподтверждённый вход. Это были вы?", "Sign In or Create Account": "Войдите или создайте учётную запись", "Use your account or create a new one to continue.": "Воспользуйтесь своей учётной записью или создайте новую, чтобы продолжить.", "Create Account": "Создать учётную запись", @@ -1864,7 +1719,6 @@ "Show rooms with unread notifications first": "Показывать в начале комнаты с непрочитанными уведомлениями", "Show shortcuts to recently viewed rooms above the room list": "Показывать ссылки на недавние комнаты над списком комнат", "Manually verify all remote sessions": "Подтверждать все удалённые сессии вручную", - "Update your secure storage": "Обновите ваше безопасное хранилище", "Your homeserver does not support cross-signing.": "Ваш домашний сервер не поддерживает кросс-подпись.", "Cross-signing and secret storage are enabled.": "Кросс-подпись и хранилище секретов разрешены.", "Customise your experience with experimental labs features. Learn more.": "Попробуйте экспериментальные возможности. Подробнее.", @@ -1883,9 +1737,6 @@ "in account data": "в данных учётной записи", "Homeserver feature support:": "Поддержка со стороны домашнего сервера:", "exists": "существует", - "Secret Storage key format:": "Формат ключа хранилища секретов:", - "outdated": "устарел", - "up to date": "свежий", "Your homeserver does not support session management.": "Ваш домашний сервер не поддерживает управление сессиями.", "Unable to load session list": "Не удалось загрузить список сессий", "Enable": "Разрешить", @@ -1976,10 +1827,6 @@ "Someone is using an unknown session": "Кто-то использует неизвестную сессию", "This room is end-to-end encrypted": "Эта комната зашифрована сквозным шифрованием", "Everyone in this room is verified": "Все в этой комнате подтверждены", - "Some sessions for this user are not trusted": "К некоторым сессиям этого пользователя нет доверия", - "All sessions for this user are trusted": "Все сессии этого пользователя доверенные", - "Some sessions in this encrypted room are not trusted": "К некоторым сессиям в этой зашифрованной комнате нет доверия", - "All sessions in this encrypted room are trusted": "Все сессии в этой зашифрованной комнате доверенные", "Mod": "Модератор", "This message cannot be decrypted": "Не удалось расшифровать это сообщение", "Encrypted by an unverified session": "Зашифровано неподтверждённой сессией", @@ -1998,7 +1845,6 @@ "Send as message": "Отправить как сообщение", "Failed to connect to integration manager": "Не удалось подключиться к менеджеру интеграций", "Mark all as read": "Отметить всё как прочитанное", - "You don't have permission to delete the alias.": "У вас нет прав для удаления этого псевдонима.", "Local address": "Локальный адрес", "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.": "Публичные адреса позволяют кому угодно зайти в вашу комнату с любого сервера. Чтобы опубликовать адрес, сначала задайте его в качестве локального адреса.", @@ -2029,14 +1875,12 @@ "Encryption enabled": "Шифрование включено", "Delete sessions|other": "Удалить сессии", "Delete sessions|one": "Удалить сессию", - "Please verify the room ID or alias and try again.": "Пожалуйста, проверьте ID комнаты или псевдоним и попробуйте снова.", "Error removing ignored user/server": "Ошибка при удалении игнорируемого пользователя/сервера", "Please try again or view your console for hints.": "Попробуйте снова или посмотрите сообщения в консоли.", "Ban list rules - %(roomName)s": "Правила блокировки - %(roomName)s", "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.": "Игнорирование людей реализовано через списки правил блокировки. Подписка на список блокировки приведёт к сокрытию от вас пользователей и серверов, которые в нём перечислены.", "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.": "Ваш личный список блокировки содержит всех пользователей и серверы, сообщения которых вы не хотите видеть. После внесения туда первого пользователя/сервера в списке комнат появится новая комната 'Мой список блокировки' — не покидайте эту комнату, чтобы список блокировки работал.", "Subscribing to a ban list will cause you to join it!": "При подписке на список блокировки вы присоединитесь к нему!", - "Room ID or alias of ban list": "ID комнаты или псевдоним списка блокировки", "Confirm your account deactivation by using Single Sign On to prove your identity.": "Подтвердите удаление учётной записи с помощью единой точки входа.", "Are you sure you want to deactivate your account? This is irreversible.": "Вы уверены, что хотите деактивировать свою учётную запись? Это необратимое действие.", "Confirm account deactivation": "Подтвердите деактивацию учётной записи", @@ -2102,7 +1946,6 @@ "Verify session": "Подтвердить сессию", "Session name": "Название сессии", "Session key": "Ключ сессии", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Резервная копия ключа сохранена в хранилище секретов, но эта возможность не включена в этой сессии. Разрешите кросс-подпись в Лаборатории, чтобы изменить состояние резервной копии.", "Backup key stored: ": "Резервная копия ключа сохранена: ", "Command failed": "Не удалось выполнить команду", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Чтобы сообщить о проблеме безопасности Matrix, пожалуйста, прочитайте Политику раскрытия информации Matrix.org.", @@ -2112,15 +1955,12 @@ "Enter recovery passphrase": "Введите пароль восстановления", "Enter a recovery passphrase": "Введите пароль восстановления", "Enter your recovery passphrase a second time to confirm it.": "Введите пароль восстановления ещё раз для подтверждения.", - "Enter a recovery passphrase...": "Введите пароль восстановления...", "Please enter your recovery passphrase a second time to confirm.": "Введите пароль восстановления повторно для подтверждения.", "If you cancel now, you won't complete your operation.": "Если вы отмените операцию сейчас, она не завершится.", "Failed to set topic": "Не удалось установить тему", "Could not find user in room": "Не удалось найти пользователя в комнате", "Please supply a widget URL or embed code": "Укажите URL или код вставки виджета", "Send a bug report with logs": "Отправить отчёт об ошибке с логами", - "Enable cross-signing to verify per-user instead of per-session": "Разрешить кросс-подпись для подтверждения пользователей вместо отдельных сессий", - "Keep recovery passphrase in memory for this session": "Сохранить пароль восстановления в памяти для этой сессии", "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 ": "Кэшировать шифрованные сообщения локально, чтобы они выводились в результатах поиска, используя: ", " to store messages from ": " чтобы сохранить сообщения от ", @@ -2139,7 +1979,6 @@ "This room isn’t bridging messages to any platforms. Learn more.": "Эта комната не пересылает никуда сообщения с помощью моста. Подробнее", "Your key share request has been sent - please check your other sessions for key share requests.": "Запрос ключа был отправлен - проверьте другие ваши сессии на предмет таких запросов.", "If your other sessions do not have the key for this message you will not be able to decrypt them.": "Вы не сможете расшифровать это сообщение в других сессиях, если у них нет ключа для него.", - "No sessions with registered encryption keys": "Нет сессий с зарегистрированными ключами шифрования", "For extra security, verify this user by checking a one-time code on both of your devices.": "Для дополнительной безопасности подтвердите этого пользователя, сравнив одноразовый код на ваших устройствах.", "%(role)s in %(roomName)s": "%(role)sв %(roomName)s", "Start verification again from their profile.": "Начните подтверждение заново в профиле пользователя.", diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json index 89aabcdc2f..526a793d67 100644 --- a/src/i18n/strings/sk.json +++ b/src/i18n/strings/sk.json @@ -42,7 +42,6 @@ "Invite to Community": "Pozvať do komunity", "Which rooms would you like to add to this community?": "Ktoré miestnosti by ste radi pridali do tejto komunity?", "Add rooms to the community": "Pridať miestnosti do komunity", - "Room name or alias": "Názov miestnosti alebo alias", "Add to community": "Pridať do komunity", "Failed to invite the following users to %(groupId)s:": "Do komunity %(groupId)s sa nepodarilo pozvať nasledujúcich používateľov:", "Failed to invite users to community": "Do komunity sa nepodarilo pozvať používateľov", @@ -56,7 +55,6 @@ "Default": "Predvolené", "Moderator": "Moderátor", "Admin": "Správca", - "Start a chat": "Začať konverzáciu", "Operation failed": "Operácia zlyhala", "Failed to invite": "Pozvanie zlyhalo", "Failed to invite the following users to the %(roomName)s room:": "Do miestnosti %(roomName)s sa nepodarilo pozvať nasledujúcich používateľov:", @@ -74,7 +72,6 @@ "Usage": "Použitie", "/ddg is not a command": "/ddg nie je žiaden príkaz", "To use it, just wait for autocomplete results to load and tab through them.": "Ak to chcete použiť, len počkajte na načítanie výsledkov automatického dopĺňania a cyklicky prechádzajte stláčaním klávesu tab..", - "Unrecognised room alias:": "Nerozpoznaný alias miestnosti:", "Ignored user": "Ignorovaný používateľ", "You are now ignoring %(userId)s": "Od teraz ignorujete používateľa %(userId)s", "Unignored user": "Ignorácia zrušená", @@ -156,12 +153,9 @@ "New Password": "Nové heslo", "Confirm password": "Potvrdiť heslo", "Change Password": "Zmeniť heslo", - "Device ID": "ID zariadenia", "Last seen": "Naposledy aktívne", "Failed to set display name": "Nepodarilo sa nastaviť zobrazované meno", "Authentication": "Overenie", - "Disable Notifications": "Zakázať oznámenia", - "Enable Notifications": "Povoliť oznámenia", "Cannot add any more widgets": "Nie je možné pridať ďalšie widgety", "The maximum permitted number of widgets have already been added to this room.": "Do tejto miestnosti už bol pridaný maximálny povolený počet widgetov.", "Add a widget": "Pridať widget", @@ -175,8 +169,6 @@ "%(senderName)s uploaded a file": "%(senderName)s nahral súbor", "Options": "Možnosti", "Please select the destination room for this message": "Prosím, vyberte cieľovú miestnosť pre túto správu", - "Blacklisted": "Na čiernej listine", - "device id: ": "ID zariadenia: ", "Disinvite": "Stiahnuť pozvanie", "Kick": "Vykázať", "Disinvite this user?": "Stiahnuť pozvanie tohoto používateľa?", @@ -188,7 +180,6 @@ "Ban this user?": "Zakázať vstúpiť tomuto používateľovi?", "Failed to ban user": "Nepodarilo sa zakázať vstup používateľa", "Failed to mute user": "Nepodarilo sa umlčať používateľa", - "Failed to toggle moderator status": "Nepodarilo sa prepnúť stav moderátor", "Failed to change power level": "Nepodarilo sa zmeniť úroveň moci", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Túto zmenu nebudete môcť vrátiť späť pretože tomuto používateľovi udeľujete rovnakú úroveň moci, akú máte vy.", "Are you sure?": "Ste si istí?", @@ -197,12 +188,8 @@ "Jump to read receipt": "Preskočiť na potvrdenie o prečítaní", "Mention": "Zmieniť sa", "Invite": "Pozvať", - "User Options": "Možnosti používateľa", - "Direct chats": "Priame konverzácie", "Unmute": "Zrušiť umlčanie", "Mute": "Umlčať", - "Revoke Moderator": "Odobrať stav moderátor", - "Make Moderator": "Udeliť stav moderátor", "Admin Tools": "Nástroje správcu", "and %(count)s others...|other": "a ďalších %(count)s…", "and %(count)s others...|one": "a jeden ďalší…", @@ -279,10 +266,7 @@ "Jump to first unread message.": "Preskočiť na prvú neprečítanú správu.", "Close": "Zatvoriť", "not specified": "nezadané", - "Remote addresses for this room:": "Vzdialené adresy do tejto miestnosti:", - "Local addresses for this room:": "Lokálne adresy do tejto miestnosti:", "This room has no local addresses": "Pre túto miestnosť nie sú žiadne lokálne adresy", - "New address (e.g. #foo:%(localDomain)s)": "Nová adresa (napr. #foo:%(localDomain)s)", "Invalid community ID": "Nesprávne ID komunity", "'%(groupId)s' is not a valid community ID": "'%(groupId)s' nie je platným ID komunity", "New community ID (e.g. +foo:%(localDomain)s)": "Nové ID komunity (napr. +foo:%(localDomain)s)", @@ -303,12 +287,8 @@ "Failed to copy": "Nepodarilo sa skopírovať", "Add an Integration": "Pridať integráciu", "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?": "Budete presmerovaní na stránku tretej strany, aby ste mohli overiť svoj účet na použitie s %(integrationsUrl)s. Chcete pokračovať?", - "Removed or unknown message type": "Odstránený alebo neznámy typ správy", - "Message removed by %(userId)s": "Správu odstránil %(userId)s", - "Message removed": "správa odstránená", "Custom Server Options": "Vlastné možnosti servera", "Dismiss": "Zamietnuť", - "To continue, please enter your password.": "Aby ste mohli pokračovať, prosím zadajte svoje heslo.", "An email has been sent to %(emailAddress)s": "Na adresu %(emailAddress)s bola odoslaná správa", "Please check your email to continue registration.": "Prosím, skontrolujte si emaily, aby ste mohli pokračovať v registrácii.", "Token incorrect": "Neplatný token", @@ -345,13 +325,8 @@ "Delete widget": "Vymazať widget", "Edit": "Upraviť", "Create new room": "Vytvoriť novú miestnosť", - "Unblacklist": "Odstrániť z čiernej listiny", - "Blacklist": "Pridať na čiernu listinu", - "Unverify": "Zrušiť overenie", - "Verify...": "Overiť…", "No results": "Žiadne výsledky", "Home": "Domov", - "Could not connect to the integration server": "Nie je možné sa pripojiť k integračnému serveru", "Manage Integrations": "Spravovať integrácie", "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s%(count)s krát vstúpili", @@ -430,13 +405,8 @@ "Unknown error": "Neznáma chyba", "Incorrect password": "Nesprávne heslo", "Deactivate Account": "Deaktivovať účet", - "I verify that the keys match": "Overil som, kľúče sa zhodujú", "An error has occurred.": "Vyskytla sa chyba.", "OK": "OK", - "Start verification": "Spustiť overenie", - "Share without verifying": "Zdieľať bez overenia", - "Ignore request": "Ignorovať žiadosť", - "Encryption key request": "Žiadosť o šifrovacie kľúče", "Unable to restore session": "Nie je možné obnoviť reláciu", "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.": "Ak ste sa v minulosti prihlásili s novšou verziou programu %(brand)s, vaša relácia nemusí byť kompatibilná s touto verziou. Zatvorte prosím toto okno a vráťte sa cez najnovšiu verziu %(brand)s.", "Invalid Email Address": "Nesprávna emailová adresa", @@ -454,11 +424,9 @@ "To get started, please pick a username!": "Začnite tým, že si zvolíte používateľské meno!", "This will be your account name on the homeserver, or you can pick a different server.": "Toto bude názov vašeho účtu na domovskom serveri , alebo si môžete zvoliť iný server.", "If you already have a Matrix account you can log in instead.": "Ak už máte Matrix účet, môžete sa hneď Prihlásiť.", - "Send anyway": "Napriek tomu odoslať", "Private Chat": "Súkromná konverzácia", "Public Chat": "Verejná konverzácia", "Custom": "Vlastné", - "Alias (optional)": "Alias (nepovinné)", "Name": "Názov", "You must register to use this functionality": "Aby ste mohli použiť túto vlastnosť, musíte byť zaregistrovaný", "You must join the room to see its files": "Aby ste si mohli zobraziť zoznam súborov, musíte vstúpiť do miestnosti", @@ -511,7 +479,6 @@ "Create a new community": "Vytvoriť novú komunitu", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Vytvorte si komunitu s cieľom zoskupiť miestnosti a používateľov! Zostavte si vlastnú domovskú stránku a vymedzte tak svoj priestor vo svete Matrix.", "You have no visible notifications": "Nie sú k dispozícii žiadne oznámenia", - "Scroll to bottom of page": "Posunúť na spodok stránky", "Connectivity to the server has been lost.": "Spojenie so serverom bolo prerušené.", "Sent messages will be stored until your connection has returned.": "Odoslané správy ostanú uložené, kým sa spojenie nenadviaže znovu.", "Active call": "Aktívny hovor", @@ -521,7 +488,6 @@ "Search failed": "Hľadanie zlyhalo", "Server may be unavailable, overloaded, or search timed out :(": "Server môže byť nedostupný, preťažený, alebo vypršal časový limit hľadania :(", "No more results": "Žiadne ďalšie výsledky", - "Unknown room %(roomId)s": "Neznáma miestnosť %(roomId)s", "Room": "Miestnosť", "Failed to reject invite": "Nepodarilo sa odmietnuť pozvanie", "Fill screen": "Vyplniť obrazovku", @@ -538,12 +504,9 @@ "Autoplay GIFs and videos": "Automaticky prehrávať animované GIF obrázky a videá", "Always show message timestamps": "Vždy zobrazovať časovú značku správ", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Pri zobrazovaní časových značiek používať 12 hodinový formát (napr. 2:30pm)", - "Use compact timeline layout": "Použiť kompaktné rozloženie časovej osy", "Enable automatic language detection for syntax highlighting": "Povoliť automatickú detegciu jazyka pre zvýrazňovanie syntaxe", "Automatically replace plain text Emoji": "Automaticky nahrádzať textové emotikony modernými emoji", "Mirror local video feed": "Zrkadliť lokálne video", - "Light theme": "Svetlý vzhľad", - "Dark theme": "Tmavý vzhľad", "Sign out": "Odhlásiť sa", "Failed to change password. Is your password correct?": "Nepodarilo sa zmeniť heslo. Zadali ste správne heslo?", "Success": "Úspech", @@ -596,7 +559,6 @@ "Define the power level of a user": "Určí úroveň sili používateľa", "Deops user with given id": "Zruší stav moderátor používateľovi so zadaným ID", "Invites user with given id to current room": "Pošle používateľovi so zadaným ID pozvanie do tejto miestnosti", - "Joins room with given alias": "Vstúpi do miestnosti so zadaným aliasom", "Kicks user with given id": "Vykáže používateľa so zadaným ID", "Changes your display nickname": "Zmení vaše zobrazované meno", "Searches DuckDuckGo for results": "Vyhľadá výsledky na DuckDuckGo", @@ -608,21 +570,7 @@ "Notify the whole room": "Oznamovať celú miestnosť", "Room Notification": "Oznámenie miestnosti", "Users": "Používatelia", - "unknown device": "neznáme zariadenie", - "NOT verified": "NE-overené", - "verified": "overené", - "Verification": "Overenie", - "Ed25519 fingerprint": "Odtlačok prsta Ed25519", - "User ID": "ID používateľa", - "Curve25519 identity key": "Kľúč totožnosti Curve25519", - "none": "žiadny", - "Claimed Ed25519 fingerprint key": "Údajne kľúč s odtlačkom prsta Ed25519", - "Algorithm": "Algoritmus", - "unencrypted": "nešifrované", - "Decryption error": "Chyba dešifrovania", "Session ID": "ID relácie", - "End-to-end encryption information": "Informácie o šifrovaní E2E", - "Event information": "Informácie o udalosti", "Passphrases must match": "Heslá sa musia zhodovať", "Passphrase must not be empty": "Heslo nesmie byť prázdne", "Export room keys": "Exportovať kľúče miestností", @@ -646,11 +594,6 @@ "URL previews are disabled by default for participants in this room.": "Náhľady URL adries sú predvolene zakázané pre členov tejto miestnosti.", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Okrem vás v tejto miestnosti nie je nik iný! Želáte si Pozvať ďalších alebo Prestať upozorňovať na prázdnu miestnosť?", "Call Failed": "Zlyhanie hovoru", - "Review Devices": "Prezrieť zariadenia", - "Call Anyway": "Napriek tomu zavolať", - "Answer Anyway": "Napriek tomu prijať", - "Call": "Hovor", - "Answer": "Prijať", "Send": "Odoslať", "%(duration)ss": "%(duration)ss", "%(duration)sm": "%(duration)sm", @@ -674,9 +617,7 @@ "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s", "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.": "Túto zmenu nebudete môcť vrátiť späť pretože znižujete vašu vlastnú úroveň moci. Ak ste jediný poverený používateľ v miestnosti, nebudete môcť znovu získať úroveň, akú máte teraz.", "Send an encrypted reply…": "Odoslať šifrovanú odpoveď…", - "Send a reply (unencrypted)…": "Odoslať odpoveď (nešifrovanú)…", "Send an encrypted message…": "Odoslať šifrovanú správu…", - "Send a message (unencrypted)…": "Odoslať správu (nešifrovanú)…", "Replying": "Odpoveď", "Minimize apps": "Minimalizovať aplikácie", "%(count)s of your messages have not been sent.|one": "Vaša správa nebola odoslaná.", @@ -684,15 +625,14 @@ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Znovu odoslať správu alebo zrušiť správu teraz.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Vaše súkromie je pre nás dôležité, preto nezhromažďujeme žiadne osobné údaje alebo údaje, na základe ktorých je možné vás identifikovať.", "Learn more about how we use analytics.": "Zistite viac o tom, ako spracúvame analytické údaje.", - "The information being sent to us to help make %(brand)s better includes:": "S cieľom vylepšovať aplikáciu %(brand)s zbierame nasledujúce údaje:", + "The information being sent to us to help make %(brand)s better includes:": "Informácie, ktoré nám posielate, aby sme zlepšili %(brand)s, zahŕňajú:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Ak sa na stránke vyskytujú identifikujúce údaje, akými sú napríklad názov miestnosti, ID používateľa, miestnosti alebo skupiny, tieto sú pred odoslaním na server odstránené.", "The platform you're on": "Vami používaná platforma", - "The version of %(brand)s": "Verzia %(brand)s", + "The version of %(brand)s": "Verzia %(brand)su", "Your language of choice": "Váš uprednostňovaný jazyk", "Which officially provided instance you are using, if any": "Cez ktorú oficiálne podporovanú inštanciu %(brand)s ste pripojení (ak nehostujete %(brand)s sami)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Či pri písaní správ používate rozbalenú lištu formátovania textu", "Your homeserver's URL": "URL adresa vami používaného domovského servera", - "Your identity server's URL": "URL adresa vami používaného servera totožností", "This room is not public. You will not be able to rejoin without an invite.": "Toto nie je verejne dostupná miestnosť. Bez pozvánky nebudete do nej môcť vstúpiť znovu.", "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s si zmenil zobrazované meno na %(displayName)s.", "Failed to set direct chat tag": "Nepodarilo sa nastaviť značku priama konverzácia", @@ -721,7 +661,6 @@ "Who can join this community?": "Kto môže vstúpiť do tejto komunity?", "Everyone": "Ktokoľvek", "Fetching third party location failed": "Nepodarilo sa získať umiestnenie tretej strany", - "A new version of %(brand)s is available.": "Dostupná je nová verzia %(brand)s.", "Send Account Data": "Odoslať Údaje Účtu", "All notifications are currently disabled for all targets.": "Momentálne sú zakázané všetky oznámenia pre všetky ciele.", "Uploading report": "Prebieha odovzdanie hlásenia", @@ -740,8 +679,6 @@ "Send Custom Event": "Odoslať vlastnú udalosť", "Advanced notification settings": "Pokročilé nastavenia oznámení", "Failed to send logs: ": "Nepodarilo sa odoslať záznamy: ", - "delete the alias.": "vymazať alias.", - "To return to your account in future you need to set a password": "Aby ste sa v budúcnosti mohli vrátiť k vašemu účtu mali by ste si teraz nastaviť heslo", "Forget": "Zabudnuť", "You cannot delete this image. (%(code)s)": "Nemôžete vymazať tento obrázok. (%(code)s)", "Cancel Sending": "Zrušiť odosielanie", @@ -765,7 +702,6 @@ "No update available.": "K dispozícii nie je žiadna aktualizácia.", "Noisy": "Hlučné", "Collecting app version information": "Získavajú sa informácie o verzii aplikácii", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Vymazať alias %(alias)s a odstrániť miestnosť %(name)s z adresára?", "Keywords": "Kľúčové slová", "Enable notifications for this account": "Povoliť oznámenia pre tento účet", "Invite to this community": "Pozvať do tejto komunity", @@ -822,7 +758,6 @@ "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.": "Ladiace záznamy obsahujú údaje o používaní aplikácii, vrátane vašeho používateľského mena, názvy a aliasy miestností a komunít, ku ktorým ste sa pripojili a mená ostatných používateľov. Tieto záznamy neobsahujú samotný obsah vašich správ.", "Unhide Preview": "Zobraziť náhľad", "Unable to join network": "Nie je možné sa pripojiť k sieti", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Tieto nastavenia oznámení sa použijú aj napriek tomu, že ich nemôžete meniť cez %(brand)s. Pravdepodobne ste si ich nastavili v inej aplikácii", "Sorry, your browser is not able to run %(brand)s.": "Prepáčte, vo vašom prehliadači nie je možné spustiť %(brand)s.", "Messages in group chats": "Správy v skupinových konverzáciách", "Yesterday": "Včera", @@ -847,10 +782,8 @@ "Thank you!": "Ďakujeme!", "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!": "Vo vašom súčasnom prehliadači nemusí %(brand)s vizerať ani fungovať správne a niektoré alebo všetky vlastnosti môžu chýbať. Ak to chcete vyskúšať, môžete pokračovať, no pri riešení problémov s tým spojených si budete musieť poradiť na vlastnú päsť!", "Checking for an update...": "Kontrola dostupnosti aktualizácie…", - "There are advanced notifications which are not shown here": "Niektoré pokročilé oznámenia nemôžu byť zobrazené", "Every page you use in the app": "Každú stránku v aplikácii, ktorú navštívite", "e.g. ": "príklad ", - "Your User Agent": "Reťazec User Agent vašeho zariadenia", "Your device resolution": "Rozlíšenie obrazovky vašeho zariadenia", "Popout widget": "Otvoriť widget v novom okne", "Missing roomId.": "Chýba ID miestnosti.", @@ -866,9 +799,6 @@ "Send analytics data": "Odosielať analytické údaje", "Enable widget screenshots on supported widgets": "Umožniť zachytiť snímku obrazovky pre podporované widgety", "Muted Users": "Umlčaní používatelia", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Prosím pomôžte nám vylepšovať %(brand)s odosielaním anonymných údajov o používaní. Na tento účel použijeme cookie (prečítajte si ako používame cookies).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Prosím pomôžte nám vylepšovať %(brand)s odosielaním anonymných údajov o používaní. Na tento účel použijeme cookie.", - "Yes, I want to help!": "Áno, chcem pomôcť", "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.": "Toto spôsobí, že váš účet nebude viac použiteľný. Nebudete sa môcť opätovne prihlásiť a nikto sa nebude môcť znovu zaregistrovať s rovnakým používateľským ID. Deaktiváciou účtu opustíte všetky miestnosti, do ktorých ste kedy vstúpili a vaše kontaktné údaje budú odstránené zo servera totožností. Túto akciu nie je možné vrátiť späť.", "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.": "Pri deaktivácii účtu predvolene neodstraňujeme vami odoslané správy. Ak si želáte uplatniť právo zabudnutia, zaškrtnite prosím zodpovedajúce pole nižšie.", "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.": "Viditeľnosť správ odoslaných cez matrix funguje podobne ako viditeľnosť správ elektronickej pošty. To, že zabudneme vaše správy v skutočnosti znamená, že správy ktoré ste už odoslali nebudú čitateľné pre nových alebo neregistrovaných používateľov, no registrovaní používatelia, ktorí už prístup k vašim správam majú, budú aj naďalej bez zmeny môcť pristupovať k ich vlastným kópiám vašich správ.", @@ -913,9 +843,6 @@ "Please contact your service administrator to continue using the service.": "Prosím, kontaktujte správcu služieb aby ste službu mohli naďalej používať.", "This homeserver has hit its Monthly Active User limit.": "Bol dosiahnutý mesačný limit počtu aktívnych používateľov tohoto domovského servera.", "This homeserver has exceeded one of its resource limits.": "Bol prekročený limit využitia prostriedkov pre tento domovský server.", - "Please contact your service administrator to get this limit increased.": "Prosím, kontaktujte správcu služieb a pokúste sa tento limit navýšiť.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Bol dosiahnutý mesačný limit počtu aktívnych používateľov a niektorí používatelia sa nebudú môcť prihlásiť.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Bol prekročený limit využitia prostriedkov pre tento domovský server a niektorí používatelia sa nebudú môcť prihlásiť.", "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.": "Vaša správa nebola odoslaná, pretože bol dosiahnutý mesačný limit počtu aktívnych používateľov tohoto domovského servera. Prosím, kontaktujte správcu služieb aby ste službu mohli naďalej používať.", "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Vaša správa nebola odoslaná, pretože bol prekročený limit prostriedkov tohoto domovského servera. Prosím, kontaktujte správcu služieb aby ste službu mohli naďalej používať.", "Please contact your service administrator to continue using this service.": "Prosím, kontaktujte správcu služieb aby ste mohli službu ďalej používať.", @@ -932,14 +859,7 @@ "Update any local room aliases to point to the new room": "Všetky lokálne aliasy pôvodnej miestnosti sa aktualizujú tak, aby ukazovali na novú miestnosť", "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "V pôvodnej miestnosti bude zverejnené odporúčanie prejsť do novej miestnosti a posielanie do pôvodnej miestnosti bude zakázané pre všetkých používateľov", "Put a link back to the old room at the start of the new room so people can see old messages": "História novej miestnosti sa začne odkazom do pôvodnej miestnosti, aby si členovia vedeli zobraziť staršie správy", - "Registration Required": "Vyžaduje sa registrácia", - "You need to register to do this. Would you like to register now?": "Aby ste mohli uskutočniť túto akciu, musíte sa zaregistrovať. Chcete teraz spustiť registráciu?", "Forces the current outbound group session in an encrypted room to be discarded": "Vynúti zabudnutie odchádzajúcej skupinovej relácii v šifrovanej miestnosti", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s pridal adresy %(addedAddresses)s do tejto miestnosti.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s pridal adresu %(addedAddresses)s do tejto miestnosti.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s odstránil adresy %(removedAddresses)s z tejto miestnosti.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s odstránil adresu %(removedAddresses)s z tejto miestnosti.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s pridal %(addedAddresses)s a odstránil %(removedAddresses)s z tejto miestnosti.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s nastavil hlavnú adresu tejto miestnosti %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s odstránil hlavnú adresu tejto miestnosti.", "Unable to connect to Homeserver. Retrying...": "Nie je možné sa pripojiť k domovskému serveru. Prebieha pokus o opetovné pripojenie…", @@ -1003,7 +923,6 @@ "The following users may not exist": "Nasledujúci používatelia pravdepodobne neexistujú", "Unable to load commit detail: %(msg)s": "Nie je možné načítať podrobnosti pre commit: %(msg)s", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Aby ste po odhlásení neprišli o možnosť čítať históriu šifrovaných konverzácií, mali by ste si ešte pred odhlásením exportovať šifrovacie kľúče miestností. Prosím vráťte sa k novšej verzii %(brand)s a exportujte si kľúče", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Už ste použili novšiu verziu %(brand)s na adrese %(host)s. Ak chcete znovu používať túto verziu aj s E2E šifrovaním, musíte sa odhlásiť a potom zas znovu prihlásiť. ", "Incompatible Database": "Nekompatibilná databáza", "Continue With Encryption Disabled": "Pokračovať s vypnutým šifrovaním", "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.": "Použili ste aj %(brand)s na adrese %(host)s so zapnutou voľbou Načítanie zoznamu členov pri prvom zobrazení. V tejto verzii je Načítanie zoznamu členov pri prvom zobrazení vypnuté. Keď že lokálna vyrovnávacia pamäť nie je vzájomne kompatibilná s takýmito nastaveniami, %(brand)s potrebuje znovu synchronizovať údaje z vašeho účtu.", @@ -1014,19 +933,14 @@ "Unable to load backup status": "Nie je možné načítať stav zálohy", "Unable to restore backup": "Nie je možné obnoviť zo zálohy", "No backup found!": "Nebola nájdená žiadna záloha!", - "Backup Restored": "Obnova zo zálohy je hotová", "Failed to decrypt %(failedCount)s sessions!": "Nepodarilo sa dešifrovať %(failedCount)s relácií!", - "Restored %(sessionCount)s session keys": "Obnovených %(sessionCount)s kľúčov relácií", - "Enter Recovery Passphrase": "Zadajte heslo bezpečného obnovenia", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Získajte prístup k šifrovanej histórií správ a nastavte šiforvanú komunikáciu zadaním vášho (dlhého) hesla obnovenia.", - "Waiting for %(userId)s to confirm...": "Čakanie na potvrdenie od používateľa %(userId)s…", "Prompt before sending invites to potentially invalid matrix IDs": "Upozorniť pred odoslaním pozvaní na potenciálne neexistujúce Matrix ID", "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Nie je možné nájsť používateľský profil pre Matrix ID zobrazené nižšie. Chcete ich napriek tomu pozvať?", "Invite anyway and never warn me again": "Napriek tomu pozvať a viac neupozorňovať", "Invite anyway": "Napriek tomu pozvať", "Next": "Ďalej", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Ak ste zabudli heslo obnovenia, môžete použiť kľúč obnovenia alebo nastaviť bezpečné obnovenie znovu", - "Enter Recovery Key": "Zadajte kľúč obnovenia", "This looks like a valid recovery key!": "Zdá sa, že toto je platný kľúč obnovenia!", "Not a valid recovery key": "Neplatný kľúč obnovenia", "Access your secure message history and set up secure messaging by entering your recovery key.": "Získajte prístup k šifrovanej histórií správ a nastavte šiforvanú komunikáciu zadaním vášho kľúča obnovenia.", @@ -1038,23 +952,14 @@ "General failure": "Všeobecná chyba", "Failed to perform homeserver discovery": "Nepodarilo sa zistiť adresu domovského servera", "Sign in with single sign-on": "Prihlásiť sa pomocou jediného prihlasovania", - "Great! This passphrase looks strong enough.": "Výborne! Toto je dostatočne silné heslo.", - "Enter a passphrase...": "Zadajte heslo…", "That matches!": "Zhoda!", "That doesn't match.": "To sa nezhoduje.", "Go back to set it again.": "Vráťte sa späť a nastavte to znovu.", - "Repeat your passphrase...": "Zopakujte heslo…", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Ak zabudnete svoje heslo obnovenia, tento kľúč môžete použiť ako ďalší bezpečnostný prvok na obnovenie histórii šifrovaných konverzácií.", - "As a safety net, you can use it to restore your encrypted message history.": "Tento kľúč môžete použiť ako ďalší bezpečnostný prvok na obnovenie histórii šifrovaných konverzácií.", - "Your Recovery Key": "Váš kľúč obnovenia", - "Copy to clipboard": "Kopírovať do schránky", "Download": "Stiahnuť", "Print it and store it somewhere safe": "Vytlačte si ho a uchovajte na bezpečnom mieste", "Save it on a USB key or backup drive": "Uložte si ho na USB kľúč alebo iné zálohovacie médium", "Copy it to your personal cloud storage": "Skopírujte si ho na osobné úložisko v cloude", "Set up Secure Message Recovery": "Nastaviť bezpečné obnovenie správ", - "Keep it safe": "Bezpečne ho uchovajte", - "Create Key Backup": "Vytvoriť zálohu kľúčov", "Unable to create key backup": "Nie je možné vytvoriť zálohu šifrovacích kľúčov", "Retry": "Skúsiť znovu", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Ak si nenastavíte Bezpečné obnovenie správ, po odhlásení stratíte prístup k histórii šifrovaných konverzácií.", @@ -1100,7 +1005,6 @@ "Send typing notifications": "Posielať oznámenia, keď píšete", "Enable Community Filter Panel": "Povoliť panel filter komunít", "Allow Peer-to-Peer for 1:1 calls": "Povoliť P2P počas priamych audio/video hovorov", - "Order rooms in the room list by most important first instead of most recent": "Uprednostňovať najdôležitejšie namiesto naposledy aktívnych v zozname miestností", "Messages containing my username": "Správy obsahujúce moje meno používateľa", "The other party cancelled the verification.": "Proti strana zrušila overovanie.", "Verified!": "Overený!", @@ -1246,7 +1150,6 @@ "Select the roles required to change various parts of the room": "Vyberte role potrebné na zmenu rôznych častí miestnosti", "Enable encryption?": "Povoliť šifrovanie?", "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.": "Po povolení šifrovania miestnosti nie je možné šifrovanie zakázať. Správy poslané v šifrovanej miestnosti nie sú viditeľné na servery, prečítať ich môžu len členovia miestnosti. Mnohí Boti, premostenia do iných sietí a integrácie nemusia po zapnutí šifrovania fungovať správne. Dozvedieť sa viac o šifrovaní.", - "To link to this room, please add an alias.": "Ak chcete získať odkaz do tejto miestnosti, musíte pridať alias.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Zmena viditeľnosti histórie sa prejaví len na budúcich správach v tejto miestnosti. Viditeľnosť existujúcich správ ostane bez zmeny.", "Encryption": "Šifrovanie", "Once enabled, encryption cannot be disabled.": "Po aktivovaní šifrovanie nie je možné deaktivovať.", @@ -1258,10 +1161,6 @@ "Don't ask me again": "Viac sa nepýtať", "Error updating main address": "Chyba pri aktualizácii hlavnej adresy", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Pri aktualizácii hlavnej adresy miestnosti nastala chyba. Nie je to povolené na servery, alebo sa jedná o dočasný problém.", - "Error creating alias": "Chyba pri pridávaní aliasu", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Pri pridávaní tohoto aliasu nastala chyba. Nie je to povolené na servery, alebo sa jedná o dočasný problém.", - "Error removing alias": "Chyba pri odstraňovaní aliasu", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Pri odstraňovaní tohoto aliasu nastala chyba. Alias už neexistuje, alebo sa jedná o dočasný problém.", "Main address": "Hlavná adresa", "Error updating flair": "Chyba pri aktualizácii zobrazenia členstva", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Pri aktualizácii zobrazenia členstva v skupinách v tejto miestnosti nastala chyba. Nie je to povolené na servery, alebo sa jedná o dočasný problém.", @@ -1270,12 +1169,6 @@ "Room Topic": "Téma miestnosti", "Join": "Vstúpiť", "Power level": "Úroveň moci", - "Use Legacy Verification (for older clients)": "Použiť pôvodný spôsob overenia (kompatibilný so staršími aplikáciami)", - "Verify by comparing a short text string.": "Overiť porovnaním krátkeho textového reťazca.", - "Begin Verifying": "Začať overenie", - "Waiting for partner to accept...": "Čakanie na prijatie od partnera…", - "Nothing appearing? Not all clients support interactive verification yet. .": "Nič sa nezobrazuje? Ešte nie všetky aplikácie podporujú interaktívne overenie. .", - "Use two-way text verification": "Použiť obojsmerné textové overenie", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Overte tohoto používateľa a označte ho ako dôveryhodného. Dôverovanie používateľov pridáva pokoj na duši pri posielaní E2E šifrovaných správ.", "Waiting for partner to confirm...": "Čakanie na potvrdenie od partnera…", "Incoming Verification Request": "Prichádzajúca žiadosť o overenie", @@ -1289,10 +1182,6 @@ "Go back": "Naspäť", "Room Settings - %(roomName)s": "Nastavenia miestnosti - %(roomName)s", "A username can only contain lower case letters, numbers and '=_-./'": "Meno používateľa môže obsahovať len malé písmená, číslice a znaky „=_-./“", - "Recovery Key Mismatch": "Kľúče obnovenia sa nezhodujú", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Zálohu nie je možné dešifrovať zadaným kľúčom. Prosím, uistite sa, že ste zadali správny kľúč obnovenia.\nBackup could not be decrypted with this key: please verify that you entered the correct recovery key.", - "Incorrect Recovery Passphrase": "Nesprávne heslo obnovenia", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Zálohu nie je možné dešifrovať zadaným heslom. Prosím, uistite sa, že ste zadali správne heslo obnovenia.", "Warning: you should only set up key backup from a trusted computer.": "Pozor: Zálohovanie šifrovacích kľúčov by ste mali nastavovať na dôverihodnom počítači.", "Share Permalink": "Zdieľať trvalý odkaz", "Update status": "Aktualizovať stav", @@ -1338,15 +1227,8 @@ "Unable to query for supported registration methods.": "Nie je možné požiadať o podporované metódy registrácie.", "Create your account": "Vytvorte si váš účet", "Keep going...": "Pokračujte…", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Zašifrovanú kópiu vašich šifrovacích kľúčov uchováme na domovskom servery. Zabezpečte si zálohovanie zadaním hesla obnovenia, čo posilní ochranu vašich údajov.", "For maximum security, this should be different from your account password.": "Aby ste zachovali maximálnu mieru zabezpečenia, (dlhé) heslo by malo byť odlišné od hesla, ktorým sa prihlasujete do vášho účtu.", - "Set up with a Recovery Key": "Nastaviť použitím kľúča obnovenia", - "Please enter your passphrase a second time to confirm.": "Prosím zadajte heslo obnovenia ešte raz pre potvrdenie.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Kľúč obnovenia je bezpečnostný mechanizmus - môžete ho použiť na prístup k šifrovacím kľúčom v prípade, ak zabudnete vaše heslo obnovenia.", "Your keys are being backed up (the first backup could take a few minutes).": "Zálohovanie kľúčov máte aktívne (prvé zálohovanie môže trvať niekoľko minút).", - "Secure your backup with a passphrase": "Zabezpečte si zálohu zadaním hesla obnovenia", - "Confirm your passphrase": "Potvrdiť heslo obnovenia", - "Recovery key": "Kľúč obnovenia", "Starting backup...": "Začína sa zálohovanie…", "Success!": "Úspech!", "A new recovery passphrase and key for Secure Messages have been detected.": "Nové (dlhé) heslo na obnovu zálohy a kľúč pre bezpečné správy boli spozorované.", @@ -1357,7 +1239,6 @@ "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Prosím, požiadajte správcu vášho domovského servera (%(homeserverDomain)s) aby nakonfiguroval Turn server, čo zlepší spoľahlivosť audio / video hovorov.", "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.": "Ako náhradu môžete použiť verejný server s adresou turn.matrix.org, čo nemusí byť úplne spoľahlivé a tiež odošle vašu adresu IP na spomínaný server. Toto môžete kedykoľvek opätovne zmeniť v časti Nastavenia.", "Try using turn.matrix.org": "Skúsiť používať turn.matrix.org", - "A conference call could not be started because the integrations server is not available": "Nie je možné začať konferenčný hovor, pretože integračný server nie je dostupný", "Replying With Files": "Odpoveď so súbormi", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Zatiaľ nie je možné odpovedať s priloženými súbormi. Chcete nahrať tento súbor bez odpovedania?", "The file '%(fileName)s' failed to upload.": "Nepodarilo sa nahrať súbor „%(fileName)s“.", @@ -1389,7 +1270,6 @@ "Unexpected error resolving homeserver configuration": "Neočakávaná chyba pri zisťovaní nastavení domovského servera", "Unexpected error resolving identity server configuration": "Neočakávaná chyba pri zisťovaní nastavení servera totožností", "The user's homeserver does not support the version of the room.": "Používateľov domovský server nepodporuje verziu miestnosti.", - "Show recently visited rooms above the room list": "Zobrazovať naposledy otvorené miestnosti nad zoznamom miestností", "Show hidden events in timeline": "Zobrazovať skryté udalosti v histórii obsahu miestností", "Low bandwidth mode": "Režim šetrenia údajov", "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Ak váš domovský server neposkytuje pomocný server pri uskutočňovaní hovorov, povoliť použitie záložného servera turn.matrix.org (týmto počas hovoru zdieľate svoju adresu IP)", @@ -1407,7 +1287,6 @@ "Only continue if you trust the owner of the server.": "Pokračujte len v prípade, že dôverujete prevádzkovateľovi servera.", "Add Email Address": "Pridať emailovú adresu", "Add Phone Number": "Pridať telefónne číslo", - "Send cross-signing keys to homeserver": "Poslať kľúče pre podpisovanie naprieč zariadeniami na domovský server", "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.": "Táto akcia vyžaduje prístup k predvolenému serveru totožností na overenie emailovej adresy alebo telefónneho čísla, ale server nemá žiadne podmienky používania.", "Trust": "Dôverovať", "Custom (%(level)s)": "Vlastný (%(level)s)", @@ -1443,7 +1322,6 @@ "%(name)s (%(userId)s)": "%(name)s (%(userId)s)", "Multiple integration managers": "Viac integračných serverov", "Try out new ways to ignore people (experimental)": "Vyskúšajte si nový spôsob ignorovania používateľov (experiment)", - "Enable local event indexing and E2EE search (requires restart)": "Povoliť lokálne indexovanie udalostí a vyhľadávanie v šifrovaných miestnostiach", "Match system theme": "Prispôsobiť sa vzhľadu systému", "Send read receipts for messages (requires compatible homeserver to disable)": "Odosielať potvrdenia o prečítaní správ (na zakázanie je vyžadovaný kompatibilný domovský server)", "Show previews/thumbnails for images": "Zobrazovať ukážky/náhľady obrázkov", @@ -1505,7 +1383,6 @@ "Error adding ignored user/server": "Chyba pri pridávaní ignorovaného používateľa / servera", "Something went wrong. Please try again or view your console for hints.": "Niečo sa nepodarilo. Prosím, skúste znovu neskôr alebo si prečítajte ďalšie usmernenia zobrazením konzoly.", "Error subscribing to list": "Chyba pri prihlasovaní sa do zoznamu", - "Please verify the room ID or alias and try again.": "Prosím, overte platnosť ID miestnosti alebo alias a skúste znovu.\nPlease verify the room ID or alias and try again.", "Error removing ignored user/server": "Chyba pri odstraňovaní ignorovaného používateľa / servera", "Use Single Sign On to continue": "Pokračovať pomocou Jednotného prihlásenia", "Confirm adding this email address by using Single Sign On to prove your identity.": "Potvrďte pridanie tejto adresy pomocou Jednotného prihlásenia.", @@ -1515,23 +1392,17 @@ "Confirm adding this phone number by using Single Sign On to prove your identity.": "Potvrďte pridanie telefónneho čísla pomocou Jednotného prihlásenia.", "Confirm adding phone number": "Potvrdiť pridanie telefónneho čísla", "Click the button below to confirm adding this phone number.": "Kliknutím na tlačítko potvrdíte pridanie telefónneho čísla.", - "The version of %(brand)s": "Verzia %(brand)su", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Či používate %(brand)s na zariadení, ktorého hlavným vstupným mechanizmom je dotyk (mobil, tablet,...)", "Whether you're using %(brand)s as an installed Progressive Web App": "Či používate %(brand)s ako nainštalovanú Progresívnu Webovú Aplikáciu", "Your user agent": "Identifikátor vášho prehliadača", - "The information being sent to us to help make %(brand)s better includes:": "Informácie, ktoré nám posielate, aby sme zlepšili %(brand)s, zahŕňajú:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "V miestnosti je neznáma relácia: pokiaľ budete pokračovať bez jej overenia, bude schopná odpočúvať váš hovor.", - "Review Sessions": "Overiť reláciu", "If you cancel now, you won't complete verifying the other user.": "Pokiaľ teraz proces zrušíte, nedokončíte overenie druhého používateľa.", "If you cancel now, you won't complete verifying your other session.": "Pokiaľ teraz proces zrušíte, nedokončíte overenie vašej druhej relácie.", "If you cancel now, you won't complete your operation.": "Pokiaľ teraz proces zrušíte, nedokončíte ho.", "Cancel entering passphrase?": "Zrušiť zadávanie (dlhého) hesla.", "Setting up keys": "Príprava kľúčov", "Verify this session": "Overiť túto reláciu", - "Keep recovery passphrase in memory for this session": "Ponechať (dlhé) heslo pre obnovu zálohy v pamäti pre túto reláciu", "Enter recovery passphrase": "Zadajte (dlhé) heslo pre obnovu zálohy", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Nemožno sa dostať do tajného úložiska. Prosím, overte, že ste zadali správne (dlhé) heslo pre obnovu zálohy.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Získajte prístup k vašej šifrovanej histórií správ a vašej krížom podpísanej identite na potvrdenie iných relácií zadaním vášho (dlhého) hesla na obnovu zálohy.", "Encryption upgrade available": "Je dostupná aktualizácia šifrovania", "Set up encryption": "Nastaviť šifrovanie", "Review where you’re logged in": "Zobraziť, kde ste prihlásený", @@ -1550,7 +1421,6 @@ "Unknown (user, session) pair:": "Neznámy pár (používateľ, relácia):", "Session already verified!": "Relácia je už overená!", "WARNING: Session already verified, but keys do NOT MATCH!": "VAROVANIE: Relácia je už overená, ale kľúče sa NEZHODUJÚ!", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Pokiaľ ste zabudli vaše (dlhé) heslo na obnovu zálohy, môžete použiť váš kľúč na obnovu zálohy alebo nastaviť nové spôsoby obnovy zálohy.", "Incorrect recovery passphrase": "Nesprávne (dlhé) heslo pre obnovu zálohy", "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Záloha nemohla byť rozšifrovaná pomocou tohto (dlhého) helsa na obnovu zálohy: prosím, overte, či ste zadali správne (dlhé) helso na obnovu zálohy.", "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!": "VAROVANIE: OVERENIE KĽÚČOV ZLYHALO! Podpisovaný kľúč používateľa %(userId)s a relácia %(deviceId)s je \"%(fprint)s\" čo nezodpovedá zadanému kľúču \"%(fingerprint)s\". Môže to znamenať, že vaša komunikácia je infiltrovaná!", @@ -1584,19 +1454,16 @@ "about an hour from now": "približne o hodinu", "about a day from now": "približne o deň", "Support adding custom themes": "Umožniť pridávať vlastný vzhľad", - "Enable cross-signing to verify per-user instead of per-session": "Povoliť krížové podpisovanie na overovanie používateľa namiesto overovania jednotlivých relácií", "Your homeserver does not support cross-signing.": "Váš domovský server nepodporuje krížové podpisovanie.", "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Váš účet má krížovo podpísanú identitu v bezpečnom úložisku, ale zatiaľ nie je nedôveryhodná pre túto reláciu.", "Reset cross-signing and secret storage": "Obnoviť krížové podpisovanie a bezpečné úložisko", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Individuálne overte každú používateľskú reláciu a označte ju za dôveryhodnú, bez dôvery krížovo podpísaných zariadení.", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Zálohovací kľúč je uložený v bezpečnom úložisku, ale jeho načítanie nie je povolené v tejto relácií. Prosím, zapnite krížové podpisovanie v Experimentoch, aby ste mohli modifikovať stav zálohy.", "Cross-signing": "Krížové podpisovanie", "Destroy cross-signing keys?": "Zmazať kľúče pre krížové podpisovanie?", "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Zmazanie kľúčov pre krížové podpisovanie je nenávratné. Každý, s kým ste sa overili, bude vidieť bezpečnostné upozornenia. Toto určite nechcete robiť, dokiaľ ste nestratili všetky zariadenia, s ktorými by ste mohli krížovo podpisovať.", "Clear cross-signing keys": "Zmazať kľúče pre krížové podpisovanie", "a new cross-signing key signature": "nový podpis kľúča pre krížové podpisovanie", "a device cross-signing signature": "podpis krížovo podpísaného zariadenia", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Získajte prístup k vašej šifrovanej histórií správ a vašej krížom podpísanej identite pre overenie iných relácií zadaním vášho kľúču obnovy.", "or another cross-signing capable Matrix client": "alebo iný Matrixový klient podporujúci krížové podpisovanie", "Removing…": "Odstraňovanie…", "Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).": "Váš nový účet (%(newAccountId)s) je registrovaný, ale už ste prihlásený pod iným účtom (%(loggedInUserId)s).", @@ -1606,7 +1473,6 @@ "Registration Successful": "Úspešná registrácia", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Potvrďte svoju identitu overením tohto účtu z jednej z vašich iných relácií, čím mu povolíte prístup k šifrovaným správam.", "This requires the latest %(brand)s on your other devices:": "Toto vyžaduje najnovší %(brand)s na vašich ostatných zariadeniach:", - "Use Recovery Passphrase or Key": "Použite (dlhé) heslo pre obnovu zálohy alebo kľúč", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Vaša nová relácia je teraz overená. Má prístup k vašim šifrovaným správam a ostatný používatelia ju uvidia ako dôveryhodnú.", "Your new session is now verified. Other users will see it as trusted.": "Vaša nová relácia je teraz overená. Ostatný používatelia ju uvidia ako dôveryhodnú.", "Without completing security on this session, it won’t have access to encrypted messages.": "Bez dokončenia overenia nebude mať táto relácia prístup k šifrovaným správam.", @@ -1615,10 +1481,8 @@ "Failed to re-authenticate": "Opätovná autentifikácia zlyhala", "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.": "Znovuzískajte prístup k vášmu účtu a obnovte šifrovacie kľúče uložené v tejto relácií. Bez nich nebudete môcť čítať všetky vaše šifrované správy vo všetkých reláciach.", "Font scaling": "Škálovanie písma", - "Use IRC layout": "Použiť IRC rozloženie", "Show info about bridges in room settings": "Zobraziť informácie o mostoch v Nastaveniach miestnosti", "Font size": "Veľkosť písma", - "Custom font size": "Vlastná veľkosť písma", "Show typing notifications": "Posielať oznámenia, keď píšete", "Never send encrypted messages to unverified sessions from this session": "Nikdy neposielať šifrované správy neovereným reláciam z tejto relácie", "Never send encrypted messages to unverified sessions in this room from this session": "Nikdy neposielať šifrované správy neovereným reláciam v tejto miestnosti z tejto relácie", @@ -1678,7 +1542,6 @@ "Room name or address": "Meno alebo adresa miestnosti", "Joins room with given address": "Pridať sa do miestnosti s danou adresou", "Unrecognised room address:": "Nerozpoznaná adresa miestnosti:", - "Use the improved room list (in development - refresh to apply changes)": "Použiť vylepšený zoznam miestností (vo vývoji - znovunačítajte stránku pre aplikovanie zmien)", "This bridge is managed by .": "Tento most spravuje .", "Workspace: %(networkName)s": "Pracovisko: %(networkName)s", "Channel: %(channelName)s": "Kanál: %(channelName)s", @@ -1709,7 +1572,6 @@ "Securely cache encrypted messages locally for them to appear in search results.": "Bezpečne cachovať šifrované správy lokálne, aby sa mohli zobraziť vo vyhľadávaní.", "Enable": "Povoliť", "%(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)su chýbajú niektoré komponenty potrebné na bezpečné cachovanie šifrovaných správ lokálne. Pokiaľ chcete experimentovať s touto funkciou, spravte si svoj vlastný %(brand)s Desktop s pridanými vyhľadávacími komponentami.", - "%(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)su nemôže bezpečne cachovať šifrované správy lokálne keď beží v prehliadači. Použite %(brand)s Desktop, aby sa šifrované správy zobrazili vo vyhľadávaní.", "This session is backing up your keys. ": "Táto relácia zálohuje vaše kľúče. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Táto relácia nezálohuje vaše kľúče, ale už máte jednu existujúcu zálohu z ktorej sa môžete obnoviť a postupne pridávať.", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Pred odhlásením pripojte túto reláciu k zálohe kľúčov, aby ste predišli strate kľúčov, ktoré môžu byť len v tejto relácií.", diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index edb9f3352f..01dc7c4442 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -8,16 +8,10 @@ "Which officially provided instance you are using, if any": "Cilën instancë të furnizuar zyrtarish po përdorni, në pastë", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Nëse po përdorni apo jo mënyrën Richtext të Përpunuesit të Teksteve të Pasur", "Your homeserver's URL": "URL e Shërbyesit tuaj Home", - "Your identity server's URL": "URL e shërbyesit tuaj të identiteteve", "Analytics": "Analiza", - "The information being sent to us to help make %(brand)s better includes:": "Të dhënat që na dërgohen për të na ndihmuar ta bëjmë më të mirë %(brand)s-in përfshijnë:", + "The information being sent to us to help make %(brand)s better includes:": "Te të dhënat e dërguara te ne për të na ndihmuar ta bëjmë %(brand)s-in më të mirë përfshihen:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Kur kjo faqe përfshin të dhëna të identifikueshme, të tilla si një ID dhome përdoruesi apo grupi, këto të dhëna hiqen përpara se të dërgohet te shërbyesi.", "Call Failed": "Thirrja Dështoi", - "Review Devices": "Shqyrtoni Pajisje", - "Call Anyway": "Thirre Sido Qoftë", - "Answer Anyway": "Përgjigju Sido Qoftë", - "Call": "Thirrje", - "Answer": "Përgjigje", "Call Timeout": "Mbarim kohe Thirrjeje", "The remote side failed to pick up": "Ana e largët dështoi të përgjigjet", "Unable to capture screen": "S’arrihet të fotografohet ekrani", @@ -30,7 +24,6 @@ "Upload Failed": "Ngarkimi Dështoi", "Failure to create room": "S’u arrit të krijohej dhomë", "Server may be unavailable, overloaded, or you hit a bug.": "Shërbyesi mund të jetë i pakapshëm, i mbingarkuar, ose hasët një të metë.", - "Send anyway": "Dërgoje sido qoftë", "Send": "Dërgoje", "Sun": "Die", "Mon": "Hën", @@ -77,7 +70,6 @@ "Restricted": "E kufizuar", "Moderator": "Moderator", "Admin": "Përgjegjës", - "Start a chat": "Nisni një fjalosje", "Operation failed": "Veprimi dështoi", "Failed to invite": "S’u arrit të ftohej", "Failed to invite the following users to the %(roomName)s room:": "S’u arrit të ftoheshin përdoruesit vijues te dhoma %(roomName)s:", @@ -93,12 +85,10 @@ "Usage": "Përdorim", "/ddg is not a command": "/ddg s’është urdhër", "To use it, just wait for autocomplete results to load and tab through them.": "Për ta përdorur, thjesht pritni që të ngarkohen përfundimet e vetëplotësimit dhe shihini një nga një.", - "Unrecognised room alias:": "Alias dhome jo i pranuar:", "Ignored user": "Përdorues i shpërfillur", "You are now ignoring %(userId)s": "Tani po e shpërfillni %(userId)s", "Unignored user": "U hoq shpërfillja për përdoruesin", "Fetching third party location failed": "Dështoi prurja e vendndodhjes së palës së tretë", - "A new version of %(brand)s is available.": "Ka gati një version të ri %(brand)s-it.", "Send Account Data": "Dërgo të Dhëna Llogarie", "All notifications are currently disabled for all targets.": "Krejt njoftimet hëpërhë janë çaktivizuar për krejt objektivat.", "Uploading report": "Po ngarkohet raporti", @@ -122,8 +112,6 @@ "Send Custom Event": "Dërgoni Akt Vetjak", "Advanced notification settings": "Rregullime të mëtejshme për njoftimet", "Failed to send logs: ": "S’u arrit të dërgoheshin regjistra: ", - "delete the alias.": "fshije aliasin.", - "To return to your account in future you need to set a password": "Që të riktheheni te llogaria juaj në të ardhmen, lypset të caktoni një fjalëkalim", "Forget": "Harroje", "World readable": "E lexueshme nga bota", "Mute": "Pa Zë", @@ -153,7 +141,6 @@ "No update available.": "S’ka përditësim gati.", "Noisy": "I zhurmshëm", "Collecting app version information": "Po grumbullohen të dhëna versioni aplikacioni", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Të fshihet aliasi i dhomës %(alias)s dhe të hiqet %(name)s nga drejtoria?", "Keywords": "Fjalëkyçe", "Unpin Message": "Shfiksojeni Mesazhin", "Enable notifications for this account": "Aktivizo njoftime për këtë llogari", @@ -221,7 +208,6 @@ "You must specify an event type!": "Duhet të përcaktoni një lloj akti!", "Unhide Preview": "Shfshihe Paraparjen", "Unable to join network": "S’arrihet të hyhet në rrjet", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Mund t’i keni formësuar në një tjetër klient nga %(brand)s-i. S’mund t’i sintonizoni në %(brand)s, por ata janë ende të vlefshëm", "Sorry, your browser is not able to run %(brand)s.": "Na ndjeni, shfletuesi juaj nuk është në gjendje të xhirojë %(brand)s-in.", "Messages in group chats": "Mesazhe në fjalosje në grup", "Yesterday": "Dje", @@ -253,10 +239,8 @@ "Rooms": "Dhoma", "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!": "Me shfletuesin tuaj të tanishëm, pamja dhe ndjesitë nga aplikacioni mund të jenë plotësisht të pasakta, dhe disa nga ose krejt veçoritë të mos funksionojnë. Nëse doni ta provoni sido qoftë, mund të vazhdoni, por mos u ankoni për çfarëdo problemesh që mund të hasni!", "Checking for an update...": "Po kontrollohet për një përditësim…", - "There are advanced notifications which are not shown here": "Ka njoftime të thelluara që nuk shfaqen këtu", "PM": "PM", "AM": "AM", - "Room name or alias": "Emër dhome ose alias", "Verified key": "Kyç i verifikuar", "Reason": "Arsye", "%(senderName)s requested a VoIP conference.": "%(senderName)s kërkoi një konferencë VoIP.", @@ -268,7 +252,6 @@ "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s e bëri historikun e ardhshëm të dhomës të dukshëm për krejt anëtarët e dhomës, prej çastit kur morën pjesë.", "%(senderName)s made future room history visible to all room members.": "%(senderName)s e bëri historikun e ardhshëm të dhomës të dukshëm për krejt anëtarët e dhomës.", "%(senderName)s made future room history visible to anyone.": "%(senderName)s e bëri historikun e ardhshëm të dhomës të dukshëm për këdo.", - "Use compact timeline layout": "Përdorni skemë grafike kompakte për rrjedhën kohore", "Always show message timestamps": "Shfaq përherë vula kohore për mesazhet", "Room Colour": "Ngjyrë Dhome", "unknown caller": "thirrës i panjohur", @@ -290,13 +273,8 @@ "Confirm password": "Ripohoni frazëkalimin", "Change Password": "Ndryshoni Fjalëkalimin", "Authentication": "Mirëfilltësim", - "Device ID": "ID Pajisjeje", "Last seen": "Parë së fundi më", - "Disable Notifications": "Çaktivizo Njoftimet", - "Enable Notifications": "Aktivizo Njoftimet", "not specified": "e papërcaktuar", - "Remote addresses for this room:": "Adresa të largëta për këtë dhomë:", - "Local addresses for this room:": "Adresa vendore për këtë dhomë:", "This room has no local addresses": "Kjo dhomë s’ka adresë vendore", "Invalid community ID": "ID bashkësie e pavlefshme", "URL Previews": "Paraparje URL-sh", @@ -309,8 +287,6 @@ "Options": "Mundësi", "Key request sent.": "Kërkesa për kyç u dërgua.", "Please select the destination room for this message": "Ju lutemi, përzgjidhni dhomën vendmbërritje për këtë mesazh", - "Blacklisted": "Në Listë të Zezë", - "device id: ": "ID pajisjeje: ", "Kick": "Përzëre", "Kick this user?": "Të përzihet ky përdorues?", "Unban": "Hiqja dëbimin", @@ -322,9 +298,6 @@ "Ignore": "Shpërfille", "Mention": "Përmendje", "Invite": "Ftoje", - "User Options": "Mundësi Përdoruesi", - "Direct chats": "Fjalosje të drejtpërdrejta", - "Make Moderator": "Kaloje Moderator", "Admin Tools": "Mjete Përgjegjësi", "and %(count)s others...|other": "dhe %(count)s të tjerë…", "and %(count)s others...|one": "dhe një tjetër…", @@ -334,9 +307,7 @@ "Video call": "Thirrje video", "Upload file": "Ngarkoni kartelë", "Send an encrypted reply…": "Dërgoni një përgjigje të fshehtëzuar…", - "Send a reply (unencrypted)…": "Dërgoni një përgjigje (të pafshehtëzuar)…", "Send an encrypted message…": "Dërgoni një mesazh të fshehtëzuar…", - "Send a message (unencrypted)…": "Dërgoni një mesazh (të pafshehtëzuar)…", "You do not have permission to post to this room": "S’keni leje të postoni në këtë dhomë", "Server error": "Gabim shërbyesi", "Command error": "Gabim urdhri", @@ -399,14 +370,9 @@ "Unknown Address": "Adresë e Panjohur", "Allow": "Lejoje", "Create new room": "Krijoni dhomë të re", - "Unblacklist": "Hiqe nga listë e zezë", - "Blacklist": "Listë e zezë", - "Unverify": "Hiqi verifikimin", - "Verify...": "Verifikoni…", "No results": "S’ka përfundime", "Communities": "Bashkësi", "Home": "Kreu", - "Could not connect to the integration server": "S’u lidh dot te shërbyesi i integrimt", "Manage Integrations": "Administroni Integrime", "were invited %(count)s times|one": "janë ftuar", "was invited %(count)s times|other": "është ftuar %(count)s herë", @@ -446,10 +412,6 @@ "Incorrect password": "Fjalëkalim i pasaktë", "Deactivate Account": "Çaktivizoje Llogarinë", "An error has occurred.": "Ndodhi një gabim.", - "Start verification": "Fillo verifikimin", - "Share without verifying": "Ndajeni me të tjerë pa e verifikuar", - "Ignore request": "Shpërfille kërkesën", - "Encryption key request": "Kërkesë kyçi fshehtëzimesh", "Invalid Email Address": "Adresë Email e Pavlefshme", "This doesn't appear to be a valid email address": "Kjo s’duket se është adresë email e vlefshme", "Verification Pending": "Verifikim Në Pritje të Miratimit", @@ -460,7 +422,6 @@ "Private Chat": "Fjalosje Private", "Public Chat": "Fjalosje Publike", "Custom": "Vetjak", - "Alias (optional)": "Alias (opsional)", "Name": "Emër", "You must register to use this functionality": "Që të përdorni këtë funksion, duhet të regjistroheni", "Add rooms to the community summary": "Shtoni dhoma te përmbledhja mbi bashkësinë", @@ -497,8 +458,6 @@ "Uploading %(filename)s and %(count)s others|other": "Po ngarkohet %(filename)s dhe %(count)s të tjera", "Uploading %(filename)s and %(count)s others|zero": "Po ngarkohet %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Po ngarkohet %(filename)s dhe %(count)s tjetër", - "Light theme": "Temë e çelët", - "Dark theme": "Temë e errët", "Sign out": "Dilni", "Success": "Sukses", "Cryptography": "Kriptografi", @@ -533,19 +492,7 @@ "Notify the whole room": "Njofto krejt dhomën", "Room Notification": "Njoftim Dhome", "Users": "Përdorues", - "unknown device": "pajisje e panjohur", - "NOT verified": "JO e verifikuar", - "verified": "e verifikuar", - "Verification": "Verifikim", - "User ID": "ID përdoruesi", - "Curve25519 identity key": "Kyç identiteti Curve25519", - "none": "asnjë", - "Algorithm": "Algoritëm", - "unencrypted": "të pafshehtëzuara", - "Decryption error": "Gabim shfshehtëzimi", "Session ID": "ID sesioni", - "End-to-end encryption information": "Të dhëna fshehtëzimi skaj-më-skaj", - "Event information": "Të dhëna akti", "Passphrases must match": "Frazëkalimet duhet të përputhen", "Passphrase must not be empty": "Frazëkalimi s’mund të jetë i zbrazët", "Export room keys": "Eksporto kyçe dhome", @@ -564,7 +511,6 @@ "Incoming video call from %(name)s": "Thirrje video ardhëse nga %(name)s", "Incoming call from %(name)s": "Thirrje ardhëse nga %(name)s", "Failed to upload profile picture!": "S’u arrit të ngarkohej foto profili!", - "New address (e.g. #foo:%(localDomain)s)": "Adresë e re (p.sh. #foo:%(localDomain)s)", "New community ID (e.g. +foo:%(localDomain)s)": "ID bashkësie të re (p.sh. +foo:%(localDomain)s)", "Ongoing conference call%(supportedText)s.": "Thirrje konference që po zhvillohet%(supportedText)s.", "Failed to kick": "S’u arrit të përzihej", @@ -583,9 +529,6 @@ "Members only (since they joined)": "Vetëm anëtarë (që kur janë bërë pjesë)", "Jump to first unread message.": "Hidhu te mesazhi i parë i palexuar.", "Failed to copy": "S’u arrit të kopjohej", - "Message removed by %(userId)s": "Mesazhi u hoq nga %(userId)s", - "Message removed": "Mesazhi u hoq", - "To continue, please enter your password.": "Që të vazhdohet, ju lutemi, jepni fjalëkalimin tuaj.", "Token incorrect": "Token i pasaktë", "Remove from community": "Hiqe prej bashkësie", "Remove this user from community?": "Të hiqet ky përdoruesin prej bashkësisë?", @@ -594,7 +537,6 @@ "Failed to remove room from community": "S’u arrit të hiqej dhoma nga bashkësia", "Minimize apps": "Minimizoji aplikacionet", "%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)sndryshoi avatarin e vet", - "I verify that the keys match": "Verifikoj se kyçet përputhen", "Unable to restore session": "S’arrihet të rikthehet sesioni", "Please check your email and click on the link it contains. Once this is done, click continue.": "Ju lutemi, kontrolloni email-in tuaj dhe klikoni mbi lidhjen që përmban. Pasi të jetë bërë kjo, klikoni që të vazhdohet.", "Unable to add email address": "S’arrihet të shtohet adresë email", @@ -610,8 +552,6 @@ "Failed to load %(groupId)s": "S’u arrit të ngarkohej %(groupId)s", "Failed to reject invitation": "S’u arrit të hidhej poshtë ftesa", "Failed to leave room": "S’u arrit të braktisej", - "Scroll to bottom of page": "Rrëshqit te fundi i faqes", - "Unknown room %(roomId)s": "Dhomë e panjohur %(roomId)s", "Fill screen": "Mbushe ekranin", "Tried to load a specific point in this room's timeline, but was unable to find it.": "U provua të ngarkohej një pikë të dhënë prej rrjedhës kohore në këtë dhomë, por s’u arrit të gjendej.", "Failed to load timeline position": "S’u arrit të ngarkohej pozicion rrjedhe kohore", @@ -622,7 +562,6 @@ "I have verified my email address": "E kam verifikuar adresën time email", "Failed to fetch avatar URL": "S’u arrit të sillej URL avatari", "Invites user with given id to current room": "Fton te dhoma e tanishme përdoruesin me ID-në e dhënë", - "Joins room with given alias": "Hyn në dhomë me aliasin e dhënë", "Searches DuckDuckGo for results": "Kërkon te DuckDuckGo për përfundime", "Ignores a user, hiding their messages from you": "Shpërfill një përdorues, duke ju fshehur krejt mesazhet prej tij", "File to import": "Kartelë për importim", @@ -654,7 +593,6 @@ "Download %(text)s": "Shkarko %(text)s", "Error decrypting image": "Gabim në shfshehtëzim figure", "Error decrypting video": "Gabim në shfshehtëzim videoje", - "Removed or unknown message type": "Lloj mesazhi i hequr ose i panjohur", "An email has been sent to %(emailAddress)s": "U dërgua një email te %(emailAddress)s", "Delete Widget": "Fshije Widget-in", "Delete widget": "Fshije widget-in", @@ -679,7 +617,6 @@ "Deops user with given id": "I heq cilësinë e operatorit përdoruesit me ID-në e dhënë", "Changes your display nickname": "Ndryshon nofkën tuaj në ekran", "Emoji": "Emoji", - "Ed25519 fingerprint": "Shenja gishtash Ed25519", "Failed to set direct chat tag": "S’u arrit të caktohej etiketa e fjalosjes së drejtpërdrejtë", "You are no longer ignoring %(userId)s": "Nuk e shpërfillni më %(userId)s", "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s caktoi për veten emër ekrani %(displayName)s.", @@ -747,7 +684,6 @@ "e.g. %(exampleValue)s": "p.sh., %(exampleValue)s", "e.g. ": "p.sh., ", "Permission Required": "Lypset Leje", - "Registration Required": "Lyp Regjistrim", "This homeserver has hit its Monthly Active User limit.": "Ky shërbyes home ka tejkaluar kufirin e vet Përdorues Aktivë Mujorë.", "This homeserver has exceeded one of its resource limits.": "Ky shërbyes home ka tejkaluar një nga kufijtë e tij mbi burimet.", "Please contact your service administrator to continue using the service.": "Ju lutemi, që të vazhdoni të përdorni shërbimin, lidhuni me përgjegjësin e shërbimit tuaj.", @@ -765,9 +701,6 @@ "The email field must not be blank.": "Fusha email s’duhet të jetë e zbrazët.", "The phone number field must not be blank.": "Fusha numër telefoni s’duhet të jetë e zbrazët.", "The password field must not be blank.": "Fusha fjalëkalim s’duhet të jetë e zbrazët.", - "Yes, I want to help!": "Po, dua të ndihmoj!", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Ky shërbyes home ka tejkaluar kufirin e vet të Përdoruesve Aktivë Mujorë, ndaj disa përdorues s’do të jenë në gjendje të bëjnë hyrjen.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Ky shërbyes home ka tejkaluar një nga kufijtë mbi burimet, ndaj disa përdorues s’do të jenë në gjendje të bëjnë hyrjen.", "Failed to remove widget": "S’u arrit të hiqej widget-i", "Popout widget": "Widget flluskë", "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.": "Dukshmëria e mesazheve në Matrix është e ngjashme me atë në email. Harrimi i mesazheve nga ana jonë do të thotë që mesazhet që keni dërguar nuk do të ndahen me çfarëdo përdoruesi të ri apo të paregjistruar, por përdoruesit e regjistruar, që kanë tashmë hyrje në këto mesazhe, do të kenë prapëseprapë hyrje te kopja e tyre.", @@ -794,14 +727,10 @@ "Please contact your service administrator to continue using this service.": "Ju lutemi, që të vazhdoni të përdorni këtë shërbim, lidhuni me përgjegjësin e shërbimit tuaj.", "Open Devtools": "Hapni Mjete Zhvilluesi", "Show developer tools": "Shfaq mjete zhvilluesi", - "Your User Agent": "Agjent Përdoruesi i Juaj", "Your device resolution": "Qartësi e pajisjes tuaj", "A call is currently being placed!": "Është duke u bërë një thirrje!", "You do not have permission to start a conference call in this room": "S’keni leje për të nisur një thirrje konferencë këtë në këtë dhomë", "Missing roomId.": "Mungon roomid.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s shtoi %(addedAddresses)s si një adresë për këtë dhomë.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s hoqi %(removedAddresses)s si adresa për këtë dhomë.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s hoqi %(removedAddresses)s si adresë për këtë dhomë.", "%(senderName)s removed the main address for this room.": "%(senderName)s hoqi adresën kryesore për këtë dhomë.", "This room has been replaced and is no longer active.": "Kjo dhomë është zëvendësuar dhe s’është më aktive.", "Share room": "Ndani dhomë me të tjerë", @@ -826,10 +755,7 @@ "Failed to add the following users to the summary of %(groupId)s:": "S’u arrit të ftoheshin përdoruesit vijues te përmbledhja e %(groupId)s:", "Unable to join community": "S’arrihet të bëhet pjesë e bashkësisë", "Unable to leave community": "S’arrihet të braktiset bashkësia", - "Claimed Ed25519 fingerprint key": "U pretendua për shenja gishtash Ed25519", "Every page you use in the app": "Çdo faqe që përdorni te aplikacioni", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s shtoi %(addedAddresses)s si adresa për këtë dhomë.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s shtoi %(addedAddresses)s dhe hoqi %(removedAddresses)s si adresa për këtë dhomë.", "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s nga %(fromPowerLevel)s në %(toPowerLevel)s", "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s ndryshoi shkallën e pushtetit të %(powerLevelDiffText)s.", "%(senderName)s changed the pinned messages for the room.": "%(senderName)s ndryshoi mesazhin e fiksuar për këtë dhomë.", @@ -867,7 +793,6 @@ "Join as voice or video.": "Merrni pjesë me ose me video.", "Demote yourself?": "Të zhgradohet vetvetja?", "Demote": "Zhgradoje", - "Failed to toggle moderator status": "S’u arrit të këmbehet gjendje moderatori", "Server unavailable, overloaded, or something else went wrong.": "Shërbyesi është i pakapshëm, i mbingarkuar, ose diç tjetër shkoi ters.", "No users have specific privileges in this room": "S’ka përdorues me privilegje të caktuara në këtë dhomë", "Guests cannot join this room even if explicitly invited.": "Vizitorët s’mund të marrin pjesë në këtë edhe po të jenë ftuar shprehimisht.", @@ -876,9 +801,6 @@ "Please review and accept the policies of this homeserver:": "Ju lutemi, shqyrtoni dhe pranoni rregullat e këtij shërbyesi home:", "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Nëse nuk përcaktoni një adresë email, s’do të jeni në gjendje të bëni ricaktime të fjalëkalimit tuaj. Jeni i sigurt?", "Removing a room from the community will also remove it from the community page.": "Heqja e një dhome nga bashkësia do ta heqë atë edhe nga faqja e bashkësisë.", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Ju lutemi, ndihmoni të përmirësohet %(brand)s duke dërguar të dhëna anonime përdorimi. Për këtë do të përdoret një cookie (ju lutemi, shihni Rregullat tona mbi Cookie-t).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Ju lutemi, ndihmoni të përmirësohet %(brand)s duke dërguar të dhëna anonime përdorimi. Për këtë do të përdoret një cookie.", - "Please contact your service administrator to get this limit increased.": "Ju lutemi, që të shtohet ky kufi, lidhuni me përgjegjësin e shërbimit.", "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.": "Nëse versioni tjetër i %(brand)s-it është ende i hapur në një skedë tjetër, ju lutemi, mbylleni, ngaqë përdorimi njëkohësisht i %(brand)s-it në të njëjtën strehë, në njërën anë me lazy loading të aktivizuar dhe në anën tjetër të çaktivizuar do të shkaktojë probleme.", "%(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!": "%(brand)s-i tani përdor 3 deri 5 herë më pak kujtesë, duke ngarkuar të dhëna mbi përdorues të tjerë vetëm kur duhen. Ju lutemi, prisni, teksa njëkohësojmë të dhënat me shërbyesin!", "Put a link back to the old room at the start of the new room so people can see old messages": "Vendosni në krye të dhomës së re një lidhje për te dhoma e vjetër, që njerëzit të mund të shohin mesazhet e vjetër", @@ -894,7 +816,6 @@ "Reject all %(invitedRooms)s invites": "Mos prano asnjë ftesë për në %(invitedRooms)s", "New passwords must match each other.": "Fjalëkalimet e rinj duhet të përputhen me njëri-tjetrin.", "Please note you are logging into the %(hs)s server, not matrix.org.": "Ju lutemi, kini parasysh se jeni futur te shërbyesi %(hs)s, jo te matrix.org.", - "You need to register to do this. Would you like to register now?": "Për ta bërë këtë, lypset të regjistroheni. Doni të regjistroheni që tani?", "Stops ignoring a user, showing their messages going forward": "Resht shpërfilljen e një përdoruesi, duke i shfaqur mesazhet e tij të dërgohen", "Your browser does not support the required cryptography extensions": "Shfletuesi juaj nuk mbulon zgjerimet kriptografike të domosdoshme", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Vulat kohore shfaqi në formatin 12 orësh (p.sh. 2:30pm)", @@ -942,7 +863,6 @@ "This homeserver doesn't offer any login flows which are supported by this client.": "Ky shërbyes home nuk ofron ndonjë mënyrë hyrjesh që mbulohet nga ky klient.", "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.": "Kartela e eksportuar do t’i lejojë kujtdo që e lexon të shfshehtëzojë çfarëdo mesazhesh të fshehtëzuar që mund të shihni, ndaj duhet të jeni i kujdesshëm për ta mbajtur të parrezikuar. Si ndihmë për këtë, duhet të jepni më poshtë një frazëkalim, që do të përdoret për të fshehtëzuar të dhënat e eksportuara. Importimi i të dhënave do të jetë i mundur vetëm duke përdorur të njëjtin frazëkalim.", "Not a valid %(brand)s keyfile": "S’është kartelë kyçesh %(brand)s e vlefshme", - "Revoke Moderator": "Shfuqizoje Si Moderator", "Historical": "Të dikurshme", "Flair": "Simbole", "Showing flair for these communities:": "Shfaqen simbole për këto bashkësi:", @@ -951,7 +871,6 @@ "Display your community flair in rooms configured to show it.": "Shfaqni simbolet e bashkësisë tuaj në dhoma të formësuara për t’i shfaqur ato.", "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.": "Jeni i sigurt se doni të hiqet (fshihet) ky akt? Mbani parasysh se nëse fshini emrin e një dhome ose ndryshimin e temës, kjo mund të sjellë zhbërjen e ndryshimit.", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Që të shmanget humbja e historikut të fjalosjes tuaj, duhet të eksportoni kyçet e dhomës tuaj përpara se të dilni nga llogari. Që ta bëni këtë, duhe të riktheheni te versioni më i ri i %(brand)s-it", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Më parë përdorët një version më të ri të %(brand)s-it në %(host)s. Që ta përdorni sërish këtë version me fshehtëzim skaj-më-skaj, duhet të dilni dhe rihyni te llogaria juaj. ", "Incompatible Database": "Bazë të dhënash e Papërputhshme", "Continue With Encryption Disabled": "Vazhdo Me Fshehtëzimin të Çaktivizuar", "Unable to load! Check your network connectivity and try again.": "S’arrihet të ngarkohet! Kontrolloni lidhjen tuaj në rrjet dhe riprovoni.", @@ -960,34 +879,23 @@ "Unable to load key backup status": "S’arrihet të ngarkohet gjendje kopjeruajtjeje kyçesh", "Backup version: ": "Version kopjeruajtjeje: ", "Algorithm: ": "Algoritëm: ", - "Enter a passphrase...": "Jepni një frazëkalim…", "Next": "Pasuesja", "That matches!": "U përputhën!", "That doesn't match.": "S’përputhen.", "Go back to set it again.": "Shkoni mbrapsht që ta ricaktoni.", - "Repeat your passphrase...": "Përsëritni frazëkalimin tuaj…", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Si masë sigurie, mund ta përdoreni për të rikthyer historikun e mesazheve tuaj të fshehtëzuar, nëse harroni Frazëkalimin e Rimarrjeve.", - "Your Recovery Key": "Kyçi Juaj i Rimarrjeve", - "Copy to clipboard": "Kopjoje në të papastër", "Download": "Shkarkoje", "Print it and store it somewhere safe": "Shtypeni dhe ruajeni diku pa rrezik", "Save it on a USB key or backup drive": "Ruajeni në një diskth USB ose disk kopjeruajtjesh", "Copy it to your personal cloud storage": "Kopjojeni te depoja juaj personale në re", "Set up Secure Message Recovery": "Rregulloni Rimarrje të Sigurt Mesazhesh", - "Keep it safe": "Mbajeni të parrezikuar", - "Create Key Backup": "Krijo Kopjeruajtje Kyçesh", "Unable to create key backup": "S’arrihet të krijohet kopjeruajtje kyçesh", "Retry": "Riprovo", "Unable to load backup status": "S’arrihet të ngarkohet gjendje kopjeruajtjeje", "Unable to restore backup": "S’arrihet të rikthehet kopjeruajtje", "No backup found!": "S’u gjet kopjeruajtje!", - "Backup Restored": "Kopjeruajtja u Rikthye", "Failed to decrypt %(failedCount)s sessions!": "S’u arrit të shfshehtëzohet sesioni %(failedCount)s!", - "Restored %(sessionCount)s session keys": "U rikthyen kyçet e sesionit %(sessionCount)s", - "Enter Recovery Passphrase": "Jepni Frazëkalim Rimarrjeje", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Hyni te historiku i mesazheve tuaj të siguruar dhe rregulloni shkëmbim mesazhesh të sigurt duke dhënë frazëkalimin tuaj të rimarrjeve.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Nëse keni harruar frazëkalimin tuaj të rimarrjeve, mund të përdorni kyçin tuaj të rimarrjeve ose rregulloni mundësi të reja rimarrjesh", - "Enter Recovery Key": "Jepni Kyç Rimarrjeje", "This looks like a valid recovery key!": "Ky duket si kyç i vlefshëm rimarrjesh!", "Not a valid recovery key": "Kyç rimarrjesh jo i vlefshëm", "Access your secure message history and set up secure messaging by entering your recovery key.": "Hyni te historiku i mesazheve tuaj të siguruar dhe rregulloni shkëmbim mesazhesh të sigurt duke dhënë kyçin tuaj të rimarrjeve.", @@ -1019,9 +927,7 @@ "A word by itself is easy to guess": "Një fjalë më vete është e lehtë të hamendësohet", "Names and surnames by themselves are easy to guess": "Emrat dhe mbiemrat në vetvete janë të lehtë për t’i hamendësuar", "Common names and surnames are easy to guess": "Emra dhe mbiemra të rëndomtë janë të kollajtë për t’u hamendësuar", - "Great! This passphrase looks strong enough.": "Bukur! Ky frazëkalim duket goxha i fuqishëm.", "Failed to load group members": "S'u arrit të ngarkoheshin anëtarë grupi", - "As a safety net, you can use it to restore your encrypted message history.": "Si masë sigurie, mund ta përdorni për të rikthyer historikun e mesazheve tuaj të fshehtëzuar.", "Failed to invite users to the room:": "S’u arrit të ftohen përdorues te dhoma:", "You do not have permission to invite people to this room.": "S’keni leje të ftoni njerëz në këtë dhomë.", "User %(user_id)s does not exist": "Përdoruesi %(user_id)s nuk ekziston", @@ -1050,7 +956,6 @@ "Clear status": "Spastroji gjendjen", "Unrecognised address": "Adresë jo e pranuar", "User %(user_id)s may or may not exist": "Përdoruesi %(user_id)s mund të ekzistojë ose jo", - "Waiting for %(userId)s to confirm...": "Po pritet që %(userId)s të bëjë ripohimin…", "Prompt before sending invites to potentially invalid matrix IDs": "Pyet, përpara se të dërgohen ftesa te ID Matrix potencialisht të pavlefshme", "The following users may not exist": "Përdoruesit vijues mund të mos ekzistojnë", "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "S’arrihet të gjenden profile për ID-të Matrix të treguara më poshtë - do të donit të ftohet, sido qoftë?", @@ -1119,7 +1024,6 @@ "Timeline": "Rrjedhë Kohore", "Autocomplete delay (ms)": "Vonesë Vetëplotësimi (ms)", "Roles & Permissions": "Role & Leje", - "To link to this room, please add an alias.": "Që të bëni lidhje për te kjo dhomë, ju lutemi, shtoni një alias.", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Ndryshime se cilët mund të lexojnë historikun do të vlejnë vetëm për mesazhe të ardhshëm në këtë dhomë. Dukshmëria e historikut ekzistues nuk do të ndryshohet.", "Security & Privacy": "Siguri & Privatësi", "Encryption": "Fshehtëzim", @@ -1137,18 +1041,12 @@ "Room Name": "Emër Dhome", "Room Topic": "Temë Dhome", "Join": "Bëhuni pjesë", - "Use Legacy Verification (for older clients)": "Përdor Verifikim të Dikurshëm (për klientë të vjetër)", - "Verify by comparing a short text string.": "Verifikoje duke krahasuar një varg të shkurtër teksti.", - "Begin Verifying": "Po verifikohet", - "Waiting for partner to accept...": "Po pritet pranimi nga partneri…", - "Use two-way text verification": "Përdor verifikim të anasjelltë me tekst", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verifikojeni këtë përdorues që t’i vihet shenjë si i besuar. Përdoruesit e besuar ju më tepër siguri kur përdorni mesazhe të fshehtëzuar skaj-më-skaj.", "Waiting for partner to confirm...": "Po pritet ripohimi nga partneri…", "Incoming Verification Request": "Kërkesë Verifikimi e Ardhur", "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.": "Për të na ndihmuar të shmangim çështje të përsëdytura, ju lutemi, së pari shihni çështjet ekzistuese (dhe shtoni një +1) ose krijoni një çështje të re, nëse nuk gjeni gjë.", "Report bugs & give feedback": "Njoftoni të meta & jepni përshtypjet", "Go back": "Kthehu mbrapsht", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Nuk u shfshehtëzua dot kopjeruajtja me këtë kyç: ju lutemi, verifikoni që dhatë kyçin e duhur të rimarrjeve.", "Update status": "Përditëso gendjen", "Set status": "Caktojini gjendjen", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Mund të përdorni mundësitë mbi shërbyes vetjak, për të bërë hyrjen në shërbyes të tjerë Matrix, duke dhënë URL-në e një tjetër shërbyesi Home. Kjo ju lejon ta përdorni këtë aplikacion në një tjetër shërbyes Home, me një llogari ekzistuese Matrix.", @@ -1243,9 +1141,6 @@ "Headphones": "Kufje", "Folder": "Dosje", "Chat with %(brand)s Bot": "Fjalosuni me Robotin %(brand)s", - "Recovery Key Mismatch": "Mospërputhje Kyçesh Rimarrjeje", - "Incorrect Recovery Passphrase": "Frazëkalim Rimarrjeje i Pasaktë", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "S’u shfshehtëzua dot kopjeruajtja me këtë frazëkalim: ju lutemi, verifikoni që dhatë frazëkalimin e duhur të rimarrjeve.", "This homeserver would like to make sure you are not a robot.": "Ky Shërbyes Home do të donte të sigurohej se s’jeni robot.", "Change": "Ndërroje", "Couldn't load page": "S’u ngarkua dot faqja", @@ -1278,22 +1173,14 @@ "Securely back up your keys to avoid losing them. Learn more.": "Kopjeruajini kyçet tuaj në mënyrë të sigurt, për të shmangur humbjen e tyre. Mësoni më tepër.", "Not now": "Jo tani", "Don't ask me again": "Mos më pyet sërish", - "Nothing appearing? Not all clients support interactive verification yet. .": "S’duket gjë? Jo të tërë klientët mbulojnë verifikim ndërveprues ende. .", "I don't want my encrypted messages": "Nuk i dua mesazhet e mia të fshehtëzuar", "Manually export keys": "Eksporto dorazi kyçet", "You'll lose access to your encrypted messages": "Do të humbni hyrje te mesazhet tuaj të fshehtëzuar", "Are you sure you want to sign out?": "Jeni i sigurt se doni të dilni?", "Warning: you should only set up key backup from a trusted computer.": "Kujdes: duhet të ujdisni kopjeruajtje kyçesh vetëm nga një kompjuter i besuar.", "Hide": "Fshihe", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Do të depozitojmë në shërbyesin tonë një kopje të fshehtëzuar të kyçeve tuaj. Mbrojeni kopjeruajtjen tuaj me një frazëkalim, për ta mbajtur të parrezikuar.", "For maximum security, this should be different from your account password.": "Për maksimumin e sigurisë, ky do të duhej të ishte i ndryshëm nga fjalëkalimi juaj për llogarinë.", - "Set up with a Recovery Key": "Rregullojeni me një Kyç Rimarrjesh", - "Please enter your passphrase a second time to confirm.": "Ju lutemi, që të ripohohet, rijepeni frazëkalimin tuaj.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Kyçi juaj i rimarrjeve është një masë sigurie - mund ta përdorni për rimarrje hyrjeje te mesazhet tuaj të fshehtëzuar, nëse harroni frazëkalimin tuaj.", "Your keys are being backed up (the first backup could take a few minutes).": "Kyçet tuaj po kopjeruhen (kopjeruajtja e parë mund të hajë disa minuta).", - "Secure your backup with a passphrase": "Sigurojeni kopjeruajtjen tuaj me një frazëkalim", - "Confirm your passphrase": "Ripohoni frazëkalimin tuaj", - "Recovery key": "Kyç rimarrjesh", "Success!": "Sukses!", "Allow Peer-to-Peer for 1:1 calls": "Lejo Peer-to-Peer për thirrje tek për tek", "Credits": "Kredite", @@ -1303,15 +1190,10 @@ "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s çaktivizoi flair-in për %(groups)s në këtë dhomë.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s aktivizoi flair-in për %(newGroups)s dhe çaktivizoi flair-in për %(oldGroups)s në këtë dhomë.", "Show read receipts sent by other users": "Shfaq dëftesa leximi dërguar nga përdorues të tjerë", - "Order rooms in the room list by most important first instead of most recent": "Renditi dhomat te lista e dhomave sipas më të rëndësishmeve së pari, në vend se më të freskëtave", "Scissors": "Gërshërë", "Pin": "Fiksoje", "Error updating main address": "Gabim gjatë përditësimit të adresës kryesore", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Pati një gabim në përditësimin e adresës kryesore të dhomës. Mund të mos lejohet nga shërbyesi ose mund të ketë ndodhur një gabim i përkohshëm.", - "Error creating alias": "Gabim në krijim aliasi", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Pati një gabim gjatë krijimit të atij alias-i. Mund të mos lejohet nga shërbyesi ose mund të ketë ndodhur një dështim i përkohshëm.", - "Error removing alias": "Gabim në heqje aliasi", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Pati një gabim gjatë heqjes së atij aliasi. Mund të mos ekzistojë më, ose mund të ketë ndodhur një gabim i përkohshëm.", "Error updating flair": "Gabim gjatë përditësimit të flair-it", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Pati një gabim me përditësimin e flair-it për këtë dhomë. Shërbyesi mund të mos e lejojë ose mund të ketë ndodhur një gabim i përkohshëm.", "Room Settings - %(roomName)s": "Rregullime Dhome - %(roomName)s", @@ -1348,7 +1230,6 @@ "Want more than a community? Get your own server": "Doni më shumë se një bashkësi? Merrni një shërbyes tuajin", "Power level": "Shkallë pushteti", "Please install Chrome, Firefox, or Safari for the best experience.": "Ju lutemi, për funksionimin më të mirë, instaloni Chrome, Firefox, ose Safari.", - "A conference call could not be started because the integrations server is not available": "S’u nis dot një thirrje konferencë, ngaqë shërbyesi i integrimit s’është i kapshëm", "Replying With Files": "Përgjigje Me Kartela", "The file '%(fileName)s' failed to upload.": "Dështoi ngarkimi i kartelës '%(fileName)s'.", "Name or Matrix ID": "Emër ose ID Matrix-i", @@ -1462,7 +1343,6 @@ "You have %(count)s unread notifications in a prior version of this room.|one": "Keni %(count)s njoftim të palexuar në një version të mëparshëm të kësaj dhome.", "Invalid base_url for m.identity_server": "Parametër base_url i i pavlefshëm për m.identity_server", "Identity server URL does not appear to be a valid identity server": "URL-ja e shërbyesit të identiteteve s’duket të jetë një shërbyes i vlefshëm identitetesh", - "Show recently visited rooms above the room list": "Dhomat e vizituara së fundi shfaqi sipër listës së dhomave", "Uploaded sound": "U ngarkua tingull", "Sounds": "Tinguj", "Notification sound": "Tingull njoftimi", @@ -1627,14 +1507,9 @@ "Read Marker lifetime (ms)": "Kohëzgjatje e Shenjës së Leximit (ms)", "Read Marker off-screen lifetime (ms)": "Kohëzgjatje Shenje Leximi jashtë ekrani (ms)", "Verify the link in your inbox": "Verifikoni lidhjen te mesazhet tuaj", - "Room alias": "Alias dhome", "e.g. my-room": "p.sh., dhoma-ime", - "Please provide a room alias": "Ju lutemi, jepni një alias dhome", - "This alias is available to use": "Ky alias është i lirë të përdoret", - "This alias is already in use": "Ky alias është i përdorur tashmë", "Close dialog": "Mbylle dialogun", "Please enter a name for the room": "Ju lutemi, jepni një emër për dhomën", - "Set a room alias to easily share your room with other people.": "Caktoni një alias dhome për t’ua dhënë lehtësisht dhomën tuaj personave të tjerë.", "This room is private, and can only be joined by invitation.": "Kjo dhomë është private dhe në të mund të hyhet vetëm me ftesë.", "Create a public room": "Krijoni një dhomë publike", "Create a private room": "Krijoni një dhomë private", @@ -1721,7 +1596,6 @@ "Error adding ignored user/server": "Gabim shtimi përdoruesi/shërbyesi të shpërfillur", "Something went wrong. Please try again or view your console for hints.": "Diç shkoi ters. Ju lutemi, riprovoni ose, për ndonjë ide, shihni konsolën tuaj.", "Error subscribing to list": "Gabim pajtimi te lista", - "Please verify the room ID or alias and try again.": "Ju lutemi, verifikoni ID-në ose aliasin e dhomës dhe riprovoni.", "Error removing ignored user/server": "Gabim në heqje përdoruesi/shërbyes të shpërfillur", "Error unsubscribing from list": "Gabim shpajtimi nga lista", "Please try again or view your console for hints.": "Ju lutemi, riprovoni, ose shihni konsolën tuaj, për ndonjë ide.", @@ -1745,7 +1619,6 @@ "Subscribed lists": "Lista me pajtim", "Subscribing to a ban list will cause you to join it!": "Pajtimi te një listë dëbimesh do të shkaktojë pjesëmarrjen tuaj në të!", "If this isn't what you want, please use a different tool to ignore users.": "Nëse kjo s’është ajo çka doni, ju lutemi, përdorni një tjetër mjet për të shpërfillur përdorues.", - "Room ID or alias of ban list": "ID dhome ose alias e listës së dëbimeve", "Subscribe": "Pajtohuni", "You have ignored this user, so their message is hidden. Show anyways.": "E keni shpërfillur këtë përdorues, ndaj mesazhi i tij është fshehur. Shfaqe, sido qoftë.", "Custom (%(level)s)": "Vetjak (%(level)s)", @@ -1788,16 +1661,13 @@ "Remove for everyone": "Hiqe për këdo", "Remove for me": "Hiqe për mua", "Verification Request": "Kërkesë Verifikimi", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Error upgrading room": "Gabim në përditësim dhome", "Double check that your server supports the room version chosen and try again.": "Rikontrolloni që shërbyesi juaj e mbulon versionin e zgjedhur për dhomën dhe riprovoni.", "%(senderName)s placed a voice call.": "%(senderName)s bëri një thirrje zanore.", "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s bëri një thirrje zanore. (e pambuluar nga ky shfletues)", "%(senderName)s placed a video call.": "%(senderName)s bëri një thirrje video.", "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s bëri një thirrje video. (e pambuluar nga ky shfletues)", - "Enable local event indexing and E2EE search (requires restart)": "Aktivizoni indeksim aktesh vendore dhe kërkim E2EE (lyp rinisje)", "Match system theme": "Përputhe me temën e sistemit", - "Send cross-signing keys to homeserver": "Dërgo te shërbyesi Home kyçe cross-signing", "Cross-signing public keys:": "Kyçe publikë për cross-signing:", "not found": "s’u gjet", "in secret storage": "në depozitë të fshehtë", @@ -1818,24 +1688,13 @@ "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Kjo zakonisht prek vetëm mënyrën se si përpunohet dhoma te shërbyesi. Nëse keni probleme me %(brand)s-in, ju lutemi, njoftoni një të metë.", "You'll upgrade this room from to .": "Do ta përmirësoni këtë dhomë nga .", "Upgrade": "Përmirësoje", - "Enter secret storage passphrase": "Jepni frazëkalim për te depozitë e fshehtë", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "S’arrihet të hyhet te depozitë e fshehtë. Ju lutemi, verifikoni se dhatë frazëkalimin e saktë.", - "Warning: You should only access secret storage from a trusted computer.": "Kujdes: Duhet të hyni në depozitën e fshehtë vetëm nga një kompjuter i besuar.", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "Nëse keni harruar frazëkalimin tuaj, mund të përdorni kyçin tuaj të rimarrjes ose të ujdisni mundësi të reja rimarrjeje.", - "Enter secret storage recovery key": "Jepni kyç rimarrjeje për depozitë të fshehtë", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "S’arrihet të hyhet te depozitë e fshehtë. Ju lutemi, verifikoni se dhatë kyç të saktë rimarrjeje.", - "If you've forgotten your recovery key you can .": "Nëse keni harruar kyçin tuaj të rimarrjeve, mund të .", "Warning: You should only set up key backup from a trusted computer.": "Kujdes: duhet të ujdisni kopjeruajtje kyçesh vetëm nga një kompjuter i besuar.", "If you've forgotten your recovery key you can ": "Nëse keni harruar kyçin tuaj të rimarrjeve, mund të ", "Notification settings": "Rregullime njoftimesh", "User Status": "Gjendje Përdoruesi", "Set up with a recovery key": "Rregullojeni me një kyç rimarrjesh", - "As a safety net, you can use it to restore your access to encrypted messages if you forget your passphrase.": "Si masë sigurie, mund ta përdorni për të rifituar hyrjen tuaj te mesazhe të fshehtëzuar, nëse harroni frazëkalimin tuaj.", - "As a safety net, you can use it to restore your access to encrypted messages.": "Si një masë sigurie, mund ta përdorni për të rifituar hyrjen tuaj te mesazhe të fshehtëzuar.", - "Keep your recovery key somewhere very secure, like a password manager (or a safe).": "Mbajeni kyçin tuaj të rimarrjeve diku në një vend shumë të sigurt, bie fjala, nën një përgjegjës fjalëkalimesh (ose në një kasafortë).", "Your recovery key has been copied to your clipboard, paste it to:": "Kyçi juaj i rimarrjeve është kopjuar te e papastra juaj, ngjiteni te:", "Your recovery key is in your Downloads folder.": "Kyçi juaj i rimarrjeve gjendet te dosja juaj Shkarkime.", - "Storing secrets...": "Po depozitohen të fshehta…", "Unable to set up secret storage": "S’u arrit të ujdiset depozitë e fshehtë", "%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s hoqi rregullin për dëbim përdoruesish që kanë përputhje me %(glob)s", "%(senderName)s removed the rule banning rooms matching %(glob)s": "%(senderName)s hoqi rregullin që dëbon dhoma që kanë përputhje me %(glob)s", @@ -1873,11 +1732,6 @@ "Country Dropdown": "Menu Hapmbyll Vendesh", "Show info about bridges in room settings": "Shfaq te rregullime dhome të dhëna rreth urash", "This bridge is managed by .": "Kjo urë administrohet nga .", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s shtoi %(addedAddresses)s dhe dhe %(count)s adresa të tjera te kjo dhomë", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s hoqi %(removedAddresses)s dhe %(count)s adresa të tjera nga kjo dhomë", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s hoqi %(countRemoved)s dhe shtoi %(countAdded)s adresa te kjo dhomë", - "%(senderName)s turned on end-to-end encryption.": "%(senderName)s aktivizoi fshehtëzimin skaj-më-skaj.", - "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s aktivizoi fshehtëzimin skaj-më-skaj (algoritëm jo i pranuar %(algorithm)s).", "a few seconds ago": "pak sekonda më parë", "about a minute ago": "rreth një minutë më parë", "%(num)s minutes ago": "%(num)s minuta më parë", @@ -1892,7 +1746,6 @@ "%(num)s hours from now": "%(num)s orë nga tani", "about a day from now": "rreth një ditë nga tani", "%(num)s days from now": "%(num)s ditë nga tani", - "Show a presence dot next to DMs in the room list": "Shfaqni një pikë pranie në krah DM-sh te lista e dhomave", "Other users may not trust it": "Përdorues të tjerë mund të mos e besojnë", "Later": "Më vonë", "Cross-signing and secret storage are enabled.": "Cross-signing dhe depozitimi i fshehtë janë aktivizuar.", @@ -1921,10 +1774,6 @@ "Failed to find the following users": "S’u arrit të gjendeshin përdoruesit vijues", "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Përdoruesit vijues mund të mos ekzistojnë ose janë të pavlefshëm, dhe s’mund të ftohen: %(csvNames)s", "Suggestions": "Sugjerime", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Nëse s’gjeni dot dikë, kërkojini emrin e tij të përdoruesit, tregojuni emrin tuaj të përdoruesit (%(userId)s) ose lidhjen e profilit.", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Nëse s’gjeni dot dikë, kërkojini emrin e tij të përdoruesit (p.sh., @përdorues:shërbyes.com) ose tregojuni këtë dhomë.", - "Complete security": "Siguri të plotë", - "Verify this session to grant it access to encrypted messages.": "Verifikojeni këtë sesion që t’i akordohet hyrje te mesazhe të fshehtëzuar.", "Start": "Nise", "Session verified": "Sesion i verifikuar", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Sesioni juaj i ri tani është i verifikuar. Ka hyrje te mesazhet tuaj të fshehtëzuar dhe përdoruesit e tjerë do ta shohin si të besuar.", @@ -1933,14 +1782,8 @@ "Restore": "Riktheje", "Enter your account password to confirm the upgrade:": "Që të ripohohet përmirësimi, jepni fjalëkalimin e llogarisë tuaj:", "You'll need to authenticate with the server to confirm the upgrade.": "Do t’ju duhet të bëni mirëfilltësimin me shërbyesin që të ripohohet përmirësimi.", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Sigurojini kyçet tuaj të fshehtëzimit me një frazëkalim. Për siguri maksimale, ky do të duhej të ishte i ndryshëm nga fjalëkalimi për llogarinë tuaj:", - "Enter a passphrase": "Jepni një frazëkalim", - "Enter your passphrase a second time to confirm it.": "Që të ripohohet, jepeni edhe një herë frazëkalimin tuaj.", - "Verify other users in their profile.": "Verifikoni përdorues të tjerë në profilin e tyre.", "Upgrade your encryption": "Përmirësoni fshehtëzimin tuaj", "Set up encryption": "Ujdisni fshehtëzim", - "Encryption upgraded": "U përmirësua fshehtëzimi", - "Encryption setup complete": "Ujdisje fshehtëzimit e plotësuar", "Verify this session": "Verifikoni këtë sesion", "Encryption upgrade available": "Ka të gatshëm përmirësim fshehtëzimi", "Review": "Shqyrtojeni", @@ -1952,37 +1795,25 @@ "Securely cache encrypted messages locally for them to appear in search results.": "Ruaj lokalisht në mënyrë të sigurt në fshehtinë mesazhet që të shfaqen në përfundime kërkimi.", "Enable": "Aktivizoje", "%(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-it i mungojnë disa përbërës të domosdoshëm për ruajtje lokalisht në mënyrë të sigurt në fshehtinë mesazhe. Nëse do të donit të eksperimentonit me këtë veçori, montoni një Desktop vetjak %(brand)s Desktop me shtim përbërësish kërkimi.", - "%(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-i s’mund të ruajë lokalisht në mënyrë të sigurt mesazhe në fshehtinë teksa xhirohet nën shfletues. Që mesazhet e fshehtëzuar të shihen në përfundime kërkimi, përdorni %(brand)s Desktop.", "Message search": "Kërkim mesazhesh", "If disabled, messages from encrypted rooms won't appear in search results.": "Në u çaktivizoftë, mesazhet prej dhomash të fshehtëzuara s’do të duken në përfundime kërkimi.", "Disable": "Çaktivizoje", - "Not currently downloading messages for any room.": "Aktualisht s’po shkarkohen mesazhe për ndonjë dhomë.", - "Downloading mesages for %(currentRoom)s.": "Po shkarkohen mesazhe për %(currentRoom)s.", "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s-i po ruan lokalisht në mënyrë të sigurt në fshehtinë mesazhet që të shfaqen në përfundime kërkimi:", "Space used:": "Hapësirë e përdorur:", "Indexed messages:": "Mesazhe të indeksuar:", - "Number of rooms:": "Numër dhomash:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Në këtë dhomë ka sesione të panjohur: nëse vazhdoni pa i verifikuar ata, për dikë do të jetë e mundur të përgjojë thirrjen tuaj.", "If you cancel now, you won't complete verifying the other user.": "Nëse e anuloni tani, s’do të plotësoni verifikimin e përdoruesit tjetër.", "If you cancel now, you won't complete verifying your other session.": "Nëse e anuloni tani, s’do të plotësoni verifikimin e sesionit tuaj tjetër.", - "If you cancel now, you won't complete your secret storage operation.": "Nëse e anuloni tani, s’do të plotësoni veprimin tuaj për depozitë të fshehtë.", "Cancel entering passphrase?": "Të anulohet dhënue frazëkalimi?", "Setting up keys": "Ujdisje kyçesh", - "Unverified session": "Sesion i paverifikuar", "Verifies a user, session, and pubkey tuple": "Verifikon një përdorues, sesion dhe një set kyçesh publikë", "Unknown (user, session) pair:": "Çift (përdorues, sesion) i panjohur:", "Session already verified!": "Sesion i tashmë i verifikuar!", "WARNING: Session already verified, but keys do NOT MATCH!": "KUJDES: Sesion tashmë i verifikuar, por kyçet NUK PËRPUTHEN!", "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!": "KUJDES: VERIFIKIMI I KYÇIT DËSHTOI! Kyçi i nënshkrimit për %(userId)s dhe sesionin %(deviceId)s është \"%(fprint)s\", që nuk përputhet me kyçin e dhënë \"%(fingerprint)s\". Kjo mund të jetë shenjë se komunikimet tuaja po përgjohen!", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Kyçi i nënshkrimit që dhatë përputhet me kyçin e nënshkrimit që morët nga sesioni i %(userId)s %(deviceId)s. Sesionit iu vu shenjë si i verifikuar.", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Aktivizoni cross-signing për të verifikuar me bazë përdorues në vend se me bazë sesioni (në zhvillim)", - "Show padlocks on invite only rooms": "Për dhoma vetëm me ftesa shfaq dryna", "Never send encrypted messages to unverified sessions from this session": "Mos dërgo kurrë prej këtij sesioni mesazhe të fshehtëzuar te sesione të paverifikuar", "Never send encrypted messages to unverified sessions in this room from this session": "Mos dërgo kurrë prej këtij sesioni mesazhe të fshehtëzuar te sesione të paverifikuar në këtë dhomë", - "Keep secret storage passphrase in memory for this session": "Për këtë sesion, frazëkalimin e depozitës së fshehtë mbaje në kujtesë", "How fast should messages be downloaded.": "Sa shpejt duhen shkarkuar mesazhet.", - "Confirm the emoji below are displayed on both devices, in the same order:": "Ripohoni që emoji-t më poshtë shfaqen në të dyja pajisjet, në të njëjtën radhë:", - "Verify this device by confirming the following number appears on its screen.": "Verifikojeni këtë pajisje duke ripohuar shfaqjen e numrit vijues në skenën e tij.", "Waiting for %(displayName)s to verify…": "Po pritet për %(displayName)s të verifikojë…", "They match": "Përputhen", "They don't match": "S’përputhen", @@ -2012,14 +1843,12 @@ "Backup has an invalid signature from unverified session ": "Kopjeruajtja ka një nënshkrim të pavlefshëm prej sesioni të paverifikuar ", "Backup is not signed by any of your sessions": "Kopjeruajtja s’është nënshkruar nga ndonjë prej sesioneve tuaj", "This backup is trusted because it has been restored on this session": "Kjo kopjeruajtje është e besuar, ngaqë është rikthyer në këtë sesion", - "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Kyçi i kopjeruajtjeve u depozitua në depozitë të fshehtë, po kjo veçori s’është e aktivizuar në këtë sesion. Ju lutemi, aktivizoni në Labs cross-signing që të modifikoni gjendje kopjeruatjeje kyçesh.", "Your keys are not being backed up from this session.": "Kyçet tuaj nuk po kopjeruhen nga ky sesion.", "Enable desktop notifications for this session": "Aktivizo njoftime desktop për këtë sesion", "Enable audible notifications for this session": "Aktivizo njoftime audio për këtë sesion", "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Fjalëkalimi juaj u ndryshua me sukses. Nuk do të merrni njoftime push në sesionet tuaj të tjerë, veç në hyfshi sërish në llogarinë tuaj në to", "Session ID:": "ID sesioni:", "Session key:": "Kyç sesioni:", - "Sessions": "Sesione", "A session's public name is visible to people you communicate with": "Emri publik i një sesioni është i dukshëm për persona me të cilët komunikoni", "This room is bridging messages to the following platforms. Learn more.": "Kjo dhomë po kalon mesazhe përmes ure te platformat vijuese. Mësoni më tepër.", "This room isn’t bridging messages to any platforms. Learn more.": "Kjo dhomë s’kalon mesazhe përmes ure te ndonjë platformë. Mësoni më tepër.", @@ -2028,10 +1857,6 @@ "You have not verified this user.": "S’e keni verifikuar këtë përdorues.", "You have verified this user. This user has verified all of their sessions.": "E keni verifikuar këtë përdorues. Ky përdorues ka verifikuar krejt sesionet e veta.", "Someone is using an unknown session": "Dikush po përdor një sesion të panjohur", - "Some sessions for this user are not trusted": "Disa sesione për këtë përdorues s’janë të besuar", - "All sessions for this user are trusted": "Krejt sesionet për këtë përdorues janë të besuar", - "Some sessions in this encrypted room are not trusted": "Disa sesione në këtë dhomë të fshehtëzuar s’janë të besuar", - "All sessions in this encrypted room are trusted": "Krejt sesionet në këtë dhomë të fshehtëzuar janë të besuar", "Mod": "Moderator", "Your key share request has been sent - please check your other sessions for key share requests.": "Kërkesa juaj për shkëmbim kyçesh u dërgua - ju lutemi, kontrolloni sesionet tuaj të tjerë për kërkesa shkëmbimi kyçesh.", "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.": "Kërkesat për ndarje kyçesh dërgohen automatikisht te sesionet tuaj të tjerë. Nëse s’e pranuat ose e hodhët tej kërkesën për ndarje kyçesh në sesionet tuaj të tjerë, klikoni këtu që të rikërkoni kyçe për këtë sesion.", @@ -2039,7 +1864,6 @@ "Re-request encryption keys from your other sessions.": "Rikërkoni kyçe fshehtëzimi prej sesionesh tuaj të tjerë.", "Encrypted by an unverified session": "Fshehtëzuar nga një sesion i paverifikuar", "Encrypted by a deleted session": "Fshehtëzuar nga një sesion i fshirë", - "No sessions with registered encryption keys": "S’ka sesion me kyçe fshehtëzimi të regjistruar", "Waiting for %(displayName)s to accept…": "Po pritet për %(displayName)s të pranojë…", "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Mesazhet tuaj janë të sigurt dhe vetëm ju dhe marrësi kanë kyçet unikë për t’i shkyçur.", "Your messages are not secure": "Mesazhet tuaj s’janë të sigurt", @@ -2057,9 +1881,6 @@ "If you can't scan the code above, verify by comparing unique emoji.": "Nëse s’e skanoni dot kodin më sipër, verifikojeni duke krahasuar emoji unik.", "You've successfully verified %(displayName)s!": "E verifikuat me sukses %(displayName)s!", "Got it": "E mora vesh", - "Verification timed out. Start verification again from their profile.": "Verifikimit i mbaroi koha. Riniseni verifikimin prej profilit të tij.", - "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s e anuloi verifikimin. Rinisni verifkimin nga profili i tij.", - "You cancelled verification. Start verification again from their profile.": "Anuluat verifikimin. Riniseni verifikimin nga profili i tij.", "Encryption enabled": "Fshehtëzim i aktivizuar", "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Mesazhet në këtë dhomë fshehtëzohen skaj-më-skaj. Mësoni më tepër & verifikoni këtë përdorues në profilin e tij.", "Encryption not enabled": "Fshehtëzim jo i aktivizuar", @@ -2067,61 +1888,39 @@ "Clear all data in this session?": "Të pastrohen krejt të dhënat në këtë sesion?", "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Spastrimi i krejt të dhënave prej këtij sesioni është përfundimtar. Mesazhet e fshehtëzuar do të humbin, veç në qofshin kopjeruajtur kyçet e tyre.", "Verify session": "Verifiko sesion", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Që të verifikohet se ky sesion mund të besohet, ju lutemi, kontrolloni se kyçi që shihni te Rregullime Përdoruesi në atë pajisje të përputhet me kyçin më poshtë:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Që të verifikoni se këtij sesioni mund t’i zihet besë, ju lutemi, lidhuni me të zotët e saj përmes ndonjë rruge tjetër (p.sh., personalisht, ose përmes një thirrjeje telefonike) dhe pyetini nëse përputhet apo jo kyçi që shohin te Rregullime të tyret të Përdoruesit për këtë pajisje me kyçin më poshtë:", "Session name": "Emër sesioni", "Session key": "Kyç sesioni", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Nëse përputhet, shtypni butonin e verifikimit më poshtë. Nëse jo, atëherë dikush tjetër po e përgjon këtë sesion dhe gjasat janë që të doni të shtypni butonin e kalimit në listë bllokimesh.", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Verifikimi i këtij përdoruesi do t’i vërë shenjë sesionit të tij si të besuar dhe sesionit tuaj si të besuar për ta.", "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.": "Që t’i vihet shenjë si e besuar, verifikojeni këtë pajisje. Besimi i kësaj pajisjeje ju jep juve dhe përdoruesve të tjerë ca qetësi më tepër, kur përdoren mesazhe të fshehtëzuar skaj-më-skaj.", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Verifikimi i kësaj pajisjeje do të t’i vërë shenjë si të besuar dhe përdoruesit që janë verifikuar me ju do ta besojnë këtë pajisje.", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "Shtuat një sesion të ri '%(displayName)s', i cili po kërkon kyçe fshehtëzimi.", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "Sesioni juaj i paverifikuar '%(displayName)s' po kërkon kyçe fshehtëzimi.", - "Loading session info...": "Po ngarkohen të dhëna sesioni…", "New session": "Sesion i ri", "Use this session to verify your new one, granting it access to encrypted messages:": "Përdoreni këtë sesion për të verifikuar atë tuajin të ri, duke i akorduar hyrje te mesazhe të fshehtëzuar:", "If you didn’t sign in to this session, your account may be compromised.": "Nëse s’bëtë hyrjen te ky sesion, llogaria muaj mund të jetë komprometuar.", "This wasn't me": "Ky s’jam unë", "This will allow you to return to your account after signing out, and sign in on other sessions.": "Kjo do t’ju lejojë të riktheheni te llogaria juaj pasi të keni bërë daljen, dhe të hyni në sesione të tjerë.", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "Po kaloni në listë të bllokimesh sesione të paverifikuar; që të dërgoni mesazhe te këta sesione, duhet t’i verifikoni.", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Këshillojmë të përshkoni procesin e verifikimit për çdo sesion, për t’u bindur se u takojnë të zotëve të ligjshëm, por, nëse parapëlqeni, mund ta dërgoni mesazhin pa verifikuar gjë.", - "Room contains unknown sessions": "Dhoma përmban sesione të panjohur", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "\"%(RoomName)s\" përmban sesione që s’i keni parë më parë.", - "Unknown sessions": "Sesione të panjohur", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Për verifikim sesionesh të tjerë përmes dhënies së frazëkalimit tuaj, hyni te historiku i mesazheve tuaj të sigurt dhe identiteti juaj për cross-signing.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Për verifikim sesionesh të tjerë përmes dhënies së kyçit tuaj të rimarrjes, hyni te historiku i mesazheve tuaj të sigurt dhe identiteti juaj për cross-signing.", "Recovery key mismatch": "Mospërputhje kyçesh rimarrjeje", "Incorrect recovery passphrase": "Frazëkalim rimarrjeje i pasaktë", - "Backup restored": "Kopjeruajtja u rikthye", "Enter recovery passphrase": "Jepni frazëkalim rimarrjesh", "Enter recovery key": "Jepni kyç rimarrjesh", "Confirm your identity by entering your account password below.": "Ripohoni identitetin tuaj duke dhënë më poshtë fjalëkalimin e llogarisë tuaj.", - "Message not sent due to unknown sessions being present": "Mesazhi s’u dërgua, për shkak të pranisë së sesioneve të panjohur", - "Show sessions, send anyway or cancel.": "Shfaq sesione, dërgoje sido qoftë ose anuloje.", "Your new session is now verified. Other users will see it as trusted.": "Sesioni juaj i ri tani është i verifikuar. Përdoruesit e tjerë do të shohin si të besuar.", "Without completing security on this session, it won’t have access to encrypted messages.": "Pa plotësuar sigurinë në këtë sesion, s’do të ketë hyrje te mesazhe të fshehtëzuar.", "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Ndryshimi i fjalëkalimit tuaj do të sjellë zerim të çfarëdo kyçesh fshehtëzimi skaj-më-skaj në krejt sesionet tuaj, duke e bërë të palexueshëm historikun e bisedave të fshehtëzuara. Ujdisni një Kopjeruajtje Kyçesh ose eksportoni kyçet e dhomës tuaj prej një tjetër sesioni, përpara se të ricaktoni fjalëkalimin tuaj.", "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.": "Jeni nxjerrë jashtë krejt sesioneve dhe nuk do të merrni më njoftime push. Që të riaktivizoni njoftimet, bëni sërish hyrjen në çdo pajisje.", "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.": "Rifitoni hyrjen te llogaria juaj dhe rimerrni kyçe fshehtëzimi të depozituar në këtë sesion. Pa ta, s’do të jeni në gjendje të lexoni krejt mesazhet tuaj të siguruar në çfarëdo sesion.", "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.": "Kujdes: Të dhënat tuaja personale (përfshi kyçe fshehtëzimi) janë ende të depozituara në këtë sesion. Spastrojini, nëse keni përfunduar së përdoruri këtë sesion, ose dëshironi të bëni hyrjen në një tjetër llogari.", - "Sender session information": "Të dhëna sesioni dërguesi", "Restore your key backup to upgrade your encryption": "Që të përmirësoni fshehtëzimin tuaj, riktheni kopjeruajtjen e kyçeve tuaj", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Përmirësojeni këtë sesion për ta lejuar të verifikojë sesione të tjerë, duke u akorduar hyrje te mesazhe të fshehtëzuar dhe duke u vënë shenjë si të besuar për përdorues të tjerë.", - "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Ujdisni fshehtëzim në këtë sesion që ta lejoni të verifikojë sesione të tjerë, duke u akorduar atyre hyrje te mesazhe të fshehtëzuar dhe duke u vënë shenjë si të besuar për përdorues të tjerë.", - "Back up my encryption keys, securing them with the same passphrase": "Kopjeruaj kyçet e mi të fshehtëzimit, duke i siguruar me të njëjtin frazëkalim", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Mbajeni kyçin tuaj të rimarrjeve diku në një vend pak a shumë të sigurt, bie fjala, nën një përgjegjës fjalëkalimesh ose madje në një kasafortë.", "Your recovery key": "Kyçi juaj i rimarrjeve", "Copy": "Kopjoje", - "You can now verify your other devices, and other users to keep your chats safe.": "Tani mund të verifikoni pajisje tuajat të tjera dhe përdorues të tjerë, për t’i mbajtur të sigurta bisedat tuaja.", "Make a copy of your recovery key": "Bëni një kopje të kyçit tuaj të rimarrjeve", - "You're done!": "Mbaruat!", "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.": "Pa ujdisur Rimarrje të Sigurt Mesazhesh, s’do të jeni në gjendje të riktheni historikun e mesazheve tuaj të fshehtëzuar, nëse bëni daljen ose përdorni një sesion tjetër.", "Create key backup": "Krijo kopjeruajtje kyçesh", "This session is encrypting history using the new recovery method.": "Ky sesion e fshehtëzon historikun duke përdorur metodë të re rimarrjesh.", "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Ky sesion ka pikasur se frazëkalimi dhe kyçi juaj i rimarrjeve për Mesazhe të Sigurt janë hequr.", "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.": "Nëse këtë e keni bërë pa dashje, mund të ujdisni Mesazhe të Sigurt në këtë sesion, gjë që do të sjellë rifshehtëzimin e historikut të mesazheve të sesionit me një metodë të re rimarrjesh.", "Indexed rooms:": "Dhoma të indeksuara:", - "%(crawlingRooms)s out of %(totalRooms)s": "%(crawlingRooms)s nga %(totalRooms)s gjithsej", "Message downloading sleep time(ms)": "Kohë fjetjeje shkarkimi mesazhi(ms)", "Show typing notifications": "Shfaq njoftime shtypjeje", "Destroy cross-signing keys?": "Të shkatërrohen kyçet cross-signing?", @@ -2135,18 +1934,13 @@ "Not Trusted": "Jo e Besuar", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) bëri hyrjen në një sesion të ri pa e verifikuar:", "Ask this user to verify their session, or manually verify it below.": "Kërkojini këtij përdoruesi të verifikojë sesionin e vet, ose ta verifikojë më poshtë dorazi.", - "Manually Verify": "Verifikoje Dorazi", "Verify by scanning": "Verifikoje me skanim", - "The version of %(brand)s": "Versioni i %(brand)s-it", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Nëse po e përdorni %(brand)s-in në një pajisje ku touch-i është mekanizmi parësor për input-e", "Whether you're using %(brand)s as an installed Progressive Web App": "Nëse po e përdorni %(brand)s-in të instaluar si një Aplikacion Web Progresiv", "Your user agent": "Agjenti juaj i përdoruesit", - "The information being sent to us to help make %(brand)s better includes:": "Te të dhënat e dërguara te ne për të na ndihmuar ta bëjmë %(brand)s-in më të mirë përfshihen:", "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.": "Sesioni që po provoni të verifikoni, nuk mbulon skanim kodesh QR apo verifikim emoji-sh, çka janë ato që %(brand)s-i mbulon. Provoni me një tjetër klient.", "You declined": "Hodhët poshtë", "%(name)s declined": "%(name)s hodhi poshtë", - "accepting …": "po pranohet …", - "declining …": "po hidhet poshtë …", "Order rooms by name": "Renditini dhomat sipas emrash", "Show rooms with unread notifications first": "Shfaq së pari dhoma me njoftime të palexuara", "Show shortcuts to recently viewed rooms above the room list": "Shfaq te lista e dhomave shkurtore për te dhoma të para së fundi", @@ -2170,7 +1964,6 @@ "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Që të njoftoni një problem sigurie lidhur me Matrix-in, ju lutemi, lexoni Rregulla Tregimi Çështjes Sigurie te Matrix.org.", "Mark all as read": "Vëru të tërave shenjë si të lexuara", "Not currently indexing messages for any room.": "Pa indeksuar aktualisht mesazhe nga ndonjë dhomë.", - "Currently indexing: %(currentRoom)s.": "Aktualisht nën indeksim: %(currentRoom)s.", "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s nga %(totalRooms)s", "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s shtoi adresat alternative %(addresses)s për këtë dhomë.", "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s shtoi adresën alternative %(addresses)s për këtë dhomë.", @@ -2187,12 +1980,6 @@ "Custom theme URL": "URL teme vetjake", "Add theme": "Shtoni temë", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Pati një gabim gjatë përditësimit të adresave alternative të dhomës. Mund të mos lejohet nga shërbyesi pse ndodhi një gabim i përkohshëm.", - "You don't have permission to delete the alias.": "S’keni leje të fshini aliasin.", - "Alternative addresses for this room:": "Adresa alternative për këtë dhomë:", - "This room has no alternative addresses": "Kjo dhomë nuk ka adresa alternative", - "New address (e.g. #foo:domain)": "Adresë e re (p.sh., #foo:domain)", - "Local addresses (unmoderated content)": "Adresa vendore (lëndë e pamoderuar)", - "Review Sessions": "Shqyrtoni Sesione", "Local address": "Adresë vendore", "Published Addresses": "Adresa të Publikuara", "Scroll to most recent messages": "Rrëshqit te mesazhet më të freskët", @@ -2215,9 +2002,6 @@ "Add a new server...": "Shtoni një shërbyes të ri…", "%(networkName)s rooms": "Dhoma %(networkName)s", "Matrix rooms": "Dhoma Matrix", - "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "Hapni një sesion ekzistues & përdoreni për të verifikuar këtë këtu, duke i akorduar hyrje te mesazhe të fshehtëzuar.", - "Waiting…": "Po pritet…", - "If you can’t access one, ": "Nëse s’hapni dot një, ", "Reset cross-signing and secret storage": "Rikthe te parazgjedhjet cross-signing dhe depozitën e fshehtë", "Keyboard Shortcuts": "Shkurtore Tastiere", "Matrix": "Matrix", @@ -2228,7 +2012,6 @@ "%(brand)s encountered an error during upload of:": "%(brand)s-i hasi një gabim gjatë ngarkimit të:", "Upload completed": "Ngarkimi u plotësua", "Cancelled signature upload": "Ngarkim i anuluar nënshkrimi", - "Unabled to upload": "S’u arrit të ngarkohej", "Signature upload success": "Sukses ngarkimi nënshkrimi", "Signature upload failed": "Ngarkimi i nënshkrimit dështoi", "Navigation": "Lëvizje", @@ -2242,7 +2025,6 @@ "Toggle Bold": "Aktivizo/çaktivizo Të trasha", "Toggle Italics": "Aktivizo/çaktivizo Të pjerrëta", "Toggle Quote": "Aktivizo/çaktivizo Thonjëza", - "Toggle Markdown": "Aktivizo/çaktivizo Markdown", "New line": "Rresht i ri", "Navigate recent messages to edit": "Shihni mesazhe së fundi për përpunim", "Jump to start/end of the composer": "Hidhu te fillimi/fundi i hartuesit", @@ -2268,9 +2050,6 @@ "End": "End", "Manually Verify by Text": "Verifikojeni Dorazi përmes Teksti", "Interactively verify by Emoji": "Verifikojeni në mënyrë ndërvepruese përmes Emoji-sh", - "Secret Storage key format:": "Format kyçesh Depozite të Fshehtë:", - "outdated": "e vjetruar", - "up to date": "e përditësuar", "Start a conversation with someone using their name, username (like ) or email address.": "Nisni një bisedë me dikë duke përdorur emrin e tij, emrin e përdoruesit për të (bie fjala, ) ose adresë email.", "Confirm by comparing the following with the User Settings in your other session:": "Ripohojeni duke krahasuar sa vijon me Rregullimet e Përdoruesit te sesioni juaj tjetër:", "Confirm this user's session by comparing the following with their User Settings:": "Ripohojeni këtë sesion përdoruesi duke krahasuar sa vijon me Rregullimet e tij të Përdoruesit:", @@ -2281,9 +2060,7 @@ "Previous/next unread room or DM": "Dhoma ose MD i palexuar i mëparshëm/pasues", "Previous/next room or DM": "Dhoma ose MD i mëparshëm/pasues", "Toggle right panel": "Hap/mbyll panelin djathtas", - "Unverified login. Was this you?": "Hyrje e paverifikuar. A qetë ju?", "Manually verify all remote sessions": "Verifikoni dorazi krejt sesionet e largët", - "Update your secure storage": "Përditësoni depozitën tuaj të sigurt", "Self signing private key:": "Kyç privat vetënënshkrimi:", "cached locally": "ruajtur në fshehtinë lokalisht", "not found locally": "i pagjetur lokalisht", @@ -2352,30 +2129,19 @@ "Server did not return valid authentication information.": "Shërbyesi s’ktheu ndonjë të dhënë të vlefshme mirëfilltësimi.", "There was a problem communicating with the server. Please try again.": "Pati një problem në komunikimin me shërbyesin. Ju lutemi, riprovoni.", "If you cancel now, you won't complete your operation.": "Nëse e anuloni tani, s’do ta plotësoni veprimin tuaj.", - "Keep recovery passphrase in memory for this session": "Për këtë sesion, mbaje në kujtesë frazëkalimin e rimarrjeve", "Verify other session": "Verifikoni tjetër sesion", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "S’arrihet të hyhet në depozitë të fshehtë. Ju lutemi, verifikoni se dhatë frazëkalimin e duhur për rimarrje.", - "Warning: You should only do this on a trusted computer.": "Kujdes: Këtë duhet ta bëni vetëm në një kompjuter të besuar.", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Hyni te historiku i mesazheve tuaj të sigurt dhe identiteti juaj për cross-signing për verifikim sesionesh të tjerë, duke dhënë frazëkalimin tuaj për rimarrje.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Nëse e keni harruar frazëkalimin tuaj të rimarrjeve, mund të përdorni kyçin tuaj të rimarrjeve ose të ujdisni mundësi të reja rimarrjesh.", "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "Kopjeruajtja s’u shfshehtëzua dot me këtë kyç rimarrjesh: ju lutemi, verifikoni se keni dhënë kyçin e saktë të rimarrjeve.", "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Kopjeruajtja s’u shfshehtëzua dot me këtë frazëkalim rimarrjesh: ju lutemi, verifikoni se keni dhënë frazëkalimin e saktë të rimarrjeve.", "Syncing...": "Po njëkohësohet…", "Signing In...": "Po hyhet…", "If you've joined lots of rooms, this might take a while": "Nëse jeni pjesë e shumë dhomave, kjo mund të zgjasë ca", - "Use an existing session to verify this one, granting it access to encrypted messages.": "Që të verifikoni këtë, përdorni një sesion ekzistues, duke i akorduar hyrje te mesazhe të fshehtëzuar.", - "If you can’t access one, ": "Nëse s’hyni dot në një, ", - "Use your other device to continue…": "Që të vazhdohet, përdorni pajisjen tuaj tjetër…", "Great! This recovery passphrase looks strong enough.": "Bukur! Ky frazëkalim rimarrjesh duket mjaftueshëm i fuqishëm.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Caktoni një frazëkalim rimarrjesh që të siguroni informacione të fshehtëzuar dhe për ta rimarrë, nëse dilni nga llogaria. Ky duhet të jetë i ndryshëm nga fjalëkalimi juaj për llogarinë:", "Enter a recovery passphrase": "Jepni një frazëkalim rimarrjesh", - "Back up encrypted message keys": "Kopjeruani kyçe mesazhesh të fshehtëzuar", "Enter your recovery passphrase a second time to confirm it.": "Për ta ripohuar, jepeni edhe një herë frazëkalimin tuaj të rimarrjeve.", "Confirm your recovery passphrase": "Ripohoni frazëkalimin tuaj të rimarrjeve", "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Kyçi juaj i rimarrjeve është një rrjet sigurie - mund ta përdorni të të rifituar hyrje te mesazhet tuaj të fshehtëzuar, nëse harroni frazëkalimin tuaj të rimarrjeve.", - "Confirm recovery passphrase": "Ripohoni frazëkalim rimarrjesh", "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Do të ruajmë një kopje të fshehtëzuar të kyçeve tuaj në shërbyesin tonë. Siguroni kopjeruajtjen tuaj me një frazëkalim rimarrjesh.", - "Enter a recovery passphrase...": "Jepni një frazëkalim rimarrjesh…", "Please enter your recovery passphrase a second time to confirm.": "Ju lutemi, jepeni frazëkalimin tuaj të rimarrjeve edhe një herë, për ta ripohuar.", "Repeat your recovery passphrase...": "Përsëritni frazëkalimin tuaj të rimarrjeve…", "Secure your backup with a recovery passphrase": "Sigurojeni kopjeruajtjen tuaj me një frazëkalim rimarrjesh", @@ -2385,7 +2151,6 @@ "Send a bug report with logs": "Dërgoni një njoftim të metash me regjistra", "You signed in to a new session without verifying it:": "Bëtë hyrjen në një sesion të ri pa e verifikuar:", "Verify your other session using one of the options below.": "Verifikoni sesionit tuaj tjetër duke përdorur një nga mundësitë më poshtë.", - "Enable cross-signing to verify per-user instead of per-session": "Aktivizoni cross-signing për të verifikuar me bazë përdorues në vend se me bazë sesioni", "Lock": "Kyçje", "Verify all your sessions to ensure your account & messages are safe": "Verifikoni krejt sesionet tuaj që të siguroheni se llogaria & mesazhet tuaja janë të sigurt", "Verify the new login accessing your account: %(name)s": "Verifikoni kredencialet e reja për hyrje te llogaria juaj: %(name)s", @@ -2406,7 +2171,6 @@ "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Ripohoni identitetin tuaj duke verifikuar këto kredenciale hyrjesh prej një nga sesionet tuaj të tjerë, duke i akorduar hyrje te mesazhet e fshehtëzuar.", "This requires the latest %(brand)s on your other devices:": "Kjo lyp %(brand)s-in më të ri te pajisjet tuaja të tjera:", "or another cross-signing capable Matrix client": "ose një tjetër klient Matrix i aftë për cross-signingRecovery Passphrase to continue.": "Që të vazhdohet, jepni Kyçin tuaj të Rimarrjeve ose jepni një Frazëkalim Rimarrjesh.", - "Enter your Recovery Key to continue.": "Që të vazhdohet, jepni Kyçin tuaj të Rimarrjeve.", - "Upgrade your Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you'll need it to unlock your data.": "Që të depozitoni kyçe & të fshehta fshehtëzimi me të dhënat e llogarisë tuaj, përmirësoni Kyçin tuaj të Rimarrjeve. Nëse humbni këto kredenciale hyrjesh, do t’ju duhet të shkyçni të dhënat tuaja.", - "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.": "Ruajeni diku të parrezik Kyçin tuaj të Rimarrjeve, mund të përdoret për të shkyçur mesazhet & të dhënat tuaja të fshehtëzuara.", - "Create a Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you’ll need it to unlock your data.": "Krijoni një Kyç Rimarrjesh që të depozitoni kyçe & të fshehta fshehtëzimi me të dhënat e llogarisë tuaj. Nëse humbni këto kredenciale, do t’ju duhet të shkyçni të dhënat tuaja.", - "Create a Recovery Key": "Krijoni një Kyç Rimarrjesh", - "Upgrade your Recovery Key": "Përmirësoni Kyçin tuaj të Rimarrjeve", - "Store your Recovery Key": "Depozitoni Kyçin tuaj të Rimarrjeve", "Use the improved room list (will refresh to apply changes)": "Përdor listën e përmirësuar të dhomave (do të rifreskohet, që të aplikohen ndryshimet)", - "Enable IRC layout option in the appearance tab": "Aktivizoni te skeda e dukjes mundësinë për skemë IRC", "Use custom size": "Përdor madhësi vetjake", "Hey you. You're the best!": "Hej, ju. S’u ka kush shokun!", "Message layout": "Skemë mesazhesh", diff --git a/src/i18n/strings/sr.json b/src/i18n/strings/sr.json index 8c38fc4ef8..d1a15e0686 100644 --- a/src/i18n/strings/sr.json +++ b/src/i18n/strings/sr.json @@ -42,7 +42,6 @@ "Which rooms would you like to add to this community?": "Које собе желите додати у ову заједницу?", "Show these rooms to non-members on the community page and room list?": "Приказати ове собе нечлановима на страници заједнице и у списку соба?", "Add rooms to the community": "Додај собе у заједницу", - "Room name or alias": "Назив собе или алијас", "Add to community": "Додај у заједницу", "Failed to invite the following users to %(groupId)s:": "Нисам успео да позовем следеће кориснике у %(groupId)s:", "Failed to invite users to community": "Нисам успео да позовем кориснике у заједницу", @@ -57,7 +56,6 @@ "Restricted": "Ограничено", "Moderator": "Модератор", "Admin": "Админ", - "Start a chat": "Крени са ћаскањем", "Operation failed": "Радња није успела", "Failed to invite": "Нисам успео да пошаљем позивницу", "Failed to invite the following users to the %(roomName)s room:": "Нисам успео да пошаљем позивницу корисницима за собу %(roomName)s:", @@ -73,17 +71,11 @@ "Room %(roomId)s not visible": "Соба %(roomId)s није видљива", "Missing user_id in request": "Недостаје user_id у захтеву", "Call Failed": "Позивање неуспешно", - "Review Devices": "Испрегледај уређаје", - "Call Anyway": "Ипак позови", - "Answer Anyway": "Ипак одговори", - "Call": "Позови", - "Answer": "Одговори", "Call Timeout": "Прекорачено време позивања", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s", "Usage": "Коришћење", "/ddg is not a command": "/ddg није наредба", "To use it, just wait for autocomplete results to load and tab through them.": "Да бисте је користили, само сачекајте да се исходи самодовршавања учитају и табом прођите кроз њих.", - "Unrecognised room alias:": "Непознати алијас собе:", "Ignored user": "Занемарени корисник", "You are now ignoring %(userId)s": "Сада занемарујете корисника %(userId)s", "Unignored user": "Незанемарени корисник", @@ -133,7 +125,6 @@ "%(widgetName)s widget removed by %(senderName)s": "Корисник %(senderName)s је уклонио виџет %(widgetName)s", "Failure to create room": "Неуспех при прављењу собе", "Server may be unavailable, overloaded, or you hit a bug.": "Сервер је можда недоступан, преоптерећен или сте нашли грешку.", - "Send anyway": "Ипак пошаљи", "Send": "Пошаљи", "Unnamed Room": "Неименована соба", "Your browser does not support the required cryptography extensions": "Ваш прегледач не подржава потребна криптографска проширења", @@ -141,7 +132,6 @@ "Authentication check failed: incorrect password?": "Провера идентитета није успела: нетачна лозинка?", "Failed to join room": "Нисам успео да уђем у собу", "Message Pinning": "Закачене поруке", - "Use compact timeline layout": "Користи збијени распоред временске линије", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Прикажи временске жигове у 12-сатном облику (нпр.: 2:30 ПоП)", "Always show message timestamps": "Увек прикажи временске жигове", "Autoplay GIFs and videos": "Самостално пуштај GIF-ове и видео записе", @@ -178,11 +168,8 @@ "Confirm password": "Потврди лозинку", "Change Password": "Промени лозинку", "Authentication": "Идентификација", - "Device ID": "ИБ уређаја", "Last seen": "Последњи пут виђен", "Failed to set display name": "Нисам успео да поставим приказно име", - "Disable Notifications": "Онемогући обавештења", - "Enable Notifications": "Омогући обавештења", "Cannot add any more widgets": "Не могу да додам још виџета", "The maximum permitted number of widgets have already been added to this room.": "Највећи број дозвољених додатих виџета је прекорачен у овој соби.", "Add a widget": "Додај виџет", @@ -196,8 +183,6 @@ "%(senderName)s uploaded a file": "Корисник %(senderName)s је отпремио датотеку", "Options": "Опције", "Please select the destination room for this message": "Изаберите одредишну собу за ову поруку", - "Blacklisted": "На црном списку", - "device id: ": "иб уређаја: ", "Disinvite": "Откажи позивницу", "Kick": "Избаци", "Disinvite this user?": "Отказати позивницу за овог корисника?", @@ -209,7 +194,6 @@ "Ban this user?": "Забранити приступ овом кориснику?", "Failed to ban user": "Неуспех при забрањивању приступа кориснику", "Failed to mute user": "Неуспех при пригушивању корисника", - "Failed to toggle moderator status": "Неуспех при промени стања модератора", "Failed to change power level": "Неуспех при промени нивоа моћи", "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.": "Нећете моћи да опозовете ове промене зато што снижавате себе, ако сте последњи овлашћени корисник у соби, немогуће је да поново добијете овлашћења.", "Are you sure?": "Да ли сте сигурни?", @@ -219,12 +203,8 @@ "Jump to read receipt": "Скочи на потврду о прочитаности", "Mention": "Спомени", "Invite": "Позови", - "User Options": "Корисничке опције", - "Direct chats": "Директна ћаскања", "Unmute": "Појачај", "Mute": "Утишај", - "Revoke Moderator": "Опозови модератора", - "Make Moderator": "Учини модератором", "Admin Tools": "Админ алатке", "and %(count)s others...|other": "и %(count)s других...", "and %(count)s others...|one": "и још један други...", @@ -237,9 +217,7 @@ "Video call": "Видео позив", "Upload file": "Отпреми датотеку", "Send an encrypted reply…": "Пошаљи шифровани одговор…", - "Send a reply (unencrypted)…": "Пошаљи одговор (нешифровани)…", "Send an encrypted message…": "Пошаљи шифровану поруку…", - "Send a message (unencrypted)…": "Пошаљи поруку (нешифровану)…", "You do not have permission to post to this room": "Немате овлашћење за писање у овој соби", "Server error": "Грешка на серверу", "Server unavailable, overloaded, or something else went wrong.": "Сервер није доступан или је преоптерећен или је нешто пошло наопако.", @@ -313,10 +291,7 @@ "Jump to first unread message.": "Скочи на прву непрочитану поруку.", "Close": "Затвори", "not specified": "није наведено", - "Remote addresses for this room:": "Удаљене адресе за ову собу:", - "Local addresses for this room:": "Локална адреса ове собе:", "This room has no local addresses": "Ова соба нема локалних адреса", - "New address (e.g. #foo:%(localDomain)s)": "Нова адреса (нпр.: #soba:%(localDomain)s)", "Invalid community ID": "Неисправан ИБ заједнице", "'%(groupId)s' is not a valid community ID": "„%(groupId)s“ није исправан ИБ заједнице", "Flair": "Беџ", @@ -342,12 +317,8 @@ "Failed to copy": "Нисам успео да ископирам", "Add an Integration": "Додај уградњу", "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. Да ли желите да наставите?", - "Removed or unknown message type": "Уклоњена порука или порука непознатог типа", - "Message removed by %(userId)s": "Поруку је уклонио корисник %(userId)s", - "Message removed": "Порука је уклоњена", "Custom Server Options": "Прилагођене опције сервера", "Dismiss": "Одбаци", - "To continue, please enter your password.": "Да бисте наставили, унесите вашу лозинку.", "An email has been sent to %(emailAddress)s": "Мејл је послат на адресу %(emailAddress)s", "Please check your email to continue registration.": "Проверите ваше сандуче да бисте наставили регистровање.", "Token incorrect": "Жетон је нетачан", @@ -388,14 +359,9 @@ "Minimize apps": "Умањи апликације", "Edit": "Уреди", "Create new room": "Направи нову собу", - "Unblacklist": "Скини са црног списка", - "Blacklist": "Стави на црни списак", - "Unverify": "Означи непровереним", - "Verify...": "Провери...", "No results": "Нема резултата", "Communities": "Заједнице", "Home": "Почетна", - "Could not connect to the integration server": "Не могу да се повежем на сервер за уградње", "Manage Integrations": "Управљај уградњама", "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s су ушли %(count)s пута", @@ -478,13 +444,8 @@ "Unknown error": "Непозната грешка", "Incorrect password": "Нетачна лозинка", "Deactivate Account": "Угаси налог", - "I verify that the keys match": "Потврђујем да се кључеви подударају", "An error has occurred.": "Догодила се грешка.", "OK": "У реду", - "Start verification": "Започни проверу", - "Share without verifying": "Подели без провере", - "Ignore request": "Занемари захтев", - "Encryption key request": "Захтев за кључ шифровања", "Unable to restore session": "Не могу да повратим сесију", "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.": "Ако сте претходно користили новије издање %(brand)s-а, ваша сесија може бити некомпатибилна са овим издањем. Затворите овај прозор и вратите се на новије издање.", "Invalid Email Address": "Неисправна мејл адреса", @@ -505,7 +466,6 @@ "Private Chat": "Приватно ћаскање", "Public Chat": "Јавно ћаскање", "Custom": "Прилагођено", - "Alias (optional)": "Алијас (изборно)", "Name": "Име", "You must register to use this functionality": "Морате се регистровати да бисте користили ову могућност", "You must join the room to see its files": "Морате приступити соби да бисте видели њене датотеке", @@ -558,7 +518,6 @@ "Which officially provided instance you are using, if any": "Коју званичну инстанцу користите, ако користите", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Да ли користите режим богатог текста у уређивачу богатог текста", "Your homeserver's URL": "Адреса вашег кућног сервера", - "Your identity server's URL": "Адреса вашег идентитеског сервера", "Analytics": "Аналитика", "The information being sent to us to help make %(brand)s better includes:": "У податке које нам шаљете зарад побољшавања %(brand)s-а спадају:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Ако страница садржи поверљиве податке (као што је назив собе, корисника или ИБ-ја групе), ти подаци се уклањају пре слања на сервер.", @@ -575,7 +534,6 @@ "Create a new community": "Направи нову заједницу", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Направите заједницу да бисте спојили кориснике и собе! Направите прилагођену почетну страницу да бисте означили ваш кутак у Матрикс универзуму.", "You have no visible notifications": "Немате видљивих обавештења", - "Scroll to bottom of page": "Превуци на дно странице", "%(count)s of your messages have not been sent.|other": "Неке ваше поруке нису послате.", "%(count)s of your messages have not been sent.|one": "Ваша порука није послата.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Пошаљи поново или откажи све сада. Такође можете изабрати појединачне поруке за поновно слање или отказивање.", @@ -590,7 +548,6 @@ "Search failed": "Претрага је неуспешна", "Server may be unavailable, overloaded, or search timed out :(": "Сервер је можда недоступан, преоптерећен или је истекло време претраживања :(", "No more results": "Нема више резултата", - "Unknown room %(roomId)s": "Непозната соба %(roomId)s", "Room": "Соба", "Failed to reject invite": "Нисам успео да одбацим позивницу", "Fill screen": "Испуни екран", @@ -604,8 +561,6 @@ "Uploading %(filename)s and %(count)s others|other": "Отпремам датотеку %(filename)s и још %(count)s других", "Uploading %(filename)s and %(count)s others|zero": "Отпремам датотеку %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Отпремам датотеку %(filename)s и %(count)s других датотека", - "Light theme": "Светла тема", - "Dark theme": "Тамна тема", "Sign out": "Одјави ме", "Failed to change password. Is your password correct?": "Нисам успео да променим лозинку. Да ли је ваша лозинка тачна?", "Success": "Успех", @@ -661,7 +616,6 @@ "Define the power level of a user": "Дефинише ниво моћи корисника", "Deops user with given id": "Укида админа за корисника са датим иб-јем", "Invites user with given id to current room": "Позива корисника са датим иб-јем у тренутну собу", - "Joins room with given alias": "Приступа соби са датим алијасем", "Kicks user with given id": "Избацује корисника са датим иб-јем", "Changes your display nickname": "Мења ваш приказни надимак", "Searches DuckDuckGo for results": "Претражује DuckDuckGo за резултате", @@ -673,21 +627,7 @@ "Notify the whole room": "Обавести све у соби", "Room Notification": "Собно обавештење", "Users": "Корисници", - "unknown device": "непознати уређај", - "NOT verified": "НИЈЕ проверен", - "verified": "проверен", - "Verification": "Провера", - "Ed25519 fingerprint": "Ed25519 отисак прста", - "User ID": "Кориснички ИБ", - "Curve25519 identity key": "Curve25519 идентитески кључ", - "none": "ништа", - "Claimed Ed25519 fingerprint key": "Наводни Ed25519 кључ отиска прста", - "Algorithm": "Алгоритам", - "unencrypted": "нешифрован", - "Decryption error": "Грешка дешифровања", "Session ID": "ИБ сесије", - "End-to-end encryption information": "Подаци о шифровању с краја на крај", - "Event information": "Подаци о догађају", "Passphrases must match": "Фразе се морају подударати", "Passphrase must not be empty": "Фразе не смеју бити празне", "Export room keys": "Извези кључеве собе", @@ -706,7 +646,6 @@ "Key request sent.": "Захтев за дељење кључа послат.", "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.": "Да бисте поставили филтер, повуците аватар заједнице на површ филтрирања скроз на леву страну екрана. Можете кликнути на аватар у површи филтрирања било када да бисте видели само собе и особе везане за ту заједницу.", "Fetching third party location failed": "Добављање локације треће стране није успело", - "A new version of %(brand)s is available.": "Ново издање RIot-а је доступно.", "Send Account Data": "Пошаљи податке налога", "All notifications are currently disabled for all targets.": "Сва обавештења су тренутно онемогућена за све циљеве.", "Uploading report": "Отпремам извештај", @@ -725,8 +664,6 @@ "Send Custom Event": "Пошаљи прилагођени догађај", "Off": "Искључено", "Advanced notification settings": "Напредна подешавања обавештења", - "delete the alias.": "обриши алијас.", - "To return to your account in future you need to set a password": "Да бисте се вратили на ваш налог у будућности, морате поставити лозинку", "Forget": "Заборави", "You cannot delete this image. (%(code)s)": "Не можете обрисати ову слику. (%(code)s)", "Cancel Sending": "Откажи слање", @@ -749,7 +686,6 @@ "No update available.": "Нема нових ажурирања.", "Noisy": "Бучно", "Collecting app version information": "Прикупљам податке о издању апликације", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Обрисати алијас собе %(alias)s и уклонити %(name)s из фасцикле?", "Keywords": "Кључне речи", "Enable notifications for this account": "Омогући обавештења за овај налог", "Invite to this community": "Позови у ову заједницу", @@ -802,7 +738,6 @@ "Show message in desktop notification": "Прикажи поруку у стоном обавештењу", "Unhide Preview": "Откриј преглед", "Unable to join network": "Не могу да приступим мрежи", - "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-у али се и даље примењују", "Sorry, your browser is not able to run %(brand)s.": "Нажалост, ваш прегледач не може да покреће %(brand)s.", "Messages in group chats": "Поруке у групним ћаскањима", "Yesterday": "Јуче", @@ -827,8 +762,6 @@ "Thank you!": "Хвала вам!", "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!": "Са вашим тренутним прегледачем изглед и угођај ове апликације може бити скроз неправилан и неке могућности можда неће радити. Уколико желите да ипак пробате, можете наставити али ћете бити без подршке за било које проблеме на које налетите!", "Checking for an update...": "Проверавам ажурирања...", - "There are advanced notifications which are not shown here": "Постоје напредна обавештења која нису приказана овде", - "Your User Agent": "Ваш кориснички агент", "Every page you use in the app": "Свака страница коју будете користили у апликацији", "e.g. ": "Нпр.: ", "Your device resolution": "Резолуција вашег уређаја", @@ -864,9 +797,6 @@ "Send analytics data": "Пошаљи аналитичке податке", "Enable widget screenshots on supported widgets": "Омогући снимке екрана виџета у подржаним виџетима", "Muted Users": "Утишани корисници", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Помозите побољшавање %(brand)s програма тако што ћете послати анонимне податке о коришћењу. Ово ће захтевати коришћење колачића (погледајте нашу политику о колачићима).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Помозите побољшавање %(brand)s програма тако што ћете послати анонимне податке о коришћењу. Ово ће захтевати коришћење колачића.", - "Yes, I want to help!": "Да, желим помоћи!", "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Не могу да учитам догађај на који је послат одговор, или не постоји или немате овлашћење да га погледате.", "To continue, please enter your password:": "Да бисте наставили, унесите вашу лозинку:", "Collapse Reply Thread": "Скупи нит са одговорима", @@ -902,8 +832,6 @@ "Whether or not you're logged in (we don't record your username)": "Да ли сте пријављени (не бележимо ваше корисничко име)", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Датотека „%(fileName)s“ премашује ограничење величине отпремања на овом кућном серверу", "Unable to load! Check your network connectivity and try again.": "Нисам могао да учитам! Проверите вашу мрежну везу и пробајте поново.", - "Registration Required": "Потребна је регистрација", - "You need to register to do this. Would you like to register now?": "Морате се регистровати да бисте урадили ово. Да ли желите да се региструјете сада?", "Failed to invite users to the room:": "Нисам успео да позовем кориснике у собу:", "Upgrades a room to a new version": "Надограђује собу на ново издање", "Gets or sets the room topic": "Добавља или поставља тему собе", @@ -923,12 +851,9 @@ "Sign in instead": "Пријава са постојећим налогом", "Create your account": "Направите ваш налог", "Create account": "Направи налог", - "Waiting for %(userId)s to confirm...": "Чекам да корисник %(userId)s потврди...", "Waiting for partner to confirm...": "Чекам да партнер потврди...", "Confirm": "Потврди", "A verification email will be sent to your inbox to confirm setting your new password.": "Мејл потврде ће бити послат у ваше сандуче да бисмо потврдили постављање ваше нове лозинке.", - "Please enter your passphrase a second time to confirm.": "Унесите вашу фразу други пут да бисте је потврдили.", - "Confirm your passphrase": "Потврдите вашу фразу", "Email (optional)": "Мејл (изборно)", "Your Modular server": "Ваш Модулар сервер", "Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of modular.im.": "Унесите адресу вашег Модулар кућног сервера. Можете користити ваш домен или унети поддомен на домену modular.im.", @@ -942,6 +867,5 @@ "Call failed due to misconfigured server": "Позив није успео због погрешно подешеног сервера", "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Замолите администратора вашег сервера (%(homeserverDomain)s) да подеси TURN сервер како би позиви радили поуздано.", "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.": "Или, можете покушати да користите јавни сервер на turn.matrix.org, али ово неће бити толико поуздано, и поделиће вашу IP адресу са тим сервером. Ово такође можете мењати у Подешавањима.", - "Try using turn.matrix.org": "Покушајте да користите turn.matrix.org", - "A conference call could not be started because the integrations server is not available": "Конференцијски позив није могао бити започет јер интеграциони сервер није расположив" + "Try using turn.matrix.org": "Покушајте да користите turn.matrix.org" } diff --git a/src/i18n/strings/sr_Latn.json b/src/i18n/strings/sr_Latn.json index 5e9b826039..19778858d0 100644 --- a/src/i18n/strings/sr_Latn.json +++ b/src/i18n/strings/sr_Latn.json @@ -11,7 +11,6 @@ "Which officially provided instance you are using, if any": "Koju zvaničnu instancu koristite, ako koristite", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Da li koristite režim bogatog teksta u uređivaču bogatog teksta", "Your homeserver's URL": "URL vašeg kućnog servera", - "Your identity server's URL": "URL vašeg servera identiteta", "e.g. %(exampleValue)s": "npr. %(exampleValue)s", "Dismiss": "Odbaci", "Your %(brand)s is misconfigured": "Vaš %(brand)s nije dobro podešen", @@ -20,7 +19,6 @@ "powered by Matrix": "pokreće Matriks", "Custom Server Options": "Prilagođene opcije servera", "Explore rooms": "Istražite sobe", - "Send anyway": "Ipak pošalji", "Send": "Pošalji", "Sun": "Ned", "Mon": "Pon", @@ -50,14 +48,11 @@ "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s nema dozvolu da vam šalje obaveštenja. Molim proverite podešavanja vašeg internet pregledača", "%(brand)s was not given permission to send notifications - please try again": "%(brand)s nije dobio dozvolu da šalje obaveštenja. Molim pokušajte ponovo", "This email address was not found": "Ova adresa elektronske pošte nije pronađena", - "Registration Required": "Potrebna je registracija", - "You need to register to do this. Would you like to register now?": "Morate biti registrovani da bi uradili ovo. Da li želite da se registrujete sad?", "Register": "Registruj se", "Default": "Podrazumevano", "Restricted": "Ograničeno", "Moderator": "Moderator", "Admin": "Administrator", - "Start a chat": "Pokreni ćaskanje", "Operation failed": "Operacija nije uspela", "Failed to invite": "Slanje pozivnice nije uspelo", "Failed to invite users to the room:": "Nije uspelo pozivanje korisnika u sobu:", diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index 32bf56d6d4..83fd3fc5da 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -12,7 +12,6 @@ "Microphone": "Mikrofon", "Camera": "Kamera", "Advanced": "Avancerat", - "Algorithm": "Algoritm", "Always show message timestamps": "Visa alltid tidsstämpel för meddelanden", "Authentication": "Autentisering", "%(items)s and %(lastItem)s": "%(items)s och %(lastItem)s", @@ -28,7 +27,6 @@ "Are you sure you want to leave the room '%(roomName)s'?": "Vill du lämna rummet '%(roomName)s'?", "Autoplay GIFs and videos": "Spela automatiskt upp GIFar och videor", "Are you sure you want to reject the invitation?": "Är du säker på att du vill avböja inbjudan?", - "Blacklisted": "Svartlistad", "%(senderName)s banned %(targetName)s.": "%(senderName)s bannade %(targetName)s.", "Banned users": "Bannade användare", "Bans user with given id": "Bannar användare med givet id", @@ -42,7 +40,6 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s tog bort rummets namn.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s bytte rummets ämne till \"%(topic)s\".", "Changes your display nickname": "Ändrar ditt visningsnamn", - "Claimed Ed25519 fingerprint key": "Påstådd Ed25519-fingeravtrycksnyckel", "Click here to fix": "Klicka här för att fixa", "Click to mute audio": "Klicka för att tysta ljud", "Click to mute video": "Klicka för att stänga av video", @@ -53,33 +50,24 @@ "Commands": "Kommandon", "Confirm password": "Bekräfta lösenord", "Continue": "Fortsätt", - "Could not connect to the integration server": "Det gick inte att ansluta till integrationsservern", "Create Room": "Skapa rum", "Cryptography": "Kryptografi", "Current password": "Nuvarande lösenord", - "Curve25519 identity key": "Curve25519 -identitetsnyckel", "Custom level": "Anpassad nivå", "/ddg is not a command": "/ddg är inte ett kommando", "Deactivate Account": "Inaktivera konto", "Decrypt %(text)s": "Dekryptera %(text)s", - "Decryption error": "Dekrypteringsfel", "Deops user with given id": "Degraderar användare med givet id", "Default": "Standard", - "Device ID": "Enhets-ID", - "device id: ": "enhets-id: ", - "Direct chats": "Direkt-chattar", "Disinvite": "Häv inbjudan", "Displays action": "Visar åtgärd", "Download %(text)s": "Ladda ner %(text)s", - "Ed25519 fingerprint": "Ed25519-fingeravtryck", "Email": "Epost", "Email address": "Epostadress", "Emoji": "Emoji", "%(senderName)s ended the call.": "%(senderName)s avslutade samtalet.", - "End-to-end encryption information": "Krypteringsinformation", "Error": "Fel", "Error decrypting attachment": "Det gick inte att dekryptera bilagan", - "Event information": "Händelseinformation", "Existing Call": "Existerande samtal", "Export": "Exportera", "Export E2E room keys": "Exportera krypteringsrumsnycklar", @@ -97,7 +85,6 @@ "Failed to send email": "Det gick inte att skicka epost", "Failed to send request.": "Det gick inte att sända begäran.", "Failed to set display name": "Det gick inte att ange visningsnamn", - "Failed to toggle moderator status": "Det gick inte att växla moderator-status", "Failed to unban": "Det gick inte att avbanna", "Failed to verify email address: make sure you clicked the link in the email": "Det gick inte att bekräfta epostadressen, klicka på länken i epostmeddelandet", "Favourite": "Favorit", @@ -106,15 +93,12 @@ "Active call (%(roomName)s)": "Aktiv samtal (%(roomName)s)", "Add": "Lägg till", "Admin Tools": "Admin-verktyg", - "Alias (optional)": "Alias (valfri)", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Det gick inte att ansluta till hemservern - kontrollera anslutningen, se till att hemserverns SSL-certifikat är betrott, och att inget webbläsartillägg blockerar förfrågningar.", "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s ändrade behörighetsnivå för %(powerLevelDiffText)s.", "Close": "Stäng", "Custom": "Egen", "Decline": "Avvisa", - "Disable Notifications": "Slå av aviseringar", "Drop File Here": "Dra filen hit", - "Enable Notifications": "Aktivera aviseringar", "Enter passphrase": "Ange lösenfras", "Error: Problem communicating with the given homeserver.": "Fel: Det gick inte att kommunicera med den angivna hemservern.", "Failed to fetch avatar URL": "Det gick inte att hämta avatar-URL", @@ -150,7 +134,6 @@ "Join as voice or video.": "Gå med som röst eller video.", "Join Room": "Gå med i rum", "%(targetName)s joined the room.": "%(targetName)s gick med i rummet.", - "Joins room with given alias": "Går med i rummet med givet alias", "Jump to first unread message.": "Hoppa till första olästa meddelande.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s kickade %(targetName)s.", "Kick": "Kicka", @@ -159,7 +142,6 @@ "Last seen": "Senast sedd", "Leave room": "Lämna rummet", "%(targetName)s left the room.": "%(targetName)s lämnade rummet.", - "Local addresses for this room:": "Lokala adresser för rummet:", "Logout": "Logga ut", "Low priority": "Låg prioritet", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s gjorde framtida rumshistorik synligt för alla rumsmedlemmar från att de bjöds in.", @@ -172,15 +154,12 @@ "Moderator": "Moderator", "Mute": "Tysta", "Name": "Namn", - "New address (e.g. #foo:%(localDomain)s)": "Ny address (t.ex. #foo:%(localDomain)s)", "New passwords don't match": "De nya lösenorden matchar inte", "New passwords must match each other.": "De nya lösenorden måste vara de samma.", - "none": "inget", "not specified": "inte specifierad", "Notifications": "Aviseringar", "(not supported by this browser)": "(stöds inte av webbläsaren)", "": "", - "NOT verified": "INTE verifierad", "No display name": "Inget visningsnamn", "No more results": "Inga fler resultat", "No results": "Inga resultat", @@ -200,11 +179,9 @@ "Profile": "Profil", "Public Chat": "Offentlig chatt", "Reason": "Orsak", - "Revoke Moderator": "Degradera moderator", "Register": "Registrera", "%(targetName)s rejected the invitation.": "%(targetName)s avvisade inbjudan.", "Reject invitation": "Avböj inbjudan", - "Remote addresses for this room:": "Fjärradresser för det här rummet:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s tog bort sitt visningsnamn (%(oldDisplayName)s).", "%(senderName)s removed their profile picture.": "%(senderName)s tog bort sin profilbild.", "Remove": "Ta bort", @@ -220,12 +197,10 @@ "%(roomName)s is not accessible at this time.": "%(roomName)s är inte tillgängligt för tillfället.", "Rooms": "Rum", "Save": "Spara", - "Scroll to bottom of page": "Gå till slutet av sidan", "Search": "Sök", "Search failed": "Sökning misslyckades", "Searches DuckDuckGo for results": "Söker efter resultat på DuckDuckGo", "Seen by %(userName)s at %(dateTime)s": "Sedd av %(userName)s %(dateTime)s", - "Send anyway": "Skicka ändå", "Send Reset Email": "Skicka återställningsmeddelande", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s skickade en bild.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s bjöd in %(targetDisplayName)s med i rummet.", @@ -243,7 +218,6 @@ "Sign out": "Logga ut", "%(count)s of your messages have not been sent.|other": "Vissa av dina meddelanden har inte skickats.", "Someone": "Någon", - "Start a chat": "Starta en chatt", "Start authentication": "Starta autentisering", "Cancel": "Avbryt", "Create new room": "Skapa nytt rum", @@ -275,11 +249,8 @@ "Guests can join": "Gäster kan gå med i rummet", "No rooms to show": "Inga fler rum att visa", "This phone number is already in use": "Detta telefonnummer används redan", - "The version of %(brand)s": "Versionen av %(brand)s", + "The version of %(brand)s": "Version av %(brand)s", "Call Failed": "Samtal misslyckades", - "Call Anyway": "Ring ändå", - "Call": "Ring", - "Answer": "Svara", "You are already in a call.": "Du är redan i ett samtal.", "You cannot place a call with yourself.": "Du kan inte ringa till dig själv.", "Warning!": "Varning!", @@ -305,9 +276,7 @@ "Dec": "dec", "Invite to Community": "Bjud in till community", "Unable to enable Notifications": "Det går inte att aktivera aviseringar", - "The information being sent to us to help make %(brand)s better includes:": "Informationen som skickas till oss för att hjälpa %(brand)s att bli bättre inkluderar:", - "Review Devices": "Granska enheter", - "Answer Anyway": "Svara ändå", + "The information being sent to us to help make %(brand)s better includes:": "Informationen som skickas till oss för att förbättra %(brand)s inkluderar:", "VoIP is unsupported": "VoIP stöds ej", "Failed to invite": "Inbjudan misslyckades", "You need to be logged in.": "Du måste vara inloggad.", @@ -315,7 +284,6 @@ "You are not in this room.": "Du är inte i det här rummet.", "You do not have permission to do that in this room.": "Du har inte behörighet att göra det i det här rummet.", "Fetching third party location failed": "Det gick inte att hämta platsdata från tredje part", - "A new version of %(brand)s is available.": "En ny version av %(brand)s är tillgänglig.", "All notifications are currently disabled for all targets.": "Alla aviseringar är för tillfället avstängda för alla mål.", "Uploading report": "Laddar upp rapport", "Sunday": "söndag", @@ -333,8 +301,6 @@ "Leave": "Lämna", "Uploaded on %(date)s by %(user)s": "%(user)s laddade upp %(date)s", "Advanced notification settings": "Avancerade aviseringsinställingar", - "delete the alias.": "radera adressen.", - "To return to your account in future you need to set a password": "För att återgå till ditt konto i framtiden måste du välja ett lösenord", "Forget": "Glöm bort", "You cannot delete this image. (%(code)s)": "Du kan inte radera den här bilden. (%(code)s)", "Cancel Sending": "Avbryt sändning", @@ -361,7 +327,6 @@ "Resend": "Skicka igen", "Files": "Filer", "Collecting app version information": "Samlar in appversionsinformation", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Radera rumsadressen %(alias)s och ta bort %(name)s från katalogen?", "Keywords": "Nyckelord", "Enable notifications for this account": "Aktivera aviseringar för det här kontot", "Messages containing keywords": "Meddelanden som innehåller nyckelord", @@ -408,7 +373,6 @@ "Show message in desktop notification": "Visa meddelande i skrivbordsavisering", "Unhide Preview": "Visa förhandsvisning", "Unable to join network": "Det gick inte att ansluta till nätverket", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Du kan ha konfigurerat dem i en annan klient än %(brand)s. Du kan inte ändra dem i %(brand)s men de tillämpas ändå", "Sorry, your browser is not able to run %(brand)s.": "Beklagar, din webbläsare kan inte köra %(brand)s.", "Messages in group chats": "Meddelanden i gruppchattar", "Yesterday": "igår", @@ -429,7 +393,6 @@ "Quote": "Citera", "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!": "Med din nuvarande webbläsare kan appens utseende vara helt fel, och vissa eller alla egenskaper kommer nödvändigtvis inte att fungera. Om du ändå vill försöka så kan du fortsätta, men gör det på egen risk!", "Checking for an update...": "Letar efter uppdateringar...", - "There are advanced notifications which are not shown here": "Det finns avancerade aviseringar som inte visas här", "Who can access this room?": "Vilka kan komma åt detta rum?", "Who can read history?": "Vilka kan läsa historik?", "Members only (since the point in time of selecting this option)": "Endast medlemmar (från tidpunkten för när denna inställning valdes)", @@ -440,11 +403,9 @@ "Your language of choice": "Ditt språkval", "The platform you're on": "Plattformen du använder", "Your homeserver's URL": "Din hemservers URL", - "Your identity server's URL": "Din identitetsservers URL", "Every page you use in the app": "Varje sida du använder i appen", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Om du använder Richtext-läget i Rich-Text-editorn eller inte", "e.g. ": "t.ex. ", - "Your User Agent": "Din användaragent", "Your device resolution": "Din enhetsupplösning", "You cannot place VoIP calls in this browser.": "Du kan inte ringa VoIP-samtal i den här webbläsaren.", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Din epostadress verkar inte vara kopplad till något Matrix-ID på den här hemservern.", @@ -469,14 +430,11 @@ "Ignore": "Ignorera", "Jump to message": "Hoppa till meddelande", "Mention": "Nämn", - "Make Moderator": "Gör till moderator", "Voice call": "Röstsamtal", "Video call": "Videosamtal", "Upload file": "Ladda upp fil", "Send an encrypted reply…": "Skicka ett krypterat svar…", - "Send a reply (unencrypted)…": "Skicka ett svar (okrypterat)…", "Send an encrypted message…": "Skicka ett krypterat meddelande…", - "Send a message (unencrypted)…": "Skicka ett meddelande (okrypterat)…", "You do not have permission to post to this room": "Du har inte behörighet att posta till detta rum", "Loading...": "Laddar...", "%(duration)ss": "%(duration)s", @@ -521,7 +479,6 @@ "Submit debug logs": "Skicka felsökningsloggar", "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.": "Felsökningsloggar innehåller användningsdata för applikationen inklusive ditt användarnamn, ID:n eller alias för de rum och grupper du har besökt och användarnamn för andra användare. De innehåller inte meddelanden.", "An email has been sent to %(emailAddress)s": "Ett epostmeddelande har skickats till %(emailAddress)s", - "To continue, please enter your password.": "För att fortsätta, vänligen ange ditt lösenord.", "Please check your email to continue registration.": "Vänligen kolla din epost för att fortsätta registreringen.", "Token incorrect": "Ogiltig token", "A text message has been sent to %(msisdn)s": "Ett textmeddelande har skickats till %(msisdn)s", @@ -533,8 +490,6 @@ "Uploading %(filename)s and %(count)s others|other": "Laddar upp %(filename)s och %(count)s andra", "Uploading %(filename)s and %(count)s others|zero": "Laddar upp %(filename)s", "Uploading %(filename)s and %(count)s others|one": "Laddar upp %(filename)s och %(count)s annan", - "Light theme": "Ljust tema", - "Dark theme": "Mörkt tema", "This doesn't appear to be a valid email address": "Det här verkar inte vara en giltig epostadress", "Verification Pending": "Avvaktar verifiering", "Unable to add email address": "Det gick inte att lägga till epostadress", @@ -556,7 +511,6 @@ "Failed to upload image": "Det gick inte att ladda upp bild", "New Password": "Nytt lösenord", "Do you want to set an email address?": "Vill du ange en epostadress?", - "Use compact timeline layout": "Använd kompakt tidslinjelayout", "Not a valid %(brand)s keyfile": "Inte en giltig %(brand)s-nyckelfil", "Authentication check failed: incorrect password?": "Autentiseringskontroll misslyckades: felaktigt lösenord?", "Always show encryption icons": "Visa alltid krypteringsikoner", @@ -577,7 +531,6 @@ "Connectivity to the server has been lost.": "Anslutning till servern har brutits.", "Sent messages will be stored until your connection has returned.": "Skickade meddelanden kommer att lagras tills anslutningen är tillbaka.", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Det är ingen annan här! Vill du bjuda in någon eller sluta varna om det tomma rummet?", - "Unknown room %(roomId)s": "Okänt rum %(roomId)s", "Room": "Rum", "Clear filter": "Töm filter", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Försökte ladda en viss punkt i det här rummets tidslinje, men du har inte behörighet att visa det aktuella meddelandet.", @@ -590,14 +543,9 @@ "Upload new:": "Ladda upp ny:", "Copied!": "Kopierat!", "Failed to copy": "Det gick inte att kopiera", - "Removed or unknown message type": "Borttagen eller okänd meddelandetyp", - "Message removed by %(userId)s": "Meddelande borttaget av %(userId)s", - "Message removed": "Meddelande borttaget", "Delete Widget": "Ta bort widget", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Widget tas bort för alla användare i rummet. Är du säker på att du vill ta bort den?", "Minimize apps": "Minimera appar", - "Blacklist": "Svartlista", - "Unblacklist": "Ta bort svartlistning", "Failed to invite the following users to %(groupId)s:": "Det gick inte att bjuda in följande användare till %(groupId)s:", "Failed to invite users to %(groupId)s": "Det gick inte att bjuda in användare till %(groupId)s", "This room is not public. You will not be able to rejoin without an invite.": "Detta rum är inte offentligt. Du kommer inte kunna gå med igen utan en inbjudan.", @@ -607,11 +555,6 @@ "Notify the whole room": "Meddela hela rummet", "Room Notification": "Rumsavisering", "Users": "Användare", - "unknown device": "okänd enhet", - "verified": "verifierad", - "Verification": "Verifiering", - "User ID": "Användar-ID", - "unencrypted": "okrypterad", "Export room keys": "Exportera rumsnycklar", "Import room keys": "Importera rumsnycklar", "File to import": "Fil att importera", @@ -644,18 +587,11 @@ "Create": "Skapa", "Unknown error": "Okänt fel", "Incorrect password": "Felaktigt lösenord", - "I verify that the keys match": "Jag verifierar att nycklarna matchar", "State Key": "Lägesnyckel", "Send Account Data": "Skicka kontodata", "Explore Account Data": "Utforska kontodata", "Toolbox": "Verktygslåda", "Developer Tools": "Utvecklarverktyg", - "Unverify": "Ta bort verifiering", - "Verify...": "Verifiera...", - "Start verification": "Starta verifiering", - "Share without verifying": "Dela utan att verifiera", - "Ignore request": "Ignorera begäran", - "Encryption key request": "Begäran av krypteringsnyckel", "Clear Storage and Sign Out": "Rensa lagring och logga ut", "Send Logs": "Skicka loggar", "Refresh": "Uppdatera", @@ -673,14 +609,12 @@ "Missing roomId.": "Rums-ID saknas.", "This room is not recognised.": "Detta rum känns inte igen.", "Usage": "Användning", - "Unrecognised room alias:": "Oigenkänt rumsalias:", "Verified key": "Verifierad nyckel", "VoIP conference started.": "VoIP-konferens startad.", "VoIP conference finished.": "VoIP-konferens avslutad.", "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s gjorde framtida rumshistorik synligt för okänd (%(visibility)s).", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Där denna sida innehåller identifierbar information, till exempel ett rums-, användar- eller grupp-ID, tas data bort innan den skickas till servern.", "The remote side failed to pick up": "Mottagaren kunde inte svara", - "Room name or alias": "Rumsnamn eller alias", "Jump to read receipt": "Hoppa till läskvitto", "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.": "Denna process låter dig exportera nycklarna för meddelanden som du har fått i krypterade rum till en lokal fil. Du kommer sedan att kunna importera filen i en annan Matrix-klient i framtiden, så att den klienten också kan dekryptera meddelandena.", "Unknown for %(duration)s": "Okänt i %(duration)s", @@ -690,9 +624,6 @@ "This room is used for important messages from the Homeserver, so you cannot leave it.": "Detta rum används för viktiga meddelanden från hemservern, så du kan inte lämna det.", "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.": "Data från en äldre version av %(brand)s has upptäckts. Detta ska ha orsakat att totalsträckskryptering inte fungerat i den äldre versionen. Krypterade meddelanden som nyligen har skickats medans den äldre versionen användes kanske inte kan dekrypteras i denna version. Detta kan även orsaka att meddelanden skickade med denna version inte fungerar. Om du upplever problem, logga ut och in igen. För att behålla meddelandehistoriken, exportera dina nycklar och importera dem igen.", "Confirm Removal": "Bekräfta borttagning", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Vänligen hjälp till att förbättra %(brand)s genom att skicka anonyma användardata. Detta kommer att använda en cookie (se vår Cookiepolicy).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Vänligen hjälp till att förbättra %(brand)s genom att skicka anonyma användardata. Detta kommer att använda en cookie.", - "Yes, I want to help!": "Ja, jag vill hjälpa till!", "%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)slämnade och gick med igen %(count)s gånger", "%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)slämnade och gick med igen", "%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)slämnade och gick med igen %(count)s gånger", @@ -808,7 +739,6 @@ "Disinvite this user?": "Ta bort användarens inbjudan?", "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.": "Du kommer inte att kunna ångra den här ändringen eftersom du sänker din egen behörighetsnivå, om du är den sista privilegierade användaren i rummet blir det omöjligt att ändra behörigheter.", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Du kommer inte att kunna ångra den här ändringen eftersom du höjer användaren till samma behörighetsnivå som dig själv.", - "User Options": "Användaralternativ", "unknown caller": "okänd uppringare", "To use it, just wait for autocomplete results to load and tab through them.": "För att använda detta, vänta på att autokompletteringen laddas och tabba igenom resultatet.", "Enable inline URL previews by default": "Aktivera URL-förhandsvisning som standard", @@ -913,9 +843,6 @@ "Please contact your service administrator to continue using the service.": "Kontakta din serviceadministratör för att fortsätta använda tjänsten.", "This homeserver has hit its Monthly Active User limit.": "Hemservern har nått sin månatliga gräns för användaraktivitet.", "This homeserver has exceeded one of its resource limits.": "Hemservern har överskridit en av sina resursgränser.", - "Please contact your service administrator to get this limit increased.": "Kontakta din serviceadministratör för att få denna gräns ökad.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Hemservern har nått sin månatliga gräns för användaraktivitet så vissa användare kommer inte kunna logga in.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Hemservern har överskridit en av sina resursgränser så vissa användare kommer inte kunna logga in.", "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.": "Ditt meddelande skickades inte för hemservern har nått sin månatliga gräns för användaraktivitet. Kontakta din serviceadministratör för att fortsätta använda servicen.", "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Ditt meddelande skickades inte för hemservern har överskridit en av sina resursgränser. Kontakta din serviceadministratör för att fortsätta använda servicen.", "Legal": "Juridiskt", @@ -933,16 +860,9 @@ "Update any local room aliases to point to the new room": "Uppdatera lokala rumsalias att peka på det nya rummet", "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "Hindra användare från att prata i den gamla rumsversionen och posta ett meddelande som rekommenderar användare att flytta till det nya rummet", "Put a link back to the old room at the start of the new room so people can see old messages": "Sätta en länk tillbaka till det gamla rummet i början av det nya rummet så att folk kan se gamla meddelanden", - "Registration Required": "Registrering krävs", - "You need to register to do this. Would you like to register now?": "Du måste registrera dig för att göra detta. Vill du registrera dig nu?", "Forces the current outbound group session in an encrypted room to be discarded": "Tvingar den aktuella utgående gruppsessionen i ett krypterat rum att överges", "Unable to connect to Homeserver. Retrying...": "Det gick inte att ansluta till hemserver. Försöker igen ...", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s satte huvudadressen för detta rum till %(address)s.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s lade till %(addedAddresses)s som adresser för detta rum.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s lade till %(addedAddresses)s som adress för detta rum.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s tog bort %(removedAddresses)s som adresser för detta rum.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s tog bort %(removedAddresses)s som adress för detta rum.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s lade till %(addedAddresses)s och tog bort %(removedAddresses)s som adresser för detta rum.", "%(senderName)s removed the main address for this room.": "%(senderName)s tog bort huvudadressen för detta rum.", "Add some now": "Lägg till några nu", "Please review and accept the policies of this homeserver:": "Granska och acceptera policyn för denna hemserver:", @@ -1165,7 +1085,6 @@ "The user must be unbanned before they can be invited.": "Användare behöver avbannas innan de kan bjudas in.", "Group & filter rooms by custom tags (refresh to apply changes)": "Gruppera och filtrera rum med anpassade taggar (ladda om för att visa ändringar)", "Render simple counters in room header": "Rendera enkla räknare i rumsrubriken", - "Order rooms in the room list by most important first instead of most recent": "Ordna rum i rumslistan med viktigaste först i stället för senaste", "Yes": "Ja", "No": "Nej", "Missing media permissions, click the button below to request.": "Saknar mediebehörigheter, klicka på knappen nedan för att begära.", @@ -1189,7 +1108,6 @@ "Roles & Permissions": "Roller och behörigheter", "Enable encryption?": "Aktivera kryptering?", "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.": "När det är aktiverat kan kryptering för ett rum inte inaktiveras. Meddelanden som skickas i ett krypterat rum kan inte ses av servern, utan endast av deltagarna i rummet. Att aktivera kryptering kan förhindra att många botar och bryggor att fungera korrekt. Läs mer om kryptering.", - "To link to this room, please add an alias.": "För att länka detta rum, lägg till ett alias.", "Encryption": "Kryptering", "Once enabled, encryption cannot be disabled.": "Efter aktivering kan kryptering inte inaktiveras igen.", "Encrypted": "Krypterat", @@ -1231,14 +1149,9 @@ "Revoke invite": "Återkalla inbjudan", "Invited by %(sender)s": "Inbjuden av %(sender)s", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Det uppstod ett fel vid uppdatering av rummets huvudadress. Det kanske inte tillåts av servern eller så inträffade ett tillfälligt fel.", - "Error creating alias": "Fel vid skapande av alias", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Det uppstod ett fel när alias skulle skapas. Det kanke inte tillåtas av servern eller så inträffade ett tillfälligt fel.", - "Error removing alias": "Fel vid borttagning av alias", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "Det uppstod ett fel när alias skulle tas bort. Det kanske inte längre finns eller så inträffade ett tillfälligt fel.", "Main address": "Huvudadress", "Error updating flair": "Fel vid uppdatering av emblem", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Det uppstod ett fel vid uppdatering av emblem för detta rum. Servern kanske inte tillåter det eller ett så inträffade tillfälligt fel.", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Du har tidigare använt en nyare version av %(brand)s på %(host)s. För att använda denna version igen med totalsträckskryptering, måste du logga ut och in igen. ", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verifiera denna användare för att markera den som betrodd. Att kunna lita på användare ger en extra sinnesfrid när man använder totalsträckskrypterade meddelanden.", "A widget would like to verify your identity": "En widget vill verifiera din identitet", "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.": "En widget på %(widgetUrl)s vill verifiera din identitet. Genom att tillåta detta kommer widgeten att kunna verifiera ditt användar-ID, men inte agera som dig.", @@ -1299,7 +1212,6 @@ "Your %(brand)s is misconfigured": "%(brand)s är felkonfigurerat", "Call failed due to misconfigured server": "Anrop misslyckades på grund av felkonfigurerad server", "Try using turn.matrix.org": "Prova att använda turn.matrix.org", - "A conference call could not be started because the integrations server is not available": "Ett konferenssamtal kunde inte startas eftersom integrationsservern inte är tillgänglig", "The server does not support the room version specified.": "Servern stöder inte den angivna rumsversionen.", "Messages": "Meddelanden", "Actions": "Åtgärder", @@ -1323,7 +1235,6 @@ "No homeserver URL provided": "Ingen hemserver-URL angiven", "The user's homeserver does not support the version of the room.": "Användarens hemserver stöder inte versionen av rummet.", "Multiple integration managers": "Flera integrationshanterare", - "Show recently visited rooms above the room list": "Visa nyligen besökta rum ovanför rumslistan", "Show hidden events in timeline": "Visa dolda händelser i tidslinjen", "Low bandwidth mode": "Läge för låg bandbredd", "Send read receipts for messages (requires compatible homeserver to disable)": "Skicka läskvitton för meddelanden (kräver kompatibel hemserver för att inaktivera)", @@ -1427,7 +1338,6 @@ "%(name)s (%(userId)s)": "%(name)s (%(userId)s)", "Try out new ways to ignore people (experimental)": "Testa nya sätt att ignorera personer (experimentalt)", "Show previews/thumbnails for images": "Visa förhandsvisning/tumnagel för bilder", - "Send cross-signing keys to homeserver": "Skicka korssigneringsnycklar till hemserver", "Custom (%(level)s)": "Anpassad (%(level)s)", "Error upgrading room": "Fel vid uppgradering av rum", "Double check that your server supports the room version chosen and try again.": "Dubbelkolla att din server stöder den valda rumsversionen och försök igen.", @@ -1514,12 +1424,8 @@ "%(severalUsers)smade no changes %(count)s times|one": "%(severalUsers)sgjorde inga ändringar", "%(oneUser)smade no changes %(count)s times|other": "%(oneUser)sgjorde inga ändringar %(count)s gånger", "%(oneUser)smade no changes %(count)s times|one": "%(oneUser)sgjorde inga ändringar", - "Room alias": "Rumsalias", "e.g. my-room": "t.ex. mitt rum", "Some characters not allowed": "Vissa tecken är inte tillåtna", - "Please provide a room alias": "Vänligen ange ett rumsalias", - "This alias is available to use": "Detta alias är tillgängligt att använda", - "This alias is already in use": "Detta alias används redan", "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "Använd en identitetsserver för att bjuda in via epost. Använd standard (%(defaultIdentityServerName)s) eller hantera i Inställningar.", "Use an identity server to invite by email. Manage in Settings.": "Använd en identitetsserver för att bjuda in via epost. Hantera i Inställningar.", "Close dialog": "Stäng dialogrutan", @@ -1547,22 +1453,16 @@ "Service": "Tjänst", "Summary": "Sammanfattning", "Document": "Dokument", - "The version of %(brand)s": "Version av %(brand)s", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Om du använder %(brand)s på en enhet där pekskärm är den primära inmatningsmekanismen", "Whether you're using %(brand)s as an installed Progressive Web App": "Om du använder %(brand)s som en installerad progressiv webbapp", "Your user agent": "Din användaragent", - "The information being sent to us to help make %(brand)s better includes:": "Informationen som skickas till oss för att förbättra %(brand)s inkluderar:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Det finns okända sessioner i det här rummet: om du fortsätter utan att verifiera dem kommer det att vara möjligt för någon att lyssna på ditt samtal.", - "Review Sessions": "Granska sessioner", "If you cancel now, you won't complete verifying the other user.": "Om du avbryter nu kommer du inte att verifiera den andra användaren.", "If you cancel now, you won't complete verifying your other session.": "Om du avbryter nu kommer du inte att verifiera din andra session.", - "If you cancel now, you won't complete your secret storage operation.": "Om du avbryter nu slutför du inte din operation för hemlig lagring.", "Cancel entering passphrase?": "Avbryta att ange lösenfras?", "Setting up keys": "Sätter upp nycklar", "Verify this session": "Verifiera denna session", "Encryption upgrade available": "Krypteringsuppgradering tillgänglig", "Set up encryption": "Ställ in kryptering", - "Unverified session": "Overifierad session", "Sign In or Create Account": "Logga in eller skapa konto", "Use your account or create a new one to continue.": "Använd ditt konto eller skapa ett nytt för att fortsätta.", "Create Account": "Skapa konto", @@ -1581,18 +1481,8 @@ "Please enter verification code sent via text.": "Ange verifieringskod skickad via textmeddelande.", "Discovery options will appear once you have added a phone number above.": "Upptäcktsalternativ visas när du har lagt till ett telefonnummer ovan.", "Verify session": "Verifiera sessionen", - "Use Legacy Verification (for older clients)": "Använd gammal verifiering (för äldre klienter)", - "Verify by comparing a short text string.": "Verifiera genom att jämföra en kort textsträng.", - "Begin Verifying": "Börja verifiera", - "Waiting for partner to accept...": "Väntar på partner att acceptera...", - "Nothing appearing? Not all clients support interactive verification yet. .": "Dyker inget upp? Alla klienter stöder inte interaktiv verifiering ännu. .", - "Waiting for %(userId)s to confirm...": "Väntar på att %(userId)s ska bekräfta...", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "För att verifiera att den här sessionen är betrodd, kontrollera att nyckeln du ser i Användarinställningar på den enheten stämmer med nyckeln nedan:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "För att verifiera att den här sessionen är betrodd, vänligen kontakta dess ägare på annat sätt (t.ex. personligen eller via ett telefonsamtal) och fråga om nyckeln i deras användarinställningar för denna session stämmer med nyckeln nedan:", - "Use two-way text verification": "Använd tvåvägs textverifiering", "Session name": "Sessionsnamn", "Session key": "Sessionsnyckel", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Om det matchar, tryck på verifieringsknappen nedan. Om det inte gör det, avlyssnar någon annan den här sessionen och du vill förmodligen trycka på svartlistaknappen istället.", "Automatically invite users": "Bjud in användare automatiskt", "Upgrade private room": "Uppgradera privat rum", "Upgrade public room": "Uppgradera publikt rum", diff --git a/src/i18n/strings/ta.json b/src/i18n/strings/ta.json index 5048441a37..9cb046ed39 100644 --- a/src/i18n/strings/ta.json +++ b/src/i18n/strings/ta.json @@ -1,5 +1,4 @@ { - "A new version of %(brand)s is available.": "%(brand)s-ன் புதிய பதிப்பு உள்ளது.", "Advanced notification settings": "மேம்பட்ட அறிவிப்பிற்கான அமைப்புகள்", "All messages": "அனைத்து செய்திகள்", "All messages (noisy)": "அனைத்து செய்திகள் (உரக்க)", @@ -16,8 +15,6 @@ "Can't update user notification settings": "பயனர் அறிவிப்பு அமைப்புகளை மாற்ற முடியவில்லை", "Couldn't find a matching Matrix room": "பொருத்தமான Matrix அறை கிடைக்கவில்லை", "Custom Server Options": "விருப்பிற்கேற்ற வழங்கி இடப்புகள்", - "delete the alias.": "மாற்றை அழி.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "அறை மாற்று %(alias)s -ஐ அழித்து, %(name)s -ஐ அடைவிலிருந்து நீக்க வேண்டுமா?", "Direct Chat": "நேரடி அரட்டை", "Dismiss": "நீக்கு", "Download this file": "இந்த கோப்பைத் தரவிறக்கு", @@ -88,7 +85,6 @@ "Uploading report": "அறிக்கை பதிவேற்றப்படுகிறது", "%(brand)s does not know how to join a room on this network": "இந்த வலையமைப்பில் உள்ள அறையில் எப்படி சேர்வதென்று %(brand)sற்க்கு தெரியவில்லை", "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "%(brand)s பல மேம்பட்ட உலாவி வசதிகளைப் பயன்படுத்துகிறது, அதில் சிலவற்றைக் காணவில்லை அல்லது உங்கள் உலாவியில் பரிசோதனைக்காக உள்ளது.", - "There are advanced notifications which are not shown here": "இங்கு காண்பிக்கப்படாத மேம்பட்ட அறிவிப்புகள் உள்ளது", "The server may be unavailable or overloaded": "வழங்கி அளவுமீறிய சுமையில் உள்ளது அல்லது செயல்பாட்டில் இல்லை", "Unable to fetch notification target list": "அறிவிப்பு பட்டியலை பெற முடியவில்லை", "Unable to look up room ID from server": "வழங்கியிலிருந்து அறை ID யை காண முடியவில்லை", @@ -140,7 +136,6 @@ "Whether or not you're using the Richtext mode of the Rich Text Editor": "பணக்கார உரை எடிட்டரின் ரிச்ச்டெக்ஸ்ட் பயன்முறையைப் பயன்படுத்துகிறீர்களா இல்லையா", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "நீங்கள் 'breadcrumbs' அம்சத்தைப் பயன்படுத்துகிறீர்களோ இல்லையோ (அறை பட்டியலுக்கு மேலே உள்ள அவதாரங்கள்)", "Your homeserver's URL": "உங்கள் வீட்டு சேவையகத்தின் URL", - "Your identity server's URL": "உங்கள் அடையாள சர்வரின் URL", "e.g. %(exampleValue)s": "உதாரணமாக %(exampleValue)s", "Every page you use in the app": "பயன்பாட்டில் நீங்கள் பயன்படுத்தும் ஒவ்வொரு பக்கமும்", "Your %(brand)s is misconfigured": "உங்கள் %(brand)s தவறாக உள்ளமைக்கப்பட்டுள்ளது", @@ -151,11 +146,6 @@ "The information being sent to us to help make %(brand)s better includes:": "%(brand)s ஐ சிறப்பாகச் செய்ய எங்களுக்கு அனுப்பப்படும் தகவல்களில் பின்வருவன அடங்கும்:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "இந்த பக்கம் ஒரு அறை, பயனர் அல்லது குழு ஐடி போன்ற அடையாளம் காணக்கூடிய தகவல்களை உள்ளடக்கியது, அந்த தரவு சேவையகத்திற்கு அனுப்பப்படுவதற்கு முன்பு அகற்றப்படும்.", "Call Failed": "அழைப்பு தோல்வியுற்றது", - "Review Devices": "சாதனங்களை மதிப்பாய்வு செய்யவும்", - "Call Anyway": "எப்படியும் அழைக்கவும்", - "Answer Anyway": "எப்படியும் பதில் சொல்லுங்கள்", - "Call": "அழைப்பு", - "Answer": "பதில்", "Call Timeout": "அழைப்பு நேரம் முடிந்தது", "The remote side failed to pick up": "தொலைதூரப் பக்கத்தை எடுக்கத் தவறிவிட்டது", "Unable to capture screen": "திரையைப் பிடிக்க முடியவில்லை", @@ -164,8 +154,6 @@ "VoIP is unsupported": "VoIP ஆதரிக்கப்படவில்லை", "You cannot place VoIP calls in this browser.": "இந்த உலாவியில் நீங்கள் VoIP அழைப்புகளை வைக்க முடியாது.", "You cannot place a call with yourself.": "உங்களுடன் அழைப்பை மேற்கொள்ள முடியாது.", - "Could not connect to the integration server": "ஒருங்கிணைப்பு சேவையகத்துடன் இணைக்க முடியவில்லை", - "A conference call could not be started because the integrations server is not available": "ஒருங்கிணைப்பு சேவையகம் கிடைக்காததால் ஒரு மாநாட்டு அழைப்பைத் தொடங்க முடியவில்லை", "Call in Progress": "அழைப்பு முன்னேற்றத்தில் உள்ளது", "A call is currently being placed!": "தற்போது அழைப்பு வைக்கப்பட்டுள்ளது!", "A call is already in progress!": "அழைப்பு ஏற்கனவே செயலில் உள்ளது!", @@ -179,7 +167,6 @@ "Server may be unavailable, overloaded, or you hit a bug.": "சேவையகம் கிடைக்காமல் போகலாம், அதிக சுமை அல்லது பிழையைத் தாக்கலாம்.", "The server does not support the room version specified.": "குறிப்பிடப்பட்ட அறை பதிப்பை சேவையகம் ஆதரிக்கவில்லை.", "Failure to create room": "அறையை உருவாக்கத் தவறியது", - "Send anyway": "இருந்தாலும் அனுப்பு", "Sun": "ஞாயிறு", "Mon": "திங்கள்", "Tue": "செவ்வாய்", diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json index 1f1281bcf3..789ac4c414 100644 --- a/src/i18n/strings/te.json +++ b/src/i18n/strings/te.json @@ -15,10 +15,8 @@ "Microphone": "మైక్రోఫోన్", "Camera": "కెమెరా", "Advanced": "ఆధునిక", - "Algorithm": "అల్గారిథం", "Always show message timestamps": "ఎల్లప్పుడూ సందేశాల సమయ ముద్రలు చూపించు", "Authentication": "ప్రామాణీకరణ", - "Alias (optional)": "అలియాస్ (ఇవచు ఇవకపపోవచు)", "You do not have permission to post to this room": "మీకు ఈ గదికి పోస్ట్ చేయడానికి అనుమతి లేదు", "Active call (%(roomName)s)": "క్రియాశీల కాల్ల్ (%(roomName)s)", "A new password must be entered.": "కొత్త పాస్ వర్డ్ ను తప్పక నమోదు చేయాలి.", @@ -35,7 +33,6 @@ "Ban": "బాన్", "Banned users": "నిషేధించిన వినియోగదారులు", "Bans user with given id": "ఇచ్చిన ఐడి తో వినియోగదారుని నిషేధించారు", - "Blacklisted": "నిరోధిత జాబితాలోని", "Call Timeout": "కాల్ గడువు ముగిసింది", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "గృహనిర్వాహకులకు కనెక్ట్ చేయలేరు - దయచేసి మీ కనెక్టివిటీని తనిఖీ చేయండి, మీ 1 హోమరుసు యొక్క ఎస్ఎస్ఎల్ సర్టిఫికేట్ 2 ని విశ్వసనీయపరుచుకొని, బ్రౌజర్ పొడిగింపు అభ్యర్థనలను నిరోధించబడదని నిర్ధారించుకోండి.", "Change Password": "పాస్వర్డ్ మార్చండి", @@ -47,7 +44,6 @@ "You cannot place VoIP calls in this browser.": "మీరు ఈ బ్రౌజర్లో కాల్లను చేయలేరు.", "You have no visible notifications": "మీకు కనిపించే నోటిఫికేషన్లు లేవు", "You need to be able to invite users to do that.": "మీరు దీన్ని చేయడానికి వినియోగదారులను ఆహ్వానించగలరు.", - "Claimed Ed25519 fingerprint key": "ఎడ్25519 వేలిముద్ర కీ ని పేర్కొన్నారు", "Click here to fix": "పరిష్కరించడానికి ఇక్కడ క్లిక్ చేయండి", "Click to mute audio": "ఆడియోను మ్యూట్ చేయడానికి క్లిక్ చేయండి", "Click to mute video": "వీడియో మ్యూట్ చేయడానికి క్లిక్ చేయండి", @@ -59,17 +55,14 @@ "Commands": "కమ్మండ్స్", "Confirm password": "పాస్వర్డ్ని నిర్ధారించండి", "Continue": "కొనసాగించు", - "Could not connect to the integration server": "ఇంటిగ్రేషన్ సర్వర్కు కనెక్ట్ చేయడం సాధ్యం కాలేదు", "Create Room": "రూమ్ ని సృష్టించండి", "Cryptography": "క్రిప్టోగ్రఫీ", "Current password": "ప్రస్తుత పాస్వర్డ్", - "Curve25519 identity key": "Curve25519 గుర్తింపు కీ", "Custom": "కస్టమ్", "Custom level": "అనుకూల స్థాయి", "/ddg is not a command": "/ ddg కమాండ్ కాదు", "Deactivate Account": "ఖాతాను డీయాక్టివేట్ చేయండి", "Decline": "డిక్లైన్", - "Decryption error": "గుప్తలేఖన లోపం", "Deops user with given id": "ఇచ్చిన ID తో వినియోగదారుని విడదీస్తుంది", "Default": "డిఫాల్ట్", "Sun": "ఆదివారం", @@ -101,7 +94,6 @@ "Upload an avatar:": "అవతార్ను అప్లోడ్ చేయండి:", "This server does not support authentication with a phone number.": "ఈ సర్వర్ ఫోన్ నంబర్తో ప్రామాణీకరణకు మద్దతు ఇవ్వదు.", "New passwords don't match": "కొత్త పాస్వర్డ్లు సరిపోలడం లేదు", - "Make Moderator": "మోడరేటర్ చేయండి", "There are no visible files in this room": "ఈ గదిలో కనిపించే ఫైల్లు లేవు", "Connectivity to the server has been lost.": "సెర్వెర్ కనెక్టివిటీని కోల్పోయారు.", "Sent messages will be stored until your connection has returned.": "మీ కనెక్షన్ తిరిగి వచ్చే వరకు పంపిన సందేశాలు నిల్వ చేయబడతాయి.", @@ -126,7 +118,6 @@ "Search": "శోధన", "Settings": "అమరికలు", "Fetching third party location failed": "మూడవ పార్టీ స్థానాన్ని పొందడం విఫలమైంది", - "A new version of %(brand)s is available.": "కొత్త రిమోట్ వివరణము అందుబాటులో ఉంది.", "Advanced notification settings": "ఆధునిక తాఖీదు అమరిక", "Sunday": "ఆదివారం", "Guests can join": "అతిథులు చేరవచ్చు", @@ -139,7 +130,6 @@ "Changelog": "మార్పు వివరణ", "Leave": "వదిలి", "All notifications are currently disabled for all targets.": "ప్రస్తుతానికి అన్ని చోట్లనుంచి అన్ని ప్రకటనలు ఆగి వున్నాయి.", - "delete the alias.": "అలియాస్ తొలగించండి.", "Forget": "మర్చిపో", "Source URL": "మూల URL", "Warning": "హెచ్చరిక", @@ -210,15 +200,10 @@ "The platform you're on": "మీరు ఉన్న ప్లాట్ఫార్మ్", "The version of %(brand)s": "రయట్.ఐఎమ్ యొక్క వెర్సన్", "Your homeserver's URL": "మీ హోమ్ సర్వర్ యొక్క URL", - "Your identity server's URL": "మీ ఐడెంటిటి సర్వర్ యొక్క URL", "e.g. %(exampleValue)s": "ఉ.దా. %(exampleValue)s 1", "Every page you use in the app": "ఆప్ లో మీరు వాడే ప్రతి పేజి", "e.g. ": "ఉ.దా. ", - "Your User Agent": "మీ యీసర్ ఏజెంట్", "Call Failed": "కాల్ విఫలమయింది", - "Review Devices": "పరికరాలని ఒక మారు చూసుకో", - "Call": "కాల్", - "Answer": "ఎత్తు", "The remote side failed to pick up": "అటు వైపు ఎత్తలేకపోయారు", "Unable to capture screen": "తెరని చూపలేకపోతున్నారు", "Existing Call": "నజుస్తున్న కాల్", diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index e8e4f638bd..811d549d54 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -12,8 +12,6 @@ "%(senderName)s banned %(targetName)s.": "%(senderName)s แบน %(targetName)s แล้ว", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s เปลี่ยนหัวข้อเป็น \"%(topic)s\"", "Decrypt %(text)s": "ถอดรหัส %(text)s", - "Device ID": "ID อุปกรณ์", - "device id: ": "id อุปกรณ์: ", "Download %(text)s": "ดาวน์โหลด %(text)s", "Emoji": "อีโมจิ", "Error": "ข้อผิดพลาด", @@ -48,7 +46,6 @@ "No Webcams detected": "ไม่พบกล้องเว็บแคม", "No media permissions": "ไม่มีสิทธิ์เข้าถึงสื่อ", "You may need to manually permit %(brand)s to access your microphone/webcam": "คุณอาจต้องให้สิทธิ์ %(brand)s เข้าถึงไมค์โครโฟนไมค์โครโฟน/กล้องเว็บแคม ด้วยตัวเอง", - "Algorithm": "อัลกอริทึม", "Authentication": "การยืนยันตัวตน", "%(items)s and %(lastItem)s": "%(items)s และ %(lastItem)s", "and %(count)s others...|one": "และอีกหนึ่งผู้ใช้...", @@ -65,7 +62,6 @@ "Autoplay GIFs and videos": "เล่น GIF และวิดิโออัตโนมัติ", "Banned users": "ผู้ใช้ที่ถูกแบน", "Bans user with given id": "ผู้ใช้และ id ที่ถูกแบน", - "Blacklisted": "ขึ้นบัญชีดำ", "%(senderName)s changed their profile picture.": "%(senderName)s เปลี่ยนรูปโปรไฟล์ของเขา", "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s เปลี่ยนชื่อห้องไปเป็น %(roomName)s", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s ลบชื่อห้อง", @@ -84,10 +80,7 @@ "Current password": "รหัสผ่านปัจจุบัน", "/ddg is not a command": "/ddg ไม่ใช่คำสั่ง", "Deactivate Account": "ปิดการใช้งานบัญชี", - "Decryption error": "การถอดรหัสผิดพลาด", - "Direct chats": "แชทตรง", "Disinvite": "ถอนคำเชิญ", - "Ed25519 fingerprint": "ลายนิ้วมือ Ed25519", "Email": "อีเมล", "Email address": "ที่อยู่อีเมล", "%(senderName)s ended the call.": "%(senderName)s จบการโทร", @@ -103,7 +96,6 @@ "Failed to send email": "การส่งอีเมลล้มเหลว", "Failed to send request.": "การส่งคำขอล้มเหลว", "Failed to set display name": "การตั้งชื่อที่แสดงล้มเหลว", - "Failed to toggle moderator status": "การสลับสถานะผู้ช่วยดูแลล้มเหลว", "Failed to unban": "การถอนแบนล้มเหลว", "Failed to verify email address: make sure you clicked the link in the email": "การยืนยันอีเมลล้มเหลว: กรุณาตรวจสอบว่าคุณคลิกลิงก์ในอีเมลแล้ว", "Failure to create room": "การสร้างห้องล้มเหลว", @@ -136,14 +128,11 @@ "Logout": "ออกจากระบบ", "Missing user_id in request": "ไม่พบ user_id ในคำขอ", "Moderator": "ผู้ช่วยดูแล", - "New address (e.g. #foo:%(localDomain)s)": "ที่อยู่ใหม่ (เช่น #foo:%(localDomain)s)", "New passwords don't match": "รหัสผ่านใหม่ไม่ตรงกัน", "New passwords must match each other.": "รหัสผ่านใหม่ทั้งสองช่องต้องตรงกัน", - "none": "ไม่มี", "not specified": "ไม่ได้ระบุ", "(not supported by this browser)": "(เบราว์เซอร์นี้ไม่รองรับ)", "": "<ไม่รองรับ>", - "NOT verified": "ยังไม่ได้ยืนยัน", "No more results": "ไม่มีผลลัพธ์อื่น", "No results": "ไม่มีผลลัพธ์", "Passwords can't be empty": "รหัสผ่านต้องไม่ว่าง", @@ -151,7 +140,6 @@ "Phone": "โทรศัพท์", "Please check your email and click on the link it contains. Once this is done, click continue.": "กรุณาเช็คอีเมลและคลิกลิงก์ข้างใน หลังจากนั้น คลิกดำเนินการต่อ", "Privileged Users": "ผู้ใช้ที่มีสิทธิพิเศษ", - "Revoke Moderator": "เพิกถอนผู้ช่วยดูแล", "%(targetName)s rejected the invitation.": "%(targetName)s ปฏิเสธคำเชิญแล้ว", "Reject invitation": "ปฏิเสธคำเชิญ", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s ลบชื่อที่แสดงแล้ว (%(oldDisplayName)s)", @@ -162,7 +150,6 @@ "Room Colour": "สีห้อง", "Rooms": "ห้องสนทนา", "Save": "บันทึก", - "Scroll to bottom of page": "เลื่อนลงไปล่างสุด", "Search failed": "การค้นหาล้มเหลว", "Searches DuckDuckGo for results": "ค้นหาบน DuckDuckGo", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s ได้ส่งรูป", @@ -179,7 +166,6 @@ "Someone": "ใครบางคน", "Always show message timestamps": "แสดงเวลาในแชทเสมอ", "Show timestamps in 12 hour format (e.g. 2:30pm)": "แสดงเวลาในแชทในรูปแบบ 12 ชั่วโมง (เช่น 2:30pm)", - "Start a chat": "เริ่มแชท", "Submit": "ส่ง", "Success": "สำเร็จ", "This email address is already in use": "ที่อยู่อีเมลถูกใช้แล้ว", @@ -189,7 +175,6 @@ "Room directory": "ไดเรกทอรีห้อง", "Start chat": "เริ่มแชท", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "ไม่สามารถเชื่อมต่อไปยังเซิร์ฟเวอร์บ้านผ่านทาง HTTP ได้เนื่องจาก URL ที่อยู่บนเบราว์เซอร์เป็น HTTPS กรุณาใช้ HTTPS หรือเปิดใช้งานสคริปต์ที่ไม่ปลอดภัย.", - "End-to-end encryption information": "ข้อมูลการเข้ารหัสจากปลายทางถึงปลายทาง", "Error: Problem communicating with the given homeserver.": "ข้อผิดพลาด: มีปัญหาในการติดต่อกับเซิร์ฟเวอร์บ้านที่กำหนด", "Export E2E room keys": "ส่งออกกุญแจถอดรหัส E2E", "Failed to change power level": "การเปลี่ยนระดับอำนาจล้มเหลว", @@ -202,17 +187,12 @@ "%(senderName)s unbanned %(targetName)s.": "%(senderName)s ปลดแบน %(targetName)s แล้ว", "Unable to capture screen": "ไม่สามารถจับภาพหน้าจอ", "Unable to enable Notifications": "ไม่สามารถเปิดใช้งานการแจ้งเตือน", - "unencrypted": "ยังไม่ได้เข้ารหัส", - "unknown device": "อุปกรณ์ที่ไม่รู้จัก", - "Unknown room %(roomId)s": "ห้องที่ไม่รู้จัก %(roomId)s", - "Unrecognised room alias:": "นามแฝงห้องที่ไม่รู้จัก:", "Uploading %(filename)s and %(count)s others|zero": "กำลังอัปโหลด %(filename)s", "Uploading %(filename)s and %(count)s others|one": "กำลังอัปโหลด %(filename)s และอีก %(count)s ไฟล์", "Uploading %(filename)s and %(count)s others|other": "กำลังอัปโหลด %(filename)s และอีก %(count)s ไฟล์", "Upload Failed": "การอัปโหลดล้มเหลว", "Upload file": "อัปโหลดไฟล์", "Usage": "การใช้งาน", - "User ID": "ID ผู้ใช้", "Warning!": "คำเตือน!", "Who can access this room?": "ใครสามารถเข้าถึงห้องนี้ได้?", "Who can read history?": "ใครสามารถอ่านประวัติแชทได้?", @@ -243,7 +223,6 @@ "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s %(day)s %(monthName)s %(fullYear)s %(time)s", "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s", "Set a display name:": "ตั้งชื่อที่แสดง:", - "Make Moderator": "เลื่อนขั้นเป็นผู้ช่วยดูแล", "Room": "ห้อง", "New Password": "รหัสผ่านใหม่", "Options": "ตัวเลือก", @@ -257,8 +236,6 @@ "Unknown error": "ข้อผิดพลาดที่ไม่รู้จัก", "Incorrect password": "รหัสผ่านไม่ถูกต้อง", "Unknown Address": "ที่อยู่ที่ไม่รู้จัก", - "Unblacklist": "ถอดบัญชีดำ", - "Blacklist": "ขึ้นบัญชีดำ", "ex. @bob:example.com": "เช่น @bob:example.com", "Add User": "เพิ่มผู้ใช้", "Add": "เพิ่ม", @@ -272,14 +249,11 @@ "Unnamed Room": "ห้องที่ยังไม่ได้ตั้งชื่อ", "(~%(count)s results)|one": "(~%(count)s ผลลัพท์)", "(~%(count)s results)|other": "(~%(count)s ผลลัพท์)", - "Alias (optional)": "นามแฝง (ไม่ใส่ก็ได้)", "A new password must be entered.": "กรุณากรอกรหัสผ่านใหม่", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "ไม่สามารถเฃื่อมต่อไปหาเซิร์ฟเวอร์บ้านได้ - กรุณาตรวจสอบคุณภาพการเชื่อมต่อ, ตรวจสอบว่าSSL certificate ของเซิร์ฟเวอร์บ้านของคุณเชื่อถือได้, และวไม่มีส่วนขยายเบราว์เซอร์ใดบล๊อคการเชื่อมต่ออยู่", "Drop File Here": "วางไฟล์ที่นี่", - "Enable Notifications": "เปิดใฃ้งานการแจ้งเตือน", "Private Chat": "แชทส่วนตัว", "Public Chat": "แชทสาธารณะ", - "Disable Notifications": "ปิดใช้งานการแจ้งเตือน", "Custom level": "กำหนดระดับเอง", "No display name": "ไม่มีชื่อที่แสดง", "Only people who have been invited": "เฉพาะบุคคลที่ได้รับเชิญ", @@ -292,17 +266,12 @@ "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (ระดับอำนาจ %(powerLevelNumber)s)", "Users": "ผู้ใช้", "Verification Pending": "รอการตรวจสอบ", - "Verification": "การตรวจสอบ", - "verified": "ตรวจสอบแล้ว", "You are already in a call.": "คุณอยู่ในสายแล้ว", "You cannot place a call with yourself.": "คุณไม่สามารถโทรหาตัวเองได้", - "Unverify": "ถอนการตรวจสอบ", - "Verify...": "ตรวจสอบ...", "Error decrypting audio": "เกิดข้อผิดพลาดในการถอดรหัสเสียง", "Error decrypting image": "เกิดข้อผิดพลาดในการถอดรหัสรูป", "Error decrypting video": "เกิดข้อผิดพลาดในการถอดรหัสวิดิโอ", "Fetching third party location failed": "การเรียกข้อมูลตำแหน่งจากบุคคลที่สามล้มเหลว", - "A new version of %(brand)s is available.": "มี %(brand)s เวอร์ชั่นใหม่", "I understand the risks and wish to continue": "ฉันเข้าใจความเสี่ยงและต้องการดำเนินการต่อ", "Advanced notification settings": "ตั้งค่าการแจ้งเตือนขั้นสูง", "Uploading report": "กำลังอัปโหลดรายงาน", @@ -323,8 +292,6 @@ "Leave": "ออกจากห้อง", "Uploaded on %(date)s by %(user)s": "อัปโหลดเมื่อ %(date)s โดย %(user)s", "All notifications are currently disabled for all targets.": "การแจ้งเตือนทั้งหมดถูกปิดใช้งานสำหรับทุกอุปกรณ์", - "delete the alias.": "ลบนามแฝง", - "To return to your account in future you need to set a password": "คุณต้องตั้งรหัสผ่านเพื่อจะกลับมาที่บัญชีนี้ในอนาคต", "Forget": "ลืม", "World readable": "ทุกคนอ่านได้", "You cannot delete this image. (%(code)s)": "คุณไม่สามารถลบรูปนี้ได้ (%(code)s)", @@ -350,7 +317,6 @@ "No update available.": "ไม่มีอัปเดตที่ใหม่กว่า", "Noisy": "เสียงดัง", "Collecting app version information": "กำลังรวบรวมข้อมูลเวอร์ชันแอป", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "ลบนามแฝง %(alias)s ของห้องและถอด %(name)s ออกจากไดเรกทอรี?", "Enable notifications for this account": "เปิดใช้งานการแจ้งเตือนสำหรับบัญชีนี้", "Messages containing keywords": "ข้อความที่มีคีย์เวิร์ด", "View Source": "ดูซอร์ส", @@ -394,7 +360,6 @@ "Forward Message": "ส่งต่อข้อความ", "Unhide Preview": "แสดงตัวอย่าง", "Unable to join network": "ไม่สามารถเข้าร่วมเครือข่ายได้", - "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 ไม่ได้", "Sorry, your browser is not able to run %(brand)s.": "ขออภัย เบราว์เซอร์ของคุณไม่สามารถ run %(brand)s ได้", "Messages in group chats": "ข้อความในแชทกลุ่ม", "Yesterday": "เมื่อวานนี้", @@ -413,6 +378,5 @@ "Unable to fetch notification target list": "ไม่สามารถรับรายชื่ออุปกรณ์แจ้งเตือน", "Quote": "อ้างอิง", "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!": "การแสดงผลของโปรแกรมอาจผิดพลาด ฟังก์ชันบางอย่างหรือทั้งหมดอาจไม่ทำงานในเบราว์เซอร์ปัจจุบันของคุณ หากคุณต้องการลองดำเนินการต่อ คุณต้องรับมือกับปัญหาที่อาจจะเกิดขึ้นด้วยตัวคุณเอง!", - "Checking for an update...": "กำลังตรวจหาอัปเดต...", - "There are advanced notifications which are not shown here": "มีการแจ้งเตือนขั้นสูงที่ไม่ได้แสดงที่นี่" + "Checking for an update...": "กำลังตรวจหาอัปเดต..." } diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index bfe9f2176f..b14af3abab 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -17,10 +17,8 @@ "Microphone": "Mikrofon", "Camera": "Kamera", "Advanced": "Gelişmiş", - "Algorithm": "Algoritma", "Always show message timestamps": "Her zaman mesaj zaman dalgalarını (timestamps) gösterin", "Authentication": "Doğrulama", - "Alias (optional)": "Diğer ad (isteğe bağlı)", "%(items)s and %(lastItem)s": "%(items)s ve %(lastItem)s", "and %(count)s others...|one": "ve bir diğeri...", "and %(count)s others...|other": "ve %(count)s diğerleri...", @@ -39,7 +37,6 @@ "Ban": "Yasak", "Banned users": "Yasaklanan(Banlanan) Kullanıcılar", "Bans user with given id": "Yasaklanan(Banlanan) Kullanıcılar , ID'leri ile birlikte", - "Blacklisted": "Kara listeye alınanlar", "Call Timeout": "Arama Zaman Aşımı", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Ana Sunucu'ya bağlanılamıyor - lütfen bağlantınızı kontrol edin , Ana Sunucu SSL sertifikanızın güvenilir olduğundan ve bir tarayıcı uzantısının istekleri engellemiyor olduğundan emin olun.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Tarayıcı çubuğunuzda bir HTTPS URL'si olduğunda Ana Sunusuna HTTP üzerinden bağlanılamıyor . Ya HTTPS kullanın veya güvensiz komut dosyalarını etkinleştirin.", @@ -50,7 +47,6 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s oda adını kaldırdı.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s konuyu \"%(topic)s\" olarak değiştirdi.", "Changes your display nickname": "Görünen takma adınızı değiştirir", - "Claimed Ed25519 fingerprint key": "Ed25519 parmak izi anahtarı istendi", "Click here to fix": "Düzeltmek için buraya tıklayın", "Click to mute audio": "Sesi kapatmak için tıklayın", "Click to mute video": "Videoyu kapatmak için tıklayın", @@ -62,40 +58,29 @@ "Commands": "Komutlar", "Confirm password": "Şifreyi Onayla", "Continue": "Devam Et", - "Could not connect to the integration server": "Bütünleştirme (Integration) Sunucusuna bağlanamadı", "Create Room": "Oda Oluştur", "Cryptography": "Kriptografi", "Current password": "Şimdiki Şifre", - "Curve25519 identity key": "Curve25519 kimlik anahtarı", "Custom": "Özel", "Custom level": "Özel seviye", "/ddg is not a command": "/ddg bir komut değildir", "Deactivate Account": "Hesabı Devre Dışı Bırakma", "Decline": "Reddet", "Decrypt %(text)s": "%(text)s metninin şifresini çöz", - "Decryption error": "Şifre çözme hatası", "Deops user with given id": "ID'leriyle birlikte , düşürülmüş kullanıcılar", "Default": "Varsayılan", - "Device ID": "Cihaz ID", - "device id: ": "cihaz id: ", - "Direct chats": "Doğrudan Sohbetler", - "Disable Notifications": "Bildirimleri Devre Dışı Bırak", "Disinvite": "Daveti İptal Et", "Displays action": "Eylemi görüntüler", "Download %(text)s": "%(text)s metnini indir", "Drop File Here": "Dosyayı Buraya Bırak", - "Ed25519 fingerprint": "Ed25519 parmak izi", "Email": "E-posta", "Email address": "E-posta Adresi", "Emoji": "Emoji (Karakter)", - "Enable Notifications": "Bildirimleri Etkinleştir", "%(senderName)s ended the call.": "%(senderName)s çağrıyı bitirdi.", - "End-to-end encryption information": "Uçtan-uca şifreleme bilgileri", "Enter passphrase": "Şifre deyimi Girin", "Error": "Hata", "Error decrypting attachment": "Ek şifresini çözme hatası", "Error: Problem communicating with the given homeserver.": "Hata: verilen Ana Sunucu ile iletişim kurulamıyor.", - "Event information": "Etkinlik bilgileri", "Existing Call": "Mevcut Çağrı", "Export": "Dışa Aktar", "Export E2E room keys": "Uçtan uca Oda anahtarlarını Dışa Aktar", @@ -114,7 +99,6 @@ "Failed to send email": "E-posta gönderimi başarısız oldu", "Failed to send request.": "İstek gönderimi başarısız oldu.", "Failed to set display name": "Görünür ismi ayarlama başarısız oldu", - "Failed to toggle moderator status": "Moderatör durumunu değiştirmek başarısız oldu", "Failed to unban": "Yasağı kaldırmak başarısız oldu", "Failed to upload profile picture!": "Profil resmi yükleme başarısız oldu!", "Failed to verify email address: make sure you clicked the link in the email": "Eposta adresini doğrulamadı: epostadaki bağlantıya tıkladığınızdan emin olun", @@ -150,7 +134,6 @@ "Join as voice or video.": " ses veya video olarak katılın.", "Join Room": "Odaya Katıl", "%(targetName)s joined the room.": "%(targetName)s odaya katıldı.", - "Joins room with given alias": "Verilen takma ad (nick name) ile odaya katıl", "Jump to first unread message.": "İlk okunmamış iletiye atla.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s %(targetName)s' ı attı.", "Kick": "Atmak (Odadan atmak vs.)", @@ -159,7 +142,6 @@ "Last seen": "Son görülme", "Leave room": "Odadan ayrıl", "%(targetName)s left the room.": "%(targetName)s odadan ayrıldı.", - "Local addresses for this room:": "Bu oda için yerel adresler :", "Logout": "Çıkış Yap", "Low priority": "Düşük öncelikli", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s gelecekte oda geçmişini görünür yaptı Tüm oda üyeleri , davet edildiği noktadan.", @@ -173,15 +155,12 @@ "Moderator": "Moderatör", "Mute": "Sessiz", "Name": "İsim", - "New address (e.g. #foo:%(localDomain)s)": "Yeni adres (e.g. #foo:%(localDomain)s)", "New passwords don't match": "Yeni şifreler uyuşmuyor", "New passwords must match each other.": "Yeni şifreler birbirleriyle eşleşmelidir.", - "none": "Hiç (Yok)", "not specified": "Belirtilmemiş", "Notifications": "Bildirimler", "(not supported by this browser)": "(Bu tarayıcı tarafından desteklenmiyor)", "": "", - "NOT verified": "Doğrulanmadı", "No display name": "Görünür isim yok", "No more results": "Başka sonuç yok", "No results": "Sonuç yok", @@ -201,11 +180,9 @@ "Profile": "Profil", "Public Chat": "Genel Sohbet", "Reason": "Sebep", - "Revoke Moderator": "Moderatörü İptal Et", "Register": "Kaydolun", "%(targetName)s rejected the invitation.": "%(targetName)s daveti reddetti.", "Reject invitation": "Daveti Reddet", - "Remote addresses for this room:": "Bu oda için uzak adresler:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s görünen adı (%(oldDisplayName)s) kaldırdı.", "%(senderName)s removed their profile picture.": "%(senderName)s profil resmini kaldırdı.", "Remove": "Kaldır", @@ -221,12 +198,10 @@ "%(roomName)s is not accessible at this time.": "%(roomName)s şu anda erişilebilir değil.", "Rooms": "Odalar", "Save": "Kaydet", - "Scroll to bottom of page": "Sayfanın altına kaydır", "Search": "Ara", "Search failed": "Arama başarısız", "Searches DuckDuckGo for results": "Sonuçlar için DuckDuckGo'yu arar", "Seen by %(userName)s at %(dateTime)s": "%(dateTime)s ' de %(userName)s tarafından görüldü", - "Send anyway": "Her durumda gönder", "Send Reset Email": "E-posta Sıfırlama Gönder", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s bir resim gönderdi.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s %(targetDisplayName)s' a odaya katılması için bir davet gönderdi.", @@ -244,7 +219,6 @@ "Sign out": "Çıkış Yap", "%(count)s of your messages have not been sent.|other": "Bazı mesajlarınız gönderilemedi.", "Someone": "Birisi", - "Start a chat": "Bir Sohbet Başlat", "Start authentication": "Kimlik Doğrulamayı başlatın", "Submit": "Gönder", "Success": "Başarılı", @@ -269,14 +243,10 @@ "%(senderName)s unbanned %(targetName)s.": "%(senderName)s %(targetName)s 'in yasağını kaldırdı.", "Unable to capture screen": "Ekran yakalanamadı", "Unable to enable Notifications": "Bildirimler aktif edilemedi", - "unencrypted": "şifrelenmemiş", "unknown caller": "bilinmeyen arayıcı", - "unknown device": "bilinmeyen cihaz", "unknown error code": "bilinmeyen hata kodu", - "Unknown room %(roomId)s": "Bilinmeyen oda %(roomId)s", "Unmute": "Sesi aç", "Unnamed Room": "İsimsiz Oda", - "Unrecognised room alias:": "Tanınmayan oda isimleri :", "Uploading %(filename)s and %(count)s others|zero": "%(filename)s yükleniyor", "Uploading %(filename)s and %(count)s others|one": "%(filename)s ve %(count)s kadarı yükleniyor", "Uploading %(filename)s and %(count)s others|other": "%(filename)s ve %(count)s kadarları yükleniyor", @@ -285,14 +255,10 @@ "Upload file": "Dosya yükle", "Upload new:": "Yeni yükle :", "Usage": "Kullanım", - "Use compact timeline layout": "Kompakt zaman akışı düzenini kullan", - "User ID": "Kullanıcı ID", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (güç %(powerLevelNumber)s)", "Username invalid: %(errMessage)s": "Kullanıcı ismi geçersiz : %(errMessage)s", "Users": "Kullanıcılar", "Verification Pending": "Bekleyen doğrulama", - "Verification": "Doğrulama", - "verified": "doğrulanmış", "Verified key": "Doğrulama anahtarı", "Video call": "Görüntülü arama", "Voice call": "Sesli arama", @@ -346,7 +312,6 @@ "Upload an avatar:": "Bir Avatar yükle :", "This server does not support authentication with a phone number.": "Bu sunucu bir telefon numarası ile kimlik doğrulamayı desteklemez.", "An error occurred: %(error_string)s": "Bir hata oluştu : %(error_string)s", - "Make Moderator": "Moderatör Yap", "There are no visible files in this room": "Bu odada görünür hiçbir dosya yok", "Room": "Oda", "Connectivity to the server has been lost.": "Sunucuyla olan bağlantı kesildi.", @@ -382,15 +347,9 @@ "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.": "Bu etkinliği kaldırmak(silmek) istediğinizden emin misiniz ? Bir odayı ismini silmeniz veya konu değiştirmeniz , geri alınabilir bir durumdur.", "Unknown error": "Bilinmeyen Hata", "Incorrect password": "Yanlış Şifre", - "To continue, please enter your password.": "Devam etmek için , lütfen şifrenizi girin.", - "I verify that the keys match": "Anahtarların uyuştuğunu doğruluyorum", "Unable to restore session": "Oturum geri yüklenemiyor", "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.": "Eğer daha önce %(brand)s'un daha yeni bir versiyonunu kullandıysanız , oturumunuz bu sürümle uyumsuz olabilir . Bu pencereyi kapatın ve daha yeni sürüme geri dönün.", "Unknown Address": "Bilinmeyen Adres", - "Unblacklist": "Karaliste Dışı", - "Blacklist": "Kara Liste", - "Unverify": "Doğrulamasını İptal Et", - "Verify...": "Doğrulama...", "ex. @bob:example.com": "örn. @bob:example.com", "Add User": "Kullanıcı Ekle", "Custom Server Options": "Özelleştirilebilir Sunucu Seçenekleri", @@ -405,7 +364,6 @@ "Error decrypting video": "Video şifre çözme hatası", "Add an Integration": "Entegrasyon ekleyin", "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?": "Hesabınızı %(integrationsUrl)s ile kullanmak üzere doğrulayabilmeniz için üçüncü taraf bir siteye götürülmek üzeresiniz. Devam etmek istiyor musunuz ?", - "Removed or unknown message type": "Kaldırılmış veya bilinmeyen ileti tipi", "URL Previews": "URL önizlemeleri", "Drop file here to upload": "Yüklemek için dosyaları buraya bırakın", " (unsupported)": " (desteklenmeyen)", @@ -427,12 +385,7 @@ "Do you want to set an email address?": "Bir e-posta adresi ayarlamak ister misiniz ?", "This will allow you to reset your password and receive notifications.": "Bu şifrenizi sıfırlamanızı ve bildirimler almanızı sağlayacak.", "Skip": "Atla", - "Start verification": "Doğrulamayı başlat", - "Share without verifying": "Doğrulamadan paylaş", - "Ignore request": "İsteği yoksay", - "Encryption key request": "Şifreleme anahtarı isteği", "Fetching third party location failed": "Üçüncü parti konumunu çekemedi", - "A new version of %(brand)s is available.": "%(brand)s'un yeni bir versiyonu mevcuttur.", "All notifications are currently disabled for all targets.": "Tüm bildirimler şu anda tüm hedefler için devre dışı bırakılmıştır.", "Uploading report": "Rapor yükleniyor", "Sunday": "Pazar", @@ -450,7 +403,6 @@ "Waiting for response from server": "Sunucudan yanıt bekleniyor", "Leave": "Ayrıl", "Advanced notification settings": "Gelişmiş bildirim ayarları", - "delete the alias.": "Tüm rumuzları sil.", "Forget": "Unut", "World readable": "Okunabilir dünya", "You cannot delete this image. (%(code)s)": "Bu resmi silemezsiniz. (%(code)s)", @@ -472,7 +424,6 @@ "Resend": "Yeniden Gönder", "Files": "Dosyalar", "Collecting app version information": "Uygulama sürümü bilgileri toplanıyor", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "%(alias)s oda rumuzu silinsin ve %(name)s dizinden kaldırılsın mı ?", "Keywords": "Anahtar kelimeler", "Enable notifications for this account": "Bu hesap için bildirimleri etkinleştir", "Messages containing keywords": " anahtar kelimeleri içeren mesajlar", @@ -518,7 +469,6 @@ "Search…": "Arama…", "Unhide Preview": "Önizlemeyi Göster", "Unable to join network": "Ağa bağlanılamıyor", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "Onları %(brand)s dışında bir istemciden yapılandırmış olabilirsiniz . Onları %(brand)s içersinide ayarlayamazsınız ama hala geçerlidirler", "Sorry, your browser is not able to run %(brand)s.": "Üzgünüz , tarayıcınız %(brand)s'u çalıştıramıyor .", "Uploaded on %(date)s by %(user)s": "%(user)s tarafında %(date)s e yüklendi", "Messages in group chats": "Grup sohbetlerindeki mesajlar", @@ -537,25 +487,17 @@ "Failed to change settings": "Ayarlar değiştirilemedi", "View Source": "Kaynağı Görüntüle", "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!": "Geçerli tarayıcınız ile birlikte , uygulamanın görünüş ve kullanım hissi tamamen hatalı olabilir ve bazı ya da tüm özellikler çalışmayabilir. Yine de denemek isterseniz devam edebilirsiniz ancak karşılaşabileceğiniz sorunlar karşısında kendi başınasınız !", - "There are advanced notifications which are not shown here": "Burada gösterilmeyen gelişmiş bildirimler var", "The platform you're on": "Platformunuz", - "The version of %(brand)s": "%(brand)s'in sürümü", + "The version of %(brand)s": "%(brand)s sürümü", "Your language of choice": "Dil seçiminiz", "Which officially provided instance you are using, if any": "Hangi resmi destekli platformu kullanmaktasınız (eğer varsa)", "Add Email Address": "Eposta Adresi Ekle", "Add Phone Number": "Telefon Numarası Ekle", - "Your identity server's URL": "Kimlik sunucunuzun linki", "e.g. %(exampleValue)s": "örn.%(exampleValue)s", "Every page you use in the app": "Uygulamadaki kullandığınız tüm sayfalar", "e.g. ": "örn. ", - "Your User Agent": "Kullanıcı Ajanınız", "Your device resolution": "Cihazınızın çözünürlüğü", "Call Failed": "Arama Başarısız", - "Review Devices": "Cihazları Gözden Geçir", - "Call Anyway": "Yinede Ara", - "Answer Anyway": "Yinede Cevapla", - "Call": "Ara", - "Answer": "Cevap", "Call failed due to misconfigured server": "Hatalı yapılandırılmış sunucu nedeniyle arama başarısız", "Call in Progress": "Arama Yapılıyor", "A call is already in progress!": "Zaten bir arama devam etmekte!", @@ -573,8 +515,6 @@ "Only continue if you trust the owner of the server.": "Sadece sunucunun sahibine güveniyorsanız devam edin.", "Trust": "Güven", "Unable to load! Check your network connectivity and try again.": "Yüklenemiyor! Ağ bağlantınızı kontrol edin ve yeniden deneyin.", - "Registration Required": "Kayıt Zorunlu", - "You need to register to do this. Would you like to register now?": "Bunu yapabilmek için kayıt olmalısınız. Şimdi kayıt olmak ister misiniz?", "Restricted": "Sınırlı", "Failed to invite users to the room:": "Kullanıcıların odaya daveti başarısız oldu:", "Missing roomId.": "roomId eksik.", @@ -596,8 +536,6 @@ "%(senderDisplayName)s made the room invite only.": "Odayı sadece davetle yapan %(senderDisplayName)s.", "%(senderDisplayName)s has prevented guests from joining the room.": "Odaya misafirlerin girişini engelleyen %(senderDisplayName)s.", "%(senderName)s removed the main address for this room.": "Bu oda için ana adresi silen %(senderName)s.", - "Light theme": "Açık tema", - "Dark theme": "Koyu tema", "%(displayName)s is typing …": "%(displayName)s yazıyor…", "%(names)s and %(count)s others are typing …|one": "%(names)s ve bir diğeri yazıyor…", "%(names)s and %(lastPerson)s are typing …": "%(names)s ve %(lastPerson)s yazıyor…", @@ -674,8 +612,6 @@ "Show advanced": "Gelişmiş göster", "Incompatible Database": "Uyumsuz Veritabanı", "To continue, please enter your password:": "Devam etmek için lütfen şifrenizi giriniz:", - "Begin Verifying": "Doğrulamaya Başla", - "Use two-way text verification": "İki yönlü metin doğrulama kullan", "Back": "Geri", "You must specify an event type!": "Bir olay tipi seçmek zorundasınız!", "Event sent!": "Olay gönderildi!", @@ -738,15 +674,11 @@ "Cancel All": "Hepsi İptal", "Upload Error": "Yükleme Hatası", "Allow": "İzin ver", - "Enter secret storage recovery key": "Depolama kurtarma anahtarı için şifre gir", "This looks like a valid recovery key!": "Bu geçerli bir kurtarma anahtarına benziyor!", "Not a valid recovery key": "Geçersiz bir kurtarma anahtarı", "Unable to load backup status": "Yedek durumu yüklenemiyor", - "Recovery Key Mismatch": "Kurtarma Anahtarı Kurtarma", "Unable to restore backup": "Yedek geri dönüşü yapılamıyor", "No backup found!": "Yedek bulunamadı!", - "Backup Restored": "Yedek Geri Dönüldü", - "Enter Recovery Key": "Kurtarma Anahtarını Gir", "Warning: You should only set up key backup from a trusted computer.": "Uyarı: Yedek anahtarı kurulumunu sadece güvenli bir bilgisayardan yapmalısınız.", "Unable to reject invite": "Davet reddedilemedi", "Pin Message": "Pin Mesajı", @@ -851,7 +783,7 @@ "Whether or not you're logged in (we don't record your username)": "İster oturum açın yada açmayın (biz kullanıcı adınızı kaydetmiyoruz)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Zengin Metin Düzenleyicisinin Zengin metin modunu kullanıyor ya da kullanmıyorsunuz", "Your homeserver's URL": "Ana sunucunuzun URL’i", - "The information being sent to us to help make %(brand)s better includes:": "%(brand)s i daha iyi yapmamıza yardımcı olacak bize gönderdiğiniz bilgilerin içeriği:", + "The information being sent to us to help make %(brand)s better includes:": "%(brand)s'u geliştirmemizde bize yardım etmek için gönderdiğiniz bilgiler şunları içeriyor:", "Try using turn.matrix.org": "turn.matrix.org i kullanarak dene", "You do not have permission to start a conference call in this room": "Bu odada bir konferans başlatmak için izniniz yok", "The file '%(fileName)s' failed to upload.": "%(fileName)s dosyası için yükleme başarısız.", @@ -893,18 +825,14 @@ "Set up with a recovery key": "Kurtarma anahtarı ile kur", "That matches!": "Eşleşti!", "That doesn't match.": "Eşleşmiyor.", - "Your Recovery Key": "Kurtarma Anahtarınız", "Download": "İndir", "Print it and store it somewhere safe": "Yazdır ve güvenli bir yerde sakla", "Save it on a USB key or backup drive": "Bir USB anahtara kaydet veya sürücüye yedekle", "Copy it to your personal cloud storage": "Kişisel bulut depolamaya kopyala", - "Recovery key": "Kurtarma anahtarı", "Success!": "Başarılı!", "Retry": "Yeniden Dene", - "Set up with a Recovery Key": "Bir Kurtarma Anahtarı ile Kur", "Set up Secure Message Recovery": "Güvenli Mesaj Kurtarma Kurulumu", "Starting backup...": "Yedeklemeye başlanıyor...", - "Create Key Backup": "Anahtar Yedeği Oluştur", "Unable to create key backup": "Anahtar yedeği oluşturulamıyor", "Don't ask again": "Yeniden sorma", "New Recovery Method": "Yeni Kurtarma Yöntemi", @@ -1108,10 +1036,7 @@ "Ban this user?": "Bu kullanıcıyı yasakla?", "Remove %(count)s messages|other": "%(count)s mesajı sil", "Remove %(count)s messages|one": "1 mesajı sil", - "A conference call could not be started because the integrations server is not available": "Entegrasyon sunucusu mevcut olmadığından konferans çağrısı başlatılamadı", - "Send cross-signing keys to homeserver": "Çapraz-imzalama anahtarlarını anasunucuya gönder", "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Uyarı: Topluluğa eklediğiniz her bir kişi topluluk IDsini bilen herhangi biri tarafından açıkça görünür olacaktır", - "Room name or alias": "Oda adı ve lakabı", "Failed to invite users to %(groupId)s": "%(groupId)s grubuna kullanıcı daveti başarısız", "Failed to add the following rooms to %(groupId)s:": "%(groupId)s odalarına ekleme başarısız:", "Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Düz-metin mesajına ¯\\_(ツ)_/¯ ifadesi ekler", @@ -1134,11 +1059,8 @@ "Failed to deactivate user": "Kullanıcı pasifleştirme başarısız", "Invite": "Davet", "Share Link to User": "Kullanıcıya Link Paylaş", - "User Options": "Kullanıcı Ayarları", "Send an encrypted reply…": "Şifrelenmiş bir cevap gönder…", - "Send a reply (unencrypted)…": "Bir cevap gönder (şifresiz)…", "Send an encrypted message…": "Şifreli bir mesaj gönder…", - "Send a message (unencrypted)…": "Bir mesaj gönder (şifresiz)…", "Bold": "Kalın", "Italics": "Eğik", "Code block": "Kod bloku", @@ -1195,7 +1117,6 @@ "Revoke invite": "Davet geri çekildi", "Invited by %(sender)s": "%(sender)s tarafından davet", "Error updating main address": "Ana adresi güncellemede hata", - "Error removing alias": "Lakap silmede hata", "Main address": "Ana adres", "Invalid community ID": "Geçersiz topluluk ID si", "'%(groupId)s' is not a valid community ID": "%(groupId)s geçerli olmayan bir topluluk ID si", @@ -1229,7 +1150,6 @@ "Copied!": "Kopyalandı!", "Failed to copy": "Kopyalama başarısız", "edited": "düzenlendi", - "Message removed by %(userId)s": "Mesaj %(userId)s tarafından silindi", "You are still sharing your personal data on the identity server .": "Kimlik sunucusu üzerinde hala kişisel veri paylaşımı yapıyorsunuz \n.", "We recommend that you remove your email addresses and phone numbers from the identity server before disconnecting.": "Kimlik sunucusundan bağlantıyı kesmeden önce telefon numaranızı ve e-posta adreslerinizi silmenizi tavsiye ederiz.", "Set a new account password...": "Yeni bir hesap parolası belirle...", @@ -1239,7 +1159,6 @@ "Chat with %(brand)s Bot": "%(brand)s Bot ile Sohbet Et", "Submit debug logs": "Hata ayıklama kayıtlarını gönder", "Something went wrong. Please try again or view your console for hints.": "Bir şeyler hatalı gitti. Lütfen yeniden deneyin veya ipuçları için konsolunuza bakın.", - "Please verify the room ID or alias and try again.": "Lütfen odanın ID si veya lakabı doğrulayın ve yeniden deneyin.", "Please try again or view your console for hints.": "Lütfen yeniden deneyin veya ipuçları için konsolunuza bakın.", "None": "Yok", "Ban list rules - %(roomName)s": "Yasak Liste Kuralları - %(roomName)s", @@ -1254,7 +1173,6 @@ "Ignore": "Yoksay", "Subscribed lists": "Abone olunmuş listeler", "If this isn't what you want, please use a different tool to ignore users.": "Eğer istediğiniz bu değilse, kullanıcıları yoksaymak için lütfen farklı bir araç kullanın.", - "Room ID or alias of ban list": "Yasak listesinin Oda ID veya lakabı", "Subscribe": "Abone ol", "Always show the window menu bar": "Pencerenin menü çubuğunu her zaman göster", "Bulk options": "Toplu işlem seçenekleri", @@ -1268,7 +1186,6 @@ "Error changing power level requirement": "Güç düzey gereksinimi değiştirmede hata", "Error changing power level": "Güç düzeyi değiştirme hatası", "Send %(eventType)s events": "%(eventType)s olaylarını gönder", - "To link to this room, please add an alias.": "Bu odaya bağlanmak için, lütfen bir lakap ekle.", "This event could not be displayed": "Bu olay görüntülenemedi", "Demote yourself?": "Kendinin rütbeni düşür?", "Demote": "Rütbe Düşür", @@ -1288,9 +1205,7 @@ "This invite to %(roomName)s was sent to %(email)s": "%(roomName)s odası daveti %(email)s adresine gönderildi", "You're previewing %(roomName)s. Want to join it?": "%(roomName)s odasını inceliyorsunuz. Katılmak ister misiniz?", "You don't currently have any stickerpacks enabled": "Açılmış herhangi bir çıkartma paketine sahip değilsiniz", - "Error creating alias": "Lakap oluştururken hata", "Room Topic": "Oda Başlığı", - "Verify this session to grant it access to encrypted messages.": "Şifrelenmiş mesajlara erişmek için bu oturumu doğrula.", "Start": "Başlat", "Session verified": "Oturum doğrulandı", "Done": "Bitti", @@ -1342,7 +1257,6 @@ "Group & filter rooms by custom tags (refresh to apply changes)": "Özel etiketler ile odaları grupla & filtrele ( değişiklikleri uygulamak için yenile)", "Render simple counters in room header": "Oda başlığında basit sayaçları görüntüle", "Try out new ways to ignore people (experimental)": "Kişileri yoksaymak için yeni yöntemleri dene (deneysel)", - "Enable local event indexing and E2EE search (requires restart)": "E2EE arama ve yerel olay indeksini aç (yeniden başlatma gerekli)", "Mirror local video feed": "Yerel video beslemesi yansısı", "Enable Community Filter Panel": "Toluluk Filtre Panelini Aç", "Match system theme": "Sistem temasıyla eşle", @@ -1370,10 +1284,6 @@ "%(severalUsers)smade no changes %(count)s times|one": "%(severalUsers)s değişiklik yapmadı", "%(oneUser)smade no changes %(count)s times|other": "%(oneUser)s %(count)s kez değişiklik yapmadı", "%(oneUser)smade no changes %(count)s times|one": "%(oneUser)s değişiklik yapmadı", - "Room alias": "Oda lakabı", - "Please provide a room alias": "Lütfen bir oda lakabı belirtin", - "This alias is available to use": "Bu lakap kullanmaya uygun", - "This alias is already in use": "Bu lakap zaten kullanımda", "And %(count)s more...|other": "ve %(count)s kez daha...", "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.": "Alternatif olarak,turn.matrix.org adresindeki herkese açık sunucuyu kullanmayı deneyebilirsiniz. Fakat bu güvenilir olmayabilir. IP adresiniz bu sunucu ile paylaşılacaktır. Ayarlardan yönetebilirsiniz.", "An error ocurred whilst trying to remove the widget from the room": "Görsel bileşen odadan silinmeye çalışılırken bir hata oluştu", @@ -1414,7 +1324,6 @@ "Please tell us what went wrong or, better, create a GitHub issue that describes the problem.": "Lütfen neyin yanlış gittiğini bize bildirin ya da en güzeli problemi tanımlayan bir GitHub talebi oluşturun.", "Before submitting logs, you must create a GitHub issue to describe your problem.": "Logları göndermeden önce, probleminizi betimleyen bir GitHub talebi oluşturun.", "Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Topluluk ID leri sadece a-z, 0-9 ya da '=_-./' karakterlerini içerebilir", - "Set a room alias to easily share your room with other people.": "Odanızı diğer kişilerle kolayca paylaşabilmek için bir oda lakabı ayarların.", "Create a public room": "Halka açık bir oda oluşturun", "Make this room public": "Bu odayı halka açık yap", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Sohbet tarihçesini kaybetmemek için, çıkmadan önce odanızın anahtarlarını dışarıya aktarın. Bunu yapabilmek için %(brand)sun daha yeni sürümü gerekli. Ulaşmak için geri gitmeye ihtiyacınız var", @@ -1454,7 +1363,6 @@ "Enable URL previews for this room (only affects you)": "Bu oda için URL önizlemeyi aç (sadece sizi etkiler)", "Enable URL previews by default for participants in this room": "Bu odadaki katılımcılar için URL önizlemeyi varsayılan olarak açık hale getir", "Enable widget screenshots on supported widgets": "Desteklenen görsel bileşenlerde anlık görüntüleri aç", - "Show recently visited rooms above the room list": "En son ziyaret edilen odaları oda listesinin en üstünde göster", "Show hidden events in timeline": "Zaman çizelgesinde gizli olayları göster", "Encrypted messages in one-to-one chats": "Birebir sohbetlerdeki şifrelenmiş mesajlar", "Encrypted messages in group chats": "Grup sohbetlerdeki şifrelenmiş mesajlar", @@ -1471,7 +1379,6 @@ "Verify this session": "Bu oturumu doğrula", "Encryption upgrade available": "Şifreleme güncellemesi var", "Set up encryption": "Şifrelemeyi ayarla", - "Unverified session": "Doğrulanmamış oturum", "You are no longer ignoring %(userId)s": "%(userId)s artık yoksayılmıyor", "Verifies a user, session, and pubkey tuple": "Bir kullanıcı, oturum ve açık anahtar çiftini doğrular", "Unknown (user, session) pair:": "Bilinmeyen (kullanıcı, oturum) çifti:", @@ -1486,7 +1393,6 @@ "Invalid identity server discovery response": "Geçersiz kimlik sunucu keşfi yanıtı", "Please contact your service administrator to continue using this service.": "Bu servisi kullanmaya devam etmek için lütfen servis yöneticinizle bağlantı kurun.", "Failed to perform homeserver discovery": "Anasunucu keşif işlemi başarısız", - "Sender session information": "Gönderici oturum bilgisi", "Go back to set it again.": "Geri git ve yeniden ayarla.", "Your recovery key": "Kurtarma anahtarınız", "Copy": "Kopyala", @@ -1496,7 +1402,6 @@ "Set up Secure Messages": "Güvenli Mesajları Ayarla", "Space used:": "Kullanılan alan:", "Indexed messages:": "İndekslenmiş mesajlar:", - "Number of rooms:": "Oda sayısı:", "Enable inline URL previews by default": "Varsayılan olarak satır içi URL önizlemeleri aç", "Waiting for %(displayName)s to verify…": "%(displayName)s ın doğrulaması için bekleniyor…", "They match": "Eşleşiyorlar", @@ -1530,28 +1435,21 @@ "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Botları, görsel bileşenleri ve çıkartma paketlerini yönetmek için bir entegrasyon yöneticisi kullanın.", "Session ID:": "Oturum ID:", "Session key:": "Oturum anahtarı:", - "Sessions": "Oturumlar", "This user has not verified all of their sessions.": "Bu kullanıcı bütün oturumlarında doğrulanmamış.", "You have not verified this user.": "Bu kullanıcıyı doğrulamadınız.", "Someone is using an unknown session": "Birisi bilinmeyen bir oturum kullanıyor", "Everyone in this room is verified": "Bu odadaki herkes doğrulanmış", - "Some sessions for this user are not trusted": "Bu kullanıcı için bazı oturumlar güvenilir değil", - "All sessions for this user are trusted": "Bu kullanıcı için tüm oturumlar güvenilir", - "The version of %(brand)s": "%(brand)s sürümü", "Your user agent": "Kullanıcı aracınız", "If you cancel now, you won't complete verifying the other user.": "Şimdi iptal ederseniz, diğer kullanıcıyı doğrulamayı tamamlamış olmayacaksınız.", "If you cancel now, you won't complete verifying your other session.": "Şimdi iptal ederseniz, diğer oturumu doğrulamış olmayacaksınız.", "Setting up keys": "Anahtarları ayarla", "Custom (%(level)s)": "Özel (%(level)s)", - "Room contains unknown sessions": "Oda bilinmeyen oturumlar içeriyor", - "Unknown sessions": "Bilinmeyen oturumlar", "Upload %(count)s other files|other": "%(count)s diğer dosyaları yükle", "Upload %(count)s other files|one": "%(count)s dosyayı sağla", "A widget would like to verify your identity": "Bir görsel tasarım kimliğinizi teyit etmek istiyor", "Remember my selection for this widget": "Bu görsel bileşen işin seçimimi hatırla", "Deny": "Reddet", "Recovery key mismatch": "Kurtarma anahtarı uyumsuz", - "Backup restored": "Yedek geri dönüldü", "Enter recovery key": "Kurtarma anahtarı gir", "Help": "Yardım", "Take picture": "Resim çek", @@ -1562,9 +1460,7 @@ "Add users to the community summary": "Topluluk özetine kullanıcıları ekle", "Who would you like to add to this summary?": "Bu özete kimi eklemek istersiniz?", "Failed to update community": "Toluluğu güncelleme başarısız", - "Downloading mesages for %(currentRoom)s.": "%(currentRoom)s için mesajlar indiriliyor.", "Indexed rooms:": "İndekslenmiş odalar:", - "%(crawlingRooms)s out of %(totalRooms)s": "%(totalRooms)s odadan %(crawlingRooms)s tanesi", "Bridges": "Köprüler", "Send a reply…": "Bir cevap gönder…", "Send a message…": "Bir mesaj gönder…", @@ -1580,7 +1476,6 @@ "%(count)s sessions|other": "%(count)s oturum", "%(count)s sessions|one": "%(count)s oturum", "%(name)s cancelled verifying": "%(name)s doğrulama iptal edildi", - "Message removed": "Mesaj silindi", "Filter community members": "Topluluk üyeleri filtrelendi", "Invite to this community": "Bu topluluğa davet et", "Failed to remove room from community": "Topluluktan oda silinmesi başarısız", @@ -1589,7 +1484,6 @@ "Add rooms to this community": "Bu topluluğa odaları ekle", "Filter community rooms": "Topluluk odalarını filtrele", "You're not currently a member of any communities.": "Şu anda hiç bir topluluğun bir üyesi değilsiniz.", - "Yes, I want to help!": "Evet, Yardım istiyorum!", "Set Password": "Şifre oluştur", "Error encountered (%(errorDetail)s).": "Hata oluştu (%(errorDetail)s).", "Checking for an update...": "Güncelleme kontrolü...", @@ -1615,7 +1509,6 @@ "Clear cross-signing keys": "Çapraz-imzalama anahtarlarını temizle", "Clear all data in this session?": "Bu oturumdaki tüm verileri temizle?", "Verify session": "Oturum doğrula", - "Use Legacy Verification (for older clients)": "Eski Doğrulamayı Kullan (eski istemciler için)", "Session name": "Oturum adı", "Session key": "Oturum anahtarı", "Verification Requests": "Doğrulama İstekleri", @@ -1623,7 +1516,6 @@ "Suggestions": "Öneriler", "Recently Direct Messaged": "Güncel Doğrudan Mesajlar", "Go": "Git", - "Loading session info...": "Oturum bilgisi yükleniyor...", "Your account is not secure": "Hesabınız güvende değil", "Your password": "Parolanız", "This session, or the other session": "Bu oturum veya diğer oturum", @@ -1654,8 +1546,6 @@ "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains.": "Bir metin mesajı gönderildi: +%(msisdn)s. Lütfen içerdiği doğrulama kodunu girin.", "You have verified this user. This user has verified all of their sessions.": "Bu kullanıcıyı doğruladınız. Bu kullanıcı tüm oturumlarını doğruladı.", "This room is end-to-end encrypted": "Bu oda uçtan uça şifreli", - "Some sessions in this encrypted room are not trusted": "Şifrelenmiş bu odadaki bazı oturumlar güvenilir değil", - "All sessions in this encrypted room are trusted": "Bu odadaki tün oturumlar güvenilir", "Re-request encryption keys from your other sessions.": "Diğer oturumlardan şifreleme anahtarlarını yeniden talep et.", "Encrypted by an unverified session": "Doğrulanmamış bir oturum tarafından şifrelenmiş", "Encrypted by a deleted session": "Silinen bir oturumla şifrelenmiş", @@ -1672,9 +1562,7 @@ "Not sure of your password? Set a new one": "Şifrenizden emin değil misiniz? Yenisini ayalarla", "Want more than a community? Get your own server": "Bir topluluktan fazlasınımı istiyorsunuz? Kendi sunucunuzu edinin", "Explore rooms": "Odaları keşfet", - "Show sessions, send anyway or cancel.": "Oturumları gözat, yinede gönder yada iptal.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Mesajı yeniden gönder veya şimdi mesajı iptal et .", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Your new session is now verified. Other users will see it as trusted.": "Yeni oturumunuz şimdi doğrulandı. Diğer kullanıcılar güvenilir olarak görecek.", "Invalid base_url for m.homeserver": "m.anasunucu için geçersiz base_url", "Invalid base_url for m.identity_server": "m.kimlik_sunucu için geçersiz base_url", @@ -1686,22 +1574,12 @@ "Enter your account password to confirm the upgrade:": "Güncellemeyi başlatmak için hesap şifreni gir:", "Restore": "Geri yükle", "You'll need to authenticate with the server to confirm the upgrade.": "Güncellemeyi teyit etmek için sunucuda oturum açmaya ihtiyacınız var.", - "Great! This passphrase looks strong enough.": "Harika! Bu parola yeterince güçlü gözüküyor.", - "Enter a passphrase": "Bir parola girin", - "Back up my encryption keys, securing them with the same passphrase": "Şifreleme anahtarlarımı aynı parola ile güvenli hale getirerek yedekle", - "Enter your passphrase a second time to confirm it.": "Parolanızı ikinci kez girerek teyit edin.", - "Confirm your passphrase": "Parolanızı teyit edin", "Your recovery key is in your Downloads folder.": "Kurtarma anahtarı İndirilenler klasörünüzde.", "Unable to set up secret storage": "Sır deposu ayarlanamıyor", "For maximum security, this should be different from your account password.": "En üst düzey güvenlik için, bu şifre hesap şifrenizden farklı olmalı.", - "Enter a passphrase...": "Bir parola girin...", - "Please enter your passphrase a second time to confirm.": "Lütfen parolanızı ikinci kez girerek teyit edin.", - "Repeat your passphrase...": "Parolanızı tekrarlayın...", "Your keys are being backed up (the first backup could take a few minutes).": "Anahtarlarınız yedekleniyor (ilk yedek bir kaç dakika sürebilir).", - "Secure your backup with a passphrase": "Yedeğinizi bir parola ile koruyun", "If you don't want to set this up now, you can later in Settings.": "Şimdi ayarlamak istemiyorsanız daha sonra Ayarlar menüsünden yapabilirsiniz.", "Set up": "Ayarla", - "Review Sessions": "Oturumlar Gözden Geçir", "Cancel entering passphrase?": "Parola girişini iptal et?", "%(senderName)s changed the alternative addresses for this room.": "Bu oda için alternatif adresler %(senderName)s tarafından değiştirildi.", "%(senderName)s changed the main and alternative addresses for this room.": "Bu oda için ana ve alternatif adresler %(senderName)s tarafından değiştirildi.", @@ -1712,11 +1590,9 @@ "A username can only contain lower case letters, numbers and '=_-./'": "Bir kullanıcı adı sadece küçük karakterler, numaralar ve '=_-./' karakterlerini içerebilir", "To help us prevent this in future, please send us logs.": "Bunun gelecekte de olmasının önüne geçmek için lütfen günceleri bize gönderin.", "To continue you need to accept the terms of this service.": "Devam etmek için bu servisi kullanma şartlarını kabul etmeniz gerekiyor.", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "“%(RoomName)s” odası sizin daha önce görmediğiniz oturumlar içeriyor.", "Upload files (%(current)s of %(total)s)": "Dosyaları yükle (%(current)s / %(total)s)", "Incorrect recovery passphrase": "Hatalı kurtarma parolası", "Failed to decrypt %(failedCount)s sessions!": "Çözümlemesi başarısız olan %(failedCount)s oturum!", - "Restored %(sessionCount)s session keys": "Geri yüklenen %(sessionCount)s oturum anahtarı", "Enter recovery passphrase": "Kurtarma parolasını girin", "Confirm your identity by entering your account password below.": "Hesabınızın şifresini aşağıya girerek kimliğinizi teyit edin.", "An email has been sent to %(emailAddress)s": "%(emailAddress)s adresine bir e-posta gönderildi", @@ -1730,11 +1606,8 @@ "This room is not public. You will not be able to rejoin without an invite.": "Bu oda açık bir oda değil. Davet almadan tekrar katılamayacaksınız.", "%(creator)s created and configured the room.": "%(creator)s odayı oluşturdu ve yapılandırdı.", "%(brand)s failed to get the public room list.": "Açık oda listesini getirirken %(brand)s başarısız oldu.", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Bu odada bilinmeyen oturumlar mevcut: eğer doğrulamadan devam ederseniz, birilerinin çağrılarınıza göz atma durumu ortaya çıkabilir.", - "If you cancel now, you won't complete your secret storage operation.": "Eğer şimdi iptal ederseniz, sır depolama operasyonunu tamamlamış olmayacaksınız.", "Show these rooms to non-members on the community page and room list?": "Bu odaları oda listesinde ve topluluğun sayfasında üye olmayanlara göster?", "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s bu odaya alternatif olarak %(addresses)s adreslerini ekledi.", - "Waiting for partner to accept...": "Partnerin kabul etmesi için bekleniyor...", "Failed to invite the following users to chat: %(csvUsers)s": "Sohbet için gönderilen davetin başarısız olduğu kullanıcılar: %(csvUsers)s", "Something went wrong trying to invite the users.": "Kullanıcıların davet edilmesinde bir şeyler yanlış gitti.", "a new master key signature": "yeni bir master anahtar imzası", @@ -1742,13 +1615,11 @@ "a key signature": "bir anahtar imzası", "Upload completed": "Yükleme tamamlandı", "Cancelled signature upload": "anahtar yükleme iptal edildi", - "Unabled to upload": "Yüklenemedi", "Signature upload success": "Anahtar yükleme başarılı", "Signature upload failed": "İmza yükleme başarısız", "If you didn’t sign in to this session, your account may be compromised.": "Eğer bu oturuma bağlanmadıysanız, hesabınız ele geçirilmiş olabilir.", "These files are too large to upload. The file size limit is %(limit)s.": "Bu dosyalar yükleme için çok büyük. Dosya boyut limiti %(limit)s.", "Some files are too large to be uploaded. The file size limit is %(limit)s.": "Bazı dosyalar yükleme için çok büyük. Dosya boyutu limiti %(limit)s.", - "Waiting…": "Bekleniyor…", "Failed to re-authenticate due to a homeserver problem": "Anasunucu problemi yüzünden yeniden kimlik doğrulama başarısız", "Failed to re-authenticate": "Yeniden kimlik doğrulama başarısız", "A new recovery passphrase and key for Secure Messages have been detected.": "Yeni bir kurtarma parolası ve Güvenli Mesajlar için anahtar tespit edildi.", @@ -1756,7 +1627,6 @@ "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "%(brand)s'u ana giriş yöntemi dokunma olan bir cihazda kullanıyor olsanızda", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "'Breadcrumbs' özelliğini kullanıp kullanmadığınız (oda listesi üzerinde avatarlar)", "Whether you're using %(brand)s as an installed Progressive Web App": "%(brand)s'u gelişmiş web uygulaması olarak yükleyip yüklemediğinizi", - "The information being sent to us to help make %(brand)s better includes:": "%(brand)s'u geliştirmemizde bize yardım etmek için gönderdiğiniz bilgiler şunları içeriyor:", "A call is currently being placed!": "Bir çağrı şu anda başlatılıyor!", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Şu anda dosya ile birlikte mesaj yollamak mümkün değil. Dosyayı mesajsız yüklemek ister misiniz?", "PM": "24:00", @@ -1796,10 +1666,7 @@ "A word by itself is easy to guess": "Kelime zaten kolay tahmin edilir", "Straight rows of keys are easy to guess": "Aynı klavye satırındaki ardışık tuşlar kolay tahmin edilir", "Short keyboard patterns are easy to guess": "Kısa klavye desenleri kolay tahmin edilir", - "Show a presence dot next to DMs in the room list": "Oda listesinde DM'lerin yanında varlık noktası göster", "Support adding custom themes": "Özel tema eklemeyi destekle", - "Enable cross-signing to verify per-user instead of per-session (in development)": "Oturum başına doğrulamak yerine kullanıcı başına doğrulama yapmak için çapraz giriş yapmayı etkinleştir (geliştirmede)", - "Show padlocks on invite only rooms": "Sadece davetle girilen odalarda kilit işareti göster", "Show read receipts sent by other users": "Diğer kullanıcılar tarafından gönderilen okundu bilgisini göster", "Show a reminder to enable Secure Message Recovery in encrypted rooms": "Şifrelenmiş odalarda güvenli mesaj kurtarmayı etkinleştirmek için hatırlatıcı göster", "Enable automatic language detection for syntax highlighting": "Sözdizimi vurgularken otomatik dil algılamayı etkinleştir", @@ -1809,7 +1676,6 @@ "Never send encrypted messages to unverified sessions in this room from this session": "Şifreli mesajları asla oturumdaki bu odadaki doğrulanmamış oturumlara iletme", "Prompt before sending invites to potentially invalid matrix IDs": "Potansiyel olarak geçersiz matrix kimliği olanlara davet gönderirken uyarı ver", "Show shortcuts to recently viewed rooms above the room list": "Oda listesinin üzerinde en son kullanılan odaları göster", - "Secret Storage key format:": "Sır Depolama anahtar biçemi:", "Error downloading theme information.": "Tema bilgisi indirilirken hata.", "Theme added!": "Tema eklendi!", "Add theme": "Tema ekle", diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index c4dee59eb9..bb9accf870 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -40,10 +40,8 @@ "Microphone": "Мікрофон", "Camera": "Камера", "Advanced": "Додаткові", - "Algorithm": "Алгоритм", "Always show message timestamps": "Завжди показувати часові позначки повідомлень", "Authentication": "Впізнавання", - "Alias (optional)": "Псевдонім (необов'язково)", "%(items)s and %(lastItem)s": "%(items)s та %(lastItem)s", "and %(count)s others...|one": "і інше...", "and %(count)s others...|other": "та %(count)s інші...", @@ -64,7 +62,6 @@ "Ban": "Заблокувати", "Banned users": "Заблоковані користувачі", "Bans user with given id": "Блокує користувача з вказаним ідентифікатором", - "Blacklisted": "В чорному списку", "Call Timeout": "Час очікування виклика", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Не вдається підключитись до домашнього серверу - перевірте підключення, переконайтесь, що ваш SSL-сертифікат домашнього сервера є довіреним і що розширення браузера не блокує запити.", "Cannot add any more widgets": "Неможливо додати більше віджетів", @@ -86,7 +83,6 @@ "This phone number is already in use": "Цей телефонний номер вже використовується", "Fetching third party location failed": "Не вдалось отримати стороннє місцеперебування", "Messages in one-to-one chats": "Повідомлення у чатах \"сам на сам\"", - "A new version of %(brand)s is available.": "Доступне оновлення для %(brand)s.", "Send Account Data": "Відправити данні аккаунта", "Advanced notification settings": "Додаткові налаштування сповіщень", "Uploading report": "Завантаження звіту", @@ -107,8 +103,6 @@ "Send Custom Event": "Відправити приватний захід", "All notifications are currently disabled for all targets.": "Сповіщення для усіх цілей на даний момент вимкнені.", "Failed to send logs: ": "Не вдалося відправити журнали: ", - "delete the alias.": "видалити псевдонім.", - "To return to your account in future you need to set a password": "Щоб мати змогу використовувати вашу обліківку у майбутньому, зазначте пароль", "Forget": "Забути", "World readable": "Відкрито для світу", "You cannot delete this image. (%(code)s)": "Ви не можете видалити це зображення. (%(code)s)", @@ -136,7 +130,6 @@ "Resend": "Перенадіслати", "Files": "Файли", "Collecting app version information": "Збір інформації про версію застосунка", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Видалити псевдонім %(alias)s та прибрати з каталогу %(name)s?", "Keywords": "Ключові слова", "Enable notifications for this account": "Увімкнути сповіщення для цієї обліківки", "Invite to this community": "Запросити в це суспільство", @@ -193,7 +186,6 @@ "Reply": "Відповісти", "Show message in desktop notification": "Показати повідомлення в сповіщення на робочому столі", "Unable to join network": "Неможливо приєднатись до мережі", - "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, але вони все ще мають силу", "Sorry, your browser is not able to run %(brand)s.": "Вибачте, ваш оглядач не спроможний запустити %(brand)s.", "Uploaded on %(date)s by %(user)s": "Завантажено %(date)s користувачем %(user)s", "Messages in group chats": "Повідомлення у групових чатах", @@ -219,7 +211,6 @@ "Thank you!": "Дякуємо!", "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!": "У вашому оглядачі вигляд застосунку може бути повністю іншим, а деякі або навіть усі функції можуть не працювати. Якщо ви наполягаєте, то можете продовжити користування, але ви маєте впоратись з усіма можливими проблемами власноруч!", "Checking for an update...": "Перевірка оновлень…", - "There are advanced notifications which are not shown here": "Є додаткові сповіщення, що не показуються тут", "Check for update": "Перевірити на наявність оновлень", "Reject all %(invitedRooms)s invites": "Відхилити запрошення до усіх %(invitedRooms)s", "Profile": "Профіль", @@ -232,21 +223,14 @@ "Your homeserver's URL": "URL адреса вашого домашнього сервера", "Failed to verify email address: make sure you clicked the link in the email": "Не вдалось перевірити адресу електронної пошти: переконайтесь, що ви перейшли за посиланням у листі", "The platform you're on": "Використовувана платформа", - "Your identity server's URL": "URL адреса серверу ідентифікації", "e.g. %(exampleValue)s": "напр. %(exampleValue)s", "Every page you use in the app": "Кожна сторінка, яку ви використовуєте в програмі", "e.g. ": "напр. ", - "Your User Agent": "Ваш користувацький агент", "Your device resolution": "Роздільна здатність вашого пристрою", "Analytics": "Аналітика", - "The information being sent to us to help make %(brand)s better includes:": "Інформація, що надсилається нам, щоб допомогти зробити %(brand)s кращим, включає в себе:", + "The information being sent to us to help make %(brand)s better includes:": "Відсилана до нас інформація, що допомагає покращити %(brand)s, містить:", "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Введіть пароль для захисту експортованого файлу. Щоб розшифрувати файл потрібно буде ввести цей пароль.", "Call Failed": "Виклик не вдався", - "Review Devices": "Перевірити пристрої", - "Call Anyway": "Подзвонити все одно", - "Answer Anyway": "Відповісти все одно", - "Call": "Подзвонити", - "Answer": "Відповісти", "The remote side failed to pick up": "На ваш дзвінок не змогли відповісти", "Unable to capture screen": "Не вдалось захопити екран", "Existing Call": "Наявний виклик", @@ -283,7 +267,6 @@ "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s", "Who would you like to add to this community?": "Кого ви хочете додати до цієї спільноти?", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Якщо дана сторінка містить особисту інформацію, як то назва кімнати, користувача чи групи, ці дані будуть вилучені перед надсиланням на сервер.", - "Could not connect to the integration server": "Неможливо приєднатися до інтеграційного сервера", "Call in Progress": "Іде виклик", "A call is currently being placed!": "Зараз іде виклик!", "A call is already in progress!": "Вже здійснюється дзвінок!", @@ -295,7 +278,6 @@ "Which rooms would you like to add to this community?": "Які кімнати ви хочете додати до цієї спільноти?", "Show these rooms to non-members on the community page and room list?": "Показувати ці кімнати тим, хто не належить до спільноти, на сторінці спільноти та списку кімнат?", "Add rooms to the community": "Додати кімнати до спільноти", - "Room name or alias": "Назва або псевдонім кімнати", "Add to community": "Додати до спільноти", "Failed to invite the following users to %(groupId)s:": "Не вдалося запросити таких користувачів до %(groupId)s:", "Failed to invite users to community": "Не вдалося запросити користувачів до кімнати", @@ -306,11 +288,8 @@ "Unable to enable Notifications": "Не вдалося увімкнути сповіщення", "This email address was not found": "Не знайдено адресу електронної пошти", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Схоже, ваша адреса електронної пошти не пов'язана з жодним ідентифікатор Matrix на цьому домашньому сервері.", - "Registration Required": "Потрібна реєстрація", - "You need to register to do this. Would you like to register now?": "Вам потрібно зареєструватися, щоб це зробити. Бажаєте зареєструватися зараз?", "Restricted": "Обмежено", "Moderator": "Модератор", - "Start a chat": "Розпочати балачку", "Failed to invite": "Не вдалося запросити", "Failed to invite the following users to the %(roomName)s room:": "Не вдалося запросити таких користувачів до кімнати %(roomName)s:", "You need to be logged in.": "Вам потрібно увійти.", @@ -331,9 +310,7 @@ "To use it, just wait for autocomplete results to load and tab through them.": "Щоб цим скористатися, просто почекайте на підказки доповнення й перемикайтеся між ними клавішею TAB.", "Changes your display nickname": "Змінює ваш нік", "Invites user with given id to current room": "Запрошує користувача з вказаним ідентифікатором до кімнати", - "Joins room with given alias": "Приєднується до кімнати під іншим псевдонімом", "Leave room": "Покинути кімнату", - "Unrecognised room alias:": "Не розпізнано псевдонім кімнати:", "Kicks user with given id": "Вилучити з кімнати користувача з вказаним ідентифікатором", "Ignores a user, hiding their messages from you": "Ігнорує користувача, приховуючи повідомлення від них", "Ignored user": "Користувача ігноровано", @@ -363,11 +340,6 @@ "%(senderName)s kicked %(targetName)s.": "%(senderName)s викинув/ла %(targetName)s.", "%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s відкликав/ла запрошення %(targetName)s.", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s надіслав/ла зображення.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s додав/ла %(addedAddresses)s як адреси цієї кімнати.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s додав/ла %(addedAddresses)s як адресу цієї кімнати.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s вилучив/ла %(removedAddresses)s з адрес цієї кімнати.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s вилучив/ла %(removedAddresses)s з адрес цієї кімнати.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s додав/ла %(addedAddresses)s і вилучив/ла %(removedAddresses)s з адрес цієї кімнати.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s призначив/ла основну адресу цієї кімнати: %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s вилучив/ла основу адресу цієї кімнати.", "Someone": "Хтось", @@ -391,7 +363,6 @@ "%(widgetName)s widget removed by %(senderName)s": "%(senderName)s вилучив/ла %(widgetName)s", "Failure to create room": "Не вдалося створити кімнату", "Server may be unavailable, overloaded, or you hit a bug.": "Сервер може бути недоступний, перевантажений, або ж ви натрапили на ваду.", - "Send anyway": "Надіслати хоч би там що", "Unnamed Room": "Кімната без назви", "This homeserver has hit its Monthly Active User limit.": "Цей домашній сервер досягнув свого ліміту щомісячних активних користувачів.", "This homeserver has exceeded one of its resource limits.": "Цей домашній сервер досягнув одного зі своїх лімітів ресурсів.", @@ -404,7 +375,6 @@ "Please contact your homeserver administrator.": "Будь ласка, зв'яжіться з адміністратором вашого домашнього сервера.", "Failed to join room": "Не вдалося приєднатися до кімнати", "Message Pinning": "Прикріплені повідомлення", - "Use compact timeline layout": "Використовувати компактну розкладку стрічки", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Показувати час у 12-годинному форматі (напр. 2:30 pm)", "Always show encryption icons": "Завжди показувати значки шифрування", "Enable automatic language detection for syntax highlighting": "Показувати автоматичне визначення мови для підсвічування синтаксису", @@ -433,11 +403,8 @@ "Password": "Пароль", "New Password": "Новий пароль", "Confirm password": "Підтвердження пароля", - "Device ID": "ID пристрою", "Last seen": "Востаннє з'являвся", "Failed to set display name": "Не вдалося встановити ім'я для показу", - "Disable Notifications": "Вимкнути сповіщення", - "Enable Notifications": "Увімкнути сповіщення", "The maximum permitted number of widgets have already been added to this room.": "Максимально дозволену кількість віджетів уже додано до цієї кімнати.", "Drop File Here": "Киньте файл сюди", "Drop file here to upload": "Киньте файл сюди, щоб відвантажити", @@ -451,7 +418,6 @@ "Options": "Налаштування", "Key request sent.": "Запит ключа надіслано.", "Please select the destination room for this message": "Будь ласка, виберіть кімнату, куди потрібно надіслати це повідомлення", - "device id: ": "id пристрою: ", "Disinvite": "Скасувати запрошення", "Kick": "Викинути", "Disinvite this user?": "Скасувати запрошення для цього користувача?", @@ -465,11 +431,9 @@ "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": "Знизити рівень прав", "Failed to mute user": "Не вдалося заглушити користувача", - "Failed to toggle moderator status": "Не вдалося перемкнути статус модератора", "Failed to change power level": "Не вдалося змінити рівень повноважень", "Chat with %(brand)s Bot": "Балачка з %(brand)s-ботом", "Whether or not you're logged in (we don't record your username)": "Незалежно від того, увійшли ви чи ні (ми не записуємо ваше ім'я користувача)", - "A conference call could not be started because the integrations server is not available": "Конференц-дзвінок не можна розпочати оскільки інтеграційний сервер недоступний", "The file '%(fileName)s' failed to upload.": "Файл '%(fileName)s' не вийшло відвантажити.", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Файл '%(fileName)s' перевищує ліміт розміру для відвантажень домашнього сервера", "The server does not support the room version specified.": "Сервер не підтримує вказану версію кімнати.", @@ -517,13 +481,11 @@ "Upload": "Відвантажити", "Upload file": "Відвантажити файл", "Send an encrypted message…": "Надіслати зашифроване повідомлення…", - "Send a message (unencrypted)…": "Надіслати повідомлення (незашифроване)…", "The conversation continues here.": "Розмова триває тут.", "This room has been replaced and is no longer active.": "Ця кімната була замінена і не є активною.", "You do not have permission to post to this room": "У вас нема дозволу дописувати у цю кімнату", "Sign out": "Вийти", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Щоб уникнути втрати історії ваших листувань, ви маєте експортувати ключі кімнати перед виходом. Вам треба буде повернутися до новішої версії %(brand)s аби зробити це", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Раніше ви використовували новішу версію %(brand)s на %(host)s. Для повторного користування цією версією з наскрізним шифруванням вам треба буде вийти та зайти знову. ", "Incompatible Database": "Несумісна база даних", "Continue With Encryption Disabled": "Продовжити із вимкненим шифруванням", "Unknown error": "Невідома помилка", @@ -546,7 +508,6 @@ "Upload avatar": "Завантажити аватар", "For security, this session has been signed out. Please sign in again.": "З метою безпеки вашу сесію було завершено. Зайдіть, будь ласка, знову.", "Upload an avatar:": "Завантажити аватар:", - "Send cross-signing keys to homeserver": "Надсилання ключей підпису на домашній сервер", "Custom (%(level)s)": "Власний (%(level)s)", "Error upgrading room": "Помилка оновлення кімнати", "Double check that your server supports the room version chosen and try again.": "Перевірте, чи підримує ваш сервер вказану версію кімнати та спробуйте ще.", @@ -571,13 +532,9 @@ "Confirm adding this phone number by using Single Sign On to prove your identity.": "Підтвердьте додавання цього телефонного номера через використання Single Sign On аби довести вашу ідентичність.", "Confirm adding phone number": "Підтвердити додавання телефонного номера", "Click the button below to confirm adding this phone number.": "Клацніть на кнопці нижче щоб підтвердити додавання цього телефонного номера.", - "The version of %(brand)s": "Версія %(brand)s", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Чи використовуєте ви %(brand)s на пристрої, де основним засобом вводження є дотик", "Whether you're using %(brand)s as an installed Progressive Web App": "Чи використовуєте ви %(brand)s як встановлений Progressive Web App", "Your user agent": "Ваш user agent", - "The information being sent to us to help make %(brand)s better includes:": "Відсилана до нас інформація, що допомагає покращити %(brand)s, містить:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "У цій кімнаті є невідомі сесії: якщо ви продовжите не звіряючи їх, то ваші розмови можуть бути прослухані.", - "Review Sessions": "Переглянути сесії", "If you cancel now, you won't complete verifying the other user.": "Якщо ви скасуєте зараз, то не завершите звіряння іншого користувача.", "If you cancel now, you won't complete verifying your other session.": "Якщо ви скасуєте зараз, то не завершите звіряння вашої іншої сесії.", "If you cancel now, you won't complete your operation.": "Якщо ви скасуєте зараз, то не завершите вашу дію.", @@ -629,15 +586,6 @@ "To continue, please enter your password:": "Щоб продовжити, введіть, будь ласка, ваш пароль:", "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. Це призведе до виходу вашої обліківки з усіх кімнат та до видалення деталей вашої обліківки з вашого серверу ідентифікації. Ця дія є безповоротною.", "Verify session": "Звірити сесію", - "Use Legacy Verification (for older clients)": "Використати успадковане звірення (для старих клієнтів)", - "Verify by comparing a short text string.": "Звірити порівнянням короткого текстового рядка.", - "Begin Verifying": "Почати звіряння", - "Waiting for partner to accept...": "Очікується підтвердження партнером…", - "Nothing appearing? Not all clients support interactive verification yet. .": "Нічого не з'являється? Поки що не всі клієнти підтримують взаємодійне звірення. .", - "Waiting for %(userId)s to confirm...": "Очікується підтвердження від %(userId)s…", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Щоб впевнитись, що цій сесії можна довіряти, переконайтесь, будь ласка, що показуваний у Налаштуваннях на тому пристрої ключ збігається з ключем внизу:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Щоб впевнитись, що цій сесії можна довіряти, зв'яжіться, будь ласка, з її власником якимось іншим шляхом (напр. через телефон або зустріч) і переконайтесь, що показуваний у Налаштуваннях на їхньому пристрої ключ збігається з ключем внизу:", - "Use two-way text verification": "Використати двонапрямне текстове звірення", "Session name": "Назва сесії", "Session ID": "ID сесії", "Session key": "Ключ сесії", @@ -656,7 +604,6 @@ "Search failed": "Пошук не вдався", "Server may be unavailable, overloaded, or search timed out :(": "Сервер може бути недосяжним, перевантаженим або запит на пошук застарів :(", "No more results": "Інших результатів нема", - "Unknown room %(roomId)s": "Невідома кімната %(roomId)s", "Room": "Кімната", "Failed to reject invite": "Не вдалось відхилити запрошення", "You have %(count)s unread notifications in a prior version of this room.|other": "Ви маєте %(count)s непрочитаних сповіщень у попередній версії цієї кімнати.", diff --git a/src/i18n/strings/vi.json b/src/i18n/strings/vi.json index 7176f2a568..f1b606ad97 100644 --- a/src/i18n/strings/vi.json +++ b/src/i18n/strings/vi.json @@ -9,21 +9,14 @@ "Whether or not you're logged in (we don't record your username)": "Dù bạn có đăng nhập hay không (chúng tôi không lưu tên đăng nhập của bạn)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Dù bạn có dùng chức năng Richtext của Rich Text Editor hay không", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Dù bạn có dùng chức năng breadcrumbs hay không (avatar trên danh sách phòng)", - "Your identity server's URL": "Đường dẫn identify server của bạn", "e.g. %(exampleValue)s": "ví dụ %(exampleValue)s", "Every page you use in the app": "Mọi trang bạn dùng trong app", "e.g. ": "ví dụ ", - "Your User Agent": "Trình duyệt của bạn", "Your device resolution": "Độ phân giải thiết bị", "Analytics": "Phân tích", "The information being sent to us to help make %(brand)s better includes:": "Thông tin gửi lên máy chủ giúp cải thiện %(brand)s bao gồm:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Trường hợp trang này chứa thông tin định danh như phòng chat, người dùng hoặc mã nhóm, dữ liệu định danh sẽ được loại bỏ trước khi gửi lên máy chủ.", "Call Failed": "Cuộc gọi thất bại", - "Review Devices": "Xác nhận thiết bị", - "Call Anyway": "Vẫn gọi", - "Answer Anyway": "Vẫn trả lời", - "Call": "Gọi", - "Answer": "Trả lời", "Call Timeout": "Hết thời hạn gọi", "The remote side failed to pick up": "Phía được gọi không thể trả lời", "Unable to capture screen": "Không thể chụp màn hình", @@ -32,8 +25,6 @@ "VoIP is unsupported": "VoIP không được hỗ trợ", "You cannot place VoIP calls in this browser.": "Bạn không thể gọi VoIP với trình duyệt này.", "You cannot place a call with yourself.": "Bạn không thể tự gọi cho chính mình.", - "Could not connect to the integration server": "Không thể kết nối tới máy chủ tích hợp", - "A conference call could not be started because the integrations server is not available": "Cuộc gọi hội nghị không thể được khởi tạo vì máy chủ tích hợp không có sẵn", "Call in Progress": "Đang trong cuộc gọi", "A call is currently being placed!": "Một cuộc gọi hiện đang được thực hiện!", "A call is already in progress!": "Một cuộc gọi đang diễn ra!", @@ -48,7 +39,6 @@ "Server may be unavailable, overloaded, or you hit a bug.": "Máy chủ không hoạt động, quá tải hoặc gặp lỗi.", "The server does not support the room version specified.": "Máy chủ không hỗ trợ phiên bản phòng chat.", "Failure to create room": "Khởi tạo phòng thất bại", - "Send anyway": "Vẫn gửi đi", "Send": "Gửi đi", "Sun": "Chủ nhật", "Mon": "Thứ hai", @@ -83,7 +73,6 @@ "Which rooms would you like to add to this community?": "Phòng chat nào bạn muốn thêm vào cộng đồng này?", "Show these rooms to non-members on the community page and room list?": "Hiển thị những phòng này cho người dùng không phải là thành viên?", "Add rooms to the community": "Thêm phòng chat vào cộng đồng", - "Room name or alias": "Tên phòng chat", "Add to community": "Thêm vào cộng đồng", "Failed to invite the following users to %(groupId)s:": "Người dùng sau không thể được mời vào %(groupId)s:", "Failed to invite users to community": "Không thể mời người dùng vào cộng đồng", @@ -98,14 +87,11 @@ "Unable to enable Notifications": "Không thể bật Notification", "This email address was not found": "Địa chỉ email này không tồn tại trong hệ thống", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Email của bạn không được liên kết với một mã Matrix ID nào trên Homeserver này.", - "Registration Required": "Yêu cầu đăng ký", - "You need to register to do this. Would you like to register now?": "Bạn phải đăng ký ký để thực hiện tác vụ. Bạn có muốn đăng ký bay giờ không?", "Register": "Đăng ký", "Default": "Mặc định", "Restricted": "Hạn chế", "Moderator": "Quản trị viên", "Admin": "Admin", - "Start a chat": "Bắt đầu chat", "Operation failed": "Tác vụ thất bại", "Failed to invite": "Không thể mời", "Failed to invite users to the room:": "Mời thành viên vào phòng chat thất bại:", @@ -136,9 +122,7 @@ "This room has no topic.": "Phòng này chưa có chủ đề.", "Sets the room name": "Đặt tên phòng", "Invites user with given id to current room": "Mời thành viên vào phòng hiện tại", - "Joins room with given alias": "Tham gia phòng", "Leave room": "Rời phòng", - "Unrecognised room alias:": "Không xác định được tên phòng:", "Kicks user with given id": "Loại thành viên khỏi phòng", "Bans user with given id": "Cấm thành viên tham gia phòng", "Unbans user with given ID": "Gỡ cấm thành viên", @@ -195,11 +179,6 @@ "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s đã cấm flair đối với %(groups)s.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s đã cho phép flair đối với %(newGroups)s và cấm flair đối với %(oldGroups)s.", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s đã gửi một hình.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s đã thêm %(addedAddresses)s vào danh sách địa chỉ của phòng.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s đã thêm %(addedAddresses)s thành một địa chỉ của phòng.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s đã loại %(removedAddresses)s khỏi danh sách địa chỉ phòng.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s đã loại %(removedAddresses)s khỏi danh sách địa chỉ phòng.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s đã thêm %(addedAddresses)s và đã loại %(removedAddresses)s khỏi danh sách địa chỉ phòng.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s thiết lập địa chỉ chính cho phòng thành %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s đã loại địa chỉ chính của phòng.", "Someone": "Ai đó", @@ -291,7 +270,6 @@ "Group & filter rooms by custom tags (refresh to apply changes)": "Nhóm và lọc phòng chat theo tag tùy biến (làm tươi để áp dụng thay đổi)", "Render simple counters in room header": "Hiển thị số đếm giản đơn ở tiêu đề phòng", "Enable Emoji suggestions while typing": "Cho phép gợi ý Emoji khi đánh máy", - "Use compact timeline layout": "Sử dụng giao diện thời gian rút gọn", "Show a placeholder for removed messages": "Hiển thị khu đánh dấu tin bị xóa", "Show join/leave messages (invites/kicks/bans unaffected)": "Hiển thị tin báo tham gia/rời phòng (mời/đá/cấm không bị ảnh hưởng)", "Show avatar changes": "Hiển thị thay đổi hình đại diện", diff --git a/src/i18n/strings/vls.json b/src/i18n/strings/vls.json index 4904541ade..6c9a9bf002 100644 --- a/src/i18n/strings/vls.json +++ b/src/i18n/strings/vls.json @@ -10,21 +10,14 @@ "Whether or not you're using the Richtext mode of the Rich Text Editor": "Of da je den tekstverwerker al of nie in de modus voor ipgemakte tekst gebruukt", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Of da je de ‘krumeltjes’-functie al of nie gebruukt (avatars boven de gesprekslyste)", "Your homeserver's URL": "Den URL van je thuusserver", - "Your identity server's URL": "Den URL van jen identiteitsserver", "e.g. %(exampleValue)s": "bv. %(exampleValue)s", "Every page you use in the app": "Iedere bladzyde da je in de toepassienge gebruukt", "e.g. ": "bv. ", - "Your User Agent": "Je gebruukersagent", "Your device resolution": "De resolutie van je toestel", "Analytics": "Statistische gegeevns", "The information being sent to us to help make %(brand)s better includes:": "D’informoasje da noar uus wor verstuurd vo %(brand)s te verbetern betreft:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Woar da da blad hier identificeerboare informoasje bevat, gelyk e gespreks-, gebruukers- of groeps-ID, goan deze gegevens verwyderd wordn voorda ze noa de server gestuurd wordn.", "Call Failed": "Iproep mislukt", - "Review Devices": "Toestelln noakykn", - "Call Anyway": "Algelyk belln", - "Answer Anyway": "Algelyk beantwoordn", - "Call": "Belln", - "Answer": "Beantwoordn", "Call Timeout": "Iproeptime-out", "The remote side failed to pick up": "Den andere kant èt nie ipgepakt", "Unable to capture screen": "Kostege geen schermafdruk moakn", @@ -33,8 +26,6 @@ "VoIP is unsupported": "VoIP wor nie oundersteund", "You cannot place VoIP calls in this browser.": "J’en kut in deezn browser gin VoIP-iproepen pleegn.", "You cannot place a call with yourself.": "J’en ku jezelve nie belln.", - "Could not connect to the integration server": "Verbindienge me d’integroasjeserver es mislukt", - "A conference call could not be started because the integrations server is not available": "Me da d’integroasjeserver ounbereikboar is kostege ’t groepsaudiogesprek nie gestart wordn", "Call in Progress": "Loopnd gesprek", "A call is currently being placed!": "’t Wordt al een iproep gemakt!", "A call is already in progress!": "’t Es al e gesprek actief!", @@ -49,7 +40,6 @@ "Server may be unavailable, overloaded, or you hit a bug.": "De server es misschiens ounbereikboar of overbelast, of je zyt e foute tegengekommn.", "The server does not support the room version specified.": "De server oundersteunt deze versie van gesprekkn nie.", "Failure to create room": "Anmoakn van gesprek es mislukt", - "Send anyway": "Algelyk verstuurn", "Send": "Verstuurn", "Sun": "Zun", "Mon": "Moa", @@ -84,7 +74,6 @@ "Which rooms would you like to add to this community?": "Welke gesprekkn wil je toevoegn an deze gemeenschap?", "Show these rooms to non-members on the community page and room list?": "Deze gesprekkn toogn an nie-leedn ip ’t gemeenschapsblad en de gesprekslyste?", "Add rooms to the community": "Voegt gesprekkn toe an de gemeenschap", - "Room name or alias": "Gespreks(by)noame", "Add to community": "Toevoegn an gemeenschap", "Failed to invite the following users to %(groupId)s:": "Uutnodign van de volgende gebruukers in %(groupId)s es mislukt:", "Failed to invite users to community": "Uutnodign van gebruukers in gemeenschap es mislukt", @@ -99,14 +88,11 @@ "Unable to enable Notifications": "Kostege meldiengn nie inschoakeln", "This email address was not found": "Dat e-mailadresse hier es nie gevoundn", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "’t Ziet ernoar uut da jen e-mailadresse ip dezen thuusserver nie an e Matrix-ID es gekoppeld.", - "Registration Required": "Registroasje vereist", - "You need to register to do this. Would you like to register now?": "Hiervoorn moe je je registreern. Wil je da nu doen?", "Register": "Registreern", "Default": "Standoard", "Restricted": "Beperkten toegank", "Moderator": "Moderator", "Admin": "Beheerder", - "Start a chat": "Gesprek beginn", "Operation failed": "Handelienge es mislukt", "Failed to invite": "Uutnodign es mislukt", "Failed to invite users to the room:": "Kostege de volgende gebruukers hier nie uutnodign:", @@ -137,9 +123,7 @@ "This room has no topic.": "Da gesprek hier èt geen ounderwerp.", "Sets the room name": "Stelt de gespreksnoame in", "Invites user with given id to current room": "Nodigt de gebruuker me de gegeevn ID uut in ’t huudig gesprek", - "Joins room with given alias": "Treedt tout ’t gesprek toe me de gegeevn bynoame", "Leave room": "Deuregoan uut ’t gesprek", - "Unrecognised room alias:": "Ounbekende gespreksbynoame:", "Kicks user with given id": "Stuurt de gebruuker me de gegeevn ID uut ’t gesprek", "Bans user with given id": "Verbant de gebruuker me de gegeevn ID", "Unbans user with given ID": "Ountbant de gebruuker me de gegeevn ID", @@ -194,11 +178,6 @@ "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s èt badges vo %(groups)s in da gesprek hier uutgeschoakeld.", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s èt badges in da gesprek hier vo %(newGroups)s in-, en vo %(oldGroups)s uutgeschoakeld.", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s èt e fotootje gestuurd.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s èt de adressn %(addedAddresses)s an da gesprek hier toegekend.", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s èt %(addedAddresses)s als gespreksadresse toegevoegd.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s èt ’t gespreksadresse %(removedAddresses)s verwyderd.", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s èt de gespreksadressn %(removedAddresses)s verwyderd.", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s èt de gespreksadressn %(addedAddresses)s toegevoegd, en %(removedAddresses)s verwyderd.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s èt %(address)s als hoofdadresse vo dit gesprek ingesteld.", "%(senderName)s removed the main address for this room.": "%(senderName)s èt ’t hoofdadresse vo dit gesprek verwyderd.", "Someone": "Etwien", @@ -281,7 +260,6 @@ "Group & filter rooms by custom tags (refresh to apply changes)": "Gesprekkn groepeern en filtern volgens eigen labels (herloadt vo de veranderienge te zien)", "Render simple counters in room header": "Eenvoudige tellers boovnan ’t gesprek toogn", "Enable Emoji suggestions while typing": "Emoticons voorstelln binst ’t typn", - "Use compact timeline layout": "Compacte tydlynindelienge gebruukn", "Show a placeholder for removed messages": "Vullienge toogn vo verwyderde berichtn", "Show join/leave messages (invites/kicks/bans unaffected)": "Berichtn over deelnaomn en verlatiengn toogn (dit èt geen effect ip uutnodigiengn, berispiengn of verbanniengn)", "Show avatar changes": "Veranderiengn van avatar toogn", @@ -308,7 +286,6 @@ "Enable widget screenshots on supported widgets": "Widget-schermafdrukkn inschoakeln ip oundersteunde widgets", "Prompt before sending invites to potentially invalid matrix IDs": "Bevestigienge vroagn voda uutnodigiengn noar meuglik oungeldige Matrix-ID’s wordn verstuurd", "Show developer tools": "Ontwikkeliengsgereedschap toogn", - "Order rooms in the room list by most important first instead of most recent": "Gesprekkn in de gesprekslyste sorteern ip belang in plekke van latste gebruuk", "Show hidden events in timeline": "Verborgn gebeurtenissn ip de tydslyn weregeevn", "Low bandwidth mode": "Lagebandbreedtemodus", "Collecting app version information": "App-versieinformoasje wor verzoameld", @@ -419,7 +396,6 @@ "Confirm password": "Bevestig ’t paswoord", "Change Password": "Paswoord verandern", "Authentication": "Authenticoasje", - "Device ID": "Toestel-ID", "Last seen": "Latst gezien", "Failed to set display name": "Instelln van weergavenoame es mislukt", "Unable to remove contact information": "Kan contactinformoasje nie verwydern", @@ -434,8 +410,6 @@ "Add": "Toevoegn", "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "M'èn joun een e-mail gestuurd vo jen adresse te verifieern. Gelieve de doarin gegeven anwyziengn ip te volgn en ton ip de knop hierounder te klikkn.", "Email Address": "E-mailadresse", - "Disable Notifications": "Meldiengn uutschoakeln", - "Enable Notifications": "Meldiengn inschoakeln", "Delete Backup": "Back-up verwydern", "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Zy je zeker? Je goa je versleuterde berichtn kwytspeeln a je sleuters nie correct geback-upt zyn.", "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Versleuterde berichtn zyn beveiligd me eind-tout-eind-versleuterienge. Alleene d’ountvanger(s) en gy èn de sleuters vo deze berichtn te leezn.", @@ -467,8 +441,6 @@ "Unable to fetch notification target list": "Kostege de bestemmiengslyste vo meldiengn nie iphoaln", "Notification targets": "Meldiengsbestemmiengn", "Advanced notification settings": "Geavanceerde meldiengsinstelliengn", - "There are advanced notifications which are not shown here": "Der zyn geavanceerde meldiengn dat hier nie getoogd wordn", - "You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply": "J’è ze meuglik ingesteld in een andere cliënt als %(brand)s. Je ku ze nie anpassn in %(brand)s, moa ze zyn wel actief", "Show message in desktop notification": "Bericht toogn in bureaubladmeldienge", "Off": "Uut", "On": "An", @@ -491,8 +463,6 @@ "Phone numbers": "Telefongnumero’s", "Language and region": "Toale en regio", "Theme": "Thema", - "Light theme": "Licht thema", - "Dark theme": "Dounker thema", "Account management": "Accountbeheer", "Deactivating your account is a permanent action - be careful!": "’t Deactiveern van jen account ku nie oungedoan gemakt wordn - zy voorzichtig!", "Deactivate Account": "Account deactiveern", @@ -591,7 +561,6 @@ "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.": "Van zodra da de versleuterienge voor e gesprek es ingeschoakeld gewist, es ’t nie mi meuglik van ’t were uut te schoakeln. Berichtn da in e versleuterd gesprek wordn verstuurd wordn nie gezien deur de server, alleene moa deur de deelnemers an ’t gesprek. Deur de versleuterienge in te schoakeln kunn veel robots en overbruggiengen nie juste functioneern. Leest meer over de versleuterienge.", "Guests cannot join this room even if explicitly invited.": "Gastn kunn nie tout dit gesprek toetreedn, zelfst nie as ze uutdrukkelik uutgenodigd gewist zyn.", "Click here to fix": "Klikt hier vo dit ip te lossen", - "To link to this room, please add an alias.": "Voegt een bynoame toe vo noa dit gesprek te verwyzn.", "Only people who have been invited": "Alleen menschn dat uutgenodigd gewist zyn", "Anyone who knows the room's link, apart from guests": "Iedereen da de koppelienge van ’t gesprek kent, behalve gastn", "Anyone who knows the room's link, including guests": "Iedereen da de koppelienge van ’t gesprek kent, inclusief gastn", @@ -619,8 +588,6 @@ "%(senderName)s uploaded a file": "%(senderName)s èt e bestand ipgeloaden", "Key request sent.": "Sleuterverzoek verstuurd.", "Please select the destination room for this message": "Selecteer ’t bestemmingsgesprek vo dit bericht", - "Scroll to bottom of page": "Scrollt noa den onderkant van ’t blad", - "device id: ": "toestel-ID: ", "Disinvite": "Uutnodigienge intrekkn", "Kick": "Uut ’t gesprek stuurn", "Disinvite this user?": "Uutnodigienge vo deze gebruuker intrekkn?", @@ -634,7 +601,6 @@ "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.": "Je kut deze actie nie oungedoan moakn omda je jen eigen degradeert. A je de latste bevoorrechte gebruuker in ’t gesprek zyt, is ’t ounmeuglik van deze rechtn were te krygn.", "Demote": "Degradeern", "Failed to mute user": "Dempn van gebruuker es mislukt", - "Failed to toggle moderator status": "Anpassn van moderatorstatus es mislukt", "Failed to change power level": "Wyzign van ’t machtsniveau es mislukt", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Je kut deze veranderiengn nie oungedoan moakn angezien da je de gebruuker tout ’tzelfste niveau als jen eigen promoveert.", "Ignore": "Negeern", @@ -642,12 +608,8 @@ "Mention": "Vermeldn", "Invite": "Uutnodign", "Share Link to User": "Koppelienge me de gebruuker deeln", - "User Options": "Gebruukersopties", - "Direct chats": "Twigesprekkn", "Unmute": "Nie dempn", "Mute": "Dempn", - "Revoke Moderator": "Moderator degradeern", - "Make Moderator": "Benoemn tout moderator", "Admin Tools": "Beheerdersgereedschap", "Close": "Sluutn", "and %(count)s others...|other": "en %(count)s anderen…", @@ -661,9 +623,7 @@ "Hangup": "Iphangn", "Upload file": "Bestand iploadn", "Send an encrypted reply…": "Verstuurt e versleuterd antwoord…", - "Send a reply (unencrypted)…": "Verstuurt een antwoord (ounversleuterd)…", "Send an encrypted message…": "Verstuurt e versleuterd bericht…", - "Send a message (unencrypted)…": "Verstuurt een bericht (ounversleuterd)…", "The conversation continues here.": "’t Gesprek goat hier verder.", "This room has been replaced and is no longer active.": "Dit gesprek is vervangn gewist en is nie langer actief.", "You do not have permission to post to this room": "J’èt geen toestemmienge voor in dit gesprek te postn", @@ -763,16 +723,9 @@ "Jump to first unread message.": "Spriengt noa ’t eeste oungeleezn bericht.", "Error updating main address": "Foute by ’t bywerkn van ’t hoofdadresse", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "’t Es e foute ipgetreedn by ’t bywerkn van ’t hoofdadresse van ’t gesprek. Dit wor meugliks nie toegeloatn deur de server, of der es een tydelik probleem ipgetreedn.", - "Error creating alias": "Foute by ’t anmoakn van de bynoame", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "’t Es e foute ipgetreedn by ’t anmoakn van die bynoame. Dit wor meugliks nie toegeloatn deur de server, of der is een tydelik probleem ipgetreedn.", - "Error removing alias": "Foute by ’t verwydern van de bynoame", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "’t Es e foute ipgetreedn by ’t verwydern van die bynoame. Meugliks bestoa ze nie mi, of der es een tydelike foute ipgetreedn.", "Main address": "Hoofdadresse", "not specified": "nie ingegeevn", - "Remote addresses for this room:": "Externe adressn vo dit gesprek:", - "Local addresses for this room:": "Lokoale adressn vo dit gesprek:", "This room has no local addresses": "Dit gesprek è geen lokoale adressn", - "New address (e.g. #foo:%(localDomain)s)": "Nieuw adresse (bv. #foo:%(localDomain)s)", "Error updating flair": "Foute by ’t bywerkn van de badge", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "’t Es e foute ipgetreedn by ’t bywerkn van de badge vo dit gesprek. De server oundersteunt dit meugliks nie, of der es een tydelike foute ipgetreedn.", "Invalid community ID": "Oungeldige gemeenschaps-ID", @@ -822,9 +775,6 @@ "Add an Integration": "Voegt een integroasje toe", "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?": "Je goa sebiet noar en derdepartywebsite gebracht wordn zoda je den account ku legitimeern vo gebruuk me %(integrationsUrl)s. Wil je verdergoan?", "edited": "bewerkt", - "Removed or unknown message type": "Verwyderd of ounbekend berichttype", - "Message removed by %(userId)s": "Bericht verwyderd deur %(userId)s", - "Message removed": "Bericht verwyderd", "Remove from community": "Verwydern uut de gemeenschap", "Disinvite this user from community?": "Uutnodigienge vo deze gebruuker tout de gemeenschap intrekkn?", "Remove this user from community?": "Deze gebruuker uut de gemeenschap verwydern?", @@ -847,20 +797,12 @@ "Something went wrong when trying to get your communities.": "’t Ging etwa verkeerd by ’t iphoaln van je gemeenschappn.", "Display your community flair in rooms configured to show it.": "Toogt je gemeenschapsbadge in gesprekkn da doarvoorn ingesteld gewist zyn.", "You're not currently a member of any communities.": "Je zy vo de moment geen lid van e gemeenschap.", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Helpt mee me %(brand)s te verbetern door anonieme gebruuksgegeevns te verstuurn. Dit goat een cookie gebruukn (bekykt hiervoorn uus cookiebeleid).", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "Helpt mee me %(brand)s te verbetern door anonieme gebruuksgegeevns te verstuurn. Dit goat een cookie gebruukn.", - "Yes, I want to help!": "Joak, ’k willn ik helpn!", "You are not receiving desktop notifications": "J’ontvangt vo de moment geen bureaubladmeldiengn", "Enable them now": "Deze nu inschoakeln", "What's New": "Wuk es ’t er nieuw", "Update": "Bywerkn", "What's new?": "Wuk es ’t er nieuw?", - "A new version of %(brand)s is available.": "Der es e nieuwe versie van %(brand)s beschikboar.", - "To return to your account in future you need to set a password": "Voor in de toekomst noa jen account were te keren es ’t nodig van e paswoord in te stelln", "Set Password": "Paswoord instelln", - "Please contact your service administrator to get this limit increased.": "Gelieve contact ip te neemn me je dienstbeheerder vo deze limiet te verhoogn.", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Deze thuusserver è z’n limiet vo moandeliks actieve gebruukers bereikt, woadeure da sommige gebruukers hunder nie goan kunn anmeldn.", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Deze thuusserver èt één van z’n systeembronlimietn overschreedn, woadeure da sommige gebruukers hunder nie goan kunn anmeldn.", "Error encountered (%(errorDetail)s).": "’t Es e foute ipgetreedn (%(errorDetail)s).", "Checking for an update...": "Bezig me te controleern ip updates…", "No update available.": "Geen update beschikboar.", @@ -877,10 +819,6 @@ "Maximize apps": "Apps maximaliseern", "Popout widget": "Widget in e nieuwe veinster openn", "Create new room": "E nieuw gesprek anmoakn", - "Unblacklist": "Deblokkeern", - "Blacklist": "Blokkeern", - "Unverify": "Ountverifieern", - "Verify...": "Verifieern…", "Join": "Deelneemn", "No results": "Geen resultoatn", "Communities": "Gemeenschappn", @@ -989,7 +927,6 @@ "Create Room": "Gesprek anmoakn", "Sign out": "Afmeldn", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Vo je gespreksgeschiedenisse nie kwyt te speeln, moe je je gesprekssleuters exporteern vooraleer da je jen afmeldt. Je goa moetn werekeern noa de nieuwere versie van %(brand)s vo dit te doen", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "J’èt al e ki e nieuwere versie van %(brand)s ip %(host)s gebruukt. Vo deze versie were met eind-tout-eind-versleuterienge te gebruukn, goa je je moetn afmeldn en were anmeldn. ", "Incompatible Database": "Incompatibele database", "Continue With Encryption Disabled": "Verdergoan me versleuterienge uutgeschoakeld", "Unknown error": "Ounbekende foute", @@ -999,14 +936,6 @@ "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.": "De zichtboarheid van berichtn in Matrix is lik by e-mails. ’t Vergeetn van je berichtn betekent da berichtn da je gy è verstuurd nie mi gedeeld goan wordn me nieuwe of oungeregistreerde gebruukers, mo geregistreerde gebruukers dat al toegank han tout deze berichtn goan nog assan toegank èn tout hunder eigen kopie dervan.", "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)": "Vergeet alle berichtn dan ’kik verstuurd ghed èn wanneer da myn account gedeactiveerd gewist es (Let ip: dit goat der voorn zorgn da toekomstige gebruukers een ounvolledig beeld krygn van gesprekkn)", "To continue, please enter your password:": "Gif je paswoord in vo verder te goan:", - "Use Legacy Verification (for older clients)": "Verouderde verificoasje gebruukn (voor oudere cliëntn)", - "Verify by comparing a short text string.": "Verifieert deur e korte tekenreekse te vergelykn.", - "Begin Verifying": "Verificoasje beginn", - "Waiting for partner to accept...": "An ’t wachtn ip de partner…", - "Nothing appearing? Not all clients support interactive verification yet. .": "Verschynt er nietent? Nog nie alle cliëntn biedn oundersteunienge voor interactieve verificoasje. .", - "Waiting for %(userId)s to confirm...": "Wachtn ip bevestigienge van %(userId)s…", - "Use two-way text verification": "Twirichtiengstekstverificoasje gebruukn", - "I verify that the keys match": "’k Verifieern dan de sleuters overeenkommn", "Back": "Were", "Send Custom Event": "Angepaste gebeurtenisse verstuurn", "You must specify an event type!": "Je moet e gebeurtenistype ingeevn!", @@ -1026,10 +955,6 @@ "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verifieert deze gebruuker vo n’hem/heur als vertrouwd te markeern. Gebruukers vertrouwn gift je extra gemoedsrust by ’t gebruuk van eind-tout-eind-versleuterde berichtn.", "Waiting for partner to confirm...": "Wachtn ip bevestigienge van partner…", "Incoming Verification Request": "Inkomend verificoasjeverzoek", - "Start verification": "Verificoasje beginn", - "Share without verifying": "Deeln zounder verificoasje", - "Ignore request": "Verzoek negeern", - "Encryption key request": "Verzoek vo versleuteriengssleuter", "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.": "J’èt al e ki %(brand)s ip %(host)s gebruukt me lui loadn van leedn ingeschoakeld. In deze versie is lui laden uutgeschoakeld. Me da de lokoale cache nie compatibel is tusschn deze twi instelliengn, moe %(brand)s jen account hersynchroniseern.", "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.": "Indien dat d’andere versie van %(brand)s nog in een ander tabblad is geopend, sluut je da best, want %(brand)s ip dezelfsten host tegelykertyd me lui loadn ingeschoakeld en uutgeschoakeld gebruukn goa vo probleemn zorgn.", "Incompatible local cache": "Incompatibele lokoale cache", @@ -1107,28 +1032,19 @@ "Remember my selection for this widget": "Onthoudt myn keuze vo deze widget", "Deny": "Weigern", "Unable to load backup status": "Kostege back-upstatus nie loadn", - "Recovery Key Mismatch": "Herstelsleuter kom nie overeen", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Den back-up kostege me deze sleuter nie ountsleuterd wordn: controleert of da je de juste herstelsleuter èt ingegeevn.", - "Incorrect Recovery Passphrase": "Verkeerd herstelpaswoord", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Den back-up kostege me dit paswoord nie ountsleuterd wordn: controleert of da je ’t juste herstelpaswoord èt ingegeevn.", "Unable to restore backup": "Kostege back-up nie herstelln", "No backup found!": "Geen back-up gevoundn!", - "Backup Restored": "Back-up hersteld", "Failed to decrypt %(failedCount)s sessions!": "Ountsleutern van %(failedCount)s sessies is mislukt!", - "Restored %(sessionCount)s session keys": "%(sessionCount)s sessiesleuters hersteld", - "Enter Recovery Passphrase": "Gif ’t herstelpaswoord in", "Warning: you should only set up key backup from a trusted computer.": "Let ip: stelt sleuterback-up alleene moar in ip e vertrouwde computer.", "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Verkrygt toegank tout je beveiligde berichtgeschiedenisse en stel beveiligd chattn in door jen herstelpaswoord in te geevn.", "Next": "Volgende", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "A je jen herstelpaswoord zy vergeetn, ku je jen herstelsleuter gebruukn of nieuwe herstelopties instelln", - "Enter Recovery Key": "Gift de herstelsleuter in", "This looks like a valid recovery key!": "Dit is e geldigen herstelsleuter!", "Not a valid recovery key": "Geen geldigen herstelsleuter", "Access your secure message history and set up secure messaging by entering your recovery key.": "Verkrygt toegank tout je beveiligde berichtgeschiedenisse en stel beveiligd chattn in door jen herstelsleuter in te geevn.", "Private Chat": "Privégesprek", "Public Chat": "Openboar gesprek", "Custom": "Angepast", - "Alias (optional)": "Bynoame (optioneel)", "Reject invitation": "Uutnodigienge weigern", "Are you sure you want to reject the invitation?": "Zy je zeker da je d’uutnodigienge wil weigern?", "Unable to reject invite": "Kostege d’uutnodigienge nie weigern", @@ -1145,7 +1061,6 @@ "Quote": "Citeern", "Source URL": "Bron-URL", "Collapse Reply Thread": "Reactiekettienge toeklappn", - "End-to-end encryption information": "Info over eind-tout-eind-versleuterienge", "Failed to set Direct Message status of room": "Instelln van twigesprekstoestand van gesprek is mislukt", "unknown error code": "ounbekende foutcode", "Failed to forget room %(errCode)s": "Vergeetn van gesprek is mislukt %(errCode)s", @@ -1168,7 +1083,6 @@ "This homeserver would like to make sure you are not a robot.": "Deze thuusserver wil geirn weetn of da je gy geen robot zyt.", "Custom Server Options": "Angepaste serverinstelliengn", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Je kut de angepaste serveropties gebruukn vo jen an te meldn by andere Matrix-servers, deur een andere thuusserver-URL in te geevn. Dit biedt je de meuglikheid vo deze toepassienge te gebruukn met een bestoande Matrix-account ip een andere thuusserver.", - "To continue, please enter your password.": "Gif je paswoord in vo verder te goan.", "Please review and accept all of the homeserver's policies": "Gelieve ’t beleid van de thuusserver te leezn en ’anveirdn", "Please review and accept the policies of this homeserver:": "Gelieve ’t beleid van deze thuusserver te leezn en t’anveirdn:", "An email has been sent to %(emailAddress)s": "’t Is een e-mail noa %(emailAddress)s verstuurd gewist", @@ -1298,11 +1212,9 @@ "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s kostege de protocollyste nie iphoaln van de thuusserver. Meugliks is de thuusserver te oud vo derdepartynetwerkn t’oundersteunn.", "%(brand)s failed to get the public room list.": "%(brand)s kostege de lyste met openboare gesprekkn nie verkrygn.", "The homeserver may be unavailable or overloaded.": "De thuusserver is meugliks ounbereikboar of overbelast.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "De bynoame %(alias)s verwydern en %(name)s uut de cataloog verwydern?", "Remove %(name)s from the directory?": "%(name)s uut de cataloog verwydern?", "Remove from Directory": "Verwydern uut cataloog", "remove %(name)s from the directory.": "verwydert %(name)s uut de cataloog.", - "delete the alias.": "verwydert de bynoame.", "The server may be unavailable or overloaded": "De server is meuglik ounbereikboar of overbelast", "Unable to join network": "Kostege nie toetreedn tout dit netwerk", "%(brand)s does not know how to join a room on this network": "%(brand)s weet nie hoe da ’t moet deelneemn an e gesprek ip dit netwerk", @@ -1327,7 +1239,6 @@ "Search failed": "Zoekn mislukt", "Server may be unavailable, overloaded, or search timed out :(": "De server is misschiens ounbereikboar of overbelast, of ’t zoekn deurdege te lank :(", "No more results": "Geen resultoatn nie mi", - "Unknown room %(roomId)s": "Ounbekend gesprek %(roomId)s", "Room": "Gesprek", "Failed to reject invite": "Weigern van d’uutnodigienge is mislukt", "You have %(count)s unread notifications in a prior version of this room.|other": "J’èt %(count)s oungeleezn meldiengn in e voorgoande versie van dit gesprek.", @@ -1394,22 +1305,8 @@ "Notify the whole room": "Loat dit an gans ’t groepsgesprek weetn", "Room Notification": "Groepsgespreksmeldienge", "Users": "Gebruukers", - "unknown device": "ounbekend toestel", - "NOT verified": "NIE geverifieerd", - "Blacklisted": "Geblokkeerd", - "verified": "geverifieerd", "Name": "Noame", - "Verification": "Verificoasje", - "Ed25519 fingerprint": "Ed25519-viengerafdruk", - "User ID": "Gebruukers-ID", - "Curve25519 identity key": "Curve25519-identiteitssleuter", - "none": "geen", - "Claimed Ed25519 fingerprint key": "Geclaimde Ed25519-viengerafdrukssleuter", - "Algorithm": "Algoritme", - "unencrypted": "ounversleuterd", - "Decryption error": "Ountsleuteriengsfoute", "Session ID": "Sessie-ID", - "Event information": "Gebeurtenisinformoasje", "Passphrases must match": "Paswoordn moetn overeenkommn", "Passphrase must not be empty": "Paswoord meug nie leeg zyn", "Export room keys": "Gesprekssleuters exporteern", @@ -1423,34 +1320,18 @@ "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "’t Geëxporteerd bestand is beveiligd met e paswoord. Gift da paswoord hier in vo ’t bestand t’ountsleutern.", "File to import": "T’importeern bestand", "Import": "Importeern", - "Great! This passphrase looks strong enough.": "Top! Dit paswoord ziet der sterk genoeg uut.", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "We bewoarn e versleuterde kopie van je sleuters ip uzze server. Bescherm je back-up met e paswoord vo n’hem veilig t’houdn.", "For maximum security, this should be different from your account password.": "Vo maximoale veiligheid zoudt dit moetn verschilln van jen accountpaswoord.", - "Enter a passphrase...": "Gift e paswoord in…", - "Set up with a Recovery Key": "Instelln met een herstelsleuter", "That matches!": "Da komt overeen!", "That doesn't match.": "Da kom nie overeen.", "Go back to set it again.": "Goa were vo ’t herin te stelln.", - "Please enter your passphrase a second time to confirm.": "Gif je paswoord nog e keer in vo te bevestign.", - "Repeat your passphrase...": "Herhoal je paswoord…", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Als veiligheidsnet ku je dit gebruukn vo je versleuterde berichtgeschiedenisse t’herstelln indien da je jen herstelpaswoord zou vergeetn.", - "As a safety net, you can use it to restore your encrypted message history.": "Als veiligheidsnet ku je ’t gebruukn vo je versleuterde berichtgeschiedenisse t’herstelln.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Jen herstelsleuter is e veiligheidsnet - je kut hem gebruukn vo de toegank tou je versleuterde berichtn t’herstelln indien da je je paswoord zou vergeetn.", - "Your Recovery Key": "Jen herstelsleuter", - "Copy to clipboard": "Kopieern noa ’t klembord", "Download": "Downloadn", "Print it and store it somewhere safe": "Print hem af en bewoart hem ip e veilige plekke", "Save it on a USB key or backup drive": "Sloat hem ip ip een USB-stick of e back-upschyf", "Copy it to your personal cloud storage": "Kopieert hem noa je persoonlike cloudipslag", "Your keys are being backed up (the first backup could take a few minutes).": "’t Wordt e back-up van je sleuters gemakt (den eesten back-up kut e poar minuutn deurn).", "Set up Secure Message Recovery": "Veilig berichtherstel instelln", - "Secure your backup with a passphrase": "Beveilig je back-up met e paswoord", - "Confirm your passphrase": "Bevestig je paswoord", - "Recovery key": "Herstelsleuter", - "Keep it safe": "Bewoart hem ip e veilige plekke", "Starting backup...": "Back-up wor gestart…", "Success!": "Gereed!", - "Create Key Backup": "Sleuterback-up anmoakn", "Unable to create key backup": "Kostege de sleuterback-up nie anmoakn", "Retry": "Herprobeern", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Zounder veilig berichtherstel in te stelln, goa je je versleuterde berichtgeschiedenisse kwytspeeln wanneer da je jen afmeldt.", @@ -1467,7 +1348,6 @@ "Failed to set direct chat tag": "Instelln van twigesprekslabel is mislukt", "Failed to remove tag %(tagName)s from room": "Verwydern van %(tagName)s-label van gesprek is mislukt", "Failed to add tag %(tagName)s to room": "Toevoegn van %(tagName)s-label an gesprek is mislukt", - "Show recently visited rooms above the room list": "Recent bezochte gesprekken bovenoan de gesprekslyste weregeevn", "Uploaded sound": "Ipgeloadn-geluud", "Sounds": "Geluudn", "Notification sound": "Meldiengsgeluud", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 9caa26e6ad..41d37acc6a 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -5,10 +5,7 @@ "/ddg is not a command": "/ddg 不是一个命令", "Deactivate Account": "销毁账号", "Decrypt %(text)s": "解密 %(text)s", - "Decryption error": "解密出错", "Default": "默认", - "Device ID": "设备 ID", - "Direct chats": "私聊", "Disinvite": "取消邀请", "Displays action": "显示操作", "Download %(text)s": "下载 %(text)s", @@ -16,10 +13,8 @@ "Email address": "邮箱地址", "Emoji": "表情", "%(senderName)s ended the call.": "%(senderName)s 结束了通话。", - "End-to-end encryption information": "端到端加密信息", "Error": "错误", "Error decrypting attachment": "解密附件时出错", - "Event information": "事件信息", "Existing Call": "当前通话", "Export E2E room keys": "导出聊天室的端到端加密密钥", "Failed to ban user": "封禁失败", @@ -35,7 +30,6 @@ "Failed to send email": "发送邮件失败", "Failed to send request.": "请求发送失败。", "Failed to set display name": "设置昵称失败", - "Failed to toggle moderator status": "无法切换管理员权限", "Failed to unban": "解除封禁失败", "Failed to verify email address: make sure you clicked the link in the email": "邮箱验证失败: 请确保你已点击邮件中的链接", "Failure to create room": "创建聊天室失败", @@ -63,7 +57,6 @@ "Room %(roomId)s not visible": "聊天室 %(roomId)s 已隐藏", "Room Colour": "聊天室颜色", "Rooms": "聊天室", - "Scroll to bottom of page": "滚动到页面底部", "Search": "搜索", "Search failed": "搜索失败", "Searches DuckDuckGo for results": "搜索 DuckDuckGo", @@ -84,14 +77,12 @@ "Sign out": "注销", "%(count)s of your messages have not been sent.|other": "部分消息未发送。", "Someone": "某位用户", - "Start a chat": "创建聊天", "Submit": "提交", "Success": "成功", "This email address is already in use": "此邮箱地址已被使用", "This email address was not found": "未找到此邮箱地址", "The email address linked to your account must be entered.": "必须输入和你账号关联的邮箱地址。", "Advanced": "高级", - "Algorithm": "算法", "Always show message timestamps": "总是显示消息时间戳", "A new password must be entered.": "必须输入新密码。", "%(senderName)s answered the call.": "%(senderName)s 接了通话。", @@ -104,7 +95,6 @@ "Click here to fix": "点击这里以修复", "Confirm password": "确认密码", "Continue": "继续", - "Ed25519 fingerprint": "Ed25519指纹", "Join Room": "加入聊天室", "%(targetName)s joined the room.": "%(targetName)s 已加入聊天室。", "Jump to first unread message.": "跳到第一条未读消息。", @@ -121,7 +111,6 @@ "Microphone": "麦克风", "Camera": "摄像头", "Authentication": "认证", - "Alias (optional)": "别名(可选)", "%(items)s and %(lastItem)s": "%(items)s 和 %(lastItem)s", "and %(count)s others...|other": "和其它 %(count)s 个...", "and %(count)s others...|one": "和其它一个...", @@ -132,7 +121,6 @@ "Are you sure you want to leave the room '%(roomName)s'?": "你确定要退出聊天室 “%(roomName)s” 吗?", "Are you sure you want to reject the invitation?": "你确定要拒绝邀请吗?", "Bans user with given id": "按照 ID 封禁指定的用户", - "Blacklisted": "已拉黑", "Call Timeout": "通话超时", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "无法连接主服务器 - 请检查网络连接,确保你的主服务器 SSL 证书被信任,且没有浏览器插件拦截请求。", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "当浏览器地址栏里有 HTTPS 的 URL 时,不能使用 HTTP 连接主服务器。请使用 HTTPS 或者允许不安全的脚本。", @@ -153,10 +141,7 @@ "Custom": "自定义", "Custom level": "自定义级别", "Decline": "拒绝", - "device id: ": "设备 ID: ", - "Disable Notifications": "关闭消息通知", "Drop File Here": "把文件拖拽到这里", - "Enable Notifications": "启用消息通知", "Enter passphrase": "输入密码", "Error: Problem communicating with the given homeserver.": "错误: 与指定的主服务器通信时出错。", "Export": "导出", @@ -179,12 +164,10 @@ "Mute": "静音", "Name": "姓名", "New passwords don't match": "两次输入的新密码不符", - "none": "无", "not specified": "未指定", "Notifications": "通知", "(not supported by this browser)": "(未被此浏览器支持)", "": "<不支持>", - "NOT verified": "未验证", "No display name": "无昵称", "No results": "没有更多结果", "OK": "确定", @@ -205,11 +188,7 @@ "Account": "账户", "Add": "添加", "Allow": "允许", - "Claimed Ed25519 fingerprint key": "声称的 Ed25519 指纹密钥", - "Could not connect to the integration server": "无法连接关联的服务器", - "Curve25519 identity key": "Curve25519 认证密钥", "Edit": "编辑", - "Joins room with given alias": "通过指定的别名加入聊天室", "Labs": "实验室", "%(targetName)s left the room.": "%(targetName)s 退出了聊天室。", "Logout": "登出", @@ -224,8 +203,6 @@ "%(targetName)s rejected the invitation.": "%(targetName)s 拒绝了邀请。", "Reject invitation": "拒绝邀请", "Users": "用户", - "Verification": "验证", - "verified": "已验证", "Verified key": "已验证的密钥", "Video call": "视频通话", "Voice call": "语音通话", @@ -235,7 +212,6 @@ "Warning!": "警告!", "You must register to use this functionality": "你必须 注册 以使用此功能", "You need to be logged in.": "你需要登录。", - "Make Moderator": "使成为主持人", "Room": "聊天室", "Connectivity to the server has been lost.": "到服务器的连接已经丢失。", "New Password": "新密码", @@ -249,11 +225,7 @@ "Failed to invite": "邀请失败", "Unknown error": "未知错误", "Incorrect password": "密码错误", - "To continue, please enter your password.": "请输入你的密码继续。", - "I verify that the keys match": "我验证此密钥匹配", "Unable to restore session": "无法恢复会话", - "Blacklist": "列入黑名单", - "Unverify": "取消验证", "ex. @bob:example.com": "例如 @bob:example.com", "Add User": "添加用户", "Token incorrect": "令牌错误", @@ -265,8 +237,6 @@ "Username available": "用户名可用", "Username not available": "用户名不可用", "Skip": "跳过", - "Start verification": "开始验证", - "Ignore request": "忽略请求", "Example": "例子", "Create": "创建", "Failed to upload image": "上传图像失败", @@ -281,15 +251,11 @@ "Kick": "移除", "Kicks user with given id": "按照 ID 移除特定的用户", "Last seen": "最近一次上线", - "Local addresses for this room:": "此聊天室的本地地址:", "New passwords must match each other.": "新密码必须互相匹配。", "Power level must be positive integer.": "滥权等级必须是正整数。", - "Revoke Moderator": "撤销主持人", - "Remote addresses for this room:": "此聊天室的远程地址:", "Results from DuckDuckGo": "来自 DuckDuckGo 的结果", "%(roomName)s does not exist.": "%(roomName)s 不存在。", "Save": "保存", - "Send anyway": "仍然发送", "This room has no local addresses": "此聊天室没有本地地址", "This doesn't appear to be a valid email address": "这似乎不是有效的邮箱地址", "This phone number is already in use": "此手机号码已被使用", @@ -299,9 +265,7 @@ "Unban": "解除封禁", "Unable to capture screen": "无法录制屏幕", "Unable to enable Notifications": "无法启用通知", - "unencrypted": "未加密的", "unknown caller": "未知呼叫者", - "unknown device": "未知设备", "Unnamed Room": "未命名的聊天室", "Upload avatar": "上传头像", "Upload Failed": "上传失败", @@ -310,7 +274,6 @@ "Who can read history?": "谁可以阅读历史消息?", "You are not in this room.": "您不在此聊天室中。", "You have no visible notifications": "没有可见的通知", - "Unblacklist": "移出黑名单", "Not a valid %(brand)s keyfile": "不是有效的 %(brand)s 密钥文件", "%(targetName)s accepted an invitation.": "%(targetName)s 已接受邀请。", "Publish this room to the public in %(domain)s's room directory?": "是否将此聊天室发布至 %(domain)s 的聊天室目录中?", @@ -344,8 +307,6 @@ "Unable to add email address": "无法添加邮箱地址", "Automatically replace plain text Emoji": "将符号表情转换为 Emoji", "Unable to verify email address.": "无法验证邮箱地址。", - "Unknown room %(roomId)s": "未知聊天室 %(roomId)s", - "Unrecognised room alias:": "无法识别的聊天室别名:", "(no answer)": "(无回复)", "Who can access this room?": "谁有权访问此聊天室?", "You are already in a call.": "您正在通话。", @@ -358,7 +319,6 @@ "An error occurred: %(error_string)s": "发生了一个错误: %(error_string)s", "There are no visible files in this room": "此聊天室中没有可见的文件", "Active call": "当前通话", - "Verify...": "验证...", "Error decrypting audio": "解密音频时出错", "Error decrypting image": "解密图像时出错", "Error decrypting video": "解密视频时出错", @@ -368,9 +328,7 @@ "Something went wrong!": "出了点问题!", "If you already have a Matrix account you can log in instead.": "若您已经拥有 Matrix 帐号,您也可以 登录。", "Do you want to set an email address?": "您想要设置一个邮箱地址吗?", - "New address (e.g. #foo:%(localDomain)s)": "新的地址(例如 #foo:%(localDomain)s)", "Upload new:": "上传新的:", - "User ID": "用户 ID", "Username invalid: %(errMessage)s": "用户名无效: %(errMessage)s", "Verification Pending": "验证等待中", "(unknown failure: %(reason)s)": "(未知错误:%(reason)s)", @@ -418,29 +376,20 @@ "Please check your email to continue registration.": "请查看你的电子邮件以继续注册。", "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "如果不指定一个邮箱地址,您将无法重置你的密码。你确定吗?", "Add an Integration": "添加集成", - "Removed or unknown message type": "被移除或未知的消息类型", "Ongoing conference call%(supportedText)s.": "正在进行的会议通话 %(supportedText)s.", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s 修改了 %(roomName)s 的头像", "This will be your account name on the homeserver, or you can pick a different server.": "这将会成为你在 主服务器上的账户名,或者你可以选择一个 不同的服务器。", "Your browser does not support the required cryptography extensions": "你的浏览器不支持 %(brand)s 所需的密码学特性", "Authentication check failed: incorrect password?": "身份验证失败:密码错误?", "This will allow you to reset your password and receive notifications.": "这将允许你重置你的密码和接收通知。", - "Share without verifying": "不验证就分享", - "Encryption key request": "加密密钥请求", "%(widgetName)s widget added by %(senderName)s": "%(senderName)s 添加了 %(widgetName)s 小挂件", "%(widgetName)s widget removed by %(senderName)s": "%(senderName)s 移除了 %(widgetName)s 小挂件", "%(widgetName)s widget modified by %(senderName)s": "%(senderName)s 修改了 %(widgetName)s 小挂件", "Unpin Message": "取消置顶消息", "Add rooms to this community": "添加聊天室到此社区", "Call Failed": "呼叫失败", - "Review Devices": "复查设备", - "Call Anyway": "仍然呼叫", - "Answer Anyway": "仍然接听", - "Call": "呼叫", - "Answer": "接听", "Invite new community members": "邀请新社区成员", "Invite to Community": "邀请到社区", - "Room name or alias": "聊天室名称或别名", "Ignored user": "已忽略的用户", "You are now ignoring %(userId)s": "你正在忽视 %(userId)s", "Unignored user": "未忽略的用户", @@ -450,7 +399,6 @@ "%(senderName)s changed the pinned messages for the room.": "%(senderName)s 更改了聊天室的置顶消息。", "Send": "发送", "Message Pinning": "消息置顶", - "Use compact timeline layout": "使用紧凑的时间线布局", "Enable URL previews for this room (only affects you)": "在此聊天室中启用链接预览(仅影响你)", "Enable URL previews by default for participants in this room": "对此聊天室的所有成员默认启用链接预览", "%(senderName)s sent an image": "%(senderName)s 发送了一张图片", @@ -461,7 +409,6 @@ "Jump to read receipt": "跳到阅读回执", "Mention": "提及", "Invite": "邀请", - "User Options": "用户选项", "Jump to message": "跳到消息", "No pinned messages.": "没有置顶消息。", "Loading...": "正在加载...", @@ -471,7 +418,6 @@ "World readable": "公开可读", "Guests can join": "访客可以加入", "No rooms to show": "无聊天室", - "Message removed": "消息已移除", "An email has been sent to %(emailAddress)s": "一封邮件已发送到 %(emailAddress)s", "A text message has been sent to %(msisdn)s": "一封短信已发送到 %(msisdn)s", "Visible to everyone": "对所有人可见", @@ -509,17 +455,14 @@ "Leave": "退出", "Description": "描述", "Warning": "警告", - "Light theme": "浅色主题", - "Dark theme": "深色主题", "Room Notification": "聊天室通知", "The platform you're on": "您使用的平台是", - "The version of %(brand)s": "%(brand)s 的版本是", + "The version of %(brand)s": "%(brand)s版本", "Your language of choice": "您选择的语言是", "Which officially provided instance you are using, if any": "您正在使用的任何官方 %(brand)s 实现(如果有的话)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "您是否正在使用富文本编辑器的富文本模式", "Your homeserver's URL": "您的主服务器的链接", - "Your identity server's URL": "您的身份认证服务器的链接", - "The information being sent to us to help make %(brand)s better includes:": "将要为帮助 %(brand)s 发展而发送的信息包含:", + "The information being sent to us to help make %(brand)s better includes:": "发送信息给我们以帮助%(brand)s:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "此页面中含有可用于识别您身份的信息,比如聊天室、用户或群组 ID,这些数据会在发送到服务器前被移除。", "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s", "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(monthName)s %(day)s %(time)s, %(weekDayName)s", @@ -537,9 +480,7 @@ "Unban this user?": "是否解封此用户?", "Ban this user?": "是否封禁此用户?", "Send an encrypted reply…": "发送加密回复…", - "Send a reply (unencrypted)…": "发送回复(未加密)…", "Send an encrypted message…": "发送加密消息…", - "Send a message (unencrypted)…": "发送消息 (未加密)…", "Replying": "正在回复", "Community Invites": "社区邀请", "Banned by %(displayName)s": "被 %(displayName)s 封禁", @@ -591,7 +532,6 @@ "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "%(displayName)s (%(userName)s) 在 %(dateTime)s 看到这里", "'%(groupId)s' is not a valid community ID": "“%(groupId)s” 不是有效的社区 ID", "Flair": "个性徽章", - "Message removed by %(userId)s": "此消息已被 %(userId)s 移除", "Code": "代码", "Remove from community": "从社区中移除", "Disinvite this user from community?": "是否不再邀请此用户加入本社区?", @@ -698,7 +638,6 @@ "Something went wrong when trying to get your communities.": "获取你加入的社区时发生错误。", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "删除小挂件时将为聊天室中的所有成员删除。您确定要删除此小挂件吗?", "Fetching third party location failed": "获取第三方位置失败", - "A new version of %(brand)s is available.": "%(brand)s 有更新可用。", "Send Account Data": "发送账户数据", "All notifications are currently disabled for all targets.": "目前所有通知都已禁用。", "Uploading report": "上传报告", @@ -715,8 +654,6 @@ "Send Custom Event": "发送自定义事件", "Advanced notification settings": "通知高级设置", "Failed to send logs: ": "无法发送日志: ", - "delete the alias.": "删除别名。", - "To return to your account in future you need to set a password": "要在未来回到您的账号,您需要 设置密码", "Forget": "忘记", "You cannot delete this image. (%(code)s)": "无法删除此图片。(%(code)s)", "Cancel Sending": "取消发送", @@ -742,7 +679,6 @@ "Resend": "重新发送", "Files": "文件", "Collecting app version information": "正在收集应用版本信息", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "确定要删除聊天室别名 %(alias)s 并将 %(name)s 从列表中删除吗?", "Keywords": "关键词", "Enable notifications for this account": "对此账号启用通知", "Invite to this community": "邀请加入此社区", @@ -799,7 +735,6 @@ "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.": "调试日志包含使用数据(包括您的用户名,您访问过的聊天室 / 小组的 ID 或别名以及其他用户的用户名)。它们不包含聊天信息。", "Unhide Preview": "取消隐藏预览", "Unable to join network": "无法加入网络", - "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 下你无法调整他们但仍然可用", "Sorry, your browser is not able to run %(brand)s.": "抱歉,您的浏览器 无法 运行 %(brand)s.", "Uploaded on %(date)s by %(user)s": "由 %(user)s 在 %(date)s 上传", "Messages in group chats": "群组聊天中的消息", @@ -824,13 +759,11 @@ "Thank you!": "谢谢!", "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!": "您目前的浏览器,应用程序的外观和感觉完全不正确,有些或全部功能可能无法使用。如果您仍想继续尝试,可以继续,但请自行负担其后果!", "Checking for an update...": "正在检查更新…", - "There are advanced notifications which are not shown here": "更多的通知并没有在此显示出来", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "这里没有其他人了!你是想 邀请用户 还是 不再提示?", "You need to be able to invite users to do that.": "你需要有邀请用户的权限才能进行此操作。", "Missing roomId.": "找不到此聊天室 ID 所对应的聊天室。", "Every page you use in the app": "您在 %(brand)s 中使用的所有页面", "e.g. ": "例如:", - "Your User Agent": "您的 User Agent", "Your device resolution": "您设备的分辨率", "Always show encryption icons": "总是显示加密标志", "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 提供的集成。您希望继续吗?", @@ -861,9 +794,6 @@ "The phone number field must not be blank.": "必须输入手机号码。", "The password field must not be blank.": "必须输入密码。", "Display your community flair in rooms configured to show it.": "在启用“显示徽章”的聊天室中显示本社区的个性徽章。", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "请发送 匿名使用数据 以帮助我们改进 %(brand)s。这将用到 Cookie(请看看我们的 Cookie 隐私政策)。", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "请发送 匿名使用数据 以帮助我们改进 %(brand)s。这将用到 Cookie。", - "Yes, I want to help!": "好啊,我要帮助你们!", "Failed to remove widget": "移除小挂件失败", "An error ocurred whilst trying to remove the widget from the room": "尝试从聊天室中移除小部件时发生了错误", "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.": "您确定要移除(删除)此事件吗?注意,如果删除了聊天室名称或话题的变化,就会撤销此更改。", @@ -907,8 +837,6 @@ "No Audio Outputs detected": "未检测到可用的音频输出方式", "Audio Output": "音频输出", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "已向 %(emailAddress)s 发送了一封电子邮件。点开邮件中的链接后,请点击下面。", - "Registration Required": "需要注册", - "You need to register to do this. Would you like to register now?": "您必须注册以继续。您想现在就注册吗?", "Forces the current outbound group session in an encrypted room to be discarded": "强制丢弃加密聊天室中的当前出站群组会话", "Unable to connect to Homeserver. Retrying...": "无法连接至主服务器。正在重试…", "Sorry, your homeserver is too old to participate in this room.": "对不起,您的主服务器的程序版本过旧以至于无法加入此聊天室。", @@ -929,19 +857,11 @@ "Legal": "法律信息", "This homeserver has hit its Monthly Active User limit.": "此主服务器已达到其每月活跃用户限制。", "This homeserver has exceeded one of its resource limits.": "本服务器已达到其使用量限制之一。", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "本服务器已达到其每月活跃用户限制,部分用户将无法登录。", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "本主服务器已达到其使用量限制之一,部分用户将无法登录。", "Please contact your service administrator to continue using this 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 hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "您的消息未被发送,因为本主服务器已达到其每月活跃用户限制。请 联系您的服务管理员 以继续使用本服务。", "Please contact your service administrator to continue using the service.": "请 联系您的服务管理员 以继续使用本服务。", "Please contact your homeserver administrator.": "请 联系您主服务器的管理员。", - "Please contact your service administrator to get this limit increased.": "请 联系您的服务管理员 以增加此限制的额度。", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s 添加了聊天室地址 %(addedAddresses)s。", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s 添加了一个聊天室地址 %(addedAddresses)s。", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s 移除了聊天室地址 %(removedAddresses)s。", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s 移除了一个聊天室地址 %(removedAddresses)s。", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s 添加了聊天室地址 %(addedAddresses)s 并移除了地址 %(removedAddresses)s。", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s 将此聊天室的主地址设为了 %(address)s。", "%(senderName)s removed the main address for this room.": "%(senderName)s 移除了此聊天室的主地址。", "Unable to load! Check your network connectivity and try again.": "无法加载!请检查您的网络连接并重试。", @@ -963,12 +883,10 @@ "Continue With Encryption Disabled": "在停用加密的情况下继续", "Checking...": "正在检查…", "Updating %(brand)s": "正在更新 %(brand)s", - "Backup Restored": "备份已还原", "No backup found!": "找不到备份!", "Unable to restore backup": "无法还原备份", "Unable to load backup status": "无法获取备份状态", "Next": "下一个", - "Copy to clipboard": "复制到剪贴板", "Download": "下载", "Retry": "重试", "Go to Settings": "打开设置", @@ -1040,7 +958,6 @@ "Enable Community Filter Panel": "启用社区筛选器面板", "Allow Peer-to-Peer for 1:1 calls": "允许一对一通话使用 P2P", "Prompt before sending invites to potentially invalid matrix IDs": "在发送邀请之前提示可能无效的 Matrix ID", - "Order rooms in the room list by most important first instead of most recent": "聊天室列表按重要程度排序而不按时间排序", "Messages containing my username": "包含我的用户名的消息", "Encrypted messages in one-to-one chats": "一对一聊天中的加密消息", "Encrypted messages in group chats": "群聊中的加密消息", @@ -1168,7 +1085,6 @@ "Developer options": "开发者选项", "Room Addresses": "聊天室地址", "Roles & Permissions": "角色与权限", - "To link to this room, please add an alias.": "要连接到此聊天室,请添加一个别名。", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "历史记录阅读权限的变更只会应用到此聊天室中将来的消息。既有历史记录的可见性将不会变更。", "Encryption": "加密", "Once enabled, encryption cannot be disabled.": "一旦启用加密就无法停止。", @@ -1181,10 +1097,6 @@ "Add some now": "立即添加", "Error updating main address": "更新主地址时发生错误", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "更新聊天室的主地址时发生错误。可能是该服务器不允许,也可能是出现了一个临时错误。", - "Error creating alias": "创建别名时发生错误", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "创建该别名时发生错误。可能是该服务器不允许,也可能是出现了一个临时错误。", - "Error removing alias": "移除别名时发生错误", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "移除该别名时发生错误。可能别名已不存在,也可能是出现了一个临时错误。", "Main address": "主地址", "Error updating flair": "更新个性徽章时发生错误", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "更新此聊天室的个性徽章时发生错误。可能时该服务器不允许,也可能是发生了一个临时错误。", @@ -1200,14 +1112,6 @@ "Before submitting logs, you must create a GitHub issue to describe your problem.": "在提交日志之前,您必须 创建一个GitHub issue 来描述您的问题。", "Unable to load commit detail: %(msg)s": "无法加载提交详情:%(msg)s", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "为避免丢失聊天记录,您必须在登出前导出房间密钥。 您需要回到较新版本的 %(brand)s 才能执行此操作", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "您之前在 %(host)s 使用过更新版本的 %(brand)s 。为了使用带有端对端加密功能的此版本,您必须退出账号再重新登入。 ", - "Use Legacy Verification (for older clients)": "使用旧版验证 (针对旧版客户端)", - "Verify by comparing a short text string.": "通过比较一段短文本字符串进行验证。", - "Begin Verifying": "开始验证", - "Waiting for partner to accept...": "等待对方接受...", - "Nothing appearing? Not all clients support interactive verification yet. .": "没有任何显示?不是所有客户端都支持互动验证。。", - "Waiting for %(userId)s to confirm...": "等待 %(userId)s 确认中...", - "Use two-way text verification": "使用双向文本验证", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "验证此用户并标记为受信任。在使用端到端加密消息时,信任用户可让您更加放心。", "Waiting for partner to confirm...": "等待对方确认中...", "Incoming Verification Request": "收到验证请求", @@ -1224,17 +1128,10 @@ "Go back": "返回", "Room Settings - %(roomName)s": "聊天室设置 - %(roomName)s", "A username can only contain lower case letters, numbers and '=_-./'": "用户名只能包含小写字母、数字和 '=_-./'", - "Recovery Key Mismatch": "恢复密钥不匹配", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "备份无法使用此密钥解密:请检查您输入的恢复密钥是否正确。", - "Incorrect Recovery Passphrase": "错误的恢复密码", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "备份无法使用此密码解密:请检查您输入的恢复密码是否正确。", "Failed to decrypt %(failedCount)s sessions!": "%(failedCount)s 会话解密失败", - "Restored %(sessionCount)s session keys": "%(sessionCount)s 会话密钥已还原", - "Enter Recovery Passphrase": "输入恢复密码", "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": "如果忘记了恢复密码,您可以 使用恢复密钥 或者 设置新的恢复选项", - "Enter Recovery Key": "输入恢复密钥", "This looks like a valid recovery key!": "看起来是有效的恢复密钥!", "Not a valid recovery key": "不是有效的恢复密钥", "Access your secure message history and set up secure messaging by entering your recovery key.": "通过输入恢复密钥来访问您的安全消息历史记录和设置安全通信。", @@ -1289,33 +1186,18 @@ "Registration has been disabled on this homeserver.": "此主服务器已禁止注册。", "Unable to query for supported registration methods.": "无法查询支持的注册方法。", "Create your account": "创建您的账号", - "Great! This passphrase looks strong enough.": "太棒了!这个密码看起来强度足够。", "Keep going...": "请继续...", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "我们会在服务器上保存您的密钥的加密副本。请用密码来保护您的备份的安全。", "For maximum security, this should be different from your account password.": "为确保最大的安全性,它应该与您的账号密码不同。", - "Enter a passphrase...": "输入密码...", - "Set up with a Recovery Key": "设置恢复密钥", "That matches!": "匹配成功!", "That doesn't match.": "不匹配。", "Go back to set it again.": "返回重新设置。", - "Please enter your passphrase a second time to confirm.": "请再输入一次密码以确认。", - "Repeat your passphrase...": "重复您的密码...", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "作为一张安全网,您可以在忘记了恢复密码的时候使用它来还原您的加密消息历史记录。", - "As a safety net, you can use it to restore your encrypted message history.": "作为一张安全网,您可以使用它来还原您的加密消息历史记录。", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "恢复密钥是您的一张安全网 - 如果忘记了密码,您可以用它来重获加密消息的访问权。", - "Your Recovery Key": "您的恢复密钥", "Print it and store it somewhere safe": "打印 并存放在安全的地方", "Save it on a USB key or backup drive": "保存 在 U 盘或备份磁盘中", "Copy it to your personal cloud storage": "复制 到您的个人云端存储", "Your keys are being backed up (the first backup could take a few minutes).": "正在备份您的密钥(第一次备份可能会花费几分钟时间)。", "Set up Secure Message Recovery": "设置安全消息恢复", - "Secure your backup with a passphrase": "使用密码保护您的备份", - "Confirm your passphrase": "确认你的密码", - "Recovery key": "恢复密钥", - "Keep it safe": "确保其安全", "Starting backup...": "开始备份...", "Success!": "成功!", - "Create Key Backup": "创建密钥备份", "Unable to create key backup": "无法创建密钥备份", "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "如果您登出账号而没有设置安全消息恢复,您将失去您的安全消息历史记录。", "If you don't want to set this up now, you can later in Settings.": "如果您现在不想设置,您可以稍后在设置中操作。", @@ -1390,13 +1272,9 @@ "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.": "点击下面的按钮,确认添加此电话号码。", - "The version of %(brand)s": "%(brand)s版本", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "是否在触屏设备上使用%(brand)s", "Whether you're using %(brand)s as an installed Progressive Web App": "您是否已经安装%(brand)s作为一种渐进式的Web应用", "Your user agent": "您的代理用户", - "The information being sent to us to help make %(brand)s better includes:": "发送信息给我们以帮助%(brand)s:", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "聊天室有未知会话:如果您选择继续而不是验证他们,则您的电话可能会被窃听。", - "Review Sessions": "审查会议", "Replying With Files": "回复文件", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "无法回复此文件。您要上传此文件但无需回复吗?", "The file '%(fileName)s' failed to upload.": "上传文件 ‘%(fileName)s’失败。", diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 706fc032b0..1ff86dac93 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -10,7 +10,6 @@ "%(senderName)s banned %(targetName)s.": "%(senderName)s 封鎖了 %(targetName)s.", "Ban": "封鎖", "Banned users": "被封鎖的用戶", - "Blacklisted": "已列入黑名單", "Call Timeout": "通話逾時", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "當瀏覽器網址列裡有 HTTPS URL 時,不能使用 HTTP 連線到家伺服器。請採用 HTTPS 或者允許不安全的指令稿。", "Change Password": "變更密碼", @@ -19,7 +18,6 @@ "Access Token:": "取用令牌:", "Admin": "管理者", "Advanced": "進階", - "Algorithm": "算法", "Always show message timestamps": "總是顯示訊息時間戳", "Authentication": "授權", "%(items)s and %(lastItem)s": "%(items)s 和 %(lastItem)s", @@ -33,22 +31,16 @@ "/ddg is not a command": "/ddg 不是一個命令", "Deactivate Account": "關閉帳號", "Decrypt %(text)s": "解密 %(text)s", - "Decryption error": "解密出錯", "Default": "預設", - "Device ID": "裝置識別碼", - "Direct chats": "私聊", "Disinvite": "取消邀請", "Displays action": "顯示操作", "Download %(text)s": "下載 %(text)s", - "Ed25519 fingerprint": "Ed25519指紋", "Email": "電子郵件", "Email address": "電子郵件地址", "Emoji": "顏文字", "%(senderName)s ended the call.": "%(senderName)s 結束了通話。.", - "End-to-end encryption information": "端到端加密資訊", "Error": "錯誤", "Error decrypting attachment": "解密附件時出錯", - "Event information": "事件資訊", "Existing Call": "現有通話", "Export E2E room keys": "導出聊天室的端到端加密密鑰", "Failed to ban user": "封鎖用戶失敗", @@ -64,7 +56,6 @@ "Failed to send email": "發送郵件失敗", "Failed to send request.": "傳送要求失敗。", "Failed to set display name": "設置暱稱失敗", - "Failed to toggle moderator status": "無法切換管理員權限", "Failed to unban": "解除封鎖失敗", "Failed to verify email address: make sure you clicked the link in the email": "電子郵件地址驗證失敗: 請確保你已點擊郵件中的連結", "Failure to create room": "建立聊天室失敗", @@ -97,7 +88,6 @@ "Room %(roomId)s not visible": "聊天室 %(roomId)s 已隱藏", "Room Colour": "聊天室顏色", "Rooms": "聊天室", - "Scroll to bottom of page": "滾動到頁面底部", "Search": "搜尋", "Search failed": "搜索失敗", "Searches DuckDuckGo for results": "搜尋 DuckDuckGo", @@ -118,7 +108,6 @@ "Sign out": "登出", "%(count)s of your messages have not been sent.|other": "部分訊息未送出。", "Someone": "某人", - "Start a chat": "建立聊天", "Submit": "提交", "Success": "成功", "This email address is already in use": "這個電子郵件地址已被使用", @@ -156,7 +145,6 @@ "Anyone": "任何人", "Command error": "指令出錯", "Commands": "指令", - "device id: ": "裝置 ID: ", "Reason": "原因", "Register": "註冊", "Error decrypting audio": "解密音檔出錯", @@ -167,7 +155,6 @@ " (unsupported)": " (不支援)", "URL Previews": "網址預覽", "Drop file here to upload": "把文件放在這裡上傳", - "Removed or unknown message type": "已刪除或未知的信息類型", "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。你想繼續嗎?", "Close": "關閉", "Create new room": "建立新聊天室", @@ -183,7 +170,6 @@ "No Webcams detected": "未偵測到網路攝影機", "No media permissions": "沒有媒體權限", "You may need to manually permit %(brand)s to access your microphone/webcam": "您可能需要手動允許 %(brand)s 存取您的麥克風/網路攝影機", - "Alias (optional)": "別名(選擇性)", "Are you sure you want to leave the room '%(roomName)s'?": "您確定您要想要離開房間 '%(roomName)s' 嗎?", "Bans user with given id": "阻擋指定 ID 的使用者", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "無法連線到家伺服器 - 請檢查您的連線,確保您的家伺服器的 SSL 憑證可被信任,而瀏覽器擴充套件也沒有阻擋請求。", @@ -193,21 +179,16 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s 已經移除了聊天室名稱。", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s 已經變更主題為「%(topic)s」。", "Changes your display nickname": "變更您的顯示暱稱", - "Claimed Ed25519 fingerprint key": "已索取 Ed25519 指紋金鑰", "Click to mute audio": "點選以靜音", "Click to mute video": "點選以讓視訊靜音", "click to reveal": "點選以顯示", "Click to unmute video": "點選以解除視訊靜音", "Click to unmute audio": "點選以解除靜音", - "Could not connect to the integration server": "無法連線到整合的伺服器", - "Curve25519 identity key": "Curve25519 辨識金鑰", "Custom": "自訂", "Custom level": "自訂等級", "Decline": "拒絕", "Deops user with given id": "取消指定 ID 使用者的管理員權限", - "Disable Notifications": "停用通知", "Drop File Here": "在此放置檔案", - "Enable Notifications": "啟用通知", "Enter passphrase": "輸入通關密語", "Error: Problem communicating with the given homeserver.": "錯誤:與指定的家伺服器有通訊問題。", "Export": "匯出", @@ -226,12 +207,10 @@ "Invites user with given id to current room": "邀請指定 ID 的使用者到目前的聊天室", "Sign in with": "登入使用", "Join as voice or video.": "加入為語音視訊。", - "Joins room with given alias": "以指定的別名加入聊天室", "Kick": "踢出", "Kicks user with given id": "踢出指定 ID 的使用者", "Labs": "實驗室", "Last seen": "上次檢視", - "Local addresses for this room:": "此房間的本機地址:", "Logout": "登出", "Low priority": "低優先度", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s 讓未來的聊天室歷史紀錄可見於所有聊天室成員,從他們被邀請開始。", @@ -244,14 +223,11 @@ "Missing user_id in request": "在要求中遺失使用者 ID", "Moderator": "仲裁者", "Name": "名稱", - "New address (e.g. #foo:%(localDomain)s)": "新地址(例如:#foo:%(localDomain)s)", "New passwords don't match": "新密碼不相符", "New passwords must match each other.": "新密碼必須互相符合。", - "none": "無", "not specified": "未指定", "(not supported by this browser)": "(不被此瀏覽器支援)", "": "<不支援>", - "NOT verified": "未驗證", "No display name": "沒有顯示名稱", "No more results": "沒有更多結果", "No results": "沒有結果", @@ -268,10 +244,8 @@ "Privileged Users": "特別權限使用者", "Profile": "基本資料", "Public Chat": "公開聊天", - "Revoke Moderator": "撤回仲裁者", "%(targetName)s rejected the invitation.": "%(targetName)s 拒絕了邀請。", "Reject invitation": "拒絕邀請", - "Remote addresses for this room:": "此房間的遠端地址:", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s 移除了他的顯示名稱 (%(oldDisplayName)s)。", "%(senderName)s removed their profile picture.": "%(senderName)s 移除了他的基本資料圖片。", "%(senderName)s requested a VoIP conference.": "%(senderName)s 請求了一次 VoIP 會議。", @@ -280,7 +254,6 @@ "%(roomName)s is not accessible at this time.": "%(roomName)s 此時無法存取。", "Save": "儲存", "Seen by %(userName)s at %(dateTime)s": "%(userName)s 在 %(dateTime)s 時看過", - "Send anyway": "無論如何都要傳送", "Start authentication": "開始認證", "The phone number entered looks invalid": "輸入的電話號碼看起來無效", "The remote side failed to pick up": "遠端未能接聽", @@ -297,13 +270,9 @@ "Unable to verify email address.": "無法驗證電子郵件。", "Unban": "解除禁止", "%(senderName)s unbanned %(targetName)s.": "%(senderName)s 解除阻擋 %(targetName)s。", - "unencrypted": "未加密", "unknown caller": "不明來電", - "unknown device": "未知的裝置", - "Unknown room %(roomId)s": "未知的房間 %(roomId)s", "Unmute": "解除靜音", "Unnamed Room": "未命名的聊天室", - "Unrecognised room alias:": "無法辨識的聊天室別名:", "Uploading %(filename)s and %(count)s others|zero": "正在上傳 %(filename)s", "Uploading %(filename)s and %(count)s others|one": "正在上傳 %(filename)s 與另外 %(count)s 個", "Uploading %(filename)s and %(count)s others|other": "正在上傳 %(filename)s 與另外 %(count)s 個", @@ -312,14 +281,10 @@ "Upload file": "上傳檔案", "Upload new:": "上傳新的:", "Usage": "使用方法", - "Use compact timeline layout": "使用緊湊的時間軸佈局", - "User ID": "使用者 ID", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s(權限等級 %(powerLevelNumber)s)", "Username invalid: %(errMessage)s": "使用者名稱無效:%(errMessage)s", "Users": "使用者", "Verification Pending": "擱置的驗證", - "Verification": "驗證", - "verified": "已驗證", "Verified key": "已驗證的金鑰", "Video call": "視訊通話", "Voice call": "語音通話", @@ -367,7 +332,6 @@ "Upload an avatar:": "上傳大頭貼:", "This server does not support authentication with a phone number.": "這個伺服器不支援以電話號碼認證。", "An error occurred: %(error_string)s": "遇到錯誤:%(error_string)s", - "Make Moderator": "給予仲裁者", "There are no visible files in this room": "此房間中沒有可見的檔案", "Room": "房間", "Connectivity to the server has been lost.": "至伺服器的連線已遺失。", @@ -399,15 +363,9 @@ "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.": "您確定您想要移除(刪除)此活動嗎?注意若您刪除房間名稱或主題變更,還是可以復原變更。", "Unknown error": "未知的錯誤", "Incorrect password": "不正確的密碼", - "To continue, please enter your password.": "要繼續,請輸入您的密碼。", - "I verify that the keys match": "我驗證金鑰相符", "Unable to restore session": "無法復原工作階段", "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.": "若您先前使用過較新版本的 %(brand)s,您的工作階段可能與此版本不相容。關閉此視窗並回到較新的版本。", "Unknown Address": "未知的地址", - "Unblacklist": "解除黑名單", - "Blacklist": "黑名單", - "Unverify": "取消驗證", - "Verify...": "驗證...", "ex. @bob:example.com": "例如:@bob:example.com", "Add User": "新增使用者", "Please check your email to continue registration.": "請檢查您的電子郵件來繼續註冊。", @@ -426,10 +384,6 @@ "Do you want to set an email address?": "您想要設定電子郵件地址嗎?", "This will allow you to reset your password and receive notifications.": "這讓您可以重設您的密碼與接收通知。", "Skip": "略過", - "Start verification": "開始驗證", - "Share without verifying": "不驗證就分享", - "Ignore request": "忽略請求", - "Encryption key request": "加密金鑰請求", "Add a widget": "新增小工具", "Allow": "允許", "and %(count)s others...|other": "與其他 %(count)s 個……", @@ -460,11 +414,6 @@ "Failed to copy": "複製失敗", "Add rooms to this community": "新增聊天室到此社群", "Call Failed": "通話失敗", - "Review Devices": "審閱裝置", - "Call Anyway": "無論如何都通話", - "Answer Anyway": "無論如何都回覆", - "Call": "通話", - "Answer": "回覆", "Who would you like to add to this community?": "您想要把誰新增到此社群內?", "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "警告:任何您新增到社群內的人都可以被任何知道社群 ID 的人公開看見", "Invite new community members": "邀請新社群成員", @@ -472,7 +421,6 @@ "Which rooms would you like to add to this community?": "您想要新增哪個聊天室到此社群?", "Show these rooms to non-members on the community page and room list?": "在社群頁面與聊天室清單上顯示這些聊天室給非社群成員?", "Add rooms to the community": "新增聊天室到社群", - "Room name or alias": "聊天室名稱或別名", "Add to community": "新增到社群", "Failed to invite the following users to %(groupId)s:": "邀請下列使用者到 %(groupId)s 失敗:", "Failed to invite users to community": "邀請使用者到社群失敗", @@ -503,11 +451,8 @@ "Jump to read receipt": "跳到讀取回條", "Mention": "提及", "Invite": "邀請", - "User Options": "使用者選項", "Send an encrypted reply…": "傳送加密的回覆……", - "Send a reply (unencrypted)…": "傳送回覆(未加密)……", "Send an encrypted message…": "傳送加密的訊息……", - "Send a message (unencrypted)…": "傳送訊息(未加密)……", "Unpin Message": "取消釘選訊息", "Jump to message": "跳到訊息", "No pinned messages.": "沒有已釘選的訊息。", @@ -540,8 +485,6 @@ "New community ID (e.g. +foo:%(localDomain)s)": "新社群 ID(例子:+foo:%(localDomain)s)", "URL previews are enabled by default for participants in this room.": "此聊天室已預設對參與者啟用 URL 預覽。", "URL previews are disabled by default for participants in this room.": "此聊天室已預設對參與者停用 URL 預覽。", - "Message removed by %(userId)s": "訊息已被 %(userId)s 移除", - "Message removed": "訊息已移除", "An email has been sent to %(emailAddress)s": "電子郵件已傳送給 %(emailAddress)s", "A text message has been sent to %(msisdn)s": "文字訊息已傳送給 %(msisdn)s", "Remove from community": "從社群中移除", @@ -672,8 +615,6 @@ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "現在重新傳送訊息取消訊息。", "Warning": "警告", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "沒有其他人了!您想要邀請其他人停止關於空聊天室的警告嗎?", - "Light theme": "亮色主題", - "Dark theme": "暗色主題", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "隱私對我們來說至關重要,所以我們不會收集任何私人或可辨識的資料供我們的分析使用。", "Learn more about how we use analytics.": "得知更多關於我們如何使用分析資料的資訊。", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "電子郵件已傳送至 %(emailAddress)s。您必須跟隨其中包含了連結,點按下面的連結。", @@ -683,15 +624,14 @@ "Stops ignoring a user, showing their messages going forward": "停止忽略使用者,顯示他們的訊息", "Notify the whole room": "通知整個聊天室", "Room Notification": "聊天室通知", - "The information being sent to us to help make %(brand)s better includes:": "協助讓 %(brand)s 變得更好的傳送給我們的資訊包含了:", + "The information being sent to us to help make %(brand)s better includes:": "傳送給我們以協助改進 %(brand)s 的資訊包含了:", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "這個頁面包含了可識別的資訊,如聊天室、使用者或群組 ID,這些資料會在傳到伺服器前被刪除。", "The platform you're on": "您使用的平臺是", - "The version of %(brand)s": "%(brand)s 的版本", + "The version of %(brand)s": "%(brand)s 版本", "Your language of choice": "您選擇的語言", "Which officially provided instance you are using, if any": "您正在使用的任何官方實體,如果有的話", "Whether or not you're using the Richtext mode of the Rich Text Editor": "您是否正在使用豐富文字編輯器的豐富文字模式", "Your homeserver's URL": "您的主伺服器 URL", - "Your identity server's URL": "您的驗證伺服器 URL", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s", "This room is not public. You will not be able to rejoin without an invite.": "這個聊天室並未公開。您在沒有邀請的情況下將無法重新加入。", "Community IDs cannot be empty.": "社群 ID 不能為空。", @@ -721,7 +661,6 @@ "Who can join this community?": "誰可以加入此社群?", "Everyone": "每個人", "Fetching third party location failed": "抓取第三方位置失敗", - "A new version of %(brand)s is available.": "%(brand)s 釋出了新版本。", "I understand the risks and wish to continue": "我了解風險並希望繼續", "Send Account Data": "傳送帳號資料", "Advanced notification settings": "進階通知設定", @@ -740,8 +679,6 @@ "Send Custom Event": "傳送自訂事件", "All notifications are currently disabled for all targets.": "目前所有的通知功能已停用。", "Failed to send logs: ": "無法傳送除錯訊息: ", - "delete the alias.": "刪除別名。", - "To return to your account in future you need to set a password": "未來若需回來使用您的帳號,您需要 設定密碼", "Forget": "忘記", "You cannot delete this image. (%(code)s)": "你不能刪除這個圖片。(%(code)s)", "Cancel Sending": "取消傳送", @@ -768,7 +705,6 @@ "Noisy": "吵鬧", "Files": "檔案", "Collecting app version information": "收集應用程式版本資訊", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "刪除聊天室別名 %(alias)s 並從目錄移除 %(name)s?", "Enable notifications for this account": "本帳號啟用通知", "Invite to this community": "邀請至此社群", "Messages containing keywords": "訊息包含 關鍵字", @@ -823,7 +759,6 @@ "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.": "除錯訊息包含應用程式的使用資料,包括您的使用者名稱、您所造訪的房間/群組的 ID 或別名、其他使用者的使用者名稱等,其中不包含訊息本身。", "Unhide Preview": "取消隱藏預覽", "Unable to join network": "無法加入網路", - "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 底下你無法調整它們但其仍然可用", "Sorry, your browser is not able to run %(brand)s.": "可惜,您的瀏覽器 無法 執行 %(brand)s.", "Messages in group chats": "在群組聊天中的訊息", "Yesterday": "昨天", @@ -847,11 +782,9 @@ "Quote": "引用", "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!": "您目前的瀏覽器,其應用程式的外觀和感覺可能完全不正確,有些或全部功能可以無法使用。如果您仍想要繼續嘗試,可以繼續,但必須自行承擔後果!", "Checking for an update...": "正在檢查更新...", - "There are advanced notifications which are not shown here": "有些進階的通知並未在此顯示", "Missing roomId.": "缺少聊天室ID。", "Every page you use in the app": "您在應用程式內使用的每一頁", "e.g. ": "範例:", - "Your User Agent": "您的使用者代理字串", "Your device resolution": "您的裝置解析度", "Always show encryption icons": "總是顯示加密圖示", "Popout widget": "彈出式小工具", @@ -866,9 +799,6 @@ "Send analytics data": "傳送分析資料", "Muted Users": "已靜音的使用者", "e.g. %(exampleValue)s": "範例:%(exampleValue)s", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "請透過傳送匿名使用資料來協助改善 %(brand)s。這將會使用 cookie(請參見我們的 Cookie 政策)。", - "Please help improve %(brand)s by sending anonymous usage data. This will use a cookie.": "請透過傳送匿名使用資料來協助改善 %(brand)s。這將會使用 cookie。", - "Yes, I want to help!": "是的,我想要協助!", "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。這將會造成您的帳號離開所有已參與的聊天室,並將會從識別伺服器上移除您帳號的所有詳細資訊。此動作是不可逆的。", "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 中的訊息可見度類似於電子郵件。我們忘記您的訊息代表您傳送過的訊息不會有任何新的或未註冊的使用者看到,但已註冊且已經看過這些訊息的使用者還是看得到他們的副本。", @@ -912,9 +842,6 @@ "Please contact your service administrator to continue using the service.": "請聯絡您的服務管理員以繼續使用服務。", "This homeserver has hit its Monthly Active User limit.": "這個主伺服器已經到達其每月活躍使用者限制。", "This homeserver has exceeded one of its resource limits.": "此主伺服器已經超過其中一項資源限制。", - "Please contact your service administrator to get this limit increased.": "請聯絡您的服務管理員以讓此限制增加。", - "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "此家伺服器已經達到其每月活躍使用者限制所以某些使用者將會無法登入。", - "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "此家伺服器已超過其中一項資源限制所以某些使用者可能會無法登入。", "Upgrade Room Version": "更新聊天室版本", "Create a new room with the same name, description and avatar": "使用同樣的名稱、描述與大頭貼建立新聊天室", "Update any local room aliases to point to the new room": "更新任何本地聊天室別名以指向新的聊天室", @@ -934,14 +861,7 @@ "The room upgrade could not be completed": "聊天室升級可能不完整", "Upgrade this room to version %(version)s": "升級此聊天室到版本 %(version)s", "Forces the current outbound group session in an encrypted room to be discarded": "強制目前在已加密的聊天室中的外發群組工作階段丟棄", - "Registration Required": "需要註冊", - "You need to register to do this. Would you like to register now?": "您必須註冊以繼續。您想要現在註冊嗎?", "Unable to connect to Homeserver. Retrying...": "無法連線到主伺服器。正在重試……", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s 新增了 %(addedAddresses)s 為此聊天室的位置。", - "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s 新增了 %(addedAddresses)s 為此聊天室的位置。", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s 移除了 %(removedAddresses)s 為此聊天室的位置。", - "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s 移除了 %(removedAddresses)s 為此聊天室的位置。", - "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s 新增了 %(addedAddresses)s 並移除了 %(removedAddresses)s 為此聊天室的位置。", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s 為此聊天室設定了主要位置 %(address)s。", "%(senderName)s removed the main address for this room.": "%(senderName)s 移除了此聊天室的主要位置。", "Before submitting logs, you must create a GitHub issue to describe your problem.": "在遞交紀錄檔前,您必須建立 GitHub 議題以描述您的問題。", @@ -963,37 +883,25 @@ "Algorithm: ": "演算法: ", "Please review and accept all of the homeserver's policies": "請審閱並接受家伺服器的所有政策", "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "為了避免遺失您的聊天歷史,您必須在登出前匯出您的聊天室金鑰。您必須回到較新的 %(brand)s 才能執行此動作", - "You've previously used a newer version of %(brand)s on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "您先前在 %(host)s 上使用較新的 %(brand)s 版本。要再次與此版本一同使用端到端加密,您將需要登出並再次登入。 ", "Incompatible Database": "不相容的資料庫", "Continue With Encryption Disabled": "在停用加密的情況下繼續", - "Enter a passphrase...": "輸入密碼……", "Next": "下一個", "That matches!": "符合!", "That doesn't match.": "不符合。", "Go back to set it again.": "回去重新設定它。", - "Repeat your passphrase...": "重覆您的密碼……", - "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "做為安全網,您可以在忘記您的復原密碼時使用它來復原您的加密訊息歷史。", - "Your Recovery Key": "您的復原金鑰", - "Copy to clipboard": "複製到剪貼簿", "Download": "下載", "Print it and store it somewhere safe": "列印它並存放在安全的地方", "Save it on a USB key or backup drive": "將它儲存到 USB 金鑰或備份磁碟上", "Copy it to your personal cloud storage": "將它複製 到您的個人雲端儲存", "Set up Secure Message Recovery": "設定安全訊息復原", - "Keep it safe": "保持安全", - "Create Key Backup": "建立金鑰備份", "Unable to create key backup": "無法建立金鑰備份", "Retry": "重試", "Unable to load backup status": "無法載入備份狀態", "Unable to restore backup": "無法復原備份", "No backup found!": "找不到備份!", - "Backup Restored": "備份已復原", "Failed to decrypt %(failedCount)s sessions!": "解密 %(failedCount)s 工作階段失敗!", - "Restored %(sessionCount)s session keys": "%(sessionCount)s 工作階段金鑰已復原", - "Enter Recovery Passphrase": "輸入復原密碼", "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": "如果您忘記您的復原密碼,您可以使用您的復原金鑰設定新的復原選項", - "Enter Recovery Key": "輸入復原金鑰", "This looks like a valid recovery key!": "看起來是有效的復原金鑰!", "Not a valid recovery key": "不是有效的復原金鑰", "Access your secure message history and set up secure messaging by entering your recovery key.": "存取您的安全訊息歷史並趟過輸入您的復原金鑰來設定安全傳訊。", @@ -1025,8 +933,6 @@ "A word by itself is easy to guess": "單字本身很容易猜測", "Names and surnames by themselves are easy to guess": "姓名與姓氏本身很容易猜測", "Common names and surnames are easy to guess": "常見的名字與姓氏易於猜測", - "Great! This passphrase looks strong enough.": "很好!這個密碼看起來夠強了。", - "As a safety net, you can use it to restore your encrypted message history.": "做為安全網,您可以使用它來復原您已加密的訊息歷史。", "Failed to invite users to the room:": "邀請使用者到聊天室失敗:", "There was an error joining the room": "加入聊天室時發生錯誤", "You do not have permission to invite people to this room.": "您沒有權限邀請夥伴到此聊天室。", @@ -1058,7 +964,6 @@ "Unrecognised address": "無法識別的位置", "User %(user_id)s may or may not exist": "使用者 %(user_id)s 可能存在也可能不存在", "The following users may not exist": "以下的使用者可能不存在", - "Waiting for %(userId)s to confirm...": "正在等待 %(userId)s 確認……", "Prompt before sending invites to potentially invalid matrix IDs": "在傳送邀請給潛在的無效 matrix ID 前提示", "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "找不到下列 Matrix ID 的簡介,您無論如何都想邀請他們嗎?", "Invite anyway and never warn me again": "無論如何都要邀請,而且不要再警告我", @@ -1127,7 +1032,6 @@ "Timeline": "時間軸", "Autocomplete delay (ms)": "自動完成延遲(毫秒)", "Roles & Permissions": "角色與權限", - "To link to this room, please add an alias.": "要連結到此聊天室,請新增別名。", "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "變更誰可以閱讀歷史紀錄只會套用於此聊天室中未來的訊息。既有歷史紀錄的可見程度將不會變更。", "Security & Privacy": "安全與隱私", "Encryption": "加密", @@ -1144,18 +1048,12 @@ "Room Name": "聊天室名稱", "Room Topic": "聊天室主題", "Join": "加入", - "Use Legacy Verification (for older clients)": "使用舊版驗證(供較舊的客戶端使用)", - "Verify by comparing a short text string.": "透過比較短字串驗證。", - "Begin Verifying": "開始驗證", - "Waiting for partner to accept...": "正在等待夥伴接受……", - "Use two-way text verification": "使用雙向文字驗證", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "驗證此使用者以標記他們為受信任的。信任的使用者可以在使用端到端加密訊息時能更加放心。", "Waiting for partner to confirm...": "正在等待夥伴確認……", "Incoming Verification Request": "來到的驗證請求", "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+1)或是如果您找不到的話,就建立新議題。", "Report bugs & give feedback": "回報臭蟲並給予回饋", "Go back": "返回", - "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "備份無法使用此金鑰解密:請驗證您是否輸入正確的復原金鑰。", "Update status": "更新狀態", "Set status": "設定狀態", "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "您可以透過指定不同的家伺服器 URL 來使用自訂的伺服器選項來登入其他 Matrix 伺服器。這讓您可以與既有的在不同家伺服器上 Matrix 帳號一同使用此應用程式。", @@ -1261,9 +1159,6 @@ "Headphones": "耳機", "Folder": "資料夾", "Pin": "別針", - "Recovery Key Mismatch": "復原金鑰不符合", - "Incorrect Recovery Passphrase": "不正確的復原通關密語", - "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "備份無法使用此通關密語解密:請驗證您是否輸入正確的復原通關密語。", "This homeserver would like to make sure you are not a robot.": "此家伺服器想要確保您不是機器人。", "Change": "變更", "Couldn't load page": "無法載入頁面", @@ -1285,7 +1180,6 @@ "Securely back up your keys to avoid losing them. Learn more.": "安全地備份您的金鑰以避免遺失它們。更多資訊。", "Not now": "不是現在", "Don't ask me again": "不要再問我", - "Nothing appearing? Not all clients support interactive verification yet. .": "沒有出現東西?不是所有客戶端都支援互動式驗證。。", "I don't want my encrypted messages": "我不想要我的加密訊息", "Manually export keys": "手動匯出金鑰", "You'll lose access to your encrypted messages": "您將會失去對您的加密訊息的存取權", @@ -1293,29 +1187,17 @@ "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "如果您遇到臭蟲或是想要與我們分享一些回饋,請讓我們在 GitHub 上知道。", "Warning: you should only set up key backup from a trusted computer.": "警告:您應該只從信任的電腦設定金鑰備份。", "Hide": "隱藏", - "We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "我們將會在我們的伺服器上儲存一份加密過的您的金鑰副本。使用通關密語保護您的備份以保障其安全。", "For maximum security, this should be different from your account password.": "為了最強的安全性,這應該與您的帳號密碼不一樣。", - "Set up with a Recovery Key": "使用復原金鑰設定", - "Please enter your passphrase a second time to confirm.": "請再次輸入您的通關密語以確認。", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "您的復原金鑰是安全網,如果您忘記您的通關密語的話,您還可以使用它來復原您對加密訊息的存取權。", "Your keys are being backed up (the first backup could take a few minutes).": "您的金鑰正在備份(第一次備份會花費數分鐘)。", - "Secure your backup with a passphrase": "使用通關密語保障您備份的安全", - "Confirm your passphrase": "確認您的通關密語", - "Recovery key": "復原金鑰", "Success!": "成功!", "Changes your display nickname in the current room only": "僅在目前的聊天室變更您的顯示暱稱", "%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s 為此聊天室中的 %(groups)s 啟用鑑別能力。", "%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s 為此聊天室中的 %(groups)s 停用鑑別能力。", "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s 為此聊天室中的 %(newGroups)s 啟用鑑別能力,並為 %(oldGroups)s 停用。", "Show read receipts sent by other users": "顯示從其他使用者傳送的讀取回條", - "Order rooms in the room list by most important first instead of most recent": "將聊天室清單中的聊天室以最重要而非最近的方式排序", "Scissors": "剪刀", "Error updating main address": "更新主要位置時發生錯誤", "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "更新聊天室的主要位置時發生錯誤。可能是不被伺服器允許或是遇到暫時性的錯誤。", - "Error creating alias": "建立別名時發生錯誤", - "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "建立別名時發生錯誤。可能是不被伺服器允許或是遇到暫時性的錯誤。", - "Error removing alias": "移除別名時發生錯誤", - "There was an error removing that alias. It may no longer exist or a temporary error occurred.": "移除別名時發生錯誤。其可能不再存在或是遇到暫時性的錯誤。", "Error updating flair": "更新鑑別能力時發生錯誤", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "更新此聊天室的鑑別能力時發生錯誤。可能是伺服器不允許或遇到暫時性的錯誤。", "Room Settings - %(roomName)s": "聊天室設定 - %(roomName)s", @@ -1398,7 +1280,6 @@ "Upload %(count)s other files|one": "上傳 %(count)s 個其他檔案", "Cancel All": "取消全部", "Upload Error": "上傳錯誤", - "A conference call could not be started because the integrations server is not available": "因為沒有整合的伺服器,所以無法啟動會議通話", "The server does not support the room version specified.": "伺服器不支援指定的聊天室版本。", "Name or Matrix ID": "名稱或 Matrix ID", "Changes your avatar in this current room only": "僅在目前的聊天室中變更您的大頭貼", @@ -1467,7 +1348,6 @@ "Invalid base_url for m.identity_server": "無效的 m.identity_server base_url", "Identity server URL does not appear to be a valid identity server": "身份識別伺服器 URL 似乎不是有效的身份識別伺服器", "Low bandwidth mode": "低頻寬模式", - "Show recently visited rooms above the room list": "在聊天室清單上方顯示最近造訪的聊天室", "Uploaded sound": "已上傳的音效", "Sounds": "音效", "Notification sound": "通知音效", @@ -1636,13 +1516,8 @@ "Changes the avatar of the current room": "變更目前聊天室的大頭貼", "Read Marker lifetime (ms)": "讀取標記生命週期(毫秒)", "Read Marker off-screen lifetime (ms)": "畫面外讀取標記的生命週期(毫秒)", - "Room alias": "聊天室別名", "e.g. my-room": "例如:my-room", - "Please provide a room alias": "請提供聊天室別名", - "This alias is available to use": "此別名可用", - "This alias is already in use": "此別名已被使用", "Please enter a name for the room": "請輸入聊天室名稱", - "Set a room alias to easily share your room with other people.": "設定聊天室別名可以讓您的聊天室比較容易分享給其他人。", "This room is private, and can only be joined by invitation.": "此聊天室是私人聊天室,僅能透過邀請加入。", "Create a public room": "建立公開聊天室", "Create a private room": "建立私人聊天室", @@ -1725,7 +1600,6 @@ "Error adding ignored user/server": "新增要忽略的使用者/伺服器錯誤", "Something went wrong. Please try again or view your console for hints.": "有東西出問題了。請重試或檢視您的主控臺以取得更多資訊。", "Error subscribing to list": "訂閱清單發生錯誤", - "Please verify the room ID or alias and try again.": "請驗證聊天室 ID 或別名並再試一次。", "Error removing ignored user/server": "移除要忽略的使用者/伺服器發生錯誤", "Error unsubscribing from list": "從清單取消訂閱時發生錯誤", "Please try again or view your console for hints.": "請重試或檢視您的主控臺以取得更多資訊。", @@ -1749,7 +1623,6 @@ "Subscribed lists": "已訂閱的清單", "Subscribing to a ban list will cause you to join it!": "訂閱封鎖清單會讓您加入它!", "If this isn't what you want, please use a different tool to ignore users.": "如果這不是您想要的,請使用不同的工具來忽略使用者。", - "Room ID or alias of ban list": "聊天室 ID 或封鎖清單的別名", "Subscribe": "訂閱", "You have ignored this user, so their message is hidden. Show anyways.": "您已經忽略了這個使用者,所以他們的訊息會隱藏。無論如何都顯示。", "Custom (%(level)s)": "自訂 (%(level)s)", @@ -1772,7 +1645,6 @@ "Using this widget may share data with %(widgetDomain)s.": "使用這個小工具可能會與 %(widgetDomain)s 分享資料 。", "Widget added by": "小工具新增由", "This widget may use cookies.": "這個小工具可能會使用 cookies。", - "Enable local event indexing and E2EE search (requires restart)": "啟用本機事件索引與端到端加密搜尋(需要重新啟動)", "Connecting to integration manager...": "正在連線到整合管理員……", "Cannot connect to integration manager": "無法連線到整合管理員", "The integration manager is offline or it cannot reach your homeserver.": "整合管理員已離線或無法存取您的家伺服器。", @@ -1793,7 +1665,6 @@ "Decline (%(counter)s)": "拒絕 (%(counter)s)", "Manage integrations": "管理整合", "Verification Request": "驗證請求", - " (1/%(totalCount)s)": " (1/%(totalCount)s)", "Match system theme": "符合系統佈景主題", "%(senderName)s placed a voice call.": "%(senderName)s 撥打了語音通話。", "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s 撥打了語音通話。(不被此瀏覽器支援)", @@ -1835,7 +1706,6 @@ "%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s 將封鎖符合 %(oldGlob)s 聊天室的規則變更為 %(newGlob)s,因為 %(reason)s", "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s 將封鎖符合 %(oldGlob)s 伺服器的規則變更為 %(newGlob)s,因為 %(reason)s", "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s 將封鎖符合 %(oldGlob)s 的規則更新為 %(newGlob)s,因為 %(reason)s", - "Send cross-signing keys to homeserver": "將交叉簽章的金鑰傳送到家伺服器", "Cross-signing public keys:": "交叉簽章的公開金鑰:", "not found": "找不到", "Cross-signing private keys:": "交叉簽章的私密金鑰:", @@ -1843,9 +1713,6 @@ "Secret storage public key:": "秘密儲存空間公開金鑰:", "in account data": "在帳號資料中", "Cross-signing": "交叉簽章", - "Enter secret storage passphrase": "輸入秘密儲存空間密碼", - "Unable to access secret storage. Please verify that you entered the correct passphrase.": "無法存取秘密儲存空間。請驗證您是否輸入了正確的密碼。", - "Warning: You should only access secret storage from a trusted computer.": "警告:您應該僅從信任的電腦存取秘密儲存空間。", "Cross-signing and secret storage are enabled.": "已啟用交叉簽章與秘密儲存空間。", "Cross-signing and secret storage are not yet set up.": "尚未設定交叉簽章與秘密儲存空間。", "Bootstrap cross-signing and secret storage": "啟動交叉簽章與秘密儲存空間", @@ -1857,19 +1724,11 @@ "Hide verified sessions": "隱藏已驗證的工作階段", "%(count)s verified sessions|other": "%(count)s 個已驗證的工作階段", "%(count)s verified sessions|one": "1 個已驗證的工作階段", - "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "如果您忘記您的密碼,您可以使用您的復原金鑰設定新的復原選項。", - "Enter secret storage recovery key": "輸入秘密儲存空間復原金鑰", - "Unable to access secret storage. Please verify that you entered the correct recovery key.": "無法存取秘密儲存空間。請驗證您是否輸入了正確的復原金鑰。", - "If you've forgotten your recovery key you can .": "如果您忘記您的復原金鑰,您可以。", "Warning: You should only set up key backup from a trusted computer.": "警告:您應該只從信任的電腦設定金鑰備份。", "If you've forgotten your recovery key you can ": "如果您忘記您的復原金鑰,您可以", "Set up with a recovery key": "設定復原金鑰", - "As a safety net, you can use it to restore your access to encrypted messages if you forget your passphrase.": "作為安全網,如果您忘記您的密碼的話,您可以使用它來恢復您對加密訊息的存取。", - "As a safety net, you can use it to restore your access to encrypted messages.": "作為安全網,您可以使用它來恢復您對加密訊息的存取。", - "Keep your recovery key somewhere very secure, like a password manager (or a safe).": "將您的復原金鑰保留在某個非常安全的地方,如密碼管理員(或保險櫃)中。", "Your recovery key has been copied to your clipboard, paste it to:": "您的復原金鑰已被複製到您的剪貼簿,請將其貼到:", "Your recovery key is in your Downloads folder.": "您的復原金鑰在您的下載資料夾中。", - "Storing secrets...": "正在儲存秘密……", "Unable to set up secret storage": "無法設定秘密儲存空間", "Close preview": "關閉預覽", "Language Dropdown": "語言下拉式選單", @@ -1885,7 +1744,6 @@ "Suggestions": "建議", "Failed to find the following users": "找不到以下使用者", "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "以下使用者可能不存在或無效,且無法被邀請:%(csvNames)s", - "Show a presence dot next to DMs in the room list": "在聊天室清單中的直接訊息旁顯示上線狀態點", "Lock": "鎖定", "Restore": "還原", "a few seconds ago": "數秒前", @@ -1904,8 +1762,6 @@ "%(num)s days from now": "從現在開始 %(num)s 天", "Failed to invite the following users to chat: %(csvUsers)s": "邀請使用者加入聊天失敗:%(csvUsers)s", "We couldn't create your DM. Please check the users you want to invite and try again.": "我們無法建立您的直接對話。請檢查您想要邀請的使用者並再試一次。", - "Complete security": "完全安全", - "Verify this session to grant it access to encrypted messages.": "驗證此工作階段以取得對已加密訊息的存取權限。", "Start": "開始", "Session verified": "工作階段已驗證", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "您的新工作階段已驗證。其對您的已加密訊息有存取權,其他使用者也將會看到其受信任。", @@ -1916,7 +1772,6 @@ "Something went wrong trying to invite the users.": "在嘗試邀請使用者時發生錯誤。", "We couldn't invite those users. Please check the users you want to invite and try again.": "我們無法邀請那些使用者。請檢查您想要邀請的使用者並再試一次。", "Recently Direct Messaged": "最近傳送過直接訊息", - "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "如果您找不到某人,請詢問他們的使用者名稱(範例:@user:server.com)或分享此聊天室。", "Verify User": "驗證使用者", "For extra security, verify this user by checking a one-time code on both of your devices.": "為了提高安全性,請透過檢查您兩個裝置上的一次性代碼來驗證此使用者。", "Start Verification": "開始驗證", @@ -1925,39 +1780,24 @@ "You can use /help to list available commands. Did you mean to send this as a message?": "您可以使用 /help 來列出可用的指令。您是要傳送此訊息嗎?", "Hint: Begin your message with // to start it with a slash.": "提示:以 // 開頭讓您的訊息傳送時可以用斜線開頭。", "Send as message": "以訊息傳送", - "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s 向此聊天室新增了 %(addedAddresses)s 與其他 %(count)s 個地址", - "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s 從此聊天室移除了 %(removedAddresses)s 與其他 %(count)s 個地址", - "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s 對此聊天室移除了 %(countRemoved)s 個並新增了 %(countAdded)s 地址到此聊天室", - "%(senderName)s turned on end-to-end encryption.": "%(senderName)s 開啟了端到端加密。", - "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s 開啟了端到端加密(無法識別的演算法 %(algorithm)s)。", "This room is end-to-end encrypted": "此聊天室已端到端加密", "Everyone in this room is verified": "此聊天室中每個人都已驗證", "Invite only": "僅邀請", "Send a reply…": "傳送回覆……", "Send a message…": "傳送訊息……", "Reject & Ignore user": "回絕並忽略使用者", - "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "如果您找不到某人,請詢問他們以取得他們的使用者名稱,分享您的使用者名稱 (%(userId)s) 或簡介連結。", "Enter your account password to confirm the upgrade:": "輸入您的帳號密碼以確認升級:", "You'll need to authenticate with the server to confirm the upgrade.": "您必須透過伺服器驗證以確認升級。", - "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "使用通關密語保護您的加密金鑰。為了取得最強的安全性,此通關密語應與您的帳號密碼不同:", - "Enter a passphrase": "輸入通關密語", - "Enter your passphrase a second time to confirm it.": "輸入您的通關密語兩次以確認。", - "Verify other users in their profile.": "透過他們的簡介驗證其他使用者。", "Upgrade your encryption": "升級您的加密", "Set up encryption": "設定加密", - "Encryption upgraded": "加密已升級", - "Encryption setup complete": "加密設定完成", - "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "聊天室中有未知的工作階段:如果您不驗證它們就繼續,就有可能讓人監聽的您的通話。", "Verify this session": "驗證此工作階段", "Encryption upgrade available": "已提供加密升級", - "Unverified session": "未驗證的工作階段", "Verifies a user, session, and pubkey tuple": "驗證使用者、工作階段與公開金鑰組合", "Unknown (user, session) pair:": "未知(使用者、工作階段)配對:", "Session already verified!": "工作階段已驗證!", "WARNING: Session already verified, but keys do NOT MATCH!": "警告:工作階段已驗證、但金鑰不符合!", "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!": "警告:金鑰驗證失敗!%(userId)s 與工作階段 %(deviceId)s 簽署的金鑰是「%(fprint)s」,並不符合提供的金鑰「%(fingerprint)s」。這可能代表您的通訊已被攔截!", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "您提供的簽署金鑰符合您從 %(userId)s 工作階段 %(deviceId)s 收到的簽署金鑰。工作階段標記為已驗證。", - "Enable cross-signing to verify per-user instead of per-session (in development)": "啟用交叉簽章以驗證使用者而非工作階段(開發中)", "Never send encrypted messages to unverified sessions from this session": "不要從此工作階段傳送已加密的訊息給未驗證的工作階段", "Never send encrypted messages to unverified sessions in this room from this session": "不要從此工作階段傳送已加密的訊息給此聊天室中未驗證的工作階段", "Enable message search in encrypted rooms": "在已加密的聊天室中啟用訊息搜尋", @@ -1965,7 +1805,6 @@ "They match": "它們符合", "They don't match": "它們不符合", "To be secure, do this in person or use a trusted way to communicate.": "為了安全,請親自進行或使用可信的通訊方式。", - "Verify your other sessions easier": "更容易地驗證您其他的工作階段", "Review": "評論", "This bridge was provisioned by .": "此橋接是由 設定。", "Workspace: %(networkName)s": "工作空間:%(networkName)s", @@ -1985,7 +1824,6 @@ "Securely cache encrypted messages locally for them to appear in search results.": "將加密的訊息安全地在本機快取以出現在顯示結果中。", "Enable": "啟用", "%(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 桌面版。", - "%(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 桌面版來讓已加密的訊息出現在搜尋結果中。", "This session is backing up your keys. ": "此工作階段正在備份您的金鑰。 ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "此工作階段不會備份您的金鑰,但您已有既有的備份,您可以從那邊復原,或是稍後再做。", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "在登出前,請先將此工作階段連線到金鑰備份以避免遺失任何可能僅在此工作階段中的金鑰。", @@ -1999,7 +1837,6 @@ "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 in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "備份金鑰已儲存在秘密儲存空間,但此功能未在此工作階段上啟用。請在實驗室中啟用簽章以修改金鑰備份狀態。", "Your keys are not being backed up from this session.": "您的金鑰沒有從此工作階段備份。", "Enable desktop notifications for this session": "為此工作階段啟用桌面通知", "Enable audible notifications for this session": "為此工作階段啟用聲音通知", @@ -2007,26 +1844,19 @@ "Session ID:": "工作階段 ID:", "Session key:": "工作階段金鑰:", "Message search": "訊息搜尋", - "Sessions": "工作階段", "A session's public name is visible to people you communicate with": "工作階段的公開名稱可被您通訊的夥伴看到", "This room is bridging messages to the following platforms. Learn more.": "此聊天室已橋接訊息到以下平臺。取得更多詳細資訊。", "This room isn’t bridging messages to any platforms. Learn more.": "此聊天室未橋接訊息到任何平臺。取得更多詳細資訊。", "Bridges": "橋接", "This user has not verified all of their sessions.": "此使用者尚未驗證他們的所有工作階段。", - "You have not verified this user. This user has verified all of their sessions.": "您尚未驗證此使用者。此使用者已驗證他們所有的工作階段。", "You have verified this user. This user has verified all of their sessions.": "您已驗證此使用者。此使用者已驗證他們所有的工作階段。", "Someone is using an unknown session": "某人正仔使用未知的工作階段", - "Some sessions for this user are not trusted": "此使用者的某些工作階段未受信任", - "All sessions for this user are trusted": "此使用者的所有工作階段皆受信任", - "Some sessions in this encrypted room are not trusted": "此已加密的聊天室中的某些工作階段未受信任", - "All sessions in this encrypted room are trusted": "在此已加密聊天室的所有工作階段都受信任", "Your key share request has been sent - please check your other sessions for key share requests.": "您的金鑰分享請求已傳送,請檢查您其他的工作階段以取得金鑰分享請求。", "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.": "金鑰分享請求已自動傳送到您其他的工作階段。如果您在您其他的工作階段上拒絕或忽略金鑰分享請求,點擊此處以再此請求此工作階段的金鑰。", "If your other sessions do not have the key for this message you will not be able to decrypt them.": "如果您的其他工作階段沒有此訊息的金鑰,您就無法解密它們。", "Re-request encryption keys from your other sessions.": "從您的其他工作階段重新請求加密金鑰。", "Encrypted by an unverified session": "已由未驗證的工作階段加密", "Encrypted by a deleted session": "被已刪除的工作階段加密", - "No sessions with registered encryption keys": "沒有已註冊加密金鑰的工作階段", "Waiting for %(displayName)s to accept…": "正在等待 %(displayName)s 接受……", "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "您的訊息已受保護,只有您與收件人才有獨一無二的金鑰將其解鎖。", "Your messages are not secure": "您的訊息不安全", @@ -2044,94 +1874,59 @@ "If you can't scan the code above, verify by comparing unique emoji.": "如果您無法掃描上面的條碼,請透過比較獨一無二的表情符號驗證。", "You've successfully verified %(displayName)s!": "您已成功驗證 %(displayName)s!", "Got it": "好的", - "Verification timed out. Start verification again from their profile.": "驗證逾時。再次從他們的簡介中開始驗證。", - "%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s 已取消驗證。再次從他們的簡介中開始驗證。", - "You cancelled verification. Start verification again from their profile.": "您取消了驗證。再次從他們的簡介中開始驗證。", "Clear all data in this session?": "清除所有此工作階段中的資料?", "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "將會永久清除此工作階段的所有資料。除發已備份金鑰,否則已加密的訊息將會遺失。", "Verify session": "驗證工作階段", - "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "要驗證此工作階段是否可受信任,請檢查您在裝置上的使用者設定中看到的金鑰是否與下方的金鑰相符:", - "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "要驗證此工作階段是否可受信任,請透過其他方式(如面對面或電話)聯絡其所有人,並詢問他們在他們的使用者設定中看到的金鑰是否與下面的相同:", "Session name": "工作階段名稱", "Session key": "工作階段金鑰", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "如果其相符,請按下方的驗證按鈕。如果不相符,則表示可能有其他人正在攔截此工作階段,您可能會想要改按黑名單按鈕。", "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "驗證此使用者將會把他們的工作階段標記為受信任,並同時為他們標記您的工作階段可受信任。", - "You added a new session '%(displayName)s', which is requesting encryption keys.": "您加入了一個新的工作階段「%(displayName)s」,其正在請求加密金鑰。", - "Your unverified session '%(displayName)s' is requesting encryption keys.": "您的未驗證工作階段「%(displayName)s」正在請求加密金鑰。", - "Loading session info...": "正在載入工作階段資訊……", "New session": "新工作階段", "Use this session to verify your new one, granting it access to encrypted messages:": "使用此工作階段以驗證您新的工作階段,並授予其對加密訊息的存取權限:", "If you didn’t sign in to this session, your account may be compromised.": "如果您未登入此工作階段,您的帳號可能已被盜用。", "This wasn't me": "這不是我", "This will allow you to return to your account after signing out, and sign in on other sessions.": "退出後,您可以回到您的帳號,並登入其他工作階段。", - "You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "您目前正將未驗證的工作階段加入黑名單;要傳送訊息給這些作階段,您必須驗證它們。", - "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "我們建議您對每個工作階段進行驗證流程以確認它們屬於其合法所有者,但如果您願意的話,您還是可以不經驗證就重新傳送訊息。", - "Room contains unknown sessions": "聊天室包含未知的工作階段", - "\"%(RoomName)s\" contains sessions that you haven't seen before.": "「%(RoomName)s」包含您以前沒看過的工作階段。", - "Unknown sessions": "未知的工作階段", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "透過輸入您的通關密語來存取您的安全訊息歷史,以及用來驗證其他工作階段的交叉簽章身份。", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "透過輸入您的復原金鑰來存取您的安全訊息歷史,以及用來驗證其他工作階段的交叉簽章身份。", - "Message not sent due to unknown sessions being present": "因為有未知的工作階段,所以並未傳送訊息", - "Show sessions, send anyway or cancel.": "顯示工作階段無論如何都要傳送取消。", "Your new session is now verified. Other users will see it as trusted.": "您新的工作階段已驗證。其他使用者將會看到其已受信任。", "Without completing security on this session, it won’t have access to encrypted messages.": "如果在此工作階段中沒有完成安全性驗證,它將無法存取已加密的訊息。", "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "變更您的密碼將會重設您所有的工作階段上任何端到端加密金鑰,讓已加密的聊天歷史無法讀取。設定金鑰備份或在重設您的密碼前從其他工作階段匯出您的聊天室金鑰。", "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.": "您已登出所有工作階段,且將不會再收到推播通知。要重新啟用通知,請在每個裝置上重新登入。", "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.": "重新取得對您的帳號的存取權限,並復原此工作階段中的復原金鑰。沒有它們,您就無法在任何工作階段中閱讀您所有的安全訊息。", "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.": "警告:您的個人資料(包含加密金鑰)仍儲存在此工作階段中。如果您已不用此工作階段了,或是您想登入另一個帳號,就請將其清除。", - "Sender session information": "傳送者工作階段資訊", "Restore your key backup to upgrade your encryption": "復原您的金鑰備份以升級您的加密", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "升級此工作階段以允許驗證其他工作階段,給予它們存取加密訊息的權限,並為其他使用者標記它們為受信任。", - "Set up encryption on this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "在此工作階段上設定加密以使其可以驗證其他工作階段,給它們對已加密訊息的存取權,並將它們對其他使用者標記為受信任。", - "Back up my encryption keys, securing them with the same passphrase": "備份我的加密金鑰,使用相同的通關密語保護它們", - "This session can now verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "這個工作階段現在可以驗證其他工作階段,給它們對已加密訊息的存取權,並將它們對其他使用者標記為受信任。", "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.": "沒有設定安全訊息復原,如果您登出的或是用其他工作階段的話,您就無法復原您已加密的訊習歷史。", "This session is encrypting history using the new recovery method.": "此工作階段正在使用新的復原方法加密歷史。", "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "此工作階段已偵測到您的復原通關密語與安全訊息金鑰已被移除。", - "Keep secret storage passphrase in memory for this session": "此工作階段會將秘密儲存空間通關密語置於記憶體中", - "Confirm the emoji below are displayed on both devices, in the same order:": "確認以下顯示的表情符號以相同的順序顯示在兩個裝置上:", - "Verify this device by confirming the following number appears on its screen.": "透過確認以下顯示在螢幕上的數字來驗證此裝置。", "Mod": "模組", "Encryption enabled": "加密已啟用", "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "此聊天室中的訊息已端到端加密。了解更多資訊並在使用者的個人檔案中驗證使用者。", "Encryption not enabled": "加密未啟用", "The encryption used by this room isn't supported.": "不支援此聊天室使用的加密。", "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.": "驗證此裝置以標記其為受信任。", - "Show padlocks on invite only rooms": "在僅邀請的聊天室上顯示掛鎖", "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "驗證此裝置將會將其標記為受信任,且已驗證您的使用者將會信任此裝置。", "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.": "如果您不小心這樣做了,您可以在此工作階段上設定安全訊息,這將會以新的復原方法重新加密此工作階段的訊息歷史。", "If disabled, messages from encrypted rooms won't appear in search results.": "若停用,從已加密的聊天室而來的訊息將不會出現在搜尋結果中。", "Disable": "停用", - "Not currently downloading messages for any room.": "目前未下載任何聊天室的訊息。", - "Downloading mesages for %(currentRoom)s.": "正在下載 %(currentRoom)s 的訊息。", "%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s 正在安全地本機快取已加密的訊息以讓它們顯示在搜尋結果中:", "Space used:": "已使用空間:", "Indexed messages:": "已索引的訊息:", - "Number of rooms:": "聊天室數量:", "Setting up keys": "設定金鑰", "How fast should messages be downloaded.": "訊息應多快下載一次。", "Verify yourself & others to keep your chats safe": "驗證您自己與其他以保證您的聊天安全", "You have not verified this user.": "您尚未驗證此使用者。", "Recovery key mismatch": "復原金鑰不相符", "Incorrect recovery passphrase": "錯誤的復原通關密語", - "Backup restored": "備份已復原", "Enter recovery passphrase": "輸入復原通關密語", "Enter recovery key": "輸入復原金鑰", "Confirm your identity by entering your account password below.": "透過在下方輸入您的帳號密碼來確認身份。", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "將其副本保存在安全的地方,如密碼管理器或保險箱等。", "Your recovery key": "您的復原金鑰", "Copy": "副本", - "You can now verify your other devices, and other users to keep your chats safe.": "您現在可以驗證您的其他裝置與其他使用者以保護您的聊天安全。", "Make a copy of your recovery key": "複製您的復原金鑰", - "You're done!": "您已經完成了!", "Create key backup": "建立金鑰備份", "Message downloading sleep time(ms)": "訊息下載休眠時間(毫秒)", - "of ": "的 ", "Indexed rooms:": "已索引的聊天室:", - "%(crawlingRooms)s out of %(totalRooms)s": "%(totalRooms)s 中的 %(crawlingRooms)s", "If you cancel now, you won't complete verifying the other user.": "如果您現在取消,您將無法完成驗證其他使用者。", "If you cancel now, you won't complete verifying your other session.": "如果您現在取消,您將無法完成驗證您其他的工作階段。", - "If you cancel now, you won't complete your secret storage operation.": "如果您現在取消,您將無法完成驗證您的秘密儲存空間動作。", "Cancel entering passphrase?": "取消輸入通關密語?", "Show typing notifications": "顯示打字通知", "Reset cross-signing and secret storage": "重設交叉簽章與秘密儲存空間", @@ -2146,18 +1941,13 @@ "Not Trusted": "未受信任", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) 登入到未驗證的新工作階段:", "Ask this user to verify their session, or manually verify it below.": "要求此使用者驗證他們的工作階段,或在下方手動驗證。", - "Manually Verify": "手動驗證", "Verify by scanning": "透過掃描來驗證", - "The version of %(brand)s": "%(brand)s 版本", "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "您是否在以觸控為主要機制的裝置上使用 %(brand)s", "Whether you're using %(brand)s as an installed Progressive Web App": "您是否使用 PWA 形式的 %(brand)s", "Your user agent": "您的使用者代理字串", - "The information being sent to us to help make %(brand)s better includes:": "傳送給我們以協助改進 %(brand)s 的資訊包含了:", "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 支援的掃描 QR code 或顏文字驗證。請用其他客戶端試試看。", "You declined": "您拒絕了", "%(name)s declined": "%(name)s 拒絕了", - "accepting …": "正在接受……", - "declining …": "正在拒絕……", "Your homeserver does not support cross-signing.": "您的家伺服器不支援交叉簽章。", "Homeserver feature support:": "家伺服器功能支援:", "exists": "存在", @@ -2181,7 +1971,6 @@ "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "要回報與 Matrix 有關的安全性問題,請閱讀 Matrix.org 安全性揭露政策。", "Mark all as read": "全部標示為已讀", "Not currently indexing messages for any room.": "目前未為任何聊天室編寫索引。", - "Currently indexing: %(currentRoom)s.": "目前正在製作索引:%(currentRoom)s。", "%(doneRooms)s out of %(totalRooms)s": "%(totalRooms)s 中的 %(doneRooms)s", "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s 為此聊天室新增了替代位置 %(addresses)s。", "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s 為此聊天室新增了替代位置 %(addresses)s。", @@ -2190,20 +1979,14 @@ "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s 為此聊天是變更了替代位置。", "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s 為此聊天是變更了主要及替代位置。", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "更新聊天室的替代位置時發生錯誤。伺服器可能不允許這麼做,或是昱到了暫時性的故障。", - "Alternative addresses for this room:": "此聊天是的替代位置:", - "This room has no alternative addresses": "此聊天室沒有替代位置", - "New address (e.g. #foo:domain)": "新位置(例如:#foo:domain)", - "Local addresses (unmoderated content)": "本機位置(未經審核的內容)", "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s 將聊天室名稱從 %(oldRoomName)s 變更為 %(newRoomName)s。", "%(senderName)s changed the addresses for this room.": "%(senderName)s 變更了此聊天室的位置。", - "You don't have permission to delete the alias.": "您沒有刪除別名的權限。", "Support adding custom themes": "支援新增自訂佈景主題", "Invalid theme schema.": "無效的佈景主題架構。", "Error downloading theme information.": "下載佈景主題資訊時發生錯誤。", "Theme added!": "已新增佈景主題!", "Custom theme URL": "自訂佈景主題 URL", "Add theme": "新增佈景主題", - "Review Sessions": "檢閱工作階段", "Scroll to most recent messages": "捲動到最新訊息", "Local address": "本機位置", "Published Addresses": "發佈的位置", @@ -2213,9 +1996,6 @@ "New published address (e.g. #alias:server)": "新的已發佈位置(例如:#alias:server)", "Local Addresses": "本機位置", "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "為此聊天室設定位置讓使用者可以透過您的家伺服器找到此聊天室 (%(localDomain)s)", - "Open an existing session & use it to verify this one, granting it access to encrypted messages.": "開啟既有的工作階段並使用它來驗證此工作階段,並授予其存取已加密訊息的權限。", - "Waiting…": "等待中……", - "If you can’t access one, ": "如果您無法存取裝置,", "Enter a server name": "輸入伺服器名稱", "Looks good": "看起來不錯", "Can't find this server or its room list": "找不到此伺服器或其聊天室清單", @@ -2239,7 +2019,6 @@ "%(brand)s encountered an error during upload of:": "%(brand)s 在上傳以下內容時遇到錯誤:", "Upload completed": "上傳完成", "Cancelled signature upload": "已取消簽章上傳", - "Unabled to upload": "無法上傳", "Signature upload success": "簽章上傳成功", "Signature upload failed": "簽章上傳失敗", "Navigation": "導航", @@ -2254,7 +2033,6 @@ "Toggle Bold": "切換粗體", "Toggle Italics": "切換斜體", "Toggle Quote": "切換引用", - "Toggle Markdown": "切換 Markdown", "New line": "新行", "Navigate recent messages to edit": "瀏覽最近的消息以進行編輯", "Jump to start/end of the composer": "跳到編輯區的開頭/結尾", @@ -2288,16 +2066,11 @@ "Previous/next unread room or DM": "上一下/下一個未讀聊天室或直接訊息", "Previous/next room or DM": "上一個/下一個聊天室或直接訊息", "Toggle right panel": "切換右側面板", - "Secret Storage key format:": "秘密儲存金鑰格式:", - "outdated": "太舊了", - "up to date": "已為最新", "Self signing private key:": "自行簽章私鑰:", "cached locally": "本機快取", "not found locally": "在本機找不到", "User signing private key:": "使用者簽章私鑰:", - "Unverified login. Was this you?": "未驗證的登入。是您嗎?", "Manually verify all remote sessions": "手動驗證所有遠端工作階段", - "Update your secure storage": "更新您的安全儲存空間", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "單獨驗證使用者使用的每個工作階段以將其標記為受信任,而非信任交叉簽章的裝置。", "In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "在已加密的聊天室中,您的訊息相當安全,只有您與接收者有獨一無二的金鑰可以將其解鎖。", "Verify all users in a room to ensure it's secure.": "驗證所有在聊天室中的使用者以確保其安全。", @@ -2361,32 +2134,20 @@ "Failed to set topic": "設定主題失敗", "Command failed": "指令失敗", "Could not find user in room": "在聊天室中找不到使用者", - "Use an existing session to verify this one, granting it access to encrypted messages.": "使用既有的工作階段來驗證這個,授予其對加密訊息的存取權限。", - "Use your other device to continue…": "使用您其他的裝置繼續……", "Syncing...": "正在同步……", "Signing In...": "正在登入……", "If you've joined lots of rooms, this might take a while": "如果您已加入很多聊天室,這可能需要一點時間", "If you cancel now, you won't complete your operation.": "如果您現在取消,您將無法完成您的操作。", - "Enable cross-signing to verify per-user instead of per-session": "啟用交叉簽章可以使用者為單位進行驗證,而非驗證每個工作階段", - "Keep recovery passphrase in memory for this session": "在此工作階段中將復原通關密語保留在記憶體中", "Verify other session": "驗證其他工作階段", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "無法存取秘密儲存空間。請驗證您是否輸入正確的復原通關密語。", - "Warning: You should only do this on a trusted computer.": "警告:您應該只在信任的電腦上做這件事。", - "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "透過輸入您的復原通關密語存取您的安全訊息歷史與您的交叉簽章身份來驗證其他工作階段。", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "如果您忘記您的復原通關密語,您可以使用您的復原金鑰設定新的復原選項。", "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "備份無法使用此復原金鑰解密:請驗證您是否輸入正確的復原金鑰。", "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "備份無法使用此復原通關密語解密:請驗證您是否輸入正確的復原通關密語。", - "If you can’t access one, ": "如果您無法存取,", "Great! This recovery passphrase looks strong enough.": "很好!這個復原通關密語看起來夠強。", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "設定復原通關密語以保護您的加密資訊並在您登出時復原它。且應該要與您的帳號密碼不同:", "Enter a recovery passphrase": "輸入復原通關密語", - "Back up encrypted message keys": "備份加密訊息金鑰", "Enter your recovery passphrase a second time to confirm it.": "再次輸入您的復原通關密語以確認。", "Confirm your recovery passphrase": "確認您的復原通關密語", "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "您的復原金鑰是安全網 - 如果您忘記您的復原通關密語的話,您可以用它來恢復您對加密訊息的存取權。", - "Confirm recovery passphrase": "確認復原通關密語", "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "我們將會在我們的伺服器上儲存一份您金鑰的加密副本。使用復原通關密語以保護您的備份。", - "Enter a recovery passphrase...": "輸入復原通關密語……", "Please enter your recovery passphrase a second time to confirm.": "請再次輸入您的復原通關密語以確認。", "Repeat your recovery passphrase...": "再次輸入您的復原通關密語……", "Secure your backup with a recovery passphrase": "使用復原通關密語保護您的備份", @@ -2402,14 +2163,10 @@ "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "透過驗證這個從您的其他工作階段而來的登入來確認您的身份,並授予其對加密訊息的存取權限。", "This requires the latest %(brand)s on your other devices:": "這需要在您的其他裝置上使用最新的 %(brand)s:", "or another cross-signing capable Matrix client": "或另一個有交叉簽章功能的 Matrix 客戶端", - "Use Recovery Passphrase or Key": "使用復原通關密語或金鑰", "Where you’re logged in": "您登入的地方", "Manage the names of and sign out of your sessions below or verify them in your User Profile.": "在下方管理您工作階段的名稱與登入或在您的使用者檔案中驗證它們。", "Review where you’re logged in": "審閱您的登入位置", - "Verify your other sessions": "驗證您其他的工作階段", "New login. Was this you?": "新登入。這是您嗎?", - "Unverified sessions currently have access to your account & messages": "未驗證的工作階段目前正在存取您的帳號與訊息", - "Verify the identity of the new login accessing your account & messages": "驗證存取您帳號與訊息的新登入身份", "Verify all your sessions to ensure your account & messages are safe": "驗證您所有的工作階段以確保您的帳號與訊息是安全的", "Verify the new login accessing your account: %(name)s": "驗證正在存取您帳號的新登入:%(name)s", "Restoring keys from backup": "從備份還原金鑰", @@ -2435,17 +2192,14 @@ "Dismiss read marker and jump to bottom": "取消讀取標記並跳至底部", "Jump to oldest unread message": "跳至最舊的未讀訊息", "Upload a file": "上傳檔案", - "Use IRC layout": "使用 IRC 佈局", "IRC display name width": "IRC 顯示名稱寬度", "Create room": "建立聊天室", "Font scaling": "字型縮放", "Font size": "字型大小", - "Custom font size": "自訂字型大小", "Size must be a number": "大小必須為數字", "Custom font size can only be between %(min)s pt and %(max)s pt": "自訂字型大小僅能為 %(min)s 點至 %(max)s 點間", "Use between %(min)s pt and %(max)s pt": "使用 %(min)s 點至 %(max)s 點間", "Appearance": "外觀", - "Use the improved room list (in development - refresh to apply changes)": "使用改進的聊天室清單(開發中 - 重新整理以套用變更)", "Room name or address": "聊天室名稱或地址", "Joins room with given address": "以給定的地址加入聊天室", "Unrecognised room address:": "無法識別的聊天室地址:", @@ -2483,16 +2237,13 @@ "New version available. Update now.": "有可用的新版本。立刻更新。", "Emoji picker": "顏文字挑選器", "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "您的伺服器管理員已在私人聊天室與直接訊息中預設停用端到端加密。", - "Show %(n)s more": "顯示另外 %(n)s 個", "People": "夥伴", "Switch to light mode": "切換至淺色模式", "Switch to dark mode": "切換至深色模式", "Switch theme": "切換佈景主題", "Security & privacy": "安全性與隱私權", "All settings": "所有設定", - "Archived rooms": "已封存的聊天室", "Feedback": "回饋", - "Account settings": "帳號設定", "No recently visited rooms": "沒有最近造訪過的聊天室", "Sort by": "排序方式", "Unread rooms": "未讀聊天室", @@ -2504,31 +2255,16 @@ "Show %(count)s more|one": "再顯示 %(count)s 個", "Leave Room": "離開聊天室", "Room options": "聊天室選項", - "sent an image.": "傳送圖片。", - "You: %(message)s": "您:%(message)s", "Activity": "活動", "A-Z": "A-Z", "Light": "淺色", "Dark": "暗色", "Customise your appearance": "自訂您的外觀", "Appearance Settings only affect this %(brand)s session.": "外觀設定僅會影響此 %(brand)s 工作階段。", - "Recovery Key": "復原金鑰", - "This isn't the recovery key for your account": "這不是您帳號的復原金鑰", - "This isn't a valid recovery key": "這不是有效的復原金鑰", "Looks good!": "看起來不錯!", "Use Recovery Key or Passphrase": "使用復原金鑰或通關密語", "Use Recovery Key": "使用復原金鑰", - "Enter your Recovery Key or enter a Recovery Passphrase to continue.": "輸入您的復原金鑰或輸入復原通關密語以繼續。", - "Enter your Recovery Key to continue.": "輸入您的復原金鑰以繼續。", - "Upgrade your Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you'll need it to unlock your data.": "升級您的復原金鑰以儲存加密金鑰與您的帳號資料。如果您失去對此登入階段的存取權,您必須用它來解鎖您的資料。", - "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.": "將復原金鑰存放在安全的地方,它可以用於解鎖您的已加密訊息與資料。", - "Create a Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you’ll need it to unlock your data.": "建立您的復原金鑰以儲存加密金鑰與您的帳號資料。如果您失去對此登入階段的存取權,您必須用它來解鎖您的資料。", - "Create a Recovery Key": "建立復原金鑰", - "Upgrade your Recovery Key": "升級您的復原金鑰", - "Store your Recovery Key": "儲存您的復原金鑰", - "Use the improved room list (in development - will refresh to apply changes)": "使用改進的聊天室清單(開發中 ── 將會重新整理以套用變更)", "Use the improved room list (will refresh to apply changes)": "使用改進的聊天室清單(將會重新整理以套用變更)", - "Enable IRC layout option in the appearance tab": "在外觀分頁中啟用 IRC 佈局選項", "Use custom size": "使用自訂大小", "Hey you. You're the best!": "你是最棒的!", "Message layout": "訊息佈局", From e808cdbe2f7cdc18c25e31a0e999a1f2281425fd Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 10 Jul 2020 19:56:31 +0100 Subject: [PATCH 0869/1504] Remove translations missing the brand variable --- src/i18n/strings/cs.json | 8 -------- src/i18n/strings/de_DE.json | 2 -- src/i18n/strings/eo.json | 1 - src/i18n/strings/et.json | 3 --- src/i18n/strings/eu.json | 5 ----- src/i18n/strings/fa.json | 3 --- src/i18n/strings/fi.json | 2 -- src/i18n/strings/fr.json | 1 - src/i18n/strings/gl.json | 1 - src/i18n/strings/hi.json | 10 ---------- src/i18n/strings/hu.json | 2 -- src/i18n/strings/jbo.json | 5 ----- src/i18n/strings/ko.json | 1 - src/i18n/strings/lt.json | 1 - src/i18n/strings/lv.json | 1 - src/i18n/strings/ml.json | 3 --- src/i18n/strings/nl.json | 1 - src/i18n/strings/nn.json | 1 - src/i18n/strings/pt_BR.json | 2 -- src/i18n/strings/ru.json | 1 - src/i18n/strings/sk.json | 6 ------ src/i18n/strings/te.json | 5 ----- src/i18n/strings/vi.json | 1 - src/i18n/strings/zh_Hans.json | 4 ---- src/i18n/strings/zh_Hant.json | 2 -- 25 files changed, 72 deletions(-) diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index cff7687599..3c6cc3fc66 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -612,7 +612,6 @@ "collapse": "sbalit", "expand": "rozbalit", "Old cryptography data detected": "Nalezeny starší šifrované datové zprávy", - "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.": "Byly nalezeny datové zprávy ze starší verze %(brand)s. Důsledkem bude, že end-to-end šifrování nebude ve starší verzi %(brand)s správně fungovat. Šifrované zprávy ze starší verze nemusí být čitelné v nové verzi. Může dojít i k selhání zasílaní zpráv s touto verzí %(brand)su. Pokud zaznamenáte některý z uvedených problému, odhlaste se a znovu přihlaste. Pro zachování historie zpráv exportujte a znovu importujte své klíče.", "Warning": "Varování", "Fetching third party location failed": "Nepodařilo se zjistit umístění třetí strany", "I understand the risks and wish to continue": "Rozumím rizikům a přeji si pokračovat", @@ -738,7 +737,6 @@ "The platform you're on": "Vámi používaná platforma", "The version of %(brand)s": "Verze %(brand)su", "Your language of choice": "Váš jazyk", - "Which officially provided instance you are using, if any": "Kterou oficiální instanci %(brand)s používáte (a jestli vůbec)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Zda při psaní zpráv používáte rozbalenou lištu formátování textu", "Your homeserver's URL": "URL vašeho domovského serveru", "e.g. %(exampleValue)s": "např. %(exampleValue)s", @@ -836,7 +834,6 @@ "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Chcete-li nadále používat domovský server %(homeserverDomain)s, měli byste si přečíst a odsouhlasit naše smluvní podmínky.", "Review terms and conditions": "Přečíst smluvní podmínky", "Did you know: you can use communities to filter your %(brand)s experience!": "Věděli jste, že práci s %(brand)s si můžete zpříjemnit používáním skupin!", - "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.": "Pro nastavení filtru přetáhněte avatar skupiny na panel filtrování na levé straně obrazovky. Potom můžete kdykoliv klepnout na avatar skupiny v tomto panelu a %(brand)s vám bude zobrazovat jen místnosti a lidi z dané skupiny.", "You can't send any messages until you review and agree to our terms and conditions.": "Dokud si nepřečtete a neodsouhlasíte naše smluvní podmínky, nebudete moci posílat žádné zprávy.", "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.": "Vaše zpráva nebyla odeslána, protože tento domovský server dosáhl svého měsíčního limitu pro aktivní uživatele. Pro další využívání služby prosím kontaktujte jejího správce.", "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Vaše zpráva nebyla odeslána, protože tento domovský server dosáhl limitu svých zdrojů. Pro další využívání služby prosím kontaktujte jejího správce.", @@ -854,7 +851,6 @@ "You'll lose access to your encrypted messages": "Přijdete o přístup k šifrovaným zprávám", "Are you sure you want to sign out?": "Opravdu se chcete odhlásit?", "Updating %(brand)s": "Aktualizujeme %(brand)s", - "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Jestli máte nějakou zpětnou vazbu nebo máte s %(brand)sem nějaký problém, dejte nám vědět na GitHubu.", "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.": "Abychom předešli řešení jednoho problému několikrát, podívejte se prosím nejdřív seznam existujících issue (a můžete jim dát 👍) nebo můžete vyrobit nové. Jenom nám prosím pište anglicky.", "Report bugs & give feedback": "Hlášení chyb a zpětná vazba", "Go back": "Zpět", @@ -1144,7 +1140,6 @@ "Open Devtools": "Otevřít nástroje pro vývojáře", "Credits": "Poděkování", "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.": "Na adrese %(host)s už jste použili %(brand)s se zapnutou volbou načítání členů místností až při prvním zobrazení. V této verzi je načítání členů až při prvním zobrazení vypnuté. Protože je s tímto nastavením lokální vyrovnávací paměť nekompatibilní, %(brand)s potřebuje znovu synchronizovat údaje z vašeho účtu.", - "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.": "Pokud v jiné karťe otevřený jiný %(brand)s, prosím zavřete ji, protože si dvě různé verze můžou navzájem působit problémy.", "%(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!": "%(brand)s teď používá 3-5× méně paměti, protože si informace o ostatních uživatelích načítá až když je potřebuje. Prosím počkejte na dokončení synchronizace se serverem!", "Update status": "Aktualizovat status", "Clear status": "Smazat status", @@ -1332,7 +1327,6 @@ "Enter username": "Zadejte uživatelské jméno", "Some characters not allowed": "Nějaké znaky jsou zakázané", "Create your Matrix account on ": "Vytvořte si účet Matrix na serveru ", - "Please install Chrome, Firefox, or Safari for the best experience.": "Aby %(brand)s fungoval co nejlépe, nainstalujte si prosím Chrome, Firefox, nebo Safari.", "Want more than a community? Get your own server": "Chcete víc? Můžete mít vlastní server", "%(brand)s failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "%(brand)s nemohl načíst seznam podporovaných protokolů z domovského serveru. Server je možná příliš zastaralý a nepodporuje komunikaci se síti třetích stran.", "%(brand)s failed to get the public room list.": "%(brand)s nemohl načíst seznam veřejných místností.", @@ -1649,7 +1643,6 @@ "View rules": "Zobrazit pravidla", "You are currently subscribed to:": "Odebíráte:", "⚠ These settings are meant for advanced users.": "⚠ Tato nastavení jsou pro pokročilé uživatele.", - "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.": "Sem přidejte uživatele a servery, které chcete ignorovat. Můžete použít hvězdičku místo libovolných znaků. Například pravidlo @bot:* zablokuje všechny uživatele se jménem 'bot' na libovolném serveru.", "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.": "Lidé a servery jsou blokováni pomocí seznamů obsahující pravidla koho blokovat. Odebírání blokovacího seznamu znamená, že neuvidíte uživatele a servery na něm uvedené.", "Personal ban list": "Osobní seznam blokací", "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.": "Váš osobní seznam blokací obsahuje všechny uživatele a servery, které nechcete vidět. Po ignorování prvního uživatele/serveru se vytvoří nová místnost 'Můj seznam blokací' - zůstaňte v ní, aby seznam platil.", @@ -2071,7 +2064,6 @@ "Add a new server...": "Přidat nový server...", "%(networkName)s rooms": "místnosti v %(networkName)s", "Matrix rooms": "místnosti na Matrixu", - "Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Připomínka: Váš prohlížeč není oficiálně podporován, tak se může %(brand)s chovat nepředvídatelně.", "Enable end-to-end encryption": "Povolit E2E šifrování", "You can’t disable this later. Bridges & most bots won’t work yet.": "Už to v budoucnu nepůjde vypnout. Většina botů a propojení zatím nefunguje.", "Server did not require any authentication": "Server nevyžadoval žádné ověření", diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index f01b5837a2..56ffe7327a 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1860,7 +1860,6 @@ "Yours, or the other users’ session": "Deine Sitzung oder die des anderen Benutzers", "%(role)s in %(roomName)s": "%(role)s in %(roomName)s", "This client does not support end-to-end encryption.": "Diese Anwendung unterstützt keine Ende-zu-Ende-Verschlüsselung.", - "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.": "Die Sitzung, die du verifizieren möchtest, unterstützt weder das Scannen eines QR Codes noch die Emoji Verifikation. Bitte versuche es mit einer anderen Anwendung.", "Verify by scanning": "Mit Scannen eines QR Codes verifizieren", "If you can't scan the code above, verify by comparing unique emoji.": "Wenn du den obenstehenden Code nicht scannen kannst versuche es mit der Emoji Verifikation.", "Verify all users in a room to ensure it's secure.": "Verifiziere alle Benutzer in einem Raum um die vollständige Sicherheit zu gewährleisten.", @@ -2079,7 +2078,6 @@ "We couldn't invite those users. Please check the users you want to invite and try again.": "Wir konnten diese Benutzer nicht einladen. Bitte überprüfe sie und versuche es erneut.", "Start a conversation with someone using their name, username (like ) or email address.": "Starte eine Unterhaltung mit jemandem indem du seinen Namen, Benutzernamen (z.B. ) oder E-Mail-Adresse eingibst.", "Invite someone using their name, username (like ), email address or share this room.": "Lade jemanden mit seinem Namen, Benutzernamen (z.B. ) oder E-Mail-Adresse ein oder teile diesen Raum.", - "%(brand)s encountered an error during upload of:": "Es trat ein Fehler auf beim Hochladen von:", "Upload completed": "Hochladen abgeschlossen", "Cancelled signature upload": "Hochladen der Signatur abgebrochen", "Unable to upload": "Hochladen nicht möglich", diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index b587815454..8c778cce60 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -1828,7 +1828,6 @@ "Server rules": "Servilaj reguloj", "User rules": "Uzantulaj reguloj", "You are currently ignoring:": "Vi nun malatentas:", - "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.": "Aldonu ĉi tien uzantojn kaj servilojn, kiujn vi volas malatenti. Uzu steleton por akordigi ĉiajn signojn. Ekzemple, @bot:* malatentigus ĉiujn uzantojn kun la nomo «bot» sur ĉiu servilo.", "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.": "Malatento de homoj okazas per listoj de forbaroj, kiuj enhavas regulojn pri tio, kiun forbari. Abono de listo de forbaroj signifas, ke la uzantoj/serviloj blokataj de la listo estos kaŝitaj de vi.", "Personal ban list": "Persona listo de forbaroj", "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.": "Via persona listo de forbaroj tenas ĉiujn uzantojn/servilojn, kies mesaĝoj vi persone ne volas vidi. Post via unua malatento, nova ĉambro aperos en via listo de ĉambroj, nomita «Mia listo de forbaroj» – restu en ĝi por efikigi la liston de forbaroj.", diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 5f067f9545..17fdc51b0b 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -251,7 +251,6 @@ "Try out new ways to ignore people (experimental)": "Proovi uusi kasutajate eiramise viise (katseline)", "Uploading report": "Laen üles veakirjeldust", "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Kui soovid teatada Matrix'iga seotud turvaveast, siis palun tutvu enne Matrix.org Turvalisuse avalikustamise juhendiga.", - "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.": "Lisa siia kasutajad ja serverid keda soovid eirata. Kasuta tärne kõikide märkide tähistamiseks. Näiteks @bot:* eiraks kõiki kasutajaid kõikidest serveritest, kus nimi on \"bot\".", "Server or user ID to ignore": "Serverid või kasutajate tunnused, mida soovid eirata", "Ignore": "Eira", "If this isn't what you want, please use a different tool to ignore users.": "Kui tulemus pole see mida soovisid, siis pruugi muud vahendit kasutajate eiramiseks.", @@ -1205,7 +1204,6 @@ "Subscribe": "Telli", "Start automatically after system login": "Käivita automaatselt peale arvutisse sisselogimist", "Always show the window menu bar": "Näita alati aknas menüüriba", - "Show tray icon and minimize window to it on close": "Näita süsteemisalve ikooni ja %(brand)si'i akna sulgemisel minimeeri ta salve", "Preferences": "Eelistused", "Room list": "Jututubade loend", "Timeline": "Ajajoon", @@ -1279,7 +1277,6 @@ "Jump to oldest unread message": "Mine vanima lugemata sõnumi juurde", "Upload a file": "Lae fail üles", "Read Marker lifetime (ms)": "Lugemise markeri iga (ms)", - "Read Marker off-screen lifetime (ms)": "Lugemise markeri iga, kui %(brand)s pole fookuses (ms)", "Unignore": "Lõpeta eiramine", "": "", "Import E2E room keys": "Impordi E2E läbiva krüptimise võtmed jututubade jaoks", diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index 1cc07eeaae..66fe2441f2 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -869,7 +869,6 @@ "Updating %(brand)s": "%(brand)s eguneratzen", "Please review and accept the policies of this homeserver:": "Irakurri eta onartu hasiera zerbitzari honen politikak:", "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.": "Aurretik %(brand)s erabili duzu %(host)s zerbitzarian kideen karga alferra gaituta zenuela. Bertsio honetan karga alferra desgaituta dago. Katxe lokala bi ezarpen hauen artean bateragarria ez denez, %(brand)sek zure kontua berriro sinkronizatu behar du.", - "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.": "%(brand)sen beste bertsioa oraindik beste fitxat batean irekita badago, itxi ezazu zerbitzari bera aldi berean karga alferra gaituta eta desgaituta erabiltzeak arazoak sor ditzakeelako.", "Incompatible local cache": "Katxe lokal bateraezina", "Clear cache and resync": "Garbitu katxea eta sinkronizatu berriro", "Add some now": "Gehitu batzuk orain", @@ -1264,7 +1263,6 @@ "Cannot reach homeserver": "Ezin izan da hasiera-zerbitzaria atzitu", "Ensure you have a stable internet connection, or get in touch with the server admin": "Baieztatu Internet konexio egonkor bat duzula, edo jarri kontaktuan zerbitzariaren administratzailearekin", "Your %(brand)s is misconfigured": "Zure %(brand)s gaizki konfiguratuta dago", - "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Eskatu zure administratzaileari zure konfigurazioa egiaztatu dezan ea okerrak diren edo bikoiztuta dauden sarrerak dauden.", "No homeserver URL provided": "Ez da hasiera-zerbitzariaren URL-a eman", "Unexpected error resolving homeserver configuration": "Ustekabeko errorea hasiera-zerbitzariaren konfigurazioa ebaztean", "Unexpected error resolving identity server configuration": "Ustekabeko errorea identitate-zerbitzariaren konfigurazioa ebaztean", @@ -1630,7 +1628,6 @@ "View rules": "Ikusi arauak", "You are currently subscribed to:": "Orain hauetara harpidetuta zaude:", "⚠ These settings are meant for advanced users.": "⚠ Ezarpen hauek erabiltzaile aurreratuei zuzenduta daude.", - "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.": "Gehitu ezikusi nahi dituzun erabiltzaileak eta zerbitzariak hona. Erabili asteriskoak edozein karaktereek bat egin dezaten. Adibidez, @bot:* edozein zerbitzaritan 'bot' izena duten erabiltzaileak ezikusiko ditu.", "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.": "Jendea ezikusteko debekuen zerrendak erabiltzen dira, hauek nor debekatzeko arauak dituzte. Debeku zerrenda batera harpidetzean zerrenda horrek debekatzen dituen erabiltzaile eta zerbitzariak ezkutatuko zaizkizu.", "Personal ban list": "Debeku-zerrenda pertsonala", "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.": "Zure debeku-zerrenda pertsonalak zuk pertsonalki ikusi nahi ez dituzun erabiltzaile eta zerbitzariak ditu. Behi erabiltzaile edo zerbitzari bat ezikusita, gela berri bat agertuko da 'Nire debeku-zerrenda' izenarekin, debeku-zerrenda indarrean mantentzeko ez atera gela honetatik.", @@ -1720,7 +1717,6 @@ "Upgrade private room": "Eguneratu gela pribatua", "Upgrade public room": "Eguneratu gela publikoa", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Gela eguneratzea ekintza aurreratu bat da eta akatsen, falta diren ezaugarrien, edo segurtasun arazoen erruz gela ezegonkorra denean aholkatzen da.", - "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Orokorrean honek zerbitzariak gela nola prozesatzen duen da duen eragin bakarra. RIot-ekin arazoak badituzu, eman akats baten berri.", "You'll upgrade this room from to .": "Gela hau bertsiotik bertsiora eguneratuko duzu.", "Upgrade": "Eguneratu", "Warning: You should only set up key backup from a trusted computer.": "Abisua:: Gakoen babes-kopia fidagarria den gailu batetik egin beharko zenuke beti.", @@ -1908,7 +1904,6 @@ "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Gailu hau egiaztatzean fidagarri gisa markatuko da, eta egiaztatu zaituzten erabiltzaileek fidagarri gisa ikusiko dute.", "Verify this session by completing one of the following:": "Egiaztatu saio hau hauetako bat osatuz:", "or": "ala", - "Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Sarrera mekanismo nagusia ukimena den gailu bat erabiltzen duzun", "Whether you're using %(brand)s as an installed Progressive Web App": "%(brand)s instalatutako aplikazio progresibo gisa erabiltzen duzun", "Your user agent": "Zure erabiltzaile-agentea", "Show typing notifications": "Erakutsi idazketa jakinarazpenak", diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json index 17f4b54f28..9dd5950cf3 100644 --- a/src/i18n/strings/fa.json +++ b/src/i18n/strings/fa.json @@ -56,7 +56,6 @@ "Enter keywords separated by a comma:": "کلیدواژه‌ها را وارد کنید؛ از کاما(,) برای جدا کردن آنها از یکدیگر استفاده کنید:", "Forward Message": "هدایت پیام", "Remove %(name)s from the directory?": "آیا مطمئنید می‌خواهید %(name)s را از فهرست گپ‌ها حذف کنید؟", - "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "رایوت از بسیاری از ویژگی‌های پیشرفته در مروگرها استفاده می‌کند، برخی از این ویژگی‌ها در مرورگر کنونی شما موجود نیستند و یا در حالت آزمایشی قرار دارند.", "Unnamed room": "گپ نام‌گذاری نشده", "Dismiss": "نادیده بگیر", "Remove from Directory": "از فهرستِ گپ‌ها حذف کن", @@ -96,7 +95,6 @@ "Search…": "جستجو…", "Unhide Preview": "پیش‌نمایش را نمایان کن", "Unable to join network": "خطا در ورود به شبکه", - "Sorry, your browser is not able to run %(brand)s.": "متاسفانه مرورگر شما نمی‌تواند رایوت را اجرا کند.", "Uploaded on %(date)s by %(user)s": "آپلود شده در تاریخ %(date)s توسط %(user)s", "Messages in group chats": "پیام‌های درون چت‌های گروهی", "Yesterday": "دیروز", @@ -107,7 +105,6 @@ "Set Password": "پسوردتان را انتخاب کنید", "An error occurred whilst saving your email notification preferences.": "خطایی در حین ذخیره‌ی ترجیجات شما درباره‌ی رایانامه رخ داد.", "Off": "خاموش", - "%(brand)s does not know how to join a room on this network": "رایوت از چگونگی ورود به یک گپ در این شبکه اطلاعی ندارد", "Mentions only": "فقط نام‌بردن‌ها", "Failed to remove tag %(tagName)s from room": "خطا در حذف کلیدواژه‌ی %(tagName)s از گپ", "Remove": "حذف کن", diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 786cf8c741..357a2af757 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -1615,7 +1615,6 @@ "You are currently ignoring:": "Jätät tällä hetkellä huomiotta:", "You are not subscribed to any lists": "Et ole liittynyt yhteenkään listaan", "You are currently subscribed to:": "Olet tällä hetkellä liittynyt:", - "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.": "Lisää käyttäjät ja palvelimet, jotka haluat jättää huomiotta. Voit käyttää asteriskia(*) täsmätäksesi mihin tahansa merkkeihin. Esimerkiksi, @bot:* jättäisi huomiotta kaikki käyttäjät, joiden nimi alkaa kirjaimilla ”bot”.", "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.": "Käyttäjien huomiotta jättäminen tapahtuu estolistojen kautta, joissa on tieto siitä, kenet pitää estää. Estolistalle liittyminen tarkoittaa, että ne käyttäjät/palvelimet, jotka tämä lista estää, eivät näy sinulle.", "Personal ban list": "Henkilökohtainen estolista", "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.": "Henkilökohtainen estolistasi sisältää kaikki käyttäjät/palvelimet, joilta et henkilökohtaisesti halua nähdä viestejä. Sen jälkeen, kun olet estänyt ensimmäisen käyttäjän/palvelimen, huonelistaan ilmestyy uusi huone nimeltä ”Tekemäni estot” (englanniksi ”My Ban List”). Pysy tässä huoneessa, jotta estolistasi pysyy voimassa.", @@ -1625,7 +1624,6 @@ "If this isn't what you want, please use a different tool to ignore users.": "Jos tämä ei ole mitä haluat, käytä eri työkalua käyttäjien huomiotta jättämiseen.", "Integration Manager": "Integraatioiden lähde", "Read Marker lifetime (ms)": "Viestin luetuksi merkkaamisen kesto (ms)", - "Read Marker off-screen lifetime (ms)": "Viestin luetuksi merkkaamisen kesto, kun %(brand)s ei ole näkyvissä (ms)", "Click the link in the email you received to verify and then click continue again.": "Klikkaa lähettämässämme sähköpostissa olevaa linkkiä vahvistaaksesi tunnuksesi. Klikkaa sen jälkeen tällä sivulla olevaa painiketta ”Jatka”.", "Complete": "Valmis", "Revoke": "Kumoa", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 161d3f5dec..35ab26343c 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -1614,7 +1614,6 @@ "View rules": "Voir les règles", "You are currently subscribed to:": "Vous êtes actuellement inscrit(e) à :", "⚠ These settings are meant for advanced users.": "⚠ Ces paramètres sont prévus pour les utilisateurs avancés.", - "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.": "Ajoutez les utilisateurs et les serveurs que vous voulez ignorer ici. Utilisez des astérisques pour remplacer n’importe quel caractère. Par exemple, @bot:* ignorerait tous les utilisateurs qui ont le nom « bot » sur n’importe quel serveur.", "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.": "Ignorer les gens est possible grâce à des listes de bannissement qui contiennent des règles sur les personnes à bannir. L’inscription à une liste de bannissement signifie que les utilisateurs/serveurs bloqués par cette liste seront cachés pour vous.", "Personal ban list": "Liste de bannissement personnelle", "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.": "Votre liste de bannissement personnelle contient tous les utilisateurs/serveurs dont vous ne voulez pas voir les messages personnellement. Quand vous aurez ignoré votre premier utilisateur/serveur, un nouveau salon nommé « Ma liste de bannissement » apparaîtra dans la liste de vos salons − restez dans ce salon pour que la liste de bannissement soit effective.", diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 4d8ac49349..fd193e79c6 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -1919,7 +1919,6 @@ "Signature upload success": "Subeuse correctamente a sinatura", "Signature upload failed": "Fallou a subida da sinatura", "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.": "Anteriormente utilizaches %(brand)s en %(host)s con carga preguiceira de membros. Nesta versión a carga preguiceira está desactivada. Como a caché local non é compatible entre as dúas configuracións, %(brand)s precisa voltar a sincronizar a conta.", - "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.": "Se a outra versión de %(brand)s aínda está aberta noutra lapela, péchaa por favor, pois podería haber fallos ao estar as dúas sesións traballando simultáneamente.", "Incompatible local cache": "Caché local incompatible", "Clear cache and resync": "Baleirar caché e sincronizar", "%(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!": "%(brand)s utiliza agora entre 3 e 5 veces menos memoria, cargando só información sobre as usuarias cando é preciso. Agarda mentras se sincroniza co servidor!", diff --git a/src/i18n/strings/hi.json b/src/i18n/strings/hi.json index c506c97715..75b14cca18 100644 --- a/src/i18n/strings/hi.json +++ b/src/i18n/strings/hi.json @@ -8,7 +8,6 @@ "This phone number is already in use": "यह फ़ोन नंबर पहले से इस्तेमाल में है", "Failed to verify email address: make sure you clicked the link in the email": "ईमेल आईडी सत्यापित नही हो पाया: कृपया सुनिश्चित कर लें कि आपने ईमेल में मौजूद लिंक पर क्लिक किया है", "The platform you're on": "आप जिस प्लेटफार्म पर हैं", - "The version of %(brand)s": "रायट.आई एम का जो संस्करण", "Your language of choice": "आपकी चयन की भाषा", "Which officially provided instance you are using, if any": "क्या आप कोई अधिकृत संस्करण इस्तेमाल कर रहे हैं? अगर हां, तो कौन सा", "Your homeserver's URL": "आपके होमसर्वर का यूआरएल", @@ -75,8 +74,6 @@ "Failed to invite users to community": "उपयोगकर्ताओं को कम्युनिटी में आमंत्रित करने में विफल", "Failed to invite users to %(groupId)s": "उपयोगकर्ताओं को %(groupId)s में आमंत्रित करने में विफल", "Failed to add the following rooms to %(groupId)s:": "निम्नलिखित रूम को %(groupId)s में जोड़ने में विफल:", - "%(brand)s does not have permission to send you notifications - please check your browser settings": "आपको सूचनाएं भेजने की रायट की अनुमति नहीं है - कृपया अपनी ब्राउज़र सेटिंग्स जांचें", - "%(brand)s was not given permission to send notifications - please try again": "रायट को सूचनाएं भेजने की अनुमति नहीं दी गई थी - कृपया पुनः प्रयास करें", "Unable to enable Notifications": "अधिसूचनाएं सक्षम करने में असमर्थ", "This email address was not found": "यह ईमेल पता नहीं मिला था", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "आपका ईमेल पता इस होमसर्वर पर मैट्रिक्स आईडी से जुड़ा प्रतीत नहीं होता है।", @@ -176,7 +173,6 @@ "Please contact your service administrator to continue using the service.": "सेवा का उपयोग जारी रखने के लिए कृपया अपने सेवा व्यवस्थापक से संपर्क करें ।", "Unable to connect to Homeserver. Retrying...": "होमसर्वर से कनेक्ट करने में असमर्थ। पुनः प्रयास किया जा रहा हैं...", "Your browser does not support the required cryptography extensions": "आपका ब्राउज़र आवश्यक क्रिप्टोग्राफी एक्सटेंशन का समर्थन नहीं करता है", - "Not a valid %(brand)s keyfile": "यह एक वैध रायट कीकुंजी नहीं है", "Authentication check failed: incorrect password?": "प्रमाणीकरण जांच विफल: गलत पासवर्ड?", "Sorry, your homeserver is too old to participate in this room.": "क्षमा करें, इस रूम में भाग लेने के लिए आपका होमसर्वर बहुत पुराना है।", "Please contact your homeserver administrator.": "कृपया अपने होमसर्वर व्यवस्थापक से संपर्क करें।", @@ -371,7 +367,6 @@ "Idle": "निष्क्रिय", "Offline": "ऑफलाइन", "Unknown": "अज्ञात", - "Chat with %(brand)s Bot": "रायट बॉट के साथ चैट करें", "Whether or not you're logged in (we don't record your username)": "आप लॉग इन हैं या नहीं (हम आपका उपयोगकर्ता नाम रिकॉर्ड नहीं करते हैं)", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "फ़ाइल '%(fileName)s' अपलोड के लिए इस होमस्वर के आकार की सीमा से अधिक है", "Upgrades a room to a new version": "एक रूम को एक नए संस्करण में अपग्रेड करता है", @@ -530,8 +525,6 @@ "Deactivate Account": "खाता निष्क्रिय करें", "Legal": "कानूनी", "Credits": "क्रेडिट", - "For help with using %(brand)s, click here.": "रायट का उपयोग करने में मदद के लिए, यहां क्लिक करें।", - "For help with using %(brand)s, click here or start a chat with our bot using the button below.": "रायट का उपयोग करने में सहायता के लिए, यहां क्लिक करें या नीचे दिए गए बटन का उपयोग करके हमारे बॉट के साथ एक चैट शुरू करें।", "Check for update": "अपडेट के लिये जांचें", "Help & About": "सहायता और के बारे में", "Bug reporting": "बग रिपोर्टिंग", @@ -539,7 +532,6 @@ "Submit debug logs": "डिबग लॉग जमा करें", "FAQ": "सामान्य प्रश्न", "Versions": "संस्करण", - "%(brand)s version:": "रायट-वेब संस्करण:", "olm version:": "olm संस्करण:", "Homeserver is": "होमेसेर्वेर हैं", "Identity Server is": "आइडेंटिटी सर्वर हैं", @@ -566,11 +558,9 @@ "Reject all %(invitedRooms)s invites": "सभी %(invitedRooms)s की आमंत्रण को अस्वीकार करें", "Key backup": "कुंजी बैकअप", "Security & Privacy": "सुरक्षा और गोपनीयता", - "%(brand)s collects anonymous analytics to allow us to improve the application.": "रायट हमें आवेदन में सुधार करने की अनुमति देने के लिए अनाम विश्लेषण एकत्र करता है।", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "गोपनीयता हमारे लिए महत्वपूर्ण है, इसलिए हम अपने विश्लेषिकी के लिए कोई व्यक्तिगत या पहचान योग्य डेटा एकत्र नहीं करते हैं।", "Learn more about how we use analytics.": "हम एनालिटिक्स का उपयोग कैसे करते हैं, इसके बारे में और जानें।", "No media permissions": "मीडिया की अनुमति नहीं", - "You may need to manually permit %(brand)s to access your microphone/webcam": "आपको अपने माइक्रोफ़ोन/वेबकैम तक पहुंचने के लिए रायट को मैन्युअल रूप से अनुमति देने की आवश्यकता हो सकती है", "Missing media permissions, click the button below to request.": "मीडिया अनुमतियाँ गुम, अनुरोध करने के लिए नीचे दिए गए बटन पर क्लिक करें।", "Request media permissions": "मीडिया अनुमति का अनुरोध करें", "No Audio Outputs detected": "कोई ऑडियो आउटपुट नहीं मिला", diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 9605505354..1d3ccdc9c5 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -1614,7 +1614,6 @@ "View rules": "Szabályok megtekintése", "You are currently subscribed to:": "Jelenleg ezekre iratkoztál fel:", "⚠ These settings are meant for advanced users.": "⚠ Ezek a beállítások haladó felhasználók számára vannak.", - "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.": "Adj hozzá olyan felhasználókat és szervereket akiket figyelmen kívül kívánsz hagyni. Használj csillagot ahol bármilyen karakter állhat. Például: @bot:* minden „bot” nevű felhasználót figyelmen kívül fog hagyni akármelyik szerverről.", "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.": "Emberek figyelmen kívül hagyása tiltólistán keresztül történik ami arról tartalmaz szabályokat, hogy kiket kell kitiltani. A feliratkozás a tiltólistára azt jelenti, hogy azok a felhasználók/szerverek amik tiltva vannak a lista által, azoknak az üzenetei rejtve maradnak számodra.", "Personal ban list": "Személyes tiltó lista", "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.": "A személyes tiltólistád tartalmazza azokat a személyeket/szervereket akiktől nem szeretnél üzeneteket látni. Az első felhasználó/szerver figyelmen kívül hagyása után egy új szoba jelenik meg a szobák listájában „Tiltólistám” névvel - ahhoz, hogy a lista érvényben maradjon maradj a szobában.", @@ -2255,7 +2254,6 @@ "Light": "Világos", "Dark": "Sötét", "Customise your appearance": "Szabd személyre a megjelenítést", - "Appearance Settings only affect this %(brand)s session.": "A megjelenítési beállítások csak erre a munkamenetre vonatkoznak.", "Activity": "Aktivitás", "A-Z": "A-Z", "Looks good!": "Jól néz ki!", diff --git a/src/i18n/strings/jbo.json b/src/i18n/strings/jbo.json index 5adb662b43..1b5f6b4853 100644 --- a/src/i18n/strings/jbo.json +++ b/src/i18n/strings/jbo.json @@ -3,7 +3,6 @@ "This phone number is already in use": ".i ca'o pilno le fonjudri", "Failed to verify email address: make sure you clicked the link in the email": ".i na pu facki lo du'u xu kau do ponse le skami te mrilu .i ko birti lo du'u do pu skami cuxna le urli pe le se samymri", "The platform you're on": "le ciste poi do pilno", - "The version of %(brand)s": "le farvi tcini be la nu zunti", "Your language of choice": "le se cuxna be fi lo'i bangu", "Which officially provided instance you are using, if any": "le klesi poi ca'irselzau se sabji poi do pilno", "Whether or not you're using the Richtext mode of the Rich Text Editor": "lo du'u xu kau do pilno la .markdaun. lo nu ciski", @@ -13,7 +12,6 @@ "e.g. ": "mu'a zoi urli. .urli", "Your device resolution": "le ni vidnysle", "Analytics": "lo se lanli datni", - "The information being sent to us to help make %(brand)s better includes:": ".i ti liste lo datni poi se dunda fi lo favgau te zu'e lo nu xagzengau la nu zunti", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": ".i pu lo nu benji fi lo samtcise'u cu vimcu lo datni poi termi'u no'u mu'a lo termi'u be lo kumfa pe'a .o nai lo pilno .o nai lo girzu", "Call Failed": ".i pu fliba lo nu fonjo'e", "You are already in a call.": ".i do ca'o pu zvati lo nu fonjo'e", @@ -71,8 +69,6 @@ "Failed to invite users to %(groupId)s": ".i pu fliba lo nu vi'ecpe lo pilno la'o ny. %(groupId)s .ny.", "Failed to add the following rooms to %(groupId)s:": "lo kumfa pe'a poi fliba lo nu jmina ke'a la'o ny. %(groupId)s .ny.", "Unnamed Room": "lo kumfa pe'a noi no da cmene", - "%(brand)s does not have permission to send you notifications - please check your browser settings": ".i na curmi lo nu la nu zunti cu benji lo sajgau do .i .e'o do cipcta lo te cuxna pe le do kibyca'o", - "%(brand)s was not given permission to send notifications - please try again": ".i na pu curmi lo nu la nu zunti cu benji lo sajgau .i .e'o do za'u re'u troci", "Unable to enable Notifications": ".i na kakne lo nu co'a kakne lo nu benji lo sajgau", "This email address was not found": ".i na pu facki fi le ve samymri", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": ".i za'a le ve samymri be fo do cu ckini no lo judri be fi la nacmeimei be'o pe le samtcise'u", @@ -167,7 +163,6 @@ "Please contact your service administrator to continue using the service.": ".i .e'o ko tavla lo do te selfu admine .i ja nai do djica lo nu ca'o pilno le te selfu", "Unable to connect to Homeserver. Retrying...": ".i pu fliba lo nu samjo'e le samtcise'u .i za'u re'u ca'o troci", "Your browser does not support the required cryptography extensions": ".i le do kibyca'o na kakne tu'a le te mifra ciste noi se nitcu", - "Not a valid %(brand)s keyfile": ".i na'e drani ckiku datnyvei", "Authentication check failed: incorrect password?": ".i pu fliba lo nu birti lo du'u curmi lo nu do jonse .i na'e drani xu japyvla", "Sorry, your homeserver is too old to participate in this room.": ".i .uu le do samtcise'u cu dukse lo ka laldo ku ja'e lo du'u sy. na kakne lo nu pagbu le kumfa pe'a", "Please contact your homeserver administrator.": ".i .e'o ko tavla lo admine be le samtcise'u", diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index 6789cfaec8..ba3b4a0561 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -1269,7 +1269,6 @@ "Waiting for partner to confirm...": "상대방이 확인하기를 기다리는 중...", "Incoming Verification Request": "수신 확인 요청", "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.": "이전에 구성원의 불러오기 지연이 켜진 %(host)s에서 %(brand)s을 사용했습니다. 이 버전에서 불러오기 지연은 꺼집니다. 로컬 캐시가 이 두 설정 간에 호환되지 않으므로, %(brand)s은 계정을 다시 동기화 해야 합니다.", - "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.": "다른 버전의 %(brand)s이 다른 탭에서 열려있다면, 같은 호스트에서 불러오기 지연이 동시에 켜지고 꺼지면서 오류가 발생할 수 있으니 닫아주세요.", "Incompatible local cache": "호환하지 않는 로컬 캐시", "Clear cache and resync": "캐시를 지우고 다시 동기화", "%(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!": "%(brand)s은 이제 필요할 때만 다른 사용자에 대한 정보를 불러와 메모리를 3배에서 5배 덜 잡아먹습니다. 서버와 다시 동기화하는 동안 기다려주세요!", diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json index 8afb99abb6..2c30a60e0b 100644 --- a/src/i18n/strings/lt.json +++ b/src/i18n/strings/lt.json @@ -990,7 +990,6 @@ "COPY": "Kopijuoti", "Enter recovery key": "Įveskite atgavimo raktą", "Keep going...": "Tęskite...", - "Please install Chrome, Firefox, or Safari for the best experience.": "%(brand)s geriausiai veikia su Chrome, Firefox, arba Safari naršyklėmis.", "Syncing...": "Sinchronizuojama...", "Signing In...": "Prijungiama...", "If you've joined lots of rooms, this might take a while": "Jei esate prisijungę prie daug kambarių, tai gali užtrukti", diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index 943dab5b11..6369ffed82 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -603,7 +603,6 @@ "Learn more about how we use analytics.": "Sīkāk par to, kā tiek izmantota analītika.", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Epasts ir nosūtīts uz %(emailAddress)s. Izmanto epastā nosūtīto tīmekļa saiti un tad noklikšķini zemāk.", "Please note you are logging into the %(hs)s server, not matrix.org.": "Lūdzu ņem vērā, ka Tu pieraksties %(hs)s serverī, nevis matrix.org serverī.", - "This homeserver doesn't offer any login flows which are supported by this client.": "Šis bāzes serveris neatbalsta nevienu pierakstīšanās metodi, kuru piedāvā šis %(brand)s klients.", "Ignores a user, hiding their messages from you": "Ignorē lietotāju, Tev nerādot viņa sūtītās ziņas", "Stops ignoring a user, showing their messages going forward": "Atceļ lietotāja ignorēšanu, rādot viņa turpmāk sūtītās ziņas", "Notify the whole room": "Paziņot visai istabai", diff --git a/src/i18n/strings/ml.json b/src/i18n/strings/ml.json index 60c850e0b3..23740fefda 100644 --- a/src/i18n/strings/ml.json +++ b/src/i18n/strings/ml.json @@ -72,7 +72,6 @@ "Enter keywords separated by a comma:": "കീവേഡുകളെ കോമ കൊണ്ട് വേര്‍ത്തിരിച്ച് ടൈപ്പ് ചെയ്യുക :", "I understand the risks and wish to continue": "കുഴപ്പമാകാന്‍ സാധ്യതയുണ്ടെന്നെനിയ്ക്കു് മനസ്സിലായി, എന്നാലും മുന്നോട്ട് പോകുക", "Remove %(name)s from the directory?": "%(name)s കള്‍ ഡയറക്റ്ററിയില്‍ നിന്നും മാറ്റണോ ?", - "%(brand)s uses many advanced browser features, some of which are not available or experimental in your current browser.": "റയട്ട് നൂതന ബ്രൌസര്‍ ഫീച്ചറുകള്‍ ഉപയോഗിക്കുന്നു. നിങ്ങളുടെ ബ്രൌസറില്‍ അവയില്‍ പലതും ഇല്ല / പൂര്‍ണ്ണമല്ല .", "Unnamed room": "പേരില്ലാത്ത റൂം", "All messages (noisy)": "എല്ലാ സന്ദേശങ്ങളും (ഉച്ചത്തിൽ)", "Saturday": "ശനി", @@ -110,7 +109,6 @@ "Back": "തിരികെ", "Unhide Preview": "പ്രിവ്യു കാണിക്കുക", "Unable to join network": "നെറ്റ്‍വര്‍ക്കില്‍ ജോയിന്‍ ചെയ്യാന്‍ കഴിയില്ല", - "Sorry, your browser is not able to run %(brand)s.": "ക്ഷമിക്കണം, നിങ്ങളുടെ ബ്രൌസര്‍ റയട്ട് പ്രവര്‍ത്തിപ്പിക്കാന്‍ പര്യാപ്തമല്ല.", "Uploaded on %(date)s by %(user)s": "%(date)s ല്‍ %(user)s അപ്ലോഡ് ചെയ്തത്", "Messages in group chats": "ഗ്രൂപ്പ് ചാറ്റുകളിലെ സന്ദേശങ്ങള്‍ക്ക്", "Yesterday": "ഇന്നലെ", @@ -120,7 +118,6 @@ "Set Password": "രഹസ്യവാക്ക് സജ്ജീകരിക്കുക", "remove %(name)s from the directory.": "%(name)s ഡയറക്റ്ററിയില്‍ നിന്ന് നീക്കം ചെയ്യുക.", "Off": "ഓഫ്", - "%(brand)s does not know how to join a room on this network": "ഈ നെറ്റ്‍വര്‍ക്കിലെ ഒരു റൂമില്‍ എങ്ങനെ അംഗമാകാമെന്ന് റയട്ടിന് അറിയില്ല", "Mentions only": "മെന്‍ഷനുകള്‍ മാത്രം", "Failed to remove tag %(tagName)s from room": "റൂമില്‍ നിന്നും %(tagName)s ടാഗ് നീക്കം ചെയ്യുവാന്‍ സാധിച്ചില്ല", "You can now return to your account after signing out, and sign in on other devices.": "നിങ്ങള്‍ക്ക് ഇപ്പോള്‍ സൈന്‍ ഔട്ട് ചെയ്ത ശേഷവും നിങ്ങളുടെ അക്കൌണ്ടിലേക്ക് തിരികെ വരാം, അതു പോലെ മറ്റ് ഡിവൈസുകളില്‍ സൈന്‍ ഇന്‍ ചെയ്യുകയുമാവാം.", diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 2dce8b0a5b..ba45d32e71 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -1631,7 +1631,6 @@ "Show less": "Minder tonen", "Show more": "Meer tonen", "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.": "Momenteel stelt een wachtwoordswijziging alle berichtsleutels in alle sessies opnieuw in, en maakt zo oude versleutelde berichten onleesbaar - tenzij u uw sleutels eerst wegschrijft, en na afloop weer inleest. Dit zal verbeterd worden.", - "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.": "Geef hier te negeren gebruikers en servers in. Asterisken staan voor willekeurige tekenreeksen; zo leidt @bot:* tot het negeren van alle gebruikers die ‘bot’ heten op alle servers.", "in memory": "in het geheugen", "not found": "niet gevonden", "Your homeserver does not support session management.": "Uw thuisserver ondersteunt geen sessiebeheer.", diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json index 5a4f30b5c4..cf84960b14 100644 --- a/src/i18n/strings/nn.json +++ b/src/i18n/strings/nn.json @@ -1224,7 +1224,6 @@ "Secret storage public key:": "Public-nøkkel for hemmeleg lager:", "Keyboard Shortcuts": "Tastatursnarvegar", "Ignored users": "Ignorerte brukarar", - "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.": "Legg til brukarar og tenarar du vil ignorera her. Bruk stjerne/wildcard (*) for at markere eitkvart teikn. Til dømes, @bot* vil ignorere alle brukarar med namn 'bot' på uansett tenar.", "Server or user ID to ignore": "Tenar eller brukar-ID for å ignorere", "If this isn't what you want, please use a different tool to ignore users.": "Om det ikkje var dette du ville, bruk eit anna verktøy til å ignorera brukarar.", "Enter the name of a new server you want to explore.": "Skriv inn namn på ny tenar du ynskjer å utforske.", diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index d4bb0ef012..8e8b181f10 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -616,7 +616,6 @@ "Failed to load %(groupId)s": "Não foi possível carregar a comunidade %(groupId)s", "This room is not public. You will not be able to rejoin without an invite.": "Esta sala não é pública. Você não poderá voltar sem ser convidada/o.", "Old cryptography data detected": "Dados de criptografia antigos foram detectados", - "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.": "Dados de uma versão anterior do %(brand)s foram detectados. Isso fará com que a criptografia ponta-a-ponta não funcione na versão anterior. Mensagens criptografadas ponta-a-ponta que foram trocadas recentemente usando a versão antiga do %(brand)s talvez não possam ser decriptografadas nesta versão. Isso também pode fazer com que mensagens trocadas com esta versão falhem. Se você tiver problemas desta natureza, faça logout e entre novamente. Para manter o histórico de mensagens, exporte e reimporte suas chaves de criptografia.", "Your Communities": "Suas comunidades", "Error whilst fetching joined communities": "Erro baixando comunidades das quais você faz parte", "Create a new community": "Criar nova comunidade", @@ -745,7 +744,6 @@ "Unable to fetch notification target list": "Não foi possível obter a lista de alvos de notificação", "Set Password": "Definir senha", "Off": "Desativado", - "%(brand)s does not know how to join a room on this network": "O sistema não sabe como entrar na sala desta rede", "Mentions only": "Apenas menções", "Wednesday": "Quarta", "You can now return to your account after signing out, and sign in on other devices.": "Você pode retornar agora para a sua conta depois de fazer logout, e então fazer login em outros dispositivos.", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 37444a675e..a3b41282c6 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -1974,7 +1974,6 @@ "Backup has an invalid signature from verified session ": "У резервной копии невернаяподпись проверенной сессии ", "Backup has an invalid signature from unverified session ": "У резервной копии неверная подпись непроверенной сессии ", "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Ваш пароль был успешно изменён. Вы не будете получать уведомления в других сессия, пока вы не войдёте в них", - "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.": "Добавьте пользователей и серверы, которых вы хотите игнорировать. Используйте звёздочки для совпадения с любыми символами. Например, @bot:* приведёт к игнорированию всех пользователей на любом сервере, у которых есть 'bot' в имени.", "This room is bridging messages to the following platforms. Learn more.": "Эта комната пересылает сообщения с помощью моста на следующие платформы. Подробнее", "This room isn’t bridging messages to any platforms. Learn more.": "Эта комната не пересылает никуда сообщения с помощью моста. Подробнее", "Your key share request has been sent - please check your other sessions for key share requests.": "Запрос ключа был отправлен - проверьте другие ваши сессии на предмет таких запросов.", diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json index 526a793d67..be05d69b88 100644 --- a/src/i18n/strings/sk.json +++ b/src/i18n/strings/sk.json @@ -408,7 +408,6 @@ "An error has occurred.": "Vyskytla sa chyba.", "OK": "OK", "Unable to restore session": "Nie je možné obnoviť reláciu", - "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.": "Ak ste sa v minulosti prihlásili s novšou verziou programu %(brand)s, vaša relácia nemusí byť kompatibilná s touto verziou. Zatvorte prosím toto okno a vráťte sa cez najnovšiu verziu %(brand)s.", "Invalid Email Address": "Nesprávna emailová adresa", "This doesn't appear to be a valid email address": "Zdá sa, že toto nie je platná emailová adresa", "Verification Pending": "Nedokončené overenie", @@ -607,7 +606,6 @@ "collapse": "zbaliť", "expand": "rozbaliť", "Old cryptography data detected": "Nájdené zastaralé kryptografické údaje", - "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.": "Boli nájdené údaje zo staršej verzie %(brand)s. Toto spôsobí, že E2E šifrovanie nebude v staršej verzii %(brand)s fungovať. Zašifrované správy prijaté a odoslané v poslednom čase cez staršiu verziu %(brand)s nemusia byť čitateľné v tejto verzii %(brand)s. Môže to tiež spôsobiť, že šifrované konverzácie nebudú s touto verziou %(brand)s čitateľné. Ak spozorujete niektoré s týchto problémov, odhláste sa a opätovne sa prihláste prosím. Históriu šifrovaných konverzácií zachováte tak, že si exportujete a znovu importujete kľúče miestností.", "Warning": "Upozornenie", "This homeserver doesn't offer any login flows which are supported by this client.": "Tento domovský server neponúka žiadny prihlasovací mechanizmus podporovaný vašim klientom.", "Flair": "Príslušnosť ku komunitám", @@ -630,7 +628,6 @@ "The platform you're on": "Vami používaná platforma", "The version of %(brand)s": "Verzia %(brand)su", "Your language of choice": "Váš uprednostňovaný jazyk", - "Which officially provided instance you are using, if any": "Cez ktorú oficiálne podporovanú inštanciu %(brand)s ste pripojení (ak nehostujete %(brand)s sami)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Či pri písaní správ používate rozbalenú lištu formátovania textu", "Your homeserver's URL": "URL adresa vami používaného domovského servera", "This room is not public. You will not be able to rejoin without an invite.": "Toto nie je verejne dostupná miestnosť. Bez pozvánky nebudete do nej môcť vstúpiť znovu.", @@ -649,7 +646,6 @@ "Join this community": "Vstúpiť do tejto komunity", "Leave this community": "Opustiť túto komunitu", "Did you know: you can use communities to filter your %(brand)s experience!": "Vedeli ste: Že prácu s %(brand)s si môžete spríjemníť použitím komunít!", - "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.": "Ak si chcete nastaviť filter, pretiahnite obrázok komunity na panel filtrovania úplne na ľavej strane obrazovky. Potom môžete kedykoľvek kliknúť na obrázok komunity na tomto panely a %(brand)s vám bude zobrazovať len miestnosti a ľudí z komunity, na ktorej obrázok ste klikli.", "Clear filter": "Zrušiť filter", "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.": "Ak ste nám poslali hlásenie o chybe cez Github, ladiace záznamy nám môžu pomôcť lepšie identifikovať chybu. Ladiace záznamy obsahujú údaje o používaní aplikácii, vrátane vašeho používateľského mena, názvy a aliasy miestností a komunít, ku ktorým ste sa pripojili a mená ostatných používateľov. Tieto záznamy neobsahujú samotný obsah vašich správ.", "Submit debug logs": "Odoslať ladiace záznamy", @@ -780,7 +776,6 @@ "View Source": "Zobraziť zdroj", "Event Content": "Obsah Udalosti", "Thank you!": "Ďakujeme!", - "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!": "Vo vašom súčasnom prehliadači nemusí %(brand)s vizerať ani fungovať správne a niektoré alebo všetky vlastnosti môžu chýbať. Ak to chcete vyskúšať, môžete pokračovať, no pri riešení problémov s tým spojených si budete musieť poradiť na vlastnú päsť!", "Checking for an update...": "Kontrola dostupnosti aktualizácie…", "Every page you use in the app": "Každú stránku v aplikácii, ktorú navštívite", "e.g. ": "príklad ", @@ -1261,7 +1256,6 @@ "Cannot reach homeserver": "Nie je možné pripojiť sa k domovskému serveru", "Ensure you have a stable internet connection, or get in touch with the server admin": "Uistite sa, že máte stabilné pripojenie na internet, alebo kontaktujte správcu servera", "Your %(brand)s is misconfigured": "Váš %(brand)s nie je nastavený správne", - "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Požiadajte správcu, aby skontroloval vaše nastavenia na nesprávne alebo viacnásobne uvedené voľby.", "Cannot reach identity server": "Nie je možné pripojiť sa k serveru totožností", "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.": "Môžete sa zaregistrovať, ale niektoré vlastnosti nebudú dostupné, kým server totožností nebude opäť v prevádzke. Ak sa toto upozornenie zobrazuje neustále, skontrolujte správnosť nastavení alebo kontaktujte správcu servera.", "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.": "Môžete si obnoviť heslo, ale niektoré vlastnosti nebudú dostupné, kým server totožností nebude opäť v prevádzke. Ak sa toto upozornenie zobrazuje neustále, skontrolujte správnosť nastavení alebo kontaktujte správcu servera.", diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json index 789ac4c414..431c4571ea 100644 --- a/src/i18n/strings/te.json +++ b/src/i18n/strings/te.json @@ -10,7 +10,6 @@ "No Microphones detected": "మైక్రోఫోన్లు కనుగొనబడలేదు", "No Webcams detected": "వెబ్కామ్లు కనుగొనబడలేదు", "No media permissions": "మీడియా అనుమతులు లేవు", - "You may need to manually permit %(brand)s to access your microphone/webcam": "రియోట్ను ను మీరు మాన్యువల్ గా మీ మైక్రోఫోన్ / వెబ్క్యామ్ను ప్రాప్యత చేయడానికి అనుమతించాలి", "Default Device": "డిఫాల్ట్ పరికరం", "Microphone": "మైక్రోఫోన్", "Camera": "కెమెరా", @@ -102,8 +101,6 @@ "Incorrect verification code": "ధృవీకరణ కోడ్ సరిగా లెదు", "unknown error code": "తెలియని కోడ్ లోపం", "Please enter the code it contains:": "దయచేసి దాన్ని కలిగి ఉన్న కోడ్ను నమోదు చేయండి:", - "%(brand)s version:": "రయట్-వెబ్ సంస్కరణ:", - "%(brand)s was not given permission to send notifications - please try again": "రయట్ కు ప్రకటనలను పంపడానికి అనుమతి లేదు - దయచేసి మళ్ళీ ప్రయత్నించండి", "Unable to restore session": "సెషన్ను పునరుద్ధరించడానికి సాధ్యపడలేదు", "Remove": "తొలగించు", "Room directory": "గది వివరము", @@ -178,7 +175,6 @@ "Invite to this room": "ఈ గదికి ఆహ్వానించండి", "Thursday": "గురువారం", "Search…": "శోధన…", - "Sorry, your browser is not able to run %(brand)s.": "క్షమించండి, మీ బ్రౌజర్ రియట్ని అమలు చేయలేరు.", "Messages in group chats": "సమూహ మాటామంతిలో సందేశాలు", "Yesterday": "నిన్న", "Error encountered (%(errorDetail)s).": "లోపం సంభవించింది (%(errorDetail)s).", @@ -198,7 +194,6 @@ "This phone number is already in use": "ఈ ఫోన్ నంబర్ ఇప్పటికే వాడుకం లో ఉంది", "Failed to verify email address: make sure you clicked the link in the email": "ఇమెయిల్ అడ్రస్ ని నిరూపించలేక పోయాము. ఈమెయిల్ లో వచ్చిన లింక్ ని నొక్కారా", "The platform you're on": "మీరు ఉన్న ప్లాట్ఫార్మ్", - "The version of %(brand)s": "రయట్.ఐఎమ్ యొక్క వెర్సన్", "Your homeserver's URL": "మీ హోమ్ సర్వర్ యొక్క URL", "e.g. %(exampleValue)s": "ఉ.దా. %(exampleValue)s 1", "Every page you use in the app": "ఆప్ లో మీరు వాడే ప్రతి పేజి", diff --git a/src/i18n/strings/vi.json b/src/i18n/strings/vi.json index f1b606ad97..744310675c 100644 --- a/src/i18n/strings/vi.json +++ b/src/i18n/strings/vi.json @@ -208,7 +208,6 @@ "Cannot reach homeserver": "Không thể kết nối tới máy chủ", "Ensure you have a stable internet connection, or get in touch with the server admin": "Đảm bảo bạn có kết nối Internet ổn địn, hoặc liên hệ Admin để được hỗ trợ", "Your %(brand)s is misconfigured": "Hệ thống %(brand)s của bạn bị thiết lập sai", - "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": "Liên hệ Admin để kiểm tra thiết lập của bạn để sửa lỗi.", "Cannot reach identity server": "Không thể kết nối server định danh", "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.": "Bạn có thể đăng ký, nhưng một vài chức năng sẽ không sử đụng dược cho đến khi server định danh hoạt động trở lại. Nếu bạn thấy thông báo này, hãy kiểm tra thiết lập hoặc liên hệ 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.": "Bạn có thể đặt lại mật khẩu, nhưng một vài chức năng sẽ không sử đụng dược cho đến khi server định danh hoạt động trở lại. Nếu bạn thấy thông báo này, hãy kiểm tra thiết lập hoặc liên hệ Admin.", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 41d37acc6a..c143fb5baf 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -379,7 +379,6 @@ "Ongoing conference call%(supportedText)s.": "正在进行的会议通话 %(supportedText)s.", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s 修改了 %(roomName)s 的头像", "This will be your account name on the homeserver, or you can pick a different server.": "这将会成为你在 主服务器上的账户名,或者你可以选择一个 不同的服务器。", - "Your browser does not support the required cryptography extensions": "你的浏览器不支持 %(brand)s 所需的密码学特性", "Authentication check failed: incorrect password?": "身份验证失败:密码错误?", "This will allow you to reset your password and receive notifications.": "这将允许你重置你的密码和接收通知。", "%(widgetName)s widget added by %(senderName)s": "%(senderName)s 添加了 %(widgetName)s 小挂件", @@ -459,7 +458,6 @@ "The platform you're on": "您使用的平台是", "The version of %(brand)s": "%(brand)s版本", "Your language of choice": "您选择的语言是", - "Which officially provided instance you are using, if any": "您正在使用的任何官方 %(brand)s 实现(如果有的话)", "Whether or not you're using the Richtext mode of the Rich Text Editor": "您是否正在使用富文本编辑器的富文本模式", "Your homeserver's URL": "您的主服务器的链接", "The information being sent to us to help make %(brand)s better includes:": "发送信息给我们以帮助%(brand)s:", @@ -762,7 +760,6 @@ "There's no one else here! Would you like to invite others or stop warning about the empty room?": "这里没有其他人了!你是想 邀请用户 还是 不再提示?", "You need to be able to invite users to do that.": "你需要有邀请用户的权限才能进行此操作。", "Missing roomId.": "找不到此聊天室 ID 所对应的聊天室。", - "Every page you use in the app": "您在 %(brand)s 中使用的所有页面", "e.g. ": "例如:", "Your device resolution": "您设备的分辨率", "Always show encryption icons": "总是显示加密标志", @@ -1116,7 +1113,6 @@ "Waiting for partner to confirm...": "等待对方确认中...", "Incoming Verification Request": "收到验证请求", "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.": "您之前在 %(host)s 上开启了 %(brand)s 的成员列表延迟加载设置。目前版本中延迟加载功能已被停用。因为本地缓存在这两个设置项上不相容,%(brand)s 需要重新同步您的账号。", - "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.": "如果有其他版本的 %(brand)s 仍然在另一个标签页中运行,请将其关闭,因为在同一主机上同时启用和禁用延迟加载将会发生问题。", "%(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!": "通过仅在需要时加载其他用户的信息,%(brand)s 现在使用的内存减少到了原来的三分之一至五分之一。 请等待与服务器重新同步!", "I don't want my encrypted messages": "我不想要我的加密消息", "Manually export keys": "手动导出密钥", diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 1ff86dac93..0f135f454f 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -84,7 +84,6 @@ "Return to login screen": "返回到登入畫面", "%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s 未被允許向你推播通知 ── 請檢查您的瀏覽器設定", "%(brand)s was not given permission to send notifications - please try again": "%(brand)s 未被允許向你推播通知 ── 請重試", - "%(brand)s version:": "riot-網頁版:", "Room %(roomId)s not visible": "聊天室 %(roomId)s 已隱藏", "Room Colour": "聊天室顏色", "Rooms": "聊天室", @@ -868,7 +867,6 @@ "%(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!": "%(brand)s 現在僅使用三分之一到五分之一的記憶體,僅在需要時才會載入其他使用者的資訊。請等待我們與伺服器重新同步!", "Updating %(brand)s": "正在更新 %(brand)s", "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.": "您之前曾在 %(host)s 上使用 %(brand)s 並啟用成員列表的延遲載入。在此版本中延遲載入已停用。由於本機快取在這兩個設定間不相容,%(brand)s 必須重新同步您的帳號。", - "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.": "若其他分頁仍有不同版本的 %(brand)s,請將其關閉,因為在同一個主機上同時啟用和停用延遲載入將會發生問題。", "Incompatible local cache": "不相容的本機快取", "Clear cache and resync": "清除快取並重新同步", "Please review and accept the policies of this homeserver:": "請審閱並接受此家伺服器的政策:", From bb6d46f92666b302523b3d849ed3e5b7f9f7c61f Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 15:57:05 -0600 Subject: [PATCH 0870/1504] When the algorithm changes, re-add the filter listener --- src/stores/room-list/RoomListStore2.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 0d1ddfc4ca..75e43b3b57 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -92,8 +92,10 @@ export class RoomListStore2 extends AsyncStore { this._matrixClient = null; this.algorithm.off(LIST_UPDATED_EVENT, this.onAlgorithmListUpdated); + this.algorithm.off(FILTER_CHANGED, this.onAlgorithmListUpdated); this.algorithm = new Algorithm(); this.algorithm.on(LIST_UPDATED_EVENT, this.onAlgorithmListUpdated); + this.algorithm.on(FILTER_CHANGED, this.onAlgorithmListUpdated); } // Public for test usage. Do not call this. From 87120c6c26ae5afe8e48dc93085532c164ae01ae Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 15:58:39 -0600 Subject: [PATCH 0871/1504] Ensure triggered updates get fired for filters in the new room list Fixes https://github.com/vector-im/riot-web/issues/14404 --- src/stores/room-list/RoomListStore2.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 4741e1a30f..38a9509e0c 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -481,8 +481,9 @@ export class RoomListStore2 extends AsyncStore { }; private onAlgorithmFilterUpdated = () => { - // The filter can happen off-cycle, so trigger an update if we need to. - this.updateFn.triggerIfWillMark(); + // The filter can happen off-cycle, so trigger an update. The filter will have + // already caused a mark. + this.updateFn.trigger(); }; /** From 3062d14a783f31211b0d836eeea0847cce7f69ba Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 16:07:24 -0600 Subject: [PATCH 0872/1504] Convert ImportanceAlgorithm over to using NotificationColor instead Fixes https://github.com/vector-im/riot-web/issues/14362 implicitly By re-using constructs we already have, we don't need to invent code which figures it out. --- .../list-ordering/ImportanceAlgorithm.ts | 78 ++++++------------- 1 file changed, 23 insertions(+), 55 deletions(-) diff --git a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts index 88789d3a50..b3f1c2b146 100644 --- a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts @@ -19,47 +19,29 @@ import { Room } from "matrix-js-sdk/src/models/room"; import { RoomUpdateCause, TagID } from "../../models"; import { SortAlgorithm } from "../models"; import { sortRoomsWithAlgorithm } from "../tag-sorting"; -import * as Unread from '../../../../Unread'; import { OrderingAlgorithm } from "./OrderingAlgorithm"; - -/** - * The determined category of a room. - */ -export enum Category { - /** - * The room has unread mentions within. - */ - Red = "RED", - /** - * The room has unread notifications within. Note that these are not unread - * mentions - they are simply messages which the user has asked to cause a - * badge count update or push notification. - */ - Grey = "GREY", - /** - * The room has unread messages within (grey without the badge). - */ - Bold = "BOLD", - /** - * The room has no relevant unread messages within. - */ - Idle = "IDLE", -} +import { NotificationColor } from "../../../notifications/NotificationColor"; +import { RoomNotificationStateStore } from "../../../notifications/RoomNotificationStateStore"; interface ICategorizedRoomMap { // @ts-ignore - TS wants this to be a string, but we know better - [category: Category]: Room[]; + [category: NotificationColor]: Room[]; } interface ICategoryIndex { // @ts-ignore - TS wants this to be a string, but we know better - [category: Category]: number; // integer + [category: NotificationColor]: number; // integer } // Caution: changing this means you'll need to update a bunch of assumptions and // comments! Check the usage of Category carefully to figure out what needs changing // if you're going to change this array's order. -const CATEGORY_ORDER = [Category.Red, Category.Grey, Category.Bold, Category.Idle]; +const CATEGORY_ORDER = [ + NotificationColor.Red, + NotificationColor.Grey, + NotificationColor.Bold, + NotificationColor.None, // idle +]; /** * An implementation of the "importance" algorithm for room list sorting. Where @@ -92,10 +74,10 @@ export class ImportanceAlgorithm extends OrderingAlgorithm { // noinspection JSMethodCanBeStatic private categorizeRooms(rooms: Room[]): ICategorizedRoomMap { const map: ICategorizedRoomMap = { - [Category.Red]: [], - [Category.Grey]: [], - [Category.Bold]: [], - [Category.Idle]: [], + [NotificationColor.Red]: [], + [NotificationColor.Grey]: [], + [NotificationColor.Bold]: [], + [NotificationColor.None]: [], }; for (const room of rooms) { const category = this.getRoomCategory(room); @@ -105,25 +87,11 @@ export class ImportanceAlgorithm extends OrderingAlgorithm { } // noinspection JSMethodCanBeStatic - private getRoomCategory(room: Room): Category { - // Function implementation borrowed from old RoomListStore - - const mentions = room.getUnreadNotificationCount('highlight') > 0; - if (mentions) { - return Category.Red; - } - - let unread = room.getUnreadNotificationCount() > 0; - if (unread) { - return Category.Grey; - } - - unread = Unread.doesRoomHaveUnreadMessages(room); - if (unread) { - return Category.Bold; - } - - return Category.Idle; + private getRoomCategory(room: Room): NotificationColor { + // It's fine for us to call this a lot because it's cached, and we shouldn't be + // wasting anything by doing so as the store holds single references + const state = RoomNotificationStateStore.instance.getRoomState(room, this.tagId); + return state.color; } public async setRooms(rooms: Room[]): Promise { @@ -217,7 +185,7 @@ export class ImportanceAlgorithm extends OrderingAlgorithm { } } - private async sortCategory(category: Category) { + private async sortCategory(category: NotificationColor) { // This should be relatively quick because the room is usually inserted at the top of the // category, and most popular sorting algorithms will deal with trying to keep the active // room at the top/start of the category. For the few algorithms that will have to move the @@ -234,7 +202,7 @@ export class ImportanceAlgorithm extends OrderingAlgorithm { } // noinspection JSMethodCanBeStatic - private getCategoryFromIndices(index: number, indices: ICategoryIndex): Category { + private getCategoryFromIndices(index: number, indices: ICategoryIndex): NotificationColor { for (let i = 0; i < CATEGORY_ORDER.length; i++) { const category = CATEGORY_ORDER[i]; const isLast = i === (CATEGORY_ORDER.length - 1); @@ -250,7 +218,7 @@ export class ImportanceAlgorithm extends OrderingAlgorithm { } // noinspection JSMethodCanBeStatic - private moveRoomIndexes(nRooms: number, fromCategory: Category, toCategory: Category, indices: ICategoryIndex) { + private moveRoomIndexes(nRooms: number, fromCategory: NotificationColor, toCategory: NotificationColor, indices: ICategoryIndex) { // We have to update the index of the category *after* the from/toCategory variables // in order to update the indices correctly. Because the room is moving from/to those // categories, the next category's index will change - not the category we're modifying. @@ -261,7 +229,7 @@ export class ImportanceAlgorithm extends OrderingAlgorithm { this.alterCategoryPositionBy(toCategory, +nRooms, indices); } - private alterCategoryPositionBy(category: Category, n: number, indices: ICategoryIndex) { + private alterCategoryPositionBy(category: NotificationColor, n: number, indices: ICategoryIndex) { // Note: when we alter a category's index, we actually have to modify the ones following // the target and not the target itself. From cfc39dc4a93a62638d0c4f28f13bbebb58f5ff43 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 16:10:05 -0600 Subject: [PATCH 0873/1504] Remove now-dead code from sublist resizing --- src/components/views/rooms/RoomSublist2.tsx | 9 +++--- src/stores/room-list/ListLayout.ts | 33 ++------------------- 2 files changed, 6 insertions(+), 36 deletions(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index bfbdd3a161..c351384be4 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -20,7 +20,7 @@ import * as React from "react"; import { createRef } from "react"; import { Room } from "matrix-js-sdk/src/models/room"; import classNames from 'classnames'; -import {RovingAccessibleButton, RovingTabIndexWrapper} from "../../../accessibility/RovingTabIndex"; +import { RovingAccessibleButton, RovingTabIndexWrapper } from "../../../accessibility/RovingTabIndex"; import { _t } from "../../../languageHandler"; import AccessibleButton from "../../views/elements/AccessibleButton"; import RoomTile2 from "./RoomTile2"; @@ -36,12 +36,12 @@ import RoomListStore from "../../../stores/room-list/RoomListStore2"; import { ListAlgorithm, SortAlgorithm } from "../../../stores/room-list/algorithms/models"; import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import dis from "../../../dispatcher/dispatcher"; +import defaultDispatcher from "../../../dispatcher/dispatcher"; import NotificationBadge from "./NotificationBadge"; import { ListNotificationState } from "../../../stores/notifications/ListNotificationState"; import AccessibleTooltipButton from "../elements/AccessibleTooltipButton"; import { Key } from "../../../Keyboard"; -import defaultDispatcher from "../../../dispatcher/dispatcher"; -import {ActionPayload} from "../../../dispatcher/payloads"; +import { ActionPayload } from "../../../dispatcher/payloads"; import { Enable, Resizable } from "re-resizable"; import { Direction } from "re-resizable/lib/resizer"; import { polyfillTouchEvent } from "../../../@types/polyfill"; @@ -130,8 +130,7 @@ export default class RoomSublist2 extends React.Component { private calculateInitialHeight() { const requestedVisibleTiles = Math.max(Math.floor(this.layout.visibleTiles), this.layout.minVisibleTiles); const tileCount = Math.min(this.numTiles, requestedVisibleTiles); - const height = this.layout.tilesToPixelsWithPadding(tileCount, this.padding); - return height; + return this.layout.tilesToPixelsWithPadding(tileCount, this.padding); } private get padding() { diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index f1900487bc..caf2e92bd1 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -18,11 +18,6 @@ import { TagID } from "./models"; const TILE_HEIGHT_PX = 44; -// this comes from the CSS where the show more button is -// mathematically this percent of a tile when floating. -//const RESIZER_BOX_FACTOR = 0.78; -const RESIZER_BOX_FACTOR = 0; - interface ISerializedListLayout { numTiles: number; showPreviews: boolean; @@ -82,36 +77,12 @@ export class ListLayout { } public get minVisibleTiles(): number { - return 1 + RESIZER_BOX_FACTOR; + return 1; } public get defaultVisibleTiles(): number { // This number is what "feels right", and mostly subject to design's opinion. - return 5 + RESIZER_BOX_FACTOR; - } - - public setVisibleTilesWithin(newVal: number, maxPossible: number) { - maxPossible = maxPossible + RESIZER_BOX_FACTOR; - if (newVal > maxPossible) { - this.visibleTiles = maxPossible; - } else { - this.visibleTiles = newVal; - } - } - - public calculateTilesToPixelsMin(maxTiles: number, n: number, possiblePadding: number): number { - // Only apply the padding if we're about to use maxTiles as we need to - // plan for the padding. If we're using n, the padding is already accounted - // for by the resizing stuff. - let padding = 0; - if (maxTiles < n) { - padding = possiblePadding; - } - return this.tilesToPixels(Math.min(maxTiles, n)) + padding; - } - - public tilesWithResizerBoxFactor(n: number): number { - return n + RESIZER_BOX_FACTOR; + return 5; } public tilesWithPadding(n: number, paddingPx: number): number { From 0e49c4343c07875fa9220dce47e464db34789b44 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 10 Jul 2020 21:59:12 -0600 Subject: [PATCH 0874/1504] Internalize algorithm updates in the new room list store Fixes https://github.com/vector-im/riot-web/issues/14411 The act of setting/changing the algorithm was causing the update function to be marked, meaning we wouldn't trigger an update until something else happened later. To get around this, and still support internal functions spamming calls without multiple updates, we simply move the guts to an internalized function and make the public interface do a trigger. --- src/stores/room-list/RoomListStore2.ts | 16 ++++++++++++---- src/utils/MarkedExecution.ts | 11 ----------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 38a9509e0c..5ba448b93c 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -368,10 +368,14 @@ export class RoomListStore2 extends AsyncStore { } public async setTagSorting(tagId: TagID, sort: SortAlgorithm) { + await this.setAndPersistTagSorting(tagId, sort); + this.updateFn.trigger(); + } + + private async setAndPersistTagSorting(tagId: TagID, sort: SortAlgorithm) { await this.algorithm.setTagSorting(tagId, sort); // TODO: Per-account? https://github.com/vector-im/riot-web/issues/14114 localStorage.setItem(`mx_tagSort_${tagId}`, sort); - this.updateFn.triggerIfWillMark(); } public getTagSorting(tagId: TagID): SortAlgorithm { @@ -407,10 +411,14 @@ export class RoomListStore2 extends AsyncStore { } public async setListOrder(tagId: TagID, order: ListAlgorithm) { + await this.setAndPersistListOrder(tagId, order); + this.updateFn.trigger(); + } + + private async setAndPersistListOrder(tagId: TagID, order: ListAlgorithm) { await this.algorithm.setListOrdering(tagId, order); // TODO: Per-account? https://github.com/vector-im/riot-web/issues/14114 localStorage.setItem(`mx_listOrder_${tagId}`, order); - this.updateFn.triggerIfWillMark(); } public getListOrder(tagId: TagID): ListAlgorithm { @@ -458,10 +466,10 @@ export class RoomListStore2 extends AsyncStore { const listOrder = this.calculateListOrder(tag); if (tagSort !== definedSort) { - await this.setTagSorting(tag, tagSort); + await this.setAndPersistTagSorting(tag, tagSort); } if (listOrder !== definedOrder) { - await this.setListOrder(tag, listOrder); + await this.setAndPersistListOrder(tag, listOrder); } } } diff --git a/src/utils/MarkedExecution.ts b/src/utils/MarkedExecution.ts index de6cf05953..b0b8fdf63d 100644 --- a/src/utils/MarkedExecution.ts +++ b/src/utils/MarkedExecution.ts @@ -53,15 +53,4 @@ export class MarkedExecution { this.reset(); // reset first just in case the fn() causes a trigger() this.fn(); } - - /** - * Triggers the function if a mark() call would mark it. If the function - * has already been marked this will do nothing. - */ - public triggerIfWillMark() { - if (!this.marked) { - this.mark(); - this.trigger(); - } - } } From 213e2df9fced040e4e143dfc32259abecfb9cc33 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 12 Jul 2020 08:49:04 +0100 Subject: [PATCH 0875/1504] Remove redundant scroll-margins and fix RoomTile wrongly scrolling Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/rooms/_RoomTile2.scss | 9 --------- src/components/views/rooms/RoomSublist2.tsx | 10 ++++++++-- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index d2d394e266..8297d1952c 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -21,10 +21,6 @@ limitations under the License. margin-bottom: 4px; padding: 4px; - // allow scrollIntoView to ignore the sticky headers, must match combined height of .mx_RoomSublist2_headerContainer - scroll-margin-top: 32px; - scroll-margin-bottom: 32px; - // The tile is also a flexbox row itself display: flex; @@ -168,11 +164,6 @@ limitations under the License. } } -// do not apply scroll-margin-bottom to the sublist which will not have a sticky header below it -.mx_RoomSublist2:last-child .mx_RoomTile2 { - scroll-margin-bottom: 0; -} - // We use these both in context menus and the room tiles .mx_RoomTile2_iconBell::before { mask-image: url('$(res)/img/feather-customised/bell.svg'); diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index c351384be4..5cb86d4cba 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -17,7 +17,7 @@ limitations under the License. */ import * as React from "react"; -import { createRef } from "react"; +import {createRef, UIEventHandler} from "react"; import { Room } from "matrix-js-sdk/src/models/room"; import classNames from 'classnames'; import { RovingAccessibleButton, RovingTabIndexWrapper } from "../../../accessibility/RovingTabIndex"; @@ -595,6 +595,12 @@ export default class RoomSublist2 extends React.Component { ); } + private onScrollPrevent(e: React.UIEvent) { + // the RoomTile calls scrollIntoView and the browser may scroll a div we do not wish to be scrollable + // this fixes https://github.com/vector-im/riot-web/issues/14413 + (e.target as HTMLDivElement).scrollTop = 0; + } + public render(): React.ReactElement { // TODO: Error boundary: https://github.com/vector-im/riot-web/issues/14185 @@ -704,7 +710,7 @@ export default class RoomSublist2 extends React.Component { className="mx_RoomSublist2_resizeBox" enable={handles} > -
    +
    {visibleTiles}
    {showNButton} From 3f51bb84e128370ac002d54b28ab3ed63d374cb1 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 12 Jul 2020 18:24:28 +0100 Subject: [PATCH 0876/1504] Fix RoomAvatar viewAvatarOnClick to work on actual avatars instead of default ones Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/avatars/RoomAvatar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/avatars/RoomAvatar.tsx b/src/components/views/avatars/RoomAvatar.tsx index 0947157652..907cc9f318 100644 --- a/src/components/views/avatars/RoomAvatar.tsx +++ b/src/components/views/avatars/RoomAvatar.tsx @@ -135,7 +135,7 @@ export default class RoomAvatar extends React.Component { ); } From 71ecd5dc85f794ff7798ee70b32690b199bd0406 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 12 Jul 2020 18:40:24 +0100 Subject: [PATCH 0877/1504] clean-up Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/avatars/RoomAvatar.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/views/avatars/RoomAvatar.tsx b/src/components/views/avatars/RoomAvatar.tsx index 907cc9f318..3317ed3a60 100644 --- a/src/components/views/avatars/RoomAvatar.tsx +++ b/src/components/views/avatars/RoomAvatar.tsx @@ -126,16 +126,16 @@ export default class RoomAvatar extends React.Component { }; public render() { - /*eslint no-unused-vars: ["error", { "ignoreRestSiblings": true }]*/ const {room, oobData, viewAvatarOnClick, ...otherProps} = this.props; const roomName = room ? room.name : oobData.name; return ( - ); } From d253c5883075f0e842e0dca730b4d95ab25f0a96 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 12 Jul 2020 19:06:47 +0100 Subject: [PATCH 0878/1504] Room List v2 Enter in the filter field should select the first result Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/LeftPanel2.tsx | 9 +++++++++ src/components/structures/RoomSearch.tsx | 3 +++ 2 files changed, 12 insertions(+) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index f1f1ffd01f..8ec19ee26b 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -274,6 +274,14 @@ export default class LeftPanel2 extends React.Component { } }; + private onEnter = () => { + const firstRoom = this.listContainerRef.current.querySelector(".mx_RoomTile2"); + if (firstRoom) { + firstRoom.click(); + this.onSearch(""); // clear the search field + } + }; + private onMoveFocus = (up: boolean) => { let element = this.focusedElement; @@ -346,6 +354,7 @@ export default class LeftPanel2 extends React.Component { onQueryUpdate={this.onSearch} isMinimized={this.props.isMinimized} onVerticalArrow={this.onKeyDown} + onEnter={this.onEnter} /> void; isMinimized: boolean; onVerticalArrow(ev: React.KeyboardEvent); + onEnter(ev: React.KeyboardEvent); } interface IState { @@ -115,6 +116,8 @@ export default class RoomSearch extends React.PureComponent { defaultDispatcher.fire(Action.FocusComposer); } else if (ev.key === Key.ARROW_UP || ev.key === Key.ARROW_DOWN) { this.props.onVerticalArrow(ev); + } else if (ev.key === Key.ENTER) { + this.props.onEnter(ev); } }; From c3789245b869e3b9a44273e5da1002cfb5a4ead3 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 12 Jul 2020 19:25:43 +0100 Subject: [PATCH 0879/1504] Be consistent with the at-room pill avatar configurability Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/utils/pillify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/pillify.js b/src/utils/pillify.js index f708ab7770..cb140c61a4 100644 --- a/src/utils/pillify.js +++ b/src/utils/pillify.js @@ -111,7 +111,7 @@ export function pillifyLinks(nodes, mxEvent, pills) { type={Pill.TYPE_AT_ROOM_MENTION} inMessage={true} room={room} - shouldShowPillAvatar={true} + shouldShowPillAvatar={shouldShowPillAvatar} />; ReactDOM.render(pill, pillContainer); From b868617ba3a7dc736f28bc55cfb246aecd69d7e1 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 12 Jul 2020 21:13:28 +0100 Subject: [PATCH 0880/1504] Convert Modal to TypeScript Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/@types/global.d.ts | 2 + src/{Modal.js => Modal.tsx} | 251 ++++++++++++++++++++++-------------- 2 files changed, 157 insertions(+), 96 deletions(-) rename src/{Modal.js => Modal.tsx} (52%) diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index 3f970ea8c3..63c2c54138 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -22,6 +22,7 @@ import DeviceListener from "../DeviceListener"; import { RoomListStore2 } from "../stores/room-list/RoomListStore2"; import { PlatformPeg } from "../PlatformPeg"; import RoomListLayoutStore from "../stores/room-list/RoomListLayoutStore"; +import {ModalManager} from "../Modal"; declare global { interface Window { @@ -37,6 +38,7 @@ declare global { mx_RoomListStore2: RoomListStore2; mx_RoomListLayoutStore: RoomListLayoutStore; mxPlatformPeg: PlatformPeg; + singletonModalManager: ModalManager; // TODO: Remove flag before launch: https://github.com/vector-im/riot-web/issues/14231 mx_QuietRoomListLogging: boolean; diff --git a/src/Modal.js b/src/Modal.tsx similarity index 52% rename from src/Modal.js rename to src/Modal.tsx index 9b9f190d58..3243867555 100644 --- a/src/Modal.js +++ b/src/Modal.tsx @@ -1,5 +1,6 @@ /* Copyright 2015, 2016 OpenMarket Ltd +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. @@ -17,6 +18,8 @@ limitations under the License. import React from 'react'; import ReactDOM from 'react-dom'; +import classNames from 'classnames'; + import Analytics from './Analytics'; import dis from './dispatcher/dispatcher'; import {defer} from './utils/promise'; @@ -25,36 +28,52 @@ import AsyncWrapper from './AsyncWrapper'; const DIALOG_CONTAINER_ID = "mx_Dialog_Container"; const STATIC_DIALOG_CONTAINER_ID = "mx_Dialog_StaticContainer"; -class ModalManager { - constructor() { - this._counter = 0; +interface IModal { + elem: React.ReactNode; + className?: string; + beforeClosePromise?: Promise; + closeReason?: string; + onBeforeClose?(reason?: string): Promise; + onFinished(...args: T): void; + close(...args: T): void; +} - // The modal to prioritise over all others. If this is set, only show - // this modal. Remove all other modals from the stack when this modal - // is closed. - this._priorityModal = null; - // The modal to keep open underneath other modals if possible. Useful - // for cases like Settings where the modal should remain open while the - // user is prompted for more information/errors. - this._staticModal = null; - // A list of the modals we have stacked up, with the most recent at [0] - // Neither the static nor priority modal will be in this list. - this._modals = [ - /* { - elem: React component for this dialog - onFinished: caller-supplied onFinished callback - className: CSS class for the dialog wrapper div - } */ - ]; +interface IHandle { + finished: Promise; + close(...args: T): void; +} - this.onBackgroundClick = this.onBackgroundClick.bind(this); - } +interface IProps { + onFinished(...args: T): void; +} - hasDialogs() { - return this._priorityModal || this._staticModal || this._modals.length > 0; - } +interface IOptions { + onBeforeClose?: IModal["onBeforeClose"]; +} - getOrCreateContainer() { +type ParametersWithoutFirst any> = T extends (a: any, ...args: infer P) => any ? P : never; + +export class ModalManager { + private counter = 0; + // The modal to prioritise over all others. If this is set, only show + // this modal. Remove all other modals from the stack when this modal + // is closed. + private priorityModal: IModal = null; + // The modal to keep open underneath other modals if possible. Useful + // for cases like Settings where the modal should remain open while the + // user is prompted for more information/errors. + private staticModal: IModal = null; + // A list of the modals we have stacked up, with the most recent at [0] + // Neither the static nor priority modal will be in this list. + private modals: IModal[] = [ + /* { + elem: React component for this dialog + onFinished: caller-supplied onFinished callback + className: CSS class for the dialog wrapper div + } */ + ]; + + private static getOrCreateContainer() { let container = document.getElementById(DIALOG_CONTAINER_ID); if (!container) { @@ -66,7 +85,7 @@ class ModalManager { return container; } - getOrCreateStaticContainer() { + private static getOrCreateStaticContainer() { let container = document.getElementById(STATIC_DIALOG_CONTAINER_ID); if (!container) { @@ -78,63 +97,93 @@ class ModalManager { return container; } - createTrackedDialog(analyticsAction, analyticsInfo, ...rest) { + public hasDialogs() { + return this.priorityModal || this.staticModal || this.modals.length > 0; + } + + public createTrackedDialog( + analyticsAction: string, + analyticsInfo: string, + ...rest: Parameters + ) { Analytics.trackEvent('Modal', analyticsAction, analyticsInfo); return this.createDialog(...rest); } - appendTrackedDialog(analyticsAction, analyticsInfo, ...rest) { + public appendTrackedDialog( + analyticsAction: string, + analyticsInfo: string, + ...rest: Parameters + ) { Analytics.trackEvent('Modal', analyticsAction, analyticsInfo); return this.appendDialog(...rest); } - createDialog(Element, ...rest) { + public createDialog(Element: React.ComponentType, ...rest: ParametersWithoutFirst) { return this.createDialogAsync(Promise.resolve(Element), ...rest); } - appendDialog(Element, ...rest) { + public appendDialog(Element: React.ComponentType, ...rest: ParametersWithoutFirst) { return this.appendDialogAsync(Promise.resolve(Element), ...rest); } - createTrackedDialogAsync(analyticsAction, analyticsInfo, ...rest) { + public createTrackedDialogAsync( + analyticsAction: string, + analyticsInfo: string, + ...rest: Parameters + ) { Analytics.trackEvent('Modal', analyticsAction, analyticsInfo); return this.createDialogAsync(...rest); } - appendTrackedDialogAsync(analyticsAction, analyticsInfo, ...rest) { + public appendTrackedDialogAsync( + analyticsAction: string, + analyticsInfo: string, + ...rest: Parameters + ) { Analytics.trackEvent('Modal', analyticsAction, analyticsInfo); return this.appendDialogAsync(...rest); } - _buildModal(prom, props, className, options) { - const modal = {}; + private buildModal( + prom: Promise, + props?: IProps, + className?: string, + options?: IOptions + ) { + const modal: IModal = { + onFinished: props ? props.onFinished : null, + onBeforeClose: options.onBeforeClose, + beforeClosePromise: null, + closeReason: null, + className, + + // these will be set below but we need an object reference to pass to getCloseFn before we can do that + elem: null, + close: null, + }; // never call this from onFinished() otherwise it will loop - const [closeDialog, onFinishedProm] = this._getCloseFn(modal, props); + const [closeDialog, onFinishedProm] = this.getCloseFn(modal, props); // don't attempt to reuse the same AsyncWrapper for different dialogs, // otherwise we'll get confused. - const modalCount = this._counter++; + const modalCount = this.counter++; // FIXME: If a dialog uses getDefaultProps it clobbers the onFinished // property set here so you can't close the dialog from a button click! - modal.elem = ( - - ); - modal.onFinished = props ? props.onFinished : null; - modal.className = className; - modal.onBeforeClose = options.onBeforeClose; - modal.beforeClosePromise = null; + modal.elem = ; modal.close = closeDialog; - modal.closeReason = null; return {modal, closeDialog, onFinishedProm}; } - _getCloseFn(modal, props) { - const deferred = defer(); - return [async (...args) => { + private getCloseFn( + modal: IModal, + props: IProps + ): [IHandle["close"], IHandle["finished"]] { + const deferred = defer(); + return [async (...args: T) => { if (modal.beforeClosePromise) { await modal.beforeClosePromise; } else if (modal.onBeforeClose) { @@ -147,26 +196,26 @@ class ModalManager { } deferred.resolve(args); if (props && props.onFinished) props.onFinished.apply(null, args); - const i = this._modals.indexOf(modal); + const i = this.modals.indexOf(modal); if (i >= 0) { - this._modals.splice(i, 1); + this.modals.splice(i, 1); } - if (this._priorityModal === modal) { - this._priorityModal = null; + if (this.priorityModal === modal) { + this.priorityModal = null; // XXX: This is destructive - this._modals = []; + this.modals = []; } - if (this._staticModal === modal) { - this._staticModal = null; + if (this.staticModal === modal) { + this.staticModal = null; // XXX: This is destructive - this._modals = []; + this.modals = []; } - this._reRender(); + this.reRender(); }, deferred.promise]; } @@ -207,38 +256,49 @@ class ModalManager { * @param {onBeforeClose} options.onBeforeClose a callback to decide whether to close the dialog * @returns {object} Object with 'close' parameter being a function that will close the dialog */ - createDialogAsync(prom, props, className, isPriorityModal, isStaticModal, options = {}) { - const {modal, closeDialog, onFinishedProm} = this._buildModal(prom, props, className, options); + private createDialogAsync( + prom: Promise, + props?: IProps & React.ComponentProps, + className?: string, + isPriorityModal = false, + isStaticModal = false, + options: IOptions = {} + ): IHandle { + const {modal, closeDialog, onFinishedProm} = this.buildModal(prom, props, className, options); if (isPriorityModal) { // XXX: This is destructive - this._priorityModal = modal; + this.priorityModal = modal; } else if (isStaticModal) { // This is intentionally destructive - this._staticModal = modal; + this.staticModal = modal; } else { - this._modals.unshift(modal); + this.modals.unshift(modal); } - this._reRender(); + this.reRender(); return { close: closeDialog, finished: onFinishedProm, }; } - appendDialogAsync(prom, props, className) { - const {modal, closeDialog, onFinishedProm} = this._buildModal(prom, props, className, {}); + private appendDialogAsync( + prom: Promise, + props?: IProps, + className?: string + ): IHandle { + const {modal, closeDialog, onFinishedProm} = this.buildModal(prom, props, className, {}); - this._modals.push(modal); - this._reRender(); + this.modals.push(modal); + this.reRender(); return { close: closeDialog, finished: onFinishedProm, }; } - onBackgroundClick() { - const modal = this._getCurrentModal(); + private onBackgroundClick = () => { + const modal = this.getCurrentModal(); if (!modal) { return; } @@ -249,21 +309,21 @@ class ModalManager { modal.closeReason = "backgroundClick"; modal.close(); modal.closeReason = null; + }; + + private getCurrentModal(): IModal { + return this.priorityModal ? this.priorityModal : (this.modals[0] || this.staticModal); } - _getCurrentModal() { - return this._priorityModal ? this._priorityModal : (this._modals[0] || this._staticModal); - } - - _reRender() { - if (this._modals.length === 0 && !this._priorityModal && !this._staticModal) { + private reRender() { + if (this.modals.length === 0 && !this.priorityModal && !this.staticModal) { // If there is no modal to render, make all of Riot available // to screen reader users again dis.dispatch({ action: 'aria_unhide_main_app', }); - ReactDOM.unmountComponentAtNode(this.getOrCreateContainer()); - ReactDOM.unmountComponentAtNode(this.getOrCreateStaticContainer()); + ReactDOM.unmountComponentAtNode(ModalManager.getOrCreateContainer()); + ReactDOM.unmountComponentAtNode(ModalManager.getOrCreateStaticContainer()); return; } @@ -274,49 +334,48 @@ class ModalManager { action: 'aria_hide_main_app', }); - if (this._staticModal) { - const classes = "mx_Dialog_wrapper mx_Dialog_staticWrapper " - + (this._staticModal.className ? this._staticModal.className : ''); + if (this.staticModal) { + const classes = classNames("mx_Dialog_wrapper mx_Dialog_staticWrapper", this.staticModal.className); const staticDialog = (
    - { this._staticModal.elem } + { this.staticModal.elem }
    -
    +
    ); - ReactDOM.render(staticDialog, this.getOrCreateStaticContainer()); + ReactDOM.render(staticDialog, ModalManager.getOrCreateStaticContainer()); } else { // This is safe to call repeatedly if we happen to do that - ReactDOM.unmountComponentAtNode(this.getOrCreateStaticContainer()); + ReactDOM.unmountComponentAtNode(ModalManager.getOrCreateStaticContainer()); } - const modal = this._getCurrentModal(); - if (modal !== this._staticModal) { - const classes = "mx_Dialog_wrapper " - + (this._staticModal ? "mx_Dialog_wrapperWithStaticUnder " : '') - + (modal.className ? modal.className : ''); + const modal = this.getCurrentModal(); + if (modal !== this.staticModal) { + const classes = classNames("mx_Dialog_wrapper", modal.className, { + mx_Dialog_wrapperWithStaticUnder: this.staticModal, + }); const dialog = (
    {modal.elem}
    -
    +
    ); - ReactDOM.render(dialog, this.getOrCreateContainer()); + ReactDOM.render(dialog, ModalManager.getOrCreateContainer()); } else { // This is safe to call repeatedly if we happen to do that - ReactDOM.unmountComponentAtNode(this.getOrCreateContainer()); + ReactDOM.unmountComponentAtNode(ModalManager.getOrCreateContainer()); } } } -if (!global.singletonModalManager) { - global.singletonModalManager = new ModalManager(); +if (!window.singletonModalManager) { + window.singletonModalManager = new ModalManager(); } -export default global.singletonModalManager; +export default window.singletonModalManager; From 004d954a5b5ec625467feb02deed381fa6811f6d Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Sun, 12 Jul 2020 21:17:51 +0100 Subject: [PATCH 0881/1504] remove redundant comment Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/Modal.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/Modal.tsx b/src/Modal.tsx index 3243867555..8e0bff03e7 100644 --- a/src/Modal.tsx +++ b/src/Modal.tsx @@ -65,13 +65,7 @@ export class ModalManager { private staticModal: IModal = null; // A list of the modals we have stacked up, with the most recent at [0] // Neither the static nor priority modal will be in this list. - private modals: IModal[] = [ - /* { - elem: React component for this dialog - onFinished: caller-supplied onFinished callback - className: CSS class for the dialog wrapper div - } */ - ]; + private modals: IModal[] = []; private static getOrCreateContainer() { let container = document.getElementById(DIALOG_CONTAINER_ID); From 209c35013232f3e430d3fa45d7b163179dfe9e2e Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 13 Jul 2020 00:19:15 +0100 Subject: [PATCH 0882/1504] Fix typing Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/ContentMessages.tsx | 12 ++++++------ src/Modal.tsx | 40 ++++++++++++++++++++++++---------------- src/SlashCommands.tsx | 12 +++++++----- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/src/ContentMessages.tsx b/src/ContentMessages.tsx index 25445b1c74..afb3081448 100644 --- a/src/ContentMessages.tsx +++ b/src/ContentMessages.tsx @@ -386,7 +386,7 @@ export default class ContentMessages { const isQuoting = Boolean(RoomViewStore.getQuotingEvent()); if (isQuoting) { const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); - const {finished} = Modal.createTrackedDialog('Upload Reply Warning', '', QuestionDialog, { + const {finished} = Modal.createTrackedDialog<[boolean]>('Upload Reply Warning', '', QuestionDialog, { title: _t('Replying With Files'), description: (
    {_t( @@ -397,7 +397,7 @@ export default class ContentMessages { hasCancelButton: true, button: _t("Continue"), }); - const [shouldUpload]: [boolean] = await finished; + const [shouldUpload] = await finished; if (!shouldUpload) return; } @@ -420,12 +420,12 @@ export default class ContentMessages { if (tooBigFiles.length > 0) { const UploadFailureDialog = sdk.getComponent("dialogs.UploadFailureDialog"); - const {finished} = Modal.createTrackedDialog('Upload Failure', '', UploadFailureDialog, { + const {finished} = Modal.createTrackedDialog<[boolean]>('Upload Failure', '', UploadFailureDialog, { badFiles: tooBigFiles, totalFiles: files.length, contentMessages: this, }); - const [shouldContinue]: [boolean] = await finished; + const [shouldContinue] = await finished; if (!shouldContinue) return; } @@ -437,12 +437,12 @@ export default class ContentMessages { for (let i = 0; i < okFiles.length; ++i) { const file = okFiles[i]; if (!uploadAll) { - const {finished} = Modal.createTrackedDialog('Upload Files confirmation', '', UploadConfirmDialog, { + const {finished} = Modal.createTrackedDialog<[boolean, boolean]>('Upload Files confirmation', '', UploadConfirmDialog, { file, currentIndex: i, totalFiles: okFiles.length, }); - const [shouldContinue, shouldUploadAll]: [boolean, boolean] = await finished; + const [shouldContinue, shouldUploadAll] = await finished; if (!shouldContinue) break; if (shouldUploadAll) { uploadAll = true; diff --git a/src/Modal.tsx b/src/Modal.tsx index 8e0bff03e7..b744dbacf4 100644 --- a/src/Modal.tsx +++ b/src/Modal.tsx @@ -44,7 +44,9 @@ interface IHandle { } interface IProps { - onFinished(...args: T): void; + onFinished?(...args: T): void; + // TODO improve typing here once all Modals are TS and we can exhaustively check the props + [key: string]: any; } interface IOptions { @@ -95,48 +97,54 @@ export class ModalManager { return this.priorityModal || this.staticModal || this.modals.length > 0; } - public createTrackedDialog( + public createTrackedDialog( analyticsAction: string, analyticsInfo: string, ...rest: Parameters ) { Analytics.trackEvent('Modal', analyticsAction, analyticsInfo); - return this.createDialog(...rest); + return this.createDialog(...rest); } - public appendTrackedDialog( + public appendTrackedDialog( analyticsAction: string, analyticsInfo: string, ...rest: Parameters ) { Analytics.trackEvent('Modal', analyticsAction, analyticsInfo); - return this.appendDialog(...rest); + return this.appendDialog(...rest); } - public createDialog(Element: React.ComponentType, ...rest: ParametersWithoutFirst) { - return this.createDialogAsync(Promise.resolve(Element), ...rest); + public createDialog( + Element: React.ComponentType, + ...rest: ParametersWithoutFirst + ) { + return this.createDialogAsync(Promise.resolve(Element), ...rest); } - public appendDialog(Element: React.ComponentType, ...rest: ParametersWithoutFirst) { - return this.appendDialogAsync(Promise.resolve(Element), ...rest); + public appendDialog( + Element: React.ComponentType, + ...rest: ParametersWithoutFirst + ) { + return this.appendDialogAsync(Promise.resolve(Element), ...rest); } - public createTrackedDialogAsync( + public createTrackedDialogAsync( analyticsAction: string, analyticsInfo: string, ...rest: Parameters ) { Analytics.trackEvent('Modal', analyticsAction, analyticsInfo); - return this.createDialogAsync(...rest); + return this.createDialogAsync(...rest); } - public appendTrackedDialogAsync( + public appendTrackedDialogAsync( analyticsAction: string, analyticsInfo: string, ...rest: Parameters ) { Analytics.trackEvent('Modal', analyticsAction, analyticsInfo); - return this.appendDialogAsync(...rest); + return this.appendDialogAsync(...rest); } private buildModal( @@ -250,9 +258,9 @@ export class ModalManager { * @param {onBeforeClose} options.onBeforeClose a callback to decide whether to close the dialog * @returns {object} Object with 'close' parameter being a function that will close the dialog */ - private createDialogAsync( - prom: Promise, - props?: IProps & React.ComponentProps, + private createDialogAsync( + prom: Promise, + props?: IProps, className?: string, isPriorityModal = false, isStaticModal = false, diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index f667c47b3c..f45c3b5471 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -400,14 +400,16 @@ export const Commands = [ // If we need an identity server but don't have one, things // get a bit more complex here, but we try to show something // meaningful. - let finished = Promise.resolve(); + let prom = Promise.resolve(); if ( getAddressType(address) === 'email' && !MatrixClientPeg.get().getIdentityServerUrl() ) { const defaultIdentityServerUrl = getDefaultIdentityServerUrl(); if (defaultIdentityServerUrl) { - ({ finished } = Modal.createTrackedDialog('Slash Commands', 'Identity server', + const { finished } = Modal.createTrackedDialog<[boolean]>( + 'Slash Commands', + 'Identity server', QuestionDialog, { title: _t("Use an identity server"), description:

    {_t( @@ -420,9 +422,9 @@ export const Commands = [ )}

    , button: _t("Continue"), }, - )); + ); - finished = finished.then(([useDefault]: any) => { + prom = finished.then(([useDefault]) => { if (useDefault) { useDefaultIdentityServer(); return; @@ -434,7 +436,7 @@ export const Commands = [ } } const inviter = new MultiInviter(roomId); - return success(finished.then(() => { + return success(prom.then(() => { return inviter.invite([address]); }).then(() => { if (inviter.getCompletionState(address) !== "invited") { From 3e2280a6f46d1af601b069f4f551db6c256e195a Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Mon, 13 Jul 2020 15:43:34 +0100 Subject: [PATCH 0883/1504] Stop classname from overwritting baseavatar's --- src/components/views/avatars/BaseAvatar.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/views/avatars/BaseAvatar.tsx b/src/components/views/avatars/BaseAvatar.tsx index aa2c0ea954..7f30a7a377 100644 --- a/src/components/views/avatars/BaseAvatar.tsx +++ b/src/components/views/avatars/BaseAvatar.tsx @@ -99,6 +99,7 @@ const BaseAvatar = (props: IProps) => { defaultToInitialLetter = true, onClick, inputRef, + className, ...otherProps } = props; @@ -138,7 +139,7 @@ const BaseAvatar = (props: IProps) => { @@ -149,7 +150,7 @@ const BaseAvatar = (props: IProps) => { } else { return ( { if (onClick !== null) { return ( { } else { return ( Date: Mon, 13 Jul 2020 16:11:21 +0100 Subject: [PATCH 0884/1504] Fix badges for font size 20 --- res/css/views/rooms/_NotificationBadge.scss | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/res/css/views/rooms/_NotificationBadge.scss b/res/css/views/rooms/_NotificationBadge.scss index 521f1dfc20..0e6d442cc1 100644 --- a/res/css/views/rooms/_NotificationBadge.scss +++ b/res/css/views/rooms/_NotificationBadge.scss @@ -48,15 +48,15 @@ limitations under the License. } &.mx_NotificationBadge_2char { - width: 16px; - height: 16px; - border-radius: 16px; + width: $font-16px; + height: $font-16px; + border-radius: $font-16px; } &.mx_NotificationBadge_3char { - width: 26px; - height: 16px; - border-radius: 16px; + width: $font-26px; + height: $font-16px; + border-radius: $font-16px; } // The following is the floating badge From 5bee9487176f2a1804413b94cf70c98749b301e1 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 13 Jul 2020 16:35:03 +0100 Subject: [PATCH 0885/1504] Fix room tile context menu for Historical rooms Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/MatrixChat.tsx | 21 +++++++++++++++++- src/components/structures/RoomView.js | 12 +++------- src/components/views/rooms/RoomTile2.tsx | 28 ++++++++++++++++++++++-- 3 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 89ee1bc22d..7b439d2303 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -50,7 +50,7 @@ import PageTypes from '../../PageTypes'; import { getHomePageUrl } from '../../utils/pages'; import createRoom from "../../createRoom"; -import { _t, getCurrentLanguage } from '../../languageHandler'; +import {_t, _td, getCurrentLanguage} from '../../languageHandler'; import SettingsStore, { SettingLevel } from "../../settings/SettingsStore"; import ThemeController from "../../settings/controllers/ThemeController"; import { startAnyRegistrationFlow } from "../../Registration.js"; @@ -554,6 +554,9 @@ export default class MatrixChat extends React.PureComponent { case 'leave_room': this.leaveRoom(payload.room_id); break; + case 'forget_room': + this.forgetRoom(payload.room_id); + break; case 'reject_invite': Modal.createTrackedDialog('Reject invitation', '', QuestionDialog, { title: _t('Reject invitation'), @@ -1124,6 +1127,22 @@ export default class MatrixChat extends React.PureComponent { }); } + private forgetRoom(roomId: string) { + const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); + MatrixClientPeg.get().forget(roomId).then(() => { + // Switch to another room view if we're currently viewing the historical room + if (this.state.currentRoomId === roomId) { + dis.dispatch({ action: "view_next_room" }); + } + }, function(err) { + const errCode = err.errcode || _td("unknown error code"); + Modal.createTrackedDialog("Failed to forget room", '', ErrorDialog, { + title: _t("Failed to forget room %(errCode)s", {errCode}), + description: ((err && err.message) ? err.message : _t("Operation failed")), + }); + }); + } + /** * Starts a chat with the welcome user, if the user doesn't already have one * @returns {string} The room ID of the new room, or null if no room was created diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index a9f75ce632..197acca599 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -1380,15 +1380,9 @@ export default createReactClass({ }, onForgetClick: function() { - this.context.forget(this.state.room.roomId).then(function() { - dis.dispatch({ action: 'view_next_room' }); - }, function(err) { - const errCode = err.errcode || _t("unknown error code"); - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); - Modal.createTrackedDialog('Failed to forget room', '', ErrorDialog, { - title: _t("Error"), - description: _t("Failed to forget room %(errCode)s", { errCode: errCode }), - }); + dis.dispatch({ + action: 'forget_room', + room_id: this.state.room.roomId, }); }, diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index ed188e996b..ca2f8865f9 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -276,6 +276,17 @@ export default class RoomTile2 extends React.Component { this.setState({generalMenuPosition: null}); // hide the menu }; + private onForgetRoomClick = (ev: ButtonEvent) => { + ev.preventDefault(); + ev.stopPropagation(); + + dis.dispatch({ + action: 'forget_room', + room_id: this.props.room.roomId, + }); + this.setState({generalMenuPosition: null}); // hide the menu + }; + private onOpenRoomSettings = (ev: ButtonEvent) => { ev.preventDefault(); ev.stopPropagation(); @@ -315,7 +326,7 @@ export default class RoomTile2 extends React.Component { private onClickMute = ev => this.saveNotifState(ev, MUTE); private renderNotificationsMenu(isActive: boolean): React.ReactElement { - if (MatrixClientPeg.get().isGuest() || !this.showContextMenu) { + if (MatrixClientPeg.get().isGuest() || this.props.tag === DefaultTagID.Archived || !this.showContextMenu) { // the menu makes no sense in these cases so do not show one return null; } @@ -397,7 +408,20 @@ export default class RoomTile2 extends React.Component { const favouriteLabel = isFavorite ? _t("Favourited") : _t("Favourite"); let contextMenu = null; - if (this.state.generalMenuPosition) { + if (this.state.generalMenuPosition && this.props.tag === DefaultTagID.Archived) { + contextMenu = ( + +
    +
    + + + {_t("Forget Room")} + +
    +
    +
    + ); + } else if (this.state.generalMenuPosition) { contextMenu = (
    From b3c3ef594edc9f2047e4caeb23e34f2a43f877cd Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 13 Jul 2020 16:39:59 +0100 Subject: [PATCH 0886/1504] i18n Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/i18n/strings/en_EN.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index fb97bfa26c..c8d311f690 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1233,6 +1233,7 @@ "Favourited": "Favourited", "Favourite": "Favourite", "Leave Room": "Leave Room", + "Forget Room": "Forget Room", "Room options": "Room options", "Add a topic": "Add a topic", "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.", From 9a3744ebb25af6f0cb5af007112ba851c33ea51c Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 13 Jul 2020 09:54:15 -0600 Subject: [PATCH 0887/1504] Fix default sorting mechanics for new room list Fixes https://github.com/vector-im/riot-web/issues/14445 --- src/stores/room-list/RoomListStore2.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 8686a3a054..f3a77e765b 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -30,7 +30,6 @@ import { TagWatcher } from "./TagWatcher"; import RoomViewStore from "../RoomViewStore"; import { Algorithm, LIST_UPDATED_EVENT } from "./algorithms/Algorithm"; import { EffectiveMembership, getEffectiveMembership } from "./membership"; -import { ListLayout } from "./ListLayout"; import { isNullOrUndefined } from "matrix-js-sdk/src/utils"; import RoomListLayoutStore from "./RoomListLayoutStore"; import { MarkedExecution } from "../../utils/MarkedExecution"; @@ -425,7 +424,8 @@ export class RoomListStore2 extends AsyncStore { // logic must match calculateListOrder private calculateTagSorting(tagId: TagID): SortAlgorithm { - const defaultSort = SortAlgorithm.Alphabetic; + const isDefaultRecent = tagId === DefaultTagID.Invite || tagId === DefaultTagID.DM; + const defaultSort = isDefaultRecent ? SortAlgorithm.Recent : SortAlgorithm.Alphabetic; const settingAlphabetical = SettingsStore.getValue("RoomList.orderAlphabetically", null, true); const definedSort = this.getTagSorting(tagId); const storedSort = this.getStoredTagSorting(tagId); From 3060cdf9345f6ed47fe41aa78e7a79b9fe98e95a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 13 Jul 2020 17:01:50 +0100 Subject: [PATCH 0888/1504] Iterate PR Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/MatrixChat.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 7b439d2303..fc918521c2 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -74,6 +74,7 @@ import { } from "../../toasts/AnalyticsToast"; import {showToast as showNotificationsToast} from "../../toasts/DesktopNotificationsToast"; import { OpenToTabPayload } from "../../dispatcher/payloads/OpenToTabPayload"; +import ErrorDialog from "../views/dialogs/ErrorDialog"; /** constants for MatrixChat.state.view */ export enum Views { @@ -460,7 +461,6 @@ export default class MatrixChat extends React.PureComponent { onAction = (payload) => { // console.log(`MatrixClientPeg.onAction: ${payload.action}`); - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); // Start the onboarding process for certain actions @@ -1063,7 +1063,6 @@ export default class MatrixChat extends React.PureComponent { private leaveRoom(roomId: string) { const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); const roomToLeave = MatrixClientPeg.get().getRoom(roomId); const warnings = this.leaveRoomWarnings(roomId); @@ -1128,13 +1127,12 @@ export default class MatrixChat extends React.PureComponent { } private forgetRoom(roomId: string) { - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); MatrixClientPeg.get().forget(roomId).then(() => { // Switch to another room view if we're currently viewing the historical room if (this.state.currentRoomId === roomId) { dis.dispatch({ action: "view_next_room" }); } - }, function(err) { + }).catch((err) => { const errCode = err.errcode || _td("unknown error code"); Modal.createTrackedDialog("Failed to forget room", '', ErrorDialog, { title: _t("Failed to forget room %(errCode)s", {errCode}), @@ -1391,7 +1389,6 @@ export default class MatrixChat extends React.PureComponent { return; } - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); Modal.createTrackedDialog('Signed out', '', ErrorDialog, { title: _t('Signed Out'), description: _t('For security, this session has been signed out. Please sign in again.'), @@ -1461,7 +1458,6 @@ export default class MatrixChat extends React.PureComponent { } }); cli.on("crypto.warning", (type) => { - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); switch (type) { case 'CRYPTO_WARNING_OLD_VERSION_DETECTED': Modal.createTrackedDialog('Crypto migrated', '', ErrorDialog, { From 40ab3e23c6eff9921fbec197f13c3cb9c8d51d87 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 13 Jul 2020 10:09:46 -0600 Subject: [PATCH 0889/1504] Add a null guard on the client --- .../room-list/algorithms/tag-sorting/RecentAlgorithm.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm.ts b/src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm.ts index e7ca94ed95..154fd40b69 100644 --- a/src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm.ts +++ b/src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm.ts @@ -38,7 +38,11 @@ export class RecentAlgorithm implements IAlgorithm { // actually changed (probably needs to be done higher up?) then we could do an // insertion sort or similar on the limited set of changes. - const myUserId = MatrixClientPeg.get().getUserId(); + // TODO: Don't assume we're using the same client as the peg + let myUserId = ''; + if (MatrixClientPeg.get()) { + myUserId = MatrixClientPeg.get().getUserId(); + } const tsCache: { [roomId: string]: number } = {}; const getLastTs = (r: Room) => { @@ -68,7 +72,6 @@ export class RecentAlgorithm implements IAlgorithm { const ev = r.timeline[i]; if (!ev.getTs()) continue; // skip events that don't have timestamps (tests only?) - // TODO: Don't assume we're using the same client as the peg if (ev.getSender() === myUserId || Unread.eventTriggersUnreadCount(ev)) { return ev.getTs(); } From fd8f43e245269f16c86d73039a6b3e57608c8d68 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 13 Jul 2020 17:17:05 +0100 Subject: [PATCH 0890/1504] Fix room sub list header collapse/jump interactions on bottom-most sublist Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomSublist2.tsx | 26 ++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 3623b8d48d..c22e6cd807 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -321,25 +321,29 @@ export default class RoomSublist2 extends React.Component { } }; - private onHeaderClick = (ev: React.MouseEvent) => { - let target = ev.target as HTMLDivElement; - if (!target.classList.contains('mx_RoomSublist2_headerText')) { - // If we don't have the headerText class, the user clicked the span in the headerText. - target = target.parentElement as HTMLDivElement; - } - - const possibleSticky = target.parentElement; + private onHeaderClick = () => { + const possibleSticky = this.headerButton.current.parentElement; const sublist = possibleSticky.parentElement.parentElement; const list = sublist.parentElement.parentElement; - // the scrollTop is capped at the height of the header in LeftPanel2 + // the scrollTop is capped at the height of the header in LeftPanel2, the top header is always sticky const isAtTop = list.scrollTop <= HEADER_HEIGHT; - const isSticky = possibleSticky.classList.contains('mx_RoomSublist2_headerContainer_sticky'); - if (isSticky && !isAtTop) { + const isAtBottom = list.scrollTop >= list.scrollHeight - list.offsetHeight; + const isStickyTop = possibleSticky.classList.contains('mx_RoomSublist2_headerContainer_stickyTop'); + const isStickyBottom = possibleSticky.classList.contains('mx_RoomSublist2_headerContainer_stickyBottom'); + + if ((isStickyBottom && !isAtBottom) || (isStickyTop && !isAtTop)) { // is sticky - jump to list sublist.scrollIntoView({behavior: 'smooth'}); } else { // on screen - toggle collapse + const isExpanded = this.state.isExpanded; this.toggleCollapsed(); + // if the bottom list is collapsed then scroll it in so it doesn't expand off screen + if (!isExpanded && isStickyBottom) { + setImmediate(() => { + sublist.scrollIntoView({behavior: 'smooth'}); + }); + } } }; From 02b27086da4db4f386b69ae1aae9f3b9a4ffbece Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 13 Jul 2020 14:52:50 +0200 Subject: [PATCH 0891/1504] swap search field and breadcrumbs --- res/css/structures/_LeftPanel2.scss | 43 +++++++++++------------- src/components/structures/LeftPanel2.tsx | 21 ++++++------ 2 files changed, 31 insertions(+), 33 deletions(-) diff --git a/res/css/structures/_LeftPanel2.scss b/res/css/structures/_LeftPanel2.scss index 2724be4e3d..96ac5831dc 100644 --- a/res/css/structures/_LeftPanel2.scss +++ b/res/css/structures/_LeftPanel2.scss @@ -64,33 +64,30 @@ $tagPanelWidth: 56px; // only applies in this file, used for calculations // Create another flexbox column for the rows to stack within display: flex; flex-direction: column; + } - // This is basically just breadcrumbs. The row above that is handled by the UserMenu - .mx_LeftPanel2_headerRow { - // Create yet another flexbox, this time within the row, to ensure items stay - // aligned correctly. This is also a row-based flexbox. - display: flex; - align-items: center; + .mx_LeftPanel2_breadcrumbsContainer { + width: 100%; + overflow-y: hidden; + overflow-x: scroll; + margin-top: 20px; + padding-bottom: 2px; + flex: 0 0 auto; + // Create yet another flexbox, this time within the row, to ensure items stay + // aligned correctly. This is also a row-based flexbox. + display: flex; + align-items: center; + + &.mx_IndicatorScrollbar_leftOverflow { + mask-image: linear-gradient(90deg, transparent, black 10%); } - .mx_LeftPanel2_breadcrumbsContainer { - width: 100%; - overflow-y: hidden; - overflow-x: scroll; - margin-top: 20px; - padding-bottom: 2px; + &.mx_IndicatorScrollbar_rightOverflow { + mask-image: linear-gradient(90deg, black, black 90%, transparent); + } - &.mx_IndicatorScrollbar_leftOverflow { - mask-image: linear-gradient(90deg, transparent, black 10%); - } - - &.mx_IndicatorScrollbar_rightOverflow { - mask-image: linear-gradient(90deg, black, black 90%, transparent); - } - - &.mx_IndicatorScrollbar_rightOverflow.mx_IndicatorScrollbar_leftOverflow { - mask-image: linear-gradient(90deg, transparent, black 10%, black 90%, transparent); - } + &.mx_IndicatorScrollbar_rightOverflow.mx_IndicatorScrollbar_leftOverflow { + mask-image: linear-gradient(90deg, transparent, black 10%, black 90%, transparent); } } diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index f1f1ffd01f..1f681c54c4 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -314,24 +314,24 @@ export default class LeftPanel2 extends React.Component { }; private renderHeader(): React.ReactNode { - let breadcrumbs; + return ( +
    + +
    + ); + } + + private renderBreadcrumbs(): React.ReactNode { if (this.state.showBreadcrumbs && !this.props.isMinimized) { - breadcrumbs = ( + return ( ); } - - return ( -
    - - {breadcrumbs} -
    - ); } private renderSearchExplore(): React.ReactNode { @@ -393,6 +393,7 @@ export default class LeftPanel2 extends React.Component {
    { _t(customVariables[row[0]].expl) }{_t( + customVariables[row[0]].expl, + customVariables[row[0]].getTextVariables ? + customVariables[row[0]].getTextVariables() : + null, + )}{ row[1] }